@transferwise/components 0.0.0-experimental-f4724ce → 0.0.0-experimental-1ffe912

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 (59) hide show
  1. package/build/ListItem/ListItem.js +32 -2
  2. package/build/ListItem/ListItem.js.map +1 -1
  3. package/build/ListItem/ListItem.mjs +33 -3
  4. package/build/ListItem/ListItem.mjs.map +1 -1
  5. package/build/Snackbar/Snackbar.js +28 -110
  6. package/build/Snackbar/Snackbar.js.map +1 -1
  7. package/build/Snackbar/Snackbar.mjs +28 -110
  8. package/build/Snackbar/Snackbar.mjs.map +1 -1
  9. package/build/Snackbar/SnackbarContext.js.map +1 -1
  10. package/build/Snackbar/SnackbarContext.mjs.map +1 -1
  11. package/build/Snackbar/SnackbarProvider.js +0 -8
  12. package/build/Snackbar/SnackbarProvider.js.map +1 -1
  13. package/build/Snackbar/SnackbarProvider.mjs +0 -8
  14. package/build/Snackbar/SnackbarProvider.mjs.map +1 -1
  15. package/build/i18n/th.json +1 -1
  16. package/build/i18n/th.json.js +1 -1
  17. package/build/i18n/th.json.mjs +1 -1
  18. package/build/i18n/zh-CN.json +1 -0
  19. package/build/i18n/zh-CN.json.js +1 -0
  20. package/build/i18n/zh-CN.json.js.map +1 -1
  21. package/build/i18n/zh-CN.json.mjs +1 -0
  22. package/build/i18n/zh-CN.json.mjs.map +1 -1
  23. package/build/main.css +61 -111
  24. package/build/styles/Snackbar/Snackbar.css +64 -114
  25. package/build/styles/main.css +61 -111
  26. package/build/types/ListItem/ListItem.d.ts +2 -0
  27. package/build/types/ListItem/ListItem.d.ts.map +1 -1
  28. package/build/types/Snackbar/Snackbar.d.ts +5 -8
  29. package/build/types/Snackbar/Snackbar.d.ts.map +1 -1
  30. package/build/types/Snackbar/SnackbarContext.d.ts +2 -2
  31. package/build/types/Snackbar/SnackbarContext.d.ts.map +1 -1
  32. package/build/types/Snackbar/SnackbarProvider.d.ts.map +1 -1
  33. package/build/types/Snackbar/useSnackbar.d.ts +1 -1
  34. package/build/types/Snackbar/useSnackbar.d.ts.map +1 -1
  35. package/package.json +2 -2
  36. package/src/ListItem/ListItem.ssr.test.tsx +115 -0
  37. package/src/ListItem/ListItem.test.tsx +42 -0
  38. package/src/ListItem/ListItem.tsx +23 -2
  39. package/src/Snackbar/Snackbar.css +64 -114
  40. package/src/Snackbar/Snackbar.less +60 -120
  41. package/src/Snackbar/Snackbar.test.tsx +19 -173
  42. package/src/Snackbar/Snackbar.tsx +27 -100
  43. package/src/Snackbar/SnackbarContext.ts +2 -2
  44. package/src/Snackbar/SnackbarProvider.tsx +6 -14
  45. package/src/Snackbar/_stories/Snackbar.story.tsx +1 -62
  46. package/src/Snackbar/_stories/Snackbar.test.story.tsx +5 -26
  47. package/src/i18n/th.json +1 -1
  48. package/src/i18n/zh-CN.json +1 -0
  49. package/src/main.css +61 -111
  50. package/build/Snackbar/constants.js +0 -8
  51. package/build/Snackbar/constants.js.map +0 -1
  52. package/build/Snackbar/constants.mjs +0 -5
  53. package/build/Snackbar/constants.mjs.map +0 -1
  54. package/build/types/Snackbar/Snackbar.types.d.ts +0 -10
  55. package/build/types/Snackbar/Snackbar.types.d.ts.map +0 -1
  56. package/build/types/Snackbar/constants.d.ts +0 -3
  57. package/build/types/Snackbar/constants.d.ts.map +0 -1
  58. package/src/Snackbar/Snackbar.types.ts +0 -11
  59. package/src/Snackbar/constants.ts +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"Snackbar.js","sources":["../../src/Snackbar/Snackbar.tsx"],"sourcesContent":["import { Tags } from '@transferwise/icons';\nimport { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { CSSTransition } from 'react-transition-group';\n\nimport Button from '../Button';\nimport Body from '../Body';\nimport { LiveRegion } from '../common';\nimport type { ThemeDark, ThemeLight } from '../common';\nimport { PrimitivePrompt } from '../Prompt/PrimitivePrompt';\nimport type { Sentiment } from '../SentimentSurface';\nimport StatusIcon from '../StatusIcon';\nimport withNextPortal from '../WithNextPortal/WithNextPortal';\n\nimport { SNACKBAR_ENTER_DURATION, SNACKBAR_EXIT_DURATION } from './constants';\nimport type { SnackbarAction } from './Snackbar.types';\n\nexport interface SnackbarProps {\n /** One optional action, supporting a callback or navigation through `href` and `target`. */\n action?: SnackbarAction;\n media?: React.ReactNode;\n sentiment?: Sentiment;\n text: React.ReactNode;\n /** @deprecated Has no effect. Snackbar theming is based on ThemeProvider. */\n theme?: ThemeLight | ThemeDark;\n timeout: number;\n /** @deprecated Has no effect when using SnackbarProvider, which manages Snackbar identity. */\n timestamp?: number;\n}\n\ninterface SnackbarState extends Pick<\n SnackbarProps,\n 'action' | 'media' | 'sentiment' | 'text' | 'timestamp'\n> {\n visible: boolean;\n}\n\nexport const Snackbar = (props: SnackbarProps) => {\n const surfaceRef = useRef<HTMLDivElement>(null);\n const leaveTimeout = useRef(0);\n const transitionTimeout = useRef(0);\n /** The props of the last committed render, as `this.props` was in the class component. */\n const committedProps = useRef(props);\n\n const [state, setState] = useState<SnackbarState>({\n visible: false,\n text: '',\n timestamp: 0,\n });\n\n const handleDismiss = () => {\n window.clearTimeout(leaveTimeout.current);\n setState((current) => ({ ...current, visible: false }));\n };\n\n useEffect(\n () => () => {\n window.clearTimeout(leaveTimeout.current);\n window.clearTimeout(transitionTimeout.current);\n },\n [],\n );\n\n // Runs after every render to mirror the componentDidUpdate lifecycle this component previously\n // relied on, including the shouldComponentUpdate guard that ignored every update without text.\n // Layout, not passive, so a notification is shown or replaced before the browser paints, as\n // componentDidUpdate did. Both rules below are disabled on purpose: the dependency-less effect\n // and its synchronous state updates are what keep this conversion behaviour-identical.\n /* eslint-disable react-hooks/exhaustive-deps, react-hooks/set-state-in-effect */\n useLayoutEffect(() => {\n const previousProps = committedProps.current;\n committedProps.current = props;\n\n const { action, media, sentiment, text, timestamp } = props;\n\n // shouldComponentUpdate bailed out whenever the incoming text was empty. That also blocked the\n // updates scheduled below, so a Snackbar whose text is cleared stays on screen until it is\n // given text again. Preserved here deliberately to keep this refactor behaviour-identical.\n const updateWhileTextIsPresent = (update: () => void) => {\n if (committedProps.current.text) {\n update();\n }\n };\n\n const setLeaveTimeout = () => {\n leaveTimeout.current = window.setTimeout(() => {\n updateWhileTextIsPresent(() => setState((current) => ({ ...current, visible: false })));\n }, committedProps.current.timeout);\n };\n\n const show = () => {\n setState((current) => ({\n ...current,\n visible: true,\n action,\n media,\n sentiment,\n text,\n timestamp,\n }));\n setLeaveTimeout();\n };\n\n if (!text) {\n return;\n }\n\n if (!previousProps.text) {\n show();\n } else if (previousProps.timestamp !== timestamp) {\n window.clearTimeout(leaveTimeout.current);\n\n if (state.visible) {\n setState((current) => ({ ...current, visible: false }));\n transitionTimeout.current = window.setTimeout(() => {\n updateWhileTextIsPresent(show);\n }, SNACKBAR_EXIT_DURATION);\n } else {\n show();\n }\n }\n });\n /* eslint-enable react-hooks/exhaustive-deps, react-hooks/set-state-in-effect */\n\n const { action, media, sentiment = 'neutral', text, timestamp, visible } = state;\n\n const renderMedia = () => {\n if (media) {\n return <span className=\"wds-Snackbar__media-asset\">{media}</span>;\n }\n\n if (sentiment === 'proposition') {\n return (\n <span className=\"wds-Snackbar__media-asset\">\n <Tags aria-hidden size={24} />\n </span>\n );\n }\n\n return <StatusIcon sentiment={sentiment} size={24} />;\n };\n\n return (\n <div\n className=\"wds-Snackbar\"\n style={\n {\n '--Snackbar-enter-duration': `${SNACKBAR_ENTER_DURATION}ms`,\n '--Snackbar-exit-duration': `${SNACKBAR_EXIT_DURATION}ms`,\n } as React.CSSProperties\n }\n >\n <CSSTransition\n appear\n nodeRef={surfaceRef}\n in={visible}\n classNames=\"wds-Snackbar-container\"\n timeout={{\n appear: SNACKBAR_ENTER_DURATION,\n enter: SNACKBAR_ENTER_DURATION,\n exit: SNACKBAR_EXIT_DURATION,\n }}\n unmountOnExit\n >\n <PrimitivePrompt\n ref={surfaceRef}\n className=\"wds-Snackbar-container\"\n sentiment={sentiment}\n emphasis=\"elevated\"\n media={renderMedia()}\n onDismiss={handleDismiss}\n >\n <div className=\"wds-Snackbar__content\">\n <LiveRegion\n aria-live=\"polite\"\n announceOnChange={timestamp}\n className=\"wds-Snackbar__message\"\n >\n <Body as=\"span\" className=\"wds-Snackbar__body\">\n {text}\n </Body>\n </LiveRegion>\n {action ? (\n <Button\n className=\"wds-Snackbar__action\"\n v2\n size=\"sm\"\n priority=\"secondary\"\n href={action.href}\n target={action.target}\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ) : null}\n </div>\n </PrimitivePrompt>\n </CSSTransition>\n </div>\n );\n};\n\nexport default withNextPortal(Snackbar);\n"],"names":["Snackbar","props","surfaceRef","useRef","leaveTimeout","transitionTimeout","committedProps","state","setState","useState","visible","text","timestamp","handleDismiss","window","clearTimeout","current","useEffect","useLayoutEffect","previousProps","action","media","sentiment","updateWhileTextIsPresent","update","setLeaveTimeout","setTimeout","timeout","show","SNACKBAR_EXIT_DURATION","renderMedia","_jsx","className","children","Tags","size","StatusIcon","style","SNACKBAR_ENTER_DURATION","CSSTransition","appear","nodeRef","in","classNames","enter","exit","unmountOnExit","PrimitivePrompt","ref","emphasis","onDismiss","_jsxs","LiveRegion","announceOnChange","Body","as","Button","v2","priority","href","target","onClick","label","withNextPortal"],"mappings":"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"}
1
+ {"version":3,"file":"Snackbar.js","sources":["../../src/Snackbar/Snackbar.tsx"],"sourcesContent":["import { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { CSSTransition } from 'react-transition-group';\n\nimport Button from '../Button';\nimport Body from '../Body';\nimport type { ThemeDark, ThemeLight } from '../common';\nimport withNextPortal from '../WithNextPortal/WithNextPortal';\n\nconst CSS_TRANSITION_DURATION = 400;\n\nexport interface SnackbarProps {\n action?: {\n label: string;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n };\n text: React.ReactNode;\n /** @deprecated Has no effect. Snackbar theming is based on ThemeProvider. */\n theme?: ThemeLight | ThemeDark;\n timeout: number;\n timestamp: number;\n}\n\ninterface SnackbarState extends Pick<SnackbarProps, 'action' | 'text'> {\n visible: boolean;\n}\n\nexport const Snackbar = (props: SnackbarProps) => {\n const bodyRef = useRef<HTMLSpanElement>(null);\n const leaveTimeout = useRef(0);\n const transitionTimeout = useRef(0);\n /** The props of the last committed render, as `this.props` was in the class component. */\n const committedProps = useRef(props);\n\n const [state, setState] = useState<SnackbarState>({\n visible: false,\n text: '',\n });\n\n useEffect(\n () => () => {\n window.clearTimeout(leaveTimeout.current);\n window.clearTimeout(transitionTimeout.current);\n },\n [],\n );\n\n // Runs after every render to mirror the componentDidUpdate lifecycle this component previously\n // relied on, including the shouldComponentUpdate guard that ignored every update without text.\n // Layout, not passive, so a notification is shown or replaced before the browser paints, as\n // componentDidUpdate did. Both rules below are disabled on purpose: the dependency-less effect\n // and its synchronous state updates are what keep this conversion behaviour-identical.\n /* eslint-disable react-hooks/exhaustive-deps, react-hooks/set-state-in-effect */\n useLayoutEffect(() => {\n const previousProps = committedProps.current;\n committedProps.current = props;\n\n const { action, text, timestamp } = props;\n\n // shouldComponentUpdate bailed out whenever the incoming text was empty. That also blocked the\n // updates scheduled below, so a Snackbar whose text is cleared stays on screen until it is\n // given text again. Preserved here deliberately to keep this refactor behaviour-identical.\n const updateWhileTextIsPresent = (update: () => void) => {\n if (committedProps.current.text) {\n update();\n }\n };\n\n const setLeaveTimeout = () => {\n leaveTimeout.current = window.setTimeout(() => {\n updateWhileTextIsPresent(() => setState((current) => ({ ...current, visible: false })));\n }, committedProps.current.timeout);\n };\n\n const show = () => {\n setState((current) => ({ ...current, visible: true, action, text }));\n setLeaveTimeout();\n };\n\n if (!text) {\n return;\n }\n\n if (!previousProps.text) {\n show();\n } else if (previousProps.timestamp !== timestamp) {\n window.clearTimeout(leaveTimeout.current);\n\n if (state.visible) {\n setState((current) => ({ ...current, visible: false }));\n transitionTimeout.current = window.setTimeout(() => {\n updateWhileTextIsPresent(show);\n }, CSS_TRANSITION_DURATION);\n } else {\n show();\n }\n }\n });\n /* eslint-enable react-hooks/exhaustive-deps, react-hooks/set-state-in-effect */\n\n const { action, text, visible } = state;\n const { timeout } = props;\n\n return (\n <div className=\"snackbar\" aria-live=\"assertive\" role=\"alert\">\n <CSSTransition\n nodeRef={bodyRef}\n in={visible}\n classNames=\"snackbar__text-container\"\n timeout={{\n appear: 0,\n enter: timeout,\n exit: CSS_TRANSITION_DURATION,\n }}\n unmountOnExit\n >\n <Body ref={bodyRef} as=\"span\" className=\"snackbar__text\">\n {text}\n {action ? (\n <Button className=\"snackbar__text__action\" v2 size=\"sm\" onClick={action.onClick}>\n {action.label}\n </Button>\n ) : null}\n </Body>\n </CSSTransition>\n </div>\n );\n};\n\nexport default withNextPortal(Snackbar);\n"],"names":["CSS_TRANSITION_DURATION","Snackbar","props","bodyRef","useRef","leaveTimeout","transitionTimeout","committedProps","state","setState","useState","visible","text","useEffect","window","clearTimeout","current","useLayoutEffect","previousProps","action","timestamp","updateWhileTextIsPresent","update","setLeaveTimeout","setTimeout","timeout","show","_jsx","className","role","children","CSSTransition","nodeRef","in","classNames","appear","enter","exit","unmountOnExit","_jsxs","Body","ref","as","Button","v2","size","onClick","label","withNextPortal"],"mappings":"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"}
@@ -1,56 +1,21 @@
1
- import { Tags } from '@transferwise/icons';
2
1
  import { useRef, useState, useEffect, useLayoutEffect } from 'react';
3
2
  import { CSSTransition } from 'react-transition-group';
4
3
  import Button from '../Button/Button.resolver.mjs';
5
4
  import Body from '../Body/Body.mjs';
6
- import '../common/theme.mjs';
7
- import '../common/direction.mjs';
8
- import '@transferwise/neptune-tokens';
9
- import '../common/PropsValues/control.mjs';
10
- import '../common/PropsValues/size.mjs';
11
- import '../common/PropsValues/typography.mjs';
12
- import '../common/PropsValues/width.mjs';
13
- import '../common/PropsValues/type.mjs';
14
- import '../common/PropsValues/dateMode.mjs';
15
- import '../common/PropsValues/monthFormat.mjs';
16
- import '../common/PropsValues/position.mjs';
17
- import '../common/PropsValues/layouts.mjs';
18
- import '../common/PropsValues/status.mjs';
19
- import '../common/PropsValues/sentiment.mjs';
20
- import '../common/PropsValues/profileType.mjs';
21
- import '../common/PropsValues/variant.mjs';
22
- import '../common/PropsValues/scroll.mjs';
23
- import '../common/PropsValues/markdownNodeType.mjs';
24
- import '../common/fileType.mjs';
25
- import '@transferwise/formatting';
26
- import 'clsx';
27
- import 'react-intl';
28
- import '../common/CloseButton/CloseButton.messages.mjs';
29
- import { jsx, jsxs } from 'react/jsx-runtime';
30
- import { LiveRegion } from '../common/LiveRegion/LiveRegion.mjs';
31
- import { PrimitivePrompt } from '../Prompt/PrimitivePrompt/PrimitivePrompt.mjs';
32
- import StatusIcon from '../StatusIcon/StatusIcon.mjs';
33
5
  import withNextPortalWrapper from '../WithNextPortal/WithNextPortal.mjs';
34
- import { SNACKBAR_EXIT_DURATION, SNACKBAR_ENTER_DURATION } from './constants.mjs';
6
+ import { jsx, jsxs } from 'react/jsx-runtime';
35
7
 
8
+ const CSS_TRANSITION_DURATION = 400;
36
9
  const Snackbar = props => {
37
- const surfaceRef = useRef(null);
10
+ const bodyRef = useRef(null);
38
11
  const leaveTimeout = useRef(0);
39
12
  const transitionTimeout = useRef(0);
40
13
  /** The props of the last committed render, as `this.props` was in the class component. */
41
14
  const committedProps = useRef(props);
42
15
  const [state, setState] = useState({
43
16
  visible: false,
44
- text: '',
45
- timestamp: 0
17
+ text: ''
46
18
  });
47
- const handleDismiss = () => {
48
- window.clearTimeout(leaveTimeout.current);
49
- setState(current => ({
50
- ...current,
51
- visible: false
52
- }));
53
- };
54
19
  useEffect(() => () => {
55
20
  window.clearTimeout(leaveTimeout.current);
56
21
  window.clearTimeout(transitionTimeout.current);
@@ -66,8 +31,6 @@ const Snackbar = props => {
66
31
  committedProps.current = props;
67
32
  const {
68
33
  action,
69
- media,
70
- sentiment,
71
34
  text,
72
35
  timestamp
73
36
  } = props;
@@ -92,10 +55,7 @@ const Snackbar = props => {
92
55
  ...current,
93
56
  visible: true,
94
57
  action,
95
- media,
96
- sentiment,
97
- text,
98
- timestamp
58
+ text
99
59
  }));
100
60
  setLeaveTimeout();
101
61
  };
@@ -113,7 +73,7 @@ const Snackbar = props => {
113
73
  }));
114
74
  transitionTimeout.current = window.setTimeout(() => {
115
75
  updateWhileTextIsPresent(show);
116
- }, SNACKBAR_EXIT_DURATION);
76
+ }, CSS_TRANSITION_DURATION);
117
77
  } else {
118
78
  show();
119
79
  }
@@ -122,79 +82,37 @@ const Snackbar = props => {
122
82
  /* eslint-enable react-hooks/exhaustive-deps, react-hooks/set-state-in-effect */
123
83
  const {
124
84
  action,
125
- media,
126
- sentiment = 'neutral',
127
85
  text,
128
- timestamp,
129
86
  visible
130
87
  } = state;
131
- const renderMedia = () => {
132
- if (media) {
133
- return /*#__PURE__*/jsx("span", {
134
- className: "wds-Snackbar__media-asset",
135
- children: media
136
- });
137
- }
138
- if (sentiment === 'proposition') {
139
- return /*#__PURE__*/jsx("span", {
140
- className: "wds-Snackbar__media-asset",
141
- children: /*#__PURE__*/jsx(Tags, {
142
- "aria-hidden": true,
143
- size: 24
144
- })
145
- });
146
- }
147
- return /*#__PURE__*/jsx(StatusIcon, {
148
- sentiment: sentiment,
149
- size: 24
150
- });
151
- };
88
+ const {
89
+ timeout
90
+ } = props;
152
91
  return /*#__PURE__*/jsx("div", {
153
- className: "wds-Snackbar",
154
- style: {
155
- '--Snackbar-enter-duration': `${SNACKBAR_ENTER_DURATION}ms`,
156
- '--Snackbar-exit-duration': `${SNACKBAR_EXIT_DURATION}ms`
157
- },
92
+ className: "snackbar",
93
+ "aria-live": "assertive",
94
+ role: "alert",
158
95
  children: /*#__PURE__*/jsx(CSSTransition, {
159
- appear: true,
160
- nodeRef: surfaceRef,
96
+ nodeRef: bodyRef,
161
97
  in: visible,
162
- classNames: "wds-Snackbar-container",
98
+ classNames: "snackbar__text-container",
163
99
  timeout: {
164
- appear: SNACKBAR_ENTER_DURATION,
165
- enter: SNACKBAR_ENTER_DURATION,
166
- exit: SNACKBAR_EXIT_DURATION
100
+ appear: 0,
101
+ enter: timeout,
102
+ exit: CSS_TRANSITION_DURATION
167
103
  },
168
104
  unmountOnExit: true,
169
- children: /*#__PURE__*/jsx(PrimitivePrompt, {
170
- ref: surfaceRef,
171
- className: "wds-Snackbar-container",
172
- sentiment: sentiment,
173
- emphasis: "elevated",
174
- media: renderMedia(),
175
- onDismiss: handleDismiss,
176
- children: /*#__PURE__*/jsxs("div", {
177
- className: "wds-Snackbar__content",
178
- children: [/*#__PURE__*/jsx(LiveRegion, {
179
- "aria-live": "polite",
180
- announceOnChange: timestamp,
181
- className: "wds-Snackbar__message",
182
- children: /*#__PURE__*/jsx(Body, {
183
- as: "span",
184
- className: "wds-Snackbar__body",
185
- children: text
186
- })
187
- }), action ? /*#__PURE__*/jsx(Button, {
188
- className: "wds-Snackbar__action",
189
- v2: true,
190
- size: "sm",
191
- priority: "secondary",
192
- href: action.href,
193
- target: action.target,
194
- onClick: action.onClick,
195
- children: action.label
196
- }) : null]
197
- })
105
+ children: /*#__PURE__*/jsxs(Body, {
106
+ ref: bodyRef,
107
+ as: "span",
108
+ className: "snackbar__text",
109
+ children: [text, action ? /*#__PURE__*/jsx(Button, {
110
+ className: "snackbar__text__action",
111
+ v2: true,
112
+ size: "sm",
113
+ onClick: action.onClick,
114
+ children: action.label
115
+ }) : null]
198
116
  })
199
117
  })
200
118
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Snackbar.mjs","sources":["../../src/Snackbar/Snackbar.tsx"],"sourcesContent":["import { Tags } from '@transferwise/icons';\nimport { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { CSSTransition } from 'react-transition-group';\n\nimport Button from '../Button';\nimport Body from '../Body';\nimport { LiveRegion } from '../common';\nimport type { ThemeDark, ThemeLight } from '../common';\nimport { PrimitivePrompt } from '../Prompt/PrimitivePrompt';\nimport type { Sentiment } from '../SentimentSurface';\nimport StatusIcon from '../StatusIcon';\nimport withNextPortal from '../WithNextPortal/WithNextPortal';\n\nimport { SNACKBAR_ENTER_DURATION, SNACKBAR_EXIT_DURATION } from './constants';\nimport type { SnackbarAction } from './Snackbar.types';\n\nexport interface SnackbarProps {\n /** One optional action, supporting a callback or navigation through `href` and `target`. */\n action?: SnackbarAction;\n media?: React.ReactNode;\n sentiment?: Sentiment;\n text: React.ReactNode;\n /** @deprecated Has no effect. Snackbar theming is based on ThemeProvider. */\n theme?: ThemeLight | ThemeDark;\n timeout: number;\n /** @deprecated Has no effect when using SnackbarProvider, which manages Snackbar identity. */\n timestamp?: number;\n}\n\ninterface SnackbarState extends Pick<\n SnackbarProps,\n 'action' | 'media' | 'sentiment' | 'text' | 'timestamp'\n> {\n visible: boolean;\n}\n\nexport const Snackbar = (props: SnackbarProps) => {\n const surfaceRef = useRef<HTMLDivElement>(null);\n const leaveTimeout = useRef(0);\n const transitionTimeout = useRef(0);\n /** The props of the last committed render, as `this.props` was in the class component. */\n const committedProps = useRef(props);\n\n const [state, setState] = useState<SnackbarState>({\n visible: false,\n text: '',\n timestamp: 0,\n });\n\n const handleDismiss = () => {\n window.clearTimeout(leaveTimeout.current);\n setState((current) => ({ ...current, visible: false }));\n };\n\n useEffect(\n () => () => {\n window.clearTimeout(leaveTimeout.current);\n window.clearTimeout(transitionTimeout.current);\n },\n [],\n );\n\n // Runs after every render to mirror the componentDidUpdate lifecycle this component previously\n // relied on, including the shouldComponentUpdate guard that ignored every update without text.\n // Layout, not passive, so a notification is shown or replaced before the browser paints, as\n // componentDidUpdate did. Both rules below are disabled on purpose: the dependency-less effect\n // and its synchronous state updates are what keep this conversion behaviour-identical.\n /* eslint-disable react-hooks/exhaustive-deps, react-hooks/set-state-in-effect */\n useLayoutEffect(() => {\n const previousProps = committedProps.current;\n committedProps.current = props;\n\n const { action, media, sentiment, text, timestamp } = props;\n\n // shouldComponentUpdate bailed out whenever the incoming text was empty. That also blocked the\n // updates scheduled below, so a Snackbar whose text is cleared stays on screen until it is\n // given text again. Preserved here deliberately to keep this refactor behaviour-identical.\n const updateWhileTextIsPresent = (update: () => void) => {\n if (committedProps.current.text) {\n update();\n }\n };\n\n const setLeaveTimeout = () => {\n leaveTimeout.current = window.setTimeout(() => {\n updateWhileTextIsPresent(() => setState((current) => ({ ...current, visible: false })));\n }, committedProps.current.timeout);\n };\n\n const show = () => {\n setState((current) => ({\n ...current,\n visible: true,\n action,\n media,\n sentiment,\n text,\n timestamp,\n }));\n setLeaveTimeout();\n };\n\n if (!text) {\n return;\n }\n\n if (!previousProps.text) {\n show();\n } else if (previousProps.timestamp !== timestamp) {\n window.clearTimeout(leaveTimeout.current);\n\n if (state.visible) {\n setState((current) => ({ ...current, visible: false }));\n transitionTimeout.current = window.setTimeout(() => {\n updateWhileTextIsPresent(show);\n }, SNACKBAR_EXIT_DURATION);\n } else {\n show();\n }\n }\n });\n /* eslint-enable react-hooks/exhaustive-deps, react-hooks/set-state-in-effect */\n\n const { action, media, sentiment = 'neutral', text, timestamp, visible } = state;\n\n const renderMedia = () => {\n if (media) {\n return <span className=\"wds-Snackbar__media-asset\">{media}</span>;\n }\n\n if (sentiment === 'proposition') {\n return (\n <span className=\"wds-Snackbar__media-asset\">\n <Tags aria-hidden size={24} />\n </span>\n );\n }\n\n return <StatusIcon sentiment={sentiment} size={24} />;\n };\n\n return (\n <div\n className=\"wds-Snackbar\"\n style={\n {\n '--Snackbar-enter-duration': `${SNACKBAR_ENTER_DURATION}ms`,\n '--Snackbar-exit-duration': `${SNACKBAR_EXIT_DURATION}ms`,\n } as React.CSSProperties\n }\n >\n <CSSTransition\n appear\n nodeRef={surfaceRef}\n in={visible}\n classNames=\"wds-Snackbar-container\"\n timeout={{\n appear: SNACKBAR_ENTER_DURATION,\n enter: SNACKBAR_ENTER_DURATION,\n exit: SNACKBAR_EXIT_DURATION,\n }}\n unmountOnExit\n >\n <PrimitivePrompt\n ref={surfaceRef}\n className=\"wds-Snackbar-container\"\n sentiment={sentiment}\n emphasis=\"elevated\"\n media={renderMedia()}\n onDismiss={handleDismiss}\n >\n <div className=\"wds-Snackbar__content\">\n <LiveRegion\n aria-live=\"polite\"\n announceOnChange={timestamp}\n className=\"wds-Snackbar__message\"\n >\n <Body as=\"span\" className=\"wds-Snackbar__body\">\n {text}\n </Body>\n </LiveRegion>\n {action ? (\n <Button\n className=\"wds-Snackbar__action\"\n v2\n size=\"sm\"\n priority=\"secondary\"\n href={action.href}\n target={action.target}\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ) : null}\n </div>\n </PrimitivePrompt>\n </CSSTransition>\n </div>\n );\n};\n\nexport default withNextPortal(Snackbar);\n"],"names":["Snackbar","props","surfaceRef","useRef","leaveTimeout","transitionTimeout","committedProps","state","setState","useState","visible","text","timestamp","handleDismiss","window","clearTimeout","current","useEffect","useLayoutEffect","previousProps","action","media","sentiment","updateWhileTextIsPresent","update","setLeaveTimeout","setTimeout","timeout","show","SNACKBAR_EXIT_DURATION","renderMedia","_jsx","className","children","Tags","size","StatusIcon","style","SNACKBAR_ENTER_DURATION","CSSTransition","appear","nodeRef","in","classNames","enter","exit","unmountOnExit","PrimitivePrompt","ref","emphasis","onDismiss","_jsxs","LiveRegion","announceOnChange","Body","as","Button","v2","priority","href","target","onClick","label","withNextPortal"],"mappings":"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"}
1
+ {"version":3,"file":"Snackbar.mjs","sources":["../../src/Snackbar/Snackbar.tsx"],"sourcesContent":["import { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { CSSTransition } from 'react-transition-group';\n\nimport Button from '../Button';\nimport Body from '../Body';\nimport type { ThemeDark, ThemeLight } from '../common';\nimport withNextPortal from '../WithNextPortal/WithNextPortal';\n\nconst CSS_TRANSITION_DURATION = 400;\n\nexport interface SnackbarProps {\n action?: {\n label: string;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n };\n text: React.ReactNode;\n /** @deprecated Has no effect. Snackbar theming is based on ThemeProvider. */\n theme?: ThemeLight | ThemeDark;\n timeout: number;\n timestamp: number;\n}\n\ninterface SnackbarState extends Pick<SnackbarProps, 'action' | 'text'> {\n visible: boolean;\n}\n\nexport const Snackbar = (props: SnackbarProps) => {\n const bodyRef = useRef<HTMLSpanElement>(null);\n const leaveTimeout = useRef(0);\n const transitionTimeout = useRef(0);\n /** The props of the last committed render, as `this.props` was in the class component. */\n const committedProps = useRef(props);\n\n const [state, setState] = useState<SnackbarState>({\n visible: false,\n text: '',\n });\n\n useEffect(\n () => () => {\n window.clearTimeout(leaveTimeout.current);\n window.clearTimeout(transitionTimeout.current);\n },\n [],\n );\n\n // Runs after every render to mirror the componentDidUpdate lifecycle this component previously\n // relied on, including the shouldComponentUpdate guard that ignored every update without text.\n // Layout, not passive, so a notification is shown or replaced before the browser paints, as\n // componentDidUpdate did. Both rules below are disabled on purpose: the dependency-less effect\n // and its synchronous state updates are what keep this conversion behaviour-identical.\n /* eslint-disable react-hooks/exhaustive-deps, react-hooks/set-state-in-effect */\n useLayoutEffect(() => {\n const previousProps = committedProps.current;\n committedProps.current = props;\n\n const { action, text, timestamp } = props;\n\n // shouldComponentUpdate bailed out whenever the incoming text was empty. That also blocked the\n // updates scheduled below, so a Snackbar whose text is cleared stays on screen until it is\n // given text again. Preserved here deliberately to keep this refactor behaviour-identical.\n const updateWhileTextIsPresent = (update: () => void) => {\n if (committedProps.current.text) {\n update();\n }\n };\n\n const setLeaveTimeout = () => {\n leaveTimeout.current = window.setTimeout(() => {\n updateWhileTextIsPresent(() => setState((current) => ({ ...current, visible: false })));\n }, committedProps.current.timeout);\n };\n\n const show = () => {\n setState((current) => ({ ...current, visible: true, action, text }));\n setLeaveTimeout();\n };\n\n if (!text) {\n return;\n }\n\n if (!previousProps.text) {\n show();\n } else if (previousProps.timestamp !== timestamp) {\n window.clearTimeout(leaveTimeout.current);\n\n if (state.visible) {\n setState((current) => ({ ...current, visible: false }));\n transitionTimeout.current = window.setTimeout(() => {\n updateWhileTextIsPresent(show);\n }, CSS_TRANSITION_DURATION);\n } else {\n show();\n }\n }\n });\n /* eslint-enable react-hooks/exhaustive-deps, react-hooks/set-state-in-effect */\n\n const { action, text, visible } = state;\n const { timeout } = props;\n\n return (\n <div className=\"snackbar\" aria-live=\"assertive\" role=\"alert\">\n <CSSTransition\n nodeRef={bodyRef}\n in={visible}\n classNames=\"snackbar__text-container\"\n timeout={{\n appear: 0,\n enter: timeout,\n exit: CSS_TRANSITION_DURATION,\n }}\n unmountOnExit\n >\n <Body ref={bodyRef} as=\"span\" className=\"snackbar__text\">\n {text}\n {action ? (\n <Button className=\"snackbar__text__action\" v2 size=\"sm\" onClick={action.onClick}>\n {action.label}\n </Button>\n ) : null}\n </Body>\n </CSSTransition>\n </div>\n );\n};\n\nexport default withNextPortal(Snackbar);\n"],"names":["CSS_TRANSITION_DURATION","Snackbar","props","bodyRef","useRef","leaveTimeout","transitionTimeout","committedProps","state","setState","useState","visible","text","useEffect","window","clearTimeout","current","useLayoutEffect","previousProps","action","timestamp","updateWhileTextIsPresent","update","setLeaveTimeout","setTimeout","timeout","show","_jsx","className","role","children","CSSTransition","nodeRef","in","classNames","appear","enter","exit","unmountOnExit","_jsxs","Body","ref","as","Button","v2","size","onClick","label","withNextPortal"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SnackbarContext.js","sources":["../../src/Snackbar/SnackbarContext.ts"],"sourcesContent":["import { createContext } from 'react';\n\nimport type { SnackbarCreationProps } from './Snackbar.types';\n\nexport type SnackbarContextType = {\n createSnackbar: (props: SnackbarCreationProps) => void;\n};\n\nexport const SnackbarContext = createContext<SnackbarContextType>({ createSnackbar: () => {} });\n\nexport const SnackbarConsumer = SnackbarContext.Consumer;\n"],"names":["SnackbarContext","createContext","createSnackbar","SnackbarConsumer","Consumer"],"mappings":";;;;AAQO,MAAMA,eAAe,gBAAGC,mBAAa,CAAsB;EAAEC,cAAc,EAAEA,MAAK,CAAE;AAAC,CAAE;AAEvF,MAAMC,gBAAgB,GAAGH,eAAe,CAACI;;;"}
1
+ {"version":3,"file":"SnackbarContext.js","sources":["../../src/Snackbar/SnackbarContext.ts"],"sourcesContent":["import { createContext } from 'react';\n\nimport { SnackbarProps } from './Snackbar';\n\nexport type SnackbarContextType = {\n createSnackbar: (props: Omit<SnackbarProps, 'timeout' | 'timestamp'>) => void;\n};\n\nexport const SnackbarContext = createContext<SnackbarContextType>({ createSnackbar: () => {} });\n\nexport const SnackbarConsumer = SnackbarContext.Consumer;\n"],"names":["SnackbarContext","createContext","createSnackbar","SnackbarConsumer","Consumer"],"mappings":";;;;AAQO,MAAMA,eAAe,gBAAGC,mBAAa,CAAsB;EAAEC,cAAc,EAAEA,MAAK,CAAE;AAAC,CAAE;AAEvF,MAAMC,gBAAgB,GAAGH,eAAe,CAACI;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SnackbarContext.mjs","sources":["../../src/Snackbar/SnackbarContext.ts"],"sourcesContent":["import { createContext } from 'react';\n\nimport type { SnackbarCreationProps } from './Snackbar.types';\n\nexport type SnackbarContextType = {\n createSnackbar: (props: SnackbarCreationProps) => void;\n};\n\nexport const SnackbarContext = createContext<SnackbarContextType>({ createSnackbar: () => {} });\n\nexport const SnackbarConsumer = SnackbarContext.Consumer;\n"],"names":["SnackbarContext","createContext","createSnackbar","SnackbarConsumer","Consumer"],"mappings":";;AAQO,MAAMA,eAAe,gBAAGC,aAAa,CAAsB;EAAEC,cAAc,EAAEA,MAAK,CAAE;AAAC,CAAE;AAEvF,MAAMC,gBAAgB,GAAGH,eAAe,CAACI;;"}
1
+ {"version":3,"file":"SnackbarContext.mjs","sources":["../../src/Snackbar/SnackbarContext.ts"],"sourcesContent":["import { createContext } from 'react';\n\nimport { SnackbarProps } from './Snackbar';\n\nexport type SnackbarContextType = {\n createSnackbar: (props: Omit<SnackbarProps, 'timeout' | 'timestamp'>) => void;\n};\n\nexport const SnackbarContext = createContext<SnackbarContextType>({ createSnackbar: () => {} });\n\nexport const SnackbarConsumer = SnackbarContext.Consumer;\n"],"names":["SnackbarContext","createContext","createSnackbar","SnackbarConsumer","Consumer"],"mappings":";;AAQO,MAAMA,eAAe,gBAAGC,aAAa,CAAsB;EAAEC,cAAc,EAAEA,MAAK,CAAE;AAAC,CAAE;AAEvF,MAAMC,gBAAgB,GAAGH,eAAe,CAACI;;"}
@@ -17,8 +17,6 @@ function SnackbarProvider({
17
17
  });
18
18
  const {
19
19
  action,
20
- media,
21
- sentiment,
22
20
  text,
23
21
  timestamp
24
22
  } = state;
@@ -26,14 +24,10 @@ function SnackbarProvider({
26
24
  value: React.useMemo(() => ({
27
25
  createSnackbar: ({
28
26
  action,
29
- media,
30
- sentiment,
31
27
  text
32
28
  }) => {
33
29
  setState({
34
30
  action,
35
- media,
36
- sentiment,
37
31
  text,
38
32
  timestamp: Date.now()
39
33
  });
@@ -41,8 +35,6 @@ function SnackbarProvider({
41
35
  }), []),
42
36
  children: [/*#__PURE__*/jsxRuntime.jsx(Snackbar.default, {
43
37
  action: action,
44
- media: media,
45
- sentiment: sentiment,
46
38
  text: text,
47
39
  timestamp: timestamp,
48
40
  timeout: timeout
@@ -1 +1 @@
1
- {"version":3,"file":"SnackbarProvider.js","sources":["../../src/Snackbar/SnackbarProvider.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\n\nimport SnackbarPortal from './Snackbar';\nimport { SnackbarContext } from './SnackbarContext';\nimport type { SnackbarCreationProps } from './Snackbar.types';\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<SnackbarCreationProps>({\n text: '',\n timestamp: 0,\n });\n const { action, media, sentiment, text, timestamp } = state;\n\n return (\n <SnackbarContext.Provider\n value={useMemo(\n () => ({\n createSnackbar: ({ action, media, sentiment, text }) => {\n setState({ action, media, sentiment, text, timestamp: Date.now() });\n },\n }),\n [],\n )}\n >\n <SnackbarPortal\n action={action}\n media={media}\n sentiment={sentiment}\n text={text}\n timestamp={timestamp}\n timeout={timeout}\n />\n {children}\n </SnackbarContext.Provider>\n );\n}\n"],"names":["SnackbarProvider","timeout","children","state","setState","useState","text","timestamp","action","media","sentiment","_jsxs","SnackbarContext","Provider","value","useMemo","createSnackbar","Date","now","_jsx","SnackbarPortal"],"mappings":";;;;;;;;;AAWc,SAAUA,gBAAgBA,CAAC;AAAEC,EAAAA,OAAO,GAAG,IAAI;AAAEC,EAAAA;AAAQ,CAAyB,EAAA;AAC1F,EAAA,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGC,cAAQ,CAAwB;AACxDC,IAAAA,IAAI,EAAE,EAAE;AACRC,IAAAA,SAAS,EAAE;AACZ,GAAA,CAAC;EACF,MAAM;IAAEC,MAAM;IAAEC,KAAK;IAAEC,SAAS;IAAEJ,IAAI;AAAEC,IAAAA;AAAS,GAAE,GAAGJ,KAAK;AAE3D,EAAA,oBACEQ,eAAA,CAACC,+BAAe,CAACC,QAAQ,EAAA;IACvBC,KAAK,EAAEC,aAAO,CACZ,OAAO;AACLC,MAAAA,cAAc,EAAEA,CAAC;QAAER,MAAM;QAAEC,KAAK;QAAEC,SAAS;AAAEJ,QAAAA;AAAI,OAAE,KAAI;AACrDF,QAAAA,QAAQ,CAAC;UAAEI,MAAM;UAAEC,KAAK;UAAEC,SAAS;UAAEJ,IAAI;AAAEC,UAAAA,SAAS,EAAEU,IAAI,CAACC,GAAG;AAAE,SAAE,CAAC;AACrE,MAAA;KACD,CAAC,EACF,EAAE,CACF;IAAAhB,QAAA,EAAA,cAEFiB,cAAA,CAACC,gBAAc,EAAA;AACbZ,MAAAA,MAAM,EAAEA,MAAO;AACfC,MAAAA,KAAK,EAAEA,KAAM;AACbC,MAAAA,SAAS,EAAEA,SAAU;AACrBJ,MAAAA,IAAI,EAAEA,IAAK;AACXC,MAAAA,SAAS,EAAEA,SAAU;AACrBN,MAAAA,OAAO,EAAEA;KAAQ,CAEnB,EAACC,QAAQ;AAAA,GACe,CAAC;AAE/B;;"}
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, timestamp } = state;\n\n return (\n <SnackbarContext.Provider\n value={useMemo(\n () => ({\n createSnackbar: ({ action, text }) => {\n setState({ action, text, timestamp: Date.now() });\n },\n }),\n [],\n )}\n >\n <SnackbarPortal action={action} text={text} timestamp={timestamp} timeout={timeout} />\n {children}\n </SnackbarContext.Provider>\n );\n}\n"],"names":["SnackbarProvider","timeout","children","state","setState","useState","text","timestamp","action","_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;AAAEC,IAAAA;AAAS,GAAE,GAAGJ,KAAK;AAEzC,EAAA,oBACEM,eAAA,CAACC,+BAAe,CAACC,QAAQ,EAAA;IACvBC,KAAK,EAAEC,aAAO,CACZ,OAAO;AACLC,MAAAA,cAAc,EAAEA,CAAC;QAAEN,MAAM;AAAEF,QAAAA;AAAI,OAAE,KAAI;AACnCF,QAAAA,QAAQ,CAAC;UAAEI,MAAM;UAAEF,IAAI;AAAEC,UAAAA,SAAS,EAAEQ,IAAI,CAACC,GAAG;AAAE,SAAE,CAAC;AACnD,MAAA;KACD,CAAC,EACF,EAAE,CACF;IAAAd,QAAA,EAAA,cAEFe,cAAA,CAACC,gBAAc,EAAA;AAACV,MAAAA,MAAM,EAAEA,MAAO;AAACF,MAAAA,IAAI,EAAEA,IAAK;AAACC,MAAAA,SAAS,EAAEA,SAAU;AAACN,MAAAA,OAAO,EAAEA;KAAQ,CACnF,EAACC,QAAQ;AAAA,GACe,CAAC;AAE/B;;"}
@@ -13,8 +13,6 @@ function SnackbarProvider({
13
13
  });
14
14
  const {
15
15
  action,
16
- media,
17
- sentiment,
18
16
  text,
19
17
  timestamp
20
18
  } = state;
@@ -22,14 +20,10 @@ function SnackbarProvider({
22
20
  value: useMemo(() => ({
23
21
  createSnackbar: ({
24
22
  action,
25
- media,
26
- sentiment,
27
23
  text
28
24
  }) => {
29
25
  setState({
30
26
  action,
31
- media,
32
- sentiment,
33
27
  text,
34
28
  timestamp: Date.now()
35
29
  });
@@ -37,8 +31,6 @@ function SnackbarProvider({
37
31
  }), []),
38
32
  children: [/*#__PURE__*/jsx(SnackbarPortal, {
39
33
  action: action,
40
- media: media,
41
- sentiment: sentiment,
42
34
  text: text,
43
35
  timestamp: timestamp,
44
36
  timeout: timeout
@@ -1 +1 @@
1
- {"version":3,"file":"SnackbarProvider.mjs","sources":["../../src/Snackbar/SnackbarProvider.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\n\nimport SnackbarPortal from './Snackbar';\nimport { SnackbarContext } from './SnackbarContext';\nimport type { SnackbarCreationProps } from './Snackbar.types';\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<SnackbarCreationProps>({\n text: '',\n timestamp: 0,\n });\n const { action, media, sentiment, text, timestamp } = state;\n\n return (\n <SnackbarContext.Provider\n value={useMemo(\n () => ({\n createSnackbar: ({ action, media, sentiment, text }) => {\n setState({ action, media, sentiment, text, timestamp: Date.now() });\n },\n }),\n [],\n )}\n >\n <SnackbarPortal\n action={action}\n media={media}\n sentiment={sentiment}\n text={text}\n timestamp={timestamp}\n timeout={timeout}\n />\n {children}\n </SnackbarContext.Provider>\n );\n}\n"],"names":["SnackbarProvider","timeout","children","state","setState","useState","text","timestamp","action","media","sentiment","_jsxs","SnackbarContext","Provider","value","useMemo","createSnackbar","Date","now","_jsx","SnackbarPortal"],"mappings":";;;;;AAWc,SAAUA,gBAAgBA,CAAC;AAAEC,EAAAA,OAAO,GAAG,IAAI;AAAEC,EAAAA;AAAQ,CAAyB,EAAA;AAC1F,EAAA,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGC,QAAQ,CAAwB;AACxDC,IAAAA,IAAI,EAAE,EAAE;AACRC,IAAAA,SAAS,EAAE;AACZ,GAAA,CAAC;EACF,MAAM;IAAEC,MAAM;IAAEC,KAAK;IAAEC,SAAS;IAAEJ,IAAI;AAAEC,IAAAA;AAAS,GAAE,GAAGJ,KAAK;AAE3D,EAAA,oBACEQ,IAAA,CAACC,eAAe,CAACC,QAAQ,EAAA;IACvBC,KAAK,EAAEC,OAAO,CACZ,OAAO;AACLC,MAAAA,cAAc,EAAEA,CAAC;QAAER,MAAM;QAAEC,KAAK;QAAEC,SAAS;AAAEJ,QAAAA;AAAI,OAAE,KAAI;AACrDF,QAAAA,QAAQ,CAAC;UAAEI,MAAM;UAAEC,KAAK;UAAEC,SAAS;UAAEJ,IAAI;AAAEC,UAAAA,SAAS,EAAEU,IAAI,CAACC,GAAG;AAAE,SAAE,CAAC;AACrE,MAAA;KACD,CAAC,EACF,EAAE,CACF;IAAAhB,QAAA,EAAA,cAEFiB,GAAA,CAACC,cAAc,EAAA;AACbZ,MAAAA,MAAM,EAAEA,MAAO;AACfC,MAAAA,KAAK,EAAEA,KAAM;AACbC,MAAAA,SAAS,EAAEA,SAAU;AACrBJ,MAAAA,IAAI,EAAEA,IAAK;AACXC,MAAAA,SAAS,EAAEA,SAAU;AACrBN,MAAAA,OAAO,EAAEA;KAAQ,CAEnB,EAACC,QAAQ;AAAA,GACe,CAAC;AAE/B;;"}
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, timestamp } = state;\n\n return (\n <SnackbarContext.Provider\n value={useMemo(\n () => ({\n createSnackbar: ({ action, text }) => {\n setState({ action, text, timestamp: Date.now() });\n },\n }),\n [],\n )}\n >\n <SnackbarPortal action={action} text={text} timestamp={timestamp} timeout={timeout} />\n {children}\n </SnackbarContext.Provider>\n );\n}\n"],"names":["SnackbarProvider","timeout","children","state","setState","useState","text","timestamp","action","_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;AAAEC,IAAAA;AAAS,GAAE,GAAGJ,KAAK;AAEzC,EAAA,oBACEM,IAAA,CAACC,eAAe,CAACC,QAAQ,EAAA;IACvBC,KAAK,EAAEC,OAAO,CACZ,OAAO;AACLC,MAAAA,cAAc,EAAEA,CAAC;QAAEN,MAAM;AAAEF,QAAAA;AAAI,OAAE,KAAI;AACnCF,QAAAA,QAAQ,CAAC;UAAEI,MAAM;UAAEF,IAAI;AAAEC,UAAAA,SAAS,EAAEQ,IAAI,CAACC,GAAG;AAAE,SAAE,CAAC;AACnD,MAAA;KACD,CAAC,EACF,EAAE,CACF;IAAAd,QAAA,EAAA,cAEFe,GAAA,CAACC,cAAc,EAAA;AAACV,MAAAA,MAAM,EAAEA,MAAO;AAACF,MAAAA,IAAI,EAAEA,IAAK;AAACC,MAAAA,SAAS,EAAEA,SAAU;AAACN,MAAAA,OAAO,EAAEA;KAAQ,CACnF,EAACC,QAAQ;AAAA,GACe,CAAC;AAE/B;;"}
@@ -35,7 +35,7 @@
35
35
  "neptune.PhoneNumberInput.SelectInput.placeholder": "เลือกตัวเลือก...",
36
36
  "neptune.PhoneNumberInput.countryCodeLabel": "รหัสประเทศ",
37
37
  "neptune.PhoneNumberInput.phoneNumberLabel": "หมายเลขโทรศัพท์",
38
- "neptune.PhoneNumberInput.phoneNumberPrefix": "คำนำหน้า",
38
+ "neptune.PhoneNumberInput.phoneNumberPrefix": "รหัสประเทศ",
39
39
  "neptune.Select.searchPlaceholder": "ค้นหา...",
40
40
  "neptune.SelectInput.noResultsFound": "ไม่พบผลลัพธ์",
41
41
  "neptune.StatusIcon.iconLabel.error": "ข้อผิดพลาด:",
@@ -39,7 +39,7 @@ var th = {
39
39
  "neptune.PhoneNumberInput.SelectInput.placeholder": "เลือกตัวเลือก...",
40
40
  "neptune.PhoneNumberInput.countryCodeLabel": "รหัสประเทศ",
41
41
  "neptune.PhoneNumberInput.phoneNumberLabel": "หมายเลขโทรศัพท์",
42
- "neptune.PhoneNumberInput.phoneNumberPrefix": "คำนำหน้า",
42
+ "neptune.PhoneNumberInput.phoneNumberPrefix": "รหัสประเทศ",
43
43
  "neptune.Select.searchPlaceholder": "ค้นหา...",
44
44
  "neptune.SelectInput.noResultsFound": "ไม่พบผลลัพธ์",
45
45
  "neptune.StatusIcon.iconLabel.error": "ข้อผิดพลาด:",
@@ -35,7 +35,7 @@ var th = {
35
35
  "neptune.PhoneNumberInput.SelectInput.placeholder": "เลือกตัวเลือก...",
36
36
  "neptune.PhoneNumberInput.countryCodeLabel": "รหัสประเทศ",
37
37
  "neptune.PhoneNumberInput.phoneNumberLabel": "หมายเลขโทรศัพท์",
38
- "neptune.PhoneNumberInput.phoneNumberPrefix": "คำนำหน้า",
38
+ "neptune.PhoneNumberInput.phoneNumberPrefix": "รหัสประเทศ",
39
39
  "neptune.Select.searchPlaceholder": "ค้นหา...",
40
40
  "neptune.SelectInput.noResultsFound": "ไม่พบผลลัพธ์",
41
41
  "neptune.StatusIcon.iconLabel.error": "ข้อผิดพลาด:",
@@ -35,6 +35,7 @@
35
35
  "neptune.PhoneNumberInput.SelectInput.placeholder": "选择其中一项...",
36
36
  "neptune.PhoneNumberInput.countryCodeLabel": "国家/地区代码",
37
37
  "neptune.PhoneNumberInput.phoneNumberLabel": "电话号码",
38
+ "neptune.PhoneNumberInput.phoneNumberPrefix": "前缀",
38
39
  "neptune.Select.searchPlaceholder": "搜索",
39
40
  "neptune.SelectInput.noResultsFound": "找不到结果",
40
41
  "neptune.StatusIcon.iconLabel.error": "错误:",
@@ -39,6 +39,7 @@ var zhCN = {
39
39
  "neptune.PhoneNumberInput.SelectInput.placeholder": "选择其中一项...",
40
40
  "neptune.PhoneNumberInput.countryCodeLabel": "国家/地区代码",
41
41
  "neptune.PhoneNumberInput.phoneNumberLabel": "电话号码",
42
+ "neptune.PhoneNumberInput.phoneNumberPrefix": "前缀",
42
43
  "neptune.Select.searchPlaceholder": "搜索",
43
44
  "neptune.SelectInput.noResultsFound": "找不到结果",
44
45
  "neptune.StatusIcon.iconLabel.error": "错误:",
@@ -1 +1 @@
1
- {"version":3,"file":"zh-CN.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"zh-CN.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -35,6 +35,7 @@ var zhCN = {
35
35
  "neptune.PhoneNumberInput.SelectInput.placeholder": "选择其中一项...",
36
36
  "neptune.PhoneNumberInput.countryCodeLabel": "国家/地区代码",
37
37
  "neptune.PhoneNumberInput.phoneNumberLabel": "电话号码",
38
+ "neptune.PhoneNumberInput.phoneNumberPrefix": "前缀",
38
39
  "neptune.Select.searchPlaceholder": "搜索",
39
40
  "neptune.SelectInput.noResultsFound": "找不到结果",
40
41
  "neptune.StatusIcon.iconLabel.error": "错误:",
@@ -1 +1 @@
1
- {"version":3,"file":"zh-CN.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"zh-CN.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}