{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "radio-group",
  "title": "Radio group",
  "description": "Radio Group uses Base UI, not Radix. A Radio is a branded circular control by default, on the 3:1 control border with a 32px hit area; checked, it fills with the accent and draws an ink dot inside that border; aria-invalid draws a 2px --danger edge, the border plus a solid 1px ring, never an opacity fade, measured at 4.38:1 or better on every ground. Compose it with a kit Button to keep button styling without nesting controls. RadioGroup provides roving focus, arrow-key selection, wrapping and native form values.",
  "dependencies": [
    "@base-ui/react@1.9.0",
    "lucide-react@1.33.0"
  ],
  "registryDependencies": [
    "@waimakers/utils",
    "@waimakers/theme"
  ],
  "files": [
    {
      "path": "src/components/ui/radio-group.tsx",
      "content": "import { Radio as RadioPrimitive, type RadioRootProps } from \"@base-ui/react/radio\";\nimport {\n  RadioGroup as RadioGroupPrimitive,\n  type RadioGroupProps,\n} from \"@base-ui/react/radio-group\";\nimport { CircleIcon } from \"lucide-react\";\n\nimport { cn, focusRing, invalidRing } from \"../../lib/utils\";\n\nfunction RadioGroup<Value>({\n  className,\n  ...props\n}: Omit<RadioGroupProps<Value>, \"className\"> & { className?: string }) {\n  return (\n    <RadioGroupPrimitive\n      data-slot=\"radio-group\"\n      className={cn(\"grid gap-3\", className)}\n      {...props}\n    />\n  );\n}\n\ntype RadioProps<Value = unknown> = Omit<RadioRootProps<Value>, \"className\"> & {\n  className?: string;\n};\n\nfunction Radio<Value>({ className, children, render, ...props }: RadioProps<Value>) {\n  const isComposedControl = render !== undefined;\n\n  return (\n    <RadioPrimitive.Root\n      data-slot=\"radio\"\n      className={\n        isComposedControl\n          ? className\n          : cn(\n              \"relative flex size-4 shrink-0 items-center justify-center rounded-full border border-input bg-background text-primary-foreground transition-[background-color,border-color,box-shadow] ease-brand\",\n              \"after:absolute after:-inset-2 after:content-['']\",\n              focusRing,\n              invalidRing,\n              \"data-checked:bg-primary data-disabled:cursor-not-allowed data-disabled:opacity-50\",\n              className,\n            )\n      }\n      render={render}\n      {...props}\n    >\n      {children ??\n        (isComposedControl ? null : (\n          <RadioPrimitive.Indicator\n            data-slot=\"radio-indicator\"\n            className=\"relative flex items-center justify-center text-primary-foreground\"\n          >\n            <CircleIcon aria-hidden className=\"size-2 fill-current\" />\n          </RadioPrimitive.Indicator>\n        ))}\n    </RadioPrimitive.Root>\n  );\n}\n\nexport { Radio, RadioGroup };\nexport type { RadioProps };\n",
      "type": "registry:ui",
      "target": "components/ui/radio-group.tsx"
    }
  ],
  "type": "registry:ui"
}