@sberbusiness/triplex-next-mcp-server 0.24.0-beta1

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 (140) hide show
  1. package/README.md +124 -0
  2. package/bundle/.gitkeep +0 -0
  3. package/bundle/components/AbstractTree.md +198 -0
  4. package/bundle/components/AccordionBase.md +227 -0
  5. package/bundle/components/Alert.md +317 -0
  6. package/bundle/components/Amount.md +225 -0
  7. package/bundle/components/AmountField.md +289 -0
  8. package/bundle/components/Avatar.md +209 -0
  9. package/bundle/components/Badge.md +277 -0
  10. package/bundle/components/Body.md +167 -0
  11. package/bundle/components/Button.md +230 -0
  12. package/bundle/components/ButtonDropdown.md +159 -0
  13. package/bundle/components/ButtonIcon.md +122 -0
  14. package/bundle/components/Calendar.md +445 -0
  15. package/bundle/components/Card.md +374 -0
  16. package/bundle/components/CarouselExtended.md +250 -0
  17. package/bundle/components/Checkbox.md +126 -0
  18. package/bundle/components/CheckboxTree.md +280 -0
  19. package/bundle/components/CheckboxTreeExtended.md +321 -0
  20. package/bundle/components/CheckboxXGroup.md +68 -0
  21. package/bundle/components/CheckboxYGroup.md +67 -0
  22. package/bundle/components/Chip.md +404 -0
  23. package/bundle/components/ChipGroup.md +179 -0
  24. package/bundle/components/Col.md +221 -0
  25. package/bundle/components/CollapsableTree.md +255 -0
  26. package/bundle/components/Confirm.md +343 -0
  27. package/bundle/components/DateField.md +371 -0
  28. package/bundle/components/DatePickerExtended.md +342 -0
  29. package/bundle/components/DateRange.md +275 -0
  30. package/bundle/components/DesignTokens.md +385 -0
  31. package/bundle/components/Divider.md +196 -0
  32. package/bundle/components/DocumentNumberEdit.md +280 -0
  33. package/bundle/components/Dropdown.md +433 -0
  34. package/bundle/components/Ellipsis.md +208 -0
  35. package/bundle/components/EmptyView.md +99 -0
  36. package/bundle/components/ExpandAnimation.md +281 -0
  37. package/bundle/components/Footer.md +339 -0
  38. package/bundle/components/FormField.md +326 -0
  39. package/bundle/components/FormGroup.md +99 -0
  40. package/bundle/components/Gap.md +113 -0
  41. package/bundle/components/Header.md +280 -0
  42. package/bundle/components/HelpBox.md +154 -0
  43. package/bundle/components/IconWrapper.md +145 -0
  44. package/bundle/components/Island.md +197 -0
  45. package/bundle/components/IslandAccordion.md +230 -0
  46. package/bundle/components/IslandWidget.md +233 -0
  47. package/bundle/components/KeyDownListener.md +157 -0
  48. package/bundle/components/LightBox.md +322 -0
  49. package/bundle/components/Link.md +161 -0
  50. package/bundle/components/List.md +247 -0
  51. package/bundle/components/ListMaster.md +204 -0
  52. package/bundle/components/Loader.md +161 -0
  53. package/bundle/components/LoaderScreen.md +134 -0
  54. package/bundle/components/Marker.md +127 -0
  55. package/bundle/components/MarkerStatus.md +148 -0
  56. package/bundle/components/MediaWidth.md +169 -0
  57. package/bundle/components/MobileView.md +120 -0
  58. package/bundle/components/ModalWindow.md +308 -0
  59. package/bundle/components/MonthYearField.md +168 -0
  60. package/bundle/components/MultiselectField.md +213 -0
  61. package/bundle/components/Notification.md +233 -0
  62. package/bundle/components/NumberField.md +178 -0
  63. package/bundle/components/OrderedList.md +169 -0
  64. package/bundle/components/Overlay.md +237 -0
  65. package/bundle/components/Page.md +246 -0
  66. package/bundle/components/Pagination.md +298 -0
  67. package/bundle/components/Portal.md +119 -0
  68. package/bundle/components/Radio.md +174 -0
  69. package/bundle/components/Row.md +125 -0
  70. package/bundle/components/SMSField.md +160 -0
  71. package/bundle/components/SegmentedControl.md +235 -0
  72. package/bundle/components/SelectExtendedField.md +322 -0
  73. package/bundle/components/SelectField.md +213 -0
  74. package/bundle/components/Skeleton.md +129 -0
  75. package/bundle/components/Slider.md +157 -0
  76. package/bundle/components/SliderExtended.md +210 -0
  77. package/bundle/components/SliderRange.md +160 -0
  78. package/bundle/components/SmallInput.md +101 -0
  79. package/bundle/components/Spoiler.md +121 -0
  80. package/bundle/components/StatusTracker.md +151 -0
  81. package/bundle/components/Step.md +121 -0
  82. package/bundle/components/Stepper.md +163 -0
  83. package/bundle/components/Suggest.md +160 -0
  84. package/bundle/components/SuggestField.md +157 -0
  85. package/bundle/components/SwipeableArea.md +144 -0
  86. package/bundle/components/Table.md +199 -0
  87. package/bundle/components/Tabs.md +152 -0
  88. package/bundle/components/TabsExtended.md +273 -0
  89. package/bundle/components/TabsLine.md +189 -0
  90. package/bundle/components/Tag.md +135 -0
  91. package/bundle/components/TagColor.md +121 -0
  92. package/bundle/components/TagGroup.md +100 -0
  93. package/bundle/components/TextField.md +152 -0
  94. package/bundle/components/TextareaField.md +124 -0
  95. package/bundle/components/ThemeProvider.md +181 -0
  96. package/bundle/components/Tooltip.md +254 -0
  97. package/bundle/components/TopOverlay.md +145 -0
  98. package/bundle/components/TreeView.md +224 -0
  99. package/bundle/components/Triggers.md +121 -0
  100. package/bundle/guides/codestyle.md +205 -0
  101. package/bundle/guides/commits.md +166 -0
  102. package/bundle/guides/context.md +277 -0
  103. package/bundle/guides/stories.md +618 -0
  104. package/bundle/guides/template.md +154 -0
  105. package/bundle/guides/tests.md +301 -0
  106. package/bundle/icons.json +4156 -0
  107. package/bundle/manifest.json +796 -0
  108. package/bundle/release-notes/1.1.0.mdx +26 -0
  109. package/bundle/release-notes/1.1.1.mdx +14 -0
  110. package/bundle/release-notes/1.10.0.mdx +43 -0
  111. package/bundle/release-notes/1.11.0.mdx +19 -0
  112. package/bundle/release-notes/1.12.0.mdx +21 -0
  113. package/bundle/release-notes/1.13.0.mdx +43 -0
  114. package/bundle/release-notes/1.14.0.mdx +29 -0
  115. package/bundle/release-notes/1.15.0.mdx +56 -0
  116. package/bundle/release-notes/1.16.0.mdx +55 -0
  117. package/bundle/release-notes/1.17.0.mdx +15 -0
  118. package/bundle/release-notes/1.18.0.mdx +24 -0
  119. package/bundle/release-notes/1.19.0.mdx +48 -0
  120. package/bundle/release-notes/1.19.1.mdx +9 -0
  121. package/bundle/release-notes/1.2.0.mdx +80 -0
  122. package/bundle/release-notes/1.20.0.mdx +48 -0
  123. package/bundle/release-notes/1.21.0.mdx +66 -0
  124. package/bundle/release-notes/1.22.0.mdx +75 -0
  125. package/bundle/release-notes/1.23.0.mdx +50 -0
  126. package/bundle/release-notes/1.24.0.mdx +59 -0
  127. package/bundle/release-notes/1.25.0.mdx +52 -0
  128. package/bundle/release-notes/1.26.0.mdx +11 -0
  129. package/bundle/release-notes/1.3.0.mdx +21 -0
  130. package/bundle/release-notes/1.4.0.mdx +37 -0
  131. package/bundle/release-notes/1.5.0.mdx +24 -0
  132. package/bundle/release-notes/1.6.0.mdx +37 -0
  133. package/bundle/release-notes/1.6.1.mdx +11 -0
  134. package/bundle/release-notes/1.7.0.mdx +29 -0
  135. package/bundle/release-notes/1.8.0.mdx +38 -0
  136. package/bundle/release-notes/1.9.0.mdx +28 -0
  137. package/dist/index.d.ts +2 -0
  138. package/dist/index.js +324 -0
  139. package/dist/index.js.map +1 -0
  140. package/package.json +51 -0
@@ -0,0 +1,343 @@
1
+ ---
2
+ component: Confirm
3
+ category: Overlays
4
+ figma-node: ""
5
+ figma-file: ""
6
+ related: [Island, LightBox, SideOverlay, Button, TriggerClickOnKeyDownEvent, Typography]
7
+ tokens: []
8
+ stories: ""
9
+ version: "1.0"
10
+ ---
11
+
12
+ # Confirm
13
+
14
+ ## Назначение
15
+
16
+ Модальное подтверждение (диалог), встраиваемое **внутрь** уже открытого
17
+ `LightBox` или `SideOverlay`. Не содержит собственного бэкдропа/портала —
18
+ это компонент-контент, который рендерится поверх родительского overlay'а
19
+ и ограничивает свою максимальную ширину так, чтобы визуально помещаться
20
+ в контейнер родителя.
21
+
22
+ Внутри — `Island type=TYPE_1` с `role="dialog" aria-modal="true"`, секция
23
+ `Island.Body` с контентом (Title, SubTitle, Controls) и абсолютно
24
+ позиционированная кнопка закрытия (справа сверху).
25
+
26
+ Используй когда: нужно подтвердить действие (закрыть/удалить/отменить)
27
+ поверх уже открытого `LightBox` или `SideOverlay`.
28
+ Не используй как самостоятельный модал (он не создаёт свой overlay/backdrop)
29
+ — для автономных диалогов бери `ModalWindow` или используй `LightBox`
30
+ c `Confirm` внутри.
31
+
32
+ ---
33
+
34
+ ## Файловая структура
35
+
36
+ ```text
37
+ src/components/Confirm/
38
+ ├── Confirm.tsx # FC-обёртка над Island, compound FC (Close/Content/Controls)
39
+ ├── enums.ts # EConfirmParentComponent
40
+ ├── index.ts # Barrel: Confirm + enums
41
+ ├── components/
42
+ │ ├── ConfirmClose.tsx # FC, условное оборачивание в TriggerClickOnKeyDownEvent (Esc)
43
+ │ ├── ConfirmCloseButton.tsx # forwardRef, Button с иконкой крестика
44
+ │ ├── ConfirmContent.tsx # FC, compound с Title/SubTitle
45
+ │ ├── ConfirmContentTitle.tsx # FC-обёртка Typography Title
46
+ │ └── ConfirmContentSubTitle.tsx # FC-обёртка Typography Text
47
+ └── styles/Confirm.module.less # Max-width по parentComponent, позиционирование кнопки закрытия
48
+ ```
49
+
50
+ Особенности:
51
+ - **Root — FC, не forwardRef.** Ref-форвардинг не реализован (известный
52
+ AI-ready debt, характерен для compound-обёрток). Ref, если нужен
53
+ родителю, идёт через `...htmlDivAttributes` в `Island`.
54
+ - **Compound через прямое присваивание:** `Confirm.Close = ConfirmClose;`
55
+ `Confirm.Content = ConfirmContent;` `Confirm.Controls = ConfirmControls;`
56
+ Тип `IConfirmFC extends React.FC<IConfirmProps>`.
57
+ - **ConfirmContent — тоже compound** (Title/SubTitle) через тот же паттерн.
58
+ - **Нет `__tests__` и нет `stories`** — документируется косвенно через
59
+ потребителей `LightBox`/`SideOverlay`.
60
+ - **Нет собственных дизайн-токенов** — все цвета/радиусы берутся из
61
+ `Island` (type=TYPE_1); ширина — из LESS-переменных родительского
62
+ overlay (`@sideOverlaySMWidth` etc.).
63
+
64
+ ---
65
+
66
+ ## Варианты и props
67
+
68
+ ### Root: `IConfirmProps extends IIslandProps`
69
+
70
+ | Prop | Тип | Default | Описание |
71
+ |---|---|---|---|
72
+ | `parentComponent` | `EConfirmParentComponent` | `LIGHTBOX` | Определяет max-width: в `LightBox` — как у контента LightBox, в `SideOverlay` — как у соответствующей ширины боковой панели. |
73
+ | `children` | `ReactNode` | — | Обычно `Confirm.Close` + `Confirm.Content` + `Confirm.Controls`. |
74
+ | `className` | `string` | — | Добавляется через `clsx` к root-классу `.confirm` и parent-класс map. |
75
+ | `...IIslandProps` | — | — | Все пропсы `Island` (`id`, `onClick`, `data-tx` и др.). |
76
+
77
+ `role="dialog"` и `aria-modal="true"` проставлены жёстко в реализации и
78
+ не могут быть перебиты через `htmlDivAttributes` (spread идёт до них
79
+ — **неверно**: в реализации spread идёт **после** `role` и `aria-modal`,
80
+ значит пропс потребителя **перебьёт** дефолт). Если нужно — не
81
+ перебивать, семантика диалога обязательна.
82
+
83
+ ### `EConfirmParentComponent` (enum string)
84
+
85
+ ```ts
86
+ enum EConfirmParentComponent {
87
+ LIGHTBOX = "lightBox",
88
+ SIDE_OVERLAY_SM = "sideOverlaySM",
89
+ SIDE_OVERLAY_MD = "sideOverlayMD",
90
+ SIDE_OVERLAY_LG = "sideOverlayLG",
91
+ }
92
+ ```
93
+
94
+ Соответствие → LESS-классы:
95
+ - `LIGHTBOX` → `.isInLightBox` → `calc(var(--lightBox-content-max-width) - @page-padding-desktop-x*2)`
96
+ - `SIDE_OVERLAY_SM` → `.isInSideOverlaySM` → `calc(@sideOverlaySMWidth - @page-padding-desktop-x*2)`
97
+ - `SIDE_OVERLAY_MD` → `.isInSideOverlayMD` → `calc(@sideOverlayMDWidth - @page-padding-desktop-x*2)`
98
+ - `SIDE_OVERLAY_LG` → `.isInSideOverlayLG` → `calc(@sideOverlayLGWidth - @page-padding-desktop-x*2)`
99
+
100
+ ### Compound: `Confirm.Close` — `IConfirmCloseProps extends IConfirmCloseButtonProps`
101
+
102
+ | Prop | Тип | Обязателен | Описание |
103
+ |---|---|---|---|
104
+ | `clickByEsc` | `boolean` | Да | Если `true` — оборачивает кнопку в `TriggerClickOnKeyDownEvent` с `ESCAPE`, клик кнопки симулируется при нажатии Esc. |
105
+ | `...IConfirmCloseButtonProps` | — | — | Все пропсы кнопки, кроме `theme/size/icon` (зафиксированы). |
106
+
107
+ **`IConfirmCloseButtonProps extends Omit<TButtonProps, "theme" \| "size" \| "icon">`:**
108
+
109
+ - `theme` зафиксирован в `EButtonTheme.SECONDARY`
110
+ - `size` зафиксирован в `EComponentSize.MD`
111
+ - `icon` зафиксирован в `<CrossStrokeSrvIcon20 paletteIndex={0} />`
112
+ - `title` по умолчанию `"Закрыть"`
113
+ - `className` объединяется с `.confirmCloseButton` (абсолютное позиционирование top/right: 24px; 16px на `< screen-sm-max`).
114
+
115
+ ### Compound: `Confirm.Content` — `IConfirmContentProps extends HTMLAttributes<HTMLDivElement>`
116
+
117
+ Обычный `<div className={clsx(className, styles.confirmContent)}>` с
118
+ `margin-bottom: 24px` (16px на мобильных) и `padding-right: 56px`
119
+ (место под кнопку закрытия).
120
+
121
+ Compound-подкомпоненты:
122
+
123
+ **`Confirm.Content.Title` — `IConfirmContentTitleProps extends TTitleProps<"h1">`:**
124
+ - По умолчанию `size={ETitleSize.H3}`
125
+ - `margin-bottom: 12px` через `.confirmContentTitle`
126
+
127
+ **`Confirm.Content.SubTitle` — `IConfirmContentSubTitleProps extends TTextProps<"div">`:**
128
+ - По умолчанию `size={ETextSize.B2}`
129
+ - Рендерит `<Text tag="div" />`
130
+
131
+ ### Compound: `Confirm.Controls` — `IConfirmControlsProps extends HTMLAttributes<HTMLDivElement>`
132
+
133
+ Обычный `<div className={clsx(className, styles.confirmControls)}>` —
134
+ стилизован `white-space: nowrap` (чтобы кнопки действий не переносились).
135
+ Внутри обычно два `Button` (подтвердить / отменить).
136
+
137
+ ---
138
+
139
+ ## Ключевые особенности реализации
140
+
141
+ ### Confirm — это Island type=TYPE_1
142
+
143
+ ```tsx
144
+ <Island
145
+ type={EIslandType.TYPE_1}
146
+ className={clsx(className, styles.confirm, parentComponentToClassNameMap[parentComponent])}
147
+ role="dialog"
148
+ aria-modal="true"
149
+ {...htmlDivAttributes}
150
+ >
151
+ <Island.Body>{children}</Island.Body>
152
+ </Island>
153
+ ```
154
+
155
+ **Почему Island, а не чистый div:** Island даёт фирменные радиусы,
156
+ тени и padding. TYPE_1 — "приподнятая" поверхность. Если захочется
157
+ другого типа — это смена визуала Confirm, breaking-change.
158
+
159
+ **`<Island.Body>` обязателен** — Island ожидает compound-структуру для
160
+ padding'а контента. Без Body контент приклеится к границам.
161
+
162
+ ### `parentComponent` → max-width map
163
+
164
+ ```ts
165
+ const parentComponentToClassNameMap = {
166
+ [EConfirmParentComponent.LIGHTBOX]: styles.isInLightBox,
167
+ [EConfirmParentComponent.SIDE_OVERLAY_SM]: styles.isInSideOverlaySM,
168
+ [EConfirmParentComponent.SIDE_OVERLAY_MD]: styles.isInSideOverlayMD,
169
+ [EConfirmParentComponent.SIDE_OVERLAY_LG]: styles.isInSideOverlayLG,
170
+ };
171
+ ```
172
+
173
+ Зачем: Confirm рендерится внутри родительского overlay'а и должен
174
+ визуально поместиться в его внутренний контент. `parentComponent`
175
+ сообщает компоненту, какой контейнер его содержит, чтобы он сам
176
+ подсчитал max-width. Если не проставить — дефолт `LIGHTBOX`.
177
+
178
+ **Если добавить новый parent (например, SIDE_OVERLAY_XL):** нужно
179
+ обновить и enum, и map, и добавить `.isInSideOverlayXL` в LESS.
180
+
181
+ ### `clickByEsc` → обёртка в `TriggerClickOnKeyDownEvent`
182
+
183
+ ```tsx
184
+ if (clickByEsc) {
185
+ return (
186
+ <TriggerClickOnKeyDownEvent targetRef={ref} eventKeyCode={EVENT_KEY_CODES.ESCAPE}>
187
+ <ConfirmCloseButton {...buttonProps} ref={ref} />
188
+ </TriggerClickOnKeyDownEvent>
189
+ );
190
+ }
191
+ return <ConfirmCloseButton {...buttonProps} />;
192
+ ```
193
+
194
+ **Важно:** `TriggerClickOnKeyDownEvent` слушает Esc на `document` и
195
+ программно кликает элемент по `ref`. Не вешает hard-bound listener
196
+ на кнопку. Если в родителе уже есть обработчик Escape (LightBox
197
+ обычно закрывается по Esc), появятся **конфликты** — Confirm должен
198
+ останавливать пропагацию или родитель должен учитывать модальную
199
+ вложенность. Это зона ответственности потребителя, не Confirm.
200
+
201
+ ### Кнопка закрытия — absolute позиция
202
+
203
+ ```less
204
+ .confirmCloseButton {
205
+ position: absolute;
206
+ top: 24px;
207
+ right: 24px;
208
+ }
209
+ @media (max-width: @screen-sm-max) {
210
+ .confirmCloseButton {
211
+ top: 16px;
212
+ right: 16px;
213
+ }
214
+ }
215
+ ```
216
+
217
+ **Абсолютное позиционирование** требует `position: relative` или
218
+ `position: absolute` на ближайшем предке. Island type=TYPE_1
219
+ создаёт этот контекст. Если оборачивать Confirm в произвольный
220
+ контейнер без position — кнопка "улетит" к ближайшему.
221
+
222
+ ### `padding-right: 56px` у Content
223
+
224
+ `.confirmContent { padding-right: 56px; }` — место под кнопку закрытия,
225
+ чтобы текст Title не перекрывался с крестиком. Значение: ширина кнопки
226
+ (40px для MD) + gap (16px).
227
+
228
+ ### Zero tokens — всё из родителей
229
+
230
+ В `Confirm.module.less` **нет** CSS-переменных вида
231
+ `--triplex-next-Confirm-*`. Используются:
232
+ - `--lightBox-content-max-width` (токен LightBox)
233
+ - `@lightBox-content-max-width-fallback` (LESS-fallback)
234
+ - `@sideOverlaySMWidth`, `@sideOverlayMDWidth`, `@sideOverlayLGWidth`
235
+ - `@page-padding-desktop-x`, `@screen-sm-max`
236
+
237
+ **Это осознанное решение**: Confirm — слой-"контент", не независимый
238
+ визуальный блок. Вся пластика — от Island. Размеры — от контейнера.
239
+
240
+ ### `IConfirmFC` — кастомный тип интерфейса
241
+
242
+ ```ts
243
+ export interface IConfirmFC extends React.FC<IConfirmProps> {
244
+ Close: typeof ConfirmClose;
245
+ Content: typeof ConfirmContent;
246
+ Controls: typeof ConfirmControls;
247
+ }
248
+ ```
249
+
250
+ Аналог Badge / AlertProcess / Chip. TS видит `Confirm.Close` типизированно,
251
+ без `as any`.
252
+
253
+ ---
254
+
255
+ ## Инварианты
256
+
257
+ - **`role="dialog" aria-modal="true"`** — обязательны. Не переопределять
258
+ через пропсы (spread-order перебьёт, но не надо).
259
+ - **`Island.Body` обёртка** внутри Confirm — обязательна. Не превращать
260
+ `children` в прямых детей Island.
261
+ - **`parentComponentToClassNameMap` и enum синхронны** — при добавлении
262
+ нового значения enum обновлять и map, и LESS. Дефолт — `LIGHTBOX`.
263
+ - **`Confirm.Close` с `clickByEsc` должен стоять внутри одного Confirm**
264
+ — не выносить. `TriggerClickOnKeyDownEvent` работает через document,
265
+ Esc сработает где угодно.
266
+ - **Кнопка закрытия — absolute относительно Island** — требует
267
+ `position: relative` на `.confirm`/Island. Island задаёт это сам.
268
+ - **`padding-right: 56px` в `.confirmContent`** — резерв под кнопку.
269
+ Если убрать кнопку — уменьшить padding.
270
+ - **Нет собственных CSS-токенов** — не добавлять. Все стили делегируются
271
+ Island и родительскому overlay.
272
+ - **Нет forwardRef на root** — известный debt. Не добавлять точечно.
273
+
274
+ ---
275
+
276
+ ## Accessibility
277
+
278
+ - **`role="dialog" aria-modal="true"`** — семантика модального диалога.
279
+ Screen reader объявит как модал и ограничит чтение его содержимым.
280
+ - **Focus management** — **не реализован самим Confirm**. Ожидается,
281
+ что родительский overlay (LightBox/SideOverlay) уже управляет focus
282
+ trap'ом, и внутри Confirm фокус сам попадает на первый интерактивный
283
+ элемент (обычно кнопку закрытия или первый контрол).
284
+ - **Esc handling** — через `clickByEsc` и `TriggerClickOnKeyDownEvent`.
285
+ Важно: Esc-listener вешается на document, не на Confirm. Если
286
+ родитель уже закрывается по Esc — возможен двойной trigger.
287
+ - **Label'ы** — Confirm сам `aria-label`/`aria-labelledby` не
288
+ проставляет. Если нужно явное имя для screen reader'а — передать
289
+ `aria-labelledby` через пропсы с id `Confirm.Content.Title` или
290
+ `aria-label` текстом.
291
+ - **Кнопка закрытия** имеет `title="Закрыть"` по умолчанию (becomes
292
+ tooltip + `aria-label` fallback для `<Button>` — зависит от
293
+ реализации Button).
294
+
295
+ ---
296
+
297
+ ## Дизайн-токены
298
+
299
+ **Нет собственных.** Визуальные токены наследуются от `Island`
300
+ (type=TYPE_1): радиус, фон, тени, внутренние отступы. Layout-переменные
301
+ — LESS (`@sideOverlay*Width`, `@page-padding-desktop-x`, `@screen-sm-max`).
302
+
303
+ Если нужно кастомизировать Confirm в проекте — переопределять токены
304
+ Island или оборачивать в собственный CSS.
305
+
306
+ ---
307
+
308
+ ## Связанные компоненты
309
+
310
+ - `Island` (`src/components/Island`) — визуальная основа. Confirm =
311
+ `Island type=TYPE_1` + позиционирование + label-подкомпоненты.
312
+ - `LightBox` (`src/components/LightBox`) — основной контейнер, в котором
313
+ Confirm открывается поверх контента.
314
+ - `SideOverlay*` (`src/components/SideOverlay`) — вторичные контейнеры
315
+ (SM/MD/LG). Размеры задают ширину Confirm через `parentComponent`.
316
+ - `Button` (`src/components/Button`) — кнопка закрытия (SECONDARY, MD,
317
+ CrossStrokeSrvIcon20) и кнопки действий в `Confirm.Controls`.
318
+ - `TriggerClickOnKeyDownEvent` (`src/components/Triggers`) — механизм
319
+ Esc → click (`Confirm.Close` при `clickByEsc`).
320
+ - `Typography.Title` / `Typography.Text` — базы для
321
+ `Confirm.Content.Title` / `Confirm.Content.SubTitle`.
322
+ - `ModalWindow` — автономный диалог (с бэкдропом). Не замена Confirm:
323
+ разная семантика слоя.
324
+
325
+ ---
326
+
327
+ ## Stories
328
+
329
+ **Нет собственных stories.** Документируется косвенно через сценарии
330
+ `LightBox`/`SideOverlay`, где Confirm появляется как подтверждение
331
+ закрытия.
332
+
333
+ Добавлять stories при миграции на AI-ready pattern — stories должны
334
+ эмулировать контекст (мок родительского overlay или использование
335
+ реального `LightBox`/`SideOverlay` с открытым Confirm внутри).
336
+
337
+ ---
338
+
339
+ ## История изменений
340
+
341
+ | Дата | Изменение |
342
+ |---|---|
343
+ | 2026-04-18 | Создан документ |