{"version":3,"file":"RadioGroup.mjs","sources":["../../../../src/components/Radio/RadioGroup/RadioGroup.tsx"],"sourcesContent":["import { useId, useUncontrolled } from '@raikou/hooks';\nimport { factory, Factory, RaikouSize, useProps } from '../../../core';\nimport { Input, InputWrapperProps, InputWrapperStylesNames } from '../../Input';\nimport { InputsGroupFieldset } from '../../InputsGroupFieldset';\nimport { RadioGroupProvider } from '../RadioGroup.context';\n\nexport type RadioGroupStylesNames = InputWrapperStylesNames;\n\nexport interface RadioGroupProps\n  extends Omit<InputWrapperProps, 'onChange' | 'value' | 'defaultValue'> {\n  /** `Radio` components and any other elements */\n  children: React.ReactNode;\n\n  /** Controlled component value */\n  value?: string | null;\n\n  /** Default value for uncontrolled component */\n  defaultValue?: string | null;\n\n  /** Called when value changes */\n  onChange?: (value: string) => void;\n\n  /** Props passed down to the `Input.Wrapper` */\n  wrapperProps?: Record<string, any>;\n\n  /** Controls size of the `Input.Wrapper`, `'sm'` by default */\n  size?: RaikouSize;\n\n  /** `name` attribute of child radio inputs. By default, `name` is generated randomly. */\n  name?: string;\n\n  /** If set, value cannot be changed */\n  readOnly?: boolean;\n}\n\nexport type RadioGroupFactory = Factory<{\n  props: RadioGroupProps;\n  ref: HTMLDivElement;\n  stylesNames: RadioGroupStylesNames;\n}>;\n\nconst defaultProps: Partial<RadioGroupProps> = {};\n\nexport const RadioGroup = factory<RadioGroupFactory>((props, ref) => {\n  const { value, defaultValue, onChange, size, wrapperProps, children, name, readOnly, ...others } =\n    useProps('RadioGroup', defaultProps, props);\n\n  const _name = useId(name);\n\n  const [_value, setValue] = useUncontrolled({\n    value: value as string,\n    defaultValue: defaultValue as string,\n    finalValue: '',\n    onChange,\n  });\n\n  const handleChange = (event: React.ChangeEvent<HTMLInputElement> | string) =>\n    !readOnly && setValue(typeof event === 'string' ? event : event.currentTarget.value);\n\n  return (\n    <RadioGroupProvider value={{ value: _value, onChange: handleChange, size, name: _name }}>\n      <Input.Wrapper\n        size={size}\n        ref={ref}\n        {...wrapperProps}\n        {...others}\n        labelElement=\"div\"\n        __staticSelector=\"RadioGroup\"\n      >\n        <InputsGroupFieldset role=\"radiogroup\">{children}</InputsGroupFieldset>\n      </Input.Wrapper>\n    </RadioGroupProvider>\n  );\n});\n\nRadioGroup.classes = Input.Wrapper.classes;\nRadioGroup.displayName = '@raikou/core/RadioGroup';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAyCA,MAAM,eAAyC,EAAC;AAEzC,MAAM,UAAa,GAAA,OAAA,CAA2B,CAAC,KAAA,EAAO,GAAQ,KAAA;AACnE,EAAA,MAAM,EAAE,KAAA,EAAO,YAAc,EAAA,QAAA,EAAU,MAAM,YAAc,EAAA,QAAA,EAAU,IAAM,EAAA,QAAA,EAAU,GAAG,MAAO,EAAA,GAC7F,QAAS,CAAA,YAAA,EAAc,cAAc,KAAK,CAAA;AAE5C,EAAM,MAAA,KAAA,GAAQ,MAAM,IAAI,CAAA;AAExB,EAAA,MAAM,CAAC,MAAA,EAAQ,QAAQ,CAAA,GAAI,eAAgB,CAAA;AAAA,IACzC,KAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAY,EAAA,EAAA;AAAA,IACZ;AAAA,GACD,CAAA;AAED,EAAA,MAAM,YAAe,GAAA,CAAC,KACpB,KAAA,CAAC,QAAY,IAAA,QAAA,CAAS,OAAO,KAAA,KAAU,QAAW,GAAA,KAAA,GAAQ,KAAM,CAAA,aAAA,CAAc,KAAK,CAAA;AAErF,EACE,uBAAA,GAAA,CAAC,kBAAmB,EAAA,EAAA,KAAA,EAAO,EAAE,KAAA,EAAO,MAAQ,EAAA,QAAA,EAAU,YAAc,EAAA,IAAA,EAAM,IAAM,EAAA,KAAA,EAC9E,EAAA,QAAA,kBAAA,GAAA;AAAA,IAAC,KAAM,CAAA,OAAA;AAAA,IAAN;AAAA,MACC,IAAA;AAAA,MACA,GAAA;AAAA,MACC,GAAG,YAAA;AAAA,MACH,GAAG,MAAA;AAAA,MACJ,YAAa,EAAA,KAAA;AAAA,MACb,gBAAiB,EAAA,YAAA;AAAA,MAEjB,QAAC,kBAAA,GAAA,CAAA,mBAAA,EAAA,EAAoB,IAAK,EAAA,YAAA,EAAc,QAAS,EAAA;AAAA;AAAA,GAErD,EAAA,CAAA;AAEJ,CAAC;AAED,UAAW,CAAA,OAAA,GAAU,MAAM,OAAQ,CAAA,OAAA;AACnC,UAAA,CAAW,WAAc,GAAA,yBAAA;;;;"}