Skip to content

Button

Button

Variants

Sizes

States

Icon Button Variants

Icon Button Sizes

Icon Button States

import { Button } from "@f0rbit/ui";
<Button variant="primary">Click me</Button>
PropTypeDefaultDescription
variant"primary" | "secondary" | "ghost" | "danger""primary"Visual style variant
size"sm" | "md" | "lg""md"Button size
iconbooleanfalseRender as square icon-only button
labelstringAccessible label for icon buttons (sets aria-label)
loadingbooleanfalseShow loading spinner
disabledbooleanfalseDisable the button

Buttons come in four variants to communicate different levels of emphasis:

<Button variant="primary">Primary</Button>
<Button variant="secondary">Secondary</Button>
<Button variant="ghost">Ghost</Button>
<Button variant="danger">Danger</Button>
  • Primary: Use for main actions like “Save” or “Submit”
  • Secondary: Use for alternative actions
  • Ghost: Use for subtle actions that don’t need emphasis
  • Danger: Use for destructive actions like “Delete”

Three sizes are available:

<Button size="sm">Small</Button>
<Button size="md">Medium</Button>
<Button size="lg">Large</Button>

Show a loading spinner when an action is in progress:

<Button loading>Saving...</Button>

Disable interaction when the action is not available:

<Button disabled>Not available</Button>

Use the icon prop for square icon-only buttons. Add a label prop for accessibility:

<Button icon label="Add item">
<PlusIcon />
</Button>

Icon buttons support all the same variants:

<Button icon label="Add"><PlusIcon /></Button>
<Button icon label="Edit" variant="secondary"><EditIcon /></Button>
<Button icon label="Settings" variant="ghost"><SettingsIcon /></Button>
<Button icon label="Delete" variant="danger"><TrashIcon /></Button>

And all the same sizes and states:

<Button icon label="Small" size="sm"><PlusIcon /></Button>
<Button icon label="Loading" loading><PlusIcon /></Button>
<Button icon label="Disabled" disabled><PlusIcon /></Button>