@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
|
@@ -117,8 +117,8 @@ version: "1.0"
|
|
|
117
117
|
- `TriggerClickOnKeyDownEvent` (`src/components/Triggers/`) — по нажатию клавиши
|
|
118
118
|
вызывает `click` на элементе из `targetRef`.
|
|
119
119
|
- `SelectExtendedField` — закрывает выпадающий список по `Esc`.
|
|
120
|
-
- `SliderExtendedDot`, `SliderExtendedTrack` — стрелки для перемещения
|
|
121
|
-
слушатели монтируются только когда элемент в фокусе.
|
|
120
|
+
- `SliderExtended` (`SliderExtendedDot`, `SliderExtendedTrack`) — стрелки для перемещения
|
|
121
|
+
ползунка, слушатели монтируются только когда элемент в фокусе.
|
|
122
122
|
|
|
123
123
|
---
|
|
124
124
|
|
|
@@ -149,6 +149,7 @@ version: "1.0"
|
|
|
149
149
|
| 2026-08-11 | TRI-112: у `ComposedKeyDownListener` появились собственный `ComposedKeyDownListener-ai.md` и набор stories `stories/ComposedKeyDownListener/`; раздел «Связанные компоненты» сокращён до ссылки, story `Example` (демонстрация композитора) перенесена в новый набор. Ограничение на стабильную длину `keyDownListeners` снято — композитор рендерит слушателей соседями к `children`. Набор stories `KeyDownListener` исключён из скриншот-тестов, story `VisualTests` и baseline удалены — визуального интерфейса у компонента нет. Реализация самого `KeyDownListener` не менялась. |
|
|
150
150
|
| 2026-08-04 | По ревью PR #502: интерфейс props `IComposedKeyDownListenerProps` стал экспортируемым — публичная поверхность пакета расширена аддитивно. `ComposedKeyDownListener` добавлен отдельной строкой в `docs/ai/ROADMAP.md`, собственный AI.md вынесен в отдельную задачу. |
|
|
151
151
|
| 2026-08-04 | Создан документ. AI-рефакторинг (TRI-48): JSDoc на props `IKeyDownListenerProps` и `ComposedKeyDownListener`, ветвление в `handleKeyDown` сведено к одной проверке (снят `eslint-disable`), в `ComposedKeyDownListener` убран `as JSX.Element` и добавлен `displayName`, unit-тесты (16 кейсов на оба компонента), stories по modern pattern. Публичный API не менялся; компонент остаётся class-компонентом, `forwardRef` осознанно отсутствует. |
|
|
152
|
+
| 2026-09-29 | Аудит симметрии `related` (TRI-156): в «Связанных компонентах» потребители `SliderExtendedDot` / `SliderExtendedTrack` названы через адресата `related` — `SliderExtended`. Публичный API и поведение не затронуты. |
|
|
152
153
|
|
|
153
154
|
---
|
|
154
155
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: LightBox
|
|
3
3
|
category: LightBox
|
|
4
|
-
related: [Page, TopOverlay, Portal,
|
|
4
|
+
related: [Page, TopOverlay, Portal, LoaderScreen, Button, ModalWindow, Overlay]
|
|
5
5
|
tokens:
|
|
6
6
|
- LightBox.Backdrop_Background
|
|
7
7
|
- LightBox.Content_Background
|
|
@@ -101,6 +101,13 @@ LightBox.SideOverlay_Background
|
|
|
101
101
|
css-переменную `--lightBox-scroll-width`, которую вычитают из ширины оверлеев. Ширины размеров
|
|
102
102
|
(`664/864/1064/1264`) заданы LESS-константами `@lightBox-content-max-width-*`.
|
|
103
103
|
|
|
104
|
+
Боковые отступы контента лайтбокса (`@lightBoxContentPaddingX`, 80px — место под кнопки
|
|
105
|
+
вперёд/назад, на экранах до 1024px включительно 0) публикуются css-переменной
|
|
106
|
+
`--lightBox-content-padding-x` на `.lightBoxContent`. По ней потомки выравниваются с колонкой
|
|
107
|
+
страницы — так это делает обёртка `TopOverlay`. Переменная объявлена именно на `.lightBoxContent`,
|
|
108
|
+
поэтому вне его поддерева (например в `LightBox.SideOverlay` — он сиблинг `LightBox.Content`,
|
|
109
|
+
а не его потомок) она не видна, и читающие её стили получают фолбэк 0.
|
|
110
|
+
|
|
104
111
|
---
|
|
105
112
|
|
|
106
113
|
## Инварианты
|
|
@@ -166,10 +173,15 @@ css-переменную `--lightBox-scroll-width`, которую вычита
|
|
|
166
173
|
- `LightBoxControls` + `LightBoxClose` / `LightBoxPrev` / `LightBoxNext` (`LightBoxControls/`) — кнопки управления; стрелки построены на общем внутреннем `LightBoxArrow` (не экспортируется)
|
|
167
174
|
- `LightBoxLeftSidebar` / `LightBoxRightSidebar` (`LightBoxSidebars/`) — сайдбары с автоскрытием содержимого по ширине (общий хук `useLightBoxSidebarVisibility`)
|
|
168
175
|
- `LightBoxSideOverlay` (`LightBoxSideOverlay/`) — выезжающая справа панель с собственным focus trap, лоадером и кнопками закрытия CloseDesktop/CloseMobile
|
|
176
|
+
- `FocusTrapExtended` (`src/components/FocusTrapExtended`) — focus trap окна и боковой панели; настраивается через `focusTrapProps` (`IFocusTrapExtendedProps`). Своего AI.md и строки в `docs/ai/ROADMAP.md` не имеет
|
|
169
177
|
- `LightBoxViewManager` (`LightBoxViewManager/`) — внутренний менеджер позиционирования: следит за границами view-manager-ноды, проставляет breakpoint-классы и CSS-переменные
|
|
170
178
|
- `TopOverlay` (`src/components/TopOverlay`) — верхняя панель, реэкспортируется как `LightBox.TopOverlay`
|
|
171
179
|
- `Page` (`src/components/Page`) — рекомендуемая структура содержимого `LightBox.Content`
|
|
172
180
|
- `ModalWindow` — альтернатива для компактных диалогов
|
|
181
|
+
- `Overlay` (`src/components/Overlay`) — механика оверлея, на которой построен `LightBox.SideOverlay`: `ILightBoxSideOverlayProps` берёт `opened` / `onClose` из `IOverlayBaseProps`, подложку рисует `OverlayMask`
|
|
182
|
+
- `Portal` (`src/components/Portal`) — рендер содержимого в отдельный узел вне текущего DOM-поддерева
|
|
183
|
+
- `LoaderScreen` (`src/components/LoaderScreen`) — экран загрузки боковой панели, настраивается через `loaderScreenProps`
|
|
184
|
+
- `Button` (`src/components/Button`) — на нём построены кнопки управления: `LightBox.Controls` (закрытие и стрелки через общий `LightBoxArrow`) и кнопки закрытия `LightBox.SideOverlay`
|
|
173
185
|
|
|
174
186
|
---
|
|
175
187
|
|
|
@@ -202,11 +214,13 @@ css-переменную `--lightBox-scroll-width`, которую вычита
|
|
|
202
214
|
|
|
203
215
|
| Дата | Изменение |
|
|
204
216
|
|---|---|
|
|
217
|
+
| 2026-09-21 | Боковые отступы `.lightBoxContent` вынесены в css-переменную `--lightBox-content-padding-x` (константа `@lightBoxContentPaddingX`). Нужна, чтобы `TopOverlay` выравнивался по колонке контента |
|
|
205
218
|
| 2026-07-22 | Создан документ (Phase 1 AI-Ready). В том же изменении — AI-рефакторинг: JSDoc на props, общий `LightBoxArrow` для Prev/Next, хук `useLightBoxSidebarVisibility` для сайдбаров, устранение eslint-подавлений; публичный API не менялся |
|
|
206
219
|
| 2026-07-22 | Добавлен `export` к props-интерфейсам `ILightBoxControlsProps`, `ILightBoxCloseProps`, `ILightBoxPrevProps`, `ILightBoxNextProps`, `ILightBoxSideOverlayLoaderProps` (аддитивно, для консистентности с остальными интерфейсами компонента) |
|
|
207
220
|
| 2026-07-22 | Багфиксы по ревью PR #474: клавиатурные триггеры контролов целятся в видимую кнопку (стрелки не работали на desktop, Esc — на mobile); таймер-хак блокировки скролла заменён счётчиком смонтированных лайтбоксов; `LightBoxViewManager` снимает классы mount-ноды при размонтировании последнего менеджера |
|
|
208
221
|
| 2026-08-17 | Исправлено: `LightBox.TopOverlay` перекрывался лоадером `LightBox.Content`. У `.loadingContentOverlay` теперь локальный z-index (201) — выше sticky-шапки и футера `Page`, но ниже `TopOverlay` (500); раньше `LoaderScreen` шёл с глобальным `@z-index-loader-screen` (10100) |
|
|
209
222
|
| 2026-08-25 | Исправлено: в состоянии загрузки кнопка закрытия была недоступна для клика — её перекрывал лоадер `LightBox.Content`. Восстановлен модификатор `isLoading` на корневом элементе (терялся при переходе на CSS Modules): контролы поднимаются над лоадером, кнопки вперёд/назад скрываются. Esc в состоянии загрузки сохранён рабочим |
|
|
223
|
+
| 2026-09-29 | Аудит симметрии `related` (TRI-156): из `related` убраны имена без строки в `docs/ai/ROADMAP.md` (`FocusTrapExtended`); добавлены обратные ссылки (`Overlay`). Пояснения к убранным именам сохранены прозой в «Связанные компоненты»; публичный API и поведение не затронуты. |
|
|
210
224
|
|
|
211
225
|
---
|
|
212
226
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: List
|
|
3
3
|
category: List
|
|
4
|
-
related: [ListSortable, ListItem,
|
|
4
|
+
related: [ListSortable, ListItem, LoaderScreen]
|
|
5
5
|
tokens: []
|
|
6
6
|
stories: stories/List/List.stories.tsx
|
|
7
7
|
version: "1.0"
|
|
@@ -75,6 +75,7 @@ version: "1.0"
|
|
|
75
75
|
|---|---|
|
|
76
76
|
| 2026-04-29 | Создан документ |
|
|
77
77
|
| 2026-06-17 | `List.module.less`: локальный `z-index: @z-index-step` на `.listLoaderScreen` — исправлено перекрытие `LoaderScreen` поверх `LightBox` / `ModalWindow` |
|
|
78
|
+
| 2026-09-29 | Аудит симметрии `related` (TRI-156): из `related` убраны имена без строки в `docs/ai/ROADMAP.md` (`ListEmptyState`, `ListItemLoading`). Пояснения к убранным именам сохранены прозой в «Связанные компоненты»; публичный API и поведение не затронуты. |
|
|
78
79
|
|
|
79
80
|
---
|
|
80
81
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: ListActionItem
|
|
3
3
|
category: List
|
|
4
|
-
related: [ListItem
|
|
4
|
+
related: [ListItem]
|
|
5
5
|
tokens:
|
|
6
6
|
- ListItem.Background_Hover
|
|
7
7
|
- ListItem.BorderColor_Focus
|
|
@@ -158,3 +158,4 @@ ListItem.BorderColor_Focus // цвет focus-обводки (:focus-visible)
|
|
|
158
158
|
|---|---|
|
|
159
159
|
| 2026-07-17 | Добавлена story `WithActionItems` в `List.stories.tsx` — список из нескольких `ListActionItem`. |
|
|
160
160
|
| 2026-07-16 | Создан компонент `ListActionItem` — самодостаточная интерактивная строка (hover, focus по Tab, `onClick` + Enter/Space). Сам рендерит `ListItem` + `ListItemContent`; интерактивность и весь фон живут на одном `ListItemContent`. Пропсы разделены: собственные — на `<li>`, интерактивные — через `listItemContentProps`. |
|
|
161
|
+
| 2026-09-29 | Аудит симметрии `related` (TRI-156): из `related` убраны имена без строки в `docs/ai/ROADMAP.md` (`ListItemContent`); из `related` убраны несимметричные имена (`ListSortableItem`). Пояснения к убранным именам сохранены прозой в «Связанные компоненты»; публичный API и поведение не затронуты. |
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: ListItem
|
|
3
3
|
category: List
|
|
4
|
-
related: [List,
|
|
4
|
+
related: [List, ListActionItem, ListItemSelectable, ListTableItem, ListSortableItem]
|
|
5
5
|
tokens:
|
|
6
6
|
- ListItem.Background
|
|
7
7
|
- ListItem.Background_Selected
|
|
@@ -73,6 +73,7 @@ ListItem.BorderColor_Focus // цвет focus-обводки на desktop (List
|
|
|
73
73
|
- `ListItemLoading` — элемент-спиннер для пагинации (используется как последний элемент).
|
|
74
74
|
- `ListItemControls`, `ListItemControlsButton`, `ListItemControlsButtonDropdown` — кнопки действий, обычно внутри `SwipeableArea.rightSwipeableArea`.
|
|
75
75
|
- `ListItemTailLeft` / `ListItemTailRight` — декоративные хвосты для `SwipeableArea`.
|
|
76
|
+
- `ListSortableItem` — самодостаточный элемент перетаскиваемого списка: тоже рендерит `ListItem` внутри себя, но добавляет target и контролы перетаскивания.
|
|
76
77
|
- `ListTableItem` — комбинированная высокоуровневая обёртка.
|
|
77
78
|
|
|
78
79
|
---
|
|
@@ -99,6 +100,7 @@ ListItem.BorderColor_Focus // цвет focus-обводки на desktop (List
|
|
|
99
100
|
| 2026-04-29 | Создан документ |
|
|
100
101
|
| 2026-05-21 | `ListItemContext` расширен полями `selectable` / `setSelectable`. Исправлен цвет токена `Background_Selected` в тёмной теме (`ColorDarkNeutral.10` → `ColorDarkNeutral.60`). |
|
|
101
102
|
| 2026-07-16 | Добавлен самодостаточный компонент `ListActionItem` (сам рендерит `ListItem` + `ListItemContent`; hover, focus по Tab, `onClick` + Enter/Space). Координация фона через контекст не понадобилась — `ListItemContext` без изменений. Другие компоненты семейства его не используют. |
|
|
103
|
+
| 2026-09-29 | Аудит симметрии `related` (TRI-156): из `related` убраны имена без строки в `docs/ai/ROADMAP.md` (`ListItemContent`). Пояснения к убранным именам сохранены прозой в «Связанные компоненты»; публичный API и поведение не затронуты. |
|
|
102
104
|
|
|
103
105
|
---
|
|
104
106
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: ListItemControlsButton
|
|
3
3
|
category: List
|
|
4
|
-
related: [
|
|
4
|
+
related: [ListItemControlsButtonDropdown, IconWrapper]
|
|
5
5
|
tokens:
|
|
6
6
|
- ListItemControlsButton.Background_Default
|
|
7
7
|
- ListItemControlsButton.Background_Hover
|
|
@@ -104,3 +104,4 @@ ListItemControlsButton.Color_Active
|
|
|
104
104
|
| Дата | Изменение |
|
|
105
105
|
|---|---|
|
|
106
106
|
| 2026-04-29 | Создан документ |
|
|
107
|
+
| 2026-09-29 | Аудит симметрии `related` (TRI-156): из `related` убраны имена без строки в `docs/ai/ROADMAP.md` (`ListItemControls`). Пояснения к убранным именам сохранены прозой в «Связанные компоненты»; публичный API и поведение не затронуты. |
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: ListItemSelectable
|
|
3
3
|
category: List
|
|
4
|
-
related: [ListItem,
|
|
4
|
+
related: [ListItem, Checkbox]
|
|
5
5
|
tokens:
|
|
6
6
|
- ListItem.Background
|
|
7
7
|
- ListItem.Background_Selected
|
|
@@ -100,3 +100,4 @@ ListItem.Background_Selected // фон, когда selected=true
|
|
|
100
100
|
|---|---|
|
|
101
101
|
| 2026-04-29 | Создан документ |
|
|
102
102
|
| 2026-05-21 | Добавлен опциональный prop `disabled` (пробрасывается в `Checkbox`). Компонент пишет в `ListItemContext` флаг `selectable = true` при монтировании. |
|
|
103
|
+
| 2026-09-29 | Аудит симметрии `related` (TRI-156): из `related` убраны имена без строки в `docs/ai/ROADMAP.md` (`ListItemContent`). Пояснения к убранным именам сохранены прозой в «Связанные компоненты»; публичный API и поведение не затронуты. |
|
|
@@ -628,13 +628,13 @@ export const Default = () => {
|
|
|
628
628
|
controlButtons={
|
|
629
629
|
<>
|
|
630
630
|
<ListItemControlsButton
|
|
631
|
-
icon={<AttachmentStrokeSrvIcon20 paletteIndex={
|
|
631
|
+
icon={<AttachmentStrokeSrvIcon20 paletteIndex={0} />}
|
|
632
632
|
>
|
|
633
633
|
Скачать
|
|
634
634
|
</ListItemControlsButton>
|
|
635
635
|
|
|
636
636
|
<ListItemControlsButtonDropdown
|
|
637
|
-
icon={<DotshorizontalStrokeSrvIcon20 paletteIndex={
|
|
637
|
+
icon={<DotshorizontalStrokeSrvIcon20 paletteIndex={0} />}
|
|
638
638
|
options={itemActions}
|
|
639
639
|
>
|
|
640
640
|
Действия
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: ListMasterFooter
|
|
3
3
|
category: List
|
|
4
|
-
related: [ListMaster
|
|
4
|
+
related: [ListMaster]
|
|
5
5
|
tokens:
|
|
6
6
|
- ListMaster.Footer_Background
|
|
7
7
|
- ListMaster.Footer_Shadow
|
|
@@ -81,3 +81,4 @@ ListMaster.Footer_Shadow // тень сверху
|
|
|
81
81
|
| Дата | Изменение |
|
|
82
82
|
|---|---|
|
|
83
83
|
| 2026-04-29 | Создан документ. Уточнён JSDoc по дефолтному значению `sticky`. Добавлены unit-тесты. |
|
|
84
|
+
| 2026-09-29 | Аудит симметрии `related` (TRI-156): из `related` убраны имена без строки в `docs/ai/ROADMAP.md` (`ListMasterFooterDescription`, `ListMasterFooterControls`). Пояснения к убранным именам сохранены прозой в «Связанные компоненты»; публичный API и поведение не затронуты. |
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: ListMasterHeader
|
|
3
3
|
category: List
|
|
4
|
-
related: [ListMaster
|
|
4
|
+
related: [ListMaster]
|
|
5
5
|
tokens:
|
|
6
6
|
- ListMaster.Header_Background
|
|
7
7
|
- ListMaster.Header_Shadow
|
|
@@ -87,3 +87,4 @@ ListMaster.Header_Shadow // тень снизу
|
|
|
87
87
|
| Дата | Изменение |
|
|
88
88
|
|---|---|
|
|
89
89
|
| 2026-04-29 | Создан документ. Уточнён JSDoc по `useEffect`-логике компенсации скролла. Добавлены unit-тесты. |
|
|
90
|
+
| 2026-09-29 | Аудит симметрии `related` (TRI-156): из `related` убраны имена без строки в `docs/ai/ROADMAP.md` (`SelectionControls`). Пояснения к убранным именам сохранены прозой в «Связанные компоненты»; публичный API и поведение не затронуты. |
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: ListSortable
|
|
3
3
|
category: List
|
|
4
|
-
related: [List, ListSortableItem
|
|
4
|
+
related: [List, ListSortableItem]
|
|
5
5
|
tokens: []
|
|
6
6
|
stories: stories/List/List.stories.tsx
|
|
7
7
|
version: "1.0"
|
|
@@ -86,6 +86,7 @@ callback `onItemsChange`, в который пробрасывает резул
|
|
|
86
86
|
| Дата | Изменение |
|
|
87
87
|
|---|---|
|
|
88
88
|
| 2026-04-29 | Создан документ |
|
|
89
|
+
| 2026-09-29 | Аудит симметрии `related` (TRI-156): из `related` убраны имена без строки в `docs/ai/ROADMAP.md` (`ListSortableItemTarget`, `ListSortableItemControls`). Пояснения к убранным именам сохранены прозой в «Связанные компоненты»; публичный API и поведение не затронуты. |
|
|
89
90
|
|
|
90
91
|
---
|
|
91
92
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: ListSortableItem
|
|
3
3
|
category: List
|
|
4
|
-
related: [ListSortable,
|
|
4
|
+
related: [ListSortable, ListItem]
|
|
5
5
|
tokens:
|
|
6
6
|
- ListItem.Background
|
|
7
7
|
- ListItem.Background_Hover
|
|
@@ -111,6 +111,7 @@ ListItem.Shadow_Dragging // тень во время drag
|
|
|
111
111
|
| Дата | Изменение |
|
|
112
112
|
|---|---|
|
|
113
113
|
| 2026-04-29 | Создан документ |
|
|
114
|
+
| 2026-09-29 | Аудит симметрии `related` (TRI-156): из `related` убраны имена без строки в `docs/ai/ROADMAP.md` (`ListSortableItemTarget`, `ListSortableItemControls`). Пояснения к убранным именам сохранены прозой в «Связанные компоненты»; публичный API и поведение не затронуты. |
|
|
114
115
|
|
|
115
116
|
---
|
|
116
117
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: ListTableItem
|
|
3
3
|
category: List
|
|
4
|
-
related: [ListItem, ListItemSelectable,
|
|
4
|
+
related: [ListItem, ListItemSelectable, TableBasic, SwipeableArea]
|
|
5
5
|
tokens:
|
|
6
6
|
- ListItem.Background
|
|
7
7
|
- ListItem.Background_Selected
|
|
@@ -80,7 +80,9 @@ ListItem.Background_Selected // фон выбранной строки (чере
|
|
|
80
80
|
- `ListItemSelectable` — добавляется автоматически, если переданы `selected` + `onSelect`.
|
|
81
81
|
- `ListItemControls` — обёртка для `controlButtons`, подключается как `rightSwipeableArea`.
|
|
82
82
|
- `ListItemTailRight` — декоративный «хвост» в правой части (всегда отрисовывается).
|
|
83
|
+
- `ListItemControlsButton` — кнопка действия внутри `ListItemControls`; из таких кнопок собирается `controlButtons`.
|
|
83
84
|
- `SwipeableArea` — внешняя зависимость, обеспечивает swipe-жесты.
|
|
85
|
+
- `TableBasic` — альтернатива для табличного списка: настоящая таблица с колонками, когда строка не карточка со своей вёрсткой, свайпом и контролами.
|
|
84
86
|
|
|
85
87
|
---
|
|
86
88
|
|
|
@@ -104,6 +106,7 @@ ListItem.Background_Selected // фон выбранной строки (чере
|
|
|
104
106
|
|---|---|
|
|
105
107
|
| 2026-04-29 | Создан документ |
|
|
106
108
|
| 2026-07-16 | Компонент переименован `ListItemTable` → `ListTableItem`. Пропсы `IListItemTableProps`/`IListItemTableSelectableProps` → `IListTableItemProps`/`IListTableItemSelectableProps`, CSS-класс `.listItemTable` → `.listTableItem`, файлы `ListTableItem.*`. **Breaking change.** |
|
|
109
|
+
| 2026-09-29 | Аудит симметрии `related` (TRI-156): из `related` убраны имена без строки в `docs/ai/ROADMAP.md` (`ListItemControls`) и `ListItemControlsButton` — `ListTableItem` принимает `controlButtons` как `React.ReactNode` и рендерит `ListItemControls`, а саму кнопку не импортирует; добавлены обратные ссылки (`TableBasic`). Пояснения к убранным именам сохранены прозой в «Связанные компоненты»; публичный API и поведение не затронуты. |
|
|
107
110
|
|
|
108
111
|
---
|
|
109
112
|
|
|
@@ -156,11 +159,11 @@ export const Default = () => {
|
|
|
156
159
|
onClickItem={() => {}}
|
|
157
160
|
controlButtons={
|
|
158
161
|
<>
|
|
159
|
-
<ListItemControlsButton icon={<AttachmentStrokeSrvIcon20 paletteIndex={
|
|
162
|
+
<ListItemControlsButton icon={<AttachmentStrokeSrvIcon20 paletteIndex={0} />}>
|
|
160
163
|
Скачать
|
|
161
164
|
</ListItemControlsButton>
|
|
162
165
|
<ListItemControlsButtonDropdown
|
|
163
|
-
icon={<DotshorizontalStrokeSrvIcon20 paletteIndex={
|
|
166
|
+
icon={<DotshorizontalStrokeSrvIcon20 paletteIndex={0} />}
|
|
164
167
|
options={options}
|
|
165
168
|
>
|
|
166
169
|
Действия
|
|
@@ -245,11 +248,11 @@ export const Selectable = () => {
|
|
|
245
248
|
onClickItem={() => console.log("Клик по карточке.")}
|
|
246
249
|
controlButtons={
|
|
247
250
|
<>
|
|
248
|
-
<ListItemControlsButton icon={<AttachmentStrokeSrvIcon20 paletteIndex={
|
|
251
|
+
<ListItemControlsButton icon={<AttachmentStrokeSrvIcon20 paletteIndex={0} />}>
|
|
249
252
|
Скачать
|
|
250
253
|
</ListItemControlsButton>
|
|
251
254
|
<ListItemControlsButtonDropdown
|
|
252
|
-
icon={<DotshorizontalStrokeSrvIcon20 paletteIndex={
|
|
255
|
+
icon={<DotshorizontalStrokeSrvIcon20 paletteIndex={0} />}
|
|
253
256
|
options={options}
|
|
254
257
|
>
|
|
255
258
|
Действия
|
|
@@ -354,11 +357,11 @@ export const WithSwipeEmulation = () => {
|
|
|
354
357
|
onClickItem={() => console.log("Клик по карточке.")}
|
|
355
358
|
controlButtons={
|
|
356
359
|
<>
|
|
357
|
-
<ListItemControlsButton icon={<AttachmentStrokeSrvIcon20 paletteIndex={
|
|
360
|
+
<ListItemControlsButton icon={<AttachmentStrokeSrvIcon20 paletteIndex={0} />}>
|
|
358
361
|
Скачать
|
|
359
362
|
</ListItemControlsButton>
|
|
360
363
|
<ListItemControlsButtonDropdown
|
|
361
|
-
icon={<DotshorizontalStrokeSrvIcon20 paletteIndex={
|
|
364
|
+
icon={<DotshorizontalStrokeSrvIcon20 paletteIndex={0} />}
|
|
362
365
|
options={options}
|
|
363
366
|
>
|
|
364
367
|
Действия
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: LoaderMiddle
|
|
3
3
|
category: Loaders
|
|
4
|
-
related: [LoaderSmall, LoaderScreen, TableBasic]
|
|
4
|
+
related: [Skeleton, LoaderSmall, LoaderScreen, TableBasic]
|
|
5
5
|
tokens:
|
|
6
6
|
- Loader.Middle_Background_Default
|
|
7
7
|
- Loader.Element_Background_Brand
|
|
@@ -106,6 +106,9 @@ Loader.Element_Background_Brand
|
|
|
106
106
|
того же barrel `src/components/Loader/index.ts`.
|
|
107
107
|
- `LoaderScreen` (`src/components/LoaderScreen/LoaderScreen.tsx`) — оверлей-подложка с лоадером по
|
|
108
108
|
центру, подписью и кнопками; при `type="middle"` рендерит `LoaderMiddle` без обёрток.
|
|
109
|
+
- `Skeleton` (`src/components/Skeleton/`) — альтернатива для той же задачи (первая загрузка
|
|
110
|
+
блока) с другим компромиссом: показывает каркас будущей раскладки, поэтому берётся, когда
|
|
111
|
+
раскладка известна заранее. `LoaderMiddle` — когда неизвестна.
|
|
109
112
|
- `TableBasic` (`src/components/Table/TableBasic/TableBasic.tsx`) — показывает `LoaderMiddle` в
|
|
110
113
|
футере таблицы при догрузке данных на пустом состоянии.
|
|
111
114
|
|
|
@@ -134,6 +137,7 @@ Loader.Element_Background_Brand
|
|
|
134
137
|
| Дата | Изменение |
|
|
135
138
|
|---|---|
|
|
136
139
|
| 2026-08-05 | Создан документ. AI-рефакторинг: JSDoc на компоненте, порядок импортов приведён к codestyle, в LESS объединены дублирующиеся базовые стили `.dot` и `.line`, unit-тесты расширены с 1 до 2 кейсов (роль корневого элемента, количество точек и линии). В stories `controls: { disable: true }` перенесён на верхний уровень `parameters` (внутри `docs` не применялся). Публичный API, DOM и визуальное поведение не изменены. |
|
|
140
|
+
| 2026-09-29 | Аудит симметрии `related` (TRI-156): добавлена обратная ссылка `Skeleton` — `Skeleton-ai.md` называет `LoaderMiddle` альтернативой (категория 2), а такие пары по `docs/ai/CONTEXT.md` симметричны; в TRI-76 связь была проставлена только с одной стороны. Публичный API и поведение не затронуты. |
|
|
137
141
|
|
|
138
142
|
---
|
|
139
143
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: LoaderScreen
|
|
3
3
|
category: Loaders
|
|
4
|
-
related: [LoaderSmall, LoaderMiddle, Gap, Text,
|
|
4
|
+
related: [LoaderSmall, LoaderMiddle, Gap, Text, List, TableBasic]
|
|
5
5
|
tokens:
|
|
6
6
|
- LoaderScreen.Small_Backdrop_Default
|
|
7
7
|
- LoaderScreen.Middle_Backdrop_Default
|
|
@@ -161,6 +161,11 @@ breaking change для темизации), но опираться на нег
|
|
|
161
161
|
- `TableBasic` — лоадер поверх тела таблицы.
|
|
162
162
|
- `MultiselectField` — `LoaderScreen type="small"` внутри выпадающего списка.
|
|
163
163
|
|
|
164
|
+
`MultiselectField` в `related` не входит: обычный контракт по рендеру, ссылка стоит с его
|
|
165
|
+
стороны. `List` и `TableBasic` остаются — они подпадают под исключение «потребитель,
|
|
166
|
+
опирающийся на хрупкую деталь»: оба понижают `z-index` лоадера через вложенный селектор,
|
|
167
|
+
и держится это на специфичности правил `.loaderScreen` (см. «Ограничения раскладки»).
|
|
168
|
+
|
|
164
169
|
---
|
|
165
170
|
|
|
166
171
|
## Stories
|
|
@@ -186,6 +191,7 @@ breaking change для темизации), но опираться на нег
|
|
|
186
191
|
| Дата | Изменение |
|
|
187
192
|
|---|---|
|
|
188
193
|
| 2026-08-06 | Создан документ. AI-рефакторинг: порядок импортов по `codestyle.md`, JSDoc на компоненте, props и `ILoaderScreenMiddleProps` (включая значение по умолчанию для `size`), подложка вынесена в `TYPE_TO_BACKDROP_CLASS_NAME_MAP`, `className` в `clsx` перенесён в конец. Unit-тесты расширены: все значения `EComponentSize`, игнорирование `size` при `type="middle"`, класс подложки по типу, отсутствие `description` / `controls`, мердж `className`, spread rest-props, `forwardRef`. Публичный API, DOM и стили не изменены. |
|
|
194
|
+
| 2026-09-29 | Аудит симметрии `related` (TRI-156): из `related` убраны имена без строки в `docs/ai/ROADMAP.md` (`ModalWindowContent`, `LightBoxContent`, `LightBoxSideOverlay`) и потребитель `MultiselectField` — контракт по рендеру, ссылка стоит с его стороны. `List` и `TableBasic` оставлены: они понижают `z-index` лоадера вложенным селектором и опираются на специфичность правил `.loaderScreen` — исключение «потребитель, опирающийся на хрупкую деталь». Пояснения к убранным именам сохранены прозой в «Связанные компоненты»; публичный API и поведение не затронуты. |
|
|
189
195
|
|
|
190
196
|
---
|
|
191
197
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: LoaderSmall
|
|
3
3
|
category: Loaders
|
|
4
|
-
related: [LoaderMiddle, LoaderScreen, Button
|
|
4
|
+
related: [LoaderMiddle, LoaderScreen, Button]
|
|
5
5
|
tokens:
|
|
6
6
|
- Loader.Element_Background_Brand
|
|
7
7
|
- Loader.Element_Background_Neutral
|
|
@@ -128,13 +128,18 @@ Loader: `Element_Background_Brand` использует также `LoaderMiddle
|
|
|
128
128
|
- `LoaderScreen` (`src/components/LoaderScreen/LoaderScreen.tsx`) — оверлей с лоадером,
|
|
129
129
|
подписью и кнопками; при `type="small"` рендерит `LoaderSmall` с темой `BRAND`.
|
|
130
130
|
- `Button` (`src/components/Button/Button.tsx`) — рендерит `LoaderSmall` **всегда**, а вне
|
|
131
|
-
состояния `loading` прячет обёртку классом (`Button.tsx:156`)
|
|
132
|
-
|
|
131
|
+
состояния `loading` прячет обёртку классом (`Button.tsx:156`). Класс задаёт
|
|
132
|
+
`visibility: hidden` (`Button.module.less:136-138`), то есть в браузере узел выпадает
|
|
133
|
+
из дерева доступности, но остаётся в DOM. Unit-тесты идут в jsdom, который LESS не
|
|
134
|
+
применяет, поэтому там `role="status"` находится и у обычной кнопки — не пиши тест
|
|
135
|
+
вида `queryByRole("status")` → `null`.
|
|
133
136
|
Тему выбирает по теме кнопки (`SECONDARY` / `SECONDARY_LIGHT` → `BRAND`,
|
|
134
137
|
остальные → `NEUTRAL`), размер — по размеру кнопки.
|
|
135
138
|
- `Dropdown` (`DropdownList`, `DropdownMobileList`, `DropdownMobileLoader`), `SuggestField`,
|
|
136
139
|
`ChipSuggest`, `SelectExtendedField`, `ListItemLoading` — показывают `LoaderSmall` с темой
|
|
137
|
-
`BRAND` во время подгрузки данных.
|
|
140
|
+
`BRAND` во время подгрузки данных. В `related` не входят: это контракт по рендеру, ссылка
|
|
141
|
+
стоит с их стороны. `Button` — исключение «потребитель, опирающийся на хрупкую деталь»
|
|
142
|
+
(см. выше про `role="status"`), поэтому он в `related` остаётся с обеих сторон.
|
|
138
143
|
|
|
139
144
|
---
|
|
140
145
|
|
|
@@ -166,6 +171,7 @@ Loader: `Element_Background_Brand` использует также `LoaderMiddle
|
|
|
166
171
|
| Дата | Изменение |
|
|
167
172
|
|---|---|
|
|
168
173
|
| 2026-08-06 | Создан документ. AI-рефакторинг: JSDoc на компоненте, props и значениях `ELoaderSmallTheme`, документирован неиспользуемый `ELoaderSmallSize`, порядок импортов приведён к codestyle, константы-маппинги переименованы в `THEME_TO_CLASS_NAME_MAP` / `SIZE_TO_CLASS_NAME_MAP`, в стилях объединено дублирующееся объявление анимации точек — сама анимация задана один раз на `.dot`, а у `.dot1` / `.dot2` / `.dot3` осталась только `animation-delay` (правило `.dot1` с нулевой задержкой обязательно: без него класс исчезнет из CSS-модуля и из разметки), unit-тесты расширены с 3 до 6 кейсов. В stories `controls: { disable: true }` перенесён на верхний уровень `parameters` — внутри `docs` он не применялся. Публичный API, DOM и визуальное поведение не изменены. |
|
|
174
|
+
| 2026-09-29 | Аудит симметрии `related` (TRI-156): из `related` убраны имена без строки в `docs/ai/ROADMAP.md` (`ListItemLoading`); из `related` убраны потребители `Dropdown`, `SuggestField`, `SelectExtendedField` — ссылка на контракт по рендеру стоит с их стороны; `Button` оставлен как исключение «потребитель, опирающийся на хрупкую деталь». Пояснения к убранным именам сохранены прозой в «Связанные компоненты»; публичный API и поведение не затронуты. |
|
|
169
175
|
|
|
170
176
|
---
|
|
171
177
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: MaskedField
|
|
3
3
|
category: TextFields
|
|
4
|
-
related: [TextField, FormField,
|
|
4
|
+
related: [TextField, FormField, FormGroup, DateField]
|
|
5
5
|
tokens: []
|
|
6
6
|
stories: stories/MaskedField/MaskedField.stories.tsx
|
|
7
7
|
version: "1.0"
|
|
@@ -87,6 +87,7 @@ version: "1.0"
|
|
|
87
87
|
- `TextFieldBase` — базовая раскладка `FormGroup`/`FormField` + слоты `prefix`/`children`/`label`/`postfix` и блок `description`/`counter`.
|
|
88
88
|
- `FormFieldMaskedInput` — сам элемент ввода с маской и статическим свойством `presets` (`masks`, `placeholderMasks`). Используется напрямую, когда нужна нестандартная композиция поля.
|
|
89
89
|
- `FormFieldClear` — кнопка очистки, передаётся в `postfix`.
|
|
90
|
+
- `TextField` — то же поле без маски: отличается только элементом ввода (`FormFieldInput` вместо `FormFieldMaskedInput`).
|
|
90
91
|
- `FormGroup` / `FormField` — контейнеры раскладки поля и описания.
|
|
91
92
|
- `DateField`, `MonthYearField`, `AmountField`, `SuggestField`, `TextareaField` — специализированные поля той же группы `TextFields`.
|
|
92
93
|
|
|
@@ -119,6 +120,7 @@ version: "1.0"
|
|
|
119
120
|
| 2026-08-11 | Тип `maskedInputProps.ref` исправлен на `React.RefObject<HTMLDivElement>` — соответствует фактическому ref-таргету (правки по ревью PR #515) |
|
|
120
121
|
| 2026-08-12 | Исправления в `FormFieldMaskedInput` по ревью PR #515: убрана мутация prop `value` в `getValue()`, `defaultValue` больше не уходит в `<input>` (предупреждение React о controlled/uncontrolled) и исключён из `IFormFieldMaskedInputProps` |
|
|
121
122
|
| 2026-09-09 | Исправлено: значение с кодом страны раскладывалось по маске телефона со сдвигом и теряло последнюю цифру. Нормализация номера вынесена в `normalizePhoneText` и применяется и к внешнему `value`, и к слою с маской |
|
|
123
|
+
| 2026-09-29 | Аудит симметрии `related` (TRI-156): из `related` убраны имена без строки в `docs/ai/ROADMAP.md` (`FormFieldMaskedInput`); из `related` убраны несимметричные имена (`MonthYearField`). Пояснения к убранным именам сохранены прозой в «Связанные компоненты»; публичный API и поведение не затронуты. |
|
|
122
124
|
|
|
123
125
|
---
|
|
124
126
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: MediaWidth
|
|
3
3
|
category: MediaWidth
|
|
4
|
-
related: [
|
|
4
|
+
related: [MobileView, WindowResizeListener]
|
|
5
5
|
tokens: []
|
|
6
6
|
stories: stories/MediaWidth/MediaWidth.stories.tsx
|
|
7
7
|
version: "1.0"
|
|
@@ -227,6 +227,7 @@ version: "1.0"
|
|
|
227
227
|
|---|---|
|
|
228
228
|
| 2026-08-18 | TRI-104: в `related` и «Связанные компоненты» добавлен `WindowResizeListener` — обратная сторона симметричной связи-альтернативы. Код и публичный API не затронуты. |
|
|
229
229
|
| 2026-08-11 | Создан документ. AI-рефакторинг (TRI-58): `displayName` у `MediaWidth`, исправлены опечатки и дополнен JSDoc props и компонента, unit-тесты расширены с 7 до 19 кейсов (проверяются строки медиа-запросов, выбор реализации, `null`-ветки, переподписка и отписка). Публичный API не изменён (props, `IMediaProps`, barrel-экспорты; `forwardRef` по-прежнему осознанно отсутствует). |
|
|
230
|
+
| 2026-09-29 | Аудит симметрии `related` (TRI-156): из `related` убраны имена без строки в `docs/ai/ROADMAP.md` (`MediaMinWidth`, `MediaMaxWidth`, `MediaBetweenWidth`, `useMatchMedia`). Пояснения к убранным именам сохранены прозой в «Связанные компоненты»; публичный API и поведение не затронуты. |
|
|
230
231
|
|
|
231
232
|
---
|
|
232
233
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: MobileView
|
|
3
3
|
category: MobileView
|
|
4
|
-
related: [MediaWidth
|
|
4
|
+
related: [MediaWidth]
|
|
5
5
|
tokens: []
|
|
6
6
|
stories: stories/MobileView/MobileView.stories.tsx
|
|
7
7
|
version: "1.0"
|
|
@@ -173,6 +173,7 @@ viewport `xs` (575px) рендерится мобильный вариант, н
|
|
|
173
173
|
| Дата | Изменение |
|
|
174
174
|
|---|---|
|
|
175
175
|
| 2026-08-10 | Создан документ. AI-рефакторинг (TRI-59): `useMobileView.tsx` → `useMobileView.ts` (в файле нет JSX), явный тип возврата у хука, `displayName` у `MobileView`, дополнен JSDoc, добавлены unit-тесты (15 кейсов) и stories по modern pattern. Публичный API не изменён (props, сигнатура хука, barrel-экспорты; `forwardRef` по-прежнему осознанно отсутствует). |
|
|
176
|
+
| 2026-09-29 | Аудит симметрии `related` (TRI-156): из `related` убраны имена без строки в `docs/ai/ROADMAP.md` (`MediaMaxWidth`, `useMatchMedia`, `useMobileView`). Пояснения к убранным именам сохранены прозой в «Связанные компоненты»; публичный API и поведение не затронуты. |
|
|
176
177
|
|
|
177
178
|
---
|
|
178
179
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: ModalWindow
|
|
3
3
|
category: ModalWindow
|
|
4
|
-
related: [
|
|
4
|
+
related: [LightBox, Portal, Page, HeaderPage, FooterPage, Island, LoaderScreen]
|
|
5
5
|
tokens:
|
|
6
6
|
- ModalWindow.Backdrop_Background
|
|
7
7
|
- ModalWindow.Background
|
|
@@ -107,6 +107,8 @@ ModalWindow.Background
|
|
|
107
107
|
- **`ModalWindowBody`** — тело. Тривиальная обёртка над `Island` с фиксированными `type=TYPE_1` и `size=MD`. Тип `IModalWindowBodyProps extends Omit<IIslandProps, "loading" | "loaderScreenProps">`. Состояние загрузки у `Island` намеренно отрезано: тело скроллируется (`overflow: auto`), а `LoaderScreen` позиционируется абсолютно и уехал бы вместе с контентом. Загрузку модального окна задавай на `ModalWindowContent`.
|
|
108
108
|
- **`ModalWindowFooter`** — футер. Тривиальная обёртка над `FooterPage` с фиксированным `type=FIRST`. Экспонирует статическое поле `Description = FooterPage.Description`.
|
|
109
109
|
- **`ModalWindowClose`** — кнопка закрытия. Обёртка над `Button` (`theme=SECONDARY`, `size=MD`, иконка `CrossStrokeSrvIcon20`) внутри `TriggerClickOnKeyDownEvent` с `EVENT_KEY_CODES.ESCAPE`. **Текст `title` не имеет дефолта внутри компонента** — библиотека мультиязычная, локализованную подсказку (например, `title="Закрыть"`) передаёт потребитель через props. Тип `IModalWindowCloseProps` (Omit `size`/`theme`/`icon` от `IButtonSecondaryProps`).
|
|
110
|
+
- **`LightBox`** — альтернатива для полноэкранного просмотра: тот же механизм оверлея, но контент занимает весь экран, а не центрированное окно.
|
|
111
|
+
- **`FocusTrapExtended`** (`src/components/FocusTrapExtended`) — focus trap окна: `ModalWindow` рендерит его и настраивает через `focusTrapProps` (`IFocusTrapExtendedProps`). Своего AI.md и строки в `docs/ai/ROADMAP.md` не имеет.
|
|
110
112
|
- **`ModalWindowViewManager`** — невидимый компонент-сенсор. Создаёт DOM-ноду `<div id="modalWindowViewManagerNodeId">` (если её нет в `body`) и рендерит туда через `Portal` resize-сенсор + `<style>`-инжект CSS-переменных `--modalWindow-screen-*` в `:root`. Подключается автоматически из `ModalWindow`; экспортируется отдельно для случая, когда лайаут хочет позиционировать ноду вручную (например, рисовать модалку только в области рабочей зоны без шапки).
|
|
111
113
|
|
|
112
114
|
---
|
|
@@ -138,6 +140,7 @@ ModalWindow.Background
|
|
|
138
140
|
| 2026-06-30 | Fix: модалка не отображалась под React 18 `StrictMode`. На искусственном unmount/mount-цикле cleanup в `useEffect` открепляет портальный `mountNode`, а инициализатор `useState` повторно не вызывается — узел оставался вне DOM. Теперь `useEffect` при (повторном) mount возвращает узел в wrapper, если тот откреплён. Wrapper вынесен в `getOrCreateWrapperNode`. Добавлен регрессионный тест на реальном `Portal` (`ModalWindow.strictMode.test.tsx`). |
|
|
139
141
|
| 2026-08-07 | `IModalWindowBodyProps` сузился до `Omit<IIslandProps, "isLoading" \| "loaderScreenProps">`: в `Island` появилось состояние загрузки, но в скроллируемом теле модалки абсолютный `LoaderScreen` уезжает вместе с контентом. Публичный API не изменён — props исключены до их первого релиза; путь для загрузки модального окна прежний, `ModalWindowContent`. |
|
|
140
142
|
| 2026-08-11 | Prop загрузки в `Island` переименован `isLoading` → `loading`, вслед за ним `Omit` в `IModalWindowBodyProps` — теперь `Omit<IIslandProps, "loading" \| "loaderScreenProps">`. Публичный API `ModalWindow` не изменён: у `ModalWindowContent` prop по-прежнему `isLoading`. |
|
|
143
|
+
| 2026-09-29 | Аудит симметрии `related` (TRI-156): из `related` убраны имена без строки в `docs/ai/ROADMAP.md` (`ModalWindowContent`, `ModalWindowHeader`, `ModalWindowBody`, `ModalWindowFooter`, `ModalWindowClose`, `ModalWindowViewManager`, `FocusTrap`); добавлены обратные ссылки (`LightBox`). Пояснения к убранным `ModalWindow*` сохранены прозой в «Связанные компоненты», а `FocusTrap` там заменён на фактически рендерящийся `FocusTrapExtended`; публичный API и поведение не затронуты. |
|
|
141
144
|
|
|
142
145
|
---
|
|
143
146
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: MonthYearField
|
|
3
3
|
category: Date components
|
|
4
|
-
related: [
|
|
4
|
+
related: [MonthYearRange, ChipMonthYearPicker, DateField, DatePickerExtended, TextField, Calendar]
|
|
5
5
|
tokens: []
|
|
6
6
|
stories: stories/MonthYearField/MonthYearField.stories.tsx
|
|
7
7
|
version: "1.0"
|
|
@@ -61,7 +61,6 @@ version: "1.0"
|
|
|
61
61
|
- `forwardRef` на компоненте — не убирать. Ref пробрасывается в `DatePickerExtended` (корневой DOM-элемент — элемент `DatePickerExtended`).
|
|
62
62
|
- Публичный API (`IMonthYearFieldProps`: `value`, `onChange`, `onClear`, `targetProps`, `placeholder` + унаследованные `size`/`status`/`label` и props `DatePickerExtended`) — изменение имён/типов/значений — breaking change.
|
|
63
63
|
- Поле read-only по контракту — не делать его редактируемым без обсуждения (компонент не имеет логики валидации клавиатурного ввода).
|
|
64
|
-
- Отображаемый формат `"MMM YYYY"` зафиксирован в `inputMonthYearFormat`; менять его — визуальный breaking change для потребителей.
|
|
65
64
|
- Sync-эффект в `MonthYearField.tsx` (`useEffect` по `[value, format, limitRange]` с `eslint-disable react-hooks/exhaustive-deps`) — намеренная синхронизация derived-стейта `pickerValues` с внешним `value`. Не переписывать без анализа поведения: сравнение идёт по `inputString`, чтобы не сбрасывать стейт при эквивалентных значениях.
|
|
66
65
|
- Внутренние символы `MonthYearPickerUtils` (`utils.ts`), `MonthYearFieldContext`, `MonthYearFieldTarget` не экспортируются через barrel — это приватные детали реализации.
|
|
67
66
|
|
|
@@ -82,6 +81,8 @@ version: "1.0"
|
|
|
82
81
|
- `MonthYearRange` — выбор диапазона месяцев; использует `MonthYearField` как поля «от» и «до».
|
|
83
82
|
- `ChipMonthYearPicker` — тот же выбор месяца в виде чипса-фильтра: наследует `IMonthYearFieldProps` и утилиты `MonthYearPickerUtils`, но вместо поля формы рендерит `Chip`.
|
|
84
83
|
- `TextField` — внутреннее поле-триггер.
|
|
84
|
+
- `Calendar` — календарь внутри дропдауна в режиме `MONTH_YEAR`; его props приходят в публичный API через `DatePickerExtended`.
|
|
85
|
+
- `DateField` — альтернатива для выбора полной даты; устроен по той же схеме, но поле редактируемое и с маской.
|
|
85
86
|
- `MonthYearFieldTarget` (внутренний, не в barrel) — рендерит `TextField` с иконкой календаря и кнопкой очистки, обрабатывает клик/клавиатуру для открытия дропдауна. Описан здесь, отдельного AI.md не имеет.
|
|
86
87
|
- `MonthYearFieldContext` (внутренний, не в barrel) — прокидывает `onChange` в target; тривиальный контекст без своей логики.
|
|
87
88
|
- `MonthYearPickerUtils` (`utils.ts`, внутренний) — чистые функции парсинга/валидации даты (`getPickerValues`, `getCalendarDate`, `isAvailableDate`). Покрыты `__tests__/utils.test.tsx`.
|
|
@@ -112,6 +113,7 @@ version: "1.0"
|
|
|
112
113
|
| 2026-06-16 | Создан документ. AI-рефакторинг (JSDoc-фиксы), unit-тесты для `utils.ts`, story `VisualTests` и включение скриншот-тестов |
|
|
113
114
|
| 2026-06-16 | Добавлена story `VisualTestsOpen` — скриншот раскрытого dropdown с календарём (через `play`) |
|
|
114
115
|
| 2026-09-07 | В «Связанные компоненты» добавлен `ChipMonthYearPicker` — чипс-вариант того же выбора месяца |
|
|
116
|
+
| 2026-09-29 | Аудит симметрии `related` (TRI-156): добавлены обратные ссылки (`DateField`). Публичный API и поведение не затронуты. |
|
|
115
117
|
|
|
116
118
|
---
|
|
117
119
|
|
|
@@ -130,7 +132,7 @@ export const DefaultExample = () => {
|
|
|
130
132
|
|
|
131
133
|
return (
|
|
132
134
|
<div style={{ maxWidth: 300 }}>
|
|
133
|
-
<MonthYearField value={value} placeholder="
|
|
135
|
+
<MonthYearField value={value} placeholder="Select to proceed" label="Label" onChange={setValue} />
|
|
134
136
|
</div>
|
|
135
137
|
);
|
|
136
138
|
};
|
|
@@ -154,7 +156,13 @@ const SizeItem = ({ size }: ISizeItemProps) => {
|
|
|
154
156
|
return (
|
|
155
157
|
<div style={{ maxWidth: 300 }}>
|
|
156
158
|
<div style={{ marginBottom: 8, fontSize: 16, fontWeight: 700 }}>{size.toUpperCase()}</div>
|
|
157
|
-
<MonthYearField
|
|
159
|
+
<MonthYearField
|
|
160
|
+
size={size}
|
|
161
|
+
value={value}
|
|
162
|
+
label="Label"
|
|
163
|
+
placeholder="Select to proceed"
|
|
164
|
+
onChange={setValue}
|
|
165
|
+
/>
|
|
158
166
|
</div>
|
|
159
167
|
);
|
|
160
168
|
};
|
|
@@ -188,7 +196,13 @@ const StatusItem = ({ status }: IStatusItemProps) => {
|
|
|
188
196
|
return (
|
|
189
197
|
<div style={{ maxWidth: 300 }}>
|
|
190
198
|
<div style={{ marginBottom: 8, fontSize: 16, fontWeight: 700 }}>{status.toUpperCase()}</div>
|
|
191
|
-
<MonthYearField
|
|
199
|
+
<MonthYearField
|
|
200
|
+
status={status}
|
|
201
|
+
value={value}
|
|
202
|
+
label="Label"
|
|
203
|
+
placeholder="Select to proceed"
|
|
204
|
+
onChange={setValue}
|
|
205
|
+
/>
|
|
192
206
|
</div>
|
|
193
207
|
);
|
|
194
208
|
};
|
|
@@ -152,6 +152,7 @@ Notification.TimeColor (цвет времени)
|
|
|
152
152
|
| Дата | Изменение |
|
|
153
153
|
|---|---|
|
|
154
154
|
| 2026-06-16 | Создан AI-документ. `Notification`, `NotificationGrouped`, `NotificationBody` переведены на `forwardRef` (паттерн `Object.assign`); удалены типы `INotificationSFC`/`INotificationBodySFC`; тип `Notification.Time.time` расширен с `React.ReactText` до `React.ReactNode`. Stories мигрированы на modern pattern. |
|
|
155
|
+
| 2026-09-28 | Токен `Notification.Shadow` ссылается на `Shadow.07` (светлая) и `DarkShadow.07` (тёмная) вместо литералов; в тёмной теме прозрачность 0.25 вместо 0.35. |
|
|
155
156
|
|
|
156
157
|
---
|
|
157
158
|
|