@sberbusiness/triplex-next-mcp-server 1.44.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 +13 -10
- package/bundle/components/Badge.md +6 -3
- 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/Dropdown.md +33 -28
- package/bundle/components/EmptyView.md +12 -5
- 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 +16 -13
- package/bundle/components/LightBox.md +14 -12
- 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 +9 -4
- package/bundle/components/Page.md +2 -2
- package/bundle/components/Pagination.md +15 -8
- 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 +19 -11
- package/bundle/components/TabsExtended.md +24 -21
- package/bundle/components/Tag.md +6 -2
- 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 +7 -4
- package/bundle/guides/codestyle.md +3 -0
- 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 +31 -14
- package/bundle/release-notes/1.45.0.mdx +117 -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
|
@@ -3,23 +3,23 @@ component: SliderExtended
|
|
|
3
3
|
category: Slider
|
|
4
4
|
related: [Slider, SliderRange, KeyDownListener, Text]
|
|
5
5
|
tokens:
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
6
|
+
- Slider.Rail_Background
|
|
7
|
+
- Slider.Rail_Background_Disabled
|
|
8
|
+
- Slider.Track_Background_Default
|
|
9
|
+
- Slider.Track_Background_Hover
|
|
10
|
+
- Slider.Track_Background_Disabled
|
|
11
|
+
- Slider.Dot_Background_Default
|
|
12
|
+
- Slider.Dot_Background_Hover
|
|
13
|
+
- Slider.Dot_Background_Select
|
|
14
|
+
- Slider.Dot_Background_Disabled
|
|
15
|
+
- Slider.Dot_Inner_Background
|
|
16
|
+
- Slider.Dot_Inner_Background_Disabled
|
|
17
|
+
- Slider.Dot_Focus
|
|
18
|
+
- Slider.Mark_Dot_Background_Default
|
|
19
|
+
- Slider.Mark_Dot_Background_Selected
|
|
20
|
+
- Slider.Mark_Dot_Background_Selected_Disabled
|
|
21
|
+
- Slider.Tooltip_Background
|
|
22
|
+
- Slider.Tooltip_Color
|
|
23
23
|
stories: stories/Slider/SliderExtended.stories.tsx
|
|
24
24
|
version: "1.0"
|
|
25
25
|
---
|
|
@@ -131,28 +131,31 @@ version: "1.0"
|
|
|
131
131
|
|
|
132
132
|
## Дизайн-токены
|
|
133
133
|
|
|
134
|
+
Переопределяются через `ThemeProvider` (prop `tokens`) — см. `ThemeProvider-ai.md` →
|
|
135
|
+
«Как переопределять токены». Значения по умолчанию — `src/components/DesignTokens/components/Slider.ts`.
|
|
136
|
+
|
|
134
137
|
```text
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
138
|
+
Slider.Rail_Background
|
|
139
|
+
Slider.Rail_Background_Disabled
|
|
140
|
+
Slider.Track_Background_Default
|
|
141
|
+
Slider.Track_Background_Hover
|
|
142
|
+
Slider.Track_Background_Disabled
|
|
143
|
+
Slider.Dot_Background_Default
|
|
144
|
+
Slider.Dot_Background_Hover
|
|
145
|
+
Slider.Dot_Background_Select
|
|
146
|
+
Slider.Dot_Background_Disabled
|
|
147
|
+
Slider.Dot_Inner_Background
|
|
148
|
+
Slider.Dot_Inner_Background_Disabled
|
|
149
|
+
Slider.Dot_Focus
|
|
150
|
+
Slider.Mark_Dot_Background_Default
|
|
151
|
+
Slider.Mark_Dot_Background_Selected
|
|
152
|
+
Slider.Mark_Dot_Background_Selected_Disabled
|
|
153
|
+
Slider.Tooltip_Background
|
|
154
|
+
Slider.Tooltip_Color
|
|
152
155
|
```
|
|
153
156
|
|
|
154
|
-
Токены общие для всего семейства слайдеров и
|
|
155
|
-
`SliderExtended
|
|
157
|
+
Токены общие для всего семейства слайдеров и лежат в группе `Slider`, а не
|
|
158
|
+
`SliderExtended`: `Slider` и `SliderRange` — это тот же `SliderExtended` внутри.
|
|
156
159
|
Размеры (высота полосы, диаметры ползунка и точек меток) заданы литералами в
|
|
157
160
|
`.module.less`, z-index'ы — LESS-переменными `@slider-dot-z-index` и
|
|
158
161
|
`@slider-track-z-index` из `src/helpers/less/z-indexes.less`.
|
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: SmallInput
|
|
3
|
-
category:
|
|
4
|
-
|
|
5
|
-
figma-file: ""
|
|
6
|
-
related: [TextField]
|
|
3
|
+
category: TextFields
|
|
4
|
+
related: [DocumentNumberEdit, TextField]
|
|
7
5
|
tokens:
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
stories:
|
|
6
|
+
- SmallInput.Background
|
|
7
|
+
- SmallInput.Color
|
|
8
|
+
- SmallInput.PlaceholderColor
|
|
9
|
+
- SmallInput.Shadow
|
|
10
|
+
stories: stories/SmallInput/SmallInput.stories.tsx
|
|
13
11
|
version: "1.0"
|
|
14
12
|
---
|
|
15
13
|
|
|
@@ -17,80 +15,131 @@ version: "1.0"
|
|
|
17
15
|
|
|
18
16
|
## Назначение
|
|
19
17
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
`
|
|
23
|
-
плюс `className`.
|
|
18
|
+
Компактное однострочное текстовое поле ввода высотой 20px. Тонкая обёртка над `<input type="text">`:
|
|
19
|
+
свой CSS-модуль и своя группа дизайн-токенов, ничего больше — ни лейбла, ни статусов, ни префиксов,
|
|
20
|
+
ни обвязки семейства `FormField`. Ширина всегда 100% контейнера, поэтому размер задаётся снаружи.
|
|
24
21
|
|
|
25
|
-
Используй когда:
|
|
26
|
-
|
|
27
|
-
`TextareaField`.
|
|
22
|
+
Используй когда: нужно инлайн-редактирование короткого значения в плотной вёрстке, где полноценное
|
|
23
|
+
поле формы не помещается — например, номер документа в шапке страницы (`DocumentNumberEdit`).
|
|
28
24
|
|
|
29
|
-
Не используй когда:
|
|
30
|
-
|
|
25
|
+
Не используй когда:
|
|
26
|
+
- Поле живёт в форме и ему нужны лейбл, статус (error/warning/disabled), описание, счётчик или
|
|
27
|
+
кнопка очистки — возьми `TextField` (или `FormGroup` + `FormField` для нестандартной композиции).
|
|
28
|
+
- Нужен нетекстовый ввод (`number`, `password`, `email`, `checkbox`): `type` захардкожен, см. «Инварианты».
|
|
29
|
+
- Нужен ввод по маске (`MaskedField`), сумма (`AmountField`), дата (`DateField`).
|
|
30
|
+
- Нужно готовое редактирование номера документа целиком, вместе с кнопкой «Изменить» и
|
|
31
|
+
переключением режимов — это уже `DocumentNumberEdit`.
|
|
31
32
|
|
|
32
33
|
---
|
|
33
34
|
|
|
34
|
-
##
|
|
35
|
+
## Варианты и props
|
|
35
36
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
37
|
+
Собственных props у компонента нет. `ISmallInputProps` расширяет
|
|
38
|
+
`React.InputHTMLAttributes<HTMLInputElement>` и ничего к нему не добавляет, поэтому принимаются
|
|
39
|
+
все стандартные атрибуты `<input>`: `value` / `defaultValue`, `onChange`, `placeholder`,
|
|
40
|
+
`maxLength`, `disabled`, `readOnly`, `autoFocus`, `aria-*`, `data-*` и остальные.
|
|
41
|
+
|
|
42
|
+
| Prop | Тип | По умолчанию | Описание |
|
|
43
|
+
|---|---|---|---|
|
|
44
|
+
| `className` | `string` | — | Мерджится через `clsx` с собственным классом на корневом `<input>` |
|
|
45
|
+
| `...InputHTMLAttributes` | — | — | Все стандартные атрибуты `<input>`, попадают на корневой элемент |
|
|
46
|
+
| `type` | — | `"text"` | Захардкожен и **не переопределяется**: атрибут выставляется после `{...rest}` |
|
|
47
|
+
|
|
48
|
+
### Особенности поведения
|
|
49
|
+
|
|
50
|
+
- Компонент полностью stateless: контролируемость (`value` + `onChange`) или неконтролируемость
|
|
51
|
+
(`defaultValue`) выбирает потребитель, как у нативного `<input>`.
|
|
52
|
+
- Ширина `100%`, высота `20px`, `box-sizing: border-box` — габариты задаёт контейнер.
|
|
53
|
+
Собственного `min-width` нет, при узком контейнере поле схлопывается.
|
|
54
|
+
- Собственных стилей `:hover`, `:focus`, `:disabled` у компонента нет. `outline` снят
|
|
55
|
+
(`outline: none`), рамка нарисована постоянным `box-shadow`, поэтому визуально disabled,
|
|
56
|
+
readOnly и сфокусированное поле не отличаются от обычного.
|
|
57
|
+
- Нативный крестик очистки IE/Edge скрыт (`&::-ms-clear { display: none; }`).
|
|
58
|
+
- В Firefox плейсхолдер принудительно непрозрачный (`opacity: 1`), иначе браузер делает его
|
|
59
|
+
полупрозрачным поверх токена цвета.
|
|
42
60
|
|
|
43
61
|
---
|
|
44
62
|
|
|
45
|
-
##
|
|
63
|
+
## Дизайн-токены
|
|
46
64
|
|
|
47
|
-
|
|
65
|
+
Переопределяются через `ThemeProvider` (prop `tokens`) — см. `ThemeProvider-ai.md` →
|
|
66
|
+
«Как переопределять токены». Значения по умолчанию — `src/components/DesignTokens/components/SmallInput.ts`.
|
|
48
67
|
|
|
49
|
-
```
|
|
50
|
-
|
|
68
|
+
```text
|
|
69
|
+
SmallInput.Background
|
|
70
|
+
SmallInput.Color
|
|
71
|
+
SmallInput.PlaceholderColor
|
|
72
|
+
SmallInput.Shadow
|
|
51
73
|
```
|
|
52
74
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
| Prop | Источник | Описание |
|
|
56
|
-
|---|---|---|
|
|
57
|
-
| `type` | — | **Всегда `"text"`** (хардкод, любой переданный игнорируется). |
|
|
58
|
-
| `className` | React | Мёржится с внутренним `styles.smallInput` через `clsx`. |
|
|
59
|
-
| `ref` | forwardRef | `HTMLInputElement`. |
|
|
60
|
-
| `...rest` | HTMLInputAttributes | Прокидываются как есть (`value`, `onChange`, `placeholder`, `disabled`, ...). |
|
|
75
|
+
`SmallInput.Shadow` — это inset-`box-shadow`, играющий роль рамки поля; он одинаков в светлой
|
|
76
|
+
и тёмной теме и не меняется по состояниям.
|
|
61
77
|
|
|
62
78
|
---
|
|
63
79
|
|
|
64
80
|
## Инварианты
|
|
65
81
|
|
|
66
|
-
- **`forwardRef
|
|
67
|
-
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
82
|
+
- **`forwardRef`** — обязателен, не убирать. `ref` указывает на корневой (и единственный) `<input>`.
|
|
83
|
+
- **Корневой DOM-элемент — `<input>`**, без обёрток. Потребители (`DocumentNumberEdit`) верстают
|
|
84
|
+
его внутри своих контейнеров и рассчитывают на `width: 100%` без внешних отступов.
|
|
85
|
+
- **`type="text"` выставляется после `{...rest}`** и поэтому перекрывает переданный извне `type`.
|
|
86
|
+
Менять порядок или удалять хардкод — изменение наблюдаемого поведения, только отдельной задачей
|
|
87
|
+
с записью в release notes.
|
|
88
|
+
- **Имена `SmallInput`, `ISmallInputProps`** и `displayName` — часть публичного API,
|
|
89
|
+
экспортируются из barrel `src/components/SmallInput/index.ts` и из корневого
|
|
90
|
+
`src/components/index.ts`.
|
|
91
|
+
- **`ISmallInputProps` не должен обрастать собственными props без необходимости** — ценность
|
|
92
|
+
компонента в том, что это ровно нативный `<input>` с фирменными токенами.
|
|
93
|
+
- **Группа токенов `SmallInput.*`** — публичный контракт темизации, переименование ломает
|
|
94
|
+
`ThemeProvider` у потребителей.
|
|
72
95
|
|
|
73
96
|
---
|
|
74
97
|
|
|
75
98
|
## Accessibility
|
|
76
99
|
|
|
77
|
-
-
|
|
78
|
-
|
|
79
|
-
|
|
100
|
+
- Компонент не задаёт доступное имя: нет лейбла, `aria-label` и `aria-labelledby` не хардкодятся.
|
|
101
|
+
**Доступное имя обязан передать потребитель** — `aria-label`, `aria-labelledby` или внешний
|
|
102
|
+
`<label htmlFor>` со своим `id` (библиотека мультиязычная, тексты в неё не зашиваются).
|
|
103
|
+
- Своей клавиатурной логики нет — поведение стандартного `<input type="text">`.
|
|
104
|
+
- Видимого индикатора фокуса нет: `outline: none`, а `box-shadow` постоянный. Если поле
|
|
105
|
+
используется как самостоятельный элемент управления, а не как часть компонента со своим
|
|
106
|
+
focus-состоянием, фокус-стиль нужно добавлять снаружи через `className`.
|
|
107
|
+
- `disabled` и `readOnly` ведут себя по-разному и взаимозаменяемыми не являются:
|
|
108
|
+
`disabled` выключает поле целиком — оно не попадает в таб-обход и не получает фокус;
|
|
109
|
+
`readOnly` фокус получает и остаётся в таб-обходе, но не даёт изменить значение.
|
|
110
|
+
Визуально оба состояния не отличаются от обычного — различие обеспечивает потребитель.
|
|
80
111
|
|
|
81
112
|
---
|
|
82
113
|
|
|
83
114
|
## Связанные компоненты
|
|
84
115
|
|
|
85
|
-
- `
|
|
86
|
-
|
|
116
|
+
- `DocumentNumberEdit` (`src/components/DocumentNumberEdit/DocumentNumberEdit.tsx`) — единственный
|
|
117
|
+
потребитель внутри библиотеки и готовое решение для сценария «номер документа»:
|
|
118
|
+
`IDocumentNumberEditProps` наследует `ISmallInputProps`, а сам компонент рендерит `SmallInput`
|
|
119
|
+
в режиме редактирования, добавляя лейбл, ссылку «Изменить», фильтрацию цифр и `maxLength`.
|
|
120
|
+
Изменение props или поведения `SmallInput` отражается на нём напрямую.
|
|
121
|
+
- `TextField` (`src/components/TextField/TextField.tsx`) — полноформатное однострочное поле
|
|
122
|
+
на семействе `FormField`: лейбл, статусы, префикс/постфикс, описание, счётчик. Альтернатива
|
|
123
|
+
для всего, что сложнее инлайн-редактирования короткого значения.
|
|
87
124
|
|
|
88
125
|
---
|
|
89
126
|
|
|
90
127
|
## Stories
|
|
91
128
|
|
|
92
|
-
|
|
93
|
-
|
|
129
|
+
Основные истории: `stories/SmallInput/SmallInput.stories.tsx`
|
|
130
|
+
Файлы примеров: `stories/SmallInput/examples/`
|
|
131
|
+
|
|
132
|
+
| Story | Example file | Что демонстрирует |
|
|
133
|
+
|---|---|---|
|
|
134
|
+
| `Playground` | `Playground.tsx` | Интерактивный контроль `placeholder`, `maxLength`, `disabled`, `readOnly` |
|
|
135
|
+
| `Default` | `Default.tsx` | Минимальное контролируемое поле с плейсхолдером |
|
|
136
|
+
| `Disabled` | `Disabled.tsx` | Отключённое поле с заполненным значением |
|
|
137
|
+
| `ReadOnly` | `ReadOnly.tsx` | Поле только для чтения |
|
|
138
|
+
| `Production` | `Production.tsx` | Production-композиция (`Example: production`): подпись «Документ №» и инлайн-ввод номера с фильтрацией цифр |
|
|
139
|
+
| `VisualTests` | `VisualTests.tsx` | Скриншот-регрессия: плейсхолдер, заполненное, disabled, readOnly, переполнение, растягивание по ширине, инлайн-выравнивание |
|
|
140
|
+
|
|
141
|
+
Скриншоты снимает только `VisualTests`: состояния самого поля она покрывает целиком,
|
|
142
|
+
поэтому документационные стори исключены через `testRunner: { skip: true }`.
|
|
94
143
|
|
|
95
144
|
---
|
|
96
145
|
|
|
@@ -98,4 +147,98 @@ extends React.InputHTMLAttributes<HTMLInputElement>
|
|
|
98
147
|
|
|
99
148
|
| Дата | Изменение |
|
|
100
149
|
|---|---|
|
|
101
|
-
| 2026-
|
|
150
|
+
| 2026-09-02 | Создан документ (TRI-80). AI-рефакторинг: уточнён JSDoc компонента, добавлен комментарий о хардкоде `type`, добавлены unit-тесты, созданы stories по modern pattern. Публичный API не изменён |
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Примеры использования
|
|
155
|
+
|
|
156
|
+
### Default
|
|
157
|
+
|
|
158
|
+
`stories/SmallInput/examples/Default.tsx`
|
|
159
|
+
|
|
160
|
+
```tsx
|
|
161
|
+
import React, { useState } from "react";
|
|
162
|
+
import { SmallInput } from "@sberbusiness/triplex-next";
|
|
163
|
+
|
|
164
|
+
export const Default = () => {
|
|
165
|
+
const [value, setValue] = useState("");
|
|
166
|
+
|
|
167
|
+
const handleChange: React.ChangeEventHandler<HTMLInputElement> = (event) => {
|
|
168
|
+
setValue(event.target.value);
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
return (
|
|
172
|
+
<div style={{ width: "120px" }}>
|
|
173
|
+
<SmallInput value={value} placeholder="000000" aria-label="Номер документа" onChange={handleChange} />
|
|
174
|
+
</div>
|
|
175
|
+
);
|
|
176
|
+
};
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Disabled
|
|
180
|
+
|
|
181
|
+
`stories/SmallInput/examples/Disabled.tsx`
|
|
182
|
+
|
|
183
|
+
```tsx
|
|
184
|
+
import React from "react";
|
|
185
|
+
import { SmallInput } from "@sberbusiness/triplex-next";
|
|
186
|
+
|
|
187
|
+
export const Disabled = () => (
|
|
188
|
+
<div style={{ width: "120px" }}>
|
|
189
|
+
<SmallInput defaultValue="000123" placeholder="000000" aria-label="Номер документа" disabled />
|
|
190
|
+
</div>
|
|
191
|
+
);
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### ReadOnly
|
|
195
|
+
|
|
196
|
+
`stories/SmallInput/examples/ReadOnly.tsx`
|
|
197
|
+
|
|
198
|
+
```tsx
|
|
199
|
+
import React from "react";
|
|
200
|
+
import { SmallInput } from "@sberbusiness/triplex-next";
|
|
201
|
+
|
|
202
|
+
export const ReadOnly = () => (
|
|
203
|
+
<div style={{ width: "120px" }}>
|
|
204
|
+
<SmallInput defaultValue="000123" aria-label="Номер документа" readOnly />
|
|
205
|
+
</div>
|
|
206
|
+
);
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### Production
|
|
210
|
+
|
|
211
|
+
`stories/SmallInput/examples/Production.tsx`
|
|
212
|
+
|
|
213
|
+
```tsx
|
|
214
|
+
import React, { useState } from "react";
|
|
215
|
+
import { SmallInput, Text, ETextSize, EFontType } from "@sberbusiness/triplex-next";
|
|
216
|
+
|
|
217
|
+
const DOCUMENT_NUMBER_MAX_LENGTH = 6;
|
|
218
|
+
|
|
219
|
+
export const Production = () => {
|
|
220
|
+
const [documentNumber, setDocumentNumber] = useState("000123");
|
|
221
|
+
|
|
222
|
+
const handleChange: React.ChangeEventHandler<HTMLInputElement> = (event) => {
|
|
223
|
+
setDocumentNumber(event.target.value.replace(/\D/g, ""));
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
return (
|
|
227
|
+
<div style={{ display: "flex", alignItems: "center", gap: "8px" }}>
|
|
228
|
+
<Text tag="span" size={ETextSize.B3} type={EFontType.SECONDARY}>
|
|
229
|
+
Документ №
|
|
230
|
+
</Text>
|
|
231
|
+
<div style={{ width: "80px" }}>
|
|
232
|
+
<SmallInput
|
|
233
|
+
value={documentNumber}
|
|
234
|
+
placeholder="000000"
|
|
235
|
+
maxLength={DOCUMENT_NUMBER_MAX_LENGTH}
|
|
236
|
+
aria-label="Номер документа"
|
|
237
|
+
onChange={handleChange}
|
|
238
|
+
/>
|
|
239
|
+
</div>
|
|
240
|
+
</div>
|
|
241
|
+
);
|
|
242
|
+
};
|
|
243
|
+
```
|
|
244
|
+
|