@sberbusiness/triplex-next-mcp-server 1.46.0-beta → 1.50.0-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -7
- package/bundle/components/Amount.md +2 -1
- package/bundle/components/AmountField.md +222 -323
- package/bundle/components/Avatar.md +138 -146
- package/bundle/components/Badge.md +2 -1
- package/bundle/components/BodyPage.md +2 -1
- package/bundle/components/Button.md +5 -1
- package/bundle/components/ButtonDropdownExtended.md +3 -1
- package/bundle/components/ButtonIcon.md +3 -1
- package/bundle/components/Calendar.md +3 -1
- package/bundle/components/CardAction.md +1 -0
- package/bundle/components/CardStatic.md +402 -0
- package/bundle/components/CheckboxTree.md +157 -215
- package/bundle/components/CheckboxTreeExtended.md +7 -7
- package/bundle/components/CheckboxXGroup.md +2 -1
- package/bundle/components/Chip.md +2 -1
- package/bundle/components/ChipGroup.md +1 -1
- package/bundle/components/ChipMonthYearPicker.md +6 -5
- package/bundle/components/ChipMultiselect.md +4 -1
- package/bundle/components/ChipOptions.md +2 -1
- package/bundle/components/ChipSort.md +4 -1
- package/bundle/components/ChipSuggest.md +7 -6
- package/bundle/components/CollapsibleTree.md +10 -5
- package/bundle/components/CollapsibleTreeExtended.md +8 -6
- package/bundle/components/ComposedKeyDownListener.md +4 -3
- package/bundle/components/Confirm.md +346 -281
- package/bundle/components/DateField.md +7 -1
- package/bundle/components/DateRange.md +351 -210
- package/bundle/components/Divider.md +85 -138
- package/bundle/components/DocumentNumberEdit.md +173 -214
- package/bundle/components/Dropdown.md +11 -1
- package/bundle/components/Ellipsis.md +131 -147
- package/bundle/components/FooterPage.md +4 -1
- package/bundle/components/FormField.md +13 -5
- package/bundle/components/FormGroup.md +3 -2
- package/bundle/components/Gap.md +1 -1
- package/bundle/components/Header.md +1 -0
- package/bundle/components/HeaderPage.md +3 -1
- package/bundle/components/HelpBox.md +2 -1
- package/bundle/components/IconWrapper.md +10 -6
- package/bundle/components/ImageGallery.md +2 -1
- package/bundle/components/ImageGalleryExtended.md +2 -1
- package/bundle/components/IslandAccordion.md +6 -1
- package/bundle/components/KeyDownListener.md +3 -2
- package/bundle/components/LightBox.md +15 -1
- package/bundle/components/List.md +2 -1
- package/bundle/components/ListActionItem.md +2 -1
- package/bundle/components/ListItem.md +3 -1
- package/bundle/components/ListItemControlsButton.md +2 -1
- package/bundle/components/ListItemSelectable.md +2 -1
- package/bundle/components/ListMaster.md +2 -2
- package/bundle/components/ListMasterFooter.md +2 -1
- package/bundle/components/ListMasterHeader.md +2 -1
- package/bundle/components/ListSortable.md +2 -1
- package/bundle/components/ListSortableItem.md +2 -1
- package/bundle/components/ListTableItem.md +10 -7
- package/bundle/components/LoaderMiddle.md +5 -1
- package/bundle/components/LoaderScreen.md +7 -1
- package/bundle/components/LoaderSmall.md +10 -4
- package/bundle/components/MaskedField.md +3 -1
- package/bundle/components/MediaWidth.md +2 -1
- package/bundle/components/MobileView.md +2 -1
- package/bundle/components/ModalWindow.md +4 -1
- package/bundle/components/MonthYearField.md +19 -5
- package/bundle/components/Notification.md +1 -0
- package/bundle/components/Overlay.md +7 -2
- package/bundle/components/Pagination.md +1 -7
- package/bundle/components/Radio.md +238 -115
- package/bundle/components/RadioXGroup.md +259 -0
- package/bundle/components/RadioYGroup.md +266 -0
- package/bundle/components/SegmentedControl.md +505 -158
- package/bundle/components/SelectExtendedField.md +2 -1
- package/bundle/components/SelectField.md +4 -1
- package/bundle/components/Skeleton.md +140 -69
- package/bundle/components/Slider.md +389 -97
- package/bundle/components/SliderRange.md +486 -105
- package/bundle/components/Spoiler.md +245 -63
- package/bundle/components/StatusTracker.md +386 -94
- package/bundle/components/Step.md +257 -68
- package/bundle/components/Stepper.md +355 -102
- package/bundle/components/StepperExtended.md +633 -0
- package/bundle/components/SuggestField.md +1061 -96
- package/bundle/components/SwipeableArea.md +7 -7
- package/bundle/components/Tabs.md +266 -92
- package/bundle/components/TabsExtended.md +18 -18
- package/bundle/components/TabsLine.md +302 -127
- package/bundle/components/TagColor.md +187 -66
- package/bundle/components/TagGroup.md +184 -48
- package/bundle/components/TextField.md +8 -4
- package/bundle/components/TextareaField.md +279 -70
- package/bundle/components/ThemeProvider.md +2 -1
- package/bundle/components/Tooltip.md +6 -3
- package/bundle/components/TopOverlay.md +17 -1
- package/bundle/components/TreeView.md +16 -7
- package/bundle/components/TriggerClickOnKeyDownEvent.md +277 -0
- package/bundle/components/UploadZone.md +318 -0
- package/bundle/guides/codestyle.md +16 -1
- package/bundle/guides/commits.md +47 -1
- package/bundle/guides/context.md +4 -1
- package/bundle/guides/tests.md +23 -2
- package/bundle/manifest.json +78 -29
- package/bundle/release-notes/1.47.0.mdx +115 -0
- package/bundle/release-notes/1.48.0.mdx +68 -0
- package/bundle/release-notes/1.49.0.mdx +85 -0
- package/bundle/release-notes/1.50.0.mdx +35 -0
- package/bundle/release-notes/1.51.0.mdx +7 -0
- package/bundle/tokens.json +163 -13
- package/dist/index.js +220 -6
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/bundle/guides/commits.md
CHANGED
|
@@ -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, а
|
package/bundle/guides/context.md
CHANGED
|
@@ -78,7 +78,7 @@ src/components/Button/
|
|
|
78
78
|
### Публичный слой — токены в TypeScript
|
|
79
79
|
|
|
80
80
|
Источник значений: `src/components/DesignTokens/DesignTokensCore.ts` (палитра,
|
|
81
|
-
|
|
81
|
+
12 групп) и `src/components/DesignTokens/components/{Group}.ts` (токены
|
|
82
82
|
компонентов, 56 групп). Путь токена — `{Группа}.{Токен}`:
|
|
83
83
|
|
|
84
84
|
```text
|
|
@@ -109,6 +109,9 @@ const TOKENS = {
|
|
|
109
109
|
из `DesignTokensCore` (`scripts/generateRefTokensTypes.ts`), ссылка на
|
|
110
110
|
компонентный токен не скомпилируется;
|
|
111
111
|
- у компонентного токена всегда пара значений — `[светлая, тёмная]` тема;
|
|
112
|
+
- палитра теней — core-группы `Shadow` (`Shadow.01` … `Shadow.07`, светлая
|
|
113
|
+
тема) и `DarkShadow` (`DarkShadow.01` … `DarkShadow.07`, тёмная), значение —
|
|
114
|
+
готовая строка `box-shadow`;
|
|
112
115
|
- имена core-групп и групп компонентов не должны пересекаться: в одном плоском
|
|
113
116
|
неймспейсе они схлопнутся. Проверяется гардом в `scripts/syncAiMdTokens.ts`.
|
|
114
117
|
|
package/bundle/guides/tests.md
CHANGED
|
@@ -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 —
|
|
89
|
+
// ❌ src/components/Carousel/__tests__/utils.ts — общему хелперу здесь не место
|
|
69
90
|
import { vi } from "vitest";
|
|
70
91
|
```
|
|
71
92
|
|
package/bundle/manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"triplexVersion": "1.
|
|
4
|
-
"generatedAt": "2026-
|
|
3
|
+
"triplexVersion": "1.50.0",
|
|
4
|
+
"generatedAt": "2026-10-09T17:30:26.195Z",
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
261
|
+
"path": "src/components/DateRange/DateRange-ai.md",
|
|
256
262
|
"file": "components/DateRange.md",
|
|
257
263
|
"ai_ready": true
|
|
258
264
|
},
|
|
@@ -264,13 +270,13 @@
|
|
|
264
270
|
},
|
|
265
271
|
{
|
|
266
272
|
"name": "Divider",
|
|
267
|
-
"path": "src/components/Divider/Divider-
|
|
273
|
+
"path": "src/components/Divider/Divider-ai.md",
|
|
268
274
|
"file": "components/Divider.md",
|
|
269
275
|
"ai_ready": true
|
|
270
276
|
},
|
|
271
277
|
{
|
|
272
278
|
"name": "DocumentNumberEdit",
|
|
273
|
-
"path": "src/components/DocumentNumberEdit/DocumentNumberEdit-
|
|
279
|
+
"path": "src/components/DocumentNumberEdit/DocumentNumberEdit-ai.md",
|
|
274
280
|
"file": "components/DocumentNumberEdit.md",
|
|
275
281
|
"ai_ready": true
|
|
276
282
|
},
|
|
@@ -282,7 +288,7 @@
|
|
|
282
288
|
},
|
|
283
289
|
{
|
|
284
290
|
"name": "Ellipsis",
|
|
285
|
-
"path": "src/components/Ellipsis/Ellipsis-
|
|
291
|
+
"path": "src/components/Ellipsis/Ellipsis-ai.md",
|
|
286
292
|
"file": "components/Ellipsis.md",
|
|
287
293
|
"ai_ready": true
|
|
288
294
|
},
|
|
@@ -608,10 +614,22 @@
|
|
|
608
614
|
},
|
|
609
615
|
{
|
|
610
616
|
"name": "Radio",
|
|
611
|
-
"path": "src/components/Radio/Radio-
|
|
617
|
+
"path": "src/components/Radio/Radio-ai.md",
|
|
612
618
|
"file": "components/Radio.md",
|
|
613
619
|
"ai_ready": true
|
|
614
620
|
},
|
|
621
|
+
{
|
|
622
|
+
"name": "RadioXGroup",
|
|
623
|
+
"path": "src/components/Radio/RadioXGroup-ai.md",
|
|
624
|
+
"file": "components/RadioXGroup.md",
|
|
625
|
+
"ai_ready": true
|
|
626
|
+
},
|
|
627
|
+
{
|
|
628
|
+
"name": "RadioYGroup",
|
|
629
|
+
"path": "src/components/Radio/RadioYGroup-ai.md",
|
|
630
|
+
"file": "components/RadioYGroup.md",
|
|
631
|
+
"ai_ready": true
|
|
632
|
+
},
|
|
615
633
|
{
|
|
616
634
|
"name": "Row",
|
|
617
635
|
"path": "src/components/Row/Row-ai.md",
|
|
@@ -620,7 +638,7 @@
|
|
|
620
638
|
},
|
|
621
639
|
{
|
|
622
640
|
"name": "SegmentedControl",
|
|
623
|
-
"path": "src/components/SegmentedControl/SegmentedControl-
|
|
641
|
+
"path": "src/components/SegmentedControl/SegmentedControl-ai.md",
|
|
624
642
|
"file": "components/SegmentedControl.md",
|
|
625
643
|
"ai_ready": true
|
|
626
644
|
},
|
|
@@ -638,13 +656,13 @@
|
|
|
638
656
|
},
|
|
639
657
|
{
|
|
640
658
|
"name": "Skeleton",
|
|
641
|
-
"path": "src/components/Skeleton/Skeleton-
|
|
659
|
+
"path": "src/components/Skeleton/Skeleton-ai.md",
|
|
642
660
|
"file": "components/Skeleton.md",
|
|
643
661
|
"ai_ready": true
|
|
644
662
|
},
|
|
645
663
|
{
|
|
646
664
|
"name": "Slider",
|
|
647
|
-
"path": "src/components/Slider/Slider-
|
|
665
|
+
"path": "src/components/Slider/Slider-ai.md",
|
|
648
666
|
"file": "components/Slider.md",
|
|
649
667
|
"ai_ready": true
|
|
650
668
|
},
|
|
@@ -656,7 +674,7 @@
|
|
|
656
674
|
},
|
|
657
675
|
{
|
|
658
676
|
"name": "SliderRange",
|
|
659
|
-
"path": "src/components/SliderRange/SliderRange-
|
|
677
|
+
"path": "src/components/SliderRange/SliderRange-ai.md",
|
|
660
678
|
"file": "components/SliderRange.md",
|
|
661
679
|
"ai_ready": true
|
|
662
680
|
},
|
|
@@ -674,28 +692,34 @@
|
|
|
674
692
|
},
|
|
675
693
|
{
|
|
676
694
|
"name": "Spoiler",
|
|
677
|
-
"path": "src/components/Spoiler/Spoiler-
|
|
695
|
+
"path": "src/components/Spoiler/Spoiler-ai.md",
|
|
678
696
|
"file": "components/Spoiler.md",
|
|
679
697
|
"ai_ready": true
|
|
680
698
|
},
|
|
681
699
|
{
|
|
682
700
|
"name": "StatusTracker",
|
|
683
|
-
"path": "src/components/StatusTracker/StatusTracker-
|
|
701
|
+
"path": "src/components/StatusTracker/StatusTracker-ai.md",
|
|
684
702
|
"file": "components/StatusTracker.md",
|
|
685
703
|
"ai_ready": true
|
|
686
704
|
},
|
|
687
705
|
{
|
|
688
706
|
"name": "Step",
|
|
689
|
-
"path": "src/components/Step/Step-
|
|
707
|
+
"path": "src/components/Step/Step-ai.md",
|
|
690
708
|
"file": "components/Step.md",
|
|
691
709
|
"ai_ready": true
|
|
692
710
|
},
|
|
693
711
|
{
|
|
694
712
|
"name": "Stepper",
|
|
695
|
-
"path": "src/components/Stepper/Stepper-
|
|
713
|
+
"path": "src/components/Stepper/Stepper-ai.md",
|
|
696
714
|
"file": "components/Stepper.md",
|
|
697
715
|
"ai_ready": true
|
|
698
716
|
},
|
|
717
|
+
{
|
|
718
|
+
"name": "StepperExtended",
|
|
719
|
+
"path": "src/components/Stepper/StepperExtended-ai.md",
|
|
720
|
+
"file": "components/StepperExtended.md",
|
|
721
|
+
"ai_ready": true
|
|
722
|
+
},
|
|
699
723
|
{
|
|
700
724
|
"name": "Suggest",
|
|
701
725
|
"path": "src/components/Suggest/Suggest-ai.md",
|
|
@@ -704,7 +728,7 @@
|
|
|
704
728
|
},
|
|
705
729
|
{
|
|
706
730
|
"name": "SuggestField",
|
|
707
|
-
"path": "src/components/SuggestField/SuggestField-
|
|
731
|
+
"path": "src/components/SuggestField/SuggestField-ai.md",
|
|
708
732
|
"file": "components/SuggestField.md",
|
|
709
733
|
"ai_ready": true
|
|
710
734
|
},
|
|
@@ -728,7 +752,7 @@
|
|
|
728
752
|
},
|
|
729
753
|
{
|
|
730
754
|
"name": "Tabs",
|
|
731
|
-
"path": "src/components/Tabs/Tabs-
|
|
755
|
+
"path": "src/components/Tabs/Tabs-ai.md",
|
|
732
756
|
"file": "components/Tabs.md",
|
|
733
757
|
"ai_ready": true
|
|
734
758
|
},
|
|
@@ -740,7 +764,7 @@
|
|
|
740
764
|
},
|
|
741
765
|
{
|
|
742
766
|
"name": "TabsLine",
|
|
743
|
-
"path": "src/components/TabsLine/TabsLine-
|
|
767
|
+
"path": "src/components/TabsLine/TabsLine-ai.md",
|
|
744
768
|
"file": "components/TabsLine.md",
|
|
745
769
|
"ai_ready": true
|
|
746
770
|
},
|
|
@@ -752,13 +776,13 @@
|
|
|
752
776
|
},
|
|
753
777
|
{
|
|
754
778
|
"name": "TagColor",
|
|
755
|
-
"path": "src/components/TagColor/TagColor-
|
|
779
|
+
"path": "src/components/TagColor/TagColor-ai.md",
|
|
756
780
|
"file": "components/TagColor.md",
|
|
757
781
|
"ai_ready": true
|
|
758
782
|
},
|
|
759
783
|
{
|
|
760
784
|
"name": "TagGroup",
|
|
761
|
-
"path": "src/components/TagGroup/TagGroup-
|
|
785
|
+
"path": "src/components/TagGroup/TagGroup-ai.md",
|
|
762
786
|
"file": "components/TagGroup.md",
|
|
763
787
|
"ai_ready": true
|
|
764
788
|
},
|
|
@@ -770,7 +794,7 @@
|
|
|
770
794
|
},
|
|
771
795
|
{
|
|
772
796
|
"name": "TextareaField",
|
|
773
|
-
"path": "src/components/TextareaField/TextareaField-
|
|
797
|
+
"path": "src/components/TextareaField/TextareaField-ai.md",
|
|
774
798
|
"file": "components/TextareaField.md",
|
|
775
799
|
"ai_ready": true
|
|
776
800
|
},
|
|
@@ -816,6 +840,12 @@
|
|
|
816
840
|
"file": "components/TreeViewNode.md",
|
|
817
841
|
"ai_ready": true
|
|
818
842
|
},
|
|
843
|
+
{
|
|
844
|
+
"name": "TriggerClickOnKeyDownEvent",
|
|
845
|
+
"path": "src/components/Triggers/TriggerClickOnKeyDownEvent-ai.md",
|
|
846
|
+
"file": "components/TriggerClickOnKeyDownEvent.md",
|
|
847
|
+
"ai_ready": true
|
|
848
|
+
},
|
|
819
849
|
{
|
|
820
850
|
"name": "Triggers",
|
|
821
851
|
"path": "src/components/Triggers/Triggers-AI.md",
|
|
@@ -843,10 +873,9 @@
|
|
|
843
873
|
},
|
|
844
874
|
{
|
|
845
875
|
"name": "UploadZone",
|
|
846
|
-
"path": "src/components/UploadZone",
|
|
847
|
-
"file":
|
|
848
|
-
"ai_ready":
|
|
849
|
-
"storiesPath": "stories/UploadZone/UploadZone.stories.tsx"
|
|
876
|
+
"path": "src/components/UploadZone/UploadZone-ai.md",
|
|
877
|
+
"file": "components/UploadZone.md",
|
|
878
|
+
"ai_ready": true
|
|
850
879
|
},
|
|
851
880
|
{
|
|
852
881
|
"name": "WindowResizeListener",
|
|
@@ -1135,11 +1164,31 @@
|
|
|
1135
1164
|
"file": "release-notes/1.47.0.mdx",
|
|
1136
1165
|
"path": "stories/release-notes/v1/1.47.0.mdx"
|
|
1137
1166
|
},
|
|
1167
|
+
{
|
|
1168
|
+
"version": "1.48.0",
|
|
1169
|
+
"file": "release-notes/1.48.0.mdx",
|
|
1170
|
+
"path": "stories/release-notes/v1/1.48.0.mdx"
|
|
1171
|
+
},
|
|
1172
|
+
{
|
|
1173
|
+
"version": "1.49.0",
|
|
1174
|
+
"file": "release-notes/1.49.0.mdx",
|
|
1175
|
+
"path": "stories/release-notes/v1/1.49.0.mdx"
|
|
1176
|
+
},
|
|
1138
1177
|
{
|
|
1139
1178
|
"version": "1.5.0",
|
|
1140
1179
|
"file": "release-notes/1.5.0.mdx",
|
|
1141
1180
|
"path": "stories/release-notes/v1/1.5.0.mdx"
|
|
1142
1181
|
},
|
|
1182
|
+
{
|
|
1183
|
+
"version": "1.50.0",
|
|
1184
|
+
"file": "release-notes/1.50.0.mdx",
|
|
1185
|
+
"path": "stories/release-notes/v1/1.50.0.mdx"
|
|
1186
|
+
},
|
|
1187
|
+
{
|
|
1188
|
+
"version": "1.51.0",
|
|
1189
|
+
"file": "release-notes/1.51.0.mdx",
|
|
1190
|
+
"path": "stories/release-notes/v1/1.51.0.mdx"
|
|
1191
|
+
},
|
|
1143
1192
|
{
|
|
1144
1193
|
"version": "1.6.0",
|
|
1145
1194
|
"file": "release-notes/1.6.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-рефакторинг: других изменений для потребителя нет.
|