import React, { createContext, useContext, useRef } from 'react'; import { AriaRadioGroupProps, AriaRadioProps, VisuallyHidden, useFocusRing, } from 'react-aria'; import { RadioGroupState } from 'react-stately'; import cn from '~/utils/cn'; import { useRadio, useRadioGroup } from 'react-aria'; import { useRadioGroupState } from 'react-stately'; interface RadioGroupProps extends AriaRadioGroupProps { children: React.ReactElement[]; className?: string; } const RadioContext = createContext(null); function RadioGroup({ children, label, className, ...props }: RadioGroupProps) { const state = useRadioGroupState(props); const { radioGroupProps, labelProps } = useRadioGroup(props, state); return (
{label} {children}
); } interface RadioProps extends AriaRadioProps { className?: string; } function Radio({ children, className, ...props }: RadioProps) { const state = useContext(RadioContext); const ref = useRef(null); const { inputProps, isSelected, isDisabled } = useRadio(props, state!, ref); const { isFocusVisible, focusProps } = useFocusRing(); return (