Button
Triggers an action: submits a form, starts a flow or confirms a choice. Six intents, three variants (Primary, Secondary, Tertiary), an optional pill shape and an icon-only form.
Add a neutral primary Orvain Button, labelled “Button Label”, size L, a chevron on each side.
Examples#
Variants
Three levels of emphasis. One Primary per view, Secondary beside it, Tertiary for everything quieter.
Add a row of 3 Orvain Buttons: • Neutral primary, labelled “Primary”, size L, no icons • Neutral secondary, labelled “Secondary”, size L, no icons • Neutral tertiary, labelled “Tertiary”, size L, no icons
Intents
The intent sets the colour. Neutral and Brand carry most actions; Success, Warning and Error match the outcome.
Add a row of 5 Orvain Buttons: • Neutral primary, labelled “Neutral”, size M, no icons • Brand primary, labelled “Brand”, size M, no icons • Success primary, labelled “Success”, size M, no icons • Warning primary, labelled “Warning”, size M, no icons • Error primary, labelled “Error”, size M, no icons
Sizes
Six sizes. L is the default; the small ones suit dense toolbars and table rows.
Add a row of 6 Orvain Buttons: • Neutral primary, labelled “XXS”, size XXS, no icons • Neutral primary, labelled “XS”, size XS, no icons • Neutral primary, labelled “S”, size S, no icons • Neutral primary, labelled “M”, size M, no icons • Neutral primary, labelled “L”, size L, no icons • Neutral primary, labelled “XL”, size XL, no icons
With icons
An icon either side of the label, or one alone. An icon-only button always carries an aria-label.
Add a row of 3 Orvain Buttons: • Neutral primary, labelled “New project”, size L, a plus on the left • Neutral secondary, labelled “Continue”, size L, a arrow on the right • Icon-only neutral secondary, showing a search, size L, aria-label “Search”
Loading and disabled
Loading keeps the button's size, shows a spinner and blocks repeat clicks. Disabled is inert.
Add a row of 2 Orvain Buttons: • Loading neutral primary, labelled “Saving”, size L, no icons • Disabled neutral primary, labelled “Disabled”, size L, no icons
More properties#
The Button has more than the examples above show: a pill shape, custom corners, your own icons in any slot, and a forced look for every interaction state. Try them together, on a canvas, in the Playground.
- pill
- swapLeftIcon
- swapRightIcon
- swapSoloIcon
When to use#
- Use Primary for the main action on a screen, such as Save, Continue or Create. One per view.
- Use Secondary for the actions beside it, and Tertiary for the quiet ones (Cancel, Skip).
- Use the Error intent for destructive actions. Never make it the only way out of a dialog.
- Use Inverse On Dark on dark surfaces, such as a hero or a dark card.
When not to use
- Use a Link Button to navigate instead of acting.
- Use a Button Group or Segmented Control for several peers that answer one question.
Anatomy#
60px tall with a 16px radius (256px as a pill). Tertiary is 52px. The whole box is the hit area.
Optional, 28px, 8px from the label. Supports the label and never replaces it.
Satoshi 16px, SemiBold, 150% line height.
Optional. Direction (chevron right) or a menu (chevron down).
Secondary only: 2px inside the box, so it never changes the size.
States#
At rest, in its intent and variant.
Primary darkens one step; Secondary and Tertiary take a light wash of the intent.
A 2px ring in the button's own colour, set off from it by a 2px gap, for keyboard focus only.
Primary darkens two steps; Secondary and Tertiary take a stronger wash.
#f2f2f2 surface and #cbcbcb label. Inert. Explain why nearby.
Source#
Preview – final code pending
The Button is available in the Figma library with every variant and state shown above. The React and Vue source, props table and install command will be added to this page when the code library is released.
Get notified when the source is publishedGet notified when the source is published
Used in these blocks

