@razorpay/blade 11.2.1 → 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.
Files changed (39) hide show
  1. package/build/lib/native/components/Toast/Toast.native.js +7 -0
  2. package/build/lib/native/components/Toast/Toast.native.js.map +1 -0
  3. package/build/lib/native/components/Toast/ToastContainer.native.js +7 -0
  4. package/build/lib/native/components/Toast/ToastContainer.native.js.map +1 -0
  5. package/build/lib/native/components/Toast/useToast.js +9 -0
  6. package/build/lib/native/components/Toast/useToast.js.map +1 -0
  7. package/build/lib/native/components/index.js +2 -0
  8. package/build/lib/native/components/index.js.map +1 -1
  9. package/build/lib/web/development/components/Toast/Toast.web.js +144 -0
  10. package/build/lib/web/development/components/Toast/Toast.web.js.map +1 -0
  11. package/build/lib/web/development/components/Toast/ToastContainer.web.js +305 -0
  12. package/build/lib/web/development/components/Toast/ToastContainer.web.js.map +1 -0
  13. package/build/lib/web/development/components/Toast/constants.js +26 -0
  14. package/build/lib/web/development/components/Toast/constants.js.map +1 -0
  15. package/build/lib/web/development/components/Toast/index.js +4 -0
  16. package/build/lib/web/development/components/Toast/index.js.map +1 -0
  17. package/build/lib/web/development/components/Toast/types.js +2 -0
  18. package/build/lib/web/development/components/Toast/types.js.map +1 -0
  19. package/build/lib/web/development/components/Toast/useToast.js +66 -0
  20. package/build/lib/web/development/components/Toast/useToast.js.map +1 -0
  21. package/build/lib/web/development/components/index.js +3 -0
  22. package/build/lib/web/development/components/index.js.map +1 -1
  23. package/build/lib/web/production/components/Toast/Toast.web.js +144 -0
  24. package/build/lib/web/production/components/Toast/Toast.web.js.map +1 -0
  25. package/build/lib/web/production/components/Toast/ToastContainer.web.js +305 -0
  26. package/build/lib/web/production/components/Toast/ToastContainer.web.js.map +1 -0
  27. package/build/lib/web/production/components/Toast/constants.js +26 -0
  28. package/build/lib/web/production/components/Toast/constants.js.map +1 -0
  29. package/build/lib/web/production/components/Toast/index.js +4 -0
  30. package/build/lib/web/production/components/Toast/index.js.map +1 -0
  31. package/build/lib/web/production/components/Toast/types.js +2 -0
  32. package/build/lib/web/production/components/Toast/types.js.map +1 -0
  33. package/build/lib/web/production/components/Toast/useToast.js +66 -0
  34. package/build/lib/web/production/components/Toast/useToast.js.map +1 -0
  35. package/build/lib/web/production/components/index.js +3 -0
  36. package/build/lib/web/production/components/index.js.map +1 -1
  37. package/build/types/components/index.d.ts +71 -1
  38. package/build/types/components/index.native.d.ts +71 -1
  39. package/package.json +3 -1
@@ -0,0 +1,7 @@
1
+ import { throwBladeError } from '../../utils/logger/logger.js';
2
+ import { jsx, Fragment } from 'react/jsx-runtime';
3
+
4
+ var Toast=function Toast(_props){throwBladeError({message:'Toast is not yet implemented for native',moduleName:'Toast'});return jsx(Fragment,{});};
5
+
6
+ export { Toast };
7
+ //# sourceMappingURL=Toast.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toast.native.js","sources":["../../../../../src/components/Toast/Toast.native.tsx"],"sourcesContent":["import type { ToastProps } from './types';\nimport { throwBladeError } from '~utils/logger';\n\nconst Toast = (\n _props: ToastProps & {\n isVisible?: boolean;\n },\n): React.ReactElement => {\n throwBladeError({\n message: 'Toast is not yet implemented for native',\n moduleName: 'Toast',\n });\n\n return <></>;\n};\n\nexport { Toast };\n"],"names":["Toast","_props","throwBladeError","message","moduleName","_jsx","_Fragment"],"mappings":";;;AAGM,IAAAA,KAAK,CAAG,SAARA,KAAKA,CACTC,MAEC,CACsB,CACvBC,eAAe,CAAC,CACdC,OAAO,CAAE,yCAAyC,CAClDC,UAAU,CAAE,OACd,CAAC,CAAC,CAEF,OAAOC,GAAA,CAAAC,QAAA,CAAA,EAAI,CAAC,CACd;;;;"}
@@ -0,0 +1,7 @@
1
+ import { throwBladeError } from '../../utils/logger/logger.js';
2
+ import { jsx, Fragment } from 'react/jsx-runtime';
3
+
4
+ var ToastContainer=function ToastContainer(){throwBladeError({message:'ToastContainer is not yet implemented for native',moduleName:'ToastContainer'});return jsx(Fragment,{});};
5
+
6
+ export { ToastContainer };
7
+ //# sourceMappingURL=ToastContainer.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToastContainer.native.js","sources":["../../../../../src/components/Toast/ToastContainer.native.tsx"],"sourcesContent":["import { throwBladeError } from '~utils/logger';\n\nconst ToastContainer = (): React.ReactElement => {\n throwBladeError({\n message: 'ToastContainer is not yet implemented for native',\n moduleName: 'ToastContainer',\n });\n\n return <></>;\n};\n\nexport { ToastContainer };\n"],"names":["ToastContainer","throwBladeError","message","moduleName","_jsx","_Fragment"],"mappings":";;;AAEM,IAAAA,cAAc,CAAG,SAAjBA,cAAcA,EAA6B,CAC/CC,eAAe,CAAC,CACdC,OAAO,CAAE,kDAAkD,CAC3DC,UAAU,CAAE,gBACd,CAAC,CAAC,CAEF,OAAOC,GAAA,CAAAC,QAAA,CAAA,EAAI,CAAC,CACd;;;;"}
@@ -0,0 +1,9 @@
1
+ import toast, { useToasterStore } from 'react-hot-toast';
2
+ import { Toast } from './Toast.native.js';
3
+ import { logger } from '../../utils/logger/logger.js';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ var useToast=function useToast(){var _useToasterStore=useToasterStore(),toasts=_useToasterStore.toasts;var show=function show(props){var _props$type;props.type=(_props$type=props.type)!=null?_props$type:'informational';if(toasts.find(function(t){return t.type==='promotional';})&&props.type==='promotional'){if(__DEV__){logger({message:'There can only be one promotional toast at a time',type:'warn',moduleName:'Toast'});}return '';}var isPromoToast=props.type==='promotional';if(props.autoDismiss===undefined){props.autoDismiss=!isPromoToast;}if(props.duration===undefined){if(isPromoToast){props.duration=8000;}else {props.duration=4000;}}if(!props.autoDismiss){props.duration=Infinity;}return toast.custom(function(_ref){var visible=_ref.visible,id=_ref.id;return jsx(Toast,Object.assign({},props,{id:id,isVisible:visible}));},props);};return {toasts:toasts,show:show,dismiss:toast.dismiss};};
7
+
8
+ export { useToast };
9
+ //# sourceMappingURL=useToast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useToast.js","sources":["../../../../../src/components/Toast/useToast.tsx"],"sourcesContent":["import type { Toast } from 'react-hot-toast';\nimport toast, { useToasterStore } from 'react-hot-toast';\nimport type { ToastProps } from './types';\nimport { Toast as ToastComponent } from './Toast';\nimport { logger } from '~utils/logger';\n\ntype BladeToast = Omit<Toast, 'type'> & ToastProps;\ntype UseToastReturn = {\n toasts: BladeToast[];\n show: (props: ToastProps) => string;\n dismiss: (id?: string) => void;\n};\n\nconst useToast = (): UseToastReturn => {\n const { toasts } = useToasterStore();\n const show = (props: ToastProps): string => {\n props.type = props.type ?? 'informational';\n\n // Do not show promotional toasts if there is already one\n if (\n toasts.find((t) => {\n // @ts-expect-error - react-hot-toast doesn't recognize our promotional type\n return t.type === 'promotional';\n }) &&\n props.type === 'promotional'\n ) {\n if (__DEV__) {\n logger({\n message: 'There can only be one promotional toast at a time',\n type: 'warn',\n moduleName: 'Toast',\n });\n }\n return '';\n }\n\n const isPromoToast = props.type === 'promotional';\n if (props.autoDismiss === undefined) {\n // Promotional toasts should not auto dismiss\n props.autoDismiss = !isPromoToast;\n }\n\n if (props.duration === undefined) {\n // Set default durations\n if (isPromoToast) {\n props.duration = 8000;\n } else {\n props.duration = 4000;\n }\n }\n\n // If autoDismiss is false, set duration to infinity\n if (!props.autoDismiss) {\n props.duration = Infinity;\n }\n\n return toast.custom(({ visible, id }) => {\n return <ToastComponent {...props} id={id} isVisible={visible} />;\n }, props);\n };\n\n return {\n toasts: (toasts as unknown) as BladeToast[],\n show,\n dismiss: toast.dismiss,\n };\n};\n\nexport type { UseToastReturn };\nexport { useToast };\n"],"names":["useToast","_useToasterStore","useToasterStore","toasts","show","props","_props$type","type","find","t","__DEV__","logger","message","moduleName","isPromoToast","autoDismiss","undefined","duration","Infinity","toast","custom","_ref","visible","id","_jsx","ToastComponent","Object","assign","isVisible","dismiss"],"mappings":";;;;;AAaM,IAAAA,QAAQ,CAAG,SAAXA,QAAQA,EAAyB,CACrC,IAAAC,gBAAA,CAAmBC,eAAe,EAAE,CAA5BC,MAAM,CAAAF,gBAAA,CAANE,MAAM,CACd,IAAMC,IAAI,CAAG,SAAPA,IAAIA,CAAIC,KAAiB,CAAa,CAAAC,IAAAA,WAAA,CAC1CD,KAAK,CAACE,IAAI,CAAAD,CAAAA,WAAA,CAAGD,KAAK,CAACE,IAAI,GAAA,IAAA,CAAAD,WAAA,CAAI,eAAe,CAG1C,GACEH,MAAM,CAACK,IAAI,CAAC,SAACC,CAAC,CAAK,CAEjB,OAAOA,CAAC,CAACF,IAAI,GAAK,aAAa,CACjC,CAAC,CAAC,EACFF,KAAK,CAACE,IAAI,GAAK,aAAa,CAC5B,CACA,GAAIG,OAAO,CAAE,CACXC,MAAM,CAAC,CACLC,OAAO,CAAE,mDAAmD,CAC5DL,IAAI,CAAE,MAAM,CACZM,UAAU,CAAE,OACd,CAAC,CAAC,CACJ,CACA,OAAO,EAAE,CACX,CAEA,IAAMC,YAAY,CAAGT,KAAK,CAACE,IAAI,GAAK,aAAa,CACjD,GAAIF,KAAK,CAACU,WAAW,GAAKC,SAAS,CAAE,CAEnCX,KAAK,CAACU,WAAW,CAAG,CAACD,YAAY,CACnC,CAEA,GAAIT,KAAK,CAACY,QAAQ,GAAKD,SAAS,CAAE,CAEhC,GAAIF,YAAY,CAAE,CAChBT,KAAK,CAACY,QAAQ,CAAG,IAAI,CACvB,CAAC,KAAM,CACLZ,KAAK,CAACY,QAAQ,CAAG,IAAI,CACvB,CACF,CAGA,GAAI,CAACZ,KAAK,CAACU,WAAW,CAAE,CACtBV,KAAK,CAACY,QAAQ,CAAGC,QAAQ,CAC3B,CAEA,OAAOC,KAAK,CAACC,MAAM,CAAC,SAAAC,IAAA,CAAqB,CAAA,IAAlBC,OAAO,CAAAD,IAAA,CAAPC,OAAO,CAAEC,EAAE,CAAAF,IAAA,CAAFE,EAAE,CAChC,OAAOC,GAAA,CAACC,KAAc,CAAAC,MAAA,CAAAC,MAAA,CAAA,EAAA,CAAKtB,KAAK,CAAA,CAAEkB,EAAE,CAAEA,EAAG,CAACK,SAAS,CAAEN,OAAQ,CAAE,CAAA,CAAC,CAClE,CAAC,CAAEjB,KAAK,CAAC,CACX,CAAC,CAED,OAAO,CACLF,MAAM,CAAGA,MAAkC,CAC3CC,IAAI,CAAJA,IAAI,CACJyB,OAAO,CAAEV,KAAK,CAACU,OACjB,CAAC,CACH;;;;"}
@@ -344,6 +344,8 @@ export { TabPanel } from './Tabs/TabPanel.native.js';
344
344
  export { Tag } from './Tag/Tag.js';
345
345
  export { Tooltip } from './Tooltip/Tooltip.native.js';
346
346
  export { TooltipInteractiveWrapper } from './Tooltip/TooltipInteractiveWrapper.native.js';
347
+ export { ToastContainer } from './Toast/ToastContainer.native.js';
348
+ export { useToast } from './Toast/useToast.js';
347
349
  export { Heading } from './Typography/Heading/Heading.js';
348
350
  export { Text, getTextProps } from './Typography/Text/Text.js';
349
351
  export { Code } from './Typography/Code/Code.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -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,4 @@
1
+ export { ToastContainer } from './ToastContainer.web.js';
2
+ export { useToast } from './useToast.js';
3
+ import './types.js';
4
+ //# sourceMappingURL=index.js.map