@sberbusiness/triplex-next-mcp-server 0.24.0-beta2 → 1.40.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 +10 -0
- package/bundle/components/AlertContext.md +268 -0
- package/bundle/components/BodyPage.md +186 -0
- package/bundle/components/Button.md +93 -85
- package/bundle/components/ButtonDropdown.md +36 -70
- package/bundle/components/ButtonDropdownExtended.md +422 -0
- package/bundle/components/ButtonIcon.md +41 -48
- package/bundle/components/Caption.md +291 -0
- package/bundle/components/Checkbox.md +43 -122
- package/bundle/components/CheckboxXGroup.md +109 -46
- package/bundle/components/CheckboxYGroup.md +77 -49
- package/bundle/components/CodeText.md +197 -0
- package/bundle/components/Col.md +311 -162
- package/bundle/components/CollapsibleTree.md +584 -0
- package/bundle/components/CollapsibleTreeExtended.md +422 -0
- package/bundle/components/Dropdown.md +748 -346
- package/bundle/components/EmptyView.md +14 -15
- package/bundle/components/FooterPage.md +203 -0
- package/bundle/components/Gap.md +115 -57
- package/bundle/components/HeaderPage.md +226 -0
- package/bundle/components/HelpBox.md +45 -84
- package/bundle/components/ImageGallery.md +423 -0
- package/bundle/components/ImageGalleryExtended.md +606 -0
- package/bundle/components/LightBox.md +2252 -233
- package/bundle/components/List.md +216 -183
- package/bundle/components/ListActionItem.md +157 -0
- package/bundle/components/ListItem.md +276 -0
- package/bundle/components/ListItemControlsButton.md +103 -0
- package/bundle/components/ListItemControlsButtonDropdown.md +107 -0
- package/bundle/components/ListItemSelectable.md +99 -0
- package/bundle/components/ListItemTable.md +390 -0
- package/bundle/components/ListMaster.md +876 -156
- package/bundle/components/ListMasterFooter.md +80 -0
- package/bundle/components/ListMasterHeader.md +86 -0
- package/bundle/components/ListSortable.md +153 -0
- package/bundle/components/ListSortableItem.md +175 -0
- package/bundle/components/ListTableItem.md +391 -0
- package/bundle/components/ModalWindow.md +427 -237
- package/bundle/components/MonthYearField.md +145 -109
- package/bundle/components/Notification.md +625 -155
- package/bundle/components/Overlay.md +271 -170
- package/bundle/components/Page.md +284 -186
- package/bundle/components/Pagination.md +206 -229
- package/bundle/components/Portal.md +131 -67
- package/bundle/components/Row.md +171 -69
- package/bundle/components/Text.md +320 -0
- package/bundle/components/TextField.md +364 -97
- package/bundle/components/Title.md +296 -0
- package/bundle/guides/codestyle.md +38 -11
- package/bundle/guides/commits.md +119 -26
- package/bundle/guides/context.md +34 -30
- package/bundle/guides/stories.md +110 -40
- package/bundle/guides/template.md +3 -7
- package/bundle/guides/tests.md +48 -2
- package/bundle/manifest.json +275 -30
- package/bundle/release-notes/1.26.0.mdx +33 -2
- package/bundle/release-notes/1.27.0.mdx +43 -0
- package/bundle/release-notes/1.28.0.mdx +25 -0
- package/bundle/release-notes/1.29.0.mdx +47 -0
- package/bundle/release-notes/1.30.0.mdx +56 -0
- package/bundle/release-notes/1.31.0.mdx +52 -0
- package/bundle/release-notes/1.32.0.mdx +35 -0
- package/bundle/release-notes/1.33.0.mdx +61 -0
- package/bundle/release-notes/1.34.0.mdx +35 -0
- package/bundle/release-notes/1.35.0.mdx +21 -0
- package/bundle/release-notes/1.35.1.mdx +11 -0
- package/bundle/release-notes/1.36.0.mdx +21 -0
- package/bundle/release-notes/1.37.0.mdx +71 -0
- package/bundle/release-notes/1.38.0.mdx +36 -0
- package/bundle/release-notes/1.39.0.mdx +66 -0
- package/bundle/release-notes/1.40.0.mdx +27 -0
- package/bundle/release-notes/1.41.0.mdx +7 -0
- package/package.json +1 -1
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: Notification
|
|
3
3
|
category: Feedback
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
related: [NotificationGrouped, Button, AlertContext, UnorderedList]
|
|
5
|
+
tokens:
|
|
6
|
+
- --triplex-next-Notification-Background
|
|
7
|
+
- --triplex-next-Notification-Color
|
|
8
|
+
- --triplex-next-Notification-Shadow
|
|
9
|
+
- --triplex-next-Notification-TimeColor
|
|
8
10
|
stories: stories/Notification/Notification.stories.tsx
|
|
9
11
|
version: "1.0"
|
|
10
12
|
---
|
|
@@ -13,221 +15,689 @@ version: "1.0"
|
|
|
13
15
|
|
|
14
16
|
## Назначение
|
|
15
17
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
потребителем; компонент задаёт лэйаут, типографику и поведение close-by-
|
|
20
|
-
hover для side-overlay.
|
|
18
|
+
Составной компонент уведомления для отображения сообщений об успехе, ошибке, предупреждении,
|
|
19
|
+
а также бизнес-уведомлений (mail-нотификации, формы обратной связи). Состоит из иконки,
|
|
20
|
+
тела (заголовок, текст, список, футер), кнопки закрытия и времени.
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
Используй когда: показываешь информационное / системное сообщение
|
|
27
|
-
(в SideOverlay, Alert, отдельной странице, history-list).
|
|
22
|
+
Используй когда: нужно показать уведомление в списке нотификаций, в side-overlay или как алерт.
|
|
23
|
+
Не используй когда: нужно инлайновое сообщение об ошибке формы (используй `Alert`) или
|
|
24
|
+
пустое состояние (используй `EmptyView`).
|
|
28
25
|
|
|
29
26
|
---
|
|
30
27
|
|
|
31
|
-
##
|
|
32
|
-
|
|
33
|
-
```text
|
|
34
|
-
src/components/Notification/
|
|
35
|
-
├── Notification.tsx # FC (как INotificationSFC) + slots
|
|
36
|
-
├── NotificationGrouped.tsx # FC, обёртка + декоративный footer
|
|
37
|
-
├── components/
|
|
38
|
-
│ ├── NotificationIcon.tsx # <div> wrapper для иконки
|
|
39
|
-
│ ├── NotificationBody.tsx # FC (как INotificationBodySFC) + slots
|
|
40
|
-
│ ├── NotificationHeader.tsx # <h3>
|
|
41
|
-
│ ├── NotificationBodyContent.tsx # <Text size=B3 type=PRIMARY tag=div>
|
|
42
|
-
│ ├── NotificationBodyList.tsx # <UnorderedList> + map по values[]
|
|
43
|
-
│ ├── NotificationFooter.tsx # <div>
|
|
44
|
-
│ ├── NotificationClose.tsx # <ButtonIcon> с CrossStrokeSrvIcon16
|
|
45
|
-
│ ├── NotificationTime.tsx # <span> с временем
|
|
46
|
-
│ └── NotificationGroupedFooter.tsx # 2 декоративных <div>
|
|
47
|
-
├── index.ts # Barrel: Notification + NotificationGrouped
|
|
48
|
-
├── styles/Notification.module.less
|
|
49
|
-
└── __tests__/Notification.test.tsx
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
---
|
|
28
|
+
## Структура (compound API)
|
|
53
29
|
|
|
54
|
-
|
|
30
|
+
Компонент собирается из статических подкомпонентов. Порядок дочерних элементов определяет вёрстку.
|
|
55
31
|
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
</Notification.Body>
|
|
67
|
-
<Notification.Close onClick={handleClose} />
|
|
68
|
-
<Notification.Time time="12:34" />
|
|
69
|
-
</Notification>
|
|
70
|
-
|
|
71
|
-
<NotificationGrouped>
|
|
72
|
-
<Notification>...</Notification>
|
|
73
|
-
</NotificationGrouped>
|
|
32
|
+
```
|
|
33
|
+
Notification
|
|
34
|
+
├── Notification.Icon — кастомная иконка (слева)
|
|
35
|
+
├── Notification.Body — тело уведомления
|
|
36
|
+
│ ├── Notification.Body.Header — заголовок (<h3>)
|
|
37
|
+
│ ├── Notification.Body.Content — основной текст (Typography Text)
|
|
38
|
+
│ ├── Notification.Body.List — маркированный список (UnorderedList)
|
|
39
|
+
│ └── Notification.Body.Footer — футер (кнопки, Alert и т.д.)
|
|
40
|
+
├── Notification.Close — кнопка закрытия (ButtonIcon)
|
|
41
|
+
└── Notification.Time — время уведомления
|
|
74
42
|
```
|
|
75
43
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
но стилизация рассчитана только на эти 4 слота.
|
|
44
|
+
`NotificationGrouped` — обёртка для отображения уведомления как «стопки» (визуальный эффект
|
|
45
|
+
нескольких карточек снизу). Принимает одно `Notification` в `children`.
|
|
79
46
|
|
|
80
47
|
---
|
|
81
48
|
|
|
82
49
|
## Варианты и props
|
|
83
50
|
|
|
84
|
-
### Notification
|
|
51
|
+
### Notification
|
|
85
52
|
|
|
86
|
-
| Prop | Тип |
|
|
53
|
+
| Prop | Тип | По умолчанию | Описание |
|
|
87
54
|
|---|---|---|---|
|
|
88
|
-
| `children` | `ReactElement \| ReactElement[]` | — | Только Icon
|
|
89
|
-
| `withExtraBottomPadding` | `boolean` | `false` |
|
|
90
|
-
| `isShowCloseOnHover` | `boolean` | `false` |
|
|
91
|
-
| `onClick` | `() => void` | — |
|
|
92
|
-
| `...HTMLAttributes` | `ButtonHTMLAttributes<HTMLElement>` | — | Прокидываются на корневой `<div>` (имя `Button*` — историческое). |
|
|
93
|
-
|
|
94
|
-
- Корневой тег — **`<div role="alertdialog">`**, не `<button>` (несмотря на `ButtonHTMLAttributes`).
|
|
95
|
-
- `data-tx={process.env.npm_package_version}` — версия пакета.
|
|
55
|
+
| `children` | `ReactElement \| ReactElement[]` | — | Только `Icon`, `Body`, `Close`, `Time` |
|
|
56
|
+
| `withExtraBottomPadding` | `boolean` | `false` | Увеличенный отступ снизу (тип mail) |
|
|
57
|
+
| `isShowCloseOnHover` | `boolean` | `false` | Кнопка закрытия появляется по ховеру (для side-overlay/алерта) |
|
|
58
|
+
| `onClick` | `() => void` | — | Обработчик клика по уведомлению |
|
|
96
59
|
|
|
97
|
-
|
|
60
|
+
Наследует `React.ButtonHTMLAttributes<HTMLElement>` (остальные атрибуты прокидываются на корневой `div`).
|
|
98
61
|
|
|
99
|
-
|
|
100
|
-
- Каждый слот — `React.FC` (без forwardRef).
|
|
62
|
+
### Notification.Close
|
|
101
63
|
|
|
102
|
-
|
|
64
|
+
| Prop | Тип | Описание |
|
|
65
|
+
|---|---|---|
|
|
66
|
+
| `onClick` | `() => void` | Обработчик закрытия (обязателен) |
|
|
103
67
|
|
|
104
|
-
|
|
68
|
+
Наследует `IButtonIconProps` без `children` (`children?: never`).
|
|
105
69
|
|
|
106
|
-
### Notification.
|
|
70
|
+
### Notification.Time
|
|
107
71
|
|
|
108
|
-
|
|
72
|
+
| Prop | Тип | Описание |
|
|
73
|
+
|---|---|---|
|
|
74
|
+
| `time` | `ReactNode` | Значение времени уведомления |
|
|
109
75
|
|
|
110
|
-
### Notification.Body.List
|
|
76
|
+
### Notification.Body.List
|
|
111
77
|
|
|
112
|
-
|
|
113
|
-
|
|
78
|
+
| Prop | Тип | Описание |
|
|
79
|
+
|---|---|---|
|
|
80
|
+
| `values` | `string[]` | Элементы списка |
|
|
114
81
|
|
|
115
|
-
|
|
82
|
+
Наследует `IUnorderedListProps`.
|
|
116
83
|
|
|
117
|
-
|
|
84
|
+
### NotificationGrouped
|
|
118
85
|
|
|
119
|
-
|
|
86
|
+
| Prop | Тип | Описание |
|
|
87
|
+
|---|---|---|
|
|
88
|
+
| `children` | `ReactNode` | Вложенное уведомление |
|
|
120
89
|
|
|
121
|
-
|
|
122
|
-
- `onClick: () => void` (обязателен).
|
|
123
|
-
- `children?: never` — нельзя кастомизировать иконку.
|
|
124
|
-
- Обёрнут в `<span>` для позиционирования.
|
|
125
|
-
|
|
126
|
-
### Notification.Icon — `INotificationIconProps`
|
|
90
|
+
---
|
|
127
91
|
|
|
128
|
-
|
|
92
|
+
## Дизайн-токены
|
|
129
93
|
|
|
130
|
-
|
|
94
|
+
```
|
|
95
|
+
--triplex-next-Notification-Background (фон уведомления)
|
|
96
|
+
--triplex-next-Notification-Color (цвет текста)
|
|
97
|
+
--triplex-next-Notification-Shadow (тень карточки)
|
|
98
|
+
--triplex-next-Notification-TimeColor (цвет времени)
|
|
99
|
+
```
|
|
131
100
|
|
|
132
|
-
|
|
101
|
+
---
|
|
133
102
|
|
|
134
|
-
|
|
103
|
+
## Инварианты
|
|
135
104
|
|
|
136
|
-
- `
|
|
137
|
-
-
|
|
105
|
+
- `forwardRef` на `Notification`, `NotificationGrouped`, `NotificationBody` — не убирать. Ref ведёт на корневой `div`.
|
|
106
|
+
- Компонент собран паттерном `Object.assign(forwardRef(...), { ...статики })` — статики (`Icon`, `Body`, `Close`, `Time`; у `Body` — `Header`, `Content`, `List`, `Footer`) часть публичного API, переименовывать нельзя.
|
|
107
|
+
- Корневой элемент имеет `role="alertdialog"` — не менять.
|
|
108
|
+
- `children` корневого `Notification` ограничены типом `ReactElement` — допускаются только `Icon`/`Body`/`Close`/`Time`.
|
|
109
|
+
- CSS-классы `notification`, `notificationBody`, `notificationIcon`, `notificationClose`, `notificationGroupedWrapper`, `extraBottomPadding`, `showCloseOnHover` используются в тестах — не переименовывать.
|
|
138
110
|
|
|
139
111
|
---
|
|
140
112
|
|
|
141
|
-
##
|
|
113
|
+
## Accessibility
|
|
142
114
|
|
|
143
|
-
|
|
115
|
+
- Корневой элемент — `role="alertdialog"`.
|
|
116
|
+
- `Notification.Close` рендерит `ButtonIcon` с иконкой-крестиком; потребителю стоит передать `aria-label` для кнопки закрытия (библиотека мультиязычная, текст не хардкодится).
|
|
117
|
+
- Прочие aria-атрибуты прокидываются на корневой `div` через spread.
|
|
144
118
|
|
|
145
|
-
|
|
146
|
-
export const Notification: INotificationSFC = ((props) => {...}) as INotificationSFC;
|
|
147
|
-
Notification.displayName = "Notification";
|
|
148
|
-
Notification.Icon = NotificationIcon;
|
|
149
|
-
// ...
|
|
150
|
-
```
|
|
119
|
+
---
|
|
151
120
|
|
|
152
|
-
|
|
121
|
+
## Связанные компоненты
|
|
153
122
|
|
|
154
|
-
|
|
123
|
+
- `NotificationGrouped` — обёртка для отображения уведомления стопкой.
|
|
124
|
+
- `Button` — типичное содержимое `Notification.Body.Footer`.
|
|
125
|
+
- `AlertContext` — может вкладываться в `Notification.Body.Footer`.
|
|
126
|
+
- `UnorderedList` — основа `Notification.Body.List`.
|
|
155
127
|
|
|
156
|
-
|
|
128
|
+
---
|
|
157
129
|
|
|
158
|
-
|
|
130
|
+
## Stories
|
|
159
131
|
|
|
160
|
-
|
|
132
|
+
Основные истории: `stories/Notification/Notification.stories.tsx`
|
|
133
|
+
Файлы примеров: `stories/Notification/examples/`
|
|
161
134
|
|
|
162
|
-
|
|
135
|
+
| Story | Example file | Что демонстрирует |
|
|
136
|
+
|---|---|---|
|
|
137
|
+
| `Playground` | `Playground.tsx` | Интерактивный контроль наполнения уведомления |
|
|
138
|
+
| `Default` | `Default.tsx` | Минимальное уведомление: иконка, заголовок, текст, закрытие |
|
|
139
|
+
| `Status` | `Status.tsx` | Success / Warning / Error со списком |
|
|
140
|
+
| `Business` | `Business.tsx` | Бизнес-уведомления: текст, кнопка, вложенный Alert |
|
|
141
|
+
| `Business Stack` | `BusinessStack.tsx` | Уведомления в `NotificationGrouped` (стопка) |
|
|
142
|
+
| `Feedback Without Stars` | `FeedbackWithoutStars.tsx` | Форма обратной связи без оценки звёздами |
|
|
143
|
+
| `Feedback With Stars` | `FeedbackWithStars.tsx` | Форма обратной связи с оценкой звёздами |
|
|
163
144
|
|
|
164
|
-
|
|
145
|
+
---
|
|
165
146
|
|
|
166
|
-
|
|
147
|
+
## История изменений
|
|
167
148
|
|
|
168
|
-
|
|
149
|
+
| Дата | Изменение |
|
|
150
|
+
|---|---|
|
|
151
|
+
| 2026-06-16 | Создан AI-документ. `Notification`, `NotificationGrouped`, `NotificationBody` переведены на `forwardRef` (паттерн `Object.assign`); удалены типы `INotificationSFC`/`INotificationBodySFC`; тип `Notification.Time.time` расширен с `React.ReactText` до `React.ReactNode`. Stories мигрированы на modern pattern. |
|
|
169
152
|
|
|
170
|
-
|
|
153
|
+
---
|
|
171
154
|
|
|
172
|
-
|
|
155
|
+
## Примеры использования
|
|
173
156
|
|
|
174
|
-
###
|
|
157
|
+
### Default
|
|
175
158
|
|
|
176
|
-
|
|
159
|
+
`stories/Notification/examples/Default.tsx`
|
|
177
160
|
|
|
178
|
-
|
|
161
|
+
```tsx
|
|
162
|
+
import React from "react";
|
|
163
|
+
import { Notification } from "@sberbusiness/triplex-next";
|
|
164
|
+
import { SuccessStrokeStsIcon20 } from "@sberbusiness/icons-next";
|
|
165
|
+
|
|
166
|
+
export const Default = () => (
|
|
167
|
+
<div style={{ maxWidth: "600px" }}>
|
|
168
|
+
<Notification>
|
|
169
|
+
<Notification.Icon>
|
|
170
|
+
<SuccessStrokeStsIcon20 paletteIndex={0} />
|
|
171
|
+
</Notification.Icon>
|
|
172
|
+
<Notification.Body>
|
|
173
|
+
<Notification.Body.Header>Title text</Notification.Body.Header>
|
|
174
|
+
<Notification.Body.Content>
|
|
175
|
+
This message provides context or highlights important information to note.
|
|
176
|
+
</Notification.Body.Content>
|
|
177
|
+
</Notification.Body>
|
|
178
|
+
<Notification.Close onClick={() => {}} />
|
|
179
|
+
</Notification>
|
|
180
|
+
</div>
|
|
181
|
+
);
|
|
182
|
+
```
|
|
179
183
|
|
|
180
|
-
|
|
184
|
+
### Status
|
|
181
185
|
|
|
182
|
-
|
|
183
|
-
- **`children` — только Icon / Body / Close / Time** (контракт документации; типы шире, но стили рассчитаны только на эти 4 слота).
|
|
184
|
-
- **`Body` — Header / Content / List / Footer** в этом смысловом порядке (CSS закладывает spacing).
|
|
185
|
-
- **`Close` иконка фиксирована**; `children: never`.
|
|
186
|
-
- **`Body.List.values: string[]`** — не `ReactNode[]`. При расширении API — breaking.
|
|
187
|
-
- **`Body.Content` типография зашита** (`B3 / PRIMARY`).
|
|
188
|
-
- **`Body.Header` — `<h3>`**. Heading-уровень не настраивается — может конфликтовать с outline страницы (a11y).
|
|
189
|
-
- **`isShowCloseOnHover` ↔ родитель** — работает только когда `Notification` — внутри SideOverlay/Alert (CSS `:hover` на родителе/самом элементе).
|
|
190
|
-
- **FC, не forwardRef** на всех уровнях (legacy).
|
|
191
|
-
- **`NotificationGrouped` — декорация**, не контейнер для списка.
|
|
192
|
-
- **`data-tx`** — версия пакета на корне.
|
|
186
|
+
`stories/Notification/examples/Status.tsx`
|
|
193
187
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
188
|
+
```tsx
|
|
189
|
+
import React from "react";
|
|
190
|
+
import { Notification } from "@sberbusiness/triplex-next";
|
|
191
|
+
import { ErrorStrokeStsIcon20, SuccessStrokeStsIcon20, WarningStrokeStsIcon20 } from "@sberbusiness/icons-next";
|
|
192
|
+
|
|
193
|
+
export const Status = () => (
|
|
194
|
+
<div style={{ display: "flex", flexDirection: "column", gap: "32px" }}>
|
|
195
|
+
<div>
|
|
196
|
+
<h3 style={{ marginBottom: "16px", fontSize: "18px", fontWeight: "600" }}>Success</h3>
|
|
197
|
+
<Notification>
|
|
198
|
+
<Notification.Icon>
|
|
199
|
+
<SuccessStrokeStsIcon20 paletteIndex={0} />
|
|
200
|
+
</Notification.Icon>
|
|
201
|
+
<Notification.Body>
|
|
202
|
+
<Notification.Body.Content>
|
|
203
|
+
This message provides context or highlights important information to note.
|
|
204
|
+
</Notification.Body.Content>
|
|
205
|
+
<Notification.Body.List values={Array.from({ length: 3 }, () => "List item text;")} />
|
|
206
|
+
</Notification.Body>
|
|
207
|
+
<Notification.Close onClick={() => {}} />
|
|
208
|
+
</Notification>
|
|
209
|
+
</div>
|
|
210
|
+
|
|
211
|
+
<div>
|
|
212
|
+
<h3 style={{ marginBottom: "16px", fontSize: "18px", fontWeight: "600" }}>Warning</h3>
|
|
213
|
+
<Notification>
|
|
214
|
+
<Notification.Icon>
|
|
215
|
+
<WarningStrokeStsIcon20 paletteIndex={2} />
|
|
216
|
+
</Notification.Icon>
|
|
217
|
+
<Notification.Body>
|
|
218
|
+
<Notification.Body.Content>
|
|
219
|
+
This message provides context or highlights important information to note.
|
|
220
|
+
</Notification.Body.Content>
|
|
221
|
+
<Notification.Body.List values={Array.from({ length: 3 }, () => "List item text;")} />
|
|
222
|
+
</Notification.Body>
|
|
223
|
+
<Notification.Close onClick={() => {}} />
|
|
224
|
+
</Notification>
|
|
225
|
+
</div>
|
|
226
|
+
|
|
227
|
+
<div>
|
|
228
|
+
<h3 style={{ marginBottom: "16px", fontSize: "18px", fontWeight: "600" }}>Error</h3>
|
|
229
|
+
<Notification>
|
|
230
|
+
<Notification.Icon>
|
|
231
|
+
<ErrorStrokeStsIcon20 paletteIndex={1} />
|
|
232
|
+
</Notification.Icon>
|
|
233
|
+
<Notification.Body>
|
|
234
|
+
<Notification.Body.Content>
|
|
235
|
+
This message provides context or highlights important information to note.
|
|
236
|
+
</Notification.Body.Content>
|
|
237
|
+
<Notification.Body.List values={Array.from({ length: 3 }, () => "List item text;")} />
|
|
238
|
+
</Notification.Body>
|
|
239
|
+
<Notification.Close onClick={() => {}} />
|
|
240
|
+
</Notification>
|
|
241
|
+
</div>
|
|
242
|
+
</div>
|
|
243
|
+
);
|
|
244
|
+
```
|
|
197
245
|
|
|
198
|
-
|
|
199
|
-
- `<h3>` в `Body.Header` — фиксированный heading-уровень. Для контекстов, где это нарушает outline (например, top-level Alert на странице без h1/h2), — возможен a11y-гэп.
|
|
200
|
-
- `Close` — `<ButtonIcon>` с иконкой crossbar; **нет `aria-label`** в коде (передаётся через `...buttonProps`). Потребитель должен установить `aria-label="Закрыть уведомление"` при создании `<Notification.Close>`.
|
|
201
|
-
- `isShowCloseOnHover` — close-кнопка не видна без hover'а ⇒ для keyboard-only пользователей может быть недоступна, если фокус-стили не показывают её. Проверить!
|
|
202
|
-
- Корень — `<div>`, но `onClick` есть — без `keydown` Enter/Space обработчика. Если `onClick` критичен — клавиатура не работает.
|
|
246
|
+
### Business
|
|
203
247
|
|
|
204
|
-
|
|
248
|
+
`stories/Notification/examples/Business.tsx`
|
|
205
249
|
|
|
206
|
-
|
|
250
|
+
```tsx
|
|
251
|
+
import React from "react";
|
|
252
|
+
import {
|
|
253
|
+
AlertContext,
|
|
254
|
+
Button,
|
|
255
|
+
EAlertType,
|
|
256
|
+
EButtonTheme,
|
|
257
|
+
EComponentSize,
|
|
258
|
+
Notification,
|
|
259
|
+
} from "@sberbusiness/triplex-next";
|
|
260
|
+
import { DefaulticonStrokePrdIcon20 } from "@sberbusiness/icons-next";
|
|
261
|
+
|
|
262
|
+
export const Business = () => (
|
|
263
|
+
<div style={{ display: "flex", flexDirection: "column", gap: "32px" }}>
|
|
264
|
+
<div>
|
|
265
|
+
<h3 style={{ marginBottom: "16px", fontSize: "18px", fontWeight: "600" }}>Normal</h3>
|
|
266
|
+
<Notification withExtraBottomPadding>
|
|
267
|
+
<Notification.Icon>
|
|
268
|
+
<DefaulticonStrokePrdIcon20 paletteIndex={5} />
|
|
269
|
+
</Notification.Icon>
|
|
270
|
+
<Notification.Body>
|
|
271
|
+
<Notification.Body.Header>Title text</Notification.Body.Header>
|
|
272
|
+
<Notification.Body.Content>
|
|
273
|
+
This message provides context or highlights important information to note.
|
|
274
|
+
</Notification.Body.Content>
|
|
275
|
+
</Notification.Body>
|
|
276
|
+
<Notification.Close onClick={() => {}} />
|
|
277
|
+
<Notification.Time time="22:45" />
|
|
278
|
+
</Notification>
|
|
279
|
+
</div>
|
|
280
|
+
|
|
281
|
+
<div>
|
|
282
|
+
<h3 style={{ marginBottom: "16px", fontSize: "18px", fontWeight: "600" }}>Button</h3>
|
|
283
|
+
<Notification withExtraBottomPadding>
|
|
284
|
+
<Notification.Icon>
|
|
285
|
+
<DefaulticonStrokePrdIcon20 paletteIndex={5} />
|
|
286
|
+
</Notification.Icon>
|
|
287
|
+
<Notification.Body>
|
|
288
|
+
<Notification.Body.Header>Title text</Notification.Body.Header>
|
|
289
|
+
<Notification.Body.Content>
|
|
290
|
+
This message provides context or highlights important information to note.
|
|
291
|
+
</Notification.Body.Content>
|
|
292
|
+
<Notification.Body.Footer>
|
|
293
|
+
<Button theme={EButtonTheme.SECONDARY} size={EComponentSize.SM}>
|
|
294
|
+
Button text
|
|
295
|
+
</Button>
|
|
296
|
+
</Notification.Body.Footer>
|
|
297
|
+
</Notification.Body>
|
|
298
|
+
<Notification.Close onClick={() => {}} />
|
|
299
|
+
<Notification.Time time="22:45" />
|
|
300
|
+
</Notification>
|
|
301
|
+
</div>
|
|
302
|
+
|
|
303
|
+
<div>
|
|
304
|
+
<h3 style={{ marginBottom: "16px", fontSize: "18px", fontWeight: "600" }}>Alert</h3>
|
|
305
|
+
<Notification withExtraBottomPadding>
|
|
306
|
+
<Notification.Icon>
|
|
307
|
+
<DefaulticonStrokePrdIcon20 paletteIndex={5} />
|
|
308
|
+
</Notification.Icon>
|
|
309
|
+
<Notification.Body>
|
|
310
|
+
<Notification.Body.Header>Title text</Notification.Body.Header>
|
|
311
|
+
<Notification.Body.Content>
|
|
312
|
+
This message provides context or highlights important information to note.
|
|
313
|
+
</Notification.Body.Content>
|
|
314
|
+
<Notification.Body.Footer>
|
|
315
|
+
<AlertContext type={EAlertType.INFO}>
|
|
316
|
+
This message provides context or highlights important information to note.
|
|
317
|
+
</AlertContext>
|
|
318
|
+
</Notification.Body.Footer>
|
|
319
|
+
</Notification.Body>
|
|
320
|
+
<Notification.Close onClick={() => {}} />
|
|
321
|
+
<Notification.Time time="22:45" />
|
|
322
|
+
</Notification>
|
|
323
|
+
</div>
|
|
324
|
+
</div>
|
|
325
|
+
);
|
|
326
|
+
```
|
|
207
327
|
|
|
208
|
-
|
|
328
|
+
### Business Stack
|
|
209
329
|
|
|
210
|
-
|
|
330
|
+
`stories/Notification/examples/BusinessStack.tsx`
|
|
211
331
|
|
|
212
|
-
|
|
332
|
+
```tsx
|
|
333
|
+
import React from "react";
|
|
334
|
+
import {
|
|
335
|
+
AlertContext,
|
|
336
|
+
Button,
|
|
337
|
+
EAlertType,
|
|
338
|
+
EButtonTheme,
|
|
339
|
+
EComponentSize,
|
|
340
|
+
Notification,
|
|
341
|
+
NotificationGrouped,
|
|
342
|
+
} from "@sberbusiness/triplex-next";
|
|
343
|
+
import { DefaulticonStrokePrdIcon20 } from "@sberbusiness/icons-next";
|
|
344
|
+
|
|
345
|
+
export const BusinessStack = () => (
|
|
346
|
+
<div style={{ display: "flex", flexDirection: "column", gap: "32px" }}>
|
|
347
|
+
<div>
|
|
348
|
+
<h3 style={{ marginBottom: "16px", fontSize: "18px", fontWeight: "600" }}>Normal</h3>
|
|
349
|
+
<NotificationGrouped>
|
|
350
|
+
<Notification withExtraBottomPadding>
|
|
351
|
+
<Notification.Icon>
|
|
352
|
+
<DefaulticonStrokePrdIcon20 paletteIndex={5} />
|
|
353
|
+
</Notification.Icon>
|
|
354
|
+
<Notification.Body>
|
|
355
|
+
<Notification.Body.Header>Title text</Notification.Body.Header>
|
|
356
|
+
<Notification.Body.Content>
|
|
357
|
+
This message provides context or highlights important information to note.
|
|
358
|
+
</Notification.Body.Content>
|
|
359
|
+
</Notification.Body>
|
|
360
|
+
<Notification.Close onClick={() => {}} />
|
|
361
|
+
<Notification.Time time="22:45" />
|
|
362
|
+
</Notification>
|
|
363
|
+
</NotificationGrouped>
|
|
364
|
+
</div>
|
|
365
|
+
|
|
366
|
+
<div>
|
|
367
|
+
<h3 style={{ marginBottom: "16px", fontSize: "18px", fontWeight: "600" }}>Button</h3>
|
|
368
|
+
<NotificationGrouped>
|
|
369
|
+
<Notification withExtraBottomPadding>
|
|
370
|
+
<Notification.Icon>
|
|
371
|
+
<DefaulticonStrokePrdIcon20 paletteIndex={5} />
|
|
372
|
+
</Notification.Icon>
|
|
373
|
+
<Notification.Body>
|
|
374
|
+
<Notification.Body.Header>Title text</Notification.Body.Header>
|
|
375
|
+
<Notification.Body.Content>
|
|
376
|
+
This message provides context or highlights important information to note.
|
|
377
|
+
</Notification.Body.Content>
|
|
378
|
+
<Notification.Body.Footer>
|
|
379
|
+
<Button theme={EButtonTheme.SECONDARY} size={EComponentSize.SM}>
|
|
380
|
+
Button text
|
|
381
|
+
</Button>
|
|
382
|
+
</Notification.Body.Footer>
|
|
383
|
+
</Notification.Body>
|
|
384
|
+
<Notification.Close onClick={() => {}} />
|
|
385
|
+
<Notification.Time time="22:45" />
|
|
386
|
+
</Notification>
|
|
387
|
+
</NotificationGrouped>
|
|
388
|
+
</div>
|
|
389
|
+
|
|
390
|
+
<div>
|
|
391
|
+
<h3 style={{ marginBottom: "16px", fontSize: "18px", fontWeight: "600" }}>Alert</h3>
|
|
392
|
+
<NotificationGrouped>
|
|
393
|
+
<Notification withExtraBottomPadding>
|
|
394
|
+
<Notification.Icon>
|
|
395
|
+
<DefaulticonStrokePrdIcon20 paletteIndex={5} />
|
|
396
|
+
</Notification.Icon>
|
|
397
|
+
<Notification.Body>
|
|
398
|
+
<Notification.Body.Header>Title text</Notification.Body.Header>
|
|
399
|
+
<Notification.Body.Content>
|
|
400
|
+
This message provides context or highlights important information to note.
|
|
401
|
+
</Notification.Body.Content>
|
|
402
|
+
<Notification.Body.Footer>
|
|
403
|
+
<AlertContext type={EAlertType.INFO}>
|
|
404
|
+
This message provides context or highlights important information to note.
|
|
405
|
+
</AlertContext>
|
|
406
|
+
</Notification.Body.Footer>
|
|
407
|
+
</Notification.Body>
|
|
408
|
+
<Notification.Close onClick={() => {}} />
|
|
409
|
+
<Notification.Time time="22:45" />
|
|
410
|
+
</Notification>
|
|
411
|
+
</NotificationGrouped>
|
|
412
|
+
</div>
|
|
413
|
+
</div>
|
|
414
|
+
);
|
|
415
|
+
```
|
|
213
416
|
|
|
214
|
-
|
|
215
|
-
- `UnorderedList` — основа `Body.List`.
|
|
216
|
-
- `Text` (Typography) — `Body.Content`.
|
|
217
|
-
- `ButtonIcon` — `Close`.
|
|
218
|
-
- `CrossStrokeSrvIcon16` — иконка close.
|
|
417
|
+
### Feedback Without Stars
|
|
219
418
|
|
|
220
|
-
|
|
419
|
+
`stories/Notification/examples/FeedbackWithoutStars.tsx`
|
|
221
420
|
|
|
222
|
-
|
|
421
|
+
```tsx
|
|
422
|
+
import React, { useState } from "react";
|
|
423
|
+
import {
|
|
424
|
+
Button,
|
|
425
|
+
EButtonTheme,
|
|
426
|
+
EComponentSize,
|
|
427
|
+
EFontType,
|
|
428
|
+
EFormFieldStatus,
|
|
429
|
+
ETextSize,
|
|
430
|
+
Notification,
|
|
431
|
+
Text,
|
|
432
|
+
TextareaField,
|
|
433
|
+
} from "@sberbusiness/triplex-next";
|
|
434
|
+
import { SuccessgradientStsIcon96 } from "@sberbusiness/icons-next";
|
|
435
|
+
|
|
436
|
+
export const FeedbackWithoutStars = () => {
|
|
437
|
+
const [defaultValue, setDefaultValue] = useState("");
|
|
438
|
+
const [filledValue, setFilledValue] = useState("Нет возможности экспортировать данные из заказов");
|
|
439
|
+
const [errorValue, setErrorValue] = useState("");
|
|
440
|
+
|
|
441
|
+
const handleDefaultChange: React.ChangeEventHandler<HTMLTextAreaElement> = (event) => {
|
|
442
|
+
setDefaultValue(event.target.value);
|
|
443
|
+
};
|
|
444
|
+
|
|
445
|
+
const handleFilledChange: React.ChangeEventHandler<HTMLTextAreaElement> = (event) => {
|
|
446
|
+
setFilledValue(event.target.value);
|
|
447
|
+
};
|
|
448
|
+
|
|
449
|
+
const handleErrorChange: React.ChangeEventHandler<HTMLTextAreaElement> = (event) => {
|
|
450
|
+
setErrorValue(event.target.value);
|
|
451
|
+
};
|
|
452
|
+
|
|
453
|
+
return (
|
|
454
|
+
<div style={{ display: "flex", flexDirection: "column", gap: 32 }}>
|
|
455
|
+
<div>
|
|
456
|
+
<h3 style={{ marginBottom: 16, fontSize: 18, fontWeight: 600 }}>Default</h3>
|
|
457
|
+
<Notification withExtraBottomPadding>
|
|
458
|
+
<Notification.Body>
|
|
459
|
+
<Notification.Body.Header>Предложите идею</Notification.Body.Header>
|
|
460
|
+
<Notification.Body.Content>
|
|
461
|
+
<div>Чего не хватает вам и что оценят другие пользователи?</div>
|
|
462
|
+
<TextareaField
|
|
463
|
+
className="notificationBodyTextArea"
|
|
464
|
+
status={EFormFieldStatus.DEFAULT}
|
|
465
|
+
textareaProps={{
|
|
466
|
+
value: defaultValue,
|
|
467
|
+
onChange: handleDefaultChange,
|
|
468
|
+
}}
|
|
469
|
+
label="Как мы можем улучшить сервис?"
|
|
470
|
+
/>
|
|
471
|
+
</Notification.Body.Content>
|
|
472
|
+
<Notification.Body.Footer>
|
|
473
|
+
<Button theme={EButtonTheme.SECONDARY} size={EComponentSize.SM}>
|
|
474
|
+
Отправить
|
|
475
|
+
</Button>
|
|
476
|
+
</Notification.Body.Footer>
|
|
477
|
+
</Notification.Body>
|
|
478
|
+
<Notification.Close onClick={() => {}} />
|
|
479
|
+
</Notification>
|
|
480
|
+
</div>
|
|
481
|
+
|
|
482
|
+
<div>
|
|
483
|
+
<h3 style={{ marginBottom: 16, fontSize: 18, fontWeight: 600 }}>Filled</h3>
|
|
484
|
+
<Notification withExtraBottomPadding>
|
|
485
|
+
<Notification.Body>
|
|
486
|
+
<Notification.Body.Header>Предложите идею</Notification.Body.Header>
|
|
487
|
+
<Notification.Body.Content>
|
|
488
|
+
<div>Чего не хватает вам и что оценят другие пользователи?</div>
|
|
489
|
+
<TextareaField
|
|
490
|
+
className="notificationBodyTextArea"
|
|
491
|
+
status={EFormFieldStatus.DEFAULT}
|
|
492
|
+
textareaProps={{
|
|
493
|
+
value: filledValue,
|
|
494
|
+
onChange: handleFilledChange,
|
|
495
|
+
}}
|
|
496
|
+
label="Как мы можем улучшить сервис?"
|
|
497
|
+
/>
|
|
498
|
+
</Notification.Body.Content>
|
|
499
|
+
<Notification.Body.Footer>
|
|
500
|
+
<Button theme={EButtonTheme.SECONDARY} size={EComponentSize.SM}>
|
|
501
|
+
Отправить
|
|
502
|
+
</Button>
|
|
503
|
+
</Notification.Body.Footer>
|
|
504
|
+
</Notification.Body>
|
|
505
|
+
<Notification.Close onClick={() => {}} />
|
|
506
|
+
</Notification>
|
|
507
|
+
</div>
|
|
508
|
+
|
|
509
|
+
<div>
|
|
510
|
+
<h3 style={{ marginBottom: 16, fontSize: 18, fontWeight: 600 }}>Error</h3>
|
|
511
|
+
<Notification withExtraBottomPadding>
|
|
512
|
+
<Notification.Body>
|
|
513
|
+
<Notification.Body.Header>Предложите идею</Notification.Body.Header>
|
|
514
|
+
<Notification.Body.Content>
|
|
515
|
+
<div>Чего не хватает вам и что оценят другие пользователи?</div>
|
|
516
|
+
<TextareaField
|
|
517
|
+
className="notificationBodyTextArea"
|
|
518
|
+
status={EFormFieldStatus.ERROR}
|
|
519
|
+
description={
|
|
520
|
+
<Text tag="div" size={ETextSize.B4} type={EFontType.ERROR}>
|
|
521
|
+
Введите текст сообщения.
|
|
522
|
+
</Text>
|
|
523
|
+
}
|
|
524
|
+
textareaProps={{
|
|
525
|
+
value: errorValue,
|
|
526
|
+
onChange: handleErrorChange,
|
|
527
|
+
}}
|
|
528
|
+
label="Как мы можем улучшить сервис?"
|
|
529
|
+
/>
|
|
530
|
+
</Notification.Body.Content>
|
|
531
|
+
<Notification.Body.Footer>
|
|
532
|
+
<Button theme={EButtonTheme.SECONDARY} size={EComponentSize.SM}>
|
|
533
|
+
Отправить
|
|
534
|
+
</Button>
|
|
535
|
+
</Notification.Body.Footer>
|
|
536
|
+
</Notification.Body>
|
|
537
|
+
<Notification.Close onClick={() => {}} />
|
|
538
|
+
</Notification>
|
|
539
|
+
</div>
|
|
540
|
+
|
|
541
|
+
<div>
|
|
542
|
+
<h3 style={{ marginBottom: 16, fontSize: 18, fontWeight: 600 }}>Success</h3>
|
|
543
|
+
<Notification withExtraBottomPadding>
|
|
544
|
+
<Notification.Body>
|
|
545
|
+
<div className="finalStatus">
|
|
546
|
+
<SuccessgradientStsIcon96 />
|
|
547
|
+
<Notification.Body.Header>Спасибо за оценку!</Notification.Body.Header>
|
|
548
|
+
<Notification.Body.Content>Ваши отзывы помогают нам стать лучше.</Notification.Body.Content>
|
|
549
|
+
</div>
|
|
550
|
+
</Notification.Body>
|
|
551
|
+
<Notification.Close onClick={() => {}} />
|
|
552
|
+
</Notification>
|
|
553
|
+
</div>
|
|
554
|
+
</div>
|
|
555
|
+
);
|
|
556
|
+
};
|
|
557
|
+
```
|
|
223
558
|
|
|
224
|
-
|
|
225
|
-
Примеры: `stories/Notification/examples/`
|
|
559
|
+
### Feedback With Stars
|
|
226
560
|
|
|
227
|
-
|
|
561
|
+
`stories/Notification/examples/FeedbackWithStars.tsx`
|
|
228
562
|
|
|
229
|
-
|
|
563
|
+
```tsx
|
|
564
|
+
import React, { useState } from "react";
|
|
565
|
+
import {
|
|
566
|
+
Button,
|
|
567
|
+
Checkbox,
|
|
568
|
+
CheckboxYGroup,
|
|
569
|
+
EButtonTheme,
|
|
570
|
+
EComponentSize,
|
|
571
|
+
EFormFieldStatus,
|
|
572
|
+
Notification,
|
|
573
|
+
TextField,
|
|
574
|
+
} from "@sberbusiness/triplex-next";
|
|
575
|
+
import { StarStrokeSrvIcon32, SuccessgradientStsIcon96 } from "@sberbusiness/icons-next";
|
|
576
|
+
|
|
577
|
+
export const FeedbackWithStars = () => {
|
|
578
|
+
const [value, setValue] = useState("");
|
|
579
|
+
const checkboxes = [
|
|
580
|
+
"Встречается неточная информация",
|
|
581
|
+
"Уведомления приходят ночью",
|
|
582
|
+
"Не хватает данных в сообщении",
|
|
583
|
+
];
|
|
584
|
+
|
|
585
|
+
const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
|
586
|
+
setValue(e.target.value);
|
|
587
|
+
};
|
|
588
|
+
|
|
589
|
+
return (
|
|
590
|
+
<div style={{ display: "flex", flexDirection: "column", gap: "32px" }}>
|
|
591
|
+
<div>
|
|
592
|
+
<h3 style={{ marginBottom: "16px", fontSize: "18px", fontWeight: "600" }}>Default</h3>
|
|
593
|
+
<Notification withExtraBottomPadding>
|
|
594
|
+
<Notification.Body>
|
|
595
|
+
<Notification.Body.Header>Оцените оформление кредита</Notification.Body.Header>
|
|
596
|
+
<Notification.Body.Content>
|
|
597
|
+
<div>Оцените, насколько удобным был процесс оформления недавно полученого кредита.</div>
|
|
598
|
+
<div style={{ display: "flex", justifyContent: "center", marginTop: "16px" }}>
|
|
599
|
+
{Array.from({ length: 5 }).map((_, index) => (
|
|
600
|
+
<StarStrokeSrvIcon32
|
|
601
|
+
key={index}
|
|
602
|
+
paletteIndex={0}
|
|
603
|
+
style={{ marginLeft: index !== 0 ? "24px" : "0px" }}
|
|
604
|
+
/>
|
|
605
|
+
))}
|
|
606
|
+
</div>
|
|
607
|
+
</Notification.Body.Content>
|
|
608
|
+
</Notification.Body>
|
|
609
|
+
<Notification.Close onClick={() => {}} />
|
|
610
|
+
</Notification>
|
|
611
|
+
</div>
|
|
612
|
+
|
|
613
|
+
<div>
|
|
614
|
+
<h3 style={{ marginBottom: "16px", fontSize: "18px", fontWeight: "600" }}>Filled</h3>
|
|
615
|
+
<Notification withExtraBottomPadding>
|
|
616
|
+
<Notification.Body>
|
|
617
|
+
<Notification.Body.Header>Оцените оформление кредита</Notification.Body.Header>
|
|
618
|
+
<Notification.Body.Content>
|
|
619
|
+
<div>Оцените, насколько удобным был процесс оформления недавно полученого кредита.</div>
|
|
620
|
+
<div style={{ display: "flex", justifyContent: "center", marginTop: "16px" }}>
|
|
621
|
+
{Array.from({ length: 5 }).map((_, index) => (
|
|
622
|
+
<StarStrokeSrvIcon32
|
|
623
|
+
key={index}
|
|
624
|
+
paletteIndex={0}
|
|
625
|
+
style={{ marginLeft: index !== 0 ? "24px" : "0px" }}
|
|
626
|
+
/>
|
|
627
|
+
))}
|
|
628
|
+
</div>
|
|
629
|
+
<TextField
|
|
630
|
+
className="notificationBodyTextArea"
|
|
631
|
+
status={EFormFieldStatus.DEFAULT}
|
|
632
|
+
inputProps={{
|
|
633
|
+
value: value,
|
|
634
|
+
onChange: handleChange,
|
|
635
|
+
}}
|
|
636
|
+
label={"Как мы можем улучшить сервис?"}
|
|
637
|
+
/>
|
|
638
|
+
</Notification.Body.Content>
|
|
639
|
+
<Notification.Body.Footer>
|
|
640
|
+
<Button theme={EButtonTheme.SECONDARY} size={EComponentSize.SM}>
|
|
641
|
+
Отправить
|
|
642
|
+
</Button>
|
|
643
|
+
</Notification.Body.Footer>
|
|
644
|
+
</Notification.Body>
|
|
645
|
+
<Notification.Close onClick={() => {}} />
|
|
646
|
+
</Notification>
|
|
647
|
+
</div>
|
|
648
|
+
|
|
649
|
+
<div>
|
|
650
|
+
<h3 style={{ marginBottom: "16px", fontSize: "18px", fontWeight: "600" }}>Error</h3>
|
|
651
|
+
<Notification withExtraBottomPadding>
|
|
652
|
+
<Notification.Body>
|
|
653
|
+
<Notification.Body.Header>Оцените оформление кредита</Notification.Body.Header>
|
|
654
|
+
<Notification.Body.Content>
|
|
655
|
+
<div>Оцените, насколько удобным был процесс оформления недавно полученого кредита.</div>
|
|
656
|
+
<div style={{ display: "flex", justifyContent: "center", marginTop: "16px" }}>
|
|
657
|
+
{Array.from({ length: 5 }).map((_, index) => (
|
|
658
|
+
<StarStrokeSrvIcon32
|
|
659
|
+
key={index}
|
|
660
|
+
paletteIndex={0}
|
|
661
|
+
style={{ marginLeft: index !== 0 ? "24px" : "0px" }}
|
|
662
|
+
/>
|
|
663
|
+
))}
|
|
664
|
+
</div>
|
|
665
|
+
<CheckboxYGroup
|
|
666
|
+
aria-label="Причины неудовлетворенности"
|
|
667
|
+
className="notificationBodyCheckbox"
|
|
668
|
+
>
|
|
669
|
+
{checkboxes.map((checkboxValue, index) => (
|
|
670
|
+
<Checkbox key={index} name="checkbox-y-group">
|
|
671
|
+
{checkboxValue}
|
|
672
|
+
</Checkbox>
|
|
673
|
+
))}
|
|
674
|
+
</CheckboxYGroup>
|
|
675
|
+
</Notification.Body.Content>
|
|
676
|
+
<Notification.Body.Footer>
|
|
677
|
+
<Button theme={EButtonTheme.SECONDARY} size={EComponentSize.SM}>
|
|
678
|
+
Отправить
|
|
679
|
+
</Button>
|
|
680
|
+
</Notification.Body.Footer>
|
|
681
|
+
</Notification.Body>
|
|
682
|
+
<Notification.Close onClick={() => {}} />
|
|
683
|
+
</Notification>
|
|
684
|
+
</div>
|
|
685
|
+
|
|
686
|
+
<div>
|
|
687
|
+
<h3 style={{ marginBottom: "16px", fontSize: "18px", fontWeight: "600" }}>Success</h3>
|
|
688
|
+
<Notification withExtraBottomPadding>
|
|
689
|
+
<Notification.Body>
|
|
690
|
+
<div className="finalStatus">
|
|
691
|
+
<SuccessgradientStsIcon96 />
|
|
692
|
+
<Notification.Body.Header>Спасибо за оценку!</Notification.Body.Header>
|
|
693
|
+
<Notification.Body.Content>Ваши отзывы помогают нам стать лучше.</Notification.Body.Content>
|
|
694
|
+
</div>
|
|
695
|
+
</Notification.Body>
|
|
696
|
+
<Notification.Close onClick={() => {}} />
|
|
697
|
+
</Notification>
|
|
698
|
+
</div>
|
|
699
|
+
</div>
|
|
700
|
+
);
|
|
701
|
+
};
|
|
702
|
+
```
|
|
230
703
|
|
|
231
|
-
| Дата | Изменение |
|
|
232
|
-
|---|---|
|
|
233
|
-
| 2026-04-18 | Создан документ |
|