@sberbusiness/triplex-next-mcp-server 0.24.0-beta2 → 1.40.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 (73) hide show
  1. package/README.md +10 -0
  2. package/bundle/components/AlertContext.md +268 -0
  3. package/bundle/components/BodyPage.md +186 -0
  4. package/bundle/components/Button.md +93 -85
  5. package/bundle/components/ButtonDropdown.md +36 -70
  6. package/bundle/components/ButtonDropdownExtended.md +422 -0
  7. package/bundle/components/ButtonIcon.md +41 -48
  8. package/bundle/components/Caption.md +291 -0
  9. package/bundle/components/Checkbox.md +43 -122
  10. package/bundle/components/CheckboxXGroup.md +109 -46
  11. package/bundle/components/CheckboxYGroup.md +77 -49
  12. package/bundle/components/CodeText.md +197 -0
  13. package/bundle/components/Col.md +311 -162
  14. package/bundle/components/CollapsibleTree.md +584 -0
  15. package/bundle/components/CollapsibleTreeExtended.md +422 -0
  16. package/bundle/components/Dropdown.md +748 -346
  17. package/bundle/components/EmptyView.md +14 -15
  18. package/bundle/components/FooterPage.md +203 -0
  19. package/bundle/components/Gap.md +115 -57
  20. package/bundle/components/HeaderPage.md +226 -0
  21. package/bundle/components/HelpBox.md +45 -84
  22. package/bundle/components/ImageGallery.md +423 -0
  23. package/bundle/components/ImageGalleryExtended.md +606 -0
  24. package/bundle/components/LightBox.md +2252 -233
  25. package/bundle/components/List.md +216 -183
  26. package/bundle/components/ListActionItem.md +157 -0
  27. package/bundle/components/ListItem.md +276 -0
  28. package/bundle/components/ListItemControlsButton.md +103 -0
  29. package/bundle/components/ListItemControlsButtonDropdown.md +107 -0
  30. package/bundle/components/ListItemSelectable.md +99 -0
  31. package/bundle/components/ListItemTable.md +390 -0
  32. package/bundle/components/ListMaster.md +876 -156
  33. package/bundle/components/ListMasterFooter.md +80 -0
  34. package/bundle/components/ListMasterHeader.md +86 -0
  35. package/bundle/components/ListSortable.md +153 -0
  36. package/bundle/components/ListSortableItem.md +175 -0
  37. package/bundle/components/ListTableItem.md +391 -0
  38. package/bundle/components/ModalWindow.md +427 -237
  39. package/bundle/components/MonthYearField.md +145 -109
  40. package/bundle/components/Notification.md +625 -155
  41. package/bundle/components/Overlay.md +271 -170
  42. package/bundle/components/Page.md +284 -186
  43. package/bundle/components/Pagination.md +206 -229
  44. package/bundle/components/Portal.md +131 -67
  45. package/bundle/components/Row.md +171 -69
  46. package/bundle/components/Text.md +320 -0
  47. package/bundle/components/TextField.md +364 -97
  48. package/bundle/components/Title.md +296 -0
  49. package/bundle/guides/codestyle.md +38 -11
  50. package/bundle/guides/commits.md +119 -26
  51. package/bundle/guides/context.md +34 -30
  52. package/bundle/guides/stories.md +110 -40
  53. package/bundle/guides/template.md +3 -7
  54. package/bundle/guides/tests.md +48 -2
  55. package/bundle/manifest.json +275 -30
  56. package/bundle/release-notes/1.26.0.mdx +33 -2
  57. package/bundle/release-notes/1.27.0.mdx +43 -0
  58. package/bundle/release-notes/1.28.0.mdx +25 -0
  59. package/bundle/release-notes/1.29.0.mdx +47 -0
  60. package/bundle/release-notes/1.30.0.mdx +56 -0
  61. package/bundle/release-notes/1.31.0.mdx +52 -0
  62. package/bundle/release-notes/1.32.0.mdx +35 -0
  63. package/bundle/release-notes/1.33.0.mdx +61 -0
  64. package/bundle/release-notes/1.34.0.mdx +35 -0
  65. package/bundle/release-notes/1.35.0.mdx +21 -0
  66. package/bundle/release-notes/1.35.1.mdx +11 -0
  67. package/bundle/release-notes/1.36.0.mdx +21 -0
  68. package/bundle/release-notes/1.37.0.mdx +71 -0
  69. package/bundle/release-notes/1.38.0.mdx +36 -0
  70. package/bundle/release-notes/1.39.0.mdx +66 -0
  71. package/bundle/release-notes/1.40.0.mdx +27 -0
  72. package/bundle/release-notes/1.41.0.mdx +7 -0
  73. package/package.json +1 -1
@@ -0,0 +1,291 @@
1
+ ---
2
+ component: Caption
3
+ category: Typography
4
+ related: [Text, Title, CodeText]
5
+ tokens:
6
+ - --triplex-next-Typography-Primary_Color
7
+ - --triplex-next-Typography-PrimaryInvert_Color
8
+ - --triplex-next-Typography-Complementary_Color
9
+ - --triplex-next-Typography-ComplementaryInvert_Color
10
+ - --triplex-next-Typography-Secondary_Color
11
+ - --triplex-next-Typography-SecondaryInvert_Color
12
+ - --triplex-next-Typography-Tertiary_Color
13
+ - --triplex-next-Typography-TertiaryInvert_Color
14
+ - --triplex-next-Typography-Disabled_Color
15
+ - --triplex-next-Typography-DisabledInvert_Color
16
+ - --triplex-next-Typography-Brand_Color
17
+ - --triplex-next-Typography-BrandInvert_Color
18
+ - --triplex-next-Typography-Info_Color
19
+ - --triplex-next-Typography-InfoInvert_Color
20
+ - --triplex-next-Typography-Success_Color
21
+ - --triplex-next-Typography-SuccessInvert_Color
22
+ - --triplex-next-Typography-Warning_Color
23
+ - --triplex-next-Typography-WarningInvert_Color
24
+ - --triplex-next-Typography-Error_Color
25
+ - --triplex-next-Typography-ErrorInvert_Color
26
+ - --triplex-next-Typography-System_Color
27
+ - --triplex-next-Typography-SystemInvert_Color
28
+ stories: stories/Typography/Caption.stories.tsx
29
+ version: "1.0"
30
+ ---
31
+
32
+ # Caption
33
+
34
+ ## Назначение
35
+
36
+ Подпись (типографика). Рендерит инлайновый `<span>` (тег настраивается через `tag`) для крайних значений типографической шкалы: очень мелкие подписи `C1` (10px) и `C2` (8px) либо крупный акцентный показатель `D1` (32px, шрифт SBSansDisplay).
37
+
38
+ Используй когда: нужна сверхмелкая техническая подпись (сноска, копирайт, метка) или крупная цифра/показатель, не являющаяся заголовком (сумма на дашборде, KPI).
39
+
40
+ Не используй когда:
41
+ - Нужен обычный текст 12–18px — используй `Text` (B1–B4).
42
+ - Крупный текст является заголовком секции — используй `Title` (семантические `h1`–`h3`).
43
+
44
+ ---
45
+
46
+ ## Варианты и props
47
+
48
+ ### Обязательные props
49
+
50
+ | Prop | Тип | Описание |
51
+ |---|---|---|
52
+ | `size` | `ECaptionSize` | Размер: `C1` (10/12px), `C2` (8/10px), `D1` (32/40px). В скобках — font-size/line-height. |
53
+
54
+ ### Опциональные props
55
+
56
+ | Prop | Тип | По умолчанию | Описание |
57
+ |---|---|---|---|
58
+ | `weight` | `EFontWeightCaption` | `REGULAR` | Начертание: `REGULAR` или `SEMIBOLD` (600). Для `C1`/`C2` — семейство SBSansText*, для `D1` — SBSansDisplay*. |
59
+ | `type` | `EFontType` | `PRIMARY` | Цвет текста из общей палитры типографики (11 базовых + 11 `*_INVERT`). |
60
+ | `underline` | `boolean` | — | Подчёркивание. Совместим со `strikethrough` (оба сразу — `underline line-through`). |
61
+ | `strikethrough` | `boolean` | — | Зачёркивание. |
62
+ | `tag` | `string` | `"span"` | HTML-тег корневого элемента. |
63
+
64
+ Компонент типизирован как `TCaptionProps<T extends keyof JSX.IntrinsicElements>` и принимает все атрибуты соответствующего HTML-элемента через spread.
65
+
66
+ ### Ограничения
67
+
68
+ - Внешний тип `forwardRef<HTMLElement, TCaptionProps<keyof JSX.IntrinsicElements>>` «растворяет» дженерик: TypeScript не сужает атрибуты под конкретный `tag`. Известное ограничение публичного API, не исправлять без обсуждения (breaking).
69
+ - `EFontWeightCaption` дублирует значения `EFontWeightText` — это два независимых публичных enum, объединять нельзя (breaking).
70
+ - `EFontType.BRAND` дополнительно задаёт `user-select: none` (особенность стилей `Typography.module.less`).
71
+
72
+ ---
73
+
74
+ ## Дизайн-токены
75
+
76
+ Цвета — общие CSS-переменные семейства Typography (см. frontmatter): `--triplex-next-Typography-{Type}_Color` и `--triplex-next-Typography-{Type}Invert_Color`.
77
+
78
+ Размеры шрифта и line-height — фиксированные пиксельные значения в `styles/Caption.module.less` (токенов для них нет).
79
+
80
+ ---
81
+
82
+ ## Инварианты
83
+
84
+ - **`forwardRef`** — обязателен, `ref` пробрасывается на корневой элемент.
85
+ - **Значения enum** `ECaptionSize`, `EFontWeightCaption`, `EFontType` — публичный API из barrel. Изменение — breaking change.
86
+ - **`TCaptionProps`**, **`ITypographyProps`** — публичные типы.
87
+ - **`displayName = "Caption"`** — не убирать.
88
+ - `D1` переключает семейство шрифта на SBSansDisplay* — контракт стилей: крупный показатель визуально согласован с заголовками.
89
+ - Классы собираются только через `clsx`.
90
+
91
+ ---
92
+
93
+ ## Accessibility
94
+
95
+ - Компонент не интерактивный: focus management и keyboard navigation не применимы.
96
+ - Семантика определяется через `tag` (по умолчанию нейтральный `<span>`).
97
+ - Размеры `C1`/`C2` (10/8px) ниже комфортного порога читаемости — используй только для второстепенной информации, не для основного контента.
98
+ - Цвет (`type`) не передаёт семантику для screen reader'ов.
99
+
100
+ ---
101
+
102
+ ## Связанные компоненты
103
+
104
+ - `Text` — основной текст интерфейса (B1–B4).
105
+ - `Title` — заголовки `h1`–`h3`.
106
+ - `CodeText` — моноширинный текст.
107
+
108
+ ---
109
+
110
+ ## Stories
111
+
112
+ Основные истории: `stories/Typography/Caption.stories.tsx`
113
+ Файлы примеров: `stories/Typography/examples/Caption/`
114
+
115
+ | Story | Example file | Что демонстрирует |
116
+ |---|---|---|
117
+ | `Playground` | `Playground.tsx` | Интерактивный контроль props `size`, `weight`, `type`, `tag`, `underline`, `strikethrough` |
118
+ | `Default` | `Default.tsx` | Минимальное использование |
119
+ | `Sizes` | `Sizes.tsx` | Размеры C1 / C2 / D1 |
120
+ | `Weights` | `Weights.tsx` | Начертания REGULAR / SEMIBOLD |
121
+ | `Types` | `Types.tsx` | Все значения `EFontType`: базовые + инвертированные на тёмной подложке |
122
+ | `Decorations` | `Decorations.tsx` | `underline`, `strikethrough` и их комбинация |
123
+
124
+ ---
125
+
126
+ ## История изменений
127
+
128
+ | Дата | Изменение |
129
+ |---|---|
130
+ | 2026-07-20 | Создан документ. AI-рефакторинг: decoration-логика вынесена во внутренний хелпер `getTextDecorationClassName` (`utils.ts`), комментарии переведены в JSDoc, unit-тесты расширены (все значения `ECaptionSize`/`EFontWeightCaption`, дефолты). Stories переведены на modern pattern (`examples/Caption/`). |
131
+
132
+ ---
133
+
134
+ ## Примеры использования
135
+
136
+ ### Default
137
+
138
+ `stories/Typography/examples/Caption/Default.tsx`
139
+
140
+ ```tsx
141
+ import React from "react";
142
+ import { Caption, ECaptionSize } from "@sberbusiness/triplex-next";
143
+
144
+ export const Default = () => <Caption size={ECaptionSize.C1}>Вспомогательная подпись</Caption>;
145
+ ```
146
+
147
+ ### Sizes
148
+
149
+ `stories/Typography/examples/Caption/Sizes.tsx`
150
+
151
+ ```tsx
152
+ import React from "react";
153
+ import { Caption, ECaptionSize } from "@sberbusiness/triplex-next";
154
+
155
+ export const Sizes = () => (
156
+ <div style={{ display: "flex", flexDirection: "column", gap: "16px" }}>
157
+ <Caption size={ECaptionSize.C1}>C1 - Подпись малого размера (10px)</Caption>
158
+ <Caption size={ECaptionSize.C2}>C2 - Подпись очень малого размера (8px)</Caption>
159
+ <Caption size={ECaptionSize.D1}>D1 - Подпись большого размера (32px)</Caption>
160
+ </div>
161
+ );
162
+ ```
163
+
164
+ ### Weights
165
+
166
+ `stories/Typography/examples/Caption/Weights.tsx`
167
+
168
+ ```tsx
169
+ import React from "react";
170
+ import { Caption, ECaptionSize, EFontWeightCaption } from "@sberbusiness/triplex-next";
171
+
172
+ export const Weights = () => (
173
+ <div style={{ display: "flex", flexDirection: "column", gap: "16px" }}>
174
+ <Caption size={ECaptionSize.C1} weight={EFontWeightCaption.REGULAR}>
175
+ Regular - Обычный вес подписи
176
+ </Caption>
177
+ <Caption size={ECaptionSize.C1} weight={EFontWeightCaption.SEMIBOLD}>
178
+ Semibold - Полужирная подпись
179
+ </Caption>
180
+ </div>
181
+ );
182
+ ```
183
+
184
+ ### Types
185
+
186
+ `stories/Typography/examples/Caption/Types.tsx`
187
+
188
+ ```tsx
189
+ import React from "react";
190
+ import { Caption, ECaptionSize, EFontType } from "@sberbusiness/triplex-next";
191
+
192
+ export const Types = () => (
193
+ <div style={{ display: "flex", gap: "16px" }}>
194
+ <div style={{ display: "flex", flexDirection: "column", gap: "16px" }}>
195
+ <Caption size={ECaptionSize.C1} type={EFontType.PRIMARY}>
196
+ Primary
197
+ </Caption>
198
+ <Caption size={ECaptionSize.C1} type={EFontType.COMPLEMENTARY}>
199
+ Complementary
200
+ </Caption>
201
+ <Caption size={ECaptionSize.C1} type={EFontType.SECONDARY}>
202
+ Secondary
203
+ </Caption>
204
+ <Caption size={ECaptionSize.C1} type={EFontType.TERTIARY}>
205
+ Tertiary
206
+ </Caption>
207
+ <Caption size={ECaptionSize.C1} type={EFontType.BRAND}>
208
+ Brand
209
+ </Caption>
210
+ <Caption size={ECaptionSize.C1} type={EFontType.INFO}>
211
+ Info
212
+ </Caption>
213
+ <Caption size={ECaptionSize.C1} type={EFontType.SUCCESS}>
214
+ Success
215
+ </Caption>
216
+ <Caption size={ECaptionSize.C1} type={EFontType.WARNING}>
217
+ Warning
218
+ </Caption>
219
+ <Caption size={ECaptionSize.C1} type={EFontType.ERROR}>
220
+ Error
221
+ </Caption>
222
+ <Caption size={ECaptionSize.C1} type={EFontType.DISABLED}>
223
+ Disabled
224
+ </Caption>
225
+ <Caption size={ECaptionSize.C1} type={EFontType.SYSTEM}>
226
+ System
227
+ </Caption>
228
+ </div>
229
+ <div style={{ display: "flex", flexDirection: "column", gap: "16px", backgroundColor: "#1F1F22" }}>
230
+ <Caption size={ECaptionSize.C1} type={EFontType.PRIMARY_INVERT}>
231
+ Primary Invert
232
+ </Caption>
233
+ <Caption size={ECaptionSize.C1} type={EFontType.COMPLEMENTARY_INVERT}>
234
+ Complementary Invert
235
+ </Caption>
236
+ <Caption size={ECaptionSize.C1} type={EFontType.SECONDARY_INVERT}>
237
+ Secondary Invert
238
+ </Caption>
239
+ <Caption size={ECaptionSize.C1} type={EFontType.TERTIARY_INVERT}>
240
+ Tertiary Invert
241
+ </Caption>
242
+ <Caption size={ECaptionSize.C1} type={EFontType.BRAND_INVERT}>
243
+ Brand Invert
244
+ </Caption>
245
+ <Caption size={ECaptionSize.C1} type={EFontType.INFO_INVERT}>
246
+ Info Invert
247
+ </Caption>
248
+ <Caption size={ECaptionSize.C1} type={EFontType.SUCCESS_INVERT}>
249
+ Success Invert
250
+ </Caption>
251
+ <Caption size={ECaptionSize.C1} type={EFontType.WARNING_INVERT}>
252
+ Warning Invert
253
+ </Caption>
254
+ <Caption size={ECaptionSize.C1} type={EFontType.ERROR_INVERT}>
255
+ Error Invert
256
+ </Caption>
257
+ <Caption size={ECaptionSize.C1} type={EFontType.DISABLED_INVERT}>
258
+ Disabled Invert
259
+ </Caption>
260
+ <Caption size={ECaptionSize.C1} type={EFontType.SYSTEM_INVERT}>
261
+ System Invert
262
+ </Caption>
263
+ </div>
264
+ </div>
265
+ );
266
+ ```
267
+
268
+ ### Decorations
269
+
270
+ `stories/Typography/examples/Caption/Decorations.tsx`
271
+
272
+ ```tsx
273
+ import React from "react";
274
+ import { Caption, ECaptionSize } from "@sberbusiness/triplex-next";
275
+
276
+ export const Decorations = () => (
277
+ <div style={{ display: "flex", flexDirection: "column", gap: "16px" }}>
278
+ <Caption size={ECaptionSize.C1}>Подпись без декораций</Caption>
279
+ <Caption size={ECaptionSize.C1} underline>
280
+ Подпись с подчеркиванием
281
+ </Caption>
282
+ <Caption size={ECaptionSize.C1} strikethrough>
283
+ Подпись с зачеркиванием
284
+ </Caption>
285
+ <Caption size={ECaptionSize.C1} underline strikethrough>
286
+ Подпись с подчеркиванием и зачеркиванием
287
+ </Caption>
288
+ </div>
289
+ );
290
+ ```
291
+
@@ -1,8 +1,6 @@
1
1
  ---
2
2
  component: Checkbox
3
3
  category: Inputs
4
- figma-node: ""
5
- figma-file: ""
6
4
  related: [CheckboxXGroup, CheckboxYGroup, CheckboxTree, CheckboxTreeExtended]
7
5
  tokens:
8
6
  - --triplex-next-Checkbox-Background_Default
@@ -26,7 +24,8 @@ version: "1.0"
26
24
  # Checkbox
27
25
 
28
26
  ## Назначение
29
- Нативный чекбокс в обертке `<label>`, который поддерживает визуальные состояния (default/checked/disabled/focus) и режим частичного выбора через `bulk`.
27
+
28
+ Нативный чекбокс в обёртке `<label>`, который поддерживает визуальные состояния (default / checked / disabled / focus) и режим частичного выбора через `bulk`.
30
29
 
31
30
  Используй когда: нужен чекбокс с текстовой подписью (`children`) и стандартным поведением `<input type="checkbox">`.
32
31
  Не используй когда: нужен сложный многошаговый выбор или компонент с нестандартной семантикой (тогда лучше другой control).
@@ -34,95 +33,95 @@ version: "1.0"
34
33
  ---
35
34
 
36
35
  ## Варианты и props
36
+
37
+ ### Обязательные props
38
+
39
+ Обязательных custom-props нет.
40
+
37
41
  ### Опциональные props
42
+
38
43
  | Prop | Тип | По умолчанию | Описание |
39
44
  |---|---|---|---|
40
45
  | `checked` | `boolean` | — | Состояние чекбокса (controlled). Передаётся через стандартные props `<input>`. |
41
46
  | `defaultChecked` | `boolean` | — | Состояние чекбокса (uncontrolled). Передаётся через стандартные props `<input>`. |
42
47
  | `disabled` | `boolean` | `false` | Блокирует взаимодействие и меняет визуальное состояние. |
43
- | `bulk` | `boolean` | `false` | Влияет на отображаемую иконку (используется bulk-иконка), при этом видимость checkmark всё равно определяется состоянием `checked`. |
48
+ | `bulk` | `boolean` | `false` | Влияет на отображаемую иконку (используется bulk-иконка). Видимость checkmark всё равно определяется состоянием `checked`. |
44
49
  | `size` | `EComponentSize` | `EComponentSize.MD` | Размер: `SM` / `MD` / `LG`. |
45
50
  | `children` | `React.ReactNode` | — | Контент лейбла рядом с чекбоксом. Если `children` нет — класс `.nonempty` не применяется. |
46
51
  | `labelAttributes` | `React.LabelHTMLAttributes<HTMLLabelElement>` | — | Дополнительные HTML-атрибуты для корневого `<label>` (например, `className`, `onFocus`). |
47
- | `...inputAttributes` | `Omit<React.InputHTMLAttributes<HTMLInputElement>, "type" | "size">` | — | Все стандартные атрибуты `<input type="checkbox">` (включая `name`, `onChange`, `aria-label` и т.д.). |
52
+ | `...inputAttributes` | `Omit<React.InputHTMLAttributes<HTMLInputElement>, "type" \| "size">` | — | Все стандартные атрибуты `<input type="checkbox">` (включая `name`, `onChange`, `aria-label` и т.д.). |
48
53
 
49
- ---
50
-
51
- ## Ключевые особенности реализации
52
- ### Ref forwarding
53
- `ref` прокидывается на внутренний `<input type="checkbox">`.
54
-
55
- ### Иконка
56
- - `bulk=false` — отрисовывается обычная checkmark-иконка.
57
- - `bulk=true` — отрисовывается bulk-иконка.
54
+ ### Ограничения использования
58
55
 
59
- ### Структура DOM
60
- Компонент рендерит:
61
- 1. корневой `<label>`
62
- 2. `<input type="checkbox">`
63
- 3. декоративные `<span>`/`svg` для отрисовки фона и галочки
56
+ - DOM-структура фиксирована: корневой `<label>` → `<input type="checkbox">` → декоративные `<span>` / `<svg>` для отрисовки фона и галочки.
57
+ - `ref` прокидывается на внутренний `<input type="checkbox">`.
64
58
 
65
59
  ---
66
60
 
67
- ## Accessibility
68
- Компонент использует нативный `<input type="checkbox">`, поэтому поддерживает стандартную клавиатурную навигацию (Tab + Space) и семантику формы.
61
+ ## Дизайн-токены
69
62
 
70
- Библиотека мультиязычная: текст `aria-label`/`title` не захардкожен в компоненте. При необходимости потребитель передаёт `aria-*` через `...inputAttributes`.
63
+ ```
64
+ --triplex-next-Checkbox-Background_Default
65
+ --triplex-next-Checkbox-BorderColor_Default
66
+ --triplex-next-Checkbox-Checkmark_Fill_Default
67
+ --triplex-next-Checkbox-Background_Hover
68
+ --triplex-next-Checkbox-BorderColor_Hover
69
+ --triplex-next-Checkbox-Background_Checked_Default
70
+ --triplex-next-Checkbox-BorderColor_Checked_Default
71
+ --triplex-next-Checkbox-Background_Disabled
72
+ --triplex-next-Checkbox-BorderColor_Disabled
73
+ --triplex-next-Checkbox-Background_Checked_Disabled
74
+ --triplex-next-Checkbox-BorderColor_Checked_Disabled
75
+ --triplex-next-Checkbox-Checkmark_Fill_Disabled
76
+ --triplex-next-Checkbox-BorderColor_Focus
77
+ --triplex-next-Checkbox-Background_Checked_Hover
78
+ ```
71
79
 
72
80
  ---
73
81
 
74
82
  ## Инварианты
83
+
75
84
  - `forwardRef` на компоненте обязателен и должен указывать на `<input>`.
76
85
  - Корневой DOM-элемент компонента — `<label>`, внутри которого находится `<input>`.
77
86
  - `className` и `size` — публичные части внешнего контрактного API: не менять семантику без согласования.
78
87
 
79
88
  ---
80
89
 
81
- ## Дизайн-токены
82
- Компонент использует CSS-переменные:
83
- `--triplex-next-Checkbox-Background_Default`,
84
- `--triplex-next-Checkbox-BorderColor_Default`,
85
- `--triplex-next-Checkbox-Checkmark_Fill_Default`,
86
- `--triplex-next-Checkbox-Background_Hover`,
87
- `--triplex-next-Checkbox-BorderColor_Hover`,
88
- `--triplex-next-Checkbox-Background_Checked_Default`,
89
- `--triplex-next-Checkbox-BorderColor_Checked_Default`,
90
- `--triplex-next-Checkbox-Background_Disabled`,
91
- `--triplex-next-Checkbox-BorderColor_Disabled`,
92
- `--triplex-next-Checkbox-Background_Checked_Disabled`,
93
- `--triplex-next-Checkbox-BorderColor_Checked_Disabled`,
94
- `--triplex-next-Checkbox-Checkmark_Fill_Disabled`,
95
- `--triplex-next-Checkbox-BorderColor_Focus`,
96
- `--triplex-next-Checkbox-Background_Checked_Hover`.
90
+ ## Accessibility
91
+
92
+ - Компонент использует нативный `<input type="checkbox">`, поэтому поддерживает стандартную клавиатурную навигацию (Tab + Space) и семантику формы.
93
+ - Библиотека мультиязычная: текст `aria-label` / `title` не захардкожен в компоненте. При необходимости потребитель передаёт `aria-*` через `...inputAttributes`.
97
94
 
98
95
  ---
99
96
 
100
97
  ## Связанные компоненты
98
+
101
99
  - `CheckboxXGroup` — группировка чекбоксов по оси X.
102
100
  - `CheckboxYGroup` — группировка чекбоксов по оси Y.
103
- - `CheckboxTree` — декларативное дерево чекбоксов (обертка над `CheckboxTreeExtended`), поддерживает bulk-логику и распространение состояния checked по родителям/детям.
104
- - `CheckboxTreeExtended` — расширенное дерево чекбоксов на базе `CollapsableTree` с Node/Checkbox подкомпонентами (использует нативный `Checkbox` внутри для каждого узла).
101
+ - `CheckboxTree` — декларативное дерево чекбоксов (обёртка над `CheckboxTreeExtended`), поддерживает bulk-логику и распространение состояния checked по родителям/детям.
102
+ - `CheckboxTreeExtended` — расширенное дерево чекбоксов на базе `CollapsibleTreeExtended` с `Node` / `Checkbox` подкомпонентами (использует нативный `Checkbox` внутри для каждого узла).
105
103
 
106
104
  ---
107
105
 
108
106
  ## Stories
109
- `stories/Checkbox/Checkbox.stories.tsx`
107
+
108
+ Основные истории: `stories/Checkbox/Checkbox.stories.tsx`
110
109
  Файлы примеров: `stories/Checkbox/examples/`
111
110
 
112
111
  | Story | Example file | Что демонстрирует |
113
112
  |---|---|---|
114
113
  | `Playground` | `PlaygroundExample.tsx` | Интерактивный контроль основных props |
115
114
  | `Default` | `DefaultExample.tsx` | Минимальное использование |
116
- | `Sizes` | `SizesExample.tsx` | Размеры SM / MD / LG |
117
- | `XGroup` | `XGroupExample.tsx` | Группа по оси X |
118
- | `YGroup` | `YGroupExample.tsx` | Группа по оси Y |
115
+ | `Sizes` | `SizesExample.tsx` | Размеры `SM` / `MD` / `LG` |
119
116
 
120
117
  ---
121
118
 
122
119
  ## История изменений
120
+
123
121
  | Дата | Изменение |
124
122
  |---|---|
125
123
  | 2026-04-16 | Приведение `Checkbox` к AI-ready: соблюдены правила `docs/ai/codestyle.md`, добавлена AI-документация и unit-тест на передачу `className` корневому `label`. |
124
+ | 2026-04-27 | Приведён в соответствие с `docs/ai/template-ai.md`: убрана секция «Ключевые особенности реализации» (содержимое перенесено в `Ограничения использования`), переставлены секции (Accessibility после Инвариантов), добавлена колонка `Example file`. |
126
125
 
127
126
  ---
128
127
 
@@ -158,81 +157,3 @@ export const SizesExample = () => (
158
157
  );
159
158
  ```
160
159
 
161
- ### XGroup
162
-
163
- `stories/Checkbox/examples/XGroupExample.tsx`
164
-
165
- ```tsx
166
- import React from "react";
167
- import { Checkbox, CheckboxXGroup, EComponentSize, Gap } from "@sberbusiness/triplex-next";
168
-
169
- export const XGroupExample = () => (
170
- <>
171
- <CheckboxXGroup indent={16}>
172
- {[1, 2, 3].map((value) => (
173
- <Checkbox key={value} name="checkbox-x-group" value={value} size={EComponentSize.SM}>
174
- Checkbox text
175
- </Checkbox>
176
- ))}
177
- </CheckboxXGroup>
178
- <Gap size={16} />
179
- <CheckboxXGroup indent={16}>
180
- {[1, 2, 3].map((value) => (
181
- <Checkbox key={value} name="checkbox-x-group" value={value}>
182
- Checkbox text
183
- </Checkbox>
184
- ))}
185
- </CheckboxXGroup>
186
- <Gap size={16} />
187
- <CheckboxXGroup indent={20}>
188
- {[1, 2, 3].map((value) => (
189
- <Checkbox key={value} name="checkbox-x-group" value={value} size={EComponentSize.LG}>
190
- Checkbox text
191
- </Checkbox>
192
- ))}
193
- </CheckboxXGroup>
194
- </>
195
- );
196
- ```
197
-
198
- ### YGroup
199
-
200
- `stories/Checkbox/examples/YGroupExample.tsx`
201
-
202
- ```tsx
203
- import React from "react";
204
- import { Checkbox, CheckboxYGroup, Col, EComponentSize, Row } from "@sberbusiness/triplex-next";
205
-
206
- export const YGroupExample = () => (
207
- <Row>
208
- <Col size={3}>
209
- <CheckboxYGroup aria-labelledby="checkbox-y-group-label">
210
- {[1, 2, 3, 4].map((value) => (
211
- <Checkbox key={value} name="checkbox-y-group" value={value} size={EComponentSize.SM}>
212
- Checkbox text
213
- </Checkbox>
214
- ))}
215
- </CheckboxYGroup>
216
- </Col>
217
- <Col size={3}>
218
- <CheckboxYGroup aria-labelledby="checkbox-y-group-label">
219
- {[1, 2, 3, 4].map((value) => (
220
- <Checkbox key={value} name="checkbox-y-group" value={value}>
221
- Checkbox text
222
- </Checkbox>
223
- ))}
224
- </CheckboxYGroup>
225
- </Col>
226
- <Col size={3}>
227
- <CheckboxYGroup aria-labelledby="checkbox-y-group-label">
228
- {[1, 2, 3, 4].map((value) => (
229
- <Checkbox key={value} name="checkbox-y-group" value={value} size={EComponentSize.LG}>
230
- Checkbox text
231
- </Checkbox>
232
- ))}
233
- </CheckboxYGroup>
234
- </Col>
235
- </Row>
236
- );
237
- ```
238
-