@snack-uikit/toaster 0.8.16 → 0.8.17-preview-bc9ca5dd.0
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 +9 -3
- package/dist/cjs/components/ToastSystemEvent/styles.module.css +2 -3
- package/dist/cjs/components/ToastUpload/ToastUpload.d.ts +60 -0
- package/dist/cjs/components/ToastUpload/ToastUpload.js +122 -0
- package/dist/cjs/components/ToastUpload/ToastUploadToaster.d.ts +3 -0
- package/dist/cjs/components/ToastUpload/ToastUploadToaster.js +16 -0
- package/dist/cjs/components/ToastUpload/constants.d.ts +16 -0
- package/dist/cjs/components/ToastUpload/constants.js +26 -0
- package/dist/cjs/components/ToastUpload/helperComponents/ButtonIcon/ButtonIcon.d.ts +3 -0
- package/dist/cjs/components/ToastUpload/helperComponents/ButtonIcon/ButtonIcon.js +32 -0
- package/dist/cjs/components/ToastUpload/helperComponents/ButtonIcon/index.d.ts +1 -0
- package/dist/cjs/components/ToastUpload/helperComponents/ButtonIcon/index.js +25 -0
- package/dist/cjs/components/ToastUpload/helperComponents/ButtonIcon/styles.module.css +30 -0
- package/dist/cjs/components/ToastUpload/helperComponents/FileItem/FileItem.d.ts +5 -0
- package/dist/cjs/components/ToastUpload/helperComponents/FileItem/FileItem.js +85 -0
- package/dist/cjs/components/ToastUpload/helperComponents/FileItem/index.d.ts +1 -0
- package/dist/cjs/components/ToastUpload/helperComponents/FileItem/index.js +25 -0
- package/dist/cjs/components/ToastUpload/helperComponents/FileItem/styles.module.css +85 -0
- package/dist/cjs/components/ToastUpload/helperComponents/LoadingStatus/LoadingStatus.d.ts +6 -0
- package/dist/cjs/components/ToastUpload/helperComponents/LoadingStatus/LoadingStatus.js +42 -0
- package/dist/cjs/components/ToastUpload/helperComponents/LoadingStatus/index.d.ts +1 -0
- package/dist/cjs/components/ToastUpload/helperComponents/LoadingStatus/index.js +25 -0
- package/dist/cjs/components/ToastUpload/helperComponents/LoadingStatus/styles.module.css +3 -0
- package/dist/cjs/components/ToastUpload/index.d.ts +1 -0
- package/dist/cjs/components/ToastUpload/index.js +25 -0
- package/dist/cjs/components/ToastUpload/styles.module.css +110 -0
- package/dist/cjs/components/ToastUpload/types.d.ts +59 -0
- package/dist/cjs/components/ToastUpload/types.js +5 -0
- package/dist/cjs/components/ToastUpload/utils/formatPercent.d.ts +1 -0
- package/dist/cjs/components/ToastUpload/utils/formatPercent.js +8 -0
- package/dist/cjs/components/ToastUpload/utils/index.d.ts +1 -0
- package/dist/cjs/components/ToastUpload/utils/index.js +25 -0
- package/dist/cjs/components/ToasterContainer/styles.module.css +9 -9
- package/dist/cjs/components/index.d.ts +1 -0
- package/dist/cjs/components/index.js +2 -1
- package/dist/cjs/constants.d.ts +10 -5
- package/dist/cjs/constants.js +77 -4
- package/dist/cjs/helperComponents/ButtonAction/styles.module.css +2 -2
- package/dist/cjs/helperComponents/ButtonTextNeutral/ButtonTextNeutral.d.ts +7 -0
- package/dist/cjs/helperComponents/ButtonTextNeutral/ButtonTextNeutral.js +28 -0
- package/dist/cjs/helperComponents/ButtonTextNeutral/index.d.ts +1 -0
- package/dist/cjs/helperComponents/ButtonTextNeutral/index.js +25 -0
- package/dist/cjs/helperComponents/ButtonTextNeutral/styles.module.css +32 -0
- package/dist/cjs/helpers.js +43 -1
- package/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/testIds.d.ts +14 -0
- package/dist/cjs/testIds.js +16 -1
- package/dist/cjs/types.d.ts +9 -1
- package/dist/esm/components/ToastSystemEvent/styles.module.css +2 -3
- package/dist/esm/components/ToastUpload/ToastUpload.d.ts +60 -0
- package/dist/esm/components/ToastUpload/ToastUpload.js +36 -0
- package/dist/esm/components/ToastUpload/ToastUploadToaster.d.ts +3 -0
- package/dist/esm/components/ToastUpload/ToastUploadToaster.js +7 -0
- package/dist/esm/components/ToastUpload/constants.d.ts +16 -0
- package/dist/esm/components/ToastUpload/constants.js +20 -0
- package/dist/esm/components/ToastUpload/helperComponents/ButtonIcon/ButtonIcon.d.ts +3 -0
- package/dist/esm/components/ToastUpload/helperComponents/ButtonIcon/ButtonIcon.js +18 -0
- package/dist/esm/components/ToastUpload/helperComponents/ButtonIcon/index.d.ts +1 -0
- package/dist/esm/components/ToastUpload/helperComponents/ButtonIcon/index.js +1 -0
- package/dist/esm/components/ToastUpload/helperComponents/ButtonIcon/styles.module.css +30 -0
- package/dist/esm/components/ToastUpload/helperComponents/FileItem/FileItem.d.ts +5 -0
- package/dist/esm/components/ToastUpload/helperComponents/FileItem/FileItem.js +23 -0
- package/dist/esm/components/ToastUpload/helperComponents/FileItem/index.d.ts +1 -0
- package/dist/esm/components/ToastUpload/helperComponents/FileItem/index.js +1 -0
- package/dist/esm/components/ToastUpload/helperComponents/FileItem/styles.module.css +85 -0
- package/dist/esm/components/ToastUpload/helperComponents/LoadingStatus/LoadingStatus.d.ts +6 -0
- package/dist/esm/components/ToastUpload/helperComponents/LoadingStatus/LoadingStatus.js +16 -0
- package/dist/esm/components/ToastUpload/helperComponents/LoadingStatus/index.d.ts +1 -0
- package/dist/esm/components/ToastUpload/helperComponents/LoadingStatus/index.js +1 -0
- package/dist/esm/components/ToastUpload/helperComponents/LoadingStatus/styles.module.css +3 -0
- package/dist/esm/components/ToastUpload/index.d.ts +1 -0
- package/dist/esm/components/ToastUpload/index.js +1 -0
- package/dist/esm/components/ToastUpload/styles.module.css +110 -0
- package/dist/esm/components/ToastUpload/types.d.ts +59 -0
- package/dist/esm/components/ToastUpload/types.js +1 -0
- package/dist/esm/components/ToastUpload/utils/formatPercent.d.ts +1 -0
- package/dist/esm/components/ToastUpload/utils/formatPercent.js +1 -0
- package/dist/esm/components/ToastUpload/utils/index.d.ts +1 -0
- package/dist/esm/components/ToastUpload/utils/index.js +1 -0
- package/dist/esm/components/ToasterContainer/styles.module.css +9 -9
- package/dist/esm/components/index.d.ts +1 -0
- package/dist/esm/components/index.js +1 -0
- package/dist/esm/constants.d.ts +10 -5
- package/dist/esm/constants.js +76 -0
- package/dist/esm/helperComponents/ButtonAction/styles.module.css +2 -2
- package/dist/esm/helperComponents/ButtonTextNeutral/ButtonTextNeutral.d.ts +7 -0
- package/dist/esm/helperComponents/ButtonTextNeutral/ButtonTextNeutral.js +5 -0
- package/dist/esm/helperComponents/ButtonTextNeutral/index.d.ts +1 -0
- package/dist/esm/helperComponents/ButtonTextNeutral/index.js +1 -0
- package/dist/esm/helperComponents/ButtonTextNeutral/styles.module.css +32 -0
- package/dist/esm/helpers.js +38 -0
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/testIds.d.ts +14 -0
- package/dist/esm/testIds.js +15 -0
- package/dist/esm/types.d.ts +9 -1
- package/package.json +6 -5
- package/src/components/ToastSystemEvent/styles.module.scss +2 -2
- package/src/components/ToastUpload/ToastUpload.tsx +169 -0
- package/src/components/ToastUpload/ToastUploadToaster.tsx +11 -0
- package/src/components/ToastUpload/constants.ts +26 -0
- package/src/components/ToastUpload/helperComponents/ButtonIcon/ButtonIcon.tsx +10 -0
- package/src/components/ToastUpload/helperComponents/ButtonIcon/index.ts +1 -0
- package/src/components/ToastUpload/helperComponents/ButtonIcon/styles.module.scss +45 -0
- package/src/components/ToastUpload/helperComponents/FileItem/FileItem.tsx +76 -0
- package/src/components/ToastUpload/helperComponents/FileItem/index.ts +1 -0
- package/src/components/ToastUpload/helperComponents/FileItem/styles.module.scss +93 -0
- package/src/components/ToastUpload/helperComponents/LoadingStatus/LoadingStatus.tsx +38 -0
- package/src/components/ToastUpload/helperComponents/LoadingStatus/index.ts +1 -0
- package/src/components/ToastUpload/helperComponents/LoadingStatus/styles.module.scss +8 -0
- package/src/components/ToastUpload/index.ts +1 -0
- package/src/components/ToastUpload/styles.module.scss +123 -0
- package/src/components/ToastUpload/types.ts +67 -0
- package/src/components/ToastUpload/utils/formatPercent.ts +1 -0
- package/src/components/ToastUpload/utils/index.ts +1 -0
- package/src/components/ToasterContainer/styles.module.scss +1 -1
- package/src/components/index.ts +1 -0
- package/src/constants.ts +91 -2
- package/src/helperComponents/ButtonTextNeutral/ButtonTextNeutral.tsx +23 -0
- package/src/helperComponents/ButtonTextNeutral/index.ts +1 -0
- package/src/helperComponents/ButtonTextNeutral/styles.module.scss +42 -0
- package/src/helpers.tsx +35 -0
- package/src/index.ts +7 -1
- package/src/testIds.ts +17 -0
- package/src/types.ts +7 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const formatPercent: (value: number) => string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const formatPercent = (value) => `${value}%`;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './formatPercent';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './formatPercent';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.buttonCloseColumnWrapper{
|
|
2
|
-
gap:var(--space-toaster-system-event-gap, 8px);
|
|
3
|
-
padding:var(--space-toaster-system-event-padding, 8px);
|
|
2
|
+
gap:var(--space-toaster-toast-system-event-gap, 8px);
|
|
3
|
+
padding:var(--space-toaster-toast-system-event-padding, 8px);
|
|
4
4
|
width:var(--size-toaster-toast-system-event-container, 320px);
|
|
5
5
|
position:fixed;
|
|
6
6
|
box-sizing:border-box;
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
.containerWithCloseAllButton{
|
|
59
|
-
margin-bottom:calc(var(--size-toaster-button-close-column, 40px) + var(--space-toaster-system-event-gap, 8px));
|
|
59
|
+
margin-bottom:calc(var(--size-toaster-button-close-column, 40px) + var(--space-toaster-toast-system-event-gap, 8px));
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
@media only screen and (max-width: 480px){
|
|
@@ -95,8 +95,8 @@
|
|
|
95
95
|
max-width:100%;
|
|
96
96
|
}
|
|
97
97
|
:global .osThemeSnack.Toastify__toast-container .container-user-action{
|
|
98
|
-
padding-bottom:var(--space-toaster-user-action-padding-bottom, 8px);
|
|
99
|
-
gap:var(--space-toaster-user-action-gap, 8px);
|
|
98
|
+
padding-bottom:var(--space-toaster-toast-user-action-padding-bottom, 8px);
|
|
99
|
+
gap:var(--space-toaster-toast-user-action-gap, 8px);
|
|
100
100
|
display:flex;
|
|
101
101
|
flex-direction:column;
|
|
102
102
|
align-items:center;
|
|
@@ -138,16 +138,16 @@
|
|
|
138
138
|
animation-name:osSnackTheme__toast__bounceOutDown;
|
|
139
139
|
}
|
|
140
140
|
:global .osThemeSnack.Toastify__toast-container.osThemeSnack__toast-container__system-event{
|
|
141
|
-
gap:var(--space-toaster-system-event-gap, 8px);
|
|
142
|
-
padding:var(--space-toaster-system-event-padding, 8px);
|
|
141
|
+
gap:var(--space-toaster-toast-system-event-gap, 8px);
|
|
142
|
+
padding:var(--space-toaster-toast-system-event-padding, 8px);
|
|
143
143
|
width:var(--size-toaster-toast-system-event-container, 320px);
|
|
144
144
|
display:flex;
|
|
145
145
|
flex-direction:column;
|
|
146
146
|
max-width:calc(100vw - 2 * var(--space-toaster-toast-system-event-container-padding, 16px));
|
|
147
147
|
}
|
|
148
148
|
:global .osThemeSnack.Toastify__toast-container.osThemeSnack__toast-container__user-action{
|
|
149
|
-
padding-bottom:var(--space-toaster-user-action-padding-bottom, 8px);
|
|
150
|
-
gap:var(--space-toaster-user-action-gap, 8px);
|
|
149
|
+
padding-bottom:var(--space-toaster-toast-user-action-padding-bottom, 8px);
|
|
150
|
+
gap:var(--space-toaster-toast-user-action-gap, 8px);
|
|
151
151
|
display:flex;
|
|
152
152
|
flex-direction:column;
|
|
153
153
|
align-items:center;
|
package/dist/esm/constants.d.ts
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
|
-
import { ToasterContainerProps } from './components';
|
|
1
|
+
import { ToasterContainerProps, ToastUploadProps } from './components';
|
|
2
|
+
import { UploadItem } from './components/ToastUpload/types';
|
|
2
3
|
import { ToasterType } from './types';
|
|
3
4
|
export declare const TOASTER_TYPE: {
|
|
4
5
|
readonly SystemEvent: "system-event";
|
|
5
6
|
readonly UserAction: "user-action";
|
|
7
|
+
readonly Upload: "upload";
|
|
6
8
|
};
|
|
7
9
|
export declare const TOASTER_CONTAINER_DEFAULT_PROPS: Record<ToasterType, ToasterContainerProps>;
|
|
8
|
-
export declare const AUTO_CLOSE_TIME:
|
|
9
|
-
"system-event": number;
|
|
10
|
-
"user-action": number;
|
|
11
|
-
};
|
|
10
|
+
export declare const AUTO_CLOSE_TIME: Record<ToasterType, number | false>;
|
|
12
11
|
export declare const TOASTER_ROOT_ID = "toaster-root";
|
|
13
12
|
export declare const TOASTER_CONTAINER_PREFIX = "toaster-container__";
|
|
13
|
+
export declare const MOCK_TOAST_LOADING_ITEM: UploadItem;
|
|
14
|
+
export declare const MOCK_TOAST_PAUSED_ITEM: UploadItem;
|
|
15
|
+
export declare const MOCK_TOAST_ERROR_ITEM: UploadItem;
|
|
16
|
+
export declare const MOCK_TOAST_UPLOADED_ITEM: UploadItem;
|
|
17
|
+
export declare const MOCK_TOAST_PROPS: Partial<ToastUploadProps>;
|
|
18
|
+
export declare const MOCK_UPLOAD_ITEMS_LIST: UploadItem[];
|
package/dist/esm/constants.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export const TOASTER_TYPE = {
|
|
2
2
|
SystemEvent: 'system-event',
|
|
3
3
|
UserAction: 'user-action',
|
|
4
|
+
Upload: 'upload',
|
|
4
5
|
};
|
|
5
6
|
export const TOASTER_CONTAINER_DEFAULT_PROPS = {
|
|
6
7
|
[TOASTER_TYPE.SystemEvent]: {
|
|
@@ -15,10 +16,85 @@ export const TOASTER_CONTAINER_DEFAULT_PROPS = {
|
|
|
15
16
|
displayCloseAllButton: false,
|
|
16
17
|
type: TOASTER_TYPE.UserAction,
|
|
17
18
|
},
|
|
19
|
+
[TOASTER_TYPE.Upload]: {
|
|
20
|
+
limit: 5,
|
|
21
|
+
position: 'bottom-right',
|
|
22
|
+
displayCloseAllButton: true,
|
|
23
|
+
type: TOASTER_TYPE.SystemEvent,
|
|
24
|
+
},
|
|
18
25
|
};
|
|
19
26
|
export const AUTO_CLOSE_TIME = {
|
|
20
27
|
[TOASTER_TYPE.SystemEvent]: 5000,
|
|
21
28
|
[TOASTER_TYPE.UserAction]: 2000,
|
|
29
|
+
[TOASTER_TYPE.Upload]: false,
|
|
22
30
|
};
|
|
23
31
|
export const TOASTER_ROOT_ID = 'toaster-root';
|
|
24
32
|
export const TOASTER_CONTAINER_PREFIX = 'toaster-container__';
|
|
33
|
+
export const MOCK_TOAST_LOADING_ITEM = {
|
|
34
|
+
id: '1',
|
|
35
|
+
progress: 10,
|
|
36
|
+
size: '45 MB',
|
|
37
|
+
title: 'file name.extensions',
|
|
38
|
+
status: 'loading',
|
|
39
|
+
statusLabel: 'Loading...',
|
|
40
|
+
actions: {},
|
|
41
|
+
};
|
|
42
|
+
export const MOCK_TOAST_PAUSED_ITEM = {
|
|
43
|
+
id: '2',
|
|
44
|
+
progress: 20,
|
|
45
|
+
size: '45 MB',
|
|
46
|
+
title: 'file name.extensions',
|
|
47
|
+
status: 'pause',
|
|
48
|
+
statusLabel: 'Paused',
|
|
49
|
+
actions: {},
|
|
50
|
+
};
|
|
51
|
+
export const MOCK_TOAST_ERROR_ITEM = {
|
|
52
|
+
id: '3',
|
|
53
|
+
progress: 20,
|
|
54
|
+
size: '45 MB',
|
|
55
|
+
title: 'file name.extensions',
|
|
56
|
+
status: 'error',
|
|
57
|
+
statusLabel: 'Error',
|
|
58
|
+
actions: {},
|
|
59
|
+
};
|
|
60
|
+
export const MOCK_TOAST_UPLOADED_ITEM = {
|
|
61
|
+
id: '4',
|
|
62
|
+
progress: 100,
|
|
63
|
+
size: '45 MB',
|
|
64
|
+
title: 'file name.extensions',
|
|
65
|
+
status: 'uploaded',
|
|
66
|
+
statusLabel: 'Uploaded',
|
|
67
|
+
actions: {},
|
|
68
|
+
link: {
|
|
69
|
+
href: '#',
|
|
70
|
+
text: 'Show',
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
export const MOCK_TOAST_PROPS = {
|
|
74
|
+
title: 'Loading...',
|
|
75
|
+
description: '3 minutes left',
|
|
76
|
+
status: 'loading',
|
|
77
|
+
closable: true,
|
|
78
|
+
collapsed: true,
|
|
79
|
+
totalProgressCounter: '10/15',
|
|
80
|
+
totalProgressPercentage: 30,
|
|
81
|
+
cancelButton: {
|
|
82
|
+
label: 'Cancel all',
|
|
83
|
+
onClick: () => { },
|
|
84
|
+
},
|
|
85
|
+
generalActions: {
|
|
86
|
+
onCancel: () => { },
|
|
87
|
+
onContinue: () => { },
|
|
88
|
+
onPause: () => { },
|
|
89
|
+
onRetry: () => { },
|
|
90
|
+
},
|
|
91
|
+
onCollapsed: () => { },
|
|
92
|
+
};
|
|
93
|
+
export const MOCK_UPLOAD_ITEMS_LIST = [
|
|
94
|
+
MOCK_TOAST_LOADING_ITEM,
|
|
95
|
+
MOCK_TOAST_PAUSED_ITEM,
|
|
96
|
+
MOCK_TOAST_ERROR_ITEM,
|
|
97
|
+
MOCK_TOAST_UPLOADED_ITEM,
|
|
98
|
+
Object.assign(Object.assign({}, MOCK_TOAST_UPLOADED_ITEM), { id: '5' }),
|
|
99
|
+
Object.assign(Object.assign({}, MOCK_TOAST_UPLOADED_ITEM), { id: '6' }),
|
|
100
|
+
];
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
.buttonAction{
|
|
2
2
|
border-radius:var(--radius-toaster-toast-system-event-button, 8px);
|
|
3
3
|
height:var(--size-toaster-toast-system-event-button, 32px);
|
|
4
|
-
padding-left:var(--space-toaster-system-event-padding, 8px);
|
|
5
|
-
padding-right:var(--space-toaster-system-event-padding, 8px);
|
|
4
|
+
padding-left:var(--space-toaster-toast-system-event-padding, 8px);
|
|
5
|
+
padding-right:var(--space-toaster-toast-system-event-padding, 8px);
|
|
6
6
|
font-family:var(--sans-body-m-font-family, SB Sans Interface);
|
|
7
7
|
font-weight:var(--sans-body-m-font-weight, Regular);
|
|
8
8
|
line-height:var(--sans-body-m-line-height, 20px);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { MouseEvent } from 'react';
|
|
2
|
+
export type ButtonTextNeutralProps = {
|
|
3
|
+
label: string;
|
|
4
|
+
onClick(e: MouseEvent<HTMLButtonElement>): void;
|
|
5
|
+
critical?: boolean;
|
|
6
|
+
};
|
|
7
|
+
export declare function ButtonTextNeutral({ label, onClick, critical }: ButtonTextNeutralProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import styles from './styles.module.css';
|
|
3
|
+
export function ButtonTextNeutral({ label, onClick, critical }) {
|
|
4
|
+
return (_jsx("button", { type: 'button', className: styles.buttonTextNeutral, onClick: onClick, "aria-label": 'action', "data-critical": critical || undefined, children: label }));
|
|
5
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ButtonTextNeutral';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ButtonTextNeutral';
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
.buttonTextNeutral{
|
|
2
|
+
font-family:var(--sans-body-m-font-family, SB Sans Interface);
|
|
3
|
+
font-weight:var(--sans-body-m-font-weight, Regular);
|
|
4
|
+
line-height:var(--sans-body-m-line-height, 20px);
|
|
5
|
+
font-size:var(--sans-body-m-font-size, 14px);
|
|
6
|
+
letter-spacing:var(--sans-body-m-letter-spacing, 0.1px);
|
|
7
|
+
paragraph-spacing:var(--sans-body-m-paragraph-spacing, 7.7px);
|
|
8
|
+
cursor:pointer;
|
|
9
|
+
display:flex;
|
|
10
|
+
align-items:center;
|
|
11
|
+
justify-content:center;
|
|
12
|
+
box-sizing:border-box;
|
|
13
|
+
margin:0;
|
|
14
|
+
padding:0;
|
|
15
|
+
color:var(--sys-invert-neutral-text-light, #8b8e9b);
|
|
16
|
+
background-color:transparent;
|
|
17
|
+
border:none;
|
|
18
|
+
}
|
|
19
|
+
.buttonTextNeutral:hover{
|
|
20
|
+
color:var(--sys-invert-neutral-text-main, #e6e8ef);
|
|
21
|
+
}
|
|
22
|
+
.buttonTextNeutral:focus, .buttonTextNeutral:active{
|
|
23
|
+
color:var(--sys-invert-neutral-accent-pressed, #aaaebd);
|
|
24
|
+
}
|
|
25
|
+
.buttonTextNeutral:focus-visible{
|
|
26
|
+
outline-width:var(--border-state-focus-s-border-width, 2px);
|
|
27
|
+
outline-style:var(--border-state-focus-s-border-style, solid);
|
|
28
|
+
outline-color:var(--border-state-focus-s-border-color, );
|
|
29
|
+
color:var(--sys-invert-neutral-text-main, #e6e8ef);
|
|
30
|
+
outline-color:var(--sys-available-on-complementary, #ffffff);
|
|
31
|
+
outline-offset:var(--spacing-state-focus-offset, 2px);
|
|
32
|
+
}
|
package/dist/esm/helpers.js
CHANGED
|
@@ -1,9 +1,21 @@
|
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
1
12
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
13
|
// eslint-disable-next-line react/no-deprecated
|
|
3
14
|
import { render } from 'react-dom';
|
|
4
15
|
import { toast } from 'react-toastify';
|
|
5
16
|
import { isBrowser } from '@snack-uikit/utils';
|
|
6
17
|
import { ToasterContainer, ToastSystemEvent, ToastUserAction, } from './components';
|
|
18
|
+
import { ToastUploadForToaster } from './components/ToastUpload/ToastUploadToaster';
|
|
7
19
|
import { AUTO_CLOSE_TIME, TOASTER_CONTAINER_DEFAULT_PROPS, TOASTER_CONTAINER_PREFIX, TOASTER_ROOT_ID, TOASTER_TYPE, } from './constants';
|
|
8
20
|
function getToasterContainer({ type, toasterParent, containerProps, }) {
|
|
9
21
|
const containerId = (containerProps === null || containerProps === void 0 ? void 0 : containerProps.containerId) || `${TOASTER_CONTAINER_PREFIX}${type}`;
|
|
@@ -37,6 +49,8 @@ function getToastComponent({ type, toasterProps, }) {
|
|
|
37
49
|
return _jsx(ToastUserAction, Object.assign({}, toasterProps));
|
|
38
50
|
case TOASTER_TYPE.SystemEvent:
|
|
39
51
|
return _jsx(ToastSystemEvent, Object.assign({}, toasterProps));
|
|
52
|
+
case TOASTER_TYPE.Upload:
|
|
53
|
+
return _jsx(ToastUploadForToaster, Object.assign({}, toasterProps));
|
|
40
54
|
default:
|
|
41
55
|
return undefined;
|
|
42
56
|
}
|
|
@@ -233,7 +247,31 @@ const systemEvent = {
|
|
|
233
247
|
return toast.dismiss(id);
|
|
234
248
|
},
|
|
235
249
|
};
|
|
250
|
+
const upload = {
|
|
251
|
+
startOrUpdate(_a) {
|
|
252
|
+
var { id } = _a, options = __rest(_a, ["id"]);
|
|
253
|
+
const toastId = id || TOASTER_TYPE.Upload;
|
|
254
|
+
if (toast.isActive(toastId)) {
|
|
255
|
+
return updateToast(toastId, {
|
|
256
|
+
type: TOASTER_TYPE.Upload,
|
|
257
|
+
toasterProps: Object.assign(Object.assign({}, options), { loading: true }),
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
return openToast({
|
|
261
|
+
type: TOASTER_TYPE.Upload,
|
|
262
|
+
toasterProps: Object.assign(Object.assign({}, options), { loading: true }),
|
|
263
|
+
toastOptions: {
|
|
264
|
+
id: toastId,
|
|
265
|
+
onClose: options.onClose,
|
|
266
|
+
},
|
|
267
|
+
});
|
|
268
|
+
},
|
|
269
|
+
dismiss(id) {
|
|
270
|
+
return toast.dismiss(id);
|
|
271
|
+
},
|
|
272
|
+
};
|
|
236
273
|
export const toaster = {
|
|
237
274
|
userAction,
|
|
238
275
|
systemEvent,
|
|
276
|
+
upload,
|
|
239
277
|
};
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { toaster, openToast, updateToast, dismissToast } from './helpers';
|
|
2
|
-
export type { ToastSystemEventProps, ToastUserActionProps, ToasterContainerProps } from './components';
|
|
3
|
-
export type { Toaster, UpdateToast, OpenToast, UserActionOptions, SystemEventOptions, ToasterId, ToastOptions, } from './types';
|
|
2
|
+
export type { ToastSystemEventProps, ToastUserActionProps, ToasterContainerProps, ToastUploadProps, } from './components';
|
|
3
|
+
export type { Toaster, UpdateToast, OpenToast, UserActionOptions, SystemEventOptions, ToasterId, ToastOptions, UploadOptions, } from './types';
|
|
4
4
|
export { TOASTER_TYPE } from './constants';
|
package/dist/esm/testIds.d.ts
CHANGED
|
@@ -16,3 +16,17 @@ export declare const TOAST_USER_ACTION_TEST_IDS: {
|
|
|
16
16
|
loader: string;
|
|
17
17
|
link: string;
|
|
18
18
|
};
|
|
19
|
+
export declare const TOAST_UPLOAD_TEST_IDS: {
|
|
20
|
+
main: string;
|
|
21
|
+
close: string;
|
|
22
|
+
title: string;
|
|
23
|
+
description: string;
|
|
24
|
+
counter: string;
|
|
25
|
+
progress: string;
|
|
26
|
+
list: string;
|
|
27
|
+
collapseButton: string;
|
|
28
|
+
progressBar: string;
|
|
29
|
+
uploadItem: string;
|
|
30
|
+
uploadItemLink: string;
|
|
31
|
+
uploadItemCancel: string;
|
|
32
|
+
};
|
package/dist/esm/testIds.js
CHANGED
|
@@ -18,3 +18,18 @@ export const TOAST_USER_ACTION_TEST_IDS = {
|
|
|
18
18
|
loader: `${TOAST_USER_ACTION_TEST_ID}__loader`,
|
|
19
19
|
link: `${TOAST_USER_ACTION_TEST_ID}__link`,
|
|
20
20
|
};
|
|
21
|
+
const TOAST_UPLOAD_TEST_ID = 'toast-upload';
|
|
22
|
+
export const TOAST_UPLOAD_TEST_IDS = {
|
|
23
|
+
main: TOAST_UPLOAD_TEST_ID,
|
|
24
|
+
close: `${TOAST_UPLOAD_TEST_ID}__close`,
|
|
25
|
+
title: `${TOAST_UPLOAD_TEST_ID}__title`,
|
|
26
|
+
description: `${TOAST_UPLOAD_TEST_ID}__description`,
|
|
27
|
+
counter: `${TOAST_UPLOAD_TEST_ID}__counter`,
|
|
28
|
+
progress: `${TOAST_UPLOAD_TEST_ID}__progress`,
|
|
29
|
+
list: `${TOAST_UPLOAD_TEST_ID}__list`,
|
|
30
|
+
collapseButton: `${TOAST_UPLOAD_TEST_ID}__collapseButton`,
|
|
31
|
+
progressBar: `${TOAST_UPLOAD_TEST_ID}__progressBar`,
|
|
32
|
+
uploadItem: `${TOAST_UPLOAD_TEST_ID}__uploadItem`,
|
|
33
|
+
uploadItemLink: `${TOAST_UPLOAD_TEST_ID}__uploadItemLink`,
|
|
34
|
+
uploadItemCancel: `${TOAST_UPLOAD_TEST_ID}__uploadItemCancel`,
|
|
35
|
+
};
|
package/dist/esm/types.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Id, ToastOptions as RtToastOptions } from 'react-toastify';
|
|
2
2
|
import { ValueOf } from '@snack-uikit/utils';
|
|
3
|
-
import { ToasterContainerProps, ToastSystemEventProps, ToastUserActionProps } from './components';
|
|
3
|
+
import { ToasterContainerProps, ToastSystemEventProps, ToastUploadProps, ToastUserActionProps } from './components';
|
|
4
4
|
import { TOASTER_TYPE } from './constants';
|
|
5
5
|
export type ToasterId = Id;
|
|
6
6
|
export type PromisedId = Promise<ToasterId>;
|
|
@@ -13,6 +13,9 @@ export type ToasterType = ValueOf<typeof TOASTER_TYPE>;
|
|
|
13
13
|
export type ToasterPropsMap = {
|
|
14
14
|
[TOASTER_TYPE.UserAction]: ToastUserActionProps;
|
|
15
15
|
[TOASTER_TYPE.SystemEvent]: ToastSystemEventProps;
|
|
16
|
+
[TOASTER_TYPE.Upload]: ToastUploadProps & {
|
|
17
|
+
loading: boolean;
|
|
18
|
+
};
|
|
16
19
|
};
|
|
17
20
|
type OpenNotificationProps<T extends keyof ToasterPropsMap> = {
|
|
18
21
|
type: T;
|
|
@@ -33,6 +36,7 @@ export type UpdateToast = <T extends keyof ToasterPropsMap>(id: string | number,
|
|
|
33
36
|
}) => void;
|
|
34
37
|
export type UserActionOptions = Omit<ToastUserActionProps, 'appearance'> & Pick<ToastOptions, 'id' | 'onClose'>;
|
|
35
38
|
export type SystemEventOptions = Omit<ToastSystemEventProps, 'appearance'> & Pick<ToastOptions, 'id' | 'onClose'>;
|
|
39
|
+
export type UploadOptions = ToastUploadProps & Pick<ToastOptions, 'id' | 'onClose'>;
|
|
36
40
|
export type Toaster = {
|
|
37
41
|
userAction: {
|
|
38
42
|
success(options: UserActionOptions): PromisedId;
|
|
@@ -62,5 +66,9 @@ export type Toaster = {
|
|
|
62
66
|
};
|
|
63
67
|
dismiss(id?: ToasterId): void;
|
|
64
68
|
};
|
|
69
|
+
upload: {
|
|
70
|
+
startOrUpdate(options: UploadOptions): void;
|
|
71
|
+
dismiss(id?: ToasterId): void;
|
|
72
|
+
};
|
|
65
73
|
};
|
|
66
74
|
export {};
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
6
|
"title": "Toaster",
|
|
7
|
-
"version": "0.8.
|
|
7
|
+
"version": "0.8.17-preview-bc9ca5dd.0",
|
|
8
8
|
"sideEffects": [
|
|
9
9
|
"*.css",
|
|
10
10
|
"*.woff",
|
|
@@ -36,13 +36,14 @@
|
|
|
36
36
|
"license": "Apache-2.0",
|
|
37
37
|
"scripts": {},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@snack-uikit/icons": "0.25.
|
|
40
|
-
"@snack-uikit/link": "0.15.
|
|
39
|
+
"@snack-uikit/icons": "0.25.2-preview-bc9ca5dd.0",
|
|
40
|
+
"@snack-uikit/link": "0.15.13-preview-bc9ca5dd.0",
|
|
41
41
|
"@snack-uikit/loaders": "0.9.2",
|
|
42
|
-
"@snack-uikit/
|
|
42
|
+
"@snack-uikit/progress-bar": "0.1.4",
|
|
43
|
+
"@snack-uikit/truncate-string": "0.6.13-preview-bc9ca5dd.0",
|
|
43
44
|
"@snack-uikit/utils": "3.8.0",
|
|
44
45
|
"classnames": "2.5.1",
|
|
45
46
|
"react-toastify": "10.0.5"
|
|
46
47
|
},
|
|
47
|
-
"gitHead": "
|
|
48
|
+
"gitHead": "c0c351479d4c36d31cfc204781692ab972d7262d"
|
|
48
49
|
}
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
|
|
34
34
|
.buttonClose {
|
|
35
35
|
@include styles-theme-variables.composite-var(
|
|
36
|
-
styles-tokens-toaster-toasterSystemEvent.$toaster-system-event-toast-button-button-
|
|
36
|
+
styles-tokens-toaster-toasterSystemEvent.$toaster-system-event-toast-button-button-neutral
|
|
37
37
|
);
|
|
38
38
|
|
|
39
39
|
cursor: pointer;
|
|
@@ -159,7 +159,7 @@
|
|
|
159
159
|
box-sizing: border-box;
|
|
160
160
|
width: calc(
|
|
161
161
|
styles-tokens-toaster-toasterSystemEvent.$size-toaster-toast-system-event-container -
|
|
162
|
-
(2 * styles-tokens-toaster-toasterSystemEvent.$space-toaster-system-event-padding)
|
|
162
|
+
(2 * styles-tokens-toaster-toasterSystemEvent.$space-toaster-toast-system-event-padding)
|
|
163
163
|
);
|
|
164
164
|
max-width: 100%;
|
|
165
165
|
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import cn from 'classnames';
|
|
2
|
+
import { MouseEvent } from 'react';
|
|
3
|
+
import { ToastContentProps as RtToastContentProps } from 'react-toastify';
|
|
4
|
+
|
|
5
|
+
import { ChevronDownSVG, ChevronUpSVG, CrossSVG } from '@snack-uikit/icons';
|
|
6
|
+
import { ProgressBar } from '@snack-uikit/progress-bar';
|
|
7
|
+
import { extractSupportProps, WithSupportProps } from '@snack-uikit/utils';
|
|
8
|
+
|
|
9
|
+
import { ButtonTextNeutral, ButtonTextNeutralProps } from '../../helperComponents/ButtonTextNeutral';
|
|
10
|
+
import { TOAST_UPLOAD_TEST_IDS } from '../../testIds';
|
|
11
|
+
import { progressBarAppearanceByStatus } from './constants';
|
|
12
|
+
import { ButtonIcon } from './helperComponents/ButtonIcon';
|
|
13
|
+
import { FileItem } from './helperComponents/FileItem';
|
|
14
|
+
import { LoadingStatus } from './helperComponents/LoadingStatus';
|
|
15
|
+
import styles from './styles.module.scss';
|
|
16
|
+
import { ToastUploadStatus, UploadActions, UploadItem } from './types';
|
|
17
|
+
import { formatPercent } from './utils';
|
|
18
|
+
|
|
19
|
+
export type ToastUploadProps = Partial<RtToastContentProps> &
|
|
20
|
+
WithSupportProps<{
|
|
21
|
+
/**
|
|
22
|
+
* Общий статус загрузки
|
|
23
|
+
*/
|
|
24
|
+
status: ToastUploadStatus;
|
|
25
|
+
/**
|
|
26
|
+
* Заголовок тостера
|
|
27
|
+
*/
|
|
28
|
+
title: string;
|
|
29
|
+
/**
|
|
30
|
+
* Описание статуса загрузки
|
|
31
|
+
*/
|
|
32
|
+
description: string;
|
|
33
|
+
/**
|
|
34
|
+
* Каунтер общего прогресса
|
|
35
|
+
*/
|
|
36
|
+
totalProgressCounter: string;
|
|
37
|
+
/**
|
|
38
|
+
* Процент прогресса
|
|
39
|
+
*/
|
|
40
|
+
totalProgressPercentage: number;
|
|
41
|
+
/**
|
|
42
|
+
* Закрыть тостер
|
|
43
|
+
*/
|
|
44
|
+
onCloseClick?(e: MouseEvent<HTMLButtonElement>, close?: () => void): void;
|
|
45
|
+
/**
|
|
46
|
+
* Показывать кнопку закрытия тостера
|
|
47
|
+
*/
|
|
48
|
+
closable?: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* CSS-класс контейнера
|
|
51
|
+
*/
|
|
52
|
+
className?: string;
|
|
53
|
+
/**
|
|
54
|
+
* Загружаемые элементы
|
|
55
|
+
*/
|
|
56
|
+
items: UploadItem[];
|
|
57
|
+
/**
|
|
58
|
+
* Тостер свернут/развернут
|
|
59
|
+
*/
|
|
60
|
+
collapsed: boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Развернуть/свернуть тостер
|
|
63
|
+
*/
|
|
64
|
+
onCollapsed: (collapsed: boolean) => void;
|
|
65
|
+
/**
|
|
66
|
+
* Экшены для управления загрузкой
|
|
67
|
+
*/
|
|
68
|
+
generalActions: UploadActions;
|
|
69
|
+
/**
|
|
70
|
+
* Отмена всей загрузки
|
|
71
|
+
*/
|
|
72
|
+
cancelButton?: ButtonTextNeutralProps;
|
|
73
|
+
}>;
|
|
74
|
+
|
|
75
|
+
export function ToastUpload({
|
|
76
|
+
status,
|
|
77
|
+
title,
|
|
78
|
+
description,
|
|
79
|
+
totalProgressCounter,
|
|
80
|
+
totalProgressPercentage,
|
|
81
|
+
closeToast,
|
|
82
|
+
onCloseClick,
|
|
83
|
+
closable,
|
|
84
|
+
className,
|
|
85
|
+
items,
|
|
86
|
+
collapsed,
|
|
87
|
+
onCollapsed,
|
|
88
|
+
generalActions,
|
|
89
|
+
cancelButton,
|
|
90
|
+
...rest
|
|
91
|
+
}: ToastUploadProps) {
|
|
92
|
+
const handleCloseClick = (e: MouseEvent<HTMLButtonElement>) => {
|
|
93
|
+
e.stopPropagation();
|
|
94
|
+
onCloseClick ? onCloseClick(e, closeToast) : closeToast?.();
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
const handleCollapseClick = (e: MouseEvent<HTMLButtonElement>) => {
|
|
98
|
+
e.stopPropagation();
|
|
99
|
+
onCollapsed(!collapsed);
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
return (
|
|
103
|
+
<div className={cn(styles.container, className)} {...extractSupportProps(rest)} data-collapsed={collapsed}>
|
|
104
|
+
<div className={styles.titleLine}>
|
|
105
|
+
<div className={styles.titleLineBody}>
|
|
106
|
+
<div className={styles.title} data-test-id={TOAST_UPLOAD_TEST_IDS.title}>
|
|
107
|
+
{title}
|
|
108
|
+
</div>
|
|
109
|
+
|
|
110
|
+
{cancelButton && <ButtonTextNeutral {...cancelButton} />}
|
|
111
|
+
|
|
112
|
+
<ButtonIcon onClick={handleCollapseClick} data-test-id={TOAST_UPLOAD_TEST_IDS.collapseButton}>
|
|
113
|
+
{collapsed ? <ChevronUpSVG /> : <ChevronDownSVG />}
|
|
114
|
+
</ButtonIcon>
|
|
115
|
+
|
|
116
|
+
{closable && (
|
|
117
|
+
<ButtonIcon
|
|
118
|
+
type='button'
|
|
119
|
+
className={styles.buttonAction}
|
|
120
|
+
onClick={handleCloseClick}
|
|
121
|
+
data-test-id={TOAST_UPLOAD_TEST_IDS.close}
|
|
122
|
+
>
|
|
123
|
+
<CrossSVG />
|
|
124
|
+
</ButtonIcon>
|
|
125
|
+
)}
|
|
126
|
+
</div>
|
|
127
|
+
|
|
128
|
+
<div className={styles.generalProgress}>
|
|
129
|
+
<div className={styles.statusLine}>
|
|
130
|
+
<div className={styles.statusWrap}>
|
|
131
|
+
<LoadingStatus status={status} actions={generalActions} />
|
|
132
|
+
|
|
133
|
+
<span
|
|
134
|
+
className={styles.description}
|
|
135
|
+
data-status={status}
|
|
136
|
+
data-test-id={TOAST_UPLOAD_TEST_IDS.description}
|
|
137
|
+
>
|
|
138
|
+
{description}
|
|
139
|
+
</span>
|
|
140
|
+
</div>
|
|
141
|
+
|
|
142
|
+
<span className={styles.totalCounter} data-test-id={TOAST_UPLOAD_TEST_IDS.counter}>
|
|
143
|
+
{totalProgressCounter}
|
|
144
|
+
</span>
|
|
145
|
+
|
|
146
|
+
<span className={styles.totalPercentage} data-test-id={TOAST_UPLOAD_TEST_IDS.progress}>
|
|
147
|
+
{formatPercent(totalProgressPercentage)}
|
|
148
|
+
</span>
|
|
149
|
+
</div>
|
|
150
|
+
|
|
151
|
+
{!collapsed && (
|
|
152
|
+
<ProgressBar
|
|
153
|
+
progress={totalProgressPercentage}
|
|
154
|
+
size='xs'
|
|
155
|
+
appearance={progressBarAppearanceByStatus[status]}
|
|
156
|
+
data-test-id={TOAST_UPLOAD_TEST_IDS.progressBar}
|
|
157
|
+
/>
|
|
158
|
+
)}
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
161
|
+
|
|
162
|
+
<div className={styles.list} data-collapsed={collapsed} data-test-id={TOAST_UPLOAD_TEST_IDS.list}>
|
|
163
|
+
{items.map(item => (
|
|
164
|
+
<FileItem key={item.id} item={item} />
|
|
165
|
+
))}
|
|
166
|
+
</div>
|
|
167
|
+
</div>
|
|
168
|
+
);
|
|
169
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { useState } from 'react';
|
|
2
|
+
|
|
3
|
+
import { ToastUpload, ToastUploadProps } from './ToastUpload';
|
|
4
|
+
|
|
5
|
+
export type ToastUploadToasterProps = Omit<ToastUploadProps, 'collapsed' | 'onCollapsed'>;
|
|
6
|
+
|
|
7
|
+
export function ToastUploadForToaster(props: ToastUploadToasterProps) {
|
|
8
|
+
const [collapsed, setCollapsed] = useState(true);
|
|
9
|
+
|
|
10
|
+
return <ToastUpload {...props} collapsed={collapsed} onCollapsed={setCollapsed} />;
|
|
11
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ProgressBarProps } from '@snack-uikit/progress-bar';
|
|
2
|
+
|
|
3
|
+
import { ToastUploadStatus } from './types';
|
|
4
|
+
|
|
5
|
+
export const TOAST_UPLOAD_STATUS = {
|
|
6
|
+
Loading: 'loading',
|
|
7
|
+
Pause: 'pause',
|
|
8
|
+
Error: 'error',
|
|
9
|
+
Uploaded: 'uploaded',
|
|
10
|
+
ErrorUploaded: 'errorUploaded',
|
|
11
|
+
} as const;
|
|
12
|
+
|
|
13
|
+
export const TOAST_UPLOAD_ITEM_STATUS = {
|
|
14
|
+
Loading: 'loading',
|
|
15
|
+
Pause: 'pause',
|
|
16
|
+
Error: 'error',
|
|
17
|
+
Uploaded: 'uploaded',
|
|
18
|
+
} as const;
|
|
19
|
+
|
|
20
|
+
export const progressBarAppearanceByStatus: Record<ToastUploadStatus, ProgressBarProps['appearance']> = {
|
|
21
|
+
pause: 'neutral',
|
|
22
|
+
loading: 'green',
|
|
23
|
+
uploaded: 'green',
|
|
24
|
+
errorUploaded: 'red',
|
|
25
|
+
error: 'red',
|
|
26
|
+
};
|