@sberbusiness/triplex-next-mcp-server 1.46.0-beta → 1.48.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 (48) hide show
  1. package/README.md +7 -7
  2. package/bundle/components/AmountField.md +222 -323
  3. package/bundle/components/Avatar.md +138 -146
  4. package/bundle/components/CardStatic.md +402 -0
  5. package/bundle/components/CheckboxTree.md +157 -215
  6. package/bundle/components/CheckboxTreeExtended.md +7 -7
  7. package/bundle/components/ChipGroup.md +1 -1
  8. package/bundle/components/ChipMonthYearPicker.md +4 -4
  9. package/bundle/components/ChipSuggest.md +7 -6
  10. package/bundle/components/CollapsibleTree.md +8 -4
  11. package/bundle/components/CollapsibleTreeExtended.md +8 -6
  12. package/bundle/components/Confirm.md +346 -281
  13. package/bundle/components/DateRange.md +351 -210
  14. package/bundle/components/FooterPage.md +1 -0
  15. package/bundle/components/FormField.md +11 -4
  16. package/bundle/components/FormGroup.md +3 -2
  17. package/bundle/components/LightBox.md +8 -0
  18. package/bundle/components/ListMaster.md +2 -2
  19. package/bundle/components/ListTableItem.md +6 -6
  20. package/bundle/components/MonthYearField.md +15 -4
  21. package/bundle/components/Slider.md +389 -97
  22. package/bundle/components/SliderRange.md +486 -105
  23. package/bundle/components/StatusTracker.md +386 -94
  24. package/bundle/components/Stepper.md +355 -102
  25. package/bundle/components/StepperExtended.md +633 -0
  26. package/bundle/components/SuggestField.md +1049 -96
  27. package/bundle/components/SwipeableArea.md +7 -7
  28. package/bundle/components/Tabs.md +265 -92
  29. package/bundle/components/TabsExtended.md +18 -18
  30. package/bundle/components/TabsLine.md +301 -127
  31. package/bundle/components/TagColor.md +187 -66
  32. package/bundle/components/TagGroup.md +184 -48
  33. package/bundle/components/TextareaField.md +278 -70
  34. package/bundle/components/TopOverlay.md +17 -1
  35. package/bundle/components/TreeView.md +16 -7
  36. package/bundle/components/TriggerClickOnKeyDownEvent.md +277 -0
  37. package/bundle/components/UploadZone.md +318 -0
  38. package/bundle/guides/codestyle.md +16 -1
  39. package/bundle/guides/commits.md +47 -1
  40. package/bundle/guides/tests.md +23 -2
  41. package/bundle/manifest.json +48 -21
  42. package/bundle/release-notes/1.47.0.mdx +115 -0
  43. package/bundle/release-notes/1.48.0.mdx +68 -0
  44. package/bundle/release-notes/1.49.0.mdx +7 -0
  45. package/bundle/tokens.json +3 -3
  46. package/dist/index.js +220 -6
  47. package/dist/index.js.map +1 -1
  48. package/package.json +1 -1
@@ -0,0 +1,402 @@
1
+ ---
2
+ component: CardStatic
3
+ category: Card
4
+ related: [CardAction]
5
+ tokens:
6
+ - Card.Static_General_Background
7
+ - Card.Static_Secondary_Background
8
+ stories: stories/Cards/CardStatic.stories.tsx
9
+ version: "1.0"
10
+ ---
11
+
12
+ # CardStatic
13
+
14
+ ## Назначение
15
+
16
+ Статичная карточка: информационный контейнер со скруглением, фоном темы и
17
+ вертикальным лейаутом. Содержимое собирается из составных частей `CardStatic.Media`
18
+ и `CardStatic.Content`.
19
+
20
+ Используй когда: нужно сгруппировать информацию в карточку — сводка по счёту, блок
21
+ с иллюстрацией и текстом, плитка с описанием и кнопкой в подвале.
22
+ Не используй когда: сама карточка должна быть элементом выбора или действия — возьми
23
+ `CardAction` (у него есть `role="button"`, `tabIndex`, клавиатурная активация и
24
+ состояние выбора). Для одиночного действия внутри информационной карточки положи
25
+ `Button` в `CardStatic.Content.Footer`, а не превращай карточку в кликабельную.
26
+
27
+ ---
28
+
29
+ ## Варианты и props
30
+
31
+ ### Темы (`ECardTheme`)
32
+
33
+ | Значение | Описание |
34
+ |---|---|
35
+ | `GENERAL` | Основная карточка (по умолчанию): фон для размещения на подложке страницы |
36
+ | `SECONDARY` | Карточка на светлой подложке: более тёмный фон, чтобы отделиться от неё |
37
+
38
+ Тема задаёт только фон. Тени, hover и состояния выбора у статичной карточки
39
+ отсутствуют — это отличие от `CardAction`.
40
+
41
+ ### Размеры скругления (`ECardRoundingSize`)
42
+
43
+ | Значение | Радиус |
44
+ |---|---|
45
+ | `SM` | 8px |
46
+ | `MD` | 16px (по умолчанию) |
47
+ | `LG` | 24px |
48
+
49
+ Скругление задаётся на корневом элементе, у которого стоит `overflow: hidden`, поэтому
50
+ фон `CardStatic.Media` обрезается по тому же радиусу — переопределять `border-radius`
51
+ у частей не нужно.
52
+
53
+ ### Опциональные props
54
+
55
+ | Prop | Тип | По умолчанию | Описание |
56
+ |---|---|---|---|
57
+ | `theme` | `ECardTheme` | `GENERAL` | Тема оформления |
58
+ | `roundingSize` | `ECardRoundingSize` | `MD` | Размер скругления |
59
+ | `...HTMLDivAttributes` | — | — | Любые атрибуты `<div>`, включая `aria-*`, `data-*` и обработчики. Собственных обработчиков у компонента нет, поэтому переданные не конкурируют ни с чем |
60
+
61
+ Своего состояния у компонента нет: весь вывод — производная от props.
62
+
63
+ ### Составные части
64
+
65
+ | Часть | Назначение |
66
+ |---|---|
67
+ | `CardStatic.Media` | Медийная область вверху карточки. Собственных props нет: изображение задаётся через `style`/`className`, высота — потребителем |
68
+ | `CardStatic.Content` | Контентная область; prop `paddingSize` (`ECardContentPaddingSize`: `SM` — 16px, `MD` — 24px, по умолчанию `MD`) |
69
+ | `CardStatic.Content.Header` | Заголовок, отступ 16px снизу |
70
+ | `CardStatic.Content.Body` | Тело, растягивается на свободную высоту |
71
+ | `CardStatic.Content.Footer` | Подвал, отступ 16px сверху |
72
+
73
+ Части — общие с `CardAction` (`CardStatic.Content` и `CardAction.Content` — один и тот же
74
+ компонент), поэтому их правки затрагивают оба вида карточек.
75
+
76
+ ### Размеры карточки
77
+
78
+ Корневой элемент — `flex`-колонка с `width: 100%`: ширину задаёт родитель, высоту —
79
+ содержимое. Собственных props размера у карточки нет; в примерах ширина задаётся
80
+ обёрткой (`<div style={{width: "216px"}}>`).
81
+
82
+ ---
83
+
84
+ ## Дизайн-токены
85
+
86
+ Переопределяются через `ThemeProvider` (prop `tokens`) — см. `ThemeProvider-ai.md` →
87
+ «Как переопределять токены». Значения по умолчанию — `src/components/DesignTokens/components/Card.ts`.
88
+
89
+ Паттерн: `Card.Static_{Theme}_Background`.
90
+
91
+ ```text
92
+ Card.Static_General_Background
93
+ Card.Static_Secondary_Background
94
+ ```
95
+
96
+ Токены `Card.Action_*` и `Card.Shadow_*` к статичной карточке отношения не имеют —
97
+ они описывают состояния `CardAction`. Общий класс темы из `styles/Card.module.less`
98
+ применяется и к `CardAction`, где его фон перекрывается токенами `Card.Action_*`
99
+ с той же специфичностью; менять `Card.Static_*` в расчёте на интерактивную карточку
100
+ не стоит — правь оба модуля согласованно.
101
+
102
+ ---
103
+
104
+ ## Инварианты
105
+
106
+ - `forwardRef` на компоненте — не убирать: `ref` указывает на корневой `<div>`, тот же
107
+ элемент, который получает `className` и `...rest`.
108
+ - Корневой элемент — `<div>` без `role` и `tabIndex`: статичная карточка не является
109
+ интерактивным элементом и в tab-порядок не попадает. Добавление роли или фокусируемости
110
+ «по умолчанию» изменит наблюдаемое поведение.
111
+ - Атрибут `data-tx` проставляется после `...rest` — потребитель его не переопределяет.
112
+ Это общий для библиотеки маркер версии.
113
+ - Имена props (`theme`, `roundingSize`), значения `ECardTheme` / `ECardRoundingSize` /
114
+ `ECardContentPaddingSize` и barrel-экспорты `src/components/Card/index.ts` — публичный
115
+ API, не переименовывать.
116
+ - Статические свойства `CardStatic.Content` и `CardStatic.Media` (и вложенные
117
+ `Content.Header` / `Content.Body` / `Content.Footer`) — часть публичного API.
118
+ `displayName` — `"CardStatic"`.
119
+ - Составные части (`CardMedia`, `CardContent`, `CardContent.Header/Body/Footer`) объявлены
120
+ как `React.FC` и **`ref` не пробрасывают** — переданный им `ref` молча теряется. Не пиши
121
+ на них тест вида `expect(ref.current).toBeInstanceOf(HTMLDivElement)` — он упадёт. Файлы
122
+ частей общие с `CardAction`, поэтому добавление им `forwardRef` — отдельная задача на
123
+ семейство Card, а не правка в рамках `CardStatic`.
124
+ - `ICardProps` — база для `ICardActionProps`: правка этого интерфейса меняет публичный API
125
+ обеих карточек.
126
+
127
+ ---
128
+
129
+ ## Accessibility
130
+
131
+ - Карточка семантически прозрачна: своей роли не имеет, фокус не принимает, клавиатурных
132
+ обработчиков нет. Содержимое озвучивается как обычный поток.
133
+ - Семантику задаёт потребитель через `...rest` — например, `role="group"` с `aria-labelledby`,
134
+ указывающим на заголовок внутри `CardStatic.Content.Header`. Сменить тег компонент не
135
+ позволяет: корень всегда `<div>`, поэтому `<li>` или `<section>` оборачивается снаружи.
136
+ - Компонент не хардкодит текстов (библиотека мультиязычная): `aria-label` и прочие подписи
137
+ передаёт потребитель.
138
+ - Интерактивные элементы внутри карточки (кнопка в `Footer`, ссылка в `Body`) работают
139
+ обычным образом — карточка не перехватывает клики и не всплывает собственных событий.
140
+ - Медийная область `CardStatic.Media` рисуется фоном, а не `<img>`: осмысленное изображение
141
+ нужно сопровождать текстом в контенте либо задавать доступное имя самому элементу
142
+ (`role="img"` + `aria-label`) через props части.
143
+
144
+ ---
145
+
146
+ ## Связанные компоненты
147
+
148
+ - `CardAction` — интерактивная карточка: тот же лейаут и те же составные части, плюс
149
+ состояние выбора, роль `button` и клавиатурная активация.
150
+ - `CardContent` (`CardStatic.Content`) — контентная область карточки с `paddingSize`;
151
+ отдельного AI.md нет, описана выше в «Составных частях».
152
+ - `CardMedia` (`CardStatic.Media`) — медийная область; принимает `className` и `...rest`,
153
+ но **не `ref`** (см. «Инварианты»), отдельного AI.md нет.
154
+
155
+ ---
156
+
157
+ ## Stories
158
+
159
+ Основные истории: `stories/Cards/CardStatic.stories.tsx`
160
+ Файлы примеров: `stories/Cards/examples/CardStatic/`
161
+
162
+ | Story | Example file | Что демонстрирует |
163
+ |---|---|---|
164
+ | `Playground` | `PlaygroundExample.tsx` | Интерактивный подбор `theme`, `roundingSize` и `paddingSize` |
165
+ | `Default` | `DefaultExample.tsx` | Минимальная карточка с заголовком и телом |
166
+ | `Themes` | `ThemesExample.tsx` | Темы `GENERAL` и `SECONDARY` |
167
+ | `PaddingSizes` | `PaddingSizesExample.tsx` | Внутренние отступы контента `SM` и `MD` |
168
+ | `RoundingSizes` | `RoundingSizesExample.tsx` | Скругления `SM`, `MD`, `LG` |
169
+ | `VisualTests` | `VisualTests.tsx` | Скриншот-регрессия: карточка с `Media` и `Footer` в обеих темах и комбинации `roundingSize` + `paddingSize` |
170
+
171
+ ---
172
+
173
+ ## История изменений
174
+
175
+ | Дата | Изменение |
176
+ |---|---|
177
+ | 2026-09-11 | Создан документ |
178
+
179
+ ---
180
+
181
+ ## Примеры использования
182
+
183
+ ### Default
184
+
185
+ `stories/Cards/examples/CardStatic/DefaultExample.tsx`
186
+
187
+ ```tsx
188
+ import React from "react";
189
+ import {
190
+ CardStatic,
191
+ ECardContentPaddingSize,
192
+ ECardRoundingSize,
193
+ ECardTheme,
194
+ ETextSize,
195
+ Text,
196
+ } from "@sberbusiness/triplex-next";
197
+
198
+ export const DefaultExample = () => (
199
+ <div style={{ width: "216px" }}>
200
+ <CardStatic roundingSize={ECardRoundingSize.MD} theme={ECardTheme.GENERAL}>
201
+ <CardStatic.Content paddingSize={ECardContentPaddingSize.MD}>
202
+ <CardStatic.Content.Header>
203
+ <Text size={ETextSize.B3}>Subtitle text</Text>
204
+ </CardStatic.Content.Header>
205
+ <CardStatic.Content.Body>
206
+ <Text tag="div" size={ETextSize.B3}>
207
+ This message provides context or highlights important information to note.
208
+ </Text>
209
+ </CardStatic.Content.Body>
210
+ </CardStatic.Content>
211
+ </CardStatic>
212
+ </div>
213
+ );
214
+ ```
215
+
216
+ ### Themes
217
+
218
+ `stories/Cards/examples/CardStatic/ThemesExample.tsx`
219
+
220
+ ```tsx
221
+ import React from "react";
222
+ import {
223
+ CardStatic,
224
+ ECardContentPaddingSize,
225
+ ECardRoundingSize,
226
+ ECardTheme,
227
+ EFontType,
228
+ EFontWeightText,
229
+ ETextSize,
230
+ Gap,
231
+ Link,
232
+ Text,
233
+ } from "@sberbusiness/triplex-next";
234
+
235
+ const Body = () => (
236
+ <CardStatic.Content.Body>
237
+ <Text tag="div" size={ETextSize.B3}>
238
+ This message provides context or highlights important information to note.
239
+ </Text>
240
+ <Gap size={8} />
241
+ <Text tag="div" size={ETextSize.B4} type={EFontType.SECONDARY}>
242
+ This message provides additional context or highlights important information to note.
243
+ </Text>
244
+ <Gap size={8} />
245
+ <Text tag="div" size={ETextSize.B2} weight={EFontWeightText.SEMIBOLD}>
246
+ 1234567,00
247
+ </Text>
248
+ <Text tag="div" size={ETextSize.B4} type={EFontType.SECONDARY}>
249
+ Текст пояснения
250
+ </Text>
251
+ <Gap size={8} />
252
+ <Text tag="div" type={EFontType.PRIMARY} size={ETextSize.B4}>
253
+ <Link onClick={() => {}}>Link text</Link>
254
+ </Text>
255
+ </CardStatic.Content.Body>
256
+ );
257
+
258
+ export const ThemesExample = () => (
259
+ <div style={{ width: "448px", display: "flex", gap: "16px" }}>
260
+ <div style={{ display: "flex", flexDirection: "column", gap: "8px" }}>
261
+ <div style={{ marginBottom: "8px", fontSize: "16px", fontWeight: "700" }}>GENERAL</div>
262
+ <CardStatic roundingSize={ECardRoundingSize.MD} theme={ECardTheme.GENERAL}>
263
+ <CardStatic.Content paddingSize={ECardContentPaddingSize.MD}>
264
+ <CardStatic.Content.Header>
265
+ <Text size={ETextSize.B3}>Subtitle text</Text>
266
+ </CardStatic.Content.Header>
267
+ <Body />
268
+ </CardStatic.Content>
269
+ </CardStatic>
270
+ </div>
271
+ <div style={{ display: "flex", flexDirection: "column", gap: "8px" }}>
272
+ <div style={{ marginBottom: "8px", fontSize: "16px", fontWeight: "700" }}>SECONDARY</div>
273
+ <CardStatic roundingSize={ECardRoundingSize.MD} theme={ECardTheme.SECONDARY}>
274
+ <CardStatic.Content paddingSize={ECardContentPaddingSize.MD}>
275
+ <CardStatic.Content.Header>
276
+ <Text size={ETextSize.B3}>Subtitle text</Text>
277
+ </CardStatic.Content.Header>
278
+ <Body />
279
+ </CardStatic.Content>
280
+ </CardStatic>
281
+ </div>
282
+ </div>
283
+ );
284
+ ```
285
+
286
+ ### PaddingSizes
287
+
288
+ `stories/Cards/examples/CardStatic/PaddingSizesExample.tsx`
289
+
290
+ ```tsx
291
+ import React from "react";
292
+ import {
293
+ CardStatic,
294
+ ECardContentPaddingSize,
295
+ ECardRoundingSize,
296
+ ECardTheme,
297
+ ETextSize,
298
+ Text,
299
+ } from "@sberbusiness/triplex-next";
300
+
301
+ export const PaddingSizesExample = () => (
302
+ <div style={{ width: "448px", display: "flex", gap: "16px" }}>
303
+ <div style={{ display: "flex", flexDirection: "column", gap: "8px" }}>
304
+ <div style={{ marginBottom: "8px", fontSize: "16px", fontWeight: "700" }}>SM</div>
305
+ <CardStatic roundingSize={ECardRoundingSize.MD} theme={ECardTheme.GENERAL}>
306
+ <CardStatic.Content paddingSize={ECardContentPaddingSize.SM}>
307
+ <CardStatic.Content.Header>
308
+ <Text size={ETextSize.B3}>Subtitle text</Text>
309
+ </CardStatic.Content.Header>
310
+ <CardStatic.Content.Body>
311
+ <Text tag="div" size={ETextSize.B3}>
312
+ This message provides context or highlights important information to note.
313
+ </Text>
314
+ </CardStatic.Content.Body>
315
+ </CardStatic.Content>
316
+ </CardStatic>
317
+ </div>
318
+ <div style={{ display: "flex", flexDirection: "column", gap: "8px" }}>
319
+ <div style={{ marginBottom: "8px", fontSize: "16px", fontWeight: "700" }}>MD</div>
320
+ <CardStatic roundingSize={ECardRoundingSize.MD} theme={ECardTheme.GENERAL}>
321
+ <CardStatic.Content paddingSize={ECardContentPaddingSize.MD}>
322
+ <CardStatic.Content.Header>
323
+ <Text size={ETextSize.B3}>Subtitle text</Text>
324
+ </CardStatic.Content.Header>
325
+ <CardStatic.Content.Body>
326
+ <Text tag="div" size={ETextSize.B3}>
327
+ This message provides context or highlights important information to note.
328
+ </Text>
329
+ </CardStatic.Content.Body>
330
+ </CardStatic.Content>
331
+ </CardStatic>
332
+ </div>
333
+ </div>
334
+ );
335
+ ```
336
+
337
+ ### RoundingSizes
338
+
339
+ `stories/Cards/examples/CardStatic/RoundingSizesExample.tsx`
340
+
341
+ ```tsx
342
+ import React from "react";
343
+ import {
344
+ CardStatic,
345
+ ECardContentPaddingSize,
346
+ ECardRoundingSize,
347
+ ECardTheme,
348
+ ETextSize,
349
+ Text,
350
+ } from "@sberbusiness/triplex-next";
351
+
352
+ export const RoundingSizesExample = () => (
353
+ <div style={{ width: "680px", display: "flex", gap: "16px" }}>
354
+ <div style={{ display: "flex", flexDirection: "column", gap: "8px" }}>
355
+ <div style={{ marginBottom: "8px", fontSize: "16px", fontWeight: "700" }}>SM</div>
356
+ <CardStatic roundingSize={ECardRoundingSize.SM} theme={ECardTheme.GENERAL}>
357
+ <CardStatic.Content paddingSize={ECardContentPaddingSize.MD}>
358
+ <CardStatic.Content.Header>
359
+ <Text size={ETextSize.B3}>Subtitle text</Text>
360
+ </CardStatic.Content.Header>
361
+ <CardStatic.Content.Body>
362
+ <Text tag="div" size={ETextSize.B3}>
363
+ This message provides context or highlights important information to note.
364
+ </Text>
365
+ </CardStatic.Content.Body>
366
+ </CardStatic.Content>
367
+ </CardStatic>
368
+ </div>
369
+ <div style={{ display: "flex", flexDirection: "column", gap: "8px" }}>
370
+ <div style={{ marginBottom: "8px", fontSize: "16px", fontWeight: "700" }}>MD</div>
371
+ <CardStatic roundingSize={ECardRoundingSize.MD} theme={ECardTheme.GENERAL}>
372
+ <CardStatic.Content paddingSize={ECardContentPaddingSize.MD}>
373
+ <CardStatic.Content.Header>
374
+ <Text size={ETextSize.B3}>Subtitle text</Text>
375
+ </CardStatic.Content.Header>
376
+ <CardStatic.Content.Body>
377
+ <Text tag="div" size={ETextSize.B3}>
378
+ This message provides context or highlights important information to note.
379
+ </Text>
380
+ </CardStatic.Content.Body>
381
+ </CardStatic.Content>
382
+ </CardStatic>
383
+ </div>
384
+ <div style={{ display: "flex", flexDirection: "column", gap: "8px" }}>
385
+ <div style={{ marginBottom: "8px", fontSize: "16px", fontWeight: "700" }}>LG</div>
386
+ <CardStatic roundingSize={ECardRoundingSize.LG} theme={ECardTheme.GENERAL}>
387
+ <CardStatic.Content paddingSize={ECardContentPaddingSize.MD}>
388
+ <CardStatic.Content.Header>
389
+ <Text size={ETextSize.B3}>Subtitle text</Text>
390
+ </CardStatic.Content.Header>
391
+ <CardStatic.Content.Body>
392
+ <Text tag="div" size={ETextSize.B3}>
393
+ This message provides context or highlights important information to note.
394
+ </Text>
395
+ </CardStatic.Content.Body>
396
+ </CardStatic.Content>
397
+ </CardStatic>
398
+ </div>
399
+ </div>
400
+ );
401
+ ```
402
+