@sberbusiness/triplex-next-mcp-server 0.36.0-beta0 → 1.40.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/AlertContext.md +268 -0
- package/bundle/components/Button.md +5 -2
- package/bundle/components/ButtonDropdown.md +9 -1
- package/bundle/components/ButtonDropdownExtended.md +422 -0
- package/bundle/components/ButtonIcon.md +7 -1
- package/bundle/components/Caption.md +291 -0
- package/bundle/components/CodeText.md +197 -0
- package/bundle/components/Col.md +311 -162
- package/bundle/components/CollapsibleTree.md +6 -3
- package/bundle/components/CollapsibleTreeExtended.md +6 -2
- package/bundle/components/Dropdown.md +748 -346
- package/bundle/components/LightBox.md +2252 -233
- package/bundle/components/List.md +26 -1
- package/bundle/components/ListActionItem.md +157 -0
- package/bundle/components/ListItem.md +34 -9
- package/bundle/components/ListItemSelectable.md +2 -2
- package/bundle/components/ListMaster.md +4 -5
- package/bundle/components/ListTableItem.md +391 -0
- package/bundle/components/Notification.md +21 -21
- package/bundle/components/Page.md +1 -0
- package/bundle/components/Portal.md +131 -67
- package/bundle/components/Row.md +171 -69
- package/bundle/components/Text.md +320 -0
- package/bundle/components/TextField.md +364 -97
- package/bundle/components/Title.md +296 -0
- package/bundle/guides/commits.md +118 -24
- package/bundle/guides/context.md +1 -1
- package/bundle/guides/tests.md +42 -0
- package/bundle/manifest.json +89 -14
- package/bundle/release-notes/1.37.0.mdx +42 -1
- package/bundle/release-notes/1.38.0.mdx +36 -0
- package/bundle/release-notes/1.39.0.mdx +66 -0
- package/bundle/release-notes/1.40.0.mdx +27 -0
- package/bundle/release-notes/1.41.0.mdx +7 -0
- package/package.json +1 -1
|
@@ -27,7 +27,7 @@ version: "1.0"
|
|
|
27
27
|
| Prop | Тип | По умолчанию | Описание |
|
|
28
28
|
|---|---|---|---|
|
|
29
29
|
| `loading` | `boolean` | `false` | Показывает `LoaderScreen` поверх содержимого. Используется при обновлении текущего списка новыми данными (например, после применения фильтра) |
|
|
30
|
-
| `children` | `React.ReactNode` | — | Элементы списка (обычно `<ListItem>` или `<
|
|
30
|
+
| `children` | `React.ReactNode` | — | Элементы списка (обычно `<ListItem>` или `<ListTableItem>`) |
|
|
31
31
|
| `...HTMLUListElementAttributes` | — | — | Все стандартные атрибуты `<ul>` |
|
|
32
32
|
|
|
33
33
|
---
|
|
@@ -64,6 +64,7 @@ version: "1.0"
|
|
|
64
64
|
| `EmptyState` | `EmptyState.tsx` | Использование `ListEmptyState` |
|
|
65
65
|
| `Virtualized` | `Virtualized.tsx` | Виртуализированный список (большие наборы данных) |
|
|
66
66
|
| `Sortable` | `Sortable.tsx` | DnD-сортировка через `ListSortable` + `ListSortableItem` |
|
|
67
|
+
| `WithActionItems` | `WithActionItems.tsx` | Список из кликабельных строк `ListActionItem` |
|
|
67
68
|
| `SortableWithInteractiveElements` | `SortableWithInteractiveElements.tsx` | DnD с интерактивными элементами внутри строк (`data-draggable="false"`) |
|
|
68
69
|
|
|
69
70
|
---
|
|
@@ -222,6 +223,30 @@ export const Sortable = () => {
|
|
|
222
223
|
};
|
|
223
224
|
```
|
|
224
225
|
|
|
226
|
+
### WithActionItems
|
|
227
|
+
|
|
228
|
+
`stories/List/examples/List/WithActionItems.tsx`
|
|
229
|
+
|
|
230
|
+
```tsx
|
|
231
|
+
import React from "react";
|
|
232
|
+
import { List, ListActionItem } from "@sberbusiness/triplex-next";
|
|
233
|
+
|
|
234
|
+
export const WithActionItems = () => (
|
|
235
|
+
<div style={{ maxWidth: "500px" }}>
|
|
236
|
+
<List>
|
|
237
|
+
{Array.from({ length: 5 }, (_, index) => (
|
|
238
|
+
<ListActionItem
|
|
239
|
+
key={index}
|
|
240
|
+
listItemContentProps={{ onClick: () => alert(`Клик по элементу списка ${index}`) }}
|
|
241
|
+
>
|
|
242
|
+
Элемент списка {index}
|
|
243
|
+
</ListActionItem>
|
|
244
|
+
))}
|
|
245
|
+
</List>
|
|
246
|
+
</div>
|
|
247
|
+
);
|
|
248
|
+
```
|
|
249
|
+
|
|
225
250
|
### SortableWithInteractiveElements
|
|
226
251
|
|
|
227
252
|
`stories/List/examples/List/SortableWithInteractiveElements.tsx`
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
---
|
|
2
|
+
component: ListActionItem
|
|
3
|
+
category: List
|
|
4
|
+
related: [ListItem, ListItemContent, ListSortableItem]
|
|
5
|
+
tokens:
|
|
6
|
+
- --triplex-next-ListItem-Background_Hover
|
|
7
|
+
- --triplex-next-ListItem-BorderColor_Focus
|
|
8
|
+
stories: stories/List/ListItem.stories.tsx
|
|
9
|
+
version: "1.0"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# ListActionItem
|
|
13
|
+
|
|
14
|
+
## Назначение
|
|
15
|
+
|
|
16
|
+
Самодостаточный интерактивный элемент списка. Сам рендерит `ListItem` и
|
|
17
|
+
`ListItemContent` (по аналогии с тем, как `ListSortableItem` рендерит внутри себя
|
|
18
|
+
`ListItem`), поэтому потребителю не нужно вручную составлять композицию. Добавляет
|
|
19
|
+
hover-подсветку, focus-обводку по Tab и активацию по клику / Enter / Space.
|
|
20
|
+
|
|
21
|
+
Ключевая идея: интерактивные атрибуты (`role`, `tabIndex`, обработчики) и класс
|
|
22
|
+
`styles.listActionItem` навешиваются на сам `ListItemContent`, поэтому фоном
|
|
23
|
+
управляет один элемент — базовый фон приходит из `.listItemContent`, а hover-фон
|
|
24
|
+
из `.listActionItem:hover` на том же узле. Нет перекрытия фона между обёрткой и
|
|
25
|
+
контентом.
|
|
26
|
+
|
|
27
|
+
Используй `ListActionItem` когда: строка целиком кликабельна (навигация, открытие
|
|
28
|
+
деталей, выбор из списка без чекбокса). Не используй внутри `ListTableItem` —
|
|
29
|
+
там `onClickItem` вешается напрямую на `ListItemContent` без hover/focus/keyboard.
|
|
30
|
+
|
|
31
|
+
Распределение пропсов:
|
|
32
|
+
|
|
33
|
+
- **собственные пропсы `ListActionItem`** (`extends React.LiHTMLAttributes<HTMLLIElement>`)
|
|
34
|
+
уходят на корневой `<li>` (`ListItem`) — `className`, `style`, `id`, `data-*` строки;
|
|
35
|
+
- **`listItemContentProps`** — на интерактивный `ListItemContent`: `onClick`,
|
|
36
|
+
`onKeyDown`, переопределение `role` / `tabIndex`, `className` контента и т.д.
|
|
37
|
+
|
|
38
|
+
Типичная композиция:
|
|
39
|
+
|
|
40
|
+
```tsx
|
|
41
|
+
<List>
|
|
42
|
+
<ListActionItem listItemContentProps={{ onClick: handleClick }}>Текст строки</ListActionItem>
|
|
43
|
+
</List>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Варианты и props
|
|
49
|
+
|
|
50
|
+
### Опциональные props
|
|
51
|
+
|
|
52
|
+
| Prop | Тип | По умолчанию | Описание |
|
|
53
|
+
|---|---|---|---|
|
|
54
|
+
| `children` | `React.ReactNode` | — | Содержимое строки (рендерится внутри `ListItemContent`) |
|
|
55
|
+
| `listItemContentProps` | `React.HTMLAttributes<HTMLDivElement>` | — | Пропсы интерактивного слоя (`ListItemContent`): `onClick`, `onKeyDown`, `role`, `tabIndex`, `className` контента и т.д. |
|
|
56
|
+
| `className` | `string` | — | CSS-класс корневого `<li>` (`ListItem`) |
|
|
57
|
+
| `...HTMLLIAttributes` | — | — | Остальные атрибуты `<li>` спредятся на внутренний `ListItem` |
|
|
58
|
+
|
|
59
|
+
### Пропсы внутри `listItemContentProps`
|
|
60
|
+
|
|
61
|
+
| Prop | Тип | По умолчанию | Описание |
|
|
62
|
+
|---|---|---|---|
|
|
63
|
+
| `onClick` | `(event: React.MouseEvent<HTMLDivElement>) => void` | — | Обработчик клика по всей строке |
|
|
64
|
+
| `onKeyDown` | `(event: React.KeyboardEvent<HTMLDivElement>) => void` | — | Вызывается до внутренней обработки Enter/Space |
|
|
65
|
+
| `className` | `string` | — | Дополнительный CSS-класс, мержится с `styles.listActionItem` на `ListItemContent` |
|
|
66
|
+
| `tabIndex` | `number` | `0` | Фокусируемость по Tab. Можно переопределить (например, `-1`) |
|
|
67
|
+
| `role` | `string` | `"button"` | ARIA-роль. Можно переопределить (например, `"link"`) |
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Дизайн-токены
|
|
72
|
+
|
|
73
|
+
```text
|
|
74
|
+
--triplex-next-ListItem-Background_Hover // фон при hover (desktop)
|
|
75
|
+
--triplex-next-ListItem-BorderColor_Focus // цвет focus-обводки (:focus-visible)
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Класс `styles.listActionItem` навешивается на сам `ListItemContent`, поэтому весь
|
|
79
|
+
фон живёт на одном элементе: базовый фон и `selected`/`selectable` — из
|
|
80
|
+
`.listItemContent`, а hover-фон (`&:hover`) и focus-обводка (`&:focus-visible`) —
|
|
81
|
+
из `.listActionItem` на том же узле.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Инварианты
|
|
86
|
+
|
|
87
|
+
- **`forwardRef`** — обязателен, target — `HTMLDivElement` (внутренний
|
|
88
|
+
`ListItemContent`). Не убирать.
|
|
89
|
+
- **Самодостаточная композиция** — компонент сам рендерит `ListItem` →
|
|
90
|
+
`ListItemContent` (как `ListSortableItem` рендерит `ListItem`). Использовать
|
|
91
|
+
прямо внутри `List`, не оборачивать вручную в `ListItem`/`ListItemContent`.
|
|
92
|
+
- **Интерактивность на `ListItemContent`** — `role`, `tabIndex`, обработчики и
|
|
93
|
+
класс `styles.listActionItem` навешиваются на сам `ListItemContent`, а не на
|
|
94
|
+
отдельную обёртку. Это то, что позволяет одному элементу управлять фоном. Не
|
|
95
|
+
вводить промежуточный `<div>` между `ListItemContent` и hover-фоном — вернётся
|
|
96
|
+
перекрытие слоёв.
|
|
97
|
+
- **Разделение пропсов** — собственные пропсы компонента (`extends
|
|
98
|
+
LiHTMLAttributes`) идут на корневой `ListItem` (`<li>`), интерактивные — только
|
|
99
|
+
через `listItemContentProps` на `ListItemContent`. Не спредить `...rest` на
|
|
100
|
+
`ListItemContent`: тогда пропсы `<li>` и контента снова смешаются.
|
|
101
|
+
- **`role="button"` и `tabIndex={0}`** — задаются по умолчанию, но переопределяются
|
|
102
|
+
через `listItemContentProps` (`{...restListItemContentProps}` идёт после дефолтов). Не
|
|
103
|
+
убирать дефолты без обновления тестов и a11y-контракта.
|
|
104
|
+
- **Клавиатура** — Enter и Space обрабатываются через `isKey` из
|
|
105
|
+
`@sberbusiness/triplex-next/utils/keyboard`; Space вызывает `preventDefault()`,
|
|
106
|
+
затем `event.currentTarget.click()`. Не заменять на прямое сравнение `event.key`.
|
|
107
|
+
- **`data-tx`** — атрибут версии пакета, не убирать.
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## Accessibility
|
|
112
|
+
|
|
113
|
+
- Элемент объявлен как `role="button"` и попадает в tab-order (`tabIndex={0}`).
|
|
114
|
+
- Активация: клик мышью, Enter, Space (через программный `click()`).
|
|
115
|
+
- Focus-индикатор — `border-color` на `:focus-visible`, `outline: none`.
|
|
116
|
+
- **`onKeyDown` вызывается до** внутренней обработки Enter/Space.
|
|
117
|
+
- **Не вкладывай другие интерактивные элементы** (кнопки, ссылки, чекбоксы) внутрь
|
|
118
|
+
`ListActionItem` — получится nested interactive elements. Для выбора с чекбоксом
|
|
119
|
+
используй `ListItemSelectable` без `ListActionItem`; для клика по всей строке в
|
|
120
|
+
табличном списке — `ListTableItem` + `onClickItem`.
|
|
121
|
+
- Для навигации по ссылке предпочтительнее нативный `<a>` / роутер-линк, а не
|
|
122
|
+
`ListActionItem` с `role="link"` — компонент не даёт семантики ссылки из коробки.
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Связанные компоненты
|
|
127
|
+
|
|
128
|
+
- `ListItem` — `<li>`, который `ListActionItem` рендерит сам внутри себя.
|
|
129
|
+
- `ListItemContent` — слой с фоном и padding, который `ListActionItem` рендерит
|
|
130
|
+
сам и на который навешивает интерактивность. Именно он держит весь фон.
|
|
131
|
+
- `ListSortableItem` — образец паттерна: тоже самодостаточный компонент, рендерит
|
|
132
|
+
`ListItem` внутри себя.
|
|
133
|
+
- `ListItemSelectable` — альтернатива для multi-select с чекбоксом. Не комбинировать
|
|
134
|
+
с `ListActionItem` в одной строке без явной a11y-стратегии.
|
|
135
|
+
- `ListTableItem` — использует `onClickItem` на `ListItemContent`, не `ListActionItem`.
|
|
136
|
+
- `CardAction` — аналогичный паттерн интерактивной обёртки в семействе Card.
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Stories
|
|
141
|
+
|
|
142
|
+
Основные истории: `stories/List/ListItem.stories.tsx`
|
|
143
|
+
Файл примера: `stories/List/examples/ListItem/Action.tsx`
|
|
144
|
+
|
|
145
|
+
| Story | Example file | Что демонстрирует |
|
|
146
|
+
|---|---|---|
|
|
147
|
+
| `Action` | `Action.tsx` | `ListActionItem` напрямую внутри `List` |
|
|
148
|
+
| `WithActionItems` (в `List.stories.tsx`) | `examples/List/WithActionItems.tsx` | Список из нескольких кликабельных строк `ListActionItem` |
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## История изменений
|
|
153
|
+
|
|
154
|
+
| Дата | Изменение |
|
|
155
|
+
|---|---|
|
|
156
|
+
| 2026-07-17 | Добавлена story `WithActionItems` в `List.stories.tsx` — список из нескольких `ListActionItem`. |
|
|
157
|
+
| 2026-07-16 | Создан компонент `ListActionItem` — самодостаточная интерактивная строка (hover, focus по Tab, `onClick` + Enter/Space). Сам рендерит `ListItem` + `ListItemContent`; интерактивность и весь фон живут на одном `ListItemContent`. Пропсы разделены: собственные — на `<li>`, интерактивные — через `listItemContentProps`. |
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: ListItem
|
|
3
3
|
category: List
|
|
4
|
-
related: [List, ListItemContent, ListItemSelectable,
|
|
4
|
+
related: [List, ListItemContent, ListActionItem, ListItemSelectable, ListTableItem, ListSortableItem]
|
|
5
5
|
tokens:
|
|
6
6
|
- --triplex-next-ListItem-Background
|
|
7
7
|
- --triplex-next-ListItem-Background_Selected
|
|
8
|
+
- --triplex-next-ListItem-Background_Hover
|
|
9
|
+
- --triplex-next-ListItem-BorderColor_Focus
|
|
8
10
|
stories: stories/List/ListItem.stories.tsx
|
|
9
11
|
version: "1.0"
|
|
10
12
|
---
|
|
@@ -17,12 +19,11 @@ version: "1.0"
|
|
|
17
19
|
(`ListItemContent`, `ListItemSelectable`, `SwipeableArea` и т.п.). Создаёт
|
|
18
20
|
React-контекст `ListItemContext` с состояниями `selected` и `selectable`:
|
|
19
21
|
`selected` управляет подсветкой `ListItemContent`, `selectable` сообщает
|
|
20
|
-
дочернему `ListItemContent`, что элемент выбираемый — для применения
|
|
21
|
-
|
|
22
|
-
через `useEffect`.
|
|
22
|
+
дочернему `ListItemContent`, что элемент выбираемый — для применения скругления
|
|
23
|
+
углов (`border-radius`). Оба флага пишутся `ListItemSelectable` через `useEffect`.
|
|
23
24
|
|
|
24
25
|
Используй `ListItem` когда: нужен произвольный layout строки списка.
|
|
25
|
-
Используй `
|
|
26
|
+
Используй `ListTableItem` когда: нужна готовая табличная строка с support'ом
|
|
26
27
|
swipe-actions и selectable.
|
|
27
28
|
|
|
28
29
|
---
|
|
@@ -41,11 +42,13 @@ swipe-actions и selectable.
|
|
|
41
42
|
## Дизайн-токены
|
|
42
43
|
|
|
43
44
|
Сами стили `ListItem.tsx` пустые — токены применяются в подкомпонентах
|
|
44
|
-
(`ListItemContent`, `ListItemSelectable`):
|
|
45
|
+
(`ListItemContent`, `ListItemSelectable`, `ListActionItem`):
|
|
45
46
|
|
|
46
47
|
```text
|
|
47
|
-
--triplex-next-ListItem-Background // фон по умолчанию
|
|
48
|
-
--triplex-next-ListItem-Background_Selected // фон, когда selected=true
|
|
48
|
+
--triplex-next-ListItem-Background // фон по умолчанию (ListItemContent)
|
|
49
|
+
--triplex-next-ListItem-Background_Selected // фон, когда selected=true (ListItemContent)
|
|
50
|
+
--triplex-next-ListItem-Background_Hover // фон при hover на desktop (ListActionItem на ListItemContent)
|
|
51
|
+
--triplex-next-ListItem-BorderColor_Focus // цвет focus-обводки на desktop (ListActionItem)
|
|
49
52
|
```
|
|
50
53
|
|
|
51
54
|
---
|
|
@@ -62,11 +65,12 @@ swipe-actions и selectable.
|
|
|
62
65
|
## Связанные компоненты
|
|
63
66
|
|
|
64
67
|
- `ListItemContent` — внутренняя обёртка для контента, читает `selected` из контекста.
|
|
68
|
+
- `ListActionItem` — самодостаточный интерактивный элемент: сам рендерит `ListItem` + `ListItemContent` (hover, focus по Tab, клик по всей строке — `onClick`, Enter/Space). Используется напрямую внутри `List`. Другие компоненты семейства его не используют.
|
|
65
69
|
- `ListItemSelectable` — добавляет чекбокс выбора, синхронизирует `selected` в контекст через `useEffect`.
|
|
66
70
|
- `ListItemLoading` — элемент-спиннер для пагинации (используется как последний элемент).
|
|
67
71
|
- `ListItemControls`, `ListItemControlsButton`, `ListItemControlsButtonDropdown` — кнопки действий, обычно внутри `SwipeableArea.rightSwipeableArea`.
|
|
68
72
|
- `ListItemTailLeft` / `ListItemTailRight` — декоративные хвосты для `SwipeableArea`.
|
|
69
|
-
- `
|
|
73
|
+
- `ListTableItem` — комбинированная высокоуровневая обёртка.
|
|
70
74
|
|
|
71
75
|
---
|
|
72
76
|
|
|
@@ -78,6 +82,7 @@ swipe-actions и selectable.
|
|
|
78
82
|
| Story | Example file | Что демонстрирует |
|
|
79
83
|
|---|---|---|
|
|
80
84
|
| `Default` | `Default.tsx` | Базовый элемент с произвольным контентом |
|
|
85
|
+
| `Action` | `Action.tsx` | Использование `ListActionItem` |
|
|
81
86
|
| `Loading` | `Loading.tsx` | `ListItemLoading` как последний элемент при пагинации |
|
|
82
87
|
| `Selectable` | `Selectable.tsx` | Использование `ListItemSelectable` внутри `ListItem` |
|
|
83
88
|
| `Swipeable` | `Swipeable.tsx` | `ListItem` внутри `SwipeableArea` с `ListItemControls` |
|
|
@@ -90,6 +95,7 @@ swipe-actions и selectable.
|
|
|
90
95
|
|---|---|
|
|
91
96
|
| 2026-04-29 | Создан документ |
|
|
92
97
|
| 2026-05-21 | `ListItemContext` расширен полями `selectable` / `setSelectable`. Исправлен цвет токена `Background_Selected` в тёмной теме (`ColorDarkNeutral.10` → `ColorDarkNeutral.60`). |
|
|
98
|
+
| 2026-07-16 | Добавлен самодостаточный компонент `ListActionItem` (сам рендерит `ListItem` + `ListItemContent`; hover, focus по Tab, `onClick` + Enter/Space). Координация фона через контекст не понадобилась — `ListItemContext` без изменений. Другие компоненты семейства его не используют. |
|
|
93
99
|
|
|
94
100
|
---
|
|
95
101
|
|
|
@@ -114,6 +120,25 @@ export const Default = () => (
|
|
|
114
120
|
);
|
|
115
121
|
```
|
|
116
122
|
|
|
123
|
+
### Action
|
|
124
|
+
|
|
125
|
+
`stories/List/examples/ListItem/Action.tsx`
|
|
126
|
+
|
|
127
|
+
```tsx
|
|
128
|
+
import React from "react";
|
|
129
|
+
import { List, ListActionItem } from "@sberbusiness/triplex-next";
|
|
130
|
+
|
|
131
|
+
export const Action = () => (
|
|
132
|
+
<div style={{ maxWidth: "500px" }}>
|
|
133
|
+
<List>
|
|
134
|
+
<ListActionItem listItemContentProps={{ onClick: () => alert("Клик по элементу списка") }}>
|
|
135
|
+
Элемент списка
|
|
136
|
+
</ListActionItem>
|
|
137
|
+
</List>
|
|
138
|
+
</div>
|
|
139
|
+
);
|
|
140
|
+
```
|
|
141
|
+
|
|
117
142
|
### Loading
|
|
118
143
|
|
|
119
144
|
`stories/List/examples/ListItem/Loading.tsx`
|
|
@@ -67,7 +67,7 @@ version: "1.0"
|
|
|
67
67
|
|
|
68
68
|
- Чекбокс — встроенный `<Checkbox>` из библиотеки, имеет нативный `<input type="checkbox">`.
|
|
69
69
|
- Клик по любой части `.childrenWrapper` **не** переключает чекбокс — только клик по самому чекбоксу или его расширенной области (`.checkboxLabelClickArea`, `+4px` со всех сторон).
|
|
70
|
-
- Если нужен клик по всей строке — оборачивай в `<label>` или используй `
|
|
70
|
+
- Если нужен клик по всей строке — оборачивай в `<label>` или используй `ListTableItem` + `onClickItem`.
|
|
71
71
|
|
|
72
72
|
---
|
|
73
73
|
|
|
@@ -76,7 +76,7 @@ version: "1.0"
|
|
|
76
76
|
- `ListItem` — родительский `<li>`, провайдер `ListItemContext`.
|
|
77
77
|
- `ListItemContent` — потребитель `ListItemContext.selected` для применения класса `selected`.
|
|
78
78
|
- `Checkbox` — встроенный чекбокс выбора.
|
|
79
|
-
- `
|
|
79
|
+
- `ListTableItem` — использует `ListItemSelectable` автоматически в selectable-варианте.
|
|
80
80
|
|
|
81
81
|
---
|
|
82
82
|
|
|
@@ -82,7 +82,7 @@ sticky-футер с агрегатами и действиями. Сам по
|
|
|
82
82
|
|
|
83
83
|
| Story | Example file | Что демонстрирует |
|
|
84
84
|
|---|---|---|
|
|
85
|
-
| `Default` | `Default.tsx` | Production-like пример: TabsLine + `ChipGroup`-фильтры + selectable `
|
|
85
|
+
| `Default` | `Default.tsx` | Production-like пример: TabsLine + `ChipGroup`-фильтры + selectable `ListTableItem` + sticky Header при выделении + sticky Footer с суммой и действиями + LightBox с расширенными фильтрами + пустое состояние |
|
|
86
86
|
|
|
87
87
|
---
|
|
88
88
|
|
|
@@ -133,7 +133,7 @@ import {
|
|
|
133
133
|
ListEmptyState,
|
|
134
134
|
ListItemControlsButton,
|
|
135
135
|
ListItemControlsButtonDropdown,
|
|
136
|
-
|
|
136
|
+
ListTableItem,
|
|
137
137
|
ListMaster,
|
|
138
138
|
MarkerStatus,
|
|
139
139
|
MultiselectField,
|
|
@@ -561,7 +561,6 @@ export const Default = () => {
|
|
|
561
561
|
display: "flex",
|
|
562
562
|
flexDirection: "column",
|
|
563
563
|
gap: 8,
|
|
564
|
-
padding: "12px 12px 0 12px",
|
|
565
564
|
}}
|
|
566
565
|
>
|
|
567
566
|
{statusOptions.map((opt) => {
|
|
@@ -621,7 +620,7 @@ export const Default = () => {
|
|
|
621
620
|
{sortedItems.length ? (
|
|
622
621
|
<List>
|
|
623
622
|
{sortedItems.map((item) => (
|
|
624
|
-
<
|
|
623
|
+
<ListTableItem
|
|
625
624
|
key={item.id}
|
|
626
625
|
selected={selectedListItemIds.includes(item.id)}
|
|
627
626
|
onSelect={(sel) => handleSelectListItem(item.id, sel)}
|
|
@@ -659,7 +658,7 @@ export const Default = () => {
|
|
|
659
658
|
<MarkerStatus status={statusToMarker[item.status]} size={EComponentSize.LG}>
|
|
660
659
|
{item.statusText}
|
|
661
660
|
</MarkerStatus>
|
|
662
|
-
</
|
|
661
|
+
</ListTableItem>
|
|
663
662
|
))}
|
|
664
663
|
</List>
|
|
665
664
|
) : (
|