Back to Tooljet

Toggle — Rocket Design Spec

frontend/src/components/ui/Rocket/Toggle/Toggle.spec.md

3.20.154-lts1.9 KB
Original Source

Toggle — Rocket Design Spec

<!-- synced: 2026-03-17 -->

Props

PropTypeValuesDefault
variantstringghost | outlineghost
sizestringlarge | default | medium | smalldefault
disabledbooleanfalse
pressedbooleancontrolled on/off
defaultPressedbooleanuncontrolled defaultfalse
onPressedChangefunctioncallback
classNamestring

Sizes (matches Button)

ValueHeightTailwind
large40pxtw-h-10 tw-px-2.5 tw-text-lg
default32pxtw-h-8 tw-px-2 tw-text-base
medium28pxtw-h-7 tw-px-1.5 tw-text-base
small20pxtw-h-5 tw-px-1 tw-text-sm

Token Mapping

ElementStateToolJet class
backgrounddefaulttw-bg-transparent
backgroundhoverhover:tw-bg-interactive-hover
backgroundon (data-[state=on])data-[state=on]:tw-bg-interactive-selected
shadowoff (data-[state=off])data-[state=off]:tw-shadow-elevation-100
textdefaulttw-text-text-medium
textondata-[state=on]:tw-text-text-default
border (outline only)defaulttw-border tw-border-border-weak
focus ringfocusfocus-visible:tw-ring-2 focus-visible:tw-ring-interactive-focus-outline focus-visible:tw-ring-offset-1
disabledalldisabled:tw-pointer-events-none disabled:tw-opacity-50

CVA Shape

Shape A — variants + sizes

Notes

  • Uses shadcn Toggle as structural base (Radix @radix-ui/react-toggle — manages pressed state, keyboard, aria-pressed).
  • Follows Button sizing exactly (large/default/medium/small).
  • Min-width forced to 0 (!tw-min-w-0) to override shadcn's default. Icon-only toggles use [&:has(>svg:only-child)]:tw-aspect-square for square shape.
  • pressed / defaultPressed / onPressedChange pass through to Radix.
  • Off state has subtle shadow (data-[state=off]:tw-shadow-elevation-100).