1import BoldIcon from "lucide-solid/icons/bold";2
3import { Toggle } from "~/components/ui/toggle";4
5export default function ToggleDemo() {6 return (7 <Toggle variant="outline">8 <BoldIcon />9 </Toggle>10 );11}
npx shadcn@latest add https://solid-ui-neobrutalism.vercel.app/r/toggle.json
yarn shadcn@latest add https://solid-ui-neobrutalism.vercel.app/r/toggle.json
pnpm dlx shadcn@latest add https://solid-ui-neobrutalism.vercel.app/r/toggle.json
bunx --bun shadcn@latest add https://solid-ui-neobrutalism.vercel.app/r/toggle.json
Install the following dependencies
npm install @kobalte/core
yarn add @kobalte/core
pnpm add @kobalte/core
bun add @kobalte/core
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 { ValidComponent } from "solid-js";4
5import { splitProps } from "solid-js";6import * as ToggleButtonPrimitive from "@kobalte/core/toggle-button";7import { cva } from "class-variance-authority";8
9import { cn } from "~/lib/utils";10
11const toggleVariants = cva(12 "inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50",13 {14 variants: {15 variant: {16 default:17 "bg-transparent ui-pressed:border-2 ui-pressed:border-border ui-pressed:bg-primary/80",18 transparent: "bg-transparent",19 outline:20 "border-2 border-border bg-transparent shadow-sm ui-pressed:bg-primary/80",21 outlineTransparent: "border-2 border-border bg-transparent shadow-sm",22 },23 size: {24 default: "h-9 px-3",25 sm: "h-8 px-2",26 lg: "h-10 px-3",27 },28 },29 defaultVariants: {30 variant: "default",31 size: "default",32 },33 },34);35
36type ToggleButtonRootProps<T extends ValidComponent = "button"> =37 ToggleButtonPrimitive.ToggleButtonRootProps<T> &38 VariantProps<typeof toggleVariants> & { class?: string | undefined };39
40const Toggle = <T extends ValidComponent = "button">(41 props: PolymorphicProps<T, ToggleButtonRootProps<T>>,42) => {43 const [local, others] = splitProps(props as ToggleButtonRootProps, [44 "class",45 "variant",46 "size",47 ]);48 return (49 <ToggleButtonPrimitive.Root50 data-slot="toggle-button"51 class={cn(52 toggleVariants({ variant: local.variant, size: local.size }),53 local.class,54 )}55 {...others}56 />57 );58};59
60export type { ToggleButtonRootProps as ToggleProps };61export { toggleVariants, Toggle };
Update the import paths to match your project setup.
1import { Toggle } from "~/components/ui/toggle";
1<Toggle>2 Toggle me3</Toggle>