1import BoldIcon from "lucide-solid/icons/bold";2import ItalicIcon from "lucide-solid/icons/italic";3import UnderlineIcon from "lucide-solid/icons/underline";4
5import { ToggleGroup, ToggleGroupItem } from "~/components/ui/toggle-group";6
7export default function ToggleGroupDemo() {8 return (9 <ToggleGroup>10 <ToggleGroupItem value="bold" aria-label="Toggle bold">11 <BoldIcon class="h-4 w-4" />12 </ToggleGroupItem>13 <ToggleGroupItem value="italic" aria-label="Toggle italic">14 <ItalicIcon class="h-4 w-4" />15 </ToggleGroupItem>16 <ToggleGroupItem value="strikethrough" aria-label="Toggle strikethrough">17 <UnderlineIcon class="h-4 w-4" />18 </ToggleGroupItem>19 </ToggleGroup>20 );21}
npx shadcn@latest add https://solid-ui-neobrutalism.vercel.app/r/toggle-group.json
yarn shadcn@latest add https://solid-ui-neobrutalism.vercel.app/r/toggle-group.json
pnpm dlx shadcn@latest add https://solid-ui-neobrutalism.vercel.app/r/toggle-group.json
bunx --bun shadcn@latest add https://solid-ui-neobrutalism.vercel.app/r/toggle-group.json
Install the following dependencies
npm install @kobalte/core
yarn add @kobalte/core
pnpm add @kobalte/core
bun add @kobalte/core
Install the following component dependencies
Copy and paste the following code into your project
1import type { PolymorphicProps } from "@kobalte/core/polymorphic";2import type { VariantProps } from "class-variance-authority";3import type { JSX, ValidComponent } from "solid-js";4
5import { createContext, splitProps, useContext } from "solid-js";6import * as ToggleGroupPrimitive from "@kobalte/core/toggle-group";7
8import { toggleVariants } from "~/components/ui/toggle";9import { cn } from "~/lib/utils";10
11const ToggleGroupContext = createContext<VariantProps<typeof toggleVariants>>({12 size: "default",13 variant: "default",14});15
16type ToggleGroupRootProps<T extends ValidComponent = "div"> =17 ToggleGroupPrimitive.ToggleGroupRootProps<T> &18 VariantProps<typeof toggleVariants> & {19 class?: string | undefined;20 children?: JSX.Element;21 };22
23const ToggleGroup = <T extends ValidComponent = "div">(24 props: PolymorphicProps<T, ToggleGroupRootProps<T>>,25) => {26 const [local, others] = splitProps(props as ToggleGroupRootProps, [27 "class",28 "children",29 "size",30 "variant",31 ]);32
33 return (34 <ToggleGroupPrimitive.Root35 data-slot="toggle-group"36 class={cn("flex items-center justify-center", local.class)}37 {...others}38 >39 <ToggleGroupContext.Provider40 value={{41 get size() {42 return local.size;43 },44 get variant() {45 return local.variant;46 },47 }}48 >49 {local.children}50 </ToggleGroupContext.Provider>51 </ToggleGroupPrimitive.Root>52 );53};54
55type ToggleGroupItemProps<T extends ValidComponent = "button"> =56 ToggleGroupPrimitive.ToggleGroupItemProps<T> &57 VariantProps<typeof toggleVariants> & { class?: string | undefined };58
59const ToggleGroupItem = <T extends ValidComponent = "button">(60 props: PolymorphicProps<T, ToggleGroupItemProps<T>>,61) => {62 const [local, others] = splitProps(props as ToggleGroupItemProps, [63 "class",64 "size",65 "variant",66 ]);67 const context = useContext(ToggleGroupContext);68 return (69 <ToggleGroupPrimitive.Item70 data-slot="toggle-group-item"71 class={cn(72 toggleVariants({73 size: context.size || local.size,74 variant: context.variant || local.variant,75 }),76 "min-w-0 flex-1 shrink-0 rounded-none first:rounded-l-base last:rounded-r-base",77 local.variant !== "transparent" &&78 "border-y-2 border-r-2 border-l-0! first:border-l-2!",79 local.class,80 )}81 {...others}82 />83 );84};85
86export { ToggleGroup, ToggleGroupItem };
Update the import paths to match your project setup.
1import { ToggleGroup, ToggleGroupItem } from "~/components/ui/toggle-group";
1<ToggleGroup>2 <ToggleGroupItem value="option1">Option 1</ToggleGroupItem>3 <ToggleGroupItem value="option2">Option 2</ToggleGroupItem>4 <ToggleGroupItem value="option3">Option 3</ToggleGroupItem>5</ToggleGroup>
1import BoldIcon from "lucide-solid/icons/bold";2import ItalicIcon from "lucide-solid/icons/italic";3import UnderlineIcon from "lucide-solid/icons/underline";4
5import { ToggleGroup, ToggleGroupItem } from "~/components/ui/toggle-group";6
7export default function ToggleGroupDemo() {8 return (9 <ToggleGroup multiple>10 <ToggleGroupItem value="bold" aria-label="Toggle bold">11 <BoldIcon class="h-4 w-4" />12 </ToggleGroupItem>13 <ToggleGroupItem value="italic" aria-label="Toggle italic">14 <ItalicIcon class="h-4 w-4" />15 </ToggleGroupItem>16 <ToggleGroupItem value="strikethrough" aria-label="Toggle strikethrough">17 <UnderlineIcon class="h-4 w-4" />18 </ToggleGroupItem>19 </ToggleGroup>20 );21}