@tamagui/toast 1.26.0 → 1.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/toast",
3
- "version": "1.26.0",
3
+ "version": "1.27.0",
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.26.0",
35
- "@tamagui/compose-refs": "1.26.0",
36
- "@tamagui/core": "1.26.0",
37
- "@tamagui/create-context": "1.26.0",
38
- "@tamagui/dismissable": "1.26.0",
39
- "@tamagui/polyfill-dev": "1.26.0",
40
- "@tamagui/portal": "1.26.0",
41
- "@tamagui/stacks": "1.26.0",
42
- "@tamagui/text": "1.26.0",
43
- "@tamagui/use-controllable-state": "1.26.0",
44
- "@tamagui/visually-hidden": "1.26.0"
34
+ "@tamagui/animate-presence": "1.27.0",
35
+ "@tamagui/compose-refs": "1.27.0",
36
+ "@tamagui/core": "1.27.0",
37
+ "@tamagui/create-context": "1.27.0",
38
+ "@tamagui/dismissable": "1.27.0",
39
+ "@tamagui/polyfill-dev": "1.27.0",
40
+ "@tamagui/portal": "1.27.0",
41
+ "@tamagui/stacks": "1.27.0",
42
+ "@tamagui/text": "1.27.0",
43
+ "@tamagui/use-controllable-state": "1.27.0",
44
+ "@tamagui/visually-hidden": "1.27.0"
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.26.0",
52
+ "@tamagui/build": "1.27.0",
53
53
  "burnt": "^0.10.0",
54
54
  "react": "^18.2.0",
55
55
  "react-native": "^0.71.7"
@@ -1,164 +0,0 @@
1
- import { jsx } from "react/jsx-runtime";
2
- import {
3
- composeEventHandlers,
4
- styled,
5
- themeable,
6
- useEvent,
7
- withStaticProperties
8
- } from "@tamagui/core";
9
- import { ThemeableStack } from "@tamagui/stacks";
10
- import { SizableText } from "@tamagui/text";
11
- import { useControllableState } from "@tamagui/use-controllable-state";
12
- import * as React from "react";
13
- import { TOAST_NAME } from "./constants";
14
- import { ToastAnnounceExclude } from "./ToastAnnounce";
15
- import {
16
- useToast,
17
- useToastController,
18
- useToastState
19
- } from "./ToastImperative";
20
- import {
21
- ToastImpl,
22
- ToastImplFrame,
23
- useToastInteractiveContext
24
- } from "./ToastImpl";
25
- import {
26
- ToastProvider,
27
- createToastScope
28
- } from "./ToastProvider";
29
- import { ToastViewport } from "./ToastViewport";
30
- const TITLE_NAME = "ToastTitle";
31
- const ToastTitleFrame = styled(SizableText, {
32
- name: TITLE_NAME,
33
- variants: {
34
- unstyled: {
35
- false: {
36
- color: "$color",
37
- size: "$4"
38
- }
39
- }
40
- },
41
- defaultVariants: {
42
- unstyled: false
43
- }
44
- });
45
- const ToastTitle = React.forwardRef(
46
- (props, forwardedRef) => {
47
- const { __scopeToast, ...titleProps } = props;
48
- return /* @__PURE__ */ jsx(ToastTitleFrame, { ...titleProps, ref: forwardedRef });
49
- }
50
- );
51
- ToastTitle.displayName = TITLE_NAME;
52
- const DESCRIPTION_NAME = "ToastDescription";
53
- const ToastDescriptionFrame = styled(SizableText, {
54
- name: DESCRIPTION_NAME,
55
- variants: {
56
- unstyled: {
57
- false: {
58
- color: "$color11",
59
- size: "$1"
60
- }
61
- }
62
- },
63
- defaultVariants: {
64
- unstyled: false
65
- }
66
- });
67
- const ToastDescription = React.forwardRef(
68
- (props, forwardedRef) => {
69
- const { __scopeToast, ...descriptionProps } = props;
70
- return /* @__PURE__ */ jsx(ToastDescriptionFrame, { ...descriptionProps, ref: forwardedRef });
71
- }
72
- );
73
- ToastDescription.displayName = DESCRIPTION_NAME;
74
- const ACTION_NAME = "ToastAction";
75
- const ToastAction = React.forwardRef(
76
- (props, forwardedRef) => {
77
- const { altText, ...actionProps } = props;
78
- if (!altText)
79
- return null;
80
- return /* @__PURE__ */ jsx(ToastAnnounceExclude, { altText, asChild: true, children: /* @__PURE__ */ jsx(ToastClose, { ...actionProps, ref: forwardedRef }) });
81
- }
82
- );
83
- ToastAction.propTypes = {
84
- altText(props) {
85
- if (!props.altText) {
86
- return new Error(`Missing prop \`altText\` expected on \`${ACTION_NAME}\``);
87
- }
88
- return null;
89
- }
90
- };
91
- ToastAction.displayName = ACTION_NAME;
92
- const CLOSE_NAME = "ToastClose";
93
- const ToastCloseFrame = styled(ThemeableStack, {
94
- name: CLOSE_NAME,
95
- tag: "button"
96
- });
97
- const ToastClose = React.forwardRef(
98
- (props, forwardedRef) => {
99
- const { __scopeToast, ...closeProps } = props;
100
- const interactiveContext = useToastInteractiveContext(CLOSE_NAME, __scopeToast);
101
- return /* @__PURE__ */ jsx(ToastAnnounceExclude, { asChild: true, children: /* @__PURE__ */ jsx(
102
- ToastCloseFrame,
103
- {
104
- accessibilityLabel: "Dialog Close",
105
- ...closeProps,
106
- ref: forwardedRef,
107
- onPress: composeEventHandlers(props.onPress, interactiveContext.onClose)
108
- }
109
- ) });
110
- }
111
- );
112
- ToastClose.displayName = CLOSE_NAME;
113
- const ToastComponent = React.forwardRef(
114
- ToastImplFrame.extractable((props, forwardedRef) => {
115
- const { forceMount, open: openProp, defaultOpen, onOpenChange, ...toastProps } = props;
116
- const [open, setOpen] = useControllableState({
117
- prop: openProp,
118
- defaultProp: defaultOpen ?? true,
119
- onChange: onOpenChange,
120
- strategy: "most-recent-wins"
121
- });
122
- const id = React.useId();
123
- const onPause = useEvent(props.onPause);
124
- const onResume = useEvent(props.onResume);
125
- const shouldShow = forceMount || open;
126
- if (!shouldShow)
127
- return null;
128
- return /* @__PURE__ */ jsx(
129
- ToastImpl,
130
- {
131
- id,
132
- open,
133
- ...toastProps,
134
- ref: forwardedRef,
135
- onClose: () => setOpen(false),
136
- onPause,
137
- onResume,
138
- onSwipeEnd: composeEventHandlers(props.onSwipeEnd, (event) => {
139
- setOpen(false);
140
- })
141
- }
142
- );
143
- })
144
- );
145
- ToastComponent.displayName = TOAST_NAME;
146
- const Toast = withStaticProperties(
147
- themeable(ToastComponent, ToastImplFrame.staticConfig),
148
- {
149
- Title: ToastTitle,
150
- Description: ToastDescription,
151
- Action: ToastAction,
152
- Close: ToastClose
153
- }
154
- );
155
- export {
156
- Toast,
157
- ToastProvider,
158
- ToastViewport,
159
- createToastScope,
160
- useToast,
161
- useToastController,
162
- useToastState
163
- };
164
- //# 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,66 +0,0 @@
1
- import { jsx, jsxs } from "react/jsx-runtime";
2
- import {
3
- Stack,
4
- Text,
5
- styled,
6
- useEvent,
7
- useIsomorphicLayoutEffect
8
- } from "@tamagui/core";
9
- import { Portal } from "@tamagui/portal";
10
- import { VisuallyHidden } from "@tamagui/visually-hidden";
11
- import * as React from "react";
12
- import { TOAST_NAME } from "./constants";
13
- import { useToastProviderContext } from "./ToastProvider";
14
- const ToastAnnounceExcludeFrame = styled(Stack, {
15
- name: "ToastAnnounceExclude"
16
- });
17
- const ToastAnnounceExclude = React.forwardRef(
18
- (props, forwardedRef) => {
19
- const { __scopeToast, altText, ...announceExcludeProps } = props;
20
- return /* @__PURE__ */ jsx(
21
- ToastAnnounceExcludeFrame,
22
- {
23
- "data-toast-announce-exclude": "",
24
- "data-toast-announce-alt": altText || void 0,
25
- ...announceExcludeProps,
26
- ref: forwardedRef
27
- }
28
- );
29
- }
30
- );
31
- const ToastAnnounce = (props) => {
32
- const { __scopeToast, children, ...announceProps } = props;
33
- const context = useToastProviderContext(TOAST_NAME, __scopeToast);
34
- const [renderAnnounceText, setRenderAnnounceText] = React.useState(false);
35
- const [isAnnounced, setIsAnnounced] = React.useState(false);
36
- useNextFrame(() => setRenderAnnounceText(true));
37
- React.useEffect(() => {
38
- const timer = setTimeout(() => setIsAnnounced(true), 1e3);
39
- return () => clearTimeout(timer);
40
- }, []);
41
- return isAnnounced ? null : /* @__PURE__ */ jsx(Portal, { asChild: true, children: /* @__PURE__ */ jsx(VisuallyHidden, { ...announceProps, children: renderAnnounceText && /* @__PURE__ */ jsxs(Text, { children: [
42
- context.label,
43
- " ",
44
- children
45
- ] }) }) });
46
- };
47
- function useNextFrame(callback = () => {
48
- }) {
49
- const fn = useEvent(callback);
50
- useIsomorphicLayoutEffect(() => {
51
- let raf1 = 0;
52
- let raf2 = 0;
53
- raf1 = requestAnimationFrame(() => {
54
- raf2 = requestAnimationFrame(fn);
55
- });
56
- return () => {
57
- cancelAnimationFrame(raf1);
58
- cancelAnimationFrame(raf2);
59
- };
60
- }, [fn]);
61
- }
62
- export {
63
- ToastAnnounce,
64
- ToastAnnounceExclude
65
- };
66
- //# sourceMappingURL=ToastAnnounce.mjs.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/ToastAnnounce.tsx"],
4
- "mappings": "AA6BM,cAqCI,YArCJ;AA7BN;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;AAAA,MAAC;AAAA;AAAA,QACC,+BAA4B;AAAA,QAC5B,2BAAyB,WAAW;AAAA,QACnC,GAAG;AAAA,QACJ,KAAK;AAAA;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,oBAAC,UAAO,SAAO,MACb,8BAAC,kBAAgB,GAAG,eACjB,gCACC,qBAAC,QACE;AAAA,YAAQ;AAAA,IAAM;AAAA,IAAE;AAAA,KACnB,GAEJ,GACF;AAEJ;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,74 +0,0 @@
1
- import { jsx } from "react/jsx-runtime";
2
- import { isWeb } from "@tamagui/core";
3
- import React, { createContext, useContext, useMemo, useRef } from "react";
4
- import { Platform } from "react-native";
5
- import { createNativeToast } from "./createNativeToast";
6
- const ToastContext = createContext({});
7
- const ToastCurrentContext = createContext(null);
8
- const useToastController = () => {
9
- return useContext(ToastContext);
10
- };
11
- const useToastState = () => {
12
- return useContext(ToastCurrentContext);
13
- };
14
- const useToast = () => {
15
- return {
16
- ...useToastController(),
17
- currentToast: useToastState()
18
- };
19
- };
20
- const ToastImperativeProvider = ({
21
- children,
22
- options
23
- }) => {
24
- const counterRef = useRef(0);
25
- const [toast, setToast] = React.useState(null);
26
- const [lastNativeToastRef, setLastNativeToastRef] = React.useState(null);
27
- const show = React.useCallback(
28
- (title, showOptions) => {
29
- const native = (showOptions == null ? void 0 : showOptions.native) ?? options.native;
30
- const isWebNative = Array.isArray(native) ? native.includes("web") : native === "web";
31
- const isMobileNative = Array.isArray(native) ? native.includes("mobile") : native === "mobile";
32
- const isAndroidNative = isMobileNative || (Array.isArray(native) ? native.includes("android") : native === "android");
33
- const isIosNative = isMobileNative || (Array.isArray(native) ? native.includes("ios") : native === "ios");
34
- const isHandledNatively = native === true || isWeb && isWebNative || !isWeb && isMobileNative || Platform.OS === "android" && isAndroidNative || Platform.OS === "ios" && isIosNative;
35
- if (isHandledNatively) {
36
- const nativeToastResult = createNativeToast(title, showOptions ?? {});
37
- if (typeof nativeToastResult === "object" && nativeToastResult.nativeToastRef) {
38
- setLastNativeToastRef(nativeToastResult.nativeToastRef);
39
- }
40
- }
41
- counterRef.current++;
42
- setToast({
43
- ...showOptions == null ? void 0 : showOptions.customData,
44
- ...showOptions,
45
- viewportName: (showOptions == null ? void 0 : showOptions.viewportName) ?? "default",
46
- title,
47
- id: counterRef.current.toString(),
48
- isHandledNatively
49
- });
50
- return true;
51
- },
52
- [setToast, options.native]
53
- );
54
- const hide = React.useCallback(() => {
55
- lastNativeToastRef == null ? void 0 : lastNativeToastRef.close();
56
- setToast(null);
57
- }, [setToast, lastNativeToastRef]);
58
- const contextValue = useMemo(() => {
59
- return {
60
- show,
61
- hide,
62
- nativeToast: lastNativeToastRef,
63
- options
64
- };
65
- }, [show, hide, lastNativeToastRef, JSON.stringify(options || null)]);
66
- return /* @__PURE__ */ jsx(ToastContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(ToastCurrentContext.Provider, { value: toast, children }) });
67
- };
68
- export {
69
- ToastImperativeProvider,
70
- useToast,
71
- useToastController,
72
- useToastState
73
- };
74
- //# sourceMappingURL=ToastImperative.mjs.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/ToastImperative.tsx"],
4
- "mappings": "AAgLM;AAhLN,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,UAAS,2CAAa,WAAU,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,2CAAa;AAAA,QAChB,GAAG;AAAA,QACH,eAAc,2CAAa,iBAAgB;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,6DAAoB;AACpB,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,oBAAC,aAAa,UAAb,EAAsB,OAAO,cAC5B,8BAAC,oBAAoB,UAApB,EAA6B,OAAO,OAClC,UACH,GACF;AAEJ;",
5
- "names": []
6
- }
@@ -1,357 +0,0 @@
1
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
- import { useIsPresent } from "@tamagui/animate-presence";
3
- import { useComposedRefs } from "@tamagui/compose-refs";
4
- import {
5
- Theme,
6
- composeEventHandlers,
7
- isWeb,
8
- styled,
9
- useAnimationDriver,
10
- useEvent,
11
- useThemeName
12
- } from "@tamagui/core";
13
- import { Dismissable } from "@tamagui/dismissable";
14
- import { PortalItem } from "@tamagui/portal";
15
- import { ThemeableStack } from "@tamagui/stacks";
16
- import * as React from "react";
17
- import {
18
- PanResponder
19
- } from "react-native";
20
- import { TOAST_NAME } from "./constants";
21
- import { ToastAnnounce } from "./ToastAnnounce";
22
- import {
23
- Collection,
24
- createToastContext,
25
- useToastProviderContext
26
- } from "./ToastProvider";
27
- import { VIEWPORT_PAUSE, VIEWPORT_RESUME } from "./ToastViewport";
28
- const ToastImplFrame = styled(ThemeableStack, {
29
- name: "ToastImpl",
30
- focusable: true,
31
- variants: {
32
- unstyled: {
33
- false: {
34
- focusStyle: {
35
- outlineStyle: "solid",
36
- outlineWidth: 2,
37
- outlineColor: "$borderColorHover"
38
- },
39
- backgroundColor: "$color6",
40
- borderRadius: "$10",
41
- paddingHorizontal: "$5",
42
- paddingVertical: "$2",
43
- marginHorizontal: "auto",
44
- marginVertical: "$1"
45
- }
46
- }
47
- },
48
- defaultVariants: {
49
- unstyled: false
50
- }
51
- });
52
- const [ToastInteractiveProvider, useToastInteractiveContext] = createToastContext(
53
- TOAST_NAME,
54
- {
55
- onClose() {
56
- }
57
- }
58
- );
59
- const ToastImpl = React.forwardRef(
60
- (props, forwardedRef) => {
61
- const {
62
- __scopeToast,
63
- type = "foreground",
64
- duration: durationProp,
65
- open,
66
- onClose,
67
- onEscapeKeyDown,
68
- onPause,
69
- onResume,
70
- onSwipeStart,
71
- onSwipeMove,
72
- onSwipeCancel,
73
- onSwipeEnd,
74
- viewportName = "default",
75
- ...toastProps
76
- } = props;
77
- const isPresent = useIsPresent();
78
- const context = useToastProviderContext(TOAST_NAME, __scopeToast);
79
- const [node, setNode] = React.useState(null);
80
- const composedRefs = useComposedRefs(forwardedRef, (node2) => setNode(node2));
81
- const duration = durationProp || context.duration;
82
- const closeTimerStartTimeRef = React.useRef(0);
83
- const closeTimerRemainingTimeRef = React.useRef(duration);
84
- const closeTimerRef = React.useRef(0);
85
- const { onToastAdd, onToastRemove } = context;
86
- const viewport = React.useMemo(() => {
87
- return context.viewports[viewportName];
88
- }, [context.viewports, viewportName]);
89
- const handleClose = useEvent(() => {
90
- if (!isPresent) {
91
- return;
92
- }
93
- if (isWeb) {
94
- const isFocusInToast = node == null ? void 0 : node.contains(document.activeElement);
95
- if (isFocusInToast)
96
- viewport == null ? void 0 : viewport.focus();
97
- }
98
- onClose();
99
- });
100
- const startTimer = React.useCallback(
101
- (duration2) => {
102
- if (!duration2 || duration2 === Infinity)
103
- return;
104
- clearTimeout(closeTimerRef.current);
105
- closeTimerStartTimeRef.current = (/* @__PURE__ */ new Date()).getTime();
106
- closeTimerRef.current = setTimeout(handleClose, duration2);
107
- },
108
- [handleClose]
109
- );
110
- const handleResume = React.useCallback(() => {
111
- startTimer(closeTimerRemainingTimeRef.current);
112
- onResume == null ? void 0 : onResume();
113
- }, [onResume, startTimer]);
114
- const handlePause = React.useCallback(() => {
115
- const elapsedTime = (/* @__PURE__ */ new Date()).getTime() - closeTimerStartTimeRef.current;
116
- closeTimerRemainingTimeRef.current = closeTimerRemainingTimeRef.current - elapsedTime;
117
- window.clearTimeout(closeTimerRef.current);
118
- onPause == null ? void 0 : onPause();
119
- }, [onPause]);
120
- React.useEffect(() => {
121
- if (!isWeb)
122
- return;
123
- if (viewport) {
124
- viewport.addEventListener(VIEWPORT_PAUSE, handlePause);
125
- viewport.addEventListener(VIEWPORT_RESUME, handleResume);
126
- return () => {
127
- viewport.removeEventListener(VIEWPORT_PAUSE, handlePause);
128
- viewport.removeEventListener(VIEWPORT_RESUME, handleResume);
129
- };
130
- }
131
- }, [viewport, duration, onPause, onResume, startTimer]);
132
- React.useEffect(() => {
133
- if (open && !context.isClosePausedRef.current) {
134
- startTimer(duration);
135
- }
136
- }, [open, duration, context.isClosePausedRef, startTimer]);
137
- React.useEffect(() => {
138
- onToastAdd();
139
- return () => onToastRemove();
140
- }, [onToastAdd, onToastRemove]);
141
- const announceTextContent = React.useMemo(() => {
142
- if (!isWeb)
143
- return null;
144
- return node ? getAnnounceTextContent(node) : null;
145
- }, [node]);
146
- const isHorizontalSwipe = ["left", "right", "horizontal"].includes(
147
- context.swipeDirection
148
- );
149
- const driver = useAnimationDriver();
150
- if (!driver) {
151
- throw new Error("Must set animations in tamagui.config.ts");
152
- }
153
- const { useAnimatedNumber, useAnimatedNumberStyle } = driver;
154
- const animatedNumber = useAnimatedNumber(0);
155
- const AnimatedView = driver["NumberView"] ?? driver.View;
156
- const animatedStyles = useAnimatedNumberStyle(animatedNumber, (val) => {
157
- "worklet";
158
- return {
159
- transform: [isHorizontalSwipe ? { translateX: val } : { translateY: val }]
160
- };
161
- });
162
- const panResponder = React.useMemo(() => {
163
- return PanResponder.create({
164
- onMoveShouldSetPanResponder: (e, gesture) => {
165
- const shouldMove = shouldGrantGestureMove(context.swipeDirection, gesture);
166
- if (shouldMove) {
167
- onSwipeStart == null ? void 0 : onSwipeStart(e);
168
- return true;
169
- }
170
- return false;
171
- },
172
- onPanResponderGrant: (e) => {
173
- if (!isWeb) {
174
- handlePause == null ? void 0 : handlePause();
175
- }
176
- },
177
- onPanResponderMove: (e, gesture) => {
178
- const { x, y } = getGestureDistance(context.swipeDirection, gesture);
179
- const delta = { x, y };
180
- animatedNumber.setValue(isHorizontalSwipe ? x : y, { type: "direct" });
181
- if (isDeltaInDirection(delta, context.swipeDirection, context.swipeThreshold)) {
182
- onSwipeEnd == null ? void 0 : onSwipeEnd(e);
183
- }
184
- onSwipeMove == null ? void 0 : onSwipeMove(e);
185
- },
186
- onPanResponderEnd: (e, { dx, dy }) => {
187
- if (!isDeltaInDirection(
188
- { x: dx, y: dy },
189
- context.swipeDirection,
190
- context.swipeThreshold
191
- )) {
192
- if (!isWeb) {
193
- handleResume == null ? void 0 : handleResume();
194
- }
195
- onSwipeCancel == null ? void 0 : onSwipeCancel(e);
196
- animatedNumber.setValue(0, { type: "spring" });
197
- }
198
- }
199
- });
200
- }, [handlePause, handleResume]);
201
- const themeName = useThemeName();
202
- return /* @__PURE__ */ jsxs(Fragment, { children: [
203
- announceTextContent && /* @__PURE__ */ jsx(
204
- ToastAnnounce,
205
- {
206
- __scopeToast,
207
- role: "status",
208
- "aria-live": type === "foreground" ? "assertive" : "polite",
209
- "aria-atomic": true,
210
- children: announceTextContent
211
- }
212
- ),
213
- /* @__PURE__ */ jsx(PortalItem, { hostName: viewportName ?? "default", children: /* @__PURE__ */ jsx(
214
- ToastInteractiveProvider,
215
- {
216
- scope: __scopeToast,
217
- onClose: () => {
218
- handleClose();
219
- },
220
- children: /* @__PURE__ */ jsx(
221
- Dismissable,
222
- {
223
- onEscapeKeyDown: composeEventHandlers(onEscapeKeyDown, () => {
224
- if (!context.isFocusedToastEscapeKeyDownRef.current) {
225
- handleClose();
226
- }
227
- context.isFocusedToastEscapeKeyDownRef.current = false;
228
- }),
229
- children: /* @__PURE__ */ jsx(Theme, { forceClassName: true, name: themeName, children: /* @__PURE__ */ jsx(
230
- AnimatedView,
231
- {
232
- ...panResponder == null ? void 0 : panResponder.panHandlers,
233
- style: [{ margin: "auto" }, animatedStyles],
234
- children: /* @__PURE__ */ jsx(Collection.ItemSlot, { scope: __scopeToast, children: /* @__PURE__ */ jsx(
235
- ToastImplFrame,
236
- {
237
- role: "status",
238
- "aria-live": "off",
239
- "aria-atomic": true,
240
- "data-state": open ? "open" : "closed",
241
- "data-swipe-direction": context.swipeDirection,
242
- pointerEvents: "auto",
243
- userSelect: "none",
244
- ...toastProps,
245
- ref: composedRefs,
246
- ...isWeb && {
247
- onKeyDown: composeEventHandlers(
248
- props.onKeyDown,
249
- (event) => {
250
- if (event.key !== "Escape")
251
- return;
252
- onEscapeKeyDown == null ? void 0 : onEscapeKeyDown(event);
253
- onEscapeKeyDown == null ? void 0 : onEscapeKeyDown(event);
254
- if (!event.defaultPrevented) {
255
- context.isFocusedToastEscapeKeyDownRef.current = true;
256
- handleClose();
257
- }
258
- }
259
- )
260
- }
261
- }
262
- ) })
263
- }
264
- ) })
265
- }
266
- )
267
- },
268
- props.id
269
- ) })
270
- ] });
271
- }
272
- );
273
- ToastImpl.propTypes = {
274
- type(props) {
275
- if (props.type && !["foreground", "background"].includes(props.type)) {
276
- const error = `Invalid prop \`type\` supplied to \`${TOAST_NAME}\`. Expected \`foreground | background\`.`;
277
- return new Error(error);
278
- }
279
- return null;
280
- }
281
- };
282
- const isDeltaInDirection = (delta, direction, threshold = 0) => {
283
- const deltaX = Math.abs(delta.x);
284
- const deltaY = Math.abs(delta.y);
285
- const isDeltaX = deltaX > deltaY;
286
- if (direction === "left" || direction === "right" || direction === "horizontal") {
287
- return isDeltaX && deltaX > threshold;
288
- } else {
289
- return !isDeltaX && deltaY > threshold;
290
- }
291
- };
292
- function getAnnounceTextContent(container) {
293
- if (!isWeb)
294
- return "";
295
- const textContent = [];
296
- const childNodes = Array.from(container.childNodes);
297
- childNodes.forEach((node) => {
298
- if (node.nodeType === node.TEXT_NODE && node.textContent)
299
- textContent.push(node.textContent);
300
- if (isHTMLElement(node)) {
301
- const isHidden = node.ariaHidden || node.hidden || node.style.display === "none";
302
- const isExcluded = node.dataset.toastAnnounceExclude === "";
303
- if (!isHidden) {
304
- if (isExcluded) {
305
- const altText = node.dataset.toastAnnounceAlt;
306
- if (altText)
307
- textContent.push(altText);
308
- } else {
309
- textContent.push(...getAnnounceTextContent(node));
310
- }
311
- }
312
- }
313
- });
314
- return textContent;
315
- }
316
- function isHTMLElement(node) {
317
- return node.nodeType === node.ELEMENT_NODE;
318
- }
319
- const GESTURE_GRANT_THRESHOLD = 10;
320
- const shouldGrantGestureMove = (dir, { dx, dy }) => {
321
- if ((dir === "horizontal" || dir === "left") && dx < -GESTURE_GRANT_THRESHOLD) {
322
- return true;
323
- } else if ((dir === "horizontal" || dir === "right") && dx > GESTURE_GRANT_THRESHOLD) {
324
- return true;
325
- } else if ((dir === "vertical" || dir === "up") && dy > -GESTURE_GRANT_THRESHOLD) {
326
- return true;
327
- } else if ((dir === "vertical" || dir === "down") && dy < GESTURE_GRANT_THRESHOLD) {
328
- return true;
329
- }
330
- return false;
331
- };
332
- const getGestureDistance = (dir, { dx, dy }) => {
333
- let y = 0;
334
- let x = 0;
335
- if (dir === "horizontal")
336
- x = dx;
337
- else if (dir === "left")
338
- x = Math.min(0, dx);
339
- else if (dir === "right")
340
- x = Math.max(0, dx);
341
- else if (dir === "vertical")
342
- y = dy;
343
- else if (dir === "up")
344
- y = Math.min(0, dy);
345
- else if (dir === "down")
346
- y = Math.max(0, dy);
347
- return {
348
- x,
349
- y
350
- };
351
- };
352
- export {
353
- ToastImpl,
354
- ToastImplFrame,
355
- useToastInteractiveContext
356
- };
357
- //# 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,86 +0,0 @@
1
- import { jsx } from "react/jsx-runtime";
2
- import { createCollection } from "@tamagui/collection";
3
- import { createContextScope } from "@tamagui/create-context";
4
- import * as React from "react";
5
- import { ToastImperativeProvider } from "./ToastImperative";
6
- const PROVIDER_NAME = "ToastProvider";
7
- const [Collection, useCollection, createCollectionScope] = createCollection("Toast");
8
- const [createToastContext, createToastScope] = createContextScope("Toast", [
9
- createCollectionScope
10
- ]);
11
- const [ToastProviderProvider, useToastProviderContext] = createToastContext(PROVIDER_NAME);
12
- const ToastProvider = (props) => {
13
- const {
14
- __scopeToast,
15
- id: providedId,
16
- burntOptions,
17
- native,
18
- notificationOptions,
19
- label = "Notification",
20
- duration = 5e3,
21
- swipeDirection = "right",
22
- swipeThreshold = 50,
23
- children
24
- } = props;
25
- const id = providedId ?? React.useId();
26
- const [viewports, setViewports] = React.useState({});
27
- const [toastCount, setToastCount] = React.useState(0);
28
- const isFocusedToastEscapeKeyDownRef = React.useRef(false);
29
- const isClosePausedRef = React.useRef(false);
30
- const handleViewportChange = React.useCallback(
31
- (name, viewport) => {
32
- setViewports((prev) => ({ ...prev, [name]: viewport }));
33
- },
34
- []
35
- );
36
- const options = React.useMemo(() => {
37
- return {
38
- duration,
39
- burntOptions,
40
- native,
41
- notificationOptions
42
- };
43
- }, [JSON.stringify([duration, burntOptions, native, notificationOptions])]);
44
- return /* @__PURE__ */ jsx(Collection.Provider, { scope: __scopeToast, children: /* @__PURE__ */ jsx(
45
- ToastProviderProvider,
46
- {
47
- scope: __scopeToast,
48
- id,
49
- label,
50
- duration,
51
- swipeDirection,
52
- swipeThreshold,
53
- toastCount,
54
- viewports,
55
- onViewportChange: handleViewportChange,
56
- onToastAdd: React.useCallback(() => {
57
- setToastCount((prevCount) => prevCount + 1);
58
- }, []),
59
- onToastRemove: React.useCallback(() => {
60
- setToastCount((prevCount) => prevCount - 1);
61
- }, []),
62
- isFocusedToastEscapeKeyDownRef,
63
- isClosePausedRef,
64
- children: /* @__PURE__ */ jsx(ToastImperativeProvider, { options, children })
65
- }
66
- ) });
67
- };
68
- ToastProvider.propTypes = {
69
- label(props) {
70
- if (props.label && typeof props.label === "string" && !props.label.trim()) {
71
- const error = `Invalid prop \`label\` supplied to \`${PROVIDER_NAME}\`. Expected non-empty \`string\`.`;
72
- return new Error(error);
73
- }
74
- return null;
75
- }
76
- };
77
- ToastProvider.displayName = PROVIDER_NAME;
78
- export {
79
- Collection,
80
- ToastProvider,
81
- createToastContext,
82
- createToastScope,
83
- useCollection,
84
- useToastProviderContext
85
- };
86
- //# sourceMappingURL=ToastProvider.mjs.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/ToastProvider.tsx"],
4
- "mappings": "AAkJQ;AAlJR,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,oBAAC,WAAW,UAAX,EAAoB,OAAO,cAC1B;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,kBAAkB;AAAA,MAClB,YAAY,MAAM,YAAY,MAAM;AAClC,sBAAc,CAAC,cAAc,YAAY,CAAC;AAAA,MAC5C,GAAG,CAAC,CAAC;AAAA,MACL,eAAe,MAAM,YAAY,MAAM;AACrC,sBAAc,CAAC,cAAc,YAAY,CAAC;AAAA,MAC5C,GAAG,CAAC,CAAC;AAAA,MACL;AAAA,MACA;AAAA,MAEA,8BAAC,2BAAwB,SAAmB,UAAS;AAAA;AAAA,EACvD,GACF;AAEJ;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,303 +0,0 @@
1
- import { jsx, jsxs } from "react/jsx-runtime";
2
- import { AnimatePresence } from "@tamagui/animate-presence";
3
- import { useComposedRefs } from "@tamagui/compose-refs";
4
- import { isWeb, styled } from "@tamagui/core";
5
- import { PortalHost } from "@tamagui/portal";
6
- import { YStack } from "@tamagui/stacks";
7
- import { VisuallyHidden } from "@tamagui/visually-hidden";
8
- import * as React from "react";
9
- import {
10
- Collection,
11
- useCollection,
12
- useToastProviderContext
13
- } from "./ToastProvider";
14
- const VIEWPORT_NAME = "ToastViewport";
15
- const VIEWPORT_DEFAULT_HOTKEY = ["F8"];
16
- const VIEWPORT_PAUSE = "toast.viewportPause";
17
- const VIEWPORT_RESUME = "toast.viewportResume";
18
- const ToastViewportWrapperFrame = styled(YStack, {
19
- name: "ViewportWrapper",
20
- variants: {
21
- unstyled: {
22
- false: {
23
- pointerEvents: "box-none",
24
- top: 0,
25
- bottom: 0,
26
- left: 0,
27
- right: 0,
28
- position: isWeb ? "fixed" : "absolute",
29
- maxWidth: "100%",
30
- tabIndex: 0,
31
- zIndex: 1e5
32
- }
33
- }
34
- },
35
- defaultVariants: {
36
- unstyled: false
37
- }
38
- });
39
- const ToastViewportFrame = styled(YStack, {
40
- name: VIEWPORT_NAME,
41
- variants: {
42
- unstyled: {
43
- false: {
44
- pointerEvents: "box-none",
45
- position: isWeb ? "fixed" : "absolute",
46
- maxWidth: "100%"
47
- }
48
- }
49
- },
50
- defaultVariants: {
51
- unstyled: false
52
- }
53
- });
54
- const ToastViewport = React.forwardRef(
55
- (props, forwardedRef) => {
56
- const {
57
- __scopeToast,
58
- hotkey = VIEWPORT_DEFAULT_HOTKEY,
59
- label = "Notifications ({hotkey})",
60
- name = "default",
61
- multipleToasts,
62
- ...viewportProps
63
- } = props;
64
- const context = useToastProviderContext(VIEWPORT_NAME, __scopeToast);
65
- const getItems = useCollection(__scopeToast);
66
- const headFocusProxyRef = React.useRef(null);
67
- const tailFocusProxyRef = React.useRef(null);
68
- const wrapperRef = React.useRef(null);
69
- const ref = React.useRef(null);
70
- const onViewportChange = React.useCallback(
71
- (el) => {
72
- if (context.viewports[name] !== el)
73
- context.onViewportChange(name, el);
74
- },
75
- [name, context.viewports]
76
- );
77
- const composedRefs = useComposedRefs(forwardedRef, ref, onViewportChange);
78
- const hotkeyLabel = hotkey.join("+").replace(/Key/g, "").replace(/Digit/g, "");
79
- const hasToasts = context.toastCount > 0;
80
- React.useEffect(() => {
81
- if (!isWeb)
82
- return;
83
- if (context.toastCount === 0)
84
- return;
85
- const handleKeyDown = (event) => {
86
- var _a;
87
- const isHotkeyPressed = hotkey.every(
88
- (key) => event[key] || event.code === key
89
- );
90
- if (isHotkeyPressed)
91
- (_a = ref.current) == null ? void 0 : _a.focus();
92
- };
93
- document.addEventListener("keydown", handleKeyDown);
94
- return () => {
95
- document.removeEventListener("keydown", handleKeyDown);
96
- };
97
- }, [hotkey, context.toastCount]);
98
- React.useEffect(() => {
99
- if (!isWeb)
100
- return;
101
- if (context.toastCount === 0)
102
- return;
103
- const wrapper = wrapperRef.current;
104
- const viewport = ref.current;
105
- if (hasToasts && wrapper && viewport) {
106
- const handlePause = () => {
107
- if (!context.isClosePausedRef.current) {
108
- const pauseEvent = new CustomEvent(VIEWPORT_PAUSE);
109
- viewport.dispatchEvent(pauseEvent);
110
- context.isClosePausedRef.current = true;
111
- }
112
- };
113
- const handleResume = () => {
114
- if (context.isClosePausedRef.current) {
115
- const resumeEvent = new CustomEvent(VIEWPORT_RESUME);
116
- viewport.dispatchEvent(resumeEvent);
117
- context.isClosePausedRef.current = false;
118
- }
119
- };
120
- const handleFocusOutResume = (event) => {
121
- const isFocusMovingOutside = !wrapper.contains(
122
- event.relatedTarget
123
- );
124
- if (isFocusMovingOutside)
125
- handleResume();
126
- };
127
- const handlePointerLeaveResume = () => {
128
- const isFocusInside = wrapper.contains(document.activeElement);
129
- if (!isFocusInside)
130
- handleResume();
131
- };
132
- wrapper.addEventListener("focusin", handlePause);
133
- wrapper.addEventListener("focusout", handleFocusOutResume);
134
- wrapper.addEventListener("pointermove", handlePause);
135
- wrapper.addEventListener("pointerleave", handlePointerLeaveResume);
136
- window.addEventListener("blur", handlePause);
137
- window.addEventListener("focus", handleResume);
138
- return () => {
139
- wrapper.removeEventListener("focusin", handlePause);
140
- wrapper.removeEventListener("focusout", handleFocusOutResume);
141
- wrapper.removeEventListener("pointermove", handlePause);
142
- wrapper.removeEventListener("pointerleave", handlePointerLeaveResume);
143
- window.removeEventListener("blur", handlePause);
144
- window.removeEventListener("focus", handleResume);
145
- };
146
- }
147
- }, [hasToasts, context.isClosePausedRef, context.toastCount]);
148
- const getSortedTabbableCandidates = React.useCallback(
149
- ({ tabbingDirection }) => {
150
- const toastItems = getItems();
151
- const tabbableCandidates = toastItems.map((toastItem) => {
152
- const toastNode = toastItem.ref.current;
153
- const toastTabbableCandidates = [toastNode, ...getTabbableCandidates(toastNode)];
154
- return tabbingDirection === "forwards" ? toastTabbableCandidates : toastTabbableCandidates.reverse();
155
- });
156
- return (tabbingDirection === "forwards" ? tabbableCandidates.reverse() : tabbableCandidates).flat();
157
- },
158
- [getItems]
159
- );
160
- React.useEffect(() => {
161
- if (!isWeb)
162
- return;
163
- if (context.toastCount === 0)
164
- return;
165
- const viewport = ref.current;
166
- if (viewport) {
167
- const handleKeyDown = (event) => {
168
- var _a, _b, _c;
169
- const isMetaKey = event.altKey || event.ctrlKey || event.metaKey;
170
- const isTabKey = event.key === "Tab" && !isMetaKey;
171
- if (isTabKey) {
172
- const focusedElement = document.activeElement;
173
- const isTabbingBackwards = event.shiftKey;
174
- const targetIsViewport = event.target === viewport;
175
- if (targetIsViewport && isTabbingBackwards) {
176
- (_a = headFocusProxyRef.current) == null ? void 0 : _a.focus();
177
- return;
178
- }
179
- const tabbingDirection = isTabbingBackwards ? "backwards" : "forwards";
180
- const sortedCandidates = getSortedTabbableCandidates({ tabbingDirection });
181
- const index = sortedCandidates.findIndex(
182
- (candidate) => candidate === focusedElement
183
- );
184
- if (focusFirst(sortedCandidates.slice(index + 1))) {
185
- event.preventDefault();
186
- } else {
187
- isTabbingBackwards ? (_b = headFocusProxyRef.current) == null ? void 0 : _b.focus() : (_c = tailFocusProxyRef.current) == null ? void 0 : _c.focus();
188
- }
189
- }
190
- };
191
- viewport.addEventListener("keydown", handleKeyDown);
192
- return () => viewport.removeEventListener("keydown", handleKeyDown);
193
- }
194
- }, [getItems, getSortedTabbableCandidates, context.toastCount]);
195
- return /* @__PURE__ */ jsxs(
196
- ToastViewportWrapperFrame,
197
- {
198
- ref: wrapperRef,
199
- role: "region",
200
- "aria-label": label.replace("{hotkey}", hotkeyLabel),
201
- tabIndex: -1,
202
- children: [
203
- hasToasts && /* @__PURE__ */ jsx(
204
- FocusProxy,
205
- {
206
- viewportName: name,
207
- ref: headFocusProxyRef,
208
- onFocusFromOutsideViewport: () => {
209
- const tabbableCandidates = getSortedTabbableCandidates({
210
- tabbingDirection: "forwards"
211
- });
212
- focusFirst(tabbableCandidates);
213
- }
214
- }
215
- ),
216
- /* @__PURE__ */ jsx(Collection.Slot, { scope: __scopeToast, children: /* @__PURE__ */ jsx(ToastViewportFrame, { focusable: context.toastCount > 0, ref: composedRefs, ...viewportProps, children: /* @__PURE__ */ jsx(
217
- PortalHost,
218
- {
219
- render: (children) => /* @__PURE__ */ jsx(AnimatePresence, { exitBeforeEnter: !multipleToasts, children }),
220
- name: name ?? "default"
221
- }
222
- ) }) }),
223
- hasToasts && /* @__PURE__ */ jsx(
224
- FocusProxy,
225
- {
226
- viewportName: name,
227
- ref: tailFocusProxyRef,
228
- onFocusFromOutsideViewport: () => {
229
- const tabbableCandidates = getSortedTabbableCandidates({
230
- tabbingDirection: "backwards"
231
- });
232
- focusFirst(tabbableCandidates);
233
- }
234
- }
235
- )
236
- ]
237
- }
238
- );
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 /* @__PURE__ */ jsx(
249
- VisuallyHidden,
250
- {
251
- "aria-hidden": true,
252
- tabIndex: 0,
253
- ...proxyProps,
254
- ref: forwardedRef,
255
- position: isWeb ? "fixed" : "absolute",
256
- onFocus: (event) => {
257
- if (!isWeb)
258
- return;
259
- const prevFocusedElement = event.relatedTarget;
260
- const isFocusFromOutsideViewport = !(viewport == null ? void 0 : viewport.contains(prevFocusedElement));
261
- if (isFocusFromOutsideViewport)
262
- onFocusFromOutsideViewport();
263
- }
264
- }
265
- );
266
- }
267
- );
268
- FocusProxy.displayName = FOCUS_PROXY_NAME;
269
- function focusFirst(candidates) {
270
- if (!isWeb)
271
- return;
272
- const previouslyFocusedElement = document.activeElement;
273
- return candidates.some((candidate) => {
274
- if (candidate === previouslyFocusedElement)
275
- return true;
276
- candidate.focus();
277
- return document.activeElement !== previouslyFocusedElement;
278
- });
279
- }
280
- function getTabbableCandidates(container) {
281
- if (!isWeb)
282
- return [];
283
- const containerHtml = container;
284
- const nodes = [];
285
- const walker = document.createTreeWalker(containerHtml, NodeFilter.SHOW_ELEMENT, {
286
- acceptNode: (node) => {
287
- const isHiddenInput = node.tagName === "INPUT" && node.type === "hidden";
288
- if (node.disabled || node.hidden || isHiddenInput)
289
- return NodeFilter.FILTER_SKIP;
290
- return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
291
- }
292
- });
293
- while (walker.nextNode())
294
- nodes.push(walker.currentNode);
295
- return nodes;
296
- }
297
- export {
298
- ToastViewport,
299
- VIEWPORT_DEFAULT_HOTKEY,
300
- VIEWPORT_PAUSE,
301
- VIEWPORT_RESUME
302
- };
303
- //# 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
- }