@sberbusiness/triplex-next-mcp-server 1.42.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.
- package/bundle/components/AlertProcess.md +3 -2
- package/bundle/components/BodyPage.md +72 -4
- package/bundle/components/Button.md +1 -0
- package/bundle/components/Checkbox.md +7 -1
- package/bundle/components/CheckboxTreeExtended.md +149 -248
- package/bundle/components/CheckboxXGroup.md +2 -0
- package/bundle/components/CheckboxYGroup.md +7 -2
- package/bundle/components/ChipGroup.md +195 -126
- package/bundle/components/CollapsibleTreeExtended.md +6 -1
- package/bundle/components/DatePickerExtended.md +409 -262
- package/bundle/components/ExpandAnimation.md +263 -218
- package/bundle/components/Footer.md +235 -278
- package/bundle/components/Island.md +36 -1
- package/bundle/components/LightBox.md +14 -3
- package/bundle/components/MediaWidth.md +7 -1
- package/bundle/components/Notification.md +21 -3
- package/bundle/components/Overlay.md +24 -1
- package/bundle/components/Pagination.md +12 -13
- package/bundle/components/SliderExtended.md +358 -222
- package/bundle/components/TableBasic.md +2294 -0
- package/bundle/components/TabsExtended.md +380 -194
- package/bundle/components/Tag.md +259 -78
- package/bundle/components/TopOverlay.md +366 -90
- package/bundle/components/TreeView.md +343 -166
- package/bundle/components/TreeViewNode.md +436 -0
- package/bundle/components/UnorderedList.md +254 -0
- package/bundle/components/UnorderedListExtended.md +255 -0
- package/bundle/components/WindowResizeListener.md +249 -0
- package/bundle/guides/commits.md +121 -15
- package/bundle/guides/stories.md +1 -1
- package/bundle/manifest.json +46 -20
- package/bundle/release-notes/1.43.0.mdx +87 -0
- package/bundle/release-notes/1.44.0.mdx +120 -0
- package/bundle/release-notes/1.45.0.mdx +7 -0
- package/package.json +1 -1
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: ChipGroup
|
|
3
3
|
category: Chips
|
|
4
|
-
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
Контейнер-раскладка для чипсов: расставляет `Chip` и его варианты во flex-строку
|
|
15
|
+
с одинаковым отступом и решает, переносятся они на новые строки или выстраиваются
|
|
16
|
+
в одну строку с горизонтальной прокруткой.
|
|
19
17
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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
|
-
|
|
31
|
+
Обязательных props нет — `ChipGroup` работает без единого аргумента.
|
|
48
32
|
|
|
49
|
-
###
|
|
33
|
+
### Опциональные props
|
|
50
34
|
|
|
51
|
-
| Prop | Тип |
|
|
35
|
+
| Prop | Тип | По умолчанию | Описание |
|
|
52
36
|
|---|---|---|---|
|
|
53
|
-
| `
|
|
54
|
-
| `
|
|
55
|
-
| `children` | `ReactNode` | — | Обычно набор Chip
|
|
56
|
-
| `
|
|
57
|
-
|
|
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
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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
|
-
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
-
|
|
123
|
-
|
|
124
|
-
-
|
|
125
|
-
|
|
126
|
-
- **`
|
|
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
|
-
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
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`
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
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
|
-
|
|
119
|
+
Основные истории: `stories/Chips/ChipGroup.stories.tsx`
|
|
120
|
+
Файлы примеров: `stories/Chips/examples/ChipGroup/`
|
|
166
121
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
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-
|
|
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
|
+
|
|
@@ -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
|
|