Button

A button runs an action. Comb splits it by meaning: a button acts, an icon button acts with an icon and a name, and a link button navigates. None takes a class or style, so the variant is the whole look.

Previewapps/web/components/ui/KbButton.tsx

Variants

Secondary is the default. Primary is the one gold action in a view. Ghost sits in bars and rows. Ghost danger is the quiet red for a row action that destroys something (Revoke, Remove). Danger is the filled red for the one confirmed destructive action. Link is a text action inside copy or a row.

Show code
<KbButton variant="primary">Resolve request</KbButton>
<KbButton>Assign to me</KbButton>
<KbButton variant="ghost">Hide details</KbButton>
<KbButton variant="danger">Delete rule</KbButton>
<KbButton variant="link">View history</KbButton>

Sizes

Medium (36px) is the default. Small (32px) fits dense rows and toolbars; large (40px) is for a page's lead action. Under 860px wide, icon buttons grow to 44px so they stay easy to tap.

Show code
<KbButton size="sm">Assign</KbButton>
<KbButton>Assign to me</KbButton>
<KbButton size="lg">Assign to me</KbButton>
<KbButton full>Assign to me</KbButton>

States

Hover deepens the fill, press scales to 98%, keyboard focus draws the gold ring. Busy keeps the label in place for width, shows a spinner and blocks input. Disabled fades to half strength.

Press to see the busy state
Show code
<KbButton variant="primary" busy={saving} onClick={save}>
  Save changes
</KbButton>
Disabled
Show code
<KbButton variant="primary" disabled>Resolve request</KbButton>

Icon and link buttons

Icon button: the label is required and becomes the tooltip
Show code
<KbIconButton label="Close details">
  <CloseIcon />
</KbIconButton>
<KbIconButton label="Close details" variant="secondary" round>
  <CloseIcon />
</KbIconButton>
Link button: renders an anchor, never a button
Show code
<KbLinkButton href="/design/components/lozenge">Read about lozenges</KbLinkButton>