@transferwise/components 0.0.0-experimental-4b93e2b → 0.0.0-experimental-f144cf1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. package/build/Calendar/DateHeader/DateHeader.js +6 -2
  2. package/build/Calendar/DateHeader/DateHeader.js.map +1 -1
  3. package/build/Calendar/DateHeader/DateHeader.mjs +7 -3
  4. package/build/Calendar/DateHeader/DateHeader.mjs.map +1 -1
  5. package/build/Carousel/Carousel.js +2 -2
  6. package/build/Carousel/Carousel.js.map +1 -1
  7. package/build/Carousel/Carousel.mjs +3 -3
  8. package/build/Carousel/Carousel.mjs.map +1 -1
  9. package/build/Inputs/SelectInput/OptionContent/SelectInputOptionContent.js +3 -4
  10. package/build/Inputs/SelectInput/OptionContent/SelectInputOptionContent.js.map +1 -1
  11. package/build/Inputs/SelectInput/OptionContent/SelectInputOptionContent.mjs +3 -4
  12. package/build/Inputs/SelectInput/OptionContent/SelectInputOptionContent.mjs.map +1 -1
  13. package/build/ListItem/Navigation/ListItemNavigation.js +1 -1
  14. package/build/ListItem/Navigation/ListItemNavigation.js.map +1 -1
  15. package/build/ListItem/Navigation/ListItemNavigation.mjs +2 -2
  16. package/build/ListItem/Navigation/ListItemNavigation.mjs.map +1 -1
  17. package/build/PhoneNumberInput/PhoneNumberInput.js +1 -2
  18. package/build/PhoneNumberInput/PhoneNumberInput.js.map +1 -1
  19. package/build/PhoneNumberInput/PhoneNumberInput.mjs +1 -2
  20. package/build/PhoneNumberInput/PhoneNumberInput.mjs.map +1 -1
  21. package/build/PromoCard/Indicator/PromoCardIndicator.js +1 -1
  22. package/build/PromoCard/Indicator/PromoCardIndicator.js.map +1 -1
  23. package/build/PromoCard/Indicator/PromoCardIndicator.mjs +2 -2
  24. package/build/PromoCard/Indicator/PromoCardIndicator.mjs.map +1 -1
  25. package/build/Snackbar/Snackbar.js +212 -108
  26. package/build/Snackbar/Snackbar.js.map +1 -1
  27. package/build/Snackbar/Snackbar.messages.js +14 -0
  28. package/build/Snackbar/Snackbar.messages.js.map +1 -0
  29. package/build/Snackbar/Snackbar.messages.mjs +10 -0
  30. package/build/Snackbar/Snackbar.messages.mjs.map +1 -0
  31. package/build/Snackbar/Snackbar.mjs +213 -107
  32. package/build/Snackbar/Snackbar.mjs.map +1 -1
  33. package/build/Snackbar/SnackbarContext.js.map +1 -1
  34. package/build/Snackbar/SnackbarContext.mjs.map +1 -1
  35. package/build/Snackbar/SnackbarPortal.js +92 -0
  36. package/build/Snackbar/SnackbarPortal.js.map +1 -0
  37. package/build/Snackbar/SnackbarPortal.mjs +89 -0
  38. package/build/Snackbar/SnackbarPortal.mjs.map +1 -0
  39. package/build/Snackbar/SnackbarProvider.js +21 -31
  40. package/build/Snackbar/SnackbarProvider.js.map +1 -1
  41. package/build/Snackbar/SnackbarProvider.mjs +22 -32
  42. package/build/Snackbar/SnackbarProvider.mjs.map +1 -1
  43. package/build/Snackbar/constants.js +14 -0
  44. package/build/Snackbar/constants.js.map +1 -0
  45. package/build/Snackbar/constants.mjs +8 -0
  46. package/build/Snackbar/constants.mjs.map +1 -0
  47. package/build/Snackbar/useSnackbarAutoDismiss.js +135 -0
  48. package/build/Snackbar/useSnackbarAutoDismiss.js.map +1 -0
  49. package/build/Snackbar/useSnackbarAutoDismiss.mjs +131 -0
  50. package/build/Snackbar/useSnackbarAutoDismiss.mjs.map +1 -0
  51. package/build/Snackbar/useSnackbarManager.js +164 -0
  52. package/build/Snackbar/useSnackbarManager.js.map +1 -0
  53. package/build/Snackbar/useSnackbarManager.mjs +160 -0
  54. package/build/Snackbar/useSnackbarManager.mjs.map +1 -0
  55. package/build/Snackbar/useSnackbarSwipeDismiss.js +114 -0
  56. package/build/Snackbar/useSnackbarSwipeDismiss.js.map +1 -0
  57. package/build/Snackbar/useSnackbarSwipeDismiss.mjs +110 -0
  58. package/build/Snackbar/useSnackbarSwipeDismiss.mjs.map +1 -0
  59. package/build/common/PropsValues/typography.js +0 -6
  60. package/build/common/PropsValues/typography.js.map +1 -1
  61. package/build/common/PropsValues/typography.mjs +0 -6
  62. package/build/common/PropsValues/typography.mjs.map +1 -1
  63. package/build/i18n/en.json +1 -0
  64. package/build/i18n/en.json.js +1 -0
  65. package/build/i18n/en.json.js.map +1 -1
  66. package/build/i18n/en.json.mjs +1 -0
  67. package/build/i18n/en.json.mjs.map +1 -1
  68. package/build/index.js +3 -1
  69. package/build/index.js.map +1 -1
  70. package/build/index.mjs +2 -1
  71. package/build/index.mjs.map +1 -1
  72. package/build/main.css +864 -1509
  73. package/build/styles/Button/Button.css +3 -0
  74. package/build/styles/DateInput/DateInput.css +0 -13
  75. package/build/styles/Inputs/Input/Input.css +24 -0
  76. package/build/styles/Inputs/TextArea/TextArea.css +24 -0
  77. package/build/styles/ListItem/ListItem.css +1 -1
  78. package/build/styles/PhoneNumberInput/PhoneNumberInput.css +0 -3
  79. package/build/styles/Popover/Popover.css +6 -0
  80. package/build/styles/PromoCard/PromoCard.css +3 -0
  81. package/build/styles/Snackbar/Snackbar.css +182 -61
  82. package/build/styles/_deprecated/Select/Select.css +6 -0
  83. package/build/styles/css/accordion.css +12 -0
  84. package/build/styles/css/button-groups.css +6 -0
  85. package/build/styles/css/buttons.css +2 -0
  86. package/build/styles/css/decision.css +12 -0
  87. package/build/styles/css/dropdowns.css +18 -2
  88. package/build/styles/css/droppable.css +6 -0
  89. package/build/styles/css/footer.css +12 -0
  90. package/build/styles/css/input-groups.css +42 -2
  91. package/build/styles/css/list-group.css +6 -0
  92. package/build/styles/css/navbar.css +18 -2
  93. package/build/styles/css/neptune-core.css +512 -4
  94. package/build/styles/css/neptune.css +640 -1426
  95. package/build/styles/css/popovers.css +18 -0
  96. package/build/styles/css/tooltip.css +6 -0
  97. package/build/styles/less/neptune-tokens.less +0 -8
  98. package/build/styles/main.css +864 -1509
  99. package/build/styles/props/neptune-tokens.css +0 -8
  100. package/build/styles/styles/less/accordion.css +12 -0
  101. package/build/styles/styles/less/button-groups.css +6 -0
  102. package/build/styles/styles/less/buttons.css +2 -0
  103. package/build/styles/styles/less/decision.css +12 -0
  104. package/build/styles/styles/less/dropdowns.css +18 -2
  105. package/build/styles/styles/less/droppable.css +6 -0
  106. package/build/styles/styles/less/footer.css +12 -0
  107. package/build/styles/styles/less/forms/bootstrap-forms.css +24 -2
  108. package/build/styles/styles/less/input-groups.css +42 -2
  109. package/build/styles/styles/less/list-group.css +6 -0
  110. package/build/styles/styles/less/navbar.css +18 -2
  111. package/build/styles/styles/less/neptune-core.css +512 -4
  112. package/build/styles/styles/less/neptune.css +640 -1426
  113. package/build/styles/styles/less/popovers.css +18 -0
  114. package/build/styles/styles/less/tooltip.css +6 -0
  115. package/build/types/Inputs/SelectInput/OptionContent/SelectInputOptionContent.d.ts +1 -2
  116. package/build/types/Inputs/SelectInput/OptionContent/SelectInputOptionContent.d.ts.map +1 -1
  117. package/build/types/PhoneNumberInput/PhoneNumberInput.d.ts.map +1 -1
  118. package/build/types/Snackbar/Snackbar.d.ts +41 -24
  119. package/build/types/Snackbar/Snackbar.d.ts.map +1 -1
  120. package/build/types/Snackbar/Snackbar.messages.d.ts +9 -0
  121. package/build/types/Snackbar/Snackbar.messages.d.ts.map +1 -0
  122. package/build/types/Snackbar/Snackbar.types.d.ts +21 -0
  123. package/build/types/Snackbar/Snackbar.types.d.ts.map +1 -0
  124. package/build/types/Snackbar/SnackbarContext.d.ts +2 -2
  125. package/build/types/Snackbar/SnackbarContext.d.ts.map +1 -1
  126. package/build/types/Snackbar/SnackbarPortal.d.ts +5 -0
  127. package/build/types/Snackbar/SnackbarPortal.d.ts.map +1 -0
  128. package/build/types/Snackbar/SnackbarProvider.d.ts +6 -0
  129. package/build/types/Snackbar/SnackbarProvider.d.ts.map +1 -1
  130. package/build/types/Snackbar/constants.d.ts +6 -0
  131. package/build/types/Snackbar/constants.d.ts.map +1 -0
  132. package/build/types/Snackbar/index.d.ts +3 -1
  133. package/build/types/Snackbar/index.d.ts.map +1 -1
  134. package/build/types/Snackbar/useSnackbar.d.ts +1 -1
  135. package/build/types/Snackbar/useSnackbar.d.ts.map +1 -1
  136. package/build/types/Snackbar/useSnackbarAutoDismiss.d.ts +18 -0
  137. package/build/types/Snackbar/useSnackbarAutoDismiss.d.ts.map +1 -0
  138. package/build/types/Snackbar/useSnackbarManager.d.ts +17 -0
  139. package/build/types/Snackbar/useSnackbarManager.d.ts.map +1 -0
  140. package/build/types/Snackbar/useSnackbarSwipeDismiss.d.ts +11 -0
  141. package/build/types/Snackbar/useSnackbarSwipeDismiss.d.ts.map +1 -0
  142. package/build/types/common/PropsValues/typography.d.ts +1 -13
  143. package/build/types/common/PropsValues/typography.d.ts.map +1 -1
  144. package/build/types/index.d.ts +2 -2
  145. package/build/types/index.d.ts.map +1 -1
  146. package/build/types/test-utils/index.d.ts +2 -0
  147. package/build/types/test-utils/index.d.ts.map +1 -1
  148. package/package.json +2 -2
  149. package/src/Button/Button.css +3 -0
  150. package/src/Button/Button.less +16 -0
  151. package/src/Button/_stories/Button.test.story.tsx +12 -12
  152. package/src/Calendar/DateHeader/DateHeader.tsx +3 -3
  153. package/src/Carousel/Carousel.tsx +3 -3
  154. package/src/DateInput/DateInput.css +0 -13
  155. package/src/DateInput/DateInput.less +2 -10
  156. package/src/DateInput/_stories/DateInput.test.story.tsx +13 -0
  157. package/src/Display/_stories/Display.story.tsx +6 -20
  158. package/src/ExpressiveMoneyInput/_stories/ExpressiveMoneyInput.rtl.test.story.tsx +1 -1
  159. package/src/InputWithDisplayFormat/_stories/InputWithDisplayFormat.test.story.tsx +0 -52
  160. package/src/Inputs/Input/Input.css +24 -0
  161. package/src/Inputs/SelectInput/OptionContent/SelectInputOptionContent.tsx +1 -4
  162. package/src/Inputs/SelectInput/SelectInput.test.tsx +0 -74
  163. package/src/Inputs/TextArea/TextArea.css +24 -0
  164. package/src/ListItem/ListItem.css +1 -1
  165. package/src/ListItem/ListItem.grid.less +4 -4
  166. package/src/ListItem/ListItem.less +1 -1
  167. package/src/ListItem/Navigation/ListItemNavigation.tsx +2 -2
  168. package/src/PhoneNumberInput/PhoneNumberInput.css +0 -3
  169. package/src/PhoneNumberInput/PhoneNumberInput.less +2 -10
  170. package/src/PhoneNumberInput/PhoneNumberInput.tsx +0 -1
  171. package/src/PhoneNumberInput/_stories/PhoneNumberInput.rtl.test.story.tsx +1 -1
  172. package/src/Popover/Popover.css +6 -0
  173. package/src/PromoCard/Indicator/PromoCardIndicator.tsx +2 -2
  174. package/src/PromoCard/PromoCard.css +3 -0
  175. package/src/PromoCard/PromoCard.less +5 -0
  176. package/src/Prompt/CriticalBanner/_stories/CriticalBanner.test.story.tsx +1 -1
  177. package/src/Snackbar/Snackbar.css +182 -61
  178. package/src/Snackbar/Snackbar.less +185 -56
  179. package/src/Snackbar/Snackbar.messages.ts +9 -0
  180. package/src/Snackbar/Snackbar.test.tsx +697 -0
  181. package/src/Snackbar/Snackbar.tsx +227 -96
  182. package/src/Snackbar/Snackbar.types.ts +26 -0
  183. package/src/Snackbar/SnackbarContext.ts +2 -2
  184. package/src/Snackbar/SnackbarPortal.tsx +110 -0
  185. package/src/Snackbar/SnackbarProvider.test.tsx +202 -0
  186. package/src/Snackbar/SnackbarProvider.tsx +25 -25
  187. package/src/Snackbar/_stories/Snackbar.accessibility.docs.mdx +73 -0
  188. package/src/Snackbar/_stories/Snackbar.rtl.test.story.tsx +1 -12
  189. package/src/Snackbar/_stories/Snackbar.story.tsx +447 -62
  190. package/src/Snackbar/_stories/Snackbar.test.story.tsx +91 -16
  191. package/src/Snackbar/constants.ts +5 -0
  192. package/src/Snackbar/index.ts +3 -1
  193. package/src/Snackbar/useSnackbarAutoDismiss.ts +155 -0
  194. package/src/Snackbar/useSnackbarManager.ts +181 -0
  195. package/src/Snackbar/useSnackbarSwipeDismiss.ts +129 -0
  196. package/src/_deprecated/Select/Select.css +6 -0
  197. package/src/common/PropsValues/typography.ts +1 -20
  198. package/src/i18n/en.json +1 -1
  199. package/src/index.ts +7 -2
  200. package/src/main.css +864 -1509
  201. package/src/styles/less/accordion.css +12 -0
  202. package/src/styles/less/button-groups.css +6 -0
  203. package/src/styles/less/buttons.css +2 -0
  204. package/src/styles/less/core/_typography.less +194 -26
  205. package/src/styles/less/decision.css +12 -0
  206. package/src/styles/less/dropdowns.css +18 -2
  207. package/src/styles/less/droppable.css +6 -0
  208. package/src/styles/less/footer.css +12 -0
  209. package/src/styles/less/forms/bootstrap-forms.css +24 -2
  210. package/src/styles/less/input-groups.css +42 -2
  211. package/src/styles/less/list-group.css +6 -0
  212. package/src/styles/less/navbar.css +18 -2
  213. package/src/styles/less/neptune-core.css +512 -4
  214. package/src/styles/less/neptune.bundle.less +0 -2
  215. package/src/styles/less/neptune.css +640 -1426
  216. package/src/styles/less/popovers.css +18 -0
  217. package/src/styles/less/tooltip.css +6 -0
  218. package/src/DateInput/_stories/DateInput.rtl.test.story.tsx +0 -36
@@ -0,0 +1,89 @@
1
+ import { useRef, useEffect } from 'react';
2
+ import withNextPortalWrapper from '../WithNextPortal/WithNextPortal.mjs';
3
+ import { SnackbarInternal } from './Snackbar.mjs';
4
+ import useSnackbarManager from './useSnackbarManager.mjs';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ const PortalledSnackbar = withNextPortalWrapper(SnackbarInternal);
8
+ const hasSnackbarText = text => text !== null && text !== undefined && text !== '';
9
+ const SnackbarPortal = ({
10
+ action,
11
+ duration,
12
+ loading,
13
+ media,
14
+ onDismiss,
15
+ sentiment,
16
+ text,
17
+ theme,
18
+ timeout,
19
+ timestamp
20
+ }) => {
21
+ const hasText = hasSnackbarText(text);
22
+ const previousTimestamp = useRef(timestamp);
23
+ const previousText = useRef(text);
24
+ const isInitialRender = useRef(true);
25
+ const {
26
+ active,
27
+ announcementKey,
28
+ dismissSnackbar,
29
+ handleExited,
30
+ showSnackbar,
31
+ updateSnackbar,
32
+ visible
33
+ } = useSnackbarManager(hasText ? {
34
+ action,
35
+ duration,
36
+ loading,
37
+ media,
38
+ onDismiss,
39
+ sentiment,
40
+ text,
41
+ theme,
42
+ timeout
43
+ } : undefined);
44
+ useEffect(() => {
45
+ if (isInitialRender.current) {
46
+ isInitialRender.current = false;
47
+ return;
48
+ }
49
+ if (!hasText) {
50
+ dismissSnackbar();
51
+ previousTimestamp.current = timestamp;
52
+ previousText.current = text;
53
+ return;
54
+ }
55
+ const snackbar = {
56
+ action,
57
+ duration,
58
+ loading,
59
+ media,
60
+ onDismiss,
61
+ sentiment,
62
+ text,
63
+ theme,
64
+ timeout
65
+ };
66
+ if (timestamp === undefined) {
67
+ // Without the legacy identity prop, update in place so recreated callbacks/media do not
68
+ // repeatedly restart the exit animation or auto-dismiss timer.
69
+ updateSnackbar(snackbar, !hasSnackbarText(previousText.current));
70
+ } else if (!hasSnackbarText(previousText.current) || previousTimestamp.current !== timestamp) {
71
+ showSnackbar(snackbar);
72
+ }
73
+ previousTimestamp.current = timestamp;
74
+ previousText.current = text;
75
+ }, [dismissSnackbar, showSnackbar, action, duration, hasText, loading, media, onDismiss, sentiment, text, theme, timeout, timestamp, updateSnackbar]);
76
+ if (!active) {
77
+ return null;
78
+ }
79
+ return /*#__PURE__*/jsx(PortalledSnackbar, {
80
+ ...active.props,
81
+ announcementKey: announcementKey,
82
+ visible: visible,
83
+ onDismissRequest: dismissSnackbar,
84
+ onExited: handleExited
85
+ });
86
+ };
87
+
88
+ export { PortalledSnackbar, SnackbarPortal };
89
+ //# sourceMappingURL=SnackbarPortal.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SnackbarPortal.mjs","sources":["../../src/Snackbar/SnackbarPortal.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport withNextPortal from '../WithNextPortal/WithNextPortal';\nimport { SnackbarInternal } from './Snackbar';\nimport type { SnackbarPortalProps } from './Snackbar.types';\nimport useSnackbarManager from './useSnackbarManager';\n\nexport const PortalledSnackbar = withNextPortal(SnackbarInternal);\n\nconst hasSnackbarText = (text: SnackbarPortalProps['text']) =>\n text !== null && text !== undefined && text !== '';\n\nexport const SnackbarPortal = ({\n action,\n duration,\n loading,\n media,\n onDismiss,\n sentiment,\n text,\n theme,\n timeout,\n timestamp,\n}: SnackbarPortalProps) => {\n const hasText = hasSnackbarText(text);\n const previousTimestamp = useRef(timestamp);\n const previousText = useRef(text);\n const isInitialRender = useRef(true);\n const {\n active,\n announcementKey,\n dismissSnackbar,\n handleExited,\n showSnackbar,\n updateSnackbar,\n visible,\n } = useSnackbarManager(\n hasText\n ? { action, duration, loading, media, onDismiss, sentiment, text, theme, timeout }\n : undefined,\n );\n\n useEffect(() => {\n if (isInitialRender.current) {\n isInitialRender.current = false;\n return;\n }\n\n if (!hasText) {\n dismissSnackbar();\n previousTimestamp.current = timestamp;\n previousText.current = text;\n return;\n }\n\n const snackbar = {\n action,\n duration,\n loading,\n media,\n onDismiss,\n sentiment,\n text,\n theme,\n timeout,\n };\n\n if (timestamp === undefined) {\n // Without the legacy identity prop, update in place so recreated callbacks/media do not\n // repeatedly restart the exit animation or auto-dismiss timer.\n updateSnackbar(snackbar, !hasSnackbarText(previousText.current));\n } else if (!hasSnackbarText(previousText.current) || previousTimestamp.current !== timestamp) {\n showSnackbar(snackbar);\n }\n\n previousTimestamp.current = timestamp;\n previousText.current = text;\n }, [\n dismissSnackbar,\n showSnackbar,\n action,\n duration,\n hasText,\n loading,\n media,\n onDismiss,\n sentiment,\n text,\n theme,\n timeout,\n timestamp,\n updateSnackbar,\n ]);\n\n if (!active) {\n return null;\n }\n\n return (\n <PortalledSnackbar\n {...active.props}\n announcementKey={announcementKey}\n visible={visible}\n onDismissRequest={dismissSnackbar}\n onExited={handleExited}\n />\n );\n};\n\nexport default SnackbarPortal;\n"],"names":["PortalledSnackbar","withNextPortal","SnackbarInternal","hasSnackbarText","text","undefined","SnackbarPortal","action","duration","loading","media","onDismiss","sentiment","theme","timeout","timestamp","hasText","previousTimestamp","useRef","previousText","isInitialRender","active","announcementKey","dismissSnackbar","handleExited","showSnackbar","updateSnackbar","visible","useSnackbarManager","useEffect","current","snackbar","_jsx","props","onDismissRequest","onExited"],"mappings":";;;;;;MAOaA,iBAAiB,GAAGC,qBAAc,CAACC,gBAAgB;AAEhE,MAAMC,eAAe,GAAIC,IAAiC,IACxDA,IAAI,KAAK,IAAI,IAAIA,IAAI,KAAKC,SAAS,IAAID,IAAI,KAAK,EAAE;AAE7C,MAAME,cAAc,GAAGA,CAAC;EAC7BC,MAAM;EACNC,QAAQ;EACRC,OAAO;EACPC,KAAK;EACLC,SAAS;EACTC,SAAS;EACTR,IAAI;EACJS,KAAK;EACLC,OAAO;AACPC,EAAAA;AAAS,CACW,KAAI;AACxB,EAAA,MAAMC,OAAO,GAAGb,eAAe,CAACC,IAAI,CAAC;AACrC,EAAA,MAAMa,iBAAiB,GAAGC,MAAM,CAACH,SAAS,CAAC;AAC3C,EAAA,MAAMI,YAAY,GAAGD,MAAM,CAACd,IAAI,CAAC;AACjC,EAAA,MAAMgB,eAAe,GAAGF,MAAM,CAAC,IAAI,CAAC;EACpC,MAAM;IACJG,MAAM;IACNC,eAAe;IACfC,eAAe;IACfC,YAAY;IACZC,YAAY;IACZC,cAAc;AACdC,IAAAA;GACD,GAAGC,kBAAkB,CACpBZ,OAAO,GACH;IAAET,MAAM;IAAEC,QAAQ;IAAEC,OAAO;IAAEC,KAAK;IAAEC,SAAS;IAAEC,SAAS;IAAER,IAAI;IAAES,KAAK;AAAEC,IAAAA;GAAS,GAChFT,SAAS,CACd;AAEDwB,EAAAA,SAAS,CAAC,MAAK;IACb,IAAIT,eAAe,CAACU,OAAO,EAAE;MAC3BV,eAAe,CAACU,OAAO,GAAG,KAAK;AAC/B,MAAA;AACF,IAAA;IAEA,IAAI,CAACd,OAAO,EAAE;AACZO,MAAAA,eAAe,EAAE;MACjBN,iBAAiB,CAACa,OAAO,GAAGf,SAAS;MACrCI,YAAY,CAACW,OAAO,GAAG1B,IAAI;AAC3B,MAAA;AACF,IAAA;AAEA,IAAA,MAAM2B,QAAQ,GAAG;MACfxB,MAAM;MACNC,QAAQ;MACRC,OAAO;MACPC,KAAK;MACLC,SAAS;MACTC,SAAS;MACTR,IAAI;MACJS,KAAK;AACLC,MAAAA;KACD;IAED,IAAIC,SAAS,KAAKV,SAAS,EAAE;AAC3B;AACA;MACAqB,cAAc,CAACK,QAAQ,EAAE,CAAC5B,eAAe,CAACgB,YAAY,CAACW,OAAO,CAAC,CAAC;AAClE,IAAA,CAAC,MAAM,IAAI,CAAC3B,eAAe,CAACgB,YAAY,CAACW,OAAO,CAAC,IAAIb,iBAAiB,CAACa,OAAO,KAAKf,SAAS,EAAE;MAC5FU,YAAY,CAACM,QAAQ,CAAC;AACxB,IAAA;IAEAd,iBAAiB,CAACa,OAAO,GAAGf,SAAS;IACrCI,YAAY,CAACW,OAAO,GAAG1B,IAAI;AAC7B,EAAA,CAAC,EAAE,CACDmB,eAAe,EACfE,YAAY,EACZlB,MAAM,EACNC,QAAQ,EACRQ,OAAO,EACPP,OAAO,EACPC,KAAK,EACLC,SAAS,EACTC,SAAS,EACTR,IAAI,EACJS,KAAK,EACLC,OAAO,EACPC,SAAS,EACTW,cAAc,CACf,CAAC;EAEF,IAAI,CAACL,MAAM,EAAE;AACX,IAAA,OAAO,IAAI;AACb,EAAA;EAEA,oBACEW,GAAA,CAAChC,iBAAiB,EAAA;IAAA,GACZqB,MAAM,CAACY,KAAK;AAChBX,IAAAA,eAAe,EAAEA,eAAgB;AACjCK,IAAAA,OAAO,EAAEA,OAAQ;AACjBO,IAAAA,gBAAgB,EAAEX,eAAgB;AAClCY,IAAAA,QAAQ,EAAEX;AAAa,GAAA,CACvB;AAEN;;"}
@@ -3,46 +3,36 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var React = require('react');
6
- var Snackbar = require('./Snackbar.js');
7
6
  var SnackbarContext = require('./SnackbarContext.js');
7
+ var SnackbarPortal = require('./SnackbarPortal.js');
8
+ var useSnackbarManager = require('./useSnackbarManager.js');
8
9
  var jsxRuntime = require('react/jsx-runtime');
9
10
 
10
11
  function SnackbarProvider({
11
- timeout = 4500,
12
+ timeout,
12
13
  children
13
14
  }) {
14
- const [state, setState] = React.useState({
15
- text: '',
16
- timestamp: 0
17
- });
18
15
  const {
19
- action,
20
- text,
21
- theme,
22
- timestamp
23
- } = state;
16
+ active,
17
+ announcementKey,
18
+ dismissSnackbar,
19
+ handleExited,
20
+ showSnackbar,
21
+ visible
22
+ } = useSnackbarManager.default();
23
+ const contextValue = React.useMemo(() => ({
24
+ createSnackbar: showSnackbar
25
+ }), [showSnackbar]);
24
26
  return /*#__PURE__*/jsxRuntime.jsxs(SnackbarContext.SnackbarContext.Provider, {
25
- value: React.useMemo(() => ({
26
- createSnackbar: ({
27
- action,
28
- text,
29
- theme
30
- }) => {
31
- setState({
32
- action,
33
- text,
34
- theme,
35
- timestamp: Date.now()
36
- });
37
- }
38
- }), []),
39
- children: [/*#__PURE__*/jsxRuntime.jsx(Snackbar.default, {
40
- action: action,
41
- text: text,
42
- timestamp: timestamp,
27
+ value: contextValue,
28
+ children: [active ? /*#__PURE__*/jsxRuntime.jsx(SnackbarPortal.PortalledSnackbar, {
29
+ ...active.props,
30
+ announcementKey: announcementKey,
43
31
  timeout: timeout,
44
- theme: theme
45
- }), children]
32
+ visible: visible,
33
+ onDismissRequest: dismissSnackbar,
34
+ onExited: handleExited
35
+ }, active.id) : null, children]
46
36
  });
47
37
  }
48
38
 
@@ -1 +1 @@
1
- {"version":3,"file":"SnackbarProvider.js","sources":["../../src/Snackbar/SnackbarProvider.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\n\nimport SnackbarPortal, { SnackbarProps } from './Snackbar';\nimport { SnackbarContext } from './SnackbarContext';\n\nexport interface SnackbarProviderProps {\n timeout?: number;\n children?: React.ReactNode;\n}\n\nexport default function SnackbarProvider({ timeout = 4500, children }: SnackbarProviderProps) {\n const [state, setState] = useState<Omit<SnackbarProps, 'timeout'>>({\n text: '',\n timestamp: 0,\n });\n const { action, text, theme, timestamp } = state;\n\n return (\n <SnackbarContext.Provider\n value={useMemo(\n () => ({\n createSnackbar: ({ action, text, theme }) => {\n setState({ action, text, theme, timestamp: Date.now() });\n },\n }),\n [],\n )}\n >\n <SnackbarPortal\n action={action}\n text={text}\n timestamp={timestamp}\n timeout={timeout}\n theme={theme}\n />\n {children}\n </SnackbarContext.Provider>\n );\n}\n"],"names":["SnackbarProvider","timeout","children","state","setState","useState","text","timestamp","action","theme","_jsxs","SnackbarContext","Provider","value","useMemo","createSnackbar","Date","now","_jsx","SnackbarPortal"],"mappings":";;;;;;;;;AAUc,SAAUA,gBAAgBA,CAAC;AAAEC,EAAAA,OAAO,GAAG,IAAI;AAAEC,EAAAA;AAAQ,CAAyB,EAAA;AAC1F,EAAA,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGC,cAAQ,CAAiC;AACjEC,IAAAA,IAAI,EAAE,EAAE;AACRC,IAAAA,SAAS,EAAE;AACZ,GAAA,CAAC;EACF,MAAM;IAAEC,MAAM;IAAEF,IAAI;IAAEG,KAAK;AAAEF,IAAAA;AAAS,GAAE,GAAGJ,KAAK;AAEhD,EAAA,oBACEO,eAAA,CAACC,+BAAe,CAACC,QAAQ,EAAA;IACvBC,KAAK,EAAEC,aAAO,CACZ,OAAO;AACLC,MAAAA,cAAc,EAAEA,CAAC;QAAEP,MAAM;QAAEF,IAAI;AAAEG,QAAAA;AAAK,OAAE,KAAI;AAC1CL,QAAAA,QAAQ,CAAC;UAAEI,MAAM;UAAEF,IAAI;UAAEG,KAAK;AAAEF,UAAAA,SAAS,EAAES,IAAI,CAACC,GAAG;AAAE,SAAE,CAAC;AAC1D,MAAA;KACD,CAAC,EACF,EAAE,CACF;IAAAf,QAAA,EAAA,cAEFgB,cAAA,CAACC,gBAAc,EAAA;AACbX,MAAAA,MAAM,EAAEA,MAAO;AACfF,MAAAA,IAAI,EAAEA,IAAK;AACXC,MAAAA,SAAS,EAAEA,SAAU;AACrBN,MAAAA,OAAO,EAAEA,OAAQ;AACjBQ,MAAAA,KAAK,EAAEA;KAAM,CAEf,EAACP,QAAQ;AAAA,GACe,CAAC;AAE/B;;"}
1
+ {"version":3,"file":"SnackbarProvider.js","sources":["../../src/Snackbar/SnackbarProvider.tsx"],"sourcesContent":["import { useMemo } from 'react';\n\nimport { SnackbarContext } from './SnackbarContext';\nimport { PortalledSnackbar } from './SnackbarPortal';\nimport useSnackbarManager from './useSnackbarManager';\n\nexport interface SnackbarProviderProps {\n /**\n * @deprecated Configure each Snackbar with semantic `duration` instead. Existing millisecond\n * values remain supported temporarily while consumers migrate. A Snackbar's `duration` takes\n * precedence when both are provided.\n */\n timeout?: number;\n /** Application content that can create Snackbars through the Provider context. */\n children?: React.ReactNode;\n}\n\nexport default function SnackbarProvider({ timeout, children }: SnackbarProviderProps) {\n const { active, announcementKey, dismissSnackbar, handleExited, showSnackbar, visible } =\n useSnackbarManager();\n const contextValue = useMemo(() => ({ createSnackbar: showSnackbar }), [showSnackbar]);\n\n return (\n <SnackbarContext.Provider value={contextValue}>\n {active ? (\n <PortalledSnackbar\n key={active.id}\n {...active.props}\n announcementKey={announcementKey}\n timeout={timeout}\n visible={visible}\n onDismissRequest={dismissSnackbar}\n onExited={handleExited}\n />\n ) : null}\n {children}\n </SnackbarContext.Provider>\n );\n}\n"],"names":["SnackbarProvider","timeout","children","active","announcementKey","dismissSnackbar","handleExited","showSnackbar","visible","useSnackbarManager","contextValue","useMemo","createSnackbar","_jsxs","SnackbarContext","Provider","value","_jsx","PortalledSnackbar","props","onDismissRequest","onExited","id"],"mappings":";;;;;;;;;;AAiBc,SAAUA,gBAAgBA,CAAC;EAAEC,OAAO;AAAEC,EAAAA;AAAQ,CAAyB,EAAA;EACnF,MAAM;IAAEC,MAAM;IAAEC,eAAe;IAAEC,eAAe;IAAEC,YAAY;IAAEC,YAAY;AAAEC,IAAAA;GAAS,GACrFC,0BAAkB,EAAE;AACtB,EAAA,MAAMC,YAAY,GAAGC,aAAO,CAAC,OAAO;AAAEC,IAAAA,cAAc,EAAEL;GAAc,CAAC,EAAE,CAACA,YAAY,CAAC,CAAC;AAEtF,EAAA,oBACEM,eAAA,CAACC,+BAAe,CAACC,QAAQ,EAAA;AAACC,IAAAA,KAAK,EAAEN,YAAa;AAAAR,IAAAA,QAAA,EAAA,CAC3CC,MAAM,gBACLc,cAAA,CAACC,gCAAiB,EAAA;MAAA,GAEZf,MAAM,CAACgB,KAAK;AAChBf,MAAAA,eAAe,EAAEA,eAAgB;AACjCH,MAAAA,OAAO,EAAEA,OAAQ;AACjBO,MAAAA,OAAO,EAAEA,OAAQ;AACjBY,MAAAA,gBAAgB,EAAEf,eAAgB;AAClCgB,MAAAA,QAAQ,EAAEf;AAAa,KAAA,EANlBH,MAAM,CAACmB,EAMW,CACvB,GACA,IAAI,EACPpB,QAAQ;AAAA,GACe,CAAC;AAE/B;;"}
@@ -1,44 +1,34 @@
1
- import { useState, useMemo } from 'react';
2
- import SnackbarPortal from './Snackbar.mjs';
1
+ import { useMemo } from 'react';
3
2
  import { SnackbarContext } from './SnackbarContext.mjs';
3
+ import { PortalledSnackbar } from './SnackbarPortal.mjs';
4
+ import useSnackbarManager from './useSnackbarManager.mjs';
4
5
  import { jsxs, jsx } from 'react/jsx-runtime';
5
6
 
6
7
  function SnackbarProvider({
7
- timeout = 4500,
8
+ timeout,
8
9
  children
9
10
  }) {
10
- const [state, setState] = useState({
11
- text: '',
12
- timestamp: 0
13
- });
14
11
  const {
15
- action,
16
- text,
17
- theme,
18
- timestamp
19
- } = state;
12
+ active,
13
+ announcementKey,
14
+ dismissSnackbar,
15
+ handleExited,
16
+ showSnackbar,
17
+ visible
18
+ } = useSnackbarManager();
19
+ const contextValue = useMemo(() => ({
20
+ createSnackbar: showSnackbar
21
+ }), [showSnackbar]);
20
22
  return /*#__PURE__*/jsxs(SnackbarContext.Provider, {
21
- value: useMemo(() => ({
22
- createSnackbar: ({
23
- action,
24
- text,
25
- theme
26
- }) => {
27
- setState({
28
- action,
29
- text,
30
- theme,
31
- timestamp: Date.now()
32
- });
33
- }
34
- }), []),
35
- children: [/*#__PURE__*/jsx(SnackbarPortal, {
36
- action: action,
37
- text: text,
38
- timestamp: timestamp,
23
+ value: contextValue,
24
+ children: [active ? /*#__PURE__*/jsx(PortalledSnackbar, {
25
+ ...active.props,
26
+ announcementKey: announcementKey,
39
27
  timeout: timeout,
40
- theme: theme
41
- }), children]
28
+ visible: visible,
29
+ onDismissRequest: dismissSnackbar,
30
+ onExited: handleExited
31
+ }, active.id) : null, children]
42
32
  });
43
33
  }
44
34
 
@@ -1 +1 @@
1
- {"version":3,"file":"SnackbarProvider.mjs","sources":["../../src/Snackbar/SnackbarProvider.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\n\nimport SnackbarPortal, { SnackbarProps } from './Snackbar';\nimport { SnackbarContext } from './SnackbarContext';\n\nexport interface SnackbarProviderProps {\n timeout?: number;\n children?: React.ReactNode;\n}\n\nexport default function SnackbarProvider({ timeout = 4500, children }: SnackbarProviderProps) {\n const [state, setState] = useState<Omit<SnackbarProps, 'timeout'>>({\n text: '',\n timestamp: 0,\n });\n const { action, text, theme, timestamp } = state;\n\n return (\n <SnackbarContext.Provider\n value={useMemo(\n () => ({\n createSnackbar: ({ action, text, theme }) => {\n setState({ action, text, theme, timestamp: Date.now() });\n },\n }),\n [],\n )}\n >\n <SnackbarPortal\n action={action}\n text={text}\n timestamp={timestamp}\n timeout={timeout}\n theme={theme}\n />\n {children}\n </SnackbarContext.Provider>\n );\n}\n"],"names":["SnackbarProvider","timeout","children","state","setState","useState","text","timestamp","action","theme","_jsxs","SnackbarContext","Provider","value","useMemo","createSnackbar","Date","now","_jsx","SnackbarPortal"],"mappings":";;;;;AAUc,SAAUA,gBAAgBA,CAAC;AAAEC,EAAAA,OAAO,GAAG,IAAI;AAAEC,EAAAA;AAAQ,CAAyB,EAAA;AAC1F,EAAA,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGC,QAAQ,CAAiC;AACjEC,IAAAA,IAAI,EAAE,EAAE;AACRC,IAAAA,SAAS,EAAE;AACZ,GAAA,CAAC;EACF,MAAM;IAAEC,MAAM;IAAEF,IAAI;IAAEG,KAAK;AAAEF,IAAAA;AAAS,GAAE,GAAGJ,KAAK;AAEhD,EAAA,oBACEO,IAAA,CAACC,eAAe,CAACC,QAAQ,EAAA;IACvBC,KAAK,EAAEC,OAAO,CACZ,OAAO;AACLC,MAAAA,cAAc,EAAEA,CAAC;QAAEP,MAAM;QAAEF,IAAI;AAAEG,QAAAA;AAAK,OAAE,KAAI;AAC1CL,QAAAA,QAAQ,CAAC;UAAEI,MAAM;UAAEF,IAAI;UAAEG,KAAK;AAAEF,UAAAA,SAAS,EAAES,IAAI,CAACC,GAAG;AAAE,SAAE,CAAC;AAC1D,MAAA;KACD,CAAC,EACF,EAAE,CACF;IAAAf,QAAA,EAAA,cAEFgB,GAAA,CAACC,cAAc,EAAA;AACbX,MAAAA,MAAM,EAAEA,MAAO;AACfF,MAAAA,IAAI,EAAEA,IAAK;AACXC,MAAAA,SAAS,EAAEA,SAAU;AACrBN,MAAAA,OAAO,EAAEA,OAAQ;AACjBQ,MAAAA,KAAK,EAAEA;KAAM,CAEf,EAACP,QAAQ;AAAA,GACe,CAAC;AAE/B;;"}
1
+ {"version":3,"file":"SnackbarProvider.mjs","sources":["../../src/Snackbar/SnackbarProvider.tsx"],"sourcesContent":["import { useMemo } from 'react';\n\nimport { SnackbarContext } from './SnackbarContext';\nimport { PortalledSnackbar } from './SnackbarPortal';\nimport useSnackbarManager from './useSnackbarManager';\n\nexport interface SnackbarProviderProps {\n /**\n * @deprecated Configure each Snackbar with semantic `duration` instead. Existing millisecond\n * values remain supported temporarily while consumers migrate. A Snackbar's `duration` takes\n * precedence when both are provided.\n */\n timeout?: number;\n /** Application content that can create Snackbars through the Provider context. */\n children?: React.ReactNode;\n}\n\nexport default function SnackbarProvider({ timeout, children }: SnackbarProviderProps) {\n const { active, announcementKey, dismissSnackbar, handleExited, showSnackbar, visible } =\n useSnackbarManager();\n const contextValue = useMemo(() => ({ createSnackbar: showSnackbar }), [showSnackbar]);\n\n return (\n <SnackbarContext.Provider value={contextValue}>\n {active ? (\n <PortalledSnackbar\n key={active.id}\n {...active.props}\n announcementKey={announcementKey}\n timeout={timeout}\n visible={visible}\n onDismissRequest={dismissSnackbar}\n onExited={handleExited}\n />\n ) : null}\n {children}\n </SnackbarContext.Provider>\n );\n}\n"],"names":["SnackbarProvider","timeout","children","active","announcementKey","dismissSnackbar","handleExited","showSnackbar","visible","useSnackbarManager","contextValue","useMemo","createSnackbar","_jsxs","SnackbarContext","Provider","value","_jsx","PortalledSnackbar","props","onDismissRequest","onExited","id"],"mappings":";;;;;;AAiBc,SAAUA,gBAAgBA,CAAC;EAAEC,OAAO;AAAEC,EAAAA;AAAQ,CAAyB,EAAA;EACnF,MAAM;IAAEC,MAAM;IAAEC,eAAe;IAAEC,eAAe;IAAEC,YAAY;IAAEC,YAAY;AAAEC,IAAAA;GAAS,GACrFC,kBAAkB,EAAE;AACtB,EAAA,MAAMC,YAAY,GAAGC,OAAO,CAAC,OAAO;AAAEC,IAAAA,cAAc,EAAEL;GAAc,CAAC,EAAE,CAACA,YAAY,CAAC,CAAC;AAEtF,EAAA,oBACEM,IAAA,CAACC,eAAe,CAACC,QAAQ,EAAA;AAACC,IAAAA,KAAK,EAAEN,YAAa;AAAAR,IAAAA,QAAA,EAAA,CAC3CC,MAAM,gBACLc,GAAA,CAACC,iBAAiB,EAAA;MAAA,GAEZf,MAAM,CAACgB,KAAK;AAChBf,MAAAA,eAAe,EAAEA,eAAgB;AACjCH,MAAAA,OAAO,EAAEA,OAAQ;AACjBO,MAAAA,OAAO,EAAEA,OAAQ;AACjBY,MAAAA,gBAAgB,EAAEf,eAAgB;AAClCgB,MAAAA,QAAQ,EAAEf;AAAa,KAAA,EANlBH,MAAM,CAACmB,EAMW,CACvB,GACA,IAAI,EACPpB,QAAQ;AAAA,GACe,CAAC;AAE/B;;"}
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ const SNACKBAR_ENTER_DURATION = 300;
4
+ const SNACKBAR_EXIT_DURATION = 150;
5
+ const SNACKBAR_DEFAULT_DURATION = 4000;
6
+ const SNACKBAR_EXTENDED_DURATION = 6000;
7
+ const SWIPE_DISMISS_THRESHOLD_RATIO = 0.5;
8
+
9
+ exports.SNACKBAR_DEFAULT_DURATION = SNACKBAR_DEFAULT_DURATION;
10
+ exports.SNACKBAR_ENTER_DURATION = SNACKBAR_ENTER_DURATION;
11
+ exports.SNACKBAR_EXIT_DURATION = SNACKBAR_EXIT_DURATION;
12
+ exports.SNACKBAR_EXTENDED_DURATION = SNACKBAR_EXTENDED_DURATION;
13
+ exports.SWIPE_DISMISS_THRESHOLD_RATIO = SWIPE_DISMISS_THRESHOLD_RATIO;
14
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sources":["../../src/Snackbar/constants.ts"],"sourcesContent":["export const SNACKBAR_ENTER_DURATION = 300;\nexport const SNACKBAR_EXIT_DURATION = 150;\nexport const SNACKBAR_DEFAULT_DURATION = 4000;\nexport const SNACKBAR_EXTENDED_DURATION = 6000;\nexport const SWIPE_DISMISS_THRESHOLD_RATIO = 0.5;\n"],"names":["SNACKBAR_ENTER_DURATION","SNACKBAR_EXIT_DURATION","SNACKBAR_DEFAULT_DURATION","SNACKBAR_EXTENDED_DURATION","SWIPE_DISMISS_THRESHOLD_RATIO"],"mappings":";;AAAO,MAAMA,uBAAuB,GAAG;AAChC,MAAMC,sBAAsB,GAAG;AAC/B,MAAMC,yBAAyB,GAAG;AAClC,MAAMC,0BAA0B,GAAG;AACnC,MAAMC,6BAA6B,GAAG;;;;;;"}
@@ -0,0 +1,8 @@
1
+ const SNACKBAR_ENTER_DURATION = 300;
2
+ const SNACKBAR_EXIT_DURATION = 150;
3
+ const SNACKBAR_DEFAULT_DURATION = 4000;
4
+ const SNACKBAR_EXTENDED_DURATION = 6000;
5
+ const SWIPE_DISMISS_THRESHOLD_RATIO = 0.5;
6
+
7
+ export { SNACKBAR_DEFAULT_DURATION, SNACKBAR_ENTER_DURATION, SNACKBAR_EXIT_DURATION, SNACKBAR_EXTENDED_DURATION, SWIPE_DISMISS_THRESHOLD_RATIO };
8
+ //# sourceMappingURL=constants.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.mjs","sources":["../../src/Snackbar/constants.ts"],"sourcesContent":["export const SNACKBAR_ENTER_DURATION = 300;\nexport const SNACKBAR_EXIT_DURATION = 150;\nexport const SNACKBAR_DEFAULT_DURATION = 4000;\nexport const SNACKBAR_EXTENDED_DURATION = 6000;\nexport const SWIPE_DISMISS_THRESHOLD_RATIO = 0.5;\n"],"names":["SNACKBAR_ENTER_DURATION","SNACKBAR_EXIT_DURATION","SNACKBAR_DEFAULT_DURATION","SNACKBAR_EXTENDED_DURATION","SWIPE_DISMISS_THRESHOLD_RATIO"],"mappings":"AAAO,MAAMA,uBAAuB,GAAG;AAChC,MAAMC,sBAAsB,GAAG;AAC/B,MAAMC,yBAAyB,GAAG;AAClC,MAAMC,0BAA0B,GAAG;AACnC,MAAMC,6BAA6B,GAAG;;"}
@@ -0,0 +1,135 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var React = require('react');
6
+ var constants = require('./constants.js');
7
+
8
+ const getAutoDismissDuration = ({
9
+ duration,
10
+ loading,
11
+ timeout
12
+ }) => {
13
+ if (loading || duration === 'indefinite') {
14
+ return null;
15
+ }
16
+ if (duration === 'extended') {
17
+ return constants.SNACKBAR_EXTENDED_DURATION;
18
+ }
19
+ if (duration === 'default') {
20
+ return constants.SNACKBAR_DEFAULT_DURATION;
21
+ }
22
+ return timeout ?? constants.SNACKBAR_DEFAULT_DURATION;
23
+ };
24
+ const useSnackbarAutoDismiss = ({
25
+ duration,
26
+ loading,
27
+ onDismissRequest,
28
+ resetKey,
29
+ timeout,
30
+ visible
31
+ }) => {
32
+ const surfaceRef = React.useRef(null);
33
+ const timeoutRef = React.useRef(0);
34
+ const remainingDurationRef = React.useRef(null);
35
+ const timerStartedAtRef = React.useRef(0);
36
+ const interactionStateRef = React.useRef({
37
+ focusWithin: false,
38
+ hovered: false
39
+ });
40
+ const isInterrupted = React.useCallback(() => {
41
+ const {
42
+ focusWithin,
43
+ hovered
44
+ } = interactionStateRef.current;
45
+ return focusWithin || hovered;
46
+ }, []);
47
+ const clearTimer = React.useCallback(() => {
48
+ window.clearTimeout(timeoutRef.current);
49
+ timeoutRef.current = 0;
50
+ }, []);
51
+ const startTimer = React.useCallback((remainingDuration = getAutoDismissDuration({
52
+ duration,
53
+ loading,
54
+ timeout
55
+ })) => {
56
+ clearTimer();
57
+ remainingDurationRef.current = remainingDuration;
58
+ if (!visible || remainingDuration === null || isInterrupted()) {
59
+ return;
60
+ }
61
+ timerStartedAtRef.current = Date.now();
62
+ timeoutRef.current = window.setTimeout(() => {
63
+ timeoutRef.current = 0;
64
+ remainingDurationRef.current = 0;
65
+ onDismissRequest();
66
+ }, remainingDuration);
67
+ }, [clearTimer, duration, isInterrupted, loading, onDismissRequest, timeout, visible]);
68
+ const pauseTimer = React.useCallback(() => {
69
+ if (!timeoutRef.current || remainingDurationRef.current === null) {
70
+ return;
71
+ }
72
+ clearTimer();
73
+ remainingDurationRef.current = Math.max(0, remainingDurationRef.current - (Date.now() - timerStartedAtRef.current));
74
+ }, [clearTimer]);
75
+ const resumeTimer = React.useCallback(() => {
76
+ if (isInterrupted() || remainingDurationRef.current === null) {
77
+ return;
78
+ }
79
+ startTimer(remainingDurationRef.current);
80
+ }, [isInterrupted, startTimer]);
81
+ const handleMouseEnter = React.useCallback(() => {
82
+ interactionStateRef.current = {
83
+ ...interactionStateRef.current,
84
+ hovered: true
85
+ };
86
+ pauseTimer();
87
+ }, [pauseTimer]);
88
+ const handleMouseLeave = React.useCallback(() => {
89
+ interactionStateRef.current = {
90
+ ...interactionStateRef.current,
91
+ hovered: false
92
+ };
93
+ resumeTimer();
94
+ }, [resumeTimer]);
95
+ const handleFocus = React.useCallback(() => {
96
+ interactionStateRef.current = {
97
+ ...interactionStateRef.current,
98
+ focusWithin: true
99
+ };
100
+ pauseTimer();
101
+ }, [pauseTimer]);
102
+ const handleBlur = React.useCallback(event => {
103
+ if (event.currentTarget.contains(event.relatedTarget)) {
104
+ return;
105
+ }
106
+ interactionStateRef.current = {
107
+ ...interactionStateRef.current,
108
+ focusWithin: false
109
+ };
110
+ resumeTimer();
111
+ }, [resumeTimer]);
112
+ React.useEffect(() => {
113
+ if (!visible) {
114
+ clearTimer();
115
+ return undefined;
116
+ }
117
+ const snackbar = surfaceRef.current;
118
+ interactionStateRef.current = {
119
+ focusWithin: Boolean(snackbar?.contains(document.activeElement)),
120
+ hovered: snackbar?.matches(':hover') ?? false
121
+ };
122
+ startTimer();
123
+ return clearTimer;
124
+ }, [clearTimer, resetKey, startTimer, visible]);
125
+ return {
126
+ handleBlur,
127
+ handleFocus,
128
+ handleMouseEnter,
129
+ handleMouseLeave,
130
+ surfaceRef
131
+ };
132
+ };
133
+
134
+ exports.default = useSnackbarAutoDismiss;
135
+ //# sourceMappingURL=useSnackbarAutoDismiss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSnackbarAutoDismiss.js","sources":["../../src/Snackbar/useSnackbarAutoDismiss.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\n\nimport { SNACKBAR_DEFAULT_DURATION, SNACKBAR_EXTENDED_DURATION } from './constants';\nimport type { SnackbarDuration } from './Snackbar.types';\n\ntype UseSnackbarAutoDismissOptions = {\n duration?: SnackbarDuration;\n loading?: boolean;\n onDismissRequest: () => void;\n resetKey: string | number;\n timeout?: number;\n visible: boolean;\n};\n\ntype InteractionState = {\n focusWithin: boolean;\n hovered: boolean;\n};\n\nconst getAutoDismissDuration = ({\n duration,\n loading,\n timeout,\n}: Pick<UseSnackbarAutoDismissOptions, 'duration' | 'loading' | 'timeout'>) => {\n if (loading || duration === 'indefinite') {\n return null;\n }\n\n if (duration === 'extended') {\n return SNACKBAR_EXTENDED_DURATION;\n }\n\n if (duration === 'default') {\n return SNACKBAR_DEFAULT_DURATION;\n }\n\n return timeout ?? SNACKBAR_DEFAULT_DURATION;\n};\n\nconst useSnackbarAutoDismiss = ({\n duration,\n loading,\n onDismissRequest,\n resetKey,\n timeout,\n visible,\n}: UseSnackbarAutoDismissOptions) => {\n const surfaceRef = useRef<HTMLDivElement>(null);\n const timeoutRef = useRef(0);\n const remainingDurationRef = useRef<number | null>(null);\n const timerStartedAtRef = useRef(0);\n const interactionStateRef = useRef<InteractionState>({ focusWithin: false, hovered: false });\n\n const isInterrupted = useCallback(() => {\n const { focusWithin, hovered } = interactionStateRef.current;\n return focusWithin || hovered;\n }, []);\n\n const clearTimer = useCallback(() => {\n window.clearTimeout(timeoutRef.current);\n timeoutRef.current = 0;\n }, []);\n\n const startTimer = useCallback(\n (remainingDuration = getAutoDismissDuration({ duration, loading, timeout })) => {\n clearTimer();\n remainingDurationRef.current = remainingDuration;\n\n if (!visible || remainingDuration === null || isInterrupted()) {\n return;\n }\n\n timerStartedAtRef.current = Date.now();\n timeoutRef.current = window.setTimeout(() => {\n timeoutRef.current = 0;\n remainingDurationRef.current = 0;\n onDismissRequest();\n }, remainingDuration);\n },\n [clearTimer, duration, isInterrupted, loading, onDismissRequest, timeout, visible],\n );\n\n const pauseTimer = useCallback(() => {\n if (!timeoutRef.current || remainingDurationRef.current === null) {\n return;\n }\n\n clearTimer();\n remainingDurationRef.current = Math.max(\n 0,\n remainingDurationRef.current - (Date.now() - timerStartedAtRef.current),\n );\n }, [clearTimer]);\n\n const resumeTimer = useCallback(() => {\n if (isInterrupted() || remainingDurationRef.current === null) {\n return;\n }\n\n startTimer(remainingDurationRef.current);\n }, [isInterrupted, startTimer]);\n\n const handleMouseEnter = useCallback(() => {\n interactionStateRef.current = { ...interactionStateRef.current, hovered: true };\n pauseTimer();\n }, [pauseTimer]);\n\n const handleMouseLeave = useCallback(() => {\n interactionStateRef.current = { ...interactionStateRef.current, hovered: false };\n resumeTimer();\n }, [resumeTimer]);\n\n const handleFocus = useCallback(() => {\n interactionStateRef.current = { ...interactionStateRef.current, focusWithin: true };\n pauseTimer();\n }, [pauseTimer]);\n\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n if (event.currentTarget.contains(event.relatedTarget)) {\n return;\n }\n\n interactionStateRef.current = { ...interactionStateRef.current, focusWithin: false };\n resumeTimer();\n },\n [resumeTimer],\n );\n\n useEffect(() => {\n if (!visible) {\n clearTimer();\n return undefined;\n }\n\n const snackbar = surfaceRef.current;\n interactionStateRef.current = {\n focusWithin: Boolean(snackbar?.contains(document.activeElement)),\n hovered: snackbar?.matches(':hover') ?? false,\n };\n startTimer();\n\n return clearTimer;\n }, [clearTimer, resetKey, startTimer, visible]);\n\n return {\n handleBlur,\n handleFocus,\n handleMouseEnter,\n handleMouseLeave,\n surfaceRef,\n };\n};\n\nexport default useSnackbarAutoDismiss;\n"],"names":["getAutoDismissDuration","duration","loading","timeout","SNACKBAR_EXTENDED_DURATION","SNACKBAR_DEFAULT_DURATION","useSnackbarAutoDismiss","onDismissRequest","resetKey","visible","surfaceRef","useRef","timeoutRef","remainingDurationRef","timerStartedAtRef","interactionStateRef","focusWithin","hovered","isInterrupted","useCallback","current","clearTimer","window","clearTimeout","startTimer","remainingDuration","Date","now","setTimeout","pauseTimer","Math","max","resumeTimer","handleMouseEnter","handleMouseLeave","handleFocus","handleBlur","event","currentTarget","contains","relatedTarget","useEffect","undefined","snackbar","Boolean","document","activeElement","matches"],"mappings":"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"}
@@ -0,0 +1,131 @@
1
+ import { useRef, useCallback, useEffect } from 'react';
2
+ import { SNACKBAR_EXTENDED_DURATION, SNACKBAR_DEFAULT_DURATION } from './constants.mjs';
3
+
4
+ const getAutoDismissDuration = ({
5
+ duration,
6
+ loading,
7
+ timeout
8
+ }) => {
9
+ if (loading || duration === 'indefinite') {
10
+ return null;
11
+ }
12
+ if (duration === 'extended') {
13
+ return SNACKBAR_EXTENDED_DURATION;
14
+ }
15
+ if (duration === 'default') {
16
+ return SNACKBAR_DEFAULT_DURATION;
17
+ }
18
+ return timeout ?? SNACKBAR_DEFAULT_DURATION;
19
+ };
20
+ const useSnackbarAutoDismiss = ({
21
+ duration,
22
+ loading,
23
+ onDismissRequest,
24
+ resetKey,
25
+ timeout,
26
+ visible
27
+ }) => {
28
+ const surfaceRef = useRef(null);
29
+ const timeoutRef = useRef(0);
30
+ const remainingDurationRef = useRef(null);
31
+ const timerStartedAtRef = useRef(0);
32
+ const interactionStateRef = useRef({
33
+ focusWithin: false,
34
+ hovered: false
35
+ });
36
+ const isInterrupted = useCallback(() => {
37
+ const {
38
+ focusWithin,
39
+ hovered
40
+ } = interactionStateRef.current;
41
+ return focusWithin || hovered;
42
+ }, []);
43
+ const clearTimer = useCallback(() => {
44
+ window.clearTimeout(timeoutRef.current);
45
+ timeoutRef.current = 0;
46
+ }, []);
47
+ const startTimer = useCallback((remainingDuration = getAutoDismissDuration({
48
+ duration,
49
+ loading,
50
+ timeout
51
+ })) => {
52
+ clearTimer();
53
+ remainingDurationRef.current = remainingDuration;
54
+ if (!visible || remainingDuration === null || isInterrupted()) {
55
+ return;
56
+ }
57
+ timerStartedAtRef.current = Date.now();
58
+ timeoutRef.current = window.setTimeout(() => {
59
+ timeoutRef.current = 0;
60
+ remainingDurationRef.current = 0;
61
+ onDismissRequest();
62
+ }, remainingDuration);
63
+ }, [clearTimer, duration, isInterrupted, loading, onDismissRequest, timeout, visible]);
64
+ const pauseTimer = useCallback(() => {
65
+ if (!timeoutRef.current || remainingDurationRef.current === null) {
66
+ return;
67
+ }
68
+ clearTimer();
69
+ remainingDurationRef.current = Math.max(0, remainingDurationRef.current - (Date.now() - timerStartedAtRef.current));
70
+ }, [clearTimer]);
71
+ const resumeTimer = useCallback(() => {
72
+ if (isInterrupted() || remainingDurationRef.current === null) {
73
+ return;
74
+ }
75
+ startTimer(remainingDurationRef.current);
76
+ }, [isInterrupted, startTimer]);
77
+ const handleMouseEnter = useCallback(() => {
78
+ interactionStateRef.current = {
79
+ ...interactionStateRef.current,
80
+ hovered: true
81
+ };
82
+ pauseTimer();
83
+ }, [pauseTimer]);
84
+ const handleMouseLeave = useCallback(() => {
85
+ interactionStateRef.current = {
86
+ ...interactionStateRef.current,
87
+ hovered: false
88
+ };
89
+ resumeTimer();
90
+ }, [resumeTimer]);
91
+ const handleFocus = useCallback(() => {
92
+ interactionStateRef.current = {
93
+ ...interactionStateRef.current,
94
+ focusWithin: true
95
+ };
96
+ pauseTimer();
97
+ }, [pauseTimer]);
98
+ const handleBlur = useCallback(event => {
99
+ if (event.currentTarget.contains(event.relatedTarget)) {
100
+ return;
101
+ }
102
+ interactionStateRef.current = {
103
+ ...interactionStateRef.current,
104
+ focusWithin: false
105
+ };
106
+ resumeTimer();
107
+ }, [resumeTimer]);
108
+ useEffect(() => {
109
+ if (!visible) {
110
+ clearTimer();
111
+ return undefined;
112
+ }
113
+ const snackbar = surfaceRef.current;
114
+ interactionStateRef.current = {
115
+ focusWithin: Boolean(snackbar?.contains(document.activeElement)),
116
+ hovered: snackbar?.matches(':hover') ?? false
117
+ };
118
+ startTimer();
119
+ return clearTimer;
120
+ }, [clearTimer, resetKey, startTimer, visible]);
121
+ return {
122
+ handleBlur,
123
+ handleFocus,
124
+ handleMouseEnter,
125
+ handleMouseLeave,
126
+ surfaceRef
127
+ };
128
+ };
129
+
130
+ export { useSnackbarAutoDismiss as default };
131
+ //# sourceMappingURL=useSnackbarAutoDismiss.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSnackbarAutoDismiss.mjs","sources":["../../src/Snackbar/useSnackbarAutoDismiss.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\n\nimport { SNACKBAR_DEFAULT_DURATION, SNACKBAR_EXTENDED_DURATION } from './constants';\nimport type { SnackbarDuration } from './Snackbar.types';\n\ntype UseSnackbarAutoDismissOptions = {\n duration?: SnackbarDuration;\n loading?: boolean;\n onDismissRequest: () => void;\n resetKey: string | number;\n timeout?: number;\n visible: boolean;\n};\n\ntype InteractionState = {\n focusWithin: boolean;\n hovered: boolean;\n};\n\nconst getAutoDismissDuration = ({\n duration,\n loading,\n timeout,\n}: Pick<UseSnackbarAutoDismissOptions, 'duration' | 'loading' | 'timeout'>) => {\n if (loading || duration === 'indefinite') {\n return null;\n }\n\n if (duration === 'extended') {\n return SNACKBAR_EXTENDED_DURATION;\n }\n\n if (duration === 'default') {\n return SNACKBAR_DEFAULT_DURATION;\n }\n\n return timeout ?? SNACKBAR_DEFAULT_DURATION;\n};\n\nconst useSnackbarAutoDismiss = ({\n duration,\n loading,\n onDismissRequest,\n resetKey,\n timeout,\n visible,\n}: UseSnackbarAutoDismissOptions) => {\n const surfaceRef = useRef<HTMLDivElement>(null);\n const timeoutRef = useRef(0);\n const remainingDurationRef = useRef<number | null>(null);\n const timerStartedAtRef = useRef(0);\n const interactionStateRef = useRef<InteractionState>({ focusWithin: false, hovered: false });\n\n const isInterrupted = useCallback(() => {\n const { focusWithin, hovered } = interactionStateRef.current;\n return focusWithin || hovered;\n }, []);\n\n const clearTimer = useCallback(() => {\n window.clearTimeout(timeoutRef.current);\n timeoutRef.current = 0;\n }, []);\n\n const startTimer = useCallback(\n (remainingDuration = getAutoDismissDuration({ duration, loading, timeout })) => {\n clearTimer();\n remainingDurationRef.current = remainingDuration;\n\n if (!visible || remainingDuration === null || isInterrupted()) {\n return;\n }\n\n timerStartedAtRef.current = Date.now();\n timeoutRef.current = window.setTimeout(() => {\n timeoutRef.current = 0;\n remainingDurationRef.current = 0;\n onDismissRequest();\n }, remainingDuration);\n },\n [clearTimer, duration, isInterrupted, loading, onDismissRequest, timeout, visible],\n );\n\n const pauseTimer = useCallback(() => {\n if (!timeoutRef.current || remainingDurationRef.current === null) {\n return;\n }\n\n clearTimer();\n remainingDurationRef.current = Math.max(\n 0,\n remainingDurationRef.current - (Date.now() - timerStartedAtRef.current),\n );\n }, [clearTimer]);\n\n const resumeTimer = useCallback(() => {\n if (isInterrupted() || remainingDurationRef.current === null) {\n return;\n }\n\n startTimer(remainingDurationRef.current);\n }, [isInterrupted, startTimer]);\n\n const handleMouseEnter = useCallback(() => {\n interactionStateRef.current = { ...interactionStateRef.current, hovered: true };\n pauseTimer();\n }, [pauseTimer]);\n\n const handleMouseLeave = useCallback(() => {\n interactionStateRef.current = { ...interactionStateRef.current, hovered: false };\n resumeTimer();\n }, [resumeTimer]);\n\n const handleFocus = useCallback(() => {\n interactionStateRef.current = { ...interactionStateRef.current, focusWithin: true };\n pauseTimer();\n }, [pauseTimer]);\n\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n if (event.currentTarget.contains(event.relatedTarget)) {\n return;\n }\n\n interactionStateRef.current = { ...interactionStateRef.current, focusWithin: false };\n resumeTimer();\n },\n [resumeTimer],\n );\n\n useEffect(() => {\n if (!visible) {\n clearTimer();\n return undefined;\n }\n\n const snackbar = surfaceRef.current;\n interactionStateRef.current = {\n focusWithin: Boolean(snackbar?.contains(document.activeElement)),\n hovered: snackbar?.matches(':hover') ?? false,\n };\n startTimer();\n\n return clearTimer;\n }, [clearTimer, resetKey, startTimer, visible]);\n\n return {\n handleBlur,\n handleFocus,\n handleMouseEnter,\n handleMouseLeave,\n surfaceRef,\n };\n};\n\nexport default useSnackbarAutoDismiss;\n"],"names":["getAutoDismissDuration","duration","loading","timeout","SNACKBAR_EXTENDED_DURATION","SNACKBAR_DEFAULT_DURATION","useSnackbarAutoDismiss","onDismissRequest","resetKey","visible","surfaceRef","useRef","timeoutRef","remainingDurationRef","timerStartedAtRef","interactionStateRef","focusWithin","hovered","isInterrupted","useCallback","current","clearTimer","window","clearTimeout","startTimer","remainingDuration","Date","now","setTimeout","pauseTimer","Math","max","resumeTimer","handleMouseEnter","handleMouseLeave","handleFocus","handleBlur","event","currentTarget","contains","relatedTarget","useEffect","undefined","snackbar","Boolean","document","activeElement","matches"],"mappings":";;;AAmBA,MAAMA,sBAAsB,GAAGA,CAAC;EAC9BC,QAAQ;EACRC,OAAO;AACPC,EAAAA;AAAO,CACiE,KAAI;AAC5E,EAAA,IAAID,OAAO,IAAID,QAAQ,KAAK,YAAY,EAAE;AACxC,IAAA,OAAO,IAAI;AACb,EAAA;EAEA,IAAIA,QAAQ,KAAK,UAAU,EAAE;AAC3B,IAAA,OAAOG,0BAA0B;AACnC,EAAA;EAEA,IAAIH,QAAQ,KAAK,SAAS,EAAE;AAC1B,IAAA,OAAOI,yBAAyB;AAClC,EAAA;EAEA,OAAOF,OAAO,IAAIE,yBAAyB;AAC7C,CAAC;AAED,MAAMC,sBAAsB,GAAGA,CAAC;EAC9BL,QAAQ;EACRC,OAAO;EACPK,gBAAgB;EAChBC,QAAQ;EACRL,OAAO;AACPM,EAAAA;AAAO,CACuB,KAAI;AAClC,EAAA,MAAMC,UAAU,GAAGC,MAAM,CAAiB,IAAI,CAAC;AAC/C,EAAA,MAAMC,UAAU,GAAGD,MAAM,CAAC,CAAC,CAAC;AAC5B,EAAA,MAAME,oBAAoB,GAAGF,MAAM,CAAgB,IAAI,CAAC;AACxD,EAAA,MAAMG,iBAAiB,GAAGH,MAAM,CAAC,CAAC,CAAC;EACnC,MAAMI,mBAAmB,GAAGJ,MAAM,CAAmB;AAAEK,IAAAA,WAAW,EAAE,KAAK;AAAEC,IAAAA,OAAO,EAAE;AAAK,GAAE,CAAC;AAE5F,EAAA,MAAMC,aAAa,GAAGC,WAAW,CAAC,MAAK;IACrC,MAAM;MAAEH,WAAW;AAAEC,MAAAA;KAAS,GAAGF,mBAAmB,CAACK,OAAO;IAC5D,OAAOJ,WAAW,IAAIC,OAAO;EAC/B,CAAC,EAAE,EAAE,CAAC;AAEN,EAAA,MAAMI,UAAU,GAAGF,WAAW,CAAC,MAAK;AAClCG,IAAAA,MAAM,CAACC,YAAY,CAACX,UAAU,CAACQ,OAAO,CAAC;IACvCR,UAAU,CAACQ,OAAO,GAAG,CAAC;EACxB,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMI,UAAU,GAAGL,WAAW,CAC5B,CAACM,iBAAiB,GAAGzB,sBAAsB,CAAC;IAAEC,QAAQ;IAAEC,OAAO;AAAEC,IAAAA;AAAO,GAAE,CAAC,KAAI;AAC7EkB,IAAAA,UAAU,EAAE;IACZR,oBAAoB,CAACO,OAAO,GAAGK,iBAAiB;IAEhD,IAAI,CAAChB,OAAO,IAAIgB,iBAAiB,KAAK,IAAI,IAAIP,aAAa,EAAE,EAAE;AAC7D,MAAA;AACF,IAAA;AAEAJ,IAAAA,iBAAiB,CAACM,OAAO,GAAGM,IAAI,CAACC,GAAG,EAAE;AACtCf,IAAAA,UAAU,CAACQ,OAAO,GAAGE,MAAM,CAACM,UAAU,CAAC,MAAK;MAC1ChB,UAAU,CAACQ,OAAO,GAAG,CAAC;MACtBP,oBAAoB,CAACO,OAAO,GAAG,CAAC;AAChCb,MAAAA,gBAAgB,EAAE;IACpB,CAAC,EAAEkB,iBAAiB,CAAC;AACvB,EAAA,CAAC,EACD,CAACJ,UAAU,EAAEpB,QAAQ,EAAEiB,aAAa,EAAEhB,OAAO,EAAEK,gBAAgB,EAAEJ,OAAO,EAAEM,OAAO,CAAC,CACnF;AAED,EAAA,MAAMoB,UAAU,GAAGV,WAAW,CAAC,MAAK;IAClC,IAAI,CAACP,UAAU,CAACQ,OAAO,IAAIP,oBAAoB,CAACO,OAAO,KAAK,IAAI,EAAE;AAChE,MAAA;AACF,IAAA;AAEAC,IAAAA,UAAU,EAAE;IACZR,oBAAoB,CAACO,OAAO,GAAGU,IAAI,CAACC,GAAG,CACrC,CAAC,EACDlB,oBAAoB,CAACO,OAAO,IAAIM,IAAI,CAACC,GAAG,EAAE,GAAGb,iBAAiB,CAACM,OAAO,CAAC,CACxE;AACH,EAAA,CAAC,EAAE,CAACC,UAAU,CAAC,CAAC;AAEhB,EAAA,MAAMW,WAAW,GAAGb,WAAW,CAAC,MAAK;IACnC,IAAID,aAAa,EAAE,IAAIL,oBAAoB,CAACO,OAAO,KAAK,IAAI,EAAE;AAC5D,MAAA;AACF,IAAA;AAEAI,IAAAA,UAAU,CAACX,oBAAoB,CAACO,OAAO,CAAC;AAC1C,EAAA,CAAC,EAAE,CAACF,aAAa,EAAEM,UAAU,CAAC,CAAC;AAE/B,EAAA,MAAMS,gBAAgB,GAAGd,WAAW,CAAC,MAAK;IACxCJ,mBAAmB,CAACK,OAAO,GAAG;MAAE,GAAGL,mBAAmB,CAACK,OAAO;AAAEH,MAAAA,OAAO,EAAE;KAAM;AAC/EY,IAAAA,UAAU,EAAE;AACd,EAAA,CAAC,EAAE,CAACA,UAAU,CAAC,CAAC;AAEhB,EAAA,MAAMK,gBAAgB,GAAGf,WAAW,CAAC,MAAK;IACxCJ,mBAAmB,CAACK,OAAO,GAAG;MAAE,GAAGL,mBAAmB,CAACK,OAAO;AAAEH,MAAAA,OAAO,EAAE;KAAO;AAChFe,IAAAA,WAAW,EAAE;AACf,EAAA,CAAC,EAAE,CAACA,WAAW,CAAC,CAAC;AAEjB,EAAA,MAAMG,WAAW,GAAGhB,WAAW,CAAC,MAAK;IACnCJ,mBAAmB,CAACK,OAAO,GAAG;MAAE,GAAGL,mBAAmB,CAACK,OAAO;AAAEJ,MAAAA,WAAW,EAAE;KAAM;AACnFa,IAAAA,UAAU,EAAE;AACd,EAAA,CAAC,EAAE,CAACA,UAAU,CAAC,CAAC;AAEhB,EAAA,MAAMO,UAAU,GAAGjB,WAAW,CAC3BkB,KAAuC,IAAI;IAC1C,IAAIA,KAAK,CAACC,aAAa,CAACC,QAAQ,CAACF,KAAK,CAACG,aAAa,CAAC,EAAE;AACrD,MAAA;AACF,IAAA;IAEAzB,mBAAmB,CAACK,OAAO,GAAG;MAAE,GAAGL,mBAAmB,CAACK,OAAO;AAAEJ,MAAAA,WAAW,EAAE;KAAO;AACpFgB,IAAAA,WAAW,EAAE;AACf,EAAA,CAAC,EACD,CAACA,WAAW,CAAC,CACd;AAEDS,EAAAA,SAAS,CAAC,MAAK;IACb,IAAI,CAAChC,OAAO,EAAE;AACZY,MAAAA,UAAU,EAAE;AACZ,MAAA,OAAOqB,SAAS;AAClB,IAAA;AAEA,IAAA,MAAMC,QAAQ,GAAGjC,UAAU,CAACU,OAAO;IACnCL,mBAAmB,CAACK,OAAO,GAAG;MAC5BJ,WAAW,EAAE4B,OAAO,CAACD,QAAQ,EAAEJ,QAAQ,CAACM,QAAQ,CAACC,aAAa,CAAC,CAAC;AAChE7B,MAAAA,OAAO,EAAE0B,QAAQ,EAAEI,OAAO,CAAC,QAAQ,CAAC,IAAI;KACzC;AACDvB,IAAAA,UAAU,EAAE;AAEZ,IAAA,OAAOH,UAAU;EACnB,CAAC,EAAE,CAACA,UAAU,EAAEb,QAAQ,EAAEgB,UAAU,EAAEf,OAAO,CAAC,CAAC;EAE/C,OAAO;IACL2B,UAAU;IACVD,WAAW;IACXF,gBAAgB;IAChBC,gBAAgB;AAChBxB,IAAAA;GACD;AACH;;"}