@sberbusiness/triplex-next-mcp-server 1.42.0-beta → 1.44.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 +3 -2
- package/bundle/components/BodyPage.md +72 -4
- package/bundle/components/Button.md +1 -0
- package/bundle/components/Checkbox.md +7 -1
- package/bundle/components/CheckboxTreeExtended.md +149 -248
- package/bundle/components/CheckboxXGroup.md +2 -0
- package/bundle/components/CheckboxYGroup.md +7 -2
- package/bundle/components/ChipGroup.md +195 -126
- package/bundle/components/CollapsibleTreeExtended.md +6 -1
- package/bundle/components/DatePickerExtended.md +409 -262
- package/bundle/components/ExpandAnimation.md +263 -218
- package/bundle/components/Footer.md +235 -278
- package/bundle/components/Island.md +36 -1
- package/bundle/components/LightBox.md +14 -3
- package/bundle/components/MediaWidth.md +7 -1
- package/bundle/components/Notification.md +21 -3
- package/bundle/components/Overlay.md +24 -1
- package/bundle/components/Pagination.md +12 -13
- package/bundle/components/SliderExtended.md +358 -222
- package/bundle/components/TableBasic.md +2294 -0
- package/bundle/components/TabsExtended.md +380 -194
- package/bundle/components/Tag.md +259 -78
- package/bundle/components/TopOverlay.md +366 -90
- package/bundle/components/TreeView.md +343 -166
- package/bundle/components/TreeViewNode.md +436 -0
- package/bundle/components/UnorderedList.md +254 -0
- package/bundle/components/UnorderedListExtended.md +255 -0
- package/bundle/components/WindowResizeListener.md +249 -0
- package/bundle/guides/commits.md +121 -15
- package/bundle/guides/stories.md +1 -1
- package/bundle/manifest.json +46 -20
- package/bundle/release-notes/1.43.0.mdx +87 -0
- package/bundle/release-notes/1.44.0.mdx +120 -0
- package/bundle/release-notes/1.45.0.mdx +7 -0
- package/package.json +1 -1
|
@@ -56,7 +56,7 @@ version: "1.0"
|
|
|
56
56
|
| Prop | Тип | По умолчанию | Описание |
|
|
57
57
|
|---|---|---|---|
|
|
58
58
|
| `size` | `ELightBoxSize` | `MD` | Максимальная ширина контента |
|
|
59
|
-
| `isLoading` | `boolean` | — | Состояние загрузки: деактивирует focus trap; `LightBox.Content` показывает `LoaderScreen` |
|
|
59
|
+
| `isLoading` | `boolean` | — | Состояние загрузки: деактивирует focus trap, добавляет модификатор на корневой элемент (кнопка закрытия поднимается над лоадером контента); `LightBox.Content` показывает `LoaderScreen` |
|
|
60
60
|
| `isSideOverlayOpened` | `boolean` | — | Флаг открытой боковой панели — добавляет модификатор на корневой элемент (блокирует скролл контента) |
|
|
61
61
|
| `isTopOverlayOpened` | `boolean` | — | Флаг открытой верхней панели — аналогичный модификатор |
|
|
62
62
|
| `focusTrapProps` | `IFocusTrapExtendedProps` | — | Переопределение настроек `FocusTrapExtended` |
|
|
@@ -126,6 +126,15 @@ version: "1.0"
|
|
|
126
126
|
последнего (при переключении роутов второй лайтбокс может смонтироваться раньше, чем
|
|
127
127
|
размонтируется первый). Аналогичный счётчик в `LightBoxViewManager` управляет классами
|
|
128
128
|
mount-ноды (`LightBoxMountNodeViewManager`, `LB-*`).
|
|
129
|
+
- **Локальные z-index внутри лайтбокса** (стековый контекст создаёт `.lightBox`): контролы и
|
|
130
|
+
sticky-шапка/футер `Page` — 100/101, лоадеры `LightBox.Content` и `LightBox.SideOverlay` — 201,
|
|
131
|
+
`TopOverlay` — 500. `LoaderScreen` приходит с глобальным `@z-index-loader-screen` (10100),
|
|
132
|
+
поэтому обе обёртки лоадера обязаны переопределять его локальным значением — иначе лоадер
|
|
133
|
+
перекрывает `TopOverlay`.
|
|
134
|
+
- В состоянии загрузки (`isLoading` и без открытых оверлеев) контейнер контролов поднимается
|
|
135
|
+
до 202 — иначе лоадер контента перекрывает кнопку закрытия. Поднимать нужно именно контейнер:
|
|
136
|
+
`.lightBoxControls` — flex-элемент с собственным z-index, то есть создаёт стековый контекст,
|
|
137
|
+
из которого z-index на самой кнопке уже не выберется.
|
|
129
138
|
- Баррел `index.ts` реэкспортирует `LightBox`, `enums`, `LightBoxSideOverlay` — сохранять.
|
|
130
139
|
- React 17 совместимость (синхронизация в release-0): React 18-only API не использовать.
|
|
131
140
|
|
|
@@ -140,8 +149,8 @@ version: "1.0"
|
|
|
140
149
|
заголовок с `tabIndex={-1}`).
|
|
141
150
|
- **Клавиатура**: Esc — клик по `Controls.Close`; ArrowLeft / ArrowRight — клик по
|
|
142
151
|
`Controls.Prev` / `Controls.Next` при включённых `clickByArrowLeft` / `clickByArrowRight`.
|
|
143
|
-
При открытом `SideOverlay` клавиатурные триггеры контролов лайтбокса
|
|
144
|
-
(рендерится вариант кнопок без триггера).
|
|
152
|
+
При открытом `SideOverlay` или `TopOverlay` клавиатурные триггеры контролов лайтбокса
|
|
153
|
+
не активны (рендерится вариант кнопок без триггера). В состоянии загрузки Esc работает.
|
|
145
154
|
- Кнопки `Controls.Close` имеют `data-exclude-modal-focus` — исключаются из начального фокуса
|
|
146
155
|
(у `Prev`/`Next` атрибута нет).
|
|
147
156
|
- `title` у `Controls.Close` по умолчанию «Закрыть» — для других языков потребитель передаёт
|
|
@@ -194,6 +203,8 @@ version: "1.0"
|
|
|
194
203
|
| 2026-07-22 | Создан документ (Phase 1 AI-Ready). В том же изменении — AI-рефакторинг: JSDoc на props, общий `LightBoxArrow` для Prev/Next, хук `useLightBoxSidebarVisibility` для сайдбаров, устранение eslint-подавлений; публичный API не менялся |
|
|
195
204
|
| 2026-07-22 | Добавлен `export` к props-интерфейсам `ILightBoxControlsProps`, `ILightBoxCloseProps`, `ILightBoxPrevProps`, `ILightBoxNextProps`, `ILightBoxSideOverlayLoaderProps` (аддитивно, для консистентности с остальными интерфейсами компонента) |
|
|
196
205
|
| 2026-07-22 | Багфиксы по ревью PR #474: клавиатурные триггеры контролов целятся в видимую кнопку (стрелки не работали на desktop, Esc — на mobile); таймер-хак блокировки скролла заменён счётчиком смонтированных лайтбоксов; `LightBoxViewManager` снимает классы mount-ноды при размонтировании последнего менеджера |
|
|
206
|
+
| 2026-08-17 | Исправлено: `LightBox.TopOverlay` перекрывался лоадером `LightBox.Content`. У `.loadingContentOverlay` теперь локальный z-index (201) — выше sticky-шапки и футера `Page`, но ниже `TopOverlay` (500); раньше `LoaderScreen` шёл с глобальным `@z-index-loader-screen` (10100) |
|
|
207
|
+
| 2026-08-25 | Исправлено: в состоянии загрузки кнопка закрытия была недоступна для клика — её перекрывал лоадер `LightBox.Content`. Восстановлен модификатор `isLoading` на корневом элементе (терялся при переходе на CSS Modules): контролы поднимаются над лоадером, кнопки вперёд/назад скрываются. Esc в состоянии загрузки сохранён рабочим |
|
|
197
208
|
|
|
198
209
|
---
|
|
199
210
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: MediaWidth
|
|
3
3
|
category: MediaWidth
|
|
4
|
-
related: [MediaMinWidth, MediaMaxWidth, MediaBetweenWidth, useMatchMedia, MobileView]
|
|
4
|
+
related: [MediaMinWidth, MediaMaxWidth, MediaBetweenWidth, useMatchMedia, MobileView, WindowResizeListener]
|
|
5
5
|
tokens: []
|
|
6
6
|
stories: stories/MediaWidth/MediaWidth.stories.tsx
|
|
7
7
|
version: "1.0"
|
|
@@ -176,6 +176,11 @@ version: "1.0"
|
|
|
176
176
|
- `MobileView` (`src/components/MobileView/`) — частный случай `MediaWidth` с
|
|
177
177
|
`maxWidth={EScreenWidth.SM_MAX}`, со своим AI.md. Для мобильной границы
|
|
178
178
|
используется он, а не `MediaWidth` напрямую.
|
|
179
|
+
- `WindowResizeListener` (`src/components/WindowResizeListener/`) — альтернатива
|
|
180
|
+
для императивного случая: даёт колбэк на поток событий `resize`, а не рендерит
|
|
181
|
+
ветку по медиа-запросу. Правило выбора: нужно **что-то показать** на
|
|
182
|
+
определённой ширине — `MediaWidth`; нужно **что-то посчитать/сделать** на
|
|
183
|
+
ресайз — `WindowResizeListener`.
|
|
179
184
|
|
|
180
185
|
Разница между `MediaWidth` и тремя реализациями: у `MediaWidth` обе границы
|
|
181
186
|
опциональны и выбор реализации делается за потребителя; у реализаций
|
|
@@ -220,6 +225,7 @@ version: "1.0"
|
|
|
220
225
|
|
|
221
226
|
| Дата | Изменение |
|
|
222
227
|
|---|---|
|
|
228
|
+
| 2026-08-18 | TRI-104: в `related` и «Связанные компоненты» добавлен `WindowResizeListener` — обратная сторона симметричной связи-альтернативы. Код и публичный API не затронуты. |
|
|
223
229
|
| 2026-08-11 | Создан документ. AI-рефакторинг (TRI-58): `displayName` у `MediaWidth`, исправлены опечатки и дополнен JSDoc props и компонента, unit-тесты расширены с 7 до 19 кейсов (проверяются строки медиа-запросов, выбор реализации, `null`-ветки, переподписка и отписка). Публичный API не изменён (props, `IMediaProps`, barrel-экспорты; `forwardRef` по-прежнему осознанно отсутствует). |
|
|
224
230
|
|
|
225
231
|
---
|
|
@@ -202,7 +202,13 @@ export const Status = () => (
|
|
|
202
202
|
<Notification.Body.Content>
|
|
203
203
|
This message provides context or highlights important information to note.
|
|
204
204
|
</Notification.Body.Content>
|
|
205
|
-
<Notification.Body.List
|
|
205
|
+
<Notification.Body.List
|
|
206
|
+
items={[
|
|
207
|
+
{ key: "1", children: "List item text" },
|
|
208
|
+
{ key: "2", children: "List item text" },
|
|
209
|
+
{ key: "3", children: "List item text" },
|
|
210
|
+
]}
|
|
211
|
+
/>
|
|
206
212
|
</Notification.Body>
|
|
207
213
|
<Notification.Close onClick={() => {}} />
|
|
208
214
|
</Notification>
|
|
@@ -218,7 +224,13 @@ export const Status = () => (
|
|
|
218
224
|
<Notification.Body.Content>
|
|
219
225
|
This message provides context or highlights important information to note.
|
|
220
226
|
</Notification.Body.Content>
|
|
221
|
-
<Notification.Body.List
|
|
227
|
+
<Notification.Body.List
|
|
228
|
+
items={[
|
|
229
|
+
{ key: "1", children: "List item text" },
|
|
230
|
+
{ key: "2", children: "List item text" },
|
|
231
|
+
{ key: "3", children: "List item text" },
|
|
232
|
+
]}
|
|
233
|
+
/>
|
|
222
234
|
</Notification.Body>
|
|
223
235
|
<Notification.Close onClick={() => {}} />
|
|
224
236
|
</Notification>
|
|
@@ -234,7 +246,13 @@ export const Status = () => (
|
|
|
234
246
|
<Notification.Body.Content>
|
|
235
247
|
This message provides context or highlights important information to note.
|
|
236
248
|
</Notification.Body.Content>
|
|
237
|
-
<Notification.Body.List
|
|
249
|
+
<Notification.Body.List
|
|
250
|
+
items={[
|
|
251
|
+
{ key: "1", children: "List item text" },
|
|
252
|
+
{ key: "2", children: "List item text" },
|
|
253
|
+
{ key: "3", children: "List item text" },
|
|
254
|
+
]}
|
|
255
|
+
/>
|
|
238
256
|
</Notification.Body>
|
|
239
257
|
<Notification.Close onClick={() => {}} />
|
|
240
258
|
</Notification>
|
|
@@ -45,7 +45,7 @@ off-canvas) над контейнером или страницей.
|
|
|
45
45
|
|---|---|---|---|
|
|
46
46
|
| `fixed` | `boolean` | `false` | `position: fixed` (на всю страницу) вместо `absolute` (поверх родителя) |
|
|
47
47
|
| `onOpening` | `() => void` | — | Вызывается в начале открытия |
|
|
48
|
-
| `onOpen` | `() => void` | — | Вызывается по завершении анимации
|
|
48
|
+
| `onOpen` | `() => void` | — | Вызывается по завершении анимации открытия. Если оверлей смонтирован уже с `opened={true}`, анимации нет и колбэк вызывается сразу на маунте |
|
|
49
49
|
| `onClosing` | `() => void` | — | Вызывается в начале закрытия |
|
|
50
50
|
| `onClose` | `() => void` | — | Вызывается по завершении анимации закрытия |
|
|
51
51
|
| `...HTMLDivAttributes` | — | — | Стандартные атрибуты корневого `<div>` (кроме `children`) |
|
|
@@ -134,6 +134,28 @@ unit-тестами (`toHaveBeenCalledTimes(1)`).
|
|
|
134
134
|
> за переход — прямой вызов из `useLayoutEffect` дублировал эффект-driven вызов.
|
|
135
135
|
> Исправлено: прямые вызовы из layout-эффекта удалены.
|
|
136
136
|
|
|
137
|
+
### Монтирование сразу с `opened={true}`
|
|
138
|
+
|
|
139
|
+
Оверлей, смонтированный уже открытым, никакой анимации открытия не проигрывает —
|
|
140
|
+
панель отрисована в конечном положении, `transitionend` не наступит. Поэтому цикл
|
|
141
|
+
открытия считается завершённым сразу: на маунте вызывается `onOpen`, а `onOpening`
|
|
142
|
+
— нет (сообщать о начале анимации нечего). Флаги `opening` / `closing` при этом
|
|
143
|
+
остаются `false`.
|
|
144
|
+
|
|
145
|
+
Вызов сделан в пассивном `useEffect`, а не в layout-эффекте: к моменту пассивных
|
|
146
|
+
эффектов refs уже проставлены, и потребитель может обратиться к DOM внутри
|
|
147
|
+
`onOpen`. Измерять геометрию в этот момент всё же не стоит — оверлей мог быть
|
|
148
|
+
смонтирован внутри контейнера, который сам ещё выезжает (`TopOverlay` поэтому
|
|
149
|
+
пропускает пересчёт позиции на маунте).
|
|
150
|
+
|
|
151
|
+
Монтирование с `opened={false}` не вызывает ничего — это нейтральное начальное
|
|
152
|
+
состояние, а не закрытие.
|
|
153
|
+
|
|
154
|
+
> Ранее (до 2026-08-27) на первом рендере гасились все колбэки: оверлей,
|
|
155
|
+
> смонтированный открытым, не сообщал об этом потребителю. Обёртки, которые
|
|
156
|
+
> в `onOpen` включают ловушку фокуса или считают позицию (`TopOverlay`), в этом
|
|
157
|
+
> случае оставались недоинициализированными.
|
|
158
|
+
|
|
137
159
|
---
|
|
138
160
|
|
|
139
161
|
## Accessibility
|
|
@@ -183,6 +205,7 @@ Visual baseline для `components-overlay--visual-tests` генерируетс
|
|
|
183
205
|
|
|
184
206
|
| Дата | Изменение |
|
|
185
207
|
|---|---|
|
|
208
|
+
| 2026-08-27 | `OverlayBase` вызывает `onOpen` при монтировании с `opened={true}` — раньше первый рендер гасил все колбэки, и оверлей, смонтированный открытым, не сообщал об этом потребителю (release notes 1.44.0). |
|
|
186
209
|
| 2026-06-17 | Создан документ. `Overlay` переведён на `forwardRef` (ref → корневой `div`, аддитивно, release notes 1.34.0). Дедуплицирован флаг `closing` (единый источник — `OverlayBase`). Codestyle/JSDoc cleanup в 4 файлах. Добавлены 4 unit-тест-файла. Исправлен двойной вызов `onClosing`/`onOpening` за переход — теперь ровно один раз (закреплено `toHaveBeenCalledTimes(1)`). |
|
|
187
210
|
|
|
188
211
|
---
|
|
@@ -31,7 +31,7 @@ version: "1.0"
|
|
|
31
31
|
|
|
32
32
|
Используй когда: нужно дать пользователю переход по страницам списка/таблицы, при необходимости — с выбором размера страницы.
|
|
33
33
|
|
|
34
|
-
Не используй когда: данных немного и помещаются на один экран (
|
|
34
|
+
Не используй когда: данных немного и они помещаются на один экран (навигация всё равно отрисуется — одной страницей с заблокированными стрелками); нужна бесконечная прокрутка вместо постраничной.
|
|
35
35
|
|
|
36
36
|
---
|
|
37
37
|
|
|
@@ -43,7 +43,7 @@ version: "1.0"
|
|
|
43
43
|
|
|
44
44
|
| Prop | Тип | Обяз. | Описание |
|
|
45
45
|
|---|---|---|---|
|
|
46
|
-
| `paginationNavigationProps` | `IPaginationNavigationProps` | да | Настройки навигации по страницам. Навигация рендерится
|
|
46
|
+
| `paginationNavigationProps` | `IPaginationNavigationProps` | да | Настройки навигации по страницам. Навигация рендерится всегда: при `totalPages <= 1` — одна страница с заблокированными стрелками. |
|
|
47
47
|
| `paginationSelectProps` | `IPaginationSelectProps` | нет | Настройки селекта размера страницы. Если не передан — селект не отображается. |
|
|
48
48
|
| `...rest` | `IPaginationExtendedProps` | — | Прокидывается в корневой `<nav>` (className, aria-атрибуты и т.д.). |
|
|
49
49
|
|
|
@@ -52,7 +52,7 @@ version: "1.0"
|
|
|
52
52
|
| Prop | Тип | По умолчанию | Описание |
|
|
53
53
|
|---|---|---|---|
|
|
54
54
|
| `currentPage` | `number` | — | Номер текущей страницы (нумерация с 1). |
|
|
55
|
-
| `totalPages` | `number` | — | Общее число страниц. |
|
|
55
|
+
| `totalPages` | `number` | — | Общее число страниц. Значения меньше 1 отображаются как одна страница. |
|
|
56
56
|
| `onCurrentPageChange` | `(page: number) => void` | — | Колбэк смены страницы. Вызывается с целевым номером. |
|
|
57
57
|
| `boundaryCount` | `number` | `0` | Сколько страниц всегда показывать в начале и в конце. |
|
|
58
58
|
| `siblingCount` | `number` | `0` | Сколько соседних страниц показывать вокруг текущей. |
|
|
@@ -105,7 +105,7 @@ version: "1.0"
|
|
|
105
105
|
- `forwardRef` на всех компонентах семейства — не убирать. Refs: `Pagination` → `HTMLSpanElement` (фактически прокидывается в корневой `<nav>` через `PaginationExtended`, ref-тип которого `HTMLElement`), `PaginationNavigation`/`PaginationNavigationExtended` → `HTMLUListElement`, `PaginationNavigationExtendedItem` → `HTMLLIElement`, `PaginationSelect` → `HTMLDivElement`, кнопки → `HTMLButtonElement`, ellipsis → `HTMLSpanElement`.
|
|
106
106
|
- Публичный API не менять: имена и обязательность props (`paginationNavigationProps` — обязателен, `paginationSelectProps` — опционален), enum `EPaginationNavigationIconDirection` (`BACK`/`NEXT`), barrel-экспорты из `index.ts`.
|
|
107
107
|
- Корневой DOM-элемент `Pagination`/`PaginationExtended` — `<nav>`; навигация по страницам — семантический список `<ul>/<li>`. Не менять без обсуждения: семантика участвует в accessibility-контракте.
|
|
108
|
-
- Навигация рендерится
|
|
108
|
+
- Навигация рендерится всегда, включая случай единственной страницы: `PaginationNavigation` приводит `totalPages` к минимуму 1, рисует одну страницу и блокирует обе стрелки. Это держит высоту панели пагинации постоянной независимо от размера страницы — не возвращать условный рендер по `totalPages > 1`.
|
|
109
109
|
- Логику `PaginationUtils.createPagesArray` / `generatePageRanges` / `generateRange` не менять без перегенерации `__tests__/paginationUtils.test.tsx` — там зафиксированы граничные случаи раскладки.
|
|
110
110
|
- `PAGINATION_ELLIPSIS_VALUE = -1` — sentinel в массиве страниц, на него завязан рендер многоточия.
|
|
111
111
|
- Блокировка по `MasterTableContext.loading` перекрывает `disabled`, пришедший из props: в состоянии загрузки кнопка заблокирована независимо от того, что передал потребитель. Обратное неверно — вне загрузки решает prop.
|
|
@@ -157,6 +157,7 @@ version: "1.0"
|
|
|
157
157
|
|---|---|
|
|
158
158
|
| 2026-06-22 | Создан документ |
|
|
159
159
|
| 2026-08-12 | В состоянии загрузки `MasterTable` элементы пагинации становятся `disabled` — читается из `MasterTableContext.loading`. Публичный API не изменился. Заодно `PaginationSelect` перестал молча терять переданный `status`. |
|
|
160
|
+
| 2026-08-27 | Навигация больше не скрывается при `totalPages <= 1`: отрисовывается одна страница с заблокированными стрелками, высота панели пагинации не схлопывается. Публичный API не изменился. |
|
|
160
161
|
|
|
161
162
|
---
|
|
162
163
|
|
|
@@ -270,15 +271,13 @@ export const Extended = () => {
|
|
|
270
271
|
|
|
271
272
|
return (
|
|
272
273
|
<PaginationExtended>
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
/>
|
|
281
|
-
)}
|
|
274
|
+
<PaginationNavigation
|
|
275
|
+
currentPage={page}
|
|
276
|
+
totalPages={totalPages}
|
|
277
|
+
boundaryCount={1}
|
|
278
|
+
siblingCount={1}
|
|
279
|
+
onCurrentPageChange={setPage}
|
|
280
|
+
/>
|
|
282
281
|
<PaginationSelect
|
|
283
282
|
paginationLabel="Показать на странице:"
|
|
284
283
|
value={selectedOption || options[0]}
|