@hh.ru/magritte-ui-snackbar 5.1.29 → 6.0.1
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/Snackbar.js +40 -3
- package/Snackbar.js.map +1 -1
- package/SnackbarContainer.js +1 -1
- package/SnackbarContextProvider.js +100 -25
- package/SnackbarContextProvider.js.map +1 -1
- package/SnackbarRenderer.js +106 -61
- package/SnackbarRenderer.js.map +1 -1
- package/index.css +102 -123
- package/index.d.ts +1 -1
- package/index.js +2 -3
- package/index.js.map +1 -1
- package/package.json +4 -3
- package/snackbar-BUXYCBno.js +5 -0
- package/snackbar-BUXYCBno.js.map +1 -0
- package/types.d.ts +18 -11
- package/types.js +1 -7
- package/types.js.map +1 -1
- package/snackbar-0C5Em6lA.js +0 -5
- package/snackbar-0C5Em6lA.js.map +0 -1
package/Snackbar.js
CHANGED
|
@@ -3,14 +3,51 @@ import { useContext, useId, useRef, useEffect } from 'react';
|
|
|
3
3
|
import { SnackbarContext } from './context.js';
|
|
4
4
|
import { SnackbarTransitionName } from './types.js';
|
|
5
5
|
|
|
6
|
-
const Snackbar = ({ removeOnUnmount = true,
|
|
6
|
+
const Snackbar = ({ actionLabel, align, addon, autohideTime, children, containerId, 'data-qa': dataQa, stretched, showClose, showTimer, 'aria-label-close': ariaLabelClose, 'aria-label': ariaLabel, role, removeOnUnmount = true, onAction, onClose, }) => {
|
|
7
7
|
const context = useContext(SnackbarContext);
|
|
8
8
|
const uid = useId();
|
|
9
9
|
const removeOnUnmountRef = useRef(removeOnUnmount);
|
|
10
10
|
removeOnUnmountRef.current = removeOnUnmount;
|
|
11
|
+
// коллбэки не мемоизированы => вызывают animateIn
|
|
12
|
+
const onActionRef = useRef(onAction);
|
|
13
|
+
onActionRef.current = onAction;
|
|
14
|
+
const onCloseRef = useRef(onClose);
|
|
15
|
+
onCloseRef.current = onClose;
|
|
11
16
|
useEffect(() => {
|
|
12
|
-
context.animateIn(uid,
|
|
13
|
-
|
|
17
|
+
context.animateIn(uid, {
|
|
18
|
+
actionLabel,
|
|
19
|
+
align,
|
|
20
|
+
addon,
|
|
21
|
+
autohideTime,
|
|
22
|
+
children,
|
|
23
|
+
'data-qa': dataQa,
|
|
24
|
+
containerId,
|
|
25
|
+
stretched,
|
|
26
|
+
showClose,
|
|
27
|
+
showTimer,
|
|
28
|
+
'aria-label-close': ariaLabelClose,
|
|
29
|
+
'aria-label': ariaLabel,
|
|
30
|
+
role,
|
|
31
|
+
onAction: onActionRef.current,
|
|
32
|
+
onClose: onCloseRef.current,
|
|
33
|
+
});
|
|
34
|
+
}, [
|
|
35
|
+
context,
|
|
36
|
+
uid,
|
|
37
|
+
actionLabel,
|
|
38
|
+
align,
|
|
39
|
+
addon,
|
|
40
|
+
autohideTime,
|
|
41
|
+
dataQa,
|
|
42
|
+
children,
|
|
43
|
+
containerId,
|
|
44
|
+
stretched,
|
|
45
|
+
showClose,
|
|
46
|
+
showTimer,
|
|
47
|
+
ariaLabelClose,
|
|
48
|
+
ariaLabel,
|
|
49
|
+
role,
|
|
50
|
+
]);
|
|
14
51
|
useEffect(() => {
|
|
15
52
|
return () => {
|
|
16
53
|
if (!removeOnUnmountRef.current) {
|
package/Snackbar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Snackbar.js","sources":["../src/Snackbar.tsx"],"sourcesContent":["import { FC, useContext, useEffect, useId, useRef } from 'react';\n\nimport { SnackbarContext } from '@hh.ru/magritte-ui-snackbar/context';\nimport { SnackbarProps, SnackbarTransitionName } from '@hh.ru/magritte-ui-snackbar/types';\n\nexport const Snackbar: FC<SnackbarProps> = ({ removeOnUnmount = true
|
|
1
|
+
{"version":3,"file":"Snackbar.js","sources":["../src/Snackbar.tsx"],"sourcesContent":["import { FC, useContext, useEffect, useId, useRef } from 'react';\n\nimport { SnackbarContext } from '@hh.ru/magritte-ui-snackbar/context';\nimport { SnackbarProps, SnackbarTransitionName } from '@hh.ru/magritte-ui-snackbar/types';\n\nexport const Snackbar: FC<SnackbarProps> = ({\n actionLabel,\n align,\n addon,\n autohideTime,\n children,\n containerId,\n 'data-qa': dataQa,\n stretched,\n showClose,\n showTimer,\n 'aria-label-close': ariaLabelClose,\n 'aria-label': ariaLabel,\n role,\n removeOnUnmount = true,\n onAction,\n onClose,\n}) => {\n const context = useContext(SnackbarContext);\n const uid = useId();\n const removeOnUnmountRef = useRef(removeOnUnmount);\n removeOnUnmountRef.current = removeOnUnmount;\n\n // коллбэки не мемоизированы => вызывают animateIn\n const onActionRef = useRef<VoidFunction | undefined>(onAction);\n onActionRef.current = onAction;\n const onCloseRef = useRef<VoidFunction | undefined>(onClose);\n onCloseRef.current = onClose;\n\n useEffect(() => {\n context.animateIn(uid, {\n actionLabel,\n align,\n addon,\n autohideTime,\n children,\n 'data-qa': dataQa,\n containerId,\n stretched,\n showClose,\n showTimer,\n 'aria-label-close': ariaLabelClose,\n 'aria-label': ariaLabel,\n role,\n onAction: onActionRef.current,\n onClose: onCloseRef.current,\n } as SnackbarProps);\n }, [\n context,\n uid,\n actionLabel,\n align,\n addon,\n autohideTime,\n dataQa,\n children,\n containerId,\n stretched,\n showClose,\n showTimer,\n ariaLabelClose,\n ariaLabel,\n role,\n ]);\n\n useEffect(() => {\n return () => {\n if (!removeOnUnmountRef.current) {\n return;\n }\n context.animateOut(\n uid,\n context.isShown(uid) ? SnackbarTransitionName.Hide : SnackbarTransitionName.RemoveImmediately\n );\n };\n }, [context, uid]);\n\n return null;\n};\n"],"names":[],"mappings":";;;;MAKa,QAAQ,GAAsB,CAAC,EACxC,WAAW,EACX,KAAK,EACL,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,SAAS,EAAE,MAAM,EACjB,SAAS,EACT,SAAS,EACT,SAAS,EACT,kBAAkB,EAAE,cAAc,EAClC,YAAY,EAAE,SAAS,EACvB,IAAI,EACJ,eAAe,GAAG,IAAI,EACtB,QAAQ,EACR,OAAO,GACV,KAAI;AACD,IAAA,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;AAC5C,IAAA,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC;AACpB,IAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AACnD,IAAA,kBAAkB,CAAC,OAAO,GAAG,eAAe,CAAC;;AAG7C,IAAA,MAAM,WAAW,GAAG,MAAM,CAA2B,QAAQ,CAAC,CAAC;AAC/D,IAAA,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;AAC/B,IAAA,MAAM,UAAU,GAAG,MAAM,CAA2B,OAAO,CAAC,CAAC;AAC7D,IAAA,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAE7B,SAAS,CAAC,MAAK;AACX,QAAA,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE;YACnB,WAAW;YACX,KAAK;YACL,KAAK;YACL,YAAY;YACZ,QAAQ;AACR,YAAA,SAAS,EAAE,MAAM;YACjB,WAAW;YACX,SAAS;YACT,SAAS;YACT,SAAS;AACT,YAAA,kBAAkB,EAAE,cAAc;AAClC,YAAA,YAAY,EAAE,SAAS;YACvB,IAAI;YACJ,QAAQ,EAAE,WAAW,CAAC,OAAO;YAC7B,OAAO,EAAE,UAAU,CAAC,OAAO;AACb,SAAA,CAAC,CAAC;AACxB,KAAC,EAAE;QACC,OAAO;QACP,GAAG;QACH,WAAW;QACX,KAAK;QACL,KAAK;QACL,YAAY;QACZ,MAAM;QACN,QAAQ;QACR,WAAW;QACX,SAAS;QACT,SAAS;QACT,SAAS;QACT,cAAc;QACd,SAAS;QACT,IAAI;AACP,KAAA,CAAC,CAAC;IAEH,SAAS,CAAC,MAAK;AACX,QAAA,OAAO,MAAK;AACR,YAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;gBAC7B,OAAO;aACV;YACD,OAAO,CAAC,UAAU,CACd,GAAG,EACH,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,IAAI,GAAG,sBAAsB,CAAC,iBAAiB,CAChG,CAAC;AACN,SAAC,CAAC;AACN,KAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AAEnB,IAAA,OAAO,IAAI,CAAC;AAChB;;;;"}
|
package/SnackbarContainer.js
CHANGED
|
@@ -2,7 +2,7 @@ import './index.css';
|
|
|
2
2
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
3
|
import { useContext, useCallback, Fragment } from 'react';
|
|
4
4
|
import { SnackbarContext } from './context.js';
|
|
5
|
-
import { s as styles } from './snackbar-
|
|
5
|
+
import { s as styles } from './snackbar-BUXYCBno.js';
|
|
6
6
|
|
|
7
7
|
const SnackbarContainer = ({ children, id, ...props }) => {
|
|
8
8
|
const context = useContext(SnackbarContext);
|
|
@@ -5,73 +5,148 @@ import { createPortal } from 'react-dom';
|
|
|
5
5
|
import { SnackbarRenderer } from './SnackbarRenderer.js';
|
|
6
6
|
import { SnackbarContext } from './context.js';
|
|
7
7
|
import { SnackbarTransitionName } from './types.js';
|
|
8
|
-
import { s as styles } from './snackbar-
|
|
8
|
+
import { s as styles } from './snackbar-BUXYCBno.js';
|
|
9
9
|
import 'react-transition-group';
|
|
10
10
|
import 'classnames';
|
|
11
|
-
import '@hh.ru/magritte-common-func-utils';
|
|
12
11
|
import '@hh.ru/magritte-common-keyboard';
|
|
13
|
-
import '@hh.ru/magritte-common-resize';
|
|
14
12
|
import '@hh.ru/magritte-common-use-multiple-refs';
|
|
15
13
|
import '@hh.ru/magritte-common-use-swipe';
|
|
14
|
+
import '@hh.ru/magritte-ui-divider';
|
|
16
15
|
import '@hh.ru/magritte-ui-icon/icon';
|
|
17
16
|
import '@hh.ru/magritte-ui-layer';
|
|
18
17
|
import '@hh.ru/magritte-ui-link';
|
|
19
18
|
import './useAriaSnackbar.js';
|
|
20
19
|
import '@hh.ru/magritte-ui-timer';
|
|
21
20
|
|
|
21
|
+
const DEFAULT_CONTAINER = 'body';
|
|
22
|
+
const DEFAULT_POSITION = 0;
|
|
23
|
+
const MAX_SNACKBAR_IN_CONTAINER = 2; // отсчет с 0
|
|
24
|
+
const getContainerIdByState = (state, uid) => state[uid]?.containerId ?? DEFAULT_CONTAINER;
|
|
25
|
+
const getContainerIdByProps = (props) => props.containerId || DEFAULT_CONTAINER;
|
|
26
|
+
const getContainerWasChanged = (state, props) => {
|
|
27
|
+
return getContainerIdByState(state, Object.keys(state)[0]) !== getContainerIdByProps(props);
|
|
28
|
+
};
|
|
29
|
+
const getOverridesByState = (state, props) => {
|
|
30
|
+
let stretchedOverride;
|
|
31
|
+
let alignOverride;
|
|
32
|
+
Object.keys(state).forEach((currentUid) => {
|
|
33
|
+
const { stretched: prevStretched, align: prevAlign } = state[currentUid];
|
|
34
|
+
if (stretchedOverride === undefined && (prevStretched === true || prevStretched === undefined)) {
|
|
35
|
+
stretchedOverride = true;
|
|
36
|
+
}
|
|
37
|
+
if (alignOverride === undefined) {
|
|
38
|
+
alignOverride = prevAlign;
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
return getContainerWasChanged(state, props)
|
|
42
|
+
? {}
|
|
43
|
+
: {
|
|
44
|
+
stretched: stretchedOverride ?? props.stretched,
|
|
45
|
+
align: alignOverride ?? props.align,
|
|
46
|
+
};
|
|
47
|
+
};
|
|
22
48
|
const SnackbarContextProvider = ({ children }) => {
|
|
23
49
|
const animationTimeoutRef = useRef({
|
|
24
50
|
[SnackbarTransitionName.Show]: 0,
|
|
25
51
|
[SnackbarTransitionName.Hide]: 0,
|
|
26
52
|
[SnackbarTransitionName.Autohide]: 0,
|
|
27
|
-
[SnackbarTransitionName.Replace]: 0,
|
|
28
53
|
[SnackbarTransitionName.RemoveImmediately]: 0,
|
|
29
54
|
});
|
|
30
55
|
const containerRefs = useRef({});
|
|
31
56
|
const isShownRef = useRef({});
|
|
32
57
|
const [state, setState] = useState({});
|
|
58
|
+
const snackbarsByUidMapRef = useRef({});
|
|
33
59
|
const animateOut = useCallback((uid, transition) => {
|
|
34
60
|
setState((prevState) => {
|
|
35
|
-
if (uid in prevState) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
61
|
+
if (!(uid in prevState)) {
|
|
62
|
+
return prevState;
|
|
63
|
+
}
|
|
64
|
+
const isCurrentlyVisible = prevState[uid].transition === SnackbarTransitionName.Show;
|
|
65
|
+
const willBeHidden = [SnackbarTransitionName.Hide, SnackbarTransitionName.Autohide].includes(transition);
|
|
66
|
+
if (transition === SnackbarTransitionName.RemoveImmediately || (willBeHidden && !isCurrentlyVisible)) {
|
|
67
|
+
const snackbarsByUidMap = snackbarsByUidMapRef.current[getContainerIdByState(prevState, uid)];
|
|
68
|
+
snackbarsByUidMap.delete(uid);
|
|
69
|
+
const uids = [...snackbarsByUidMap].reverse();
|
|
70
|
+
delete isShownRef.current[uid];
|
|
71
|
+
return Object.fromEntries(Object.entries(prevState)
|
|
72
|
+
.filter(([key]) => key !== uid)
|
|
73
|
+
.map(([key, state]) => {
|
|
74
|
+
// обновляем позицию на основе нового сета
|
|
75
|
+
const index = uids.indexOf(key);
|
|
76
|
+
state.position = index !== -1 ? index : state.position;
|
|
77
|
+
return [key, state];
|
|
78
|
+
}));
|
|
45
79
|
}
|
|
46
|
-
return prevState;
|
|
80
|
+
return { ...prevState, [uid]: { ...prevState[uid], transition } };
|
|
47
81
|
});
|
|
48
|
-
}, [
|
|
82
|
+
}, []);
|
|
49
83
|
const animateIn = useCallback((uid, props) => {
|
|
50
84
|
setState((prevState) => {
|
|
51
85
|
if (uid in prevState) {
|
|
52
86
|
// не даем менять некоторые пропсы у существующего снекбара
|
|
53
87
|
const { autohideTime, containerId, showTimer, ..._props } = props;
|
|
54
|
-
|
|
88
|
+
// применяем оверайды, так как из пропсов прилетают старые значения
|
|
89
|
+
const overridesProps = getOverridesByState(prevState, props);
|
|
90
|
+
return {
|
|
91
|
+
...prevState,
|
|
92
|
+
[uid]: { ...prevState[uid], ..._props, ...overridesProps },
|
|
93
|
+
};
|
|
55
94
|
}
|
|
56
|
-
|
|
95
|
+
// сохраняем информацию о uid
|
|
96
|
+
const containerIdFromProps = getContainerIdByProps(props);
|
|
97
|
+
const snackbarsByUidMap = snackbarsByUidMapRef.current;
|
|
98
|
+
if (snackbarsByUidMap.hasOwnProperty(containerIdFromProps)) {
|
|
99
|
+
snackbarsByUidMap[containerIdFromProps].add(uid);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
snackbarsByUidMap[containerIdFromProps] = new Set([uid]);
|
|
103
|
+
}
|
|
104
|
+
// если прилетел новый снекбар, то все текущие снеки мы скрываем
|
|
105
|
+
const containerWasChanged = getContainerWasChanged(prevState, props);
|
|
106
|
+
// если stretched есть в новом снакбаре => везде ставим stretched
|
|
107
|
+
// аналогичная логика с align (новому снекбару ставим align из стака)
|
|
108
|
+
const uidsFromSet = [...snackbarsByUidMap[containerIdFromProps]].reverse();
|
|
109
|
+
const stretchedByNewSnackbar = props.stretched === undefined || props.stretched === true;
|
|
110
|
+
// обходим старый стейт и обновлям параметры (align, stretched, position, transition)
|
|
111
|
+
const prevStateWithUpdatedProps = Object.keys(prevState).reduce((accumulator, currentUid) => {
|
|
112
|
+
const { transition, stretched: prevStretched, position } = prevState[currentUid];
|
|
113
|
+
// если stretched есть в стаке => везде ставим stretched
|
|
114
|
+
const stretched = prevStretched === false ? stretchedByNewSnackbar : prevStretched;
|
|
115
|
+
const positionBySet = uidsFromSet.indexOf(currentUid);
|
|
116
|
+
// скрываем последний снэкбар
|
|
117
|
+
const limitReached = positionBySet > MAX_SNACKBAR_IN_CONTAINER;
|
|
118
|
+
const value = {
|
|
119
|
+
...prevState[currentUid],
|
|
120
|
+
transition: containerWasChanged || limitReached ? SnackbarTransitionName.Hide : transition,
|
|
121
|
+
position: containerWasChanged || limitReached ? position : positionBySet,
|
|
122
|
+
stretched,
|
|
123
|
+
};
|
|
124
|
+
return { ...accumulator, [currentUid]: value };
|
|
125
|
+
}, {});
|
|
126
|
+
// создаем новый snackbar
|
|
127
|
+
const defaultProps = {
|
|
57
128
|
animateOut: (transition) => animateOut(uid, transition),
|
|
58
129
|
isShown: () => !!isShownRef.current[uid],
|
|
59
130
|
onShown: () => (isShownRef.current[uid] = true),
|
|
60
|
-
transition: SnackbarTransitionName
|
|
131
|
+
transition: SnackbarTransitionName.Show,
|
|
132
|
+
position: DEFAULT_POSITION,
|
|
133
|
+
};
|
|
134
|
+
// учитываем оверайды на основе стака
|
|
135
|
+
const overridesProps = getOverridesByState(prevState, props);
|
|
136
|
+
const newState = {
|
|
137
|
+
...prevStateWithUpdatedProps,
|
|
138
|
+
...{ [uid]: { ...defaultProps, ...props, ...overridesProps } },
|
|
61
139
|
};
|
|
62
|
-
return
|
|
63
|
-
const value = { ...prevState[key], transition: SnackbarTransitionName.Hide };
|
|
64
|
-
return key === uid ? accumulator : { ...accumulator, [key]: value };
|
|
65
|
-
}, { [uid]: { ..._props, ...props } });
|
|
140
|
+
return newState;
|
|
66
141
|
});
|
|
67
|
-
}, [animateOut
|
|
142
|
+
}, [animateOut]);
|
|
68
143
|
const renderFunc = useCallback((uid) => {
|
|
69
144
|
const containerId = state[uid].containerId;
|
|
70
145
|
const container = containerId ? containerRefs.current[containerId] : document.body;
|
|
71
146
|
if (!container) {
|
|
72
147
|
return null;
|
|
73
148
|
}
|
|
74
|
-
return createPortal(jsx(SnackbarRenderer, { ...state[uid], timeout: animationTimeoutRef.current[state[uid].transition] }), container, uid);
|
|
149
|
+
return createPortal(jsx(SnackbarRenderer, { ...state[uid], timeout: animationTimeoutRef.current[state[uid].transition], container: container }), container, uid);
|
|
75
150
|
}, [state]);
|
|
76
151
|
const setContainerRef = useCallback((containerId, instance) => {
|
|
77
152
|
if (!instance) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SnackbarContextProvider.js","sources":["../src/SnackbarContextProvider.tsx"],"sourcesContent":["import { FC, ReactNode, useCallback, useEffect, useMemo, useState, useRef, PropsWithChildren } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { SnackbarRenderer } from '@hh.ru/magritte-ui-snackbar/SnackbarRenderer';\nimport { SnackbarContext, SnackbarContextProps } from '@hh.ru/magritte-ui-snackbar/context';\nimport { SnackbarProps, SnackbarState, SnackbarTransitionName } from '@hh.ru/magritte-ui-snackbar/types';\n\nimport styles from './snackbar.less';\n\nexport const SnackbarContextProvider: FC<PropsWithChildren> = ({ children }) => {\n const animationTimeoutRef = useRef({\n [SnackbarTransitionName.Show]: 0,\n [SnackbarTransitionName.Hide]: 0,\n [SnackbarTransitionName.Autohide]: 0,\n [SnackbarTransitionName.Replace]: 0,\n [SnackbarTransitionName.RemoveImmediately]: 0,\n });\n const containerRefs = useRef<{ [id: string]: HTMLElement }>({});\n const isShownRef = useRef<{ [uid: string]: boolean }>({});\n const [state, setState] = useState<{ [uid: string]: SnackbarState }>({});\n\n const animateOut: SnackbarContextProps['animateOut'] = useCallback(\n (uid, transition) => {\n setState((prevState) => {\n if (uid in prevState) {\n const prevTransition = prevState[uid].transition;\n\n const isCurrentlyVisible =\n prevTransition === SnackbarTransitionName.Show ||\n prevTransition === SnackbarTransitionName.Replace;\n\n const willBeHidden =\n transition === SnackbarTransitionName.Hide || transition === SnackbarTransitionName.Autohide;\n\n if (\n transition === SnackbarTransitionName.RemoveImmediately ||\n (willBeHidden && !isCurrentlyVisible)\n ) {\n return Object.fromEntries(Object.entries(prevState).filter(([key]) => key !== uid));\n }\n\n return { ...prevState, [uid]: { ...prevState[uid], transition } };\n }\n\n return prevState;\n });\n },\n [setState]\n );\n\n const animateIn: SnackbarContextProps['animateIn'] = useCallback(\n (uid: string, props: SnackbarProps) => {\n setState((prevState) => {\n if (uid in prevState) {\n // не даем менять некоторые пропсы у существующего снекбара\n const { autohideTime, containerId, showTimer, ..._props } = props;\n return { ...prevState, [uid]: { ...prevState[uid], ..._props } as SnackbarState };\n }\n\n const _props: Pick<SnackbarState, 'animateOut' | 'isShown' | 'onShown' | 'transition'> = {\n animateOut: (transition) => animateOut(uid, transition),\n isShown: () => !!isShownRef.current[uid],\n onShown: () => (isShownRef.current[uid] = true),\n transition: SnackbarTransitionName[Object.keys(prevState).length > 0 ? 'Replace' : 'Show'],\n };\n\n return Object.keys(prevState).reduce(\n (accumulator, key) => {\n const value = { ...prevState[key], transition: SnackbarTransitionName.Hide };\n return key === uid ? accumulator : { ...accumulator, [key]: value };\n },\n { [uid]: { ..._props, ...props } as SnackbarState }\n );\n });\n },\n [animateOut, setState]\n );\n\n const renderFunc = useCallback(\n (uid: string): ReactNode => {\n const containerId = state[uid].containerId;\n const container = containerId ? containerRefs.current[containerId] : document.body;\n\n if (!container) {\n return null;\n }\n\n return createPortal(\n <SnackbarRenderer {...state[uid]} timeout={animationTimeoutRef.current[state[uid].transition]} />,\n container,\n uid\n );\n },\n [state]\n );\n\n const setContainerRef: SnackbarContextProps['setContainerRef'] = useCallback((containerId, instance) => {\n if (!instance) {\n return;\n }\n\n containerRefs.current[containerId] = instance;\n }, []);\n\n useEffect(() => {\n const animationTimeoutElement = document.createElement('div');\n animationTimeoutElement.classList.add(styles['snackbar-animation-timeout']);\n document.body.appendChild(animationTimeoutElement);\n const style = window.getComputedStyle(animationTimeoutElement);\n\n for (const transition of Object.values(SnackbarTransitionName)) {\n const animationTimeout = parseInt(style.getPropertyValue(`--${transition}-animation-duration`), 10);\n if (Number.isInteger(animationTimeout)) {\n animationTimeoutRef.current[transition] = animationTimeout;\n }\n }\n\n document.body.removeChild(animationTimeoutElement);\n }, []);\n\n const value = useMemo<SnackbarContextProps>(() => {\n return {\n animateIn,\n animateOut,\n isShown: (uid) => isShownRef.current[uid],\n setContainerRef,\n };\n }, [animateIn, animateOut, setContainerRef]);\n\n return (\n <SnackbarContext.Provider value={value}>\n {Object.keys(state).map(renderFunc)}\n {children}\n </SnackbarContext.Provider>\n );\n};\n"],"names":["_jsx","_jsxs"],"mappings":";;;;;;;;;;;;;;;;;;;;MASa,uBAAuB,GAA0B,CAAC,EAAE,QAAQ,EAAE,KAAI;IAC3E,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAC/B,QAAA,CAAC,sBAAsB,CAAC,IAAI,GAAG,CAAC;AAChC,QAAA,CAAC,sBAAsB,CAAC,IAAI,GAAG,CAAC;AAChC,QAAA,CAAC,sBAAsB,CAAC,QAAQ,GAAG,CAAC;AACpC,QAAA,CAAC,sBAAsB,CAAC,OAAO,GAAG,CAAC;AACnC,QAAA,CAAC,sBAAsB,CAAC,iBAAiB,GAAG,CAAC;AAChD,KAAA,CAAC,CAAC;AACH,IAAA,MAAM,aAAa,GAAG,MAAM,CAAgC,EAAE,CAAC,CAAC;AAChE,IAAA,MAAM,UAAU,GAAG,MAAM,CAA6B,EAAE,CAAC,CAAC;IAC1D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAmC,EAAE,CAAC,CAAC;IAEzE,MAAM,UAAU,GAAuC,WAAW,CAC9D,CAAC,GAAG,EAAE,UAAU,KAAI;AAChB,QAAA,QAAQ,CAAC,CAAC,SAAS,KAAI;AACnB,YAAA,IAAI,GAAG,IAAI,SAAS,EAAE;gBAClB,MAAM,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC;AAEjD,gBAAA,MAAM,kBAAkB,GACpB,cAAc,KAAK,sBAAsB,CAAC,IAAI;AAC9C,oBAAA,cAAc,KAAK,sBAAsB,CAAC,OAAO,CAAC;AAEtD,gBAAA,MAAM,YAAY,GACd,UAAU,KAAK,sBAAsB,CAAC,IAAI,IAAI,UAAU,KAAK,sBAAsB,CAAC,QAAQ,CAAC;AAEjG,gBAAA,IACI,UAAU,KAAK,sBAAsB,CAAC,iBAAiB;AACvD,qBAAC,YAAY,IAAI,CAAC,kBAAkB,CAAC,EACvC;oBACE,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;iBACvF;AAED,gBAAA,OAAO,EAAE,GAAG,SAAS,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;aACrE;AAED,YAAA,OAAO,SAAS,CAAC;AACrB,SAAC,CAAC,CAAC;AACP,KAAC,EACD,CAAC,QAAQ,CAAC,CACb,CAAC;IAEF,MAAM,SAAS,GAAsC,WAAW,CAC5D,CAAC,GAAW,EAAE,KAAoB,KAAI;AAClC,QAAA,QAAQ,CAAC,CAAC,SAAS,KAAI;AACnB,YAAA,IAAI,GAAG,IAAI,SAAS,EAAE;;AAElB,gBAAA,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC;AAClE,gBAAA,OAAO,EAAE,GAAG,SAAS,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,EAAmB,EAAE,CAAC;aACrF;AAED,YAAA,MAAM,MAAM,GAA6E;gBACrF,UAAU,EAAE,CAAC,UAAU,KAAK,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC;gBACvD,OAAO,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;AACxC,gBAAA,OAAO,EAAE,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;gBAC/C,UAAU,EAAE,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC;aAC7F,CAAC;AAEF,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAChC,CAAC,WAAW,EAAE,GAAG,KAAI;AACjB,gBAAA,MAAM,KAAK,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,sBAAsB,CAAC,IAAI,EAAE,CAAC;gBAC7E,OAAO,GAAG,KAAK,GAAG,GAAG,WAAW,GAAG,EAAE,GAAG,WAAW,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC;AACxE,aAAC,EACD,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,KAAK,EAAmB,EAAE,CACtD,CAAC;AACN,SAAC,CAAC,CAAC;AACP,KAAC,EACD,CAAC,UAAU,EAAE,QAAQ,CAAC,CACzB,CAAC;AAEF,IAAA,MAAM,UAAU,GAAG,WAAW,CAC1B,CAAC,GAAW,KAAe;QACvB,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC;AAC3C,QAAA,MAAM,SAAS,GAAG,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;QAEnF,IAAI,CAAC,SAAS,EAAE;AACZ,YAAA,OAAO,IAAI,CAAC;SACf;AAED,QAAA,OAAO,YAAY,CACfA,GAAC,CAAA,gBAAgB,EAAK,EAAA,GAAA,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,EAAA,CAAI,EACjG,SAAS,EACT,GAAG,CACN,CAAC;AACN,KAAC,EACD,CAAC,KAAK,CAAC,CACV,CAAC;IAEF,MAAM,eAAe,GAA4C,WAAW,CAAC,CAAC,WAAW,EAAE,QAAQ,KAAI;QACnG,IAAI,CAAC,QAAQ,EAAE;YACX,OAAO;SACV;AAED,QAAA,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC;KACjD,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,MAAK;QACX,MAAM,uBAAuB,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9D,uBAAuB,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAC;AAC5E,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,CAAC;QAE/D,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,EAAE;AAC5D,YAAA,MAAM,gBAAgB,GAAG,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA,EAAA,EAAK,UAAU,CAAqB,mBAAA,CAAA,CAAC,EAAE,EAAE,CAAC,CAAC;AACpG,YAAA,IAAI,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE;AACpC,gBAAA,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,gBAAgB,CAAC;aAC9D;SACJ;AAED,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;KACtD,EAAE,EAAE,CAAC,CAAC;AAEP,IAAA,MAAM,KAAK,GAAG,OAAO,CAAuB,MAAK;QAC7C,OAAO;YACH,SAAS;YACT,UAAU;YACV,OAAO,EAAE,CAAC,GAAG,KAAK,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;YACzC,eAAe;SAClB,CAAC;KACL,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC;IAE7C,QACIC,IAAC,CAAA,eAAe,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,EAAA,QAAA,EAAA,CACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAClC,QAAQ,CACc,EAAA,CAAA,EAC7B;AACN;;;;"}
|
|
1
|
+
{"version":3,"file":"SnackbarContextProvider.js","sources":["../src/SnackbarContextProvider.tsx"],"sourcesContent":["import { FC, ReactNode, useCallback, useEffect, useMemo, useState, useRef, PropsWithChildren } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { SnackbarRenderer } from '@hh.ru/magritte-ui-snackbar/SnackbarRenderer';\nimport { SnackbarContext, SnackbarContextProps } from '@hh.ru/magritte-ui-snackbar/context';\nimport {\n Align,\n SnackbarProps,\n SnackbarState,\n SnackbarTransitionName,\n SnackbarInternalState,\n} from '@hh.ru/magritte-ui-snackbar/types';\n\nimport styles from './snackbar.less';\n\ntype ProviderState = { [uid: string]: SnackbarState };\ntype SnackbarsByUidMap = Record<string, Set<string>>;\ntype Overrides = { stretched?: boolean; align?: Align };\n\nconst DEFAULT_CONTAINER = 'body';\nconst DEFAULT_POSITION = 0;\nconst MAX_SNACKBAR_IN_CONTAINER = 2; // отсчет с 0\n\nconst getContainerIdByState = (state: ProviderState, uid: string) => state[uid]?.containerId ?? DEFAULT_CONTAINER;\nconst getContainerIdByProps = (props: SnackbarProps) => props.containerId || DEFAULT_CONTAINER;\n\nconst getContainerWasChanged = (state: ProviderState, props: SnackbarProps) => {\n return getContainerIdByState(state, Object.keys(state)[0]) !== getContainerIdByProps(props);\n};\n\nconst getOverridesByState = (state: ProviderState, props: SnackbarProps): Overrides => {\n let stretchedOverride: undefined | boolean;\n let alignOverride: undefined | Align;\n Object.keys(state).forEach((currentUid) => {\n const { stretched: prevStretched, align: prevAlign } = state[currentUid];\n if (stretchedOverride === undefined && (prevStretched === true || prevStretched === undefined)) {\n stretchedOverride = true;\n }\n if (alignOverride === undefined) {\n alignOverride = prevAlign;\n }\n });\n return getContainerWasChanged(state, props)\n ? {}\n : {\n stretched: stretchedOverride ?? props.stretched,\n align: alignOverride ?? props.align,\n };\n};\n\nexport const SnackbarContextProvider: FC<PropsWithChildren> = ({ children }) => {\n const animationTimeoutRef = useRef({\n [SnackbarTransitionName.Show]: 0,\n [SnackbarTransitionName.Hide]: 0,\n [SnackbarTransitionName.Autohide]: 0,\n [SnackbarTransitionName.RemoveImmediately]: 0,\n });\n const containerRefs = useRef<{ [id: string]: HTMLElement }>({});\n const isShownRef = useRef<{ [uid: string]: boolean }>({});\n const [state, setState] = useState<ProviderState>({});\n const snackbarsByUidMapRef = useRef<SnackbarsByUidMap>({});\n\n const animateOut: SnackbarContextProps['animateOut'] = useCallback((uid, transition) => {\n setState((prevState) => {\n if (!(uid in prevState)) {\n return prevState;\n }\n const isCurrentlyVisible = prevState[uid].transition === SnackbarTransitionName.Show;\n const willBeHidden = [SnackbarTransitionName.Hide, SnackbarTransitionName.Autohide].includes(transition);\n\n if (transition === SnackbarTransitionName.RemoveImmediately || (willBeHidden && !isCurrentlyVisible)) {\n const snackbarsByUidMap = snackbarsByUidMapRef.current[getContainerIdByState(prevState, uid)];\n snackbarsByUidMap.delete(uid);\n const uids = [...snackbarsByUidMap].reverse();\n delete isShownRef.current[uid];\n return Object.fromEntries(\n Object.entries(prevState)\n .filter(([key]) => key !== uid)\n .map(([key, state]) => {\n // обновляем позицию на основе нового сета\n const index = uids.indexOf(key);\n state.position = index !== -1 ? index : state.position;\n return [key, state];\n })\n );\n }\n return { ...prevState, [uid]: { ...prevState[uid], transition } };\n });\n }, []);\n\n const animateIn: SnackbarContextProps['animateIn'] = useCallback(\n (uid: string, props: SnackbarProps) => {\n setState((prevState) => {\n if (uid in prevState) {\n // не даем менять некоторые пропсы у существующего снекбара\n const { autohideTime, containerId, showTimer, ..._props } = props;\n // применяем оверайды, так как из пропсов прилетают старые значения\n const overridesProps = getOverridesByState(prevState, props);\n return {\n ...prevState,\n [uid]: { ...prevState[uid], ..._props, ...overridesProps } as SnackbarState,\n };\n }\n // сохраняем информацию о uid\n const containerIdFromProps = getContainerIdByProps(props);\n const snackbarsByUidMap = snackbarsByUidMapRef.current;\n if (snackbarsByUidMap.hasOwnProperty(containerIdFromProps)) {\n snackbarsByUidMap[containerIdFromProps].add(uid);\n } else {\n snackbarsByUidMap[containerIdFromProps] = new Set([uid]);\n }\n\n // если прилетел новый снекбар, то все текущие снеки мы скрываем\n const containerWasChanged = getContainerWasChanged(prevState, props);\n\n // если stretched есть в новом снакбаре => везде ставим stretched\n // аналогичная логика с align (новому снекбару ставим align из стака)\n const uidsFromSet = [...snackbarsByUidMap[containerIdFromProps]].reverse();\n const stretchedByNewSnackbar = props.stretched === undefined || props.stretched === true;\n\n // обходим старый стейт и обновлям параметры (align, stretched, position, transition)\n const prevStateWithUpdatedProps = Object.keys(prevState).reduce((accumulator, currentUid) => {\n const { transition, stretched: prevStretched, position } = prevState[currentUid];\n // если stretched есть в стаке => везде ставим stretched\n const stretched = prevStretched === false ? stretchedByNewSnackbar : prevStretched;\n const positionBySet = uidsFromSet.indexOf(currentUid);\n // скрываем последний снэкбар\n const limitReached = positionBySet > MAX_SNACKBAR_IN_CONTAINER;\n const value = {\n ...prevState[currentUid],\n transition: containerWasChanged || limitReached ? SnackbarTransitionName.Hide : transition,\n position: containerWasChanged || limitReached ? position : positionBySet,\n stretched,\n };\n return { ...accumulator, [currentUid]: value };\n }, {});\n\n // создаем новый snackbar\n const defaultProps: SnackbarInternalState = {\n animateOut: (transition) => animateOut(uid, transition),\n isShown: () => !!isShownRef.current[uid],\n onShown: () => (isShownRef.current[uid] = true),\n transition: SnackbarTransitionName.Show,\n position: DEFAULT_POSITION,\n };\n\n // учитываем оверайды на основе стака\n const overridesProps = getOverridesByState(prevState, props);\n const newState = {\n ...prevStateWithUpdatedProps,\n ...{ [uid]: { ...defaultProps, ...props, ...overridesProps } },\n };\n return newState;\n });\n },\n [animateOut]\n );\n\n const renderFunc = useCallback(\n (uid: string): ReactNode => {\n const containerId = state[uid].containerId;\n const container = containerId ? containerRefs.current[containerId] : document.body;\n\n if (!container) {\n return null;\n }\n return createPortal(\n <SnackbarRenderer\n {...state[uid]}\n timeout={animationTimeoutRef.current[state[uid].transition]}\n container={container}\n />,\n container,\n uid\n );\n },\n [state]\n );\n\n const setContainerRef: SnackbarContextProps['setContainerRef'] = useCallback((containerId, instance) => {\n if (!instance) {\n return;\n }\n containerRefs.current[containerId] = instance;\n }, []);\n\n useEffect(() => {\n const animationTimeoutElement = document.createElement('div');\n animationTimeoutElement.classList.add(styles['snackbar-animation-timeout']);\n document.body.appendChild(animationTimeoutElement);\n const style = window.getComputedStyle(animationTimeoutElement);\n\n for (const transition of Object.values(SnackbarTransitionName)) {\n const animationTimeout = parseInt(style.getPropertyValue(`--${transition}-animation-duration`), 10);\n if (Number.isInteger(animationTimeout)) {\n animationTimeoutRef.current[transition] = animationTimeout;\n }\n }\n\n document.body.removeChild(animationTimeoutElement);\n }, []);\n\n const value = useMemo<SnackbarContextProps>(() => {\n return {\n animateIn,\n animateOut,\n isShown: (uid) => isShownRef.current[uid],\n setContainerRef,\n };\n }, [animateIn, animateOut, setContainerRef]);\n\n return (\n <SnackbarContext.Provider value={value}>\n {Object.keys(state).map(renderFunc)}\n {children}\n </SnackbarContext.Provider>\n );\n};\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
package/SnackbarRenderer.js
CHANGED
|
@@ -1,27 +1,21 @@
|
|
|
1
1
|
import './index.css';
|
|
2
2
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
3
|
-
import { useCallback, useState, useRef,
|
|
3
|
+
import { useCallback, useState, useRef, useEffect, useLayoutEffect } from 'react';
|
|
4
4
|
import { CSSTransition } from 'react-transition-group';
|
|
5
5
|
import classnames from 'classnames';
|
|
6
|
-
import { useDebounce } from '@hh.ru/magritte-common-func-utils';
|
|
7
6
|
import { useEscapeToClose } from '@hh.ru/magritte-common-keyboard';
|
|
8
|
-
import { useResize } from '@hh.ru/magritte-common-resize';
|
|
9
7
|
import { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';
|
|
10
8
|
import { useSwipeHandlers } from '@hh.ru/magritte-common-use-swipe';
|
|
9
|
+
import { Divider } from '@hh.ru/magritte-ui-divider';
|
|
11
10
|
import { CrossOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';
|
|
12
11
|
import { Layer } from '@hh.ru/magritte-ui-layer';
|
|
13
12
|
import { Link } from '@hh.ru/magritte-ui-link';
|
|
14
|
-
import { SnackbarTransitionName
|
|
13
|
+
import { SnackbarTransitionName } from './types.js';
|
|
15
14
|
import { useAriaSnackbar } from './useAriaSnackbar.js';
|
|
16
15
|
import { useTimer, Timer } from '@hh.ru/magritte-ui-timer';
|
|
17
|
-
import { s as styles } from './snackbar-
|
|
16
|
+
import { s as styles } from './snackbar-BUXYCBno.js';
|
|
18
17
|
|
|
19
|
-
const
|
|
20
|
-
[SnackbarTransitionName.Show]: {
|
|
21
|
-
appear: styles.appear,
|
|
22
|
-
appearActive: styles['appear-active'],
|
|
23
|
-
appearDone: styles['appear-done'],
|
|
24
|
-
},
|
|
18
|
+
const OTHER_CLASS_NAMES = {
|
|
25
19
|
[SnackbarTransitionName.Hide]: {
|
|
26
20
|
exit: styles.exit,
|
|
27
21
|
exitActive: styles['exit-active'],
|
|
@@ -32,26 +26,36 @@ const CLASS_NAMES = {
|
|
|
32
26
|
exitActive: styles['exit-active_autohide'],
|
|
33
27
|
exitDone: styles['exit-done'],
|
|
34
28
|
},
|
|
35
|
-
[SnackbarTransitionName.Replace]: {
|
|
36
|
-
appear: styles.appear,
|
|
37
|
-
appearDone: styles['appear-done'],
|
|
38
|
-
},
|
|
39
29
|
[SnackbarTransitionName.RemoveImmediately]: {},
|
|
40
30
|
};
|
|
31
|
+
const OPEN_CLASS_NAMES = {
|
|
32
|
+
[SnackbarTransitionName.Show]: {
|
|
33
|
+
top: {
|
|
34
|
+
appear: styles.appearTop,
|
|
35
|
+
appearActive: styles['appear-active'],
|
|
36
|
+
appearDone: styles['appear-done'],
|
|
37
|
+
},
|
|
38
|
+
bottom: {
|
|
39
|
+
appear: styles.appearBottom,
|
|
40
|
+
appearActive: styles['appear-active'],
|
|
41
|
+
appearDone: styles['appear-done'],
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
};
|
|
41
45
|
const DEFAULT_AUTOHIDE_TIME_MS = 6000;
|
|
42
|
-
const
|
|
46
|
+
const BASE_VERTICAL_PADDING = 16;
|
|
47
|
+
const VERTICAL_PADDING_BETWEEN_SNACKBAR = 8;
|
|
48
|
+
const SnackbarRenderer = ({ actionLabel, addon, align = 'bottom', animateOut, autohideTime = DEFAULT_AUTOHIDE_TIME_MS, children, containerId, isShown, onAction, onClose, onShown, showClose, showTimer, timeout, transition, 'aria-label': ariaLabel, 'aria-label-close': ariaLabelClose, role = 'status', stretched = true, position, container, ...props }) => {
|
|
43
49
|
const actionFunc = useCallback(() => onAction?.(), [onAction]);
|
|
44
50
|
const [hasFocus, setHasFocus] = useState(false);
|
|
45
51
|
const [hasHover, setHasHover] = useState(false);
|
|
46
52
|
const hasTouchSupportRef = useRef(false);
|
|
47
|
-
const
|
|
53
|
+
const prevWidth = useRef(0);
|
|
54
|
+
const stretchedRef = useRef(stretched);
|
|
48
55
|
const autohideFunc = useCallback(() => animateOut(SnackbarTransitionName.Autohide), [animateOut]);
|
|
49
56
|
const closeFunc = useCallback(() => animateOut(SnackbarTransitionName.Hide), [animateOut]);
|
|
50
|
-
const previousMetrics = useRef(null);
|
|
51
57
|
const ariaAttributes = useAriaSnackbar({ role, hasAction: !!actionLabel, 'aria-label': ariaLabel });
|
|
52
|
-
const
|
|
53
|
-
const resizableContentRef = useRef(null);
|
|
54
|
-
const visible = transition === SnackbarTransitionName.Show || transition === SnackbarTransitionName.Replace;
|
|
58
|
+
const visible = transition === SnackbarTransitionName.Show;
|
|
55
59
|
const maxDistanceSqRef = useRef({ nearestSide: Number.POSITIVE_INFINITY, farSide: Number.POSITIVE_INFINITY });
|
|
56
60
|
const swipeThresholdXRef = useRef(null);
|
|
57
61
|
const swipeThresholdYRef = useRef(null);
|
|
@@ -62,44 +66,12 @@ const SnackbarRenderer = ({ actionLabel, addon, align = 'bottom', animateOut, au
|
|
|
62
66
|
const snackbarRef = useRef(null);
|
|
63
67
|
const bindEscapeToClose = useEscapeToClose(closeFunc);
|
|
64
68
|
const snackbarRefMultiplexer = useMultipleRefs(snackbarRef, bindEscapeToClose);
|
|
65
|
-
const calculateLayout = useCallback(() => {
|
|
66
|
-
if (textRef.current && resizableContentRef.current) {
|
|
67
|
-
const metrics = resizableContentRef.current?.getBoundingClientRect();
|
|
68
|
-
const style = window.getComputedStyle(textRef.current);
|
|
69
|
-
const isVerticalLayout = textRef.current.getBoundingClientRect().height - parseInt(style.lineHeight, 10) > 1;
|
|
70
|
-
if (previousMetrics.current !== null) {
|
|
71
|
-
const increaseScreenSize = metrics.width > previousMetrics.current.width;
|
|
72
|
-
setLayout((layout) => {
|
|
73
|
-
/* Уменьшаем размер экрана и если нужно переключиться в вертикальный лейаут */
|
|
74
|
-
if (!increaseScreenSize && isVerticalLayout && layout === SnackbarLayout.Horizontal) {
|
|
75
|
-
return SnackbarLayout.Vertical;
|
|
76
|
-
}
|
|
77
|
-
/* Увеличиваем размер экрана и если нужно переключиться в вертикальный лейаут */
|
|
78
|
-
if (increaseScreenSize && isVerticalLayout && layout === SnackbarLayout.Horizontal) {
|
|
79
|
-
return SnackbarLayout.Vertical;
|
|
80
|
-
}
|
|
81
|
-
/* Кейсы когда уменьшаем или увеличиваем размер экрана и нужно переключиться
|
|
82
|
-
* с вертикального на горизонтальный лейаут скипаем, потому как доступного места для текста
|
|
83
|
-
* меньше и может оказаться что текст будет в 2 строки и надо
|
|
84
|
-
* снова переключаться на вертикальный лейаут. */
|
|
85
|
-
return layout;
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
setLayout(isVerticalLayout ? SnackbarLayout.Vertical : SnackbarLayout.Horizontal);
|
|
90
|
-
}
|
|
91
|
-
previousMetrics.current = resizableContentRef.current?.getBoundingClientRect();
|
|
92
|
-
}
|
|
93
|
-
}, []);
|
|
94
|
-
useLayoutEffect(calculateLayout, [calculateLayout]);
|
|
95
|
-
useResize(useDebounce(calculateLayout, 64));
|
|
96
69
|
useTimer(!!autohideTime && !showTimer ? autohideTime : -1, (callable) => {
|
|
97
70
|
const timeoutId = setTimeout(callable, 50);
|
|
98
71
|
return () => clearTimeout(timeoutId);
|
|
99
72
|
}, (remaining) => {
|
|
100
73
|
remaining < 0 && autohideFunc();
|
|
101
74
|
}, hasFocus || hasHover);
|
|
102
|
-
useEffect(() => void (!!actionLabel && snackbarRef.current?.focus?.()), [actionLabel]);
|
|
103
75
|
useEffect(() => {
|
|
104
76
|
if (snackbarRef.current !== null) {
|
|
105
77
|
const maxDistanceX = snackbarRef.current.clientWidth * 0.66;
|
|
@@ -113,8 +85,7 @@ const SnackbarRenderer = ({ actionLabel, addon, align = 'bottom', animateOut, au
|
|
|
113
85
|
? { minDelta: -maxDistanceNearestY, maxDelta: maxDistanceFarY }
|
|
114
86
|
: { minDelta: -maxDistanceFarY, maxDelta: maxDistanceNearestY };
|
|
115
87
|
}
|
|
116
|
-
|
|
117
|
-
}, [align, visible, layout]);
|
|
88
|
+
}, [align, visible]);
|
|
118
89
|
const handleSwipeMove = useCallback((event) => {
|
|
119
90
|
if (snackbarRef.current !== null) {
|
|
120
91
|
// насколько прозрачным нужно сделать снекбар с учетом расстояния от начальной позиции
|
|
@@ -136,8 +107,8 @@ const SnackbarRenderer = ({ actionLabel, addon, align = 'bottom', animateOut, au
|
|
|
136
107
|
}, [closeFunc]);
|
|
137
108
|
const handleSwipeCancel = useCallback(() => {
|
|
138
109
|
if (snackbarRef.current !== null) {
|
|
139
|
-
snackbarRef.current.style.opacity
|
|
140
|
-
snackbarRef.current.style.transform
|
|
110
|
+
snackbarRef.current.style.removeProperty('opacity');
|
|
111
|
+
snackbarRef.current.style.removeProperty('transform');
|
|
141
112
|
}
|
|
142
113
|
}, []);
|
|
143
114
|
const swipeHandlers = useSwipeHandlers({
|
|
@@ -182,16 +153,90 @@ const SnackbarRenderer = ({ actionLabel, addon, align = 'bottom', animateOut, au
|
|
|
182
153
|
snackbar.removeEventListener('touchcancel', handleTouchCancel);
|
|
183
154
|
};
|
|
184
155
|
}, [swipeHandlers]);
|
|
185
|
-
|
|
156
|
+
useEffect(() => {
|
|
157
|
+
const snackbar = snackbarRef.current;
|
|
158
|
+
if (!snackbar) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
snackbar.style.setProperty('--snackbar-offset', `${snackbarRef.current.offsetHeight}px`);
|
|
162
|
+
prevWidth.current = snackbar.getBoundingClientRect().width;
|
|
163
|
+
}, []);
|
|
164
|
+
useEffect(() => {
|
|
165
|
+
const snackbar = snackbarRef.current;
|
|
166
|
+
if (!snackbar) {
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
// снекбары могут быть разные по высоте
|
|
170
|
+
// для расчета текущей позиции
|
|
171
|
+
// высоту каждого предыдущего надо учесть
|
|
172
|
+
const snackbars = container.querySelectorAll('[data-magritte-snackbar="true"]');
|
|
173
|
+
let offset = 0;
|
|
174
|
+
let found = false;
|
|
175
|
+
for (const node of snackbars) {
|
|
176
|
+
if (found) {
|
|
177
|
+
offset += node.offsetHeight;
|
|
178
|
+
}
|
|
179
|
+
if (node === snackbar) {
|
|
180
|
+
found = true;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
const value = `${offset + VERTICAL_PADDING_BETWEEN_SNACKBAR * position + BASE_VERTICAL_PADDING}px`;
|
|
184
|
+
if (align === 'top') {
|
|
185
|
+
snackbar.style.top = value;
|
|
186
|
+
snackbar.style.removeProperty('bottom');
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
snackbar.style.bottom = value;
|
|
190
|
+
snackbar.style.removeProperty('top');
|
|
191
|
+
}, [position, align, container]);
|
|
192
|
+
useLayoutEffect(() => {
|
|
193
|
+
const snackbar = snackbarRef.current;
|
|
194
|
+
if (!snackbar || stretched === stretchedRef.current) {
|
|
195
|
+
return void 0;
|
|
196
|
+
}
|
|
197
|
+
const width = snackbar.getBoundingClientRect().width;
|
|
198
|
+
if (Math.abs(width - prevWidth.current) < 1) {
|
|
199
|
+
return void 0;
|
|
200
|
+
}
|
|
201
|
+
// width: auto не анимируется, поэтому
|
|
202
|
+
// зафиксировали ширину → анимировали → снял инлайн свойство
|
|
203
|
+
snackbar.style.width = `${prevWidth.current}px`;
|
|
204
|
+
void snackbar.offsetWidth; // force layout
|
|
205
|
+
snackbar.style.width = `${width}px`;
|
|
206
|
+
const onEnd = (event) => {
|
|
207
|
+
if (event.propertyName !== 'width') {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
snackbar.style.removeProperty('width');
|
|
211
|
+
snackbar.removeEventListener('transitionend', onEnd);
|
|
212
|
+
};
|
|
213
|
+
snackbar.addEventListener('transitionend', onEnd);
|
|
214
|
+
stretchedRef.current = stretched;
|
|
215
|
+
prevWidth.current = width;
|
|
216
|
+
return () => {
|
|
217
|
+
snackbar.removeEventListener('transitionend', onEnd);
|
|
218
|
+
snackbar.style.removeProperty('width');
|
|
219
|
+
};
|
|
220
|
+
}, [stretched]);
|
|
221
|
+
const showDivider = showClose || Boolean(actionLabel);
|
|
222
|
+
const classNames = transition === SnackbarTransitionName.Show
|
|
223
|
+
? OPEN_CLASS_NAMES[transition][align]
|
|
224
|
+
: OTHER_CLASS_NAMES[transition];
|
|
225
|
+
return (jsx(CSSTransition, { appear: true, classNames: classNames, in: visible, nodeRef: snackbarRef, onEnter: () => {
|
|
226
|
+
onShown();
|
|
227
|
+
}, onEntered: () => {
|
|
228
|
+
if (actionLabel) {
|
|
229
|
+
snackbarRef.current?.focus();
|
|
230
|
+
}
|
|
231
|
+
}, onExited: removeImmediately, timeout: timeout, children: jsx(Layer, { layer: "snackbar", children: jsx("div", { ...props, ...ariaAttributes, className: classnames(styles.snackbar, {
|
|
232
|
+
[styles.snackbarStretched]: stretched,
|
|
186
233
|
[styles[`snackbar_align-${align}`]]: align,
|
|
187
234
|
[styles.snackbarInBody]: !containerId,
|
|
188
|
-
[styles.snackbarLayoutVertical]: layout === SnackbarLayout.Vertical,
|
|
189
|
-
[styles.snackbarLayoutHorizontal]: layout === SnackbarLayout.Horizontal,
|
|
190
235
|
}), ref: snackbarRefMultiplexer, onFocus: (event) => {
|
|
191
236
|
if (event.target !== snackbarRef.current && !hasTouchSupportRef.current) {
|
|
192
237
|
setHasFocus(true);
|
|
193
238
|
}
|
|
194
|
-
}, onBlur: () => !hasTouchSupportRef.current && setHasFocus(false), onMouseEnter: () => setHasHover(true), onMouseLeave: () => setHasHover(false), children: jsxs("div", { className: styles.snackbarContent, children: [!!addon && (jsx("div", { className: styles.snackbarAddon, "data-qa": "snackbar-addon", children: addon })), !!autohideTime && showTimer && (jsx("div", { className: styles.snackbarAddon, "data-qa": "snackbar-timer", children: jsx(Timer, { timeout: autohideTime, pause: hasFocus || hasHover, callback: autohideFunc }) })),
|
|
239
|
+
}, onBlur: () => !hasTouchSupportRef.current && setHasFocus(false), onMouseEnter: () => setHasHover(true), onMouseLeave: () => setHasHover(false), "data-magritte-snackbar": true, children: jsxs("div", { className: styles.snackbarContent, children: [!!addon && (jsx("div", { className: styles.snackbarAddon, "data-qa": "snackbar-addon", children: addon })), !!autohideTime && showTimer && (jsx("div", { className: styles.snackbarAddon, "data-qa": "snackbar-timer", children: jsx(Timer, { timeout: autohideTime, pause: hasFocus || hasHover, callback: autohideFunc }) })), jsx("div", { className: styles.snackbarTextWrapper, children: jsx("div", { className: styles.snackbarText, id: "dialog-description", children: children }) }), showDivider && (jsx("div", { className: styles.divider, children: jsx(Divider, { mode: "vertical" }) })), !!actionLabel && (jsx("div", { className: styles.action, children: jsx(Link, { "data-qa": "snackbar-user-action", "aria-label": actionLabel, Element: "button", type: "button", onClick: actionFunc, typography: "subtitle-1-semibold", style: "contrast", children: actionLabel }) })), showClose && (jsx("div", { className: styles.snackbarClose, children: jsx(CrossOutlinedSize24, { padding: 8, borderRadius: "halfHeight", initialColor: "constant-secondary", "data-qa": "snackbar-close-action", tabIndex: actionLabel ? 0 : -1, "aria-label": actionLabel && typeof ariaLabelClose === 'string' ? ariaLabelClose : undefined, onClick: closeFunc }) }))] }) }) }) }));
|
|
195
240
|
};
|
|
196
241
|
|
|
197
242
|
export { SnackbarRenderer };
|
package/SnackbarRenderer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SnackbarRenderer.js","sources":["../src/SnackbarRenderer.tsx"],"sourcesContent":["import { FC, useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport classnames from 'classnames';\n\nimport { useDebounce } from '@hh.ru/magritte-common-func-utils';\nimport { useEscapeToClose } from '@hh.ru/magritte-common-keyboard';\nimport { useResize } from '@hh.ru/magritte-common-resize';\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\nimport { SwipeEventHandler, SwipeThreshold, useSwipeHandlers } from '@hh.ru/magritte-common-use-swipe';\nimport { CrossOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';\nimport { Layer } from '@hh.ru/magritte-ui-layer';\nimport { Link } from '@hh.ru/magritte-ui-link';\nimport { SnackbarLayout, SnackbarRendererProps, SnackbarTransitionName } from '@hh.ru/magritte-ui-snackbar/types';\nimport { useAriaSnackbar } from '@hh.ru/magritte-ui-snackbar/useAriaSnackbar';\nimport { Timer, useTimer } from '@hh.ru/magritte-ui-timer';\n\nimport styles from './snackbar.less';\n\nconst CLASS_NAMES = {\n [SnackbarTransitionName.Show]: {\n appear: styles.appear,\n appearActive: styles['appear-active'],\n appearDone: styles['appear-done'],\n },\n [SnackbarTransitionName.Hide]: {\n exit: styles.exit,\n exitActive: styles['exit-active'],\n exitDone: styles['exit-done'],\n },\n [SnackbarTransitionName.Autohide]: {\n exit: styles.exit,\n exitActive: styles['exit-active_autohide'],\n exitDone: styles['exit-done'],\n },\n [SnackbarTransitionName.Replace]: {\n appear: styles.appear,\n appearDone: styles['appear-done'],\n },\n [SnackbarTransitionName.RemoveImmediately]: {},\n};\n\nconst DEFAULT_AUTOHIDE_TIME_MS = 6000;\n\nexport const SnackbarRenderer: FC<SnackbarRendererProps> = ({\n actionLabel,\n addon,\n align = 'bottom',\n animateOut,\n autohideTime = DEFAULT_AUTOHIDE_TIME_MS,\n children,\n containerId,\n isShown,\n onAction,\n onClose,\n onShown,\n showClose,\n showTimer,\n timeout,\n transition,\n 'aria-label': ariaLabel,\n 'aria-label-close': ariaLabelClose,\n role = 'status',\n ...props\n}) => {\n const actionFunc = useCallback(() => onAction?.(), [onAction]);\n const [hasFocus, setHasFocus] = useState(false);\n const [hasHover, setHasHover] = useState(false);\n const hasTouchSupportRef = useRef(false);\n const [layout, setLayout] = useState<SnackbarLayout>(SnackbarLayout.Horizontal);\n const autohideFunc = useCallback(() => animateOut(SnackbarTransitionName.Autohide), [animateOut]);\n const closeFunc = useCallback(() => animateOut(SnackbarTransitionName.Hide), [animateOut]);\n const previousMetrics = useRef<DOMRect | null>(null);\n const ariaAttributes = useAriaSnackbar({ role, hasAction: !!actionLabel, 'aria-label': ariaLabel });\n const textRef = useRef<HTMLDivElement>(null);\n const resizableContentRef = useRef<HTMLDivElement>(null);\n const visible = transition === SnackbarTransitionName.Show || transition === SnackbarTransitionName.Replace;\n const maxDistanceSqRef = useRef({ nearestSide: Number.POSITIVE_INFINITY, farSide: Number.POSITIVE_INFINITY });\n const swipeThresholdXRef = useRef<SwipeThreshold | null>(null);\n const swipeThresholdYRef = useRef<SwipeThreshold | null>(null);\n\n const removeImmediately = useCallback(() => {\n animateOut(SnackbarTransitionName.RemoveImmediately);\n onClose?.();\n }, [animateOut, onClose]);\n\n const snackbarRef = useRef<HTMLDivElement>(null);\n const bindEscapeToClose = useEscapeToClose(closeFunc);\n const snackbarRefMultiplexer = useMultipleRefs(snackbarRef, bindEscapeToClose);\n\n const calculateLayout = useCallback(() => {\n if (textRef.current && resizableContentRef.current) {\n const metrics = resizableContentRef.current?.getBoundingClientRect();\n const style = window.getComputedStyle(textRef.current);\n const isVerticalLayout =\n textRef.current.getBoundingClientRect().height - parseInt(style.lineHeight, 10) > 1;\n\n if (previousMetrics.current !== null) {\n const increaseScreenSize = metrics.width > previousMetrics.current.width;\n\n setLayout((layout) => {\n /* Уменьшаем размер экрана и если нужно переключиться в вертикальный лейаут */\n if (!increaseScreenSize && isVerticalLayout && layout === SnackbarLayout.Horizontal) {\n return SnackbarLayout.Vertical;\n }\n\n /* Увеличиваем размер экрана и если нужно переключиться в вертикальный лейаут */\n if (increaseScreenSize && isVerticalLayout && layout === SnackbarLayout.Horizontal) {\n return SnackbarLayout.Vertical;\n }\n\n /* Кейсы когда уменьшаем или увеличиваем размер экрана и нужно переключиться\n * с вертикального на горизонтальный лейаут скипаем, потому как доступного места для текста\n * меньше и может оказаться что текст будет в 2 строки и надо\n * снова переключаться на вертикальный лейаут. */\n return layout;\n });\n } else {\n setLayout(isVerticalLayout ? SnackbarLayout.Vertical : SnackbarLayout.Horizontal);\n }\n previousMetrics.current = resizableContentRef.current?.getBoundingClientRect();\n }\n }, []);\n\n useLayoutEffect(calculateLayout, [calculateLayout]);\n\n useResize(useDebounce(calculateLayout, 64));\n\n useTimer(\n !!autohideTime && !showTimer ? autohideTime : -1,\n (callable) => {\n const timeoutId = setTimeout(callable, 50);\n return () => clearTimeout(timeoutId);\n },\n (remaining) => {\n remaining < 0 && autohideFunc();\n },\n hasFocus || hasHover\n );\n\n useEffect(() => void (!!actionLabel && snackbarRef.current?.focus?.()), [actionLabel]);\n\n useEffect(() => {\n if (snackbarRef.current !== null) {\n const maxDistanceX = snackbarRef.current.clientWidth * 0.66;\n const maxDistanceNearestY = snackbarRef.current.clientHeight * 0.5;\n const maxDistanceFarY = snackbarRef.current.clientHeight;\n maxDistanceSqRef.current.nearestSide = Math.pow(maxDistanceX, 2) + Math.pow(maxDistanceNearestY, 2);\n maxDistanceSqRef.current.farSide = Math.pow(maxDistanceX, 2) + Math.pow(maxDistanceFarY, 2);\n swipeThresholdXRef.current = { minDelta: -maxDistanceX, maxDelta: maxDistanceX };\n swipeThresholdYRef.current =\n align === 'top'\n ? { minDelta: -maxDistanceNearestY, maxDelta: maxDistanceFarY }\n : { minDelta: -maxDistanceFarY, maxDelta: maxDistanceNearestY };\n }\n // при смене layout может поменяться clientHeight\n }, [align, visible, layout]);\n\n const handleSwipeMove: SwipeEventHandler = useCallback(\n (event) => {\n if (snackbarRef.current !== null) {\n // насколько прозрачным нужно сделать снекбар с учетом расстояния от начальной позиции\n let maxDistanceSq = maxDistanceSqRef.current.nearestSide;\n\n // определяем был ли свайп в дальнюю сторону экрана по вертикали\n if ((align === 'top' && event.distanceY > 0) || (align === 'bottom' && event.distanceY < 0)) {\n maxDistanceSq = maxDistanceSqRef.current.farSide;\n }\n\n const fadeDistanceSq = Math.pow(event.distanceX, 2) + Math.pow(event.distanceY, 2);\n snackbarRef.current.style.opacity = `${1 - fadeDistanceSq / maxDistanceSq}`;\n snackbarRef.current.style.transform = `translate(${event.distanceX}px, ${event.distanceY}px)`;\n }\n },\n [align]\n );\n\n const handleSwipeEnd: SwipeEventHandler = useCallback(() => {\n if (snackbarRef.current !== null) {\n snackbarRef.current.style.opacity = `0`;\n }\n closeFunc();\n }, [closeFunc]);\n\n const handleSwipeCancel: SwipeEventHandler = useCallback(() => {\n if (snackbarRef.current !== null) {\n snackbarRef.current.style.opacity = `1`;\n snackbarRef.current.style.transform = ``;\n }\n }, []);\n\n const swipeHandlers = useSwipeHandlers({\n thresholdXRef: swipeThresholdXRef,\n thresholdYRef: swipeThresholdYRef,\n onSwipeMove: handleSwipeMove,\n onSwipeEnd: handleSwipeEnd,\n onSwipeCancel: handleSwipeCancel,\n });\n\n useEffect(() => {\n const snackbar = snackbarRef.current;\n if (!snackbar) {\n return void 0;\n }\n\n const handleTouchStart = (event: TouchEvent) => {\n event.stopPropagation();\n hasTouchSupportRef.current = true;\n setHasHover(true);\n swipeHandlers.onTouchStart(event);\n };\n\n const handleTouchMove = (event: TouchEvent) => {\n event.preventDefault();\n event.stopPropagation();\n swipeHandlers.onTouchMove(event);\n };\n\n const handleTouchEnd = (event: TouchEvent) => {\n setHasHover(false);\n swipeHandlers.onTouchEnd(event);\n };\n\n const handleTouchCancel = (event: TouchEvent) => {\n setHasHover(false);\n swipeHandlers.onTouchCancel(event);\n };\n\n snackbar.addEventListener('touchstart', handleTouchStart);\n snackbar.addEventListener('touchmove', handleTouchMove, { passive: false });\n snackbar.addEventListener('touchend', handleTouchEnd);\n snackbar.addEventListener('touchcancel', handleTouchCancel);\n\n return () => {\n snackbar.removeEventListener('touchstart', handleTouchStart);\n snackbar.removeEventListener('touchmove', handleTouchMove);\n snackbar.removeEventListener('touchend', handleTouchEnd);\n snackbar.removeEventListener('touchcancel', handleTouchCancel);\n };\n }, [swipeHandlers]);\n\n return (\n <CSSTransition\n appear\n classNames={CLASS_NAMES[transition]}\n in={visible}\n nodeRef={snackbarRef}\n onEntered={onShown}\n onExited={removeImmediately}\n timeout={timeout}\n >\n <Layer layer=\"snackbar\">\n <div\n {...props}\n {...ariaAttributes}\n className={classnames(styles.snackbar, {\n [styles[`snackbar_align-${align}`]]: align,\n [styles.snackbarInBody]: !containerId,\n [styles.snackbarLayoutVertical]: layout === SnackbarLayout.Vertical,\n [styles.snackbarLayoutHorizontal]: layout === SnackbarLayout.Horizontal,\n })}\n ref={snackbarRefMultiplexer}\n onFocus={(event) => {\n if (event.target !== snackbarRef.current && !hasTouchSupportRef.current) {\n setHasFocus(true);\n }\n }}\n onBlur={() => !hasTouchSupportRef.current && setHasFocus(false)}\n onMouseEnter={() => setHasHover(true)}\n onMouseLeave={() => setHasHover(false)}\n >\n <div className={styles.snackbarContent}>\n {!!addon && (\n <div className={styles.snackbarAddon} data-qa=\"snackbar-addon\">\n {addon}\n </div>\n )}\n {!!autohideTime && showTimer && (\n <div className={styles.snackbarAddon} data-qa=\"snackbar-timer\">\n <Timer timeout={autohideTime} pause={hasFocus || hasHover} callback={autohideFunc} />\n </div>\n )}\n <div className={styles.snackbarTextAndAction} ref={resizableContentRef}>\n <div className={styles.snackbarText} ref={textRef} id=\"dialog-description\">\n {children}\n </div>\n {!!actionLabel && (\n <Link\n data-qa=\"snackbar-user-action\"\n aria-label={actionLabel}\n Element=\"button\"\n type=\"button\"\n onClick={actionFunc}\n typography=\"subtitle-1-semibold\"\n style=\"contrast\"\n >\n {actionLabel}\n </Link>\n )}\n </div>\n {showClose && (\n <div className={styles.snackbarClose}>\n <CrossOutlinedSize24\n padding={8}\n borderRadius=\"halfHeight\"\n initialColor=\"constant-secondary\"\n data-qa=\"snackbar-close-action\"\n tabIndex={actionLabel ? 0 : -1}\n aria-label={\n actionLabel && typeof ariaLabelClose === 'string' ? ariaLabelClose : undefined\n }\n onClick={closeFunc}\n />\n </div>\n )}\n </div>\n </div>\n </Layer>\n </CSSTransition>\n );\n};\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SnackbarRenderer.js","sources":["../src/SnackbarRenderer.tsx"],"sourcesContent":["import { FC, useCallback, useEffect, useRef, useState, useLayoutEffect } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport classnames from 'classnames';\n\nimport { useEscapeToClose } from '@hh.ru/magritte-common-keyboard';\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\nimport { SwipeEventHandler, SwipeThreshold, useSwipeHandlers } from '@hh.ru/magritte-common-use-swipe';\nimport { Divider } from '@hh.ru/magritte-ui-divider';\nimport { CrossOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';\nimport { Layer } from '@hh.ru/magritte-ui-layer';\nimport { Link } from '@hh.ru/magritte-ui-link';\nimport { SnackbarRendererProps, SnackbarTransitionName } from '@hh.ru/magritte-ui-snackbar/types';\nimport { useAriaSnackbar } from '@hh.ru/magritte-ui-snackbar/useAriaSnackbar';\nimport { Timer, useTimer } from '@hh.ru/magritte-ui-timer';\n\nimport styles from './snackbar.less';\n\nconst OTHER_CLASS_NAMES = {\n [SnackbarTransitionName.Hide]: {\n exit: styles.exit,\n exitActive: styles['exit-active'],\n exitDone: styles['exit-done'],\n },\n [SnackbarTransitionName.Autohide]: {\n exit: styles.exit,\n exitActive: styles['exit-active_autohide'],\n exitDone: styles['exit-done'],\n },\n [SnackbarTransitionName.RemoveImmediately]: {},\n};\n\nconst OPEN_CLASS_NAMES = {\n [SnackbarTransitionName.Show]: {\n top: {\n appear: styles.appearTop,\n appearActive: styles['appear-active'],\n appearDone: styles['appear-done'],\n },\n bottom: {\n appear: styles.appearBottom,\n appearActive: styles['appear-active'],\n appearDone: styles['appear-done'],\n },\n },\n};\n\nconst DEFAULT_AUTOHIDE_TIME_MS = 6000;\nconst BASE_VERTICAL_PADDING = 16;\nconst VERTICAL_PADDING_BETWEEN_SNACKBAR = 8;\n\nexport const SnackbarRenderer: FC<SnackbarRendererProps> = ({\n actionLabel,\n addon,\n align = 'bottom',\n animateOut,\n autohideTime = DEFAULT_AUTOHIDE_TIME_MS,\n children,\n containerId,\n isShown,\n onAction,\n onClose,\n onShown,\n showClose,\n showTimer,\n timeout,\n transition,\n 'aria-label': ariaLabel,\n 'aria-label-close': ariaLabelClose,\n role = 'status',\n stretched = true,\n position,\n container,\n ...props\n}) => {\n const actionFunc = useCallback(() => onAction?.(), [onAction]);\n const [hasFocus, setHasFocus] = useState(false);\n const [hasHover, setHasHover] = useState(false);\n const hasTouchSupportRef = useRef(false);\n const prevWidth = useRef<number>(0);\n const stretchedRef = useRef(stretched);\n const autohideFunc = useCallback(() => animateOut(SnackbarTransitionName.Autohide), [animateOut]);\n const closeFunc = useCallback(() => animateOut(SnackbarTransitionName.Hide), [animateOut]);\n const ariaAttributes = useAriaSnackbar({ role, hasAction: !!actionLabel, 'aria-label': ariaLabel });\n const visible = transition === SnackbarTransitionName.Show;\n const maxDistanceSqRef = useRef({ nearestSide: Number.POSITIVE_INFINITY, farSide: Number.POSITIVE_INFINITY });\n const swipeThresholdXRef = useRef<SwipeThreshold | null>(null);\n const swipeThresholdYRef = useRef<SwipeThreshold | null>(null);\n\n const removeImmediately = useCallback(() => {\n animateOut(SnackbarTransitionName.RemoveImmediately);\n onClose?.();\n }, [animateOut, onClose]);\n\n const snackbarRef = useRef<HTMLDivElement>(null);\n const bindEscapeToClose = useEscapeToClose(closeFunc);\n const snackbarRefMultiplexer = useMultipleRefs(snackbarRef, bindEscapeToClose);\n\n useTimer(\n !!autohideTime && !showTimer ? autohideTime : -1,\n (callable) => {\n const timeoutId = setTimeout(callable, 50);\n return () => clearTimeout(timeoutId);\n },\n (remaining) => {\n remaining < 0 && autohideFunc();\n },\n hasFocus || hasHover\n );\n\n useEffect(() => {\n if (snackbarRef.current !== null) {\n const maxDistanceX = snackbarRef.current.clientWidth * 0.66;\n const maxDistanceNearestY = snackbarRef.current.clientHeight * 0.5;\n const maxDistanceFarY = snackbarRef.current.clientHeight;\n maxDistanceSqRef.current.nearestSide = Math.pow(maxDistanceX, 2) + Math.pow(maxDistanceNearestY, 2);\n maxDistanceSqRef.current.farSide = Math.pow(maxDistanceX, 2) + Math.pow(maxDistanceFarY, 2);\n swipeThresholdXRef.current = { minDelta: -maxDistanceX, maxDelta: maxDistanceX };\n swipeThresholdYRef.current =\n align === 'top'\n ? { minDelta: -maxDistanceNearestY, maxDelta: maxDistanceFarY }\n : { minDelta: -maxDistanceFarY, maxDelta: maxDistanceNearestY };\n }\n }, [align, visible]);\n\n const handleSwipeMove: SwipeEventHandler = useCallback(\n (event) => {\n if (snackbarRef.current !== null) {\n // насколько прозрачным нужно сделать снекбар с учетом расстояния от начальной позиции\n let maxDistanceSq = maxDistanceSqRef.current.nearestSide;\n\n // определяем был ли свайп в дальнюю сторону экрана по вертикали\n if ((align === 'top' && event.distanceY > 0) || (align === 'bottom' && event.distanceY < 0)) {\n maxDistanceSq = maxDistanceSqRef.current.farSide;\n }\n\n const fadeDistanceSq = Math.pow(event.distanceX, 2) + Math.pow(event.distanceY, 2);\n snackbarRef.current.style.opacity = `${1 - fadeDistanceSq / maxDistanceSq}`;\n snackbarRef.current.style.transform = `translate(${event.distanceX}px, ${event.distanceY}px)`;\n }\n },\n [align]\n );\n\n const handleSwipeEnd: SwipeEventHandler = useCallback(() => {\n if (snackbarRef.current !== null) {\n snackbarRef.current.style.opacity = `0`;\n }\n closeFunc();\n }, [closeFunc]);\n\n const handleSwipeCancel: SwipeEventHandler = useCallback(() => {\n if (snackbarRef.current !== null) {\n snackbarRef.current.style.removeProperty('opacity');\n snackbarRef.current.style.removeProperty('transform');\n }\n }, []);\n\n const swipeHandlers = useSwipeHandlers({\n thresholdXRef: swipeThresholdXRef,\n thresholdYRef: swipeThresholdYRef,\n onSwipeMove: handleSwipeMove,\n onSwipeEnd: handleSwipeEnd,\n onSwipeCancel: handleSwipeCancel,\n });\n\n useEffect(() => {\n const snackbar = snackbarRef.current;\n if (!snackbar) {\n return void 0;\n }\n\n const handleTouchStart = (event: TouchEvent) => {\n event.stopPropagation();\n hasTouchSupportRef.current = true;\n setHasHover(true);\n swipeHandlers.onTouchStart(event);\n };\n\n const handleTouchMove = (event: TouchEvent) => {\n event.preventDefault();\n event.stopPropagation();\n swipeHandlers.onTouchMove(event);\n };\n\n const handleTouchEnd = (event: TouchEvent) => {\n setHasHover(false);\n swipeHandlers.onTouchEnd(event);\n };\n\n const handleTouchCancel = (event: TouchEvent) => {\n setHasHover(false);\n swipeHandlers.onTouchCancel(event);\n };\n\n snackbar.addEventListener('touchstart', handleTouchStart);\n snackbar.addEventListener('touchmove', handleTouchMove, { passive: false });\n snackbar.addEventListener('touchend', handleTouchEnd);\n snackbar.addEventListener('touchcancel', handleTouchCancel);\n\n return () => {\n snackbar.removeEventListener('touchstart', handleTouchStart);\n snackbar.removeEventListener('touchmove', handleTouchMove);\n snackbar.removeEventListener('touchend', handleTouchEnd);\n snackbar.removeEventListener('touchcancel', handleTouchCancel);\n };\n }, [swipeHandlers]);\n\n useEffect(() => {\n const snackbar = snackbarRef.current;\n if (!snackbar) {\n return;\n }\n snackbar.style.setProperty('--snackbar-offset', `${snackbarRef.current.offsetHeight}px`);\n prevWidth.current = snackbar.getBoundingClientRect().width;\n }, []);\n\n useEffect(() => {\n const snackbar = snackbarRef.current;\n if (!snackbar) {\n return;\n }\n // снекбары могут быть разные по высоте\n // для расчета текущей позиции\n // высоту каждого предыдущего надо учесть\n const snackbars = container.querySelectorAll<HTMLElement>('[data-magritte-snackbar=\"true\"]');\n let offset = 0;\n let found = false;\n for (const node of snackbars) {\n if (found) {\n offset += node.offsetHeight;\n }\n if (node === snackbar) {\n found = true;\n }\n }\n const value = `${offset + VERTICAL_PADDING_BETWEEN_SNACKBAR * position + BASE_VERTICAL_PADDING}px`;\n if (align === 'top') {\n snackbar.style.top = value;\n snackbar.style.removeProperty('bottom');\n return;\n }\n snackbar.style.bottom = value;\n snackbar.style.removeProperty('top');\n }, [position, align, container]);\n\n useLayoutEffect(() => {\n const snackbar = snackbarRef.current;\n if (!snackbar || stretched === stretchedRef.current) {\n return void 0;\n }\n const width = snackbar.getBoundingClientRect().width;\n if (Math.abs(width - prevWidth.current) < 1) {\n return void 0;\n }\n // width: auto не анимируется, поэтому\n // зафиксировали ширину → анимировали → снял инлайн свойство\n snackbar.style.width = `${prevWidth.current}px`;\n void snackbar.offsetWidth; // force layout\n snackbar.style.width = `${width}px`;\n const onEnd = (event: TransitionEvent) => {\n if (event.propertyName !== 'width') {\n return;\n }\n snackbar.style.removeProperty('width');\n snackbar.removeEventListener('transitionend', onEnd);\n };\n snackbar.addEventListener('transitionend', onEnd);\n stretchedRef.current = stretched;\n prevWidth.current = width;\n\n return () => {\n snackbar.removeEventListener('transitionend', onEnd);\n snackbar.style.removeProperty('width');\n };\n }, [stretched]);\n\n const showDivider = showClose || Boolean(actionLabel);\n const classNames =\n transition === SnackbarTransitionName.Show\n ? OPEN_CLASS_NAMES[transition][align]\n : OTHER_CLASS_NAMES[transition];\n\n return (\n <CSSTransition\n appear\n classNames={classNames}\n in={visible}\n nodeRef={snackbarRef}\n onEnter={() => {\n onShown();\n }}\n onEntered={() => {\n if (actionLabel) {\n snackbarRef.current?.focus();\n }\n }}\n onExited={removeImmediately}\n timeout={timeout}\n >\n <Layer layer=\"snackbar\">\n <div\n {...props}\n {...ariaAttributes}\n className={classnames(styles.snackbar, {\n [styles.snackbarStretched]: stretched,\n [styles[`snackbar_align-${align}`]]: align,\n [styles.snackbarInBody]: !containerId,\n })}\n ref={snackbarRefMultiplexer}\n onFocus={(event) => {\n if (event.target !== snackbarRef.current && !hasTouchSupportRef.current) {\n setHasFocus(true);\n }\n }}\n onBlur={() => !hasTouchSupportRef.current && setHasFocus(false)}\n onMouseEnter={() => setHasHover(true)}\n onMouseLeave={() => setHasHover(false)}\n data-magritte-snackbar={true}\n >\n <div className={styles.snackbarContent}>\n {!!addon && (\n <div className={styles.snackbarAddon} data-qa=\"snackbar-addon\">\n {addon}\n </div>\n )}\n {!!autohideTime && showTimer && (\n <div className={styles.snackbarAddon} data-qa=\"snackbar-timer\">\n <Timer timeout={autohideTime} pause={hasFocus || hasHover} callback={autohideFunc} />\n </div>\n )}\n <div className={styles.snackbarTextWrapper}>\n <div className={styles.snackbarText} id=\"dialog-description\">\n {children}\n </div>\n </div>\n {showDivider && (\n <div className={styles.divider}>\n <Divider mode=\"vertical\" />\n </div>\n )}\n {!!actionLabel && (\n <div className={styles.action}>\n <Link\n data-qa=\"snackbar-user-action\"\n aria-label={actionLabel}\n Element=\"button\"\n type=\"button\"\n onClick={actionFunc}\n typography=\"subtitle-1-semibold\"\n style=\"contrast\"\n >\n {actionLabel}\n </Link>\n </div>\n )}\n {showClose && (\n <div className={styles.snackbarClose}>\n <CrossOutlinedSize24\n padding={8}\n borderRadius=\"halfHeight\"\n initialColor=\"constant-secondary\"\n data-qa=\"snackbar-close-action\"\n tabIndex={actionLabel ? 0 : -1}\n aria-label={\n actionLabel && typeof ariaLabelClose === 'string' ? ariaLabelClose : undefined\n }\n onClick={closeFunc}\n />\n </div>\n )}\n </div>\n </div>\n </Layer>\n </CSSTransition>\n );\n};\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
package/index.css
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
:root{
|
|
2
2
|
--magritte-color-component-snackbar-background-content-v23-1-0:#000000;
|
|
3
3
|
--magritte-color-component-snackbar-stroke-content-v23-1-0:#ffffff00;
|
|
4
|
+
--magritte-color-component-snackbar-stroke-divider-v23-1-0:#303030;
|
|
4
5
|
--magritte-color-component-snackbar-text-content-v23-1-0:#ffffff;
|
|
5
6
|
--magritte-color-component-snackbar-text-action-v23-1-0:#78c0ff;
|
|
6
7
|
--magritte-color-component-snackbar-text-state-action-hovered-v23-1-0:#8ac8ff;
|
|
7
8
|
--magritte-color-component-snackbar-text-state-action-pressed-v23-1-0:#78c0ff;
|
|
8
|
-
--magritte-color-component-snackbar-text-state-action-disabled-v23-1-0:#AABBCA;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
:root{
|
|
@@ -17,145 +17,133 @@
|
|
|
17
17
|
--magritte-typography-label-2-regular-text-indent-v23-1-0:0px;
|
|
18
18
|
--magritte-typography-label-2-regular-text-transform-v23-1-0:none;
|
|
19
19
|
--magritte-typography-label-2-regular-text-decoration-v23-1-0:none;
|
|
20
|
-
--magritte-semantic-animation-
|
|
21
|
-
--magritte-semantic-animation-ease-
|
|
22
|
-
--magritte-semantic-
|
|
23
|
-
--magritte-
|
|
24
|
-
--magritte-semantic-animation-ease-in-out-tiger-500-timing-function-v23-1-0:cubic-bezier(0.25, 0.1, 0.25, 1);
|
|
25
|
-
--magritte-semantic-animation-ease-in-out-tiger-500-duration-v23-1-0:500ms;
|
|
26
|
-
--magritte-static-border-radius-600-v23-1-0:24px;
|
|
20
|
+
--magritte-semantic-animation-time-m-duration-v23-1-0:400ms;
|
|
21
|
+
--magritte-semantic-animation-ease-base-timing-function-v23-1-0:cubic-bezier(0.4, 0.24, 0, 1);
|
|
22
|
+
--magritte-semantic-blur-floating-v23-1-0:48px;
|
|
23
|
+
--magritte-static-border-radius-400-v23-1-0:16px;
|
|
27
24
|
--magritte-core-line-heights-600-v23-1-0:24;
|
|
28
25
|
}
|
|
29
26
|
|
|
30
27
|
.magritte-night-theme{
|
|
31
28
|
--magritte-color-component-snackbar-background-content-v23-1-0:#2e2e2ef5;
|
|
32
29
|
--magritte-color-component-snackbar-stroke-content-v23-1-0:#ffffff00;
|
|
30
|
+
--magritte-color-component-snackbar-stroke-divider-v23-1-0:#ffffff29;
|
|
33
31
|
--magritte-color-component-snackbar-text-content-v23-1-0:#ffffff;
|
|
34
32
|
--magritte-color-component-snackbar-text-action-v23-1-0:#78c0ff;
|
|
35
33
|
--magritte-color-component-snackbar-text-state-action-hovered-v23-1-0:#8ac8ff;
|
|
36
34
|
--magritte-color-component-snackbar-text-state-action-pressed-v23-1-0:#78c0ff;
|
|
37
|
-
--magritte-color-component-snackbar-text-state-action-disabled-v23-1-0:#AABBCA;
|
|
38
35
|
}
|
|
39
36
|
|
|
40
37
|
.magritte-zp-day-theme{
|
|
41
38
|
--magritte-color-component-snackbar-background-content-v23-1-0:#000000;
|
|
42
39
|
--magritte-color-component-snackbar-stroke-content-v23-1-0:#ffffff00;
|
|
40
|
+
--magritte-color-component-snackbar-stroke-divider-v23-1-0:#303030;
|
|
43
41
|
--magritte-color-component-snackbar-text-content-v23-1-0:#ffffff;
|
|
44
42
|
--magritte-color-component-snackbar-text-action-v23-1-0:#78c0ff;
|
|
45
43
|
--magritte-color-component-snackbar-text-state-action-hovered-v23-1-0:#8ac8ff;
|
|
46
44
|
--magritte-color-component-snackbar-text-state-action-pressed-v23-1-0:#78c0ff;
|
|
47
|
-
--magritte-color-component-snackbar-text-state-action-disabled-v23-1-0:#AABBCA;
|
|
48
45
|
}
|
|
49
|
-
.magritte-snackbar-
|
|
46
|
+
.magritte-snackbar-container___SeRql_6-0-1{
|
|
50
47
|
pointer-events:none;
|
|
51
48
|
position:absolute;
|
|
52
49
|
inset:0;
|
|
50
|
+
overflow:hidden;
|
|
53
51
|
}
|
|
54
|
-
.magritte-snackbar-animation-
|
|
55
|
-
.magritte-
|
|
52
|
+
.magritte-snackbar-animation-timeout___EQLvG_6-0-1,
|
|
53
|
+
.magritte-snackbar___jgq4H_6-0-1{
|
|
56
54
|
outline:none;
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
55
|
+
padding:16px 20px;
|
|
56
|
+
margin:0 auto;
|
|
57
|
+
border-radius:var(--magritte-static-border-radius-400-v23-1-0);
|
|
58
|
+
backdrop-filter:blur(var(--magritte-semantic-blur-floating-v23-1-0));
|
|
59
|
+
-webkit-backdrop-filter:blur(var(--magritte-semantic-blur-floating-v23-1-0));
|
|
60
|
+
box-sizing:border-box;
|
|
61
|
+
will-change:transform;
|
|
62
|
+
transition:top var(--stack-animation-duration) var(--magritte-semantic-animation-ease-base-timing-function-v23-1-0), bottom var(--stack-animation-duration) var(--magritte-semantic-animation-ease-base-timing-function-v23-1-0), width var(--resize-animation-duration) var(--magritte-semantic-animation-ease-base-timing-function-v23-1-0);
|
|
63
|
+
--show-animation-duration:var(--magritte-semantic-animation-time-m-duration-v23-1-0);
|
|
64
|
+
--hide-animation-duration:var(--magritte-semantic-animation-time-m-duration-v23-1-0);
|
|
65
|
+
--stack-animation-duration:var(--magritte-semantic-animation-time-m-duration-v23-1-0);
|
|
66
|
+
--resize-animation-duration:var(--magritte-semantic-animation-time-m-duration-v23-1-0);
|
|
67
|
+
--autohide-animation-duration:var(--magritte-semantic-animation-time-m-duration-v23-1-0);
|
|
61
68
|
--removeImmediately-animation-duration:0;
|
|
62
|
-
--magritte-color-component-action-icon-secondary-override:var(--magritte-color-component-snackbar-text-action-v23-1-0);
|
|
63
|
-
--magritte-color-component-action-icon-secondary-hovered-override:var(--magritte-color-component-snackbar-text-state-action-hovered-v23-1-0);
|
|
64
|
-
--magritte-color-component-action-icon-secondary-pressed-override:var(--magritte-color-component-snackbar-text-state-action-pressed-v23-1-0);
|
|
65
|
-
--magritte-color-component-action-icon-secondary-disabled-override:var(--magritte-color-component-snackbar-text-state-action-disabled-v23-1-0);
|
|
66
69
|
}
|
|
67
70
|
@media (prefers-reduced-motion){
|
|
68
|
-
.magritte-snackbar-animation-
|
|
69
|
-
.magritte-
|
|
71
|
+
.magritte-snackbar-animation-timeout___EQLvG_6-0-1,
|
|
72
|
+
.magritte-snackbar___jgq4H_6-0-1{
|
|
70
73
|
--show-animation-duration:0;
|
|
71
74
|
--hide-animation-duration:0;
|
|
75
|
+
--stack-animation-duration:0;
|
|
76
|
+
--resize-animation-duration:0;
|
|
72
77
|
--autohide-animation-duration:0;
|
|
73
|
-
--replace-animation-duration:0;
|
|
74
78
|
--removeImmediately-animation-duration:0;
|
|
75
79
|
}
|
|
76
80
|
}
|
|
77
|
-
|
|
81
|
+
@media (min-width: 700px){
|
|
82
|
+
body.magritte-old-layout .magritte-snackbar-animation-timeout___EQLvG_6-0-1,
|
|
83
|
+
body.magritte-old-layout .magritte-snackbar___jgq4H_6-0-1{
|
|
84
|
+
max-width:600px;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
@media (min-width: 600px){
|
|
88
|
+
body:not(.magritte-old-layout) .magritte-snackbar-animation-timeout___EQLvG_6-0-1,
|
|
89
|
+
body:not(.magritte-old-layout) .magritte-snackbar___jgq4H_6-0-1{
|
|
90
|
+
max-width:600px;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
.magritte-snackbar-animation-timeout___EQLvG_6-0-1{
|
|
78
94
|
display:none;
|
|
79
95
|
}
|
|
80
|
-
.magritte-
|
|
96
|
+
.magritte-snackbar___jgq4H_6-0-1{
|
|
81
97
|
background:var(--magritte-color-component-snackbar-background-content-v23-1-0);
|
|
82
98
|
color:var(--magritte-color-component-snackbar-text-content-v23-1-0);
|
|
83
99
|
box-shadow:inset 0 0 0 1px var(--magritte-color-component-snackbar-stroke-content-v23-1-0);
|
|
84
100
|
position:absolute;
|
|
85
101
|
pointer-events:auto;
|
|
102
|
+
width:max-content;
|
|
86
103
|
}
|
|
87
|
-
.magritte-
|
|
88
|
-
|
|
104
|
+
.magritte-snackbar_stretched___xVhgJ_6-0-1{
|
|
105
|
+
width:auto;
|
|
89
106
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
inset:0 0 auto;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
@media (min-width: 1024px){
|
|
96
|
-
body:not(.magritte-old-layout) .magritte-snackbar_align-top___WWWbk_5-1-29{
|
|
97
|
-
inset:0 0 auto;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
.magritte-snackbar_align-bottom___tCBBP_5-1-29{
|
|
101
|
-
inset:auto 16px 16px;
|
|
107
|
+
.magritte-snackbar_align-top___WWWbk_6-0-1{
|
|
108
|
+
inset:16px 8px auto;
|
|
102
109
|
}
|
|
103
110
|
@media (min-width: 1020px){
|
|
104
|
-
body.magritte-old-layout .magritte-snackbar_align-
|
|
105
|
-
inset:auto
|
|
111
|
+
body.magritte-old-layout .magritte-snackbar_align-top___WWWbk_6-0-1{
|
|
112
|
+
inset:16px 16px auto 16px;
|
|
106
113
|
}
|
|
107
114
|
}
|
|
108
115
|
@media (min-width: 1024px){
|
|
109
|
-
body:not(.magritte-old-layout) .magritte-snackbar_align-
|
|
110
|
-
inset:auto
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
.magritte-snackbar-in-body___Zer4o_5-1-29{
|
|
114
|
-
position:fixed;
|
|
115
|
-
}
|
|
116
|
-
@media (min-width: 1020px){
|
|
117
|
-
body.magritte-old-layout .magritte-snackbar-in-body___Zer4o_5-1-29{
|
|
118
|
-
box-sizing:border-box;
|
|
119
|
-
margin:auto;
|
|
120
|
-
max-width:600px;
|
|
116
|
+
body:not(.magritte-old-layout) .magritte-snackbar_align-top___WWWbk_6-0-1{
|
|
117
|
+
inset:16px 16px auto 16px;
|
|
121
118
|
}
|
|
122
119
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
box-sizing:border-box;
|
|
126
|
-
margin:auto;
|
|
127
|
-
max-width:600px;
|
|
128
|
-
}
|
|
120
|
+
.magritte-snackbar_align-bottom___tCBBP_6-0-1{
|
|
121
|
+
inset:auto 8px 16px;
|
|
129
122
|
}
|
|
130
123
|
@media (min-width: 1020px){
|
|
131
|
-
body.magritte-old-layout .magritte-
|
|
132
|
-
inset:
|
|
124
|
+
body.magritte-old-layout .magritte-snackbar_align-bottom___tCBBP_6-0-1{
|
|
125
|
+
inset:auto 16px 16px 16px;
|
|
133
126
|
}
|
|
134
127
|
}
|
|
135
128
|
@media (min-width: 1024px){
|
|
136
|
-
body:not(.magritte-old-layout) .magritte-
|
|
137
|
-
inset:
|
|
129
|
+
body:not(.magritte-old-layout) .magritte-snackbar_align-bottom___tCBBP_6-0-1{
|
|
130
|
+
inset:auto 16px 16px 16px;
|
|
138
131
|
}
|
|
139
132
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
inset:auto 16px 48px 16px;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
@media (min-width: 1024px){
|
|
146
|
-
body:not(.magritte-old-layout) .magritte-snackbar-in-body___Zer4o_5-1-29.magritte-snackbar_align-bottom___tCBBP_5-1-29{
|
|
147
|
-
inset:auto 16px 48px 16px;
|
|
148
|
-
}
|
|
133
|
+
.magritte-snackbar-in-body___Zer4o_6-0-1{
|
|
134
|
+
position:fixed;
|
|
149
135
|
}
|
|
150
|
-
.magritte-snackbar-
|
|
136
|
+
.magritte-snackbar-content___MlP5J_6-0-1{
|
|
151
137
|
display:flex;
|
|
138
|
+
align-items:center;
|
|
152
139
|
}
|
|
153
|
-
.magritte-snackbar-addon___-
|
|
140
|
+
.magritte-snackbar-addon___-eJn7_6-0-1{
|
|
154
141
|
margin-right:12px;
|
|
155
142
|
width:24px;
|
|
156
143
|
height:24px;
|
|
144
|
+
margin-left:-4px;
|
|
157
145
|
}
|
|
158
|
-
.magritte-snackbar-
|
|
146
|
+
.magritte-snackbar-text___PCxnB_6-0-1{
|
|
159
147
|
font-family:var(--magritte-typography-label-2-regular-font-family-v23-1-0);
|
|
160
148
|
font-weight:var(--magritte-typography-label-2-regular-font-weight-v23-1-0);
|
|
161
149
|
line-height:var(--magritte-typography-label-2-regular-line-height-v23-1-0);
|
|
@@ -166,71 +154,62 @@
|
|
|
166
154
|
text-decoration:var(--magritte-typography-label-2-regular-text-decoration-v23-1-0);
|
|
167
155
|
margin-right:auto;
|
|
168
156
|
}
|
|
169
|
-
.magritte-snackbar-text-
|
|
157
|
+
.magritte-snackbar-text-wrapper___SH6YB_6-0-1{
|
|
170
158
|
display:flex;
|
|
171
159
|
width:100%;
|
|
172
160
|
}
|
|
173
|
-
.magritte-
|
|
174
|
-
|
|
175
|
-
border-radius:calc((20px * 2 + calc(var(--magritte-core-line-heights-600-v23-1-0) * 1px)) / 2);
|
|
176
|
-
}
|
|
177
|
-
.magritte-snackbar-layout-horizontal___WrBPj_5-1-29 .magritte-snackbar-text___PCxnB_5-1-29{
|
|
178
|
-
line-height:calc(var(--magritte-core-line-heights-600-v23-1-0) * 1px);
|
|
179
|
-
}
|
|
180
|
-
.magritte-snackbar-layout-horizontal___WrBPj_5-1-29 .magritte-snackbar-content___MlP5J_5-1-29{
|
|
181
|
-
height:calc(var(--magritte-core-line-heights-600-v23-1-0) * 1px);
|
|
161
|
+
.magritte-action___Yjp2t_6-0-1{
|
|
162
|
+
display:flex;
|
|
182
163
|
align-items:center;
|
|
164
|
+
margin-left:8px;
|
|
165
|
+
height:calc(var(--magritte-core-line-heights-600-v23-1-0) * 1px);
|
|
166
|
+
white-space:nowrap;
|
|
167
|
+
--magritte-ui-link-padding-override:12px;
|
|
168
|
+
--magritte-ui-link-text-color-override:var(--magritte-color-component-snackbar-text-action-v23-1-0);
|
|
169
|
+
--magritte-ui-link-text-color-hovered-override:var(--magritte-color-component-snackbar-text-state-action-hovered-v23-1-0);
|
|
170
|
+
--magritte-ui-link-text-color-pressed-override:var(--magritte-color-component-snackbar-text-state-action-pressed-v23-1-0);
|
|
183
171
|
}
|
|
184
|
-
.magritte-snackbar-
|
|
172
|
+
.magritte-snackbar-close___U8YT5_6-0-1{
|
|
173
|
+
height:calc(var(--magritte-core-line-heights-600-v23-1-0) * 1px);
|
|
174
|
+
display:flex;
|
|
185
175
|
align-items:center;
|
|
186
|
-
gap:8px;
|
|
187
|
-
flex-direction:row;
|
|
188
|
-
justify-content:space-between;
|
|
189
|
-
--magritte-ui-link-padding-override:11px;
|
|
190
|
-
}
|
|
191
|
-
.magritte-snackbar-layout-horizontal___WrBPj_5-1-29 .magritte-snackbar-close___U8YT5_5-1-29{
|
|
192
|
-
margin-left:4px;
|
|
193
176
|
margin-right:-12px;
|
|
194
177
|
}
|
|
195
|
-
.magritte-
|
|
196
|
-
|
|
197
|
-
|
|
178
|
+
.magritte-divider___GQ492_6-0-1{
|
|
179
|
+
align-self:stretch;
|
|
180
|
+
margin-top:-8px;
|
|
181
|
+
margin-bottom:-8px;
|
|
182
|
+
margin-left:16px;
|
|
183
|
+
margin-right:8px;
|
|
184
|
+
--magritte-ui-divider-color-override:var(--magritte-color-component-snackbar-stroke-divider-v23-1-0);
|
|
198
185
|
}
|
|
199
|
-
.magritte-
|
|
200
|
-
|
|
201
|
-
align-items:flex-start;
|
|
186
|
+
.magritte-appearTop___UJQ6-_6-0-1{
|
|
187
|
+
transform:translateY(calc(var(--snackbar-offset, 60px) * -1 + 16px * -1));
|
|
202
188
|
}
|
|
203
|
-
.magritte-
|
|
204
|
-
|
|
205
|
-
flex-direction:column;
|
|
206
|
-
align-items:flex-start;
|
|
207
|
-
--magritte-ui-link-padding-override:3px;
|
|
189
|
+
.magritte-appearBottom___wDoOa_6-0-1{
|
|
190
|
+
transform:translateY(calc(var(--snackbar-offset, 60px) + 16px));
|
|
208
191
|
}
|
|
209
|
-
.magritte-
|
|
210
|
-
|
|
211
|
-
|
|
192
|
+
.magritte-appear-active___Kl7by_6-0-1{
|
|
193
|
+
transform:translateY(0);
|
|
194
|
+
transition:opacity var(--hide-animation-duration) var(--magritte-semantic-animation-ease-base-timing-function-v23-1-0), transform var(--show-animation-duration) var(--magritte-semantic-animation-ease-base-timing-function-v23-1-0), top var(--stack-animation-duration) var(--magritte-semantic-animation-ease-base-timing-function-v23-1-0), bottom var(--stack-animation-duration) var(--magritte-semantic-animation-ease-base-timing-function-v23-1-0);
|
|
212
195
|
}
|
|
213
|
-
.magritte-
|
|
214
|
-
|
|
215
|
-
}
|
|
216
|
-
.magritte-appear-active___Kl7by_5-1-29{
|
|
217
|
-
opacity:1;
|
|
218
|
-
transition:opacity var(--show-animation-duration) var(--magritte-semantic-animation-ease-in-out-tiger-300-timing-function-v23-1-0);
|
|
219
|
-
}
|
|
220
|
-
.magritte-appear-done___3g7bl_5-1-29{
|
|
221
|
-
opacity:1;
|
|
196
|
+
.magritte-appear-done___3g7bl_6-0-1{
|
|
197
|
+
transform:translateY(0);
|
|
222
198
|
}
|
|
223
|
-
.magritte-
|
|
199
|
+
.magritte-exit___MsYCK_6-0-1{
|
|
224
200
|
opacity:1;
|
|
225
201
|
}
|
|
226
|
-
.magritte-exit-
|
|
202
|
+
.magritte-exit-active___I4AYt_6-0-1{
|
|
227
203
|
opacity:0;
|
|
228
|
-
|
|
204
|
+
transform:scale(0.75);
|
|
205
|
+
transition:opacity var(--hide-animation-duration) var(--magritte-semantic-animation-ease-base-timing-function-v23-1-0), transform var(--hide-animation-duration) var(--magritte-semantic-animation-ease-base-timing-function-v23-1-0), top var(--stack-animation-duration) var(--magritte-semantic-animation-ease-base-timing-function-v23-1-0), bottom var(--stack-animation-duration) var(--magritte-semantic-animation-ease-base-timing-function-v23-1-0);
|
|
229
206
|
}
|
|
230
|
-
.magritte-exit-
|
|
207
|
+
.magritte-exit-active_autohide___jvdWc_6-0-1{
|
|
231
208
|
opacity:0;
|
|
232
|
-
|
|
209
|
+
transform:scale(0.75);
|
|
210
|
+
transition:opacity var(--hide-animation-duration) var(--magritte-semantic-animation-ease-base-timing-function-v23-1-0), transform var(--hide-animation-duration) var(--magritte-semantic-animation-ease-base-timing-function-v23-1-0), top var(--stack-animation-duration) var(--magritte-semantic-animation-ease-base-timing-function-v23-1-0), bottom var(--stack-animation-duration) var(--magritte-semantic-animation-ease-base-timing-function-v23-1-0);
|
|
233
211
|
}
|
|
234
|
-
.magritte-exit-
|
|
212
|
+
.magritte-exit-done___DK8l2_6-0-1{
|
|
235
213
|
opacity:0;
|
|
214
|
+
transform:scale(0.75);
|
|
236
215
|
}
|
package/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { Snackbar } from '@hh.ru/magritte-ui-snackbar/Snackbar';
|
|
2
2
|
export { SnackbarContainer } from '@hh.ru/magritte-ui-snackbar/SnackbarContainer';
|
|
3
3
|
export { SnackbarContextProvider } from '@hh.ru/magritte-ui-snackbar/SnackbarContextProvider';
|
|
4
|
-
export type { SnackbarProps, SnackbarContainerProps } from '@hh.ru/magritte-ui-snackbar/types';
|
|
4
|
+
export type { SnackbarProps, SnackbarContainerProps, Align } from '@hh.ru/magritte-ui-snackbar/types';
|
|
5
5
|
export { useAriaSnackbar } from '@hh.ru/magritte-ui-snackbar/useAriaSnackbar';
|
package/index.js
CHANGED
|
@@ -7,16 +7,15 @@ import 'react';
|
|
|
7
7
|
import './context.js';
|
|
8
8
|
import './types.js';
|
|
9
9
|
import 'react/jsx-runtime';
|
|
10
|
-
import './snackbar-
|
|
10
|
+
import './snackbar-BUXYCBno.js';
|
|
11
11
|
import 'react-dom';
|
|
12
12
|
import './SnackbarRenderer.js';
|
|
13
13
|
import 'react-transition-group';
|
|
14
14
|
import 'classnames';
|
|
15
|
-
import '@hh.ru/magritte-common-func-utils';
|
|
16
15
|
import '@hh.ru/magritte-common-keyboard';
|
|
17
|
-
import '@hh.ru/magritte-common-resize';
|
|
18
16
|
import '@hh.ru/magritte-common-use-multiple-refs';
|
|
19
17
|
import '@hh.ru/magritte-common-use-swipe';
|
|
18
|
+
import '@hh.ru/magritte-ui-divider';
|
|
20
19
|
import '@hh.ru/magritte-ui-icon/icon';
|
|
21
20
|
import '@hh.ru/magritte-ui-layer';
|
|
22
21
|
import '@hh.ru/magritte-ui-link';
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hh.ru/magritte-ui-snackbar",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.0.1",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"types": "index.d.ts",
|
|
6
6
|
"sideEffects": [
|
|
@@ -26,9 +26,10 @@
|
|
|
26
26
|
"@hh.ru/magritte-common-use-swipe": "3.1.6",
|
|
27
27
|
"@hh.ru/magritte-design-tokens": "23.1.0",
|
|
28
28
|
"@hh.ru/magritte-internal-layer-name": "3.0.2",
|
|
29
|
+
"@hh.ru/magritte-ui-divider": "3.0.3",
|
|
29
30
|
"@hh.ru/magritte-ui-icon": "12.3.0",
|
|
30
31
|
"@hh.ru/magritte-ui-layer": "3.0.2",
|
|
31
|
-
"@hh.ru/magritte-ui-link": "6.0.
|
|
32
|
+
"@hh.ru/magritte-ui-link": "6.0.8",
|
|
32
33
|
"@hh.ru/magritte-ui-timer": "1.2.58",
|
|
33
34
|
"@hh.ru/magritte-ui-typography": "4.2.0"
|
|
34
35
|
},
|
|
@@ -44,5 +45,5 @@
|
|
|
44
45
|
"publishConfig": {
|
|
45
46
|
"access": "public"
|
|
46
47
|
},
|
|
47
|
-
"gitHead": "
|
|
48
|
+
"gitHead": "7d23d2d4ae89834e27894b920fd6e2c59e8c3a4c"
|
|
48
49
|
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import './index.css';
|
|
2
|
+
var styles = {"snackbar-container":"magritte-snackbar-container___SeRql_6-0-1","snackbarContainer":"magritte-snackbar-container___SeRql_6-0-1","snackbar-animation-timeout":"magritte-snackbar-animation-timeout___EQLvG_6-0-1","snackbarAnimationTimeout":"magritte-snackbar-animation-timeout___EQLvG_6-0-1","snackbar":"magritte-snackbar___jgq4H_6-0-1","snackbar_stretched":"magritte-snackbar_stretched___xVhgJ_6-0-1","snackbarStretched":"magritte-snackbar_stretched___xVhgJ_6-0-1","snackbar_align-top":"magritte-snackbar_align-top___WWWbk_6-0-1","snackbarAlignTop":"magritte-snackbar_align-top___WWWbk_6-0-1","snackbar_align-bottom":"magritte-snackbar_align-bottom___tCBBP_6-0-1","snackbarAlignBottom":"magritte-snackbar_align-bottom___tCBBP_6-0-1","snackbar-in-body":"magritte-snackbar-in-body___Zer4o_6-0-1","snackbarInBody":"magritte-snackbar-in-body___Zer4o_6-0-1","snackbar-content":"magritte-snackbar-content___MlP5J_6-0-1","snackbarContent":"magritte-snackbar-content___MlP5J_6-0-1","snackbar-addon":"magritte-snackbar-addon___-eJn7_6-0-1","snackbarAddon":"magritte-snackbar-addon___-eJn7_6-0-1","snackbar-text":"magritte-snackbar-text___PCxnB_6-0-1","snackbarText":"magritte-snackbar-text___PCxnB_6-0-1","snackbar-text-wrapper":"magritte-snackbar-text-wrapper___SH6YB_6-0-1","snackbarTextWrapper":"magritte-snackbar-text-wrapper___SH6YB_6-0-1","action":"magritte-action___Yjp2t_6-0-1","snackbar-close":"magritte-snackbar-close___U8YT5_6-0-1","snackbarClose":"magritte-snackbar-close___U8YT5_6-0-1","divider":"magritte-divider___GQ492_6-0-1","appearTop":"magritte-appearTop___UJQ6-_6-0-1","appearBottom":"magritte-appearBottom___wDoOa_6-0-1","appear-active":"magritte-appear-active___Kl7by_6-0-1","appearActive":"magritte-appear-active___Kl7by_6-0-1","appear-done":"magritte-appear-done___3g7bl_6-0-1","appearDone":"magritte-appear-done___3g7bl_6-0-1","exit":"magritte-exit___MsYCK_6-0-1","exit-active":"magritte-exit-active___I4AYt_6-0-1","exitActive":"magritte-exit-active___I4AYt_6-0-1","exit-active_autohide":"magritte-exit-active_autohide___jvdWc_6-0-1","exitActiveAutohide":"magritte-exit-active_autohide___jvdWc_6-0-1","exit-done":"magritte-exit-done___DK8l2_6-0-1","exitDone":"magritte-exit-done___DK8l2_6-0-1"};
|
|
3
|
+
|
|
4
|
+
export { styles as s };
|
|
5
|
+
//# sourceMappingURL=snackbar-BUXYCBno.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snackbar-BUXYCBno.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
package/types.d.ts
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
import type { ReactNode, PropsWithChildren } from 'react';
|
|
2
|
-
export
|
|
3
|
-
Horizontal = "horizontal",
|
|
4
|
-
Vertical = "vertical"
|
|
5
|
-
}
|
|
2
|
+
export type Align = 'top' | 'bottom';
|
|
6
3
|
export declare enum SnackbarTransitionName {
|
|
7
4
|
Show = "show",
|
|
8
5
|
Hide = "hide",
|
|
9
6
|
Autohide = "autohide",
|
|
10
|
-
Replace = "replace",
|
|
11
7
|
RemoveImmediately = "removeImmediately"
|
|
12
8
|
}
|
|
13
9
|
export interface AriaSnackbarProps {
|
|
@@ -32,7 +28,7 @@ interface BaseSnackbarProps extends AriaSnackbarProps {
|
|
|
32
28
|
/**
|
|
33
29
|
* Край экрана или контейнера, относительно которого снекбар позиционируется
|
|
34
30
|
* */
|
|
35
|
-
align?:
|
|
31
|
+
align?: Align;
|
|
36
32
|
/**
|
|
37
33
|
* Время aвтоматического скрытия уведомления в мс(дефолт 6000). Если не нужно скрывать
|
|
38
34
|
* по истечению времени, тогда нужно передать 0.
|
|
@@ -56,6 +52,10 @@ interface BaseSnackbarProps extends AriaSnackbarProps {
|
|
|
56
52
|
* удаления компонента из дерева
|
|
57
53
|
**/
|
|
58
54
|
removeOnUnmount?: boolean;
|
|
55
|
+
/** Флаг включающий растягивание на всю ширину контейнера */
|
|
56
|
+
stretched?: boolean;
|
|
57
|
+
/** Кастомный data-qa для тестирования */
|
|
58
|
+
'data-qa'?: string;
|
|
59
59
|
}
|
|
60
60
|
interface SnackbarPropsWithClose {
|
|
61
61
|
/**
|
|
@@ -86,16 +86,23 @@ interface SnackbarPropsWithTimer {
|
|
|
86
86
|
showTimer: true;
|
|
87
87
|
}
|
|
88
88
|
export type SnackbarProps = BaseSnackbarProps & (SnackbarPropsWithAddon | SnackbarPropsWithTimer) & (SnackbarPropsWithClose | SnackbarPropsWithoutClose);
|
|
89
|
-
export
|
|
90
|
-
animateIn: VoidFunction;
|
|
89
|
+
export interface SnackbarInternalState {
|
|
91
90
|
animateOut: (transition: SnackbarTransitionName.Hide | SnackbarTransitionName.Autohide | SnackbarTransitionName.RemoveImmediately) => void;
|
|
92
91
|
isShown: () => boolean;
|
|
93
92
|
onShown: VoidFunction;
|
|
94
93
|
transition: SnackbarTransitionName;
|
|
95
|
-
|
|
96
|
-
|
|
94
|
+
position: number;
|
|
95
|
+
stretched?: boolean;
|
|
96
|
+
}
|
|
97
|
+
export interface SnackbarHelper {
|
|
98
|
+
animateIn: VoidFunction;
|
|
99
|
+
}
|
|
100
|
+
export interface SnackbarRenderHelper {
|
|
97
101
|
timeout: number;
|
|
98
|
-
|
|
102
|
+
container: HTMLElement;
|
|
103
|
+
}
|
|
104
|
+
export type SnackbarState = SnackbarProps & SnackbarInternalState & SnackbarHelper;
|
|
105
|
+
export type SnackbarRendererProps = SnackbarState & SnackbarRenderHelper;
|
|
99
106
|
export interface SnackbarContainerProps extends PropsWithChildren {
|
|
100
107
|
/**
|
|
101
108
|
* Уникальный идентификатор контейнера
|
package/types.js
CHANGED
|
@@ -1,17 +1,11 @@
|
|
|
1
1
|
import './index.css';
|
|
2
|
-
var SnackbarLayout;
|
|
3
|
-
(function (SnackbarLayout) {
|
|
4
|
-
SnackbarLayout["Horizontal"] = "horizontal";
|
|
5
|
-
SnackbarLayout["Vertical"] = "vertical";
|
|
6
|
-
})(SnackbarLayout || (SnackbarLayout = {}));
|
|
7
2
|
var SnackbarTransitionName;
|
|
8
3
|
(function (SnackbarTransitionName) {
|
|
9
4
|
SnackbarTransitionName["Show"] = "show";
|
|
10
5
|
SnackbarTransitionName["Hide"] = "hide";
|
|
11
6
|
SnackbarTransitionName["Autohide"] = "autohide";
|
|
12
|
-
SnackbarTransitionName["Replace"] = "replace";
|
|
13
7
|
SnackbarTransitionName["RemoveImmediately"] = "removeImmediately";
|
|
14
8
|
})(SnackbarTransitionName || (SnackbarTransitionName = {}));
|
|
15
9
|
|
|
16
|
-
export {
|
|
10
|
+
export { SnackbarTransitionName };
|
|
17
11
|
//# sourceMappingURL=types.js.map
|
package/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sources":["../src/types.ts"],"sourcesContent":["import type { ReactNode, PropsWithChildren } from 'react';\n\nexport
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../src/types.ts"],"sourcesContent":["import type { ReactNode, PropsWithChildren } from 'react';\n\nexport type Align = 'top' | 'bottom';\n\nexport enum SnackbarTransitionName {\n Show = 'show',\n Hide = 'hide',\n Autohide = 'autohide',\n RemoveImmediately = 'removeImmediately',\n}\n\nexport interface AriaSnackbarProps {\n /**\n * Aтрибут role, логика выбора описана в разделе доступность\n **/\n role?: 'status' | 'alertdialog' | 'alert';\n /**\n * Aтрибут aria-label\n **/\n 'aria-label'?: string;\n}\n\ninterface BaseSnackbarProps extends AriaSnackbarProps {\n /**\n * Cодержимое уведомления (текст, без каких либо активных компонентов)\n **/\n children: ReactNode;\n /**\n * Текст действия, фокусирует юзера на уведомлении\n **/\n actionLabel?: string;\n /**\n * Край экрана или контейнера, относительно которого снекбар позиционируется\n * */\n align?: Align;\n /**\n * Время aвтоматического скрытия уведомления в мс(дефолт 6000). Если не нужно скрывать\n * по истечению времени, тогда нужно передать 0.\n **/\n autohideTime?: number;\n /**\n * Идентификатор контейнера, в котором отрисуется компонент\n **/\n containerId?: string;\n /**\n * Колбек действия, вызывается после нажатия на действие\n **/\n onAction?: VoidFunction;\n /**\n * Колбек закрытия компонента, вызывается после скрытия\n **/\n onClose?: VoidFunction;\n /**\n * Флаг, который отвечает за скрытие снекбара при размонтировании компонента. Если он установлен в false,\n * то снекбар скроется только после закрытия его пользователем или по истечении времени автоскрытия даже в случае\n * удаления компонента из дерева\n **/\n removeOnUnmount?: boolean;\n /** Флаг включающий растягивание на всю ширину контейнера */\n stretched?: boolean;\n /** Кастомный data-qa для тестирования */\n 'data-qa'?: string;\n}\n\ninterface SnackbarPropsWithClose {\n /**\n * Булев флаг, который отвечает за показ кнопки закрытия\n **/\n showClose?: true;\n /**\n * Aria-label атрибут для кнопки закрытия, устанавливается в случае если показываем кнопку закрытия\n **/\n 'aria-label-close'?: string;\n}\n\ninterface SnackbarPropsWithoutClose {\n showClose?: false;\n 'aria-label-close'?: never;\n}\n\ninterface SnackbarPropsWithAddon {\n /**\n * Компонент, который отрисуется в контейнере с левой стороны children, размер 24*24px\n **/\n addon?: ReactNode;\n showTimer?: false;\n}\n\ninterface SnackbarPropsWithTimer {\n addon?: never;\n /**\n * Булев флаг, который отвечает за показ таймера закрытия компонента, вместо на месте addon\n **/\n showTimer: true;\n}\n\nexport type SnackbarProps = BaseSnackbarProps &\n (SnackbarPropsWithAddon | SnackbarPropsWithTimer) &\n (SnackbarPropsWithClose | SnackbarPropsWithoutClose);\n\nexport interface SnackbarInternalState {\n animateOut: (\n transition:\n | SnackbarTransitionName.Hide\n | SnackbarTransitionName.Autohide\n | SnackbarTransitionName.RemoveImmediately\n ) => void;\n isShown: () => boolean;\n onShown: VoidFunction;\n transition: SnackbarTransitionName;\n position: number;\n stretched?: boolean;\n}\n\nexport interface SnackbarHelper {\n animateIn: VoidFunction;\n}\n\nexport interface SnackbarRenderHelper {\n timeout: number;\n container: HTMLElement;\n}\n\nexport type SnackbarState = SnackbarProps & SnackbarInternalState & SnackbarHelper;\n\nexport type SnackbarRendererProps = SnackbarState & SnackbarRenderHelper;\n\nexport interface SnackbarContainerProps extends PropsWithChildren {\n /**\n * Уникальный идентификатор контейнера\n **/\n id: string;\n}\n"],"names":[],"mappings":"IAIY,uBAKX;AALD,CAAA,UAAY,sBAAsB,EAAA;AAC9B,IAAA,sBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,sBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,sBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,sBAAA,CAAA,mBAAA,CAAA,GAAA,mBAAuC,CAAA;AAC3C,CAAC,EALW,sBAAsB,KAAtB,sBAAsB,GAKjC,EAAA,CAAA,CAAA;;;;"}
|
package/snackbar-0C5Em6lA.js
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import './index.css';
|
|
2
|
-
var styles = {"snackbar-container":"magritte-snackbar-container___SeRql_5-1-29","snackbarContainer":"magritte-snackbar-container___SeRql_5-1-29","snackbar-animation-timeout":"magritte-snackbar-animation-timeout___EQLvG_5-1-29","snackbarAnimationTimeout":"magritte-snackbar-animation-timeout___EQLvG_5-1-29","snackbar":"magritte-snackbar___jgq4H_5-1-29","snackbar_align-top":"magritte-snackbar_align-top___WWWbk_5-1-29","snackbarAlignTop":"magritte-snackbar_align-top___WWWbk_5-1-29","snackbar_align-bottom":"magritte-snackbar_align-bottom___tCBBP_5-1-29","snackbarAlignBottom":"magritte-snackbar_align-bottom___tCBBP_5-1-29","snackbar-in-body":"magritte-snackbar-in-body___Zer4o_5-1-29","snackbarInBody":"magritte-snackbar-in-body___Zer4o_5-1-29","snackbar-content":"magritte-snackbar-content___MlP5J_5-1-29","snackbarContent":"magritte-snackbar-content___MlP5J_5-1-29","snackbar-addon":"magritte-snackbar-addon___-eJn7_5-1-29","snackbarAddon":"magritte-snackbar-addon___-eJn7_5-1-29","snackbar-text":"magritte-snackbar-text___PCxnB_5-1-29","snackbarText":"magritte-snackbar-text___PCxnB_5-1-29","snackbar-text-and-action":"magritte-snackbar-text-and-action___weegp_5-1-29","snackbarTextAndAction":"magritte-snackbar-text-and-action___weegp_5-1-29","snackbar-layout-horizontal":"magritte-snackbar-layout-horizontal___WrBPj_5-1-29","snackbarLayoutHorizontal":"magritte-snackbar-layout-horizontal___WrBPj_5-1-29","snackbar-close":"magritte-snackbar-close___U8YT5_5-1-29","snackbarClose":"magritte-snackbar-close___U8YT5_5-1-29","snackbar-layout-vertical":"magritte-snackbar-layout-vertical___aR52S_5-1-29","snackbarLayoutVertical":"magritte-snackbar-layout-vertical___aR52S_5-1-29","appear":"magritte-appear___aGbJS_5-1-29","appear-active":"magritte-appear-active___Kl7by_5-1-29","appearActive":"magritte-appear-active___Kl7by_5-1-29","appear-done":"magritte-appear-done___3g7bl_5-1-29","appearDone":"magritte-appear-done___3g7bl_5-1-29","exit":"magritte-exit___MsYCK_5-1-29","exit-active":"magritte-exit-active___I4AYt_5-1-29","exitActive":"magritte-exit-active___I4AYt_5-1-29","exit-active_autohide":"magritte-exit-active_autohide___jvdWc_5-1-29","exitActiveAutohide":"magritte-exit-active_autohide___jvdWc_5-1-29","exit-done":"magritte-exit-done___DK8l2_5-1-29","exitDone":"magritte-exit-done___DK8l2_5-1-29"};
|
|
3
|
-
|
|
4
|
-
export { styles as s };
|
|
5
|
-
//# sourceMappingURL=snackbar-0C5Em6lA.js.map
|
package/snackbar-0C5Em6lA.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"snackbar-0C5Em6lA.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|