@sberbusiness/triplex-next-mcp-server 1.43.0-beta → 1.45.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/README.md +7 -6
- package/bundle/components/AlertContext.md +11 -8
- package/bundle/components/AlertProcess.md +16 -12
- package/bundle/components/Badge.md +6 -3
- package/bundle/components/BodyPage.md +72 -4
- package/bundle/components/Button.md +46 -43
- package/bundle/components/ButtonDropdownExtended.md +3 -2
- package/bundle/components/ButtonIcon.md +7 -4
- package/bundle/components/Calendar.md +62 -59
- package/bundle/components/Caption.md +26 -23
- package/bundle/components/Checkbox.md +32 -29
- package/bundle/components/CheckboxTreeExtended.md +9 -5
- package/bundle/components/Chip.md +44 -41
- package/bundle/components/CodeText.md +26 -23
- package/bundle/components/Col.md +1 -2
- package/bundle/components/CollapsibleTree.md +8 -5
- package/bundle/components/CollapsibleTreeExtended.md +6 -1
- package/bundle/components/DatePickerExtended.md +409 -262
- package/bundle/components/Dropdown.md +33 -28
- package/bundle/components/EmptyView.md +12 -5
- package/bundle/components/ExpandAnimation.md +263 -218
- package/bundle/components/Footer.md +235 -278
- package/bundle/components/FooterPage.md +6 -2
- package/bundle/components/FormField.md +44 -41
- package/bundle/components/FormGroup.md +192 -52
- package/bundle/components/Header.md +491 -211
- package/bundle/components/HeaderPage.md +6 -2
- package/bundle/components/ImageGallery.md +33 -34
- package/bundle/components/ImageGalleryExtended.md +33 -34
- package/bundle/components/Island.md +52 -14
- package/bundle/components/LightBox.md +25 -18
- package/bundle/components/Link.md +211 -96
- package/bundle/components/ListActionItem.md +7 -4
- package/bundle/components/ListItem.md +11 -8
- package/bundle/components/ListItemControlsButton.md +16 -13
- package/bundle/components/ListItemControlsButtonDropdown.md +9 -6
- package/bundle/components/ListItemSelectable.md +7 -4
- package/bundle/components/ListMasterFooter.md +8 -5
- package/bundle/components/ListMasterHeader.md +8 -5
- package/bundle/components/ListSortableItem.md +11 -8
- package/bundle/components/ListTableItem.md +7 -4
- package/bundle/components/LoaderMiddle.md +7 -4
- package/bundle/components/LoaderScreen.md +11 -8
- package/bundle/components/LoaderSmall.md +7 -4
- package/bundle/components/Marker.md +184 -69
- package/bundle/components/MarkerStatus.md +206 -88
- package/bundle/components/MaskedField.md +2 -4
- package/bundle/components/MasterTable.md +602 -0
- package/bundle/components/ModalWindow.md +7 -4
- package/bundle/components/MultiselectField.md +2183 -132
- package/bundle/components/Notification.md +12 -9
- package/bundle/components/Overlay.md +33 -5
- package/bundle/components/Page.md +2 -2
- package/bundle/components/Pagination.md +27 -21
- package/bundle/components/Row.md +1 -1
- package/bundle/components/SelectExtendedField.md +3 -3
- package/bundle/components/SelectField.md +466 -148
- package/bundle/components/SliderExtended.md +39 -36
- package/bundle/components/SmallInput.md +194 -51
- package/bundle/components/Suggest.md +535 -99
- package/bundle/components/SwipeableArea.md +428 -79
- package/bundle/components/TableBasic.md +2302 -0
- package/bundle/components/TabsExtended.md +24 -21
- package/bundle/components/Tag.md +263 -78
- package/bundle/components/Text.md +28 -25
- package/bundle/components/TextField.md +3 -4
- package/bundle/components/ThemeProvider.md +50 -1
- package/bundle/components/Title.md +26 -23
- package/bundle/components/Tooltip.md +24 -21
- package/bundle/components/TopOverlay.md +368 -89
- package/bundle/components/TreeView.md +343 -166
- package/bundle/components/TreeViewNode.md +436 -0
- package/bundle/guides/codestyle.md +3 -0
- package/bundle/guides/commits.md +106 -26
- package/bundle/guides/context.md +84 -12
- package/bundle/guides/guidelines.md +321 -0
- package/bundle/guides/template.md +22 -12
- package/bundle/manifest.json +54 -20
- package/bundle/release-notes/1.44.0.mdx +113 -0
- package/bundle/release-notes/1.45.0.mdx +124 -0
- package/bundle/release-notes/1.46.0.mdx +7 -0
- package/bundle/tokens.json +6362 -0
- package/dist/index.js +177 -28
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: MarkerStatus
|
|
3
|
-
category:
|
|
4
|
-
|
|
5
|
-
figma-file: ""
|
|
6
|
-
related: [Marker, Badge, Typography]
|
|
3
|
+
category: MarkerStatus
|
|
4
|
+
related: [TagColor, Marker, Text, Caption]
|
|
7
5
|
tokens: []
|
|
8
6
|
stories: stories/MarkerStatus/MarkerStatus.stories.tsx
|
|
9
7
|
version: "1.0"
|
|
@@ -13,131 +11,178 @@ version: "1.0"
|
|
|
13
11
|
|
|
14
12
|
## Назначение
|
|
15
13
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
Неинтерактивная подпись состояния: цветная точка-маркер слева, наименование статуса
|
|
15
|
+
справа и необязательное описание под наименованием. Собственного состояния, логики и
|
|
16
|
+
обработчиков нет — компонент собирает разметку из трёх частей и раздаёт классы по
|
|
17
|
+
`size` и `status`.
|
|
19
18
|
|
|
20
|
-
Используй когда:
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
Используй когда: нужно показать статус объекта в списке, таблице или карточке
|
|
20
|
+
(«Исполнен», «Отклонён», «Ожидает подписи»), при необходимости с пояснением под
|
|
21
|
+
наименованием — датой, суммой, причиной отказа.
|
|
23
22
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
├── index.ts # Barrel
|
|
32
|
-
├── styles/MarkerStatus.module.less # Цвета текста по статусу, размерные варианты
|
|
33
|
-
└── __tests__/MarkerStatus.test.tsx
|
|
34
|
-
```
|
|
23
|
+
Не используй когда:
|
|
24
|
+
- Нужен интерактивный элемент (клик, фокус, клавиатура) — возьми `Chip` или `Button`.
|
|
25
|
+
- Нужна только точка без подписи — `Marker` (или `Badge.Dot`, если статусная палитра
|
|
26
|
+
не нужна).
|
|
27
|
+
- Нужен статус на цветной подложке — `TagColor` или `Badge`.
|
|
28
|
+
- Нужен многошаговый прогресс процесса — `StatusTracker`, он строит цепочку шагов и
|
|
29
|
+
использует `MarkerStatus` внутри (`StatusTracker.Body.Status`).
|
|
35
30
|
|
|
36
31
|
---
|
|
37
32
|
|
|
38
33
|
## Варианты и props
|
|
39
34
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
| `status` | `EMarkerStatus` (`SUCCESS`/`ERROR`/`WARNING`/`WAITING`) | — | Обязателен. Цвет точки и текста. |
|
|
45
|
-
| `children` | `ReactNode` | — | Заголовок (основной текст статуса). Рендерится в `Text size=B4` (MD) / `B3` (LG). |
|
|
46
|
-
| `description` | `ReactNode` | — | Доп. описание под заголовком. MD — `Caption C1 SECONDARY`; LG — `Text B4 SECONDARY`. |
|
|
47
|
-
| `size` | `EComponentSize.MD \| EComponentSize.LG` | `MD` | **Ограниченный enum-subset** — нет `SM`. |
|
|
48
|
-
|
|
49
|
-
---
|
|
35
|
+
`IMarkerStatusProps extends React.HTMLAttributes<HTMLDivElement>`: любой стандартный
|
|
36
|
+
атрибут `<div>` (`id`, `role`, `aria-*`, `data-*`, `style`, обработчики) уходит на
|
|
37
|
+
корневой элемент через `...rest`. `className` объединяется с базовыми классами через
|
|
38
|
+
`clsx`, а не заменяет их.
|
|
50
39
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
### Размер = `EComponentSize.MD | EComponentSize.LG`
|
|
54
|
-
|
|
55
|
-
```ts
|
|
56
|
-
size?: EComponentSize.MD | EComponentSize.LG;
|
|
57
|
-
```
|
|
40
|
+
### Обязательные props
|
|
58
41
|
|
|
59
|
-
|
|
60
|
-
|
|
42
|
+
| Prop | Тип | Описание |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| `status` | `EMarkerStatus` | `SUCCESS` / `ERROR` / `WARNING` / `WAITING`. Задаёт цвет точки-маркера. Enum объявлен в `src/components/Marker/enums.ts` и экспортируется из barrel `Marker` |
|
|
61
45
|
|
|
62
|
-
###
|
|
46
|
+
### Опциональные props
|
|
63
47
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
48
|
+
| Prop | Тип | По умолчанию | Описание |
|
|
49
|
+
|---|---|---|---|
|
|
50
|
+
| `size` | `EComponentSize.MD \| EComponentSize.LG` | `EComponentSize.MD` | Размер маркера, типографики и отступов. `EComponentSize.SM` не поддерживается — union сужен намеренно, класса `sm` в стилях нет |
|
|
51
|
+
| `children` | `React.ReactNode` | — | Наименование статуса. Всегда оборачивается в `Text` (`B4` для MD, `B3` для LG) — обёртка рендерится даже при пустом значении |
|
|
52
|
+
| `description` | `React.ReactNode` | — | Описание под наименованием. Для MD — `Caption` `C1`, для LG — `Text` `B4`; в обоих случаях `type={EFontType.SECONDARY}` |
|
|
67
53
|
|
|
68
|
-
|
|
54
|
+
### Размеры
|
|
69
55
|
|
|
70
|
-
|
|
56
|
+
| | MD | LG |
|
|
57
|
+
|---|---|---|
|
|
58
|
+
| Наименование | `Text` `B4` | `Text` `B3` |
|
|
59
|
+
| Описание | `Caption` `C1` | `Text` `B4` |
|
|
60
|
+
| Диаметр точки | 8px (`Badge.Dot` MD) | 10px (`Badge.Dot` LG) |
|
|
61
|
+
| Отступ маркер → текст | 4px | 6px |
|
|
62
|
+
| Отступ наименование → описание | 0 | 4px |
|
|
63
|
+
| Верхний отступ маркера | 4px | 5px |
|
|
71
64
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
[EComponentSize.LG]: ETextSize.B3,
|
|
76
|
-
};
|
|
77
|
-
```
|
|
65
|
+
Верхний отступ маркера — оптическое выравнивание точки по первой строке
|
|
66
|
+
наименования, значения подобраны под конкретные высоты строк типографики. При смене
|
|
67
|
+
размеров текста их нужно пересчитывать.
|
|
78
68
|
|
|
79
|
-
|
|
69
|
+
### Falsy-значения `description`
|
|
80
70
|
|
|
81
|
-
|
|
71
|
+
Описание рендерится по truthy-проверке (`description && ...`). Поэтому
|
|
72
|
+
`description=""` и `description={false}` не выводят ни текста, ни обёртки, а
|
|
73
|
+
`description={0}` выводит голый `0` мимо `Caption` / `Text` — без вторичного цвета и
|
|
74
|
+
размера. Для числовых значений передавай строку. Это исторически сложившееся
|
|
75
|
+
поведение; менять его — задача с записью в release notes.
|
|
82
76
|
|
|
83
|
-
|
|
84
|
-
size === EComponentSize.MD
|
|
85
|
-
? <Caption size={C1} type={SECONDARY}>{description}</Caption>
|
|
86
|
-
: <Text size={B4} type={SECONDARY}>{description}</Text>
|
|
87
|
-
```
|
|
77
|
+
---
|
|
88
78
|
|
|
89
|
-
|
|
90
|
-
- `type=SECONDARY` — приглушённый цвет.
|
|
79
|
+
## Дизайн-токены
|
|
91
80
|
|
|
92
|
-
|
|
81
|
+
Собственных токенов в стилях компонента нет: `styles/MarkerStatus.module.less`
|
|
82
|
+
задаёт только раскладку (flex, отступы, выравнивание). Цвета приходят из вложенных
|
|
83
|
+
компонентов и переопределяются через их группы токенов — см. `ThemeProvider-ai.md` →
|
|
84
|
+
«Как переопределять токены».
|
|
93
85
|
|
|
94
|
-
```
|
|
95
|
-
|
|
86
|
+
```text
|
|
87
|
+
Marker.Background_Success
|
|
88
|
+
Marker.Background_Error
|
|
89
|
+
Marker.Background_Warning
|
|
90
|
+
Marker.Background_Waiting
|
|
91
|
+
Typography.Secondary_Color
|
|
96
92
|
```
|
|
97
93
|
|
|
98
|
-
-
|
|
94
|
+
- Цвет точки — токены группы `Marker` (`src/components/DesignTokens/components/Marker.ts`),
|
|
95
|
+
применяются внутри `Marker`.
|
|
96
|
+
- Цвет наименования — `Typography.Primary_Color` (дефолтный `EFontType.PRIMARY`),
|
|
97
|
+
цвет описания — `Typography.Secondary_Color` (`EFontType.SECONDARY`).
|
|
98
|
+
|
|
99
|
+
**Известное расхождение:** группа `MarkerStatus` в
|
|
100
|
+
`src/components/DesignTokens/components/MarkerStatus.ts` объявляет токен
|
|
101
|
+
`MarkerStatus.Description_Color`, но ни один LESS-файл его не читает — описание
|
|
102
|
+
красится через типографику. Токен остался от прежней реализации, его переопределение
|
|
103
|
+
через `ThemeProvider` ни на что не влияет. Удаление токена и его css-переменной —
|
|
104
|
+
изменение публичного API, делается отдельной задачей с записью в release notes
|
|
105
|
+
(прецедент — `ImageGallery.Arrow_*_Disabled` в 1.45.0). Поэтому во frontmatter
|
|
106
|
+
`tokens:` он не перечислен: список описывает токены, которые компонент реально
|
|
107
|
+
использует.
|
|
99
108
|
|
|
100
109
|
---
|
|
101
110
|
|
|
102
111
|
## Инварианты
|
|
103
112
|
|
|
104
|
-
- **`
|
|
105
|
-
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
-
|
|
113
|
+
- **`forwardRef`** — ref пробрасывается на корневой `<div>`; не убирать.
|
|
114
|
+
- **Корневой элемент — `<div>`** с классами `markerStatus` + размер + статус. Внутри
|
|
115
|
+
ровно две обёртки: `markerContainer` (точка) и `contentContainer` (наименование и
|
|
116
|
+
описание). На эту структуру опираются unit-тесты; `StatusTrackerStatus` дописывает
|
|
117
|
+
корневому элементу свой класс `statusTrackerStatus`.
|
|
118
|
+
- **Классы статуса на корне приходят из CSS-модуля `Marker`** —
|
|
119
|
+
`STATUS_TO_CLASS_NAME_MAP` импортируется из `src/components/Marker/utils.ts`, где
|
|
120
|
+
правила объявлены как `.marker.success` и т.п. На корне `MarkerStatus` эти классы
|
|
121
|
+
визуального эффекта не дают, но присутствуют в разметке и проверяются unit-тестами
|
|
122
|
+
(`toHaveClass("success")`). Не удалять без согласования: класс виден потребителю в
|
|
123
|
+
DOM.
|
|
124
|
+
- **`size` сужен до `MD | LG`.** Расширение до полного `EComponentSize` требует
|
|
125
|
+
класса `sm` в стилях, размеров типографики и верхнего отступа маркера — это новая
|
|
126
|
+
функциональность, а не рефакторинг.
|
|
127
|
+
- **`data-tx` ставится после `...restProps`** — потребитель не может переопределить
|
|
128
|
+
метку версии пакета. Порядок атрибутов в JSX менять нельзя, на это есть тест.
|
|
129
|
+
- **`displayName`** — `MarkerStatus`; виден в React DevTools.
|
|
130
|
+
- **`IMarkerStatusProps` — часть публичного API `StatusTracker`:**
|
|
131
|
+
`StatusTrackerStatus` типизирован как `React.FC<IMarkerStatusProps>`
|
|
132
|
+
(`src/components/StatusTracker/components/StatusTrackerStatus.tsx`). Любое изменение
|
|
133
|
+
формы интерфейса автоматически меняет публичный API `StatusTracker.Body.Status`.
|
|
110
134
|
|
|
111
135
|
---
|
|
112
136
|
|
|
113
137
|
## Accessibility
|
|
114
138
|
|
|
115
|
-
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
139
|
+
- Компонент неинтерактивен: не получает фокус, не обрабатывает клавиатуру, ролей и
|
|
140
|
+
aria-атрибутов не выставляет. Смысл статуса несёт текст в `children`, поэтому для
|
|
141
|
+
скринридера подпись читается как обычный текст.
|
|
142
|
+
- **Точка-маркер не имеет доступного имени** — это чисто визуальное дублирование
|
|
143
|
+
статуса, продублированное текстом рядом. Отдельная подпись ей не нужна.
|
|
144
|
+
- Если статус меняется динамически (например, документ переходит из «Ожидает» в
|
|
145
|
+
«Исполнен») и об этом нужно сообщить скринридеру — потребитель сам передаёт
|
|
146
|
+
`role="status"` или `aria-live` через `...rest`. Компонент их не выставляет.
|
|
147
|
+
- Строки на конкретном языке компонент не хардкодит — весь текст приходит от
|
|
148
|
+
потребителя.
|
|
125
149
|
|
|
126
150
|
---
|
|
127
151
|
|
|
128
152
|
## Связанные компоненты
|
|
129
153
|
|
|
130
|
-
- `Marker` —
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
- `
|
|
154
|
+
- `Marker` (`src/components/Marker/Marker.tsx`) — точка со статусной палитрой,
|
|
155
|
+
рендерится внутри `MarkerStatus`; из его CSS-модуля берётся и `STATUS_TO_CLASS_NAME_MAP`
|
|
156
|
+
для корневого элемента.
|
|
157
|
+
- `Text`, `Caption` — типографика наименования и описания; размеры и `EFontType`
|
|
158
|
+
выбираются по `size`.
|
|
159
|
+
- `Badge` — не альтернатива и не прямая зависимость `MarkerStatus`: он решает другой
|
|
160
|
+
класс задач (статус на цветной подложке, счётчик), а в цепочку рендера попадает
|
|
161
|
+
через `Marker`, который построен на `Badge.Dot`. Поэтому во `related` не вынесен.
|
|
162
|
+
- `TagColor` — альтернатива, когда статус показывается цветным тегом.
|
|
163
|
+
- `StatusTracker` — потребитель: `StatusTracker.Body.Status` (`StatusTrackerStatus`)
|
|
164
|
+
оборачивает `MarkerStatus`, добавляя свой класс, и переиспользует `IMarkerStatusProps`.
|
|
165
|
+
Обёртка объявлена как `React.FC`, то есть ref до `MarkerStatus` через неё не доходит.
|
|
134
166
|
|
|
135
167
|
---
|
|
136
168
|
|
|
137
169
|
## Stories
|
|
138
170
|
|
|
139
|
-
`stories/MarkerStatus/MarkerStatus.stories.tsx`
|
|
140
|
-
|
|
171
|
+
Основные истории: `stories/MarkerStatus/MarkerStatus.stories.tsx`
|
|
172
|
+
Файлы примеров: `stories/MarkerStatus/examples/`
|
|
173
|
+
|
|
174
|
+
| Story | Example file | Что демонстрирует |
|
|
175
|
+
|---|---|---|
|
|
176
|
+
| `Playground` | — | Интерактивный подбор `status`, `size`, `description` и текста |
|
|
177
|
+
| `Default` | `DefaultExample.tsx` | Минимальный вызов: `SUCCESS`, размер MD, описание |
|
|
178
|
+
| `Statuses` | `StatusesExample.tsx` | Все четыре статуса в размере MD |
|
|
179
|
+
| `Sizes` | `SizesExample.tsx` | Статусы в размерах MD и LG |
|
|
180
|
+
|
|
181
|
+
Скриншот-регрессия снимается со стори `Statuses` и `Sizes`
|
|
182
|
+
(`__screenshots__/markerstatus--statuses--xs|xl.png`,
|
|
183
|
+
`__screenshots__/markerstatus--sizes--xs|xl.png`). `Playground` и `Default` исключены
|
|
184
|
+
через `testRunner: { skip: true }`: первый — интерактивная песочница, второй полностью
|
|
185
|
+
покрыт стори `Sizes`.
|
|
141
186
|
|
|
142
187
|
---
|
|
143
188
|
|
|
@@ -145,4 +190,77 @@ size === EComponentSize.MD
|
|
|
145
190
|
|
|
146
191
|
| Дата | Изменение |
|
|
147
192
|
|---|---|
|
|
148
|
-
| 2026-
|
|
193
|
+
| 2026-09-01 | Создан документ. AI-рефакторинг: добавлен `displayName`, `data-tx` перенесён после `...restProps` (потребитель больше не может его переопределить), в `IMarkerStatusProps` добавлен явный `children` (тип совпадает с унаследованным из `React.HTMLAttributes`), JSDoc на props и компонент, модульные константы приведены к UPPER_SNAKE_CASE, порядок импортов — по `codestyle.md`. Unit-тесты расширены с 4 до 15 кейсов: типографика наименования и описания по размерам, отсутствие описания, `description` как узел, проброс `status` / `size` в `Marker`, мердж `className`, `...rest`, `data-tx`, `ref`, `displayName`. Публичный API, DOM-структура и визуальное поведение не изменены. |
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Примеры использования
|
|
198
|
+
|
|
199
|
+
### Default
|
|
200
|
+
|
|
201
|
+
`stories/MarkerStatus/examples/DefaultExample.tsx`
|
|
202
|
+
|
|
203
|
+
```tsx
|
|
204
|
+
import React from "react";
|
|
205
|
+
import { MarkerStatus, EMarkerStatus, EComponentSize } from "@sberbusiness/triplex-next";
|
|
206
|
+
|
|
207
|
+
export const DefaultExample = () => (
|
|
208
|
+
<MarkerStatus status={EMarkerStatus.SUCCESS} size={EComponentSize.MD} description="Description">
|
|
209
|
+
Status text
|
|
210
|
+
</MarkerStatus>
|
|
211
|
+
);
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Statuses
|
|
215
|
+
|
|
216
|
+
`stories/MarkerStatus/examples/StatusesExample.tsx`
|
|
217
|
+
|
|
218
|
+
```tsx
|
|
219
|
+
import React from "react";
|
|
220
|
+
import { MarkerStatus, EMarkerStatus, EComponentSize } from "@sberbusiness/triplex-next";
|
|
221
|
+
|
|
222
|
+
const STATUSES = Object.values(EMarkerStatus);
|
|
223
|
+
|
|
224
|
+
export const StatusesExample = () => (
|
|
225
|
+
<div style={{ display: "flex", alignItems: "flex-start", gap: "32px", flexWrap: "wrap" }}>
|
|
226
|
+
{STATUSES.map((status) => (
|
|
227
|
+
<div key={status}>
|
|
228
|
+
<div style={{ marginBottom: "8px", fontSize: "16px", fontWeight: "700" }}>{status.toUpperCase()}</div>
|
|
229
|
+
<MarkerStatus status={status} size={EComponentSize.MD} description="Description">
|
|
230
|
+
Status text
|
|
231
|
+
</MarkerStatus>
|
|
232
|
+
</div>
|
|
233
|
+
))}
|
|
234
|
+
</div>
|
|
235
|
+
);
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### Sizes
|
|
239
|
+
|
|
240
|
+
`stories/MarkerStatus/examples/SizesExample.tsx`
|
|
241
|
+
|
|
242
|
+
```tsx
|
|
243
|
+
import React from "react";
|
|
244
|
+
import { MarkerStatus, EMarkerStatus, EComponentSize } from "@sberbusiness/triplex-next";
|
|
245
|
+
|
|
246
|
+
const STATUSES = Object.values(EMarkerStatus);
|
|
247
|
+
const SIZES = [EComponentSize.MD, EComponentSize.LG] as const;
|
|
248
|
+
|
|
249
|
+
export const SizesExample = () => (
|
|
250
|
+
<div style={{ display: "flex", flexDirection: "column", gap: "32px" }}>
|
|
251
|
+
{SIZES.map((size) => (
|
|
252
|
+
<div key={size}>
|
|
253
|
+
<div style={{ marginBottom: "8px", fontSize: "16px", fontWeight: "700" }}>{size.toUpperCase()}</div>
|
|
254
|
+
<div style={{ display: "flex", alignItems: "flex-start", gap: "32px", flexWrap: "wrap" }}>
|
|
255
|
+
{STATUSES.map((status) => (
|
|
256
|
+
<MarkerStatus key={status} status={status} size={size} description="Description">
|
|
257
|
+
Status text
|
|
258
|
+
</MarkerStatus>
|
|
259
|
+
))}
|
|
260
|
+
</div>
|
|
261
|
+
</div>
|
|
262
|
+
))}
|
|
263
|
+
</div>
|
|
264
|
+
);
|
|
265
|
+
```
|
|
266
|
+
|
|
@@ -57,7 +57,7 @@ version: "1.0"
|
|
|
57
57
|
|
|
58
58
|
## Дизайн-токены
|
|
59
59
|
|
|
60
|
-
Собственных CSS-токенов и стилей у `MaskedField` нет — поэтому `tokens` во frontmatter пустой. Внешний вид наследуется от семейства `FormField`; слой подсказки маски рисует `FormFieldMaskedInput` своим токеном
|
|
60
|
+
Собственных CSS-токенов и стилей у `MaskedField` нет — поэтому `tokens` во frontmatter пустой. Внешний вид наследуется от семейства `FormField`; слой подсказки маски рисует `FormFieldMaskedInput` своим токеном `FormField.Placeholder_Color`.
|
|
61
61
|
|
|
62
62
|
---
|
|
63
63
|
|
|
@@ -65,7 +65,6 @@ version: "1.0"
|
|
|
65
65
|
|
|
66
66
|
- `forwardRef` на `MaskedField` — не убирать. Внешний `ref` указывает на корневой `<div>` `FormField`.
|
|
67
67
|
- Публичный API (`IMaskedFieldProps`: `maskedInputProps` + `label`/`prefix`/`postfix`/`description`/`counter` + унаследованные `size`/`status`/`active`) — изменение имён/типов/значений enum — breaking change.
|
|
68
|
-
- Barrel `index.ts` экспортирует `TextField` и `MaskedField` — состав экспортов не менять. `TextFieldBase` намеренно НЕ экспортируется — приватная база.
|
|
69
68
|
- Ссылка на элемент input передаётся только через `maskedInputProps.forwardedRef`. `maskedInputProps.ref` (`React.RefObject<HTMLDivElement>`) попадает на корневой `<div>` обёртки `FormFieldMaskedInput` — это ref самого `FormFieldMaskedInput`, а не поля ввода.
|
|
70
69
|
- `maskedInputProps.value` обязателен: `FormFieldMaskedInput` — контролируемый компонент. `defaultValue` исключён из props (`Omit<MaskedInputProps, ... | "defaultValue">`) и не передаётся внутрь `<input>`: `react-text-mask` подставляет его равным `value`, а на контролируемом поле это даёт предупреждение React о смешении controlled и uncontrolled.
|
|
71
70
|
- Маски и подсказки берутся из `FormFieldMaskedInput.presets` — состав пресетов и их значения часть публичного API.
|
|
@@ -85,8 +84,7 @@ version: "1.0"
|
|
|
85
84
|
|
|
86
85
|
## Связанные компоненты
|
|
87
86
|
|
|
88
|
-
- `
|
|
89
|
-
- `TextFieldBase` (внутренний, не в barrel) — базовая раскладка `FormGroup`/`FormField` + слоты `prefix`/`children`/`label`/`postfix` и блок `description`/`counter`. На нём построены `TextField` и `MaskedField`. Описан в `TextField-ai.md`.
|
|
87
|
+
- `TextFieldBase` — базовая раскладка `FormGroup`/`FormField` + слоты `prefix`/`children`/`label`/`postfix` и блок `description`/`counter`.
|
|
90
88
|
- `FormFieldMaskedInput` — сам элемент ввода с маской и статическим свойством `presets` (`masks`, `placeholderMasks`). Используется напрямую, когда нужна нестандартная композиция поля.
|
|
91
89
|
- `FormFieldClear` — кнопка очистки, передаётся в `postfix`.
|
|
92
90
|
- `FormGroup` / `FormField` — контейнеры раскладки поля и описания.
|