Skip to main content
Context GrammarContext-aware AI

Button

A press answers at once by settling slightly smaller — felt more than watched. Arrows nudge forward on hover. A disabled button does neither.

Variant

Controls

▾

Code

import { Button } from "@/components/ui/kit/ui";

<Button arrow>Primary</Button>

Every state

Not pressed yet

Default

Hover

Focus

Active

Disabled

Loading

Usage

Do

  • Use one primary button per view, for the step most people take next.
  • Write the label as an action: “Send”, “Save draft”.

Don’t

  • Don’t put two primary buttons side by side; make the second ghost or quiet.
  • Don’t disable a button without saying nearby what would enable it.

Tokens it uses

Tokens it uses
--ink…
--paper…
--spark…
--spark-tint…
--spark-deep…
--line-2…
--surface…
--muted…
--font-label…
--dur-instant…
--ease-out…

Values are read live from the stylesheet, so they follow the site theme.

Spec

Trigger
Press
Duration
--dur-instant 100ms
Easing
--ease-out cubic-bezier(0.16, 1, 0.3, 1)
Reduced motion
The press still registers; the scale changes instantly instead of easing.

Used in