@transferwise/components 0.0.0-experimental-cf159cc → 0.0.0-experimental-7990d38

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 (45) hide show
  1. package/build/Snackbar/Snackbar.js +22 -9
  2. package/build/Snackbar/Snackbar.js.map +1 -1
  3. package/build/Snackbar/Snackbar.mjs +22 -9
  4. package/build/Snackbar/Snackbar.mjs.map +1 -1
  5. package/build/Snackbar/SnackbarProvider.js +1 -1
  6. package/build/Snackbar/SnackbarProvider.js.map +1 -1
  7. package/build/Snackbar/SnackbarProvider.mjs +1 -1
  8. package/build/Snackbar/SnackbarProvider.mjs.map +1 -1
  9. package/build/Snackbar/constants.js +6 -0
  10. package/build/Snackbar/constants.js.map +1 -1
  11. package/build/Snackbar/constants.mjs +5 -1
  12. package/build/Snackbar/constants.mjs.map +1 -1
  13. package/build/Snackbar/useSnackbarAutoDismiss.js +143 -0
  14. package/build/Snackbar/useSnackbarAutoDismiss.js.map +1 -0
  15. package/build/Snackbar/useSnackbarAutoDismiss.mjs +139 -0
  16. package/build/Snackbar/useSnackbarAutoDismiss.mjs.map +1 -0
  17. package/build/types/Snackbar/Snackbar.d.ts +26 -6
  18. package/build/types/Snackbar/Snackbar.d.ts.map +1 -1
  19. package/build/types/Snackbar/Snackbar.types.d.ts +3 -14
  20. package/build/types/Snackbar/Snackbar.types.d.ts.map +1 -1
  21. package/build/types/Snackbar/SnackbarPortal.d.ts +1 -1
  22. package/build/types/Snackbar/SnackbarPortal.d.ts.map +1 -1
  23. package/build/types/Snackbar/SnackbarProvider.d.ts +7 -0
  24. package/build/types/Snackbar/SnackbarProvider.d.ts.map +1 -1
  25. package/build/types/Snackbar/constants.d.ts +4 -0
  26. package/build/types/Snackbar/constants.d.ts.map +1 -1
  27. package/build/types/Snackbar/index.d.ts +1 -1
  28. package/build/types/Snackbar/index.d.ts.map +1 -1
  29. package/build/types/Snackbar/useSnackbarAutoDismiss.d.ts +19 -0
  30. package/build/types/Snackbar/useSnackbarAutoDismiss.d.ts.map +1 -0
  31. package/build/types/index.d.ts +1 -1
  32. package/build/types/index.d.ts.map +1 -1
  33. package/package.json +1 -1
  34. package/src/Snackbar/Snackbar.test.tsx +297 -9
  35. package/src/Snackbar/Snackbar.tsx +41 -17
  36. package/src/Snackbar/Snackbar.types.ts +7 -15
  37. package/src/Snackbar/SnackbarProvider.test.tsx +64 -4
  38. package/src/Snackbar/SnackbarProvider.tsx +8 -1
  39. package/src/Snackbar/_stories/Snackbar.rtl.test.story.tsx +2 -4
  40. package/src/Snackbar/_stories/Snackbar.story.tsx +40 -2
  41. package/src/Snackbar/_stories/Snackbar.test.story.tsx +6 -7
  42. package/src/Snackbar/constants.ts +5 -0
  43. package/src/Snackbar/index.ts +1 -1
  44. package/src/Snackbar/useSnackbarAutoDismiss.ts +152 -0
  45. package/src/index.ts +1 -1
@@ -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 onDismissRequest: () => void;\n resetKey: number;\n timeout?: number;\n visible: boolean;\n};\n\nconst getAutoDismissDuration = ({\n duration,\n timeout,\n}: Pick<UseSnackbarAutoDismissOptions, 'duration' | 'timeout'>) => {\n if (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\n/** Starts after entry finishes and pauses on hover or focus, preserving the remaining time. */\nconst useSnackbarAutoDismiss = ({\n duration,\n onDismissRequest,\n resetKey,\n timeout,\n visible,\n}: UseSnackbarAutoDismissOptions) => {\n const surfaceRef = useRef<HTMLDivElement>(null);\n const hasEnteredRef = useRef(false);\n const timeoutRef = useRef(0);\n const remainingDurationRef = useRef<number | null>(null);\n const timerStartedAtRef = useRef(0);\n const interactionStateRef = useRef({ 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, timeout })) => {\n clearTimer();\n remainingDurationRef.current = remainingDuration;\n\n if (!visible || !hasEnteredRef.current || 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, onDismissRequest, timeout, visible],\n );\n\n const pauseTimer = useCallback(() => {\n if (!timeoutRef.current || remainingDurationRef.current === null) {\n return;\n }\n\n clearTimer();\n // Count only unpaused time; resuming must not grant another full duration.\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 const handleEntered = useCallback(() => {\n hasEnteredRef.current = true;\n const snackbar = surfaceRef.current;\n // Entry can finish beneath the pointer or with keyboard focus already inside the surface.\n interactionStateRef.current = {\n focusWithin: Boolean(snackbar?.contains(document.activeElement)),\n hovered: snackbar?.matches(':hover') ?? false,\n };\n startTimer();\n }, [startTimer]);\n\n useEffect(() => {\n if (!visible) {\n hasEnteredRef.current = false;\n clearTimer();\n return undefined;\n }\n\n // Before onEntered this only prepares the duration; it cannot start the countdown.\n startTimer();\n\n return clearTimer;\n }, [clearTimer, resetKey, startTimer, visible]);\n\n return { handleBlur, handleEntered, handleFocus, handleMouseEnter, handleMouseLeave, surfaceRef };\n};\n\nexport default useSnackbarAutoDismiss;\n"],"names":["getAutoDismissDuration","duration","timeout","SNACKBAR_EXTENDED_DURATION","SNACKBAR_DEFAULT_DURATION","useSnackbarAutoDismiss","onDismissRequest","resetKey","visible","surfaceRef","useRef","hasEnteredRef","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","handleEntered","snackbar","Boolean","document","activeElement","matches","useEffect","undefined"],"mappings":"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"}
@@ -1,15 +1,28 @@
1
1
  import type { ThemeDark, ThemeLight } from '../common';
2
2
  import type { Sentiment } from '../SentimentSurface';
3
- import type { SnackbarAction, SnackbarInternalProps } from './Snackbar.types';
3
+ import type { SnackbarAction, SnackbarDuration } from './Snackbar.types';
4
4
  /**
5
- * Message options retained for public type compatibility. Create notifications through
6
- * SnackbarProvider/useSnackbar; the controlled surface also needs provider-only lifecycle props.
5
+ * Props for the controlled Snackbar surface, including provider-managed lifecycle controls.
6
+ * Use SnackbarCreationProps when creating notifications through SnackbarProvider/useSnackbar.
7
7
  */
8
8
  export interface SnackbarProps {
9
9
  /** One optional action, supporting a callback or navigation through `href` and `target`. */
10
10
  action?: SnackbarAction;
11
+ /** Changes for each new Snackbar so LiveRegion re-announces it. */
12
+ announcementKey: number;
13
+ /**
14
+ * Controls auto-dismiss with a four-second, six-second or indefinite duration after entry finishes.
15
+ * Takes precedence over the deprecated `timeout`.
16
+ * When neither option is supplied, the default is 4000ms (previously 4500ms).
17
+ * @default 'default'
18
+ */
19
+ duration?: SnackbarDuration;
11
20
  /** Overrides sentiment-derived media with content for the 24×24px media slot. */
12
21
  media?: React.ReactNode;
22
+ /** Requests an exit; the provider retains the surface until onExited confirms it has finished. */
23
+ onDismissRequest: () => void;
24
+ /** Called after the exit animation so the provider can unmount active or show its replacement. */
25
+ onExited: () => void;
13
26
  /**
14
27
  * Controls the sentiment surface and default media.
15
28
  * @default 'neutral'
@@ -19,11 +32,18 @@ export interface SnackbarProps {
19
32
  text: React.ReactNode;
20
33
  /** @deprecated Has no effect. Snackbar theming is based on ThemeProvider. */
21
34
  theme?: ThemeLight | ThemeDark;
22
- /** Auto-dismiss delay in milliseconds, supplied by the provider. */
23
- timeout: number;
35
+ /**
36
+ * @deprecated Use `duration` instead. Explicit millisecond values remain supported and are not
37
+ * automatically remapped when no `duration` is supplied.
38
+ * To migrate, use `default` for 0–5000ms, `extended` for values above 5000ms, and `indefinite`
39
+ * for intentionally persistent notifications.
40
+ */
41
+ timeout?: number;
24
42
  /** @deprecated Has no effect when using SnackbarProvider, which manages Snackbar identity. */
25
43
  timestamp?: number;
44
+ /** Controls entry/exit; the surface does not manage visibility itself. */
45
+ visible: boolean;
26
46
  }
27
- export declare const Snackbar: ({ action, announcementKey, media, onDismissRequest, onExited, sentiment, text, timeout, visible, }: SnackbarInternalProps) => import("react").JSX.Element;
47
+ export declare const Snackbar: ({ action, announcementKey, duration, media, onDismissRequest, onExited, sentiment, text, timeout, visible, }: SnackbarProps) => import("react").JSX.Element;
28
48
  export default Snackbar;
29
49
  //# sourceMappingURL=Snackbar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Snackbar.d.ts","sourceRoot":"","sources":["../../../src/Snackbar/Snackbar.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAIrD,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAE9E;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,4FAA4F;IAC5F,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,iFAAiF;IACjF,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,kGAAkG;IAClG,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAC/B,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,8FAA8F;IAC9F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,QAAQ,GAAI,oGAUtB,qBAAqB,gCAuFvB,CAAC;AAEF,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"Snackbar.d.ts","sourceRoot":"","sources":["../../../src/Snackbar/Snackbar.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAIrD,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGzE;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,4FAA4F;IAC5F,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,mEAAmE;IACnE,eAAe,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,iFAAiF;IACjF,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,kGAAkG;IAClG,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,kGAAkG;IAClG,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,kGAAkG;IAClG,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAC/B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8FAA8F;IAC9F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,QAAQ,GAAI,8GAWtB,aAAa,gCA0Ff,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -1,23 +1,12 @@
1
1
  import type { ButtonProps, ButtonReferenceType } from '../Button/Button.types';
2
2
  import type { SnackbarProps } from './Snackbar';
3
+ /** Semantic auto-dismiss durations. `indefinite` disables the timer. */
4
+ export type SnackbarDuration = 'default' | 'extended' | 'indefinite';
3
5
  /** One optional action. Supports callbacks and navigation through the Button API. */
4
6
  export type SnackbarAction = Pick<ButtonProps, 'href' | 'target'> & {
5
7
  label: ButtonProps['children'];
6
8
  onClick?: React.MouseEventHandler<ButtonReferenceType>;
7
9
  };
8
10
  /** Props accepted by `createSnackbar` from `useSnackbar()`. */
9
- export type SnackbarCreationProps = Omit<SnackbarProps, 'timeout'>;
10
- /** Props the provider passes to control a Snackbar. Internal. */
11
- export interface SnackbarInternalProps extends Omit<SnackbarProps, 'timeout' | 'timestamp'> {
12
- /** Changes for each new Snackbar so LiveRegion re-announces it. */
13
- announcementKey: number;
14
- /** Requests an exit; the provider retains the surface until onExited confirms it has finished. */
15
- onDismissRequest: () => void;
16
- /** Called after the exit animation so the provider can unmount active or show its replacement. */
17
- onExited: () => void;
18
- /** Auto-dismiss delay in milliseconds, supplied by the provider. */
19
- timeout: number;
20
- /** Controls entry/exit; the surface does not manage visibility itself. */
21
- visible: boolean;
22
- }
11
+ export type SnackbarCreationProps = Omit<SnackbarProps, 'announcementKey' | 'onDismissRequest' | 'onExited' | 'timeout' | 'visible'>;
23
12
  //# sourceMappingURL=Snackbar.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Snackbar.types.d.ts","sourceRoot":"","sources":["../../../src/Snackbar/Snackbar.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,qFAAqF;AACrF,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,CAAC,GAAG;IAClE,KAAK,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;CACxD,CAAC;AAEF,+DAA+D;AAC/D,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;AAEnE,iEAAiE;AACjE,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,WAAW,CAAC;IACzF,mEAAmE;IACnE,eAAe,EAAE,MAAM,CAAC;IACxB,kGAAkG;IAClG,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,kGAAkG;IAClG,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,OAAO,EAAE,OAAO,CAAC;CAClB"}
1
+ {"version":3,"file":"Snackbar.types.d.ts","sourceRoot":"","sources":["../../../src/Snackbar/Snackbar.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,wEAAwE;AACxE,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;AAErE,qFAAqF;AACrF,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,CAAC,GAAG;IAClE,KAAK,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;CACxD,CAAC;AAEF,+DAA+D;AAC/D,MAAM,MAAM,qBAAqB,GAAG,IAAI,CACtC,aAAa,EACb,iBAAiB,GAAG,kBAAkB,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAC5E,CAAC"}
@@ -1,4 +1,4 @@
1
1
  /** Renders the Snackbar into `document.body` after mount, so it's safe for SSR. */
2
- declare const SnackbarPortal: (props: import("./Snackbar.types").SnackbarInternalProps) => import("react").ReactPortal | null;
2
+ declare const SnackbarPortal: (props: import("./Snackbar").SnackbarProps) => import("react").ReactPortal | null;
3
3
  export default SnackbarPortal;
4
4
  //# sourceMappingURL=SnackbarPortal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SnackbarPortal.d.ts","sourceRoot":"","sources":["../../../src/Snackbar/SnackbarPortal.tsx"],"names":[],"mappings":"AAIA,mFAAmF;AACnF,QAAA,MAAM,cAAc,iGAA2B,CAAC;AAEhD,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"SnackbarPortal.d.ts","sourceRoot":"","sources":["../../../src/Snackbar/SnackbarPortal.tsx"],"names":[],"mappings":"AAIA,mFAAmF;AACnF,QAAA,MAAM,cAAc,mFAA2B,CAAC;AAEhD,eAAe,cAAc,CAAC"}
@@ -1,4 +1,11 @@
1
1
  export interface SnackbarProviderProps {
2
+ /**
3
+ * @deprecated Use per-Snackbar `duration` instead. Explicit millisecond values remain supported
4
+ * and are not automatically remapped when no `duration` is supplied.
5
+ * When neither option is supplied, the default is 4000ms (previously 4500ms), after entry finishes.
6
+ * To migrate, use `default` for 0–5000ms, `extended` for values above 5000ms, and `indefinite`
7
+ * for intentionally persistent notifications.
8
+ */
2
9
  timeout?: number;
3
10
  children?: React.ReactNode;
4
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SnackbarProvider.d.ts","sourceRoot":"","sources":["../../../src/Snackbar/SnackbarProvider.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EAAE,OAAc,EAAE,QAAQ,EAAE,EAAE,qBAAqB,+BAsB3F"}
1
+ {"version":3,"file":"SnackbarProvider.d.ts","sourceRoot":"","sources":["../../../src/Snackbar/SnackbarProvider.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,qBAAqB;IACpC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,qBAAqB,+BAsBpF"}
@@ -1,3 +1,7 @@
1
1
  export declare const SNACKBAR_ENTER_DURATION = 300;
2
2
  export declare const SNACKBAR_EXIT_DURATION = 150;
3
+ /** Default auto-dismiss duration for short feedback, in milliseconds. */
4
+ export declare const SNACKBAR_DEFAULT_DURATION = 4000;
5
+ /** Extended auto-dismiss duration for messages needing more reading time, in milliseconds. */
6
+ export declare const SNACKBAR_EXTENDED_DURATION = 6000;
3
7
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/Snackbar/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,sBAAsB,MAAM,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/Snackbar/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,yEAAyE;AACzE,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAC9C,8FAA8F;AAC9F,eAAO,MAAM,0BAA0B,OAAO,CAAC"}
@@ -1,4 +1,4 @@
1
1
  export { default } from './Snackbar';
2
- export type { SnackbarProps } from './Snackbar';
2
+ export type { SnackbarCreationProps } from './Snackbar.types';
3
3
  export type { SnackbarProviderProps } from './SnackbarProvider';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Snackbar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Snackbar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,YAAY,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC9D,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { SnackbarDuration } from './Snackbar.types';
2
+ type UseSnackbarAutoDismissOptions = {
3
+ duration?: SnackbarDuration;
4
+ onDismissRequest: () => void;
5
+ resetKey: number;
6
+ timeout?: number;
7
+ visible: boolean;
8
+ };
9
+ /** Starts after entry finishes and pauses on hover or focus, preserving the remaining time. */
10
+ declare const useSnackbarAutoDismiss: ({ duration, onDismissRequest, resetKey, timeout, visible, }: UseSnackbarAutoDismissOptions) => {
11
+ handleBlur: (event: React.FocusEvent<HTMLDivElement>) => void;
12
+ handleEntered: () => void;
13
+ handleFocus: () => void;
14
+ handleMouseEnter: () => void;
15
+ handleMouseLeave: () => void;
16
+ surfaceRef: import("react").RefObject<HTMLDivElement>;
17
+ };
18
+ export default useSnackbarAutoDismiss;
19
+ //# sourceMappingURL=useSnackbarAutoDismiss.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSnackbarAutoDismiss.d.ts","sourceRoot":"","sources":["../../../src/Snackbar/useSnackbarAutoDismiss.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,KAAK,6BAA6B,GAAG;IACnC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAqBF,+FAA+F;AAC/F,QAAA,MAAM,sBAAsB,GAAI,6DAM7B,6BAA6B;wBA0EpB,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC;;;;;;CAoC3C,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
@@ -79,7 +79,7 @@ export type { RadioOptionProps } from './_deprecated/RadioOption';
79
79
  export type { SegmentedControlProps, Segments } from './SegmentedControl';
80
80
  export type { SelectItem, SelectItemWithPlaceholder, SelectOptionItem, SelectProps, } from './_deprecated/Select';
81
81
  export type { SlidingPanelProps } from './SlidingPanel';
82
- export type { SnackbarProps, SnackbarProviderProps } from './Snackbar';
82
+ export type { SnackbarCreationProps, SnackbarProviderProps } from './Snackbar';
83
83
  export type { SnackbarContextType } from './Snackbar/SnackbarContext';
84
84
  export type { StatusIconProps, StatusIconSentiment } from './StatusIcon';
85
85
  export type { StickyProps } from './Sticky';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACjE,YAAY,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACtF,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACjE,YAAY,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC9E,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACjF,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,YAAY,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACxE,YAAY,EACV,cAAc,IAAI,WAAW,EAC7B,cAAc,EACd,UAAU,EACV,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,WAAW,IAAI,iBAAiB,EAChC,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAChF,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,YAAY,EACV,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,YAAY,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACxE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC1E,YAAY,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACtE,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,YAAY,EACV,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,SAAS,EACT,YAAY,EACZ,eAAe,EACf,SAAS,EACT,aAAa,EACb,cAAc,EACd,UAAU,EACV,eAAe,GAChB,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,YAAY,EACV,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC1F,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACnF,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,YAAY,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAC5E,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,YAAY,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,YAAY,EACV,oBAAoB,EACpB,eAAe,EACf,6BAA6B,EAC7B,qBAAqB,EACrB,gBAAgB,EAChB,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACrF,YAAY,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACxE,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,YAAY,EAAE,mBAAmB,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAChG,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,YAAY,EACV,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EAClB,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,yBAAyB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtF,YAAY,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AACrF,YAAY,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC5E,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AACtF,YAAY,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,YAAY,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AACzE,YAAY,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACxF,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,YAAY,EACV,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,YAAY,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACxE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACrE,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,YAAY,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC1E,YAAY,EACV,UAAU,EACV,yBAAyB,EACzB,gBAAgB,EAChB,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACvE,YAAY,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACzE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,YAAY,EACV,qBAAqB,EACrB,yBAAyB,EACzB,SAAS,IAAI,gBAAgB,GAC9B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,YAAY,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACxF,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/C,YAAY,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAClF,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACnE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACrF,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,YAAY,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,YAAY,EACV,UAAU,EACV,YAAY,EACZ,qBAAqB,EACrB,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,cAAc,EACd,cAAc,EACd,oBAAoB,GACrB,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,uBAAuB,EACvB,2BAA2B,EAC3B,mBAAmB,EACnB,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC;;GAEG;AACH,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EACL,WAAW,EACX,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEzC;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAEhE;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EACL,WAAW,EACX,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,MAAM,EACN,gBAAgB,EAChB,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,MAAM,EACN,SAAS,EACT,IAAI,EACJ,MAAM,EACN,KAAK,EACL,IAAI,EACJ,UAAU,EACV,OAAO,EACP,KAAK,GACN,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC;;GAEG;AACH,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,SAAS,EACT,YAAY,EACZ,qBAAqB,GACtB,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEjD;;GAEG;AACH,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@transferwise/components",
3
- "version": "0.0.0-experimental-cf159cc",
3
+ "version": "0.0.0-experimental-7990d38",
4
4
  "description": "Neptune React components",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -4,11 +4,15 @@ import { act, mockMatchMedia, render, screen, userEvent } from '../test-utils';
4
4
  import { WDS_LIVE_REGION_DELAY_MS } from '../common/constants';
5
5
  import { resetLiveRegionAnnouncementQueue } from '../common/LiveRegion/LiveRegion';
6
6
 
7
- import { SNACKBAR_EXIT_DURATION } from './constants';
8
- import { Snackbar } from './Snackbar';
9
- import type { SnackbarInternalProps } from './Snackbar.types';
10
-
11
- const TIMEOUT = 4500;
7
+ import {
8
+ SNACKBAR_DEFAULT_DURATION,
9
+ SNACKBAR_ENTER_DURATION,
10
+ SNACKBAR_EXIT_DURATION,
11
+ SNACKBAR_EXTENDED_DURATION,
12
+ } from './constants';
13
+ import { Snackbar, type SnackbarProps } from './Snackbar';
14
+
15
+ const TIMEOUT = SNACKBAR_DEFAULT_DURATION;
12
16
  const user = userEvent.setup({ advanceTimers: jest.advanceTimersByTimeAsync });
13
17
 
14
18
  mockMatchMedia();
@@ -19,8 +23,8 @@ const advanceTimers = (duration: number) => {
19
23
 
20
24
  const enableLiveRegion = () => advanceTimers(WDS_LIVE_REGION_DELAY_MS);
21
25
 
22
- const renderSnackbar = (props: Partial<SnackbarInternalProps> = {}) => {
23
- const snackbarProps: SnackbarInternalProps = {
26
+ const renderSnackbar = (props: Partial<SnackbarProps> = {}) => {
27
+ const snackbarProps: SnackbarProps = {
24
28
  text: 'Changes saved',
25
29
  timeout: TIMEOUT,
26
30
  announcementKey: 1,
@@ -32,6 +36,12 @@ const renderSnackbar = (props: Partial<SnackbarInternalProps> = {}) => {
32
36
  return { ...render(<Snackbar {...snackbarProps} />), snackbarProps };
33
37
  };
34
38
 
39
+ const renderEnteredSnackbar = (props: Partial<SnackbarProps> = {}) => {
40
+ const view = renderSnackbar(props);
41
+ advanceTimers(SNACKBAR_ENTER_DURATION);
42
+ return view;
43
+ };
44
+
35
45
  beforeEach(() => {
36
46
  resetLiveRegionAnnouncementQueue();
37
47
  jest.useFakeTimers();
@@ -89,7 +99,7 @@ describe('Snackbar controlled surface', () => {
89
99
 
90
100
  it('requests dismissal after the timeout without changing its own visibility', () => {
91
101
  const onDismissRequest = jest.fn();
92
- renderSnackbar({ onDismissRequest });
102
+ renderEnteredSnackbar({ onDismissRequest });
93
103
 
94
104
  advanceTimers(TIMEOUT - 1);
95
105
  expect(onDismissRequest).not.toHaveBeenCalled();
@@ -101,7 +111,7 @@ describe('Snackbar controlled surface', () => {
101
111
 
102
112
  it('clears the dismissal timer when it begins exiting', () => {
103
113
  const onDismissRequest = jest.fn();
104
- const { rerender, snackbarProps } = renderSnackbar({ onDismissRequest });
114
+ const { rerender, snackbarProps } = renderEnteredSnackbar({ onDismissRequest });
105
115
 
106
116
  rerender(<Snackbar {...snackbarProps} visible={false} />);
107
117
  advanceTimers(TIMEOUT);
@@ -123,6 +133,284 @@ describe('Snackbar controlled surface', () => {
123
133
  });
124
134
  });
125
135
 
136
+ describe('Snackbar duration', () => {
137
+ it('starts the full reading duration only after the entry transition finishes', () => {
138
+ const { snackbarProps } = renderSnackbar({ duration: 'default' });
139
+
140
+ advanceTimers(SNACKBAR_ENTER_DURATION);
141
+ advanceTimers(SNACKBAR_DEFAULT_DURATION - 1);
142
+ expect(snackbarProps.onDismissRequest).not.toHaveBeenCalled();
143
+ advanceTimers(1);
144
+ expect(snackbarProps.onDismissRequest).toHaveBeenCalledTimes(1);
145
+ });
146
+
147
+ it('does not start the timer when hover ends before entry finishes', async () => {
148
+ const { snackbarProps } = renderSnackbar({ duration: 'default' });
149
+ const message = screen.getByText('Changes saved');
150
+ await user.hover(message);
151
+ await user.unhover(message);
152
+
153
+ advanceTimers(SNACKBAR_ENTER_DURATION);
154
+ advanceTimers(SNACKBAR_DEFAULT_DURATION - 1);
155
+ expect(snackbarProps.onDismissRequest).not.toHaveBeenCalled();
156
+ advanceTimers(1);
157
+ expect(snackbarProps.onDismissRequest).toHaveBeenCalledTimes(1);
158
+ });
159
+
160
+ it('starts paused when keyboard focus enters during the entry transition', () => {
161
+ const { snackbarProps } = renderSnackbar({ duration: 'default', action: { label: 'Undo' } });
162
+ const action = screen.getByRole('button', { name: 'Undo' });
163
+ act(() => action.focus());
164
+
165
+ advanceTimers(SNACKBAR_ENTER_DURATION);
166
+ advanceTimers(SNACKBAR_DEFAULT_DURATION * 2);
167
+ expect(snackbarProps.onDismissRequest).not.toHaveBeenCalled();
168
+
169
+ act(() => action.blur());
170
+ advanceTimers(SNACKBAR_DEFAULT_DURATION - 1);
171
+ expect(snackbarProps.onDismissRequest).not.toHaveBeenCalled();
172
+ advanceTimers(1);
173
+ expect(snackbarProps.onDismissRequest).toHaveBeenCalledTimes(1);
174
+ });
175
+
176
+ it('does not start the timer when focus leaves before entry finishes', () => {
177
+ const { snackbarProps } = renderSnackbar({ duration: 'default', action: { label: 'Undo' } });
178
+ const action = screen.getByRole('button', { name: 'Undo' });
179
+ act(() => action.focus());
180
+ act(() => action.blur());
181
+
182
+ advanceTimers(SNACKBAR_ENTER_DURATION);
183
+ advanceTimers(SNACKBAR_DEFAULT_DURATION - 1);
184
+ expect(snackbarProps.onDismissRequest).not.toHaveBeenCalled();
185
+ advanceTimers(1);
186
+ expect(snackbarProps.onDismissRequest).toHaveBeenCalledTimes(1);
187
+ });
188
+
189
+ it('uses four seconds when no duration or legacy timeout is supplied', () => {
190
+ const { snackbarProps } = renderEnteredSnackbar({ timeout: undefined });
191
+
192
+ advanceTimers(SNACKBAR_DEFAULT_DURATION - 1);
193
+ expect(snackbarProps.onDismissRequest).not.toHaveBeenCalled();
194
+ advanceTimers(1);
195
+ expect(snackbarProps.onDismissRequest).toHaveBeenCalledTimes(1);
196
+ });
197
+
198
+ it.each([
199
+ ['default', SNACKBAR_DEFAULT_DURATION],
200
+ ['extended', SNACKBAR_EXTENDED_DURATION],
201
+ ] as const)('uses the %s duration instead of the legacy timeout', (duration, milliseconds) => {
202
+ const { snackbarProps } = renderEnteredSnackbar({ duration, timeout: 1 });
203
+
204
+ advanceTimers(milliseconds - 1);
205
+ expect(snackbarProps.onDismissRequest).not.toHaveBeenCalled();
206
+ advanceTimers(1);
207
+ expect(snackbarProps.onDismissRequest).toHaveBeenCalledTimes(1);
208
+ });
209
+
210
+ it.each([1000, 4500, 5000, 5001, 9000])(
211
+ 'preserves an explicit legacy timeout of %sms',
212
+ (timeout) => {
213
+ const { snackbarProps } = renderEnteredSnackbar({ timeout });
214
+
215
+ advanceTimers(timeout - 1);
216
+ expect(snackbarProps.onDismissRequest).not.toHaveBeenCalled();
217
+ advanceTimers(1);
218
+ expect(snackbarProps.onDismissRequest).toHaveBeenCalledTimes(1);
219
+ },
220
+ );
221
+
222
+ it('preserves a zero legacy timeout rather than using the default duration', () => {
223
+ const { snackbarProps } = renderEnteredSnackbar({ timeout: 0 });
224
+
225
+ advanceTimers(0);
226
+
227
+ expect(snackbarProps.onDismissRequest).toHaveBeenCalledTimes(1);
228
+ });
229
+
230
+ it('does not auto-dismiss an indefinite Snackbar, even with a legacy timeout', () => {
231
+ const { snackbarProps } = renderEnteredSnackbar({ duration: 'indefinite', timeout: 1 });
232
+
233
+ advanceTimers(60_000);
234
+
235
+ expect(snackbarProps.onDismissRequest).not.toHaveBeenCalled();
236
+ expect(jest.getTimerCount()).toBe(0);
237
+ });
238
+
239
+ it('pauses on hover and resumes with only the remaining time', async () => {
240
+ const { snackbarProps } = renderEnteredSnackbar({ duration: 'default' });
241
+ const message = screen.getByText('Changes saved');
242
+
243
+ advanceTimers(2000);
244
+ await user.hover(message);
245
+ advanceTimers(10_000);
246
+ expect(snackbarProps.onDismissRequest).not.toHaveBeenCalled();
247
+
248
+ await user.unhover(message);
249
+ advanceTimers(1999);
250
+ expect(snackbarProps.onDismissRequest).not.toHaveBeenCalled();
251
+ advanceTimers(1);
252
+ expect(snackbarProps.onDismissRequest).toHaveBeenCalledTimes(1);
253
+ });
254
+
255
+ it('pauses on keyboard focus and resumes when focus leaves', () => {
256
+ const { snackbarProps } = renderEnteredSnackbar({
257
+ duration: 'default',
258
+ action: { label: 'Undo' },
259
+ });
260
+
261
+ advanceTimers(2000);
262
+ act(() => screen.getByRole('button', { name: 'Undo' }).focus());
263
+ advanceTimers(10_000);
264
+ expect(snackbarProps.onDismissRequest).not.toHaveBeenCalled();
265
+
266
+ act(() => screen.getByRole('button', { name: 'Undo' }).blur());
267
+ advanceTimers(1999);
268
+ expect(snackbarProps.onDismissRequest).not.toHaveBeenCalled();
269
+ advanceTimers(1);
270
+ expect(snackbarProps.onDismissRequest).toHaveBeenCalledTimes(1);
271
+ });
272
+
273
+ it('stays paused when focus moves between Snackbar controls', () => {
274
+ const { snackbarProps } = renderEnteredSnackbar({
275
+ duration: 'default',
276
+ action: { label: 'Undo' },
277
+ });
278
+
279
+ advanceTimers(2000);
280
+ act(() => screen.getByRole('button', { name: 'Undo' }).focus());
281
+ act(() => screen.getByRole('button', { name: 'Close' }).focus());
282
+ advanceTimers(10_000);
283
+ expect(snackbarProps.onDismissRequest).not.toHaveBeenCalled();
284
+
285
+ act(() => screen.getByRole('button', { name: 'Close' }).blur());
286
+ advanceTimers(2000);
287
+ expect(snackbarProps.onDismissRequest).toHaveBeenCalledTimes(1);
288
+ });
289
+
290
+ it.each(['hover', 'focus'] as const)(
291
+ 'resumes only after both hover and focus end, with %s ending first',
292
+ async (firstToEnd) => {
293
+ const { snackbarProps } = renderEnteredSnackbar({
294
+ duration: 'default',
295
+ action: { label: 'Undo' },
296
+ });
297
+ const message = screen.getByText('Changes saved');
298
+ const action = screen.getByRole('button', { name: 'Undo' });
299
+
300
+ advanceTimers(2000);
301
+ await user.hover(message);
302
+ act(() => action.focus());
303
+ if (firstToEnd === 'hover') {
304
+ await user.unhover(message);
305
+ } else {
306
+ act(() => action.blur());
307
+ }
308
+ advanceTimers(10_000);
309
+ expect(snackbarProps.onDismissRequest).not.toHaveBeenCalled();
310
+
311
+ if (firstToEnd === 'hover') {
312
+ act(() => action.blur());
313
+ } else {
314
+ await user.unhover(message);
315
+ }
316
+ advanceTimers(1999);
317
+ expect(snackbarProps.onDismissRequest).not.toHaveBeenCalled();
318
+ advanceTimers(1);
319
+ expect(snackbarProps.onDismissRequest).toHaveBeenCalledTimes(1);
320
+ },
321
+ );
322
+
323
+ it('keeps the remaining time across repeated pauses', async () => {
324
+ const { snackbarProps } = renderEnteredSnackbar({ duration: 'default' });
325
+ const message = screen.getByText('Changes saved');
326
+
327
+ advanceTimers(1000);
328
+ await user.hover(message);
329
+ advanceTimers(10_000);
330
+ await user.unhover(message);
331
+ advanceTimers(1000);
332
+ await user.hover(message);
333
+ advanceTimers(10_000);
334
+ await user.unhover(message);
335
+ advanceTimers(1999);
336
+ expect(snackbarProps.onDismissRequest).not.toHaveBeenCalled();
337
+ advanceTimers(1);
338
+ expect(snackbarProps.onDismissRequest).toHaveBeenCalledTimes(1);
339
+ });
340
+
341
+ it('cleans up a resumed timer when unmounted', async () => {
342
+ const { unmount, snackbarProps } = renderEnteredSnackbar({ duration: 'default' });
343
+ const message = screen.getByText('Changes saved');
344
+
345
+ advanceTimers(1000);
346
+ await user.hover(message);
347
+ await user.unhover(message);
348
+ unmount();
349
+ advanceTimers(10_000);
350
+
351
+ expect(snackbarProps.onDismissRequest).not.toHaveBeenCalled();
352
+ expect(jest.getTimerCount()).toBe(0);
353
+ });
354
+
355
+ it('starts paused if the surface is already hovered when shown', async () => {
356
+ const matches = jest
357
+ .spyOn(HTMLElement.prototype, 'matches')
358
+ .mockImplementation((selector) => selector === ':hover');
359
+ let view: ReturnType<typeof renderSnackbar>;
360
+ try {
361
+ view = renderEnteredSnackbar({ duration: 'default' });
362
+ } finally {
363
+ matches.mockRestore();
364
+ }
365
+
366
+ advanceTimers(10_000);
367
+ expect(view.snackbarProps.onDismissRequest).not.toHaveBeenCalled();
368
+ const message = screen.getByText('Changes saved');
369
+ await user.hover(message);
370
+ await user.unhover(message);
371
+ advanceTimers(SNACKBAR_DEFAULT_DURATION - 1);
372
+ expect(view.snackbarProps.onDismissRequest).not.toHaveBeenCalled();
373
+ advanceTimers(1);
374
+ expect(view.snackbarProps.onDismissRequest).toHaveBeenCalledTimes(1);
375
+ });
376
+
377
+ it('does not restart a paused timer while the Snackbar is exiting', async () => {
378
+ const { rerender, snackbarProps } = renderEnteredSnackbar({ duration: 'default' });
379
+ const message = screen.getByText('Changes saved');
380
+ advanceTimers(1000);
381
+ await user.hover(message);
382
+
383
+ rerender(<Snackbar {...snackbarProps} visible={false} />);
384
+ await user.unhover(message);
385
+ advanceTimers(10_000);
386
+
387
+ expect(snackbarProps.onDismissRequest).not.toHaveBeenCalled();
388
+ expect(jest.getTimerCount()).toBe(0);
389
+ });
390
+
391
+ it('clears a running timer when the duration becomes indefinite', () => {
392
+ const { rerender, snackbarProps } = renderEnteredSnackbar({ duration: 'default' });
393
+ advanceTimers(2000);
394
+
395
+ rerender(<Snackbar {...snackbarProps} duration="indefinite" />);
396
+ advanceTimers(60_000);
397
+
398
+ expect(snackbarProps.onDismissRequest).not.toHaveBeenCalled();
399
+ expect(jest.getTimerCount()).toBe(0);
400
+ });
401
+
402
+ it('resets the duration when a new announcement key is supplied', () => {
403
+ const { rerender, snackbarProps } = renderEnteredSnackbar({ duration: 'default' });
404
+ advanceTimers(2000);
405
+
406
+ rerender(<Snackbar {...snackbarProps} announcementKey={2} />);
407
+ advanceTimers(SNACKBAR_DEFAULT_DURATION - 1);
408
+ expect(snackbarProps.onDismissRequest).not.toHaveBeenCalled();
409
+ advanceTimers(1);
410
+ expect(snackbarProps.onDismissRequest).toHaveBeenCalledTimes(1);
411
+ });
412
+ });
413
+
126
414
  describe('Snackbar live region', () => {
127
415
  it('announces the notification as a polite status message', () => {
128
416
  renderSnackbar();