Skip to main content

Installation

npm install @kuzenbo/core

Usage

import { ToggleGroup } from "@kuzenbo/core";
import { BoldIcon, ItalicIcon, UnderlineIcon } from "lucide-react";

function Example() {
  return (
    <ToggleGroup type="multiple">
      <ToggleGroup.Item value="bold" aria-label="Toggle bold">
        <BoldIcon />
      </ToggleGroup.Item>
      <ToggleGroup.Item value="italic" aria-label="Toggle italic">
        <ItalicIcon />
      </ToggleGroup.Item>
      <ToggleGroup.Item value="underline" aria-label="Toggle underline">
        <UnderlineIcon />
      </ToggleGroup.Item>
    </ToggleGroup>
  );
}

Props

ToggleGroup

type
'single' | 'multiple'
required
Whether to allow single or multiple selections.
value
string | string[]
The controlled value(s).
defaultValue
string | string[]
The default value(s) (uncontrolled mode).
onValueChange
(value: string | string[]) => void
Callback when the value changes.
orientation
'horizontal' | 'vertical'
default:"'horizontal'"
The orientation of the toggle group.
size
'xs' | 'sm' | 'md' | 'lg' | 'xl'
default:"'md'"
The size of the toggle items.
spacing
number
default:"0"
Gap between items (0 for no gap, joined appearance).
variant
'default' | 'outline'
default:"'default'"
The visual style variant.
disabled
boolean
Whether the entire group is disabled.

ToggleGroup.Item

value
string
required
The value for this item.
disabled
boolean
Whether this item is disabled.
className
string
Additional CSS classes to apply.

Examples

Single Selection

<ToggleGroup type="single" defaultValue="left">
  <ToggleGroup.Item value="left" aria-label="Align left">
    <AlignLeftIcon />
  </ToggleGroup.Item>
  <ToggleGroup.Item value="center" aria-label="Align center">
    <AlignCenterIcon />
  </ToggleGroup.Item>
  <ToggleGroup.Item value="right" aria-label="Align right">
    <AlignRightIcon />
  </ToggleGroup.Item>
</ToggleGroup>

Multiple Selection

<ToggleGroup type="multiple" defaultValue={["bold", "italic"]}>
  <ToggleGroup.Item value="bold">
    <BoldIcon />
  </ToggleGroup.Item>
  <ToggleGroup.Item value="italic">
    <ItalicIcon />
  </ToggleGroup.Item>
  <ToggleGroup.Item value="underline">
    <UnderlineIcon />
  </ToggleGroup.Item>
</ToggleGroup>

Outline Variant

<ToggleGroup type="single" variant="outline">
  <ToggleGroup.Item value="list">
    <ListIcon />
  </ToggleGroup.Item>
  <ToggleGroup.Item value="grid">
    <GridIcon />
  </ToggleGroup.Item>
</ToggleGroup>

Vertical Orientation

<ToggleGroup type="single" orientation="vertical">
  <ToggleGroup.Item value="option1">Option 1</ToggleGroup.Item>
  <ToggleGroup.Item value="option2">Option 2</ToggleGroup.Item>
  <ToggleGroup.Item value="option3">Option 3</ToggleGroup.Item>
</ToggleGroup>

With Spacing

<ToggleGroup type="single" spacing={2}>
  <ToggleGroup.Item value="1">1</ToggleGroup.Item>
  <ToggleGroup.Item value="2">2</ToggleGroup.Item>
  <ToggleGroup.Item value="3">3</ToggleGroup.Item>
</ToggleGroup>

Different Sizes

<div className="space-y-4">
  <ToggleGroup type="single" size="xs">
    <ToggleGroup.Item value="a">A</ToggleGroup.Item>
    <ToggleGroup.Item value="b">B</ToggleGroup.Item>
  </ToggleGroup>
  <ToggleGroup type="single" size="sm">
    <ToggleGroup.Item value="a">A</ToggleGroup.Item>
    <ToggleGroup.Item value="b">B</ToggleGroup.Item>
  </ToggleGroup>
  <ToggleGroup type="single" size="lg">
    <ToggleGroup.Item value="a">A</ToggleGroup.Item>
    <ToggleGroup.Item value="b">B</ToggleGroup.Item>
  </ToggleGroup>
</div>

Controlled State

const [value, setValue] = useState<string[]>([]);

<ToggleGroup
  type="multiple"
  value={value}
  onValueChange={setValue}
>
  <ToggleGroup.Item value="bold"><BoldIcon /></ToggleGroup.Item>
  <ToggleGroup.Item value="italic"><ItalicIcon /></ToggleGroup.Item>
</ToggleGroup>

Build docs developers (and LLMs) love