@sberbusiness/triplex-next-mcp-server 1.50.0-beta → 1.53.1

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 (74) hide show
  1. package/README.md +1 -0
  2. package/bundle/components/AlertProcess.md +6 -3
  3. package/bundle/components/AlertProcessSpoiler.md +216 -0
  4. package/bundle/components/Badge.md +4 -3
  5. package/bundle/components/ButtonDropdown.md +5 -3
  6. package/bundle/components/Carousel.md +671 -0
  7. package/bundle/components/CarouselExtended.md +7 -5
  8. package/bundle/components/CarouselIndicators.md +666 -0
  9. package/bundle/components/CarouselItem.md +579 -0
  10. package/bundle/components/CarouselNextButton.md +633 -0
  11. package/bundle/components/CarouselPrevButton.md +633 -0
  12. package/bundle/components/CarouselViewport.md +631 -0
  13. package/bundle/components/CheckboxTreeExtended.md +21 -7
  14. package/bundle/components/CheckboxTreeExtendedCheckbox.md +591 -0
  15. package/bundle/components/CheckboxTreeExtendedNode.md +577 -0
  16. package/bundle/components/Chip.md +1 -0
  17. package/bundle/components/ChipDatePicker.md +332 -0
  18. package/bundle/components/ChipDatePickerTarget.md +316 -0
  19. package/bundle/components/ChipMonthYearPicker.md +4 -3
  20. package/bundle/components/ChipMonthYearPickerTarget.md +318 -0
  21. package/bundle/components/ChipMultiselect.md +63 -73
  22. package/bundle/components/ChipSelect.md +385 -0
  23. package/bundle/components/ChipSelectTarget.md +388 -0
  24. package/bundle/components/ChipSuggest.md +10 -16
  25. package/bundle/components/ChipSuggestTarget.md +506 -0
  26. package/bundle/components/CollapsibleTree.md +2 -1
  27. package/bundle/components/CollapsibleTreeExtended.md +2 -1
  28. package/bundle/components/DateField.md +4 -2
  29. package/bundle/components/DatePickerExtended.md +16 -14
  30. package/bundle/components/DateRange.md +17 -10
  31. package/bundle/components/Dropdown.md +36 -63
  32. package/bundle/components/EmptyView.md +9 -4
  33. package/bundle/components/ExpandAnimation.md +9 -5
  34. package/bundle/components/FormField.md +1 -1
  35. package/bundle/components/ImageGallery.md +19 -52
  36. package/bundle/components/ImageGalleryExtended.md +123 -139
  37. package/bundle/components/ListItemControlsButtonDropdown.md +3 -2
  38. package/bundle/components/LoaderSmall.md +5 -4
  39. package/bundle/components/MonthYearRange.md +334 -0
  40. package/bundle/components/MultiselectField.md +81 -143
  41. package/bundle/components/Notification.md +2 -1
  42. package/bundle/components/NotificationGrouped.md +174 -0
  43. package/bundle/components/NumberField.md +259 -116
  44. package/bundle/components/OrderedList.md +149 -112
  45. package/bundle/components/Overlay.md +3 -2
  46. package/bundle/components/PageIndicators.md +306 -0
  47. package/bundle/components/Pagination.md +81 -3
  48. package/bundle/components/PaginationExtended.md +160 -0
  49. package/bundle/components/Portal.md +5 -2
  50. package/bundle/components/Puller.md +375 -0
  51. package/bundle/components/SMSField.md +277 -102
  52. package/bundle/components/SelectExtendedField.md +11 -7
  53. package/bundle/components/SelectField.md +7 -4
  54. package/bundle/components/SmartSpot.md +259 -0
  55. package/bundle/components/Step.md +2 -1
  56. package/bundle/components/Stepper.md +7 -7
  57. package/bundle/components/Suggest.md +7 -6
  58. package/bundle/components/SuggestField.md +8 -6
  59. package/bundle/components/TableBasic.md +12 -14
  60. package/bundle/components/Tooltip.md +9 -8
  61. package/bundle/guides/commits.md +4 -1
  62. package/bundle/guides/context.md +5 -5
  63. package/bundle/guides/stories.md +29 -21
  64. package/bundle/manifest.json +145 -13
  65. package/bundle/release-notes/1.50.0.mdx +4 -0
  66. package/bundle/release-notes/1.51.0.mdx +57 -0
  67. package/bundle/release-notes/1.52.0.mdx +55 -0
  68. package/bundle/release-notes/1.53.0.mdx +60 -0
  69. package/bundle/release-notes/1.54.0.mdx +45 -0
  70. package/bundle/release-notes/1.55.0.mdx +7 -0
  71. package/bundle/tokens.json +377 -222
  72. package/dist/index.js +39 -1
  73. package/dist/index.js.map +1 -1
  74. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  component: ChipMonthYearPicker
3
3
  category: Chips
4
- related: [Chip, ChipDatePicker, MonthYearField, DatePickerExtended]
4
+ related: [ChipMonthYearPickerTarget, Chip, ChipDatePicker, MonthYearField, DatePickerExtended]
5
5
  tokens: []
6
6
  stories: stories/Chips/ChipMonthYearPicker.stories.tsx
7
7
  version: "1.0"
@@ -169,8 +169,8 @@ selected = getPickerValues(value, format, limitRange).calendarDate !== null
169
169
  `IMonthYearFieldProps` и утилит `MonthYearPickerUtils`
170
170
  - `DatePickerExtended` — база: владеет состоянием открытости, дропдауном, календарём
171
171
  и корневым `<div>`; получает `renderTarget` и `renderDropdownHeaderTarget`
172
- - `ChipMonthYearPickerTarget` — чипс-таргет этого компонента (экспортируется, но
173
- собственного AI.md не имеет): читает открытость из `DatePickerExtendedContext`,
172
+ - `ChipMonthYearPickerTarget` — публичный чипс-таргет этого компонента; см.
173
+ [ChipMonthYearPickerTarget-ai.md](./ChipMonthYearPickerTarget-ai.md). Читает открытость из `DatePickerExtendedContext`,
174
174
  переключает её по клику и Enter/Space, рендерит `ChipClearButton` либо
175
175
  `ChipDropdownArrow` в `postfix`
176
176
 
@@ -198,6 +198,7 @@ selected = getPickerValues(value, format, limitRange).calendarDate !== null
198
198
  |---|---|
199
199
  | 2026-09-07 | Создан компонент и документ (AI-Ready Phase 1) |
200
200
  | 2026-09-29 | Аудит симметрии `related` (TRI-156): из `related` убраны несимметричные имена (`ChipGroup`). Пояснения к убранным именам сохранены прозой в «Связанные компоненты»; публичный API и поведение не затронуты. |
201
+ | 2026-10-21 | Добавлена связь с самостоятельной AI-документацией `ChipMonthYearPickerTarget`. |
201
202
 
202
203
  ---
203
204
 
@@ -0,0 +1,318 @@
1
+ ---
2
+ component: ChipMonthYearPickerTarget
3
+ category: Chips
4
+ related: [ChipMonthYearPicker, Chip, DatePickerExtended]
5
+ tokens: []
6
+ stories: stories/Chips/ChipMonthYearPicker.stories.tsx
7
+ version: "1.0"
8
+ ---
9
+
10
+ # ChipMonthYearPickerTarget
11
+
12
+ ## Назначение
13
+
14
+ Публичный чипс-таргет выбора месяца: показывает переданный контент, переключает
15
+ открытость календаря через `DatePickerExtendedContext` и заменяет стрелку кнопкой
16
+ очистки при `selected`.
17
+
18
+ Используй когда: нужен собственный target в `renderTarget` компонента
19
+ `DatePickerExtended`, например с иконкой, уведомлением или обработчиками самого
20
+ чипса. Для готового управляемого выбора месяца используй `ChipMonthYearPicker`.
21
+ Не используй когда: нужен самостоятельный календарь или форматирование значения —
22
+ таргет не хранит дату, не парсит её и не выбирает режим календаря.
23
+
24
+ Публичные named imports: `ChipMonthYearPickerTarget` и
25
+ `IChipMonthYearPickerTargetProps` из `@sberbusiness/triplex-next`.
26
+
27
+ Минимальная управляемая композиция:
28
+
29
+ ```tsx
30
+ const [pickedDate, setPickedDate] = useState<moment.Moment | null>(null);
31
+ const label = pickedDate ? pickedDate.format("MMM YYYY") : "Выберите месяц";
32
+
33
+ <DatePickerExtended
34
+ pickType={ECalendarPickType.MONTH_YEAR}
35
+ pickedDate={pickedDate}
36
+ onDateChange={setPickedDate}
37
+ renderTarget={() => (
38
+ <ChipMonthYearPickerTarget
39
+ selected={pickedDate !== null}
40
+ onClear={() => setPickedDate(null)}
41
+ clearButtonProps={{ "aria-label": "Очистить месяц" }}
42
+ >
43
+ {label}
44
+ </ChipMonthYearPickerTarget>
45
+ )}
46
+ renderDropdownHeaderTarget={() => label}
47
+ />;
48
+ ```
49
+
50
+ ---
51
+
52
+ ## Варианты и props
53
+
54
+ Наследует `IChipProps`. Собственные props — обязательный `onClear` и опциональный
55
+ `clearButtonProps`. Дату, отображаемый текст и `selected` синхронизирует потребитель;
56
+ сам `selected` не вычисляется из контекста.
57
+
58
+ ### Обязательные props
59
+
60
+ | Prop | Тип | Описание |
61
+ |---|---|---|
62
+ | `onClear` | `() => void` | Вызывается без аргументов при активации кнопки очистки. Потребитель сам сбрасывает дату, текст и `selected` |
63
+
64
+ ### Опциональные props
65
+
66
+ | Prop | По умолчанию | Описание |
67
+ |---|---|---|
68
+ | `children` | — | Содержимое чипса: название фильтра либо уже отформатированный месяц |
69
+ | `selected` | `false` | Выбранный стиль и кнопка очистки вместо стрелки; не меняет `children` |
70
+ | `disabled` | `false` | Блокирует переключение календаря и нативную кнопку очистки |
71
+ | `clearButtonProps` | — | Атрибуты `ChipClearButton`, включая доступное имя, `title`, `shape`, `active`. `size`, `disabled`, `onClick`, `onKeyDown` исключены из типа и задаются таргетом после spread |
72
+ | `size` | `EComponentSize.MD` | Размер чипса и его правой иконки: SM / MD / LG |
73
+ | `type` | `EChipType.TYPE_1` | Визуальный тип из `Chip`: TYPE_1 / TYPE_2 |
74
+ | `prefix`, `showNotificationIcon` | — / `false` | Левый слот и индикатор уведомления из `Chip` |
75
+ | `postfix` | Стрелка либо очистка | Явное значение заменяет внутренний правый слот, в том числе кнопку очистки |
76
+ | `onClick` | — | Получает событие после переключения открытости. При `disabled` не вызывается |
77
+ | `onKeyDown` | — | Получает все всплывшие до таргета клавиши после внутренней обработки, включая события на `disabled`-таргете |
78
+ | `className`, HTML-/`data-*`-/`aria-*`-атрибуты | — | Передаются в корневой `span` через `Chip`; `className` мержится с базовыми классами |
79
+
80
+ ### Контекст и приоритет props
81
+
82
+ `DatePickerExtended` предоставляет `dropdownOpen` и `setDropdownOpen`.
83
+ Клик и Enter/Space вызывают `setDropdownOpen(!dropdownOpen)`, если таргет не
84
+ `disabled`. `mouseUsedRef` таргет не меняет: различие мыши и клавиатуры определяет
85
+ контейнер `DatePickerExtended`.
86
+
87
+ Вне provider используется значение контекста по умолчанию: `dropdownOpen=false`,
88
+ setter ничего не делает. Самостоятельный target поэтому не открывает календарь.
89
+ Возвращай таргет из `renderTarget`, как в примере выше; создавать свой
90
+ `Context.Provider` для обычной композиции не требуется.
91
+
92
+ `aria-expanded` по умолчанию отражает контекст. Внешние `aria-expanded` и `postfix`
93
+ идут в `restProps` после внутренних значений и имеют приоритет. При их подмене
94
+ потребитель отвечает за соответствие атрибута реальной открытости и доступность
95
+ очистки. `onClick`/`onKeyDown` деструктурируются отдельно и внутренние обработчики
96
+ не заменяют.
97
+
98
+ ---
99
+
100
+ ## Дизайн-токены
101
+
102
+ Собственного LESS-модуля и собственных токенов нет, поэтому `tokens: []`.
103
+ Внешний вид наследуется от `Chip`: фон, цвет, selected/disabled и тень фокуса —
104
+ группа `Chip`. `ChipClearButton` также использует `Chip.Shadow_Focus`;
105
+ `ChipDropdownArrow` задаёт только поворот, а цвета иконок определяет `paletteIndex`.
106
+
107
+ Полный список токенов — [Chip-ai.md](./Chip-ai.md#дизайн-токены).
108
+ Переопределение через `ThemeProvider` описано в
109
+ [ThemeProvider-ai.md](../ThemeProvider/ThemeProvider-ai.md#как-переопределять-токены).
110
+
111
+ ---
112
+
113
+ ## Инварианты
114
+
115
+ - Сохранять `forwardRef<HTMLSpanElement>`: ref указывает на корневой `span` из
116
+ `Chip`, а не на контейнер `DatePickerExtended` и не на кнопку очистки.
117
+ - Сохранять публичные named exports компонента и интерфейса в barrel семейства
118
+ `Chip`, имена props и их типы.
119
+ - Таргет не владеет выбранной датой и не меняет `selected` или `children` после
120
+ `onClear`; это ответственность потребителя.
121
+ - Открытость берётся из `DatePickerExtendedContext`, выбранность — из props.
122
+ Не объединять эти независимые состояния.
123
+ - Клик на очистке останавливает всплытие и вызывает только `onClear()` без события;
124
+ Enter/Space на ней не должны переключать календарь.
125
+ - Служебные props кнопки очистки задаются после `clearButtonProps`: её размер,
126
+ disabled и обработчики не переопределяются этой настройкой.
127
+ - Приоритет внешних `postfix` и `aria-expanded` сохранять.
128
+
129
+ ---
130
+
131
+ ## Accessibility
132
+
133
+ - Корень — `span` с `role="button"`, `tabIndex=0` либо `-1` при `disabled` по
134
+ умолчанию. Это не нативная кнопка: атрибут `disabled` на `span` не ставится.
135
+ Остальные HTML-/ARIA-атрибуты наследуются от `Chip` и могут быть переопределены
136
+ потребителем. `aria-haspopup` автоматически не добавляется.
137
+ - Доступное имя таргета задаётся содержимым либо внешним `aria-label`.
138
+ Иконке очистки обязательно передать доступное имя через
139
+ `clearButtonProps={{ "aria-label": "Очистить месяц" }}`.
140
+ - Enter/Space на активном таргете переключают открытость с `preventDefault()`.
141
+ Другие клавиши только передаются в `onKeyDown`. При `disabled` переключения нет,
142
+ но пользовательский `onKeyDown` всё равно вызывается; базовый `Chip` дополнительно
143
+ предотвращает стандартное действие Space даже в disabled-состоянии.
144
+ - Enter/Space на кнопке очистки останавливают всплытие `keydown`; нативная активация
145
+ кнопки создаёт клик, который также не всплывает. У `disabled`-таргета эта кнопка
146
+ получает нативный `disabled`.
147
+ - Escape, ловушка фокуса календаря и возврат фокуса принадлежат `DatePickerExtended`,
148
+ сам таргет ими не управляет.
149
+
150
+ ---
151
+
152
+ ## Связанные компоненты
153
+
154
+ - `ChipMonthYearPicker` — готовый родитель: вычисляет `selected`, форматирует месяц
155
+ и превращает `onClear()` в `onChange("")`; см.
156
+ [ChipMonthYearPicker-ai.md](./ChipMonthYearPicker-ai.md).
157
+ - `Chip` — база props и разметки, размеров, типов, слотов, индикатора и состояний;
158
+ см. [Chip-ai.md](./Chip-ai.md).
159
+ - `DatePickerExtended` — provider открытости, календарь и управление фокусом;
160
+ для month/year-композиции ему задают `pickType=ECalendarPickType.MONTH_YEAR`;
161
+ см. [DatePickerExtended-ai.md](../DatePickerExtended/DatePickerExtended-ai.md).
162
+ - `ChipClearButton` и `ChipDropdownArrow` — внутреннее наполнение правого слота:
163
+ очистка при `selected`, иначе стрелка с поворотом по открытости контекста.
164
+
165
+ ---
166
+
167
+ ## Stories
168
+
169
+ Основные истории: `stories/Chips/ChipMonthYearPicker.stories.tsx`
170
+ Файлы примеров: `stories/Chips/examples/ChipMonthYearPicker/`
171
+
172
+ Используются существующие истории родителя: `ChipMonthYearPicker` рендерит этот таргет.
173
+ Отдельный stories-файл атому не требуется. Пример ручной композиции через
174
+ `renderTarget` приведён выше в этом документе.
175
+
176
+ | Story | Example file | Что демонстрирует |
177
+ |---|---|---|
178
+ | `Playground` | `PlaygroundExample.tsx` | Таргет с контролами `type`, `size`, `disabled`; выбор месяца включает `selected` и кнопку очистки |
179
+ | `Default` | `DefaultExample.tsx` | Управляемое значение и `aria-label` кнопки очистки через `clearButtonProps` |
180
+ | `Types` | `TypesExample.tsx` | TYPE_1 / TYPE_2 таргет без выбора, со стрелкой |
181
+ | `Sizes` | `SizesExample.tsx` | SM / MD / LG таргет без выбора, со стрелкой |
182
+ | `VisualTests` | `VisualTestsExample.tsx` | Выбранный таргет трёх размеров с кнопкой очистки; play раскрывает календарь последнего |
183
+
184
+ Состояния `disabled`, hover, focus и prefix/postfix-слоты отрисовывает `Chip`;
185
+ они покрыты stories `stories/Chips/Chip.stories.tsx`.
186
+
187
+ Контракт таргета покрывает `src/components/Chip/__tests__/ChipMonthYearPickerTarget.test.tsx`;
188
+ календарный выбор и связь с датой — существующие тесты `ChipMonthYearPicker` и
189
+ `DatePickerExtended`.
190
+
191
+ ---
192
+
193
+ ## История изменений
194
+
195
+ | Дата | Изменение |
196
+ |---|---|
197
+ | 2026-10-21 | Создан документ; подтверждены публичный API, контекст, приоритет props и клавиатурный контракт. Добавлены тесты таргета без изменения production-кода. |
198
+
199
+ ---
200
+
201
+ ## Примеры использования
202
+
203
+ ### Default
204
+
205
+ `stories/Chips/examples/ChipMonthYearPicker/DefaultExample.tsx`
206
+
207
+ ```tsx
208
+ import React, { useState } from "react";
209
+ import { ChipMonthYearPicker, EComponentSize, EDropdownAlignment } from "@sberbusiness/triplex-next";
210
+
211
+ export const DefaultExample = () => {
212
+ const [value, setValue] = useState("");
213
+ return (
214
+ <ChipMonthYearPicker
215
+ value={value}
216
+ label="MonthYear label"
217
+ placeholder="Select to proceed"
218
+ onChange={setValue}
219
+ alignment={EDropdownAlignment.LEFT}
220
+ size={EComponentSize.MD}
221
+ clearButtonProps={{ "aria-label": "Очистить" }}
222
+ />
223
+ );
224
+ };
225
+ ```
226
+
227
+ ### Types
228
+
229
+ `stories/Chips/examples/ChipMonthYearPicker/TypesExample.tsx`
230
+
231
+ ```tsx
232
+ import React, { useState } from "react";
233
+ import { ChipMonthYearPicker, EChipType, EDropdownAlignment } from "@sberbusiness/triplex-next";
234
+
235
+ type TypeItemProps = {
236
+ type: EChipType;
237
+ label: string;
238
+ };
239
+
240
+ const TypeItem = ({ type, label }: TypeItemProps) => {
241
+ const [value, setValue] = useState("");
242
+
243
+ return (
244
+ <div>
245
+ <div style={{ marginBottom: 8, fontSize: 16, fontWeight: 700 }}>{label}</div>
246
+ <ChipMonthYearPicker
247
+ value={value}
248
+ label="MonthYear label"
249
+ placeholder="Select to proceed"
250
+ clearButtonProps={{ "aria-label": "Очистить" }}
251
+ type={type}
252
+ alignment={EDropdownAlignment.LEFT}
253
+ onChange={setValue}
254
+ />
255
+ </div>
256
+ );
257
+ };
258
+
259
+ const typeOptions = Object.values(EChipType).map((type) => ({
260
+ value: type,
261
+ label: type.toUpperCase(),
262
+ }));
263
+
264
+ export const TypesExample = () => (
265
+ <div style={{ display: "flex", flexDirection: "column", gap: 12 }}>
266
+ {typeOptions.map(({ value, label }) => (
267
+ <TypeItem key={value} type={value} label={label} />
268
+ ))}
269
+ </div>
270
+ );
271
+ ```
272
+
273
+ ### Sizes
274
+
275
+ `stories/Chips/examples/ChipMonthYearPicker/SizesExample.tsx`
276
+
277
+ ```tsx
278
+ import React, { useState } from "react";
279
+ import { ChipMonthYearPicker, EComponentSize, EDropdownAlignment } from "@sberbusiness/triplex-next";
280
+
281
+ type SizeItemProps = {
282
+ size: EComponentSize;
283
+ label: string;
284
+ };
285
+
286
+ const SizeItem = ({ size, label }: SizeItemProps) => {
287
+ const [value, setValue] = useState("");
288
+
289
+ return (
290
+ <div>
291
+ <div style={{ marginBottom: 8, fontSize: 16, fontWeight: 700 }}>{label}</div>
292
+ <ChipMonthYearPicker
293
+ size={size}
294
+ alignment={EDropdownAlignment.LEFT}
295
+ value={value}
296
+ label="MonthYear label"
297
+ placeholder="Select to proceed"
298
+ clearButtonProps={{ "aria-label": "Очистить" }}
299
+ onChange={setValue}
300
+ />
301
+ </div>
302
+ );
303
+ };
304
+
305
+ const sizeOptions = Object.values(EComponentSize).map((size) => ({
306
+ value: size,
307
+ label: size.toUpperCase(),
308
+ }));
309
+
310
+ export const SizesExample = () => (
311
+ <div style={{ display: "flex", flexDirection: "column", gap: 12 }}>
312
+ {sizeOptions.map(({ value, label }) => (
313
+ <SizeItem key={value} size={value} label={label} />
314
+ ))}
315
+ </div>
316
+ );
317
+ ```
318
+
@@ -218,11 +218,11 @@ Postfix переключается тем же флагом `selected`: `ChipDro
218
218
  import React, { useMemo, useState } from "react";
219
219
  import {
220
220
  MultiselectField,
221
- DropdownMobileHeader,
222
- DropdownMobileInput,
223
- DropdownMobileClose,
224
- DropdownMobileBody,
225
- DropdownMobileFooter,
221
+ PullerHeader,
222
+ PullerInput,
223
+ PullerClose,
224
+ PullerBody,
225
+ PullerFooter,
226
226
  EDropdownAlignment,
227
227
  Button,
228
228
  EButtonTheme,
@@ -329,21 +329,19 @@ export const DefaultExample = () => {
329
329
  ref={dropdownRef}
330
330
  alignment={EDropdownAlignment.LEFT}
331
331
  focusTrapProps={{ focusTrapOptions: { initialFocus: false } }}
332
- mobileViewProps={{
332
+ pullerProps={{
333
333
  children: (
334
334
  <>
335
- <DropdownMobileHeader
336
- controlButtons={<DropdownMobileClose onClick={() => setOpened(false)} />}
337
- >
338
- <DropdownMobileInput
335
+ <PullerHeader controlButtons={<PullerClose onClick={() => setOpened(false)} />}>
336
+ <PullerInput
339
337
  autoFocus={true}
340
338
  placeholder="Type to proceed"
341
339
  value={filter}
342
340
  onChange={handleFilterChange}
343
341
  />
344
- </DropdownMobileHeader>
345
- <DropdownMobileBody>{renderDropdownContent()}</DropdownMobileBody>
346
- <DropdownMobileFooter>
342
+ </PullerHeader>
343
+ <PullerBody>{renderDropdownContent()}</PullerBody>
344
+ <PullerFooter>
347
345
  <Button
348
346
  theme={EButtonTheme.GENERAL}
349
347
  size={EComponentSize.SM}
@@ -358,7 +356,7 @@ export const DefaultExample = () => {
358
356
  >
359
357
  Button link text
360
358
  </Button>
361
- </DropdownMobileFooter>
359
+ </PullerFooter>
362
360
  </>
363
361
  ),
364
362
  }}
@@ -402,11 +400,11 @@ import clsx from "clsx";
402
400
  import {
403
401
  MultiselectField,
404
402
  EComponentSize,
405
- DropdownMobileHeader,
406
- DropdownMobileInput,
407
- DropdownMobileClose,
408
- DropdownMobileBody,
409
- DropdownMobileFooter,
403
+ PullerHeader,
404
+ PullerInput,
405
+ PullerClose,
406
+ PullerBody,
407
+ PullerFooter,
410
408
  EDropdownAlignment,
411
409
  Button,
412
410
  EButtonTheme,
@@ -517,21 +515,19 @@ const TypeItem = ({ type, label }: TypeItemProps) => {
517
515
  ref={dropdownRef}
518
516
  alignment={EDropdownAlignment.LEFT}
519
517
  focusTrapProps={{ focusTrapOptions: { initialFocus: false } }}
520
- mobileViewProps={{
518
+ pullerProps={{
521
519
  children: (
522
520
  <>
523
- <DropdownMobileHeader
524
- controlButtons={<DropdownMobileClose onClick={() => setOpened(false)} />}
525
- >
526
- <DropdownMobileInput
521
+ <PullerHeader controlButtons={<PullerClose onClick={() => setOpened(false)} />}>
522
+ <PullerInput
527
523
  autoFocus={true}
528
524
  placeholder="Type to proceed"
529
525
  value={filter}
530
526
  onChange={handleFilterChange}
531
527
  />
532
- </DropdownMobileHeader>
533
- <DropdownMobileBody>{renderDropdownContent()}</DropdownMobileBody>
534
- <DropdownMobileFooter>
528
+ </PullerHeader>
529
+ <PullerBody>{renderDropdownContent()}</PullerBody>
530
+ <PullerFooter>
535
531
  <Button
536
532
  theme={EButtonTheme.GENERAL}
537
533
  size={EComponentSize.SM}
@@ -546,7 +542,7 @@ const TypeItem = ({ type, label }: TypeItemProps) => {
546
542
  >
547
543
  Button link text
548
544
  </Button>
549
- </DropdownMobileFooter>
545
+ </PullerFooter>
550
546
  </>
551
547
  ),
552
548
  }}
@@ -604,11 +600,11 @@ import clsx from "clsx";
604
600
  import {
605
601
  EComponentSize,
606
602
  MultiselectField,
607
- DropdownMobileHeader,
608
- DropdownMobileInput,
609
- DropdownMobileClose,
610
- DropdownMobileBody,
611
- DropdownMobileFooter,
603
+ PullerHeader,
604
+ PullerInput,
605
+ PullerClose,
606
+ PullerBody,
607
+ PullerFooter,
612
608
  EDropdownAlignment,
613
609
  Button,
614
610
  EButtonTheme,
@@ -719,21 +715,19 @@ const SizeItem = ({ size, label }: SizeItemProps) => {
719
715
  ref={dropdownRef}
720
716
  alignment={EDropdownAlignment.LEFT}
721
717
  focusTrapProps={{ focusTrapOptions: { initialFocus: false } }}
722
- mobileViewProps={{
718
+ pullerProps={{
723
719
  children: (
724
720
  <>
725
- <DropdownMobileHeader
726
- controlButtons={<DropdownMobileClose onClick={() => setOpened(false)} />}
727
- >
728
- <DropdownMobileInput
721
+ <PullerHeader controlButtons={<PullerClose onClick={() => setOpened(false)} />}>
722
+ <PullerInput
729
723
  autoFocus={true}
730
724
  placeholder="Type to proceed"
731
725
  value={filter}
732
726
  onChange={handleFilterChange}
733
727
  />
734
- </DropdownMobileHeader>
735
- <DropdownMobileBody>{renderDropdownContent()}</DropdownMobileBody>
736
- <DropdownMobileFooter>
728
+ </PullerHeader>
729
+ <PullerBody>{renderDropdownContent()}</PullerBody>
730
+ <PullerFooter>
737
731
  <Button
738
732
  theme={EButtonTheme.GENERAL}
739
733
  size={EComponentSize.SM}
@@ -748,7 +742,7 @@ const SizeItem = ({ size, label }: SizeItemProps) => {
748
742
  >
749
743
  Button link text
750
744
  </Button>
751
- </DropdownMobileFooter>
745
+ </PullerFooter>
752
746
  </>
753
747
  ),
754
748
  }}
@@ -819,15 +813,15 @@ import {
819
813
  ChipMultiselect,
820
814
  ETextSize,
821
815
  Text,
822
- DropdownMobileHeader,
823
- DropdownMobileInput,
824
- DropdownMobileClose,
825
- DropdownMobileBody,
826
- DropdownMobileFooter,
816
+ PullerHeader,
817
+ PullerInput,
818
+ PullerClose,
819
+ PullerBody,
820
+ PullerFooter,
827
821
  EDropdownAlignment,
828
822
  Button,
829
823
  EButtonTheme,
830
- DropdownMobileLoader,
824
+ PullerLoader,
831
825
  } from "@sberbusiness/triplex-next";
832
826
  import { CHIP_MULTISELECT_OPTIONS } from "./storyConstants";
833
827
 
@@ -919,26 +913,26 @@ export const LoadingExample = () => {
919
913
  ref={dropdownRef}
920
914
  alignment={EDropdownAlignment.LEFT}
921
915
  focusTrapProps={{ focusTrapOptions: { initialFocus: false } }}
922
- mobileViewProps={{
916
+ pullerProps={{
923
917
  children: (
924
918
  <>
925
- <DropdownMobileHeader
919
+ <PullerHeader
926
920
  controlButtons={
927
921
  <>
928
- <DropdownMobileLoader />
929
- <DropdownMobileClose onClick={() => setOpened(false)} />
922
+ <PullerLoader />
923
+ <PullerClose onClick={() => setOpened(false)} />
930
924
  </>
931
925
  }
932
926
  >
933
- <DropdownMobileInput
927
+ <PullerInput
934
928
  autoFocus={true}
935
929
  placeholder="Type to proceed"
936
930
  value={filter}
937
931
  onChange={handleFilterChange}
938
932
  />
939
- </DropdownMobileHeader>
940
- <DropdownMobileBody>{renderDropdownContent()}</DropdownMobileBody>
941
- <DropdownMobileFooter>
933
+ </PullerHeader>
934
+ <PullerBody>{renderDropdownContent()}</PullerBody>
935
+ <PullerFooter>
942
936
  <Button
943
937
  theme={EButtonTheme.GENERAL}
944
938
  size={EComponentSize.SM}
@@ -953,7 +947,7 @@ export const LoadingExample = () => {
953
947
  >
954
948
  Button link text
955
949
  </Button>
956
- </DropdownMobileFooter>
950
+ </PullerFooter>
957
951
  </>
958
952
  ),
959
953
  }}
@@ -997,11 +991,11 @@ export const LoadingExample = () => {
997
991
  import React, { useState } from "react";
998
992
  import {
999
993
  MultiselectField,
1000
- DropdownMobileHeader,
1001
- DropdownMobileInput,
1002
- DropdownMobileClose,
1003
- DropdownMobileBody,
1004
- DropdownMobileFooter,
994
+ PullerHeader,
995
+ PullerInput,
996
+ PullerClose,
997
+ PullerBody,
998
+ PullerFooter,
1005
999
  Button,
1006
1000
  EButtonTheme,
1007
1001
  EComponentSize,
@@ -1192,18 +1186,14 @@ export const WithCheckboxTreeExample = () => {
1192
1186
  focusTrapProps={{
1193
1187
  focusTrapOptions: { initialFocus: false },
1194
1188
  }}
1195
- mobileViewProps={{
1189
+ pullerProps={{
1196
1190
  children: (
1197
1191
  <>
1198
- <DropdownMobileHeader controlButtons={<DropdownMobileClose onClick={() => setOpened(false)} />}>
1199
- <DropdownMobileInput
1200
- placeholder="Type to proceed"
1201
- value={filter}
1202
- onChange={handleFilterChange}
1203
- />
1204
- </DropdownMobileHeader>
1205
- <DropdownMobileBody>{renderDropdownContent()}</DropdownMobileBody>
1206
- <DropdownMobileFooter>
1192
+ <PullerHeader controlButtons={<PullerClose onClick={() => setOpened(false)} />}>
1193
+ <PullerInput placeholder="Type to proceed" value={filter} onChange={handleFilterChange} />
1194
+ </PullerHeader>
1195
+ <PullerBody>{renderDropdownContent()}</PullerBody>
1196
+ <PullerFooter>
1207
1197
  <Button
1208
1198
  theme={EButtonTheme.GENERAL}
1209
1199
  size={EComponentSize.SM}
@@ -1214,7 +1204,7 @@ export const WithCheckboxTreeExample = () => {
1214
1204
  <Button theme={EButtonTheme.LINK} size={EComponentSize.SM} onClick={handleClickClearFilter}>
1215
1205
  Button link text
1216
1206
  </Button>
1217
- </DropdownMobileFooter>
1207
+ </PullerFooter>
1218
1208
  </>
1219
1209
  ),
1220
1210
  }}