@yandex/ui
Version:
Yandex UI components
138 lines (107 loc) • 10 kB
Markdown
# Radiobox
<a href='https://github.yandex-team.ru/search-interfaces/frontend/tree/master/packages/lego-components/src/Radiobox' target='_blank'><img src='https://badger.yandex-team.ru/custom/[Исходники]/[Github
][green]/badge.svg' /></a> <a href='https://search.yandex-team.ru/stsearch?text=Radiobox.ts&facet.queue=ISL&facet.type=bug&facet.status=128' target='_blank'><img src='https://badger.yandex-team.ru/custom/[Известные проблемы]/[Startrek][blue]/badge.svg' /></a>
<!-- description:start -->
Компонент для создания радиопереключателя.
<!-- description:end -->
## Пример использования
Конфигурация темы на уровне проекта:
```ts
// src/lib/theme.ts
import { configureRootTheme } from '@yandex-lego/components/Theme'
import { theme } from '@yandex-lego/components/Theme/presets/default'
configureRootTheme({ theme })
```
Использование компонента с `options`:
```ts
// src/App.ts
import React, { useState } from 'react'
import { compose } from '@bem-react/core'
import {
Radiobox as RadioboxDesktop,
withSizeM,
withViewDefault,
} from '@yandex-lego/components/Radiobox/desktop'
const Radiobox = compose(
withSizeM,
withViewDefault,
)(RadioboxDesktop)
const App = () => {
const [value, setValue] = useState('value1')
return (
<Radiobox
size="m"
view="default"
value={value}
options={[
{ label: 'Радио 1', value: 'value1' },
{ label: 'Радио 2', value: 'value2' },
{ label: 'Радио 3', value: 'value3' },
]}
onChange={(event) => setValue(event.target.value)}
/>
)
}
```
Использование компонента с элементом `Radio` вместо `options`:
```ts
// src/App.ts
import React, { useState } from 'react'
import {
Radiobox,
Radio,
} from '@yandex-lego/components/Radiobox/desktop/bundle'
const App = () => {
const [value, setValue] = useState('value1')
return (
<Radiobox
size="m"
view="default"
value={value}
onChange={(event) => setValue(event.target.value)}
>
<Radio value="value1">Радио 1</Radio>
<Radio value="value2">Радио 2</Radio>
<Radio value="value3">Радио 3</Radio>
</Radiobox>
)
}
```
## Примеры
### Вид радиопереключателя
Для различного оформления радиопереключателей установите свойство `view` в значение `"default"`.
{{%story::desktop:controls-radiobox-desktop--view%}}
### Стилевое оформление
Чтобы изменить стилевое оформление радиопереключателей, установите свойство `theme` в одно из следующих значений: `"normal"`, `"pseudo"`.
{{%story::desktop:controls-radiobox-desktop--theme%}}
### Размер радиопереключателя
Чтобы изменить размер радиопереключателя, установите свойство `size` в одно из следующих значений: `"m"`, `"s"`.
{{%story::desktop:controls-radiobox-desktop--size%}}
## Свойства
### Radiobox
<!-- props:start -->
| Свойство | Тип | По умолчанию | Описание |
| ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------------------------- |
| options? | `RadioOptionProps[]` | `[]` | Набор переключателей; можно использовать вместо `children` |
| innerRef? | `(instance: HTMLSpanElement) => void \| RefObject<HTMLSpanElement>` | — | Ссылка на корневой DOM-элемент компонента |
| disabled? | `false \| true` | — | Неактивное состояние всей группы переключателей |
| children? | `string \| number \| false \| true \| {} \| ReactElement<any, string \| ((props: any) => ReactElement<any, string \| ... \| (new (props: any) => Component<any, any, any>)>) \| (new (props: any) => Component<any, any, any>)> \| ReactNodeArray \| ReactPortal` | — | Набор переключателей c использованием элемента `Radio`; можно использовать вместо `options` |
| className? | `string` | — | Дополнительный класс у корневого DOM-элемента |
| value? | `string` | — | Текущее выбранное значение в группе |
| name? | `string` | — | Имя для всех элементов `Radio` |
| onChange? | `(event: ChangeEvent<HTMLInputElement>) => void` | — | Колбэк, который срабатывает при изменении значения |
<!-- props:end -->
### Radio
| Свойство | Тип | По умолчанию | Описание |
| ----------- | --------------------------------------------------------------------- | ------------ | --------------------------------------------------- |
| className? | `string` | — | Дополнительный класс у корневого DOM-элемента |
| children | `ReactNode` | — | Текст подписи к переключателю |
| name? | `string` | — | Имя переключателя |
| disabled? | `false \| true` | — | Неактивное состояние переключателя |
| value | `string` | — | Значение переключателя |
| innerRef? | `(instance: HTMLLabelElement) => void \| RefObject<HTMLLabelElement>` | — | Ссылка на корневой DOM-элемент компонента |
| controlRef? | `(instance: HTMLInputElement) => void \| RefObject<HTMLInputElement>` | — | Ссылка на нативный DOM-элемент нативного инпута |
| checked? | `false \| true` | — | Состояние переключателя |
| onChange? | `(event: ChangeEvent<HTMLInputElement>) => void` | — | Колбэк, который срабатывает при изменении значения |
| onClick? | `(event: MouseEventHandler<HTMLLabelElement>) => void` | — | Колбэк, который срабатывает при клике на контейнер |
| autoFocus? | `false \| true` | — | Устанавливает фокус в переключатель при монтировании |