import React, { forwardRef, InputHTMLAttributes, ReactNode, useMemo } from 'react'; import { TStyle, useClassnames } from '../../hooks/use-classnames'; import { Text } from '../typography/v1/text'; import style from './index.module.pcss'; type TNative = InputHTMLAttributes; export interface IProps { /** * Название поля ввода, которое будет отправлено на сервер вместе со значением. **/ readonly name: string, /** * Позволяет добавить пользовательские CSS-классы **/ readonly className?: string | TStyle, /** * Текст метки, связанной с переключателем. **/ readonly label?: ReactNode, /** * Значение, которое будет отправлено на сервер при отправке формы. **/ readonly value?: string, /** * Значение переключателя по умолчанию. **/ readonly defaultValue?: string, /** * Дополнительный текст, который поясняет, что выбирает переключатель. **/ readonly description?: ReactNode, /** * Устанавливает или определяет, должен ли компонент быть отмечен. **/ readonly checked?: TNative['checked'], /** * Определяет, должен ли флажок быть установлен при первоначальной загрузке компонента. **/ readonly defaultChecked?: TNative['defaultChecked'], /** * Функция обратного вызова, которая будет вызываться при изменении значения переключателя. **/ readonly onChange?: TNative['onChange'], /** * Функция обратного вызова, которая будет вызываться при клике на переключатель. **/ readonly onClick?: TNative['onClick'], /** * Функция обратного вызова, которая будет вызываться при потере фокуса на переключателе. **/ readonly onBlur?: TNative['onBlur'], /** * Функция обратного вызова, которая будет вызываться при получении фокуса на переключателе. **/ readonly onFocus?: TNative['onFocus'], /** * Указывает, должен ли компонент получать фокус при монтировании (отрисовке) на странице. **/ readonly autoFocus?: TNative['autoFocus'], /** * Уникальный идентификатор переключателя. **/ readonly id?: TNative['id'], /** * Порядковый номер элемента при переключении по `Tab`. **/ readonly tabIndex?: TNative['tabIndex'], /** * Определяет, будет ли компонент отключен. **/ readonly disabled?: TNative['disabled'] } export const Radio = forwardRef(({ tabIndex = 0, ...props }, ref) => { const cn = useClassnames(style, props.className); const elDescription = useMemo(() => { if(props.description) { return ( ); } }, [props.description]); return ( ); });