| import { cn } from "@/lib/utils"; |
|
|
| export function Switch({ |
| checked, |
| onCheckedChange, |
| className, |
| disabled, |
| }: { |
| checked: boolean; |
| onCheckedChange: (v: boolean) => void; |
| className?: string; |
| disabled?: boolean; |
| }) { |
| return ( |
| <button |
| type="button" |
| role="switch" |
| aria-checked={checked} |
| disabled={disabled} |
| className={cn( |
| "peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center border border-border transition-colors", |
| "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-foreground/30", |
| "disabled:cursor-not-allowed disabled:opacity-50", |
| checked ? "bg-foreground/15 border-foreground/30" : "bg-background", |
| className, |
| )} |
| onClick={() => onCheckedChange(!checked)} |
| > |
| <span |
| className={cn( |
| "pointer-events-none block h-3.5 w-3.5 transition-transform", |
| checked ? "translate-x-4 bg-foreground" : "translate-x-0.5 bg-muted-foreground", |
| )} |
| /> |
| </button> |
| ); |
| } |
|
|