@metamask/design-system-react-native 0.22.0 → 0.24.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 (180) hide show
  1. package/CHANGELOG.md +36 -1
  2. package/dist/components/AvatarGroup/AvatarGroup.cjs +11 -12
  3. package/dist/components/AvatarGroup/AvatarGroup.cjs.map +1 -1
  4. package/dist/components/AvatarGroup/AvatarGroup.constants.cjs +11 -12
  5. package/dist/components/AvatarGroup/AvatarGroup.constants.cjs.map +1 -1
  6. package/dist/components/AvatarGroup/AvatarGroup.constants.d.cts +1 -2
  7. package/dist/components/AvatarGroup/AvatarGroup.constants.d.cts.map +1 -1
  8. package/dist/components/AvatarGroup/AvatarGroup.constants.d.mts +1 -2
  9. package/dist/components/AvatarGroup/AvatarGroup.constants.d.mts.map +1 -1
  10. package/dist/components/AvatarGroup/AvatarGroup.constants.mjs +1 -2
  11. package/dist/components/AvatarGroup/AvatarGroup.constants.mjs.map +1 -1
  12. package/dist/components/AvatarGroup/AvatarGroup.d.cts.map +1 -1
  13. package/dist/components/AvatarGroup/AvatarGroup.d.mts.map +1 -1
  14. package/dist/components/AvatarGroup/AvatarGroup.mjs +2 -3
  15. package/dist/components/AvatarGroup/AvatarGroup.mjs.map +1 -1
  16. package/dist/components/AvatarGroup/AvatarGroup.types.cjs.map +1 -1
  17. package/dist/components/AvatarGroup/AvatarGroup.types.d.cts +7 -24
  18. package/dist/components/AvatarGroup/AvatarGroup.types.d.cts.map +1 -1
  19. package/dist/components/AvatarGroup/AvatarGroup.types.d.mts +7 -24
  20. package/dist/components/AvatarGroup/AvatarGroup.types.d.mts.map +1 -1
  21. package/dist/components/AvatarGroup/AvatarGroup.types.mjs.map +1 -1
  22. package/dist/components/AvatarGroup/index.cjs +3 -3
  23. package/dist/components/AvatarGroup/index.cjs.map +1 -1
  24. package/dist/components/AvatarGroup/index.d.cts +1 -1
  25. package/dist/components/AvatarGroup/index.d.cts.map +1 -1
  26. package/dist/components/AvatarGroup/index.d.mts +1 -1
  27. package/dist/components/AvatarGroup/index.d.mts.map +1 -1
  28. package/dist/components/AvatarGroup/index.mjs +1 -1
  29. package/dist/components/AvatarGroup/index.mjs.map +1 -1
  30. package/dist/components/AvatarIcon/AvatarIcon.cjs +1 -2
  31. package/dist/components/AvatarIcon/AvatarIcon.cjs.map +1 -1
  32. package/dist/components/AvatarIcon/AvatarIcon.constants.cjs +10 -11
  33. package/dist/components/AvatarIcon/AvatarIcon.constants.cjs.map +1 -1
  34. package/dist/components/AvatarIcon/AvatarIcon.constants.d.cts +1 -2
  35. package/dist/components/AvatarIcon/AvatarIcon.constants.d.cts.map +1 -1
  36. package/dist/components/AvatarIcon/AvatarIcon.constants.d.mts +1 -2
  37. package/dist/components/AvatarIcon/AvatarIcon.constants.d.mts.map +1 -1
  38. package/dist/components/AvatarIcon/AvatarIcon.constants.mjs +1 -2
  39. package/dist/components/AvatarIcon/AvatarIcon.constants.mjs.map +1 -1
  40. package/dist/components/AvatarIcon/AvatarIcon.d.cts.map +1 -1
  41. package/dist/components/AvatarIcon/AvatarIcon.d.mts.map +1 -1
  42. package/dist/components/AvatarIcon/AvatarIcon.mjs +1 -2
  43. package/dist/components/AvatarIcon/AvatarIcon.mjs.map +1 -1
  44. package/dist/components/BannerAlert/BannerAlert.cjs +1 -2
  45. package/dist/components/BannerAlert/BannerAlert.cjs.map +1 -1
  46. package/dist/components/BannerAlert/BannerAlert.constants.cjs +8 -9
  47. package/dist/components/BannerAlert/BannerAlert.constants.cjs.map +1 -1
  48. package/dist/components/BannerAlert/BannerAlert.constants.d.cts +1 -2
  49. package/dist/components/BannerAlert/BannerAlert.constants.d.cts.map +1 -1
  50. package/dist/components/BannerAlert/BannerAlert.constants.d.mts +1 -2
  51. package/dist/components/BannerAlert/BannerAlert.constants.d.mts.map +1 -1
  52. package/dist/components/BannerAlert/BannerAlert.constants.mjs +1 -2
  53. package/dist/components/BannerAlert/BannerAlert.constants.mjs.map +1 -1
  54. package/dist/components/BannerAlert/BannerAlert.d.cts.map +1 -1
  55. package/dist/components/BannerAlert/BannerAlert.d.mts.map +1 -1
  56. package/dist/components/BannerAlert/BannerAlert.mjs +1 -2
  57. package/dist/components/BannerAlert/BannerAlert.mjs.map +1 -1
  58. package/dist/components/Icon/Icon.assets.cjs +14 -0
  59. package/dist/components/Icon/Icon.assets.cjs.map +1 -1
  60. package/dist/components/Icon/Icon.assets.d.cts.map +1 -1
  61. package/dist/components/Icon/Icon.assets.d.mts.map +1 -1
  62. package/dist/components/Icon/Icon.assets.mjs +14 -0
  63. package/dist/components/Icon/Icon.assets.mjs.map +1 -1
  64. package/dist/components/Icon/Icon.cjs +2 -2
  65. package/dist/components/Icon/Icon.cjs.map +1 -1
  66. package/dist/components/Icon/Icon.d.cts.map +1 -1
  67. package/dist/components/Icon/Icon.d.mts.map +1 -1
  68. package/dist/components/Icon/Icon.mjs +1 -1
  69. package/dist/components/Icon/Icon.mjs.map +1 -1
  70. package/dist/components/Icon/assets/candlestick.svg +1 -1
  71. package/dist/components/Icon/assets/group.svg +1 -0
  72. package/dist/components/Icon/assets/list-arrow.svg +1 -0
  73. package/dist/components/Icon/assets/merge.svg +1 -0
  74. package/dist/components/Icon/assets/musd-filled.svg +1 -0
  75. package/dist/components/Icon/assets/musd.svg +1 -0
  76. package/dist/components/Icon/assets/pie-chart.svg +1 -0
  77. package/dist/components/Icon/assets/predictions.svg +1 -0
  78. package/dist/components/Icon/index.cjs +4 -4
  79. package/dist/components/Icon/index.cjs.map +1 -1
  80. package/dist/components/Icon/index.d.cts +1 -1
  81. package/dist/components/Icon/index.d.cts.map +1 -1
  82. package/dist/components/Icon/index.d.mts +1 -1
  83. package/dist/components/Icon/index.d.mts.map +1 -1
  84. package/dist/components/Icon/index.mjs +1 -1
  85. package/dist/components/Icon/index.mjs.map +1 -1
  86. package/dist/components/IconAlert/IconAlert.constants.cjs +8 -9
  87. package/dist/components/IconAlert/IconAlert.constants.cjs.map +1 -1
  88. package/dist/components/IconAlert/IconAlert.constants.d.cts +1 -2
  89. package/dist/components/IconAlert/IconAlert.constants.d.cts.map +1 -1
  90. package/dist/components/IconAlert/IconAlert.constants.d.mts +1 -2
  91. package/dist/components/IconAlert/IconAlert.constants.d.mts.map +1 -1
  92. package/dist/components/IconAlert/IconAlert.constants.mjs +1 -2
  93. package/dist/components/IconAlert/IconAlert.constants.mjs.map +1 -1
  94. package/dist/components/Input/Input.cjs +10 -11
  95. package/dist/components/Input/Input.cjs.map +1 -1
  96. package/dist/components/Input/Input.d.cts +1 -7
  97. package/dist/components/Input/Input.d.cts.map +1 -1
  98. package/dist/components/Input/Input.d.mts +1 -7
  99. package/dist/components/Input/Input.d.mts.map +1 -1
  100. package/dist/components/Input/Input.mjs +11 -12
  101. package/dist/components/Input/Input.mjs.map +1 -1
  102. package/dist/components/Input/Input.types.cjs.map +1 -1
  103. package/dist/components/Input/Input.types.d.cts +2 -30
  104. package/dist/components/Input/Input.types.d.cts.map +1 -1
  105. package/dist/components/Input/Input.types.d.mts +2 -30
  106. package/dist/components/Input/Input.types.d.mts.map +1 -1
  107. package/dist/components/Input/Input.types.mjs.map +1 -1
  108. package/dist/components/Tag/Tag.constants.cjs +5 -6
  109. package/dist/components/Tag/Tag.constants.cjs.map +1 -1
  110. package/dist/components/Tag/Tag.constants.d.cts +1 -2
  111. package/dist/components/Tag/Tag.constants.d.cts.map +1 -1
  112. package/dist/components/Tag/Tag.constants.d.mts +1 -2
  113. package/dist/components/Tag/Tag.constants.d.mts.map +1 -1
  114. package/dist/components/Tag/Tag.constants.mjs +1 -2
  115. package/dist/components/Tag/Tag.constants.mjs.map +1 -1
  116. package/dist/components/Toast/Toast.cjs +40 -162
  117. package/dist/components/Toast/Toast.cjs.map +1 -1
  118. package/dist/components/Toast/Toast.constants.cjs +8 -1
  119. package/dist/components/Toast/Toast.constants.cjs.map +1 -1
  120. package/dist/components/Toast/Toast.constants.d.cts +5 -0
  121. package/dist/components/Toast/Toast.constants.d.cts.map +1 -1
  122. package/dist/components/Toast/Toast.constants.d.mts +5 -0
  123. package/dist/components/Toast/Toast.constants.d.mts.map +1 -1
  124. package/dist/components/Toast/Toast.constants.mjs +7 -0
  125. package/dist/components/Toast/Toast.constants.mjs.map +1 -1
  126. package/dist/components/Toast/Toast.d.cts +2 -5
  127. package/dist/components/Toast/Toast.d.cts.map +1 -1
  128. package/dist/components/Toast/Toast.d.mts +2 -5
  129. package/dist/components/Toast/Toast.d.mts.map +1 -1
  130. package/dist/components/Toast/Toast.mjs +39 -142
  131. package/dist/components/Toast/Toast.mjs.map +1 -1
  132. package/dist/components/Toast/Toast.types.cjs +9 -14
  133. package/dist/components/Toast/Toast.types.cjs.map +1 -1
  134. package/dist/components/Toast/Toast.types.d.cts +29 -97
  135. package/dist/components/Toast/Toast.types.d.cts.map +1 -1
  136. package/dist/components/Toast/Toast.types.d.mts +29 -97
  137. package/dist/components/Toast/Toast.types.d.mts.map +1 -1
  138. package/dist/components/Toast/Toast.types.mjs +8 -13
  139. package/dist/components/Toast/Toast.types.mjs.map +1 -1
  140. package/dist/components/Toast/Toaster.cjs +142 -0
  141. package/dist/components/Toast/Toaster.cjs.map +1 -0
  142. package/dist/components/Toast/Toaster.d.cts +11 -0
  143. package/dist/components/Toast/Toaster.d.cts.map +1 -0
  144. package/dist/components/Toast/Toaster.d.mts +11 -0
  145. package/dist/components/Toast/Toaster.d.mts.map +1 -0
  146. package/dist/components/Toast/Toaster.mjs +123 -0
  147. package/dist/components/Toast/Toaster.mjs.map +1 -0
  148. package/dist/components/Toast/index.cjs +5 -6
  149. package/dist/components/Toast/index.cjs.map +1 -1
  150. package/dist/components/Toast/index.d.cts +3 -3
  151. package/dist/components/Toast/index.d.cts.map +1 -1
  152. package/dist/components/Toast/index.d.mts +3 -3
  153. package/dist/components/Toast/index.d.mts.map +1 -1
  154. package/dist/components/Toast/index.mjs +2 -2
  155. package/dist/components/Toast/index.mjs.map +1 -1
  156. package/dist/components/index.cjs +4 -5
  157. package/dist/components/index.cjs.map +1 -1
  158. package/dist/components/index.d.cts +2 -2
  159. package/dist/components/index.d.cts.map +1 -1
  160. package/dist/components/index.d.mts +2 -2
  161. package/dist/components/index.d.mts.map +1 -1
  162. package/dist/components/index.mjs +1 -1
  163. package/dist/components/index.mjs.map +1 -1
  164. package/dist/types/index.cjs +3 -15
  165. package/dist/types/index.cjs.map +1 -1
  166. package/dist/types/index.d.cts +0 -10
  167. package/dist/types/index.d.cts.map +1 -1
  168. package/dist/types/index.d.mts +0 -10
  169. package/dist/types/index.d.mts.map +1 -1
  170. package/dist/types/index.mjs +0 -11
  171. package/dist/types/index.mjs.map +1 -1
  172. package/package.json +3 -3
  173. package/dist/components/Toast/Toast.context.cjs +0 -40
  174. package/dist/components/Toast/Toast.context.cjs.map +0 -1
  175. package/dist/components/Toast/Toast.context.d.cts +0 -7
  176. package/dist/components/Toast/Toast.context.d.cts.map +0 -1
  177. package/dist/components/Toast/Toast.context.d.mts +0 -7
  178. package/dist/components/Toast/Toast.context.d.mts.map +0 -1
  179. package/dist/components/Toast/Toast.context.mjs +0 -20
  180. package/dist/components/Toast/Toast.context.mjs.map +0 -1
@@ -1,174 +1,52 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
4
  };
25
5
  Object.defineProperty(exports, "__esModule", { value: true });
26
6
  exports.Toast = void 0;
27
7
  // Third party dependencies.
28
- const design_system_twrnc_preset_1 = require("@metamask/design-system-twrnc-preset");
29
- const react_1 = __importStar(require("react"));
30
- const react_native_1 = require("react-native/index.js");
31
- const react_native_reanimated_1 = __importStar(require("react-native-reanimated"));
32
- const react_native_safe_area_context_1 = require("react-native-safe-area-context");
8
+ const design_system_shared_1 = require("@metamask/design-system-shared");
9
+ const react_1 = __importDefault(require("react"));
33
10
  // External dependencies.
34
- const AvatarAccount_1 = require("../AvatarAccount/index.cjs");
35
- const AvatarFavicon_1 = require("../AvatarFavicon/index.cjs");
36
- const AvatarIcon_1 = require("../AvatarIcon/index.cjs");
37
- const AvatarNetwork_1 = require("../AvatarNetwork/index.cjs");
38
- const Button_1 = require("../Button/index.cjs");
39
- const ButtonIcon_1 = require("../ButtonIcon/index.cjs");
40
- const Text_1 = require("../Text/index.cjs");
11
+ const BannerBase_1 = require("../BannerBase/index.cjs");
12
+ const IconAlert_1 = require("../IconAlert/index.cjs");
41
13
  // Internal dependencies.
42
14
  const Toast_constants_1 = require("./Toast.constants.cjs");
43
15
  const Toast_types_1 = require("./Toast.types.cjs");
44
- const screenHeight = react_native_1.Dimensions.get('window').height;
45
- exports.Toast = (0, react_1.forwardRef)(({ twClassName, labelsContainerProps, ...props }, ref) => {
46
- const tw = (0, design_system_twrnc_preset_1.useTailwind)();
47
- const [toastOptions, setToastOptions] = (0, react_1.useState)(undefined);
48
- const replacementTimerRef = (0, react_1.useRef)(null);
49
- const { bottom: bottomNotchSpacing } = (0, react_native_safe_area_context_1.useSafeAreaInsets)();
50
- const translateYProgress = (0, react_native_reanimated_1.useSharedValue)(screenHeight);
51
- const bottomOffset = toastOptions?.bottomOffset ?? 0;
52
- const animatedStyle = (0, react_native_reanimated_1.useAnimatedStyle)(() => ({
53
- transform: [{ translateY: translateYProgress.value - bottomOffset }],
54
- }));
55
- const baseStyle = (0, react_1.useMemo)(() => [
56
- tw.style('absolute left-4 right-4 bottom-0 bg-background-section border border-border-muted rounded-xl p-3 flex-row items-center', twClassName),
57
- animatedStyle,
58
- ], [tw, animatedStyle, twClassName]);
59
- const resetState = () => setToastOptions(undefined);
60
- const showToast = (options) => {
61
- let timeoutDuration = 0;
62
- if (toastOptions) {
63
- (0, react_native_reanimated_1.cancelAnimation)(translateYProgress);
64
- timeoutDuration = 100;
65
- // Clear existing toast state to prevent animation conflicts when showing rapid successive toasts
66
- setToastOptions(undefined);
67
- }
68
- if (replacementTimerRef.current !== null) {
69
- clearTimeout(replacementTimerRef.current);
70
- }
71
- replacementTimerRef.current = setTimeout(() => {
72
- replacementTimerRef.current = null;
73
- setToastOptions(options);
74
- }, timeoutDuration);
75
- };
76
- const closeToast = () => {
77
- if (replacementTimerRef.current !== null) {
78
- clearTimeout(replacementTimerRef.current);
79
- replacementTimerRef.current = null;
80
- }
81
- translateYProgress.value = (0, react_native_reanimated_1.withTiming)(screenHeight, { duration: Toast_constants_1.TOAST_ANIMATION_DURATION }, () => {
82
- (0, react_native_reanimated_1.runOnJS)(resetState)();
83
- });
84
- };
85
- (0, react_1.useImperativeHandle)(ref, () => ({
86
- showToast,
87
- closeToast,
88
- }));
89
- const onAnimatedViewLayout = (e) => {
90
- /* istanbul ignore next - guard only; layout fires when toastOptions is set */
91
- if (toastOptions) {
92
- const { height } = e.nativeEvent.layout;
93
- const translateYToValue = -(Toast_constants_1.TOAST_BOTTOM_PADDING + bottomNotchSpacing);
94
- translateYProgress.value = height;
95
- if (toastOptions.hasNoTimeout) {
96
- translateYProgress.value = (0, react_native_reanimated_1.withTiming)(translateYToValue, {
97
- duration: Toast_constants_1.TOAST_ANIMATION_DURATION,
98
- });
99
- }
100
- else {
101
- translateYProgress.value = (0, react_native_reanimated_1.withTiming)(translateYToValue, { duration: Toast_constants_1.TOAST_ANIMATION_DURATION }, () => {
102
- translateYProgress.value = (0, react_native_reanimated_1.withDelay)(Toast_constants_1.TOAST_VISIBILITY_DURATION, (0, react_native_reanimated_1.withTiming)(height, { duration: Toast_constants_1.TOAST_ANIMATION_DURATION }, (0, react_native_reanimated_1.runOnJS)(resetState)));
103
- });
104
- }
105
- }
106
- };
107
- const renderLabel = (labelOptions) => (<Text_1.Text variant={Text_1.TextVariant.BodyMd}>
108
- {labelOptions.map(({ label, isBold }, index) => (<Text_1.Text key={`toast-label-${index}`} variant={Text_1.TextVariant.BodyMd} fontWeight={isBold ? Text_1.FontWeight.Bold : undefined} color={Text_1.TextColor.TextDefault}>
109
- {label}
110
- </Text_1.Text>))}
111
- </Text_1.Text>);
112
- const renderDescription = (descriptionOptions) => descriptionOptions && (<Text_1.Text variant={Text_1.TextVariant.BodySm} color={Text_1.TextColor.TextAlternative} style={tw.style('mt-1')}>
113
- {descriptionOptions.description}
114
- </Text_1.Text>);
115
- const renderActionButton = (linkButtonOptions) => linkButtonOptions && (<Button_1.Button variant={Button_1.ButtonVariant.Secondary} onPress={linkButtonOptions.onPress} style={tw.style('mt-2')}>
116
- {linkButtonOptions.label}
117
- </Button_1.Button>);
118
- const renderCloseButton = (closeButtonOptions) => {
119
- if (closeButtonOptions && 'iconName' in closeButtonOptions) {
120
- const iconOptions = closeButtonOptions;
121
- return (<ButtonIcon_1.ButtonIcon iconName={iconOptions.iconName} onPress={(e) => iconOptions.onPress?.(e)} size={iconOptions.size} isDisabled={iconOptions.isDisabled} twClassName={iconOptions.twClassName} style={iconOptions.style} iconProps={iconOptions.iconProps}/>);
16
+ const renderSeverityAccessory = ({ iconAlertProps, severity, startAccessory, }) => {
17
+ if (startAccessory !== null && startAccessory !== undefined) {
18
+ return startAccessory;
19
+ }
20
+ if (!severity || severity === Toast_types_1.ToastSeverity.Default) {
21
+ return undefined;
22
+ }
23
+ const iconAlertSeverity = Toast_constants_1.TOAST_SEVERITY_ICON_MAP[severity];
24
+ return (<IconAlert_1.IconAlert severity={iconAlertSeverity} size={design_system_shared_1.IconSize.Lg} {...iconAlertProps}/>);
25
+ };
26
+ const Toast = ({ actionButtonLabel, actionButtonOnPress, actionButtonProps, children, childrenWrapperProps, closeButtonProps, description, descriptionProps, onClose, iconAlertProps, severity = Toast_types_1.ToastSeverity.Default, startAccessory, title, titleProps, twClassName, ...props }) => {
27
+ const actionProps = actionButtonLabel && actionButtonOnPress
28
+ ? {
29
+ actionButtonLabel,
30
+ actionButtonOnPress,
31
+ actionButtonProps: {
32
+ size: design_system_shared_1.ButtonSize.Sm,
33
+ ...actionButtonProps,
34
+ },
122
35
  }
123
- return (<Button_1.Button variant={Button_1.ButtonVariant.Primary} onPress={(e) => closeButtonOptions?.onPress?.(e)} startIconName={closeButtonOptions?.startIconName} endIconName={closeButtonOptions?.endIconName} style={closeButtonOptions?.style}>
124
- {closeButtonOptions?.children}
125
- </Button_1.Button>);
126
- };
127
- const renderAvatar = () => {
128
- switch (toastOptions?.variant) {
129
- case Toast_types_1.ToastVariant.Plain:
130
- return null;
131
- case Toast_types_1.ToastVariant.Account: {
132
- const { accountAddress, accountAvatarType } = toastOptions;
133
- return (<AvatarAccount_1.AvatarAccount address={accountAddress} variant={accountAvatarType} size={AvatarAccount_1.AvatarAccountSize.Md} style={tw.style('mr-4')}/>);
134
- }
135
- case Toast_types_1.ToastVariant.Network: {
136
- const { networkImageSource, networkName } = toastOptions;
137
- return (<AvatarNetwork_1.AvatarNetwork name={networkName} src={networkImageSource} size={AvatarNetwork_1.AvatarNetworkSize.Md} style={tw.style('mr-4')}/>);
138
- }
139
- case Toast_types_1.ToastVariant.App: {
140
- const { appIconSource } = toastOptions;
141
- return (<AvatarFavicon_1.AvatarFavicon src={appIconSource} size={AvatarFavicon_1.AvatarFaviconSize.Md} style={tw.style('mr-4')}/>);
142
- }
143
- case Toast_types_1.ToastVariant.Icon: {
144
- const { iconName, severity } = toastOptions;
145
- return (<AvatarIcon_1.AvatarIcon iconName={iconName} severity={severity} size={AvatarIcon_1.AvatarIconSize.Md} style={tw.style('mr-4')}/>);
146
- }
147
- /* istanbul ignore next - all variants handled above */
148
- default:
149
- return null;
36
+ : {};
37
+ // TODO: Remove this conditional once BannerBase only renders a close button
38
+ // from onClose. At that point Toast can pass closeButtonProps directly.
39
+ const resolvedCloseButtonProps = onClose || closeButtonProps
40
+ ? {
41
+ accessibilityLabel: 'Close toast',
42
+ ...closeButtonProps,
150
43
  }
151
- };
152
- const renderToastContent = (options) => {
153
- const { labelOptions, descriptionOptions, linkButtonOptions, closeButtonOptions, startAccessory, } = options;
154
- const isStartAccessoryValid = startAccessory !== null &&
155
- startAccessory !== undefined &&
156
- (0, react_1.isValidElement)(startAccessory);
157
- return (<>
158
- {isStartAccessoryValid ? startAccessory : renderAvatar()}
159
- <react_native_1.View style={tw.style('flex-1 justify-center')} {...labelsContainerProps}>
160
- {renderLabel(labelOptions)}
161
- {renderDescription(descriptionOptions)}
162
- {renderActionButton(linkButtonOptions)}
163
- </react_native_1.View>
164
- {closeButtonOptions ? renderCloseButton(closeButtonOptions) : null}
165
- </>);
166
- };
167
- if (!toastOptions) {
168
- return null;
169
- }
170
- return (<react_native_reanimated_1.default.View onLayout={onAnimatedViewLayout} style={baseStyle} {...props}>
171
- {renderToastContent(toastOptions)}
172
- </react_native_reanimated_1.default.View>);
173
- });
44
+ : undefined;
45
+ return (<BannerBase_1.BannerBase {...actionProps} {...props} backgroundColor={design_system_shared_1.BoxBackgroundColor.BackgroundSection} borderColor={design_system_shared_1.BoxBorderColor.BorderMuted} borderWidth={1} children={children} childrenWrapperProps={childrenWrapperProps} closeButtonProps={resolvedCloseButtonProps} description={description} descriptionProps={descriptionProps} onClose={onClose} startAccessory={renderSeverityAccessory({
46
+ iconAlertProps,
47
+ severity,
48
+ startAccessory,
49
+ })} title={title} titleProps={titleProps} twClassName={twClassName ? `rounded-xl ${twClassName}` : 'rounded-xl'}/>);
50
+ };
51
+ exports.Toast = Toast;
174
52
  //# sourceMappingURL=Toast.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Toast.cjs","sourceRoot":"","sources":["../../../src/components/Toast/Toast.tsx"],"names":[],"mappings":"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","sourcesContent":["// Third party dependencies.\nimport { useTailwind } from '@metamask/design-system-twrnc-preset';\nimport React, {\n forwardRef,\n isValidElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { Dimensions, View } from 'react-native';\nimport type { LayoutChangeEvent, StyleProp, ViewStyle } from 'react-native';\nimport Animated, {\n cancelAnimation,\n runOnJS,\n useAnimatedStyle,\n useSharedValue,\n withDelay,\n withTiming,\n} from 'react-native-reanimated';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\n// External dependencies.\nimport { AvatarAccount, AvatarAccountSize } from '../AvatarAccount';\nimport { AvatarFavicon, AvatarFaviconSize } from '../AvatarFavicon';\nimport { AvatarIcon, AvatarIconSize } from '../AvatarIcon';\nimport { AvatarNetwork, AvatarNetworkSize } from '../AvatarNetwork';\nimport { Button, ButtonVariant } from '../Button';\nimport { ButtonIcon } from '../ButtonIcon';\nimport { Text, TextVariant, TextColor, FontWeight } from '../Text';\n\n// Internal dependencies.\nimport {\n TOAST_VISIBILITY_DURATION,\n TOAST_ANIMATION_DURATION,\n TOAST_BOTTOM_PADDING,\n} from './Toast.constants';\nimport type {\n ToastCloseButtonIconOptions,\n ToastCloseButtonOptions,\n ToastDescriptionOptions,\n ToastLabelOptions,\n ToastLinkButtonOptions,\n ToastOptions,\n ToastProps,\n ToastRef,\n} from './Toast.types';\nimport { ToastVariant } from './Toast.types';\n\nconst screenHeight = Dimensions.get('window').height;\n\nexport const Toast = forwardRef<ToastRef, ToastProps>(\n ({ twClassName, labelsContainerProps, ...props }, ref) => {\n const tw = useTailwind();\n const [toastOptions, setToastOptions] = useState<ToastOptions | undefined>(\n undefined,\n );\n const replacementTimerRef = useRef<ReturnType<typeof setTimeout> | null>(\n null,\n );\n const { bottom: bottomNotchSpacing } = useSafeAreaInsets();\n const translateYProgress = useSharedValue(screenHeight);\n const bottomOffset = toastOptions?.bottomOffset ?? 0;\n const animatedStyle = useAnimatedStyle(() => ({\n transform: [{ translateY: translateYProgress.value - bottomOffset }],\n }));\n const baseStyle: StyleProp<ViewStyle> = useMemo(\n () => [\n tw.style(\n 'absolute left-4 right-4 bottom-0 bg-background-section border border-border-muted rounded-xl p-3 flex-row items-center',\n twClassName,\n ),\n animatedStyle,\n ],\n [tw, animatedStyle, twClassName],\n );\n\n const resetState = () => setToastOptions(undefined);\n\n const showToast = (options: ToastOptions) => {\n let timeoutDuration = 0;\n if (toastOptions) {\n cancelAnimation(translateYProgress);\n timeoutDuration = 100;\n // Clear existing toast state to prevent animation conflicts when showing rapid successive toasts\n setToastOptions(undefined);\n }\n if (replacementTimerRef.current !== null) {\n clearTimeout(replacementTimerRef.current);\n }\n replacementTimerRef.current = setTimeout(() => {\n replacementTimerRef.current = null;\n setToastOptions(options);\n }, timeoutDuration);\n };\n\n const closeToast = () => {\n if (replacementTimerRef.current !== null) {\n clearTimeout(replacementTimerRef.current);\n replacementTimerRef.current = null;\n }\n translateYProgress.value = withTiming(\n screenHeight,\n { duration: TOAST_ANIMATION_DURATION },\n () => {\n runOnJS(resetState)();\n },\n );\n };\n\n useImperativeHandle(ref, () => ({\n showToast,\n closeToast,\n }));\n\n const onAnimatedViewLayout = (e: LayoutChangeEvent) => {\n /* istanbul ignore next - guard only; layout fires when toastOptions is set */\n if (toastOptions) {\n const { height } = e.nativeEvent.layout;\n const translateYToValue = -(TOAST_BOTTOM_PADDING + bottomNotchSpacing);\n\n translateYProgress.value = height;\n\n if (toastOptions.hasNoTimeout) {\n translateYProgress.value = withTiming(translateYToValue, {\n duration: TOAST_ANIMATION_DURATION,\n });\n } else {\n translateYProgress.value = withTiming(\n translateYToValue,\n { duration: TOAST_ANIMATION_DURATION },\n () => {\n translateYProgress.value = withDelay(\n TOAST_VISIBILITY_DURATION,\n withTiming(\n height,\n { duration: TOAST_ANIMATION_DURATION },\n runOnJS(resetState),\n ),\n );\n },\n );\n }\n }\n };\n\n const renderLabel = (labelOptions: ToastLabelOptions) => (\n <Text variant={TextVariant.BodyMd}>\n {labelOptions.map(({ label, isBold }, index) => (\n <Text\n key={`toast-label-${index}`}\n variant={TextVariant.BodyMd}\n fontWeight={isBold ? FontWeight.Bold : undefined}\n color={TextColor.TextDefault}\n >\n {label}\n </Text>\n ))}\n </Text>\n );\n\n const renderDescription = (descriptionOptions?: ToastDescriptionOptions) =>\n descriptionOptions && (\n <Text\n variant={TextVariant.BodySm}\n color={TextColor.TextAlternative}\n style={tw.style('mt-1')}\n >\n {descriptionOptions.description}\n </Text>\n );\n\n const renderActionButton = (linkButtonOptions?: ToastLinkButtonOptions) =>\n linkButtonOptions && (\n <Button\n variant={ButtonVariant.Secondary}\n onPress={linkButtonOptions.onPress}\n style={tw.style('mt-2')}\n >\n {linkButtonOptions.label}\n </Button>\n );\n\n const renderCloseButton = (\n closeButtonOptions?: ToastCloseButtonOptions,\n ) => {\n if (closeButtonOptions && 'iconName' in closeButtonOptions) {\n const iconOptions = closeButtonOptions as ToastCloseButtonIconOptions;\n return (\n <ButtonIcon\n iconName={iconOptions.iconName}\n onPress={(e) => iconOptions.onPress?.(e)}\n size={iconOptions.size}\n isDisabled={iconOptions.isDisabled}\n twClassName={iconOptions.twClassName}\n style={iconOptions.style}\n iconProps={iconOptions.iconProps}\n />\n );\n }\n return (\n <Button\n variant={ButtonVariant.Primary}\n onPress={(e) => closeButtonOptions?.onPress?.(e)}\n startIconName={closeButtonOptions?.startIconName}\n endIconName={closeButtonOptions?.endIconName}\n style={closeButtonOptions?.style}\n >\n {closeButtonOptions?.children}\n </Button>\n );\n };\n\n const renderAvatar = () => {\n switch (toastOptions?.variant) {\n case ToastVariant.Plain:\n return null;\n case ToastVariant.Account: {\n const { accountAddress, accountAvatarType } = toastOptions;\n return (\n <AvatarAccount\n address={accountAddress}\n variant={accountAvatarType}\n size={AvatarAccountSize.Md}\n style={tw.style('mr-4')}\n />\n );\n }\n case ToastVariant.Network: {\n const { networkImageSource, networkName } = toastOptions;\n return (\n <AvatarNetwork\n name={networkName}\n src={networkImageSource}\n size={AvatarNetworkSize.Md}\n style={tw.style('mr-4')}\n />\n );\n }\n case ToastVariant.App: {\n const { appIconSource } = toastOptions;\n return (\n <AvatarFavicon\n src={appIconSource}\n size={AvatarFaviconSize.Md}\n style={tw.style('mr-4')}\n />\n );\n }\n case ToastVariant.Icon: {\n const { iconName, severity } = toastOptions;\n return (\n <AvatarIcon\n iconName={iconName}\n severity={severity}\n size={AvatarIconSize.Md}\n style={tw.style('mr-4')}\n />\n );\n }\n /* istanbul ignore next - all variants handled above */\n default:\n return null;\n }\n };\n\n const renderToastContent = (options: ToastOptions) => {\n const {\n labelOptions,\n descriptionOptions,\n linkButtonOptions,\n closeButtonOptions,\n startAccessory,\n } = options;\n\n const isStartAccessoryValid =\n startAccessory !== null &&\n startAccessory !== undefined &&\n isValidElement(startAccessory);\n\n return (\n <>\n {isStartAccessoryValid ? startAccessory : renderAvatar()}\n <View\n style={tw.style('flex-1 justify-center')}\n {...labelsContainerProps}\n >\n {renderLabel(labelOptions)}\n {renderDescription(descriptionOptions)}\n {renderActionButton(linkButtonOptions)}\n </View>\n {closeButtonOptions ? renderCloseButton(closeButtonOptions) : null}\n </>\n );\n };\n\n if (!toastOptions) {\n return null;\n }\n\n return (\n <Animated.View\n onLayout={onAnimatedViewLayout}\n style={baseStyle}\n {...props}\n >\n {renderToastContent(toastOptions)}\n </Animated.View>\n );\n },\n);\n"]}
1
+ {"version":3,"file":"Toast.cjs","sourceRoot":"","sources":["../../../src/components/Toast/Toast.tsx"],"names":[],"mappings":";;;;;;AAAA,4BAA4B;AAC5B,yEAKwC;AACxC,kDAA0B;AAE1B,yBAAyB;AACzB,wDAA2C;AAC3C,sDAAyC;AAEzC,yBAAyB;AACzB,2DAA4D;AAC5D,mDAA8C;AAG9C,MAAM,uBAAuB,GAAG,CAAC,EAC/B,cAAc,EACd,QAAQ,EACR,cAAc,GACqD,EAAE,EAAE;IACvE,IAAI,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,SAAS,EAAE;QAC3D,OAAO,cAAc,CAAC;KACvB;IAED,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,2BAAa,CAAC,OAAO,EAAE;QACnD,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,iBAAiB,GAAG,yCAAuB,CAAC,QAAQ,CAAC,CAAC;IAE5D,OAAO,CACL,CAAC,qBAAS,CACR,QAAQ,CAAC,CAAC,iBAAiB,CAAC,CAC5B,IAAI,CAAC,CAAC,+BAAQ,CAAC,EAAE,CAAC,CAClB,IAAI,cAAc,CAAC,EACnB,CACH,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,KAAK,GAAyB,CAAC,EAC1C,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,QAAQ,EACR,oBAAoB,EACpB,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,OAAO,EACP,cAAc,EACd,QAAQ,GAAG,2BAAa,CAAC,OAAO,EAChC,cAAc,EACd,KAAK,EACL,UAAU,EACV,WAAW,EACX,GAAG,KAAK,EACT,EAAE,EAAE;IACH,MAAM,WAAW,GACf,iBAAiB,IAAI,mBAAmB;QACtC,CAAC,CAAC;YACE,iBAAiB;YACjB,mBAAmB;YACnB,iBAAiB,EAAE;gBACjB,IAAI,EAAE,iCAAU,CAAC,EAAE;gBACnB,GAAG,iBAAiB;aACrB;SACF;QACH,CAAC,CAAC,EAAE,CAAC;IACT,4EAA4E;IAC5E,wEAAwE;IACxE,MAAM,wBAAwB,GAC5B,OAAO,IAAI,gBAAgB;QACzB,CAAC,CAAC;YACE,kBAAkB,EAAE,aAAa;YACjC,GAAG,gBAAgB;SACpB;QACH,CAAC,CAAC,SAAS,CAAC;IAEhB,OAAO,CACL,CAAC,uBAAU,CACT,IAAI,WAAW,CAAC,CAChB,IAAI,KAAK,CAAC,CACV,eAAe,CAAC,CAAC,yCAAkB,CAAC,iBAAiB,CAAC,CACtD,WAAW,CAAC,CAAC,qCAAc,CAAC,WAAW,CAAC,CACxC,WAAW,CAAC,CAAC,CAAC,CAAC,CACf,QAAQ,CAAC,CAAC,QAAQ,CAAC,CACnB,oBAAoB,CAAC,CAAC,oBAAoB,CAAC,CAC3C,gBAAgB,CAAC,CAAC,wBAAwB,CAAC,CAC3C,WAAW,CAAC,CAAC,WAAW,CAAC,CACzB,gBAAgB,CAAC,CAAC,gBAAgB,CAAC,CACnC,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,cAAc,CAAC,CAAC,uBAAuB,CAAC;YACtC,cAAc;YACd,QAAQ;YACR,cAAc;SACf,CAAC,CAAC,CACH,KAAK,CAAC,CAAC,KAAK,CAAC,CACb,UAAU,CAAC,CAAC,UAAU,CAAC,CACvB,WAAW,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,WAAW,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,EACtE,CACH,CAAC;AACJ,CAAC,CAAC;AA9DW,QAAA,KAAK,SA8DhB","sourcesContent":["// Third party dependencies.\nimport {\n BoxBackgroundColor,\n BoxBorderColor,\n ButtonSize,\n IconSize,\n} from '@metamask/design-system-shared';\nimport React from 'react';\n\n// External dependencies.\nimport { BannerBase } from '../BannerBase';\nimport { IconAlert } from '../IconAlert';\n\n// Internal dependencies.\nimport { TOAST_SEVERITY_ICON_MAP } from './Toast.constants';\nimport { ToastSeverity } from './Toast.types';\nimport type { ToastProps } from './Toast.types';\n\nconst renderSeverityAccessory = ({\n iconAlertProps,\n severity,\n startAccessory,\n}: Pick<ToastProps, 'iconAlertProps' | 'severity' | 'startAccessory'>) => {\n if (startAccessory !== null && startAccessory !== undefined) {\n return startAccessory;\n }\n\n if (!severity || severity === ToastSeverity.Default) {\n return undefined;\n }\n\n const iconAlertSeverity = TOAST_SEVERITY_ICON_MAP[severity];\n\n return (\n <IconAlert\n severity={iconAlertSeverity}\n size={IconSize.Lg}\n {...iconAlertProps}\n />\n );\n};\n\nexport const Toast: React.FC<ToastProps> = ({\n actionButtonLabel,\n actionButtonOnPress,\n actionButtonProps,\n children,\n childrenWrapperProps,\n closeButtonProps,\n description,\n descriptionProps,\n onClose,\n iconAlertProps,\n severity = ToastSeverity.Default,\n startAccessory,\n title,\n titleProps,\n twClassName,\n ...props\n}) => {\n const actionProps =\n actionButtonLabel && actionButtonOnPress\n ? {\n actionButtonLabel,\n actionButtonOnPress,\n actionButtonProps: {\n size: ButtonSize.Sm,\n ...actionButtonProps,\n },\n }\n : {};\n // TODO: Remove this conditional once BannerBase only renders a close button\n // from onClose. At that point Toast can pass closeButtonProps directly.\n const resolvedCloseButtonProps =\n onClose || closeButtonProps\n ? {\n accessibilityLabel: 'Close toast',\n ...closeButtonProps,\n }\n : undefined;\n\n return (\n <BannerBase\n {...actionProps}\n {...props}\n backgroundColor={BoxBackgroundColor.BackgroundSection}\n borderColor={BoxBorderColor.BorderMuted}\n borderWidth={1}\n children={children}\n childrenWrapperProps={childrenWrapperProps}\n closeButtonProps={resolvedCloseButtonProps}\n description={description}\n descriptionProps={descriptionProps}\n onClose={onClose}\n startAccessory={renderSeverityAccessory({\n iconAlertProps,\n severity,\n startAccessory,\n })}\n title={title}\n titleProps={titleProps}\n twClassName={twClassName ? `rounded-xl ${twClassName}` : 'rounded-xl'}\n />\n );\n};\n"]}
@@ -1,12 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TOAST_BOTTOM_PADDING = exports.TOAST_ANIMATION_DURATION = exports.TOAST_VISIBILITY_DURATION = void 0;
3
+ exports.TOAST_SEVERITY_ICON_MAP = exports.TOAST_BOTTOM_PADDING = exports.TOAST_ANIMATION_DURATION = exports.TOAST_VISIBILITY_DURATION = void 0;
4
4
  // External dependencies.
5
+ const design_system_shared_1 = require("@metamask/design-system-shared");
5
6
  const design_tokens_1 = require("@metamask/design-tokens");
7
+ const Toast_types_1 = require("./Toast.types.cjs");
6
8
  /**
7
9
  * Animation constants.
8
10
  */
9
11
  exports.TOAST_VISIBILITY_DURATION = 2750;
10
12
  exports.TOAST_ANIMATION_DURATION = design_tokens_1.AnimationDuration.Regularly;
11
13
  exports.TOAST_BOTTOM_PADDING = 36;
14
+ exports.TOAST_SEVERITY_ICON_MAP = {
15
+ [Toast_types_1.ToastSeverity.Success]: design_system_shared_1.IconAlertSeverity.Success,
16
+ [Toast_types_1.ToastSeverity.Warning]: design_system_shared_1.IconAlertSeverity.Warning,
17
+ [Toast_types_1.ToastSeverity.Danger]: design_system_shared_1.IconAlertSeverity.Error,
18
+ };
12
19
  //# sourceMappingURL=Toast.constants.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Toast.constants.cjs","sourceRoot":"","sources":["../../../src/components/Toast/Toast.constants.ts"],"names":[],"mappings":";;;AAAA,yBAAyB;AACzB,2DAA4D;AAE5D;;GAEG;AACU,QAAA,yBAAyB,GAAG,IAAI,CAAC;AACjC,QAAA,wBAAwB,GAAG,iCAAiB,CAAC,SAAS,CAAC;AACvD,QAAA,oBAAoB,GAAG,EAAE,CAAC","sourcesContent":["// External dependencies.\nimport { AnimationDuration } from '@metamask/design-tokens';\n\n/**\n * Animation constants.\n */\nexport const TOAST_VISIBILITY_DURATION = 2750;\nexport const TOAST_ANIMATION_DURATION = AnimationDuration.Regularly;\nexport const TOAST_BOTTOM_PADDING = 36;\n"]}
1
+ {"version":3,"file":"Toast.constants.cjs","sourceRoot":"","sources":["../../../src/components/Toast/Toast.constants.ts"],"names":[],"mappings":";;;AAAA,yBAAyB;AACzB,yEAAmE;AACnE,2DAA4D;AAE5D,mDAA8C;AAE9C;;GAEG;AACU,QAAA,yBAAyB,GAAG,IAAI,CAAC;AACjC,QAAA,wBAAwB,GAAG,iCAAiB,CAAC,SAAS,CAAC;AACvD,QAAA,oBAAoB,GAAG,EAAE,CAAC;AAE1B,QAAA,uBAAuB,GAAG;IACrC,CAAC,2BAAa,CAAC,OAAO,CAAC,EAAE,wCAAiB,CAAC,OAAO;IAClD,CAAC,2BAAa,CAAC,OAAO,CAAC,EAAE,wCAAiB,CAAC,OAAO;IAClD,CAAC,2BAAa,CAAC,MAAM,CAAC,EAAE,wCAAiB,CAAC,KAAK;CACvC,CAAC","sourcesContent":["// External dependencies.\nimport { IconAlertSeverity } from '@metamask/design-system-shared';\nimport { AnimationDuration } from '@metamask/design-tokens';\n\nimport { ToastSeverity } from './Toast.types';\n\n/**\n * Animation constants.\n */\nexport const TOAST_VISIBILITY_DURATION = 2750;\nexport const TOAST_ANIMATION_DURATION = AnimationDuration.Regularly;\nexport const TOAST_BOTTOM_PADDING = 36;\n\nexport const TOAST_SEVERITY_ICON_MAP = {\n [ToastSeverity.Success]: IconAlertSeverity.Success,\n [ToastSeverity.Warning]: IconAlertSeverity.Warning,\n [ToastSeverity.Danger]: IconAlertSeverity.Error,\n} as const;\n"]}
@@ -5,4 +5,9 @@ import { AnimationDuration } from "@metamask/design-tokens";
5
5
  export declare const TOAST_VISIBILITY_DURATION = 2750;
6
6
  export declare const TOAST_ANIMATION_DURATION = AnimationDuration.Regularly;
7
7
  export declare const TOAST_BOTTOM_PADDING = 36;
8
+ export declare const TOAST_SEVERITY_ICON_MAP: {
9
+ readonly success: "success";
10
+ readonly warning: "warning";
11
+ readonly danger: "error";
12
+ };
8
13
  //# sourceMappingURL=Toast.constants.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Toast.constants.d.cts","sourceRoot":"","sources":["../../../src/components/Toast/Toast.constants.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,gCAAgC;AAE5D;;GAEG;AACH,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAC9C,eAAO,MAAM,wBAAwB,8BAA8B,CAAC;AACpE,eAAO,MAAM,oBAAoB,KAAK,CAAC"}
1
+ {"version":3,"file":"Toast.constants.d.cts","sourceRoot":"","sources":["../../../src/components/Toast/Toast.constants.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,gCAAgC;AAI5D;;GAEG;AACH,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAC9C,eAAO,MAAM,wBAAwB,8BAA8B,CAAC;AACpE,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC,eAAO,MAAM,uBAAuB;;;;CAI1B,CAAC"}
@@ -5,4 +5,9 @@ import { AnimationDuration } from "@metamask/design-tokens";
5
5
  export declare const TOAST_VISIBILITY_DURATION = 2750;
6
6
  export declare const TOAST_ANIMATION_DURATION = AnimationDuration.Regularly;
7
7
  export declare const TOAST_BOTTOM_PADDING = 36;
8
+ export declare const TOAST_SEVERITY_ICON_MAP: {
9
+ readonly success: "success";
10
+ readonly warning: "warning";
11
+ readonly danger: "error";
12
+ };
8
13
  //# sourceMappingURL=Toast.constants.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Toast.constants.d.mts","sourceRoot":"","sources":["../../../src/components/Toast/Toast.constants.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,gCAAgC;AAE5D;;GAEG;AACH,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAC9C,eAAO,MAAM,wBAAwB,8BAA8B,CAAC;AACpE,eAAO,MAAM,oBAAoB,KAAK,CAAC"}
1
+ {"version":3,"file":"Toast.constants.d.mts","sourceRoot":"","sources":["../../../src/components/Toast/Toast.constants.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,gCAAgC;AAI5D;;GAEG;AACH,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAC9C,eAAO,MAAM,wBAAwB,8BAA8B,CAAC;AACpE,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC,eAAO,MAAM,uBAAuB;;;;CAI1B,CAAC"}
@@ -1,9 +1,16 @@
1
1
  // External dependencies.
2
+ import { IconAlertSeverity } from "@metamask/design-system-shared";
2
3
  import { AnimationDuration } from "@metamask/design-tokens";
4
+ import { ToastSeverity } from "./Toast.types.mjs";
3
5
  /**
4
6
  * Animation constants.
5
7
  */
6
8
  export const TOAST_VISIBILITY_DURATION = 2750;
7
9
  export const TOAST_ANIMATION_DURATION = AnimationDuration.Regularly;
8
10
  export const TOAST_BOTTOM_PADDING = 36;
11
+ export const TOAST_SEVERITY_ICON_MAP = {
12
+ [ToastSeverity.Success]: IconAlertSeverity.Success,
13
+ [ToastSeverity.Warning]: IconAlertSeverity.Warning,
14
+ [ToastSeverity.Danger]: IconAlertSeverity.Error,
15
+ };
9
16
  //# sourceMappingURL=Toast.constants.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Toast.constants.mjs","sourceRoot":"","sources":["../../../src/components/Toast/Toast.constants.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,OAAO,EAAE,iBAAiB,EAAE,gCAAgC;AAE5D;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAC9C,MAAM,CAAC,MAAM,wBAAwB,GAAG,iBAAiB,CAAC,SAAS,CAAC;AACpE,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC","sourcesContent":["// External dependencies.\nimport { AnimationDuration } from '@metamask/design-tokens';\n\n/**\n * Animation constants.\n */\nexport const TOAST_VISIBILITY_DURATION = 2750;\nexport const TOAST_ANIMATION_DURATION = AnimationDuration.Regularly;\nexport const TOAST_BOTTOM_PADDING = 36;\n"]}
1
+ {"version":3,"file":"Toast.constants.mjs","sourceRoot":"","sources":["../../../src/components/Toast/Toast.constants.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,OAAO,EAAE,iBAAiB,EAAE,uCAAuC;AACnE,OAAO,EAAE,iBAAiB,EAAE,gCAAgC;AAE5D,OAAO,EAAE,aAAa,EAAE,0BAAsB;AAE9C;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAC9C,MAAM,CAAC,MAAM,wBAAwB,GAAG,iBAAiB,CAAC,SAAS,CAAC;AACpE,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEvC,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC,OAAO;IAClD,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC,OAAO;IAClD,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC,KAAK;CACvC,CAAC","sourcesContent":["// External dependencies.\nimport { IconAlertSeverity } from '@metamask/design-system-shared';\nimport { AnimationDuration } from '@metamask/design-tokens';\n\nimport { ToastSeverity } from './Toast.types';\n\n/**\n * Animation constants.\n */\nexport const TOAST_VISIBILITY_DURATION = 2750;\nexport const TOAST_ANIMATION_DURATION = AnimationDuration.Regularly;\nexport const TOAST_BOTTOM_PADDING = 36;\n\nexport const TOAST_SEVERITY_ICON_MAP = {\n [ToastSeverity.Success]: IconAlertSeverity.Success,\n [ToastSeverity.Warning]: IconAlertSeverity.Warning,\n [ToastSeverity.Danger]: IconAlertSeverity.Error,\n} as const;\n"]}
@@ -1,7 +1,4 @@
1
1
  import React from "react";
2
- import type { ToastRef } from "./Toast.types.cjs";
3
- export declare const Toast: React.ForwardRefExoticComponent<{
4
- twClassName?: string | undefined;
5
- labelsContainerProps?: Omit<import("react-native").ViewProps, "children" | "style"> | undefined;
6
- } & Omit<import("react-native").ViewProps, "style"> & React.RefAttributes<ToastRef>>;
2
+ import type { ToastProps } from "./Toast.types.cjs";
3
+ export declare const Toast: React.FC<ToastProps>;
7
4
  //# sourceMappingURL=Toast.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Toast.d.cts","sourceRoot":"","sources":["../../../src/components/Toast/Toast.tsx"],"names":[],"mappings":"AAEA,OAAO,KAON,cAAc;AA4Bf,OAAO,KAAK,EAQV,QAAQ,EACT,0BAAsB;AAKvB,eAAO,MAAM,KAAK;;;oFAmQjB,CAAC"}
1
+ {"version":3,"file":"Toast.d.cts","sourceRoot":"","sources":["../../../src/components/Toast/Toast.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,cAAc;AAS1B,OAAO,KAAK,EAAE,UAAU,EAAE,0BAAsB;AA0BhD,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CA8DtC,CAAC"}
@@ -1,7 +1,4 @@
1
1
  import React from "react";
2
- import type { ToastRef } from "./Toast.types.mjs";
3
- export declare const Toast: React.ForwardRefExoticComponent<{
4
- twClassName?: string | undefined;
5
- labelsContainerProps?: Omit<import("react-native").ViewProps, "children" | "style"> | undefined;
6
- } & Omit<import("react-native").ViewProps, "style"> & React.RefAttributes<ToastRef>>;
2
+ import type { ToastProps } from "./Toast.types.mjs";
3
+ export declare const Toast: React.FC<ToastProps>;
7
4
  //# sourceMappingURL=Toast.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Toast.d.mts","sourceRoot":"","sources":["../../../src/components/Toast/Toast.tsx"],"names":[],"mappings":"AAEA,OAAO,KAON,cAAc;AA4Bf,OAAO,KAAK,EAQV,QAAQ,EACT,0BAAsB;AAKvB,eAAO,MAAM,KAAK;;;oFAmQjB,CAAC"}
1
+ {"version":3,"file":"Toast.d.mts","sourceRoot":"","sources":["../../../src/components/Toast/Toast.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,cAAc;AAS1B,OAAO,KAAK,EAAE,UAAU,EAAE,0BAAsB;AA0BhD,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CA8DtC,CAAC"}
@@ -5,151 +5,48 @@ function $importDefault(module) {
5
5
  return module;
6
6
  }
7
7
  // Third party dependencies.
8
- import { useTailwind } from "@metamask/design-system-twrnc-preset";
9
- import $React, { forwardRef, isValidElement, useImperativeHandle, useMemo, useRef, useState } from "react";
8
+ import { BoxBackgroundColor, BoxBorderColor, ButtonSize, IconSize } from "@metamask/design-system-shared";
9
+ import $React from "react";
10
10
  const React = $importDefault($React);
11
- import { Dimensions, View } from "react-native/index.js";
12
- import Animated, { cancelAnimation, runOnJS, useAnimatedStyle, useSharedValue, withDelay, withTiming } from "react-native-reanimated";
13
- import { useSafeAreaInsets } from "react-native-safe-area-context";
14
11
  // External dependencies.
15
- import { AvatarAccount, AvatarAccountSize } from "../AvatarAccount/index.mjs";
16
- import { AvatarFavicon, AvatarFaviconSize } from "../AvatarFavicon/index.mjs";
17
- import { AvatarIcon, AvatarIconSize } from "../AvatarIcon/index.mjs";
18
- import { AvatarNetwork, AvatarNetworkSize } from "../AvatarNetwork/index.mjs";
19
- import { Button, ButtonVariant } from "../Button/index.mjs";
20
- import { ButtonIcon } from "../ButtonIcon/index.mjs";
21
- import { Text, TextVariant, TextColor, FontWeight } from "../Text/index.mjs";
12
+ import { BannerBase } from "../BannerBase/index.mjs";
13
+ import { IconAlert } from "../IconAlert/index.mjs";
22
14
  // Internal dependencies.
23
- import { TOAST_VISIBILITY_DURATION, TOAST_ANIMATION_DURATION, TOAST_BOTTOM_PADDING } from "./Toast.constants.mjs";
24
- import { ToastVariant } from "./Toast.types.mjs";
25
- const screenHeight = Dimensions.get('window').height;
26
- export const Toast = forwardRef(({ twClassName, labelsContainerProps, ...props }, ref) => {
27
- const tw = useTailwind();
28
- const [toastOptions, setToastOptions] = useState(undefined);
29
- const replacementTimerRef = useRef(null);
30
- const { bottom: bottomNotchSpacing } = useSafeAreaInsets();
31
- const translateYProgress = useSharedValue(screenHeight);
32
- const bottomOffset = toastOptions?.bottomOffset ?? 0;
33
- const animatedStyle = useAnimatedStyle(() => ({
34
- transform: [{ translateY: translateYProgress.value - bottomOffset }],
35
- }));
36
- const baseStyle = useMemo(() => [
37
- tw.style('absolute left-4 right-4 bottom-0 bg-background-section border border-border-muted rounded-xl p-3 flex-row items-center', twClassName),
38
- animatedStyle,
39
- ], [tw, animatedStyle, twClassName]);
40
- const resetState = () => setToastOptions(undefined);
41
- const showToast = (options) => {
42
- let timeoutDuration = 0;
43
- if (toastOptions) {
44
- cancelAnimation(translateYProgress);
45
- timeoutDuration = 100;
46
- // Clear existing toast state to prevent animation conflicts when showing rapid successive toasts
47
- setToastOptions(undefined);
48
- }
49
- if (replacementTimerRef.current !== null) {
50
- clearTimeout(replacementTimerRef.current);
51
- }
52
- replacementTimerRef.current = setTimeout(() => {
53
- replacementTimerRef.current = null;
54
- setToastOptions(options);
55
- }, timeoutDuration);
56
- };
57
- const closeToast = () => {
58
- if (replacementTimerRef.current !== null) {
59
- clearTimeout(replacementTimerRef.current);
60
- replacementTimerRef.current = null;
61
- }
62
- translateYProgress.value = withTiming(screenHeight, { duration: TOAST_ANIMATION_DURATION }, () => {
63
- runOnJS(resetState)();
64
- });
65
- };
66
- useImperativeHandle(ref, () => ({
67
- showToast,
68
- closeToast,
69
- }));
70
- const onAnimatedViewLayout = (e) => {
71
- /* istanbul ignore next - guard only; layout fires when toastOptions is set */
72
- if (toastOptions) {
73
- const { height } = e.nativeEvent.layout;
74
- const translateYToValue = -(TOAST_BOTTOM_PADDING + bottomNotchSpacing);
75
- translateYProgress.value = height;
76
- if (toastOptions.hasNoTimeout) {
77
- translateYProgress.value = withTiming(translateYToValue, {
78
- duration: TOAST_ANIMATION_DURATION,
79
- });
80
- }
81
- else {
82
- translateYProgress.value = withTiming(translateYToValue, { duration: TOAST_ANIMATION_DURATION }, () => {
83
- translateYProgress.value = withDelay(TOAST_VISIBILITY_DURATION, withTiming(height, { duration: TOAST_ANIMATION_DURATION }, runOnJS(resetState)));
84
- });
85
- }
86
- }
87
- };
88
- const renderLabel = (labelOptions) => (<Text variant={TextVariant.BodyMd}>
89
- {labelOptions.map(({ label, isBold }, index) => (<Text key={`toast-label-${index}`} variant={TextVariant.BodyMd} fontWeight={isBold ? FontWeight.Bold : undefined} color={TextColor.TextDefault}>
90
- {label}
91
- </Text>))}
92
- </Text>);
93
- const renderDescription = (descriptionOptions) => descriptionOptions && (<Text variant={TextVariant.BodySm} color={TextColor.TextAlternative} style={tw.style('mt-1')}>
94
- {descriptionOptions.description}
95
- </Text>);
96
- const renderActionButton = (linkButtonOptions) => linkButtonOptions && (<Button variant={ButtonVariant.Secondary} onPress={linkButtonOptions.onPress} style={tw.style('mt-2')}>
97
- {linkButtonOptions.label}
98
- </Button>);
99
- const renderCloseButton = (closeButtonOptions) => {
100
- if (closeButtonOptions && 'iconName' in closeButtonOptions) {
101
- const iconOptions = closeButtonOptions;
102
- return (<ButtonIcon iconName={iconOptions.iconName} onPress={(e) => iconOptions.onPress?.(e)} size={iconOptions.size} isDisabled={iconOptions.isDisabled} twClassName={iconOptions.twClassName} style={iconOptions.style} iconProps={iconOptions.iconProps}/>);
15
+ import { TOAST_SEVERITY_ICON_MAP } from "./Toast.constants.mjs";
16
+ import { ToastSeverity } from "./Toast.types.mjs";
17
+ const renderSeverityAccessory = ({ iconAlertProps, severity, startAccessory, }) => {
18
+ if (startAccessory !== null && startAccessory !== undefined) {
19
+ return startAccessory;
20
+ }
21
+ if (!severity || severity === ToastSeverity.Default) {
22
+ return undefined;
23
+ }
24
+ const iconAlertSeverity = TOAST_SEVERITY_ICON_MAP[severity];
25
+ return (<IconAlert severity={iconAlertSeverity} size={IconSize.Lg} {...iconAlertProps}/>);
26
+ };
27
+ export const Toast = ({ actionButtonLabel, actionButtonOnPress, actionButtonProps, children, childrenWrapperProps, closeButtonProps, description, descriptionProps, onClose, iconAlertProps, severity = ToastSeverity.Default, startAccessory, title, titleProps, twClassName, ...props }) => {
28
+ const actionProps = actionButtonLabel && actionButtonOnPress
29
+ ? {
30
+ actionButtonLabel,
31
+ actionButtonOnPress,
32
+ actionButtonProps: {
33
+ size: ButtonSize.Sm,
34
+ ...actionButtonProps,
35
+ },
103
36
  }
104
- return (<Button variant={ButtonVariant.Primary} onPress={(e) => closeButtonOptions?.onPress?.(e)} startIconName={closeButtonOptions?.startIconName} endIconName={closeButtonOptions?.endIconName} style={closeButtonOptions?.style}>
105
- {closeButtonOptions?.children}
106
- </Button>);
107
- };
108
- const renderAvatar = () => {
109
- switch (toastOptions?.variant) {
110
- case ToastVariant.Plain:
111
- return null;
112
- case ToastVariant.Account: {
113
- const { accountAddress, accountAvatarType } = toastOptions;
114
- return (<AvatarAccount address={accountAddress} variant={accountAvatarType} size={AvatarAccountSize.Md} style={tw.style('mr-4')}/>);
115
- }
116
- case ToastVariant.Network: {
117
- const { networkImageSource, networkName } = toastOptions;
118
- return (<AvatarNetwork name={networkName} src={networkImageSource} size={AvatarNetworkSize.Md} style={tw.style('mr-4')}/>);
119
- }
120
- case ToastVariant.App: {
121
- const { appIconSource } = toastOptions;
122
- return (<AvatarFavicon src={appIconSource} size={AvatarFaviconSize.Md} style={tw.style('mr-4')}/>);
123
- }
124
- case ToastVariant.Icon: {
125
- const { iconName, severity } = toastOptions;
126
- return (<AvatarIcon iconName={iconName} severity={severity} size={AvatarIconSize.Md} style={tw.style('mr-4')}/>);
127
- }
128
- /* istanbul ignore next - all variants handled above */
129
- default:
130
- return null;
37
+ : {};
38
+ // TODO: Remove this conditional once BannerBase only renders a close button
39
+ // from onClose. At that point Toast can pass closeButtonProps directly.
40
+ const resolvedCloseButtonProps = onClose || closeButtonProps
41
+ ? {
42
+ accessibilityLabel: 'Close toast',
43
+ ...closeButtonProps,
131
44
  }
132
- };
133
- const renderToastContent = (options) => {
134
- const { labelOptions, descriptionOptions, linkButtonOptions, closeButtonOptions, startAccessory, } = options;
135
- const isStartAccessoryValid = startAccessory !== null &&
136
- startAccessory !== undefined &&
137
- isValidElement(startAccessory);
138
- return (<>
139
- {isStartAccessoryValid ? startAccessory : renderAvatar()}
140
- <View style={tw.style('flex-1 justify-center')} {...labelsContainerProps}>
141
- {renderLabel(labelOptions)}
142
- {renderDescription(descriptionOptions)}
143
- {renderActionButton(linkButtonOptions)}
144
- </View>
145
- {closeButtonOptions ? renderCloseButton(closeButtonOptions) : null}
146
- </>);
147
- };
148
- if (!toastOptions) {
149
- return null;
150
- }
151
- return (<Animated.View onLayout={onAnimatedViewLayout} style={baseStyle} {...props}>
152
- {renderToastContent(toastOptions)}
153
- </Animated.View>);
154
- });
45
+ : undefined;
46
+ return (<BannerBase {...actionProps} {...props} backgroundColor={BoxBackgroundColor.BackgroundSection} borderColor={BoxBorderColor.BorderMuted} borderWidth={1} children={children} childrenWrapperProps={childrenWrapperProps} closeButtonProps={resolvedCloseButtonProps} description={description} descriptionProps={descriptionProps} onClose={onClose} startAccessory={renderSeverityAccessory({
47
+ iconAlertProps,
48
+ severity,
49
+ startAccessory,
50
+ })} title={title} titleProps={titleProps} twClassName={twClassName ? `rounded-xl ${twClassName}` : 'rounded-xl'}/>);
51
+ };
155
52
  //# sourceMappingURL=Toast.mjs.map