Stylish Icon Button
A circular icon button rendered on an outlined surface with a subtle shadow. Supports an active state that inverts the color scheme to primary/onPrimary, suitable for toggle-style controls.
When active is true, the container defaults to MaterialTheme.colorScheme.primary and the content color to onPrimary. When inactive, the container defaults to surfaceContainerHighest and the content to onSurfaceVariant. Explicit containerColor / contentColor overrides always win. When enabled is false, the shadow elevation drops to zero, the content is dimmed to 38 % opacity, the button is announced as disabled via semantics, and the inner IconButton rejects clicks. When enabled, a Material-style state layer (see Modifier.stylishStateLayer) darkens the surface on hover and press, and a primary-colored focus ring (see Modifier.stylishFocusRing) is drawn while the button holds keyboard focus.
Parameters
Icon drawn inside the button when iconContent is null.
Accessibility label for imageVector. Defaults to null (no label); provide one whenever the action is not otherwise described on screen.
Called when the button is tapped.
When false, the button ignores pointer input, the shadow elevation is removed, the content is dimmed to 38 % opacity, and the button is announced as disabled.
When true, the button renders in the primary color scheme to indicate a selected/toggled state.
Background color override. When null, resolved from active (see above).
Shape of the surface. Defaults to CircleShape.
Border stroke drawn around the surface. Defaults to a hairline of StylishTheme.dimensions.outlineWidth using MaterialTheme.colorScheme.outlineVariant. Pass null for no border.
Minimum width of the tappable surface. Defaults to DefaultStylishDimensions.iconButtonMinSize.
Minimum height of the tappable surface. Defaults to DefaultStylishDimensions.iconButtonMinSize.
The MutableInteractionSource for the button, used to observe press/focus/hover interactions. When null, an internal one is remembered.
Optional slot that replaces the default Icon. When null (default), imageVector and contentDescription are used instead. When provided, contentColor is not applied automatically — the slot is responsible for its own tinting.