@transferwise/components 0.0.0-experimental-4b93e2b → 0.0.0-experimental-f144cf1
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/build/Calendar/DateHeader/DateHeader.js +6 -2
- package/build/Calendar/DateHeader/DateHeader.js.map +1 -1
- package/build/Calendar/DateHeader/DateHeader.mjs +7 -3
- package/build/Calendar/DateHeader/DateHeader.mjs.map +1 -1
- package/build/Carousel/Carousel.js +2 -2
- package/build/Carousel/Carousel.js.map +1 -1
- package/build/Carousel/Carousel.mjs +3 -3
- package/build/Carousel/Carousel.mjs.map +1 -1
- package/build/Inputs/SelectInput/OptionContent/SelectInputOptionContent.js +3 -4
- package/build/Inputs/SelectInput/OptionContent/SelectInputOptionContent.js.map +1 -1
- package/build/Inputs/SelectInput/OptionContent/SelectInputOptionContent.mjs +3 -4
- package/build/Inputs/SelectInput/OptionContent/SelectInputOptionContent.mjs.map +1 -1
- package/build/ListItem/Navigation/ListItemNavigation.js +1 -1
- package/build/ListItem/Navigation/ListItemNavigation.js.map +1 -1
- package/build/ListItem/Navigation/ListItemNavigation.mjs +2 -2
- package/build/ListItem/Navigation/ListItemNavigation.mjs.map +1 -1
- package/build/PhoneNumberInput/PhoneNumberInput.js +1 -2
- package/build/PhoneNumberInput/PhoneNumberInput.js.map +1 -1
- package/build/PhoneNumberInput/PhoneNumberInput.mjs +1 -2
- package/build/PhoneNumberInput/PhoneNumberInput.mjs.map +1 -1
- package/build/PromoCard/Indicator/PromoCardIndicator.js +1 -1
- package/build/PromoCard/Indicator/PromoCardIndicator.js.map +1 -1
- package/build/PromoCard/Indicator/PromoCardIndicator.mjs +2 -2
- package/build/PromoCard/Indicator/PromoCardIndicator.mjs.map +1 -1
- package/build/Snackbar/Snackbar.js +212 -108
- package/build/Snackbar/Snackbar.js.map +1 -1
- package/build/Snackbar/Snackbar.messages.js +14 -0
- package/build/Snackbar/Snackbar.messages.js.map +1 -0
- package/build/Snackbar/Snackbar.messages.mjs +10 -0
- package/build/Snackbar/Snackbar.messages.mjs.map +1 -0
- package/build/Snackbar/Snackbar.mjs +213 -107
- package/build/Snackbar/Snackbar.mjs.map +1 -1
- package/build/Snackbar/SnackbarContext.js.map +1 -1
- package/build/Snackbar/SnackbarContext.mjs.map +1 -1
- package/build/Snackbar/SnackbarPortal.js +92 -0
- package/build/Snackbar/SnackbarPortal.js.map +1 -0
- package/build/Snackbar/SnackbarPortal.mjs +89 -0
- package/build/Snackbar/SnackbarPortal.mjs.map +1 -0
- package/build/Snackbar/SnackbarProvider.js +21 -31
- package/build/Snackbar/SnackbarProvider.js.map +1 -1
- package/build/Snackbar/SnackbarProvider.mjs +22 -32
- package/build/Snackbar/SnackbarProvider.mjs.map +1 -1
- package/build/Snackbar/constants.js +14 -0
- package/build/Snackbar/constants.js.map +1 -0
- package/build/Snackbar/constants.mjs +8 -0
- package/build/Snackbar/constants.mjs.map +1 -0
- package/build/Snackbar/useSnackbarAutoDismiss.js +135 -0
- package/build/Snackbar/useSnackbarAutoDismiss.js.map +1 -0
- package/build/Snackbar/useSnackbarAutoDismiss.mjs +131 -0
- package/build/Snackbar/useSnackbarAutoDismiss.mjs.map +1 -0
- package/build/Snackbar/useSnackbarManager.js +164 -0
- package/build/Snackbar/useSnackbarManager.js.map +1 -0
- package/build/Snackbar/useSnackbarManager.mjs +160 -0
- package/build/Snackbar/useSnackbarManager.mjs.map +1 -0
- package/build/Snackbar/useSnackbarSwipeDismiss.js +114 -0
- package/build/Snackbar/useSnackbarSwipeDismiss.js.map +1 -0
- package/build/Snackbar/useSnackbarSwipeDismiss.mjs +110 -0
- package/build/Snackbar/useSnackbarSwipeDismiss.mjs.map +1 -0
- package/build/common/PropsValues/typography.js +0 -6
- package/build/common/PropsValues/typography.js.map +1 -1
- package/build/common/PropsValues/typography.mjs +0 -6
- package/build/common/PropsValues/typography.mjs.map +1 -1
- package/build/i18n/en.json +1 -0
- package/build/i18n/en.json.js +1 -0
- package/build/i18n/en.json.js.map +1 -1
- package/build/i18n/en.json.mjs +1 -0
- package/build/i18n/en.json.mjs.map +1 -1
- package/build/index.js +3 -1
- package/build/index.js.map +1 -1
- package/build/index.mjs +2 -1
- package/build/index.mjs.map +1 -1
- package/build/main.css +864 -1509
- package/build/styles/Button/Button.css +3 -0
- package/build/styles/DateInput/DateInput.css +0 -13
- package/build/styles/Inputs/Input/Input.css +24 -0
- package/build/styles/Inputs/TextArea/TextArea.css +24 -0
- package/build/styles/ListItem/ListItem.css +1 -1
- package/build/styles/PhoneNumberInput/PhoneNumberInput.css +0 -3
- package/build/styles/Popover/Popover.css +6 -0
- package/build/styles/PromoCard/PromoCard.css +3 -0
- package/build/styles/Snackbar/Snackbar.css +182 -61
- package/build/styles/_deprecated/Select/Select.css +6 -0
- package/build/styles/css/accordion.css +12 -0
- package/build/styles/css/button-groups.css +6 -0
- package/build/styles/css/buttons.css +2 -0
- package/build/styles/css/decision.css +12 -0
- package/build/styles/css/dropdowns.css +18 -2
- package/build/styles/css/droppable.css +6 -0
- package/build/styles/css/footer.css +12 -0
- package/build/styles/css/input-groups.css +42 -2
- package/build/styles/css/list-group.css +6 -0
- package/build/styles/css/navbar.css +18 -2
- package/build/styles/css/neptune-core.css +512 -4
- package/build/styles/css/neptune.css +640 -1426
- package/build/styles/css/popovers.css +18 -0
- package/build/styles/css/tooltip.css +6 -0
- package/build/styles/less/neptune-tokens.less +0 -8
- package/build/styles/main.css +864 -1509
- package/build/styles/props/neptune-tokens.css +0 -8
- package/build/styles/styles/less/accordion.css +12 -0
- package/build/styles/styles/less/button-groups.css +6 -0
- package/build/styles/styles/less/buttons.css +2 -0
- package/build/styles/styles/less/decision.css +12 -0
- package/build/styles/styles/less/dropdowns.css +18 -2
- package/build/styles/styles/less/droppable.css +6 -0
- package/build/styles/styles/less/footer.css +12 -0
- package/build/styles/styles/less/forms/bootstrap-forms.css +24 -2
- package/build/styles/styles/less/input-groups.css +42 -2
- package/build/styles/styles/less/list-group.css +6 -0
- package/build/styles/styles/less/navbar.css +18 -2
- package/build/styles/styles/less/neptune-core.css +512 -4
- package/build/styles/styles/less/neptune.css +640 -1426
- package/build/styles/styles/less/popovers.css +18 -0
- package/build/styles/styles/less/tooltip.css +6 -0
- package/build/types/Inputs/SelectInput/OptionContent/SelectInputOptionContent.d.ts +1 -2
- package/build/types/Inputs/SelectInput/OptionContent/SelectInputOptionContent.d.ts.map +1 -1
- package/build/types/PhoneNumberInput/PhoneNumberInput.d.ts.map +1 -1
- package/build/types/Snackbar/Snackbar.d.ts +41 -24
- package/build/types/Snackbar/Snackbar.d.ts.map +1 -1
- package/build/types/Snackbar/Snackbar.messages.d.ts +9 -0
- package/build/types/Snackbar/Snackbar.messages.d.ts.map +1 -0
- package/build/types/Snackbar/Snackbar.types.d.ts +21 -0
- package/build/types/Snackbar/Snackbar.types.d.ts.map +1 -0
- package/build/types/Snackbar/SnackbarContext.d.ts +2 -2
- package/build/types/Snackbar/SnackbarContext.d.ts.map +1 -1
- package/build/types/Snackbar/SnackbarPortal.d.ts +5 -0
- package/build/types/Snackbar/SnackbarPortal.d.ts.map +1 -0
- package/build/types/Snackbar/SnackbarProvider.d.ts +6 -0
- package/build/types/Snackbar/SnackbarProvider.d.ts.map +1 -1
- package/build/types/Snackbar/constants.d.ts +6 -0
- package/build/types/Snackbar/constants.d.ts.map +1 -0
- package/build/types/Snackbar/index.d.ts +3 -1
- package/build/types/Snackbar/index.d.ts.map +1 -1
- package/build/types/Snackbar/useSnackbar.d.ts +1 -1
- package/build/types/Snackbar/useSnackbar.d.ts.map +1 -1
- package/build/types/Snackbar/useSnackbarAutoDismiss.d.ts +18 -0
- package/build/types/Snackbar/useSnackbarAutoDismiss.d.ts.map +1 -0
- package/build/types/Snackbar/useSnackbarManager.d.ts +17 -0
- package/build/types/Snackbar/useSnackbarManager.d.ts.map +1 -0
- package/build/types/Snackbar/useSnackbarSwipeDismiss.d.ts +11 -0
- package/build/types/Snackbar/useSnackbarSwipeDismiss.d.ts.map +1 -0
- package/build/types/common/PropsValues/typography.d.ts +1 -13
- package/build/types/common/PropsValues/typography.d.ts.map +1 -1
- package/build/types/index.d.ts +2 -2
- package/build/types/index.d.ts.map +1 -1
- package/build/types/test-utils/index.d.ts +2 -0
- package/build/types/test-utils/index.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/Button/Button.css +3 -0
- package/src/Button/Button.less +16 -0
- package/src/Button/_stories/Button.test.story.tsx +12 -12
- package/src/Calendar/DateHeader/DateHeader.tsx +3 -3
- package/src/Carousel/Carousel.tsx +3 -3
- package/src/DateInput/DateInput.css +0 -13
- package/src/DateInput/DateInput.less +2 -10
- package/src/DateInput/_stories/DateInput.test.story.tsx +13 -0
- package/src/Display/_stories/Display.story.tsx +6 -20
- package/src/ExpressiveMoneyInput/_stories/ExpressiveMoneyInput.rtl.test.story.tsx +1 -1
- package/src/InputWithDisplayFormat/_stories/InputWithDisplayFormat.test.story.tsx +0 -52
- package/src/Inputs/Input/Input.css +24 -0
- package/src/Inputs/SelectInput/OptionContent/SelectInputOptionContent.tsx +1 -4
- package/src/Inputs/SelectInput/SelectInput.test.tsx +0 -74
- package/src/Inputs/TextArea/TextArea.css +24 -0
- package/src/ListItem/ListItem.css +1 -1
- package/src/ListItem/ListItem.grid.less +4 -4
- package/src/ListItem/ListItem.less +1 -1
- package/src/ListItem/Navigation/ListItemNavigation.tsx +2 -2
- package/src/PhoneNumberInput/PhoneNumberInput.css +0 -3
- package/src/PhoneNumberInput/PhoneNumberInput.less +2 -10
- package/src/PhoneNumberInput/PhoneNumberInput.tsx +0 -1
- package/src/PhoneNumberInput/_stories/PhoneNumberInput.rtl.test.story.tsx +1 -1
- package/src/Popover/Popover.css +6 -0
- package/src/PromoCard/Indicator/PromoCardIndicator.tsx +2 -2
- package/src/PromoCard/PromoCard.css +3 -0
- package/src/PromoCard/PromoCard.less +5 -0
- package/src/Prompt/CriticalBanner/_stories/CriticalBanner.test.story.tsx +1 -1
- package/src/Snackbar/Snackbar.css +182 -61
- package/src/Snackbar/Snackbar.less +185 -56
- package/src/Snackbar/Snackbar.messages.ts +9 -0
- package/src/Snackbar/Snackbar.test.tsx +697 -0
- package/src/Snackbar/Snackbar.tsx +227 -96
- package/src/Snackbar/Snackbar.types.ts +26 -0
- package/src/Snackbar/SnackbarContext.ts +2 -2
- package/src/Snackbar/SnackbarPortal.tsx +110 -0
- package/src/Snackbar/SnackbarProvider.test.tsx +202 -0
- package/src/Snackbar/SnackbarProvider.tsx +25 -25
- package/src/Snackbar/_stories/Snackbar.accessibility.docs.mdx +73 -0
- package/src/Snackbar/_stories/Snackbar.rtl.test.story.tsx +1 -12
- package/src/Snackbar/_stories/Snackbar.story.tsx +447 -62
- package/src/Snackbar/_stories/Snackbar.test.story.tsx +91 -16
- package/src/Snackbar/constants.ts +5 -0
- package/src/Snackbar/index.ts +3 -1
- package/src/Snackbar/useSnackbarAutoDismiss.ts +155 -0
- package/src/Snackbar/useSnackbarManager.ts +181 -0
- package/src/Snackbar/useSnackbarSwipeDismiss.ts +129 -0
- package/src/_deprecated/Select/Select.css +6 -0
- package/src/common/PropsValues/typography.ts +1 -20
- package/src/i18n/en.json +1 -1
- package/src/index.ts +7 -2
- package/src/main.css +864 -1509
- package/src/styles/less/accordion.css +12 -0
- package/src/styles/less/button-groups.css +6 -0
- package/src/styles/less/buttons.css +2 -0
- package/src/styles/less/core/_typography.less +194 -26
- package/src/styles/less/decision.css +12 -0
- package/src/styles/less/dropdowns.css +18 -2
- package/src/styles/less/droppable.css +6 -0
- package/src/styles/less/footer.css +12 -0
- package/src/styles/less/forms/bootstrap-forms.css +24 -2
- package/src/styles/less/input-groups.css +42 -2
- package/src/styles/less/list-group.css +6 -0
- package/src/styles/less/navbar.css +18 -2
- package/src/styles/less/neptune-core.css +512 -4
- package/src/styles/less/neptune.bundle.less +0 -2
- package/src/styles/less/neptune.css +640 -1426
- package/src/styles/less/popovers.css +18 -0
- package/src/styles/less/tooltip.css +6 -0
- package/src/DateInput/_stories/DateInput.rtl.test.story.tsx +0 -36
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var React = require('react');
|
|
6
|
+
|
|
7
|
+
const emptyState = {
|
|
8
|
+
active: null,
|
|
9
|
+
activeHasRendered: false,
|
|
10
|
+
announcementKey: 0,
|
|
11
|
+
pending: null,
|
|
12
|
+
visible: false
|
|
13
|
+
};
|
|
14
|
+
const createInitialState = initialSnackbar => initialSnackbar ? {
|
|
15
|
+
active: {
|
|
16
|
+
id: 1,
|
|
17
|
+
props: initialSnackbar
|
|
18
|
+
},
|
|
19
|
+
activeHasRendered: false,
|
|
20
|
+
announcementKey: 1,
|
|
21
|
+
pending: null,
|
|
22
|
+
visible: true
|
|
23
|
+
} : emptyState;
|
|
24
|
+
const snackbarManagerReducer = (state, action) => {
|
|
25
|
+
switch (action.type) {
|
|
26
|
+
case 'show':
|
|
27
|
+
if (!state.active || !state.activeHasRendered) {
|
|
28
|
+
// Nothing has rendered yet, so consecutive creates from the same React batch collapse to
|
|
29
|
+
// the latest Snackbar instead of trying to animate out an instance that never entered.
|
|
30
|
+
return {
|
|
31
|
+
active: action.instance,
|
|
32
|
+
activeHasRendered: false,
|
|
33
|
+
announcementKey: state.announcementKey + 1,
|
|
34
|
+
pending: null,
|
|
35
|
+
visible: true
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// Latest wins: replace any pending Snackbar while the active one completes its exit.
|
|
39
|
+
return {
|
|
40
|
+
...state,
|
|
41
|
+
pending: action.instance,
|
|
42
|
+
visible: false
|
|
43
|
+
};
|
|
44
|
+
case 'rendered':
|
|
45
|
+
if (state.active?.id !== action.instanceId || state.activeHasRendered) {
|
|
46
|
+
return state;
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
...state,
|
|
50
|
+
activeHasRendered: true
|
|
51
|
+
};
|
|
52
|
+
case 'update':
|
|
53
|
+
if (!state.active) {
|
|
54
|
+
return {
|
|
55
|
+
active: action.instance,
|
|
56
|
+
activeHasRendered: false,
|
|
57
|
+
announcementKey: state.announcementKey + 1,
|
|
58
|
+
pending: null,
|
|
59
|
+
visible: true
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
...state,
|
|
64
|
+
active: {
|
|
65
|
+
...state.active,
|
|
66
|
+
props: action.instance.props
|
|
67
|
+
},
|
|
68
|
+
pending: action.reactivate ? null : state.pending,
|
|
69
|
+
visible: action.reactivate ? true : state.visible,
|
|
70
|
+
announcementKey: state.active.props.text === action.instance.props.text ? state.announcementKey : state.announcementKey + 1
|
|
71
|
+
};
|
|
72
|
+
case 'dismiss':
|
|
73
|
+
if (!state.active) {
|
|
74
|
+
return state;
|
|
75
|
+
}
|
|
76
|
+
return state.activeHasRendered ? {
|
|
77
|
+
...state,
|
|
78
|
+
visible: false
|
|
79
|
+
} : {
|
|
80
|
+
...emptyState,
|
|
81
|
+
announcementKey: state.announcementKey
|
|
82
|
+
};
|
|
83
|
+
case 'exited':
|
|
84
|
+
if (state.active?.id !== action.instanceId) {
|
|
85
|
+
return state;
|
|
86
|
+
}
|
|
87
|
+
if (state.pending) {
|
|
88
|
+
return {
|
|
89
|
+
active: state.pending,
|
|
90
|
+
activeHasRendered: false,
|
|
91
|
+
announcementKey: state.announcementKey + 1,
|
|
92
|
+
pending: null,
|
|
93
|
+
visible: true
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
...emptyState,
|
|
98
|
+
announcementKey: state.announcementKey
|
|
99
|
+
};
|
|
100
|
+
default:
|
|
101
|
+
return state;
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
/** Owns the shared latest-wins and exit-before-enter lifecycle used by Snackbar portals. */
|
|
105
|
+
const useSnackbarManager = initialSnackbar => {
|
|
106
|
+
const [state, dispatch] = React.useReducer(snackbarManagerReducer, initialSnackbar, createInitialState);
|
|
107
|
+
const nextInstanceId = React.useRef(initialSnackbar ? 1 : 0);
|
|
108
|
+
const createInstance = React.useCallback(props => {
|
|
109
|
+
nextInstanceId.current += 1;
|
|
110
|
+
return {
|
|
111
|
+
id: nextInstanceId.current,
|
|
112
|
+
props
|
|
113
|
+
};
|
|
114
|
+
}, []);
|
|
115
|
+
const showSnackbar = React.useCallback(props => dispatch({
|
|
116
|
+
type: 'show',
|
|
117
|
+
instance: createInstance(props)
|
|
118
|
+
}), [createInstance]);
|
|
119
|
+
const updateSnackbar = React.useCallback((props, reactivate = false) => dispatch({
|
|
120
|
+
type: 'update',
|
|
121
|
+
instance: createInstance(props),
|
|
122
|
+
reactivate
|
|
123
|
+
}), [createInstance]);
|
|
124
|
+
const dismissSnackbar = React.useCallback(() => dispatch({
|
|
125
|
+
type: 'dismiss'
|
|
126
|
+
}), []);
|
|
127
|
+
const handleExited = React.useCallback(() => {
|
|
128
|
+
if (!state.active) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
state.active.props.onDismiss?.();
|
|
133
|
+
} finally {
|
|
134
|
+
// Consumer callbacks must not prevent a pending Snackbar from being promoted.
|
|
135
|
+
dispatch({
|
|
136
|
+
type: 'exited',
|
|
137
|
+
instanceId: state.active.id
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}, [state.active]);
|
|
141
|
+
React.useEffect(() => {
|
|
142
|
+
if (!state.active || !state.visible || state.activeHasRendered) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
// This runs after React commits the active Snackbar. Later creates can now safely wait for its
|
|
146
|
+
// exit transition; creates dispatched before this point continue to coalesce to the latest.
|
|
147
|
+
dispatch({
|
|
148
|
+
type: 'rendered',
|
|
149
|
+
instanceId: state.active.id
|
|
150
|
+
});
|
|
151
|
+
}, [state.active, state.activeHasRendered, state.visible]);
|
|
152
|
+
return {
|
|
153
|
+
active: state.active,
|
|
154
|
+
announcementKey: state.announcementKey,
|
|
155
|
+
dismissSnackbar,
|
|
156
|
+
handleExited,
|
|
157
|
+
showSnackbar,
|
|
158
|
+
updateSnackbar,
|
|
159
|
+
visible: state.visible
|
|
160
|
+
};
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
exports.default = useSnackbarManager;
|
|
164
|
+
//# sourceMappingURL=useSnackbarManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSnackbarManager.js","sources":["../../src/Snackbar/useSnackbarManager.ts"],"sourcesContent":["import { useCallback, useEffect, useReducer, useRef } from 'react';\n\nimport type { SnackbarProps } from './Snackbar.types';\n\ntype SnackbarInstance = {\n id: number;\n props: SnackbarProps;\n};\n\ntype SnackbarManagerState = {\n active: SnackbarInstance | null;\n activeHasRendered: boolean;\n announcementKey: number;\n pending: SnackbarInstance | null;\n visible: boolean;\n};\n\ntype SnackbarManagerAction =\n | { type: 'show'; instance: SnackbarInstance }\n | { type: 'update'; instance: SnackbarInstance; reactivate: boolean }\n | { type: 'rendered'; instanceId: number }\n | { type: 'dismiss' }\n | { type: 'exited'; instanceId: number };\n\nconst emptyState: SnackbarManagerState = {\n active: null,\n activeHasRendered: false,\n announcementKey: 0,\n pending: null,\n visible: false,\n};\n\nconst createInitialState = (initialSnackbar?: SnackbarProps): SnackbarManagerState =>\n initialSnackbar\n ? {\n active: { id: 1, props: initialSnackbar },\n activeHasRendered: false,\n announcementKey: 1,\n pending: null,\n visible: true,\n }\n : emptyState;\n\nconst snackbarManagerReducer = (\n state: SnackbarManagerState,\n action: SnackbarManagerAction,\n): SnackbarManagerState => {\n switch (action.type) {\n case 'show':\n if (!state.active || !state.activeHasRendered) {\n // Nothing has rendered yet, so consecutive creates from the same React batch collapse to\n // the latest Snackbar instead of trying to animate out an instance that never entered.\n return {\n active: action.instance,\n activeHasRendered: false,\n announcementKey: state.announcementKey + 1,\n pending: null,\n visible: true,\n };\n }\n\n // Latest wins: replace any pending Snackbar while the active one completes its exit.\n return {\n ...state,\n pending: action.instance,\n visible: false,\n };\n case 'rendered':\n if (state.active?.id !== action.instanceId || state.activeHasRendered) {\n return state;\n }\n\n return { ...state, activeHasRendered: true };\n case 'update':\n if (!state.active) {\n return {\n active: action.instance,\n activeHasRendered: false,\n announcementKey: state.announcementKey + 1,\n pending: null,\n visible: true,\n };\n }\n\n return {\n ...state,\n active: { ...state.active, props: action.instance.props },\n pending: action.reactivate ? null : state.pending,\n visible: action.reactivate ? true : state.visible,\n announcementKey:\n state.active.props.text === action.instance.props.text\n ? state.announcementKey\n : state.announcementKey + 1,\n };\n case 'dismiss':\n if (!state.active) {\n return state;\n }\n\n return state.activeHasRendered\n ? { ...state, visible: false }\n : { ...emptyState, announcementKey: state.announcementKey };\n case 'exited':\n if (state.active?.id !== action.instanceId) {\n return state;\n }\n\n if (state.pending) {\n return {\n active: state.pending,\n activeHasRendered: false,\n announcementKey: state.announcementKey + 1,\n pending: null,\n visible: true,\n };\n }\n\n return { ...emptyState, announcementKey: state.announcementKey };\n default:\n return state;\n }\n};\n\n/** Owns the shared latest-wins and exit-before-enter lifecycle used by Snackbar portals. */\nconst useSnackbarManager = (initialSnackbar?: SnackbarProps) => {\n const [state, dispatch] = useReducer(snackbarManagerReducer, initialSnackbar, createInitialState);\n const nextInstanceId = useRef(initialSnackbar ? 1 : 0);\n\n const createInstance = useCallback((props: SnackbarProps): SnackbarInstance => {\n nextInstanceId.current += 1;\n return { id: nextInstanceId.current, props };\n }, []);\n\n const showSnackbar = useCallback(\n (props: SnackbarProps) => dispatch({ type: 'show', instance: createInstance(props) }),\n [createInstance],\n );\n\n const updateSnackbar = useCallback(\n (props: SnackbarProps, reactivate = false) =>\n dispatch({ type: 'update', instance: createInstance(props), reactivate }),\n [createInstance],\n );\n\n const dismissSnackbar = useCallback(() => dispatch({ type: 'dismiss' }), []);\n\n const handleExited = useCallback(() => {\n if (!state.active) {\n return;\n }\n\n try {\n state.active.props.onDismiss?.();\n } finally {\n // Consumer callbacks must not prevent a pending Snackbar from being promoted.\n dispatch({ type: 'exited', instanceId: state.active.id });\n }\n }, [state.active]);\n\n useEffect(() => {\n if (!state.active || !state.visible || state.activeHasRendered) {\n return;\n }\n\n // This runs after React commits the active Snackbar. Later creates can now safely wait for its\n // exit transition; creates dispatched before this point continue to coalesce to the latest.\n dispatch({ type: 'rendered', instanceId: state.active.id });\n }, [state.active, state.activeHasRendered, state.visible]);\n\n return {\n active: state.active,\n announcementKey: state.announcementKey,\n dismissSnackbar,\n handleExited,\n showSnackbar,\n updateSnackbar,\n visible: state.visible,\n };\n};\n\nexport default useSnackbarManager;\n"],"names":["emptyState","active","activeHasRendered","announcementKey","pending","visible","createInitialState","initialSnackbar","id","props","snackbarManagerReducer","state","action","type","instance","instanceId","reactivate","text","useSnackbarManager","dispatch","useReducer","nextInstanceId","useRef","createInstance","useCallback","current","showSnackbar","updateSnackbar","dismissSnackbar","handleExited","onDismiss","useEffect"],"mappings":"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"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { useReducer, useRef, useCallback, useEffect } from 'react';
|
|
2
|
+
|
|
3
|
+
const emptyState = {
|
|
4
|
+
active: null,
|
|
5
|
+
activeHasRendered: false,
|
|
6
|
+
announcementKey: 0,
|
|
7
|
+
pending: null,
|
|
8
|
+
visible: false
|
|
9
|
+
};
|
|
10
|
+
const createInitialState = initialSnackbar => initialSnackbar ? {
|
|
11
|
+
active: {
|
|
12
|
+
id: 1,
|
|
13
|
+
props: initialSnackbar
|
|
14
|
+
},
|
|
15
|
+
activeHasRendered: false,
|
|
16
|
+
announcementKey: 1,
|
|
17
|
+
pending: null,
|
|
18
|
+
visible: true
|
|
19
|
+
} : emptyState;
|
|
20
|
+
const snackbarManagerReducer = (state, action) => {
|
|
21
|
+
switch (action.type) {
|
|
22
|
+
case 'show':
|
|
23
|
+
if (!state.active || !state.activeHasRendered) {
|
|
24
|
+
// Nothing has rendered yet, so consecutive creates from the same React batch collapse to
|
|
25
|
+
// the latest Snackbar instead of trying to animate out an instance that never entered.
|
|
26
|
+
return {
|
|
27
|
+
active: action.instance,
|
|
28
|
+
activeHasRendered: false,
|
|
29
|
+
announcementKey: state.announcementKey + 1,
|
|
30
|
+
pending: null,
|
|
31
|
+
visible: true
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
// Latest wins: replace any pending Snackbar while the active one completes its exit.
|
|
35
|
+
return {
|
|
36
|
+
...state,
|
|
37
|
+
pending: action.instance,
|
|
38
|
+
visible: false
|
|
39
|
+
};
|
|
40
|
+
case 'rendered':
|
|
41
|
+
if (state.active?.id !== action.instanceId || state.activeHasRendered) {
|
|
42
|
+
return state;
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
...state,
|
|
46
|
+
activeHasRendered: true
|
|
47
|
+
};
|
|
48
|
+
case 'update':
|
|
49
|
+
if (!state.active) {
|
|
50
|
+
return {
|
|
51
|
+
active: action.instance,
|
|
52
|
+
activeHasRendered: false,
|
|
53
|
+
announcementKey: state.announcementKey + 1,
|
|
54
|
+
pending: null,
|
|
55
|
+
visible: true
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
...state,
|
|
60
|
+
active: {
|
|
61
|
+
...state.active,
|
|
62
|
+
props: action.instance.props
|
|
63
|
+
},
|
|
64
|
+
pending: action.reactivate ? null : state.pending,
|
|
65
|
+
visible: action.reactivate ? true : state.visible,
|
|
66
|
+
announcementKey: state.active.props.text === action.instance.props.text ? state.announcementKey : state.announcementKey + 1
|
|
67
|
+
};
|
|
68
|
+
case 'dismiss':
|
|
69
|
+
if (!state.active) {
|
|
70
|
+
return state;
|
|
71
|
+
}
|
|
72
|
+
return state.activeHasRendered ? {
|
|
73
|
+
...state,
|
|
74
|
+
visible: false
|
|
75
|
+
} : {
|
|
76
|
+
...emptyState,
|
|
77
|
+
announcementKey: state.announcementKey
|
|
78
|
+
};
|
|
79
|
+
case 'exited':
|
|
80
|
+
if (state.active?.id !== action.instanceId) {
|
|
81
|
+
return state;
|
|
82
|
+
}
|
|
83
|
+
if (state.pending) {
|
|
84
|
+
return {
|
|
85
|
+
active: state.pending,
|
|
86
|
+
activeHasRendered: false,
|
|
87
|
+
announcementKey: state.announcementKey + 1,
|
|
88
|
+
pending: null,
|
|
89
|
+
visible: true
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
...emptyState,
|
|
94
|
+
announcementKey: state.announcementKey
|
|
95
|
+
};
|
|
96
|
+
default:
|
|
97
|
+
return state;
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
/** Owns the shared latest-wins and exit-before-enter lifecycle used by Snackbar portals. */
|
|
101
|
+
const useSnackbarManager = initialSnackbar => {
|
|
102
|
+
const [state, dispatch] = useReducer(snackbarManagerReducer, initialSnackbar, createInitialState);
|
|
103
|
+
const nextInstanceId = useRef(initialSnackbar ? 1 : 0);
|
|
104
|
+
const createInstance = useCallback(props => {
|
|
105
|
+
nextInstanceId.current += 1;
|
|
106
|
+
return {
|
|
107
|
+
id: nextInstanceId.current,
|
|
108
|
+
props
|
|
109
|
+
};
|
|
110
|
+
}, []);
|
|
111
|
+
const showSnackbar = useCallback(props => dispatch({
|
|
112
|
+
type: 'show',
|
|
113
|
+
instance: createInstance(props)
|
|
114
|
+
}), [createInstance]);
|
|
115
|
+
const updateSnackbar = useCallback((props, reactivate = false) => dispatch({
|
|
116
|
+
type: 'update',
|
|
117
|
+
instance: createInstance(props),
|
|
118
|
+
reactivate
|
|
119
|
+
}), [createInstance]);
|
|
120
|
+
const dismissSnackbar = useCallback(() => dispatch({
|
|
121
|
+
type: 'dismiss'
|
|
122
|
+
}), []);
|
|
123
|
+
const handleExited = useCallback(() => {
|
|
124
|
+
if (!state.active) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
try {
|
|
128
|
+
state.active.props.onDismiss?.();
|
|
129
|
+
} finally {
|
|
130
|
+
// Consumer callbacks must not prevent a pending Snackbar from being promoted.
|
|
131
|
+
dispatch({
|
|
132
|
+
type: 'exited',
|
|
133
|
+
instanceId: state.active.id
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}, [state.active]);
|
|
137
|
+
useEffect(() => {
|
|
138
|
+
if (!state.active || !state.visible || state.activeHasRendered) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
// This runs after React commits the active Snackbar. Later creates can now safely wait for its
|
|
142
|
+
// exit transition; creates dispatched before this point continue to coalesce to the latest.
|
|
143
|
+
dispatch({
|
|
144
|
+
type: 'rendered',
|
|
145
|
+
instanceId: state.active.id
|
|
146
|
+
});
|
|
147
|
+
}, [state.active, state.activeHasRendered, state.visible]);
|
|
148
|
+
return {
|
|
149
|
+
active: state.active,
|
|
150
|
+
announcementKey: state.announcementKey,
|
|
151
|
+
dismissSnackbar,
|
|
152
|
+
handleExited,
|
|
153
|
+
showSnackbar,
|
|
154
|
+
updateSnackbar,
|
|
155
|
+
visible: state.visible
|
|
156
|
+
};
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
export { useSnackbarManager as default };
|
|
160
|
+
//# sourceMappingURL=useSnackbarManager.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSnackbarManager.mjs","sources":["../../src/Snackbar/useSnackbarManager.ts"],"sourcesContent":["import { useCallback, useEffect, useReducer, useRef } from 'react';\n\nimport type { SnackbarProps } from './Snackbar.types';\n\ntype SnackbarInstance = {\n id: number;\n props: SnackbarProps;\n};\n\ntype SnackbarManagerState = {\n active: SnackbarInstance | null;\n activeHasRendered: boolean;\n announcementKey: number;\n pending: SnackbarInstance | null;\n visible: boolean;\n};\n\ntype SnackbarManagerAction =\n | { type: 'show'; instance: SnackbarInstance }\n | { type: 'update'; instance: SnackbarInstance; reactivate: boolean }\n | { type: 'rendered'; instanceId: number }\n | { type: 'dismiss' }\n | { type: 'exited'; instanceId: number };\n\nconst emptyState: SnackbarManagerState = {\n active: null,\n activeHasRendered: false,\n announcementKey: 0,\n pending: null,\n visible: false,\n};\n\nconst createInitialState = (initialSnackbar?: SnackbarProps): SnackbarManagerState =>\n initialSnackbar\n ? {\n active: { id: 1, props: initialSnackbar },\n activeHasRendered: false,\n announcementKey: 1,\n pending: null,\n visible: true,\n }\n : emptyState;\n\nconst snackbarManagerReducer = (\n state: SnackbarManagerState,\n action: SnackbarManagerAction,\n): SnackbarManagerState => {\n switch (action.type) {\n case 'show':\n if (!state.active || !state.activeHasRendered) {\n // Nothing has rendered yet, so consecutive creates from the same React batch collapse to\n // the latest Snackbar instead of trying to animate out an instance that never entered.\n return {\n active: action.instance,\n activeHasRendered: false,\n announcementKey: state.announcementKey + 1,\n pending: null,\n visible: true,\n };\n }\n\n // Latest wins: replace any pending Snackbar while the active one completes its exit.\n return {\n ...state,\n pending: action.instance,\n visible: false,\n };\n case 'rendered':\n if (state.active?.id !== action.instanceId || state.activeHasRendered) {\n return state;\n }\n\n return { ...state, activeHasRendered: true };\n case 'update':\n if (!state.active) {\n return {\n active: action.instance,\n activeHasRendered: false,\n announcementKey: state.announcementKey + 1,\n pending: null,\n visible: true,\n };\n }\n\n return {\n ...state,\n active: { ...state.active, props: action.instance.props },\n pending: action.reactivate ? null : state.pending,\n visible: action.reactivate ? true : state.visible,\n announcementKey:\n state.active.props.text === action.instance.props.text\n ? state.announcementKey\n : state.announcementKey + 1,\n };\n case 'dismiss':\n if (!state.active) {\n return state;\n }\n\n return state.activeHasRendered\n ? { ...state, visible: false }\n : { ...emptyState, announcementKey: state.announcementKey };\n case 'exited':\n if (state.active?.id !== action.instanceId) {\n return state;\n }\n\n if (state.pending) {\n return {\n active: state.pending,\n activeHasRendered: false,\n announcementKey: state.announcementKey + 1,\n pending: null,\n visible: true,\n };\n }\n\n return { ...emptyState, announcementKey: state.announcementKey };\n default:\n return state;\n }\n};\n\n/** Owns the shared latest-wins and exit-before-enter lifecycle used by Snackbar portals. */\nconst useSnackbarManager = (initialSnackbar?: SnackbarProps) => {\n const [state, dispatch] = useReducer(snackbarManagerReducer, initialSnackbar, createInitialState);\n const nextInstanceId = useRef(initialSnackbar ? 1 : 0);\n\n const createInstance = useCallback((props: SnackbarProps): SnackbarInstance => {\n nextInstanceId.current += 1;\n return { id: nextInstanceId.current, props };\n }, []);\n\n const showSnackbar = useCallback(\n (props: SnackbarProps) => dispatch({ type: 'show', instance: createInstance(props) }),\n [createInstance],\n );\n\n const updateSnackbar = useCallback(\n (props: SnackbarProps, reactivate = false) =>\n dispatch({ type: 'update', instance: createInstance(props), reactivate }),\n [createInstance],\n );\n\n const dismissSnackbar = useCallback(() => dispatch({ type: 'dismiss' }), []);\n\n const handleExited = useCallback(() => {\n if (!state.active) {\n return;\n }\n\n try {\n state.active.props.onDismiss?.();\n } finally {\n // Consumer callbacks must not prevent a pending Snackbar from being promoted.\n dispatch({ type: 'exited', instanceId: state.active.id });\n }\n }, [state.active]);\n\n useEffect(() => {\n if (!state.active || !state.visible || state.activeHasRendered) {\n return;\n }\n\n // This runs after React commits the active Snackbar. Later creates can now safely wait for its\n // exit transition; creates dispatched before this point continue to coalesce to the latest.\n dispatch({ type: 'rendered', instanceId: state.active.id });\n }, [state.active, state.activeHasRendered, state.visible]);\n\n return {\n active: state.active,\n announcementKey: state.announcementKey,\n dismissSnackbar,\n handleExited,\n showSnackbar,\n updateSnackbar,\n visible: state.visible,\n };\n};\n\nexport default useSnackbarManager;\n"],"names":["emptyState","active","activeHasRendered","announcementKey","pending","visible","createInitialState","initialSnackbar","id","props","snackbarManagerReducer","state","action","type","instance","instanceId","reactivate","text","useSnackbarManager","dispatch","useReducer","nextInstanceId","useRef","createInstance","useCallback","current","showSnackbar","updateSnackbar","dismissSnackbar","handleExited","onDismiss","useEffect"],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var React = require('react');
|
|
6
|
+
var constants = require('./constants.js');
|
|
7
|
+
|
|
8
|
+
const SWIPE_DISMISS_CLASS_NAME = 'wds-Snackbar--swipe-dismiss';
|
|
9
|
+
const useSnackbarSwipeDismiss = onDismissRequest => {
|
|
10
|
+
const containerRef = React.useRef(null);
|
|
11
|
+
const initialXCoordinate = React.useRef(0);
|
|
12
|
+
const initialYCoordinate = React.useRef(0);
|
|
13
|
+
const moveOffsetX = React.useRef(0);
|
|
14
|
+
const moveOffsetY = React.useRef(0);
|
|
15
|
+
const dismissThreshold = React.useRef(0);
|
|
16
|
+
const activePointerId = React.useRef(null);
|
|
17
|
+
const captureTarget = React.useRef(null);
|
|
18
|
+
const suppressClick = React.useRef(false);
|
|
19
|
+
const clearSwipePosition = React.useCallback(() => {
|
|
20
|
+
activePointerId.current = null;
|
|
21
|
+
captureTarget.current = null;
|
|
22
|
+
suppressClick.current = false;
|
|
23
|
+
moveOffsetX.current = 0;
|
|
24
|
+
moveOffsetY.current = 0;
|
|
25
|
+
containerRef.current?.classList.remove(SWIPE_DISMISS_CLASS_NAME);
|
|
26
|
+
containerRef.current?.style.removeProperty('transform');
|
|
27
|
+
}, []);
|
|
28
|
+
const updateMoveOffset = ({
|
|
29
|
+
clientX,
|
|
30
|
+
clientY
|
|
31
|
+
}) => {
|
|
32
|
+
moveOffsetX.current = clientX - initialXCoordinate.current;
|
|
33
|
+
moveOffsetY.current = clientY - initialYCoordinate.current;
|
|
34
|
+
};
|
|
35
|
+
const releasePointerCapture = pointerId => {
|
|
36
|
+
const target = captureTarget.current;
|
|
37
|
+
if (target?.hasPointerCapture?.(pointerId)) {
|
|
38
|
+
target.releasePointerCapture(pointerId);
|
|
39
|
+
}
|
|
40
|
+
captureTarget.current = null;
|
|
41
|
+
};
|
|
42
|
+
const handlePointerDown = event => {
|
|
43
|
+
if (event.button !== 0 || !event.isPrimary || activePointerId.current !== null) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const target = event.target;
|
|
47
|
+
target.setPointerCapture?.(event.pointerId);
|
|
48
|
+
captureTarget.current = target;
|
|
49
|
+
activePointerId.current = event.pointerId;
|
|
50
|
+
initialXCoordinate.current = event.clientX;
|
|
51
|
+
initialYCoordinate.current = event.clientY;
|
|
52
|
+
moveOffsetX.current = 0;
|
|
53
|
+
moveOffsetY.current = 0;
|
|
54
|
+
dismissThreshold.current = event.currentTarget.offsetHeight * constants.SWIPE_DISMISS_THRESHOLD_RATIO;
|
|
55
|
+
};
|
|
56
|
+
const handlePointerMove = event => {
|
|
57
|
+
if (activePointerId.current !== event.pointerId) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
updateMoveOffset(event);
|
|
61
|
+
if (moveOffsetY.current <= 0 || moveOffsetY.current <= Math.abs(moveOffsetX.current)) {
|
|
62
|
+
containerRef.current?.style.removeProperty('transform');
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
containerRef.current?.style.setProperty('transform', `translateY(${moveOffsetY.current}px)`);
|
|
66
|
+
};
|
|
67
|
+
const handlePointerUp = event => {
|
|
68
|
+
if (activePointerId.current !== event.pointerId) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
updateMoveOffset(event);
|
|
72
|
+
releasePointerCapture(event.pointerId);
|
|
73
|
+
activePointerId.current = null;
|
|
74
|
+
if (moveOffsetY.current >= dismissThreshold.current && moveOffsetY.current > Math.abs(moveOffsetX.current)) {
|
|
75
|
+
const container = containerRef.current;
|
|
76
|
+
if (container) {
|
|
77
|
+
const dismissOffset = Math.max(moveOffsetY.current, container.offsetHeight);
|
|
78
|
+
container.classList.add(SWIPE_DISMISS_CLASS_NAME);
|
|
79
|
+
container.style.setProperty('transform', `translateY(${dismissOffset}px)`);
|
|
80
|
+
}
|
|
81
|
+
suppressClick.current = true;
|
|
82
|
+
onDismissRequest();
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
clearSwipePosition();
|
|
86
|
+
};
|
|
87
|
+
const handlePointerCancel = event => {
|
|
88
|
+
if (activePointerId.current !== event.pointerId) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
releasePointerCapture(event.pointerId);
|
|
92
|
+
clearSwipePosition();
|
|
93
|
+
};
|
|
94
|
+
const handleClickCapture = event => {
|
|
95
|
+
if (!suppressClick.current) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
suppressClick.current = false;
|
|
99
|
+
event.preventDefault();
|
|
100
|
+
event.stopPropagation();
|
|
101
|
+
};
|
|
102
|
+
return {
|
|
103
|
+
clearSwipePosition,
|
|
104
|
+
containerRef,
|
|
105
|
+
handleClickCapture,
|
|
106
|
+
handlePointerCancel,
|
|
107
|
+
handlePointerDown,
|
|
108
|
+
handlePointerMove,
|
|
109
|
+
handlePointerUp
|
|
110
|
+
};
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
exports.default = useSnackbarSwipeDismiss;
|
|
114
|
+
//# sourceMappingURL=useSnackbarSwipeDismiss.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSnackbarSwipeDismiss.js","sources":["../../src/Snackbar/useSnackbarSwipeDismiss.ts"],"sourcesContent":["import { useCallback, useRef } from 'react';\n\nimport { SWIPE_DISMISS_THRESHOLD_RATIO } from './constants';\n\nconst SWIPE_DISMISS_CLASS_NAME = 'wds-Snackbar--swipe-dismiss';\n\nconst useSnackbarSwipeDismiss = (onDismissRequest: () => void) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const initialXCoordinate = useRef(0);\n const initialYCoordinate = useRef(0);\n const moveOffsetX = useRef(0);\n const moveOffsetY = useRef(0);\n const dismissThreshold = useRef(0);\n const activePointerId = useRef<number | null>(null);\n const captureTarget = useRef<Element | null>(null);\n const suppressClick = useRef(false);\n\n const clearSwipePosition = useCallback(() => {\n activePointerId.current = null;\n captureTarget.current = null;\n suppressClick.current = false;\n moveOffsetX.current = 0;\n moveOffsetY.current = 0;\n containerRef.current?.classList.remove(SWIPE_DISMISS_CLASS_NAME);\n containerRef.current?.style.removeProperty('transform');\n }, []);\n\n const updateMoveOffset = ({ clientX, clientY }: React.PointerEvent<HTMLDivElement>) => {\n moveOffsetX.current = clientX - initialXCoordinate.current;\n moveOffsetY.current = clientY - initialYCoordinate.current;\n };\n\n const releasePointerCapture = (pointerId: number) => {\n const target = captureTarget.current;\n if (target?.hasPointerCapture?.(pointerId)) {\n target.releasePointerCapture(pointerId);\n }\n captureTarget.current = null;\n };\n\n const handlePointerDown = (event: React.PointerEvent<HTMLDivElement>) => {\n if (event.button !== 0 || !event.isPrimary || activePointerId.current !== null) {\n return;\n }\n\n const target = event.target as Element;\n target.setPointerCapture?.(event.pointerId);\n captureTarget.current = target;\n activePointerId.current = event.pointerId;\n initialXCoordinate.current = event.clientX;\n initialYCoordinate.current = event.clientY;\n moveOffsetX.current = 0;\n moveOffsetY.current = 0;\n dismissThreshold.current = event.currentTarget.offsetHeight * SWIPE_DISMISS_THRESHOLD_RATIO;\n };\n\n const handlePointerMove = (event: React.PointerEvent<HTMLDivElement>) => {\n if (activePointerId.current !== event.pointerId) {\n return;\n }\n\n updateMoveOffset(event);\n\n if (moveOffsetY.current <= 0 || moveOffsetY.current <= Math.abs(moveOffsetX.current)) {\n containerRef.current?.style.removeProperty('transform');\n return;\n }\n\n containerRef.current?.style.setProperty('transform', `translateY(${moveOffsetY.current}px)`);\n };\n\n const handlePointerUp = (event: React.PointerEvent<HTMLDivElement>) => {\n if (activePointerId.current !== event.pointerId) {\n return;\n }\n\n updateMoveOffset(event);\n releasePointerCapture(event.pointerId);\n activePointerId.current = null;\n\n if (\n moveOffsetY.current >= dismissThreshold.current &&\n moveOffsetY.current > Math.abs(moveOffsetX.current)\n ) {\n const container = containerRef.current;\n if (container) {\n const dismissOffset = Math.max(moveOffsetY.current, container.offsetHeight);\n container.classList.add(SWIPE_DISMISS_CLASS_NAME);\n container.style.setProperty('transform', `translateY(${dismissOffset}px)`);\n }\n suppressClick.current = true;\n onDismissRequest();\n return;\n }\n\n clearSwipePosition();\n };\n\n const handlePointerCancel = (event: React.PointerEvent<HTMLDivElement>) => {\n if (activePointerId.current !== event.pointerId) {\n return;\n }\n\n releasePointerCapture(event.pointerId);\n clearSwipePosition();\n };\n\n const handleClickCapture = (event: React.MouseEvent<HTMLDivElement>) => {\n if (!suppressClick.current) {\n return;\n }\n\n suppressClick.current = false;\n event.preventDefault();\n event.stopPropagation();\n };\n\n return {\n clearSwipePosition,\n containerRef,\n handleClickCapture,\n handlePointerCancel,\n handlePointerDown,\n handlePointerMove,\n handlePointerUp,\n };\n};\n\nexport default useSnackbarSwipeDismiss;\n"],"names":["SWIPE_DISMISS_CLASS_NAME","useSnackbarSwipeDismiss","onDismissRequest","containerRef","useRef","initialXCoordinate","initialYCoordinate","moveOffsetX","moveOffsetY","dismissThreshold","activePointerId","captureTarget","suppressClick","clearSwipePosition","useCallback","current","classList","remove","style","removeProperty","updateMoveOffset","clientX","clientY","releasePointerCapture","pointerId","target","hasPointerCapture","handlePointerDown","event","button","isPrimary","setPointerCapture","currentTarget","offsetHeight","SWIPE_DISMISS_THRESHOLD_RATIO","handlePointerMove","Math","abs","setProperty","handlePointerUp","container","dismissOffset","max","add","handlePointerCancel","handleClickCapture","preventDefault","stopPropagation"],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { useRef, useCallback } from 'react';
|
|
2
|
+
import { SWIPE_DISMISS_THRESHOLD_RATIO } from './constants.mjs';
|
|
3
|
+
|
|
4
|
+
const SWIPE_DISMISS_CLASS_NAME = 'wds-Snackbar--swipe-dismiss';
|
|
5
|
+
const useSnackbarSwipeDismiss = onDismissRequest => {
|
|
6
|
+
const containerRef = useRef(null);
|
|
7
|
+
const initialXCoordinate = useRef(0);
|
|
8
|
+
const initialYCoordinate = useRef(0);
|
|
9
|
+
const moveOffsetX = useRef(0);
|
|
10
|
+
const moveOffsetY = useRef(0);
|
|
11
|
+
const dismissThreshold = useRef(0);
|
|
12
|
+
const activePointerId = useRef(null);
|
|
13
|
+
const captureTarget = useRef(null);
|
|
14
|
+
const suppressClick = useRef(false);
|
|
15
|
+
const clearSwipePosition = useCallback(() => {
|
|
16
|
+
activePointerId.current = null;
|
|
17
|
+
captureTarget.current = null;
|
|
18
|
+
suppressClick.current = false;
|
|
19
|
+
moveOffsetX.current = 0;
|
|
20
|
+
moveOffsetY.current = 0;
|
|
21
|
+
containerRef.current?.classList.remove(SWIPE_DISMISS_CLASS_NAME);
|
|
22
|
+
containerRef.current?.style.removeProperty('transform');
|
|
23
|
+
}, []);
|
|
24
|
+
const updateMoveOffset = ({
|
|
25
|
+
clientX,
|
|
26
|
+
clientY
|
|
27
|
+
}) => {
|
|
28
|
+
moveOffsetX.current = clientX - initialXCoordinate.current;
|
|
29
|
+
moveOffsetY.current = clientY - initialYCoordinate.current;
|
|
30
|
+
};
|
|
31
|
+
const releasePointerCapture = pointerId => {
|
|
32
|
+
const target = captureTarget.current;
|
|
33
|
+
if (target?.hasPointerCapture?.(pointerId)) {
|
|
34
|
+
target.releasePointerCapture(pointerId);
|
|
35
|
+
}
|
|
36
|
+
captureTarget.current = null;
|
|
37
|
+
};
|
|
38
|
+
const handlePointerDown = event => {
|
|
39
|
+
if (event.button !== 0 || !event.isPrimary || activePointerId.current !== null) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const target = event.target;
|
|
43
|
+
target.setPointerCapture?.(event.pointerId);
|
|
44
|
+
captureTarget.current = target;
|
|
45
|
+
activePointerId.current = event.pointerId;
|
|
46
|
+
initialXCoordinate.current = event.clientX;
|
|
47
|
+
initialYCoordinate.current = event.clientY;
|
|
48
|
+
moveOffsetX.current = 0;
|
|
49
|
+
moveOffsetY.current = 0;
|
|
50
|
+
dismissThreshold.current = event.currentTarget.offsetHeight * SWIPE_DISMISS_THRESHOLD_RATIO;
|
|
51
|
+
};
|
|
52
|
+
const handlePointerMove = event => {
|
|
53
|
+
if (activePointerId.current !== event.pointerId) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
updateMoveOffset(event);
|
|
57
|
+
if (moveOffsetY.current <= 0 || moveOffsetY.current <= Math.abs(moveOffsetX.current)) {
|
|
58
|
+
containerRef.current?.style.removeProperty('transform');
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
containerRef.current?.style.setProperty('transform', `translateY(${moveOffsetY.current}px)`);
|
|
62
|
+
};
|
|
63
|
+
const handlePointerUp = event => {
|
|
64
|
+
if (activePointerId.current !== event.pointerId) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
updateMoveOffset(event);
|
|
68
|
+
releasePointerCapture(event.pointerId);
|
|
69
|
+
activePointerId.current = null;
|
|
70
|
+
if (moveOffsetY.current >= dismissThreshold.current && moveOffsetY.current > Math.abs(moveOffsetX.current)) {
|
|
71
|
+
const container = containerRef.current;
|
|
72
|
+
if (container) {
|
|
73
|
+
const dismissOffset = Math.max(moveOffsetY.current, container.offsetHeight);
|
|
74
|
+
container.classList.add(SWIPE_DISMISS_CLASS_NAME);
|
|
75
|
+
container.style.setProperty('transform', `translateY(${dismissOffset}px)`);
|
|
76
|
+
}
|
|
77
|
+
suppressClick.current = true;
|
|
78
|
+
onDismissRequest();
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
clearSwipePosition();
|
|
82
|
+
};
|
|
83
|
+
const handlePointerCancel = event => {
|
|
84
|
+
if (activePointerId.current !== event.pointerId) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
releasePointerCapture(event.pointerId);
|
|
88
|
+
clearSwipePosition();
|
|
89
|
+
};
|
|
90
|
+
const handleClickCapture = event => {
|
|
91
|
+
if (!suppressClick.current) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
suppressClick.current = false;
|
|
95
|
+
event.preventDefault();
|
|
96
|
+
event.stopPropagation();
|
|
97
|
+
};
|
|
98
|
+
return {
|
|
99
|
+
clearSwipePosition,
|
|
100
|
+
containerRef,
|
|
101
|
+
handleClickCapture,
|
|
102
|
+
handlePointerCancel,
|
|
103
|
+
handlePointerDown,
|
|
104
|
+
handlePointerMove,
|
|
105
|
+
handlePointerUp
|
|
106
|
+
};
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
export { useSnackbarSwipeDismiss as default };
|
|
110
|
+
//# sourceMappingURL=useSnackbarSwipeDismiss.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSnackbarSwipeDismiss.mjs","sources":["../../src/Snackbar/useSnackbarSwipeDismiss.ts"],"sourcesContent":["import { useCallback, useRef } from 'react';\n\nimport { SWIPE_DISMISS_THRESHOLD_RATIO } from './constants';\n\nconst SWIPE_DISMISS_CLASS_NAME = 'wds-Snackbar--swipe-dismiss';\n\nconst useSnackbarSwipeDismiss = (onDismissRequest: () => void) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const initialXCoordinate = useRef(0);\n const initialYCoordinate = useRef(0);\n const moveOffsetX = useRef(0);\n const moveOffsetY = useRef(0);\n const dismissThreshold = useRef(0);\n const activePointerId = useRef<number | null>(null);\n const captureTarget = useRef<Element | null>(null);\n const suppressClick = useRef(false);\n\n const clearSwipePosition = useCallback(() => {\n activePointerId.current = null;\n captureTarget.current = null;\n suppressClick.current = false;\n moveOffsetX.current = 0;\n moveOffsetY.current = 0;\n containerRef.current?.classList.remove(SWIPE_DISMISS_CLASS_NAME);\n containerRef.current?.style.removeProperty('transform');\n }, []);\n\n const updateMoveOffset = ({ clientX, clientY }: React.PointerEvent<HTMLDivElement>) => {\n moveOffsetX.current = clientX - initialXCoordinate.current;\n moveOffsetY.current = clientY - initialYCoordinate.current;\n };\n\n const releasePointerCapture = (pointerId: number) => {\n const target = captureTarget.current;\n if (target?.hasPointerCapture?.(pointerId)) {\n target.releasePointerCapture(pointerId);\n }\n captureTarget.current = null;\n };\n\n const handlePointerDown = (event: React.PointerEvent<HTMLDivElement>) => {\n if (event.button !== 0 || !event.isPrimary || activePointerId.current !== null) {\n return;\n }\n\n const target = event.target as Element;\n target.setPointerCapture?.(event.pointerId);\n captureTarget.current = target;\n activePointerId.current = event.pointerId;\n initialXCoordinate.current = event.clientX;\n initialYCoordinate.current = event.clientY;\n moveOffsetX.current = 0;\n moveOffsetY.current = 0;\n dismissThreshold.current = event.currentTarget.offsetHeight * SWIPE_DISMISS_THRESHOLD_RATIO;\n };\n\n const handlePointerMove = (event: React.PointerEvent<HTMLDivElement>) => {\n if (activePointerId.current !== event.pointerId) {\n return;\n }\n\n updateMoveOffset(event);\n\n if (moveOffsetY.current <= 0 || moveOffsetY.current <= Math.abs(moveOffsetX.current)) {\n containerRef.current?.style.removeProperty('transform');\n return;\n }\n\n containerRef.current?.style.setProperty('transform', `translateY(${moveOffsetY.current}px)`);\n };\n\n const handlePointerUp = (event: React.PointerEvent<HTMLDivElement>) => {\n if (activePointerId.current !== event.pointerId) {\n return;\n }\n\n updateMoveOffset(event);\n releasePointerCapture(event.pointerId);\n activePointerId.current = null;\n\n if (\n moveOffsetY.current >= dismissThreshold.current &&\n moveOffsetY.current > Math.abs(moveOffsetX.current)\n ) {\n const container = containerRef.current;\n if (container) {\n const dismissOffset = Math.max(moveOffsetY.current, container.offsetHeight);\n container.classList.add(SWIPE_DISMISS_CLASS_NAME);\n container.style.setProperty('transform', `translateY(${dismissOffset}px)`);\n }\n suppressClick.current = true;\n onDismissRequest();\n return;\n }\n\n clearSwipePosition();\n };\n\n const handlePointerCancel = (event: React.PointerEvent<HTMLDivElement>) => {\n if (activePointerId.current !== event.pointerId) {\n return;\n }\n\n releasePointerCapture(event.pointerId);\n clearSwipePosition();\n };\n\n const handleClickCapture = (event: React.MouseEvent<HTMLDivElement>) => {\n if (!suppressClick.current) {\n return;\n }\n\n suppressClick.current = false;\n event.preventDefault();\n event.stopPropagation();\n };\n\n return {\n clearSwipePosition,\n containerRef,\n handleClickCapture,\n handlePointerCancel,\n handlePointerDown,\n handlePointerMove,\n handlePointerUp,\n };\n};\n\nexport default useSnackbarSwipeDismiss;\n"],"names":["SWIPE_DISMISS_CLASS_NAME","useSnackbarSwipeDismiss","onDismissRequest","containerRef","useRef","initialXCoordinate","initialYCoordinate","moveOffsetX","moveOffsetY","dismissThreshold","activePointerId","captureTarget","suppressClick","clearSwipePosition","useCallback","current","classList","remove","style","removeProperty","updateMoveOffset","clientX","clientY","releasePointerCapture","pointerId","target","hasPointerCapture","handlePointerDown","event","button","isPrimary","setPointerCapture","currentTarget","offsetHeight","SWIPE_DISMISS_THRESHOLD_RATIO","handlePointerMove","Math","abs","setProperty","handlePointerUp","container","dismissOffset","max","add","handlePointerCancel","handleClickCapture","preventDefault","stopPropagation"],"mappings":"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"}
|
|
@@ -9,13 +9,7 @@ exports.Typography = void 0;
|
|
|
9
9
|
Typography["DISPLAY_LARGE"] = "display-large";
|
|
10
10
|
Typography["DISPLAY_MEDIUM"] = "display-medium";
|
|
11
11
|
Typography["DISPLAY_SMALL"] = "display-small";
|
|
12
|
-
/**
|
|
13
|
-
* @deprecated Use {@link Typography.DISPLAY_NUMBER_SMALL} instead.
|
|
14
|
-
*/
|
|
15
12
|
Typography["DISPLAY_NUMBER"] = "display-number";
|
|
16
|
-
Typography["DISPLAY_NUMBER_SMALL"] = "display-number-small";
|
|
17
|
-
Typography["DISPLAY_NUMBER_MEDIUM"] = "display-number-medium";
|
|
18
|
-
Typography["DISPLAY_NUMBER_LARGE"] = "display-number-large";
|
|
19
13
|
Typography["TITLE_SCREEN"] = "title-screen";
|
|
20
14
|
Typography["TITLE_SECTION"] = "title-section";
|
|
21
15
|
Typography["TITLE_SUBSECTION"] = "title-subsection";
|