{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "radio-group",
  "title": "TIS Radio Group",
  "author": "TIS Experience Engineering",
  "description": "Radio Group React com seleção exclusiva e teclado por Base UI, preservando fieldset e legend do DS TIS.",
  "dependencies": [
    "@base-ui/react@1.6.0",
    "clsx@2.1.1",
    "tailwind-merge@3.6.0",
    "ds-tis@github:tis-experience/ds-tis#dd4c906943847cb7664a72a0c7637a378b39adcc"
  ],
  "files": [
    {
      "path": "registry/tis/radio-group.tsx",
      "content": "import * as React from \"react\"\nimport { Radio as RadioPrimitive } from \"@base-ui/react/radio\"\nimport { RadioGroup as RadioGroupPrimitive } from \"@base-ui/react/radio-group\"\n\nimport { cn } from \"./tis-utils\"\n\ntype RadioSize = \"sm\" | \"md\" | \"lg\"\n\ntype RadioGroupProps<Value = any> = Omit<\n  RadioGroupPrimitive.Props<Value>,\n  \"className\"\n> & {\n  className?: string\n  invalid?: boolean\n}\n\nfunction RadioGroup<Value = any>({\n  className,\n  invalid = false,\n  render,\n  ...props\n}: RadioGroupProps<Value>) {\n  return (\n    <RadioGroupPrimitive\n      data-slot=\"radio-group\"\n      data-invalid={invalid || undefined}\n      aria-invalid={invalid || undefined}\n      render={render ?? <fieldset />}\n      className={cn(\n        \"ds-radio-group\",\n        invalid && \"ds-radio-group--error\",\n        className,\n      )}\n      {...props}\n    />\n  )\n}\n\ntype RadioGroupItemProps = Omit<RadioPrimitive.Root.Props, \"className\"> & {\n  className?: string\n  size?: RadioSize\n}\n\nfunction RadioGroupItem({\n  className,\n  size = \"md\",\n  ...props\n}: RadioGroupItemProps) {\n  return (\n    <RadioPrimitive.Root\n      data-slot=\"radio-group-item\"\n      className={cn(\n        \"ds-radio\",\n        size !== \"md\" && `ds-radio--${size}`,\n        className,\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction RadioGroupLegend({ className, ...props }: React.ComponentProps<\"legend\">) {\n  return <legend data-slot=\"radio-group-legend\" className={cn(\"ds-radio-group__legend\", className)} {...props} />\n}\n\nfunction RadioGroupOption({ className, ...props }: React.ComponentProps<\"label\">) {\n  return <label data-slot=\"radio-group-option\" className={cn(\"ds-radio-label\", className)} {...props} />\n}\n\nfunction RadioGroupContent({ className, ...props }: React.ComponentProps<\"span\">) {\n  return <span data-slot=\"radio-group-content\" className={cn(\"ds-radio__content\", className)} {...props} />\n}\n\nfunction RadioGroupLabel({ className, ...props }: React.ComponentProps<\"span\">) {\n  return <span data-slot=\"radio-group-label\" className={cn(\"ds-radio__label\", className)} {...props} />\n}\n\nfunction RadioGroupDescription({ className, ...props }: React.ComponentProps<\"span\">) {\n  return <span data-slot=\"radio-group-description\" className={cn(\"ds-radio__description\", className)} {...props} />\n}\n\nfunction RadioGroupHelper({ className, ...props }: React.ComponentProps<\"span\">) {\n  return <span data-slot=\"radio-group-helper\" className={cn(\"ds-radio__helper\", className)} {...props} />\n}\n\nfunction RadioGroupError({ className, ...props }: React.ComponentProps<\"span\">) {\n  return <span role=\"alert\" data-slot=\"radio-group-error\" className={cn(\"ds-radio-group__error\", className)} {...props} />\n}\n\nexport {\n  RadioGroup,\n  RadioGroupContent,\n  RadioGroupDescription,\n  RadioGroupError,\n  RadioGroupHelper,\n  RadioGroupItem,\n  RadioGroupLabel,\n  RadioGroupLegend,\n  RadioGroupOption,\n  type RadioGroupItemProps,\n  type RadioGroupProps,\n  type RadioSize,\n}\n",
      "type": "registry:ui",
      "target": "@ui/radio-group.tsx"
    },
    {
      "path": "registry/tis/tis-utils.ts",
      "content": "import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs))\n}\n",
      "type": "registry:lib",
      "target": "@ui/tis-utils.ts"
    }
  ],
  "css": {
    "@import \"ds-tis/css\"": {},
    ".ds-radio[data-checked]": {
      "background-color": "var(--ds-radio-control-fill-selected-default)",
      "border-color": "var(--ds-radio-control-border-color-selected-default)",
      "border-width": "var(--ds-radio-control-border-width-selected-default)"
    },
    ".ds-radio[data-checked]::after": {
      "opacity": "1"
    },
    ".ds-radio:hover:not([data-disabled])": {
      "background-color": "var(--ds-radio-control-fill-unselected-hover)",
      "border-color": "var(--ds-radio-control-border-color-unselected-hover)"
    },
    ".ds-radio[data-checked]:hover:not([data-disabled])": {
      "background-color": "var(--ds-radio-control-fill-selected-hover)",
      "border-color": "var(--ds-radio-control-border-color-selected-hover)"
    },
    ".ds-radio[data-checked]:hover:not([data-disabled])::after": {
      "background-color": "var(--ds-radio-dot-fill-selected-hover)"
    },
    ".ds-radio[data-disabled]": {
      "background-color": "var(--ds-radio-control-fill-unselected-disabled)",
      "border-color": "var(--ds-radio-control-border-color-unselected-disabled)",
      "cursor": "not-allowed"
    },
    ".ds-radio[data-checked][data-disabled]": {
      "background-color": "var(--ds-radio-control-fill-selected-disabled)",
      "border-width": "0"
    },
    ".ds-radio[data-checked][data-disabled]::after": {
      "background-color": "var(--ds-radio-dot-fill-selected-disabled)"
    },
    ".ds-radio-label:has(.ds-radio[data-disabled])": {
      "cursor": "not-allowed",
      "color": "var(--ds-form-field-label-color-disabled)"
    },
    ".ds-radio-label:has(.ds-radio[data-disabled]) .ds-radio__label": {
      "color": "var(--ds-form-field-label-color-disabled)"
    }
  },
  "meta": {
    "provider": "Base UI",
    "providerRole": "output-provider",
    "status": "beta",
    "wave": "forms"
  },
  "docs": "RadioGroup renderiza fieldset por padrão; use RadioGroupLegend e RadioGroupOption. Mantenha @import \"ds-tis/css\" como o primeiro import do CSS global.",
  "type": "registry:ui"
}