@sberbusiness/triplex-next-mcp-server 1.40.0-beta → 1.42.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/bundle/components/AlertProcess.md +460 -0
- package/bundle/components/Amount.md +145 -169
- package/bundle/components/Badge.md +155 -219
- package/bundle/components/Body.md +108 -116
- package/bundle/components/Calendar.md +183 -368
- package/bundle/components/CarouselExtended.md +355 -194
- package/bundle/components/Chip.md +310 -314
- package/bundle/components/ComposedKeyDownListener.md +323 -0
- package/bundle/components/FooterPage.md +2 -1
- package/bundle/components/FormField.md +468 -232
- package/bundle/components/HeaderPage.md +2 -1
- package/bundle/components/IconWrapper.md +142 -89
- package/bundle/components/Island.md +303 -123
- package/bundle/components/KeyDownListener.md +152 -100
- package/bundle/components/LoaderMiddle.md +265 -0
- package/bundle/components/LoaderScreen.md +178 -81
- package/bundle/components/LoaderSmall.md +230 -0
- package/bundle/components/MaskedField.md +481 -0
- package/bundle/components/MediaWidth.md +246 -108
- package/bundle/components/MobileView.md +192 -68
- package/bundle/components/ModalWindow.md +3 -1
- package/bundle/components/Page.md +3 -1
- package/bundle/components/Pagination.md +20 -0
- package/bundle/components/SelectExtendedField.md +691 -236
- package/bundle/components/ThemeProvider.md +305 -117
- package/bundle/components/Tooltip.md +421 -181
- package/bundle/guides/commits.md +54 -9
- package/bundle/guides/context.md +26 -0
- package/bundle/guides/stories.md +2 -0
- package/bundle/guides/template.md +1 -1
- package/bundle/manifest.json +63 -18
- package/bundle/release-notes/1.41.0.mdx +76 -0
- package/bundle/release-notes/1.41.1.mdx +18 -0
- package/bundle/release-notes/1.42.0.mdx +88 -0
- package/bundle/release-notes/1.43.0.mdx +7 -0
- package/package.json +1 -1
package/bundle/guides/commits.md
CHANGED
|
@@ -30,7 +30,8 @@ TRI-21-alert-ai-ready
|
|
|
30
30
|
**Исключения:**
|
|
31
31
|
- Релизная ветка: `prerelease-X.Y.Z` (например, `prerelease-1.40.0`) — в неё
|
|
32
32
|
собираются фиксы релиза и бамп версии, PR идёт в `main`
|
|
33
|
-
- Перелитие main → release-0: выполняется без отдельной ветки,
|
|
33
|
+
- Перелитие main → release-0: выполняется человеком без отдельной ветки,
|
|
34
|
+
прямым мержем
|
|
34
35
|
|
|
35
36
|
Исключение касается только **имени ветки**. Коммиты внутри неё подчиняются
|
|
36
37
|
общему правилу `TRI-XXX`: на релиз заводится задача Linear, её номер идёт
|
|
@@ -48,11 +49,18 @@ TRI-21-alert-ai-ready
|
|
|
48
49
|
|
|
49
50
|
**Правило:** все фича-ветки создаются от `main`. Изменения попадают в `release-0` через перелитие. Агент не должен создавать ветки от `release-0` и не должен мерджить в неё напрямую.
|
|
50
51
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
**Перелитие делает человек, не агент.** Мерж `main` → `release-0` идёт
|
|
53
|
+
напрямую, без PR, с разрешением конфликтов React 17-адаптаций — это ручной
|
|
54
|
+
шаг мейнтейнера в конце спринта. Правила разрешения конфликтов и регламент
|
|
55
|
+
подготовки описаны в `.agents/skills/release-react17/SKILL.md` и
|
|
56
|
+
`docs/human/release.md`. Прямой push в `release-0` проверяется CI:
|
|
57
|
+
`ci.yml` триггерится на `push: branches: [release-0]`.
|
|
58
|
+
|
|
59
|
+
**Единственное исключение для агента** — релизный коммит `release-react17`
|
|
60
|
+
(бамп версии + release notes): он тоже пушится в `release-0` напрямую, без
|
|
61
|
+
PR. Прогон CI на него стартует, но дождаться его нельзя — GitHub Release
|
|
62
|
+
создаётся сразу после push. Поэтому исключение компенсируется обязательными
|
|
63
|
+
локальными гейтами (`tsc`, `test-unit`, `build`).
|
|
56
64
|
|
|
57
65
|
---
|
|
58
66
|
|
|
@@ -243,9 +251,46 @@ stories/release-notes/v1/<текущая версия>.mdx
|
|
|
243
251
|
|
|
244
252
|
Компоненты внутри секции — в алфавитном порядке.
|
|
245
253
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
254
|
+
### Главное правило: пиши только то, что стало новым для потребителя
|
|
255
|
+
|
|
256
|
+
Release notes читает потребитель библиотеки, а не разработчик репозитория.
|
|
257
|
+
Запись отвечает на один вопрос: **что изменилось для того, кто подключает
|
|
258
|
+
компонент**. Всё остальное — лишнее.
|
|
259
|
+
|
|
260
|
+
**Не попадает в release notes:**
|
|
261
|
+
|
|
262
|
+
- внутренняя кухня репозитория: количество unit-тестов, созданные `*-ai.md`,
|
|
263
|
+
обновлённые stories и `ROADMAP.md`, JSDoc, переименования внутренних констант,
|
|
264
|
+
порядок импортов, чистка LESS;
|
|
265
|
+
- перечисление того, что **не** изменилось: списки прежних props, значений
|
|
266
|
+
enum'ов, barrel-экспортов, границ диапазонов. Если поведение не изменилось,
|
|
267
|
+
достаточно сказать это одной фразой — без инвентаризации;
|
|
268
|
+
- обоснования и подробности реализации, интересные только ревьюеру. Им место
|
|
269
|
+
в описании PR и в `{Component}-ai.md`.
|
|
270
|
+
|
|
271
|
+
**Рефакторинг без изменений для потребителя — одна короткая строка:**
|
|
272
|
+
|
|
273
|
+
```mdx
|
|
274
|
+
**ComponentName**
|
|
275
|
+
|
|
276
|
+
- Проведён AI-рефакторинг.
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
Если рефакторинг всё же дал потребителю что-то наблюдаемое (например
|
|
280
|
+
`displayName`, видимый в React DevTools) — назови только это:
|
|
281
|
+
|
|
282
|
+
```mdx
|
|
283
|
+
**MediaWidth**
|
|
284
|
+
|
|
285
|
+
- Проведён AI-рефакторинг, добавлен `displayName`.
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
Ориентир по объёму: запись про изменение поведения — 1–3 предложения, запись
|
|
289
|
+
про рефакторинг — одна строка. Если запись разрослась до абзаца, скорее всего
|
|
290
|
+
в неё попала внутренняя кухня — вычеркни её.
|
|
291
|
+
|
|
292
|
+
Не нужно добавлять release notes для изменений только в stories, тестах или
|
|
293
|
+
документации.
|
|
249
294
|
|
|
250
295
|
---
|
|
251
296
|
|
package/bundle/guides/context.md
CHANGED
|
@@ -274,6 +274,32 @@ AI-агента.
|
|
|
274
274
|
|
|
275
275
|
---
|
|
276
276
|
|
|
277
|
+
## Как заполнять `related` в AI.md
|
|
278
|
+
|
|
279
|
+
Индекс переходов для агента, а не «похожие компоненты»: только имена, пояснения —
|
|
280
|
+
в разделе «Связанные компоненты». Имя обязано быть адресатом: компонентом из
|
|
281
|
+
таблицы `docs/ai/ROADMAP.md`, у которого AI.md есть или запланирован. Связь с
|
|
282
|
+
обёрткой вне таблицы записывается на её родителя (`IDropdownMobileMaskedInputProps
|
|
283
|
+
extends IFormFieldMaskedInputProps` → `FormField`).
|
|
284
|
+
|
|
285
|
+
Адресат попадает в `related`, только если подходит под одну из четырёх категорий:
|
|
286
|
+
|
|
287
|
+
| # | Категория | Критерий | Направление |
|
|
288
|
+
|---|---|---|---|
|
|
289
|
+
| 1 | Семья | Родитель ↔ часть со своим AI.md | обе стороны |
|
|
290
|
+
| 2 | Альтернатива | Решает ту же задачу другим компромиссом — реально спутают (`Island` → `IslandAccordion`). Отвод в другой класс задач («нужен отступ — возьми `Gap`») остаётся прозой в «Не используй когда» | обе стороны |
|
|
291
|
+
| 3 | Контракт по рендеру | Импортирует и рендерит внутри себя (`Island` → `LoaderScreen`) | к зависимости |
|
|
292
|
+
| 4 | Контракт по типам | Наследует чужой интерфейс props, в т.ч. `Pick<>` / `Omit<>` (`IConfirmProps extends IIslandProps` → у `Confirm` пишем `Island`). Наследование от React и от внутренних базовых интерфейсов не считается | от наследника к базе |
|
|
293
|
+
|
|
294
|
+
Потребители не включаются — ссылка стоит с их стороны; исключение только для
|
|
295
|
+
потребителя, который опирается на хрупкую деталь.
|
|
296
|
+
|
|
297
|
+
Категории 1 и 2 симметричны, 3 и 4 односторонние. Порядок — семья → альтернативы
|
|
298
|
+
→ контракты, ориентир 2–5 имён. Каждое имя из `related` должно быть объяснено в
|
|
299
|
+
разделе «Связанные компоненты»; обратное не требуется.
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
277
303
|
## Внешние ресурсы
|
|
278
304
|
|
|
279
305
|
- Документация для разработчиков и дизайнеров: https://triplex-design.ru/next/ru/Web/Components
|
package/bundle/guides/stories.md
CHANGED
|
@@ -332,6 +332,7 @@ import { action } from "storybook/actions";
|
|
|
332
332
|
**Исключаются при необходимости:**
|
|
333
333
|
|
|
334
334
|
- Стори, дублирующие отображение другой стори. Если две стори рендерят визуально одно и то же — для теста оставьте одну, вторую исключите через `testRunner: { skip: true }`. Не нужно генерировать идентичные скриншоты.
|
|
335
|
+
- **Компоненты без визуального интерфейса** — `KeyDownListener`, `ComposedKeyDownListener` и подобные обёртки, которые не рендерят собственной разметки (слушатели событий, провайдеры контекста). На скриншот попадает только обвязка примеров, поэтому регрессию компонента такой тест поймать не может, а перегенерации требует от любой правки примера. Набор исключается **целиком**: `testRunner: { skip: true }` ставится в `parameters` у `meta`, отдельные стори параметр не дублируют, стори `VisualTests` не создаётся, файлов в `__screenshots__/` быть не должно. Поведение таких компонентов покрывается unit-тестами.
|
|
335
336
|
|
|
336
337
|
### Когда создавать Visual tests
|
|
337
338
|
|
|
@@ -664,6 +665,7 @@ export { default as SizesSource } from "./Sizes?raw";
|
|
|
664
665
|
|
|
665
666
|
Скриншот-тесты обязательны для UI-компонентов. Без baseline-файлов в `__screenshots__/` регрессию не поймать.
|
|
666
667
|
|
|
668
|
+
- [ ] Компонент действительно рендерит собственную разметку. Если нет (слушатель событий, провайдер) — весь набор исключён через `testRunner: { skip: true }` в `meta`, `VisualTests` нет, baseline-файлов нет; остальные пункты этого раздела не применяются
|
|
667
669
|
- [ ] Playground исключён из скриншот-тестов (`testRunner: { skip: true }`)
|
|
668
670
|
- [ ] Нет дублирующих скриншотов — визуально идентичные стори исключены через `testRunner: { skip: true }`
|
|
669
671
|
- [ ] Все ключевые визуальные состояния покрыты (размеры, статусы, заполненные поля, фокус)
|
|
@@ -18,7 +18,7 @@ version: "1.0"
|
|
|
18
18
|
|
|
19
19
|
Frontmatter:
|
|
20
20
|
- tokens: список CSS-переменных, которые компонент использует
|
|
21
|
-
- related:
|
|
21
|
+
- related: индекс переходов для агента. Полное правило: docs/ai/CONTEXT.md → «Как заполнять related в AI.md».
|
|
22
22
|
|
|
23
23
|
Таблица Stories: колонка `Example file` обязательна — её читает сборщик
|
|
24
24
|
mcp-data.json, чтобы инлайнить код примера. См. раздел Stories ниже.
|
package/bundle/manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"triplexVersion": "1.
|
|
4
|
-
"generatedAt": "2026-
|
|
3
|
+
"triplexVersion": "1.42.0",
|
|
4
|
+
"generatedAt": "2026-08-14T12:59:51.290Z",
|
|
5
5
|
"components": [
|
|
6
6
|
{
|
|
7
7
|
"name": "AbstractTree",
|
|
@@ -27,9 +27,15 @@
|
|
|
27
27
|
"file": "components/AlertContext.md",
|
|
28
28
|
"ai_ready": true
|
|
29
29
|
},
|
|
30
|
+
{
|
|
31
|
+
"name": "AlertProcess",
|
|
32
|
+
"path": "src/components/Alert/AlertProcess-ai.md",
|
|
33
|
+
"file": "components/AlertProcess.md",
|
|
34
|
+
"ai_ready": true
|
|
35
|
+
},
|
|
30
36
|
{
|
|
31
37
|
"name": "Amount",
|
|
32
|
-
"path": "src/components/Amount/Amount-
|
|
38
|
+
"path": "src/components/Amount/Amount-ai.md",
|
|
33
39
|
"file": "components/Amount.md",
|
|
34
40
|
"ai_ready": true
|
|
35
41
|
},
|
|
@@ -47,13 +53,13 @@
|
|
|
47
53
|
},
|
|
48
54
|
{
|
|
49
55
|
"name": "Badge",
|
|
50
|
-
"path": "src/components/Badge/Badge-
|
|
56
|
+
"path": "src/components/Badge/Badge-ai.md",
|
|
51
57
|
"file": "components/Badge.md",
|
|
52
58
|
"ai_ready": true
|
|
53
59
|
},
|
|
54
60
|
{
|
|
55
61
|
"name": "Body",
|
|
56
|
-
"path": "src/components/Body/Body-
|
|
62
|
+
"path": "src/components/Body/Body-ai.md",
|
|
57
63
|
"file": "components/Body.md",
|
|
58
64
|
"ai_ready": true
|
|
59
65
|
},
|
|
@@ -89,7 +95,7 @@
|
|
|
89
95
|
},
|
|
90
96
|
{
|
|
91
97
|
"name": "Calendar",
|
|
92
|
-
"path": "src/components/Calendar/Calendar-
|
|
98
|
+
"path": "src/components/Calendar/Calendar-ai.md",
|
|
93
99
|
"file": "components/Calendar.md",
|
|
94
100
|
"ai_ready": true
|
|
95
101
|
},
|
|
@@ -114,7 +120,7 @@
|
|
|
114
120
|
},
|
|
115
121
|
{
|
|
116
122
|
"name": "CarouselExtended",
|
|
117
|
-
"path": "src/components/CarouselExtended/CarouselExtended-
|
|
123
|
+
"path": "src/components/CarouselExtended/CarouselExtended-ai.md",
|
|
118
124
|
"file": "components/CarouselExtended.md",
|
|
119
125
|
"ai_ready": true
|
|
120
126
|
},
|
|
@@ -150,7 +156,7 @@
|
|
|
150
156
|
},
|
|
151
157
|
{
|
|
152
158
|
"name": "Chip",
|
|
153
|
-
"path": "src/components/Chip/Chip-
|
|
159
|
+
"path": "src/components/Chip/Chip-ai.md",
|
|
154
160
|
"file": "components/Chip.md",
|
|
155
161
|
"ai_ready": true
|
|
156
162
|
},
|
|
@@ -184,6 +190,12 @@
|
|
|
184
190
|
"file": "components/CollapsibleTreeExtended.md",
|
|
185
191
|
"ai_ready": true
|
|
186
192
|
},
|
|
193
|
+
{
|
|
194
|
+
"name": "ComposedKeyDownListener",
|
|
195
|
+
"path": "src/components/KeyDownListener/ComposedKeyDownListener-ai.md",
|
|
196
|
+
"file": "components/ComposedKeyDownListener.md",
|
|
197
|
+
"ai_ready": true
|
|
198
|
+
},
|
|
187
199
|
{
|
|
188
200
|
"name": "Confirm",
|
|
189
201
|
"path": "src/components/Confirm/Confirm-AI.md",
|
|
@@ -271,7 +283,7 @@
|
|
|
271
283
|
},
|
|
272
284
|
{
|
|
273
285
|
"name": "FormField",
|
|
274
|
-
"path": "src/components/FormField/FormField-
|
|
286
|
+
"path": "src/components/FormField/FormField-ai.md",
|
|
275
287
|
"file": "components/FormField.md",
|
|
276
288
|
"ai_ready": true
|
|
277
289
|
},
|
|
@@ -307,7 +319,7 @@
|
|
|
307
319
|
},
|
|
308
320
|
{
|
|
309
321
|
"name": "IconWrapper",
|
|
310
|
-
"path": "src/components/IconWrapper/IconWrapper-
|
|
322
|
+
"path": "src/components/IconWrapper/IconWrapper-ai.md",
|
|
311
323
|
"file": "components/IconWrapper.md",
|
|
312
324
|
"ai_ready": true
|
|
313
325
|
},
|
|
@@ -325,7 +337,7 @@
|
|
|
325
337
|
},
|
|
326
338
|
{
|
|
327
339
|
"name": "Island",
|
|
328
|
-
"path": "src/components/Island/Island-
|
|
340
|
+
"path": "src/components/Island/Island-ai.md",
|
|
329
341
|
"file": "components/Island.md",
|
|
330
342
|
"ai_ready": true
|
|
331
343
|
},
|
|
@@ -343,7 +355,7 @@
|
|
|
343
355
|
},
|
|
344
356
|
{
|
|
345
357
|
"name": "KeyDownListener",
|
|
346
|
-
"path": "src/components/KeyDownListener/KeyDownListener-
|
|
358
|
+
"path": "src/components/KeyDownListener/KeyDownListener-ai.md",
|
|
347
359
|
"file": "components/KeyDownListener.md",
|
|
348
360
|
"ai_ready": true
|
|
349
361
|
},
|
|
@@ -437,12 +449,24 @@
|
|
|
437
449
|
"file": "components/Loader.md",
|
|
438
450
|
"ai_ready": true
|
|
439
451
|
},
|
|
452
|
+
{
|
|
453
|
+
"name": "LoaderMiddle",
|
|
454
|
+
"path": "src/components/Loader/LoaderMiddle-ai.md",
|
|
455
|
+
"file": "components/LoaderMiddle.md",
|
|
456
|
+
"ai_ready": true
|
|
457
|
+
},
|
|
440
458
|
{
|
|
441
459
|
"name": "LoaderScreen",
|
|
442
|
-
"path": "src/components/LoaderScreen/LoaderScreen-
|
|
460
|
+
"path": "src/components/LoaderScreen/LoaderScreen-ai.md",
|
|
443
461
|
"file": "components/LoaderScreen.md",
|
|
444
462
|
"ai_ready": true
|
|
445
463
|
},
|
|
464
|
+
{
|
|
465
|
+
"name": "LoaderSmall",
|
|
466
|
+
"path": "src/components/Loader/LoaderSmall-ai.md",
|
|
467
|
+
"file": "components/LoaderSmall.md",
|
|
468
|
+
"ai_ready": true
|
|
469
|
+
},
|
|
446
470
|
{
|
|
447
471
|
"name": "Marker",
|
|
448
472
|
"path": "src/components/Marker/Marker-AI.md",
|
|
@@ -455,15 +479,21 @@
|
|
|
455
479
|
"file": "components/MarkerStatus.md",
|
|
456
480
|
"ai_ready": true
|
|
457
481
|
},
|
|
482
|
+
{
|
|
483
|
+
"name": "MaskedField",
|
|
484
|
+
"path": "src/components/TextField/MaskedField-ai.md",
|
|
485
|
+
"file": "components/MaskedField.md",
|
|
486
|
+
"ai_ready": true
|
|
487
|
+
},
|
|
458
488
|
{
|
|
459
489
|
"name": "MediaWidth",
|
|
460
|
-
"path": "src/components/MediaWidth/MediaWidth-
|
|
490
|
+
"path": "src/components/MediaWidth/MediaWidth-ai.md",
|
|
461
491
|
"file": "components/MediaWidth.md",
|
|
462
492
|
"ai_ready": true
|
|
463
493
|
},
|
|
464
494
|
{
|
|
465
495
|
"name": "MobileView",
|
|
466
|
-
"path": "src/components/MobileView/MobileView-
|
|
496
|
+
"path": "src/components/MobileView/MobileView-ai.md",
|
|
467
497
|
"file": "components/MobileView.md",
|
|
468
498
|
"ai_ready": true
|
|
469
499
|
},
|
|
@@ -554,7 +584,7 @@
|
|
|
554
584
|
},
|
|
555
585
|
{
|
|
556
586
|
"name": "SelectExtendedField",
|
|
557
|
-
"path": "src/components/SelectExtendedField/SelectExtendedField-
|
|
587
|
+
"path": "src/components/SelectExtendedField/SelectExtendedField-ai.md",
|
|
558
588
|
"file": "components/SelectExtendedField.md",
|
|
559
589
|
"ai_ready": true
|
|
560
590
|
},
|
|
@@ -704,7 +734,7 @@
|
|
|
704
734
|
},
|
|
705
735
|
{
|
|
706
736
|
"name": "ThemeProvider",
|
|
707
|
-
"path": "src/components/ThemeProvider/ThemeProvider-
|
|
737
|
+
"path": "src/components/ThemeProvider/ThemeProvider-ai.md",
|
|
708
738
|
"file": "components/ThemeProvider.md",
|
|
709
739
|
"ai_ready": true
|
|
710
740
|
},
|
|
@@ -716,7 +746,7 @@
|
|
|
716
746
|
},
|
|
717
747
|
{
|
|
718
748
|
"name": "Tooltip",
|
|
719
|
-
"path": "src/components/Tooltip/Tooltip-
|
|
749
|
+
"path": "src/components/Tooltip/Tooltip-ai.md",
|
|
720
750
|
"file": "components/Tooltip.md",
|
|
721
751
|
"ai_ready": true
|
|
722
752
|
},
|
|
@@ -1007,6 +1037,21 @@
|
|
|
1007
1037
|
"file": "release-notes/1.41.0.mdx",
|
|
1008
1038
|
"path": "stories/release-notes/v1/1.41.0.mdx"
|
|
1009
1039
|
},
|
|
1040
|
+
{
|
|
1041
|
+
"version": "1.41.1",
|
|
1042
|
+
"file": "release-notes/1.41.1.mdx",
|
|
1043
|
+
"path": "stories/release-notes/v1/1.41.1.mdx"
|
|
1044
|
+
},
|
|
1045
|
+
{
|
|
1046
|
+
"version": "1.42.0",
|
|
1047
|
+
"file": "release-notes/1.42.0.mdx",
|
|
1048
|
+
"path": "stories/release-notes/v1/1.42.0.mdx"
|
|
1049
|
+
},
|
|
1050
|
+
{
|
|
1051
|
+
"version": "1.43.0",
|
|
1052
|
+
"file": "release-notes/1.43.0.mdx",
|
|
1053
|
+
"path": "stories/release-notes/v1/1.43.0.mdx"
|
|
1054
|
+
},
|
|
1010
1055
|
{
|
|
1011
1056
|
"version": "1.5.0",
|
|
1012
1057
|
"file": "release-notes/1.5.0.mdx",
|
|
@@ -4,4 +4,80 @@ import { Meta, Title, Heading } from "@storybook/addon-docs/blocks";
|
|
|
4
4
|
|
|
5
5
|
<Title>v1.41.0</Title>
|
|
6
6
|
|
|
7
|
+
<Heading>Ломающие изменения</Heading>
|
|
8
|
+
|
|
9
|
+
**FormField**
|
|
10
|
+
|
|
11
|
+
- `statusToClassNameMap` больше не экспортируется — ни из `components/FormField`, ни из корня пакета. Маппинг статуса на CSS-класс переименован во внутреннюю константу `STATUS_TO_CLASS_NAME_MAP` и стал деталью реализации компонента. Воспроизвести его на стороне потребителя нельзя: имена классов хешируются при сборке вместе с версией библиотеки (`error` → `error__58eeaf1b`) и меняются от релиза к релизу. Визуальное состояние поля задаётся prop `status` у `FormField` — используйте его; если нужно опереться на состояние в собственных стилях, навешивайте свой класс рядом.
|
|
12
|
+
|
|
7
13
|
<Heading>Изменения</Heading>
|
|
14
|
+
|
|
15
|
+
**Calendar**
|
|
16
|
+
|
|
17
|
+
- Изменён цвет muted/disabled дня/месяца/года в тёмной теме.
|
|
18
|
+
- AI-рефакторинг: JSDoc на props и внутренних компонентах, codestyle-чистка, unit-тесты (Calendar, CalendarViewItem, utils), создан `Calendar-ai.md`. Публичный API не изменён; внутренний `CalendarFooter` теперь применяет объявленные, но ранее игнорировавшиеся `className` и `...rest`.
|
|
19
|
+
- Исправлено: для `pickType={ECalendarPickType.MONTH_YEAR}` внешняя смена `pickedDate` на другой месяц выставляла заголовок в формате «March 1970» вместо «1970» — до следующего перелистывания. Заголовок теперь всегда форматируется по текущему виду отображения.
|
|
20
|
+
- Исправлено: после смены страницы с клавиатуры (`PageUp` / `PageDown`) фокус не возвращался на новую tabbable-ячейку, если она занимала ту же позицию сетки (в видах месяцев и годов — всегда). Фокус восстанавливается только когда он уже находился внутри сетки — программная смена страницы фокус не забирает.
|
|
21
|
+
- Исправлено: выбор первой tabbable-ячейки страницы (когда `pickedDate` вне страницы, а начальные даты отключены) перебирал кандидатов с накоплением шага (0, +1, +3, +6…), а в виде годов прибавлял месяцы вместо лет — tabbable-ячейкой могла стать не первая доступная дата, либо она не назначалась вовсе.
|
|
22
|
+
- Расширение API: поля `dateFrom` / `dateTo` в `IDateLimitRange` стали опциональными — типы приведены к фактическому поведению: незаданная граница берётся из `globalLimitRange`. Внешнему TS-коду, читающему эти поля, может потребоваться проверка на `undefined`.
|
|
23
|
+
- Расширение API: функциональный вариант `dayHtmlAttributes` теперь допускает возврат `data-*` атрибутов (`TTdHTMLAttributesWithData`) — как и объектный вариант. Функции с явной аннотацией возврата старым типом `React.TdHTMLAttributes<…>` нужно перевести на `TTdHTMLAttributesWithData`.
|
|
24
|
+
|
|
25
|
+
**CardAction, CardStatic**
|
|
26
|
+
|
|
27
|
+
- В `ECardRoundingSize` добавлено значение `LG` — скругление 24px. Существующие `MD` (16px) и `SM` (8px) не изменились, значение по умолчанию осталось `MD`.
|
|
28
|
+
|
|
29
|
+
**Chip**
|
|
30
|
+
|
|
31
|
+
- AI-рефакторинг: JSDoc на props (у `size` и `type` в описании указаны значения по умолчанию) и на внутреннем обработчике клавиатуры, константы-маппинги типа и размера приведены к общему стилю именования, упрощены условия формирования классов, unit-тесты расширены с 5 до 22 кейсов. Публичный API, DOM и визуальное поведение не изменены.
|
|
32
|
+
- `children` явно объявлен в `IChipProps` — тип прежний (раньше приходил из `React.HTMLAttributes`), но у prop появилось описание в подсказках IDE и в таблице props.
|
|
33
|
+
|
|
34
|
+
**FocusTrapExtended**
|
|
35
|
+
|
|
36
|
+
- Оптимизировано управление стеком ловушек фокуса во вложенных окнах за счет перевода активного инстанса на контролируемую паузу вместо его деактивации.
|
|
37
|
+
|
|
38
|
+
**FormField**
|
|
39
|
+
|
|
40
|
+
- Исправлено: `className`, переданный в `FormFieldDescription` или `FormFieldCounter`, затирал базовый класс компонента вместо того, чтобы дополнять его. Теперь классы объединяются, как у остальных компонентов библиотеки.
|
|
41
|
+
- AI-рефакторинг: документация props и значений `EFormFieldStatus`, внутренние упрощения и расширенные unit-тесты. Охвачены `FormFieldInput`, `FormFieldLabel`, `FormFieldPrefix`, `FormFieldPostfix`, `FormFieldClear`, `FormFieldDescription`, `FormFieldCounter`. Остальной публичный API не изменён.
|
|
42
|
+
|
|
43
|
+
**IconWrapper**
|
|
44
|
+
|
|
45
|
+
- AI-рефакторинг: JSDoc на props, расширены unit-тесты. Публичный API и поведение не изменены.
|
|
46
|
+
|
|
47
|
+
**Island**
|
|
48
|
+
|
|
49
|
+
- Исправлено: `className`, переданный в `IslandHeader` (`Island.Header`) или `IslandFooter` (`Island.Footer`), затирал базовый класс компонента вместо того, чтобы дополнять его. Теперь классы объединяются, как в `IslandBody` и у остальных компонентов библиотеки. Это влияет на любой код, передающий `className` в эти части: базовый класс остаётся на элементе, поэтому к нему снова применяются отступы `Island` и `position: relative` из стилей части. Последнее меняет containing block — абсолютно спозиционированные потомки внутри такой части теперь позиционируются относительно неё, а не относительно ближайшего внешнего positioned-предка. Компоненты самой библиотеки выглядят как прежде: единственный затронутый — `IslandAccordion`, в его стилях отступ Island погашен явно.
|
|
50
|
+
- AI-рефакторинг: JSDoc на props, значениях `EIslandType` и субкомпонентах, `displayName` у `IslandHeader`, `IslandBody`, `IslandFooter`, добавлены unit-тесты. Публичный API не изменён (props, значения enum, barrel-экспорты, `forwardRef` — как были).
|
|
51
|
+
|
|
52
|
+
**KeyDownListener**
|
|
53
|
+
|
|
54
|
+
- AI-рефакторинг: JSDoc на props, обработчик нажатия сведён к одной проверке кода клавиши, в `ComposedKeyDownListener` убрано приведение типа `children` и добавлен `displayName`, добавлены unit-тесты и stories. Существующий публичный API не изменён (props, их типы, class-компонент `KeyDownListener` с публичным методом `handleKeyDown` — как были).
|
|
55
|
+
- Интерфейс props `IComposedKeyDownListenerProps` теперь экспортируется из пакета — можно типизировать собственные обёртки над `ComposedKeyDownListener`.
|
|
56
|
+
- Исправлено: `ComposedKeyDownListener` с пустым `keyDownListeners` и без `children` больше не возвращает `undefined` из рендера — на React 17 это приводило к ошибке «Nothing was returned from render».
|
|
57
|
+
|
|
58
|
+
**LoaderMiddle**
|
|
59
|
+
|
|
60
|
+
- AI-рефакторинг: JSDoc на компоненте, порядок импортов приведён к codestyle, в стилях объединены дублирующиеся базовые правила точек и обегающей линии, unit-тесты расширены с 1 до 2 кейсов, создан `LoaderMiddle-ai.md`. В stories `controls: { disable: true }` перенесён на верхний уровень `parameters` — внутри `docs` он не применялся. Публичный API и поведение не изменены (props, DOM-разметка, `role="status"`, токены — как были).
|
|
61
|
+
|
|
62
|
+
**LoaderScreen**
|
|
63
|
+
|
|
64
|
+
- AI-рефакторинг: JSDoc на компоненте, props и `ILoaderScreenMiddleProps` (у `size` указано значение по умолчанию), соответствие типа лоадера классу подложки вынесено в константу-маппинг, порядок импортов и позиция `className` в `clsx` приведены к общему стилю, unit-тесты расширены с 6 до 15 кейсов, создан `LoaderScreen-ai.md`. Публичный API, DOM и визуальное поведение не изменены — изменился только порядок классов внутри атрибута `class` корневого элемента (набор классов тот же, на каскад не влияет).
|
|
65
|
+
|
|
66
|
+
**StatusTracker**
|
|
67
|
+
|
|
68
|
+
- Добавлены токены `StatusTracker.Background` и `StatusTracker.Draft_Color`.
|
|
69
|
+
- Токен `StatusTracker.Draft_Background` теперь задает цвет подсветки статуса `draft`.
|
|
70
|
+
- Изменены цвета токенов `StatusTracker.Draft_Background`, `StatusTracker.Draft_Color`, `StatusTracker.Rejected_Color` в светлой и темной темах.
|
|
71
|
+
- Минимальная высота изменена для десктоп экранов и удалена для мобильных экранов.
|
|
72
|
+
|
|
73
|
+
**ThemeProvider**
|
|
74
|
+
|
|
75
|
+
- AI-рефакторинг: JSDoc на props, значениях `ETriplexNextTheme` и полях контекста темы, ключ тега стилей с css-переменными вынесен в отдельный хелпер (раньше строка собиралась в двух местах), упрощён эффект навешивания `scopeClassName` — убран дублирующий его ref. Добавлены unit-тесты на `ThemeProviderView` и `useToken`. Публичный API, DOM и поведение не изменены.
|
|
76
|
+
|
|
77
|
+
**Tooltip**
|
|
78
|
+
|
|
79
|
+
- Исправлено: подсказка, смонтированная сразу открытой (управляемый режим `isOpen`), не закрывалась по действию мышью вне неё — при монтировании навешивался обработчик `click`, а снимался `mousedown`.
|
|
80
|
+
- Исправлено: класс темы больше не снимается с контейнера, если в течение задержки закрытия подсказку открыли снова или контейнер занял другой `Tooltip`.
|
|
81
|
+
- Исправлено: в адаптивном (мобильном) режиме свойства `size` и `alignTip` больше не уходят в DOM — React больше не предупреждает о нераспознанном атрибуте `alignTip`.
|
|
82
|
+
- Исправлено: при размонтировании открытой подсказки с `toggleType="hover"`, а также при смене `toggleType` на лету обработчики наведения снимаются и навешиваются и на саму подсказку, а не только на целевой элемент.
|
|
83
|
+
- AI-рефакторинг: разбор `children` вынесен в чистую функцию и мемоизирован, значение контекста стабилизировано, дедуплицирована разметка `Tooltip.Link`, из расчёта координат убрано двойное приведение типов, в хуке темы вынесен хелпер и добавлен guard при размонтировании, `displayName` внутреннего `TooltipDesktopBase` приведён к имени класса, добавлены JSDoc на props и приватные методы, добавлены unit-тесты. Публичный API не изменён (props, значения enum, barrel-экспорты, `forwardRef` — как были).
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Meta, Title, Heading } from "@storybook/addon-docs/blocks";
|
|
2
|
+
|
|
3
|
+
<Meta title="release-notes/v1/1.41.1" />
|
|
4
|
+
|
|
5
|
+
<Title>v1.41.1</Title>
|
|
6
|
+
|
|
7
|
+
<Heading>Изменения</Heading>
|
|
8
|
+
|
|
9
|
+
**Page**
|
|
10
|
+
|
|
11
|
+
- `Page.Header` и `Page.Footer` со свойством `sticky` теперь прилипают и вне `LightBox` при ширине viewport от 992px. При высоте viewport до 800px включительно sticky-позиционирование не применяется.
|
|
12
|
+
|
|
13
|
+
**SelectExtendedField**
|
|
14
|
+
|
|
15
|
+
- Исправлено: `onOpen` / `onClose` ложно срабатывали при повторном маунте в React 18 StrictMode — эффект опирался на флаг «смонтирован». Теперь сравнивается предыдущее значение состояния открытости, поэтому колбэки вызываются только на реальную смену состояния и по-прежнему не вызываются на первом рендере.
|
|
16
|
+
- Исправлено: клик по кнопке очистки (`onClear`) в `SelectExtendedFieldTarget` заодно раскрывал выпадающий блок — событие всплывало до обработчика клика по полю. Теперь всплытие останавливается, как это уже сделано в `Chip.Select` и `Chip.DatePicker`. Затрагивает также `SelectField` и `MultiselectField`, использующие тот же `Target`.
|
|
17
|
+
- Исправлено: `SelectExtendedFieldTarget` подмешивал в атрибут `class` литерал `undefined` — в `clsx` попадали ключи `styles.loading`, `styles.placeholder` и `styles.label`, которых нет в LESS-модуле компонента. Стили этих классов никогда не существовали, поэтому визуально ничего не меняется. Затрагивает также `SelectField` и `MultiselectField.Target`, использующие тот же компонент.
|
|
18
|
+
- AI-рефакторинг: JSDoc на всех props и рендер-функциях, константы-маппинги размера приведены к общему стилю именования, коды клавиш открытия вынесены в константу модуля, слушатель `mousedown` на документе навешивается только пока выпадающий блок открыт, callback-ref корневого элемента стабилизирован, в `SelectExtendedFieldTarget` убрана неиспользуемая внутренняя ссылка (ref по-прежнему указывает на элемент значения), в `SelectExtendedFieldDropdownDefault` дедуплицирован список опций десктопной и мобильной версий, у `SelectExtendedFieldDropdown` и `SelectExtendedFieldDropdownDefault` добавлен `displayName`. Unit-тесты разбиты по субкомпонентам и расширены с 42 до 69 кейсов, stories переведены на modern pattern, создан `SelectExtendedField-ai.md`. Публичный API не изменён (props, их типы, barrel-экспорты, `forwardRef` — как были).
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { Meta, Title, Heading } from "@storybook/addon-docs/blocks";
|
|
2
|
+
|
|
3
|
+
<Meta title="release-notes/v1/1.42.0" />
|
|
4
|
+
|
|
5
|
+
<Title>v1.42.0</Title>
|
|
6
|
+
|
|
7
|
+
<Heading>Ломающие изменения</Heading>
|
|
8
|
+
|
|
9
|
+
**FormFieldMaskedInput**
|
|
10
|
+
|
|
11
|
+
- Prop `defaultValue` исключён из `IFormFieldMaskedInputProps` — поле контролируемое, начальное значение задаётся через `value`. Затрагивает также `MaskedField.maskedInputProps` и `DropdownMobileMaskedInput`.
|
|
12
|
+
|
|
13
|
+
**MaskedField**
|
|
14
|
+
|
|
15
|
+
- Тип `maskedInputProps.ref` изменён с `React.RefObject<HTMLInputElement>` на `React.RefObject<HTMLDivElement>` — ref указывает на `<div>`-обёртку поля. Для ссылки на `<input>` используйте `maskedInputProps.forwardedRef`.
|
|
16
|
+
|
|
17
|
+
<Heading>Изменения</Heading>
|
|
18
|
+
|
|
19
|
+
**AlertProcess**
|
|
20
|
+
|
|
21
|
+
- Исправлено: `className`, переданный в `AlertProcess.Spoiler`, больше не затирает собственные классы элемента — раньше вместе с пользовательским классом пропадала анимация раскрытия.
|
|
22
|
+
- Исправлено: `AlertProcess.Spoiler` пробрасывает `ref` — на элемент раскрываемого контента, то есть на тот же элемент, что получает `...rest`.
|
|
23
|
+
- Изменено: из разметки `AlertProcess.Spoiler` убрана пустая обёртка-`<div>`, корневым элементом стал элемент раскрываемого контента. Визуально ничего не изменилось, но код, опиравшийся на лишний уровень вложенности в CSS-селекторах или в поиске по DOM, нужно поправить.
|
|
24
|
+
- Добавлено: на кнопке раскрытия `AlertProcess.Spoiler` выставляется `aria-expanded` — состояние раскрытия доступно скринридерам.
|
|
25
|
+
- Проведён AI-рефакторинг.
|
|
26
|
+
|
|
27
|
+
**Amount**
|
|
28
|
+
|
|
29
|
+
- Добавлено: `Amount` пробрасывает `ref` — компонент был объявлен как `React.FC`. Теперь это `forwardRef`, ref указывает на корневой `<span>`, то есть на тот же элемент, что получает `className` и `...rest`. Изменение аддитивное: форма `IAmountProps` не поменялась.
|
|
30
|
+
- Проведён AI-рефакторинг.
|
|
31
|
+
|
|
32
|
+
**Badge**
|
|
33
|
+
|
|
34
|
+
- Проведён AI-рефакторинг.
|
|
35
|
+
|
|
36
|
+
**Body**
|
|
37
|
+
|
|
38
|
+
- Проведён AI-рефакторинг. Публичный API, разметка и внешний вид не изменились.
|
|
39
|
+
|
|
40
|
+
**CarouselExtended**
|
|
41
|
+
|
|
42
|
+
- Проведён AI-рефакторинг. Стабильный колбэк-`ref` больше не вызывается заново (с `null` и снова с узлом) при каждом ре-рендере.
|
|
43
|
+
|
|
44
|
+
**ComposedKeyDownListener**
|
|
45
|
+
|
|
46
|
+
- Исправлено: смена набора горячих клавиш перемонтировала содержимое — `children` пересоздавались вместе с DOM-узлами и теряли введённые значения инпутов, фокус и текущие анимации. Теперь структура React-дерева не зависит от длины и порядка `keyDownListeners`, содержимое остаётся смонтированным.
|
|
47
|
+
- Изменился относительный порядок подписок на `window`: слушатели композитора монтируются раньше `children`, а не после них. Если внутри `children` есть собственный глобальный `keydown`-обработчик той же клавиши, `onMatch` сработает раньше него, а не позже — важно для кода, который полагается на этот порядок или на `stopImmediatePropagation`. Итоговый DOM и порядок вызова `onMatch` внутри `keyDownListeners` прежние.
|
|
48
|
+
|
|
49
|
+
**FormFieldMaskedInput**
|
|
50
|
+
|
|
51
|
+
- Исправлено: поле перестало писать в консоль предупреждение React «input contains both value and defaultValue props».
|
|
52
|
+
|
|
53
|
+
**Island**
|
|
54
|
+
|
|
55
|
+
- Расширение API: свойства `loading` и `loaderScreenProps`. При `loading` поверх контента карточки показывается `LoaderScreen` типа `middle`, настраиваемый через `loaderScreenProps`.
|
|
56
|
+
|
|
57
|
+
**DateField / MonthYearField**
|
|
58
|
+
|
|
59
|
+
- Добавлено ограничение по минимальной ширине.
|
|
60
|
+
|
|
61
|
+
**LoaderSmall**
|
|
62
|
+
|
|
63
|
+
- Проведён AI-рефакторинг; экспортируемый `ELoaderSmallSize` помечен как legacy — размер задаётся `EComponentSize`.
|
|
64
|
+
|
|
65
|
+
**MaskedField**
|
|
66
|
+
|
|
67
|
+
- Проведён AI-рефакторинг. Поведение и разметка не изменились, изменения типов — см. «Ломающие изменения».
|
|
68
|
+
|
|
69
|
+
**MediaWidth**
|
|
70
|
+
|
|
71
|
+
- Проведён AI-рефакторинг, добавлен `displayName`.
|
|
72
|
+
|
|
73
|
+
**FormFieldMaskedInput**
|
|
74
|
+
|
|
75
|
+
- Исправлен выход подложки-плейсхолдера за границы контейнера при нехватке свободного места.
|
|
76
|
+
|
|
77
|
+
**MobileView**
|
|
78
|
+
|
|
79
|
+
- Проведён AI-рефакторинг, добавлен `displayName`.
|
|
80
|
+
|
|
81
|
+
**Pagination**
|
|
82
|
+
|
|
83
|
+
- Внутри `MasterTable` в состоянии `loading` элементы пагинации становятся неактивными - кнопки навигации и номера страниц получают `disabled`, селект количества строк не открывается.
|
|
84
|
+
- Исправлена обработка `status` в `PaginationSelect`.
|
|
85
|
+
|
|
86
|
+
**SuggestField**
|
|
87
|
+
|
|
88
|
+
- Исправлен баг, при котором свойства `prefix`/`postfix`/`description`/`counter` не прокидывались в адаптивном режиме.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sberbusiness/triplex-next-mcp-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.42.0-beta",
|
|
4
4
|
"description": "MCP-сервер для дизайн-системы Triplex. Предоставляет AI-агентам документацию компонентов, дизайн-токены и примеры использования.",
|
|
5
5
|
"author": "СберБизнес",
|
|
6
6
|
"license": "MIT",
|