@sberbusiness/triplex-next-mcp-server 1.42.0-beta → 1.43.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.
@@ -1,9 +1,7 @@
1
1
  ---
2
2
  component: ChipGroup
3
3
  category: Chips
4
- figma-node: ""
5
- figma-file: ""
6
- related: [Chip, TagGroup]
4
+ related: [Chip]
7
5
  tokens: []
8
6
  stories: stories/Chips/ChipGroup.stories.tsx
9
7
  version: "1.0"
@@ -13,162 +11,120 @@ version: "1.0"
13
11
 
14
12
  ## Назначение
15
13
 
16
- Контейнер для набора `Chip` (и любых `Chip*`-вариантов). Управляет
17
- расстоянием между чипами (`gap` по size), способом переноса (`flex-wrap`)
18
- или горизонтальным скроллом (`oneLine`), и скрывает скроллбар.
14
+ Контейнер-раскладка для чипсов: расставляет `Chip` и его варианты во flex-строку
15
+ с одинаковым отступом и решает, переносятся они на новые строки или выстраиваются
16
+ в одну строку с горизонтальной прокруткой.
19
17
 
20
- Это **layout-only** обёртка: не передаёт `size` детям, не синхронизирует
21
- disabled/selected — только стайлит контейнер. Размер чипов потребитель
22
- задаёт на каждом Chip индивидуально (но обычно ставит тот же, что в
23
- ChipGroup).
24
-
25
- Используй когда: есть 2+ чипа в одной строке или блоке фильтров.
26
- Не используй когда: один чип (без обёртки он тоже валиден); нужен вертикальный
27
- список (ChipGroup только горизонтальный); нужны теги-метки — бери `TagGroup`.
18
+ Используй когда: на экране идёт ряд однотипных чипсов-фильтров или тегов-действий —
19
+ `ChipGroup` рекомендуемая обёртка для любого члена семейства Chip*.
20
+ Не используй когда: нужен контейнер общего назначения с отступами — бери собственную
21
+ вёрстку (`Gap` для этого не годится: он принимает `Omit<..., "children">` и рендерит
22
+ пустой разделитель фиксированной высоты), или группируются `Tag` — у них своя группа
23
+ `TagGroup`.
28
24
 
29
25
  ---
30
26
 
31
- ## Файловая структура
32
-
33
- ```text
34
- src/components/ChipGroup/
35
- ├── ChipGroup.tsx # React.forwardRef
36
- ├── index.ts # Barrel
37
- └── styles/ChipGroup.module.less # flex + oneLine (hidden scrollbar) / multiLine (wrap)
38
- ```
39
-
40
- Особенности:
41
- - **Нет `__tests__`**, нет subcomponents — компонент максимально тонкий.
42
- - **`size` — prop, но НЕ форвардится детям**. Влияет только на `gap`.
43
- Размер чипов — ответственность потребителя.
27
+ ## Варианты и props
44
28
 
45
- ---
29
+ ### Обязательные props
46
30
 
47
- ## Варианты и props
31
+ Обязательных props нет — `ChipGroup` работает без единого аргумента.
48
32
 
49
- ### `IChipGroupProps extends React.HTMLAttributes<HTMLDivElement>`
33
+ ### Опциональные props
50
34
 
51
- | Prop | Тип | Default | Описание |
35
+ | Prop | Тип | По умолчанию | Описание |
52
36
  |---|---|---|---|
53
- | `oneLine` | `boolean` | `false` | `true` → `flex` + `overflow: auto` (горизонтальный скролл, скроллбар скрыт). `false` → `flex-wrap: wrap` (многострочный). |
54
- | `size` | `EComponentSize` | `MD` | Управляет gap: SM=8px, MD=8px, LG=12px. **Не передаётся в Chip.** |
55
- | `children` | `ReactNode` | — | Обычно набор Chip/ChipIcon/ChipSelect etc. |
56
- | `className` | `string` | — | Dop class через `clsx`. |
57
- | `...HTMLDivAttributes` | — | — | Все стандартные. |
37
+ | `size` | `EComponentSize` | `MD` | Отступ между чипсами: `LG` — 12px, `MD` и `SM` — 8px |
38
+ | `oneLine` | `boolean` | `false` | Одна строка с горизонтальной прокруткой вместо переноса |
39
+ | `children` | `React.ReactNode` | — | Обычно набор `Chip`, `ChipIcon`, `ChipSelect` и других членов семейства |
40
+ | `...HTMLDivAttributes` | `React.HTMLAttributes<HTMLDivElement>` | — | Все атрибуты `<div>`, включая `style`, `role`, `aria-*`, `data-*` |
41
+
42
+ ### Ограничения использования
43
+
44
+ - **`size` не пробрасывается в чипсы.** Он задаёт только `gap` контейнера; размер
45
+ самих чипсов потребитель выставляет на каждом `Chip` отдельно (так сделано во всех
46
+ примерах stories). Рассинхрон `size` группы и `size` чипсов ничем не подсвечивается.
47
+ - **`SM` и `MD` дают одинаковый отступ 8px** — визуально различимы только `LG` и остальные.
48
+ - **`oneLine` прячет полосу прокрутки** (`scrollbar-width: none`, `-ms-overflow-style: none`,
49
+ `::-webkit-scrollbar { display: none }`), сама прокрутка остаётся. Пользователю нужен
50
+ другой аффорданс — жест, стрелки-кнопки или обрезка контента по краю.
51
+ - **В режиме `oneLine` дети не должны сжиматься.** `flex-shrink: 0` задан только классом
52
+ `.chip`, то есть гарантирован у `Chip` и его прямых обёрток `ChipIcon` и `ChipOptions` —
53
+ они уезжают за границу и прокручиваются. У остальных членов семейства (`ChipSelect`,
54
+ `ChipMultiselect`, `ChipSort`, `ChipSuggest`, `ChipDatePicker`) корневой элемент несёт
55
+ только `.chipGroupItem` без `flex-shrink`, как и произвольный ребёнок, — такой элемент
56
+ сожмётся вместо прокрутки.
57
+ - **Ширину контейнер не ограничивает.** В `oneLine` прокрутка появится, только если ширину
58
+ задал потребитель или родитель (в stories это `style={{ maxWidth: 360 }}`).
59
+ - **`data-tx` выставляется после `{...rest}`** — версию библиотеки в этом атрибуте
60
+ переопределить нельзя, в отличие от остальных атрибутов.
58
61
 
59
62
  ---
60
63
 
61
- ## Ключевые особенности реализации
62
-
63
- ### `oneLine` → горизонтальный скролл со скрытым скроллбаром
64
-
65
- ```less
66
- &.oneLine {
67
- overflow: auto;
68
- scrollbar-width: none;
69
- -ms-overflow-style: none;
70
- &::-webkit-scrollbar { display: none; }
71
- }
72
- ```
73
-
74
- Скроллбар скрыт во всех браузерах. Пользователь скроллит свайпом (touch)
75
- или shift+wheel. **Без отдельной кнопки "стрелка"** — в отличие от
76
- `CarouselExtended`. Если нужны стрелки — оборачивай ChipGroup в
77
- `CarouselExtended`.
78
-
79
- ### `multiLine` по умолчанию
80
-
81
- ```less
82
- &.multiLine { flex-wrap: wrap; }
83
- ```
84
-
85
- Без wrap — инлайновые чипы проталкивали бы родителя в overflow. Multi-line
86
- — стандартное поведение фильтров.
87
-
88
- ### `gap` зависит от size
89
-
90
- - SM / MD: 8px
91
- - LG: 12px
92
-
93
- SM и MD одинаковы — это дизайн-решение. **Не объединять** в `& { gap: 8px }`
94
- и `&.lg { gap: 12px }` — поменяет интенсивность спецификации, может
95
- сломать override'ы потребителей.
96
-
97
- ### `createSizeToClassNameMap(styles)` — тот же паттерн
98
-
99
- Тот же `classNameMaps.ts` утилита, что в Badge / Chip / многих других.
100
- Если добавить XS/XL в EComponentSize — нужно обновить и mapping, и LESS.
101
-
102
- ### `data-tx={process.env.npm_package_version}` — есть
103
-
104
- Стандарт библиотеки. Не удалять.
105
-
106
- ### size не передаётся детям
64
+ ## Дизайн-токены
107
65
 
108
- **Это отличие от многих других групповых компонентов** (CheckboxXGroup/YGroup
109
- передают size через контекст). ChipGroup намеренно не передаёт — потребители
110
- могут иметь чипы разных размеров в одной группе (например, ChipIcon LG +
111
- Chip MD — визуально смотрится как отдельная подсвеченная кнопка).
66
+ Компонент не использует собственных CSS-переменных: в стилях только раскладка
67
+ (`display: flex`, `flex-wrap`, `gap`, `overflow`). Цвета и размеры приходят от вложенных
68
+ чипсов.
112
69
 
113
70
  ---
114
71
 
115
72
  ## Инварианты
116
73
 
117
- - **`forwardRef`** — обязателен.
118
- - **`display: flex`** на root — не менять на grid. Потребители могут
119
- полагаться на flex-item поведение чипов (`styles.chipGroupItem`
120
- декларирует `display: inline-block`).
121
- - **Скрытый скроллбар в `oneLine`** — три вендор-префикса, не удалять.
122
- - **`gap` только на root-класе `.chipGroup`** — дети (чипы) не должны
123
- иметь собственных margin'ов.
124
- - **`size` не прокидывается детям** — осознанное решение. Не добавлять
125
- контекст "для консистентности".
126
- - **`data-tx`** — не удалять.
74
+ - **`forwardRef`** — обязателен, `ref` указывает на корневой `<div>`. Не убирать.
75
+ - **Корневой элемент — `<div>` без собственной роли.** Роль и ARIA-подписи — зона
76
+ ответственности потребителя, компонент их не навязывает.
77
+ - **`className` и `{...rest}` уходят на тот же корневой `<div>`, что и `ref`.** `className`
78
+ добавляется последним аргументом `clsx` и собственные классы не затирает.
79
+ - **Классы `.oneLine` и `.multiLine` взаимоисключающие** — ровно один из них есть всегда.
80
+ На это опираются unit-тесты `__tests__/ChipGroup.test.tsx`.
81
+ - **Публичный API** — `ChipGroup`, `IChipGroupProps` через `src/components/ChipGroup/index.ts`
82
+ и общий barrel `src/components/index.ts`. Сохранять.
83
+ - **`EComponentSize`** — общий enum из `src/enums/EComponentSize`, локального аналога не заводить.
84
+ - **Story ids `chips-chipgroup--*`** завязаны на baseline-скриншоты в `__screenshots__/` —
85
+ переименование story требует синхронного обновления baseline.
127
86
 
128
87
  ---
129
88
 
130
89
  ## Accessibility
131
90
 
132
- - **Нет ARIA-ролей** — ChipGroup семантически нейтрален. Если это набор
133
- фильтров — потребитель может обернуть в `<fieldset>` с `<legend>` или
134
- добавить `role="group"` + `aria-label`.
135
- - **Клавиатурная навигация** — **не реализована**. Tab перемещается
136
- линейно через tabbable-чипы внутри. Arrow keys не поддерживаются. Если
137
- нужен roving-tabindex с arrow keys — это задача потребителя (или бери
138
- `RadioGroup`/`TabsLine`-семейства).
139
- - **Скроллбар в oneLine скрыт визуально**, но работает клавиатурой (можно
140
- кликнуть в ChipGroup и использовать arrow-left/right для скролла). Screen
141
- reader-ы обычно читают содержимое независимо от видимости скроллбара.
142
-
143
- ---
144
-
145
- ## Дизайн-токены
146
-
147
- Нет. Компонент структурный — gap'ы жёстко в LESS.
91
+ - Компонент — чисто визуальный контейнер: не задаёт роль, не перехватывает клавиатуру
92
+ и не управляет фокусом. Семантика остаётся на вложенных чипсах (`<span role="button">`).
93
+ - Если ряд чипсов логически является группой контролов, потребитель сам передаёт
94
+ `role="group"` (или `role="toolbar"`) и `aria-label` / `aria-labelledby` через `...rest` —
95
+ библиотека мультиязычная, текст внутри не хардкодится.
96
+ - **Режим `oneLine` создаёт прокручиваемую область без видимой полосы.** Чтобы контент
97
+ оставался доступным с клавиатуры, потребителю стоит либо оставить чипсы фокусируемыми
98
+ (по умолчанию так и есть — прокрутка следует за фокусом), либо сделать сам контейнер
99
+ фокусируемым (`tabIndex={0}` с ролью и подписью).
148
100
 
149
101
  ---
150
102
 
151
103
  ## Связанные компоненты
152
104
 
153
- - `Chip` и все `Chip*` варианты (`src/components/Chip`) — типичные дети.
154
- - `TagGroup` (`src/components/Tag`) — аналогичный контейнер для тегов
155
- (разная стилистика и семантика).
156
- - `CarouselExtended` — может обёртывать ChipGroup для добавления стрелок
157
- prev/next при `oneLine` overflow.
158
- - `EComponentSize`, `createSizeToClassNameMap` — общий паттерн.
105
+ - `Chip` (`src/components/Chip`) — основной ребёнок группы; вместе с ним внутрь кладут
106
+ `ChipIcon`, `ChipOptions`, `ChipSort`, `ChipSelect`, `ChipMultiselect`, `ChipSuggest`,
107
+ `ChipDatePicker` — элемент верхнего уровня у каждого из них помечен классом
108
+ `.chipGroupItem` (у `ChipIcon` и `ChipOptions` — через вложенный `Chip`)
109
+ - `ListMaster.ChipGroup` (`src/components/ListMaster/components/ListMasterChipGroup.tsx`) —
110
+ обёртка над `ChipGroup` с фиксированным `oneLine` и горизонтальными отступами страницы;
111
+ собственного AI.md не имеет, описана в `ListMaster-ai.md`
112
+ - `TagGroup` — аналогичный контейнер для `Tag`; отличается ролью `role="group"` и
113
+ обязательным `size`
159
114
 
160
115
  ---
161
116
 
162
117
  ## Stories
163
118
 
164
- `stories/Chips/ChipGroup.stories.tsx`
165
- Примеры: `stories/Chips/examples/ChipGroup/`
119
+ Основные истории: `stories/Chips/ChipGroup.stories.tsx`
120
+ Файлы примеров: `stories/Chips/examples/ChipGroup/`
166
121
 
167
- Типовые stories:
168
- - `Default` — многострочный набор чипов
169
- - `OneLine` — горизонтальный скролл
170
- - `Sizes` — MD vs LG gap
171
- - `Playground` — интерактивный контроль `oneLine` и `size`
122
+ | Story | Example file | Что демонстрирует |
123
+ |---|---|---|
124
+ | `Playground` | `PlaygroundExample.tsx` | Интерактивный контроль `size` и `oneLine` |
125
+ | `Default` | `DefaultExample.tsx` | Перенос чипсов по строкам при ограниченной ширине |
126
+ | `Sizes` | `SizesExample.tsx` | Отступы для размеров SM / MD / LG |
127
+ | `OneLine` | `OneLineExample.tsx` | Одна строка с горизонтальной прокруткой |
172
128
 
173
129
  ---
174
130
 
@@ -176,4 +132,117 @@ Chip MD — визуально смотрится как отдельная по
176
132
 
177
133
  | Дата | Изменение |
178
134
  |---|---|
179
- | 2026-04-18 | Создан документ |
135
+ | 2026-08-19 | Создан документ (TRI-27, AI-Ready Phase 1) |
136
+ | 2026-08-19 | AI-рефакторинг (TRI-27): JSDoc на props и компоненте, маппинг размеров в UPPER_SNAKE_CASE, эквивалентное упрощение `clsx`, добавлены unit-тесты `__tests__/ChipGroup.test.tsx`. Публичный API, DOM и внешний вид не изменены |
137
+
138
+ ---
139
+
140
+ ## Примеры использования
141
+
142
+ ### Default
143
+
144
+ `stories/Chips/examples/ChipGroup/DefaultExample.tsx`
145
+
146
+ ```tsx
147
+ import React, { useState } from "react";
148
+ import { Chip, ChipGroup } from "@sberbusiness/triplex-next";
149
+
150
+ export const DefaultExample = () => {
151
+ const [selected, setSelected] = useState<number | null>(null);
152
+ const chips = ["Alpha", "Beta", "Gamma", "Delta"];
153
+ return (
154
+ <ChipGroup style={{ maxWidth: 360 }}>
155
+ {chips.map((label, index) => (
156
+ <Chip key={label} selected={selected === index} onClick={() => setSelected(index)}>
157
+ {label}
158
+ </Chip>
159
+ ))}
160
+ </ChipGroup>
161
+ );
162
+ };
163
+ ```
164
+
165
+ ### Sizes
166
+
167
+ `stories/Chips/examples/ChipGroup/SizesExample.tsx`
168
+
169
+ ```tsx
170
+ import React, { useState } from "react";
171
+ import { Chip, ChipGroup, EComponentSize } from "@sberbusiness/triplex-next";
172
+
173
+ type SizeItemProps = {
174
+ size: EComponentSize;
175
+ label: string;
176
+ };
177
+
178
+ type SizeItemChipProps = Pick<SizeItemProps, "size"> & {
179
+ name: string;
180
+ };
181
+
182
+ const SizeItemChip = ({ size, name }: SizeItemChipProps) => {
183
+ const [selected, setSelected] = useState(false);
184
+
185
+ const handleClick = () => setSelected((prevSelected) => !prevSelected);
186
+
187
+ return (
188
+ <Chip size={size} selected={selected} onClick={handleClick}>
189
+ {name}
190
+ </Chip>
191
+ );
192
+ };
193
+
194
+ const NAMES = ["Alpha", "Beta", "Gamma", "Delta"];
195
+
196
+ const SizeItem = ({ size, label }: SizeItemProps) => (
197
+ <div>
198
+ <div style={{ marginBottom: 8, fontSize: 16, fontWeight: 700 }}>{label}</div>
199
+ <ChipGroup size={size}>
200
+ {NAMES.map((name) => (
201
+ <SizeItemChip key={name} size={size} name={name} />
202
+ ))}
203
+ </ChipGroup>
204
+ </div>
205
+ );
206
+
207
+ const sizeOptions = Object.values(EComponentSize).map((size) => ({
208
+ value: size,
209
+ label: size.toUpperCase(),
210
+ }));
211
+
212
+ export const SizesExample = () => (
213
+ <div style={{ display: "flex", flexDirection: "column", gap: 12 }}>
214
+ {sizeOptions.map(({ value, label }) => (
215
+ <SizeItem key={value} size={value} label={label} />
216
+ ))}
217
+ </div>
218
+ );
219
+ ```
220
+
221
+ ### OneLine
222
+
223
+ `stories/Chips/examples/ChipGroup/OneLineExample.tsx`
224
+
225
+ ```tsx
226
+ import React, { useState } from "react";
227
+ import { Chip, ChipGroup, EComponentSize } from "@sberbusiness/triplex-next";
228
+
229
+ export const OneLineExample = () => {
230
+ const [selected, setSelected] = useState<number | null>(null);
231
+ const chips = Array.from({ length: 20 }, (_, i) => `Item ${i + 1}`);
232
+ return (
233
+ <ChipGroup oneLine style={{ maxWidth: 360 }}>
234
+ {chips.map((label, index) => (
235
+ <Chip
236
+ key={label}
237
+ size={EComponentSize.MD}
238
+ selected={selected === index}
239
+ onClick={() => setSelected(index)}
240
+ >
241
+ {label}
242
+ </Chip>
243
+ ))}
244
+ </ChipGroup>
245
+ );
246
+ };
247
+ ```
248
+
@@ -126,6 +126,11 @@ version: "1.0"
126
126
  последнего (при переключении роутов второй лайтбокс может смонтироваться раньше, чем
127
127
  размонтируется первый). Аналогичный счётчик в `LightBoxViewManager` управляет классами
128
128
  mount-ноды (`LightBoxMountNodeViewManager`, `LB-*`).
129
+ - **Локальные z-index внутри лайтбокса** (стековый контекст создаёт `.lightBox`): контролы и
130
+ sticky-шапка/футер `Page` — 100/101, лоадеры `LightBox.Content` и `LightBox.SideOverlay` — 201,
131
+ `TopOverlay` — 500. `LoaderScreen` приходит с глобальным `@z-index-loader-screen` (10100), поэтому
132
+ обе обёртки лоадера обязаны переопределять его локальным значением — иначе лоадер перекрывает
133
+ `TopOverlay`.
129
134
  - Баррел `index.ts` реэкспортирует `LightBox`, `enums`, `LightBoxSideOverlay` — сохранять.
130
135
  - React 17 совместимость (синхронизация в release-0): React 18-only API не использовать.
131
136
 
@@ -194,6 +199,7 @@ version: "1.0"
194
199
  | 2026-07-22 | Создан документ (Phase 1 AI-Ready). В том же изменении — AI-рефакторинг: JSDoc на props, общий `LightBoxArrow` для Prev/Next, хук `useLightBoxSidebarVisibility` для сайдбаров, устранение eslint-подавлений; публичный API не менялся |
195
200
  | 2026-07-22 | Добавлен `export` к props-интерфейсам `ILightBoxControlsProps`, `ILightBoxCloseProps`, `ILightBoxPrevProps`, `ILightBoxNextProps`, `ILightBoxSideOverlayLoaderProps` (аддитивно, для консистентности с остальными интерфейсами компонента) |
196
201
  | 2026-07-22 | Багфиксы по ревью PR #474: клавиатурные триггеры контролов целятся в видимую кнопку (стрелки не работали на desktop, Esc — на mobile); таймер-хак блокировки скролла заменён счётчиком смонтированных лайтбоксов; `LightBoxViewManager` снимает классы mount-ноды при размонтировании последнего менеджера |
202
+ | 2026-08-17 | Исправлено: `LightBox.TopOverlay` перекрывался лоадером `LightBox.Content`. У `.loadingContentOverlay` теперь локальный z-index (201) — выше sticky-шапки и футера `Page`, но ниже `TopOverlay` (500); раньше `LoaderScreen` шёл с глобальным `@z-index-loader-screen` (10100) |
197
203
 
198
204
  ---
199
205
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  component: MediaWidth
3
3
  category: MediaWidth
4
- related: [MediaMinWidth, MediaMaxWidth, MediaBetweenWidth, useMatchMedia, MobileView]
4
+ related: [MediaMinWidth, MediaMaxWidth, MediaBetweenWidth, useMatchMedia, MobileView, WindowResizeListener]
5
5
  tokens: []
6
6
  stories: stories/MediaWidth/MediaWidth.stories.tsx
7
7
  version: "1.0"
@@ -176,6 +176,11 @@ version: "1.0"
176
176
  - `MobileView` (`src/components/MobileView/`) — частный случай `MediaWidth` с
177
177
  `maxWidth={EScreenWidth.SM_MAX}`, со своим AI.md. Для мобильной границы
178
178
  используется он, а не `MediaWidth` напрямую.
179
+ - `WindowResizeListener` (`src/components/WindowResizeListener/`) — альтернатива
180
+ для императивного случая: даёт колбэк на поток событий `resize`, а не рендерит
181
+ ветку по медиа-запросу. Правило выбора: нужно **что-то показать** на
182
+ определённой ширине — `MediaWidth`; нужно **что-то посчитать/сделать** на
183
+ ресайз — `WindowResizeListener`.
179
184
 
180
185
  Разница между `MediaWidth` и тремя реализациями: у `MediaWidth` обе границы
181
186
  опциональны и выбор реализации делается за потребителя; у реализаций
@@ -220,6 +225,7 @@ version: "1.0"
220
225
 
221
226
  | Дата | Изменение |
222
227
  |---|---|
228
+ | 2026-08-18 | TRI-104: в `related` и «Связанные компоненты» добавлен `WindowResizeListener` — обратная сторона симметричной связи-альтернативы. Код и публичный API не затронуты. |
223
229
  | 2026-08-11 | Создан документ. AI-рефакторинг (TRI-58): `displayName` у `MediaWidth`, исправлены опечатки и дополнен JSDoc props и компонента, unit-тесты расширены с 7 до 19 кейсов (проверяются строки медиа-запросов, выбор реализации, `null`-ветки, переподписка и отписка). Публичный API не изменён (props, `IMediaProps`, barrel-экспорты; `forwardRef` по-прежнему осознанно отсутствует). |
224
230
 
225
231
  ---
@@ -202,7 +202,13 @@ export const Status = () => (
202
202
  <Notification.Body.Content>
203
203
  This message provides context or highlights important information to note.
204
204
  </Notification.Body.Content>
205
- <Notification.Body.List values={Array.from({ length: 3 }, () => "List item text;")} />
205
+ <Notification.Body.List
206
+ items={[
207
+ { key: "1", children: "List item text" },
208
+ { key: "2", children: "List item text" },
209
+ { key: "3", children: "List item text" },
210
+ ]}
211
+ />
206
212
  </Notification.Body>
207
213
  <Notification.Close onClick={() => {}} />
208
214
  </Notification>
@@ -218,7 +224,13 @@ export const Status = () => (
218
224
  <Notification.Body.Content>
219
225
  This message provides context or highlights important information to note.
220
226
  </Notification.Body.Content>
221
- <Notification.Body.List values={Array.from({ length: 3 }, () => "List item text;")} />
227
+ <Notification.Body.List
228
+ items={[
229
+ { key: "1", children: "List item text" },
230
+ { key: "2", children: "List item text" },
231
+ { key: "3", children: "List item text" },
232
+ ]}
233
+ />
222
234
  </Notification.Body>
223
235
  <Notification.Close onClick={() => {}} />
224
236
  </Notification>
@@ -234,7 +246,13 @@ export const Status = () => (
234
246
  <Notification.Body.Content>
235
247
  This message provides context or highlights important information to note.
236
248
  </Notification.Body.Content>
237
- <Notification.Body.List values={Array.from({ length: 3 }, () => "List item text;")} />
249
+ <Notification.Body.List
250
+ items={[
251
+ { key: "1", children: "List item text" },
252
+ { key: "2", children: "List item text" },
253
+ { key: "3", children: "List item text" },
254
+ ]}
255
+ />
238
256
  </Notification.Body>
239
257
  <Notification.Close onClick={() => {}} />
240
258
  </Notification>