@yandex/ui
Version:
Yandex UI components
152 lines (112 loc) • 24.1 kB
Markdown
# Checkbox
<a href='https://github.yandex-team.ru/search-interfaces/frontend/tree/master/packages/lego-components/src/Checkbox' target='_blank'><img src='https://badger.yandex-team.ru/custom/[Исходники]/[Github
][green]/badge.svg' /></a> <a href='https://search.yandex-team.ru/stsearch?text=Checkbox.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 })
```
Использование с нужным набором модификаторов:
```ts
// src/App.ts
import React, { useState } from 'react'
import { compose } from '@bem-react/core'
import {
Checkbox as CheckboxDesktop,
withSizeM,
withViewDefault,
} from '@yandex-lego/components/Checkbox/desktop'
// Композиция из различных модификаторов
const Checkbox = compose(withSizeM, withViewDefault)(CheckboxDesktop)
const App = () => {
const [checked, setChecked] = useState(false)
return (
<Checkbox
label="checkbox"
size="m"
view="default"
onChange={() => setChecked(!checked)}
checked={checked}
/>
)
}
```
Использование с полным набором модификаторов:
```ts
// src/App.ts
import React, { useState } from 'react'
import { Checkbox } from '@yandex-lego/components/Checkbox/desktop/bundle'
const App = () => {
const [checked, setChecked] = useState(false)
return (
<Checkbox
label="checkbox"
size="m"
view="default"
onChange={() => setChecked(!checked)}
checked={checked}
/>
)
}
```
## Примеры
### Вид чекбокса
Чтобы изменить вид чекбокса, установите свойство `view` в значение `dafault`.
{{%story::desktop:controls-checkbox-desktop--view%}}
### Стилевое оформление
Чтобы изменить стилевое оформление чекбокса, установите свойство `theme` в одно из указанных ниже значений.
- `normal` — стандартная тема, используется в большинстве случаев.
- `pseudo` — прозрачная тема, используется, чтобы сделать переключатель менее заметным на странице.
{{%story::desktop:controls-checkbox-desktop--theme%}}
### Размер
Чтобы изменить размер чекбокса, установите свойство `size` в одно из следующих значений: `"m"`, `"s"`.
{{%story::desktop:controls-checkbox-desktop--size%}}
### Однострочные и многострочные подписи
Чтобы задать тип подписи чекбоксу, установите свойство `lines` в одно из указанных ниже значений.
- `one` — однострочная подпись. Обрезается многоточием, если ее длина превышает длину родительского элемента.
- `multi` — многострочная подпись.
{{%story::desktop:controls-checkbox-desktop--lines%}}
### Переходное состояние
Чтобы задать переходное состояние чекбоксу, установите свойство `indeterminate` в значение `true`.
{{%story::desktop:controls-checkbox-desktop--indeterminate%}}
## Свойства
<!-- props:start -->
| Свойство | Тип | Описание |
| -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| onBlur? | `(event: FocusEvent<HTMLElement>) => void` | Событие, которое вызывается при потере фокуса компонентом, например при клике на другом месте экрана |
| onClick? | `(event: MouseEvent<HTMLElement, MouseEvent>) => void` | Событие, которое вызывается при нажатии на компонент |
| onFocus? | `(event: FocusEvent<HTMLElement>) => void` | Событие, которое возникает при получении компонентом фокуса |
| onMouseDown? | `(event: MouseEvent<HTMLElement, MouseEvent>) => void` | Событие по своему действию похоже на `onClick` и возникает в момент нажатия кнопки мыши; `onClick` в каком-то смысле является комбинацией событий `onMouseDown` и `onMouseUp` |
| onMouseUp? | `(event: MouseEvent<HTMLElement, MouseEvent>) => void` | Событие по своему действию противоположно событию `onMouseDown` и происходит при отпускании кнопки мыши; курсор должен находится в пределах HTML-элемента, к которому добавлен атрибут `onmouseup` |
| onMouseLeave? | `(event: MouseEvent<HTMLElement, MouseEvent>) => void` | Обработчик события `onMouseLeave` |
| onMouseEnter? | `(event: MouseEvent<HTMLElement, MouseEvent>) => void` | Обработчик события `onMouseEnter` |
| focused? | `false \| true` | Состояние фокуса на компоненте |
| disabled? | `false \| true` | Неактивное состояние компонента: состояние, при котором компонент отображается, но недоступен для действий пользователя |
| pressed? | `false \| true` | Состояние нажатия на компоненте |
| hovered? | `false \| true` | Состояние, которое возникает при наведении на компонент курсором |
| innerRef? | `(instance: HTMLElement) => void \| RefObject<HTMLElement>` | Ссылка на корневой DOM-элемент компонента |
| label? | `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` | Текст подписи к чекбоксу |
| indeterminate? | `false \| true` | Визуально переводит чекбокс в неопределенное состояние. Не влияет на состояние, указанное в `checked`.<br>Может использоваться в дереве чекбоксов, чтобы показать состояние родительского чекбокса, когда хотя бы один вложенный чекбокс отмечен, но не все.<br>Если свойство задано родительскому чекбоксу, то в `aria-controls` нужно добавить `id` всех вложенных чекбоксов. |
| checked? | `false \| true` | Состояние переключателя: включен или выключен |
| title? | `string` | Всплывающая подсказка |
| autoFocus? | `false \| true` | Устанавливает фокус в компонент при монтировании |
| controlRef? | `(instance: T) => void \| RefObject<T>` | Ссылка на DOM-ноду нативного контрола |
| className? | `string` | Дополнительный класс |
| onChange? | `(event: ChangeEvent<HTMLInputElement>) => void` | Обработчик изменения значения |
| name? | `string` | Имя компонента |
| id? | `string` | Уникальный id компонента |
| onKeyUp? | `(event: KeyboardEvent<HTMLInputElement>) => void` | Обработчик события `onKeyUp` |
| onKeyDown? | `(event: KeyboardEvent<HTMLInputElement>) => void` | Обработчик события `onKeyDown` |
| tabIndex? | `number` | Целое число, определяющее, должен ли переключатель участвовать в последовательной навигации по всей странице с помощью клавиатуры |
| required? | `false \| true` | Устанавливает в компоненте обязательное состояние |
<!-- props:end -->
## a11y
Чтобы обеспечить доступность, при использовании свойства `indeterminate` необходимо добавить в свойство `aria-controls` все `id` дочерних элементов.
## Смотрите также
- <a href='https://www.w3.org/TR/wai-aria-practices/#checkbox' target='_blank'>WAI-ARIA Authoring Practices</a>