Radix Toggle Group Demo

PreviousNext

Demo showing an animated radix toggle group.

Docs
animate-uiui

Preview

Loading preview…
registry/demo/primitives/radix/toggle-group/index.tsx
import {
  ToggleGroup,
  ToggleGroupItem,
  ToggleGroupHighlight,
  ToggleGroupHighlightItem,
} from '@/components/animate-ui/primitives/radix/toggle-group';
import { Bold, Italic, Underline } from 'lucide-react';
import { useEffect, useState } from 'react';

interface RadixToggleGroupDemoProps {
  type: 'single' | 'multiple';
}

export const RadixToggleGroupDemo = ({ type }: RadixToggleGroupDemoProps) => {
  const [value, setValue] = useState<string | string[] | undefined>(undefined);

  useEffect(() => {
    if (type === 'single') {
      setValue('bold');
    } else {
      setValue(['bold']);
    }
  }, [type]);

  return type === 'single' ? (
    <ToggleGroup
      type="single"
      value={value as string}
      onValueChange={(value) => setValue(value as string)}
      className="flex gap-2"
    >
      <ToggleGroupHighlight className="bg-accent">
        <ToggleGroupHighlightItem value="bold">
          <ToggleGroupItem
            value="bold"
            aria-label="Toggle bold"
            className="size-8 flex items-center justify-center"
          >
            <Bold className="h-4 w-4" />
          </ToggleGroupItem>
        </ToggleGroupHighlightItem>
        <ToggleGroupHighlightItem value="italic">
          <ToggleGroupItem
            value="italic"
            aria-label="Toggle italic"
            className="size-8 flex items-center justify-center"
          >
            <Italic className="h-4 w-4" />
          </ToggleGroupItem>
        </ToggleGroupHighlightItem>
        <ToggleGroupHighlightItem value="underline">
          <ToggleGroupItem
            value="underline"
            aria-label="Toggle underline"
            className="size-8 flex items-center justify-center"
          >
            <Underline className="h-4 w-4" />
          </ToggleGroupItem>
        </ToggleGroupHighlightItem>
      </ToggleGroupHighlight>
    </ToggleGroup>
  ) : (
    <ToggleGroup
      type="multiple"
      value={value as string[]}
      onValueChange={(value) => setValue(value as string[])}
      className="flex gap-2"
    >
      <ToggleGroupHighlightItem value="bold" className="bg-accent">
        <ToggleGroupItem
          value="bold"
          aria-label="Toggle bold"
          className="size-8 flex items-center justify-center"
        >
          <Bold className="h-4 w-4" />
        </ToggleGroupItem>
      </ToggleGroupHighlightItem>
      <ToggleGroupHighlightItem value="italic" className="bg-accent">
        <ToggleGroupItem
          value="italic"
          aria-label="Toggle italic"
          className="size-8 flex items-center justify-center"
        >
          <Italic className="h-4 w-4" />
        </ToggleGroupItem>
      </ToggleGroupHighlightItem>
      <ToggleGroupHighlightItem value="underline" className="bg-accent">
        <ToggleGroupItem
          value="underline"
          aria-label="Toggle underline"
          className="size-8 flex items-center justify-center"
        >
          <Underline className="h-4 w-4" />
        </ToggleGroupItem>
      </ToggleGroupHighlightItem>
    </ToggleGroup>
  );
};

Installation

npx shadcn@latest add @animate-ui/demo-primitives-radix-toggle-group

Usage

import { DemoPrimitivesRadixToggleGroup } from "@/components/ui/demo-primitives-radix-toggle-group"
<DemoPrimitivesRadixToggleGroup />