Toggle

A two-state button (pressed / not pressed) for stateful chrome like text-formatting buttons (bold / italic) or a pinned/unpinned state — pressed lights up with bg-accent. Reach for Switch instead when it's a labelled settings preference, and for mutually-exclusive choices group items with ToggleGroup. Variants: default is a borderless ghost that disappears into a toolbar; outline adds a border for a standalone control that needs an edge. Sizes: sm (28px) for dense toolbars and table rows, md (32px, default) for standalone controls, lg (36px) for hero presence.

Default

<Toggle aria-label="Toggle italic">
  <Italic />
</Toggle>

Outline

<Toggle variant="outline" aria-label="Toggle bold">
  <Bold />
</Toggle>

With text

<Toggle aria-label="Toggle italic">
  <Italic /> Italic
</Toggle>

Sizes

<>
  <Toggle size="sm" aria-label="Bold"><Bold /></Toggle>
  <Toggle size="md" aria-label="Bold"><Bold /></Toggle>
  <Toggle size="lg" aria-label="Bold"><Bold /></Toggle>
</>

Default pressed

<Toggle defaultPressed aria-label="Toggle bold">
  <Bold />
</Toggle>

Disabled

<>
  <Toggle disabled aria-label="Bold"><Bold /></Toggle>
  <Toggle variant="outline" disabled defaultPressed aria-label="Italic"><Italic /></Toggle>
</>

Props

PropTypeDefault
variant"default" | "outline""default"
size"sm" | "md" | "lg""md"
pressedboolean
defaultPressedbooleanfalse
onPressedChange(pressed: boolean) => void
disabledbooleanfalse
…restRadix Toggle.Root props

Source

packages/react/src/components/toggle.tsx · Figma node 2819:31491