Button
The Button component is a versatile clickable element that triggers actions in your application. It extends the Row component and supports various styling options through variants and sizes.
<Button>Iceland Gull</Button>
Features
The Button component is a versatile component that can be used in a variety of ways.
Variants
Buttons come in different variants to indicate different levels of emphasis:
<Row gap={400} wrap="wrap"> <Button variant="primary">Red-cockaded Woodpecker</Button> <Button variant="secondary">Black-faced Grassquit</Button> <Button variant="tertiary">Ruffed Grouse</Button> </Row>
Sizes
Adjust the size of buttons with the size prop:
<Row gap={400} wrap="wrap" align="center"> <Button size="large">Thick-billed Murre</Button> <Button size="medium">Indigo Bunting</Button> <Button size="small">Alder Flycatcher</Button> </Row>
Leading and Trailing Elements
Buttons can include elements before or after the label:
<Row gap={400} wrap="wrap"> <Button leading={<Icon.Save />}>Brewer's Sparrow</Button> <Button trailing={<Icon.ArrowRight />}>Winter Wren</Button> </Row>
Expanded Width
Buttons will follow standard flex behavior and so they will already stretch if the parent’s flex alignment tells them to. In other cases, you can use the expanded prop to make the button stretch to fill its container width.
<Button expanded>Sage Thrasher</Button>
The expanded prop is a temporary alias for size={{ width: "stretch" }}, because the size sprinkle prop is currently not available as the size prop is used for the variants shown above. The plan is to rename the variants (e.g. density="compact"), so that the size sprinkle prop becomes available again. At that point, the expanded prop will be deprecated.
Alignment
Although the Button defaults to centering its content, you can control the alignment of the Button component with the usual Row props.
<Column gap={400} size="fitContent"> <Button trailing={<Icon.ChevronRight />} justify="between"> Hermit Thrush </Button> <Button trailing={<Icon.ChevronRight />} justify="between"> Gloves </Button> </Column>
Disabled State
You can disable a Button to prevent user interaction.
<Button disabled>Northern Parula</Button>
Anatomy
Reference
Props
The Button component inherits all of the props from the Row component and the HTMLButtonElement and adds the following props.
| Name | Type | Default | Description |
|---|---|---|---|
variant | "primary" | "secondary" | "tertiary" | "primary" | The visual style of the button. |
size | "small" | "medium" | "large" | "medium" | The size of the button. |
leading | ReactNode | - | Element to display before the button content. |
trailing | ReactNode | - | Element to display after the button content. |
expanded | boolean | false | Whether the button expands to fill width. |
Events
The Button component supports the following events.
| Event | Description |
|---|---|
click | Fired when the button is clicked. |
Tokens
| Key | Default Value |
|---|---|
button.row.base.borderWidth | var(--gpqiqbg) |
button.row.base.borderStyle | solid |
button.row.base.borderRadius | var(--gpqiqe6) |
button.row.variants.variant.primary.backgroundColor | var(--_1i4ikbk0) |
button.row.variants.variant.primary.borderColor | transparent |
button.row.variants.variant.primary.color | var(--_1i4ikbk1) |
button.row.variants.variant.primary.boxShadow | var(--gpqiqe8) |
button.row.variants.variant.primary.opacity | none |
button.row.variants.variant.primary.:hover.backgroundColor | color-mix(in srgb, var(--_1i4ikbk0) 95%, var(--_1i4ikbkv) 5%) |
button.row.variants.variant.primary.:hover.borderColor | transparent |
button.row.variants.variant.primary.:hover.color | var(--_1i4ikbk1) |
button.row.variants.variant.primary.:hover.boxShadow | var(--gpqiqe8) |
button.row.variants.variant.primary.:hover.opacity | none |
button.row.variants.variant.primary.:focus-visible.backgroundColor | color-mix(in srgb, var(--_1i4ikbk0) 95%, var(--_1i4ikbkv) 5%) |
button.row.variants.variant.primary.:focus-visible.borderColor | transparent |
button.row.variants.variant.primary.:focus-visible.color | var(--_1i4ikbk1) |
button.row.variants.variant.primary.:focus-visible.boxShadow | var(--gpqiqe8) |
button.row.variants.variant.primary.:focus-visible.outlineWidth | var(--_1i4ikbk2e) |
button.row.variants.variant.primary.:focus-visible.outlineStyle | var(--_1i4ikbk2f) |
button.row.variants.variant.primary.:focus-visible.outlineColor | var(--_1i4ikbk2g) |
button.row.variants.variant.primary.:focus-visible.outlineOffset | var(--_1i4ikbk2h) |
button.row.variants.variant.primary.:focus-visible.opacity | none |
button.row.variants.variant.primary.:active.backgroundColor | color-mix(in srgb, var(--_1i4ikbk0) 95%, var(--_1i4ikbkv) 5%) |
button.row.variants.variant.primary.:active.borderColor | transparent |
button.row.variants.variant.primary.:active.color | var(--_1i4ikbk1) |
button.row.variants.variant.primary.:active.boxShadow | var(--gpqiqe8) |
button.row.variants.variant.primary.:active.opacity | none |
button.row.variants.variant.primary.:disabled.backgroundColor | var(--_1i4ikbk0) |
button.row.variants.variant.primary.:disabled.borderColor | transparent |
button.row.variants.variant.primary.:disabled.color | var(--_1i4ikbk1) |
button.row.variants.variant.primary.:disabled.boxShadow | var(--gpqiqe8) |
button.row.variants.variant.primary.:disabled.opacity | var(--_1i4ikbk2i) |
button.row.variants.variant.secondary.backgroundColor | var(--_1i4ikbk11) |
button.row.variants.variant.secondary.borderColor | transparent |
button.row.variants.variant.secondary.color | var(--_1i4ikbkv) |
button.row.variants.variant.secondary.boxShadow | var(--gpqiqe8) |
button.row.variants.variant.secondary.opacity | none |
button.row.variants.variant.secondary.:hover.backgroundColor | color-mix(in srgb, var(--_1i4ikbk11) 95%, var(--_1i4ikbkv) 5%) |
button.row.variants.variant.secondary.:hover.borderColor | transparent |
button.row.variants.variant.secondary.:hover.color | var(--_1i4ikbkv) |
button.row.variants.variant.secondary.:hover.boxShadow | var(--gpqiqe8) |
button.row.variants.variant.secondary.:hover.opacity | none |
button.row.variants.variant.secondary.:focus-visible.backgroundColor | color-mix(in srgb, var(--_1i4ikbk11) 95%, var(--_1i4ikbkv) 5%) |
button.row.variants.variant.secondary.:focus-visible.borderColor | transparent |
button.row.variants.variant.secondary.:focus-visible.color | var(--_1i4ikbkv) |
button.row.variants.variant.secondary.:focus-visible.boxShadow | var(--gpqiqe8) |
button.row.variants.variant.secondary.:focus-visible.outlineWidth | var(--_1i4ikbk2e) |
button.row.variants.variant.secondary.:focus-visible.outlineStyle | var(--_1i4ikbk2f) |
button.row.variants.variant.secondary.:focus-visible.outlineColor | var(--_1i4ikbk2g) |
button.row.variants.variant.secondary.:focus-visible.outlineOffset | var(--_1i4ikbk2h) |
button.row.variants.variant.secondary.:focus-visible.opacity | none |
button.row.variants.variant.secondary.:active.backgroundColor | color-mix(in srgb, var(--_1i4ikbk11) 95%, var(--_1i4ikbkv) 5%) |
button.row.variants.variant.secondary.:active.borderColor | transparent |
button.row.variants.variant.secondary.:active.color | var(--_1i4ikbkv) |
button.row.variants.variant.secondary.:active.boxShadow | var(--gpqiqe8) |
button.row.variants.variant.secondary.:active.opacity | none |
button.row.variants.variant.secondary.:disabled.backgroundColor | var(--_1i4ikbk11) |
button.row.variants.variant.secondary.:disabled.borderColor | transparent |
button.row.variants.variant.secondary.:disabled.color | var(--_1i4ikbkv) |
button.row.variants.variant.secondary.:disabled.boxShadow | var(--gpqiqe8) |
button.row.variants.variant.secondary.:disabled.opacity | var(--_1i4ikbk2i) |
button.row.variants.variant.tertiary.backgroundColor | transparent |
button.row.variants.variant.tertiary.borderColor | transparent |
button.row.variants.variant.tertiary.color | inherit |
button.row.variants.variant.tertiary.boxShadow | var(--gpqiqe8) |
button.row.variants.variant.tertiary.opacity | none |
button.row.variants.variant.tertiary.:hover.backgroundColor | color-mix(in srgb, transparent 95%, var(--_1i4ikbkv) 5%) |
button.row.variants.variant.tertiary.:hover.borderColor | transparent |
button.row.variants.variant.tertiary.:hover.color | inherit |
button.row.variants.variant.tertiary.:hover.boxShadow | var(--gpqiqe8) |
button.row.variants.variant.tertiary.:hover.opacity | none |
button.row.variants.variant.tertiary.:focus-visible.backgroundColor | color-mix(in srgb, transparent 95%, var(--_1i4ikbkv) 5%) |
button.row.variants.variant.tertiary.:focus-visible.borderColor | transparent |
button.row.variants.variant.tertiary.:focus-visible.color | inherit |
button.row.variants.variant.tertiary.:focus-visible.boxShadow | var(--gpqiqe8) |
button.row.variants.variant.tertiary.:focus-visible.outlineWidth | var(--_1i4ikbk2e) |
button.row.variants.variant.tertiary.:focus-visible.outlineStyle | var(--_1i4ikbk2f) |
button.row.variants.variant.tertiary.:focus-visible.outlineColor | var(--_1i4ikbk2g) |
button.row.variants.variant.tertiary.:focus-visible.outlineOffset | var(--_1i4ikbk2h) |
button.row.variants.variant.tertiary.:focus-visible.opacity | none |
button.row.variants.variant.tertiary.:active.backgroundColor | color-mix(in srgb, transparent 95%, var(--_1i4ikbkv) 5%) |
button.row.variants.variant.tertiary.:active.borderColor | transparent |
button.row.variants.variant.tertiary.:active.color | inherit |
button.row.variants.variant.tertiary.:active.boxShadow | var(--gpqiqe8) |
button.row.variants.variant.tertiary.:active.opacity | none |
button.row.variants.variant.tertiary.:disabled.backgroundColor | transparent |
button.row.variants.variant.tertiary.:disabled.borderColor | transparent |
button.row.variants.variant.tertiary.:disabled.color | inherit |
button.row.variants.variant.tertiary.:disabled.boxShadow | var(--gpqiqe8) |
button.row.variants.variant.tertiary.:disabled.opacity | var(--_1i4ikbk2i) |
button.row.variants.size.small.paddingTop | var(--gpqiqd3) |
button.row.variants.size.small.paddingBottom | var(--gpqiqd3) |
button.row.variants.size.small.paddingLeft | var(--gpqiqd9) |
button.row.variants.size.small.paddingRight | var(--gpqiqd9) |
button.row.variants.size.small.gap | var(--gpqiqd9) |
button.row.variants.size.medium.paddingTop | var(--gpqiqd5) |
button.row.variants.size.medium.paddingBottom | var(--gpqiqd5) |
button.row.variants.size.medium.paddingLeft | var(--gpqiqdb) |
button.row.variants.size.medium.paddingRight | var(--gpqiqdb) |
button.row.variants.size.medium.gap | var(--gpqiqd9) |
button.row.variants.size.large.paddingTop | var(--gpqiqd7) |
button.row.variants.size.large.paddingBottom | var(--gpqiqd7) |
button.row.variants.size.large.paddingLeft | var(--gpqiqdd) |
button.row.variants.size.large.paddingRight | var(--gpqiqdd) |
button.row.variants.size.large.gap | var(--gpqiqd9) |
button.text.variants.size.small.font | var(--_1i4ikbk28) |
button.text.variants.size.medium.font | var(--_1i4ikbk28) |
button.text.variants.size.large.font | var(--_1i4ikbk28) |