import React, { forwardRef, useId } from 'react'; import { cn } from '../../utils/cn'; export interface RadioProps extends Omit, 'size'> { /** * Text label for the radio */ label?: React.ReactNode; /** * Additional description text */ description?: React.ReactNode; /** * Error message or error state */ error?: boolean | string; /** * Size of the radio * @default 'md' */ size?: 'sm' | 'md' | 'lg'; /** * Custom class for the container element */ containerClassName?: string; /** * Custom class for the label */ labelClassName?: string; /** * Help text shown below the radio */ helpText?: React.ReactNode; } export const Radio = forwardRef( ( { id, label, description, error, size = 'md', className, containerClassName, labelClassName, disabled, helpText, ...props }, ref ) => { // Use React's useId hook for stable ID generation const generatedId = useId(); const radioId = id || `radio-${generatedId}`; return (
{label && ( )}
{(error || helpText) && (
{typeof error === 'string' ? error : helpText}
)}
); } ); Radio.displayName = 'Radio'; export default Radio;