@sberbusiness/triplex-next-mcp-server 1.45.0-beta → 1.48.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 -7
- package/bundle/components/AmountField.md +222 -323
- package/bundle/components/Avatar.md +138 -146
- package/bundle/components/CardAction.md +615 -0
- package/bundle/components/CardStatic.md +402 -0
- package/bundle/components/CheckboxTree.md +157 -215
- package/bundle/components/CheckboxTreeExtended.md +7 -7
- package/bundle/components/Chip.md +7 -6
- package/bundle/components/ChipGroup.md +1 -1
- package/bundle/components/ChipMonthYearPicker.md +344 -0
- package/bundle/components/ChipMultiselect.md +1251 -0
- package/bundle/components/ChipOptions.md +329 -0
- package/bundle/components/ChipSort.md +333 -0
- package/bundle/components/ChipSuggest.md +588 -0
- package/bundle/components/CollapsibleTree.md +8 -4
- package/bundle/components/CollapsibleTreeExtended.md +8 -6
- package/bundle/components/Confirm.md +346 -281
- package/bundle/components/DateField.md +222 -303
- package/bundle/components/DatePickerExtended.md +3 -1
- package/bundle/components/DateRange.md +351 -210
- package/bundle/components/FooterPage.md +1 -0
- package/bundle/components/FormField.md +14 -5
- package/bundle/components/FormGroup.md +3 -2
- package/bundle/components/HelpBox.md +7 -1
- package/bundle/components/IslandAccordion.md +443 -152
- package/bundle/components/IslandWidget.md +622 -157
- package/bundle/components/LightBox.md +8 -0
- package/bundle/components/ListMaster.md +2 -2
- package/bundle/components/ListTableItem.md +6 -6
- package/bundle/components/MaskedField.md +2 -1
- package/bundle/components/MonthYearField.md +18 -5
- package/bundle/components/Slider.md +389 -97
- package/bundle/components/SliderRange.md +486 -105
- package/bundle/components/StatusTracker.md +386 -94
- package/bundle/components/Stepper.md +355 -102
- package/bundle/components/StepperExtended.md +633 -0
- package/bundle/components/SuggestField.md +1049 -96
- package/bundle/components/SwipeableArea.md +7 -7
- package/bundle/components/Tabs.md +265 -92
- package/bundle/components/TabsExtended.md +18 -18
- package/bundle/components/TabsLine.md +301 -127
- package/bundle/components/TagColor.md +187 -66
- package/bundle/components/TagGroup.md +184 -48
- package/bundle/components/TextareaField.md +278 -70
- package/bundle/components/TopOverlay.md +17 -1
- package/bundle/components/TreeView.md +16 -7
- package/bundle/components/TriggerClickOnKeyDownEvent.md +277 -0
- package/bundle/components/UploadZone.md +318 -0
- package/bundle/guides/codestyle.md +16 -1
- package/bundle/guides/commits.md +47 -1
- package/bundle/guides/tests.md +23 -2
- package/bundle/manifest.json +92 -24
- package/bundle/release-notes/1.46.0.mdx +59 -0
- package/bundle/release-notes/1.47.0.mdx +122 -0
- package/bundle/release-notes/1.48.0.mdx +68 -0
- package/bundle/release-notes/1.49.0.mdx +7 -0
- package/bundle/tokens.json +3 -3
- package/dist/index.js +220 -6
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -101,6 +101,13 @@ LightBox.SideOverlay_Background
|
|
|
101
101
|
css-переменную `--lightBox-scroll-width`, которую вычитают из ширины оверлеев. Ширины размеров
|
|
102
102
|
(`664/864/1064/1264`) заданы LESS-константами `@lightBox-content-max-width-*`.
|
|
103
103
|
|
|
104
|
+
Боковые отступы контента лайтбокса (`@lightBoxContentPaddingX`, 80px — место под кнопки
|
|
105
|
+
вперёд/назад, на экранах до 1024px включительно 0) публикуются css-переменной
|
|
106
|
+
`--lightBox-content-padding-x` на `.lightBoxContent`. По ней потомки выравниваются с колонкой
|
|
107
|
+
страницы — так это делает обёртка `TopOverlay`. Переменная объявлена именно на `.lightBoxContent`,
|
|
108
|
+
поэтому вне его поддерева (например в `LightBox.SideOverlay` — он сиблинг `LightBox.Content`,
|
|
109
|
+
а не его потомок) она не видна, и читающие её стили получают фолбэк 0.
|
|
110
|
+
|
|
104
111
|
---
|
|
105
112
|
|
|
106
113
|
## Инварианты
|
|
@@ -202,6 +209,7 @@ css-переменную `--lightBox-scroll-width`, которую вычита
|
|
|
202
209
|
|
|
203
210
|
| Дата | Изменение |
|
|
204
211
|
|---|---|
|
|
212
|
+
| 2026-09-21 | Боковые отступы `.lightBoxContent` вынесены в css-переменную `--lightBox-content-padding-x` (константа `@lightBoxContentPaddingX`). Нужна, чтобы `TopOverlay` выравнивался по колонке контента |
|
|
205
213
|
| 2026-07-22 | Создан документ (Phase 1 AI-Ready). В том же изменении — AI-рефакторинг: JSDoc на props, общий `LightBoxArrow` для Prev/Next, хук `useLightBoxSidebarVisibility` для сайдбаров, устранение eslint-подавлений; публичный API не менялся |
|
|
206
214
|
| 2026-07-22 | Добавлен `export` к props-интерфейсам `ILightBoxControlsProps`, `ILightBoxCloseProps`, `ILightBoxPrevProps`, `ILightBoxNextProps`, `ILightBoxSideOverlayLoaderProps` (аддитивно, для консистентности с остальными интерфейсами компонента) |
|
|
207
215
|
| 2026-07-22 | Багфиксы по ревью PR #474: клавиатурные триггеры контролов целятся в видимую кнопку (стрелки не работали на desktop, Esc — на mobile); таймер-хак блокировки скролла заменён счётчиком смонтированных лайтбоксов; `LightBoxViewManager` снимает классы mount-ноды при размонтировании последнего менеджера |
|
|
@@ -628,13 +628,13 @@ export const Default = () => {
|
|
|
628
628
|
controlButtons={
|
|
629
629
|
<>
|
|
630
630
|
<ListItemControlsButton
|
|
631
|
-
icon={<AttachmentStrokeSrvIcon20 paletteIndex={
|
|
631
|
+
icon={<AttachmentStrokeSrvIcon20 paletteIndex={0} />}
|
|
632
632
|
>
|
|
633
633
|
Скачать
|
|
634
634
|
</ListItemControlsButton>
|
|
635
635
|
|
|
636
636
|
<ListItemControlsButtonDropdown
|
|
637
|
-
icon={<DotshorizontalStrokeSrvIcon20 paletteIndex={
|
|
637
|
+
icon={<DotshorizontalStrokeSrvIcon20 paletteIndex={0} />}
|
|
638
638
|
options={itemActions}
|
|
639
639
|
>
|
|
640
640
|
Действия
|
|
@@ -156,11 +156,11 @@ export const Default = () => {
|
|
|
156
156
|
onClickItem={() => {}}
|
|
157
157
|
controlButtons={
|
|
158
158
|
<>
|
|
159
|
-
<ListItemControlsButton icon={<AttachmentStrokeSrvIcon20 paletteIndex={
|
|
159
|
+
<ListItemControlsButton icon={<AttachmentStrokeSrvIcon20 paletteIndex={0} />}>
|
|
160
160
|
Скачать
|
|
161
161
|
</ListItemControlsButton>
|
|
162
162
|
<ListItemControlsButtonDropdown
|
|
163
|
-
icon={<DotshorizontalStrokeSrvIcon20 paletteIndex={
|
|
163
|
+
icon={<DotshorizontalStrokeSrvIcon20 paletteIndex={0} />}
|
|
164
164
|
options={options}
|
|
165
165
|
>
|
|
166
166
|
Действия
|
|
@@ -245,11 +245,11 @@ export const Selectable = () => {
|
|
|
245
245
|
onClickItem={() => console.log("Клик по карточке.")}
|
|
246
246
|
controlButtons={
|
|
247
247
|
<>
|
|
248
|
-
<ListItemControlsButton icon={<AttachmentStrokeSrvIcon20 paletteIndex={
|
|
248
|
+
<ListItemControlsButton icon={<AttachmentStrokeSrvIcon20 paletteIndex={0} />}>
|
|
249
249
|
Скачать
|
|
250
250
|
</ListItemControlsButton>
|
|
251
251
|
<ListItemControlsButtonDropdown
|
|
252
|
-
icon={<DotshorizontalStrokeSrvIcon20 paletteIndex={
|
|
252
|
+
icon={<DotshorizontalStrokeSrvIcon20 paletteIndex={0} />}
|
|
253
253
|
options={options}
|
|
254
254
|
>
|
|
255
255
|
Действия
|
|
@@ -354,11 +354,11 @@ export const WithSwipeEmulation = () => {
|
|
|
354
354
|
onClickItem={() => console.log("Клик по карточке.")}
|
|
355
355
|
controlButtons={
|
|
356
356
|
<>
|
|
357
|
-
<ListItemControlsButton icon={<AttachmentStrokeSrvIcon20 paletteIndex={
|
|
357
|
+
<ListItemControlsButton icon={<AttachmentStrokeSrvIcon20 paletteIndex={0} />}>
|
|
358
358
|
Скачать
|
|
359
359
|
</ListItemControlsButton>
|
|
360
360
|
<ListItemControlsButtonDropdown
|
|
361
|
-
icon={<DotshorizontalStrokeSrvIcon20 paletteIndex={
|
|
361
|
+
icon={<DotshorizontalStrokeSrvIcon20 paletteIndex={0} />}
|
|
362
362
|
options={options}
|
|
363
363
|
>
|
|
364
364
|
Действия
|
|
@@ -49,7 +49,7 @@ version: "1.0"
|
|
|
49
49
|
- **Значение всегда контролируемое.** `maskedInputProps.value` пропускается через `conformToMask`, поэтому в `onChange` приходит уже отформатированное значение (`"12.12."` после ввода четырёх цифр даты). Хранить в state можно как форматированное, так и «сырое» значение — маска применяется к обоим.
|
|
50
50
|
- **`onChange` вызывается только при реальном изменении** отформатированного значения: повторное событие с тем же значением игнорируется.
|
|
51
51
|
- **Подсказка маски** (`placeholderMask` или заполнение символом `placeholderChar`) рисуется отдельным `aria-hidden` слоем поверх поля и показывается, только когда поле в фокусе или заполнено. Если задан обычный `placeholder`, у пустого поля показывается он, а не маска.
|
|
52
|
-
- **Пресеты масок для телефона и SWIFT обрабатываются особо:** телефон нормализует
|
|
52
|
+
- **Пресеты масок для телефона и SWIFT обрабатываются особо:** телефон нормализует номер с `7`/`8`/`+7` в начале — и переданный в `value`, и введённый или вставленный в поле; SWIFT-код приводится к верхнему регистру.
|
|
53
53
|
- Ограничение длины задаёт сама маска — `maxLength` не нужен; `counter`, если он нужен, считает потребитель.
|
|
54
54
|
- Кнопка очистки не встроена — передаётся потребителем как `postfix={<FormFieldClear onClick={...} />}`.
|
|
55
55
|
|
|
@@ -118,6 +118,7 @@ version: "1.0"
|
|
|
118
118
|
| 2026-08-07 | Создан документ (TRI-56). AI-рефакторинг MaskedField, unit-тесты, миграция stories на modern pattern |
|
|
119
119
|
| 2026-08-11 | Тип `maskedInputProps.ref` исправлен на `React.RefObject<HTMLDivElement>` — соответствует фактическому ref-таргету (правки по ревью PR #515) |
|
|
120
120
|
| 2026-08-12 | Исправления в `FormFieldMaskedInput` по ревью PR #515: убрана мутация prop `value` в `getValue()`, `defaultValue` больше не уходит в `<input>` (предупреждение React о controlled/uncontrolled) и исключён из `IFormFieldMaskedInputProps` |
|
|
121
|
+
| 2026-09-09 | Исправлено: значение с кодом страны раскладывалось по маске телефона со сдвигом и теряло последнюю цифру. Нормализация номера вынесена в `normalizePhoneText` и применяется и к внешнему `value`, и к слою с маской |
|
|
121
122
|
|
|
122
123
|
---
|
|
123
124
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: MonthYearField
|
|
3
3
|
category: Date components
|
|
4
|
-
related: [DatePickerExtended, MonthYearRange, TextField, Calendar]
|
|
4
|
+
related: [DatePickerExtended, MonthYearRange, ChipMonthYearPicker, TextField, Calendar]
|
|
5
5
|
tokens: []
|
|
6
6
|
stories: stories/MonthYearField/MonthYearField.stories.tsx
|
|
7
7
|
version: "1.0"
|
|
@@ -61,7 +61,6 @@ version: "1.0"
|
|
|
61
61
|
- `forwardRef` на компоненте — не убирать. Ref пробрасывается в `DatePickerExtended` (корневой DOM-элемент — элемент `DatePickerExtended`).
|
|
62
62
|
- Публичный API (`IMonthYearFieldProps`: `value`, `onChange`, `onClear`, `targetProps`, `placeholder` + унаследованные `size`/`status`/`label` и props `DatePickerExtended`) — изменение имён/типов/значений — breaking change.
|
|
63
63
|
- Поле read-only по контракту — не делать его редактируемым без обсуждения (компонент не имеет логики валидации клавиатурного ввода).
|
|
64
|
-
- Отображаемый формат `"MMM YYYY"` зафиксирован в `inputMonthYearFormat`; менять его — визуальный breaking change для потребителей.
|
|
65
64
|
- Sync-эффект в `MonthYearField.tsx` (`useEffect` по `[value, format, limitRange]` с `eslint-disable react-hooks/exhaustive-deps`) — намеренная синхронизация derived-стейта `pickerValues` с внешним `value`. Не переписывать без анализа поведения: сравнение идёт по `inputString`, чтобы не сбрасывать стейт при эквивалентных значениях.
|
|
66
65
|
- Внутренние символы `MonthYearPickerUtils` (`utils.ts`), `MonthYearFieldContext`, `MonthYearFieldTarget` не экспортируются через barrel — это приватные детали реализации.
|
|
67
66
|
|
|
@@ -80,6 +79,7 @@ version: "1.0"
|
|
|
80
79
|
|
|
81
80
|
- `DatePickerExtended` — родительский компонент выпадающего календаря; `MonthYearField` конфигурирует его в режим `MONTH_YEAR` через render-props.
|
|
82
81
|
- `MonthYearRange` — выбор диапазона месяцев; использует `MonthYearField` как поля «от» и «до».
|
|
82
|
+
- `ChipMonthYearPicker` — тот же выбор месяца в виде чипса-фильтра: наследует `IMonthYearFieldProps` и утилиты `MonthYearPickerUtils`, но вместо поля формы рендерит `Chip`.
|
|
83
83
|
- `TextField` — внутреннее поле-триггер.
|
|
84
84
|
- `MonthYearFieldTarget` (внутренний, не в barrel) — рендерит `TextField` с иконкой календаря и кнопкой очистки, обрабатывает клик/клавиатуру для открытия дропдауна. Описан здесь, отдельного AI.md не имеет.
|
|
85
85
|
- `MonthYearFieldContext` (внутренний, не в barrel) — прокидывает `onChange` в target; тривиальный контекст без своей логики.
|
|
@@ -110,6 +110,7 @@ version: "1.0"
|
|
|
110
110
|
|---|---|
|
|
111
111
|
| 2026-06-16 | Создан документ. AI-рефакторинг (JSDoc-фиксы), unit-тесты для `utils.ts`, story `VisualTests` и включение скриншот-тестов |
|
|
112
112
|
| 2026-06-16 | Добавлена story `VisualTestsOpen` — скриншот раскрытого dropdown с календарём (через `play`) |
|
|
113
|
+
| 2026-09-07 | В «Связанные компоненты» добавлен `ChipMonthYearPicker` — чипс-вариант того же выбора месяца |
|
|
113
114
|
|
|
114
115
|
---
|
|
115
116
|
|
|
@@ -128,7 +129,7 @@ export const DefaultExample = () => {
|
|
|
128
129
|
|
|
129
130
|
return (
|
|
130
131
|
<div style={{ maxWidth: 300 }}>
|
|
131
|
-
<MonthYearField value={value} placeholder="
|
|
132
|
+
<MonthYearField value={value} placeholder="Select to proceed" label="Label" onChange={setValue} />
|
|
132
133
|
</div>
|
|
133
134
|
);
|
|
134
135
|
};
|
|
@@ -152,7 +153,13 @@ const SizeItem = ({ size }: ISizeItemProps) => {
|
|
|
152
153
|
return (
|
|
153
154
|
<div style={{ maxWidth: 300 }}>
|
|
154
155
|
<div style={{ marginBottom: 8, fontSize: 16, fontWeight: 700 }}>{size.toUpperCase()}</div>
|
|
155
|
-
<MonthYearField
|
|
156
|
+
<MonthYearField
|
|
157
|
+
size={size}
|
|
158
|
+
value={value}
|
|
159
|
+
label="Label"
|
|
160
|
+
placeholder="Select to proceed"
|
|
161
|
+
onChange={setValue}
|
|
162
|
+
/>
|
|
156
163
|
</div>
|
|
157
164
|
);
|
|
158
165
|
};
|
|
@@ -186,7 +193,13 @@ const StatusItem = ({ status }: IStatusItemProps) => {
|
|
|
186
193
|
return (
|
|
187
194
|
<div style={{ maxWidth: 300 }}>
|
|
188
195
|
<div style={{ marginBottom: 8, fontSize: 16, fontWeight: 700 }}>{status.toUpperCase()}</div>
|
|
189
|
-
<MonthYearField
|
|
196
|
+
<MonthYearField
|
|
197
|
+
status={status}
|
|
198
|
+
value={value}
|
|
199
|
+
label="Label"
|
|
200
|
+
placeholder="Select to proceed"
|
|
201
|
+
onChange={setValue}
|
|
202
|
+
/>
|
|
190
203
|
</div>
|
|
191
204
|
);
|
|
192
205
|
};
|