{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "switch",
  "title": "Ninaero switch",
  "dependencies": [
    "@base-ui/react@^1.9.0",
    "cn@^0.4.0"
  ],
  "registryDependencies": [
    "https://ninaero.pages.dev/r/theme.json",
    "https://ninaero.pages.dev/r/sound-provider.json"
  ],
  "files": [
    {
      "path": "registry/ninaero/ui/switch.tsx",
      "content": "\"use client\";\n\nimport { useDirection } from \"@base-ui/react/direction-provider\";\nimport { Switch as SwitchPrimitive } from \"@base-ui/react/switch\";\nimport { cn } from \"cn\";\n\nimport { useControlSound, HoverSound } from \"./sound-feedback\";\n\nfunction Switch({\n  className,\n  size = \"default\",\n  onCheckedChange,\n  sound = true,\n  ...props\n}: SwitchPrimitive.Root.Props & {\n  size?: \"sm\" | \"default\";\n  sound?: boolean;\n}) {\n  const direction = useDirection();\n  const { play } = useControlSound(sound);\n\n  return (\n    <HoverSound sound={sound}>\n      <SwitchPrimitive.Root\n        data-slot=\"switch\"\n        data-direction={direction}\n        data-size={size}\n        className={cn(\n          \"ninaero-switch peer group/switch relative inline-flex shrink-0 items-center rounded-full after:absolute after:-inset-x-3 after:-inset-y-2\",\n          className,\n        )}\n        {...props}\n        onCheckedChange={(checked, details) => {\n          onCheckedChange?.(checked, details);\n          if (sound && !details.isCanceled && details.event.type !== \"reset\") {\n            play(checked ? \"on\" : \"off\");\n          }\n        }}\n      >\n        <SwitchPrimitive.Thumb\n          data-slot=\"switch-thumb\"\n          className=\"ninaero-switch-thumb pointer-events-none block shrink-0\"\n        />\n      </SwitchPrimitive.Root>\n    </HoverSound>\n  );\n}\n\nexport { Switch };\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}