{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "switch",
  "title": "Switch",
  "description": "Switch primitive with Circle consent styling.",
  "dependencies": [
    "@radix-ui/react-switch"
  ],
  "registryDependencies": [
    "@circle-ui/utils"
  ],
  "files": [
    {
      "path": "registry/berlin/circle-ui/switch.tsx",
      "content": "// Generated from packages/ui/src/components/switch.tsx\n\"use client\";\n\nimport * as React from \"react\";\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\";\n\nimport { cn } from \"@/registry/berlin/lib/utils\";\n\nfunction CheckIcon({ className }: { className?: string }) {\n  return (\n    <svg\n      className={className}\n      viewBox=\"0 0 12 12\"\n      fill=\"none\"\n      aria-hidden=\"true\"\n    >\n      <path\n        d=\"M9.9 2.9 4.7 8.4 2.1 5.8\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n    </svg>\n  );\n}\n\nfunction CrossIcon({ className }: { className?: string }) {\n  return (\n    <svg\n      className={className}\n      viewBox=\"0 0 12 12\"\n      fill=\"none\"\n      aria-hidden=\"true\"\n    >\n      <path\n        d=\"m3 3 6 6m0-6-6 6\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n        strokeLinecap=\"round\"\n      />\n    </svg>\n  );\n}\n\nexport interface SwitchProps\n  extends Omit<\n    React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>,\n    \"checked\" | \"defaultChecked\" | \"onChange\" | \"onCheckedChange\"\n  > {\n  ariaLabel?: string;\n  checked?: boolean;\n  defaultChecked?: boolean;\n  onChange?: (checked: boolean) => void;\n}\n\nexport const Switch = React.forwardRef<\n  React.ElementRef<typeof SwitchPrimitive.Root>,\n  SwitchProps\n>(\n  (\n    {\n      ariaLabel,\n      checked,\n      className,\n      defaultChecked,\n      disabled,\n      onChange,\n      ...props\n    },\n    ref,\n  ) => {\n    return (\n      <SwitchPrimitive.Root\n        ref={ref}\n        aria-label={ariaLabel}\n        checked={checked}\n          className={cn(\n            \"group relative inline-flex h-6 w-10 cursor-pointer items-center justify-start rounded-[24px] border border-black/20 bg-transparent p-[3px] align-middle box-border select-none touch-manipulation transition-opacity [-webkit-tap-highlight-color:transparent]\",\n            \"focus-visible:outline-[2px] focus-visible:outline-black/40 focus-visible:outline-offset-2\",\n          \"disabled:cursor-not-allowed disabled:opacity-50\",\n          className,\n        )}\n        defaultChecked={defaultChecked}\n        disabled={disabled}\n        onCheckedChange={onChange}\n        {...props}\n      >\n        <SwitchPrimitive.Thumb\n          className={cn(\n            \"flex h-4 w-4 translate-x-0 items-center justify-center rounded-full bg-black text-white transition-transform duration-[90ms] [transition-timing-function:cubic-bezier(0.77,0,0.18,1)] will-change-transform\",\n            \"data-[state=checked]:translate-x-[18px]\",\n          )}\n        >\n          <span className=\"relative block h-3 w-3\" aria-hidden=\"true\">\n            <CrossIcon className=\"absolute inset-0 opacity-100 transition-opacity duration-[60ms] ease-linear group-data-[state=checked]:opacity-0\" />\n            <CheckIcon className=\"absolute inset-0 opacity-0 transition-opacity duration-[60ms] ease-linear group-data-[state=checked]:opacity-100\" />\n          </span>\n        </SwitchPrimitive.Thumb>\n      </SwitchPrimitive.Root>\n    );\n  },\n);\n\nSwitch.displayName = SwitchPrimitive.Root.displayName;\n",
      "type": "registry:ui",
      "target": "src/components/circle/ui/switch.tsx"
    }
  ],
  "type": "registry:ui"
}