Toggle

Molecule

role="switch" toggle/switch with three sizes, description slot, and disabled support. Fully accessible via CSS transform without a native input.

Props EditorInteractive
<Toggle id="toggle" label="Enable notifications" onChange={setChecked} />

Sizes

Preview
Code
<Toggle id="notifications" label="Enable notifications" checked={enabled} onChange={setEnabled} size="md" />

With description

Preview
Code
<Toggle id="marketing" label="Marketing emails" description="Receive weekly updates." checked={value} onChange={setValue} />

Disabled

Preview
Code
<Toggle id="toggle" label="Disabled" checked disabled onChange={() => {}} />

Settings list (controlled)

Preview

Push notifications

Alerts for new activity

Marketing emails

Weekly updates and offers

Dark mode

Switch to dark theme

Code
function Demo() {
  const [s, setS] = useState({ notifications: true, marketing: false });
  return (
    <div className="divide-y border rounded-lg">
      {[{ key: 'notifications', label: 'Push notifications', desc: 'Alerts for new activity' }, ...].map(({ key, label, desc }) => (
        <div key={key} className="flex items-center justify-between px-4 py-3">
          <div>
            <p className="text-sm font-medium">{label}</p>
            <p className="text-xs text-text-secondary">{desc}</p>
          </div>
          <Toggle id={key} label="" checked={s[key]} onChange={() => setS(p => ({ ...p, [key]: !p[key] }))} />
        </div>
      ))}
    </div>
  );
}
Sourcemodules/ui/Toggle.tsx