Playground

Intent

Five color intents to convey different semantic meanings.

Priority

Primary for main actions, secondary for supporting actions.

Surface

Default, dark (for dark surface backgrounds), and bold (neutral only, for use on bold-colored backgrounds).

Size

Three sizes: small, medium (default), and large. Large supports a description line.

Icons

Optional left and/or right icons. Pass any SVGR icon component.

Loading

Loading state shows a spinner and optional loading label. Button is non-interactive while loading.

Disabled

Disabled buttons have reduced opacity and non-interactive cursor.

When to Use

Best for

  • Triggering primary and secondary actions (submit, confirm, cancel)
  • Navigation to a new step in a flow or wizard
  • Destructive actions with critical intent for clear visual warning

Consider alternatives when

  • Navigating to a new page — use a link instead
  • Toggling between states — use a toggle or switch component
  • Showing status only — use a badge instead

Props

PropTypeRequiredDescription
label string Yes Button text
intent "brand" | "neutral" | "info" | "warning" | "critical" No Color intent (default: "brand")
priority "primary" | "secondary" No Visual priority (default: "primary")
surface "default" | "dark" | "bold" No Surface context. "bold" is neutral-only (default: "default")
size "small" | "medium" | "large" No Size (default: "medium")
description string No Secondary text line (large size only)
leftIcon FC<SVGProps> No SVGR icon component for left slot
rightIcon FC<SVGProps> No SVGR icon component for right slot
isLoading boolean No Shows spinner and disables interaction
loadingLabel string No Override label text while loading
isDisabled boolean No Disables the button
onClick () => void No Click handler
className string No Additional CSS class names

Import

import { Button } from '@/components/suite/desktop/Button';

Design Tokens

PurposeToken
Background (brand primary)var(--color-fill-element-brand-bold)
Background (brand secondary)var(--color-fill-element-brand-soft)
Background (neutral primary)var(--color-fill-element-contrast)
Background (neutral secondary)var(--color-fill-element-neutral-soft)
Background (disabled primary)var(--color-fill-element-bold-disabled)
Background (disabled secondary)var(--color-fill-element-soft-disabled)
Text (disabled)var(--color-content-disabled)
Focus ringvar(--color-border-element-focus-ring)
Backdrop blurvar(--blur-element-button)
Border radius (medium)var(--primitive-radius-10)
Page tokens