@sberbusiness/triplex-next-mcp-server 1.43.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.
@@ -49,7 +49,7 @@ ARIA-роли не выставляет.
49
49
  | `closable` | `boolean` | `false` | Показывает кнопку закрытия в правом верхнем углу |
50
50
  | `onClose` | `() => void` | — | Вызывается **после** того, как компонент скрыл себя. Аргументов не принимает, отменить закрытие нельзя |
51
51
  | `renderIcon` | `React.ReactNode` | иконка по `type` | Полностью заменяет иконку по умолчанию |
52
- | `borderRadius` | `EAlertProcessBorderRadius` | `EAlertProcessBorderRadius.MD` | Скругление углов: `MD` (12px) / `LG` (24px) |
52
+ | `borderRadius` | `EAlertProcessBorderRadius` | `EAlertProcessBorderRadius.MD` | Скругление углов: `MD` (16px) / `LG` (24px) |
53
53
  | `children` | `React.ReactNode` | — | Контент. Типографику задаёт потребитель компонентами `Typography` — сам `AlertProcess` размер и цвет текста не задаёт |
54
54
  | `...HTMLDivElementAttributes` | — | — | Все стандартные атрибуты `<div>` |
55
55
 
@@ -80,7 +80,7 @@ ARIA-роли не выставляет.
80
80
  Значения — в `src/components/DesignTokens/components/AlertProcess.ts`. Компонент
81
81
  задаёт **только фон**: цвет и размер текста — зона ответственности `Typography`
82
82
  у потребителя, цвет иконок — `paletteIndex` соответствующей иконки. Скругления
83
- (12px / 24px) и внутренние отступы (16px) заданы литералами в
83
+ (16px / 24px) и внутренние отступы (16px) заданы литералами в
84
84
  `styles/AlertProcess.module.less` — токенов для них нет.
85
85
 
86
86
  ---
@@ -245,6 +245,7 @@ ARIA-роли не выставляет.
245
245
  | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
246
246
  | 2026-08-10 | Создан документ. AI-рефакторинг: `AlertProcessSpoiler` переведён на `forwardRef` и перестал затирать `className` собственными классами; из него убрана ссылка на несуществующий CSS-класс `styles.spoiler`; в `AlertProcess` убрано дублирующее присваивание `AlertProcess.Spoiler`, `renderIcon` приведён к `\|\|` как в `AlertContext`, добавлены JSDoc на props с дефолтами и явный `children`; из LESS удалено мёртвое правило `.alertTypeFeature .themeIcon { padding-top: 0 }`. Unit-тесты разбиты на `AlertProcess.test.tsx`и`AlertProcessSpoiler.test.tsx`и расширены с 11 до 34 кейсов. Stories переведены на modern pattern — файлы примеров без суффикса`Example`. Публичный API не изменён. |
247
247
  | 2026-08-11 | По ревью PR #520: из `AlertProcessSpoiler` убрана пустая обёртка-`<div>` — контент и кнопка раскрытия стали соседними элементами, корневым элементом компонента стал элемент контента (он и раньше получал `className` / `ref` / `...rest`). На кнопке раскрытия выставлен `aria-expanded`. Тесты дополнены до 37 кейсов. Публичный API не изменён. |
248
+ | 2026-08-28 | Скругление варианта `MD` увеличено с 12px до 16px в `styles/AlertProcess.module.less`. |
248
249
 
249
250
  ---
250
251
 
@@ -35,12 +35,37 @@ version: "1.0"
35
35
 
36
36
  | Prop | Тип | По умолчанию | Описание |
37
37
  |---|---|---|---|
38
- | `verticalMargin` | `EBodyPageVerticalMargin` | `LARGE` | Вертикальные отступы: `LARGE` = 24px (16px на узких экранах), `SMALL` = 16px (8px на узких). В LightBox используется `SMALL`. |
38
+ | `verticalMargin` | `TBodyPageVerticalMargin` | `LARGE` | Вертикальные отступы: `LARGE` = 24px (16px на узких экранах), `SMALL` = 16px (8px на узких), `NONE` = 0. Одно значение задаёт обе стороны; объект `{top, bottom}` — каждую отдельно, обе стороны указываются явно. В LightBox используется `SMALL`. |
39
39
  | `size` | `EComponentSize` | — | Размер острова (Island). **Доступен только для `type=FIRST`**; для `type=SECOND` типизирован как `never`. |
40
40
 
41
+ ### Тип verticalMargin
42
+
43
+ ```ts
44
+ interface IBodyPageVerticalMarginSides {
45
+ top: EBodyPageVerticalMargin;
46
+ bottom: EBodyPageVerticalMargin;
47
+ }
48
+
49
+ type TBodyPageVerticalMargin = EBodyPageVerticalMargin | IBodyPageVerticalMarginSides;
50
+ ```
51
+
52
+ ```tsx
53
+ <Page.Body type={EBodyPageType.FIRST} verticalMargin={EBodyPageVerticalMargin.NONE}>…</Page.Body>
54
+ <Page.Body
55
+ type={EBodyPageType.FIRST}
56
+ verticalMargin={{top: EBodyPageVerticalMargin.NONE, bottom: EBodyPageVerticalMargin.LARGE}}
57
+ >…</Page.Body>
58
+ ```
59
+
60
+ `top` и `bottom` в объектной форме обязательны: скрытого дефолта у стороны нет, отступ виден
61
+ прямо в месте вызова. Частичный объект (`{top}`) и пустой (`{}`) — ошибка компиляции.
62
+
41
63
  ### Ограничения по типам
42
64
 
43
65
  - `size` доступен только при `type=FIRST` (в `SECOND` контент не оборачивается в Island, поэтому `size?: never`).
66
+ - Частичный объект в `verticalMargin` запрещён типом. Если он всё же придёт из нетипизированного кода,
67
+ сторона без значения не получит класс и даст 0 — дефолт `LARGE` намеренно не подставляется в рантайме,
68
+ иначе вернулся бы скрытый дефолт стороны.
44
69
 
45
70
  ---
46
71
 
@@ -48,7 +73,8 @@ version: "1.0"
48
73
 
49
74
  Собственных CSS-переменных нет. Внешний вид карточки наследуется от `Island` (`EIslandType.TYPE_1`).
50
75
  Вертикальные отступы заданы фиксированными значениями в `styles/BodyPage.module.less`
51
- (24/16px и адаптив 16/8px на `@screen-sm-max`).
76
+ односторонними классами `marginTop{Large,Small,None}` / `marginBottom{Large,Small,None}`
77
+ (24/16/0px и адаптив 16/8/0px на `@screen-sm-max`).
52
78
 
53
79
  ---
54
80
 
@@ -59,9 +85,14 @@ version: "1.0"
59
85
  - `displayName = "BodyPage"` — не менять.
60
86
  - Discriminated union по `type` и значения `EBodyPageType` / `EBodyPageVerticalMargin` — часть
61
87
  публичного API, менять нельзя.
62
- - Экспорты `BodyPage`, `IBodyPageTypeFirstProps`, `IBodyPageTypeSecondProps` идут в barrel
88
+ - Экспорты `BodyPage`, `IBodyPageTypeFirstProps`, `IBodyPageTypeSecondProps`,
89
+ `IBodyPageVerticalMarginSides`, `TBodyPageVerticalMargin` идут в barrel
63
90
  `src/components/Page/index.ts` — сохранять.
64
91
  - `verticalMargin` по умолчанию `LARGE` — менять дефолт нельзя без обсуждения.
92
+ - В объектной форме `top` и `bottom` обязательны — не делать их опциональными: дефолт стороны
93
+ вернул бы скрытое поведение, которого здесь сознательно нет.
94
+ - Скалярная форма `verticalMargin` должна и дальше работать как раньше — это обратная
95
+ совместимость публичного API.
65
96
 
66
97
  ---
67
98
 
@@ -92,7 +123,7 @@ version: "1.0"
92
123
  | `Playground` | `Playground.tsx` | Интерактивный контроль `type` и `verticalMargin` |
93
124
  | `Default` | `Default.tsx` | Минимальный пример (FIRST, контент в карточке) |
94
125
  | `Types` | `Types.tsx` | Сравнение типов FIRST и SECOND |
95
- | `VerticalMargins` | `VerticalMargins.tsx` | Отступы LARGE (24px) и SMALL (16px) |
126
+ | `VerticalMargins` | `VerticalMargins.tsx` | Отступы LARGE (24px), SMALL (16px), NONE (0) и асимметричные комбинации |
96
127
  | `VisualTests` | `VisualTests.tsx` | Матрица type × verticalMargin для скриншот-регрессии |
97
128
 
98
129
  ---
@@ -102,6 +133,7 @@ version: "1.0"
102
133
  | Дата | Изменение |
103
134
  |---|---|
104
135
  | 2026-06-18 | Создан документ. AI-рефакторинг (clsx order, JSDoc), unit-тесты, миграция stories на modern pattern. |
136
+ | 2026-08-26 | TRI-121: добавлено `EBodyPageVerticalMargin.NONE`; `verticalMargin` принимает объект `{top, bottom}` (обе стороны обязательны) для независимых отступов сверху и снизу. LESS переразбит на односторонние классы. |
105
137
 
106
138
  ---
107
139
 
@@ -180,6 +212,42 @@ export const VerticalMargins = () => (
180
212
  </Text>
181
213
  </Page.Body>
182
214
  </div>
215
+ <div>
216
+ <div style={{ marginBottom: "8px", fontSize: "16px", fontWeight: 700 }}>
217
+ NONE (0) — собственных отступов нет
218
+ </div>
219
+ <Page.Body type={EBodyPageType.FIRST} verticalMargin={EBodyPageVerticalMargin.NONE}>
220
+ <Text tag="div" size={ETextSize.B2} type={EFontType.PRIMARY}>
221
+ Без вертикальных отступов сверху и снизу.
222
+ </Text>
223
+ </Page.Body>
224
+ </div>
225
+ <div>
226
+ <div style={{ marginBottom: "8px", fontSize: "16px", fontWeight: 700 }}>
227
+ {"{ top: NONE, bottom: LARGE }"}
228
+ </div>
229
+ <Page.Body
230
+ type={EBodyPageType.FIRST}
231
+ verticalMargin={{ top: EBodyPageVerticalMargin.NONE, bottom: EBodyPageVerticalMargin.LARGE }}
232
+ >
233
+ <Text tag="div" size={ETextSize.B2} type={EFontType.PRIMARY}>
234
+ Отступы задаются раздельно: сверху 0, снизу 24px.
235
+ </Text>
236
+ </Page.Body>
237
+ </div>
238
+ <div>
239
+ <div style={{ marginBottom: "8px", fontSize: "16px", fontWeight: 700 }}>
240
+ {"{ top: SMALL, bottom: NONE }"}
241
+ </div>
242
+ <Page.Body
243
+ type={EBodyPageType.FIRST}
244
+ verticalMargin={{ top: EBodyPageVerticalMargin.SMALL, bottom: EBodyPageVerticalMargin.NONE }}
245
+ >
246
+ <Text tag="div" size={ETextSize.B2} type={EFontType.PRIMARY}>
247
+ Отступы задаются раздельно: сверху 16px, снизу 0.
248
+ </Text>
249
+ </Page.Body>
250
+ </div>
183
251
  </div>
184
252
  );
185
253
  ```
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  component: CollapsibleTreeExtended
3
3
  category: CollapsibleTree
4
- related: [CollapsibleTree, TreeView, AccordionBase]
4
+ related: [CollapsibleTree, TreeView, TreeViewNode, AccordionBase]
5
5
  tokens: []
6
6
  stories: stories/CollapsibleTreeExtended/CollapsibleTreeExtended.stories.tsx
7
7
  version: "1.0"
@@ -161,6 +161,10 @@ FC-обёртка над `TreeView` без собственных props.
161
161
  нестандартный UI узла не нужен — используй её.
162
162
  - `TreeView` (`src/components/TreeView`) — нижний слой: семантика дерева,
163
163
  абстрактное дерево нод, фокус, активная нода, клавиатурная навигация.
164
+ - `TreeViewNode` (`TreeView.Node`) — узел, который оборачивает каждая нода
165
+ `CollapsibleTreeExtended`: `ICollapsibleTreeExtendedNodeProps` наследует
166
+ `Omit<ITreeViewNodeProps, "children">`, поэтому `id`, `opened`, `prevNodeId`,
167
+ `nextNodeId` и остальные props узла работают здесь так же, как у голой ноды.
164
168
  - `AccordionBase` (`src/components/AccordionBase`) — анимация раскрытия и
165
169
  `onToggle` после завершения анимации. Используется внутри каждой ноды.
166
170
 
@@ -187,6 +191,7 @@ FC-обёртка над `TreeView` без собственных props.
187
191
  | 2026-05-15 | Создан документ. Зафиксирован фикс controlled-инварианта (режим вычисляется на каждом рендере) и пополнение stories (`Playground`, `VisualTests`) |
188
192
  | 2026-07-06 | В story-примерах шеврон открытого узла теперь указывает вверх (`rotate(-90deg)`), а не вниз — синхронно с `CollapsibleTree` |
189
193
  | 2026-07-14 | В story-примерах на кнопку заголовка добавлены глобальные классы icons-next: `hoverable` всегда и `active` при `opened` — цвет иконки раскрытия, синхронно с `CollapsibleTreeNodeHeader` |
194
+ | 2026-08-26 | В `related` добавлен `TreeViewNode` — у узла появился собственный AI.md, и он точный адресат наследования `ICollapsibleTreeExtendedNodeProps` |
190
195
 
191
196
  ---
192
197