@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.
- package/README.md +10 -0
- package/bundle/components/AlertContext.md +268 -0
- package/bundle/components/BodyPage.md +186 -0
- package/bundle/components/Button.md +93 -85
- package/bundle/components/ButtonDropdown.md +36 -70
- package/bundle/components/ButtonDropdownExtended.md +422 -0
- package/bundle/components/ButtonIcon.md +41 -48
- package/bundle/components/Caption.md +291 -0
- package/bundle/components/Checkbox.md +43 -122
- package/bundle/components/CheckboxXGroup.md +109 -46
- package/bundle/components/CheckboxYGroup.md +77 -49
- package/bundle/components/CodeText.md +197 -0
- package/bundle/components/Col.md +311 -162
- package/bundle/components/CollapsibleTree.md +584 -0
- package/bundle/components/CollapsibleTreeExtended.md +422 -0
- package/bundle/components/Dropdown.md +748 -346
- package/bundle/components/EmptyView.md +14 -15
- package/bundle/components/FooterPage.md +203 -0
- package/bundle/components/Gap.md +115 -57
- package/bundle/components/HeaderPage.md +226 -0
- package/bundle/components/HelpBox.md +45 -84
- package/bundle/components/ImageGallery.md +423 -0
- package/bundle/components/ImageGalleryExtended.md +606 -0
- package/bundle/components/LightBox.md +2252 -233
- package/bundle/components/List.md +216 -183
- package/bundle/components/ListActionItem.md +157 -0
- package/bundle/components/ListItem.md +276 -0
- package/bundle/components/ListItemControlsButton.md +103 -0
- package/bundle/components/ListItemControlsButtonDropdown.md +107 -0
- package/bundle/components/ListItemSelectable.md +99 -0
- package/bundle/components/ListItemTable.md +390 -0
- package/bundle/components/ListMaster.md +876 -156
- package/bundle/components/ListMasterFooter.md +80 -0
- package/bundle/components/ListMasterHeader.md +86 -0
- package/bundle/components/ListSortable.md +153 -0
- package/bundle/components/ListSortableItem.md +175 -0
- package/bundle/components/ListTableItem.md +391 -0
- package/bundle/components/ModalWindow.md +427 -237
- package/bundle/components/MonthYearField.md +145 -109
- package/bundle/components/Notification.md +625 -155
- package/bundle/components/Overlay.md +271 -170
- package/bundle/components/Page.md +284 -186
- package/bundle/components/Pagination.md +206 -229
- package/bundle/components/Portal.md +131 -67
- package/bundle/components/Row.md +171 -69
- package/bundle/components/Text.md +320 -0
- package/bundle/components/TextField.md +364 -97
- package/bundle/components/Title.md +296 -0
- package/bundle/guides/codestyle.md +38 -11
- package/bundle/guides/commits.md +119 -26
- package/bundle/guides/context.md +34 -30
- package/bundle/guides/stories.md +110 -40
- package/bundle/guides/template.md +3 -7
- package/bundle/guides/tests.md +48 -2
- package/bundle/manifest.json +275 -30
- package/bundle/release-notes/1.26.0.mdx +33 -2
- package/bundle/release-notes/1.27.0.mdx +43 -0
- package/bundle/release-notes/1.28.0.mdx +25 -0
- package/bundle/release-notes/1.29.0.mdx +47 -0
- package/bundle/release-notes/1.30.0.mdx +56 -0
- package/bundle/release-notes/1.31.0.mdx +52 -0
- package/bundle/release-notes/1.32.0.mdx +35 -0
- package/bundle/release-notes/1.33.0.mdx +61 -0
- package/bundle/release-notes/1.34.0.mdx +35 -0
- package/bundle/release-notes/1.35.0.mdx +21 -0
- package/bundle/release-notes/1.35.1.mdx +11 -0
- package/bundle/release-notes/1.36.0.mdx +21 -0
- package/bundle/release-notes/1.37.0.mdx +71 -0
- package/bundle/release-notes/1.38.0.mdx +36 -0
- package/bundle/release-notes/1.39.0.mdx +66 -0
- package/bundle/release-notes/1.40.0.mdx +27 -0
- package/bundle/release-notes/1.41.0.mdx +7 -0
- 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/
|
|
6
|
+
stories: stories/CheckboxXGroup/CheckboxXGroup.stories.tsx
|
|
9
7
|
version: "1.0"
|
|
10
8
|
---
|
|
11
9
|
|
|
12
10
|
# CheckboxXGroup
|
|
13
11
|
|
|
14
12
|
## Назначение
|
|
15
|
-
|
|
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
|
-
-
|
|
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
|
-
##
|
|
38
|
-
|
|
39
|
-
|
|
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
|
-
|
|
56
|
-
|
|
70
|
+
|
|
71
|
+
Основные истории: `stories/CheckboxXGroup/CheckboxXGroup.stories.tsx`
|
|
72
|
+
Файлы примеров: `stories/CheckboxXGroup/examples/`
|
|
57
73
|
|
|
58
74
|
| Story | Example file | Что демонстрирует |
|
|
59
75
|
|---|---|---|
|
|
60
|
-
| `
|
|
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
|
-
###
|
|
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/
|
|
147
|
+
`stories/CheckboxXGroup/examples/IndentsExample.tsx`
|
|
76
148
|
|
|
77
149
|
```tsx
|
|
78
150
|
import React from "react";
|
|
79
|
-
import { Checkbox, CheckboxXGroup
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
</
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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/
|
|
6
|
+
stories: stories/CheckboxYGroup/CheckboxYGroup.stories.tsx
|
|
9
7
|
version: "1.0"
|
|
10
8
|
---
|
|
11
9
|
|
|
12
10
|
# CheckboxYGroup
|
|
13
11
|
|
|
14
12
|
## Назначение
|
|
15
|
-
|
|
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
|
-
##
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
|
|
55
|
-
|
|
68
|
+
|
|
69
|
+
Основные истории: `stories/CheckboxYGroup/CheckboxYGroup.stories.tsx`
|
|
70
|
+
Файлы примеров: `stories/CheckboxYGroup/examples/`
|
|
56
71
|
|
|
57
72
|
| Story | Example file | Что демонстрирует |
|
|
58
73
|
|---|---|---|
|
|
59
|
-
| `
|
|
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
|
-
###
|
|
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/
|
|
111
|
+
`stories/CheckboxYGroup/examples/SizesExample.tsx`
|
|
75
112
|
|
|
76
113
|
```tsx
|
|
77
114
|
import React from "react";
|
|
78
|
-
import { Checkbox, CheckboxYGroup,
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
Checkbox
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
</
|
|
99
|
-
|
|
100
|
-
|
|
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 = "Hello, World!";</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
|
+
|