import { Radio } from '@base-ui/react/radio'; import { RadioGroup } from '@base-ui/react/radio-group'; import clsx from 'clsx'; import type { ReactNode } from 'react'; import { twMerge } from '@/utils/twMerge'; export interface ImageRadioOption { value: T; label: string; image: ReactNode; disabled?: boolean; } export interface ImageRadioGroupProps { value: T; onChange: (value: T) => void; options: ImageRadioOption[]; 'aria-label': string; className?: string; } export default function ImageRadioGroup({ value, onChange, options, 'aria-label': ariaLabel, className, }: ImageRadioGroupProps) { return ( onChange(newValue as T)} aria-label={ariaLabel} className={twMerge(clsx('grid auto-rows-min gap-4'), className)} style={{ gridTemplateColumns: `repeat(auto-fill, minmax(calc(var(--spacing) * 20), 1fr))`, }} > {options.map((option) => { const isSelected = value === option.value; const isDisabled = option.disabled; return (
{option.image}
{option.label}
); })}
); }