@sberbusiness/triplex-next-mcp-server 1.48.0-beta → 1.50.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/Amount.md +2 -1
- package/bundle/components/Badge.md +2 -1
- package/bundle/components/BodyPage.md +2 -1
- package/bundle/components/Button.md +5 -1
- package/bundle/components/ButtonDropdownExtended.md +3 -1
- package/bundle/components/ButtonIcon.md +3 -1
- package/bundle/components/Calendar.md +3 -1
- package/bundle/components/CardAction.md +1 -0
- package/bundle/components/CheckboxXGroup.md +2 -1
- package/bundle/components/Chip.md +2 -1
- package/bundle/components/ChipMonthYearPicker.md +2 -1
- package/bundle/components/ChipMultiselect.md +4 -1
- package/bundle/components/ChipOptions.md +2 -1
- package/bundle/components/ChipSort.md +4 -1
- package/bundle/components/CollapsibleTree.md +2 -1
- package/bundle/components/ComposedKeyDownListener.md +4 -3
- package/bundle/components/DateField.md +7 -1
- package/bundle/components/Divider.md +85 -138
- package/bundle/components/DocumentNumberEdit.md +173 -214
- package/bundle/components/Dropdown.md +11 -1
- package/bundle/components/Ellipsis.md +131 -147
- package/bundle/components/FooterPage.md +3 -1
- package/bundle/components/FormField.md +2 -1
- package/bundle/components/Gap.md +1 -1
- package/bundle/components/Header.md +1 -0
- package/bundle/components/HeaderPage.md +3 -1
- package/bundle/components/HelpBox.md +2 -1
- package/bundle/components/IconWrapper.md +10 -6
- package/bundle/components/ImageGallery.md +2 -1
- package/bundle/components/ImageGalleryExtended.md +2 -1
- package/bundle/components/IslandAccordion.md +6 -1
- package/bundle/components/KeyDownListener.md +3 -2
- package/bundle/components/LightBox.md +7 -1
- package/bundle/components/List.md +2 -1
- package/bundle/components/ListActionItem.md +2 -1
- package/bundle/components/ListItem.md +3 -1
- package/bundle/components/ListItemControlsButton.md +2 -1
- package/bundle/components/ListItemSelectable.md +2 -1
- package/bundle/components/ListMasterFooter.md +2 -1
- package/bundle/components/ListMasterHeader.md +2 -1
- package/bundle/components/ListSortable.md +2 -1
- package/bundle/components/ListSortableItem.md +2 -1
- package/bundle/components/ListTableItem.md +4 -1
- package/bundle/components/LoaderMiddle.md +5 -1
- package/bundle/components/LoaderScreen.md +7 -1
- package/bundle/components/LoaderSmall.md +10 -4
- package/bundle/components/MaskedField.md +3 -1
- package/bundle/components/MediaWidth.md +2 -1
- package/bundle/components/MobileView.md +2 -1
- package/bundle/components/ModalWindow.md +4 -1
- package/bundle/components/MonthYearField.md +4 -1
- package/bundle/components/Notification.md +1 -0
- package/bundle/components/Overlay.md +7 -2
- package/bundle/components/Pagination.md +1 -7
- package/bundle/components/Radio.md +238 -115
- package/bundle/components/RadioXGroup.md +259 -0
- package/bundle/components/RadioYGroup.md +266 -0
- package/bundle/components/SegmentedControl.md +505 -158
- package/bundle/components/SelectExtendedField.md +2 -1
- package/bundle/components/SelectField.md +4 -1
- package/bundle/components/Skeleton.md +140 -69
- package/bundle/components/Spoiler.md +245 -63
- package/bundle/components/Step.md +257 -68
- package/bundle/components/SuggestField.md +30 -18
- package/bundle/components/Tabs.md +2 -1
- package/bundle/components/TabsLine.md +2 -1
- package/bundle/components/TextField.md +8 -4
- package/bundle/components/TextareaField.md +2 -1
- package/bundle/components/ThemeProvider.md +2 -1
- package/bundle/components/Tooltip.md +6 -3
- package/bundle/guides/context.md +4 -1
- package/bundle/manifest.json +32 -10
- package/bundle/release-notes/1.49.0.mdx +78 -0
- package/bundle/release-notes/1.50.0.mdx +35 -0
- package/bundle/release-notes/1.51.0.mdx +7 -0
- package/bundle/tokens.json +161 -11
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: SelectExtendedField
|
|
3
3
|
category: SelectExtendedField
|
|
4
|
-
related: [SelectField, MultiselectField, SuggestField,
|
|
4
|
+
related: [SelectField, MultiselectField, SuggestField, Dropdown, FormField, KeyDownListener, IconWrapper, LoaderSmall]
|
|
5
5
|
tokens: []
|
|
6
6
|
stories: stories/SelectExtendedField/SelectExtendedField.stories.tsx
|
|
7
7
|
version: "1.0"
|
|
@@ -203,6 +203,7 @@ version: "1.0"
|
|
|
203
203
|
|---|---|
|
|
204
204
|
| 2026-08-07 | Создан документ AI-ready для `SelectExtendedField` (TRI-74). |
|
|
205
205
|
| 2026-08-07 | AI-рефакторинг (TRI-74): `onOpen` / `onClose` сравнивают предыдущее значение `opened` вместо флага «смонтирован» — колбэки больше не срабатывают ложно при двойном маунте в React 18 StrictMode. Удалены ссылки на несуществующие CSS-классы в `SelectExtendedFieldTarget` (в `class` попадал литерал `undefined`). Клик по кнопке очистки больше не раскрывает выпадающий блок — всплытие останавливается, как в `Chip.Select`. Слушатель `mousedown` навешивается только пока блок открыт, callback-ref стабилизирован через `useCallback`, убран мёртвый внутренний `targetRef` в `SelectExtendedFieldTarget`, дедуплицирован список опций десктопной и мобильной версий в `SelectExtendedFieldDropdownDefault`. JSDoc на всех props, unit-тесты разбиты по субкомпонентам и расширены с 42 до 69 кейсов. Stories переведены на modern pattern. Публичный API не изменён. |
|
|
206
|
+
| 2026-09-29 | Аудит симметрии `related` (TRI-156): из `related` убраны несимметричные имена (`Chip`). Пояснения к убранным именам сохранены прозой в «Связанные компоненты»; публичный API и поведение не затронуты. |
|
|
206
207
|
|
|
207
208
|
---
|
|
208
209
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: SelectField
|
|
3
3
|
category: SelectField
|
|
4
|
-
related: [SelectExtendedField, MultiselectField, SuggestField,
|
|
4
|
+
related: [SelectExtendedField, MultiselectField, SuggestField, Dropdown, Pagination, FormField]
|
|
5
5
|
tokens: []
|
|
6
6
|
stories: stories/SelectField/SelectField.stories.tsx
|
|
7
7
|
version: "1.0"
|
|
@@ -171,6 +171,8 @@ version: "1.0"
|
|
|
171
171
|
`IChipSelectProps` собирается из `ISelectFieldProps`.
|
|
172
172
|
- `Dropdown` — выпадающий блок, `DropdownList` / `DropdownListItem` и `DropdownListContext`,
|
|
173
173
|
через который поднимается активная опция для `aria-activedescendant`.
|
|
174
|
+
- `FormField` — семейство строительных блоков поля: `SelectExtendedField.Target` собран на `FormFieldTarget`,
|
|
175
|
+
поэтому лейбл, статусы и слоты приходят в публичный API `SelectField` оттуда.
|
|
174
176
|
- `Pagination` — потребитель внутри библиотеки: `PaginationSelect` оборачивает `SelectField`
|
|
175
177
|
для выбора количества элементов на странице и опирается на проброс `aria-labelledby`
|
|
176
178
|
и на пустой `targetProps.fieldLabel`.
|
|
@@ -203,6 +205,7 @@ version: "1.0"
|
|
|
203
205
|
| Дата | Изменение |
|
|
204
206
|
|---|---|
|
|
205
207
|
| 2026-09-03 | Создан документ (TRI-75). AI-рефакторинг: удалён мёртвый внутренний `targetRef`, внешний `ref` пробрасывается напрямую и больше не пересоздаётся на каждый рендер; идентификатор списка переведён с `useRef(uniqueId())` на `useState(() => uniqueId())`, чтобы счётчик не крутился на каждом рендере; параметры рендер-функций перестали затенять `props` компонента; импорты приведены к алиасу пакета; JSDoc на всех props и на компоненте. Unit-тесты расширены с 15 до 24 кейсов (`onChange` с аргументом, опции и выбранное значение, `aria-activedescendant` через `DropdownListContext`, стабильность `listId`, ref-target). Stories переведены на modern pattern, `States` разделена на `Statuses` и `Loading`. Публичный API не изменён |
|
|
208
|
+
| 2026-09-29 | Аудит симметрии `related` (TRI-156): из `related` убраны несимметричные имена (`Chip`); добавлены обратные ссылки (`FormField`). Пояснения к убранным именам сохранены прозой в «Связанные компоненты»; публичный API и поведение не затронуты. |
|
|
206
209
|
|
|
207
210
|
---
|
|
208
211
|
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: Skeleton
|
|
3
|
-
category:
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
category: Loaders
|
|
4
|
+
related: [LoaderMiddle]
|
|
5
|
+
tokens:
|
|
6
|
+
- Skeleton.BackgroundColor_Type1_Start
|
|
7
|
+
- Skeleton.BackgroundColor_Type1_End
|
|
8
|
+
- Skeleton.BackgroundColor_Type2_Start
|
|
9
|
+
- Skeleton.BackgroundColor_Type2_End
|
|
10
|
+
- Skeleton.BackgroundColor_Type3_Start
|
|
11
|
+
- Skeleton.BackgroundColor_Type3_End
|
|
8
12
|
stories: stories/Skeleton/Skeleton.stories.tsx
|
|
9
13
|
version: "1.0"
|
|
10
14
|
---
|
|
@@ -13,112 +17,112 @@ version: "1.0"
|
|
|
13
17
|
|
|
14
18
|
## Назначение
|
|
15
19
|
|
|
16
|
-
|
|
17
|
-
`border-radius: 16px` и `flex-grow: 1`. Поддерживает две темы (`DARK` /
|
|
18
|
-
`LIGHT`) — отличаются фоновыми переменными в @keyframes.
|
|
20
|
+
Плейсхолдер-блок на месте контента, который ещё не загрузился: скруглённый прямоугольник, пульсирующий цветом фона. Форму и размер задаёт не компонент, а потребитель — собственных размеров у `Skeleton` нет.
|
|
19
21
|
|
|
20
|
-
Используй когда:
|
|
21
|
-
layout shift и психологически сократить ощущаемое время загрузки. Для
|
|
22
|
-
точечного индикатора — `Loader`/`LoaderScreen`.
|
|
22
|
+
Используй когда: известна будущая раскладка экрана и нужно показать её каркас во время загрузки — карточки, строки списка, аватары, блоки текста. Скелетон сохраняет геометрию страницы и не даёт контенту «прыгать» после загрузки.
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
```text
|
|
29
|
-
src/components/Skeleton/
|
|
30
|
-
├── Skeleton.tsx # FC; <div> + класс по type
|
|
31
|
-
├── enums.ts # ESkeletonType (DARK | LIGHT)
|
|
32
|
-
├── styles/Skeleton.module.less # 2 @keyframes пульсации
|
|
33
|
-
├── index.ts
|
|
34
|
-
└── __tests__/
|
|
35
|
-
```
|
|
24
|
+
Не используй когда:
|
|
25
|
+
- Раскладка заранее неизвестна или загрузка короткая — возьми спиннер: `LoaderSmall` (внутри кнопки/поля), `LoaderMiddle` (внутри блока), `LoaderScreen` (поверх области с затемнением).
|
|
26
|
+
- Нужно перекрыть уже отрисованный контент на время обновления — это `LoaderScreen`, а не скелетон.
|
|
27
|
+
- Нужен просто пустой отступ — `Gap`.
|
|
36
28
|
|
|
37
29
|
---
|
|
38
30
|
|
|
39
31
|
## Варианты и props
|
|
40
32
|
|
|
41
|
-
###
|
|
33
|
+
### Обязательные props
|
|
42
34
|
|
|
43
|
-
|
|
44
|
-
|---|---|---|---|
|
|
45
|
-
| `type` | `ESkeletonType` | `DARK` | Тема (DARK/LIGHT). Влияет на анимационные переменные. |
|
|
46
|
-
| `...HTMLAttributes` | — | — | На `<div>`. Размер задаётся через `style`/`className`. |
|
|
35
|
+
Обязательных props нет.
|
|
47
36
|
|
|
48
|
-
###
|
|
37
|
+
### Опциональные props
|
|
49
38
|
|
|
50
|
-
|
|
39
|
+
| Prop | Тип | По умолчанию | Описание |
|
|
40
|
+
|---|---|---|---|
|
|
41
|
+
| `type` | `ESkeletonType` | `ESkeletonType.TYPE_2` | Цветовая схема пульсации под фон, на котором лежит скелетон. |
|
|
51
42
|
|
|
52
|
-
|
|
43
|
+
Компонент расширяет `React.HTMLAttributes<HTMLDivElement>` — принимает все стандартные атрибуты `<div>` (`className`, `style`, `aria-*`, `data-*` и т.д.).
|
|
53
44
|
|
|
54
|
-
|
|
45
|
+
### Значения `ESkeletonType`
|
|
55
46
|
|
|
56
|
-
|
|
47
|
+
| Значение | Заливка | Для какого фона |
|
|
48
|
+
|---|---|---|
|
|
49
|
+
| `TYPE_1` | Непрозрачные нейтральные серые | Светло-серые поверхности, где полупрозрачность «проваливается» и скелетон плохо виден |
|
|
50
|
+
| `TYPE_2` (по умолчанию) | Полупрозрачный тёмный тинт | Обычные светлые поверхности (белая карточка, фон страницы) |
|
|
51
|
+
| `TYPE_3` | Полупрозрачный светлый тинт | Тёмные и брендовые цветные поверхности |
|
|
57
52
|
|
|
58
|
-
|
|
59
|
-
.skeleton.dark { animation: skeleton-dark-pulse 2s ease-in-out infinite; }
|
|
60
|
-
@keyframes skeleton-dark-pulse {
|
|
61
|
-
0% { background-color: var(--triplex-next-Skeleton-BackgroundColor_Dark_Start); }
|
|
62
|
-
50% { background-color: var(--triplex-next-Skeleton-BackgroundColor_Dark_End); }
|
|
63
|
-
100% { background-color: var(--triplex-next-Skeleton-BackgroundColor_Dark_Start); }
|
|
64
|
-
}
|
|
65
|
-
```
|
|
53
|
+
`TYPE_2` и `TYPE_3` — полупрозрачные: результат зависит от того, что лежит под скелетоном. В тёмной теме пары токенов инвертированы, поэтому смысл («тинт по контрасту к своей поверхности») сохраняется в обеих темах и подбирать `type` под тему вручную не нужно — только под фон.
|
|
66
54
|
|
|
67
|
-
|
|
68
|
-
- **`prefers-reduced-motion`** не учитывается — потенциальный a11y-долг.
|
|
55
|
+
### Ограничения
|
|
69
56
|
|
|
70
|
-
|
|
57
|
+
- **У компонента нет собственных размеров.** В стилях заданы только `border-radius: 16px` и `flex-grow: 1`. Без размера от потребителя скелетон схлопнется в нулевую высоту. Задавай размер одним из способов: `style`/`className` с `width`/`height`, либо положи скелетон во flex-контейнер с заданной высотой — тогда сработает `flex-grow`.
|
|
58
|
+
- `border-radius` фиксирован в стилях и через props не настраивается — перекрывается только собственным `className`/`style`.
|
|
59
|
+
- `Skeleton` задуман как пустой плейсхолдер. `children` технически проходят на корневой `<div>` через spread и отрисуются, но контент внутри пульсирующего блока не предусмотрен дизайном — каркас из нескольких блоков собирается композицией нескольких `Skeleton` в разметке потребителя.
|
|
71
60
|
|
|
72
|
-
|
|
73
|
-
- `flex-grow: 1` — растягивается во flex-контейнере. **В блочном родителе** Skeleton сам по себе не имеет ширины — нужна `style.width` или `className` с шириной.
|
|
61
|
+
---
|
|
74
62
|
|
|
75
|
-
|
|
63
|
+
## Дизайн-токены
|
|
76
64
|
|
|
77
|
-
|
|
65
|
+
Переопределяются через `ThemeProvider` (prop `tokens`) — см. `ThemeProvider-ai.md` →
|
|
66
|
+
«Как переопределять токены». Значения по умолчанию — `src/components/DesignTokens/components/Skeleton.ts`.
|
|
78
67
|
|
|
79
|
-
|
|
68
|
+
```text
|
|
69
|
+
Skeleton.BackgroundColor_Type1_Start
|
|
70
|
+
Skeleton.BackgroundColor_Type1_End
|
|
71
|
+
Skeleton.BackgroundColor_Type2_Start
|
|
72
|
+
Skeleton.BackgroundColor_Type2_End
|
|
73
|
+
Skeleton.BackgroundColor_Type3_Start
|
|
74
|
+
Skeleton.BackgroundColor_Type3_End
|
|
75
|
+
```
|
|
80
76
|
|
|
81
|
-
|
|
77
|
+
Пара `Start`/`End` задаёт ключевые кадры пульсации: `Start` — состояние на 0% и 100%, `End` — на 50%. Переопределять их имеет смысл только парой, иначе анимация станет несимметричной.
|
|
82
78
|
|
|
83
79
|
---
|
|
84
80
|
|
|
85
81
|
## Инварианты
|
|
86
82
|
|
|
87
|
-
- **`
|
|
88
|
-
-
|
|
89
|
-
-
|
|
90
|
-
-
|
|
91
|
-
-
|
|
92
|
-
- **`
|
|
93
|
-
-
|
|
94
|
-
- **`
|
|
83
|
+
- **`forwardRef`** — обязателен, не убирать. `ref` пробрасывается на корневой `<div>`.
|
|
84
|
+
- **Имена публичного API**: компонент `Skeleton`, интерфейс `ISkeletonProps`, prop `type`, enum `ESkeletonType` и его строковые значения (`"type_1"`, `"type_2"`, `"type_3"`) — менять нельзя (breaking change).
|
|
85
|
+
- **Дефолт `type` — `ESkeletonType.TYPE_2`.** Смена дефолта меняет внешний вид у всех, кто не передаёт `type` явно.
|
|
86
|
+
- **`barrel src/components/Skeleton/index.ts`** экспортирует `./Skeleton` и `./enums` — оба экспорта сохранять.
|
|
87
|
+
- **Корневой DOM-элемент — `<div>`** без ARIA-роли; собственного содержимого компонент не рендерит.
|
|
88
|
+
- **`data-tx`** проставляется после спреда `...htmlDivAttributes`, то есть потребитель его не перекрывает. Порядок атрибутов в JSX не менять.
|
|
89
|
+
- **CSS-классы `skeleton`, `type1`, `type2`, `type3`** в `Skeleton.module.less` проверяются unit-тестами. Visual baseline (`loaders-skeleton--visual-tests`) фиксирует только геометрию из `.skeleton`: в story анимация выключена декоратором, а фон задан inline, поэтому цвета типов визуальным тестом не покрыты — классы `type1/2/3` объявляют лишь `animation`, а цвет приходит из `@keyframes`.
|
|
90
|
+
- **`displayName = "Skeleton"`** — проверяется тестом.
|
|
91
|
+
- **Анимация задаётся только в LESS** (`skeleton-type{N}-pulse`, 2s ease-in-out infinite). Имена keyframes локальны для CSS-модуля; потребитель гасит анимацию своим `className`/`style` (story `Visual tests` для скриншотов делает это глобальным правилом `* { animation: none !important; }` в декораторе).
|
|
95
92
|
|
|
96
93
|
---
|
|
97
94
|
|
|
98
95
|
## Accessibility
|
|
99
96
|
|
|
100
|
-
|
|
101
|
-
- **Нет `prefers-reduced-motion` media-query** — анимация играет всегда. Пользователи с предпочтением reduced motion увидят пульсацию (тех-долг).
|
|
97
|
+
Компонент не интерактивный и по смыслу декоративный: в штатном использовании это пустой `<div>` без роли, без текста, без фокуса. ARIA-семантику загрузки компонент намеренно не хардкодит — её задаёт потребитель на контейнере загружаемой области:
|
|
102
98
|
|
|
103
|
-
|
|
99
|
+
- пометь область `aria-busy="true"` на время загрузки и сними атрибут после;
|
|
100
|
+
- если пользователю нужно объявление о загрузке — сделай `aria-live`-регион с текстом рядом, скелетон для этого не подходит (библиотека мультиязычная, компонент не содержит текста);
|
|
101
|
+
- сами скелетоны имеет смысл скрыть от скринридера (`aria-hidden="true"` через spread) — иначе в дереве доступности остаются пустые узлы.
|
|
104
102
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
- `--triplex-next-Skeleton-BackgroundColor_Light_Start` / `_End`.
|
|
108
|
-
- `--triplex-next-Skeleton-BackgroundColor_Dark_Start` / `_End`.
|
|
103
|
+
Ограничение: пульсация не отключается по `prefers-reduced-motion` — если это важно, гаси анимацию своим `className`.
|
|
109
104
|
|
|
110
105
|
---
|
|
111
106
|
|
|
112
107
|
## Связанные компоненты
|
|
113
108
|
|
|
114
|
-
- `
|
|
109
|
+
- `LoaderMiddle` (`src/components/Loader/`) — спиннер для блока или секции: альтернатива, решающая ту же задачу (первая загрузка блока) другим компромиссом — берётся, когда будущая раскладка заранее неизвестна.
|
|
110
|
+
|
|
111
|
+
`LoaderSmall` (внутри кнопки или поля) и `LoaderScreen` (оверлей поверх уже отрисованного контента при обновлении) решают другие задачи, поэтому в `related` не входят — см. «Не используй когда».
|
|
115
112
|
|
|
116
113
|
---
|
|
117
114
|
|
|
118
115
|
## Stories
|
|
119
116
|
|
|
120
|
-
`stories/Skeleton/Skeleton.stories.tsx`
|
|
121
|
-
|
|
117
|
+
Основные истории: `stories/Skeleton/Skeleton.stories.tsx`
|
|
118
|
+
Файлы примеров: `stories/Skeleton/examples/`
|
|
119
|
+
|
|
120
|
+
| Story | Example file | Что демонстрирует |
|
|
121
|
+
|---|---|---|
|
|
122
|
+
| `Playground` | — | Интерактивный выбор `type` на макете из списка и карточек |
|
|
123
|
+
| `Default` | `DefaultExample.tsx` | Четыре блока с размерами через `style`, тип по умолчанию |
|
|
124
|
+
| `Types` | `TypesExample.tsx` | `TYPE_1`, `TYPE_2`, `TYPE_3`, каждый на подходящем ему фоне |
|
|
125
|
+
| `VisualTests` | — | Скриншот-регрессия: все три типа с отключённой анимацией |
|
|
122
126
|
|
|
123
127
|
---
|
|
124
128
|
|
|
@@ -126,4 +130,71 @@ src/components/Skeleton/
|
|
|
126
130
|
|
|
127
131
|
| Дата | Изменение |
|
|
128
132
|
|---|---|
|
|
129
|
-
| 2026-
|
|
133
|
+
| 2026-09-28 | Создан документ. AI-рефакторинг (TRI-76): `Skeleton` переведён с `React.FC` на `forwardRef`, добавлен `displayName`, JSDoc на интерфейсе props; unit-тесты расширены (ref, `displayName`, `data-tx`, проброс html-атрибутов). |
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Примеры использования
|
|
138
|
+
|
|
139
|
+
### Default
|
|
140
|
+
|
|
141
|
+
`stories/Skeleton/examples/DefaultExample.tsx`
|
|
142
|
+
|
|
143
|
+
```tsx
|
|
144
|
+
import React from "react";
|
|
145
|
+
import { Skeleton } from "@sberbusiness/triplex-next";
|
|
146
|
+
|
|
147
|
+
export const DefaultExample = () => (
|
|
148
|
+
<div style={{ display: "flex", flexWrap: "wrap", gap: "24px", padding: "24px" }}>
|
|
149
|
+
<Skeleton style={{ height: "80px", width: "calc(50% - 12px)" }} />
|
|
150
|
+
<Skeleton style={{ height: "80px", width: "calc(50% - 12px)" }} />
|
|
151
|
+
<Skeleton style={{ height: "80px", width: "calc(50% - 12px)" }} />
|
|
152
|
+
<Skeleton style={{ height: "80px", width: "calc(50% - 12px)" }} />
|
|
153
|
+
</div>
|
|
154
|
+
);
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Types
|
|
158
|
+
|
|
159
|
+
`stories/Skeleton/examples/TypesExample.tsx`
|
|
160
|
+
|
|
161
|
+
```tsx
|
|
162
|
+
import React from "react";
|
|
163
|
+
import { Skeleton, ESkeletonType } from "@sberbusiness/triplex-next";
|
|
164
|
+
|
|
165
|
+
export const TypesExample = () => (
|
|
166
|
+
<div style={{ display: "flex", flexDirection: "column", gap: "24px" }}>
|
|
167
|
+
<div>
|
|
168
|
+
<div style={{ marginBottom: "8px", fontSize: "16px", fontWeight: "700" }}>TYPE_1</div>
|
|
169
|
+
<div style={{ display: "flex", flexWrap: "wrap", gap: "24px", padding: "24px", background: "#EEF0F4" }}>
|
|
170
|
+
<Skeleton type={ESkeletonType.TYPE_1} style={{ height: "80px", width: "calc(50% - 12px)" }} />
|
|
171
|
+
<Skeleton type={ESkeletonType.TYPE_1} style={{ height: "80px", width: "calc(50% - 12px)" }} />
|
|
172
|
+
<Skeleton type={ESkeletonType.TYPE_1} style={{ height: "80px", width: "calc(50% - 12px)" }} />
|
|
173
|
+
<Skeleton type={ESkeletonType.TYPE_1} style={{ height: "80px", width: "calc(50% - 12px)" }} />
|
|
174
|
+
</div>
|
|
175
|
+
</div>
|
|
176
|
+
<div>
|
|
177
|
+
<div style={{ marginBottom: "8px", fontSize: "16px", fontWeight: "700" }}>TYPE_2</div>
|
|
178
|
+
<div style={{ display: "flex", flexWrap: "wrap", gap: "24px", padding: "24px" }}>
|
|
179
|
+
<Skeleton type={ESkeletonType.TYPE_2} style={{ height: "80px", width: "calc(50% - 12px)" }} />
|
|
180
|
+
<Skeleton type={ESkeletonType.TYPE_2} style={{ height: "80px", width: "calc(50% - 12px)" }} />
|
|
181
|
+
<Skeleton type={ESkeletonType.TYPE_2} style={{ height: "80px", width: "calc(50% - 12px)" }} />
|
|
182
|
+
<Skeleton type={ESkeletonType.TYPE_2} style={{ height: "80px", width: "calc(50% - 12px)" }} />
|
|
183
|
+
</div>
|
|
184
|
+
</div>
|
|
185
|
+
<div>
|
|
186
|
+
<div style={{ marginBottom: "8px", fontSize: "16px", fontWeight: "700" }}>TYPE_3</div>
|
|
187
|
+
<div
|
|
188
|
+
className="skeleton-type3-background"
|
|
189
|
+
style={{ display: "flex", flexWrap: "wrap", gap: "24px", padding: "24px" }}
|
|
190
|
+
>
|
|
191
|
+
<Skeleton type={ESkeletonType.TYPE_3} style={{ height: "80px", width: "calc(50% - 12px)" }} />
|
|
192
|
+
<Skeleton type={ESkeletonType.TYPE_3} style={{ height: "80px", width: "calc(50% - 12px)" }} />
|
|
193
|
+
<Skeleton type={ESkeletonType.TYPE_3} style={{ height: "80px", width: "calc(50% - 12px)" }} />
|
|
194
|
+
<Skeleton type={ESkeletonType.TYPE_3} style={{ height: "80px", width: "calc(50% - 12px)" }} />
|
|
195
|
+
</div>
|
|
196
|
+
</div>
|
|
197
|
+
</div>
|
|
198
|
+
);
|
|
199
|
+
```
|
|
200
|
+
|