@sberbusiness/triplex-next-mcp-server 1.43.0-beta → 1.45.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 (85) hide show
  1. package/README.md +7 -6
  2. package/bundle/components/AlertContext.md +11 -8
  3. package/bundle/components/AlertProcess.md +16 -12
  4. package/bundle/components/Badge.md +6 -3
  5. package/bundle/components/BodyPage.md +72 -4
  6. package/bundle/components/Button.md +46 -43
  7. package/bundle/components/ButtonDropdownExtended.md +3 -2
  8. package/bundle/components/ButtonIcon.md +7 -4
  9. package/bundle/components/Calendar.md +62 -59
  10. package/bundle/components/Caption.md +26 -23
  11. package/bundle/components/Checkbox.md +32 -29
  12. package/bundle/components/CheckboxTreeExtended.md +9 -5
  13. package/bundle/components/Chip.md +44 -41
  14. package/bundle/components/CodeText.md +26 -23
  15. package/bundle/components/Col.md +1 -2
  16. package/bundle/components/CollapsibleTree.md +8 -5
  17. package/bundle/components/CollapsibleTreeExtended.md +6 -1
  18. package/bundle/components/DatePickerExtended.md +409 -262
  19. package/bundle/components/Dropdown.md +33 -28
  20. package/bundle/components/EmptyView.md +12 -5
  21. package/bundle/components/ExpandAnimation.md +263 -218
  22. package/bundle/components/Footer.md +235 -278
  23. package/bundle/components/FooterPage.md +6 -2
  24. package/bundle/components/FormField.md +44 -41
  25. package/bundle/components/FormGroup.md +192 -52
  26. package/bundle/components/Header.md +491 -211
  27. package/bundle/components/HeaderPage.md +6 -2
  28. package/bundle/components/ImageGallery.md +33 -34
  29. package/bundle/components/ImageGalleryExtended.md +33 -34
  30. package/bundle/components/Island.md +52 -14
  31. package/bundle/components/LightBox.md +25 -18
  32. package/bundle/components/Link.md +211 -96
  33. package/bundle/components/ListActionItem.md +7 -4
  34. package/bundle/components/ListItem.md +11 -8
  35. package/bundle/components/ListItemControlsButton.md +16 -13
  36. package/bundle/components/ListItemControlsButtonDropdown.md +9 -6
  37. package/bundle/components/ListItemSelectable.md +7 -4
  38. package/bundle/components/ListMasterFooter.md +8 -5
  39. package/bundle/components/ListMasterHeader.md +8 -5
  40. package/bundle/components/ListSortableItem.md +11 -8
  41. package/bundle/components/ListTableItem.md +7 -4
  42. package/bundle/components/LoaderMiddle.md +7 -4
  43. package/bundle/components/LoaderScreen.md +11 -8
  44. package/bundle/components/LoaderSmall.md +7 -4
  45. package/bundle/components/Marker.md +184 -69
  46. package/bundle/components/MarkerStatus.md +206 -88
  47. package/bundle/components/MaskedField.md +2 -4
  48. package/bundle/components/MasterTable.md +602 -0
  49. package/bundle/components/ModalWindow.md +7 -4
  50. package/bundle/components/MultiselectField.md +2183 -132
  51. package/bundle/components/Notification.md +12 -9
  52. package/bundle/components/Overlay.md +33 -5
  53. package/bundle/components/Page.md +2 -2
  54. package/bundle/components/Pagination.md +27 -21
  55. package/bundle/components/Row.md +1 -1
  56. package/bundle/components/SelectExtendedField.md +3 -3
  57. package/bundle/components/SelectField.md +466 -148
  58. package/bundle/components/SliderExtended.md +39 -36
  59. package/bundle/components/SmallInput.md +194 -51
  60. package/bundle/components/Suggest.md +535 -99
  61. package/bundle/components/SwipeableArea.md +428 -79
  62. package/bundle/components/TableBasic.md +2302 -0
  63. package/bundle/components/TabsExtended.md +24 -21
  64. package/bundle/components/Tag.md +263 -78
  65. package/bundle/components/Text.md +28 -25
  66. package/bundle/components/TextField.md +3 -4
  67. package/bundle/components/ThemeProvider.md +50 -1
  68. package/bundle/components/Title.md +26 -23
  69. package/bundle/components/Tooltip.md +24 -21
  70. package/bundle/components/TopOverlay.md +368 -89
  71. package/bundle/components/TreeView.md +343 -166
  72. package/bundle/components/TreeViewNode.md +436 -0
  73. package/bundle/guides/codestyle.md +3 -0
  74. package/bundle/guides/commits.md +106 -26
  75. package/bundle/guides/context.md +84 -12
  76. package/bundle/guides/guidelines.md +321 -0
  77. package/bundle/guides/template.md +22 -12
  78. package/bundle/manifest.json +54 -20
  79. package/bundle/release-notes/1.44.0.mdx +113 -0
  80. package/bundle/release-notes/1.45.0.mdx +124 -0
  81. package/bundle/release-notes/1.46.0.mdx +7 -0
  82. package/bundle/tokens.json +6362 -0
  83. package/dist/index.js +177 -28
  84. package/dist/index.js.map +1 -1
  85. package/package.json +1 -1
@@ -3,10 +3,10 @@ component: Notification
3
3
  category: Feedback
4
4
  related: [NotificationGrouped, Button, AlertContext, UnorderedList]
5
5
  tokens:
6
- - --triplex-next-Notification-Background
7
- - --triplex-next-Notification-Color
8
- - --triplex-next-Notification-Shadow
9
- - --triplex-next-Notification-TimeColor
6
+ - Notification.Background
7
+ - Notification.Color
8
+ - Notification.Shadow
9
+ - Notification.TimeColor
10
10
  stories: stories/Notification/Notification.stories.tsx
11
11
  version: "1.0"
12
12
  ---
@@ -91,11 +91,14 @@ Notification
91
91
 
92
92
  ## Дизайн-токены
93
93
 
94
- ```
95
- --triplex-next-Notification-Background (фон уведомления)
96
- --triplex-next-Notification-Color (цвет текста)
97
- --triplex-next-Notification-Shadow (тень карточки)
98
- --triplex-next-Notification-TimeColor (цвет времени)
94
+ Переопределяются через `ThemeProvider` (prop `tokens`) — см. `ThemeProvider-ai.md` →
95
+ «Как переопределять токены». Значения по умолчанию — `src/components/DesignTokens/components/Notification.ts`.
96
+
97
+ ```text
98
+ Notification.Background (фон уведомления)
99
+ Notification.Color (цвет текста)
100
+ Notification.Shadow (тень карточки)
101
+ Notification.TimeColor (цвет времени)
99
102
  ```
100
103
 
101
104
  ---
@@ -2,7 +2,9 @@
2
2
  component: Overlay
3
3
  category: Overlay
4
4
  related: [OverlayBase, OverlayMask, OverlayPanel, LightBox, TopOverlay, ModalWindow, DropdownMobile]
5
- tokens: [--triplex-next-Overlay-Background, --triplex-next-Overlay-Panel_Background]
5
+ tokens:
6
+ - Overlay.Background
7
+ - Overlay.Panel_Background
6
8
  stories: stories/Overlay/Overlay.stories.tsx
7
9
  version: "1.34.0"
8
10
  ---
@@ -45,7 +47,7 @@ off-canvas) над контейнером или страницей.
45
47
  |---|---|---|---|
46
48
  | `fixed` | `boolean` | `false` | `position: fixed` (на всю страницу) вместо `absolute` (поверх родителя) |
47
49
  | `onOpening` | `() => void` | — | Вызывается в начале открытия |
48
- | `onOpen` | `() => void` | — | Вызывается по завершении анимации открытия |
50
+ | `onOpen` | `() => void` | — | Вызывается по завершении анимации открытия. Если оверлей смонтирован уже с `opened={true}`, анимации нет и колбэк вызывается сразу на маунте |
49
51
  | `onClosing` | `() => void` | — | Вызывается в начале закрытия |
50
52
  | `onClose` | `() => void` | — | Вызывается по завершении анимации закрытия |
51
53
  | `...HTMLDivAttributes` | — | — | Стандартные атрибуты корневого `<div>` (кроме `children`) |
@@ -90,9 +92,12 @@ off-canvas) над контейнером или страницей.
90
92
 
91
93
  ## Дизайн-токены
92
94
 
93
- ```
94
- --triplex-next-Overlay-Background // фон маски (OverlayMask)
95
- --triplex-next-Overlay-Panel_Background // фон панели (OverlayPanel)
95
+ Переопределяются через `ThemeProvider` (prop `tokens`) — см. `ThemeProvider-ai.md` →
96
+ «Как переопределять токены». Значения по умолчанию — `src/components/DesignTokens/components/Overlay.ts`.
97
+
98
+ ```text
99
+ Overlay.Background // фон маски (OverlayMask)
100
+ Overlay.Panel_Background // фон панели (OverlayPanel)
96
101
  ```
97
102
 
98
103
  Box-shadow панели и тайминги transition (`0.3s ease-in-out`) заданы константами в
@@ -134,6 +139,28 @@ unit-тестами (`toHaveBeenCalledTimes(1)`).
134
139
  > за переход — прямой вызов из `useLayoutEffect` дублировал эффект-driven вызов.
135
140
  > Исправлено: прямые вызовы из layout-эффекта удалены.
136
141
 
142
+ ### Монтирование сразу с `opened={true}`
143
+
144
+ Оверлей, смонтированный уже открытым, никакой анимации открытия не проигрывает —
145
+ панель отрисована в конечном положении, `transitionend` не наступит. Поэтому цикл
146
+ открытия считается завершённым сразу: на маунте вызывается `onOpen`, а `onOpening`
147
+ — нет (сообщать о начале анимации нечего). Флаги `opening` / `closing` при этом
148
+ остаются `false`.
149
+
150
+ Вызов сделан в пассивном `useEffect`, а не в layout-эффекте: к моменту пассивных
151
+ эффектов refs уже проставлены, и потребитель может обратиться к DOM внутри
152
+ `onOpen`. Измерять геометрию в этот момент всё же не стоит — оверлей мог быть
153
+ смонтирован внутри контейнера, который сам ещё выезжает (`TopOverlay` поэтому
154
+ пропускает пересчёт позиции на маунте).
155
+
156
+ Монтирование с `opened={false}` не вызывает ничего — это нейтральное начальное
157
+ состояние, а не закрытие.
158
+
159
+ > Ранее (до 2026-08-27) на первом рендере гасились все колбэки: оверлей,
160
+ > смонтированный открытым, не сообщал об этом потребителю. Обёртки, которые
161
+ > в `onOpen` включают ловушку фокуса или считают позицию (`TopOverlay`), в этом
162
+ > случае оставались недоинициализированными.
163
+
137
164
  ---
138
165
 
139
166
  ## Accessibility
@@ -183,6 +210,7 @@ Visual baseline для `components-overlay--visual-tests` генерируетс
183
210
 
184
211
  | Дата | Изменение |
185
212
  |---|---|
213
+ | 2026-08-27 | `OverlayBase` вызывает `onOpen` при монтировании с `opened={true}` — раньше первый рендер гасил все колбэки, и оверлей, смонтированный открытым, не сообщал об этом потребителю (release notes 1.44.0). |
186
214
  | 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
215
 
188
216
  ---
@@ -62,8 +62,8 @@ version: "1.0"
62
62
  LESS-переменными в `styles/Page.module.less` (`@page-padding-*`, `@screen-sm-max`). Sticky-стили
63
63
  для прилипающих Header/Footer (классы `.headerPageTypeFirst.sticky`, `.footerPageTypeFirst.sticky`)
64
64
  применяются при ширине viewport от 992px (`@screen-lg`) и высоте от 801px и
65
- используют токены соответствующих компонентов (`--triplex-next-HeaderPage-StickyShadow`,
66
- `--triplex-next-FooterPage-StickyShadow`) — они описаны в AI.md этих компонентов.
65
+ используют токены соответствующих компонентов (`HeaderPage.StickyShadow`,
66
+ `FooterPage.StickyShadow`) — они описаны в AI.md этих компонентов.
67
67
 
68
68
  ---
69
69
 
@@ -15,10 +15,10 @@ related:
15
15
  - ButtonBase
16
16
  - MasterTable
17
17
  tokens:
18
- - --triplex-next-Pagination-PageButton_Background_Hover
19
- - --triplex-next-Pagination-PageButton_Background_Active
20
- - --triplex-next-Pagination-PageButton_Background_Selected
21
- - --triplex-next-Pagination-PageButton_BorderColor_Focus
18
+ - Pagination.PageButton_Background_Hover
19
+ - Pagination.PageButton_Background_Active
20
+ - Pagination.PageButton_Background_Selected
21
+ - Pagination.PageButton_BorderColor_Focus
22
22
  stories: stories/Pagination/Pagination.stories.tsx
23
23
  version: "1.0"
24
24
  ---
@@ -31,7 +31,7 @@ version: "1.0"
31
31
 
32
32
  Используй когда: нужно дать пользователю переход по страницам списка/таблицы, при необходимости — с выбором размера страницы.
33
33
 
34
- Не используй когда: данных немного и помещаются на один экран (при `totalPages <= 1` навигация не рендерится); нужна бесконечная прокрутка вместо постраничной.
34
+ Не используй когда: данных немного и они помещаются на один экран (навигация всё равно отрисуется — одной страницей с заблокированными стрелками); нужна бесконечная прокрутка вместо постраничной.
35
35
 
36
36
  ---
37
37
 
@@ -43,7 +43,7 @@ version: "1.0"
43
43
 
44
44
  | Prop | Тип | Обяз. | Описание |
45
45
  |---|---|---|---|
46
- | `paginationNavigationProps` | `IPaginationNavigationProps` | да | Настройки навигации по страницам. Навигация рендерится только при `totalPages > 1`. |
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` | Сколько соседних страниц показывать вокруг текущей. |
@@ -64,6 +64,8 @@ version: "1.0"
64
64
 
65
65
  Расширяет `ISelectFieldProps` (без `size`, с обязательным `value`) и добавляет `paginationLabel: React.ReactNode` — текст лейбла перед селектом. Размер селекта зафиксирован как `EComponentSize.SM`. `value`, `options`, `onChange` — управляются потребителем.
66
66
 
67
+ Распределение свойств по DOM: `className` идёт на корневой `<div>` (он задаёт раскладку лейбла и селекта), все остальные свойства (`data`-атрибуты, `id`, `aria`-атрибуты, `targetProps`, `dropdownProps`, `mobileTitle`, `placeholder` и прочие свойства `SelectField`) прокидываются в `SelectField`. `mobileTitle` по умолчанию равен `paginationLabel`, `targetProps` мержится с внутренним `fieldLabel: ""`, `aria-labelledby` по умолчанию указывает на лейбл, но переопределяется потребителем.
68
+
67
69
  ### Состояние загрузки внутри `MasterTable`
68
70
 
69
71
  Собственного prop загрузки у пагинации нет. Внутри `MasterTable` с `loading` элементы пагинации
@@ -87,13 +89,16 @@ version: "1.0"
87
89
 
88
90
  ## Дизайн-токены
89
91
 
92
+ Переопределяются через `ThemeProvider` (prop `tokens`) — см. `ThemeProvider-ai.md` →
93
+ «Как переопределять токены». Значения по умолчанию — `src/components/DesignTokens/components/Pagination.ts`.
94
+
90
95
  Собственные токены использует только `PaginationPageButton`:
91
96
 
92
97
  ```text
93
- --triplex-next-Pagination-PageButton_Background_Hover
94
- --triplex-next-Pagination-PageButton_Background_Active
95
- --triplex-next-Pagination-PageButton_Background_Selected
96
- --triplex-next-Pagination-PageButton_BorderColor_Focus
98
+ Pagination.PageButton_Background_Hover
99
+ Pagination.PageButton_Background_Active
100
+ Pagination.PageButton_Background_Selected
101
+ Pagination.PageButton_BorderColor_Focus
97
102
  ```
98
103
 
99
104
  Остальные части наследуют визуал от переиспользуемых компонентов: кнопки навигации — от `ButtonIcon`, кнопка-страница — от `ButtonBase`, селект — от `SelectField`, текст — от `Typography` (`Text`).
@@ -105,10 +110,11 @@ version: "1.0"
105
110
  - `forwardRef` на всех компонентах семейства — не убирать. Refs: `Pagination` → `HTMLSpanElement` (фактически прокидывается в корневой `<nav>` через `PaginationExtended`, ref-тип которого `HTMLElement`), `PaginationNavigation`/`PaginationNavigationExtended` → `HTMLUListElement`, `PaginationNavigationExtendedItem` → `HTMLLIElement`, `PaginationSelect` → `HTMLDivElement`, кнопки → `HTMLButtonElement`, ellipsis → `HTMLSpanElement`.
106
111
  - Публичный API не менять: имена и обязательность props (`paginationNavigationProps` — обязателен, `paginationSelectProps` — опционален), enum `EPaginationNavigationIconDirection` (`BACK`/`NEXT`), barrel-экспорты из `index.ts`.
107
112
  - Корневой DOM-элемент `Pagination`/`PaginationExtended` — `<nav>`; навигация по страницам — семантический список `<ul>/<li>`. Не менять без обсуждения: семантика участвует в accessibility-контракте.
108
- - Навигация рендерится только при `totalPages > 1` — поведение публичное, на него опираются потребители.
113
+ - Навигация рендерится всегда, включая случай единственной страницы: `PaginationNavigation` приводит `totalPages` к минимуму 1, рисует одну страницу и блокирует обе стрелки. Это держит высоту панели пагинации постоянной независимо от размера страницы — не возвращать условный рендер по `totalPages > 1`.
109
114
  - Логику `PaginationUtils.createPagesArray` / `generatePageRanges` / `generateRange` не менять без перегенерации `__tests__/paginationUtils.test.tsx` — там зафиксированы граничные случаи раскладки.
110
115
  - `PAGINATION_ELLIPSIS_VALUE = -1` — sentinel в массиве страниц, на него завязан рендер многоточия.
111
116
  - Блокировка по `MasterTableContext.loading` перекрывает `disabled`, пришедший из props: в состоянии загрузки кнопка заблокирована независимо от того, что передал потребитель. Обратное неверно — вне загрузки решает prop.
117
+ - `PaginationSelect` не должен терять свойства: его публичный тип — свойства `SelectField`, поэтому всё, что не разобрано явно, обязано уходить в `SelectField`. Точечные перечисления props вместо `...rest` здесь уже приводили к молчаливой потере `status`, `targetProps` и `data`-атрибутов.
112
118
  - Импорт `MasterTableContext` в частях пагинации — абсолютный (`@sberbusiness/triplex-next/components/Table/MasterTableContext`), как в самом `Table`. Относительный путь сюда не ставить.
113
119
 
114
120
  ---
@@ -156,7 +162,9 @@ version: "1.0"
156
162
  | Дата | Изменение |
157
163
  |---|---|
158
164
  | 2026-06-22 | Создан документ |
165
+ | 2026-08-26 | `PaginationSelect` прокидывает в `SelectField` все свойства, которые не разбирает сам: `data`-атрибуты, `id`, `aria`-атрибуты, `targetProps`, `dropdownProps`, `mobileTitle` и т.д. Публичный API не изменился. |
159
166
  | 2026-08-12 | В состоянии загрузки `MasterTable` элементы пагинации становятся `disabled` — читается из `MasterTableContext.loading`. Публичный API не изменился. Заодно `PaginationSelect` перестал молча терять переданный `status`. |
167
+ | 2026-08-27 | Навигация больше не скрывается при `totalPages <= 1`: отрисовывается одна страница с заблокированными стрелками, высота панели пагинации не схлопывается. Публичный API не изменился. |
160
168
 
161
169
  ---
162
170
 
@@ -270,15 +278,13 @@ export const Extended = () => {
270
278
 
271
279
  return (
272
280
  <PaginationExtended>
273
- {totalPages > 1 && (
274
- <PaginationNavigation
275
- currentPage={page}
276
- totalPages={totalPages}
277
- boundaryCount={1}
278
- siblingCount={1}
279
- onCurrentPageChange={setPage}
280
- />
281
- )}
281
+ <PaginationNavigation
282
+ currentPage={page}
283
+ totalPages={totalPages}
284
+ boundaryCount={1}
285
+ siblingCount={1}
286
+ onCurrentPageChange={setPage}
287
+ />
282
288
  <PaginationSelect
283
289
  paginationLabel="Показать на странице:"
284
290
  value={selectedOption || options[0]}
@@ -45,7 +45,7 @@ version: "1.0"
45
45
 
46
46
  ## Дизайн-токены
47
47
 
48
- Компонент не использует CSS-переменных `--triplex-next-*`. Размеры берутся из LESS-переменных сетки в `src/styles/components/grid.less`:
48
+ Компонент не использует дизайн-токенов. Размеры берутся из LESS-переменных сетки в `src/styles/components/grid.less`:
49
49
 
50
50
  ```less
51
51
  @row-bottom-padding: 16px
@@ -105,9 +105,9 @@ version: "1.0"
105
105
  каретки и блокировку указателя в `disabled`. Цвета, фон, границы и тени приходят из
106
106
  компонентов, на которых построено поле:
107
107
 
108
- - `FormField` и его части (`FormFieldLabel`, `FormFieldTarget`, `FormFieldPrefix`, `FormFieldPostfix`, `FormFieldClear`) — `--triplex-next-FormField-*`;
109
- - `Dropdown` и `DropdownList` — `--triplex-next-Dropdown-*`, `--triplex-next-DropdownList-*`;
110
- - `IconWrapper` вокруг каретки — `--triplex-next-IconWrapper-*`;
108
+ - `FormField` и его части (`FormFieldLabel`, `FormFieldTarget`, `FormFieldPrefix`, `FormFieldPostfix`, `FormFieldClear`) — группа `FormField`;
109
+ - `Dropdown` и `DropdownList` — группы `Dropdown` и `DropdownList`;
110
+ - `IconWrapper` вокруг каретки — группа `IconWrapper`;
111
111
  - `LoaderSmall` в состоянии загрузки — токены лоадера.
112
112
 
113
113
  Если понадобится собственное визуальное состояние поля выбора — токен заводится