Package-level declarations
IconButtons take supplementary actions with a single tap. They're used when a compact button is required, such as in a toolbar or image list.
Styles
Icon buttons come in various styles:
Filled
Tinted
Outlined
Contrast
Ghost
| Enabled | Disabled | Shapes |
|---|---|---|
Sizes
Icon buttons come in 3 sizes IconButtonSize:
small - 32.dp (however, the minimum touch size is applied and is 44.dp)
medium - 44.dp (default)
large - 56.dp
The content icon is 16.dp for IconButtonSize.Small and IconButtonSize.Medium, and 24.dp for IconButtonSize.Large
Shapes
Icon buttons come in 3 shapes ButtonShape:
Square
Rounded (default)
Pill
The buttons have an loading state that can be used to indicate that the button is loading some data and show/hide an indeterminate circular progress indicator on the start of the button.

Intents
Icon Buttons support all intents:
Support (default)
Accent
Main
Success
Alert
Danger
Info
Neutral
Surface
Ai
IconButtonFilled
Filled icon buttons are the standard for most use cases. The filled styling places the most emphasis and should be used for important actions.
fun IconButtonFilled(
icon: SparkIcon,
onClick: () -> Unit,
)IconButtonOutlined
Outlined icon buttons are used for support actions. The outlined styling places less emphasis on these actions that are important but not the main ones.
Be aware that it's not advised to use it on top of images since it will be hard to see.
fun IconButtonOutlined(
icon: SparkIcon,
onClick: () -> Unit,
)IconButtonTinted
Tinted icon buttons are medium-emphasis buttons that is an alternative middle ground between default filled icon buttons and outlined icon buttons. They can be used in contexts where lower-priority icon button requires slightly more emphasis than an outline would give.
fun IconButtonTinted(
icon: SparkIcon,
onClick: () -> Unit,
)IconButtonGhost
Ghost icon buttons are used for the lowest priority actions, especially when presenting multiple options.
Ghost icon buttons can be placed on a variety of backgrounds. Until the button is interacted with, its container isn't visible. This button style is often used inside other components like snackbars, dialogs, and cards.
fun IconButtonGhost(
icon: SparkIcon,
onClick: () -> Unit,
)IconButtonContrast
Contrast icon buttons are used for the high to mid priority actions when the background is dark like on an image or a video.
fun IconButtonContrast(
icon: SparkIcon,
onClick: () -> Unit,
)Buttons help people take action, such as sending an email, sharing a document, or liking a comment. Buttons communicate actions that users can take. They are typically placed throughout your UI, in places like:
Dialogs
Modal windows
Forms
Cards
Toolbars
Button API
Buttons are accessed as extension functions on the Button object. Each variant accepts either a text: String parameter or a content: @Composable RowScope.() -> Unit slot for custom content.
Button.Primary(
onClick = { /*Click event*/ },
text = "Main",
)All variants share these common parameters:
| Parameter | Description |
|---|---|
onClick | Called when the user clicks the button |
modifier | Modifier applied to the button |
size | Button size (ButtonSize.Small, Medium, Large) |
enabled | Controls the enabled state |
icon | Optional icon at the start or end of the button |
iconSide | Side where the icon is displayed (IconSide.START or END) |
isLoading | Shows a circular progress indicator |
interactionSource | Stream of interactions for custom appearance |
The buttons have a loading state that can be used to indicate that the button is loading some data and show/hide an indeterminate circular progress indicator on the start of the button.

Variants
| Variant | Purpose |
|---|---|
Button.Primary | Used once per view (not including a modal dialog), these buttons have the most emphasis. It should never be doubled up to sit side by side. Used when an action is clearly more important than others and you need to draw attention to it. |
Button.Secondary | The standard button for most use cases. The filled styling places less emphasis than Primary but still signals an important action. |
Button.Tertiary | Used for miscellaneous actions: the action is important, but may not be what the user is looking to do right then. Often paired with a Primary or Secondary button. |
Button.Boost | Used for any action attached to a conversion or monetisation flow, such as "Boost my ad" or "Upgrade". |
Button.Ai | Used for AI-powered actions. Always displays the Sparks icon to signal AI involvement. |
Button.Danger | Used for destructive or irreversible actions like "Delete" or "Remove". Warns the user of negative consequences. |
Button.Success | Used for positive confirmations like "Approve" or "Mark as sold" where the outcome is beneficial. |
Button.Contrast | Used for primary actions on dark media or dark backgrounds. |
Button.Text | Used for the most minor actions. Often paired with a Primary button. Can be used with Secondary and Tertiary buttons when the primary action is for forwarding. |
Button.Underlined | Used for link-style actions within body text, such as "Terms and conditions" or "Privacy policy". |
ButtonGhost | Used for the most minor actions, especially when presenting multiple options. The container is not visible until interaction. |
Button.Primary
Button.Primary(
onClick = { /*Click event*/ },
text = "Main",
)Button.Secondary
Button.Secondary(
onClick = { /*Click event*/ },
text = "Secondary",
)Button.Tertiary
Button.Tertiary(
onClick = { /*Click event*/ },
text = "Tertiary",
)Button.Boost
Button.Boost(
onClick = { /*Click event*/ },
text = "Boost",
)Button.Ai
Button.Ai(
onClick = { /*Click event*/ },
text = "Ask AI",
)Button.Danger
Button.Danger(
onClick = { /*Click event*/ },
text = "Delete",
)Button.Success
Button.Success(
onClick = { /*Click event*/ },
text = "Confirm",
)Button.Contrast
Button.Contrast(
onClick = { /*Click event*/ },
text = "Contrast",
)Button.Text
Button.Text(
onClick = { /*Click event*/ },
text = "Learn more",
)Button.Underlined
Button.Underlined(
onClick = { /*Click event*/ },
text = "Terms and conditions",
)Legacy API
The following top-level composable functions remain available:
| Legacy | Replacement |
|---|---|
ButtonFilled | Button.Primary |
ButtonOutlined | Button.Tertiary |
ButtonTinted | (no direct replacement) |
ButtonGhost | ButtonGhost (unchanged) |
ButtonContrast | Button.Contrast |
ButtonFilled

Filled buttons are the standard button for most use cases. The filled styling places the most emphasis and should be used for important, final actions.
ButtonFilled(
text = "Main",
onClick = { /*Click event*/ },
)ButtonOutlined

Outlined buttons are used for support actions. The outlined styling places less emphasis on these actions that are important but not the main ones.
ButtonOutlined(
text = "Main",
onClick = { /*Click event*/ },
)ButtonTinted

Tinted buttons are medium-emphasis buttons. An alternative middle ground between filled and outlined buttons.
ButtonTinted(
text = "Main",
onClick = { /*Click event*/ },
)ButtonGhost

Ghost buttons are used for the lowest priority actions. The container is not visible until interaction.
ButtonGhost(
text = "Main",
onClick = { /*Click event*/ },
)ButtonContrast

Contrast buttons are used for high to mid priority actions on dark backgrounds.
ButtonContrast(
text = "Main",
onClick = { /*Click event*/ },
)Types
ButtonIntent is used to define the intent of the buttons.
ButtonSize is used to define the height of the buttons.
Component tokens for button components. Centralises all flag-driven token resolution so that each button variant reads from a single source of truth instead of inlining the flag check at every call site. When the rebranding feature flag is eventually removed, only this file changes.
Functions
Used for AI-powered actions. Always displays the Sparks icon to signal AI involvement.
Used for any action attached to a conversion or monetisation flow, such as "Boost my ad" or "Upgrade".
Contrast buttons are used on coloured or image backgrounds where standard buttons lack visibility.
Ghost buttons are used for the lowest priority actions, especially when presenting multiple options.
The filled button should only be used once per view (not including a modal dialog), these buttons have the most emphasis.
The ghost button is the button for non important actions. The mandatory icon help to indicate that it's a clickable text
Outlined buttons are used for support actions. The outlined styling places less emphasis on these actions that are important but not the main ones. It is recommended to pair it with a button wit more emphasis like the filled button or the tinted button.
Outlined buttons are used for support actions. The outlined styling places less emphasis on these actions that are ` important but not the main ones. It is recommended to pair it with a button wit more emphasis like the filled button or the tinted button.
Tinted buttons are medium-emphasis buttons that is an alternative middle ground between default Buttons (filled) and Outlined buttons. They can be used in contexts where lower-priority button requires slightly more emphasis than an outline would give, such as "Next" in an onboarding flow.
Contrast buttons are used on coloured or image backgrounds where standard buttons lack visibility. They use a surface container to stand out against any background.
Used for destructive or irreversible actions like "Delete" or "Remove". Warns the user of negative consequences.
Ghost buttons are used for the lowest priority actions, especially when presenting multiple options. Until the button is interacted with, its container is not visible.
Used once per view (not including a modal dialog), these buttons have the most emphasis. It should never be doubled up to sit side by side. Used when an action is clearly more important than others and you need to draw attention to it.
The standard button for most use cases. The filled styling places less emphasis than Primary but still signals an important action.
Used for positive confirmations like "Approve" or "Mark as sold" where the outcome is beneficial.
Used for miscellaneous actions: the action is important, but may not be what the user is looking to do right then. Often paired with a Primary or Secondary button.
Used for the most minor actions. Often paired with a Primary button. Can be used with Secondary and Tertiary buttons when the primary action is for forwarding.
Used for link-style actions within body text, such as "Terms and conditions" or "Privacy policy".