{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "switch", "type": "registry:ui", "title": "Switch", "description": "Smooth toggle switch component with accessible state.", "dependencies": [], "registryDependencies": [], "files": [ { "path": "registry/starkui/switch.tsx", "content": "\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface SwitchProps\n extends Omit, \"onChange\"> {\n checked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst sizes = {\n sm: { track: \"h-5 w-9 p-0.5\", thumb: \"h-4 w-4 data-[state=checked]:translate-x-4\" },\n md: { track: \"h-6 w-11 p-0.5\", thumb: \"h-5 w-5 data-[state=checked]:translate-x-5\" },\n lg: { track: \"h-7 w-13 p-1\", thumb: \"h-5 w-5 data-[state=checked]:translate-x-6\" },\n} as const;\n\nexport function Switch({\n checked: controlledChecked,\n defaultChecked = false,\n onCheckedChange,\n size = \"md\",\n disabled = false,\n className,\n ...props\n}: SwitchProps) {\n const [internalChecked, setInternalChecked] = React.useState(defaultChecked);\n const isChecked = controlledChecked ?? internalChecked;\n\n const toggle = () => {\n if (disabled) return;\n const next = !isChecked;\n if (controlledChecked === undefined) {\n setInternalChecked(next);\n }\n onCheckedChange?.(next);\n };\n\n return (\n \n \n \n );\n}\n", "type": "registry:ui", "target": "components/ui/switch.tsx" } ] }