mimir-ui-kit 1.14.5 → 1.15.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 +62 -62
- package/dist/ProgressBar-BekX41HR.js +77 -0
- package/dist/SelectSearchOption-snHM9uZX.js +3796 -0
- package/dist/assets/Button.css +1 -1
- package/dist/assets/ProgressBar2.css +1 -0
- package/dist/assets/SelectSearch.css +1 -1
- package/dist/assets/SelectSearchOption.css +1 -0
- package/dist/assets/Tag.css +1 -1
- package/dist/components/Button/Button.js +29 -29
- package/dist/components/Input/Input.js +1 -1
- package/dist/components/SelectSearch/SelectSearch.d.ts +7 -12
- package/dist/components/SelectSearch/SelectSearch.js +681 -3792
- package/dist/components/SelectSearch/constants.d.ts +2 -2
- package/dist/components/SelectSearch/constants.js +1 -1
- package/dist/components/SelectSearch/index.d.ts +2 -1
- package/dist/components/SelectSearch/types.d.ts +40 -0
- package/dist/components/SelectSearch/types.js +1 -0
- package/dist/components/SelectSearchOption/SelectSearchOption.d.ts +10 -0
- package/dist/components/SelectSearchOption/SelectSearchOption.js +8 -0
- package/dist/components/SelectSearchOption/index.d.ts +2 -0
- package/dist/components/SelectSearchOption/index.js +4 -0
- package/dist/components/Tag/Tag.js +6 -6
- package/dist/components/Timer/Timer.d.ts +1 -1
- package/dist/components/Timer/Timer.js +17 -19
- package/dist/components/Toasts/ProgressBar.d.ts +5 -0
- package/dist/components/Toasts/ProgressBar.js +8 -0
- package/dist/components/Toasts/Toast.d.ts +54 -0
- package/dist/components/Toasts/Toast.js +73 -0
- package/dist/components/Toasts/ToastList.d.ts +10 -0
- package/dist/components/Toasts/ToastList.js +50 -0
- package/dist/components/Toasts/ToastsProvider.d.ts +3 -0
- package/dist/components/Toasts/ToastsProvider.js +46 -0
- package/dist/components/Toasts/constants.d.ts +23 -0
- package/dist/components/Toasts/constants.js +49 -0
- package/dist/components/Toasts/hooks.d.ts +2 -0
- package/dist/components/Toasts/hooks.js +16 -0
- package/dist/components/Toasts/index.d.ts +3 -0
- package/dist/components/Toasts/index.js +9 -0
- package/dist/components/Toasts/store.d.ts +29 -0
- package/dist/components/Toasts/store.js +50 -0
- package/dist/components/Toasts/types.d.ts +5 -0
- package/dist/components/Toasts/types.js +1 -0
- package/dist/components/Uploader/Uploader.d.ts +4 -4
- package/dist/components/Uploader/Uploader.js +5 -4
- package/dist/components/Uploader/constants.d.ts +1 -1
- package/dist/components/Uploader/constants.js +1 -1
- package/dist/components/Uploader/index.d.ts +1 -1
- package/dist/components/UploaderPhotos/UploaderPhotos.d.ts +3 -3
- package/dist/components/UploaderPhotos/UploaderPhotos.js +2 -2
- package/dist/components/UploaderPhotos/index.d.ts +1 -1
- package/dist/components/index.d.ts +8 -1
- package/dist/components/index.js +14 -1
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/useCopyToClipboard/index.d.ts +1 -0
- package/dist/hooks/useCopyToClipboard/index.js +4 -0
- package/dist/hooks/useCopyToClipboard/useCopyToClipboard.d.ts +4 -0
- package/dist/hooks/useCopyToClipboard/useCopyToClipboard.js +23 -0
- package/dist/hooks/useTimer/index.d.ts +2 -2
- package/dist/hooks/useTimer/index.js +14 -7
- package/dist/index.js +16 -1
- package/package.json +127 -128
@@ -0,0 +1,40 @@
|
|
1
|
+
import { ESelectSearchSize } from './constants';
|
2
|
+
import { VirtualizedFixedSizeListProps } from './SelectSearch';
|
3
|
+
|
4
|
+
export type TSelectSearchProps = {
|
5
|
+
/**
|
6
|
+
* Текущее выбранное значение.
|
7
|
+
*/
|
8
|
+
value?: Record<string, unknown> | null;
|
9
|
+
/**
|
10
|
+
* Функция обратного вызова при изменении выбранного значения.
|
11
|
+
*/
|
12
|
+
onChange?: (value: Record<string, unknown>) => void;
|
13
|
+
/**
|
14
|
+
* Текст-подсказка для поля ввода.
|
15
|
+
*/
|
16
|
+
placeholder?: string;
|
17
|
+
/**
|
18
|
+
* Размер компонента выбора.
|
19
|
+
*/
|
20
|
+
size?: ESelectSearchSize;
|
21
|
+
/**
|
22
|
+
* Флаг для растягивания компонента на всю ширину контейнера.
|
23
|
+
*/
|
24
|
+
full?: boolean;
|
25
|
+
/**
|
26
|
+
* Дочерние элементы компонента.
|
27
|
+
*/
|
28
|
+
children?: React.ReactNode;
|
29
|
+
/**
|
30
|
+
* Свойства для виртуализированного списка фиксированного размера.
|
31
|
+
*/
|
32
|
+
virtualizedFixedSizeList?: VirtualizedFixedSizeListProps;
|
33
|
+
/**
|
34
|
+
* Значение, отображаемое в поле выбора.
|
35
|
+
*/
|
36
|
+
displayValue?: string;
|
37
|
+
showArrow?: boolean;
|
38
|
+
onSearch?: (value: string) => void;
|
39
|
+
filterOnSearch?: boolean;
|
40
|
+
};
|
@@ -0,0 +1 @@
|
|
1
|
+
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { ESelectSearchSize } from '../SelectSearch/constants';
|
2
|
+
|
3
|
+
export interface SelectSearchOptionProps {
|
4
|
+
record: Record<string, unknown>;
|
5
|
+
children?: React.ReactNode;
|
6
|
+
size?: ESelectSearchSize;
|
7
|
+
className?: string;
|
8
|
+
title?: string;
|
9
|
+
}
|
10
|
+
export declare function SelectSearchOption({ record, size, children, className }: SelectSearchOptionProps): import("react/jsx-runtime").JSX.Element;
|
@@ -2,12 +2,12 @@ import { jsx } from "react/jsx-runtime";
|
|
2
2
|
import { c as classNames } from "../../index-CweZ_OcN.js";
|
3
3
|
import { forwardRef } from "react";
|
4
4
|
import { ETagSize, ETagType } from "./constants.js";
|
5
|
-
import '../../assets/Tag.css';const container = "
|
6
|
-
const disabled = "
|
7
|
-
const inner = "
|
8
|
-
const M = "
|
9
|
-
const S = "
|
10
|
-
const XS = "
|
5
|
+
import '../../assets/Tag.css';const container = "_container_ok6fq_2";
|
6
|
+
const disabled = "_disabled_ok6fq_25";
|
7
|
+
const inner = "_inner_ok6fq_30";
|
8
|
+
const M = "_M_ok6fq_38";
|
9
|
+
const S = "_S_ok6fq_42";
|
10
|
+
const XS = "_XS_ok6fq_50";
|
11
11
|
const cls = {
|
12
12
|
container,
|
13
13
|
disabled,
|
@@ -20,5 +20,5 @@ type TProps = {
|
|
20
20
|
/**
|
21
21
|
* Компонент Timer отображает таймер с отсчетом времени в минутах и секундах.
|
22
22
|
*/
|
23
|
-
export declare const Timer: ({ expiryTimestamp, autoStart, onTimerEnd, className }: TProps) => import("react/jsx-runtime").JSX.Element
|
23
|
+
export declare const Timer: import('react').MemoExoticComponent<({ expiryTimestamp, autoStart, onTimerEnd, className }: TProps) => import("react/jsx-runtime").JSX.Element>;
|
24
24
|
export {};
|
@@ -1,29 +1,27 @@
|
|
1
1
|
import { jsxs } from "react/jsx-runtime";
|
2
2
|
import { c as classNames } from "../../index-CweZ_OcN.js";
|
3
|
+
import { memo } from "react";
|
3
4
|
import { useTimer } from "../../hooks/useTimer/index.js";
|
4
5
|
import '../../assets/Timer.css';const timer = "_timer_llwad_3";
|
5
6
|
const cls = {
|
6
7
|
timer
|
7
8
|
};
|
8
|
-
const Timer = (
|
9
|
-
expiryTimestamp,
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
formattedSeconds
|
25
|
-
] });
|
26
|
-
};
|
9
|
+
const Timer = memo(
|
10
|
+
({ expiryTimestamp, autoStart = false, onTimerEnd, className }) => {
|
11
|
+
const { minutes, seconds } = useTimer({
|
12
|
+
expiryTimestamp,
|
13
|
+
onExpire: onTimerEnd,
|
14
|
+
autoStart
|
15
|
+
});
|
16
|
+
const formattedMinutes = String(minutes).padStart(2, "0");
|
17
|
+
const formattedSeconds = String(seconds).padStart(2, "0");
|
18
|
+
return /* @__PURE__ */ jsxs("div", { className: classNames(cls.timer, className), children: [
|
19
|
+
formattedMinutes,
|
20
|
+
":",
|
21
|
+
formattedSeconds
|
22
|
+
] });
|
23
|
+
}
|
24
|
+
);
|
27
25
|
export {
|
28
26
|
Timer
|
29
27
|
};
|
@@ -0,0 +1,54 @@
|
|
1
|
+
import { ReactNode, RefObject } from 'react';
|
2
|
+
import { EToastVariant, EToastPosition } from './constants';
|
3
|
+
|
4
|
+
export type TProps = {
|
5
|
+
/**
|
6
|
+
* Идентификатор уведомления.
|
7
|
+
*/
|
8
|
+
id: string;
|
9
|
+
/**
|
10
|
+
* Вариант уведомления.
|
11
|
+
*/
|
12
|
+
variant?: EToastVariant | `${EToastVariant}`;
|
13
|
+
/**
|
14
|
+
* Сообщение уведомления.
|
15
|
+
*/
|
16
|
+
message: ReactNode;
|
17
|
+
/**
|
18
|
+
* Заголовок уведомления.
|
19
|
+
*/
|
20
|
+
title: string;
|
21
|
+
/**
|
22
|
+
* Длительность уведомления.
|
23
|
+
*/
|
24
|
+
duration?: number;
|
25
|
+
/**
|
26
|
+
* Позиция уведомления.
|
27
|
+
*/
|
28
|
+
position?: EToastPosition | `${EToastPosition}`;
|
29
|
+
/**
|
30
|
+
* Флаг, указывающий на автоматическое закрытие уведомления.
|
31
|
+
*/
|
32
|
+
autoClose?: boolean;
|
33
|
+
/**
|
34
|
+
* Флаг, указывающий на необходимость таймера.
|
35
|
+
*/
|
36
|
+
needTimer?: boolean;
|
37
|
+
/**
|
38
|
+
* Флаг, указывающий на необходимость индикатора прогресса.
|
39
|
+
*/
|
40
|
+
needProgress?: boolean;
|
41
|
+
/**
|
42
|
+
* Флаг, указывающий на необходимость кнопки закрытия.
|
43
|
+
*/
|
44
|
+
needCloseButton?: boolean;
|
45
|
+
/**
|
46
|
+
* Функция обратного вызова, вызываемая при удалении уведомления.
|
47
|
+
*/
|
48
|
+
onToastRemove?: (toastId: string, ref: RefObject<HTMLDivElement>) => void;
|
49
|
+
/**
|
50
|
+
* Слот уведомления.
|
51
|
+
*/
|
52
|
+
slot?: ReactNode;
|
53
|
+
};
|
54
|
+
export declare const Toast: import('react').MemoExoticComponent<({ id, title, message, position, variant, duration, autoClose, needProgress, needTimer, needCloseButton, onToastRemove, slot }: TProps) => import("react/jsx-runtime").JSX.Element>;
|
@@ -0,0 +1,73 @@
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
2
|
+
import { c as classNames } from "../../index-CweZ_OcN.js";
|
3
|
+
import { memo, useRef } from "react";
|
4
|
+
import { ANIMATION_VARIABLES_MAP, EToastPosition, EToastVariant, DEFAULT_TOAST_DURATION } from "./constants.js";
|
5
|
+
import { c as cls, P as ProgressBar } from "../../ProgressBar-BekX41HR.js";
|
6
|
+
import { useTimer } from "../../hooks/useTimer/index.js";
|
7
|
+
import { Button } from "../Button/Button.js";
|
8
|
+
const Toast = memo(
|
9
|
+
({
|
10
|
+
id,
|
11
|
+
title = "",
|
12
|
+
message,
|
13
|
+
position = EToastPosition.TOP_RIGHT,
|
14
|
+
variant = EToastVariant.DEFAULT,
|
15
|
+
duration = DEFAULT_TOAST_DURATION,
|
16
|
+
autoClose = true,
|
17
|
+
needProgress = true,
|
18
|
+
needTimer = true,
|
19
|
+
needCloseButton = true,
|
20
|
+
onToastRemove,
|
21
|
+
slot
|
22
|
+
}) => {
|
23
|
+
const wrapperRef = useRef(null);
|
24
|
+
const { seconds } = useTimer({
|
25
|
+
expiryTimestamp: Date.now() + duration,
|
26
|
+
autoStart: needTimer,
|
27
|
+
onExpire: autoClose ? () => onToastRemove == null ? void 0 : onToastRemove(id, wrapperRef) : void 0
|
28
|
+
});
|
29
|
+
return /* @__PURE__ */ jsxs(
|
30
|
+
"div",
|
31
|
+
{
|
32
|
+
style: {
|
33
|
+
["--elm-translate"]: ANIMATION_VARIABLES_MAP[position]
|
34
|
+
},
|
35
|
+
className: classNames(
|
36
|
+
cls["toast-in"],
|
37
|
+
cls["toast-wrapper"],
|
38
|
+
cls[variant]
|
39
|
+
),
|
40
|
+
ref: wrapperRef,
|
41
|
+
role: "alert",
|
42
|
+
children: [
|
43
|
+
title && /* @__PURE__ */ jsx("h3", { className: cls.title, children: title }),
|
44
|
+
message && /* @__PURE__ */ jsx("div", { className: cls.message, children: message }),
|
45
|
+
(needTimer || needProgress) && /* @__PURE__ */ jsxs("div", { children: [
|
46
|
+
!!duration && needTimer && /* @__PURE__ */ jsxs("div", { className: cls.timer, children: [
|
47
|
+
/* @__PURE__ */ jsx("h4", { className: cls["timer-title"], children: "Осталось" }),
|
48
|
+
/* @__PURE__ */ jsxs("p", { className: cls.seconds, children: [
|
49
|
+
seconds,
|
50
|
+
" сек"
|
51
|
+
] })
|
52
|
+
] }),
|
53
|
+
!!duration && needProgress && /* @__PURE__ */ jsx(ProgressBar, { variant, duration })
|
54
|
+
] }),
|
55
|
+
needCloseButton && /* @__PURE__ */ jsx(
|
56
|
+
Button,
|
57
|
+
{
|
58
|
+
onClick: () => onToastRemove == null ? void 0 : onToastRemove(id, wrapperRef),
|
59
|
+
clear: true,
|
60
|
+
isIconButton: true,
|
61
|
+
className: cls["close-button"],
|
62
|
+
iconName: "Close24px"
|
63
|
+
}
|
64
|
+
),
|
65
|
+
slot && /* @__PURE__ */ jsx("div", { className: cls.slot, children: slot })
|
66
|
+
]
|
67
|
+
}
|
68
|
+
);
|
69
|
+
}
|
70
|
+
);
|
71
|
+
export {
|
72
|
+
Toast
|
73
|
+
};
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { EToastPosition } from './constants';
|
2
|
+
import { TProps as TToastProps } from './Toast';
|
3
|
+
|
4
|
+
type TProps = {
|
5
|
+
position?: EToastPosition | `${EToastPosition}`;
|
6
|
+
toasts: TToastProps[];
|
7
|
+
onToastRemove?: (toastId: string, ref: React.RefObject<HTMLDivElement>) => void;
|
8
|
+
};
|
9
|
+
export declare const ToastList: import('react').MemoExoticComponent<({ toasts, position, onToastRemove }: TProps) => import("react/jsx-runtime").JSX.Element | null>;
|
10
|
+
export {};
|
@@ -0,0 +1,50 @@
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
2
|
+
import { c as classNames } from "../../index-CweZ_OcN.js";
|
3
|
+
import { memo, useRef, useCallback, useEffect } from "react";
|
4
|
+
import { EToastPosition } from "./constants.js";
|
5
|
+
import { c as cls } from "../../ProgressBar-BekX41HR.js";
|
6
|
+
import { Toast } from "./Toast.js";
|
7
|
+
const ToastList = memo(
|
8
|
+
({ toasts, position = EToastPosition.TOP_RIGHT, onToastRemove }) => {
|
9
|
+
const listRef = useRef(null);
|
10
|
+
const handleScrolling = useCallback(
|
11
|
+
(el) => {
|
12
|
+
const isTopPosition = [
|
13
|
+
EToastPosition.TOP_LEFT,
|
14
|
+
EToastPosition.TOP_RIGHT
|
15
|
+
].includes(position);
|
16
|
+
if (isTopPosition) {
|
17
|
+
el == null ? void 0 : el.scrollTo(0, el.scrollHeight);
|
18
|
+
} else {
|
19
|
+
el == null ? void 0 : el.scrollTo(0, 0);
|
20
|
+
}
|
21
|
+
},
|
22
|
+
[position]
|
23
|
+
);
|
24
|
+
useEffect(() => {
|
25
|
+
listRef.current && handleScrolling(listRef.current);
|
26
|
+
}, [handleScrolling, toasts]);
|
27
|
+
if (!toasts.length) {
|
28
|
+
return null;
|
29
|
+
}
|
30
|
+
return /* @__PURE__ */ jsx(
|
31
|
+
"div",
|
32
|
+
{
|
33
|
+
ref: listRef,
|
34
|
+
className: classNames(cls["toast-list"], cls[position]),
|
35
|
+
children: toasts.map((toast) => /* @__PURE__ */ jsx(
|
36
|
+
Toast,
|
37
|
+
{
|
38
|
+
position,
|
39
|
+
onToastRemove,
|
40
|
+
...toast
|
41
|
+
},
|
42
|
+
toast.id
|
43
|
+
))
|
44
|
+
}
|
45
|
+
);
|
46
|
+
}
|
47
|
+
);
|
48
|
+
export {
|
49
|
+
ToastList
|
50
|
+
};
|
@@ -0,0 +1,46 @@
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
2
|
+
import { useReducer, useCallback, useMemo } from "react";
|
3
|
+
import { EToastVariant } from "./constants.js";
|
4
|
+
import { ToastContext } from "./hooks.js";
|
5
|
+
import { reducer, initialState, actionCreators } from "./store.js";
|
6
|
+
import { c as cls } from "../../ProgressBar-BekX41HR.js";
|
7
|
+
import { ToastList } from "./ToastList.js";
|
8
|
+
const ToastProvider = ({ children }) => {
|
9
|
+
const [toasts, dispatch] = useReducer(reducer, initialState);
|
10
|
+
const handleToastAdd = useCallback((toast2) => {
|
11
|
+
dispatch(actionCreators.setToasts(toast2));
|
12
|
+
}, []);
|
13
|
+
const toast = useMemo(
|
14
|
+
() => ({
|
15
|
+
[EToastVariant.DEFAULT]: (toast2) => handleToastAdd({ variant: EToastVariant.DEFAULT, ...toast2 }),
|
16
|
+
[EToastVariant.SUCCESS]: (toast2) => handleToastAdd({ variant: EToastVariant.SUCCESS, ...toast2 }),
|
17
|
+
[EToastVariant.ALARM]: (toast2) => handleToastAdd({ variant: EToastVariant.ALARM, ...toast2 }),
|
18
|
+
[EToastVariant.ERROR]: (toast2) => handleToastAdd({ variant: EToastVariant.ERROR, ...toast2 })
|
19
|
+
}),
|
20
|
+
[handleToastAdd]
|
21
|
+
);
|
22
|
+
const handleToastRemove = useCallback(
|
23
|
+
(toastId, ref) => {
|
24
|
+
var _a, _b;
|
25
|
+
(_a = ref == null ? void 0 : ref.current) == null ? void 0 : _a.classList.add(cls["toast-out"]);
|
26
|
+
(_b = ref == null ? void 0 : ref.current) == null ? void 0 : _b.addEventListener("animationend", () => {
|
27
|
+
dispatch(actionCreators.removeToast(toastId));
|
28
|
+
});
|
29
|
+
},
|
30
|
+
[]
|
31
|
+
);
|
32
|
+
return /* @__PURE__ */ jsxs(ToastContext.Provider, { value: toast, children: [
|
33
|
+
children,
|
34
|
+
/* @__PURE__ */ jsx(
|
35
|
+
ToastList,
|
36
|
+
{
|
37
|
+
toasts: toasts.toasts,
|
38
|
+
onToastRemove: handleToastRemove,
|
39
|
+
position: toasts.position
|
40
|
+
}
|
41
|
+
)
|
42
|
+
] });
|
43
|
+
};
|
44
|
+
export {
|
45
|
+
ToastProvider
|
46
|
+
};
|
@@ -0,0 +1,23 @@
|
|
1
|
+
export declare enum EToastVariant {
|
2
|
+
DEFAULT = "default",
|
3
|
+
ALARM = "alarm",
|
4
|
+
SUCCESS = "success",
|
5
|
+
ERROR = "error"
|
6
|
+
}
|
7
|
+
export declare enum EToastPosition {
|
8
|
+
TOP_LEFT = "top-left",
|
9
|
+
TOP_CENTER = "top-center",
|
10
|
+
TOP_RIGHT = "top-right",
|
11
|
+
BOTTOM_RIGHT = "bottom-right",
|
12
|
+
BOTTOM_CENTER = "bottom-center",
|
13
|
+
BOTTOM_LEFT = "bottom-left"
|
14
|
+
}
|
15
|
+
export declare const ANIMATION_VARIABLES_MAP: {
|
16
|
+
"top-right": string;
|
17
|
+
"top-center": string;
|
18
|
+
"top-left": string;
|
19
|
+
"bottom-left": string;
|
20
|
+
"bottom-center": string;
|
21
|
+
"bottom-right": string;
|
22
|
+
};
|
23
|
+
export declare const DEFAULT_TOAST_DURATION = 3000;
|
@@ -0,0 +1,49 @@
|
|
1
|
+
var EToastVariant = /* @__PURE__ */ ((EToastVariant2) => {
|
2
|
+
EToastVariant2["DEFAULT"] = "default";
|
3
|
+
EToastVariant2["ALARM"] = "alarm";
|
4
|
+
EToastVariant2["SUCCESS"] = "success";
|
5
|
+
EToastVariant2["ERROR"] = "error";
|
6
|
+
return EToastVariant2;
|
7
|
+
})(EToastVariant || {});
|
8
|
+
var EToastPosition = /* @__PURE__ */ ((EToastPosition2) => {
|
9
|
+
EToastPosition2["TOP_LEFT"] = "top-left";
|
10
|
+
EToastPosition2["TOP_CENTER"] = "top-center";
|
11
|
+
EToastPosition2["TOP_RIGHT"] = "top-right";
|
12
|
+
EToastPosition2["BOTTOM_RIGHT"] = "bottom-right";
|
13
|
+
EToastPosition2["BOTTOM_CENTER"] = "bottom-center";
|
14
|
+
EToastPosition2["BOTTOM_LEFT"] = "bottom-left";
|
15
|
+
return EToastPosition2;
|
16
|
+
})(EToastPosition || {});
|
17
|
+
const ANIMATION_VARIABLES_MAP = {
|
18
|
+
[
|
19
|
+
"top-right"
|
20
|
+
/* TOP_RIGHT */
|
21
|
+
]: "translateX(1000px)",
|
22
|
+
[
|
23
|
+
"top-center"
|
24
|
+
/* TOP_CENTER */
|
25
|
+
]: "translateY(-1300px)",
|
26
|
+
[
|
27
|
+
"top-left"
|
28
|
+
/* TOP_LEFT */
|
29
|
+
]: "translateX(-1000px)",
|
30
|
+
[
|
31
|
+
"bottom-left"
|
32
|
+
/* BOTTOM_LEFT */
|
33
|
+
]: "translateX(-1000px)",
|
34
|
+
[
|
35
|
+
"bottom-center"
|
36
|
+
/* BOTTOM_CENTER */
|
37
|
+
]: "translateY(1300px)",
|
38
|
+
[
|
39
|
+
"bottom-right"
|
40
|
+
/* BOTTOM_RIGHT */
|
41
|
+
]: "translateX(1000px)"
|
42
|
+
};
|
43
|
+
const DEFAULT_TOAST_DURATION = 3e3;
|
44
|
+
export {
|
45
|
+
ANIMATION_VARIABLES_MAP,
|
46
|
+
DEFAULT_TOAST_DURATION,
|
47
|
+
EToastPosition,
|
48
|
+
EToastVariant
|
49
|
+
};
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import { createContext, useContext } from "react";
|
2
|
+
const ToastContext = createContext({
|
3
|
+
alarm: () => {
|
4
|
+
},
|
5
|
+
default: () => {
|
6
|
+
},
|
7
|
+
error: () => {
|
8
|
+
},
|
9
|
+
success: () => {
|
10
|
+
}
|
11
|
+
});
|
12
|
+
const useToast = () => useContext(ToastContext);
|
13
|
+
export {
|
14
|
+
ToastContext,
|
15
|
+
useToast
|
16
|
+
};
|
@@ -0,0 +1,29 @@
|
|
1
|
+
import { EToastPosition } from './constants';
|
2
|
+
import { TProps } from './Toast';
|
3
|
+
|
4
|
+
export type State = {
|
5
|
+
toasts: TProps[];
|
6
|
+
position: EToastPosition | `${EToastPosition}`;
|
7
|
+
};
|
8
|
+
export declare enum EToastsActions {
|
9
|
+
SET_TOASTS = "setToasts",
|
10
|
+
REMOVE_TOAST = "removeToast",
|
11
|
+
RESET = "reset"
|
12
|
+
}
|
13
|
+
export declare const actionCreators: {
|
14
|
+
setToasts: (payload: Omit<TProps, "id">) => {
|
15
|
+
readonly type: EToastsActions.SET_TOASTS;
|
16
|
+
readonly payload: Omit<TProps, "id">;
|
17
|
+
};
|
18
|
+
removeToast: (payload: string) => {
|
19
|
+
readonly type: EToastsActions.REMOVE_TOAST;
|
20
|
+
readonly payload: string;
|
21
|
+
};
|
22
|
+
reset: () => {
|
23
|
+
readonly type: EToastsActions.RESET;
|
24
|
+
};
|
25
|
+
};
|
26
|
+
type ActionTypes = ReturnType<typeof actionCreators.setToasts> | ReturnType<typeof actionCreators.removeToast> | ReturnType<typeof actionCreators.reset>;
|
27
|
+
export declare const initialState: State;
|
28
|
+
export declare const reducer: (state: State | undefined, action: ActionTypes) => State;
|
29
|
+
export {};
|
@@ -0,0 +1,50 @@
|
|
1
|
+
import { EToastPosition } from "./constants.js";
|
2
|
+
var EToastsActions = /* @__PURE__ */ ((EToastsActions2) => {
|
3
|
+
EToastsActions2["SET_TOASTS"] = "setToasts";
|
4
|
+
EToastsActions2["REMOVE_TOAST"] = "removeToast";
|
5
|
+
EToastsActions2["RESET"] = "reset";
|
6
|
+
return EToastsActions2;
|
7
|
+
})(EToastsActions || {});
|
8
|
+
const actionCreators = {
|
9
|
+
setToasts: (payload) => ({ type: "setToasts", payload }),
|
10
|
+
removeToast: (payload) => ({ type: "removeToast", payload }),
|
11
|
+
reset: () => ({
|
12
|
+
type: "reset"
|
13
|
+
/* RESET */
|
14
|
+
})
|
15
|
+
};
|
16
|
+
const initialState = {
|
17
|
+
toasts: [],
|
18
|
+
position: EToastPosition.TOP_RIGHT
|
19
|
+
};
|
20
|
+
const reducer = (state = initialState, action) => {
|
21
|
+
switch (action.type) {
|
22
|
+
case "setToasts":
|
23
|
+
return {
|
24
|
+
...state,
|
25
|
+
toasts: [
|
26
|
+
...state.toasts,
|
27
|
+
{ ...action.payload, id: `${Math.random() * 1e4}` }
|
28
|
+
],
|
29
|
+
position: action.payload.position && action.payload.position !== state.position ? action.payload.position : state.position
|
30
|
+
};
|
31
|
+
case "removeToast": {
|
32
|
+
return {
|
33
|
+
...state,
|
34
|
+
toasts: state.toasts.filter((t) => t.id !== action.payload)
|
35
|
+
};
|
36
|
+
}
|
37
|
+
case "reset": {
|
38
|
+
return initialState;
|
39
|
+
}
|
40
|
+
default: {
|
41
|
+
return state;
|
42
|
+
}
|
43
|
+
}
|
44
|
+
};
|
45
|
+
export {
|
46
|
+
EToastsActions,
|
47
|
+
actionCreators,
|
48
|
+
initialState,
|
49
|
+
reducer
|
50
|
+
};
|
@@ -0,0 +1 @@
|
|
1
|
+
|