@tamagui/toast 1.46.2 → 1.47.1

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/toast",
3
- "version": "1.46.2",
3
+ "version": "1.47.1",
4
4
  "source": "src/index.ts",
5
5
  "types": "./types/index.d.ts",
6
6
  "main": "dist/cjs",
@@ -31,17 +31,17 @@
31
31
  }
32
32
  },
33
33
  "dependencies": {
34
- "@tamagui/animate-presence": "1.46.2",
35
- "@tamagui/compose-refs": "1.46.2",
36
- "@tamagui/core": "1.46.2",
37
- "@tamagui/create-context": "1.46.2",
38
- "@tamagui/dismissable": "1.46.2",
39
- "@tamagui/polyfill-dev": "1.46.2",
40
- "@tamagui/portal": "1.46.2",
41
- "@tamagui/stacks": "1.46.2",
42
- "@tamagui/text": "1.46.2",
43
- "@tamagui/use-controllable-state": "1.46.2",
44
- "@tamagui/visually-hidden": "1.46.2"
34
+ "@tamagui/animate-presence": "1.47.1",
35
+ "@tamagui/compose-refs": "1.47.1",
36
+ "@tamagui/core": "1.47.1",
37
+ "@tamagui/create-context": "1.47.1",
38
+ "@tamagui/dismissable": "1.47.1",
39
+ "@tamagui/polyfill-dev": "1.47.1",
40
+ "@tamagui/portal": "1.47.1",
41
+ "@tamagui/stacks": "1.47.1",
42
+ "@tamagui/text": "1.47.1",
43
+ "@tamagui/use-controllable-state": "1.47.1",
44
+ "@tamagui/visually-hidden": "1.47.1"
45
45
  },
46
46
  "peerDependencies": {
47
47
  "burnt": "^0.10.0",
@@ -49,7 +49,7 @@
49
49
  "react-native": "*"
50
50
  },
51
51
  "devDependencies": {
52
- "@tamagui/build": "1.46.2",
52
+ "@tamagui/build": "1.47.1",
53
53
  "burnt": "^0.10.0",
54
54
  "react": "^18.2.0",
55
55
  "react-native": "^0.72.1"
@@ -1,145 +0,0 @@
1
- import {
2
- composeEventHandlers,
3
- styled,
4
- themeable,
5
- useEvent,
6
- withStaticProperties
7
- } from "@tamagui/core";
8
- import { ThemeableStack } from "@tamagui/stacks";
9
- import { SizableText } from "@tamagui/text";
10
- import { useControllableState } from "@tamagui/use-controllable-state";
11
- import * as React from "react";
12
- import { TOAST_NAME } from "./constants";
13
- import { ToastAnnounceExclude } from "./ToastAnnounce";
14
- import {
15
- useToast,
16
- useToastController,
17
- useToastState
18
- } from "./ToastImperative";
19
- import {
20
- ToastImpl,
21
- ToastImplFrame,
22
- useToastInteractiveContext
23
- } from "./ToastImpl";
24
- import {
25
- ToastProvider,
26
- createToastScope
27
- } from "./ToastProvider";
28
- import { ToastViewport } from "./ToastViewport";
29
- const TITLE_NAME = "ToastTitle";
30
- const ToastTitle = styled(SizableText, {
31
- name: TITLE_NAME,
32
- variants: {
33
- unstyled: {
34
- false: {
35
- color: "$color",
36
- size: "$4"
37
- }
38
- }
39
- },
40
- defaultVariants: {
41
- unstyled: false
42
- }
43
- });
44
- ToastTitle.displayName = TITLE_NAME;
45
- const DESCRIPTION_NAME = "ToastDescription";
46
- const ToastDescription = styled(SizableText, {
47
- name: DESCRIPTION_NAME,
48
- variants: {
49
- unstyled: {
50
- false: {
51
- color: "$color11",
52
- size: "$1"
53
- }
54
- }
55
- },
56
- defaultVariants: {
57
- unstyled: false
58
- }
59
- });
60
- ToastDescription.displayName = DESCRIPTION_NAME;
61
- const ACTION_NAME = "ToastAction";
62
- const ToastAction = React.forwardRef(
63
- (props, forwardedRef) => {
64
- const { altText, ...actionProps } = props;
65
- if (!altText)
66
- return null;
67
- return <ToastAnnounceExclude altText={altText} asChild><ToastClose {...actionProps} ref={forwardedRef} /></ToastAnnounceExclude>;
68
- }
69
- );
70
- ToastAction.propTypes = {
71
- altText(props) {
72
- if (!props.altText) {
73
- return new Error(`Missing prop \`altText\` expected on \`${ACTION_NAME}\``);
74
- }
75
- return null;
76
- }
77
- };
78
- ToastAction.displayName = ACTION_NAME;
79
- const CLOSE_NAME = "ToastClose";
80
- const ToastCloseFrame = styled(ThemeableStack, {
81
- name: CLOSE_NAME,
82
- tag: "button"
83
- });
84
- const ToastClose = React.forwardRef(
85
- (props, forwardedRef) => {
86
- const { __scopeToast, ...closeProps } = props;
87
- const interactiveContext = useToastInteractiveContext(CLOSE_NAME, __scopeToast);
88
- return <ToastAnnounceExclude asChild><ToastCloseFrame
89
- accessibilityLabel="Dialog Close"
90
- {...closeProps}
91
- ref={forwardedRef}
92
- onPress={composeEventHandlers(props.onPress, interactiveContext.onClose)}
93
- /></ToastAnnounceExclude>;
94
- }
95
- );
96
- ToastClose.displayName = CLOSE_NAME;
97
- const ToastComponent = React.forwardRef(
98
- ToastImplFrame.extractable((props, forwardedRef) => {
99
- const { forceMount, open: openProp, defaultOpen, onOpenChange, ...toastProps } = props;
100
- const [open, setOpen] = useControllableState({
101
- prop: openProp,
102
- defaultProp: defaultOpen ?? true,
103
- onChange: onOpenChange,
104
- strategy: "most-recent-wins"
105
- });
106
- const id = React.useId();
107
- const onPause = useEvent(props.onPause);
108
- const onResume = useEvent(props.onResume);
109
- const shouldShow = forceMount || open;
110
- if (!shouldShow)
111
- return null;
112
- return <ToastImpl
113
- id={id}
114
- open={open}
115
- {...toastProps}
116
- ref={forwardedRef}
117
- onClose={() => setOpen(false)}
118
- onPause={onPause}
119
- onResume={onResume}
120
- onSwipeEnd={composeEventHandlers(props.onSwipeEnd, (event) => {
121
- setOpen(false);
122
- })}
123
- />;
124
- })
125
- );
126
- ToastComponent.displayName = TOAST_NAME;
127
- const Toast = withStaticProperties(
128
- themeable(ToastComponent, ToastImplFrame.staticConfig),
129
- {
130
- Title: ToastTitle,
131
- Description: ToastDescription,
132
- Action: ToastAction,
133
- Close: ToastClose
134
- }
135
- );
136
- export {
137
- Toast,
138
- ToastProvider,
139
- ToastViewport,
140
- createToastScope,
141
- useToast,
142
- useToastController,
143
- useToastState
144
- };
145
- //# sourceMappingURL=Toast.mjs.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/Toast.tsx"],
4
- "mappings": "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",
5
- "names": []
6
- }
@@ -1,62 +0,0 @@
1
- import {
2
- Stack,
3
- Text,
4
- styled,
5
- useEvent,
6
- useIsomorphicLayoutEffect
7
- } from "@tamagui/core";
8
- import { Portal } from "@tamagui/portal";
9
- import { VisuallyHidden } from "@tamagui/visually-hidden";
10
- import * as React from "react";
11
- import { TOAST_NAME } from "./constants";
12
- import { useToastProviderContext } from "./ToastProvider";
13
- const ToastAnnounceExcludeFrame = styled(Stack, {
14
- name: "ToastAnnounceExclude"
15
- });
16
- const ToastAnnounceExclude = React.forwardRef(
17
- (props, forwardedRef) => {
18
- const { __scopeToast, altText, ...announceExcludeProps } = props;
19
- return <ToastAnnounceExcludeFrame
20
- data-toast-announce-exclude=""
21
- data-toast-announce-alt={altText || void 0}
22
- {...announceExcludeProps}
23
- ref={forwardedRef}
24
- />;
25
- }
26
- );
27
- const ToastAnnounce = (props) => {
28
- const { __scopeToast, children, ...announceProps } = props;
29
- const context = useToastProviderContext(TOAST_NAME, __scopeToast);
30
- const [renderAnnounceText, setRenderAnnounceText] = React.useState(false);
31
- const [isAnnounced, setIsAnnounced] = React.useState(false);
32
- useNextFrame(() => setRenderAnnounceText(true));
33
- React.useEffect(() => {
34
- const timer = setTimeout(() => setIsAnnounced(true), 1e3);
35
- return () => clearTimeout(timer);
36
- }, []);
37
- return isAnnounced ? null : <Portal asChild><VisuallyHidden {...announceProps}>{renderAnnounceText && <Text>
38
- {context.label}
39
- {" "}
40
- {children}
41
- </Text>}</VisuallyHidden></Portal>;
42
- };
43
- function useNextFrame(callback = () => {
44
- }) {
45
- const fn = useEvent(callback);
46
- useIsomorphicLayoutEffect(() => {
47
- let raf1 = 0;
48
- let raf2 = 0;
49
- raf1 = requestAnimationFrame(() => {
50
- raf2 = requestAnimationFrame(fn);
51
- });
52
- return () => {
53
- cancelAnimationFrame(raf1);
54
- cancelAnimationFrame(raf2);
55
- };
56
- }, [fn]);
57
- }
58
- export {
59
- ToastAnnounce,
60
- ToastAnnounceExclude
61
- };
62
- //# sourceMappingURL=ToastAnnounce.mjs.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/ToastAnnounce.tsx"],
4
- "mappings": "AAAA;AAAA,EAEE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,cAAc;AACvB,SAAS,sBAAsB;AAC/B,YAAY,WAAW;AAEvB,SAAS,kBAAkB;AAC3B,SAAsB,+BAA+B;AAErD,MAAM,4BAA4B,OAAO,OAAO;AAAA,EAC9C,MAAM;AACR,CAAC;AAMD,MAAM,uBAAuB,MAAM;AAAA,EACjC,CAAC,OAA+C,iBAAiB;AAC/D,UAAM,EAAE,cAAc,SAAS,GAAG,qBAAqB,IAAI;AAE3D,WACE,CAAC;AAAA,MACC,4BAA4B;AAAA,MAC5B,yBAAyB,WAAW;AAAA,UAChC;AAAA,MACJ,KAAK;AAAA,IACP;AAAA,EAEJ;AACF;AAQA,MAAM,gBAA8C,CAClD,UACG;AACH,QAAM,EAAE,cAAc,UAAU,GAAG,cAAc,IAAI;AACrD,QAAM,UAAU,wBAAwB,YAAY,YAAY;AAChE,QAAM,CAAC,oBAAoB,qBAAqB,IAAI,MAAM,SAAS,KAAK;AACxE,QAAM,CAAC,aAAa,cAAc,IAAI,MAAM,SAAS,KAAK;AAG1D,eAAa,MAAM,sBAAsB,IAAI,CAAC;AAG9C,QAAM,UAAU,MAAM;AACpB,UAAM,QAAQ,WAAW,MAAM,eAAe,IAAI,GAAG,GAAI;AACzD,WAAO,MAAM,aAAa,KAAK;AAAA,EACjC,GAAG,CAAC,CAAC;AAEL,SAAO,cAAc,OACnB,CAAC,OAAO,QACN,CAAC,mBAAmB,gBACjB,sBACC,CAAC;AAAA,KACE,QAAQ;AAAA,KAAM;AAAA,KAAE;AAAA,EACnB,EAFC,MAIL,EANC,eAOH,EARC;AAUL;AAIA,SAAS,aAAa,WAAW,MAAM;AAAC,GAAG;AACzC,QAAM,KAAK,SAAS,QAAQ;AAC5B,4BAA0B,MAAM;AAC9B,QAAI,OAAO;AACX,QAAI,OAAO;AACX,WAAO,sBAAsB,MAAM;AACjC,aAAO,sBAAsB,EAAE;AAAA,IACjC,CAAC;AACD,WAAO,MAAM;AACX,2BAAqB,IAAI;AACzB,2BAAqB,IAAI;AAAA,IAC3B;AAAA,EACF,GAAG,CAAC,EAAE,CAAC;AACT;",
5
- "names": []
6
- }
@@ -1,73 +0,0 @@
1
- import { isWeb } from "@tamagui/core";
2
- import React, { createContext, useContext, useMemo, useRef } from "react";
3
- import { Platform } from "react-native";
4
- import { createNativeToast } from "./createNativeToast";
5
- const ToastContext = createContext({});
6
- const ToastCurrentContext = createContext(null);
7
- const useToastController = () => {
8
- return useContext(ToastContext);
9
- };
10
- const useToastState = () => {
11
- return useContext(ToastCurrentContext);
12
- };
13
- const useToast = () => {
14
- return {
15
- ...useToastController(),
16
- currentToast: useToastState()
17
- };
18
- };
19
- const ToastImperativeProvider = ({
20
- children,
21
- options
22
- }) => {
23
- const counterRef = useRef(0);
24
- const [toast, setToast] = React.useState(null);
25
- const [lastNativeToastRef, setLastNativeToastRef] = React.useState(null);
26
- const show = React.useCallback(
27
- (title, showOptions) => {
28
- const native = showOptions?.native ?? options.native;
29
- const isWebNative = Array.isArray(native) ? native.includes("web") : native === "web";
30
- const isMobileNative = Array.isArray(native) ? native.includes("mobile") : native === "mobile";
31
- const isAndroidNative = isMobileNative || (Array.isArray(native) ? native.includes("android") : native === "android");
32
- const isIosNative = isMobileNative || (Array.isArray(native) ? native.includes("ios") : native === "ios");
33
- const isHandledNatively = native === true || isWeb && isWebNative || !isWeb && isMobileNative || Platform.OS === "android" && isAndroidNative || Platform.OS === "ios" && isIosNative;
34
- if (isHandledNatively) {
35
- const nativeToastResult = createNativeToast(title, showOptions ?? {});
36
- if (typeof nativeToastResult === "object" && nativeToastResult.nativeToastRef) {
37
- setLastNativeToastRef(nativeToastResult.nativeToastRef);
38
- }
39
- }
40
- counterRef.current++;
41
- setToast({
42
- ...showOptions?.customData,
43
- ...showOptions,
44
- viewportName: showOptions?.viewportName ?? "default",
45
- title,
46
- id: counterRef.current.toString(),
47
- isHandledNatively
48
- });
49
- return true;
50
- },
51
- [setToast, options.native]
52
- );
53
- const hide = React.useCallback(() => {
54
- lastNativeToastRef?.close();
55
- setToast(null);
56
- }, [setToast, lastNativeToastRef]);
57
- const contextValue = useMemo(() => {
58
- return {
59
- show,
60
- hide,
61
- nativeToast: lastNativeToastRef,
62
- options
63
- };
64
- }, [show, hide, lastNativeToastRef, JSON.stringify(options || null)]);
65
- return <ToastContext.Provider value={contextValue}><ToastCurrentContext.Provider value={toast}>{children}</ToastCurrentContext.Provider></ToastContext.Provider>;
66
- };
67
- export {
68
- ToastImperativeProvider,
69
- useToast,
70
- useToastController,
71
- useToastState
72
- };
73
- //# sourceMappingURL=ToastImperative.mjs.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/ToastImperative.tsx"],
4
- "mappings": "AAAA,SAAsC,aAAa;AACnD,OAAO,SAAS,eAAe,YAAY,SAAS,cAAc;AAClE,SAAS,gBAAgB;AAEzB,SAAS,yBAAyB;AA4ElC,MAAM,eAAe,cAA6B,CAAC,CAAQ;AAC3D,MAAM,sBAAsB,cAAgC,IAAI;AAEzD,MAAM,qBAAqB,MAAM;AACtC,SAAO,WAAW,YAAY;AAChC;AAEO,MAAM,gBAAgB,MAAM;AACjC,SAAO,WAAW,mBAAmB;AACvC;AAGO,MAAM,WAAW,MAAM;AAC5B,SAAO;AAAA,IACL,GAAG,mBAAmB;AAAA,IACtB,cAAc,cAAc;AAAA,EAC9B;AACF;AAUO,MAAM,0BAA0B,CAAC;AAAA,EACtC;AAAA,EACA;AACF,MAAoC;AAClC,QAAM,aAAa,OAAO,CAAC;AAE3B,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,SAA2B,IAAI;AAE/D,QAAM,CAAC,oBAAoB,qBAAqB,IAC9C,MAAM,SAAuC,IAAI;AAEnD,QAAM,OAAO,MAAM;AAAA,IACjB,CAAC,OAAO,gBAAgB;AACtB,YAAM,SAAS,aAAa,UAAU,QAAQ;AAC9C,YAAM,cAAc,MAAM,QAAQ,MAAM,IACpC,OAAO,SAAS,KAAK,IACrB,WAAW;AACf,YAAM,iBAAiB,MAAM,QAAQ,MAAM,IACvC,OAAO,SAAS,QAAQ,IACxB,WAAW;AACf,YAAM,kBACJ,mBACC,MAAM,QAAQ,MAAM,IAAI,OAAO,SAAS,SAAS,IAAI,WAAW;AACnE,YAAM,cACJ,mBACC,MAAM,QAAQ,MAAM,IAAI,OAAO,SAAS,KAAK,IAAI,WAAW;AAE/D,YAAM,oBACJ,WAAW,QACV,SAAS,eACT,CAAC,SAAS,kBACV,SAAS,OAAO,aAAa,mBAC7B,SAAS,OAAO,SAAS;AAE5B,UAAI,mBAAmB;AACrB,cAAM,oBAAoB,kBAAkB,OAAO,eAAe,CAAC,CAAC;AACpE,YAAI,OAAO,sBAAsB,YAAY,kBAAkB,gBAAgB;AAC7E,gCAAsB,kBAAkB,cAAc;AAAA,QACxD;AAAA,MACF;AACA,iBAAW;AACX,eAAS;AAAA,QACP,GAAG,aAAa;AAAA,QAChB,GAAG;AAAA,QACH,cAAc,aAAa,gBAAgB;AAAA,QAC3C;AAAA,QACA,IAAI,WAAW,QAAQ,SAAS;AAAA,QAChC;AAAA,MACF,CAAC;AACD,aAAO;AAAA,IACT;AAAA,IACA,CAAC,UAAU,QAAQ,MAAM;AAAA,EAC3B;AACA,QAAM,OAAO,MAAM,YAAY,MAAM;AACnC,wBAAoB,MAAM;AAC1B,aAAS,IAAI;AAAA,EACf,GAAG,CAAC,UAAU,kBAAkB,CAAC;AAEjC,QAAM,eAAe,QAAQ,MAAM;AACjC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,aAAa;AAAA,MACb;AAAA,IACF;AAAA,EACF,GAAG,CAAC,MAAM,MAAM,oBAAoB,KAAK,UAAU,WAAW,IAAI,CAAC,CAAC;AAEpE,SACE,CAAC,aAAa,SAAS,OAAO,cAC5B,CAAC,oBAAoB,SAAS,OAAO,QAClC,SACH,EAFC,oBAAoB,SAGvB,EAJC,aAAa;AAMlB;",
5
- "names": []
6
- }
@@ -1,337 +0,0 @@
1
- import { useIsPresent } from "@tamagui/animate-presence";
2
- import { useComposedRefs } from "@tamagui/compose-refs";
3
- import {
4
- Theme,
5
- composeEventHandlers,
6
- isWeb,
7
- styled,
8
- useAnimationDriver,
9
- useEvent,
10
- useThemeName
11
- } from "@tamagui/core";
12
- import { Dismissable } from "@tamagui/dismissable";
13
- import { PortalItem } from "@tamagui/portal";
14
- import { ThemeableStack } from "@tamagui/stacks";
15
- import * as React from "react";
16
- import {
17
- PanResponder
18
- } from "react-native";
19
- import { TOAST_NAME } from "./constants";
20
- import { ToastAnnounce } from "./ToastAnnounce";
21
- import {
22
- Collection,
23
- createToastContext,
24
- useToastProviderContext
25
- } from "./ToastProvider";
26
- import { VIEWPORT_PAUSE, VIEWPORT_RESUME } from "./ToastViewport";
27
- const ToastImplFrame = styled(ThemeableStack, {
28
- name: "ToastImpl",
29
- focusable: true,
30
- variants: {
31
- unstyled: {
32
- false: {
33
- focusStyle: {
34
- outlineStyle: "solid",
35
- outlineWidth: 2,
36
- outlineColor: "$borderColorHover"
37
- },
38
- backgroundColor: "$color6",
39
- borderRadius: "$10",
40
- paddingHorizontal: "$5",
41
- paddingVertical: "$2",
42
- marginHorizontal: "auto",
43
- marginVertical: "$1"
44
- }
45
- }
46
- },
47
- defaultVariants: {
48
- unstyled: false
49
- }
50
- });
51
- const [ToastInteractiveProvider, useToastInteractiveContext] = createToastContext(
52
- TOAST_NAME,
53
- {
54
- onClose() {
55
- }
56
- }
57
- );
58
- const ToastImpl = React.forwardRef(
59
- (props, forwardedRef) => {
60
- const {
61
- __scopeToast,
62
- type = "foreground",
63
- duration: durationProp,
64
- open,
65
- onClose,
66
- onEscapeKeyDown,
67
- onPause,
68
- onResume,
69
- onSwipeStart,
70
- onSwipeMove,
71
- onSwipeCancel,
72
- onSwipeEnd,
73
- viewportName = "default",
74
- ...toastProps
75
- } = props;
76
- const isPresent = useIsPresent();
77
- const context = useToastProviderContext(TOAST_NAME, __scopeToast);
78
- const [node, setNode] = React.useState(null);
79
- const composedRefs = useComposedRefs(forwardedRef, (node2) => setNode(node2));
80
- const duration = durationProp || context.duration;
81
- const closeTimerStartTimeRef = React.useRef(0);
82
- const closeTimerRemainingTimeRef = React.useRef(duration);
83
- const closeTimerRef = React.useRef(0);
84
- const { onToastAdd, onToastRemove } = context;
85
- const viewport = React.useMemo(() => {
86
- return context.viewports[viewportName];
87
- }, [context.viewports, viewportName]);
88
- const handleClose = useEvent(() => {
89
- if (!isPresent) {
90
- return;
91
- }
92
- if (isWeb) {
93
- const isFocusInToast = node?.contains(document.activeElement);
94
- if (isFocusInToast)
95
- viewport?.focus();
96
- }
97
- onClose();
98
- });
99
- const startTimer = React.useCallback(
100
- (duration2) => {
101
- if (!duration2 || duration2 === Infinity)
102
- return;
103
- clearTimeout(closeTimerRef.current);
104
- closeTimerStartTimeRef.current = (/* @__PURE__ */ new Date()).getTime();
105
- closeTimerRef.current = setTimeout(handleClose, duration2);
106
- },
107
- [handleClose]
108
- );
109
- const handleResume = React.useCallback(() => {
110
- startTimer(closeTimerRemainingTimeRef.current);
111
- onResume?.();
112
- }, [onResume, startTimer]);
113
- const handlePause = React.useCallback(() => {
114
- const elapsedTime = (/* @__PURE__ */ new Date()).getTime() - closeTimerStartTimeRef.current;
115
- closeTimerRemainingTimeRef.current = closeTimerRemainingTimeRef.current - elapsedTime;
116
- window.clearTimeout(closeTimerRef.current);
117
- onPause?.();
118
- }, [onPause]);
119
- React.useEffect(() => {
120
- if (!isWeb)
121
- return;
122
- if (viewport) {
123
- viewport.addEventListener(VIEWPORT_PAUSE, handlePause);
124
- viewport.addEventListener(VIEWPORT_RESUME, handleResume);
125
- return () => {
126
- viewport.removeEventListener(VIEWPORT_PAUSE, handlePause);
127
- viewport.removeEventListener(VIEWPORT_RESUME, handleResume);
128
- };
129
- }
130
- }, [viewport, duration, onPause, onResume, startTimer]);
131
- React.useEffect(() => {
132
- if (open && !context.isClosePausedRef.current) {
133
- startTimer(duration);
134
- }
135
- }, [open, duration, context.isClosePausedRef, startTimer]);
136
- React.useEffect(() => {
137
- onToastAdd();
138
- return () => onToastRemove();
139
- }, [onToastAdd, onToastRemove]);
140
- const announceTextContent = React.useMemo(() => {
141
- if (!isWeb)
142
- return null;
143
- return node ? getAnnounceTextContent(node) : null;
144
- }, [node]);
145
- const isHorizontalSwipe = ["left", "right", "horizontal"].includes(
146
- context.swipeDirection
147
- );
148
- const driver = useAnimationDriver();
149
- if (!driver) {
150
- throw new Error("Must set animations in tamagui.config.ts");
151
- }
152
- const { useAnimatedNumber, useAnimatedNumberStyle } = driver;
153
- const animatedNumber = useAnimatedNumber(0);
154
- const AnimatedView = driver["NumberView"] ?? driver.View;
155
- const animatedStyles = useAnimatedNumberStyle(animatedNumber, (val) => {
156
- "worklet";
157
- return {
158
- transform: [isHorizontalSwipe ? { translateX: val } : { translateY: val }]
159
- };
160
- });
161
- const panResponder = React.useMemo(() => {
162
- return PanResponder.create({
163
- onMoveShouldSetPanResponder: (e, gesture) => {
164
- const shouldMove = shouldGrantGestureMove(context.swipeDirection, gesture);
165
- if (shouldMove) {
166
- onSwipeStart?.(e);
167
- return true;
168
- }
169
- return false;
170
- },
171
- onPanResponderGrant: (e) => {
172
- if (!isWeb) {
173
- handlePause?.();
174
- }
175
- },
176
- onPanResponderMove: (e, gesture) => {
177
- const { x, y } = getGestureDistance(context.swipeDirection, gesture);
178
- const delta = { x, y };
179
- animatedNumber.setValue(isHorizontalSwipe ? x : y, { type: "direct" });
180
- if (isDeltaInDirection(delta, context.swipeDirection, context.swipeThreshold)) {
181
- onSwipeEnd?.(e);
182
- }
183
- onSwipeMove?.(e);
184
- },
185
- onPanResponderEnd: (e, { dx, dy }) => {
186
- if (!isDeltaInDirection(
187
- { x: dx, y: dy },
188
- context.swipeDirection,
189
- context.swipeThreshold
190
- )) {
191
- if (!isWeb) {
192
- handleResume?.();
193
- }
194
- onSwipeCancel?.(e);
195
- animatedNumber.setValue(0, { type: "spring" });
196
- }
197
- }
198
- });
199
- }, [handlePause, handleResume]);
200
- const themeName = useThemeName();
201
- return <>
202
- {announceTextContent && <ToastAnnounce
203
- __scopeToast={__scopeToast}
204
- role="status"
205
- aria-live={type === "foreground" ? "assertive" : "polite"}
206
- aria-atomic
207
- >{announceTextContent}</ToastAnnounce>}
208
- <PortalItem hostName={viewportName ?? "default"}><ToastInteractiveProvider
209
- key={props.id}
210
- scope={__scopeToast}
211
- onClose={() => {
212
- handleClose();
213
- }}
214
- ><Dismissable
215
- onEscapeKeyDown={composeEventHandlers(onEscapeKeyDown, () => {
216
- if (!context.isFocusedToastEscapeKeyDownRef.current) {
217
- handleClose();
218
- }
219
- context.isFocusedToastEscapeKeyDownRef.current = false;
220
- })}
221
- ><Theme forceClassName name={themeName}><AnimatedView
222
- {...panResponder?.panHandlers}
223
- style={[{ margin: "auto" }, animatedStyles]}
224
- ><Collection.ItemSlot scope={__scopeToast}><ToastImplFrame
225
- role="status"
226
- aria-live="off"
227
- aria-atomic
228
- data-state={open ? "open" : "closed"}
229
- data-swipe-direction={context.swipeDirection}
230
- pointerEvents="auto"
231
- userSelect="none"
232
- {...toastProps}
233
- ref={composedRefs}
234
- {...isWeb && {
235
- onKeyDown: composeEventHandlers(
236
- props.onKeyDown,
237
- (event) => {
238
- if (event.key !== "Escape")
239
- return;
240
- onEscapeKeyDown?.(event);
241
- onEscapeKeyDown?.(event);
242
- if (!event.defaultPrevented) {
243
- context.isFocusedToastEscapeKeyDownRef.current = true;
244
- handleClose();
245
- }
246
- }
247
- )
248
- }}
249
- /></Collection.ItemSlot></AnimatedView></Theme></Dismissable></ToastInteractiveProvider></PortalItem>
250
- </>;
251
- }
252
- );
253
- ToastImpl.propTypes = {
254
- type(props) {
255
- if (props.type && !["foreground", "background"].includes(props.type)) {
256
- const error = `Invalid prop \`type\` supplied to \`${TOAST_NAME}\`. Expected \`foreground | background\`.`;
257
- return new Error(error);
258
- }
259
- return null;
260
- }
261
- };
262
- const isDeltaInDirection = (delta, direction, threshold = 0) => {
263
- const deltaX = Math.abs(delta.x);
264
- const deltaY = Math.abs(delta.y);
265
- const isDeltaX = deltaX > deltaY;
266
- if (direction === "left" || direction === "right" || direction === "horizontal") {
267
- return isDeltaX && deltaX > threshold;
268
- } else {
269
- return !isDeltaX && deltaY > threshold;
270
- }
271
- };
272
- function getAnnounceTextContent(container) {
273
- if (!isWeb)
274
- return "";
275
- const textContent = [];
276
- const childNodes = Array.from(container.childNodes);
277
- childNodes.forEach((node) => {
278
- if (node.nodeType === node.TEXT_NODE && node.textContent)
279
- textContent.push(node.textContent);
280
- if (isHTMLElement(node)) {
281
- const isHidden = node.ariaHidden || node.hidden || node.style.display === "none";
282
- const isExcluded = node.dataset.toastAnnounceExclude === "";
283
- if (!isHidden) {
284
- if (isExcluded) {
285
- const altText = node.dataset.toastAnnounceAlt;
286
- if (altText)
287
- textContent.push(altText);
288
- } else {
289
- textContent.push(...getAnnounceTextContent(node));
290
- }
291
- }
292
- }
293
- });
294
- return textContent;
295
- }
296
- function isHTMLElement(node) {
297
- return node.nodeType === node.ELEMENT_NODE;
298
- }
299
- const GESTURE_GRANT_THRESHOLD = 10;
300
- const shouldGrantGestureMove = (dir, { dx, dy }) => {
301
- if ((dir === "horizontal" || dir === "left") && dx < -GESTURE_GRANT_THRESHOLD) {
302
- return true;
303
- } else if ((dir === "horizontal" || dir === "right") && dx > GESTURE_GRANT_THRESHOLD) {
304
- return true;
305
- } else if ((dir === "vertical" || dir === "up") && dy > -GESTURE_GRANT_THRESHOLD) {
306
- return true;
307
- } else if ((dir === "vertical" || dir === "down") && dy < GESTURE_GRANT_THRESHOLD) {
308
- return true;
309
- }
310
- return false;
311
- };
312
- const getGestureDistance = (dir, { dx, dy }) => {
313
- let y = 0;
314
- let x = 0;
315
- if (dir === "horizontal")
316
- x = dx;
317
- else if (dir === "left")
318
- x = Math.min(0, dx);
319
- else if (dir === "right")
320
- x = Math.max(0, dx);
321
- else if (dir === "vertical")
322
- y = dy;
323
- else if (dir === "up")
324
- y = Math.min(0, dy);
325
- else if (dir === "down")
326
- y = Math.max(0, dy);
327
- return {
328
- x,
329
- y
330
- };
331
- };
332
- export {
333
- ToastImpl,
334
- ToastImplFrame,
335
- useToastInteractiveContext
336
- };
337
- //# sourceMappingURL=ToastImpl.mjs.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/ToastImpl.tsx"],
4
- "mappings": "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",
5
- "names": ["node", "duration"]
6
- }
@@ -1,81 +0,0 @@
1
- import { createCollection } from "@tamagui/collection";
2
- import { createContextScope } from "@tamagui/create-context";
3
- import * as React from "react";
4
- import { ToastImperativeProvider } from "./ToastImperative";
5
- const PROVIDER_NAME = "ToastProvider";
6
- const [Collection, useCollection, createCollectionScope] = createCollection("Toast");
7
- const [createToastContext, createToastScope] = createContextScope("Toast", [
8
- createCollectionScope
9
- ]);
10
- const [ToastProviderProvider, useToastProviderContext] = createToastContext(PROVIDER_NAME);
11
- const ToastProvider = (props) => {
12
- const {
13
- __scopeToast,
14
- id: providedId,
15
- burntOptions,
16
- native,
17
- notificationOptions,
18
- label = "Notification",
19
- duration = 5e3,
20
- swipeDirection = "right",
21
- swipeThreshold = 50,
22
- children
23
- } = props;
24
- const id = providedId ?? React.useId();
25
- const [viewports, setViewports] = React.useState({});
26
- const [toastCount, setToastCount] = React.useState(0);
27
- const isFocusedToastEscapeKeyDownRef = React.useRef(false);
28
- const isClosePausedRef = React.useRef(false);
29
- const handleViewportChange = React.useCallback(
30
- (name, viewport) => {
31
- setViewports((prev) => ({ ...prev, [name]: viewport }));
32
- },
33
- []
34
- );
35
- const options = React.useMemo(() => {
36
- return {
37
- duration,
38
- burntOptions,
39
- native,
40
- notificationOptions
41
- };
42
- }, [JSON.stringify([duration, burntOptions, native, notificationOptions])]);
43
- return <Collection.Provider scope={__scopeToast}><ToastProviderProvider
44
- scope={__scopeToast}
45
- id={id}
46
- label={label}
47
- duration={duration}
48
- swipeDirection={swipeDirection}
49
- swipeThreshold={swipeThreshold}
50
- toastCount={toastCount}
51
- viewports={viewports}
52
- onViewportChange={handleViewportChange}
53
- onToastAdd={React.useCallback(() => {
54
- setToastCount((prevCount) => prevCount + 1);
55
- }, [])}
56
- onToastRemove={React.useCallback(() => {
57
- setToastCount((prevCount) => prevCount - 1);
58
- }, [])}
59
- isFocusedToastEscapeKeyDownRef={isFocusedToastEscapeKeyDownRef}
60
- isClosePausedRef={isClosePausedRef}
61
- ><ToastImperativeProvider options={options}>{children}</ToastImperativeProvider></ToastProviderProvider></Collection.Provider>;
62
- };
63
- ToastProvider.propTypes = {
64
- label(props) {
65
- if (props.label && typeof props.label === "string" && !props.label.trim()) {
66
- const error = `Invalid prop \`label\` supplied to \`${PROVIDER_NAME}\`. Expected non-empty \`string\`.`;
67
- return new Error(error);
68
- }
69
- return null;
70
- }
71
- };
72
- ToastProvider.displayName = PROVIDER_NAME;
73
- export {
74
- Collection,
75
- ToastProvider,
76
- createToastContext,
77
- createToastScope,
78
- useCollection,
79
- useToastProviderContext
80
- };
81
- //# sourceMappingURL=ToastProvider.mjs.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/ToastProvider.tsx"],
4
- "mappings": "AAAA,SAAS,wBAAwB;AAGjC,SAAS,0BAA0B;AACnC,YAAY,WAAW;AAEvB,SAAS,+BAA+B;AAOxC,MAAM,gBAAgB;AAEtB,MAAM,CAAC,YAAY,eAAe,qBAAqB,IACrD,iBAAiC,OAAO;AAoB1C,MAAM,CAAC,oBAAoB,gBAAgB,IAAI,mBAAmB,SAAS;AAAA,EACzE;AACF,CAAC;AACD,MAAM,CAAC,uBAAuB,uBAAuB,IACnD,mBAA8C,aAAa;AA4C7D,MAAM,gBAA8C,CAClD,UACG;AACH,QAAM;AAAA,IACJ;AAAA,IACA,IAAI;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB;AAAA,EACF,IAAI;AACJ,QAAM,KAAK,cAAc,MAAM,MAAM;AACrC,QAAM,CAAC,WAAW,YAAY,IAAI,MAAM,SAEtC,CAAC,CAAC;AACJ,QAAM,CAAC,YAAY,aAAa,IAAI,MAAM,SAAS,CAAC;AACpD,QAAM,iCAAiC,MAAM,OAAO,KAAK;AACzD,QAAM,mBAAmB,MAAM,OAAO,KAAK;AAE3C,QAAM,uBAAuB,MAAM;AAAA,IACjC,CAAC,MAAc,aAAoC;AACjD,mBAAa,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,SAAS,EAAE;AAAA,IACxD;AAAA,IACA,CAAC;AAAA,EACH;AAGA,QAAM,UAAU,MAAM,QAAQ,MAAM;AAClC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EAEF,GAAG,CAAC,KAAK,UAAU,CAAC,UAAU,cAAc,QAAQ,mBAAmB,CAAC,CAAC,CAAC;AAE1E,SACE,CAAC,WAAW,SAAS,OAAO,cAC1B,CAAC;AAAA,IACC,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,kBAAkB;AAAA,IAClB,YAAY,MAAM,YAAY,MAAM;AAClC,oBAAc,CAAC,cAAc,YAAY,CAAC;AAAA,IAC5C,GAAG,CAAC,CAAC;AAAA,IACL,eAAe,MAAM,YAAY,MAAM;AACrC,oBAAc,CAAC,cAAc,YAAY,CAAC;AAAA,IAC5C,GAAG,CAAC,CAAC;AAAA,IACL,gCAAgC;AAAA,IAChC,kBAAkB;AAAA,GAElB,CAAC,wBAAwB,SAAS,UAAU,SAAS,EAApD,wBACH,EApBC,sBAqBH,EAtBC,WAAW;AAwBhB;AAEA,cAAc,YAAY;AAAA,EACxB,MAAM,OAAO;AACX,QAAI,MAAM,SAAS,OAAO,MAAM,UAAU,YAAY,CAAC,MAAM,MAAM,KAAK,GAAG;AACzE,YAAM,QAAQ,wCAAwC;AACtD,aAAO,IAAI,MAAM,KAAK;AAAA,IACxB;AACA,WAAO;AAAA,EACT;AACF;AAEA,cAAc,cAAc;",
5
- "names": []
6
- }
@@ -1,300 +0,0 @@
1
- import { AnimatePresence } from "@tamagui/animate-presence";
2
- import { useComposedRefs } from "@tamagui/compose-refs";
3
- import { isWeb, styled } from "@tamagui/core";
4
- import { PortalHost } from "@tamagui/portal";
5
- import { YStack } from "@tamagui/stacks";
6
- import { VisuallyHidden } from "@tamagui/visually-hidden";
7
- import * as React from "react";
8
- import {
9
- Collection,
10
- useCollection,
11
- useToastProviderContext
12
- } from "./ToastProvider";
13
- const VIEWPORT_NAME = "ToastViewport";
14
- const VIEWPORT_DEFAULT_HOTKEY = ["F8"];
15
- const VIEWPORT_PAUSE = "toast.viewportPause";
16
- const VIEWPORT_RESUME = "toast.viewportResume";
17
- const ToastViewportWrapperFrame = styled(YStack, {
18
- name: "ViewportWrapper",
19
- variants: {
20
- unstyled: {
21
- false: {
22
- pointerEvents: "box-none",
23
- top: 0,
24
- bottom: 0,
25
- left: 0,
26
- right: 0,
27
- position: isWeb ? "fixed" : "absolute",
28
- maxWidth: "100%",
29
- tabIndex: 0,
30
- zIndex: 1e5
31
- }
32
- }
33
- },
34
- defaultVariants: {
35
- unstyled: false
36
- }
37
- });
38
- const ToastViewportFrame = styled(YStack, {
39
- name: VIEWPORT_NAME,
40
- variants: {
41
- unstyled: {
42
- false: {
43
- pointerEvents: "box-none",
44
- position: isWeb ? "fixed" : "absolute",
45
- maxWidth: "100%"
46
- }
47
- }
48
- },
49
- defaultVariants: {
50
- unstyled: false
51
- }
52
- });
53
- const ToastViewport = React.forwardRef(
54
- (props, forwardedRef) => {
55
- const {
56
- __scopeToast,
57
- hotkey = VIEWPORT_DEFAULT_HOTKEY,
58
- label = "Notifications ({hotkey})",
59
- name = "default",
60
- multipleToasts,
61
- ...viewportProps
62
- } = props;
63
- const context = useToastProviderContext(VIEWPORT_NAME, __scopeToast);
64
- const getItems = useCollection(__scopeToast);
65
- const headFocusProxyRef = React.useRef(null);
66
- const tailFocusProxyRef = React.useRef(null);
67
- const wrapperRef = React.useRef(null);
68
- const ref = React.useRef(null);
69
- const onViewportChange = React.useCallback(
70
- (el) => {
71
- if (context.viewports[name] !== el)
72
- context.onViewportChange(name, el);
73
- },
74
- [name, context.viewports]
75
- );
76
- const composedRefs = useComposedRefs(forwardedRef, ref, onViewportChange);
77
- const hotkeyLabel = hotkey.join("+").replace(/Key/g, "").replace(/Digit/g, "");
78
- const hasToasts = context.toastCount > 0;
79
- React.useEffect(() => {
80
- if (!isWeb)
81
- return;
82
- if (context.toastCount === 0)
83
- return;
84
- const handleKeyDown = (event) => {
85
- const isHotkeyPressed = hotkey.every(
86
- (key) => event[key] || event.code === key
87
- );
88
- if (isHotkeyPressed)
89
- ref.current?.focus();
90
- };
91
- document.addEventListener("keydown", handleKeyDown);
92
- return () => {
93
- document.removeEventListener("keydown", handleKeyDown);
94
- };
95
- }, [hotkey, context.toastCount]);
96
- React.useEffect(() => {
97
- if (!isWeb)
98
- return;
99
- if (context.toastCount === 0)
100
- return;
101
- const wrapper = wrapperRef.current;
102
- const viewport = ref.current;
103
- if (hasToasts && wrapper && viewport) {
104
- const handlePause = () => {
105
- if (!context.isClosePausedRef.current) {
106
- const pauseEvent = new CustomEvent(VIEWPORT_PAUSE);
107
- viewport.dispatchEvent(pauseEvent);
108
- context.isClosePausedRef.current = true;
109
- }
110
- };
111
- const handleResume = () => {
112
- if (context.isClosePausedRef.current) {
113
- const resumeEvent = new CustomEvent(VIEWPORT_RESUME);
114
- viewport.dispatchEvent(resumeEvent);
115
- context.isClosePausedRef.current = false;
116
- }
117
- };
118
- const handleFocusOutResume = (event) => {
119
- const isFocusMovingOutside = !wrapper.contains(
120
- event.relatedTarget
121
- );
122
- if (isFocusMovingOutside)
123
- handleResume();
124
- };
125
- const handlePointerLeaveResume = () => {
126
- const isFocusInside = wrapper.contains(document.activeElement);
127
- if (!isFocusInside)
128
- handleResume();
129
- };
130
- wrapper.addEventListener("focusin", handlePause);
131
- wrapper.addEventListener("focusout", handleFocusOutResume);
132
- wrapper.addEventListener("pointermove", handlePause);
133
- wrapper.addEventListener("pointerleave", handlePointerLeaveResume);
134
- window.addEventListener("blur", handlePause);
135
- window.addEventListener("focus", handleResume);
136
- return () => {
137
- wrapper.removeEventListener("focusin", handlePause);
138
- wrapper.removeEventListener("focusout", handleFocusOutResume);
139
- wrapper.removeEventListener("pointermove", handlePause);
140
- wrapper.removeEventListener("pointerleave", handlePointerLeaveResume);
141
- window.removeEventListener("blur", handlePause);
142
- window.removeEventListener("focus", handleResume);
143
- };
144
- }
145
- }, [hasToasts, context.isClosePausedRef, context.toastCount]);
146
- const getSortedTabbableCandidates = React.useCallback(
147
- ({ tabbingDirection }) => {
148
- const toastItems = getItems();
149
- const tabbableCandidates = toastItems.map((toastItem) => {
150
- const toastNode = toastItem.ref.current;
151
- const toastTabbableCandidates = [toastNode, ...getTabbableCandidates(toastNode)];
152
- return tabbingDirection === "forwards" ? toastTabbableCandidates : toastTabbableCandidates.reverse();
153
- });
154
- return (tabbingDirection === "forwards" ? tabbableCandidates.reverse() : tabbableCandidates).flat();
155
- },
156
- [getItems]
157
- );
158
- React.useEffect(() => {
159
- if (!isWeb)
160
- return;
161
- if (context.toastCount === 0)
162
- return;
163
- const viewport = ref.current;
164
- if (viewport) {
165
- const handleKeyDown = (event) => {
166
- const isMetaKey = event.altKey || event.ctrlKey || event.metaKey;
167
- const isTabKey = event.key === "Tab" && !isMetaKey;
168
- if (isTabKey) {
169
- const focusedElement = document.activeElement;
170
- const isTabbingBackwards = event.shiftKey;
171
- const targetIsViewport = event.target === viewport;
172
- if (targetIsViewport && isTabbingBackwards) {
173
- headFocusProxyRef.current?.focus();
174
- return;
175
- }
176
- const tabbingDirection = isTabbingBackwards ? "backwards" : "forwards";
177
- const sortedCandidates = getSortedTabbableCandidates({ tabbingDirection });
178
- const index = sortedCandidates.findIndex(
179
- (candidate) => candidate === focusedElement
180
- );
181
- if (focusFirst(sortedCandidates.slice(index + 1))) {
182
- event.preventDefault();
183
- } else {
184
- isTabbingBackwards ? (
185
- // @ts-ignore ali TODO type
186
- headFocusProxyRef.current?.focus()
187
- ) : (
188
- // @ts-ignore ali TODO type
189
- tailFocusProxyRef.current?.focus()
190
- );
191
- }
192
- }
193
- };
194
- viewport.addEventListener("keydown", handleKeyDown);
195
- return () => viewport.removeEventListener("keydown", handleKeyDown);
196
- }
197
- }, [getItems, getSortedTabbableCandidates, context.toastCount]);
198
- return <ToastViewportWrapperFrame
199
- ref={wrapperRef}
200
- role="region"
201
- aria-label={label.replace("{hotkey}", hotkeyLabel)}
202
- tabIndex={-1}
203
- >
204
- {hasToasts && <FocusProxy
205
- viewportName={name}
206
- ref={headFocusProxyRef}
207
- onFocusFromOutsideViewport={() => {
208
- const tabbableCandidates = getSortedTabbableCandidates({
209
- tabbingDirection: "forwards"
210
- });
211
- focusFirst(tabbableCandidates);
212
- }}
213
- />}
214
- {
215
- /**
216
- * tabindex on the the list so that it can be focused when items are removed. we focus
217
- * the list instead of the viewport so it announces number of items remaining.
218
- */
219
- }
220
- <Collection.Slot scope={__scopeToast}><ToastViewportFrame
221
- focusable={context.toastCount > 0}
222
- ref={composedRefs}
223
- {...viewportProps}
224
- ><PortalHost
225
- render={(children) => <AnimatePresence exitBeforeEnter={!multipleToasts}>{children}</AnimatePresence>}
226
- name={name ?? "default"}
227
- /></ToastViewportFrame></Collection.Slot>
228
- {hasToasts && <FocusProxy
229
- viewportName={name}
230
- ref={tailFocusProxyRef}
231
- onFocusFromOutsideViewport={() => {
232
- const tabbableCandidates = getSortedTabbableCandidates({
233
- tabbingDirection: "backwards"
234
- });
235
- focusFirst(tabbableCandidates);
236
- }}
237
- />}
238
- </ToastViewportWrapperFrame>;
239
- }
240
- );
241
- ToastViewport.displayName = VIEWPORT_NAME;
242
- const FOCUS_PROXY_NAME = "ToastFocusProxy";
243
- const FocusProxy = React.forwardRef(
244
- (props, forwardedRef) => {
245
- const { __scopeToast, onFocusFromOutsideViewport, viewportName, ...proxyProps } = props;
246
- const context = useToastProviderContext(FOCUS_PROXY_NAME, __scopeToast);
247
- const viewport = context.viewports[viewportName];
248
- return <VisuallyHidden
249
- aria-hidden
250
- tabIndex={0}
251
- {...proxyProps}
252
- ref={forwardedRef}
253
- position={isWeb ? "fixed" : "absolute"}
254
- onFocus={(event) => {
255
- if (!isWeb)
256
- return;
257
- const prevFocusedElement = event.relatedTarget;
258
- const isFocusFromOutsideViewport = !viewport?.contains(prevFocusedElement);
259
- if (isFocusFromOutsideViewport)
260
- onFocusFromOutsideViewport();
261
- }}
262
- />;
263
- }
264
- );
265
- FocusProxy.displayName = FOCUS_PROXY_NAME;
266
- function focusFirst(candidates) {
267
- if (!isWeb)
268
- return;
269
- const previouslyFocusedElement = document.activeElement;
270
- return candidates.some((candidate) => {
271
- if (candidate === previouslyFocusedElement)
272
- return true;
273
- candidate.focus();
274
- return document.activeElement !== previouslyFocusedElement;
275
- });
276
- }
277
- function getTabbableCandidates(container) {
278
- if (!isWeb)
279
- return [];
280
- const containerHtml = container;
281
- const nodes = [];
282
- const walker = document.createTreeWalker(containerHtml, NodeFilter.SHOW_ELEMENT, {
283
- acceptNode: (node) => {
284
- const isHiddenInput = node.tagName === "INPUT" && node.type === "hidden";
285
- if (node.disabled || node.hidden || isHiddenInput)
286
- return NodeFilter.FILTER_SKIP;
287
- return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
288
- }
289
- });
290
- while (walker.nextNode())
291
- nodes.push(walker.currentNode);
292
- return nodes;
293
- }
294
- export {
295
- ToastViewport,
296
- VIEWPORT_DEFAULT_HOTKEY,
297
- VIEWPORT_PAUSE,
298
- VIEWPORT_RESUME
299
- };
300
- //# sourceMappingURL=ToastViewport.mjs.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/ToastViewport.tsx"],
4
- "mappings": "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",
5
- "names": []
6
- }
@@ -1,5 +0,0 @@
1
- const TOAST_NAME = "Toast";
2
- export {
3
- TOAST_NAME
4
- };
5
- //# sourceMappingURL=constants.mjs.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/constants.ts"],
4
- "mappings": "AAAO,MAAM,aAAa;",
5
- "names": []
6
- }
@@ -1,45 +0,0 @@
1
- const createNativeToast = (title, { message, notificationOptions }) => {
2
- if (!("Notification" in window)) {
3
- console.error("This browser does not support notifications");
4
- return false;
5
- }
6
- if (Notification.permission === "denied")
7
- false;
8
- const showNotification = () => {
9
- const notification = new Notification(title, {
10
- body: message,
11
- ...notificationOptions
12
- });
13
- return notification;
14
- };
15
- if (Notification.permission === "granted") {
16
- const notification = showNotification();
17
- return {
18
- nativeToastRef: notification
19
- };
20
- } else {
21
- Notification.requestPermission().then((permission) => {
22
- if (permission === "granted") {
23
- const notification = showNotification();
24
- return {
25
- nativeToastRef: notification
26
- };
27
- }
28
- });
29
- }
30
- return true;
31
- };
32
- const hideNativeToast = (ref) => {
33
- if (!("Notification" in window)) {
34
- console.error("This browser does not support notifications");
35
- return;
36
- }
37
- if (ref) {
38
- ref.close();
39
- }
40
- };
41
- export {
42
- createNativeToast,
43
- hideNativeToast
44
- };
45
- //# sourceMappingURL=createNativeToast.mjs.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/createNativeToast.tsx"],
4
- "mappings": "AAEO,MAAM,oBAA0C,CACrD,OACA,EAAE,SAAS,oBAAoB,MAC5B;AACH,MAAI,EAAE,kBAAkB,SAAS;AAC/B,YAAQ,MAAM,6CAA6C;AAC3D,WAAO;AAAA,EACT;AAEA,MAAI,aAAa,eAAe;AAAU;AAC1C,QAAM,mBAAmB,MAAM;AAC7B,UAAM,eAAe,IAAI,aAAa,OAAO;AAAA,MAC3C,MAAM;AAAA,MACN,GAAG;AAAA,IACL,CAAC;AAED,WAAO;AAAA,EACT;AAEA,MAAI,aAAa,eAAe,WAAW;AACzC,UAAM,eAAe,iBAAiB;AACtC,WAAO;AAAA,MACL,gBAAgB;AAAA,IAClB;AAAA,EACF,OAAO;AACL,iBAAa,kBAAkB,EAAE,KAAK,CAAC,eAAe;AACpD,UAAI,eAAe,WAAW;AAC5B,cAAM,eAAe,iBAAiB;AACtC,eAAO;AAAA,UACL,gBAAgB;AAAA,QAClB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAEO,MAAM,kBAAsC,CAAC,QAAQ;AAC1D,MAAI,EAAE,kBAAkB,SAAS;AAC/B,YAAQ,MAAM,6CAA6C;AAC3D;AAAA,EACF;AAEA,MAAI,KAAK;AACP,QAAI,MAAM;AAAA,EACZ;AACF;",
5
- "names": []
6
- }
@@ -1,19 +0,0 @@
1
- const createNativeToast = (title, { message, duration, burntOptions }) => {
2
- const Burnt = require("burnt");
3
- Burnt.toast({
4
- title,
5
- message,
6
- duration: duration ? duration * 1e3 : void 0,
7
- ...burntOptions
8
- });
9
- return true;
10
- };
11
- const hideNativeToast = () => {
12
- const Burnt = require("burnt");
13
- Burnt.dismissAllAlerts();
14
- };
15
- export {
16
- createNativeToast,
17
- hideNativeToast
18
- };
19
- //# sourceMappingURL=createNativeToast.native.mjs.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/createNativeToast.native.tsx"],
4
- "mappings": "AAEO,MAAM,oBAA0C,CACrD,OACA,EAAE,SAAS,UAAU,aAAa,MAC/B;AAEH,QAAM,QAAQ,QAAQ,OAAO;AAE7B,QAAM,MAAM;AAAA,IACV;AAAA,IACA;AAAA,IACA,UAAU,WAAW,WAAW,MAAO;AAAA,IACvC,GAAG;AAAA,EACL,CAAC;AACD,SAAO;AACT;AAEO,MAAM,kBAAsC,MAAM;AACvD,QAAM,QAAQ,QAAQ,OAAO;AAC7B,QAAM,iBAAiB;AACzB;",
5
- "names": []
6
- }
@@ -1,2 +0,0 @@
1
- export * from "./Toast";
2
- //# sourceMappingURL=index.mjs.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/index.ts"],
4
- "mappings": "AAAA,cAAc;",
5
- "names": []
6
- }
@@ -1 +0,0 @@
1
- //# sourceMappingURL=types.mjs.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "mappings": "",
5
- "names": []
6
- }