1import {2 Switch,3 SwitchControl,4 SwitchLabel,5 SwitchThumb,6} from "~/components/ui/switch";7
8export default function SwitchDemo() {9 return (10 <Switch class="flex items-center space-x-2">11 <SwitchControl>12 <SwitchThumb />13 </SwitchControl>14 <SwitchLabel>Airplane Mode</SwitchLabel>15 </Switch>16 );17}
npx shadcn@latest add https://solid-ui-neobrutalism.vercel.app/r/switch.json
yarn shadcn@latest add https://solid-ui-neobrutalism.vercel.app/r/switch.json
pnpm dlx shadcn@latest add https://solid-ui-neobrutalism.vercel.app/r/switch.json
bunx --bun shadcn@latest add https://solid-ui-neobrutalism.vercel.app/r/switch.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";2import type { JSX, ValidComponent } from "solid-js";3
4import { splitProps } from "solid-js";5import * as SwitchPrimitive from "@kobalte/core/switch";6
7import { cn } from "~/lib/utils";8
9const Switch = <T extends ValidComponent = "div">(10 props: PolymorphicProps<T, SwitchPrimitive.SwitchRootProps<T>>,11) => {12 return <SwitchPrimitive.Root data-slot="switch" {...props} />;13};14
15const SwitchDescription = <T extends ValidComponent = "div">(16 props: PolymorphicProps<T, SwitchPrimitive.SwitchDescriptionProps<T>>,17) => {18 return (19 <SwitchPrimitive.Description data-slot="switch-description" {...props} />20 );21};22
23const SwitchErrorMessage = <T extends ValidComponent = "div">(24 props: PolymorphicProps<T, SwitchPrimitive.SwitchErrorMessageProps<T>>,25) => {26 return (27 <SwitchPrimitive.ErrorMessage data-slot="switch-error-message" {...props} />28 );29};30
31type SwitchControlProps = SwitchPrimitive.SwitchControlProps & {32 class?: string | undefined;33 children?: JSX.Element;34};35
36const SwitchControl = <T extends ValidComponent = "input">(37 props: PolymorphicProps<T, SwitchControlProps>,38) => {39 const [local, others] = splitProps(props as SwitchControlProps, [40 "class",41 "children",42 ]);43 return (44 <>45 <SwitchPrimitive.Input46 data-slot="switch-input"47 class={cn(48 "[&:focus-visible+div]:ring-2 [&:focus-visible+div]:ring-ring [&:focus-visible+div]:ring-offset-2 [&:focus-visible+div]:ring-offset-background [&:focus-visible+div]:outline-none",49 local.class,50 )}51 />52 <SwitchPrimitive.Control53 data-slot="switch-control"54 class={cn(55 "inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-border bg-secondary-background transition-[color,background-color,box-shadow] ui-disabled:cursor-not-allowed ui-disabled:opacity-50 ui-checked:bg-primary",56 local.class,57 )}58 {...others}59 >60 {local.children}61 </SwitchPrimitive.Control>62 </>63 );64};65
66type SwitchThumbProps = SwitchPrimitive.SwitchThumbProps & {67 class?: string | undefined;68};69
70const SwitchThumb = <T extends ValidComponent = "div">(71 props: PolymorphicProps<T, SwitchThumbProps>,72) => {73 const [local, others] = splitProps(props as SwitchThumbProps, ["class"]);74 return (75 <SwitchPrimitive.Thumb76 data-slot="switch-thumb"77 class={cn(78 "pointer-events-none block size-4 translate-x-1 rounded-full border-2 border-border bg-white ring-0 transition-transform ui-checked:translate-x-5",79 local.class,80 )}81 {...others}82 />83 );84};85
86type SwitchLabelProps = SwitchPrimitive.SwitchLabelProps & {87 class?: string | undefined;88};89
90const SwitchLabel = <T extends ValidComponent = "label">(91 props: PolymorphicProps<T, SwitchLabelProps>,92) => {93 const [local, others] = splitProps(props as SwitchLabelProps, ["class"]);94 return (95 <SwitchPrimitive.Label96 data-slot="switch-label"97 class={cn(98 "text-sm leading-none font-medium ui-disabled:cursor-not-allowed ui-disabled:opacity-70",99 local.class,100 )}101 {...others}102 />103 );104};105
106export {107 Switch,108 SwitchControl,109 SwitchThumb,110 SwitchLabel,111 SwitchDescription,112 SwitchErrorMessage,113};
Update the import paths to match your project setup.
1import {2 Switch,3 SwitchControl,4 SwitchLabel,5 SwitchThumb,6} from "~/components/ui/switch";
1<Switch class="flex items-center space-x-2">2 <SwitchControl>3 <SwitchThumb />4 </SwitchControl>5 <SwitchLabel>Airplane Mode</SwitchLabel>6</Switch>