@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
@@ -1,109 +1,172 @@
1
1
  ---
2
2
  component: CheckboxXGroup
3
3
  category: Inputs
4
- figma-node: ""
5
- figma-file: ""
6
4
  related: [Checkbox]
7
5
  tokens: []
8
- stories: stories/Checkbox/Checkbox.stories.tsx
6
+ stories: stories/CheckboxXGroup/CheckboxXGroup.stories.tsx
9
7
  version: "1.0"
10
8
  ---
11
9
 
12
10
  # CheckboxXGroup
13
11
 
14
12
  ## Назначение
15
- Компонент-группа для компоновки чекбоксов с направлением по оси `X`.
16
- Используется как контейнер для нескольких `Checkbox`, когда нужно разложить их в строку с переносами.
13
+
14
+ Компонент-группа для компоновки чекбоксов с направлением по оси `X`. Используется как контейнер для нескольких `Checkbox`, когда нужно разложить их в строку с переносами.
15
+
16
+ Используй когда: несколько связанных чекбоксов нужно разместить в строку.
17
+ Не используй когда: чекбоксы должны идти вертикально — используй `CheckboxYGroup`.
17
18
 
18
19
  ---
19
20
 
20
21
  ## Варианты и props
22
+
23
+ ### Обязательные props
24
+
25
+ Обязательных custom-props нет.
26
+
21
27
  ### Опциональные props
28
+
22
29
  | Prop | Тип | По умолчанию | Описание |
23
30
  |---|---|---|---|
24
31
  | `indent` | `TIndentSize` | `12` | Отступы/зазоры между чекбоксами в группе. Возможные значения: `12, 16, 20, 24, 28, 32`. |
25
32
  | `children` | `React.ReactNode` | — | Внутри обычно рендерятся `Checkbox`. |
26
33
  | `...divAttributes` | `React.HTMLAttributes<HTMLDivElement>` | — | Все стандартные HTML-атрибуты для корневого элемента. |
27
34
 
28
- ---
35
+ ### Ограничения использования
29
36
 
30
- ## Ключевые особенности реализации
31
- - Корневой элемент: `<div role="group">`.
32
- - Разметка: `inline-flex` и `flex-flow: row wrap`.
33
- - `indent` управляет применением LESS-класса `indent-{n}` и задает отрицательные/положительные маргины для выравнивания сетки.
37
+ - Корневой элемент — `<div role="group">`, разметка построена на `inline-flex` и `flex-flow: row wrap`.
38
+ - `indent` управляет применением LESS-класса `indent-{n}` и задаёт отрицательные/положительные маргины для выравнивания сетки.
34
39
 
35
40
  ---
36
41
 
37
- ## Accessibility
38
- - `role="group"` описывает группу взаимосвязанных контролов.
39
- - Семантика чекбоксов остается нативной на уровне `Checkbox` внутри группы.
42
+ ## Дизайн-токены
43
+
44
+ Компонент не использует собственных CSS-переменных. Все визуальные стили наследуются от `Checkbox`.
40
45
 
41
46
  ---
42
47
 
43
48
  ## Инварианты
49
+
44
50
  - `forwardRef` обязателен и должен указывать на корневой `<div>`.
45
51
  - Корневой DOM-элемент компонента — `<div>`, роль зафиксирована как `role="group"`.
46
52
 
47
53
  ---
48
54
 
55
+ ## Accessibility
56
+
57
+ - `role="group"` описывает группу взаимосвязанных контролов.
58
+ - Семантика чекбоксов остаётся нативной на уровне `Checkbox` внутри группы.
59
+
60
+ ---
61
+
49
62
  ## Связанные компоненты
63
+
50
64
  - `Checkbox` — базовый чекбокс, обычно используется внутри `CheckboxXGroup`.
65
+ - `CheckboxYGroup` — аналогичная группа, но с направлением по оси `Y`.
51
66
 
52
67
  ---
53
68
 
54
69
  ## Stories
55
- `stories/Checkbox/Checkbox.stories.tsx`
56
- Файлы примеров: `stories/Checkbox/examples/`
70
+
71
+ Основные истории: `stories/CheckboxXGroup/CheckboxXGroup.stories.tsx`
72
+ Файлы примеров: `stories/CheckboxXGroup/examples/`
57
73
 
58
74
  | Story | Example file | Что демонстрирует |
59
75
  |---|---|---|
60
- | `XGroup` | `XGroupExample.tsx` | Группа по оси X |
76
+ | `Playground` | `PlaygroundExample.tsx` | Интерактивный контроль `indent` |
77
+ | `Default` | `DefaultExample.tsx` | Группа по оси X |
78
+ | `CheckboxSizes` | `SizesExample.tsx` | Группа чекбоксов разных размеров |
79
+ | `Indents` | `IndentsExample.tsx` | Различные значения отступа |
61
80
 
62
81
  ---
63
82
 
64
83
  ## История изменений
84
+
65
85
  | Дата | Изменение |
66
86
  |---|---|
67
87
  | 2026-04-16 | Приведение `CheckboxXGroup` к AI-ready: добавлен `forwardRef`, типизирован `children`, созданы AI-документ и инварианты. |
88
+ | 2026-04-27 | Приведён в соответствие с `docs/ai/template-ai.md`: убрана секция «Ключевые особенности реализации» (содержимое перенесено в `Ограничения использования`), переставлены секции, добавлена колонка `Example file` и пустой раздел `Дизайн-токены`. |
68
89
 
69
90
  ---
70
91
 
71
92
  ## Примеры использования
72
93
 
73
- ### XGroup
94
+ ### Default
95
+
96
+ `stories/CheckboxXGroup/examples/DefaultExample.tsx`
97
+
98
+ ```tsx
99
+ import React from "react";
100
+ import { Checkbox, CheckboxXGroup } from "@sberbusiness/triplex-next";
101
+
102
+ export const DefaultExample = () => (
103
+ <CheckboxXGroup>
104
+ {[1, 2, 3].map((value) => (
105
+ <Checkbox key={value} name="checkbox-x-group" value={value}>
106
+ Checkbox text
107
+ </Checkbox>
108
+ ))}
109
+ </CheckboxXGroup>
110
+ );
111
+ ```
112
+
113
+ ### CheckboxSizes
114
+
115
+ `stories/CheckboxXGroup/examples/SizesExample.tsx`
116
+
117
+ ```tsx
118
+ import React from "react";
119
+ import { Checkbox, CheckboxXGroup, EComponentSize } from "@sberbusiness/triplex-next";
120
+
121
+ const sizes = [
122
+ { label: "SM", size: EComponentSize.SM },
123
+ { label: "MD", size: EComponentSize.MD },
124
+ { label: "LG", size: EComponentSize.LG },
125
+ ] as const;
126
+
127
+ export const SizesExample = () => (
128
+ <div style={{ display: "flex", flexDirection: "column", gap: "24px" }}>
129
+ {sizes.map(({ label, size }) => (
130
+ <div key={label}>
131
+ <div style={{ marginBottom: "8px", fontSize: "16px", fontWeight: "700" }}>{label}</div>
132
+ <CheckboxXGroup>
133
+ {[1, 2, 3].map((value) => (
134
+ <Checkbox key={value} name={`checkbox-x-group-${label}`} value={value} size={size}>
135
+ Checkbox text
136
+ </Checkbox>
137
+ ))}
138
+ </CheckboxXGroup>
139
+ </div>
140
+ ))}
141
+ </div>
142
+ );
143
+ ```
144
+
145
+ ### Indents
74
146
 
75
- `stories/Checkbox/examples/XGroupExample.tsx`
147
+ `stories/CheckboxXGroup/examples/IndentsExample.tsx`
76
148
 
77
149
  ```tsx
78
150
  import React from "react";
79
- import { Checkbox, CheckboxXGroup, EComponentSize, Gap } from "@sberbusiness/triplex-next";
80
-
81
- export const XGroupExample = () => (
82
- <>
83
- <CheckboxXGroup indent={16}>
84
- {[1, 2, 3].map((value) => (
85
- <Checkbox key={value} name="checkbox-x-group" value={value} size={EComponentSize.SM}>
86
- Checkbox text
87
- </Checkbox>
88
- ))}
89
- </CheckboxXGroup>
90
- <Gap size={16} />
91
- <CheckboxXGroup indent={16}>
92
- {[1, 2, 3].map((value) => (
93
- <Checkbox key={value} name="checkbox-x-group" value={value}>
94
- Checkbox text
95
- </Checkbox>
96
- ))}
97
- </CheckboxXGroup>
98
- <Gap size={16} />
99
- <CheckboxXGroup indent={20}>
100
- {[1, 2, 3].map((value) => (
101
- <Checkbox key={value} name="checkbox-x-group" value={value} size={EComponentSize.LG}>
102
- Checkbox text
103
- </Checkbox>
104
- ))}
105
- </CheckboxXGroup>
106
- </>
151
+ import { Checkbox, CheckboxXGroup } from "@sberbusiness/triplex-next";
152
+
153
+ const indents = [12, 16, 20, 24, 28, 32] as const;
154
+
155
+ export const IndentsExample = () => (
156
+ <div style={{ display: "flex", flexDirection: "column", gap: "24px" }}>
157
+ {indents.map((indent) => (
158
+ <div key={indent}>
159
+ <div style={{ marginBottom: "8px", fontSize: "16px", fontWeight: "700" }}>{indent}px</div>
160
+ <CheckboxXGroup indent={indent}>
161
+ {[1, 2, 3, 4].map((value) => (
162
+ <Checkbox key={value} name={`checkbox-x-group-${indent}`} value={value}>
163
+ Checkbox text
164
+ </Checkbox>
165
+ ))}
166
+ </CheckboxXGroup>
167
+ </div>
168
+ ))}
169
+ </div>
107
170
  );
108
171
  ```
109
172
 
@@ -1,112 +1,140 @@
1
1
  ---
2
2
  component: CheckboxYGroup
3
3
  category: Inputs
4
- figma-node: ""
5
- figma-file: ""
6
4
  related: [Checkbox, CheckboxXGroup]
7
5
  tokens: []
8
- stories: stories/Checkbox/Checkbox.stories.tsx
6
+ stories: stories/CheckboxYGroup/CheckboxYGroup.stories.tsx
9
7
  version: "1.0"
10
8
  ---
11
9
 
12
10
  # CheckboxYGroup
13
11
 
14
12
  ## Назначение
15
- Компонент-группа для компоновки чекбоксов с направлением по оси `Y`.
16
- Используется как контейнер для нескольких `Checkbox`, когда нужно разложить их вертикально.
13
+
14
+ Компонент-группа для компоновки чекбоксов с направлением по оси `Y`. Используется как контейнер для нескольких `Checkbox`, когда нужно разложить их вертикально.
15
+
16
+ Используй когда: несколько связанных чекбоксов нужно разместить вертикально.
17
+ Не используй когда: чекбоксы должны идти в строку — используй `CheckboxXGroup`.
17
18
 
18
19
  ---
19
20
 
20
21
  ## Варианты и props
22
+
23
+ ### Обязательные props
24
+
25
+ Обязательных custom-props нет.
26
+
21
27
  ### Опциональные props
28
+
22
29
  | Prop | Тип | По умолчанию | Описание |
23
30
  |---|---|---|---|
24
31
  | `children` | `React.ReactNode` | — | Внутри обычно рендерятся `Checkbox` (или компоненты, использующие `Checkbox`). |
25
32
  | `...divAttributes` | `React.HTMLAttributes<HTMLDivElement>` | — | Все стандартные HTML-атрибуты для корневого элемента. |
26
33
 
27
- ---
34
+ ### Ограничения использования
28
35
 
29
- ## Ключевые особенности реализации
30
- - Корневой элемент: `<div role="group">`.
31
- - Разметка: `inline-flex` и `flex-flow: column wrap`.
36
+ - Корневой элемент — `<div role="group">`, разметка построена на `inline-flex` и `flex-flow: column wrap`.
32
37
 
33
38
  ---
34
39
 
35
- ## Accessibility
36
- - `role="group"` описывает группу взаимосвязанных контролов.
37
- - Семантика чекбоксов остается нативной на уровне `Checkbox` внутри группы.
40
+ ## Дизайн-токены
41
+
42
+ Компонент не использует собственных CSS-переменных. Все визуальные стили наследуются от `Checkbox`.
38
43
 
39
44
  ---
40
45
 
41
46
  ## Инварианты
47
+
42
48
  - `forwardRef` обязателен и должен указывать на корневой `<div>`.
43
49
  - Корневой DOM-элемент компонента — `<div>`, роль зафиксирована как `role="group"`.
44
50
 
45
51
  ---
46
52
 
53
+ ## Accessibility
54
+
55
+ - `role="group"` описывает группу взаимосвязанных контролов.
56
+ - Семантика чекбоксов остаётся нативной на уровне `Checkbox` внутри группы.
57
+
58
+ ---
59
+
47
60
  ## Связанные компоненты
61
+
48
62
  - `Checkbox` — базовый чекбокс, обычно используется внутри `CheckboxYGroup`.
49
63
  - `CheckboxXGroup` — аналогичная группа, но с направлением по оси `X`.
50
64
 
51
65
  ---
52
66
 
53
67
  ## Stories
54
- `stories/Checkbox/Checkbox.stories.tsx`
55
- Файлы примеров: `stories/Checkbox/examples/`
68
+
69
+ Основные истории: `stories/CheckboxYGroup/CheckboxYGroup.stories.tsx`
70
+ Файлы примеров: `stories/CheckboxYGroup/examples/`
56
71
 
57
72
  | Story | Example file | Что демонстрирует |
58
73
  |---|---|---|
59
- | `YGroup` | `YGroupExample.tsx` | Группа по оси Y |
74
+ | `Default` | `DefaultExample.tsx` | Группа по оси Y |
75
+ | `CheckboxSizes` | `SizesExample.tsx` | Группа чекбоксов разных размеров |
60
76
 
61
77
  ---
62
78
 
63
79
  ## История изменений
80
+
64
81
  | Дата | Изменение |
65
82
  |---|---|
66
83
  | 2026-04-16 | Приведение `CheckboxYGroup` к AI-ready: добавлен `forwardRef`, типизирован `children`, созданы AI-документ и инварианты. |
84
+ | 2026-04-27 | Приведён в соответствие с `docs/ai/template-ai.md`: убрана секция «Ключевые особенности реализации» (содержимое перенесено в `Ограничения использования`), переставлены секции, добавлена колонка `Example file` и пустой раздел `Дизайн-токены`. |
67
85
 
68
86
  ---
69
87
 
70
88
  ## Примеры использования
71
89
 
72
- ### YGroup
90
+ ### Default
91
+
92
+ `stories/CheckboxYGroup/examples/DefaultExample.tsx`
93
+
94
+ ```tsx
95
+ import React from "react";
96
+ import { Checkbox, CheckboxYGroup } from "@sberbusiness/triplex-next";
97
+
98
+ export const DefaultExample = () => (
99
+ <CheckboxYGroup>
100
+ {[1, 2, 3].map((value) => (
101
+ <Checkbox key={value} name="checkbox-y-group" value={value}>
102
+ Checkbox text
103
+ </Checkbox>
104
+ ))}
105
+ </CheckboxYGroup>
106
+ );
107
+ ```
108
+
109
+ ### CheckboxSizes
73
110
 
74
- `stories/Checkbox/examples/YGroupExample.tsx`
111
+ `stories/CheckboxYGroup/examples/SizesExample.tsx`
75
112
 
76
113
  ```tsx
77
114
  import React from "react";
78
- import { Checkbox, CheckboxYGroup, Col, EComponentSize, Row } from "@sberbusiness/triplex-next";
79
-
80
- export const YGroupExample = () => (
81
- <Row>
82
- <Col size={3}>
83
- <CheckboxYGroup aria-labelledby="checkbox-y-group-label">
84
- {[1, 2, 3, 4].map((value) => (
85
- <Checkbox key={value} name="checkbox-y-group" value={value} size={EComponentSize.SM}>
86
- Checkbox text
87
- </Checkbox>
88
- ))}
89
- </CheckboxYGroup>
90
- </Col>
91
- <Col size={3}>
92
- <CheckboxYGroup aria-labelledby="checkbox-y-group-label">
93
- {[1, 2, 3, 4].map((value) => (
94
- <Checkbox key={value} name="checkbox-y-group" value={value}>
95
- Checkbox text
96
- </Checkbox>
97
- ))}
98
- </CheckboxYGroup>
99
- </Col>
100
- <Col size={3}>
101
- <CheckboxYGroup aria-labelledby="checkbox-y-group-label">
102
- {[1, 2, 3, 4].map((value) => (
103
- <Checkbox key={value} name="checkbox-y-group" value={value} size={EComponentSize.LG}>
104
- Checkbox text
105
- </Checkbox>
106
- ))}
107
- </CheckboxYGroup>
108
- </Col>
109
- </Row>
115
+ import { Checkbox, CheckboxYGroup, EComponentSize } from "@sberbusiness/triplex-next";
116
+
117
+ const sizes = [
118
+ { label: "SM", size: EComponentSize.SM },
119
+ { label: "MD", size: EComponentSize.MD },
120
+ { label: "LG", size: EComponentSize.LG },
121
+ ] as const;
122
+
123
+ export const SizesExample = () => (
124
+ <div style={{ display: "flex", flexDirection: "column", gap: "24px" }}>
125
+ {sizes.map(({ label, size }) => (
126
+ <div key={label}>
127
+ <div style={{ marginBottom: "8px", fontSize: "16px", fontWeight: "700" }}>{label}</div>
128
+ <CheckboxYGroup aria-labelledby="checkbox-y-group-label">
129
+ {[1, 2, 3].map((value) => (
130
+ <Checkbox key={value} name={`checkbox-y-group-${label}`} value={value} size={size}>
131
+ Checkbox text
132
+ </Checkbox>
133
+ ))}
134
+ </CheckboxYGroup>
135
+ </div>
136
+ ))}
137
+ </div>
110
138
  );
111
139
  ```
112
140
 
@@ -0,0 +1,197 @@
1
+ ---
2
+ component: CodeText
3
+ category: Typography
4
+ related: [Text, Title, Caption]
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/CodeText.stories.tsx
29
+ version: "1.0"
30
+ ---
31
+
32
+ # CodeText
33
+
34
+ ## Назначение
35
+
36
+ Моноширинный текст (типографика). Рендерит инлайновый `<span>` (тег настраивается через `tag`) со шрифтом SBSansTextMono и фиксированной типографикой 14/20px (font-weight 400). Размер и начертание не настраиваются — в отличие от остальных компонентов семейства.
37
+
38
+ Используй когда: нужно выровнять символы по ширине — фрагменты кода, номера счетов/договоров, ИНН/БИК, суммы в таблицах, технические идентификаторы.
39
+
40
+ Не используй когда:
41
+ - Нужен обычный пропорциональный текст — используй `Text`.
42
+ - Нужен другой размер моноширинного текста — в семействе его нет; не задавай `font-size` через `style`/`className`, обсуди расширение API с командой.
43
+
44
+ ---
45
+
46
+ ## Варианты и props
47
+
48
+ Собственных обязательных props нет. Компонент принимает только общие props типографики (`ITypographyProps`).
49
+
50
+ ### Опциональные props
51
+
52
+ | Prop | Тип | По умолчанию | Описание |
53
+ |---|---|---|---|
54
+ | `type` | `EFontType` | `PRIMARY` | Цвет текста из общей палитры типографики (11 базовых + 11 `*_INVERT`). |
55
+ | `underline` | `boolean` | — | Подчёркивание. Совместим со `strikethrough` (оба сразу — `underline line-through`). |
56
+ | `strikethrough` | `boolean` | — | Зачёркивание. |
57
+ | `tag` | `string` | `"span"` | HTML-тег корневого элемента (например, `code` для семантики фрагмента кода). |
58
+
59
+ Компонент типизирован как `TCodeTextProps<T extends keyof JSX.IntrinsicElements>` и принимает все атрибуты соответствующего HTML-элемента через spread.
60
+
61
+ ### Ограничения
62
+
63
+ - Props `size`, `weight`, `line` отсутствуют намеренно: типографика фиксирована (SBSansTextMono, 14/20px, 400).
64
+ - Внешний тип `forwardRef<HTMLElement, TCodeTextProps<keyof JSX.IntrinsicElements>>` «растворяет» дженерик: TypeScript не сужает атрибуты под конкретный `tag`. Известное ограничение публичного API, не исправлять без обсуждения (breaking).
65
+ - `EFontType.BRAND` дополнительно задаёт `user-select: none` (особенность стилей `Typography.module.less`).
66
+
67
+ ---
68
+
69
+ ## Дизайн-токены
70
+
71
+ Цвета — общие CSS-переменные семейства Typography (см. frontmatter): `--triplex-next-Typography-{Type}_Color` и `--triplex-next-Typography-{Type}Invert_Color`.
72
+
73
+ Шрифт и размер — фиксированные значения в `styles/CodeText.module.less` (токенов для них нет).
74
+
75
+ ---
76
+
77
+ ## Инварианты
78
+
79
+ - **`forwardRef`** — обязателен, `ref` пробрасывается на корневой элемент.
80
+ - **`TCodeTextProps`**, **`ITypographyProps`**, значения **`EFontType`** — публичный API из barrel. Изменение — breaking change.
81
+ - **`displayName = "CodeText"`** — не убирать.
82
+ - Фиксированная типографика (SBSansTextMono, 14/20px) — контракт компонента; добавление `size`/`weight` — расширение публичного API, требует обсуждения.
83
+ - Классы собираются только через `clsx`.
84
+
85
+ ---
86
+
87
+ ## Accessibility
88
+
89
+ - Компонент не интерактивный: focus management и keyboard navigation не применимы.
90
+ - По умолчанию рендерится нейтральный `<span>`; для семантики фрагмента кода передай `tag="code"`.
91
+ - Цвет (`type`) не передаёт семантику для screen reader'ов.
92
+
93
+ ---
94
+
95
+ ## Связанные компоненты
96
+
97
+ - `Text` — основной пропорциональный текст интерфейса (B1–B4).
98
+ - `Title` — заголовки `h1`–`h3`.
99
+ - `Caption` — мелкие подписи и крупный показатель D1.
100
+
101
+ ---
102
+
103
+ ## Stories
104
+
105
+ Основные истории: `stories/Typography/CodeText.stories.tsx`
106
+ Файлы примеров: `stories/Typography/examples/CodeText/`
107
+
108
+ | Story | Example file | Что демонстрирует |
109
+ |---|---|---|
110
+ | `Playground` | `Playground.tsx` | Интерактивный контроль props `type`, `tag`, `underline`, `strikethrough` |
111
+ | `Default` | `Default.tsx` | Минимальное использование |
112
+ | `Types` | `Types.tsx` | Все значения `EFontType`: базовые + инвертированные на тёмной подложке |
113
+ | `Decorations` | `Decorations.tsx` | `underline`, `strikethrough` и их комбинация |
114
+
115
+ ---
116
+
117
+ ## История изменений
118
+
119
+ | Дата | Изменение |
120
+ |---|---|
121
+ | 2026-07-20 | Создан документ. AI-рефакторинг: decoration-логика вынесена во внутренний хелпер `getTextDecorationClassName` (`utils.ts`), unit-тесты дополнены (дефолтный `type`, класс `brand`). Stories переведены на modern pattern (`examples/CodeText/`). |
122
+
123
+ ---
124
+
125
+ ## Примеры использования
126
+
127
+ ### Default
128
+
129
+ `stories/Typography/examples/CodeText/Default.tsx`
130
+
131
+ ```tsx
132
+ import React from "react";
133
+ import { CodeText } from "@sberbusiness/triplex-next";
134
+
135
+ export const Default = () => <CodeText>const greeting = &quot;Hello, World!&quot;;</CodeText>;
136
+ ```
137
+
138
+ ### Types
139
+
140
+ `stories/Typography/examples/CodeText/Types.tsx`
141
+
142
+ ```tsx
143
+ import React from "react";
144
+ import { CodeText, EFontType } from "@sberbusiness/triplex-next";
145
+
146
+ export const Types = () => (
147
+ <div style={{ display: "flex", gap: "16px" }}>
148
+ <div style={{ display: "flex", flexDirection: "column", gap: "16px" }}>
149
+ <CodeText type={EFontType.PRIMARY}>Primary</CodeText>
150
+ <CodeText type={EFontType.COMPLEMENTARY}>Complementary</CodeText>
151
+ <CodeText type={EFontType.SECONDARY}>Secondary</CodeText>
152
+ <CodeText type={EFontType.TERTIARY}>Tertiary</CodeText>
153
+ <CodeText type={EFontType.BRAND}>Brand</CodeText>
154
+ <CodeText type={EFontType.INFO}>Info</CodeText>
155
+ <CodeText type={EFontType.SUCCESS}>Success</CodeText>
156
+ <CodeText type={EFontType.WARNING}>Warning</CodeText>
157
+ <CodeText type={EFontType.ERROR}>Error</CodeText>
158
+ <CodeText type={EFontType.DISABLED}>Disabled</CodeText>
159
+ <CodeText type={EFontType.SYSTEM}>System</CodeText>
160
+ </div>
161
+ <div style={{ display: "flex", flexDirection: "column", gap: "16px", backgroundColor: "#1F1F22" }}>
162
+ <CodeText type={EFontType.PRIMARY_INVERT}>Primary Invert</CodeText>
163
+ <CodeText type={EFontType.COMPLEMENTARY_INVERT}>Complementary Invert</CodeText>
164
+ <CodeText type={EFontType.SECONDARY_INVERT}>Secondary Invert</CodeText>
165
+ <CodeText type={EFontType.TERTIARY_INVERT}>Tertiary Invert</CodeText>
166
+ <CodeText type={EFontType.BRAND_INVERT}>Brand Invert</CodeText>
167
+ <CodeText type={EFontType.INFO_INVERT}>Info Invert</CodeText>
168
+ <CodeText type={EFontType.SUCCESS_INVERT}>Success Invert</CodeText>
169
+ <CodeText type={EFontType.WARNING_INVERT}>Warning Invert</CodeText>
170
+ <CodeText type={EFontType.ERROR_INVERT}>Error Invert</CodeText>
171
+ <CodeText type={EFontType.DISABLED_INVERT}>Disabled Invert</CodeText>
172
+ <CodeText type={EFontType.SYSTEM_INVERT}>System Invert</CodeText>
173
+ </div>
174
+ </div>
175
+ );
176
+ ```
177
+
178
+ ### Decorations
179
+
180
+ `stories/Typography/examples/CodeText/Decorations.tsx`
181
+
182
+ ```tsx
183
+ import React from "react";
184
+ import { CodeText } from "@sberbusiness/triplex-next";
185
+
186
+ export const Decorations = () => (
187
+ <div style={{ display: "flex", flexDirection: "column", gap: "16px" }}>
188
+ <CodeText>const x = 42;</CodeText>
189
+ <CodeText underline>const x = 42; // с подчеркиванием</CodeText>
190
+ <CodeText strikethrough>const x = 42; // с зачеркиванием</CodeText>
191
+ <CodeText underline strikethrough>
192
+ const x = 42; // с подчеркиванием и зачеркиванием
193
+ </CodeText>
194
+ </div>
195
+ );
196
+ ```
197
+