Switch
BaseToggle switch for boolean settings.
Preview
Usage
example.jsx
import { Switch } from "@/components/ui/switch";
export default function Example() {
return <Switch />;
}Source Code
Copy this file into components/ui/switch.jsx in your project.
switch.jsx
"use client";
import { forwardRef } from "react";
import { cn } from "@/lib/utils";
const Switch = forwardRef(
({ className, checked, onCheckedChange, disabled, ...props }, ref) => {
return (
<button
type="button"
role="switch"
aria-checked={checked}
disabled={disabled}
ref={ref}
onClick={() => onCheckedChange?.(!checked)}
className={cn(
"peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent",
"shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2",
"focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
"disabled:cursor-not-allowed disabled:opacity-50",
checked ? "bg-primary" : "bg-input",
className
)}
{...props}
>
<span
className={cn(
"pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform",
checked ? "translate-x-4" : "translate-x-0"
)}
/>
</button>
);
}
);
Switch.displayName = "Switch";
export { Switch };
Quick Install
Make sure you have the cn() utility set up. It requires clsx and tailwind-merge.
npm install clsx tailwind-merge