Buttons
Buttons trigger an action, whether that is submitting a form, opening a dialog, or moving a task forward.
Buttons
Buttons trigger an action, whether that is submitting a form, opening a dialog, or moving a task forward.
Demo
Change the props and copy the result.
The family
Reach for the standard Button for almost everything. The rest of the family exists for the jobs it does badly: repeated actions in dense rows, dismissing the surface it sits in, OAuth sign-in, and linking to an app marketplace. Each name links to its variants below.
| Component | Description | Import from |
|---|---|---|
| Button | The standard action button; also renders as a link when given href. | @/components/base/buttons/button |
| ButtonUtility | Compact icon-only button for toolbars and table rows. | @/components/base/buttons/button-utility |
| CloseButton | Dismiss affordance for modals, banners, and overlays. | @/components/base/buttons/close-button |
| SocialButton | OAuth sign-in buttons with provider logos. | @/components/base/buttons/social-button |
| GooglePlayButton | Google Play store badge, in solid black. | @/components/base/buttons/app-store-buttons |
| GooglePlayWhiteButton | Google Play store badge, solid black with a white keyline. | @/components/base/buttons/app-store-buttons |
| AppStoreButton | Apple App Store badge, in solid black. | @/components/base/buttons/app-store-buttons |
| GalaxyStoreButton | Samsung Galaxy Store badge, in solid black. | @/components/base/buttons/app-store-buttons |
| AppGalleryButton | Huawei AppGallery badge, in solid black. | @/components/base/buttons/app-store-buttons |
App store badges
Marketplace links for landing pages and footers, never in-product actions. They render as anchors with fixed artwork at two heights, 40px and 44px. Use the solid set on light surfaces; the outline set inherits the current text color, so it follows the theme.
States
Reach for disabled when the action cannot run yet, and loading while it runs; the two are not interchangeable. Every state below is forced onto a real button: hover and focus re-apply the kit’s own state classes with the variant prefix stripped, so what renders is what the kit ships rather than a repainted approximation.
| rest | hover | focus-visible | disabled | loading | |
|---|---|---|---|---|---|
| primary | |||||
| secondary | |||||
| tertiary | |||||
| link-color | |||||
| link-gray | |||||
| primary-destructive | |||||
| secondary-destructive | |||||
| tertiary-destructive | |||||
| link-destructive |
Hover and focus states are live. Interact with any cell.
There is no pressed treatment
data-pressed while a button is held down, and the kit never styles it. Nothing changes visually between rest and pressed beyond the hover treatment already showing. That is worth knowing before you design a screen that depends on press feedback.
SocialButton
OAuth sign-in on auth screens, and nothing else. Brand follows each provider’s palette and belongs on white. Color keeps the colorful logo on a neutral button, for stacks where competing brand palettes would clash. Gray is monochrome, for interfaces that need the quietest treatment. Each theme shows the labeled form and its icon-only sibling in their own columns.
Social button groups