@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.
Files changed (77) hide show
  1. package/bundle/components/Amount.md +2 -1
  2. package/bundle/components/Badge.md +2 -1
  3. package/bundle/components/BodyPage.md +2 -1
  4. package/bundle/components/Button.md +5 -1
  5. package/bundle/components/ButtonDropdownExtended.md +3 -1
  6. package/bundle/components/ButtonIcon.md +3 -1
  7. package/bundle/components/Calendar.md +3 -1
  8. package/bundle/components/CardAction.md +1 -0
  9. package/bundle/components/CheckboxXGroup.md +2 -1
  10. package/bundle/components/Chip.md +2 -1
  11. package/bundle/components/ChipMonthYearPicker.md +2 -1
  12. package/bundle/components/ChipMultiselect.md +4 -1
  13. package/bundle/components/ChipOptions.md +2 -1
  14. package/bundle/components/ChipSort.md +4 -1
  15. package/bundle/components/CollapsibleTree.md +2 -1
  16. package/bundle/components/ComposedKeyDownListener.md +4 -3
  17. package/bundle/components/DateField.md +7 -1
  18. package/bundle/components/Divider.md +85 -138
  19. package/bundle/components/DocumentNumberEdit.md +173 -214
  20. package/bundle/components/Dropdown.md +11 -1
  21. package/bundle/components/Ellipsis.md +131 -147
  22. package/bundle/components/FooterPage.md +3 -1
  23. package/bundle/components/FormField.md +2 -1
  24. package/bundle/components/Gap.md +1 -1
  25. package/bundle/components/Header.md +1 -0
  26. package/bundle/components/HeaderPage.md +3 -1
  27. package/bundle/components/HelpBox.md +2 -1
  28. package/bundle/components/IconWrapper.md +10 -6
  29. package/bundle/components/ImageGallery.md +2 -1
  30. package/bundle/components/ImageGalleryExtended.md +2 -1
  31. package/bundle/components/IslandAccordion.md +6 -1
  32. package/bundle/components/KeyDownListener.md +3 -2
  33. package/bundle/components/LightBox.md +7 -1
  34. package/bundle/components/List.md +2 -1
  35. package/bundle/components/ListActionItem.md +2 -1
  36. package/bundle/components/ListItem.md +3 -1
  37. package/bundle/components/ListItemControlsButton.md +2 -1
  38. package/bundle/components/ListItemSelectable.md +2 -1
  39. package/bundle/components/ListMasterFooter.md +2 -1
  40. package/bundle/components/ListMasterHeader.md +2 -1
  41. package/bundle/components/ListSortable.md +2 -1
  42. package/bundle/components/ListSortableItem.md +2 -1
  43. package/bundle/components/ListTableItem.md +4 -1
  44. package/bundle/components/LoaderMiddle.md +5 -1
  45. package/bundle/components/LoaderScreen.md +7 -1
  46. package/bundle/components/LoaderSmall.md +10 -4
  47. package/bundle/components/MaskedField.md +3 -1
  48. package/bundle/components/MediaWidth.md +2 -1
  49. package/bundle/components/MobileView.md +2 -1
  50. package/bundle/components/ModalWindow.md +4 -1
  51. package/bundle/components/MonthYearField.md +4 -1
  52. package/bundle/components/Notification.md +1 -0
  53. package/bundle/components/Overlay.md +7 -2
  54. package/bundle/components/Pagination.md +1 -7
  55. package/bundle/components/Radio.md +238 -115
  56. package/bundle/components/RadioXGroup.md +259 -0
  57. package/bundle/components/RadioYGroup.md +266 -0
  58. package/bundle/components/SegmentedControl.md +505 -158
  59. package/bundle/components/SelectExtendedField.md +2 -1
  60. package/bundle/components/SelectField.md +4 -1
  61. package/bundle/components/Skeleton.md +140 -69
  62. package/bundle/components/Spoiler.md +245 -63
  63. package/bundle/components/Step.md +257 -68
  64. package/bundle/components/SuggestField.md +30 -18
  65. package/bundle/components/Tabs.md +2 -1
  66. package/bundle/components/TabsLine.md +2 -1
  67. package/bundle/components/TextField.md +8 -4
  68. package/bundle/components/TextareaField.md +2 -1
  69. package/bundle/components/ThemeProvider.md +2 -1
  70. package/bundle/components/Tooltip.md +6 -3
  71. package/bundle/guides/context.md +4 -1
  72. package/bundle/manifest.json +32 -10
  73. package/bundle/release-notes/1.49.0.mdx +78 -0
  74. package/bundle/release-notes/1.50.0.mdx +35 -0
  75. package/bundle/release-notes/1.51.0.mdx +7 -0
  76. package/bundle/tokens.json +161 -11
  77. package/package.json +1 -1
@@ -1,10 +1,21 @@
1
1
  ---
2
2
  component: Radio
3
- category: Form Controls
4
- figma-node: ""
5
- figma-file: ""
6
- related: [Checkbox, RadioYGroup, RadioXGroup, Typography, FormField]
7
- tokens: []
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
- Радио-кнопка: нативный `<input type="radio">` с visually-hidden default'ом
17
- + кастомная иконка (`<span>` со стилями) + опциональный текст-описание
18
- (через `Text`). Сгруппировать кнопки можно горизонтально (`RadioXGroup`)
19
- или вертикально (`RadioYGroup`) — оба контейнера дают `role="radiogroup"`.
27
+ Радио-кнопка с необязательной текстовой подписью в обёртке `<label>`. Выбор,
28
+ события и участие в форме обеспечивает нативный `<input type="radio">`;
29
+ компонент задаёт размеры и оформление выбранного, недоступного, наведённого
30
+ и сфокусированного состояния.
20
31
 
21
- Используй когда: выбор одного варианта из небольшого набора (если
22
- больше ~5 — `SelectField`). Для multi-choice — `Checkbox` + `RadioYGroup`-
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
- ### Radio — `IRadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "type" | "size">`
42
+ ### Обязательные props
44
43
 
45
- | Prop | Тип | Default | Описание |
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
- - **`type` исключён** — всегда `"radio"`.
54
- - **`size` исключён из `InputHTMLAttributes`** — наш собственный enum, не нативный.
55
- - ForwardRef → `<input>`.
47
+ ### Опциональные props
56
48
 
57
- ### Маппинг `size` → текст:
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
- | `size` | `Text size` |
60
- |---|---|
61
- | `LG` | `B2` |
62
- | `MD` | `B3` |
63
- | `SM` | `B4` |
75
+ ---
64
76
 
65
- ### RadioXGroup — `IRadioXGroupProps extends HTMLAttributes<HTMLDivElement>`
77
+ ## Дизайн-токены
66
78
 
67
- | Prop | Тип | Default | Описание |
68
- |---|---|---|---|
69
- | `indent` | `TIndentSize` (`12 \| 16 \| 20 \| 24 \| 28 \| 32`) | `12` | Горизонтальный gap (в `px`, через CSS-классы `indent-{N}`). |
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
- ### RadioYGroup — `IRadioYGroupProps extends HTMLAttributes<HTMLDivElement>`
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
- | Prop | Тип | Описание |
75
- |---|---|---|
76
- | `...HTMLAttributes` | — | На `<div>`. `role="radiogroup"`. Gap — фиксированный (см. CSS). |
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
- ```tsx
85
- <label>
86
- <input type="radio" className={styles.radio} ... />
87
- <span className={styles.radioIcon} />
88
- {children && <Text>{children}</Text>}
89
- </label>
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
- - `<input>` скрыт визуально (`appearance: none` / `opacity: 0` в стилях), но **остаётся в фокусной последовательности** и работает как нативный radio.
93
- - `<span class="radioIcon">` — визуальная рамка/точка, реагирует на состояния `:checked`, `:disabled`, `:focus-visible` через CSS-селекторы вида `input:checked + .radioIcon`.
121
+ ---
94
122
 
95
- ### Текст-описание — через `<Text size>`
123
+ ## Accessibility
96
124
 
97
- - Маппинг по `size`: SM→B4, MD→B3, LG→B2.
98
- - Если `children` пуст — `<Text>` не рендерится (избегаем лишнего span).
99
- - `nonempty` класс на label — позволяет CSS отличать "только иконка" от "иконка + текст" (например, для горизонтального gap'а).
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
- ### `labelAttributes` — мерж className
137
+ ---
102
138
 
103
- ```ts
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
- ### Группы — `role="radiogroup"`, **без `value`**
148
+ ---
110
149
 
111
- - `RadioXGroup` / `RadioYGroup` — **тонкие layout-обёртки**. Не управляют выбранным значением, не вешают `name` на дочерние radio. Контракт name/value/onChange — на потребителе.
112
- - Это отличается от ряда библиотек (`MUI.RadioGroup` управляет состоянием) — здесь группа только семантическая + layout.
150
+ ## Stories
113
151
 
114
- ### `RadioXGroup.indent` — фиксированный набор
152
+ Основные истории: `stories/Radio/Radio.stories.tsx`
153
+ Файлы примеров: `stories/Radio/examples/`
115
154
 
116
- - `TIndentSize = 12 | 16 | 20 | 24 | 28 | 32` (px). Добавляет класс `indent-{N}`.
117
- - Default `12px`.
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
- - **`<input type="radio">`** — нативный, фиксирован. `type` исключён из props.
124
- - **`size: EComponentSize` default `MD`** — наш enum, не размер `<input>`.
125
- - **`children` — описание справа**, опционально. Без `children` рендерится только иконка.
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
- ## Accessibility
188
+ ## Примеры использования
137
189
 
138
- - Нативный `<input type="radio">` — клавиатура (стрелки внутри той же `name`-группы), screen readers — работают «из коробки».
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
- Нет собственных. Цвета/размер `<span class="radioIcon">` — из `styles/Radio.module.less` (часто переменные проекта; уточнить в LESS).
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
- - `Checkbox` — параллельный компонент.
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
- ## Stories
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
- `stories/Radio/Radio.stories.tsx`
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 | Создан документ |