BUTTON
Source: design-system/components/Button/Button.tsx. React Server Component, zero client JavaScript.
Props
| Prop | Type | Default | Required |
|---|---|---|---|
Propvariant | Type'primary' | 'secondary' | Default'primary' | Requiredno |
Propsize | Type'sm' | 'md' | 'lg' | Default'md' | Requiredno |
Propas | Type'button' | 'a' | Default'button' | Requiredno |
Prophref | Typestring | Defaultnone | Requiredyes when as="a" |
Propdisabled | Typeboolean | Defaultfalse | Requiredno |
Variants
Sizes
Small and medium buttons have a 44px minimum height. Large buttons have a 52px minimum height.
Disabled
An anchor cannot be natively disabled. With as="a" and disabled, the button drops href, sets aria-disabled="true", leaves the tab order and cancels click. That path attaches a click handler, so it is used from client components only.
Accessibility
Every size meets the 44px target. Keyboard focus shows a 2px signal outline with a 2px offset through :focus-visible. This component defaults type to "button", opting out of the browser's implicit submit inside a <form>.