{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "extends": "none",
  "name": "radio",
  "title": "radio",
  "description": "radio",
  "dependencies": [
    "react-aria-components",
    "tailwind-merge"
  ],
  "registryDependencies": [
    "https://intentui.com/r/primitive",
    "https://intentui.com/r/field"
  ],
  "files": [
    {
      "path": "src/components/ui/radio.tsx",
      "content": "'use client'\n\nimport { composeRenderProps } from 'react-aria-components/composeRenderProps'\nimport {\n  RadioButton,\n  type RadioButtonProps,\n  RadioField as RadioFieldPrimitive,\n  type RadioFieldProps,\n  RadioGroup as RadioGroupPrimitive,\n  type RadioGroupProps,\n} from 'react-aria-components/RadioGroup'\nimport { twMerge } from 'tailwind-merge'\nimport { cx } from '@/lib/primitive'\nimport { Label } from '@/components/ui/field'\n\nexport function RadioGroup({ className, ...props }: RadioGroupProps) {\n  return (\n    <RadioGroupPrimitive\n      {...props}\n      data-slot=\"control\"\n      className={cx(\n        'space-y-3 has-[[slot=description]]:not-has-[[slot=errorMessage]]:space-y-6 *:data-[slot=label]:font-medium',\n        className\n      )}\n    />\n  )\n}\n\nexport function RadioField({ className, ...props }: RadioFieldProps) {\n  return (\n    <RadioFieldPrimitive\n      {...props}\n      className={cx(\n        'grid grid-cols-[1.125rem_1fr] gap-x-3 gap-y-1 sm:grid-cols-[1rem_1fr]',\n        '*:data-[slot=control]:col-start-1 *:data-[slot=control]:row-start-1 *:data-[slot=control]:mt-0.75 sm:*:data-[slot=control]:mt-1',\n        '**:data-[slot=control-label]:col-start-2 **:data-[slot=control-label]:row-start-1',\n        '*:[[slot=description]]:col-start-2 *:[[slot=description]]:row-start-2',\n        'has-[[slot=description]]:**:data-[slot=control-label]:font-medium',\n        className\n      )}\n      data-slot=\"control\"\n    />\n  )\n}\n\nexport function Radio({ className, children, ...props }: RadioButtonProps) {\n  return (\n    <RadioButton\n      data-slot=\"control\"\n      className={cx('group gap-x-3 inline-flex col-span-full focus:outline-hidden ', className)}\n      {...props}\n    >\n      {composeRenderProps(children, (children, { isSelected, isInvalid }) => {\n        return (\n          <>\n            <span\n              data-slot=\"indicator\"\n              className={twMerge([\n                \"relative col-start-1 row-start-1 mt-0.75 sm:mt-1 inset-ring inset-ring-input isolate flex size-4.5 shrink-0 items-center justify-center rounded-full bg-(--control-bg,transparent) text-bg transition before:absolute before:inset-auto before:size-2 before:shrink-0 before:rounded-full before:content-[''] hover:before:bg-muted-fg/20 sm:size-4 sm:before:size-1.7\",\n                'in-disabled:bg-muted',\n                isSelected && [\n                  'inset-ring-(--radio-ring,var(--color-ring)) bg-(--radio-bg,var(--color-primary)) text-(--radio-fg,var(--color-primary-fg)) before:bg-bg hover:before:bg-muted/90',\n                  'group-invalid:inset-ring-danger-subtle-fg/70 group-invalid:bg-danger group-invalid:text-danger-fg',\n                ],\n                isInvalid &&\n                  'inset-ring-danger-subtle-fg/70 bg-danger-subtle/5 text-danger-fg ring-danger-subtle-fg/20',\n              ])}\n            />\n            <Label data-slot=\"control-label\" elementType=\"span\">\n              {children}\n            </Label>\n          </>\n        )\n      })}\n    </RadioButton>\n  )\n}\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}