@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
@@ -88,6 +88,12 @@ TRI-21 Alert: AI refactoring + unit-тесты
88
88
  - Первая строка — не длиннее 72 символов.
89
89
  - Тело коммита опционально (для сложных изменений).
90
90
  - Язык: русский или английский — не смешивать в одном коммите.
91
+ - **Не воспроизводи в сообщении текст маркеров** — `[skip ci]`, `[no-pr]`,
92
+ `[update-snapshots]`. Они ищутся во всём сообщении, а не только
93
+ в заголовке, поэтому упоминание в теле срабатывает как настоящий маркер.
94
+ Реальный случай (2026-09-15): пустой коммит, объяснявший в теле, что
95
+ предыдущая вершина помечена маркером пропуска CI, сам оказался пропущен —
96
+ и PR так и остался без проверок. Пиши словами: «маркер пропуска прогонов».
91
97
 
92
98
  **Исключение — релизные коммиты еженедельного релиза.** Их делает
93
99
  [`release-weekly.yml`](../../.github/workflows/release-weekly.yml) в GitHub
@@ -107,6 +113,33 @@ Actions, и они идут **без префикса задачи**:
107
113
  При **ручном** выпуске (`/release`) префикс обязателен, как обычно: там
108
114
  задача Linear заводится до начала работы.
109
115
 
116
+ **Исключение — коммит со скриншотами.** Его делает
117
+ [`visual-update.yml`](../../.github/workflows/visual-update.yml) в CI:
118
+
119
+ ```text
120
+ chore: update visual snapshots
121
+ ```
122
+
123
+ Префикса намеренно нет: `auto-pr.yml` создаёт PR по коммитам в формате
124
+ `TRI-XXX ...`, и обновление скриншотов на ветке без PR завело бы его
125
+ со случайным заголовком. А вот коммит-триггер, который пушит агент, обычным
126
+ правилам подчиняется — номер задачи плюс маркер:
127
+
128
+ ```text
129
+ TRI-141 Обновление baseline-скриншотов [update-snapshots]
130
+ ```
131
+
132
+ **Исключение — коммиты Dependabot.** Обновления зависимостей и actions
133
+ приезжают с префиксом `deps` (настроено в
134
+ [`.github/dependabot.yml`](../../.github/dependabot.yml)):
135
+
136
+ ```text
137
+ deps: bump vitest from 3.2.7 to 3.2.8
138
+ ```
139
+
140
+ Причина та же: задачи Linear под такой PR нет, и бот её не заведёт. Разбирает
141
+ эти PR человек, при необходимости заводя задачу на нетривиальное обновление.
142
+
110
143
  ---
111
144
 
112
145
  ## Когда запускать линтер
@@ -254,7 +287,7 @@ fi
254
287
  | `git push` ветки, включая защищённый `main` | ✅ |
255
288
  | Создание и мерж PR, комментарии | ✅ |
256
289
  | Чтение REST и Actions | ✅ |
257
- | Диспатч нерелизных workflow (`visual-update.yml`) | ✅ |
290
+ | Диспатч нерелизных workflow (`visual-update.yml`) | ❌ с 2026-09-15 |
258
291
  | `git push` тега | ❌ `RPC failed; HTTP 403` |
259
292
  | `POST /git/refs`, `PATCH /git/refs/heads/*` | ❌ |
260
293
  | `gh release create` | ❌ |
@@ -265,6 +298,19 @@ fi
265
298
  permitted through this proxy` — это ограничение прокси, а не прав токена
266
299
  и не настроек репозитория. Менять branch protection бесполезно.
267
300
 
301
+ **Диспатч `visual-update.yml` перестал проходить 2026-09-15** — 403
302
+ «Resource not accessible by integration», хотя зонды 14 и 21 августа
303
+ фиксировали его как доступный, а 11 сентября утренняя routine ещё его
304
+ выполняла. Со стороны репозитория всё в порядке: тот же вызов с локальным
305
+ PAT проходит (прогон 34941531923), workflow активен, права не менялись.
306
+ Что именно изменилось — allowlist прокси или права GitHub App — изнутри
307
+ репозитория не различить, поэтому причина здесь не утверждается.
308
+
309
+ Следствие: baseline-скриншоты обновляются **пушем коммита с маркером
310
+ `[update-snapshots]`**, а не диспатчем (TRI-141, см.
311
+ `.agents/skills/update-visual-baselines/SKILL.md`). Триггер опирается
312
+ только на `git push`, который из облака доступен.
313
+
268
314
  **Следствие для релиза:** выпустить его из облачной сессии нельзя ни одним
269
315
  маршрутом. Поэтому механика релиза живёт в GitHub Actions
270
316
  (`.github/workflows/release-weekly.yml`), расписание держит сам GitHub, а
@@ -57,15 +57,36 @@ Uncaught Error: Vitest failed to access its internal state.
57
57
  Именно это произошло в 1.39.0 из-за файла `src/components/Carousel/__tests__/utils.ts`
58
58
  (хелпер без постфикса `.test`). Чанк `vendor` вырос с 640 KB до 1.28 MB.
59
59
 
60
+ **Страховка на уровне сборки (TRI-106).** После той регрессии `vite.config.ts`
61
+ исключает из `rollupOptions.input` не только `*.test.{ts,tsx}`, но и целиком
62
+ `src/**/__tests__/**`, `src/**/__test__/**` и `src/**/tests/**`. Важно понимать
63
+ границу: исключение из `input` означает, что такой файл не становится
64
+ **отдельной entry-точкой**. Оно не запрещает Rollup затянуть файл в бандл
65
+ транзитивно, если его импортирует production-код. То же и с `test-utils/`:
66
+ каталог вне `src/` просто не попадает в `input`, но в граф импортов попасть
67
+ может.
68
+
69
+ Поэтому правило ниже — не формальность, а первая линия защиты: если в
70
+ production-код не ведёт ни одного импорта тестового хелпера, транзитивного
71
+ попадания не будет. А окончательная проверка — только содержимое `dist`:
72
+
73
+ ```bash
74
+ grep -rl 'testing-library\|vitest' dist/ --include='*.js' # должно быть пусто
75
+ ```
76
+
77
+ Не читай нарушение правила как «прямо сейчас течёт в бандл» и наоборот — не
78
+ считай соблюдение правила доказательством, что не течёт. Смотри `dist`.
79
+
60
80
  **Общие тестовые хелперы** (моки `ResizeObserver`, фейковые `Touch`, подмена
61
81
  размеров элементов и т.п.) кладём в `test-utils/` в корне репозитория — вне `src/`,
62
- поэтому сборка их физически не видит:
82
+ поэтому отдельной entry-точкой они не становятся и исключения в конфиге сборки
83
+ для них не нужны:
63
84
 
64
85
  ```typescript
65
86
  // ✅ src/components/Carousel/__tests__/CarouselRoot.test.tsx
66
87
  import { getResizeCallback, mockElementSize } from "../../../../test-utils/dom";
67
88
 
68
- // ❌ src/components/Carousel/__tests__/utils.ts — станет entry-точкой сборки
89
+ // ❌ src/components/Carousel/__tests__/utils.ts — общему хелперу здесь не место
69
90
  import { vi } from "vitest";
70
91
  ```
71
92
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "triplexVersion": "1.46.0",
4
- "generatedAt": "2026-09-11T14:38:29.457Z",
3
+ "triplexVersion": "1.48.0",
4
+ "generatedAt": "2026-09-25T18:18:53.795Z",
5
5
  "components": [
6
6
  {
7
7
  "name": "AbstractTree",
@@ -41,13 +41,13 @@
41
41
  },
42
42
  {
43
43
  "name": "AmountField",
44
- "path": "src/components/AmountField/AmountField-AI.md",
44
+ "path": "src/components/AmountField/AmountField-ai.md",
45
45
  "file": "components/AmountField.md",
46
46
  "ai_ready": true
47
47
  },
48
48
  {
49
49
  "name": "Avatar",
50
- "path": "src/components/Avatar/Avatar-AI.md",
50
+ "path": "src/components/Avatar/Avatar-ai.md",
51
51
  "file": "components/Avatar.md",
52
52
  "ai_ready": true
53
53
  },
@@ -117,6 +117,12 @@
117
117
  "file": "components/CardAction.md",
118
118
  "ai_ready": true
119
119
  },
120
+ {
121
+ "name": "CardStatic",
122
+ "path": "src/components/Card/CardStatic-ai.md",
123
+ "file": "components/CardStatic.md",
124
+ "ai_ready": true
125
+ },
120
126
  {
121
127
  "name": "Carousel",
122
128
  "path": "src/components/Carousel",
@@ -138,7 +144,7 @@
138
144
  },
139
145
  {
140
146
  "name": "CheckboxTree",
141
- "path": "src/components/CheckboxTree/CheckboxTree-AI.md",
147
+ "path": "src/components/CheckboxTree/CheckboxTree-ai.md",
142
148
  "file": "components/CheckboxTree.md",
143
149
  "ai_ready": true
144
150
  },
@@ -234,7 +240,7 @@
234
240
  },
235
241
  {
236
242
  "name": "Confirm",
237
- "path": "src/components/Confirm/Confirm-AI.md",
243
+ "path": "src/components/Confirm/Confirm-ai.md",
238
244
  "file": "components/Confirm.md",
239
245
  "ai_ready": true
240
246
  },
@@ -252,7 +258,7 @@
252
258
  },
253
259
  {
254
260
  "name": "DateRange",
255
- "path": "src/components/DateRange/DateRange-AI.md",
261
+ "path": "src/components/DateRange/DateRange-ai.md",
256
262
  "file": "components/DateRange.md",
257
263
  "ai_ready": true
258
264
  },
@@ -644,7 +650,7 @@
644
650
  },
645
651
  {
646
652
  "name": "Slider",
647
- "path": "src/components/Slider/Slider-AI.md",
653
+ "path": "src/components/Slider/Slider-ai.md",
648
654
  "file": "components/Slider.md",
649
655
  "ai_ready": true
650
656
  },
@@ -656,7 +662,7 @@
656
662
  },
657
663
  {
658
664
  "name": "SliderRange",
659
- "path": "src/components/SliderRange/SliderRange-AI.md",
665
+ "path": "src/components/SliderRange/SliderRange-ai.md",
660
666
  "file": "components/SliderRange.md",
661
667
  "ai_ready": true
662
668
  },
@@ -680,7 +686,7 @@
680
686
  },
681
687
  {
682
688
  "name": "StatusTracker",
683
- "path": "src/components/StatusTracker/StatusTracker-AI.md",
689
+ "path": "src/components/StatusTracker/StatusTracker-ai.md",
684
690
  "file": "components/StatusTracker.md",
685
691
  "ai_ready": true
686
692
  },
@@ -692,10 +698,16 @@
692
698
  },
693
699
  {
694
700
  "name": "Stepper",
695
- "path": "src/components/Stepper/Stepper-AI.md",
701
+ "path": "src/components/Stepper/Stepper-ai.md",
696
702
  "file": "components/Stepper.md",
697
703
  "ai_ready": true
698
704
  },
705
+ {
706
+ "name": "StepperExtended",
707
+ "path": "src/components/Stepper/StepperExtended-ai.md",
708
+ "file": "components/StepperExtended.md",
709
+ "ai_ready": true
710
+ },
699
711
  {
700
712
  "name": "Suggest",
701
713
  "path": "src/components/Suggest/Suggest-ai.md",
@@ -704,7 +716,7 @@
704
716
  },
705
717
  {
706
718
  "name": "SuggestField",
707
- "path": "src/components/SuggestField/SuggestField-AI.md",
719
+ "path": "src/components/SuggestField/SuggestField-ai.md",
708
720
  "file": "components/SuggestField.md",
709
721
  "ai_ready": true
710
722
  },
@@ -728,7 +740,7 @@
728
740
  },
729
741
  {
730
742
  "name": "Tabs",
731
- "path": "src/components/Tabs/Tabs-AI.md",
743
+ "path": "src/components/Tabs/Tabs-ai.md",
732
744
  "file": "components/Tabs.md",
733
745
  "ai_ready": true
734
746
  },
@@ -740,7 +752,7 @@
740
752
  },
741
753
  {
742
754
  "name": "TabsLine",
743
- "path": "src/components/TabsLine/TabsLine-AI.md",
755
+ "path": "src/components/TabsLine/TabsLine-ai.md",
744
756
  "file": "components/TabsLine.md",
745
757
  "ai_ready": true
746
758
  },
@@ -752,13 +764,13 @@
752
764
  },
753
765
  {
754
766
  "name": "TagColor",
755
- "path": "src/components/TagColor/TagColor-AI.md",
767
+ "path": "src/components/TagColor/TagColor-ai.md",
756
768
  "file": "components/TagColor.md",
757
769
  "ai_ready": true
758
770
  },
759
771
  {
760
772
  "name": "TagGroup",
761
- "path": "src/components/TagGroup/TagGroup-AI.md",
773
+ "path": "src/components/TagGroup/TagGroup-ai.md",
762
774
  "file": "components/TagGroup.md",
763
775
  "ai_ready": true
764
776
  },
@@ -770,7 +782,7 @@
770
782
  },
771
783
  {
772
784
  "name": "TextareaField",
773
- "path": "src/components/TextareaField/TextareaField-AI.md",
785
+ "path": "src/components/TextareaField/TextareaField-ai.md",
774
786
  "file": "components/TextareaField.md",
775
787
  "ai_ready": true
776
788
  },
@@ -816,6 +828,12 @@
816
828
  "file": "components/TreeViewNode.md",
817
829
  "ai_ready": true
818
830
  },
831
+ {
832
+ "name": "TriggerClickOnKeyDownEvent",
833
+ "path": "src/components/Triggers/TriggerClickOnKeyDownEvent-ai.md",
834
+ "file": "components/TriggerClickOnKeyDownEvent.md",
835
+ "ai_ready": true
836
+ },
819
837
  {
820
838
  "name": "Triggers",
821
839
  "path": "src/components/Triggers/Triggers-AI.md",
@@ -843,10 +861,9 @@
843
861
  },
844
862
  {
845
863
  "name": "UploadZone",
846
- "path": "src/components/UploadZone",
847
- "file": null,
848
- "ai_ready": false,
849
- "storiesPath": "stories/UploadZone/UploadZone.stories.tsx"
864
+ "path": "src/components/UploadZone/UploadZone-ai.md",
865
+ "file": "components/UploadZone.md",
866
+ "ai_ready": true
850
867
  },
851
868
  {
852
869
  "name": "WindowResizeListener",
@@ -1135,6 +1152,16 @@
1135
1152
  "file": "release-notes/1.47.0.mdx",
1136
1153
  "path": "stories/release-notes/v1/1.47.0.mdx"
1137
1154
  },
1155
+ {
1156
+ "version": "1.48.0",
1157
+ "file": "release-notes/1.48.0.mdx",
1158
+ "path": "stories/release-notes/v1/1.48.0.mdx"
1159
+ },
1160
+ {
1161
+ "version": "1.49.0",
1162
+ "file": "release-notes/1.49.0.mdx",
1163
+ "path": "stories/release-notes/v1/1.49.0.mdx"
1164
+ },
1138
1165
  {
1139
1166
  "version": "1.5.0",
1140
1167
  "file": "release-notes/1.5.0.mdx",
@@ -4,4 +4,119 @@ import { Meta, Title, Heading } from "@storybook/addon-docs/blocks";
4
4
 
5
5
  <Title>v1.47.0</Title>
6
6
 
7
+ <Heading>Ломающие изменения</Heading>
8
+
9
+ **Carousel.Indicators**
10
+
11
+ - Удалено свойство `renderIndicator`.
12
+
13
+ **FormFieldTextarea**
14
+
15
+ - Удалено свойство `disabled`, используйте `status` со значением `EFormFieldStatus.DISABLED`. Раньше переданное значение всё равно перетиралось статусом. Для `FormFieldInput` / `FormFieldMaskedInput` то же было сделано в 1.45.0.
16
+
17
+ **TextareaField**
18
+
19
+ - Свойство `disabled` больше нельзя передать в `textareaProps` — следствие правки `FormFieldTextarea` выше.
20
+
21
+ **TreeView**
22
+
23
+ - `ref` на `TreeView` теперь отдаёт корневой `<ul role="tree">`, а не инстанс класса. Компонент по-прежнему реализован классом внутри, но наружу экспортируется как `React.ForwardRefExoticComponent`. Это выравнивает `TreeView` с остальной библиотекой, где `ref` всегда указывает на корневой DOM-узел.
24
+ - `TreeView` больше не является типом: `React.createRef<TreeView>()` не компилируется, используйте `React.createRef<HTMLUListElement>()`.
25
+
7
26
  <Heading>Изменения</Heading>
27
+
28
+ **AmountField**
29
+
30
+ - Добавлено: `clearProps` — свойства кнопки очистки. Нужен, чтобы задать ей доступное имя (`aria-label`): кнопка содержит только иконку, а зашить дефолтную строку нельзя — библиотека мультиязычная. Обработчик клика по-прежнему задаётся через `onClear`.
31
+ - Исправлено: каретка в сфокусированном поле больше не остаётся на позиции из прежнего формата, когда меняется `fractionDigits` или `maxIntegerDigits`, а `value` при этом не меняется.
32
+ - Проведён AI-рефакторинг: у компонента появился `displayName` (виден в React DevTools). Других изменений для потребителя нет.
33
+
34
+ **Avatar**
35
+
36
+ - Проведён AI-рефакторинг: изменений для потребителя нет.
37
+
38
+ **CardStatic**
39
+
40
+ - Добавлено: `CardStatic` пробрасывает `ref` на свой корневой `<div>` — раньше компонент был объявлен как `React.FC`, поэтому переданный `ref` терялся. Тип компонента изменился на `React.ForwardRefExoticComponent`.
41
+ - Проведён AI-рефакторинг: других изменений для потребителя нет.
42
+
43
+ **Carousel.Indicators**
44
+
45
+ - Добавлена анимация для индикаторов.
46
+
47
+ **CheckboxTree**
48
+
49
+ - Добавлено: `CheckboxTree` пробрасывает `ref` на свой корневой `<ul role="tree">` — раньше компонент был объявлен как `React.FC`, поэтому переданный `ref` терялся. Тип компонента изменился на `React.ForwardRefExoticComponent`.
50
+ - Добавлено: `CheckboxTree` прокидывает `className`, `id`, `data-*` и остальные html-атрибуты на свой корневой `<ul>` — раньше он деструктурировал только `checkboxes`, `onChange` и `size`, а всё остальное молча терял, хотя тип их разрешал.
51
+ - Исправлено: узел с пустым массивом `children` больше не становится выбранным сам по себе. Раньше условие «все потомки выбраны» выполнялось для него вырожденно (`0 === 0`), и узел уезжал в `onChange` с `checked: true` после первого же клика по любому чекбоксу дерева. Теперь пустой `children` обрабатывается как лист.
52
+ - Проведён AI-рефакторинг: других изменений для потребителя нет.
53
+
54
+ **CheckboxTreeExtended**
55
+
56
+ - Добавлено: `CheckboxTreeExtended` пробрасывает `ref` на свой корневой `<ul role="tree">`. Тип компонента изменился на `React.ForwardRefExoticComponent`.
57
+ - Изменено: тип `ICheckboxTreeExtendedSFC` переименован в `ICheckboxTreeExtendedFC` — название `SFC` больше не отражает форму компонента. Старое имя сохранено как deprecated-алиас, поэтому импорты не ломаются. Но алиас указывает на новый тип: если вы аннотировали им собственный компонент (`const My: ICheckboxTreeExtendedSFC = (props) => ...`), аннотацию нужно убрать или заменить — это следствие перехода на `forwardRef`.
58
+
59
+ **CollapsibleTreeExtended**
60
+
61
+ - Добавлено: `CollapsibleTreeExtended` пробрасывает `ref` на свой корневой `<ul role="tree">`. Тип компонента изменился на `React.ForwardRefExoticComponent`.
62
+ - Изменено: тип `ICollapsibleTreeExtendedSFC` переименован в `ICollapsibleTreeExtendedFC`. Старое имя сохранено как deprecated-алиас, поэтому импорты не ломаются, но сам тип теперь `ForwardRefExoticComponent` — собственные аннотации им нужно убрать или заменить.
63
+
64
+ **Confirm**
65
+
66
+ - Добавлено: `Confirm` пробрасывает `ref` на свой корневой `<div>` — раньше компонент был объявлен как `React.FC`, поэтому переданный `ref` терялся. Тип компонента изменился на `React.ForwardRefExoticComponent`.
67
+ - Добавлено: `ref` пробрасывают и составные части — `Confirm.Content` (и её `Title` / `SubTitle`), `Confirm.Controls`, `Confirm.Close`. Раньше все они были объявлены как `React.FC`.
68
+ - Изменено: у `Confirm.Close` больше нет дефолтного `title="Закрыть"`. Кнопка иконочная, поэтому без явного `title` (или `aria-label`) у неё не будет доступного имени — передавайте его сами. Строки на конкретном языке внутри компонентов библиотеки не задаются.
69
+ - Изменено: `ref` у `Confirm.Content.Title` и `Confirm.Content.SubTitle` типизирован как `HTMLElement` вместо `HTMLHeadingElement` и `HTMLDivElement`. Оба компонента разрешают переопределить тег через `tag`, и прежние типы обещали не тот DOM-узел.
70
+ - Проведён AI-рефакторинг: других изменений для потребителя нет.
71
+
72
+ **DateRange**
73
+
74
+ - Добавлено: `DateRange` пробрасывает `ref` на свой корневой `<div>` — раньше компонент был объявлен как `React.FC`, поэтому переданный `ref` терялся. Тип компонента изменился на `React.ForwardRefExoticComponent`.
75
+ - Проведён AI-рефакторинг: других изменений для потребителя нет.
76
+
77
+ **FormField**
78
+
79
+ - Исправлен баг, когда в консоли браузера появлялась ошибка связи лейбла с полем для полей без элемента ввода.
80
+
81
+ **Page.Footer**
82
+
83
+ - Добавлен нижний отступ для `type={EFooterPageType.SECOND}`.
84
+
85
+ **Slider**
86
+
87
+ - Добавлено: `Slider` пробрасывает `ref` на свой корневой `<div>` — раньше компонент был объявлен как `React.FC`, поэтому переданный `ref` терялся. Тип компонента изменился на `React.ForwardRefExoticComponent`.
88
+ - Проведён AI-рефакторинг, добавлен `displayName`: других изменений для потребителя нет.
89
+
90
+ **SliderRange**
91
+
92
+ - Проведён AI-рефакторинг: изменений для потребителя нет.
93
+
94
+ **Step**
95
+
96
+ - Изменен цвет токена `Step.Background_Active` в светлой теме.
97
+
98
+ **TabsLine**
99
+
100
+ - Добавлено: `TabsLine` пробрасывает `ref` на свой корневой `<div>` — раньше компонент был объявлен как `React.FC`, поэтому переданный `ref` терялся. Тип компонента изменился на `React.ForwardRefExoticComponent`.
101
+ - Добавлено: `ref` пробрасывают и остальные компоненты семейства — `TabsLineDesktop`, `TabsLineMobile` и `TabsLineDropdown`. Раньше все они были объявлены как `React.FC`.
102
+ - Добавлено: `TabsLineDesktop` и `TabsLineMobile` прокидывают `className` и остальные html-атрибуты на свой корневой `<div>` — раньше они их молча теряли.
103
+ - Исправлено: таб больше не теряет `className`, `onMouseEnter` и `onMouseLeave`, переданные в элементе массива `tabs`. Раньше `className` перетирался внутренним, а обработчики наведения не вызывались.
104
+ - Исправлено: кнопка дропдауна больше не теряет `className`, `onClick` и `onKeyDown`, переданные в `dropdownTargetHtmlAttributes`. Раньше `className` перетирался внутренним, а обработчики не вызывались.
105
+ - Исправлено: табы отображаются на первом же рендере. Раньше распределение между строкой и дропдауном считалось в `useEffect`, поэтому первый кадр был пустым.
106
+ - Изменено: из кнопки дропдауна и пунктов выпадающего списка убраны вложенные `<span>`-обёртки без классов в LESS-модуле. Визуально ничего не изменилось, но собственные стили по вложенности (`button > span`) и e2e-локаторы могут перестать находить элементы.
107
+ - Изменено: DOM `id` пункта выпадающего списка больше не равен `id` таба — он выводится из внутреннего идентификатора экземпляра. Раньше два `TabsLine` с одинаковыми `id` табов давали дублирующиеся DOM `id`, и `aria-activedescendant` мог адресовать пункт чужого экземпляра. В `onChangeTab` по-прежнему приходит исходный `id` таба.
108
+ - Проведён AI-рефакторинг, добавлен `displayName`.
109
+
110
+ **TextareaField**
111
+
112
+ - Добавлено: `TextareaField` пробрасывает `ref` на `<div>` поля (`FormField`, внутри обёртки `FormGroup`) — туда же, куда уходит `className`. Раньше компонент был объявлен как `React.FC`, поэтому переданный `ref` терялся. Тип компонента изменился на `React.ForwardRefExoticComponent`.
113
+ - Проведён AI-рефакторинг, добавлен `displayName`: других изменений для потребителя нет.
114
+
115
+ **TriggerClickOnKeyDownEvent**
116
+
117
+ - Добавлено: тип props `ITriggerClickOnKeyDownEventProps` теперь экспортируется — раньше интерфейс был внутренним, и типизировать обёртки над компонентом приходилось вручную.
118
+ - Проведён AI-рефакторинг: других изменений для потребителя нет.
119
+
120
+ **Установка**
121
+
122
+ - Тег `react17` в npm снова указывает на актуальную React 17-сборку: `npm i @sberbusiness/triplex-next@react17` ставит версию текущего релиза. Раньше тег не двигался при выпусках и с августа отдавал `0.41.1`. Теги работают в npmjs; из внутреннего registry по-прежнему ставьте по точному номеру версии.
@@ -0,0 +1,68 @@
1
+ import { Meta, Title, Heading } from "@storybook/addon-docs/blocks";
2
+
3
+ <Meta title="release-notes/v1/1.48.0" />
4
+
5
+ <Title>v1.48.0</Title>
6
+
7
+ <Heading>Изменения</Heading>
8
+
9
+ **Calendar**
10
+
11
+ - Исправлена стилизация диапазона лет.
12
+
13
+ **ChipMonthYear / MonthYearPicker**
14
+
15
+ - Исправлен баг, когда в адаптивном режиме отображался `placeholder` вместо `label`.
16
+
17
+ **FormField**
18
+
19
+ - Исправлен баг, когда поле в фокусе при изменении статуса на `disabled` теряло фокус, но оставалось в состоянии `active`.
20
+
21
+ **LightBox**
22
+
23
+ - Исправлен баг, когда `LightBox.TopOverlay` был шире контента `LightBox`.
24
+
25
+ **StatusTracker**
26
+
27
+ - Добавлено: `StatusTracker.Media`, `.Header.Title`, `.Header.Sum`, `.Header.Description` (и `.Footer.Description`), `.Body.Alert`, `.Body.Status` и `.Footer.Button` пробрасывают `ref` на свой корневой элемент — раньше они были объявлены как `React.FC`, поэтому переданный `ref` терялся. Тип этих компонентов изменился на `React.ForwardRefExoticComponent`.
28
+ - Добавлено: `displayName` у тех же субкомпонентов, кроме `.Footer.Button` (у него он уже был) — видно в React DevTools и в snapshot-тестах.
29
+ - Проведён AI-рефакторинг: других изменений для потребителя нет — публичный API и внешний вид прежние.
30
+
31
+ **Stepper**
32
+
33
+ - Изменено: размер по умолчанию теперь `EComponentSize.MD` вместо `EComponentSize.LG`. Если `size` не передан, шаги и кнопки прокрутки становятся меньше. Чтобы сохранить прежний вид, передайте `size={EComponentSize.LG}` явно.
34
+ - Проведён AI-рефакторинг: других изменений для потребителя нет.
35
+
36
+ **StepperExtended**
37
+
38
+ - Изменено: размер по умолчанию теперь `EComponentSize.MD` вместо `EComponentSize.LG` — так же, как у `Stepper`. Чтобы сохранить прежний вид, передайте `size={EComponentSize.LG}` явно.
39
+ - Добавлено: компонент пробрасывает `ref` на свой корневой `<ol>` — раньше он был объявлен как `React.FC`, поэтому переданный `ref` терялся. Тип компонента изменился на `React.ForwardRefExoticComponent`. Prop `forwardedRef` продолжает работать и указывает на тот же элемент.
40
+ - Проведён AI-рефакторинг, добавлен `displayName`: других изменений для потребителя нет.
41
+
42
+ **SuggestField**
43
+
44
+ - Проведён AI-рефакторинг: изменений для потребителя нет — публичный API и внешний вид прежние.
45
+
46
+ **Tabs**
47
+
48
+ - Добавлено: `Tabs` пробрасывает `ref` на корневой элемент (`<div role="tablist">`) и получил `displayName` — раньше компонент был объявлен как `React.FC`, поэтому переданный `ref` терялся. Тип компонента изменился на `React.ForwardRefExoticComponent`.
49
+ - Исправлено: строка табов больше не выпадает из обхода по `Tab` после смены `selectedId` извне или когда таб с фокусом уезжает в выпадающий список. Если выбранный таб в выпадающем списке, в таб-порядок попадает первый таб строки.
50
+ - Исправлено: поля таба `label` и `showNotificationIcon` больше не попадают в разметку как атрибуты контейнера таба — React перестал писать в консоль предупреждение о неизвестном атрибуте `showNotificationIcon`.
51
+ - Исправлено: пустой массив `tabs` больше не роняет компонент.
52
+ - Проведён AI-рефакторинг: других изменений для потребителя нет.
53
+
54
+ **TagColor**
55
+
56
+ - Проведён AI-рефакторинг: изменений для потребителя нет — публичный API и внешний вид прежние.
57
+
58
+ **TagGroup**
59
+
60
+ - Проведён AI-рефакторинг, добавлен `displayName`: других изменений для потребителя нет.
61
+
62
+ **UploadZone**
63
+
64
+ - Добавлено: интерфейс `IUploadZoneProps` экспортируется из пакета — раньше типизировать обёртку над `UploadZone` было нечем.
65
+ - Добавлено: `UploadZone.Input` (`UploadZoneInput`) пробрасывает `ref` на свой `<input type="file">` — раньше компонент был объявлен как `React.FC`, поэтому переданный `ref` терялся. Тип компонента изменился на `React.ForwardRefExoticComponent`.
66
+ - Исправлено: `displayName` у `UploadZone.Input` — был `UploadZone`, стал `UploadZoneInput`. Видно в React DevTools и в snapshot-тестах.
67
+ - Исправлено: при закрытии дроп-зоны в консоли больше не появляется предупреждение React «Attempted to synchronously unmount a root while React was already rendering».
68
+ - Проведён AI-рефакторинг: других изменений для потребителя нет.
@@ -0,0 +1,7 @@
1
+ import { Meta, Title, Heading } from "@storybook/addon-docs/blocks";
2
+
3
+ <Meta title="release-notes/v1/1.49.0" />
4
+
5
+ <Title>v1.49.0</Title>
6
+
7
+ <Heading>Изменения</Heading>
@@ -5312,8 +5312,8 @@
5312
5312
  "Background_Active": {
5313
5313
  "path": "Step.Background_Active",
5314
5314
  "light": {
5315
- "ref": "ColorBrand.100",
5316
- "resolved": "#E3FFFA"
5315
+ "ref": "ColorBrand.95",
5316
+ "resolved": "#C5FAF1"
5317
5317
  },
5318
5318
  "dark": {
5319
5319
  "ref": "ColorBrand.20",
@@ -6357,6 +6357,6 @@
6357
6357
  },
6358
6358
  "internal": {
6359
6359
  "cssVarPattern": "--triplex-next-{Группа}-{Токен}-{версия}",
6360
- "versionSuffix": "1-46-0"
6360
+ "versionSuffix": "1-48-0"
6361
6361
  }
6362
6362
  }