@sberbusiness/triplex-next-mcp-server 1.48.0-beta → 1.50.0-beta
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.
- package/bundle/components/Amount.md +2 -1
- package/bundle/components/Badge.md +2 -1
- package/bundle/components/BodyPage.md +2 -1
- package/bundle/components/Button.md +5 -1
- package/bundle/components/ButtonDropdownExtended.md +3 -1
- package/bundle/components/ButtonIcon.md +3 -1
- package/bundle/components/Calendar.md +3 -1
- package/bundle/components/CardAction.md +1 -0
- package/bundle/components/CheckboxXGroup.md +2 -1
- package/bundle/components/Chip.md +2 -1
- package/bundle/components/ChipMonthYearPicker.md +2 -1
- package/bundle/components/ChipMultiselect.md +4 -1
- package/bundle/components/ChipOptions.md +2 -1
- package/bundle/components/ChipSort.md +4 -1
- package/bundle/components/CollapsibleTree.md +2 -1
- package/bundle/components/ComposedKeyDownListener.md +4 -3
- package/bundle/components/DateField.md +7 -1
- package/bundle/components/Divider.md +85 -138
- package/bundle/components/DocumentNumberEdit.md +173 -214
- package/bundle/components/Dropdown.md +11 -1
- package/bundle/components/Ellipsis.md +131 -147
- package/bundle/components/FooterPage.md +3 -1
- package/bundle/components/FormField.md +2 -1
- package/bundle/components/Gap.md +1 -1
- package/bundle/components/Header.md +1 -0
- package/bundle/components/HeaderPage.md +3 -1
- package/bundle/components/HelpBox.md +2 -1
- package/bundle/components/IconWrapper.md +10 -6
- package/bundle/components/ImageGallery.md +2 -1
- package/bundle/components/ImageGalleryExtended.md +2 -1
- package/bundle/components/IslandAccordion.md +6 -1
- package/bundle/components/KeyDownListener.md +3 -2
- package/bundle/components/LightBox.md +7 -1
- package/bundle/components/List.md +2 -1
- package/bundle/components/ListActionItem.md +2 -1
- package/bundle/components/ListItem.md +3 -1
- package/bundle/components/ListItemControlsButton.md +2 -1
- package/bundle/components/ListItemSelectable.md +2 -1
- package/bundle/components/ListMasterFooter.md +2 -1
- package/bundle/components/ListMasterHeader.md +2 -1
- package/bundle/components/ListSortable.md +2 -1
- package/bundle/components/ListSortableItem.md +2 -1
- package/bundle/components/ListTableItem.md +4 -1
- package/bundle/components/LoaderMiddle.md +5 -1
- package/bundle/components/LoaderScreen.md +7 -1
- package/bundle/components/LoaderSmall.md +10 -4
- package/bundle/components/MaskedField.md +3 -1
- package/bundle/components/MediaWidth.md +2 -1
- package/bundle/components/MobileView.md +2 -1
- package/bundle/components/ModalWindow.md +4 -1
- package/bundle/components/MonthYearField.md +4 -1
- package/bundle/components/Notification.md +1 -0
- package/bundle/components/Overlay.md +7 -2
- package/bundle/components/Pagination.md +1 -7
- package/bundle/components/Radio.md +238 -115
- package/bundle/components/RadioXGroup.md +259 -0
- package/bundle/components/RadioYGroup.md +266 -0
- package/bundle/components/SegmentedControl.md +505 -158
- package/bundle/components/SelectExtendedField.md +2 -1
- package/bundle/components/SelectField.md +4 -1
- package/bundle/components/Skeleton.md +140 -69
- package/bundle/components/Spoiler.md +245 -63
- package/bundle/components/Step.md +257 -68
- package/bundle/components/SuggestField.md +30 -18
- package/bundle/components/Tabs.md +2 -1
- package/bundle/components/TabsLine.md +2 -1
- package/bundle/components/TextField.md +8 -4
- package/bundle/components/TextareaField.md +2 -1
- package/bundle/components/ThemeProvider.md +2 -1
- package/bundle/components/Tooltip.md +6 -3
- package/bundle/guides/context.md +4 -1
- package/bundle/manifest.json +32 -10
- package/bundle/release-notes/1.49.0.mdx +78 -0
- package/bundle/release-notes/1.50.0.mdx +35 -0
- package/bundle/release-notes/1.51.0.mdx +7 -0
- package/bundle/tokens.json +161 -11
- package/package.json +1 -1
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: Radio
|
|
3
|
-
category:
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
category: Inputs
|
|
4
|
+
related: [RadioXGroup, RadioYGroup, Text]
|
|
5
|
+
tokens:
|
|
6
|
+
- Radio.Background_Default
|
|
7
|
+
- Radio.BorderColor_Default
|
|
8
|
+
- Radio.Dot_Default
|
|
9
|
+
- Radio.Background_Checked_Default
|
|
10
|
+
- Radio.BorderColor_Checked_Default
|
|
11
|
+
- Radio.Background_Hover
|
|
12
|
+
- Radio.Background_Disabled
|
|
13
|
+
- Radio.BorderColor_Disabled
|
|
14
|
+
- Radio.Background_Checked_Disabled
|
|
15
|
+
- Radio.BorderColor_Checked_Disabled
|
|
16
|
+
- Radio.Dot_Disabled
|
|
17
|
+
- Radio.BorderColor_Focused
|
|
18
|
+
- Radio.Background_Checked_Hover
|
|
8
19
|
stories: stories/Radio/Radio.stories.tsx
|
|
9
20
|
version: "1.0"
|
|
10
21
|
---
|
|
@@ -13,162 +24,274 @@ version: "1.0"
|
|
|
13
24
|
|
|
14
25
|
## Назначение
|
|
15
26
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
27
|
+
Радио-кнопка с необязательной текстовой подписью в обёртке `<label>`. Выбор,
|
|
28
|
+
события и участие в форме обеспечивает нативный `<input type="radio">`;
|
|
29
|
+
компонент задаёт размеры и оформление выбранного, недоступного, наведённого
|
|
30
|
+
и сфокусированного состояния.
|
|
20
31
|
|
|
21
|
-
Используй когда:
|
|
22
|
-
|
|
23
|
-
аналог.
|
|
32
|
+
Используй когда: пользователь должен выбрать один вариант из нескольких.
|
|
33
|
+
Связывай варианты общим `name` и задавай каждому собственный `value`.
|
|
24
34
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
## Файловая структура
|
|
28
|
-
|
|
29
|
-
```text
|
|
30
|
-
src/components/Radio/
|
|
31
|
-
├── Radio.tsx # forwardRef<HTMLInputElement>; <label> + <input> + <span> + <Text>
|
|
32
|
-
├── RadioXGroup.tsx # FC; <div role="radiogroup"> + indent (12-32)
|
|
33
|
-
├── RadioYGroup.tsx # FC; <div role="radiogroup">
|
|
34
|
-
├── styles/Radio.module.less + RadioXGroup + RadioYGroup
|
|
35
|
-
├── index.ts # Barrel
|
|
36
|
-
└── __tests__/
|
|
37
|
-
```
|
|
35
|
+
Не используй когда: требуется независимый выбор нескольких значений — нужен
|
|
36
|
+
`Checkbox`; для длинного списка вариантов удобнее `SelectField`.
|
|
38
37
|
|
|
39
38
|
---
|
|
40
39
|
|
|
41
40
|
## Варианты и props
|
|
42
41
|
|
|
43
|
-
###
|
|
42
|
+
### Обязательные props
|
|
44
43
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
| `size` | `EComponentSize` | `MD` | Размер кнопки + связанный размер `Text`. |
|
|
48
|
-
| `labelAttributes?` | `LabelHTMLAttributes<HTMLLabelElement>` | — | Атрибуты на `<label>` (className мержится). |
|
|
49
|
-
| `children?` | `ReactNode` | — | Текст-описание справа от радио. Если пуст — текст не рендерится, label получает класс без `nonempty`. |
|
|
50
|
-
| `disabled?` | `boolean` | — | Прокидывается в `<input>` + добавляет класс `disabled` на label. |
|
|
51
|
-
| `...inputAttributes` | `InputHTMLAttributes<HTMLInputElement>` | — | Все остальные `<input>`-атрибуты (`name`, `value`, `checked`, `onChange`, ...). |
|
|
44
|
+
Обязательных custom-props нет. Для доступного имени передавай видимую подпись
|
|
45
|
+
через `children` либо `aria-label` / `aria-labelledby` для самого input.
|
|
52
46
|
|
|
53
|
-
|
|
54
|
-
- **`size` исключён из `InputHTMLAttributes`** — наш собственный enum, не нативный.
|
|
55
|
-
- ForwardRef → `<input>`.
|
|
47
|
+
### Опциональные props
|
|
56
48
|
|
|
57
|
-
|
|
49
|
+
| Prop | По умолчанию | Описание |
|
|
50
|
+
|---|---|---|
|
|
51
|
+
| `size` | `EComponentSize.MD` | `SM` / `MD` / `LG`; диаметр индикатора 16 / 24 / 28px, текст `B4` / `B3` / `B2` соответственно |
|
|
52
|
+
| `children` | — | Содержимое подписи, отображаемое через `Text` с `tag="div"` |
|
|
53
|
+
| `labelAttributes` | — | HTML-атрибуты корневого `<label>`; его `className` объединяется с внутренними классами label |
|
|
54
|
+
| `className` | — | Дополнительный класс внутреннего `<input>`, а не корневого label |
|
|
55
|
+
| `checked` | — | Управляемый выбор; обновляй его в ответ на `onChange` либо передавай `readOnly` для фиксированного состояния |
|
|
56
|
+
| `defaultChecked` | — | Начальный выбор в неуправляемом режиме |
|
|
57
|
+
| `disabled` | `false` | Нативно блокирует выбор, исключает из Tab-навигации и меняет оформление; выбранность сохраняется |
|
|
58
|
+
| `name`, `value` | — | Общий `name` связывает варианты в нативную группу, `value` определяет значение в событии и форме |
|
|
59
|
+
| `onChange` | — | Нативный React change-event; выбранный вариант доступен через `event.target.value` и `event.target.checked` |
|
|
60
|
+
| Остальные input-атрибуты | — | `id`, `required`, `aria-*`, обработчики и другие стандартные атрибуты уходят на input; `type` и HTML `size` исключены из API |
|
|
61
|
+
|
|
62
|
+
### Ограничения использования
|
|
63
|
+
|
|
64
|
+
- Собственного состояния выбора нет. Не смешивай `checked` и `defaultChecked`.
|
|
65
|
+
Повторное нажатие на выбранный вариант не снимает выбор и не вызывает новый
|
|
66
|
+
`onChange`.
|
|
67
|
+
- `RadioXGroup` и `RadioYGroup` задают компоновку и роль группы, но не управляют
|
|
68
|
+
выбором. Даже внутри них общий `name` необходимо передать самим Radio.
|
|
69
|
+
- Класс `nonempty` и обёртка `Text` зависят от truthiness `children`. Без подписи
|
|
70
|
+
дополнительный отступ не применяется. Существующая особенность: числовой `0`
|
|
71
|
+
выводится React как текст без `Text` и класса `nonempty`; для числовой подписи
|
|
72
|
+
передавай строку (`String(value)`).
|
|
73
|
+
- Темизация задаётся через `ThemeProvider`, отдельного prop `theme` у Radio нет.
|
|
58
74
|
|
|
59
|
-
|
|
60
|
-
|---|---|
|
|
61
|
-
| `LG` | `B2` |
|
|
62
|
-
| `MD` | `B3` |
|
|
63
|
-
| `SM` | `B4` |
|
|
75
|
+
---
|
|
64
76
|
|
|
65
|
-
|
|
77
|
+
## Дизайн-токены
|
|
66
78
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
| `...HTMLAttributes` | — | — | На `<div>`. `role="radiogroup"`. |
|
|
79
|
+
Переопределяются через `ThemeProvider` (prop `tokens`) — см.
|
|
80
|
+
`src/components/ThemeProvider/ThemeProvider-ai.md` → «Как переопределять токены».
|
|
81
|
+
Значения по умолчанию — `src/components/DesignTokens/components/Radio.ts`.
|
|
71
82
|
|
|
72
|
-
|
|
83
|
+
```text
|
|
84
|
+
Radio.Background_Default
|
|
85
|
+
Radio.BorderColor_Default
|
|
86
|
+
Radio.Dot_Default
|
|
87
|
+
Radio.Background_Checked_Default
|
|
88
|
+
Radio.BorderColor_Checked_Default
|
|
89
|
+
Radio.Background_Hover
|
|
90
|
+
Radio.Background_Disabled
|
|
91
|
+
Radio.BorderColor_Disabled
|
|
92
|
+
Radio.Background_Checked_Disabled
|
|
93
|
+
Radio.BorderColor_Checked_Disabled
|
|
94
|
+
Radio.Dot_Disabled
|
|
95
|
+
Radio.BorderColor_Focused
|
|
96
|
+
Radio.Background_Checked_Hover
|
|
97
|
+
```
|
|
73
98
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
99
|
+
Несмотря на имя `BorderColor`, соответствующие токены содержат готовое значение
|
|
100
|
+
`box-shadow`, а не отдельный цвет. `BorderColor_Focused` оформляет клавиатурный
|
|
101
|
+
фокус через `:focus-visible`.
|
|
77
102
|
|
|
78
103
|
---
|
|
79
104
|
|
|
80
|
-
##
|
|
81
|
-
|
|
82
|
-
### Native `<input>` + кастомный `<span>` (visually-hidden pattern)
|
|
105
|
+
## Инварианты
|
|
83
106
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
107
|
+
- Сохраняй `forwardRef<HTMLInputElement>` и `displayName = "Radio"`.
|
|
108
|
+
Ref указывает на input, корневой DOM-элемент остаётся label.
|
|
109
|
+
- DOM-порядок `label` → `input` + соседний `span.radioIcon` + необязательный
|
|
110
|
+
`Text` важен: выбранность, недоступность и фокус индикатора стилизуются
|
|
111
|
+
соседними CSS-селекторами.
|
|
112
|
+
- `className` относится к input, `labelAttributes.className` — к label.
|
|
113
|
+
Не меняй распределение атрибутов между ними.
|
|
114
|
+
- Сохраняй публичные `IRadioProps`, значения `EComponentSize`, barrel-экспорты
|
|
115
|
+
и существующие имена классов / дизайн-токенов.
|
|
116
|
+
- Классы размеров стоят на input и label. Не удаляй их при рефакторинге:
|
|
117
|
+
вложенные элементы и подпись зависят от размера.
|
|
118
|
+
- Сохраняй нативную семантику `name`, `checked`, `defaultChecked`, `disabled`
|
|
119
|
+
и событий; дополнительных обработчиков клавиатуры в компоненте нет.
|
|
91
120
|
|
|
92
|
-
|
|
93
|
-
- `<span class="radioIcon">` — визуальная рамка/точка, реагирует на состояния `:checked`, `:disabled`, `:focus-visible` через CSS-селекторы вида `input:checked + .radioIcon`.
|
|
121
|
+
---
|
|
94
122
|
|
|
95
|
-
|
|
123
|
+
## Accessibility
|
|
96
124
|
|
|
97
|
-
-
|
|
98
|
-
|
|
99
|
-
-
|
|
125
|
+
- Роль `radio` и состояние выбранности обеспечивает нативный input. Вложенный
|
|
126
|
+
label связывает видимую подпись с input и делает её кликабельной.
|
|
127
|
+
- Без видимой подписи передавай `aria-label` либо корректную ссылку
|
|
128
|
+
`aria-labelledby` на input; атрибуты label его доступное имя не заменяют.
|
|
129
|
+
- Tab, Space и навигацию внутри нативной группы обеспечивает браузер.
|
|
130
|
+
Фокус индикатора показывается через `:focus-visible`.
|
|
131
|
+
- Для названия группы используй `fieldset` с `legend` либо именованный
|
|
132
|
+
контейнер `role="radiogroup"`. Групповая роль сама по себе не заменяет
|
|
133
|
+
общий `name` у Radio.
|
|
134
|
+
- `disabled` применяется к самому input. Компонент не хардкодит текст
|
|
135
|
+
`aria-label` / `title`: локализацию задаёт потребитель.
|
|
100
136
|
|
|
101
|
-
|
|
137
|
+
---
|
|
102
138
|
|
|
103
|
-
|
|
104
|
-
labelAttributes?.className → clsx(..., labelAttributes?.className)
|
|
105
|
-
```
|
|
139
|
+
## Связанные компоненты
|
|
106
140
|
|
|
107
|
-
-
|
|
141
|
+
- `RadioXGroup` — горизонтальная компоновка Radio с настраиваемым отступом
|
|
142
|
+
и ролью `radiogroup`; см. `RadioXGroup-ai.md`.
|
|
143
|
+
- `RadioYGroup` — вертикальная компоновка Radio с ролью `radiogroup`;
|
|
144
|
+
см. `RadioYGroup-ai.md`.
|
|
145
|
+
- `Text` — рендерится внутри Radio для подписи. Его размер зависит от `size`
|
|
146
|
+
Radio: `SM` → `B4`, `MD` → `B3`, `LG` → `B2`.
|
|
108
147
|
|
|
109
|
-
|
|
148
|
+
---
|
|
110
149
|
|
|
111
|
-
|
|
112
|
-
- Это отличается от ряда библиотек (`MUI.RadioGroup` управляет состоянием) — здесь группа только семантическая + layout.
|
|
150
|
+
## Stories
|
|
113
151
|
|
|
114
|
-
|
|
152
|
+
Основные истории: `stories/Radio/Radio.stories.tsx`
|
|
153
|
+
Файлы примеров: `stories/Radio/examples/`
|
|
115
154
|
|
|
116
|
-
|
|
117
|
-
|
|
155
|
+
| Story | Example file | Что демонстрирует |
|
|
156
|
+
|---|---|---|
|
|
157
|
+
| `Playground` | `Playground.tsx` | Controls для подписи, размера, выбранности и disabled; выбор синхронизируется с Controls |
|
|
158
|
+
| `Default` | `Default.tsx` | Минимальная радио-кнопка с размером MD |
|
|
159
|
+
| `Sizes` | `Sizes.tsx` | Подписанные размеры SM / MD / LG |
|
|
160
|
+
| `States` | `States.tsx` | Controlled-выбор через `checked` и `onChange` с общим `name`; выбранный и невыбранный disabled-варианты |
|
|
161
|
+
| `WithoutLabel` | `WithoutLabel.tsx` | Все размеры и комбинации checked / disabled без видимой подписи, с aria-label |
|
|
162
|
+
| `VisualTests` | `VisualTests.tsx` | Клавиатурный фокус через play, hover невыбранного варианта, checked / disabled всех размеров и длинная подпись |
|
|
163
|
+
| `VisualTestsCheckedHover` | — | Тот же renderer, hover выбранного варианта |
|
|
164
|
+
|
|
165
|
+
Примеры компоновки Radio в группах — в stories `RadioXGroup` и `RadioYGroup`.
|
|
166
|
+
|
|
167
|
+
Visual-истории скрыты из autodocs и sidebar тегами `!autodocs` / `!dev`, но снимаются
|
|
168
|
+
test-runner'ом на viewport xs / xl. Из скриншот-тестов исключены Playground
|
|
169
|
+
(интерактивный) и Default (MD покрыт `Sizes`).
|
|
170
|
+
|
|
171
|
+
Для hover задан opt-in параметр `testRunner.hoverSelector`: synthetic
|
|
172
|
+
`userEvent.hover` из play не включает CSS `:hover`, поэтому test-runner
|
|
173
|
+
перемещает реальный указатель после каждого remount. Указатель в одном снимке
|
|
174
|
+
может стоять только над одним элементом, поэтому hover выбранного варианта
|
|
175
|
+
вынесен в `VisualTestsCheckedHover`. Baseline-файлы генерируются только
|
|
176
|
+
CI / Docker; локальные macOS-скриншоты не публикуются.
|
|
118
177
|
|
|
119
178
|
---
|
|
120
179
|
|
|
121
|
-
##
|
|
180
|
+
## История изменений
|
|
122
181
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
-
|
|
126
|
-
- **Текст всегда `<Text tag="div" size>` с маппингом** SM→B4 / MD→B3 / LG→B2.
|
|
127
|
-
- **`labelAttributes` — единственный канал** для прокидывания `<label>`-атрибутов (`for`, `id`, `className`).
|
|
128
|
-
- **`RadioXGroup`/`RadioYGroup`** — layout + `role="radiogroup"`. Не управляют состоянием.
|
|
129
|
-
- **`RadioXGroup.indent` default `12`**, набор фиксирован `TIndentSize`.
|
|
130
|
-
- **ForwardRef → `<input>`** на Radio. Не на label/wrapper.
|
|
131
|
-
- **`RadioXGroup` / `RadioYGroup` — `FC`, не forwardRef**.
|
|
132
|
-
- **`data-tx`** — на `<label>`.
|
|
182
|
+
| Дата | Изменение |
|
|
183
|
+
|---|---|
|
|
184
|
+
| 2026-10-07 | Создан документ. Проведён AI-рефакторинг Radio, уточнён JSDoc, расширены тесты публичных контрактов; stories переведены на modern pattern (Default, Sizes, States, WithoutLabel) с визуальным покрытием размеров, checked / disabled, пустой и длинной подписи, клавиатурного фокуса и настоящего hover. |
|
|
133
185
|
|
|
134
186
|
---
|
|
135
187
|
|
|
136
|
-
##
|
|
188
|
+
## Примеры использования
|
|
137
189
|
|
|
138
|
-
|
|
139
|
-
- **`<label>` оборачивает input** — клик по тексту/иконке тоже выбирает radio.
|
|
140
|
-
- `role="radiogroup"` на контейнере группы — корректная семантика для AT. Но **`aria-labelledby`** / `aria-label` группы нужно передавать через `...rest`.
|
|
141
|
-
- **`name`** — потребитель должен передавать одинаковый name на все радио в группе (иначе нативная группировка/стрелки не работают).
|
|
142
|
-
- `disabled` — корректно через `<input disabled>` (focus-skip, SR озвучивает).
|
|
143
|
-
- `:focus-visible` стили — через CSS-класс на `<span class="radioIcon">` (стандартный паттерн).
|
|
190
|
+
### Default
|
|
144
191
|
|
|
145
|
-
|
|
192
|
+
`stories/Radio/examples/Default.tsx`
|
|
146
193
|
|
|
147
|
-
|
|
194
|
+
```tsx
|
|
195
|
+
import React from "react";
|
|
196
|
+
import { Radio } from "@sberbusiness/triplex-next";
|
|
197
|
+
|
|
198
|
+
export const Default = () => <Radio>Radio text</Radio>;
|
|
199
|
+
```
|
|
148
200
|
|
|
149
|
-
|
|
201
|
+
### Sizes
|
|
150
202
|
|
|
151
|
-
|
|
203
|
+
`stories/Radio/examples/Sizes.tsx`
|
|
152
204
|
|
|
153
|
-
|
|
205
|
+
```tsx
|
|
206
|
+
import React from "react";
|
|
207
|
+
import { Radio, EComponentSize } from "@sberbusiness/triplex-next";
|
|
208
|
+
|
|
209
|
+
const SIZES = [EComponentSize.SM, EComponentSize.MD, EComponentSize.LG];
|
|
210
|
+
|
|
211
|
+
export const Sizes = () => (
|
|
212
|
+
<div style={{ display: "flex", flexDirection: "column", gap: 16 }}>
|
|
213
|
+
{SIZES.map((size) => (
|
|
214
|
+
<div key={size}>
|
|
215
|
+
<div style={{ marginBottom: 8, fontSize: 16, fontWeight: 700 }}>{size.toUpperCase()}</div>
|
|
216
|
+
<Radio size={size}>Radio text</Radio>
|
|
217
|
+
</div>
|
|
218
|
+
))}
|
|
219
|
+
</div>
|
|
220
|
+
);
|
|
221
|
+
```
|
|
154
222
|
|
|
155
|
-
|
|
156
|
-
- `Text` (Typography) — описание.
|
|
157
|
-
- `RadioXGroup` / `RadioYGroup` — layout-группы.
|
|
158
|
-
- `EComponentSize`, `ETextSize`.
|
|
159
|
-
- `TIndentSize` (`consts/IndentConst`).
|
|
223
|
+
### States
|
|
160
224
|
|
|
161
|
-
|
|
225
|
+
`stories/Radio/examples/States.tsx`
|
|
162
226
|
|
|
163
|
-
|
|
227
|
+
```tsx
|
|
228
|
+
import React from "react";
|
|
229
|
+
import { Radio } from "@sberbusiness/triplex-next";
|
|
230
|
+
|
|
231
|
+
export const States = () => {
|
|
232
|
+
const name = React.useId();
|
|
233
|
+
const [value, setValue] = React.useState("second");
|
|
234
|
+
|
|
235
|
+
const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => setValue(event.target.value);
|
|
236
|
+
|
|
237
|
+
return (
|
|
238
|
+
<div style={{ display: "flex", flexDirection: "column", gap: 24 }}>
|
|
239
|
+
<div>
|
|
240
|
+
<div style={{ marginBottom: 8, fontSize: 16, fontWeight: 700 }}>Selected</div>
|
|
241
|
+
<div style={{ display: "flex", gap: 24, flexWrap: "wrap" }}>
|
|
242
|
+
<Radio name={`${name}-selected`} value="first" checked={value === "first"} onChange={handleChange}>
|
|
243
|
+
Radio text
|
|
244
|
+
</Radio>
|
|
245
|
+
<Radio
|
|
246
|
+
name={`${name}-selected`}
|
|
247
|
+
value="second"
|
|
248
|
+
checked={value === "second"}
|
|
249
|
+
onChange={handleChange}
|
|
250
|
+
>
|
|
251
|
+
Radio text
|
|
252
|
+
</Radio>
|
|
253
|
+
</div>
|
|
254
|
+
</div>
|
|
255
|
+
<div>
|
|
256
|
+
<div style={{ marginBottom: 8, fontSize: 16, fontWeight: 700 }}>Disabled</div>
|
|
257
|
+
<div style={{ display: "flex", gap: 24, flexWrap: "wrap" }}>
|
|
258
|
+
<Radio name={`${name}-disabled`} value="checked" disabled defaultChecked>
|
|
259
|
+
Radio text
|
|
260
|
+
</Radio>
|
|
261
|
+
<Radio name={`${name}-disabled`} value="unchecked" disabled>
|
|
262
|
+
Radio text
|
|
263
|
+
</Radio>
|
|
264
|
+
</div>
|
|
265
|
+
</div>
|
|
266
|
+
</div>
|
|
267
|
+
);
|
|
268
|
+
};
|
|
269
|
+
```
|
|
164
270
|
|
|
165
|
-
|
|
166
|
-
Примеры: `stories/Radio/examples/`
|
|
271
|
+
### WithoutLabel
|
|
167
272
|
|
|
168
|
-
|
|
273
|
+
`stories/Radio/examples/WithoutLabel.tsx`
|
|
169
274
|
|
|
170
|
-
|
|
275
|
+
```tsx
|
|
276
|
+
import React from "react";
|
|
277
|
+
import { Radio, EComponentSize } from "@sberbusiness/triplex-next";
|
|
278
|
+
|
|
279
|
+
const SIZES = [EComponentSize.SM, EComponentSize.MD, EComponentSize.LG];
|
|
280
|
+
|
|
281
|
+
export const WithoutLabel = () => (
|
|
282
|
+
<div style={{ display: "flex", flexDirection: "column", gap: 16 }}>
|
|
283
|
+
{SIZES.map((size) => (
|
|
284
|
+
<div key={size}>
|
|
285
|
+
<div style={{ marginBottom: 8, fontSize: 16, fontWeight: 700 }}>{size.toUpperCase()}</div>
|
|
286
|
+
<div style={{ display: "flex", gap: 24, alignItems: "center", flexWrap: "wrap" }}>
|
|
287
|
+
<Radio size={size} aria-label={`Не выбран, ${size}`} />
|
|
288
|
+
<Radio size={size} defaultChecked aria-label={`Выбран, ${size}`} />
|
|
289
|
+
<Radio size={size} disabled aria-label={`Не выбран, недоступен, ${size}`} />
|
|
290
|
+
<Radio size={size} defaultChecked disabled aria-label={`Выбран, недоступен, ${size}`} />
|
|
291
|
+
</div>
|
|
292
|
+
</div>
|
|
293
|
+
))}
|
|
294
|
+
</div>
|
|
295
|
+
);
|
|
296
|
+
```
|
|
171
297
|
|
|
172
|
-
| Дата | Изменение |
|
|
173
|
-
|---|---|
|
|
174
|
-
| 2026-04-18 | Создан документ |
|