@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.
Files changed (85) hide show
  1. package/README.md +7 -6
  2. package/bundle/components/AlertContext.md +11 -8
  3. package/bundle/components/AlertProcess.md +16 -12
  4. package/bundle/components/Badge.md +6 -3
  5. package/bundle/components/BodyPage.md +72 -4
  6. package/bundle/components/Button.md +46 -43
  7. package/bundle/components/ButtonDropdownExtended.md +3 -2
  8. package/bundle/components/ButtonIcon.md +7 -4
  9. package/bundle/components/Calendar.md +62 -59
  10. package/bundle/components/Caption.md +26 -23
  11. package/bundle/components/Checkbox.md +32 -29
  12. package/bundle/components/CheckboxTreeExtended.md +9 -5
  13. package/bundle/components/Chip.md +44 -41
  14. package/bundle/components/CodeText.md +26 -23
  15. package/bundle/components/Col.md +1 -2
  16. package/bundle/components/CollapsibleTree.md +8 -5
  17. package/bundle/components/CollapsibleTreeExtended.md +6 -1
  18. package/bundle/components/DatePickerExtended.md +409 -262
  19. package/bundle/components/Dropdown.md +33 -28
  20. package/bundle/components/EmptyView.md +12 -5
  21. package/bundle/components/ExpandAnimation.md +263 -218
  22. package/bundle/components/Footer.md +235 -278
  23. package/bundle/components/FooterPage.md +6 -2
  24. package/bundle/components/FormField.md +44 -41
  25. package/bundle/components/FormGroup.md +192 -52
  26. package/bundle/components/Header.md +491 -211
  27. package/bundle/components/HeaderPage.md +6 -2
  28. package/bundle/components/ImageGallery.md +33 -34
  29. package/bundle/components/ImageGalleryExtended.md +33 -34
  30. package/bundle/components/Island.md +52 -14
  31. package/bundle/components/LightBox.md +25 -18
  32. package/bundle/components/Link.md +211 -96
  33. package/bundle/components/ListActionItem.md +7 -4
  34. package/bundle/components/ListItem.md +11 -8
  35. package/bundle/components/ListItemControlsButton.md +16 -13
  36. package/bundle/components/ListItemControlsButtonDropdown.md +9 -6
  37. package/bundle/components/ListItemSelectable.md +7 -4
  38. package/bundle/components/ListMasterFooter.md +8 -5
  39. package/bundle/components/ListMasterHeader.md +8 -5
  40. package/bundle/components/ListSortableItem.md +11 -8
  41. package/bundle/components/ListTableItem.md +7 -4
  42. package/bundle/components/LoaderMiddle.md +7 -4
  43. package/bundle/components/LoaderScreen.md +11 -8
  44. package/bundle/components/LoaderSmall.md +7 -4
  45. package/bundle/components/Marker.md +184 -69
  46. package/bundle/components/MarkerStatus.md +206 -88
  47. package/bundle/components/MaskedField.md +2 -4
  48. package/bundle/components/MasterTable.md +602 -0
  49. package/bundle/components/ModalWindow.md +7 -4
  50. package/bundle/components/MultiselectField.md +2183 -132
  51. package/bundle/components/Notification.md +12 -9
  52. package/bundle/components/Overlay.md +33 -5
  53. package/bundle/components/Page.md +2 -2
  54. package/bundle/components/Pagination.md +27 -21
  55. package/bundle/components/Row.md +1 -1
  56. package/bundle/components/SelectExtendedField.md +3 -3
  57. package/bundle/components/SelectField.md +466 -148
  58. package/bundle/components/SliderExtended.md +39 -36
  59. package/bundle/components/SmallInput.md +194 -51
  60. package/bundle/components/Suggest.md +535 -99
  61. package/bundle/components/SwipeableArea.md +428 -79
  62. package/bundle/components/TableBasic.md +2302 -0
  63. package/bundle/components/TabsExtended.md +24 -21
  64. package/bundle/components/Tag.md +263 -78
  65. package/bundle/components/Text.md +28 -25
  66. package/bundle/components/TextField.md +3 -4
  67. package/bundle/components/ThemeProvider.md +50 -1
  68. package/bundle/components/Title.md +26 -23
  69. package/bundle/components/Tooltip.md +24 -21
  70. package/bundle/components/TopOverlay.md +368 -89
  71. package/bundle/components/TreeView.md +343 -166
  72. package/bundle/components/TreeViewNode.md +436 -0
  73. package/bundle/guides/codestyle.md +3 -0
  74. package/bundle/guides/commits.md +106 -26
  75. package/bundle/guides/context.md +84 -12
  76. package/bundle/guides/guidelines.md +321 -0
  77. package/bundle/guides/template.md +22 -12
  78. package/bundle/manifest.json +54 -20
  79. package/bundle/release-notes/1.44.0.mdx +113 -0
  80. package/bundle/release-notes/1.45.0.mdx +124 -0
  81. package/bundle/release-notes/1.46.0.mdx +7 -0
  82. package/bundle/tokens.json +6362 -0
  83. package/dist/index.js +177 -28
  84. package/dist/index.js.map +1 -1
  85. 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
- - --triplex-next-Slider-Rail_Background
7
- - --triplex-next-Slider-Rail_Background_Disabled
8
- - --triplex-next-Slider-Track_Background_Default
9
- - --triplex-next-Slider-Track_Background_Hover
10
- - --triplex-next-Slider-Track_Background_Disabled
11
- - --triplex-next-Slider-Dot_Background_Default
12
- - --triplex-next-Slider-Dot_Background_Hover
13
- - --triplex-next-Slider-Dot_Background_Select
14
- - --triplex-next-Slider-Dot_Background_Disabled
15
- - --triplex-next-Slider-Dot_Inner_Background
16
- - --triplex-next-Slider-Dot_Inner_Background_Disabled
17
- - --triplex-next-Slider-Dot_Focus
18
- - --triplex-next-Slider-Mark_Dot_Background_Default
19
- - --triplex-next-Slider-Mark_Dot_Background_Selected
20
- - --triplex-next-Slider-Mark_Dot_Background_Selected_Disabled
21
- - --triplex-next-Slider-Tooltip_Background
22
- - --triplex-next-Slider-Tooltip_Color
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
- --triplex-next-Slider-Rail_Background
136
- --triplex-next-Slider-Rail_Background_Disabled
137
- --triplex-next-Slider-Track_Background_Default
138
- --triplex-next-Slider-Track_Background_Hover
139
- --triplex-next-Slider-Track_Background_Disabled
140
- --triplex-next-Slider-Dot_Background_Default
141
- --triplex-next-Slider-Dot_Background_Hover
142
- --triplex-next-Slider-Dot_Background_Select
143
- --triplex-next-Slider-Dot_Background_Disabled
144
- --triplex-next-Slider-Dot_Inner_Background
145
- --triplex-next-Slider-Dot_Inner_Background_Disabled
146
- --triplex-next-Slider-Dot_Focus
147
- --triplex-next-Slider-Mark_Dot_Background_Default
148
- --triplex-next-Slider-Mark_Dot_Background_Selected
149
- --triplex-next-Slider-Mark_Dot_Background_Selected_Disabled
150
- --triplex-next-Slider-Tooltip_Background
151
- --triplex-next-Slider-Tooltip_Color
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
- Токены общие для всего семейства слайдеров и названы с префиксом `Slider-`, а не
155
- `SliderExtended-`: `Slider` и `SliderRange` — это тот же `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: Form Controls (internal)
4
- figma-node: ""
5
- figma-file: ""
6
- related: [TextField]
3
+ category: TextFields
4
+ related: [DocumentNumberEdit, TextField]
7
5
  tokens:
8
- - --triplex-next-SmallInput-Background
9
- - --triplex-next-SmallInput-Color
10
- - --triplex-next-SmallInput-PlaceholderColor
11
- - --triplex-next-SmallInput-Shadow
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
- Примитивное уменьшенное поле ввода (`<input type="text">`) без рамки, для
21
- использования внутри составных компонентов шапки/панелей (исторически —
22
- `HeaderPage`). Все props — стандартные `React.InputHTMLAttributes<HTMLInputElement>`
23
- плюс `className`.
18
+ Компактное однострочное текстовое поле ввода высотой 20px. Тонкая обёртка над `<input type="text">`:
19
+ свой CSS-модуль и своя группа дизайн-токенов, ничего больше — ни лейбла, ни статусов, ни префиксов,
20
+ ни обвязки семейства `FormField`. Ширина всегда 100% контейнера, поэтому размер задаётся снаружи.
24
21
 
25
- Используй когда: нужен компактный input внутри другого контейнера, где
26
- полноценный `TextField` избыточен. В формах использовать `TextField` /
27
- `TextareaField`.
22
+ Используй когда: нужно инлайн-редактирование короткого значения в плотной вёрстке, где полноценное
23
+ поле формы не помещается — например, номер документа в шапке страницы (`DocumentNumberEdit`).
28
24
 
29
- Не используй когда: нужен valid/error-стейт, label, floating label, префиксы/
30
- суффиксы — для этого есть `TextField`.
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
- ```text
37
- src/components/SmallInput/
38
- ├── SmallInput.tsx # forwardRef<HTMLInputElement, ISmallInputProps>
39
- ├── index.ts # Barrel
40
- └── styles/SmallInput.module.less
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
- ## Варианты и props
63
+ ## Дизайн-токены
46
64
 
47
- ### `ISmallInputProps`
65
+ Переопределяются через `ThemeProvider` (prop `tokens`) — см. `ThemeProvider-ai.md` →
66
+ «Как переопределять токены». Значения по умолчанию — `src/components/DesignTokens/components/SmallInput.ts`.
48
67
 
49
- ```ts
50
- extends React.InputHTMLAttributes<HTMLInputElement>
68
+ ```text
69
+ SmallInput.Background
70
+ SmallInput.Color
71
+ SmallInput.PlaceholderColor
72
+ SmallInput.Shadow
51
73
  ```
52
74
 
53
- Нет собственных props — полностью прозрачная обёртка над `<input>`:
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<HTMLInputElement>`** — не убирать; потребители зависят от ref.
67
- - **`type="text"`** захардкожен — другие типы не поддерживаются.
68
- - **Нет собственного state** — всегда управляемый через внешний `value`/`onChange`
69
- (или стандартный uncontrolled через `defaultValue`).
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
- - Стандартный `<input>`, наследует accessibility поведения браузера.
78
- - Потребитель обязан обеспечить `aria-label` / `aria-labelledby`, если вход
79
- используется без видимого `<label>` рядом.
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
- - `TextField` — полноценный input с label/error/hint.
86
- - `Header` / `HeaderPage` — исторические потребители SmallInput.
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
- Отдельных stories нет — компонент внутренний, демонстрируется через stories
93
- потребителей (Header и т.п.).
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-04-18 | Создан документ |
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
+