{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "extends": "none",
  "name": "switch",
  "title": "switch",
  "description": "switch",
  "dependencies": [
    "react-aria-components",
    "tailwind-merge"
  ],
  "registryDependencies": [
    "https://intentui.com/r/field",
    "https://intentui.com/r/primitive"
  ],
  "files": [
    {
      "path": "src/components/ui/switch.tsx",
      "content": "import {\n  SwitchButton,\n  type SwitchButtonProps,\n  SwitchField as SwitchFieldPrimitive,\n  type SwitchFieldProps,\n} from 'react-aria-components/Switch'\nimport { twJoin, twMerge } from 'tailwind-merge'\nimport { Label } from '@/components/ui/field'\nimport { cx } from '@/lib/primitive'\n\nexport function SwitchField({ className, ...props }: SwitchFieldProps) {\n  return (\n    <SwitchFieldPrimitive\n      {...props}\n      data-slot=\"control\"\n      className={cx('has-[[slot=description]]:**:data-[slot=control-label]:font-medium', className)}\n      style={({ defaultStyle }) => ({\n        ...defaultStyle,\n        WebkitTapHighlightColor: 'transparent',\n      })}\n    />\n  )\n}\n\nexport function Switch({ children, className, ...props }: SwitchButtonProps) {\n  return (\n    <SwitchButton\n      className={cx(\n        '[--switch-bg-ring:var(--color-blue-700)]/90 [--switch-bg:var(--color-blue-600)] dark:[--switch-bg-ring:transparent]',\n        '[--switch-ring:var(--color-blue-700)]/90 [--switch-shadow:var(--color-blue-900)]/20 [--switch:white]',\n        'group relative grid cursor-default gap-x-6 gap-y-1 ltr:grid-cols-[1fr_auto] rtl:grid-cols-[auto_1fr]',\n        '*:data-[slot=control-label]:row-start-1 ltr:*:data-[slot=control-label]:col-start-1 rtl:*:data-[slot=control-label]:col-start-2',\n        '*:[[slot=description]]:row-start-2 ltr:*:[[slot=description]]:col-start-1 rtl:*:[[slot=description]]:col-start-2',\n        'disabled:opacity-50',\n        className\n      )}\n      {...props}\n    >\n      {(values) => (\n        <>\n          <span\n            data-slot=\"indicator\"\n            className={twMerge(\n              'relative isolate inline-flex h-6 w-10 cursor-default self-start rounded-full p-0.75 sm:mt-0.5 sm:h-5 sm:w-8 ltr:col-start-2 rtl:col-start-1',\n              'transition duration-200 ease-in-out',\n              'inset-ring inset-ring-input bg-input/30',\n              'forced-colors:outline forced-colors:[--switch-bg:Highlight]',\n              values.isHovered && 'inset-ring-muted-fg/30',\n              values.isFocusVisible &&\n                'inset-ring-ring/70 selected:inset-ring-(--switch-bg)/30 bg-(--switch-bg)/20 ring-(--switch-bg)/20 ring-2 dark:inset-ring-(--switch-bg)/70',\n              values.isSelected &&\n                'inset-ring-(--switch-shadow) bg-(--switch-bg) dark:inset-ring-(--switch-bg-ring) dark:bg-(--switch-bg)',\n              values.isDisabled &&\n                'dark:group-disabled:bg-muted-fg/30 dark:group-disabled:group-selected:inset-ring-muted-fg/30 dark:group-disabled:group-selected:bg-(--switch-bg)'\n            )}\n          >\n            <span\n              aria-hidden=\"true\"\n              className={twJoin(\n                'pointer-events-none relative inline-block size-4.5 translate-x-0 rounded-full border border-transparent bg-white shadow-sm ring ring-fg/5 transition duration-200 ease-in-out sm:size-3.5',\n                values.isSelected &&\n                  'bg-(--switch) shadow-(--switch-shadow) ring-(--switch-ring) group-disabled:shadow-sm group-disabled:ring-secondary-fg/5 ltr:translate-x-4 ltr:sm:translate-x-3 rtl:-translate-x-4 rtl:sm:-translate-x-3'\n              )}\n            />\n          </span>\n          {typeof children === 'function' ? (\n            children(values)\n          ) : typeof children === 'string' ? (\n            <Label elementType=\"span\" data-slot=\"control-label\">\n              {children}\n            </Label>\n          ) : (\n            children\n          )}\n        </>\n      )}\n    </SwitchButton>\n  )\n}\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}