@razorpay/blade 11.2.0 → 11.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/native/components/Dropdown/Dropdown.js +1 -1
- package/build/lib/native/components/Dropdown/Dropdown.js.map +1 -1
- package/build/lib/native/components/Toast/Toast.native.js +7 -0
- package/build/lib/native/components/Toast/Toast.native.js.map +1 -0
- package/build/lib/native/components/Toast/ToastContainer.native.js +7 -0
- package/build/lib/native/components/Toast/ToastContainer.native.js.map +1 -0
- package/build/lib/native/components/Toast/useToast.js +9 -0
- package/build/lib/native/components/Toast/useToast.js.map +1 -0
- package/build/lib/native/components/index.js +2 -0
- package/build/lib/native/components/index.js.map +1 -1
- package/build/lib/web/development/components/Dropdown/Dropdown.js +1 -1
- package/build/lib/web/development/components/Dropdown/Dropdown.js.map +1 -1
- package/build/lib/web/development/components/Input/BaseInput/BaseInputTagSlot.web.js +15 -1
- package/build/lib/web/development/components/Input/BaseInput/BaseInputTagSlot.web.js.map +1 -1
- package/build/lib/web/development/components/Toast/Toast.web.js +144 -0
- package/build/lib/web/development/components/Toast/Toast.web.js.map +1 -0
- package/build/lib/web/development/components/Toast/ToastContainer.web.js +305 -0
- package/build/lib/web/development/components/Toast/ToastContainer.web.js.map +1 -0
- package/build/lib/web/development/components/Toast/constants.js +26 -0
- package/build/lib/web/development/components/Toast/constants.js.map +1 -0
- package/build/lib/web/development/components/Toast/index.js +4 -0
- package/build/lib/web/development/components/Toast/index.js.map +1 -0
- package/build/lib/web/development/components/Toast/types.js +2 -0
- package/build/lib/web/development/components/Toast/types.js.map +1 -0
- package/build/lib/web/development/components/Toast/useToast.js +66 -0
- package/build/lib/web/development/components/Toast/useToast.js.map +1 -0
- package/build/lib/web/development/components/index.js +3 -0
- package/build/lib/web/development/components/index.js.map +1 -1
- package/build/lib/web/production/components/Dropdown/Dropdown.js +1 -1
- package/build/lib/web/production/components/Dropdown/Dropdown.js.map +1 -1
- package/build/lib/web/production/components/Input/BaseInput/BaseInputTagSlot.web.js +15 -1
- package/build/lib/web/production/components/Input/BaseInput/BaseInputTagSlot.web.js.map +1 -1
- package/build/lib/web/production/components/Toast/Toast.web.js +144 -0
- package/build/lib/web/production/components/Toast/Toast.web.js.map +1 -0
- package/build/lib/web/production/components/Toast/ToastContainer.web.js +305 -0
- package/build/lib/web/production/components/Toast/ToastContainer.web.js.map +1 -0
- package/build/lib/web/production/components/Toast/constants.js +26 -0
- package/build/lib/web/production/components/Toast/constants.js.map +1 -0
- package/build/lib/web/production/components/Toast/index.js +4 -0
- package/build/lib/web/production/components/Toast/index.js.map +1 -0
- package/build/lib/web/production/components/Toast/types.js +2 -0
- package/build/lib/web/production/components/Toast/types.js.map +1 -0
- package/build/lib/web/production/components/Toast/useToast.js +66 -0
- package/build/lib/web/production/components/Toast/useToast.js.map +1 -0
- package/build/lib/web/production/components/index.js +3 -0
- package/build/lib/web/production/components/index.js.map +1 -1
- package/build/types/components/index.d.ts +71 -1
- package/build/types/components/index.native.d.ts +71 -1
- package/package.json +3 -1
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
2
|
+
import 'react';
|
|
3
|
+
import toast from 'react-hot-toast';
|
|
4
|
+
import styled, { keyframes, css } from 'styled-components';
|
|
5
|
+
import '../Box/index.js';
|
|
6
|
+
import '../Button/index.js';
|
|
7
|
+
import '../Button/IconButton/index.js';
|
|
8
|
+
import '../Icons/index.js';
|
|
9
|
+
import '../Box/BaseBox/index.js';
|
|
10
|
+
import '../Typography/index.js';
|
|
11
|
+
import '../../utils/index.js';
|
|
12
|
+
import getIn from '../../utils/lodashButBetter/get.js';
|
|
13
|
+
import '../../utils/makeAccessible/index.js';
|
|
14
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
15
|
+
import CheckCircleIcon from '../Icons/CheckCircleIcon/CheckCircleIcon.js';
|
|
16
|
+
import AlertTriangleIcon from '../Icons/AlertOctagonIcon/AlertOctagonIcon.js';
|
|
17
|
+
import InfoIcon from '../Icons/InfoIcon/InfoIcon.js';
|
|
18
|
+
import AlertTriangleIcon$1 from '../Icons/AlertTriangleIcon/AlertTriangleIcon.js';
|
|
19
|
+
import { BaseBox } from '../Box/BaseBox/BaseBox.web.js';
|
|
20
|
+
import useTheme from '../BladeProvider/useTheme.js';
|
|
21
|
+
import { Box } from '../Box/Box.js';
|
|
22
|
+
import Button from '../Button/Button/Button.js';
|
|
23
|
+
import { makeMotionTime } from '../../utils/makeMotionTime/makeMotionTime.web.js';
|
|
24
|
+
import { castWebType } from '../../utils/platform/castUtils.js';
|
|
25
|
+
import { makeAccessible } from '../../utils/makeAccessible/makeAccessible.web.js';
|
|
26
|
+
import { Text } from '../Typography/Text/Text.js';
|
|
27
|
+
import { IconButton } from '../Button/IconButton/IconButton.js';
|
|
28
|
+
import CloseIcon from '../Icons/CloseIcon/CloseIcon.js';
|
|
29
|
+
|
|
30
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
31
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
32
|
+
var iconMap = {
|
|
33
|
+
positive: CheckCircleIcon,
|
|
34
|
+
negative: AlertTriangleIcon,
|
|
35
|
+
information: InfoIcon,
|
|
36
|
+
neutral: InfoIcon,
|
|
37
|
+
notice: AlertTriangleIcon$1
|
|
38
|
+
};
|
|
39
|
+
var borderColorMap = {
|
|
40
|
+
positive: 'feedback.border.positive.intense',
|
|
41
|
+
negative: 'feedback.border.negative.intense',
|
|
42
|
+
notice: 'feedback.border.notice.intense',
|
|
43
|
+
information: 'feedback.border.information.intense',
|
|
44
|
+
neutral: 'feedback.border.neutral.intense'
|
|
45
|
+
};
|
|
46
|
+
var slideIn = /*#__PURE__*/keyframes(["from{opacity:0;transform:translateY(100%);}to{opacity:1;transform:translateY(0);}"]);
|
|
47
|
+
var slideOut = /*#__PURE__*/keyframes(["from{opacity:1;transform:translateY(0);}to{opacity:0;transform:translateY(100%);}"]);
|
|
48
|
+
var AnimatedFade = /*#__PURE__*/styled(BaseBox).withConfig({
|
|
49
|
+
displayName: "Toastweb__AnimatedFade",
|
|
50
|
+
componentId: "lbyqty-0"
|
|
51
|
+
})(function (_ref) {
|
|
52
|
+
var animationType = _ref.animationType,
|
|
53
|
+
toastBorderColor = _ref.toastBorderColor;
|
|
54
|
+
return css(["overflow:hidden;border:1px solid ", ";", ""], toastBorderColor, animationType);
|
|
55
|
+
});
|
|
56
|
+
var Toast = function Toast(_ref2) {
|
|
57
|
+
var type = _ref2.type,
|
|
58
|
+
_ref2$color = _ref2.color,
|
|
59
|
+
color = _ref2$color === void 0 ? 'neutral' : _ref2$color,
|
|
60
|
+
leading = _ref2.leading,
|
|
61
|
+
action = _ref2.action,
|
|
62
|
+
content = _ref2.content,
|
|
63
|
+
onDismissButtonClick = _ref2.onDismissButtonClick,
|
|
64
|
+
isVisible = _ref2.isVisible,
|
|
65
|
+
id = _ref2.id;
|
|
66
|
+
var _useTheme = useTheme(),
|
|
67
|
+
theme = _useTheme.theme;
|
|
68
|
+
var Icon = leading || iconMap[color];
|
|
69
|
+
var isPromotional = type === 'promotional';
|
|
70
|
+
var actionButton = action ? /*#__PURE__*/jsx(Box, {
|
|
71
|
+
children: /*#__PURE__*/jsx(Button, {
|
|
72
|
+
size: "xsmall",
|
|
73
|
+
variant: isPromotional ? 'secondary' : 'tertiary',
|
|
74
|
+
color: isPromotional ? 'primary' : 'white',
|
|
75
|
+
onClick: function onClick(event) {
|
|
76
|
+
var _action$onClick;
|
|
77
|
+
event.stopPropagation();
|
|
78
|
+
action === null || action === void 0 ? void 0 : (_action$onClick = action.onClick) === null || _action$onClick === void 0 ? void 0 : _action$onClick.call(action, {
|
|
79
|
+
event: event,
|
|
80
|
+
toastId: id
|
|
81
|
+
});
|
|
82
|
+
},
|
|
83
|
+
isLoading: action === null || action === void 0 ? void 0 : action.isLoading,
|
|
84
|
+
children: action === null || action === void 0 ? void 0 : action.text
|
|
85
|
+
})
|
|
86
|
+
}) : null;
|
|
87
|
+
var enter = /*#__PURE__*/css(["opacity:0;animation:", " ", " ", " forwards;"], slideIn, makeMotionTime(theme.motion.duration.gentle), castWebType(theme.motion.easing.entrance.effective));
|
|
88
|
+
var exit = /*#__PURE__*/css(["opacity:1;animation:", " ", " ", " forwards;"], slideOut, makeMotionTime(theme.motion.duration.moderate), castWebType(theme.motion.easing.exit.effective));
|
|
89
|
+
return /*#__PURE__*/jsxs(AnimatedFade, _objectSpread(_objectSpread({}, makeAccessible({
|
|
90
|
+
role: 'status',
|
|
91
|
+
liveRegion: 'polite'
|
|
92
|
+
})), {}, {
|
|
93
|
+
toastBorderColor: getIn(theme.colors, isPromotional ? 'surface.border.gray.muted' : borderColorMap[color]),
|
|
94
|
+
animationType: isVisible ? enter : exit,
|
|
95
|
+
width: "100%",
|
|
96
|
+
display: "flex",
|
|
97
|
+
gap: "spacing.3",
|
|
98
|
+
paddingX: "spacing.4",
|
|
99
|
+
paddingY: isPromotional ? 'spacing.4' : 'spacing.3',
|
|
100
|
+
borderRadius: "medium",
|
|
101
|
+
alignItems: "center",
|
|
102
|
+
backgroundColor: isPromotional ? 'surface.background.gray.intense' : "feedback.background.".concat(color, ".intense"),
|
|
103
|
+
children: [Icon ? /*#__PURE__*/jsx(Box, {
|
|
104
|
+
flexShrink: 0,
|
|
105
|
+
display: "flex",
|
|
106
|
+
alignItems: "center",
|
|
107
|
+
alignSelf: isPromotional ? 'start' : 'center',
|
|
108
|
+
children: /*#__PURE__*/jsx(Icon, {
|
|
109
|
+
color: isPromotional ? 'surface.icon.gray.normal' : 'surface.icon.staticWhite.normal'
|
|
110
|
+
})
|
|
111
|
+
}) : null, /*#__PURE__*/jsxs(Box, {
|
|
112
|
+
display: "flex",
|
|
113
|
+
flexDirection: "column",
|
|
114
|
+
gap: "spacing.3",
|
|
115
|
+
children: [isPromotional ? content : /*#__PURE__*/jsx(Text, {
|
|
116
|
+
as: "span",
|
|
117
|
+
size: "small",
|
|
118
|
+
color: "surface.text.staticWhite.normal",
|
|
119
|
+
children: content
|
|
120
|
+
}), isPromotional && actionButton]
|
|
121
|
+
}), /*#__PURE__*/jsxs(Box, {
|
|
122
|
+
alignSelf: "start",
|
|
123
|
+
marginLeft: "auto",
|
|
124
|
+
display: "flex",
|
|
125
|
+
gap: "spacing.4",
|
|
126
|
+
children: [!isPromotional && actionButton, /*#__PURE__*/jsx(IconButton, {
|
|
127
|
+
emphasis: isPromotional ? 'intense' : 'subtle',
|
|
128
|
+
accessibilityLabel: "Dismiss toast",
|
|
129
|
+
onClick: function onClick(event) {
|
|
130
|
+
event.stopPropagation();
|
|
131
|
+
onDismissButtonClick === null || onDismissButtonClick === void 0 ? void 0 : onDismissButtonClick({
|
|
132
|
+
event: event,
|
|
133
|
+
toastId: id
|
|
134
|
+
});
|
|
135
|
+
toast.dismiss(id);
|
|
136
|
+
},
|
|
137
|
+
icon: CloseIcon
|
|
138
|
+
})]
|
|
139
|
+
})]
|
|
140
|
+
}));
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
export { Toast };
|
|
144
|
+
//# sourceMappingURL=Toast.web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Toast.web.js","sources":["../../../../../../src/components/Toast/Toast.web.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React from 'react';\nimport toast from 'react-hot-toast';\nimport type { FlattenSimpleInterpolation } from 'styled-components';\nimport styled, { css, keyframes } from 'styled-components';\nimport type { ToastProps } from './types';\nimport { Box } from '~components/Box';\nimport { Button } from '~components/Button';\nimport { IconButton } from '~components/Button/IconButton';\nimport {\n AlertOctagonIcon,\n AlertTriangleIcon,\n CheckCircleIcon,\n CloseIcon,\n InfoIcon,\n} from '~components/Icons';\nimport BaseBox from '~components/Box/BaseBox';\nimport { Text } from '~components/Typography';\nimport { castWebType, makeMotionTime, useTheme } from '~utils';\nimport getIn from '~utils/lodashButBetter/get';\nimport { makeAccessible } from '~utils/makeAccessible';\n\nconst iconMap = {\n positive: CheckCircleIcon,\n negative: AlertOctagonIcon,\n information: InfoIcon,\n neutral: InfoIcon,\n notice: AlertTriangleIcon,\n};\n\nconst borderColorMap = {\n positive: 'feedback.border.positive.intense',\n negative: 'feedback.border.negative.intense',\n notice: 'feedback.border.notice.intense',\n information: 'feedback.border.information.intense',\n neutral: 'feedback.border.neutral.intense',\n} as const;\n\nconst slideIn = keyframes`\n from {\n opacity: 0;\n transform: translateY(100%);\n }\n\n to {\n opacity: 1;\n transform: translateY(0);\n }\n`;\n\nconst slideOut = keyframes`\n from {\n opacity: 1;\n transform: translateY(0);\n }\n\n to {\n opacity: 0;\n transform: translateY(100%);\n }\n`;\n\nconst AnimatedFade = styled(BaseBox)<{\n animationType: FlattenSimpleInterpolation | null;\n toastBorderColor: string;\n}>(({ animationType, toastBorderColor }) => {\n return css`\n overflow: hidden;\n border: 1px solid ${toastBorderColor};\n ${animationType}\n `;\n});\n\nconst Toast = ({\n type,\n color = 'neutral',\n leading,\n action,\n content,\n onDismissButtonClick,\n isVisible,\n id,\n}: ToastProps & {\n isVisible?: boolean;\n}): React.ReactElement => {\n const { theme } = useTheme();\n const Icon = leading || iconMap[color];\n const isPromotional = type === 'promotional';\n const actionButton = action ? (\n <Box>\n <Button\n size=\"xsmall\"\n variant={isPromotional ? 'secondary' : 'tertiary'}\n color={isPromotional ? 'primary' : 'white'}\n onClick={(event) => {\n event.stopPropagation();\n action?.onClick?.({ event: event as never, toastId: id! });\n }}\n isLoading={action?.isLoading}\n >\n {action?.text}\n </Button>\n </Box>\n ) : null;\n\n const enter = css`\n opacity: 0;\n animation: ${slideIn} ${makeMotionTime(theme.motion.duration.gentle)}\n ${castWebType(theme.motion.easing.entrance.effective)} forwards;\n `;\n\n const exit = css`\n opacity: 1;\n animation: ${slideOut} ${makeMotionTime(theme.motion.duration.moderate)}\n ${castWebType(theme.motion.easing.exit.effective)} forwards;\n `;\n\n return (\n <AnimatedFade\n {...makeAccessible({ role: 'status', liveRegion: 'polite' })}\n toastBorderColor={getIn(\n theme.colors,\n isPromotional ? 'surface.border.gray.muted' : borderColorMap[color],\n )}\n animationType={isVisible ? enter : exit}\n width=\"100%\"\n display=\"flex\"\n gap=\"spacing.3\"\n paddingX=\"spacing.4\"\n paddingY={isPromotional ? 'spacing.4' : 'spacing.3'}\n borderRadius=\"medium\"\n alignItems=\"center\"\n backgroundColor={\n isPromotional ? 'surface.background.gray.intense' : `feedback.background.${color}.intense`\n }\n >\n {Icon ? (\n <Box\n flexShrink={0}\n display=\"flex\"\n alignItems=\"center\"\n alignSelf={isPromotional ? 'start' : 'center'}\n >\n <Icon\n color={isPromotional ? 'surface.icon.gray.normal' : 'surface.icon.staticWhite.normal'}\n />\n </Box>\n ) : null}\n <Box display=\"flex\" flexDirection=\"column\" gap=\"spacing.3\">\n {isPromotional ? (\n content\n ) : (\n <Text as=\"span\" size=\"small\" color=\"surface.text.staticWhite.normal\">\n {content}\n </Text>\n )}\n {isPromotional && actionButton}\n </Box>\n <Box alignSelf=\"start\" marginLeft=\"auto\" display=\"flex\" gap=\"spacing.4\">\n {!isPromotional && actionButton}\n <IconButton\n emphasis={isPromotional ? 'intense' : 'subtle'}\n accessibilityLabel=\"Dismiss toast\"\n onClick={(event: React.MouseEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n onDismissButtonClick?.({ event, toastId: id! });\n toast.dismiss(id);\n }}\n icon={CloseIcon}\n />\n </Box>\n </AnimatedFade>\n );\n};\n\nexport { Toast };\n"],"names":["iconMap","positive","CheckCircleIcon","negative","AlertOctagonIcon","information","InfoIcon","neutral","notice","AlertTriangleIcon","borderColorMap","slideIn","keyframes","slideOut","AnimatedFade","styled","BaseBox","withConfig","displayName","componentId","_ref","animationType","toastBorderColor","css","Toast","_ref2","type","_ref2$color","color","leading","action","content","onDismissButtonClick","isVisible","id","_useTheme","useTheme","theme","Icon","isPromotional","actionButton","_jsx","Box","children","Button","size","variant","onClick","event","_action$onClick","stopPropagation","call","toastId","isLoading","text","enter","makeMotionTime","motion","duration","gentle","castWebType","easing","entrance","effective","exit","moderate","_jsxs","_objectSpread","makeAccessible","role","liveRegion","getIn","colors","width","display","gap","paddingX","paddingY","borderRadius","alignItems","backgroundColor","concat","flexShrink","alignSelf","flexDirection","Text","as","marginLeft","IconButton","emphasis","accessibilityLabel","toast","dismiss","icon","CloseIcon"],"mappings":"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"}
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
|
|
2
|
+
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
3
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
4
|
+
import { useToaster, resolveValue } from 'react-hot-toast';
|
|
5
|
+
import React__default from 'react';
|
|
6
|
+
import styled from 'styled-components';
|
|
7
|
+
import { PEEKS, MAX_TOASTS, MIN_TOAST_MOBILE, MIN_TOAST_DESKTOP, CONTAINER_GUTTER_MOBILE, CONTAINER_GUTTER_DESKTOP, GUTTER, SCALE_FACTOR, PEEK_GUTTER, TOAST_Z_INDEX, TOAST_MAX_WIDTH } from './constants.js';
|
|
8
|
+
import '../../utils/index.js';
|
|
9
|
+
import '../Box/BaseBox/index.js';
|
|
10
|
+
import { useIsMobile } from '../../utils/useIsMobile.js';
|
|
11
|
+
import '../../utils/metaAttribute/index.js';
|
|
12
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
13
|
+
import { BaseBox } from '../Box/BaseBox/BaseBox.web.js';
|
|
14
|
+
import { makeMotionTime } from '../../utils/makeMotionTime/makeMotionTime.web.js';
|
|
15
|
+
import useTheme from '../BladeProvider/useTheme.js';
|
|
16
|
+
import { makeSize } from '../../utils/makeSize/makeSize.js';
|
|
17
|
+
import { metaAttribute } from '../../utils/metaAttribute/metaAttribute.web.js';
|
|
18
|
+
|
|
19
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
20
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
21
|
+
var StyledToastWrapper = /*#__PURE__*/styled(BaseBox).withConfig({
|
|
22
|
+
displayName: "ToastContainerweb__StyledToastWrapper",
|
|
23
|
+
componentId: "mv9fjf-0"
|
|
24
|
+
})(function (_ref) {
|
|
25
|
+
var isVisible = _ref.isVisible,
|
|
26
|
+
index = _ref.index,
|
|
27
|
+
isExpanded = _ref.isExpanded,
|
|
28
|
+
isPromotional = _ref.isPromotional;
|
|
29
|
+
var opacity = isVisible ? 1 : 0;
|
|
30
|
+
// Only make the PEEKING and MAX_TOASTS toasts visible,
|
|
31
|
+
// Every other toasts should be hidden
|
|
32
|
+
if (index < PEEKS + MAX_TOASTS) {
|
|
33
|
+
opacity = 1;
|
|
34
|
+
} else if (isPromotional || isExpanded) {
|
|
35
|
+
opacity = 1;
|
|
36
|
+
} else {
|
|
37
|
+
opacity = 0;
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
'& > *': {
|
|
41
|
+
pointerEvents: opacity === 1 ? 'auto' : 'none'
|
|
42
|
+
},
|
|
43
|
+
opacity: opacity
|
|
44
|
+
};
|
|
45
|
+
});
|
|
46
|
+
var getPositionStyle = function getPositionStyle(position, offset, scale, theme) {
|
|
47
|
+
var top = position.includes('top');
|
|
48
|
+
var verticalStyle = top ? {
|
|
49
|
+
top: 0
|
|
50
|
+
} : {
|
|
51
|
+
bottom: 0
|
|
52
|
+
};
|
|
53
|
+
var horizontalStyle = position.includes('center') ? {
|
|
54
|
+
justifyContent: 'center'
|
|
55
|
+
} : position.includes('right') ? {
|
|
56
|
+
justifyContent: 'flex-end'
|
|
57
|
+
} : {};
|
|
58
|
+
return _objectSpread(_objectSpread({
|
|
59
|
+
left: 0,
|
|
60
|
+
right: 0,
|
|
61
|
+
display: 'flex',
|
|
62
|
+
position: 'absolute',
|
|
63
|
+
transformOrigin: 'center',
|
|
64
|
+
transition: "".concat(makeMotionTime(theme.motion.duration.gentle), " ").concat(theme.motion.easing.standard.effective),
|
|
65
|
+
transitionProperty: 'transform, opacity, height',
|
|
66
|
+
transform: "translateY(".concat(offset * (top ? 1 : -1), "px) scale(").concat(scale, ")")
|
|
67
|
+
}, verticalStyle), horizontalStyle);
|
|
68
|
+
};
|
|
69
|
+
function isPromotionalToast(toast) {
|
|
70
|
+
// @ts-expect-error
|
|
71
|
+
return toast.type == 'promotional';
|
|
72
|
+
}
|
|
73
|
+
var Toaster = function Toaster(_ref2) {
|
|
74
|
+
var _promoToasts$, _promoToasts$0$height, _promoToasts$2;
|
|
75
|
+
var reverseOrder = _ref2.reverseOrder,
|
|
76
|
+
_ref2$position = _ref2.position,
|
|
77
|
+
position = _ref2$position === void 0 ? 'top-center' : _ref2$position,
|
|
78
|
+
toastOptions = _ref2.toastOptions,
|
|
79
|
+
containerClassName = _ref2.containerClassName;
|
|
80
|
+
var _useToaster = useToaster(toastOptions),
|
|
81
|
+
toasts = _useToaster.toasts,
|
|
82
|
+
handlers = _useToaster.handlers;
|
|
83
|
+
var _useTheme = useTheme(),
|
|
84
|
+
theme = _useTheme.theme;
|
|
85
|
+
var _React$useState = React__default.useState(0),
|
|
86
|
+
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
87
|
+
frontToastHeight = _React$useState2[0],
|
|
88
|
+
setFrontToastHeight = _React$useState2[1];
|
|
89
|
+
var _React$useState3 = React__default.useState(false),
|
|
90
|
+
_React$useState4 = _slicedToArray(_React$useState3, 2),
|
|
91
|
+
hasManuallyExpanded = _React$useState4[0],
|
|
92
|
+
setHasManuallyExpanded = _React$useState4[1];
|
|
93
|
+
var isMobile = useIsMobile();
|
|
94
|
+
var minToasts = isMobile ? MIN_TOAST_MOBILE : MIN_TOAST_DESKTOP;
|
|
95
|
+
var containerGutter = isMobile ? CONTAINER_GUTTER_MOBILE : CONTAINER_GUTTER_DESKTOP;
|
|
96
|
+
var infoToasts = React__default.useMemo(function () {
|
|
97
|
+
return toasts.filter(function (toast) {
|
|
98
|
+
return !isPromotionalToast(toast);
|
|
99
|
+
});
|
|
100
|
+
}, [toasts]);
|
|
101
|
+
var promoToasts = React__default.useMemo(function () {
|
|
102
|
+
return toasts.filter(function (toast) {
|
|
103
|
+
return isPromotionalToast(toast);
|
|
104
|
+
});
|
|
105
|
+
}, [toasts]);
|
|
106
|
+
|
|
107
|
+
// always keep promo toasts at the bottom of the stack
|
|
108
|
+
var recomputedToasts = React__default.useMemo(function () {
|
|
109
|
+
return [].concat(_toConsumableArray(infoToasts), _toConsumableArray(promoToasts));
|
|
110
|
+
}, [infoToasts, promoToasts]);
|
|
111
|
+
var hasPromoToast = promoToasts.length > 0 && ((_promoToasts$ = promoToasts[0]) === null || _promoToasts$ === void 0 ? void 0 : _promoToasts$.visible);
|
|
112
|
+
var promoToastHeight = (_promoToasts$0$height = (_promoToasts$2 = promoToasts[0]) === null || _promoToasts$2 === void 0 ? void 0 : _promoToasts$2.height) !== null && _promoToasts$0$height !== void 0 ? _promoToasts$0$height : 0;
|
|
113
|
+
var isExpanded = hasManuallyExpanded || recomputedToasts.length <= minToasts;
|
|
114
|
+
React__default.useLayoutEffect(function () {
|
|
115
|
+
// find the first toast which is visible
|
|
116
|
+
var firstToast = infoToasts.find(function (t, index) {
|
|
117
|
+
return t.visible && index === 0;
|
|
118
|
+
});
|
|
119
|
+
if (firstToast) {
|
|
120
|
+
var _firstToast$height;
|
|
121
|
+
setFrontToastHeight((_firstToast$height = firstToast.height) !== null && _firstToast$height !== void 0 ? _firstToast$height : 0);
|
|
122
|
+
}
|
|
123
|
+
}, [infoToasts]);
|
|
124
|
+
|
|
125
|
+
// calculate total height of all toasts
|
|
126
|
+
var totalHeight = React__default.useMemo(function () {
|
|
127
|
+
return recomputedToasts
|
|
128
|
+
// only consider visible recomputedToasts
|
|
129
|
+
.filter(function (toast) {
|
|
130
|
+
return toast.visible;
|
|
131
|
+
}).reduce(function (prevHeight, toast) {
|
|
132
|
+
var _toast$height;
|
|
133
|
+
return prevHeight + ((_toast$height = toast.height) !== null && _toast$height !== void 0 ? _toast$height : 0);
|
|
134
|
+
}, 0) + recomputedToasts.length * GUTTER;
|
|
135
|
+
}, [recomputedToasts]);
|
|
136
|
+
|
|
137
|
+
// Stacking logic explained in detail:
|
|
138
|
+
// https://www.loom.com/share/522d9a445e2f41e1886cce4decb9ab9d?sid=4287acf6-8d44-431b-93e1-c1a0d40a0aba
|
|
139
|
+
//
|
|
140
|
+
// 1. 3 toasts can be stacked on top of each other
|
|
141
|
+
// 2. After 3 toasts, the toasts will be scaled down and peek from behind
|
|
142
|
+
// 3. There can be maximum of 3 toasts peeking from behind
|
|
143
|
+
// 4. After 3 peeking toasts, the toasts will be hidden
|
|
144
|
+
// 5. If there is a promo toast, all toasts will be lifted up
|
|
145
|
+
// 6. Promo toasts will always be on the bottom
|
|
146
|
+
var calculateYPosition = React__default.useCallback(function (_ref3) {
|
|
147
|
+
var toast = _ref3.toast,
|
|
148
|
+
index = _ref3.index;
|
|
149
|
+
// find the current toast index
|
|
150
|
+
var toastIndex = infoToasts.findIndex(function (t) {
|
|
151
|
+
return t.id === toast.id;
|
|
152
|
+
});
|
|
153
|
+
// number of toasts before this toast
|
|
154
|
+
var toastsBefore = infoToasts.filter(function (toast, i) {
|
|
155
|
+
return i < toastIndex && toast.visible;
|
|
156
|
+
}).length;
|
|
157
|
+
var scale = Math.max(0.7, 1 - toastsBefore * SCALE_FACTOR);
|
|
158
|
+
// first toast should always have a scale of 1
|
|
159
|
+
if (index < MAX_TOASTS) {
|
|
160
|
+
scale = 1;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// y position of toast,
|
|
164
|
+
var offset = infoToasts.filter(function (toast) {
|
|
165
|
+
return toast.visible;
|
|
166
|
+
}).slice(0, toastsBefore).reduce(function (y, toast) {
|
|
167
|
+
// if the toast is expanded, add the height of the toast + gutter
|
|
168
|
+
if (isExpanded) {
|
|
169
|
+
var _toast$height2;
|
|
170
|
+
return y + ((_toast$height2 = toast.height) !== null && _toast$height2 !== void 0 ? _toast$height2 : 0) + GUTTER;
|
|
171
|
+
}
|
|
172
|
+
// if the toast is not expanded, add only the peek gutter
|
|
173
|
+
return y + PEEK_GUTTER;
|
|
174
|
+
}, 0);
|
|
175
|
+
|
|
176
|
+
// lift all info toasts up if there is a promo toast
|
|
177
|
+
if (hasPromoToast) {
|
|
178
|
+
offset += GUTTER + promoToastHeight;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// if this is a promo toast, then put it at the bottom and force the scale to 1
|
|
182
|
+
if (isPromotionalToast(toast)) {
|
|
183
|
+
offset = 0;
|
|
184
|
+
scale = 1;
|
|
185
|
+
}
|
|
186
|
+
return {
|
|
187
|
+
offset: offset,
|
|
188
|
+
scale: isExpanded ? 1 : scale
|
|
189
|
+
};
|
|
190
|
+
}, [hasPromoToast, infoToasts, isExpanded, promoToastHeight]);
|
|
191
|
+
var handleMouseEnter = function handleMouseEnter() {
|
|
192
|
+
if (isMobile) return;
|
|
193
|
+
setHasManuallyExpanded(true);
|
|
194
|
+
handlers.startPause();
|
|
195
|
+
};
|
|
196
|
+
var handleMouseLeave = function handleMouseLeave() {
|
|
197
|
+
if (isMobile) return;
|
|
198
|
+
setHasManuallyExpanded(false);
|
|
199
|
+
handlers.endPause();
|
|
200
|
+
};
|
|
201
|
+
var handleToastClick = function handleToastClick() {
|
|
202
|
+
if (!isMobile) return;
|
|
203
|
+
setHasManuallyExpanded(function (prev) {
|
|
204
|
+
var next = !prev;
|
|
205
|
+
if (next) {
|
|
206
|
+
handlers.startPause();
|
|
207
|
+
} else {
|
|
208
|
+
handlers.endPause();
|
|
209
|
+
}
|
|
210
|
+
return next;
|
|
211
|
+
});
|
|
212
|
+
};
|
|
213
|
+
return /*#__PURE__*/jsxs(BaseBox, {
|
|
214
|
+
position: "fixed",
|
|
215
|
+
zIndex: TOAST_Z_INDEX,
|
|
216
|
+
top: makeSize(containerGutter),
|
|
217
|
+
left: makeSize(containerGutter),
|
|
218
|
+
right: makeSize(containerGutter),
|
|
219
|
+
bottom: makeSize(containerGutter),
|
|
220
|
+
width: "calc(100% - ".concat(containerGutter * 2, "px)"),
|
|
221
|
+
maxWidth: makeSize(TOAST_MAX_WIDTH),
|
|
222
|
+
pointerEvents: "none",
|
|
223
|
+
className: containerClassName,
|
|
224
|
+
children: [/*#__PURE__*/jsx(BaseBox, _objectSpread({
|
|
225
|
+
position: "absolute",
|
|
226
|
+
bottom: "".concat(promoToastHeight, "px"),
|
|
227
|
+
left: "0px",
|
|
228
|
+
width: "100%",
|
|
229
|
+
pointerEvents: isExpanded ? 'all' : 'none',
|
|
230
|
+
height: makeSize(isExpanded ? totalHeight - promoToastHeight : frontToastHeight),
|
|
231
|
+
zIndex: -100,
|
|
232
|
+
onMouseEnter: handleMouseEnter,
|
|
233
|
+
onMouseLeave: handleMouseLeave,
|
|
234
|
+
onClick: handleToastClick
|
|
235
|
+
}, metaAttribute({
|
|
236
|
+
testID: 'toast-mouseover-container'
|
|
237
|
+
}))), recomputedToasts.map(function (toast, index) {
|
|
238
|
+
var _toast$position;
|
|
239
|
+
var toastPosition = (_toast$position = toast.position) !== null && _toast$position !== void 0 ? _toast$position : position;
|
|
240
|
+
var isPromotional = isPromotionalToast(toast);
|
|
241
|
+
var _calculateYPosition = calculateYPosition({
|
|
242
|
+
toast: toast,
|
|
243
|
+
isExpanded: isExpanded,
|
|
244
|
+
reverseOrder: reverseOrder,
|
|
245
|
+
index: index
|
|
246
|
+
}),
|
|
247
|
+
offset = _calculateYPosition.offset,
|
|
248
|
+
scale = _calculateYPosition.scale;
|
|
249
|
+
var positionStyle = getPositionStyle(toastPosition, offset, scale, theme);
|
|
250
|
+
// recalculate height of toast
|
|
251
|
+
var ref = function ref(el) {
|
|
252
|
+
if (el && typeof toast.height !== 'number') {
|
|
253
|
+
var height = el.getBoundingClientRect().height;
|
|
254
|
+
handlers.updateHeight(toast.id, height);
|
|
255
|
+
}
|
|
256
|
+
};
|
|
257
|
+
var toastHeight = toast.height;
|
|
258
|
+
if (index > MAX_TOASTS - 1 && !isPromotional) {
|
|
259
|
+
toastHeight = frontToastHeight;
|
|
260
|
+
}
|
|
261
|
+
if (isExpanded) {
|
|
262
|
+
toastHeight = toast.height;
|
|
263
|
+
}
|
|
264
|
+
return /*#__PURE__*/jsx(StyledToastWrapper, {
|
|
265
|
+
index: index,
|
|
266
|
+
ref: ref,
|
|
267
|
+
isExpanded: isExpanded,
|
|
268
|
+
isVisible: toast.visible,
|
|
269
|
+
isPromotional: isPromotional,
|
|
270
|
+
style: _objectSpread(_objectSpread({}, positionStyle), {}, {
|
|
271
|
+
zIndex: -1 * index,
|
|
272
|
+
height: toastHeight,
|
|
273
|
+
overflow: 'hidden'
|
|
274
|
+
}),
|
|
275
|
+
onMouseEnter: function onMouseEnter() {
|
|
276
|
+
if (isPromotional) return;
|
|
277
|
+
handleMouseEnter();
|
|
278
|
+
},
|
|
279
|
+
onMouseLeave: function onMouseLeave() {
|
|
280
|
+
if (isPromotional) return;
|
|
281
|
+
handleMouseLeave();
|
|
282
|
+
},
|
|
283
|
+
onClick: function onClick() {
|
|
284
|
+
if (isPromotional) return;
|
|
285
|
+
handleToastClick();
|
|
286
|
+
},
|
|
287
|
+
children: /*#__PURE__*/jsx(BaseBox, {
|
|
288
|
+
height: "fit-content",
|
|
289
|
+
width: "100%",
|
|
290
|
+
children: resolveValue(toast.message, _objectSpread(_objectSpread({}, toast), {}, {
|
|
291
|
+
index: index
|
|
292
|
+
}))
|
|
293
|
+
})
|
|
294
|
+
}, toast.id);
|
|
295
|
+
})]
|
|
296
|
+
});
|
|
297
|
+
};
|
|
298
|
+
var ToastContainer = function ToastContainer() {
|
|
299
|
+
return /*#__PURE__*/jsx(Toaster, {
|
|
300
|
+
position: "bottom-left"
|
|
301
|
+
});
|
|
302
|
+
};
|
|
303
|
+
|
|
304
|
+
export { ToastContainer };
|
|
305
|
+
//# sourceMappingURL=ToastContainer.web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToastContainer.web.js","sources":["../../../../../../src/components/Toast/ToastContainer.web.tsx"],"sourcesContent":["import type { ToastPosition, ToasterProps, Toast } from 'react-hot-toast';\nimport { resolveValue, useToaster } from 'react-hot-toast';\nimport React from 'react';\nimport styled from 'styled-components';\nimport {\n PEEKS,\n MAX_TOASTS,\n SCALE_FACTOR,\n GUTTER,\n PEEK_GUTTER,\n TOAST_MAX_WIDTH,\n TOAST_Z_INDEX,\n MIN_TOAST_MOBILE,\n MIN_TOAST_DESKTOP,\n CONTAINER_GUTTER_MOBILE,\n CONTAINER_GUTTER_DESKTOP,\n} from './constants';\nimport { makeMotionTime, makeSize, useTheme } from '~utils';\nimport BaseBox from '~components/Box/BaseBox';\nimport type { Theme } from '~components/BladeProvider';\nimport { useIsMobile } from '~utils/useIsMobile';\nimport { metaAttribute } from '~utils/metaAttribute';\n\ntype CalculateYPositionProps = {\n toast: Toast;\n index: number;\n isExpanded: boolean;\n reverseOrder?: boolean;\n};\n\nconst StyledToastWrapper = styled(BaseBox)<{\n isVisible: boolean;\n index: number;\n isExpanded: boolean;\n isPromotional: boolean;\n}>(({ isVisible, index, isExpanded, isPromotional }) => {\n let opacity = isVisible ? 1 : 0;\n // Only make the PEEKING and MAX_TOASTS toasts visible,\n // Every other toasts should be hidden\n if (index < PEEKS + MAX_TOASTS) {\n opacity = 1;\n } else if (isPromotional || isExpanded) {\n opacity = 1;\n } else {\n opacity = 0;\n }\n\n return {\n '& > *': {\n pointerEvents: opacity === 1 ? 'auto' : 'none',\n },\n opacity,\n };\n});\n\nconst getPositionStyle = (\n position: ToastPosition,\n offset: number,\n scale: number,\n theme: Theme,\n): React.CSSProperties => {\n const top = position.includes('top');\n const verticalStyle: React.CSSProperties = top ? { top: 0 } : { bottom: 0 };\n const horizontalStyle: React.CSSProperties = position.includes('center')\n ? {\n justifyContent: 'center',\n }\n : position.includes('right')\n ? {\n justifyContent: 'flex-end',\n }\n : {};\n\n return {\n left: 0,\n right: 0,\n display: 'flex',\n position: 'absolute',\n transformOrigin: 'center',\n transition: `${makeMotionTime(theme.motion.duration.gentle)} ${\n theme.motion.easing.standard.effective\n }`,\n transitionProperty: 'transform, opacity, height',\n transform: `translateY(${offset * (top ? 1 : -1)}px) scale(${scale})`,\n ...verticalStyle,\n ...horizontalStyle,\n };\n};\n\nfunction isPromotionalToast(toast: Toast): boolean {\n // @ts-expect-error\n return toast.type == 'promotional';\n}\n\nconst Toaster: React.FC<ToasterProps> = ({\n reverseOrder,\n position = 'top-center',\n toastOptions,\n containerClassName,\n}) => {\n const { toasts, handlers } = useToaster(toastOptions);\n const { theme } = useTheme();\n const [frontToastHeight, setFrontToastHeight] = React.useState(0);\n const [hasManuallyExpanded, setHasManuallyExpanded] = React.useState(false);\n const isMobile = useIsMobile();\n const minToasts = isMobile ? MIN_TOAST_MOBILE : MIN_TOAST_DESKTOP;\n const containerGutter = isMobile ? CONTAINER_GUTTER_MOBILE : CONTAINER_GUTTER_DESKTOP;\n\n const infoToasts = React.useMemo(() => toasts.filter((toast) => !isPromotionalToast(toast)), [\n toasts,\n ]);\n const promoToasts = React.useMemo(() => toasts.filter((toast) => isPromotionalToast(toast)), [\n toasts,\n ]);\n\n // always keep promo toasts at the bottom of the stack\n const recomputedToasts = React.useMemo(() => [...infoToasts, ...promoToasts], [\n infoToasts,\n promoToasts,\n ]);\n\n const hasPromoToast = promoToasts.length > 0 && promoToasts[0]?.visible;\n const promoToastHeight = promoToasts[0]?.height ?? 0;\n const isExpanded = hasManuallyExpanded || recomputedToasts.length <= minToasts;\n\n React.useLayoutEffect(() => {\n // find the first toast which is visible\n const firstToast = infoToasts.find((t, index) => t.visible && index === 0);\n if (firstToast) {\n setFrontToastHeight(firstToast.height ?? 0);\n }\n }, [infoToasts]);\n\n // calculate total height of all toasts\n const totalHeight = React.useMemo(() => {\n return (\n recomputedToasts\n // only consider visible recomputedToasts\n .filter((toast) => toast.visible)\n .reduce((prevHeight, toast) => prevHeight + (toast.height ?? 0), 0) +\n recomputedToasts.length * GUTTER\n );\n }, [recomputedToasts]);\n\n // Stacking logic explained in detail:\n // https://www.loom.com/share/522d9a445e2f41e1886cce4decb9ab9d?sid=4287acf6-8d44-431b-93e1-c1a0d40a0aba\n //\n // 1. 3 toasts can be stacked on top of each other\n // 2. After 3 toasts, the toasts will be scaled down and peek from behind\n // 3. There can be maximum of 3 toasts peeking from behind\n // 4. After 3 peeking toasts, the toasts will be hidden\n // 5. If there is a promo toast, all toasts will be lifted up\n // 6. Promo toasts will always be on the bottom\n const calculateYPosition = React.useCallback(\n ({ toast, index }: CalculateYPositionProps) => {\n // find the current toast index\n const toastIndex = infoToasts.findIndex((t) => t.id === toast.id);\n // number of toasts before this toast\n const toastsBefore = infoToasts.filter((toast, i) => i < toastIndex && toast.visible).length;\n\n let scale = Math.max(0.7, 1 - toastsBefore * SCALE_FACTOR);\n // first toast should always have a scale of 1\n if (index < MAX_TOASTS) {\n scale = 1;\n }\n\n // y position of toast,\n let offset = infoToasts\n .filter((toast) => toast.visible)\n .slice(0, toastsBefore)\n .reduce((y, toast) => {\n // if the toast is expanded, add the height of the toast + gutter\n if (isExpanded) {\n return y + (toast.height ?? 0) + GUTTER;\n }\n // if the toast is not expanded, add only the peek gutter\n return y + PEEK_GUTTER;\n }, 0);\n\n // lift all info toasts up if there is a promo toast\n if (hasPromoToast) {\n offset += GUTTER + promoToastHeight;\n }\n\n // if this is a promo toast, then put it at the bottom and force the scale to 1\n if (isPromotionalToast(toast)) {\n offset = 0;\n scale = 1;\n }\n\n return { offset, scale: isExpanded ? 1 : scale };\n },\n [hasPromoToast, infoToasts, isExpanded, promoToastHeight],\n );\n\n const handleMouseEnter = (): void => {\n if (isMobile) return;\n setHasManuallyExpanded(true);\n handlers.startPause();\n };\n\n const handleMouseLeave = (): void => {\n if (isMobile) return;\n setHasManuallyExpanded(false);\n handlers.endPause();\n };\n\n const handleToastClick = (): void => {\n if (!isMobile) return;\n setHasManuallyExpanded((prev) => {\n const next = !prev;\n if (next) {\n handlers.startPause();\n } else {\n handlers.endPause();\n }\n return next;\n });\n };\n\n return (\n <BaseBox\n position=\"fixed\"\n zIndex={TOAST_Z_INDEX}\n top={makeSize(containerGutter)}\n left={makeSize(containerGutter)}\n right={makeSize(containerGutter)}\n bottom={makeSize(containerGutter)}\n width={`calc(100% - ${containerGutter * 2}px)`}\n maxWidth={makeSize(TOAST_MAX_WIDTH)}\n pointerEvents=\"none\"\n className={containerClassName}\n >\n {/*\n * Mouseover container,\n * fills in the gap between toasts so that mouseleave doesn't trigger in the gaps\n */}\n <BaseBox\n position=\"absolute\"\n bottom={`${promoToastHeight}px`}\n left=\"0px\"\n width=\"100%\"\n pointerEvents={isExpanded ? 'all' : 'none'}\n height={makeSize(isExpanded ? totalHeight - promoToastHeight : frontToastHeight)}\n zIndex={-100}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onClick={handleToastClick}\n {...metaAttribute({ testID: 'toast-mouseover-container' })}\n />\n {recomputedToasts.map((toast, index) => {\n const toastPosition = toast.position ?? position;\n const isPromotional = isPromotionalToast(toast);\n const { offset, scale } = calculateYPosition({\n toast,\n isExpanded,\n reverseOrder,\n index,\n });\n const positionStyle = getPositionStyle(toastPosition, offset, scale, theme);\n // recalculate height of toast\n const ref = (el: HTMLDivElement): void => {\n if (el && typeof toast.height !== 'number') {\n const height = el.getBoundingClientRect().height;\n handlers.updateHeight(toast.id, height);\n }\n };\n\n let toastHeight = toast.height;\n if (index > MAX_TOASTS - 1 && !isPromotional) {\n toastHeight = frontToastHeight;\n }\n if (isExpanded) {\n toastHeight = toast.height;\n }\n\n return (\n <StyledToastWrapper\n key={toast.id}\n index={index}\n ref={ref}\n isExpanded={isExpanded}\n isVisible={toast.visible}\n isPromotional={isPromotional}\n style={{\n ...positionStyle,\n zIndex: -1 * index,\n height: toastHeight,\n overflow: 'hidden',\n }}\n onMouseEnter={() => {\n if (isPromotional) return;\n handleMouseEnter();\n }}\n onMouseLeave={() => {\n if (isPromotional) return;\n handleMouseLeave();\n }}\n onClick={() => {\n if (isPromotional) return;\n handleToastClick();\n }}\n >\n <BaseBox height=\"fit-content\" width=\"100%\">\n {resolveValue(toast.message, { ...toast, index })}\n </BaseBox>\n </StyledToastWrapper>\n );\n })}\n </BaseBox>\n );\n};\n\nconst ToastContainer = (): React.ReactElement => {\n return <Toaster position=\"bottom-left\" />;\n};\n\nexport { ToastContainer };\n"],"names":["StyledToastWrapper","styled","BaseBox","withConfig","displayName","componentId","_ref","isVisible","index","isExpanded","isPromotional","opacity","PEEKS","MAX_TOASTS","pointerEvents","getPositionStyle","position","offset","scale","theme","top","includes","verticalStyle","bottom","horizontalStyle","justifyContent","_objectSpread","left","right","display","transformOrigin","transition","concat","makeMotionTime","motion","duration","gentle","easing","standard","effective","transitionProperty","transform","isPromotionalToast","toast","type","Toaster","_ref2","_promoToasts$","_promoToasts$0$height","_promoToasts$2","reverseOrder","_ref2$position","toastOptions","containerClassName","_useToaster","useToaster","toasts","handlers","_useTheme","useTheme","_React$useState","React","useState","_React$useState2","_slicedToArray","frontToastHeight","setFrontToastHeight","_React$useState3","_React$useState4","hasManuallyExpanded","setHasManuallyExpanded","isMobile","useIsMobile","minToasts","MIN_TOAST_MOBILE","MIN_TOAST_DESKTOP","containerGutter","CONTAINER_GUTTER_MOBILE","CONTAINER_GUTTER_DESKTOP","infoToasts","useMemo","filter","promoToasts","recomputedToasts","_toConsumableArray","hasPromoToast","length","visible","promoToastHeight","height","useLayoutEffect","firstToast","find","t","_firstToast$height","totalHeight","reduce","prevHeight","_toast$height","GUTTER","calculateYPosition","useCallback","_ref3","toastIndex","findIndex","id","toastsBefore","i","Math","max","SCALE_FACTOR","slice","y","_toast$height2","PEEK_GUTTER","handleMouseEnter","startPause","handleMouseLeave","endPause","handleToastClick","prev","next","_jsxs","zIndex","TOAST_Z_INDEX","makeSize","width","maxWidth","TOAST_MAX_WIDTH","className","children","_jsx","onMouseEnter","onMouseLeave","onClick","metaAttribute","testID","map","_toast$position","toastPosition","_calculateYPosition","positionStyle","ref","el","getBoundingClientRect","updateHeight","toastHeight","style","overflow","resolveValue","message","ToastContainer"],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import '../../tokens/global/index.js';
|
|
2
|
+
import { size } from '../../tokens/global/size.js';
|
|
3
|
+
|
|
4
|
+
var TOAST_MAX_WIDTH = size['360'];
|
|
5
|
+
// higher than modal
|
|
6
|
+
var TOAST_Z_INDEX = 2000;
|
|
7
|
+
|
|
8
|
+
// Space between the toasts
|
|
9
|
+
var GUTTER = 12;
|
|
10
|
+
// Space between the collapsed toast's peek
|
|
11
|
+
var PEEK_GUTTER = 12;
|
|
12
|
+
// Gap between the toast container and the page body
|
|
13
|
+
var CONTAINER_GUTTER_MOBILE = 16;
|
|
14
|
+
var CONTAINER_GUTTER_DESKTOP = 24;
|
|
15
|
+
// How much to scale down the peeking toasts
|
|
16
|
+
var SCALE_FACTOR = 0.05;
|
|
17
|
+
// While collapsed, how many toasts to show
|
|
18
|
+
var MAX_TOASTS = 1;
|
|
19
|
+
// Minimum toasts to show on mobile and desktop
|
|
20
|
+
var MIN_TOAST_MOBILE = 1;
|
|
21
|
+
var MIN_TOAST_DESKTOP = 3;
|
|
22
|
+
// While collapsed, how many toasts should be peeking
|
|
23
|
+
var PEEKS = 3;
|
|
24
|
+
|
|
25
|
+
export { CONTAINER_GUTTER_DESKTOP, CONTAINER_GUTTER_MOBILE, GUTTER, MAX_TOASTS, MIN_TOAST_DESKTOP, MIN_TOAST_MOBILE, PEEKS, PEEK_GUTTER, SCALE_FACTOR, TOAST_MAX_WIDTH, TOAST_Z_INDEX };
|
|
26
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sources":["../../../../../../src/components/Toast/constants.ts"],"sourcesContent":["import { size } from '~tokens/global';\n\nexport const TOAST_MAX_WIDTH = size['360'];\n// higher than modal\nexport const TOAST_Z_INDEX = 2000;\n\n// Space between the toasts\nexport const GUTTER = 12;\n// Space between the collapsed toast's peek\nexport const PEEK_GUTTER = 12;\n// Gap between the toast container and the page body\nexport const CONTAINER_GUTTER_MOBILE = 16;\nexport const CONTAINER_GUTTER_DESKTOP = 24;\n// How much to scale down the peeking toasts\nexport const SCALE_FACTOR = 0.05;\n// While collapsed, how many toasts to show\nexport const MAX_TOASTS = 1;\n// Minimum toasts to show on mobile and desktop\nexport const MIN_TOAST_MOBILE = 1;\nexport const MIN_TOAST_DESKTOP = 3;\n// While collapsed, how many toasts should be peeking\nexport const PEEKS = 3;\n"],"names":["TOAST_MAX_WIDTH","size","TOAST_Z_INDEX","GUTTER","PEEK_GUTTER","CONTAINER_GUTTER_MOBILE","CONTAINER_GUTTER_DESKTOP","SCALE_FACTOR","MAX_TOASTS","MIN_TOAST_MOBILE","MIN_TOAST_DESKTOP","PEEKS"],"mappings":";;;IAEaA,eAAe,GAAGC,IAAI,CAAC,KAAK,EAAC;AAC1C;AACO,IAAMC,aAAa,GAAG,KAAI;;AAEjC;AACO,IAAMC,MAAM,GAAG,GAAE;AACxB;AACO,IAAMC,WAAW,GAAG,GAAE;AAC7B;AACO,IAAMC,uBAAuB,GAAG,GAAE;AAClC,IAAMC,wBAAwB,GAAG,GAAE;AAC1C;AACO,IAAMC,YAAY,GAAG,KAAI;AAChC;AACO,IAAMC,UAAU,GAAG,EAAC;AAC3B;AACO,IAAMC,gBAAgB,GAAG,EAAC;AAC1B,IAAMC,iBAAiB,GAAG,EAAC;AAClC;AACO,IAAMC,KAAK,GAAG;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
2
|
+
import toast, { useToasterStore } from 'react-hot-toast';
|
|
3
|
+
import { Toast } from './Toast.web.js';
|
|
4
|
+
import '../../utils/logger/index.js';
|
|
5
|
+
import { jsx } from 'react/jsx-runtime';
|
|
6
|
+
import { logger } from '../../utils/logger/logger.js';
|
|
7
|
+
|
|
8
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
9
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
10
|
+
var useToast = function useToast() {
|
|
11
|
+
var _useToasterStore = useToasterStore(),
|
|
12
|
+
toasts = _useToasterStore.toasts;
|
|
13
|
+
var show = function show(props) {
|
|
14
|
+
var _props$type;
|
|
15
|
+
props.type = (_props$type = props.type) !== null && _props$type !== void 0 ? _props$type : 'informational';
|
|
16
|
+
|
|
17
|
+
// Do not show promotional toasts if there is already one
|
|
18
|
+
if (toasts.find(function (t) {
|
|
19
|
+
// @ts-expect-error - react-hot-toast doesn't recognize our promotional type
|
|
20
|
+
return t.type === 'promotional';
|
|
21
|
+
}) && props.type === 'promotional') {
|
|
22
|
+
if (true) {
|
|
23
|
+
logger({
|
|
24
|
+
message: 'There can only be one promotional toast at a time',
|
|
25
|
+
type: 'warn',
|
|
26
|
+
moduleName: 'Toast'
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
return '';
|
|
30
|
+
}
|
|
31
|
+
var isPromoToast = props.type === 'promotional';
|
|
32
|
+
if (props.autoDismiss === undefined) {
|
|
33
|
+
// Promotional toasts should not auto dismiss
|
|
34
|
+
props.autoDismiss = !isPromoToast;
|
|
35
|
+
}
|
|
36
|
+
if (props.duration === undefined) {
|
|
37
|
+
// Set default durations
|
|
38
|
+
if (isPromoToast) {
|
|
39
|
+
props.duration = 8000;
|
|
40
|
+
} else {
|
|
41
|
+
props.duration = 4000;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// If autoDismiss is false, set duration to infinity
|
|
46
|
+
if (!props.autoDismiss) {
|
|
47
|
+
props.duration = Infinity;
|
|
48
|
+
}
|
|
49
|
+
return toast.custom(function (_ref) {
|
|
50
|
+
var visible = _ref.visible,
|
|
51
|
+
id = _ref.id;
|
|
52
|
+
return /*#__PURE__*/jsx(Toast, _objectSpread(_objectSpread({}, props), {}, {
|
|
53
|
+
id: id,
|
|
54
|
+
isVisible: visible
|
|
55
|
+
}));
|
|
56
|
+
}, props);
|
|
57
|
+
};
|
|
58
|
+
return {
|
|
59
|
+
toasts: toasts,
|
|
60
|
+
show: show,
|
|
61
|
+
dismiss: toast.dismiss
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
export { useToast };
|
|
66
|
+
//# sourceMappingURL=useToast.js.map
|