@alfalab/core-components-radio-group 6.0.2 → 6.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/Component.responsive.d.ts +4 -4
  2. package/components/base-radio-group/Component.d.ts +2 -2
  3. package/components/base-radio-group/Component.js.map +1 -1
  4. package/components/base-radio-group/index.css +15 -15
  5. package/components/base-radio-group/index.module.css.js +1 -1
  6. package/cssm/Component.responsive.d.ts +4 -4
  7. package/cssm/components/base-radio-group/Component.d.ts +2 -2
  8. package/cssm/components/base-radio-group/Component.js.map +1 -1
  9. package/cssm/desktop/Component.desktop.d.ts +1 -1
  10. package/cssm/mobile/Component.mobile.d.ts +1 -1
  11. package/desktop/Component.desktop.d.ts +1 -1
  12. package/desktop/desktop.css +5 -5
  13. package/desktop/desktop.module.css.js +1 -1
  14. package/esm/Component.responsive.d.ts +4 -4
  15. package/esm/components/base-radio-group/Component.d.ts +2 -2
  16. package/esm/components/base-radio-group/Component.js.map +1 -1
  17. package/esm/components/base-radio-group/index.css +15 -15
  18. package/esm/components/base-radio-group/index.module.css.js +1 -1
  19. package/esm/desktop/Component.desktop.d.ts +1 -1
  20. package/esm/desktop/desktop.css +5 -5
  21. package/esm/desktop/desktop.module.css.js +1 -1
  22. package/esm/mobile/Component.mobile.d.ts +1 -1
  23. package/esm/mobile/mobile.css +7 -7
  24. package/esm/mobile/mobile.module.css.js +1 -1
  25. package/mobile/Component.mobile.d.ts +1 -1
  26. package/mobile/mobile.css +7 -7
  27. package/mobile/mobile.module.css.js +1 -1
  28. package/modern/Component.responsive.d.ts +4 -4
  29. package/modern/components/base-radio-group/Component.d.ts +2 -2
  30. package/modern/components/base-radio-group/Component.js.map +1 -1
  31. package/modern/components/base-radio-group/index.css +15 -15
  32. package/modern/components/base-radio-group/index.module.css.js +1 -1
  33. package/modern/desktop/Component.desktop.d.ts +1 -1
  34. package/modern/desktop/desktop.css +5 -5
  35. package/modern/desktop/desktop.module.css.js +1 -1
  36. package/modern/mobile/Component.mobile.d.ts +1 -1
  37. package/modern/mobile/mobile.css +7 -7
  38. package/modern/mobile/mobile.module.css.js +1 -1
  39. package/moderncssm/Component.responsive.d.ts +4 -4
  40. package/moderncssm/components/base-radio-group/Component.d.ts +2 -2
  41. package/moderncssm/components/base-radio-group/Component.js.map +1 -1
  42. package/moderncssm/desktop/Component.desktop.d.ts +1 -1
  43. package/moderncssm/mobile/Component.mobile.d.ts +1 -1
  44. package/package.json +5 -5
  45. package/src/vars.css +1 -1
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { type BaseRadioGroupProps } from './components/base-radio-group';
3
- export declare type RadioGroupProps = Omit<BaseRadioGroupProps, 'styles'> & {
3
+ export type RadioGroupProps = Omit<BaseRadioGroupProps, 'styles'> & {
4
4
  /**
5
5
  * Контрольная точка, с нее начинается desktop версия
6
6
  * @default 1024
@@ -21,14 +21,14 @@ export declare const RadioGroup: React.ForwardRefExoticComponent<Omit<BaseRadioG
21
21
  * Контрольная точка, с нее начинается desktop версия
22
22
  * @default 1024
23
23
  */
24
- breakpoint?: number | undefined;
24
+ breakpoint?: number;
25
25
  /**
26
26
  * Версия, которая будет использоваться при серверном рендеринге
27
27
  */
28
- client?: "mobile" | "desktop" | undefined;
28
+ client?: "desktop" | "mobile";
29
29
  /**
30
30
  * Значение по-умолчанию для хука useMatchMedia
31
31
  * @deprecated Используйте client
32
32
  */
33
- defaultMatchMediaValue?: boolean | (() => boolean) | undefined;
33
+ defaultMatchMediaValue?: boolean | (() => boolean);
34
34
  } & React.RefAttributes<HTMLDivElement>>;
@@ -1,6 +1,6 @@
1
1
  import React, { type AriaAttributes, type ChangeEvent, type FocusEvent, type HTMLAttributes, type MouseEvent, type ReactNode } from 'react';
2
- export declare type Direction = 'horizontal' | 'vertical';
3
- export declare type RadioGroupType = 'radio' | 'tag';
2
+ export type Direction = 'horizontal' | 'vertical';
3
+ export type RadioGroupType = 'radio' | 'tag';
4
4
  export interface BaseRadioGroupProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'onBlur' | 'onFocus' | 'children' | 'className'>, AriaAttributes {
5
5
  /**
6
6
  * Заголовок группы
@@ -1 +1 @@
1
- {"version":3,"file":"Component.js","sources":["../../src/components/base-radio-group/Component.tsx"],"sourcesContent":["import React, {\n type AriaAttributes,\n type ChangeEvent,\n Children,\n cloneElement,\n type FocusEvent,\n forwardRef,\n type HTMLAttributes,\n isValidElement,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n useState,\n} from 'react';\nimport cn from 'classnames';\n\nimport { getDataTestId } from '@alfalab/core-components-shared';\nimport { useDidUpdateEffect } from '@alfalab/hooks';\n\nimport commonStyles from './index.module.css';\n\nexport type Direction = 'horizontal' | 'vertical';\nexport type RadioGroupType = 'radio' | 'tag';\n\nexport interface BaseRadioGroupProps\n extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'onBlur' | 'onFocus' | 'children' | 'className'\n >,\n AriaAttributes {\n /**\n * Заголовок группы\n */\n label?: ReactNode;\n\n /**\n * Направление\n */\n direction?: Direction;\n\n /**\n * Тип компонента\n */\n type?: RadioGroupType;\n\n /**\n * Дополнительный класс\n */\n className?: string;\n\n /**\n * Дополнительный класс для списка радио элементов\n */\n radioListClassName?: string;\n\n /**\n * Отображение ошибки\n */\n error?: ReactNode | boolean;\n\n /**\n * Текст подсказки снизу\n */\n hint?: ReactNode;\n\n /**\n * Дочерние элементы. Ожидаются компоненты `Radio` или `Tag`\n */\n children: ReactNode;\n\n /**\n * Обработчик изменения значения 'checked' одного из дочерних компонентов\n */\n onChange?: (\n event: ChangeEvent | MouseEvent,\n payload: {\n value: string;\n name?: string;\n },\n ) => void;\n\n /**\n * Обработчик блюра.\n */\n onBlur?: (event: FocusEvent<HTMLInputElement>) => void;\n\n /**\n * Обработчик фокуса.\n */\n onFocus?: (event: FocusEvent<HTMLInputElement>) => void;\n\n /**\n * Управление возможностью изменения состояния 'checked' дочерних компонентов Radio | Tag\n */\n disabled?: boolean;\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n /**\n * Атрибут name для всех дочерних компонентов\n */\n name?: string;\n\n /**\n * Value выбранного дочернего элемента\n */\n value?: string | null;\n\n /**\n * Основные стили компонента.\n */\n styles: { [key: string]: string };\n}\n\nexport const BaseRadioGroup = forwardRef<HTMLDivElement, BaseRadioGroupProps>(\n (\n {\n children,\n className,\n radioListClassName,\n direction = 'vertical',\n label,\n error,\n hint,\n onChange,\n onBlur,\n onFocus,\n type = 'radio',\n dataTestId,\n disabled = false,\n name,\n value,\n styles,\n ...restProps\n },\n ref,\n ) => {\n const [stateValue, setStateValue] = useState<BaseRadioGroupProps['value']>('');\n\n useDidUpdateEffect(() => {\n setStateValue(value);\n }, [value]);\n\n const isChecked = (childValue: string) =>\n value !== null && (value || stateValue) === childValue;\n\n const handleChange = (event: ChangeEvent | MouseEvent, childValue: string) => {\n setStateValue(childValue);\n if (onChange) {\n onChange(event, { name, value: childValue });\n }\n };\n\n const renderRadio = (child: ReactElement) => {\n const { className: childClassName, value: childValue } = child.props;\n\n return cloneElement(child, {\n onChange: (event: ChangeEvent) => handleChange(event, childValue),\n disabled,\n ...child.props,\n checked: isChecked(childValue),\n name,\n className: cn(childClassName, commonStyles[`${direction}Radio`]),\n });\n };\n\n const renderTag = (child: ReactElement) => {\n const childValue = child.props.value;\n const checked = isChecked(childValue);\n const clone = cloneElement(child, {\n onClick: (event: MouseEvent) => handleChange(event, childValue),\n disabled,\n ...child.props,\n checked,\n name,\n tabIndex: -1,\n });\n\n return (\n <label\n className={cn(\n commonStyles[`${direction}Radio`],\n commonStyles[`${direction}TagLabel`],\n commonStyles.tagLabel,\n )}\n >\n <input\n type='radio'\n autoComplete='off'\n onChange={(event: ChangeEvent) => handleChange(event, childValue)}\n disabled={disabled || child.props.disabled}\n name={name}\n checked={checked}\n className={commonStyles.hiddenInput}\n value={child.props.value}\n />\n {clone}\n </label>\n );\n };\n\n const errorMessage = typeof error === 'boolean' ? '' : error;\n\n return (\n <div\n className={cn(\n commonStyles.component,\n commonStyles[type],\n { [styles.error]: error },\n className,\n )}\n ref={ref}\n data-test-id={dataTestId}\n {...restProps}\n >\n {label ? (\n <span\n className={cn(styles.label, {\n [styles.tag]: type === 'tag',\n })}\n data-test-id={getDataTestId(dataTestId, 'label')}\n >\n {label}\n </span>\n ) : null}\n\n {children ? (\n <div\n className={cn(\n commonStyles.radioList,\n commonStyles[`${direction}RadioList`],\n radioListClassName,\n { [styles.radioList]: type === 'radio' },\n )}\n onBlur={onBlur}\n onFocus={onFocus}\n >\n {Children.map(children, (child) => {\n if (isValidElement(child)) {\n return type === 'radio' ? renderRadio(child) : renderTag(child);\n }\n\n return null;\n })}\n </div>\n ) : null}\n\n {errorMessage && (\n <span\n className={cn(\n styles.sub,\n {\n [styles.tag]: type === 'tag',\n },\n commonStyles.errorMessage,\n )}\n role='alert'\n data-test-id={getDataTestId(dataTestId, 'error')}\n >\n {errorMessage}\n </span>\n )}\n\n {hint && !errorMessage && (\n <span\n className={cn(\n styles.sub,\n {\n [styles.tag]: type === 'tag',\n },\n commonStyles.hint,\n )}\n data-test-id={getDataTestId(dataTestId, 'hint')}\n >\n {hint}\n </span>\n )}\n </div>\n );\n },\n);\n"],"names":["forwardRef","__rest","useState","useDidUpdateEffect","cloneElement","__assign","cn","commonStyles","React","getDataTestId","Children","isValidElement"],"mappings":"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"}
1
+ {"version":3,"file":"Component.js","sources":["../../src/components/base-radio-group/Component.tsx"],"sourcesContent":["import React, {\n type AriaAttributes,\n type ChangeEvent,\n Children,\n cloneElement,\n type FocusEvent,\n forwardRef,\n type HTMLAttributes,\n isValidElement,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n useState,\n} from 'react';\nimport cn from 'classnames';\n\nimport { getDataTestId } from '@alfalab/core-components-shared';\nimport { useDidUpdateEffect } from '@alfalab/hooks';\n\nimport commonStyles from './index.module.css';\n\nexport type Direction = 'horizontal' | 'vertical';\nexport type RadioGroupType = 'radio' | 'tag';\n\nexport interface BaseRadioGroupProps\n extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'onBlur' | 'onFocus' | 'children' | 'className'\n >,\n AriaAttributes {\n /**\n * Заголовок группы\n */\n label?: ReactNode;\n\n /**\n * Направление\n */\n direction?: Direction;\n\n /**\n * Тип компонента\n */\n type?: RadioGroupType;\n\n /**\n * Дополнительный класс\n */\n className?: string;\n\n /**\n * Дополнительный класс для списка радио элементов\n */\n radioListClassName?: string;\n\n /**\n * Отображение ошибки\n */\n error?: ReactNode | boolean;\n\n /**\n * Текст подсказки снизу\n */\n hint?: ReactNode;\n\n /**\n * Дочерние элементы. Ожидаются компоненты `Radio` или `Tag`\n */\n children: ReactNode;\n\n /**\n * Обработчик изменения значения 'checked' одного из дочерних компонентов\n */\n onChange?: (\n event: ChangeEvent | MouseEvent,\n payload: {\n value: string;\n name?: string;\n },\n ) => void;\n\n /**\n * Обработчик блюра.\n */\n onBlur?: (event: FocusEvent<HTMLInputElement>) => void;\n\n /**\n * Обработчик фокуса.\n */\n onFocus?: (event: FocusEvent<HTMLInputElement>) => void;\n\n /**\n * Управление возможностью изменения состояния 'checked' дочерних компонентов Radio | Tag\n */\n disabled?: boolean;\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n /**\n * Атрибут name для всех дочерних компонентов\n */\n name?: string;\n\n /**\n * Value выбранного дочернего элемента\n */\n value?: string | null;\n\n /**\n * Основные стили компонента.\n */\n styles: { [key: string]: string };\n}\n\nexport const BaseRadioGroup = forwardRef<HTMLDivElement, BaseRadioGroupProps>(\n (\n {\n children,\n className,\n radioListClassName,\n direction = 'vertical',\n label,\n error,\n hint,\n onChange,\n onBlur,\n onFocus,\n type = 'radio',\n dataTestId,\n disabled = false,\n name,\n value,\n styles,\n ...restProps\n },\n ref,\n ) => {\n const [stateValue, setStateValue] = useState<BaseRadioGroupProps['value']>('');\n\n useDidUpdateEffect(() => {\n setStateValue(value);\n }, [value]);\n\n const isChecked = (childValue: string) =>\n value !== null && (value || stateValue) === childValue;\n\n const handleChange = (event: ChangeEvent | MouseEvent, childValue: string) => {\n setStateValue(childValue);\n if (onChange) {\n onChange(event, { name, value: childValue });\n }\n };\n\n const renderRadio = (child: ReactElement) => {\n const { className: childClassName, value: childValue } = child.props;\n\n return cloneElement(child, {\n onChange: (event: ChangeEvent) => handleChange(event, childValue),\n disabled,\n ...child.props,\n checked: isChecked(childValue),\n name,\n className: cn(childClassName, commonStyles[`${direction}Radio`]),\n });\n };\n\n const renderTag = (child: ReactElement) => {\n const childValue = child.props.value;\n const checked = isChecked(childValue);\n const clone = cloneElement(child, {\n onClick: (event: MouseEvent) => handleChange(event, childValue),\n disabled,\n ...child.props,\n checked,\n name,\n tabIndex: -1,\n });\n\n return (\n <label\n className={cn(\n commonStyles[`${direction}Radio`],\n commonStyles[`${direction}TagLabel`],\n commonStyles.tagLabel,\n )}\n >\n <input\n type='radio'\n autoComplete='off'\n onChange={(event: ChangeEvent) => handleChange(event, childValue)}\n disabled={disabled || child.props.disabled}\n name={name}\n checked={checked}\n className={commonStyles.hiddenInput}\n value={child.props.value}\n />\n {clone}\n </label>\n );\n };\n\n const errorMessage = typeof error === 'boolean' ? '' : error;\n\n return (\n <div\n className={cn(\n commonStyles.component,\n commonStyles[type],\n { [styles.error]: error },\n className,\n )}\n ref={ref}\n data-test-id={dataTestId}\n {...restProps}\n >\n {label ? (\n <span\n className={cn(styles.label, {\n [styles.tag]: type === 'tag',\n })}\n data-test-id={getDataTestId(dataTestId, 'label')}\n >\n {label}\n </span>\n ) : null}\n\n {children ? (\n <div\n className={cn(\n commonStyles.radioList,\n commonStyles[`${direction}RadioList`],\n radioListClassName,\n { [styles.radioList]: type === 'radio' },\n )}\n onBlur={onBlur}\n onFocus={onFocus}\n >\n {Children.map(children, (child) => {\n if (isValidElement(child)) {\n return type === 'radio' ? renderRadio(child) : renderTag(child);\n }\n\n return null;\n })}\n </div>\n ) : null}\n\n {errorMessage && (\n <span\n className={cn(\n styles.sub,\n {\n [styles.tag]: type === 'tag',\n },\n commonStyles.errorMessage,\n )}\n role='alert'\n data-test-id={getDataTestId(dataTestId, 'error')}\n >\n {errorMessage}\n </span>\n )}\n\n {hint && !errorMessage && (\n <span\n className={cn(\n styles.sub,\n {\n [styles.tag]: type === 'tag',\n },\n commonStyles.hint,\n )}\n data-test-id={getDataTestId(dataTestId, 'hint')}\n >\n {hint}\n </span>\n )}\n </div>\n );\n },\n);\n"],"names":["forwardRef","__rest","useState","useDidUpdateEffect","cloneElement","__assign","cn","commonStyles","React","getDataTestId","Children","isValidElement"],"mappings":";;;;;;;;;;;;;;;;IAqHa,cAAc,GAAGA,gBAAU,CACpC,UACI,EAkBC,EACD,GAAG,EAAA;;AAlBC,IAAA,IAAA,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,SAAS,GAAA,EAAA,CAAA,SAAA,EACT,kBAAkB,GAAA,EAAA,CAAA,kBAAA,EAClB,EAAA,GAAA,EAAA,CAAA,SAAsB,EAAtB,SAAS,GAAG,EAAA,KAAA,MAAA,GAAA,UAAU,GAAA,EAAA,EACtB,KAAK,GAAA,EAAA,CAAA,KAAA,EACL,KAAK,GAAA,EAAA,CAAA,KAAA,EACL,IAAI,GAAA,EAAA,CAAA,IAAA,EACJ,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,MAAM,GAAA,EAAA,CAAA,MAAA,EACN,OAAO,GAAA,EAAA,CAAA,OAAA,EACP,EAAA,GAAA,EAAA,CAAA,IAAc,EAAd,IAAI,GAAG,EAAA,KAAA,MAAA,GAAA,OAAO,GAAA,EAAA,EACd,UAAU,GAAA,EAAA,CAAA,UAAA,EACV,EAAA,GAAA,EAAA,CAAA,QAAgB,EAAhB,QAAQ,GAAA,EAAA,KAAA,MAAA,GAAG,KAAK,GAAA,EAAA,EAChB,IAAI,GAAA,EAAA,CAAA,IAAA,EACJ,KAAK,GAAA,EAAA,CAAA,KAAA,EACL,MAAM,GAAA,EAAA,CAAA,MAAA,EACH,SAAS,GAAAC,YAAA,CAAA,EAAA,EAjBhB,oLAkBC,CADe;IAIV,IAAA,EAAA,GAA8BC,cAAQ,CAA+B,EAAE,CAAC,EAAvE,UAAU,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,aAAa,GAAA,EAAA,CAAA,CAAA,CAA8C;AAE9E,IAAAC,wBAAkB,CAAC,YAAA;QACf,aAAa,CAAC,KAAK,CAAC;AACxB,KAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAEX,IAAM,SAAS,GAAG,UAAC,UAAkB,EAAA;QACjC,OAAA,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,UAAU,MAAM,UAAU;AAAtD,KAAsD;AAE1D,IAAA,IAAM,YAAY,GAAG,UAAC,KAA+B,EAAE,UAAkB,EAAA;QACrE,aAAa,CAAC,UAAU,CAAC;QACzB,IAAI,QAAQ,EAAE;AACV,YAAA,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,EAAA,IAAA,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;;AAEpD,KAAC;IAED,IAAM,WAAW,GAAG,UAAC,KAAmB,EAAA;QAC9B,IAAA,EAAA,GAAmD,KAAK,CAAC,KAAK,EAAjD,cAAc,GAAA,EAAA,CAAA,SAAA,EAAS,UAAU,GAAA,EAAA,CAAA,KAAgB;QAEpE,OAAOC,kBAAY,CAAC,KAAK,EAAAC,cAAA,CAAAA,cAAA,CAAA,EACrB,QAAQ,EAAE,UAAC,KAAkB,EAAA,EAAK,OAAA,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,CAA/B,EAA+B,EACjE,QAAQ,EAAA,QAAA,EACL,EAAA,KAAK,CAAC,KAAK,KACd,OAAO,EAAE,SAAS,CAAC,UAAU,CAAC,EAC9B,IAAI,EAAA,IAAA,EACJ,SAAS,EAAEC,mBAAE,CAAC,cAAc,EAAEC,YAAY,CAAC,EAAA,CAAA,MAAA,CAAG,SAAS,EAAO,OAAA,CAAA,CAAC,CAAC,EAAA,CAAA,CAClE;AACN,KAAC;IAED,IAAM,SAAS,GAAG,UAAC,KAAmB,EAAA;AAClC,QAAA,IAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK;AACpC,QAAA,IAAM,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC;AACrC,QAAA,IAAM,KAAK,GAAGH,kBAAY,CAAC,KAAK,kCAC5B,OAAO,EAAE,UAAC,KAAiB,IAAK,OAAA,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA,EAAA,EAC/D,QAAQ,EAAA,QAAA,EAAA,EACL,KAAK,CAAC,KAAK,KACd,OAAO,EAAA,OAAA,EACP,IAAI,MAAA,EACJ,QAAQ,EAAE,EAAE,IACd;QAEF,QACII,gDACI,SAAS,EAAEF,mBAAE,CACTC,YAAY,CAAC,EAAA,CAAA,MAAA,CAAG,SAAS,EAAA,OAAA,CAAO,CAAC,EACjCA,YAAY,CAAC,EAAA,CAAA,MAAA,CAAG,SAAS,EAAA,UAAA,CAAU,CAAC,EACpCA,YAAY,CAAC,QAAQ,CACxB,EAAA;YAEDC,sBACI,CAAA,aAAA,CAAA,OAAA,EAAA,EAAA,IAAI,EAAC,OAAO,EACZ,YAAY,EAAC,KAAK,EAClB,QAAQ,EAAE,UAAC,KAAkB,IAAK,OAAA,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA,EAAA,EACjE,QAAQ,EAAE,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,EAC1C,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,SAAS,EAAED,YAAY,CAAC,WAAW,EACnC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAC1B,CAAA;YACD,KAAK,CACF;AAEhB,KAAC;AAED,IAAA,IAAM,YAAY,GAAG,OAAO,KAAK,KAAK,SAAS,GAAG,EAAE,GAAG,KAAK;AAE5D,IAAA,QACIC,sBAAA,CAAA,aAAA,CAAA,KAAA,EAAAH,cAAA,CAAA,EACI,SAAS,EAAEC,mBAAE,CACTC,YAAY,CAAC,SAAS,EACtBA,YAAY,CAAC,IAAI,CAAC,GAAA,EAAA,GAAA,EAAA,EAChB,EAAC,CAAA,MAAM,CAAC,KAAK,CAAG,GAAA,KAAK,OACvB,SAAS,CACZ,EACD,GAAG,EAAE,GAAG,EACM,cAAA,EAAA,UAAU,IACpB,SAAS,CAAA;QAEZ,KAAK,IACFC,sBAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACI,SAAS,EAAEF,mBAAE,CAAC,MAAM,CAAC,KAAK,GAAA,EAAA,GAAA,EAAA;AACtB,gBAAA,EAAA,CAAC,MAAM,CAAC,GAAG,CAAG,GAAA,IAAI,KAAK,KAAK;AAC9B,gBAAA,EAAA,EAAA,EAAA,cAAA,EACYG,kCAAa,CAAC,UAAU,EAAE,OAAO,CAAC,EAE/C,EAAA,KAAK,CACH,IACP,IAAI;QAEP,QAAQ,IACLD,8CACI,SAAS,EAAEF,mBAAE,CACTC,YAAY,CAAC,SAAS,EACtBA,YAAY,CAAC,EAAA,CAAA,MAAA,CAAG,SAAS,EAAW,WAAA,CAAA,CAAC,EACrC,kBAAkB,GAChB,EAAA,GAAA,EAAA,EAAA,EAAA,CAAC,MAAM,CAAC,SAAS,IAAG,IAAI,KAAK,OAAO,EACzC,EAAA,EAAA,EACD,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,IAEfG,cAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAC,KAAK,EAAA;AAC1B,YAAA,IAAIC,oBAAc,CAAC,KAAK,CAAC,EAAE;AACvB,gBAAA,OAAO,IAAI,KAAK,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC;;AAGnE,YAAA,OAAO,IAAI;AACf,SAAC,CAAC,CACA,IACN,IAAI;QAEP,YAAY,KACTH,sBACI,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,SAAS,EAAEF,mBAAE,CACT,MAAM,CAAC,GAAG,GAAA,EAAA,GAAA,EAAA;AAEN,gBAAA,EAAA,CAAC,MAAM,CAAC,GAAG,CAAG,GAAA,IAAI,KAAK,KAAK;AAEhC,gBAAA,EAAA,GAAAC,YAAY,CAAC,YAAY,CAC5B,EACD,IAAI,EAAC,OAAO,EAAA,cAAA,EACEE,kCAAa,CAAC,UAAU,EAAE,OAAO,CAAC,EAE/C,EAAA,YAAY,CACV,CACV;AAEA,QAAA,IAAI,IAAI,CAAC,YAAY,KAClBD,sBAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACI,SAAS,EAAEF,mBAAE,CACT,MAAM,CAAC,GAAG,GAAA,EAAA,GAAA,EAAA;AAEN,gBAAA,EAAA,CAAC,MAAM,CAAC,GAAG,CAAG,GAAA,IAAI,KAAK,KAAK;AAEhC,gBAAA,EAAA,GAAAC,YAAY,CAAC,IAAI,CACpB,EACa,cAAA,EAAAE,kCAAa,CAAC,UAAU,EAAE,MAAM,CAAC,IAE9C,IAAI,CACF,CACV,CACC;AAEd,CAAC;;;;"}
@@ -21,56 +21,56 @@
21
21
  --radio-group-hint-color: var(--color-light-text-secondary);
22
22
  --radio-group-error-color: var(--color-light-text-negative);
23
23
  }
24
- .radio-group__component_51kfk {
24
+ .radio-group__component_1lufd {
25
25
  display: flex;
26
26
  flex-direction: column;
27
27
  }
28
- .radio-group__radioList_51kfk {
28
+ .radio-group__radioList_1lufd {
29
29
  display: flex;
30
30
  }
31
- .radio-group__verticalRadioList_51kfk {
31
+ .radio-group__verticalRadioList_1lufd {
32
32
  flex-direction: column;
33
33
  align-items: flex-start;
34
34
  }
35
- .radio-group__horizontalRadioList_51kfk {
35
+ .radio-group__horizontalRadioList_1lufd {
36
36
  flex-wrap: wrap;
37
37
  margin-bottom: var(--gap-8-neg);
38
38
  }
39
- .radio-group__verticalRadio_51kfk {
39
+ .radio-group__verticalRadio_1lufd {
40
40
  margin-bottom: var(--gap-12);
41
41
  }
42
- .radio-group__verticalRadio_51kfk:last-child {
42
+ .radio-group__verticalRadio_1lufd:last-child {
43
43
  margin-bottom: var(--gap-0);
44
44
  }
45
- .radio-group__horizontalRadio_51kfk {
45
+ .radio-group__horizontalRadio_1lufd {
46
46
  margin-right: var(--gap-24);
47
47
  margin-bottom: var(--gap-8);
48
48
  }
49
- .radio-group__horizontalTagLabel_51kfk {
49
+ .radio-group__horizontalTagLabel_1lufd {
50
50
  margin-right: var(--gap-8);
51
51
  }
52
- .radio-group__horizontalRadio_51kfk:last-child,
53
- .radio-group__horizontalTagLabel_51kfk:last-child {
52
+ .radio-group__horizontalRadio_1lufd:last-child,
53
+ .radio-group__horizontalTagLabel_1lufd:last-child {
54
54
  margin-right: var(--gap-0);
55
55
  }
56
- .radio-group__errorMessage_51kfk {
56
+ .radio-group__errorMessage_1lufd {
57
57
  color: var(--radio-group-error-color);
58
58
  }
59
- .radio-group__hint_51kfk {
59
+ .radio-group__hint_1lufd {
60
60
  color: var(--radio-group-hint-color);
61
61
  }
62
- .radio-group__hiddenInput_51kfk {
62
+ .radio-group__hiddenInput_1lufd {
63
63
  position: absolute;
64
64
  z-index: -1;
65
65
  top: var(--gap-0);
66
66
  left: var(--gap-0);
67
67
  opacity: 0;
68
68
  }
69
- .radio-group__hiddenInput_51kfk:focus ~ button {
69
+ .radio-group__hiddenInput_1lufd:focus ~ button {
70
70
  outline: 2px solid var(--focus-color);
71
71
  outline-offset: 2px;
72
72
  }
73
- .radio-group__tagLabel_51kfk {
73
+ .radio-group__tagLabel_1lufd {
74
74
  position: relative;
75
75
  max-width: 100%;
76
76
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  require('./index.css');
4
4
 
5
- var commonStyles = {"component":"radio-group__component_51kfk","radioList":"radio-group__radioList_51kfk","verticalRadioList":"radio-group__verticalRadioList_51kfk","horizontalRadioList":"radio-group__horizontalRadioList_51kfk","verticalRadio":"radio-group__verticalRadio_51kfk","horizontalRadio":"radio-group__horizontalRadio_51kfk","horizontalTagLabel":"radio-group__horizontalTagLabel_51kfk","errorMessage":"radio-group__errorMessage_51kfk","hint":"radio-group__hint_51kfk","hiddenInput":"radio-group__hiddenInput_51kfk","tagLabel":"radio-group__tagLabel_51kfk"};
5
+ var commonStyles = {"component":"radio-group__component_1lufd","radioList":"radio-group__radioList_1lufd","verticalRadioList":"radio-group__verticalRadioList_1lufd","horizontalRadioList":"radio-group__horizontalRadioList_1lufd","verticalRadio":"radio-group__verticalRadio_1lufd","horizontalRadio":"radio-group__horizontalRadio_1lufd","horizontalTagLabel":"radio-group__horizontalTagLabel_1lufd","errorMessage":"radio-group__errorMessage_1lufd","hint":"radio-group__hint_1lufd","hiddenInput":"radio-group__hiddenInput_1lufd","tagLabel":"radio-group__tagLabel_1lufd"};
6
6
 
7
7
  module.exports = commonStyles;
8
8
  //# sourceMappingURL=index.module.css.js.map
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { type BaseRadioGroupProps } from './components/base-radio-group';
3
- export declare type RadioGroupProps = Omit<BaseRadioGroupProps, 'styles'> & {
3
+ export type RadioGroupProps = Omit<BaseRadioGroupProps, 'styles'> & {
4
4
  /**
5
5
  * Контрольная точка, с нее начинается desktop версия
6
6
  * @default 1024
@@ -21,14 +21,14 @@ export declare const RadioGroup: React.ForwardRefExoticComponent<Omit<BaseRadioG
21
21
  * Контрольная точка, с нее начинается desktop версия
22
22
  * @default 1024
23
23
  */
24
- breakpoint?: number | undefined;
24
+ breakpoint?: number;
25
25
  /**
26
26
  * Версия, которая будет использоваться при серверном рендеринге
27
27
  */
28
- client?: "mobile" | "desktop" | undefined;
28
+ client?: "desktop" | "mobile";
29
29
  /**
30
30
  * Значение по-умолчанию для хука useMatchMedia
31
31
  * @deprecated Используйте client
32
32
  */
33
- defaultMatchMediaValue?: boolean | (() => boolean) | undefined;
33
+ defaultMatchMediaValue?: boolean | (() => boolean);
34
34
  } & React.RefAttributes<HTMLDivElement>>;
@@ -1,6 +1,6 @@
1
1
  import React, { type AriaAttributes, type ChangeEvent, type FocusEvent, type HTMLAttributes, type MouseEvent, type ReactNode } from 'react';
2
- export declare type Direction = 'horizontal' | 'vertical';
3
- export declare type RadioGroupType = 'radio' | 'tag';
2
+ export type Direction = 'horizontal' | 'vertical';
3
+ export type RadioGroupType = 'radio' | 'tag';
4
4
  export interface BaseRadioGroupProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'onBlur' | 'onFocus' | 'children' | 'className'>, AriaAttributes {
5
5
  /**
6
6
  * Заголовок группы
@@ -1 +1 @@
1
- {"version":3,"file":"Component.js","sources":["../../../src/components/base-radio-group/Component.tsx"],"sourcesContent":["import React, {\n type AriaAttributes,\n type ChangeEvent,\n Children,\n cloneElement,\n type FocusEvent,\n forwardRef,\n type HTMLAttributes,\n isValidElement,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n useState,\n} from 'react';\nimport cn from 'classnames';\n\nimport { getDataTestId } from '@alfalab/core-components-shared';\nimport { useDidUpdateEffect } from '@alfalab/hooks';\n\nimport commonStyles from './index.module.css';\n\nexport type Direction = 'horizontal' | 'vertical';\nexport type RadioGroupType = 'radio' | 'tag';\n\nexport interface BaseRadioGroupProps\n extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'onBlur' | 'onFocus' | 'children' | 'className'\n >,\n AriaAttributes {\n /**\n * Заголовок группы\n */\n label?: ReactNode;\n\n /**\n * Направление\n */\n direction?: Direction;\n\n /**\n * Тип компонента\n */\n type?: RadioGroupType;\n\n /**\n * Дополнительный класс\n */\n className?: string;\n\n /**\n * Дополнительный класс для списка радио элементов\n */\n radioListClassName?: string;\n\n /**\n * Отображение ошибки\n */\n error?: ReactNode | boolean;\n\n /**\n * Текст подсказки снизу\n */\n hint?: ReactNode;\n\n /**\n * Дочерние элементы. Ожидаются компоненты `Radio` или `Tag`\n */\n children: ReactNode;\n\n /**\n * Обработчик изменения значения 'checked' одного из дочерних компонентов\n */\n onChange?: (\n event: ChangeEvent | MouseEvent,\n payload: {\n value: string;\n name?: string;\n },\n ) => void;\n\n /**\n * Обработчик блюра.\n */\n onBlur?: (event: FocusEvent<HTMLInputElement>) => void;\n\n /**\n * Обработчик фокуса.\n */\n onFocus?: (event: FocusEvent<HTMLInputElement>) => void;\n\n /**\n * Управление возможностью изменения состояния 'checked' дочерних компонентов Radio | Tag\n */\n disabled?: boolean;\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n /**\n * Атрибут name для всех дочерних компонентов\n */\n name?: string;\n\n /**\n * Value выбранного дочернего элемента\n */\n value?: string | null;\n\n /**\n * Основные стили компонента.\n */\n styles: { [key: string]: string };\n}\n\nexport const BaseRadioGroup = forwardRef<HTMLDivElement, BaseRadioGroupProps>(\n (\n {\n children,\n className,\n radioListClassName,\n direction = 'vertical',\n label,\n error,\n hint,\n onChange,\n onBlur,\n onFocus,\n type = 'radio',\n dataTestId,\n disabled = false,\n name,\n value,\n styles,\n ...restProps\n },\n ref,\n ) => {\n const [stateValue, setStateValue] = useState<BaseRadioGroupProps['value']>('');\n\n useDidUpdateEffect(() => {\n setStateValue(value);\n }, [value]);\n\n const isChecked = (childValue: string) =>\n value !== null && (value || stateValue) === childValue;\n\n const handleChange = (event: ChangeEvent | MouseEvent, childValue: string) => {\n setStateValue(childValue);\n if (onChange) {\n onChange(event, { name, value: childValue });\n }\n };\n\n const renderRadio = (child: ReactElement) => {\n const { className: childClassName, value: childValue } = child.props;\n\n return cloneElement(child, {\n onChange: (event: ChangeEvent) => handleChange(event, childValue),\n disabled,\n ...child.props,\n checked: isChecked(childValue),\n name,\n className: cn(childClassName, commonStyles[`${direction}Radio`]),\n });\n };\n\n const renderTag = (child: ReactElement) => {\n const childValue = child.props.value;\n const checked = isChecked(childValue);\n const clone = cloneElement(child, {\n onClick: (event: MouseEvent) => handleChange(event, childValue),\n disabled,\n ...child.props,\n checked,\n name,\n tabIndex: -1,\n });\n\n return (\n <label\n className={cn(\n commonStyles[`${direction}Radio`],\n commonStyles[`${direction}TagLabel`],\n commonStyles.tagLabel,\n )}\n >\n <input\n type='radio'\n autoComplete='off'\n onChange={(event: ChangeEvent) => handleChange(event, childValue)}\n disabled={disabled || child.props.disabled}\n name={name}\n checked={checked}\n className={commonStyles.hiddenInput}\n value={child.props.value}\n />\n {clone}\n </label>\n );\n };\n\n const errorMessage = typeof error === 'boolean' ? '' : error;\n\n return (\n <div\n className={cn(\n commonStyles.component,\n commonStyles[type],\n { [styles.error]: error },\n className,\n )}\n ref={ref}\n data-test-id={dataTestId}\n {...restProps}\n >\n {label ? (\n <span\n className={cn(styles.label, {\n [styles.tag]: type === 'tag',\n })}\n data-test-id={getDataTestId(dataTestId, 'label')}\n >\n {label}\n </span>\n ) : null}\n\n {children ? (\n <div\n className={cn(\n commonStyles.radioList,\n commonStyles[`${direction}RadioList`],\n radioListClassName,\n { [styles.radioList]: type === 'radio' },\n )}\n onBlur={onBlur}\n onFocus={onFocus}\n >\n {Children.map(children, (child) => {\n if (isValidElement(child)) {\n return type === 'radio' ? renderRadio(child) : renderTag(child);\n }\n\n return null;\n })}\n </div>\n ) : null}\n\n {errorMessage && (\n <span\n className={cn(\n styles.sub,\n {\n [styles.tag]: type === 'tag',\n },\n commonStyles.errorMessage,\n )}\n role='alert'\n data-test-id={getDataTestId(dataTestId, 'error')}\n >\n {errorMessage}\n </span>\n )}\n\n {hint && !errorMessage && (\n <span\n className={cn(\n styles.sub,\n {\n [styles.tag]: type === 'tag',\n },\n commonStyles.hint,\n )}\n data-test-id={getDataTestId(dataTestId, 'hint')}\n >\n {hint}\n </span>\n )}\n </div>\n );\n },\n);\n"],"names":["forwardRef","__rest","useState","useDidUpdateEffect","cloneElement","__assign","cn","commonStyles","React","getDataTestId","Children","isValidElement"],"mappings":"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"}
1
+ {"version":3,"file":"Component.js","sources":["../../../src/components/base-radio-group/Component.tsx"],"sourcesContent":["import React, {\n type AriaAttributes,\n type ChangeEvent,\n Children,\n cloneElement,\n type FocusEvent,\n forwardRef,\n type HTMLAttributes,\n isValidElement,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n useState,\n} from 'react';\nimport cn from 'classnames';\n\nimport { getDataTestId } from '@alfalab/core-components-shared';\nimport { useDidUpdateEffect } from '@alfalab/hooks';\n\nimport commonStyles from './index.module.css';\n\nexport type Direction = 'horizontal' | 'vertical';\nexport type RadioGroupType = 'radio' | 'tag';\n\nexport interface BaseRadioGroupProps\n extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'onBlur' | 'onFocus' | 'children' | 'className'\n >,\n AriaAttributes {\n /**\n * Заголовок группы\n */\n label?: ReactNode;\n\n /**\n * Направление\n */\n direction?: Direction;\n\n /**\n * Тип компонента\n */\n type?: RadioGroupType;\n\n /**\n * Дополнительный класс\n */\n className?: string;\n\n /**\n * Дополнительный класс для списка радио элементов\n */\n radioListClassName?: string;\n\n /**\n * Отображение ошибки\n */\n error?: ReactNode | boolean;\n\n /**\n * Текст подсказки снизу\n */\n hint?: ReactNode;\n\n /**\n * Дочерние элементы. Ожидаются компоненты `Radio` или `Tag`\n */\n children: ReactNode;\n\n /**\n * Обработчик изменения значения 'checked' одного из дочерних компонентов\n */\n onChange?: (\n event: ChangeEvent | MouseEvent,\n payload: {\n value: string;\n name?: string;\n },\n ) => void;\n\n /**\n * Обработчик блюра.\n */\n onBlur?: (event: FocusEvent<HTMLInputElement>) => void;\n\n /**\n * Обработчик фокуса.\n */\n onFocus?: (event: FocusEvent<HTMLInputElement>) => void;\n\n /**\n * Управление возможностью изменения состояния 'checked' дочерних компонентов Radio | Tag\n */\n disabled?: boolean;\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n /**\n * Атрибут name для всех дочерних компонентов\n */\n name?: string;\n\n /**\n * Value выбранного дочернего элемента\n */\n value?: string | null;\n\n /**\n * Основные стили компонента.\n */\n styles: { [key: string]: string };\n}\n\nexport const BaseRadioGroup = forwardRef<HTMLDivElement, BaseRadioGroupProps>(\n (\n {\n children,\n className,\n radioListClassName,\n direction = 'vertical',\n label,\n error,\n hint,\n onChange,\n onBlur,\n onFocus,\n type = 'radio',\n dataTestId,\n disabled = false,\n name,\n value,\n styles,\n ...restProps\n },\n ref,\n ) => {\n const [stateValue, setStateValue] = useState<BaseRadioGroupProps['value']>('');\n\n useDidUpdateEffect(() => {\n setStateValue(value);\n }, [value]);\n\n const isChecked = (childValue: string) =>\n value !== null && (value || stateValue) === childValue;\n\n const handleChange = (event: ChangeEvent | MouseEvent, childValue: string) => {\n setStateValue(childValue);\n if (onChange) {\n onChange(event, { name, value: childValue });\n }\n };\n\n const renderRadio = (child: ReactElement) => {\n const { className: childClassName, value: childValue } = child.props;\n\n return cloneElement(child, {\n onChange: (event: ChangeEvent) => handleChange(event, childValue),\n disabled,\n ...child.props,\n checked: isChecked(childValue),\n name,\n className: cn(childClassName, commonStyles[`${direction}Radio`]),\n });\n };\n\n const renderTag = (child: ReactElement) => {\n const childValue = child.props.value;\n const checked = isChecked(childValue);\n const clone = cloneElement(child, {\n onClick: (event: MouseEvent) => handleChange(event, childValue),\n disabled,\n ...child.props,\n checked,\n name,\n tabIndex: -1,\n });\n\n return (\n <label\n className={cn(\n commonStyles[`${direction}Radio`],\n commonStyles[`${direction}TagLabel`],\n commonStyles.tagLabel,\n )}\n >\n <input\n type='radio'\n autoComplete='off'\n onChange={(event: ChangeEvent) => handleChange(event, childValue)}\n disabled={disabled || child.props.disabled}\n name={name}\n checked={checked}\n className={commonStyles.hiddenInput}\n value={child.props.value}\n />\n {clone}\n </label>\n );\n };\n\n const errorMessage = typeof error === 'boolean' ? '' : error;\n\n return (\n <div\n className={cn(\n commonStyles.component,\n commonStyles[type],\n { [styles.error]: error },\n className,\n )}\n ref={ref}\n data-test-id={dataTestId}\n {...restProps}\n >\n {label ? (\n <span\n className={cn(styles.label, {\n [styles.tag]: type === 'tag',\n })}\n data-test-id={getDataTestId(dataTestId, 'label')}\n >\n {label}\n </span>\n ) : null}\n\n {children ? (\n <div\n className={cn(\n commonStyles.radioList,\n commonStyles[`${direction}RadioList`],\n radioListClassName,\n { [styles.radioList]: type === 'radio' },\n )}\n onBlur={onBlur}\n onFocus={onFocus}\n >\n {Children.map(children, (child) => {\n if (isValidElement(child)) {\n return type === 'radio' ? renderRadio(child) : renderTag(child);\n }\n\n return null;\n })}\n </div>\n ) : null}\n\n {errorMessage && (\n <span\n className={cn(\n styles.sub,\n {\n [styles.tag]: type === 'tag',\n },\n commonStyles.errorMessage,\n )}\n role='alert'\n data-test-id={getDataTestId(dataTestId, 'error')}\n >\n {errorMessage}\n </span>\n )}\n\n {hint && !errorMessage && (\n <span\n className={cn(\n styles.sub,\n {\n [styles.tag]: type === 'tag',\n },\n commonStyles.hint,\n )}\n data-test-id={getDataTestId(dataTestId, 'hint')}\n >\n {hint}\n </span>\n )}\n </div>\n );\n },\n);\n"],"names":["forwardRef","__rest","useState","useDidUpdateEffect","cloneElement","__assign","cn","commonStyles","React","getDataTestId","Children","isValidElement"],"mappings":";;;;;;;;;;;;;;;;;IAqHa,cAAc,GAAGA,gBAAU,CACpC,UACI,EAkBC,EACD,GAAG,EAAA;;AAlBC,IAAA,IAAA,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,SAAS,GAAA,EAAA,CAAA,SAAA,EACT,kBAAkB,GAAA,EAAA,CAAA,kBAAA,EAClB,EAAA,GAAA,EAAA,CAAA,SAAsB,EAAtB,SAAS,GAAG,EAAA,KAAA,MAAA,GAAA,UAAU,GAAA,EAAA,EACtB,KAAK,GAAA,EAAA,CAAA,KAAA,EACL,KAAK,GAAA,EAAA,CAAA,KAAA,EACL,IAAI,GAAA,EAAA,CAAA,IAAA,EACJ,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,MAAM,GAAA,EAAA,CAAA,MAAA,EACN,OAAO,GAAA,EAAA,CAAA,OAAA,EACP,EAAA,GAAA,EAAA,CAAA,IAAc,EAAd,IAAI,GAAG,EAAA,KAAA,MAAA,GAAA,OAAO,GAAA,EAAA,EACd,UAAU,GAAA,EAAA,CAAA,UAAA,EACV,EAAA,GAAA,EAAA,CAAA,QAAgB,EAAhB,QAAQ,GAAA,EAAA,KAAA,MAAA,GAAG,KAAK,GAAA,EAAA,EAChB,IAAI,GAAA,EAAA,CAAA,IAAA,EACJ,KAAK,GAAA,EAAA,CAAA,KAAA,EACL,MAAM,GAAA,EAAA,CAAA,MAAA,EACH,SAAS,GAAAC,YAAA,CAAA,EAAA,EAjBhB,oLAkBC,CADe;IAIV,IAAA,EAAA,GAA8BC,cAAQ,CAA+B,EAAE,CAAC,EAAvE,UAAU,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,aAAa,GAAA,EAAA,CAAA,CAAA,CAA8C;AAE9E,IAAAC,wBAAkB,CAAC,YAAA;QACf,aAAa,CAAC,KAAK,CAAC;AACxB,KAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAEX,IAAM,SAAS,GAAG,UAAC,UAAkB,EAAA;QACjC,OAAA,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,UAAU,MAAM,UAAU;AAAtD,KAAsD;AAE1D,IAAA,IAAM,YAAY,GAAG,UAAC,KAA+B,EAAE,UAAkB,EAAA;QACrE,aAAa,CAAC,UAAU,CAAC;QACzB,IAAI,QAAQ,EAAE;AACV,YAAA,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,EAAA,IAAA,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;;AAEpD,KAAC;IAED,IAAM,WAAW,GAAG,UAAC,KAAmB,EAAA;QAC9B,IAAA,EAAA,GAAmD,KAAK,CAAC,KAAK,EAAjD,cAAc,GAAA,EAAA,CAAA,SAAA,EAAS,UAAU,GAAA,EAAA,CAAA,KAAgB;QAEpE,OAAOC,kBAAY,CAAC,KAAK,EAAAC,cAAA,CAAAA,cAAA,CAAA,EACrB,QAAQ,EAAE,UAAC,KAAkB,EAAA,EAAK,OAAA,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,CAA/B,EAA+B,EACjE,QAAQ,EAAA,QAAA,EACL,EAAA,KAAK,CAAC,KAAK,KACd,OAAO,EAAE,SAAS,CAAC,UAAU,CAAC,EAC9B,IAAI,EAAA,IAAA,EACJ,SAAS,EAAEC,mBAAE,CAAC,cAAc,EAAEC,6BAAY,CAAC,EAAA,CAAA,MAAA,CAAG,SAAS,EAAO,OAAA,CAAA,CAAC,CAAC,EAAA,CAAA,CAClE;AACN,KAAC;IAED,IAAM,SAAS,GAAG,UAAC,KAAmB,EAAA;AAClC,QAAA,IAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK;AACpC,QAAA,IAAM,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC;AACrC,QAAA,IAAM,KAAK,GAAGH,kBAAY,CAAC,KAAK,kCAC5B,OAAO,EAAE,UAAC,KAAiB,IAAK,OAAA,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA,EAAA,EAC/D,QAAQ,EAAA,QAAA,EAAA,EACL,KAAK,CAAC,KAAK,KACd,OAAO,EAAA,OAAA,EACP,IAAI,MAAA,EACJ,QAAQ,EAAE,EAAE,IACd;QAEF,QACII,gDACI,SAAS,EAAEF,mBAAE,CACTC,6BAAY,CAAC,EAAA,CAAA,MAAA,CAAG,SAAS,EAAA,OAAA,CAAO,CAAC,EACjCA,6BAAY,CAAC,EAAA,CAAA,MAAA,CAAG,SAAS,EAAA,UAAA,CAAU,CAAC,EACpCA,6BAAY,CAAC,QAAQ,CACxB,EAAA;YAEDC,sBACI,CAAA,aAAA,CAAA,OAAA,EAAA,EAAA,IAAI,EAAC,OAAO,EACZ,YAAY,EAAC,KAAK,EAClB,QAAQ,EAAE,UAAC,KAAkB,IAAK,OAAA,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA,EAAA,EACjE,QAAQ,EAAE,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,EAC1C,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,SAAS,EAAED,6BAAY,CAAC,WAAW,EACnC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAC1B,CAAA;YACD,KAAK,CACF;AAEhB,KAAC;AAED,IAAA,IAAM,YAAY,GAAG,OAAO,KAAK,KAAK,SAAS,GAAG,EAAE,GAAG,KAAK;AAE5D,IAAA,QACIC,sBAAA,CAAA,aAAA,CAAA,KAAA,EAAAH,cAAA,CAAA,EACI,SAAS,EAAEC,mBAAE,CACTC,6BAAY,CAAC,SAAS,EACtBA,6BAAY,CAAC,IAAI,CAAC,GAAA,EAAA,GAAA,EAAA,EAChB,EAAC,CAAA,MAAM,CAAC,KAAK,CAAG,GAAA,KAAK,OACvB,SAAS,CACZ,EACD,GAAG,EAAE,GAAG,EACM,cAAA,EAAA,UAAU,IACpB,SAAS,CAAA;QAEZ,KAAK,IACFC,sBAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACI,SAAS,EAAEF,mBAAE,CAAC,MAAM,CAAC,KAAK,GAAA,EAAA,GAAA,EAAA;AACtB,gBAAA,EAAA,CAAC,MAAM,CAAC,GAAG,CAAG,GAAA,IAAI,KAAK,KAAK;AAC9B,gBAAA,EAAA,EAAA,EAAA,cAAA,EACYG,kBAAa,CAAC,UAAU,EAAE,OAAO,CAAC,EAE/C,EAAA,KAAK,CACH,IACP,IAAI;QAEP,QAAQ,IACLD,8CACI,SAAS,EAAEF,mBAAE,CACTC,6BAAY,CAAC,SAAS,EACtBA,6BAAY,CAAC,EAAA,CAAA,MAAA,CAAG,SAAS,EAAW,WAAA,CAAA,CAAC,EACrC,kBAAkB,GAChB,EAAA,GAAA,EAAA,EAAA,EAAA,CAAC,MAAM,CAAC,SAAS,IAAG,IAAI,KAAK,OAAO,EACzC,EAAA,EAAA,EACD,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,IAEfG,cAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAC,KAAK,EAAA;AAC1B,YAAA,IAAIC,oBAAc,CAAC,KAAK,CAAC,EAAE;AACvB,gBAAA,OAAO,IAAI,KAAK,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC;;AAGnE,YAAA,OAAO,IAAI;AACf,SAAC,CAAC,CACA,IACN,IAAI;QAEP,YAAY,KACTH,sBACI,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,SAAS,EAAEF,mBAAE,CACT,MAAM,CAAC,GAAG,GAAA,EAAA,GAAA,EAAA;AAEN,gBAAA,EAAA,CAAC,MAAM,CAAC,GAAG,CAAG,GAAA,IAAI,KAAK,KAAK;AAEhC,gBAAA,EAAA,GAAAC,6BAAY,CAAC,YAAY,CAC5B,EACD,IAAI,EAAC,OAAO,EAAA,cAAA,EACEE,kBAAa,CAAC,UAAU,EAAE,OAAO,CAAC,EAE/C,EAAA,YAAY,CACV,CACV;AAEA,QAAA,IAAI,IAAI,CAAC,YAAY,KAClBD,sBAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACI,SAAS,EAAEF,mBAAE,CACT,MAAM,CAAC,GAAG,GAAA,EAAA,GAAA,EAAA;AAEN,gBAAA,EAAA,CAAC,MAAM,CAAC,GAAG,CAAG,GAAA,IAAI,KAAK,KAAK;AAEhC,gBAAA,EAAA,GAAAC,6BAAY,CAAC,IAAI,CACpB,EACa,cAAA,EAAAE,kBAAa,CAAC,UAAU,EAAE,MAAM,CAAC,IAE9C,IAAI,CACF,CACV,CACC;AAEd,CAAC;;;;"}
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { type BaseRadioGroupProps } from '../components/base-radio-group';
3
- export declare type RadioGroupDesktopProps = Omit<BaseRadioGroupProps, 'styles'>;
3
+ export type RadioGroupDesktopProps = Omit<BaseRadioGroupProps, 'styles'>;
4
4
  export declare const RadioGroupDesktop: React.ForwardRefExoticComponent<RadioGroupDesktopProps & React.RefAttributes<HTMLDivElement>>;
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { type BaseRadioGroupProps } from '../components/base-radio-group';
3
- export declare type RadioGroupMobileProps = Omit<BaseRadioGroupProps, 'styles'>;
3
+ export type RadioGroupMobileProps = Omit<BaseRadioGroupProps, 'styles'>;
4
4
  export declare const RadioGroupMobile: React.ForwardRefExoticComponent<RadioGroupMobileProps & React.RefAttributes<HTMLDivElement>>;
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { type BaseRadioGroupProps } from '../components/base-radio-group';
3
- export declare type RadioGroupDesktopProps = Omit<BaseRadioGroupProps, 'styles'>;
3
+ export type RadioGroupDesktopProps = Omit<BaseRadioGroupProps, 'styles'>;
4
4
  export declare const RadioGroupDesktop: React.ForwardRefExoticComponent<RadioGroupDesktopProps & React.RefAttributes<HTMLDivElement>>;
@@ -20,10 +20,10 @@
20
20
  --radio-group-error-padding-left: var(--gap-8);
21
21
  --radio-group-error-border-left: 1px solid var(--color-light-status-negative);
22
22
  }
23
- .radio-group__radioList_o22dp {
23
+ .radio-group__radioList_16gra {
24
24
  padding-left: var(--radio-group-list-padding-left);
25
25
  }
26
- .radio-group__label_o22dp {
26
+ .radio-group__label_16gra {
27
27
  font-size: 16px;
28
28
  line-height: 24px;
29
29
  font-weight: 400;
@@ -32,7 +32,7 @@
32
32
  margin-bottom: var(--gap-12);
33
33
  padding-left: var(--radio-group-sub-padding-left);
34
34
  }
35
- .radio-group__sub_o22dp {
35
+ .radio-group__sub_16gra {
36
36
  font-size: 14px;
37
37
  line-height: 18px;
38
38
  font-weight: 400;
@@ -40,10 +40,10 @@
40
40
  margin-top: var(--gap-12);
41
41
  padding-left: var(--radio-group-sub-padding-left);
42
42
  }
43
- .radio-group__error_o22dp {
43
+ .radio-group__error_16gra {
44
44
  padding-left: var(--radio-group-error-padding-left);
45
45
  border-left: var(--radio-group-error-border-left);
46
46
  }
47
- .radio-group__error_o22dp.radio-group__tag_o22dp {
47
+ .radio-group__error_16gra.radio-group__tag_16gra {
48
48
  padding-left: var(--gap-8);
49
49
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  require('./desktop.css');
4
4
 
5
- var styles = {"radioList":"radio-group__radioList_o22dp","label":"radio-group__label_o22dp","sub":"radio-group__sub_o22dp","error":"radio-group__error_o22dp","tag":"radio-group__tag_o22dp"};
5
+ var styles = {"radioList":"radio-group__radioList_16gra","label":"radio-group__label_16gra","sub":"radio-group__sub_16gra","error":"radio-group__error_16gra","tag":"radio-group__tag_16gra"};
6
6
 
7
7
  module.exports = styles;
8
8
  //# sourceMappingURL=desktop.module.css.js.map
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { type BaseRadioGroupProps } from './components/base-radio-group';
3
- export declare type RadioGroupProps = Omit<BaseRadioGroupProps, 'styles'> & {
3
+ export type RadioGroupProps = Omit<BaseRadioGroupProps, 'styles'> & {
4
4
  /**
5
5
  * Контрольная точка, с нее начинается desktop версия
6
6
  * @default 1024
@@ -21,14 +21,14 @@ export declare const RadioGroup: React.ForwardRefExoticComponent<Omit<BaseRadioG
21
21
  * Контрольная точка, с нее начинается desktop версия
22
22
  * @default 1024
23
23
  */
24
- breakpoint?: number | undefined;
24
+ breakpoint?: number;
25
25
  /**
26
26
  * Версия, которая будет использоваться при серверном рендеринге
27
27
  */
28
- client?: "mobile" | "desktop" | undefined;
28
+ client?: "desktop" | "mobile";
29
29
  /**
30
30
  * Значение по-умолчанию для хука useMatchMedia
31
31
  * @deprecated Используйте client
32
32
  */
33
- defaultMatchMediaValue?: boolean | (() => boolean) | undefined;
33
+ defaultMatchMediaValue?: boolean | (() => boolean);
34
34
  } & React.RefAttributes<HTMLDivElement>>;
@@ -1,6 +1,6 @@
1
1
  import React, { type AriaAttributes, type ChangeEvent, type FocusEvent, type HTMLAttributes, type MouseEvent, type ReactNode } from 'react';
2
- export declare type Direction = 'horizontal' | 'vertical';
3
- export declare type RadioGroupType = 'radio' | 'tag';
2
+ export type Direction = 'horizontal' | 'vertical';
3
+ export type RadioGroupType = 'radio' | 'tag';
4
4
  export interface BaseRadioGroupProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'onBlur' | 'onFocus' | 'children' | 'className'>, AriaAttributes {
5
5
  /**
6
6
  * Заголовок группы
@@ -1 +1 @@
1
- {"version":3,"file":"Component.js","sources":["../../../src/components/base-radio-group/Component.tsx"],"sourcesContent":["import React, {\n type AriaAttributes,\n type ChangeEvent,\n Children,\n cloneElement,\n type FocusEvent,\n forwardRef,\n type HTMLAttributes,\n isValidElement,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n useState,\n} from 'react';\nimport cn from 'classnames';\n\nimport { getDataTestId } from '@alfalab/core-components-shared';\nimport { useDidUpdateEffect } from '@alfalab/hooks';\n\nimport commonStyles from './index.module.css';\n\nexport type Direction = 'horizontal' | 'vertical';\nexport type RadioGroupType = 'radio' | 'tag';\n\nexport interface BaseRadioGroupProps\n extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'onBlur' | 'onFocus' | 'children' | 'className'\n >,\n AriaAttributes {\n /**\n * Заголовок группы\n */\n label?: ReactNode;\n\n /**\n * Направление\n */\n direction?: Direction;\n\n /**\n * Тип компонента\n */\n type?: RadioGroupType;\n\n /**\n * Дополнительный класс\n */\n className?: string;\n\n /**\n * Дополнительный класс для списка радио элементов\n */\n radioListClassName?: string;\n\n /**\n * Отображение ошибки\n */\n error?: ReactNode | boolean;\n\n /**\n * Текст подсказки снизу\n */\n hint?: ReactNode;\n\n /**\n * Дочерние элементы. Ожидаются компоненты `Radio` или `Tag`\n */\n children: ReactNode;\n\n /**\n * Обработчик изменения значения 'checked' одного из дочерних компонентов\n */\n onChange?: (\n event: ChangeEvent | MouseEvent,\n payload: {\n value: string;\n name?: string;\n },\n ) => void;\n\n /**\n * Обработчик блюра.\n */\n onBlur?: (event: FocusEvent<HTMLInputElement>) => void;\n\n /**\n * Обработчик фокуса.\n */\n onFocus?: (event: FocusEvent<HTMLInputElement>) => void;\n\n /**\n * Управление возможностью изменения состояния 'checked' дочерних компонентов Radio | Tag\n */\n disabled?: boolean;\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n /**\n * Атрибут name для всех дочерних компонентов\n */\n name?: string;\n\n /**\n * Value выбранного дочернего элемента\n */\n value?: string | null;\n\n /**\n * Основные стили компонента.\n */\n styles: { [key: string]: string };\n}\n\nexport const BaseRadioGroup = forwardRef<HTMLDivElement, BaseRadioGroupProps>(\n (\n {\n children,\n className,\n radioListClassName,\n direction = 'vertical',\n label,\n error,\n hint,\n onChange,\n onBlur,\n onFocus,\n type = 'radio',\n dataTestId,\n disabled = false,\n name,\n value,\n styles,\n ...restProps\n },\n ref,\n ) => {\n const [stateValue, setStateValue] = useState<BaseRadioGroupProps['value']>('');\n\n useDidUpdateEffect(() => {\n setStateValue(value);\n }, [value]);\n\n const isChecked = (childValue: string) =>\n value !== null && (value || stateValue) === childValue;\n\n const handleChange = (event: ChangeEvent | MouseEvent, childValue: string) => {\n setStateValue(childValue);\n if (onChange) {\n onChange(event, { name, value: childValue });\n }\n };\n\n const renderRadio = (child: ReactElement) => {\n const { className: childClassName, value: childValue } = child.props;\n\n return cloneElement(child, {\n onChange: (event: ChangeEvent) => handleChange(event, childValue),\n disabled,\n ...child.props,\n checked: isChecked(childValue),\n name,\n className: cn(childClassName, commonStyles[`${direction}Radio`]),\n });\n };\n\n const renderTag = (child: ReactElement) => {\n const childValue = child.props.value;\n const checked = isChecked(childValue);\n const clone = cloneElement(child, {\n onClick: (event: MouseEvent) => handleChange(event, childValue),\n disabled,\n ...child.props,\n checked,\n name,\n tabIndex: -1,\n });\n\n return (\n <label\n className={cn(\n commonStyles[`${direction}Radio`],\n commonStyles[`${direction}TagLabel`],\n commonStyles.tagLabel,\n )}\n >\n <input\n type='radio'\n autoComplete='off'\n onChange={(event: ChangeEvent) => handleChange(event, childValue)}\n disabled={disabled || child.props.disabled}\n name={name}\n checked={checked}\n className={commonStyles.hiddenInput}\n value={child.props.value}\n />\n {clone}\n </label>\n );\n };\n\n const errorMessage = typeof error === 'boolean' ? '' : error;\n\n return (\n <div\n className={cn(\n commonStyles.component,\n commonStyles[type],\n { [styles.error]: error },\n className,\n )}\n ref={ref}\n data-test-id={dataTestId}\n {...restProps}\n >\n {label ? (\n <span\n className={cn(styles.label, {\n [styles.tag]: type === 'tag',\n })}\n data-test-id={getDataTestId(dataTestId, 'label')}\n >\n {label}\n </span>\n ) : null}\n\n {children ? (\n <div\n className={cn(\n commonStyles.radioList,\n commonStyles[`${direction}RadioList`],\n radioListClassName,\n { [styles.radioList]: type === 'radio' },\n )}\n onBlur={onBlur}\n onFocus={onFocus}\n >\n {Children.map(children, (child) => {\n if (isValidElement(child)) {\n return type === 'radio' ? renderRadio(child) : renderTag(child);\n }\n\n return null;\n })}\n </div>\n ) : null}\n\n {errorMessage && (\n <span\n className={cn(\n styles.sub,\n {\n [styles.tag]: type === 'tag',\n },\n commonStyles.errorMessage,\n )}\n role='alert'\n data-test-id={getDataTestId(dataTestId, 'error')}\n >\n {errorMessage}\n </span>\n )}\n\n {hint && !errorMessage && (\n <span\n className={cn(\n styles.sub,\n {\n [styles.tag]: type === 'tag',\n },\n commonStyles.hint,\n )}\n data-test-id={getDataTestId(dataTestId, 'hint')}\n >\n {hint}\n </span>\n )}\n </div>\n );\n },\n);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Component.js","sources":["../../../src/components/base-radio-group/Component.tsx"],"sourcesContent":["import React, {\n type AriaAttributes,\n type ChangeEvent,\n Children,\n cloneElement,\n type FocusEvent,\n forwardRef,\n type HTMLAttributes,\n isValidElement,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n useState,\n} from 'react';\nimport cn from 'classnames';\n\nimport { getDataTestId } from '@alfalab/core-components-shared';\nimport { useDidUpdateEffect } from '@alfalab/hooks';\n\nimport commonStyles from './index.module.css';\n\nexport type Direction = 'horizontal' | 'vertical';\nexport type RadioGroupType = 'radio' | 'tag';\n\nexport interface BaseRadioGroupProps\n extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'onBlur' | 'onFocus' | 'children' | 'className'\n >,\n AriaAttributes {\n /**\n * Заголовок группы\n */\n label?: ReactNode;\n\n /**\n * Направление\n */\n direction?: Direction;\n\n /**\n * Тип компонента\n */\n type?: RadioGroupType;\n\n /**\n * Дополнительный класс\n */\n className?: string;\n\n /**\n * Дополнительный класс для списка радио элементов\n */\n radioListClassName?: string;\n\n /**\n * Отображение ошибки\n */\n error?: ReactNode | boolean;\n\n /**\n * Текст подсказки снизу\n */\n hint?: ReactNode;\n\n /**\n * Дочерние элементы. Ожидаются компоненты `Radio` или `Tag`\n */\n children: ReactNode;\n\n /**\n * Обработчик изменения значения 'checked' одного из дочерних компонентов\n */\n onChange?: (\n event: ChangeEvent | MouseEvent,\n payload: {\n value: string;\n name?: string;\n },\n ) => void;\n\n /**\n * Обработчик блюра.\n */\n onBlur?: (event: FocusEvent<HTMLInputElement>) => void;\n\n /**\n * Обработчик фокуса.\n */\n onFocus?: (event: FocusEvent<HTMLInputElement>) => void;\n\n /**\n * Управление возможностью изменения состояния 'checked' дочерних компонентов Radio | Tag\n */\n disabled?: boolean;\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n /**\n * Атрибут name для всех дочерних компонентов\n */\n name?: string;\n\n /**\n * Value выбранного дочернего элемента\n */\n value?: string | null;\n\n /**\n * Основные стили компонента.\n */\n styles: { [key: string]: string };\n}\n\nexport const BaseRadioGroup = forwardRef<HTMLDivElement, BaseRadioGroupProps>(\n (\n {\n children,\n className,\n radioListClassName,\n direction = 'vertical',\n label,\n error,\n hint,\n onChange,\n onBlur,\n onFocus,\n type = 'radio',\n dataTestId,\n disabled = false,\n name,\n value,\n styles,\n ...restProps\n },\n ref,\n ) => {\n const [stateValue, setStateValue] = useState<BaseRadioGroupProps['value']>('');\n\n useDidUpdateEffect(() => {\n setStateValue(value);\n }, [value]);\n\n const isChecked = (childValue: string) =>\n value !== null && (value || stateValue) === childValue;\n\n const handleChange = (event: ChangeEvent | MouseEvent, childValue: string) => {\n setStateValue(childValue);\n if (onChange) {\n onChange(event, { name, value: childValue });\n }\n };\n\n const renderRadio = (child: ReactElement) => {\n const { className: childClassName, value: childValue } = child.props;\n\n return cloneElement(child, {\n onChange: (event: ChangeEvent) => handleChange(event, childValue),\n disabled,\n ...child.props,\n checked: isChecked(childValue),\n name,\n className: cn(childClassName, commonStyles[`${direction}Radio`]),\n });\n };\n\n const renderTag = (child: ReactElement) => {\n const childValue = child.props.value;\n const checked = isChecked(childValue);\n const clone = cloneElement(child, {\n onClick: (event: MouseEvent) => handleChange(event, childValue),\n disabled,\n ...child.props,\n checked,\n name,\n tabIndex: -1,\n });\n\n return (\n <label\n className={cn(\n commonStyles[`${direction}Radio`],\n commonStyles[`${direction}TagLabel`],\n commonStyles.tagLabel,\n )}\n >\n <input\n type='radio'\n autoComplete='off'\n onChange={(event: ChangeEvent) => handleChange(event, childValue)}\n disabled={disabled || child.props.disabled}\n name={name}\n checked={checked}\n className={commonStyles.hiddenInput}\n value={child.props.value}\n />\n {clone}\n </label>\n );\n };\n\n const errorMessage = typeof error === 'boolean' ? '' : error;\n\n return (\n <div\n className={cn(\n commonStyles.component,\n commonStyles[type],\n { [styles.error]: error },\n className,\n )}\n ref={ref}\n data-test-id={dataTestId}\n {...restProps}\n >\n {label ? (\n <span\n className={cn(styles.label, {\n [styles.tag]: type === 'tag',\n })}\n data-test-id={getDataTestId(dataTestId, 'label')}\n >\n {label}\n </span>\n ) : null}\n\n {children ? (\n <div\n className={cn(\n commonStyles.radioList,\n commonStyles[`${direction}RadioList`],\n radioListClassName,\n { [styles.radioList]: type === 'radio' },\n )}\n onBlur={onBlur}\n onFocus={onFocus}\n >\n {Children.map(children, (child) => {\n if (isValidElement(child)) {\n return type === 'radio' ? renderRadio(child) : renderTag(child);\n }\n\n return null;\n })}\n </div>\n ) : null}\n\n {errorMessage && (\n <span\n className={cn(\n styles.sub,\n {\n [styles.tag]: type === 'tag',\n },\n commonStyles.errorMessage,\n )}\n role='alert'\n data-test-id={getDataTestId(dataTestId, 'error')}\n >\n {errorMessage}\n </span>\n )}\n\n {hint && !errorMessage && (\n <span\n className={cn(\n styles.sub,\n {\n [styles.tag]: type === 'tag',\n },\n commonStyles.hint,\n )}\n data-test-id={getDataTestId(dataTestId, 'hint')}\n >\n {hint}\n </span>\n )}\n </div>\n );\n },\n);\n"],"names":[],"mappings":"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"}
@@ -21,56 +21,56 @@
21
21
  --radio-group-hint-color: var(--color-light-text-secondary);
22
22
  --radio-group-error-color: var(--color-light-text-negative);
23
23
  }
24
- .radio-group__component_51kfk {
24
+ .radio-group__component_1lufd {
25
25
  display: flex;
26
26
  flex-direction: column;
27
27
  }
28
- .radio-group__radioList_51kfk {
28
+ .radio-group__radioList_1lufd {
29
29
  display: flex;
30
30
  }
31
- .radio-group__verticalRadioList_51kfk {
31
+ .radio-group__verticalRadioList_1lufd {
32
32
  flex-direction: column;
33
33
  align-items: flex-start;
34
34
  }
35
- .radio-group__horizontalRadioList_51kfk {
35
+ .radio-group__horizontalRadioList_1lufd {
36
36
  flex-wrap: wrap;
37
37
  margin-bottom: var(--gap-8-neg);
38
38
  }
39
- .radio-group__verticalRadio_51kfk {
39
+ .radio-group__verticalRadio_1lufd {
40
40
  margin-bottom: var(--gap-12);
41
41
  }
42
- .radio-group__verticalRadio_51kfk:last-child {
42
+ .radio-group__verticalRadio_1lufd:last-child {
43
43
  margin-bottom: var(--gap-0);
44
44
  }
45
- .radio-group__horizontalRadio_51kfk {
45
+ .radio-group__horizontalRadio_1lufd {
46
46
  margin-right: var(--gap-24);
47
47
  margin-bottom: var(--gap-8);
48
48
  }
49
- .radio-group__horizontalTagLabel_51kfk {
49
+ .radio-group__horizontalTagLabel_1lufd {
50
50
  margin-right: var(--gap-8);
51
51
  }
52
- .radio-group__horizontalRadio_51kfk:last-child,
53
- .radio-group__horizontalTagLabel_51kfk:last-child {
52
+ .radio-group__horizontalRadio_1lufd:last-child,
53
+ .radio-group__horizontalTagLabel_1lufd:last-child {
54
54
  margin-right: var(--gap-0);
55
55
  }
56
- .radio-group__errorMessage_51kfk {
56
+ .radio-group__errorMessage_1lufd {
57
57
  color: var(--radio-group-error-color);
58
58
  }
59
- .radio-group__hint_51kfk {
59
+ .radio-group__hint_1lufd {
60
60
  color: var(--radio-group-hint-color);
61
61
  }
62
- .radio-group__hiddenInput_51kfk {
62
+ .radio-group__hiddenInput_1lufd {
63
63
  position: absolute;
64
64
  z-index: -1;
65
65
  top: var(--gap-0);
66
66
  left: var(--gap-0);
67
67
  opacity: 0;
68
68
  }
69
- .radio-group__hiddenInput_51kfk:focus ~ button {
69
+ .radio-group__hiddenInput_1lufd:focus ~ button {
70
70
  outline: 2px solid var(--focus-color);
71
71
  outline-offset: 2px;
72
72
  }
73
- .radio-group__tagLabel_51kfk {
73
+ .radio-group__tagLabel_1lufd {
74
74
  position: relative;
75
75
  max-width: 100%;
76
76
  }
@@ -1,6 +1,6 @@
1
1
  import './index.css';
2
2
 
3
- var commonStyles = {"component":"radio-group__component_51kfk","radioList":"radio-group__radioList_51kfk","verticalRadioList":"radio-group__verticalRadioList_51kfk","horizontalRadioList":"radio-group__horizontalRadioList_51kfk","verticalRadio":"radio-group__verticalRadio_51kfk","horizontalRadio":"radio-group__horizontalRadio_51kfk","horizontalTagLabel":"radio-group__horizontalTagLabel_51kfk","errorMessage":"radio-group__errorMessage_51kfk","hint":"radio-group__hint_51kfk","hiddenInput":"radio-group__hiddenInput_51kfk","tagLabel":"radio-group__tagLabel_51kfk"};
3
+ var commonStyles = {"component":"radio-group__component_1lufd","radioList":"radio-group__radioList_1lufd","verticalRadioList":"radio-group__verticalRadioList_1lufd","horizontalRadioList":"radio-group__horizontalRadioList_1lufd","verticalRadio":"radio-group__verticalRadio_1lufd","horizontalRadio":"radio-group__horizontalRadio_1lufd","horizontalTagLabel":"radio-group__horizontalTagLabel_1lufd","errorMessage":"radio-group__errorMessage_1lufd","hint":"radio-group__hint_1lufd","hiddenInput":"radio-group__hiddenInput_1lufd","tagLabel":"radio-group__tagLabel_1lufd"};
4
4
 
5
5
  export { commonStyles as default };
6
6
  //# sourceMappingURL=index.module.css.js.map
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { type BaseRadioGroupProps } from '../components/base-radio-group';
3
- export declare type RadioGroupDesktopProps = Omit<BaseRadioGroupProps, 'styles'>;
3
+ export type RadioGroupDesktopProps = Omit<BaseRadioGroupProps, 'styles'>;
4
4
  export declare const RadioGroupDesktop: React.ForwardRefExoticComponent<RadioGroupDesktopProps & React.RefAttributes<HTMLDivElement>>;
@@ -20,10 +20,10 @@
20
20
  --radio-group-error-padding-left: var(--gap-8);
21
21
  --radio-group-error-border-left: 1px solid var(--color-light-status-negative);
22
22
  }
23
- .radio-group__radioList_o22dp {
23
+ .radio-group__radioList_16gra {
24
24
  padding-left: var(--radio-group-list-padding-left);
25
25
  }
26
- .radio-group__label_o22dp {
26
+ .radio-group__label_16gra {
27
27
  font-size: 16px;
28
28
  line-height: 24px;
29
29
  font-weight: 400;
@@ -32,7 +32,7 @@
32
32
  margin-bottom: var(--gap-12);
33
33
  padding-left: var(--radio-group-sub-padding-left);
34
34
  }
35
- .radio-group__sub_o22dp {
35
+ .radio-group__sub_16gra {
36
36
  font-size: 14px;
37
37
  line-height: 18px;
38
38
  font-weight: 400;
@@ -40,10 +40,10 @@
40
40
  margin-top: var(--gap-12);
41
41
  padding-left: var(--radio-group-sub-padding-left);
42
42
  }
43
- .radio-group__error_o22dp {
43
+ .radio-group__error_16gra {
44
44
  padding-left: var(--radio-group-error-padding-left);
45
45
  border-left: var(--radio-group-error-border-left);
46
46
  }
47
- .radio-group__error_o22dp.radio-group__tag_o22dp {
47
+ .radio-group__error_16gra.radio-group__tag_16gra {
48
48
  padding-left: var(--gap-8);
49
49
  }
@@ -1,6 +1,6 @@
1
1
  import './desktop.css';
2
2
 
3
- var styles = {"radioList":"radio-group__radioList_o22dp","label":"radio-group__label_o22dp","sub":"radio-group__sub_o22dp","error":"radio-group__error_o22dp","tag":"radio-group__tag_o22dp"};
3
+ var styles = {"radioList":"radio-group__radioList_16gra","label":"radio-group__label_16gra","sub":"radio-group__sub_16gra","error":"radio-group__error_16gra","tag":"radio-group__tag_16gra"};
4
4
 
5
5
  export { styles as default };
6
6
  //# sourceMappingURL=desktop.module.css.js.map
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { type BaseRadioGroupProps } from '../components/base-radio-group';
3
- export declare type RadioGroupMobileProps = Omit<BaseRadioGroupProps, 'styles'>;
3
+ export type RadioGroupMobileProps = Omit<BaseRadioGroupProps, 'styles'>;
4
4
  export declare const RadioGroupMobile: React.ForwardRefExoticComponent<RadioGroupMobileProps & React.RefAttributes<HTMLDivElement>>;
@@ -23,10 +23,10 @@
23
23
  --radio-group-mobile-error-padding-left: var(--gap-0);
24
24
  --radio-group-mobile-error-border-left: none;
25
25
  }
26
- .radio-group__radioList_u7sr2 {
26
+ .radio-group__radioList_1xg6n {
27
27
  padding-left: var(--radio-group-mobile-list-padding-left);
28
28
  }
29
- .radio-group__label_u7sr2 {
29
+ .radio-group__label_1xg6n {
30
30
  font-size: 14px;
31
31
  line-height: 18px;
32
32
  font-weight: 400;
@@ -35,10 +35,10 @@
35
35
  padding-left: var(--radio-group-mobile-sub-padding-left);
36
36
  margin-bottom: var(--gap-12);
37
37
  }
38
- .radio-group__label_u7sr2.radio-group__tag_u7sr2 {
38
+ .radio-group__label_1xg6n.radio-group__tag_1xg6n {
39
39
  margin-bottom: var(--gap-8);
40
40
  }
41
- .radio-group__sub_u7sr2 {
41
+ .radio-group__sub_1xg6n {
42
42
  font-size: 14px;
43
43
  line-height: 18px;
44
44
  font-weight: 400;
@@ -46,13 +46,13 @@
46
46
  margin-top: var(--gap-12);
47
47
  padding-left: var(--radio-group-mobile-sub-padding-left);
48
48
  }
49
- .radio-group__sub_u7sr2.radio-group__tag_u7sr2 {
49
+ .radio-group__sub_1xg6n.radio-group__tag_1xg6n {
50
50
  margin-top: var(--gap-8);
51
51
  }
52
- .radio-group__error_u7sr2 {
52
+ .radio-group__error_1xg6n {
53
53
  padding-left: var(--radio-group-mobile-error-padding-left);
54
54
  border-left: var(--radio-group-mobile-error-border-left);
55
55
  }
56
- .radio-group__error_u7sr2.radio-group__tag_u7sr2 {
56
+ .radio-group__error_1xg6n.radio-group__tag_1xg6n {
57
57
  padding-left: var(--gap-0);
58
58
  }
@@ -1,6 +1,6 @@
1
1
  import './mobile.css';
2
2
 
3
- var styles = {"radioList":"radio-group__radioList_u7sr2","label":"radio-group__label_u7sr2","tag":"radio-group__tag_u7sr2","sub":"radio-group__sub_u7sr2","error":"radio-group__error_u7sr2"};
3
+ var styles = {"radioList":"radio-group__radioList_1xg6n","label":"radio-group__label_1xg6n","tag":"radio-group__tag_1xg6n","sub":"radio-group__sub_1xg6n","error":"radio-group__error_1xg6n"};
4
4
 
5
5
  export { styles as default };
6
6
  //# sourceMappingURL=mobile.module.css.js.map
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { type BaseRadioGroupProps } from '../components/base-radio-group';
3
- export declare type RadioGroupMobileProps = Omit<BaseRadioGroupProps, 'styles'>;
3
+ export type RadioGroupMobileProps = Omit<BaseRadioGroupProps, 'styles'>;
4
4
  export declare const RadioGroupMobile: React.ForwardRefExoticComponent<RadioGroupMobileProps & React.RefAttributes<HTMLDivElement>>;
package/mobile/mobile.css CHANGED
@@ -23,10 +23,10 @@
23
23
  --radio-group-mobile-error-padding-left: var(--gap-0);
24
24
  --radio-group-mobile-error-border-left: none;
25
25
  }
26
- .radio-group__radioList_u7sr2 {
26
+ .radio-group__radioList_1xg6n {
27
27
  padding-left: var(--radio-group-mobile-list-padding-left);
28
28
  }
29
- .radio-group__label_u7sr2 {
29
+ .radio-group__label_1xg6n {
30
30
  font-size: 14px;
31
31
  line-height: 18px;
32
32
  font-weight: 400;
@@ -35,10 +35,10 @@
35
35
  padding-left: var(--radio-group-mobile-sub-padding-left);
36
36
  margin-bottom: var(--gap-12);
37
37
  }
38
- .radio-group__label_u7sr2.radio-group__tag_u7sr2 {
38
+ .radio-group__label_1xg6n.radio-group__tag_1xg6n {
39
39
  margin-bottom: var(--gap-8);
40
40
  }
41
- .radio-group__sub_u7sr2 {
41
+ .radio-group__sub_1xg6n {
42
42
  font-size: 14px;
43
43
  line-height: 18px;
44
44
  font-weight: 400;
@@ -46,13 +46,13 @@
46
46
  margin-top: var(--gap-12);
47
47
  padding-left: var(--radio-group-mobile-sub-padding-left);
48
48
  }
49
- .radio-group__sub_u7sr2.radio-group__tag_u7sr2 {
49
+ .radio-group__sub_1xg6n.radio-group__tag_1xg6n {
50
50
  margin-top: var(--gap-8);
51
51
  }
52
- .radio-group__error_u7sr2 {
52
+ .radio-group__error_1xg6n {
53
53
  padding-left: var(--radio-group-mobile-error-padding-left);
54
54
  border-left: var(--radio-group-mobile-error-border-left);
55
55
  }
56
- .radio-group__error_u7sr2.radio-group__tag_u7sr2 {
56
+ .radio-group__error_1xg6n.radio-group__tag_1xg6n {
57
57
  padding-left: var(--gap-0);
58
58
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  require('./mobile.css');
4
4
 
5
- var styles = {"radioList":"radio-group__radioList_u7sr2","label":"radio-group__label_u7sr2","tag":"radio-group__tag_u7sr2","sub":"radio-group__sub_u7sr2","error":"radio-group__error_u7sr2"};
5
+ var styles = {"radioList":"radio-group__radioList_1xg6n","label":"radio-group__label_1xg6n","tag":"radio-group__tag_1xg6n","sub":"radio-group__sub_1xg6n","error":"radio-group__error_1xg6n"};
6
6
 
7
7
  module.exports = styles;
8
8
  //# sourceMappingURL=mobile.module.css.js.map
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { type BaseRadioGroupProps } from './components/base-radio-group';
3
- export declare type RadioGroupProps = Omit<BaseRadioGroupProps, 'styles'> & {
3
+ export type RadioGroupProps = Omit<BaseRadioGroupProps, 'styles'> & {
4
4
  /**
5
5
  * Контрольная точка, с нее начинается desktop версия
6
6
  * @default 1024
@@ -21,14 +21,14 @@ export declare const RadioGroup: React.ForwardRefExoticComponent<Omit<BaseRadioG
21
21
  * Контрольная точка, с нее начинается desktop версия
22
22
  * @default 1024
23
23
  */
24
- breakpoint?: number | undefined;
24
+ breakpoint?: number;
25
25
  /**
26
26
  * Версия, которая будет использоваться при серверном рендеринге
27
27
  */
28
- client?: "mobile" | "desktop" | undefined;
28
+ client?: "desktop" | "mobile";
29
29
  /**
30
30
  * Значение по-умолчанию для хука useMatchMedia
31
31
  * @deprecated Используйте client
32
32
  */
33
- defaultMatchMediaValue?: boolean | (() => boolean) | undefined;
33
+ defaultMatchMediaValue?: boolean | (() => boolean);
34
34
  } & React.RefAttributes<HTMLDivElement>>;
@@ -1,6 +1,6 @@
1
1
  import React, { type AriaAttributes, type ChangeEvent, type FocusEvent, type HTMLAttributes, type MouseEvent, type ReactNode } from 'react';
2
- export declare type Direction = 'horizontal' | 'vertical';
3
- export declare type RadioGroupType = 'radio' | 'tag';
2
+ export type Direction = 'horizontal' | 'vertical';
3
+ export type RadioGroupType = 'radio' | 'tag';
4
4
  export interface BaseRadioGroupProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'onBlur' | 'onFocus' | 'children' | 'className'>, AriaAttributes {
5
5
  /**
6
6
  * Заголовок группы
@@ -1 +1 @@
1
- {"version":3,"file":"Component.js","sources":["../../../src/components/base-radio-group/Component.tsx"],"sourcesContent":["import React, {\n type AriaAttributes,\n type ChangeEvent,\n Children,\n cloneElement,\n type FocusEvent,\n forwardRef,\n type HTMLAttributes,\n isValidElement,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n useState,\n} from 'react';\nimport cn from 'classnames';\n\nimport { getDataTestId } from '@alfalab/core-components-shared';\nimport { useDidUpdateEffect } from '@alfalab/hooks';\n\nimport commonStyles from './index.module.css';\n\nexport type Direction = 'horizontal' | 'vertical';\nexport type RadioGroupType = 'radio' | 'tag';\n\nexport interface BaseRadioGroupProps\n extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'onBlur' | 'onFocus' | 'children' | 'className'\n >,\n AriaAttributes {\n /**\n * Заголовок группы\n */\n label?: ReactNode;\n\n /**\n * Направление\n */\n direction?: Direction;\n\n /**\n * Тип компонента\n */\n type?: RadioGroupType;\n\n /**\n * Дополнительный класс\n */\n className?: string;\n\n /**\n * Дополнительный класс для списка радио элементов\n */\n radioListClassName?: string;\n\n /**\n * Отображение ошибки\n */\n error?: ReactNode | boolean;\n\n /**\n * Текст подсказки снизу\n */\n hint?: ReactNode;\n\n /**\n * Дочерние элементы. Ожидаются компоненты `Radio` или `Tag`\n */\n children: ReactNode;\n\n /**\n * Обработчик изменения значения 'checked' одного из дочерних компонентов\n */\n onChange?: (\n event: ChangeEvent | MouseEvent,\n payload: {\n value: string;\n name?: string;\n },\n ) => void;\n\n /**\n * Обработчик блюра.\n */\n onBlur?: (event: FocusEvent<HTMLInputElement>) => void;\n\n /**\n * Обработчик фокуса.\n */\n onFocus?: (event: FocusEvent<HTMLInputElement>) => void;\n\n /**\n * Управление возможностью изменения состояния 'checked' дочерних компонентов Radio | Tag\n */\n disabled?: boolean;\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n /**\n * Атрибут name для всех дочерних компонентов\n */\n name?: string;\n\n /**\n * Value выбранного дочернего элемента\n */\n value?: string | null;\n\n /**\n * Основные стили компонента.\n */\n styles: { [key: string]: string };\n}\n\nexport const BaseRadioGroup = forwardRef<HTMLDivElement, BaseRadioGroupProps>(\n (\n {\n children,\n className,\n radioListClassName,\n direction = 'vertical',\n label,\n error,\n hint,\n onChange,\n onBlur,\n onFocus,\n type = 'radio',\n dataTestId,\n disabled = false,\n name,\n value,\n styles,\n ...restProps\n },\n ref,\n ) => {\n const [stateValue, setStateValue] = useState<BaseRadioGroupProps['value']>('');\n\n useDidUpdateEffect(() => {\n setStateValue(value);\n }, [value]);\n\n const isChecked = (childValue: string) =>\n value !== null && (value || stateValue) === childValue;\n\n const handleChange = (event: ChangeEvent | MouseEvent, childValue: string) => {\n setStateValue(childValue);\n if (onChange) {\n onChange(event, { name, value: childValue });\n }\n };\n\n const renderRadio = (child: ReactElement) => {\n const { className: childClassName, value: childValue } = child.props;\n\n return cloneElement(child, {\n onChange: (event: ChangeEvent) => handleChange(event, childValue),\n disabled,\n ...child.props,\n checked: isChecked(childValue),\n name,\n className: cn(childClassName, commonStyles[`${direction}Radio`]),\n });\n };\n\n const renderTag = (child: ReactElement) => {\n const childValue = child.props.value;\n const checked = isChecked(childValue);\n const clone = cloneElement(child, {\n onClick: (event: MouseEvent) => handleChange(event, childValue),\n disabled,\n ...child.props,\n checked,\n name,\n tabIndex: -1,\n });\n\n return (\n <label\n className={cn(\n commonStyles[`${direction}Radio`],\n commonStyles[`${direction}TagLabel`],\n commonStyles.tagLabel,\n )}\n >\n <input\n type='radio'\n autoComplete='off'\n onChange={(event: ChangeEvent) => handleChange(event, childValue)}\n disabled={disabled || child.props.disabled}\n name={name}\n checked={checked}\n className={commonStyles.hiddenInput}\n value={child.props.value}\n />\n {clone}\n </label>\n );\n };\n\n const errorMessage = typeof error === 'boolean' ? '' : error;\n\n return (\n <div\n className={cn(\n commonStyles.component,\n commonStyles[type],\n { [styles.error]: error },\n className,\n )}\n ref={ref}\n data-test-id={dataTestId}\n {...restProps}\n >\n {label ? (\n <span\n className={cn(styles.label, {\n [styles.tag]: type === 'tag',\n })}\n data-test-id={getDataTestId(dataTestId, 'label')}\n >\n {label}\n </span>\n ) : null}\n\n {children ? (\n <div\n className={cn(\n commonStyles.radioList,\n commonStyles[`${direction}RadioList`],\n radioListClassName,\n { [styles.radioList]: type === 'radio' },\n )}\n onBlur={onBlur}\n onFocus={onFocus}\n >\n {Children.map(children, (child) => {\n if (isValidElement(child)) {\n return type === 'radio' ? renderRadio(child) : renderTag(child);\n }\n\n return null;\n })}\n </div>\n ) : null}\n\n {errorMessage && (\n <span\n className={cn(\n styles.sub,\n {\n [styles.tag]: type === 'tag',\n },\n commonStyles.errorMessage,\n )}\n role='alert'\n data-test-id={getDataTestId(dataTestId, 'error')}\n >\n {errorMessage}\n </span>\n )}\n\n {hint && !errorMessage && (\n <span\n className={cn(\n styles.sub,\n {\n [styles.tag]: type === 'tag',\n },\n commonStyles.hint,\n )}\n data-test-id={getDataTestId(dataTestId, 'hint')}\n >\n {hint}\n </span>\n )}\n </div>\n );\n },\n);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Component.js","sources":["../../../src/components/base-radio-group/Component.tsx"],"sourcesContent":["import React, {\n type AriaAttributes,\n type ChangeEvent,\n Children,\n cloneElement,\n type FocusEvent,\n forwardRef,\n type HTMLAttributes,\n isValidElement,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n useState,\n} from 'react';\nimport cn from 'classnames';\n\nimport { getDataTestId } from '@alfalab/core-components-shared';\nimport { useDidUpdateEffect } from '@alfalab/hooks';\n\nimport commonStyles from './index.module.css';\n\nexport type Direction = 'horizontal' | 'vertical';\nexport type RadioGroupType = 'radio' | 'tag';\n\nexport interface BaseRadioGroupProps\n extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'onBlur' | 'onFocus' | 'children' | 'className'\n >,\n AriaAttributes {\n /**\n * Заголовок группы\n */\n label?: ReactNode;\n\n /**\n * Направление\n */\n direction?: Direction;\n\n /**\n * Тип компонента\n */\n type?: RadioGroupType;\n\n /**\n * Дополнительный класс\n */\n className?: string;\n\n /**\n * Дополнительный класс для списка радио элементов\n */\n radioListClassName?: string;\n\n /**\n * Отображение ошибки\n */\n error?: ReactNode | boolean;\n\n /**\n * Текст подсказки снизу\n */\n hint?: ReactNode;\n\n /**\n * Дочерние элементы. Ожидаются компоненты `Radio` или `Tag`\n */\n children: ReactNode;\n\n /**\n * Обработчик изменения значения 'checked' одного из дочерних компонентов\n */\n onChange?: (\n event: ChangeEvent | MouseEvent,\n payload: {\n value: string;\n name?: string;\n },\n ) => void;\n\n /**\n * Обработчик блюра.\n */\n onBlur?: (event: FocusEvent<HTMLInputElement>) => void;\n\n /**\n * Обработчик фокуса.\n */\n onFocus?: (event: FocusEvent<HTMLInputElement>) => void;\n\n /**\n * Управление возможностью изменения состояния 'checked' дочерних компонентов Radio | Tag\n */\n disabled?: boolean;\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n /**\n * Атрибут name для всех дочерних компонентов\n */\n name?: string;\n\n /**\n * Value выбранного дочернего элемента\n */\n value?: string | null;\n\n /**\n * Основные стили компонента.\n */\n styles: { [key: string]: string };\n}\n\nexport const BaseRadioGroup = forwardRef<HTMLDivElement, BaseRadioGroupProps>(\n (\n {\n children,\n className,\n radioListClassName,\n direction = 'vertical',\n label,\n error,\n hint,\n onChange,\n onBlur,\n onFocus,\n type = 'radio',\n dataTestId,\n disabled = false,\n name,\n value,\n styles,\n ...restProps\n },\n ref,\n ) => {\n const [stateValue, setStateValue] = useState<BaseRadioGroupProps['value']>('');\n\n useDidUpdateEffect(() => {\n setStateValue(value);\n }, [value]);\n\n const isChecked = (childValue: string) =>\n value !== null && (value || stateValue) === childValue;\n\n const handleChange = (event: ChangeEvent | MouseEvent, childValue: string) => {\n setStateValue(childValue);\n if (onChange) {\n onChange(event, { name, value: childValue });\n }\n };\n\n const renderRadio = (child: ReactElement) => {\n const { className: childClassName, value: childValue } = child.props;\n\n return cloneElement(child, {\n onChange: (event: ChangeEvent) => handleChange(event, childValue),\n disabled,\n ...child.props,\n checked: isChecked(childValue),\n name,\n className: cn(childClassName, commonStyles[`${direction}Radio`]),\n });\n };\n\n const renderTag = (child: ReactElement) => {\n const childValue = child.props.value;\n const checked = isChecked(childValue);\n const clone = cloneElement(child, {\n onClick: (event: MouseEvent) => handleChange(event, childValue),\n disabled,\n ...child.props,\n checked,\n name,\n tabIndex: -1,\n });\n\n return (\n <label\n className={cn(\n commonStyles[`${direction}Radio`],\n commonStyles[`${direction}TagLabel`],\n commonStyles.tagLabel,\n )}\n >\n <input\n type='radio'\n autoComplete='off'\n onChange={(event: ChangeEvent) => handleChange(event, childValue)}\n disabled={disabled || child.props.disabled}\n name={name}\n checked={checked}\n className={commonStyles.hiddenInput}\n value={child.props.value}\n />\n {clone}\n </label>\n );\n };\n\n const errorMessage = typeof error === 'boolean' ? '' : error;\n\n return (\n <div\n className={cn(\n commonStyles.component,\n commonStyles[type],\n { [styles.error]: error },\n className,\n )}\n ref={ref}\n data-test-id={dataTestId}\n {...restProps}\n >\n {label ? (\n <span\n className={cn(styles.label, {\n [styles.tag]: type === 'tag',\n })}\n data-test-id={getDataTestId(dataTestId, 'label')}\n >\n {label}\n </span>\n ) : null}\n\n {children ? (\n <div\n className={cn(\n commonStyles.radioList,\n commonStyles[`${direction}RadioList`],\n radioListClassName,\n { [styles.radioList]: type === 'radio' },\n )}\n onBlur={onBlur}\n onFocus={onFocus}\n >\n {Children.map(children, (child) => {\n if (isValidElement(child)) {\n return type === 'radio' ? renderRadio(child) : renderTag(child);\n }\n\n return null;\n })}\n </div>\n ) : null}\n\n {errorMessage && (\n <span\n className={cn(\n styles.sub,\n {\n [styles.tag]: type === 'tag',\n },\n commonStyles.errorMessage,\n )}\n role='alert'\n data-test-id={getDataTestId(dataTestId, 'error')}\n >\n {errorMessage}\n </span>\n )}\n\n {hint && !errorMessage && (\n <span\n className={cn(\n styles.sub,\n {\n [styles.tag]: type === 'tag',\n },\n commonStyles.hint,\n )}\n data-test-id={getDataTestId(dataTestId, 'hint')}\n >\n {hint}\n </span>\n )}\n </div>\n );\n },\n);\n"],"names":[],"mappings":"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"}
@@ -21,56 +21,56 @@
21
21
  --radio-group-hint-color: var(--color-light-text-secondary);
22
22
  --radio-group-error-color: var(--color-light-text-negative);
23
23
  }
24
- .radio-group__component_51kfk {
24
+ .radio-group__component_1lufd {
25
25
  display: flex;
26
26
  flex-direction: column;
27
27
  }
28
- .radio-group__radioList_51kfk {
28
+ .radio-group__radioList_1lufd {
29
29
  display: flex;
30
30
  }
31
- .radio-group__verticalRadioList_51kfk {
31
+ .radio-group__verticalRadioList_1lufd {
32
32
  flex-direction: column;
33
33
  align-items: flex-start;
34
34
  }
35
- .radio-group__horizontalRadioList_51kfk {
35
+ .radio-group__horizontalRadioList_1lufd {
36
36
  flex-wrap: wrap;
37
37
  margin-bottom: var(--gap-8-neg);
38
38
  }
39
- .radio-group__verticalRadio_51kfk {
39
+ .radio-group__verticalRadio_1lufd {
40
40
  margin-bottom: var(--gap-12);
41
41
  }
42
- .radio-group__verticalRadio_51kfk:last-child {
42
+ .radio-group__verticalRadio_1lufd:last-child {
43
43
  margin-bottom: var(--gap-0);
44
44
  }
45
- .radio-group__horizontalRadio_51kfk {
45
+ .radio-group__horizontalRadio_1lufd {
46
46
  margin-right: var(--gap-24);
47
47
  margin-bottom: var(--gap-8);
48
48
  }
49
- .radio-group__horizontalTagLabel_51kfk {
49
+ .radio-group__horizontalTagLabel_1lufd {
50
50
  margin-right: var(--gap-8);
51
51
  }
52
- .radio-group__horizontalRadio_51kfk:last-child,
53
- .radio-group__horizontalTagLabel_51kfk:last-child {
52
+ .radio-group__horizontalRadio_1lufd:last-child,
53
+ .radio-group__horizontalTagLabel_1lufd:last-child {
54
54
  margin-right: var(--gap-0);
55
55
  }
56
- .radio-group__errorMessage_51kfk {
56
+ .radio-group__errorMessage_1lufd {
57
57
  color: var(--radio-group-error-color);
58
58
  }
59
- .radio-group__hint_51kfk {
59
+ .radio-group__hint_1lufd {
60
60
  color: var(--radio-group-hint-color);
61
61
  }
62
- .radio-group__hiddenInput_51kfk {
62
+ .radio-group__hiddenInput_1lufd {
63
63
  position: absolute;
64
64
  z-index: -1;
65
65
  top: var(--gap-0);
66
66
  left: var(--gap-0);
67
67
  opacity: 0;
68
68
  }
69
- .radio-group__hiddenInput_51kfk:focus ~ button {
69
+ .radio-group__hiddenInput_1lufd:focus ~ button {
70
70
  outline: 2px solid var(--focus-color);
71
71
  outline-offset: 2px;
72
72
  }
73
- .radio-group__tagLabel_51kfk {
73
+ .radio-group__tagLabel_1lufd {
74
74
  position: relative;
75
75
  max-width: 100%;
76
76
  }
@@ -1,6 +1,6 @@
1
1
  import './index.css';
2
2
 
3
- const commonStyles = {"component":"radio-group__component_51kfk","radioList":"radio-group__radioList_51kfk","verticalRadioList":"radio-group__verticalRadioList_51kfk","horizontalRadioList":"radio-group__horizontalRadioList_51kfk","verticalRadio":"radio-group__verticalRadio_51kfk","horizontalRadio":"radio-group__horizontalRadio_51kfk","horizontalTagLabel":"radio-group__horizontalTagLabel_51kfk","errorMessage":"radio-group__errorMessage_51kfk","hint":"radio-group__hint_51kfk","hiddenInput":"radio-group__hiddenInput_51kfk","tagLabel":"radio-group__tagLabel_51kfk"};
3
+ const commonStyles = {"component":"radio-group__component_1lufd","radioList":"radio-group__radioList_1lufd","verticalRadioList":"radio-group__verticalRadioList_1lufd","horizontalRadioList":"radio-group__horizontalRadioList_1lufd","verticalRadio":"radio-group__verticalRadio_1lufd","horizontalRadio":"radio-group__horizontalRadio_1lufd","horizontalTagLabel":"radio-group__horizontalTagLabel_1lufd","errorMessage":"radio-group__errorMessage_1lufd","hint":"radio-group__hint_1lufd","hiddenInput":"radio-group__hiddenInput_1lufd","tagLabel":"radio-group__tagLabel_1lufd"};
4
4
 
5
5
  export { commonStyles as default };
6
6
  //# sourceMappingURL=index.module.css.js.map
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { type BaseRadioGroupProps } from '../components/base-radio-group';
3
- export declare type RadioGroupDesktopProps = Omit<BaseRadioGroupProps, 'styles'>;
3
+ export type RadioGroupDesktopProps = Omit<BaseRadioGroupProps, 'styles'>;
4
4
  export declare const RadioGroupDesktop: React.ForwardRefExoticComponent<RadioGroupDesktopProps & React.RefAttributes<HTMLDivElement>>;
@@ -20,10 +20,10 @@
20
20
  --radio-group-error-padding-left: var(--gap-8);
21
21
  --radio-group-error-border-left: 1px solid var(--color-light-status-negative);
22
22
  }
23
- .radio-group__radioList_o22dp {
23
+ .radio-group__radioList_16gra {
24
24
  padding-left: var(--radio-group-list-padding-left);
25
25
  }
26
- .radio-group__label_o22dp {
26
+ .radio-group__label_16gra {
27
27
  font-size: 16px;
28
28
  line-height: 24px;
29
29
  font-weight: 400;
@@ -32,7 +32,7 @@
32
32
  margin-bottom: var(--gap-12);
33
33
  padding-left: var(--radio-group-sub-padding-left);
34
34
  }
35
- .radio-group__sub_o22dp {
35
+ .radio-group__sub_16gra {
36
36
  font-size: 14px;
37
37
  line-height: 18px;
38
38
  font-weight: 400;
@@ -40,10 +40,10 @@
40
40
  margin-top: var(--gap-12);
41
41
  padding-left: var(--radio-group-sub-padding-left);
42
42
  }
43
- .radio-group__error_o22dp {
43
+ .radio-group__error_16gra {
44
44
  padding-left: var(--radio-group-error-padding-left);
45
45
  border-left: var(--radio-group-error-border-left);
46
46
  }
47
- .radio-group__error_o22dp.radio-group__tag_o22dp {
47
+ .radio-group__error_16gra.radio-group__tag_16gra {
48
48
  padding-left: var(--gap-8);
49
49
  }
@@ -1,6 +1,6 @@
1
1
  import './desktop.css';
2
2
 
3
- const styles = {"radioList":"radio-group__radioList_o22dp","label":"radio-group__label_o22dp","sub":"radio-group__sub_o22dp","error":"radio-group__error_o22dp","tag":"radio-group__tag_o22dp"};
3
+ const styles = {"radioList":"radio-group__radioList_16gra","label":"radio-group__label_16gra","sub":"radio-group__sub_16gra","error":"radio-group__error_16gra","tag":"radio-group__tag_16gra"};
4
4
 
5
5
  export { styles as default };
6
6
  //# sourceMappingURL=desktop.module.css.js.map
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { type BaseRadioGroupProps } from '../components/base-radio-group';
3
- export declare type RadioGroupMobileProps = Omit<BaseRadioGroupProps, 'styles'>;
3
+ export type RadioGroupMobileProps = Omit<BaseRadioGroupProps, 'styles'>;
4
4
  export declare const RadioGroupMobile: React.ForwardRefExoticComponent<RadioGroupMobileProps & React.RefAttributes<HTMLDivElement>>;
@@ -23,10 +23,10 @@
23
23
  --radio-group-mobile-error-padding-left: var(--gap-0);
24
24
  --radio-group-mobile-error-border-left: none;
25
25
  }
26
- .radio-group__radioList_u7sr2 {
26
+ .radio-group__radioList_1xg6n {
27
27
  padding-left: var(--radio-group-mobile-list-padding-left);
28
28
  }
29
- .radio-group__label_u7sr2 {
29
+ .radio-group__label_1xg6n {
30
30
  font-size: 14px;
31
31
  line-height: 18px;
32
32
  font-weight: 400;
@@ -35,10 +35,10 @@
35
35
  padding-left: var(--radio-group-mobile-sub-padding-left);
36
36
  margin-bottom: var(--gap-12);
37
37
  }
38
- .radio-group__label_u7sr2.radio-group__tag_u7sr2 {
38
+ .radio-group__label_1xg6n.radio-group__tag_1xg6n {
39
39
  margin-bottom: var(--gap-8);
40
40
  }
41
- .radio-group__sub_u7sr2 {
41
+ .radio-group__sub_1xg6n {
42
42
  font-size: 14px;
43
43
  line-height: 18px;
44
44
  font-weight: 400;
@@ -46,13 +46,13 @@
46
46
  margin-top: var(--gap-12);
47
47
  padding-left: var(--radio-group-mobile-sub-padding-left);
48
48
  }
49
- .radio-group__sub_u7sr2.radio-group__tag_u7sr2 {
49
+ .radio-group__sub_1xg6n.radio-group__tag_1xg6n {
50
50
  margin-top: var(--gap-8);
51
51
  }
52
- .radio-group__error_u7sr2 {
52
+ .radio-group__error_1xg6n {
53
53
  padding-left: var(--radio-group-mobile-error-padding-left);
54
54
  border-left: var(--radio-group-mobile-error-border-left);
55
55
  }
56
- .radio-group__error_u7sr2.radio-group__tag_u7sr2 {
56
+ .radio-group__error_1xg6n.radio-group__tag_1xg6n {
57
57
  padding-left: var(--gap-0);
58
58
  }
@@ -1,6 +1,6 @@
1
1
  import './mobile.css';
2
2
 
3
- const styles = {"radioList":"radio-group__radioList_u7sr2","label":"radio-group__label_u7sr2","tag":"radio-group__tag_u7sr2","sub":"radio-group__sub_u7sr2","error":"radio-group__error_u7sr2"};
3
+ const styles = {"radioList":"radio-group__radioList_1xg6n","label":"radio-group__label_1xg6n","tag":"radio-group__tag_1xg6n","sub":"radio-group__sub_1xg6n","error":"radio-group__error_1xg6n"};
4
4
 
5
5
  export { styles as default };
6
6
  //# sourceMappingURL=mobile.module.css.js.map
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { type BaseRadioGroupProps } from './components/base-radio-group';
3
- export declare type RadioGroupProps = Omit<BaseRadioGroupProps, 'styles'> & {
3
+ export type RadioGroupProps = Omit<BaseRadioGroupProps, 'styles'> & {
4
4
  /**
5
5
  * Контрольная точка, с нее начинается desktop версия
6
6
  * @default 1024
@@ -21,14 +21,14 @@ export declare const RadioGroup: React.ForwardRefExoticComponent<Omit<BaseRadioG
21
21
  * Контрольная точка, с нее начинается desktop версия
22
22
  * @default 1024
23
23
  */
24
- breakpoint?: number | undefined;
24
+ breakpoint?: number;
25
25
  /**
26
26
  * Версия, которая будет использоваться при серверном рендеринге
27
27
  */
28
- client?: "mobile" | "desktop" | undefined;
28
+ client?: "desktop" | "mobile";
29
29
  /**
30
30
  * Значение по-умолчанию для хука useMatchMedia
31
31
  * @deprecated Используйте client
32
32
  */
33
- defaultMatchMediaValue?: boolean | (() => boolean) | undefined;
33
+ defaultMatchMediaValue?: boolean | (() => boolean);
34
34
  } & React.RefAttributes<HTMLDivElement>>;
@@ -1,6 +1,6 @@
1
1
  import React, { type AriaAttributes, type ChangeEvent, type FocusEvent, type HTMLAttributes, type MouseEvent, type ReactNode } from 'react';
2
- export declare type Direction = 'horizontal' | 'vertical';
3
- export declare type RadioGroupType = 'radio' | 'tag';
2
+ export type Direction = 'horizontal' | 'vertical';
3
+ export type RadioGroupType = 'radio' | 'tag';
4
4
  export interface BaseRadioGroupProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'onBlur' | 'onFocus' | 'children' | 'className'>, AriaAttributes {
5
5
  /**
6
6
  * Заголовок группы
@@ -1 +1 @@
1
- {"version":3,"file":"Component.js","sources":["../../../src/components/base-radio-group/Component.tsx"],"sourcesContent":["import React, {\n type AriaAttributes,\n type ChangeEvent,\n Children,\n cloneElement,\n type FocusEvent,\n forwardRef,\n type HTMLAttributes,\n isValidElement,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n useState,\n} from 'react';\nimport cn from 'classnames';\n\nimport { getDataTestId } from '@alfalab/core-components-shared';\nimport { useDidUpdateEffect } from '@alfalab/hooks';\n\nimport commonStyles from './index.module.css';\n\nexport type Direction = 'horizontal' | 'vertical';\nexport type RadioGroupType = 'radio' | 'tag';\n\nexport interface BaseRadioGroupProps\n extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'onBlur' | 'onFocus' | 'children' | 'className'\n >,\n AriaAttributes {\n /**\n * Заголовок группы\n */\n label?: ReactNode;\n\n /**\n * Направление\n */\n direction?: Direction;\n\n /**\n * Тип компонента\n */\n type?: RadioGroupType;\n\n /**\n * Дополнительный класс\n */\n className?: string;\n\n /**\n * Дополнительный класс для списка радио элементов\n */\n radioListClassName?: string;\n\n /**\n * Отображение ошибки\n */\n error?: ReactNode | boolean;\n\n /**\n * Текст подсказки снизу\n */\n hint?: ReactNode;\n\n /**\n * Дочерние элементы. Ожидаются компоненты `Radio` или `Tag`\n */\n children: ReactNode;\n\n /**\n * Обработчик изменения значения 'checked' одного из дочерних компонентов\n */\n onChange?: (\n event: ChangeEvent | MouseEvent,\n payload: {\n value: string;\n name?: string;\n },\n ) => void;\n\n /**\n * Обработчик блюра.\n */\n onBlur?: (event: FocusEvent<HTMLInputElement>) => void;\n\n /**\n * Обработчик фокуса.\n */\n onFocus?: (event: FocusEvent<HTMLInputElement>) => void;\n\n /**\n * Управление возможностью изменения состояния 'checked' дочерних компонентов Radio | Tag\n */\n disabled?: boolean;\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n /**\n * Атрибут name для всех дочерних компонентов\n */\n name?: string;\n\n /**\n * Value выбранного дочернего элемента\n */\n value?: string | null;\n\n /**\n * Основные стили компонента.\n */\n styles: { [key: string]: string };\n}\n\nexport const BaseRadioGroup = forwardRef<HTMLDivElement, BaseRadioGroupProps>(\n (\n {\n children,\n className,\n radioListClassName,\n direction = 'vertical',\n label,\n error,\n hint,\n onChange,\n onBlur,\n onFocus,\n type = 'radio',\n dataTestId,\n disabled = false,\n name,\n value,\n styles,\n ...restProps\n },\n ref,\n ) => {\n const [stateValue, setStateValue] = useState<BaseRadioGroupProps['value']>('');\n\n useDidUpdateEffect(() => {\n setStateValue(value);\n }, [value]);\n\n const isChecked = (childValue: string) =>\n value !== null && (value || stateValue) === childValue;\n\n const handleChange = (event: ChangeEvent | MouseEvent, childValue: string) => {\n setStateValue(childValue);\n if (onChange) {\n onChange(event, { name, value: childValue });\n }\n };\n\n const renderRadio = (child: ReactElement) => {\n const { className: childClassName, value: childValue } = child.props;\n\n return cloneElement(child, {\n onChange: (event: ChangeEvent) => handleChange(event, childValue),\n disabled,\n ...child.props,\n checked: isChecked(childValue),\n name,\n className: cn(childClassName, commonStyles[`${direction}Radio`]),\n });\n };\n\n const renderTag = (child: ReactElement) => {\n const childValue = child.props.value;\n const checked = isChecked(childValue);\n const clone = cloneElement(child, {\n onClick: (event: MouseEvent) => handleChange(event, childValue),\n disabled,\n ...child.props,\n checked,\n name,\n tabIndex: -1,\n });\n\n return (\n <label\n className={cn(\n commonStyles[`${direction}Radio`],\n commonStyles[`${direction}TagLabel`],\n commonStyles.tagLabel,\n )}\n >\n <input\n type='radio'\n autoComplete='off'\n onChange={(event: ChangeEvent) => handleChange(event, childValue)}\n disabled={disabled || child.props.disabled}\n name={name}\n checked={checked}\n className={commonStyles.hiddenInput}\n value={child.props.value}\n />\n {clone}\n </label>\n );\n };\n\n const errorMessage = typeof error === 'boolean' ? '' : error;\n\n return (\n <div\n className={cn(\n commonStyles.component,\n commonStyles[type],\n { [styles.error]: error },\n className,\n )}\n ref={ref}\n data-test-id={dataTestId}\n {...restProps}\n >\n {label ? (\n <span\n className={cn(styles.label, {\n [styles.tag]: type === 'tag',\n })}\n data-test-id={getDataTestId(dataTestId, 'label')}\n >\n {label}\n </span>\n ) : null}\n\n {children ? (\n <div\n className={cn(\n commonStyles.radioList,\n commonStyles[`${direction}RadioList`],\n radioListClassName,\n { [styles.radioList]: type === 'radio' },\n )}\n onBlur={onBlur}\n onFocus={onFocus}\n >\n {Children.map(children, (child) => {\n if (isValidElement(child)) {\n return type === 'radio' ? renderRadio(child) : renderTag(child);\n }\n\n return null;\n })}\n </div>\n ) : null}\n\n {errorMessage && (\n <span\n className={cn(\n styles.sub,\n {\n [styles.tag]: type === 'tag',\n },\n commonStyles.errorMessage,\n )}\n role='alert'\n data-test-id={getDataTestId(dataTestId, 'error')}\n >\n {errorMessage}\n </span>\n )}\n\n {hint && !errorMessage && (\n <span\n className={cn(\n styles.sub,\n {\n [styles.tag]: type === 'tag',\n },\n commonStyles.hint,\n )}\n data-test-id={getDataTestId(dataTestId, 'hint')}\n >\n {hint}\n </span>\n )}\n </div>\n );\n },\n);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Component.js","sources":["../../../src/components/base-radio-group/Component.tsx"],"sourcesContent":["import React, {\n type AriaAttributes,\n type ChangeEvent,\n Children,\n cloneElement,\n type FocusEvent,\n forwardRef,\n type HTMLAttributes,\n isValidElement,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n useState,\n} from 'react';\nimport cn from 'classnames';\n\nimport { getDataTestId } from '@alfalab/core-components-shared';\nimport { useDidUpdateEffect } from '@alfalab/hooks';\n\nimport commonStyles from './index.module.css';\n\nexport type Direction = 'horizontal' | 'vertical';\nexport type RadioGroupType = 'radio' | 'tag';\n\nexport interface BaseRadioGroupProps\n extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'onBlur' | 'onFocus' | 'children' | 'className'\n >,\n AriaAttributes {\n /**\n * Заголовок группы\n */\n label?: ReactNode;\n\n /**\n * Направление\n */\n direction?: Direction;\n\n /**\n * Тип компонента\n */\n type?: RadioGroupType;\n\n /**\n * Дополнительный класс\n */\n className?: string;\n\n /**\n * Дополнительный класс для списка радио элементов\n */\n radioListClassName?: string;\n\n /**\n * Отображение ошибки\n */\n error?: ReactNode | boolean;\n\n /**\n * Текст подсказки снизу\n */\n hint?: ReactNode;\n\n /**\n * Дочерние элементы. Ожидаются компоненты `Radio` или `Tag`\n */\n children: ReactNode;\n\n /**\n * Обработчик изменения значения 'checked' одного из дочерних компонентов\n */\n onChange?: (\n event: ChangeEvent | MouseEvent,\n payload: {\n value: string;\n name?: string;\n },\n ) => void;\n\n /**\n * Обработчик блюра.\n */\n onBlur?: (event: FocusEvent<HTMLInputElement>) => void;\n\n /**\n * Обработчик фокуса.\n */\n onFocus?: (event: FocusEvent<HTMLInputElement>) => void;\n\n /**\n * Управление возможностью изменения состояния 'checked' дочерних компонентов Radio | Tag\n */\n disabled?: boolean;\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n /**\n * Атрибут name для всех дочерних компонентов\n */\n name?: string;\n\n /**\n * Value выбранного дочернего элемента\n */\n value?: string | null;\n\n /**\n * Основные стили компонента.\n */\n styles: { [key: string]: string };\n}\n\nexport const BaseRadioGroup = forwardRef<HTMLDivElement, BaseRadioGroupProps>(\n (\n {\n children,\n className,\n radioListClassName,\n direction = 'vertical',\n label,\n error,\n hint,\n onChange,\n onBlur,\n onFocus,\n type = 'radio',\n dataTestId,\n disabled = false,\n name,\n value,\n styles,\n ...restProps\n },\n ref,\n ) => {\n const [stateValue, setStateValue] = useState<BaseRadioGroupProps['value']>('');\n\n useDidUpdateEffect(() => {\n setStateValue(value);\n }, [value]);\n\n const isChecked = (childValue: string) =>\n value !== null && (value || stateValue) === childValue;\n\n const handleChange = (event: ChangeEvent | MouseEvent, childValue: string) => {\n setStateValue(childValue);\n if (onChange) {\n onChange(event, { name, value: childValue });\n }\n };\n\n const renderRadio = (child: ReactElement) => {\n const { className: childClassName, value: childValue } = child.props;\n\n return cloneElement(child, {\n onChange: (event: ChangeEvent) => handleChange(event, childValue),\n disabled,\n ...child.props,\n checked: isChecked(childValue),\n name,\n className: cn(childClassName, commonStyles[`${direction}Radio`]),\n });\n };\n\n const renderTag = (child: ReactElement) => {\n const childValue = child.props.value;\n const checked = isChecked(childValue);\n const clone = cloneElement(child, {\n onClick: (event: MouseEvent) => handleChange(event, childValue),\n disabled,\n ...child.props,\n checked,\n name,\n tabIndex: -1,\n });\n\n return (\n <label\n className={cn(\n commonStyles[`${direction}Radio`],\n commonStyles[`${direction}TagLabel`],\n commonStyles.tagLabel,\n )}\n >\n <input\n type='radio'\n autoComplete='off'\n onChange={(event: ChangeEvent) => handleChange(event, childValue)}\n disabled={disabled || child.props.disabled}\n name={name}\n checked={checked}\n className={commonStyles.hiddenInput}\n value={child.props.value}\n />\n {clone}\n </label>\n );\n };\n\n const errorMessage = typeof error === 'boolean' ? '' : error;\n\n return (\n <div\n className={cn(\n commonStyles.component,\n commonStyles[type],\n { [styles.error]: error },\n className,\n )}\n ref={ref}\n data-test-id={dataTestId}\n {...restProps}\n >\n {label ? (\n <span\n className={cn(styles.label, {\n [styles.tag]: type === 'tag',\n })}\n data-test-id={getDataTestId(dataTestId, 'label')}\n >\n {label}\n </span>\n ) : null}\n\n {children ? (\n <div\n className={cn(\n commonStyles.radioList,\n commonStyles[`${direction}RadioList`],\n radioListClassName,\n { [styles.radioList]: type === 'radio' },\n )}\n onBlur={onBlur}\n onFocus={onFocus}\n >\n {Children.map(children, (child) => {\n if (isValidElement(child)) {\n return type === 'radio' ? renderRadio(child) : renderTag(child);\n }\n\n return null;\n })}\n </div>\n ) : null}\n\n {errorMessage && (\n <span\n className={cn(\n styles.sub,\n {\n [styles.tag]: type === 'tag',\n },\n commonStyles.errorMessage,\n )}\n role='alert'\n data-test-id={getDataTestId(dataTestId, 'error')}\n >\n {errorMessage}\n </span>\n )}\n\n {hint && !errorMessage && (\n <span\n className={cn(\n styles.sub,\n {\n [styles.tag]: type === 'tag',\n },\n commonStyles.hint,\n )}\n data-test-id={getDataTestId(dataTestId, 'hint')}\n >\n {hint}\n </span>\n )}\n </div>\n );\n },\n);\n"],"names":[],"mappings":";;;;;;AAqHa,MAAA,cAAc,GAAG,UAAU,CACpC,CACI,EACI,QAAQ,EACR,SAAS,EACT,kBAAkB,EAClB,SAAS,GAAG,UAAU,EACtB,KAAK,EACL,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,OAAO,EACP,IAAI,GAAG,OAAO,EACd,UAAU,EACV,QAAQ,GAAG,KAAK,EAChB,IAAI,EACJ,KAAK,EACL,MAAM,EACN,GAAG,SAAS,EACf,EACD,GAAG,KACH;IACA,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAA+B,EAAE,CAAC;IAE9E,kBAAkB,CAAC,MAAK;QACpB,aAAa,CAAC,KAAK,CAAC;AACxB,KAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEX,IAAA,MAAM,SAAS,GAAG,CAAC,UAAkB,KACjC,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,UAAU,MAAM,UAAU;AAE1D,IAAA,MAAM,YAAY,GAAG,CAAC,KAA+B,EAAE,UAAkB,KAAI;QACzE,aAAa,CAAC,UAAU,CAAC;QACzB,IAAI,QAAQ,EAAE;YACV,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;;AAEpD,KAAC;AAED,IAAA,MAAM,WAAW,GAAG,CAAC,KAAmB,KAAI;AACxC,QAAA,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,KAAK;QAEpE,OAAO,YAAY,CAAC,KAAK,EAAE;YACvB,QAAQ,EAAE,CAAC,KAAkB,KAAK,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC;YACjE,QAAQ;YACR,GAAG,KAAK,CAAC,KAAK;AACd,YAAA,OAAO,EAAE,SAAS,CAAC,UAAU,CAAC;YAC9B,IAAI;YACJ,SAAS,EAAE,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC,CAAG,EAAA,SAAS,CAAO,KAAA,CAAA,CAAC,CAAC;AACnE,SAAA,CAAC;AACN,KAAC;AAED,IAAA,MAAM,SAAS,GAAG,CAAC,KAAmB,KAAI;AACtC,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK;AACpC,QAAA,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC;AACrC,QAAA,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE;YAC9B,OAAO,EAAE,CAAC,KAAiB,KAAK,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC;YAC/D,QAAQ;YACR,GAAG,KAAK,CAAC,KAAK;YACd,OAAO;YACP,IAAI;YACJ,QAAQ,EAAE,EAAE;AACf,SAAA,CAAC;QAEF,QACI,+BACI,SAAS,EAAE,EAAE,CACT,YAAY,CAAC,CAAA,EAAG,SAAS,CAAA,KAAA,CAAO,CAAC,EACjC,YAAY,CAAC,CAAA,EAAG,SAAS,CAAA,QAAA,CAAU,CAAC,EACpC,YAAY,CAAC,QAAQ,CACxB,EAAA;YAED,KACI,CAAA,aAAA,CAAA,OAAA,EAAA,EAAA,IAAI,EAAC,OAAO,EACZ,YAAY,EAAC,KAAK,EAClB,QAAQ,EAAE,CAAC,KAAkB,KAAK,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,EACjE,QAAQ,EAAE,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,EAC1C,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,YAAY,CAAC,WAAW,EACnC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAC1B,CAAA;YACD,KAAK,CACF;AAEhB,KAAC;AAED,IAAA,MAAM,YAAY,GAAG,OAAO,KAAK,KAAK,SAAS,GAAG,EAAE,GAAG,KAAK;AAE5D,IAAA,QACI,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACI,SAAS,EAAE,EAAE,CACT,YAAY,CAAC,SAAS,EACtB,YAAY,CAAC,IAAI,CAAC,EAClB,EAAE,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,EAAE,EACzB,SAAS,CACZ,EACD,GAAG,EAAE,GAAG,EACM,cAAA,EAAA,UAAU,KACpB,SAAS,EAAA;AAEZ,QAAA,KAAK,IACF,KACI,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE;AACxB,gBAAA,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,KAAK,KAAK;AAC/B,aAAA,CAAC,EACY,cAAA,EAAA,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,EAE/C,EAAA,KAAK,CACH,IACP,IAAI;QAEP,QAAQ,IACL,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACI,SAAS,EAAE,EAAE,CACT,YAAY,CAAC,SAAS,EACtB,YAAY,CAAC,CAAG,EAAA,SAAS,CAAW,SAAA,CAAA,CAAC,EACrC,kBAAkB,EAClB,EAAE,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,KAAK,OAAO,EAAE,CAC3C,EACD,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAAA,EAEf,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,KAAI;AAC9B,YAAA,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE;AACvB,gBAAA,OAAO,IAAI,KAAK,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC;;AAGnE,YAAA,OAAO,IAAI;AACf,SAAC,CAAC,CACA,IACN,IAAI;QAEP,YAAY,KACT,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACI,SAAS,EAAE,EAAE,CACT,MAAM,CAAC,GAAG,EACV;AACI,gBAAA,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,KAAK,KAAK;AAC/B,aAAA,EACD,YAAY,CAAC,YAAY,CAC5B,EACD,IAAI,EAAC,OAAO,EAAA,cAAA,EACE,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,EAE/C,EAAA,YAAY,CACV,CACV;AAEA,QAAA,IAAI,IAAI,CAAC,YAAY,KAClB,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACI,SAAS,EAAE,EAAE,CACT,MAAM,CAAC,GAAG,EACV;AACI,gBAAA,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,KAAK,KAAK;AAC/B,aAAA,EACD,YAAY,CAAC,IAAI,CACpB,EAAA,cAAA,EACa,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,EAE9C,EAAA,IAAI,CACF,CACV,CACC;AAEd,CAAC;;;;"}
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { type BaseRadioGroupProps } from '../components/base-radio-group';
3
- export declare type RadioGroupDesktopProps = Omit<BaseRadioGroupProps, 'styles'>;
3
+ export type RadioGroupDesktopProps = Omit<BaseRadioGroupProps, 'styles'>;
4
4
  export declare const RadioGroupDesktop: React.ForwardRefExoticComponent<RadioGroupDesktopProps & React.RefAttributes<HTMLDivElement>>;
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { type BaseRadioGroupProps } from '../components/base-radio-group';
3
- export declare type RadioGroupMobileProps = Omit<BaseRadioGroupProps, 'styles'>;
3
+ export type RadioGroupMobileProps = Omit<BaseRadioGroupProps, 'styles'>;
4
4
  export declare const RadioGroupMobile: React.ForwardRefExoticComponent<RadioGroupMobileProps & React.RefAttributes<HTMLDivElement>>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alfalab/core-components-radio-group",
3
- "version": "6.0.2",
3
+ "version": "6.0.3",
4
4
  "description": "Radio group",
5
5
  "keywords": [],
6
6
  "license": "MIT",
@@ -10,8 +10,8 @@
10
10
  "main": "index.js",
11
11
  "module": "./esm/index.js",
12
12
  "dependencies": {
13
- "@alfalab/core-components-mq": "^6.0.2",
14
- "@alfalab/core-components-shared": "^2.1.0",
13
+ "@alfalab/core-components-mq": "^6.0.3",
14
+ "@alfalab/core-components-shared": "^2.1.1",
15
15
  "@alfalab/hooks": "^1.13.1",
16
16
  "classnames": "^2.5.1",
17
17
  "tslib": "^2.4.0"
@@ -24,6 +24,6 @@
24
24
  "access": "public",
25
25
  "directory": "dist"
26
26
  },
27
- "themesVersion": "15.0.1",
28
- "varsVersion": "11.0.1"
27
+ "themesVersion": "15.0.2",
28
+ "varsVersion": "11.0.2"
29
29
  }
package/src/vars.css CHANGED
@@ -1,4 +1,4 @@
1
- @import '@alfalab/core-components-vars/src/no-typography-index.css';
1
+ @import '@alfalab/core-components-vars/src/index.css';
2
2
 
3
3
  :root {
4
4
  --radio-group-hint-color: var(--color-light-text-secondary);