Concrete
control
Primitive

Button

Tight command control with loading, icon, shortcut, and variant states.

Buttons are short commands. Use primary for the one dominant action, sky for pointer moments, ultra for upgrade/pro moments, and danger only for destructive actions.

Playground

Props in the URL.

Controls update query params directly, so every primitive state can be linked, rendered, and screenshotted deterministically.

Loading playground.
States

Rendered matrix.

Every state maps to the same render route through the `state` query param.

Default

Variants, icon, and shortcut states.

/render state
Signal

Ultra and destructive signal actions.

/render state
Pressed

Keyboard-triggered active affordance with highlighted keycaps.

/render state
Props

Public contract.

NameTypeDefaultDescription
variant'primary' | 'secondary' | 'soft' | 'ghost' | 'sky' | 'sky-soft' | 'ultra' | 'danger'secondaryVisual role of the command.
size'tiny' | 'small' | 'medium' | 'large'mediumControl height and type rhythm.
leadingIconIconName | ReactElement-Optional glyph before the label.
trailingIconIconName | ReactElement-Optional glyph after the label.
shortcutreadonly string[]-Keyboard hints rendered as Concrete keycaps.
pressedbooleanfalseTemporary active affordance for keyboard-triggered or programmatic button activation.
loadingbooleanfalseReplaces the leading slot with a spinner and disables the button.
iconOnlybooleanfalseLocks the button to a square icon control.