@sberbusiness/triplex-next-mcp-server 1.43.0-beta → 1.45.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 (85) hide show
  1. package/README.md +7 -6
  2. package/bundle/components/AlertContext.md +11 -8
  3. package/bundle/components/AlertProcess.md +16 -12
  4. package/bundle/components/Badge.md +6 -3
  5. package/bundle/components/BodyPage.md +72 -4
  6. package/bundle/components/Button.md +46 -43
  7. package/bundle/components/ButtonDropdownExtended.md +3 -2
  8. package/bundle/components/ButtonIcon.md +7 -4
  9. package/bundle/components/Calendar.md +62 -59
  10. package/bundle/components/Caption.md +26 -23
  11. package/bundle/components/Checkbox.md +32 -29
  12. package/bundle/components/CheckboxTreeExtended.md +9 -5
  13. package/bundle/components/Chip.md +44 -41
  14. package/bundle/components/CodeText.md +26 -23
  15. package/bundle/components/Col.md +1 -2
  16. package/bundle/components/CollapsibleTree.md +8 -5
  17. package/bundle/components/CollapsibleTreeExtended.md +6 -1
  18. package/bundle/components/DatePickerExtended.md +409 -262
  19. package/bundle/components/Dropdown.md +33 -28
  20. package/bundle/components/EmptyView.md +12 -5
  21. package/bundle/components/ExpandAnimation.md +263 -218
  22. package/bundle/components/Footer.md +235 -278
  23. package/bundle/components/FooterPage.md +6 -2
  24. package/bundle/components/FormField.md +44 -41
  25. package/bundle/components/FormGroup.md +192 -52
  26. package/bundle/components/Header.md +491 -211
  27. package/bundle/components/HeaderPage.md +6 -2
  28. package/bundle/components/ImageGallery.md +33 -34
  29. package/bundle/components/ImageGalleryExtended.md +33 -34
  30. package/bundle/components/Island.md +52 -14
  31. package/bundle/components/LightBox.md +25 -18
  32. package/bundle/components/Link.md +211 -96
  33. package/bundle/components/ListActionItem.md +7 -4
  34. package/bundle/components/ListItem.md +11 -8
  35. package/bundle/components/ListItemControlsButton.md +16 -13
  36. package/bundle/components/ListItemControlsButtonDropdown.md +9 -6
  37. package/bundle/components/ListItemSelectable.md +7 -4
  38. package/bundle/components/ListMasterFooter.md +8 -5
  39. package/bundle/components/ListMasterHeader.md +8 -5
  40. package/bundle/components/ListSortableItem.md +11 -8
  41. package/bundle/components/ListTableItem.md +7 -4
  42. package/bundle/components/LoaderMiddle.md +7 -4
  43. package/bundle/components/LoaderScreen.md +11 -8
  44. package/bundle/components/LoaderSmall.md +7 -4
  45. package/bundle/components/Marker.md +184 -69
  46. package/bundle/components/MarkerStatus.md +206 -88
  47. package/bundle/components/MaskedField.md +2 -4
  48. package/bundle/components/MasterTable.md +602 -0
  49. package/bundle/components/ModalWindow.md +7 -4
  50. package/bundle/components/MultiselectField.md +2183 -132
  51. package/bundle/components/Notification.md +12 -9
  52. package/bundle/components/Overlay.md +33 -5
  53. package/bundle/components/Page.md +2 -2
  54. package/bundle/components/Pagination.md +27 -21
  55. package/bundle/components/Row.md +1 -1
  56. package/bundle/components/SelectExtendedField.md +3 -3
  57. package/bundle/components/SelectField.md +466 -148
  58. package/bundle/components/SliderExtended.md +39 -36
  59. package/bundle/components/SmallInput.md +194 -51
  60. package/bundle/components/Suggest.md +535 -99
  61. package/bundle/components/SwipeableArea.md +428 -79
  62. package/bundle/components/TableBasic.md +2302 -0
  63. package/bundle/components/TabsExtended.md +24 -21
  64. package/bundle/components/Tag.md +263 -78
  65. package/bundle/components/Text.md +28 -25
  66. package/bundle/components/TextField.md +3 -4
  67. package/bundle/components/ThemeProvider.md +50 -1
  68. package/bundle/components/Title.md +26 -23
  69. package/bundle/components/Tooltip.md +24 -21
  70. package/bundle/components/TopOverlay.md +368 -89
  71. package/bundle/components/TreeView.md +343 -166
  72. package/bundle/components/TreeViewNode.md +436 -0
  73. package/bundle/guides/codestyle.md +3 -0
  74. package/bundle/guides/commits.md +106 -26
  75. package/bundle/guides/context.md +84 -12
  76. package/bundle/guides/guidelines.md +321 -0
  77. package/bundle/guides/template.md +22 -12
  78. package/bundle/manifest.json +54 -20
  79. package/bundle/release-notes/1.44.0.mdx +113 -0
  80. package/bundle/release-notes/1.45.0.mdx +124 -0
  81. package/bundle/release-notes/1.46.0.mdx +7 -0
  82. package/bundle/tokens.json +6362 -0
  83. package/dist/index.js +177 -28
  84. package/dist/index.js.map +1 -1
  85. package/package.json +1 -1
@@ -3,26 +3,26 @@ component: FormField
3
3
  category: FormField
4
4
  related: [FormFieldLabel, FormFieldInput, FormFieldTextarea, FormFieldTarget, FormFieldMaskedInput, FormFieldPrefix, FormFieldPostfix, FormFieldClear, FormFieldDescription, FormFieldCounter, FormGroup, TextField, TextareaField, MaskedField, SelectField, SuggestField, DateField]
5
5
  tokens:
6
- - --triplex-next-FormField-Background_Default
7
- - --triplex-next-FormField-Background_Hover
8
- - --triplex-next-FormField-Background_Active
9
- - --triplex-next-FormField-Background_Disabled
10
- - --triplex-next-FormField-Background_Error
11
- - --triplex-next-FormField-Background_Error_Hover
12
- - --triplex-next-FormField-Background_Warning
13
- - --triplex-next-FormField-Background_Warning_Hover
14
- - --triplex-next-FormField-Shadow_Default
15
- - --triplex-next-FormField-Shadow_Active
16
- - --triplex-next-FormField-Shadow_Error_Active
17
- - --triplex-next-FormField-Shadow_Warning_Active
18
- - --triplex-next-FormField-Input_Color_Default
19
- - --triplex-next-FormField-Input_Color_Disabled
20
- - --triplex-next-FormField-Label_Color_Default
21
- - --triplex-next-FormField-Label_Color_Disabled
22
- - --triplex-next-FormField-Placeholder_Color
23
- - --triplex-next-FormField-Target_Color_Default
24
- - --triplex-next-FormField-Target_Color_Disabled
25
- - --triplex-next-FormField-Target_PlaceholderColor_Default
6
+ - FormField.Background_Default
7
+ - FormField.Background_Hover
8
+ - FormField.Background_Active
9
+ - FormField.Background_Disabled
10
+ - FormField.Background_Error
11
+ - FormField.Background_Error_Hover
12
+ - FormField.Background_Warning
13
+ - FormField.Background_Warning_Hover
14
+ - FormField.Shadow_Default
15
+ - FormField.Shadow_Active
16
+ - FormField.Shadow_Error_Active
17
+ - FormField.Shadow_Warning_Active
18
+ - FormField.Input_Color_Default
19
+ - FormField.Input_Color_Disabled
20
+ - FormField.Label_Color_Default
21
+ - FormField.Label_Color_Disabled
22
+ - FormField.Placeholder_Color
23
+ - FormField.Target_Color_Default
24
+ - FormField.Target_Color_Disabled
25
+ - FormField.Target_PlaceholderColor_Default
26
26
  stories: stories/FormField/FormField.stories.tsx
27
27
  version: "1.0"
28
28
  ---
@@ -69,27 +69,30 @@ version: "1.0"
69
69
 
70
70
  ## Дизайн-токены
71
71
 
72
- ```
73
- --triplex-next-FormField-Background_Default
74
- --triplex-next-FormField-Background_Hover
75
- --triplex-next-FormField-Background_Active
76
- --triplex-next-FormField-Background_Disabled
77
- --triplex-next-FormField-Background_Error
78
- --triplex-next-FormField-Background_Error_Hover
79
- --triplex-next-FormField-Background_Warning
80
- --triplex-next-FormField-Background_Warning_Hover
81
- --triplex-next-FormField-Shadow_Default
82
- --triplex-next-FormField-Shadow_Active
83
- --triplex-next-FormField-Shadow_Error_Active
84
- --triplex-next-FormField-Shadow_Warning_Active
85
- --triplex-next-FormField-Input_Color_Default
86
- --triplex-next-FormField-Input_Color_Disabled
87
- --triplex-next-FormField-Label_Color_Default
88
- --triplex-next-FormField-Label_Color_Disabled
89
- --triplex-next-FormField-Placeholder_Color
90
- --triplex-next-FormField-Target_Color_Default
91
- --triplex-next-FormField-Target_Color_Disabled
92
- --triplex-next-FormField-Target_PlaceholderColor_Default
72
+ Переопределяются через `ThemeProvider` (prop `tokens`) — см. `ThemeProvider-ai.md` →
73
+ «Как переопределять токены». Значения по умолчанию — `src/components/DesignTokens/components/FormField.ts`.
74
+
75
+ ```text
76
+ FormField.Background_Default
77
+ FormField.Background_Hover
78
+ FormField.Background_Active
79
+ FormField.Background_Disabled
80
+ FormField.Background_Error
81
+ FormField.Background_Error_Hover
82
+ FormField.Background_Warning
83
+ FormField.Background_Warning_Hover
84
+ FormField.Shadow_Default
85
+ FormField.Shadow_Active
86
+ FormField.Shadow_Error_Active
87
+ FormField.Shadow_Warning_Active
88
+ FormField.Input_Color_Default
89
+ FormField.Input_Color_Disabled
90
+ FormField.Label_Color_Default
91
+ FormField.Label_Color_Disabled
92
+ FormField.Placeholder_Color
93
+ FormField.Target_Color_Default
94
+ FormField.Target_Color_Disabled
95
+ FormField.Target_PlaceholderColor_Default
93
96
  ```
94
97
 
95
98
  ---
@@ -1,11 +1,9 @@
1
1
  ---
2
2
  component: FormGroup
3
- category: Forms
4
- figma-node: ""
5
- figma-file: ""
6
- related: [FormField, TextField, SelectField, HelpBox, Alert]
3
+ category: FormField
4
+ related: [FormField, TextField, MaskedField]
7
5
  tokens: []
8
- stories: ""
6
+ stories: stories/FormGroup/FormGroup.stories.tsx
9
7
  version: "1.0"
10
8
  ---
11
9
 
@@ -13,87 +11,229 @@ version: "1.0"
13
11
 
14
12
  ## Назначение
15
13
 
16
- Разметочная обёртка-`<div>` для группировки элементов формы (`FormField`,
17
- `HelpBox`, `Alert`, `Description`). Сама по себе **не добавляет стилей** —
18
- только прокидывает `ref` и все `HTMLDivAttributes`. Смысл — именованная
19
- точка в DOM для data-атрибутов и семантики формы.
14
+ Контейнер формы: объединяет поле ввода с относящимися к нему элементами — `FormField`,
15
+ `FormFieldDescription`, `HelpBox`, `AlertContext` — в один блок. Части передаются декларативно
16
+ через `children`, поэтому каждой можно задать свои props и data-атрибуты.
20
17
 
21
- Используй когда: нужно сгруппировать несколько полей логически (блок "контакты",
22
- "адрес") и иметь стабильный wrapper под `data-*`/`aria-*`.
23
- Не используй как: общий flex-контейнер — возьми `Row`/`Col`.
18
+ Рендерит один `div` без собственных классов, стилей и отступов: расстояния между частями
19
+ задают сами части (`FormFieldDescription`, `Gap`), а не группа.
20
+
21
+ Используй когда: поле нужно показать вместе с описанием, счётчиком, текстом ошибки,
22
+ подсказкой или сообщением `AlertContext`, и эти элементы должны читаться как одна логическая
23
+ группа формы.
24
+ Не используй когда: достаточно готовой обёртки над полем — `TextField`, `TextareaField`,
25
+ `MaskedField`, `AmountField` уже собирают `FormGroup` + `FormField` внутри себя, и снаружи
26
+ их в `FormGroup` заворачивать не нужно.
24
27
 
25
28
  ---
26
29
 
27
- ## Файловая структура
30
+ ## Варианты и props
28
31
 
29
- ```text
30
- src/components/FormGroup/
31
- ├── FormGroup.tsx # forwardRef, <div>, passthrough props
32
- └── index.ts # export * from "./FormGroup"
33
- ```
32
+ Настраиваемых props у компонента нет: он принимает `children` и стандартные атрибуты `div`.
33
+ Внутренний `IFormGroupProps` расширяет `React.HTMLAttributes<HTMLDivElement>`:
34
+ все стандартные атрибуты `div` (включая `className`, `style`, `id`, `role`, `aria-*`, `data-*`
35
+ и обработчики событий) уходят через `...rest` на корневой элемент.
34
36
 
35
- Нет styles, нет tests, нет stories. Демонстрируется опосредованно через
36
- stories типовых полей, где `FormGroup` иногда обёрнут вокруг формы.
37
+ ### Опциональные props
37
38
 
38
- ---
39
+ | Prop | Тип | По умолчанию | Описание |
40
+ | ---------- | ----------------- | ------------ | -------------------------------------------------------------------------- |
41
+ | `children` | `React.ReactNode` | — | Части группы: поле ввода и относящиеся к нему подсказки и сообщения. |
39
42
 
40
- ## Варианты и props
43
+ Поскольку настраиваемых props нет, у компонента нет story `Playground`.
41
44
 
42
- ### `IFormGroupProps extends React.HTMLAttributes<HTMLDivElement>`
45
+ ---
43
46
 
44
- | Prop | Тип | Описание |
45
- |---|---|---|
46
- | `children` | `ReactNode` | Обычно несколько `FormField`/`Alert`/`HelpBox`. |
47
- | `className`, `style`, `...HTMLDivAttributes` | — | Стандартные. |
47
+ ## Дизайн-токены
48
48
 
49
- Интерфейс объявлен **локально, не экспортирован**. Если понадобится
50
- расширить props — сначала экспортировать интерфейс.
49
+ Собственных CSS-переменных нет — у компонента нет файла стилей. Внешний вид группы
50
+ целиком определяют вложенные компоненты.
51
51
 
52
52
  ---
53
53
 
54
54
  ## Инварианты
55
55
 
56
- - **`forwardRef`** — есть, не убирать.
57
- - **Без собственных классов/стилей** — осознанно. Если добавить flex/padding,
58
- сломается большинство существующих интеграций, где вёрстку задают потомки.
59
- - Все атрибуты прокидываются на корневой `<div>` через spread — включая
60
- `className`/`style`. Потребитель сам задаёт лейаут.
56
+ - `forwardRef<HTMLDivElement>` — не убирать. Ref указывает на корневой `div` — тот же
57
+ элемент, который получает `className` и `...rest`.
58
+ - Корневой элемент — ровно один `div`, а `children` рендерятся в него напрямую, без
59
+ промежуточных обёрток. Уровень вложенности виден потребителям в DOM и в их CSS-селекторах,
60
+ поэтому добавление обёртки — наблюдаемое изменение и требует записи в release notes.
61
+ - Компонент не задаёт собственных классов и отступов. Появление здесь `margin`/`gap`
62
+ сдвинет вёрстку всех форм в библиотеке и у потребителей: `FormGroup` используется внутри
63
+ `TextFieldBase` (а через него — во всех полях, построенных на нём: `TextField`,
64
+ `MaskedField`, `TextareaField`, `AmountField`, `NumberField`, `SuggestField`) и в
65
+ `SMSFieldInput`.
66
+ - `displayName = "FormGroup"` — не менять.
67
+ - Экспорт `FormGroup` идёт в barrel `src/components/FormGroup/index.ts` и далее в корневой
68
+ `src/components/index.ts` — сохранять. `IFormGroupProps` наружу не экспортируется; добавление
69
+ этого экспорта — расширение публичного API, отдельное решение владельца.
61
70
 
62
71
  ---
63
72
 
64
73
  ## Accessibility
65
74
 
66
- - `<div>` без ARIA-роли. Если группа полей должна объявляться как
67
- `role="group"`/`role="radiogroup"` — потребитель передаёт `role` и
68
- `aria-labelledby`/`aria-label` через `...rest`.
69
- - Fieldset-семантика (`<fieldset>` + `<legend>`) не используется;
70
- FormGroup не пытается её эмулировать.
71
-
72
- ---
73
-
74
- ## Дизайн-токены
75
+ Собственного a11y-поведения нет: это структурный контейнер без роли и без интерактивности.
76
+ Семантику задаёт потребитель через проброшенные атрибуты — например `role="group"` вместе с
77
+ `aria-labelledby`, если группа должна объявляться скринридером как единое целое.
75
78
 
76
- Нет.
79
+ Лейбл связывается с полем внутри `FormField`: `FormFieldLabel` берёт `htmlFor` из `targetId`
80
+ в `FormFieldContext`. Описание автоматически не связывается — `aria-describedby` на элементе
81
+ ввода (как и `aria-invalid` для ошибки) задаёт потребитель, см. `FormField-ai.md`. `FormGroup`
82
+ не участвует ни в том, ни в другом.
77
83
 
78
84
  ---
79
85
 
80
86
  ## Связанные компоненты
81
87
 
82
- - `FormField` — основной контент внутри FormGroup.
83
- - `HelpBox`, `Alert` — вспомогательные элементы формы.
84
- - `Row`, `Col`, `Gap` — предпочтительны, если нужен layout, а не именованная группа.
88
+ - `FormField` — само поле ввода; основной ребёнок группы. О `FormGroup` не знает и на нём
89
+ не построен: это `FormField` кладут внутрь группы, а не наоборот.
90
+ - `FormFieldDescription` (часть семейства `FormField`) — описание, текст ошибки и счётчик
91
+ под полем; второй типичный ребёнок группы, отступ от поля задаёт сам (`padding-top`).
92
+ - `TextField`, `MaskedField` — готовые однострочные поля; компактная альтернатива ручной
93
+ сборке `FormGroup` + `FormField`. Внутри они уже используют `FormGroup` (через
94
+ `TextFieldBase`), поэтому оборачивать их в него ещё раз не нужно.
95
+ - `HelpBox`, `AlertContext` — подсказка и сообщение, которые кладут в группу рядом с полем.
85
96
 
86
97
  ---
87
98
 
88
99
  ## Stories
89
100
 
90
- Нет собственных stories. Используется в примерах `TextField`, `SelectField`,
91
- `SelectExtendedField`, `FormField`.
101
+ Основные истории: `stories/FormGroup/FormGroup.stories.tsx`
102
+ Файлы примеров: `stories/FormGroup/examples/`
103
+
104
+ | Story | Example file | Что демонстрирует |
105
+ | ------------- | ----------------- | ------------------------------------------------------------------------------------- |
106
+ | `Default` | `Default.tsx` | Минимальная группа: поле с лейблом и описанием под ним |
107
+ | `Example` | `Example.tsx` | Production-like форма: поле с описанием и поле с ошибкой плюс `AlertContext` в группе |
108
+ | `VisualTests` | `VisualTests.tsx` | Варианты наполнения: только поле, поле с описанием, ошибка, группа с `AlertContext`, поле с `HelpBox` |
109
+
110
+ ### Почему stories участвуют в скриншот-тестах
111
+
112
+ Своей разметки у `FormGroup` нет, поэтому baseline'ы (`__screenshots__/formgroup--*`)
113
+ фиксируют не саму группу, а композицию её частей: `FormField`, `FormFieldDescription`,
114
+ `AlertContext`, `HelpBox`. Формально это близко к случаю «компонент без визуального
115
+ интерфейса» из `stories-guide.md` § «Скриншот-тесты», где набор исключают целиком через
116
+ `testRunner: { skip: true }`. Здесь решено baseline'ы держать: они страхуют типовые
117
+ композиции форм, которые потребители копируют из примеров. Обратная сторона — перекраска
118
+ `FormField` или `AlertContext` роняет визуальные тесты `FormGroup` и требует перегенерации;
119
+ это ожидаемо, а не регрессия группы. Отсутствие лишней обёртки вокруг `children` проверяет
120
+ unit-тест, а не скриншот.
92
121
 
93
122
  ---
94
123
 
95
124
  ## История изменений
96
125
 
97
- | Дата | Изменение |
98
- |---|---|
99
- | 2026-04-18 | Создан документ |
126
+ | Дата | Изменение |
127
+ | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
128
+ | 2026-08-28 | Создан документ. AI-рефакторинг (уточнён JSDoc компонента, `children` задокументирован явно), добавлены unit-тесты и stories в modern pattern. Публичный API не менялся. |
129
+
130
+ ---
131
+
132
+ ## Примеры использования
133
+
134
+ ### Default
135
+
136
+ `stories/FormGroup/examples/Default.tsx`
137
+
138
+ ```tsx
139
+ import React, { useState } from "react";
140
+ import {
141
+ EFontType,
142
+ ETextSize,
143
+ FormField,
144
+ FormFieldDescription,
145
+ FormFieldInput,
146
+ FormFieldLabel,
147
+ FormGroup,
148
+ Text,
149
+ } from "@sberbusiness/triplex-next";
150
+
151
+ export const Default = () => {
152
+ const [value, setValue] = useState("");
153
+
154
+ return (
155
+ <div style={{ maxWidth: "300px" }}>
156
+ <FormGroup>
157
+ <FormField>
158
+ <FormFieldLabel>Название поля</FormFieldLabel>
159
+ <FormFieldInput value={value} onChange={(event) => setValue(event.target.value)} />
160
+ </FormField>
161
+ <FormFieldDescription>
162
+ <Text tag="div" size={ETextSize.B4} type={EFontType.SECONDARY}>
163
+ Описание поля
164
+ </Text>
165
+ </FormFieldDescription>
166
+ </FormGroup>
167
+ </div>
168
+ );
169
+ };
170
+ ```
171
+
172
+ ### Example
173
+
174
+ `stories/FormGroup/examples/Example.tsx`
175
+
176
+ ```tsx
177
+ import React, { useState } from "react";
178
+ import {
179
+ AlertContext,
180
+ EAlertType,
181
+ EFontType,
182
+ EFormFieldStatus,
183
+ ETextSize,
184
+ FormField,
185
+ FormFieldDescription,
186
+ FormFieldInput,
187
+ FormFieldLabel,
188
+ FormGroup,
189
+ Gap,
190
+ Text,
191
+ } from "@sberbusiness/triplex-next";
192
+
193
+ export const Example = () => {
194
+ const [account, setAccount] = useState("40702810400000012345");
195
+ const [amount, setAmount] = useState("");
196
+
197
+ return (
198
+ <div style={{ maxWidth: "360px" }}>
199
+ <FormGroup>
200
+ <FormField>
201
+ <FormFieldLabel>Счёт списания</FormFieldLabel>
202
+ <FormFieldInput value={account} onChange={(event) => setAccount(event.target.value)} />
203
+ </FormField>
204
+ <FormFieldDescription>
205
+ <Text tag="div" size={ETextSize.B4} type={EFontType.SECONDARY}>
206
+ Доступно 125 000,00 ₽
207
+ </Text>
208
+ </FormFieldDescription>
209
+ </FormGroup>
210
+
211
+ <Gap size={24} />
212
+
213
+ <FormGroup>
214
+ <FormField status={EFormFieldStatus.ERROR}>
215
+ <FormFieldLabel>Сумма платежа</FormFieldLabel>
216
+ <FormFieldInput
217
+ value={amount}
218
+ onChange={(event) => setAmount(event.target.value)}
219
+ aria-invalid
220
+ aria-describedby="amount-error"
221
+ />
222
+ </FormField>
223
+ <FormFieldDescription id="amount-error">
224
+ <Text tag="div" size={ETextSize.B4} type={EFontType.ERROR}>
225
+ Укажите сумму платежа
226
+ </Text>
227
+ </FormFieldDescription>
228
+
229
+ <Gap size={8} />
230
+
231
+ <AlertContext type={EAlertType.INFO}>
232
+ Платёж на сумму более 150 000 ₽ уходит в банк на подтверждение.
233
+ </AlertContext>
234
+ </FormGroup>
235
+ </div>
236
+ );
237
+ };
238
+ ```
239
+