@tamagui/toast 1.14.0 → 1.14.2

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 (103) hide show
  1. package/dist/cjs/Toast.js +185 -1
  2. package/dist/cjs/Toast.js.map +2 -2
  3. package/dist/cjs/ToastAnnounce.js +92 -1
  4. package/dist/cjs/ToastAnnounce.js.map +2 -2
  5. package/dist/cjs/ToastImperative.js +110 -1
  6. package/dist/cjs/ToastImperative.js.map +2 -2
  7. package/dist/cjs/ToastImpl.js +352 -1
  8. package/dist/cjs/ToastImpl.js.map +2 -2
  9. package/dist/cjs/ToastProvider.js +119 -1
  10. package/dist/cjs/ToastProvider.js.map +2 -2
  11. package/dist/cjs/ToastViewport.js +312 -1
  12. package/dist/cjs/ToastViewport.js.map +2 -2
  13. package/dist/cjs/constants.js +28 -1
  14. package/dist/cjs/constants.js.map +2 -2
  15. package/dist/cjs/createNativeToast.js +69 -1
  16. package/dist/cjs/createNativeToast.js.map +2 -2
  17. package/dist/cjs/createNativeToast.native.js +43 -1
  18. package/dist/cjs/createNativeToast.native.js.map +2 -2
  19. package/dist/cjs/index.js +18 -1
  20. package/dist/cjs/index.js.map +2 -2
  21. package/dist/cjs/types.js +16 -1
  22. package/dist/cjs/types.js.map +2 -2
  23. package/dist/esm/Toast.js +163 -1
  24. package/dist/esm/Toast.js.map +2 -2
  25. package/dist/esm/Toast.mjs +163 -1
  26. package/dist/esm/Toast.mjs.map +2 -2
  27. package/dist/esm/ToastAnnounce.js +63 -1
  28. package/dist/esm/ToastAnnounce.js.map +2 -2
  29. package/dist/esm/ToastAnnounce.mjs +63 -1
  30. package/dist/esm/ToastAnnounce.mjs.map +2 -2
  31. package/dist/esm/ToastImperative.js +73 -1
  32. package/dist/esm/ToastImperative.js.map +2 -2
  33. package/dist/esm/ToastImperative.mjs +73 -1
  34. package/dist/esm/ToastImperative.mjs.map +2 -2
  35. package/dist/esm/ToastImpl.js +328 -1
  36. package/dist/esm/ToastImpl.js.map +2 -2
  37. package/dist/esm/ToastImpl.mjs +328 -1
  38. package/dist/esm/ToastImpl.mjs.map +2 -2
  39. package/dist/esm/ToastProvider.js +80 -1
  40. package/dist/esm/ToastProvider.js.map +2 -2
  41. package/dist/esm/ToastProvider.mjs +80 -1
  42. package/dist/esm/ToastProvider.mjs.map +2 -2
  43. package/dist/esm/ToastViewport.js +279 -1
  44. package/dist/esm/ToastViewport.js.map +2 -2
  45. package/dist/esm/ToastViewport.mjs +279 -1
  46. package/dist/esm/ToastViewport.mjs.map +2 -2
  47. package/dist/esm/constants.js +4 -1
  48. package/dist/esm/constants.js.map +2 -2
  49. package/dist/esm/constants.mjs +4 -1
  50. package/dist/esm/constants.mjs.map +2 -2
  51. package/dist/esm/createNativeToast.js +44 -1
  52. package/dist/esm/createNativeToast.js.map +2 -2
  53. package/dist/esm/createNativeToast.mjs +44 -1
  54. package/dist/esm/createNativeToast.mjs.map +2 -2
  55. package/dist/esm/createNativeToast.native.js +18 -1
  56. package/dist/esm/createNativeToast.native.js.map +2 -2
  57. package/dist/esm/createNativeToast.native.mjs +18 -1
  58. package/dist/esm/createNativeToast.native.mjs.map +2 -2
  59. package/dist/esm/index.js +1 -1
  60. package/dist/esm/index.js.map +1 -1
  61. package/dist/esm/index.mjs +1 -1
  62. package/dist/esm/index.mjs.map +1 -1
  63. package/dist/jsx/Toast.js +156 -1
  64. package/dist/jsx/Toast.js.map +2 -2
  65. package/dist/jsx/Toast.mjs +156 -1
  66. package/dist/jsx/Toast.mjs.map +2 -2
  67. package/dist/jsx/ToastAnnounce.js +59 -1
  68. package/dist/jsx/ToastAnnounce.js.map +2 -2
  69. package/dist/jsx/ToastAnnounce.mjs +59 -1
  70. package/dist/jsx/ToastAnnounce.mjs.map +2 -2
  71. package/dist/jsx/ToastImperative.js +72 -1
  72. package/dist/jsx/ToastImperative.js.map +2 -2
  73. package/dist/jsx/ToastImperative.mjs +72 -1
  74. package/dist/jsx/ToastImperative.mjs.map +2 -2
  75. package/dist/jsx/ToastImpl.js +307 -1
  76. package/dist/jsx/ToastImpl.js.map +2 -2
  77. package/dist/jsx/ToastImpl.mjs +307 -1
  78. package/dist/jsx/ToastImpl.mjs.map +2 -2
  79. package/dist/jsx/ToastProvider.js +75 -1
  80. package/dist/jsx/ToastProvider.js.map +2 -2
  81. package/dist/jsx/ToastProvider.mjs +75 -1
  82. package/dist/jsx/ToastProvider.mjs.map +2 -2
  83. package/dist/jsx/ToastViewport.js +259 -1
  84. package/dist/jsx/ToastViewport.js.map +2 -2
  85. package/dist/jsx/ToastViewport.mjs +259 -1
  86. package/dist/jsx/ToastViewport.mjs.map +2 -2
  87. package/dist/jsx/constants.js +4 -1
  88. package/dist/jsx/constants.js.map +2 -2
  89. package/dist/jsx/constants.mjs +4 -1
  90. package/dist/jsx/constants.mjs.map +2 -2
  91. package/dist/jsx/createNativeToast.js +44 -1
  92. package/dist/jsx/createNativeToast.js.map +2 -2
  93. package/dist/jsx/createNativeToast.mjs +44 -1
  94. package/dist/jsx/createNativeToast.mjs.map +2 -2
  95. package/dist/jsx/createNativeToast.native.js +18 -1
  96. package/dist/jsx/createNativeToast.native.js.map +2 -2
  97. package/dist/jsx/createNativeToast.native.mjs +18 -1
  98. package/dist/jsx/createNativeToast.native.mjs.map +2 -2
  99. package/dist/jsx/index.js +1 -1
  100. package/dist/jsx/index.js.map +1 -1
  101. package/dist/jsx/index.mjs +1 -1
  102. package/dist/jsx/index.mjs.map +1 -1
  103. package/package.json +13 -13
@@ -1,2 +1,2 @@
1
- export*from"./Toast.js";
1
+ export * from "./Toast.js";
2
2
  //# sourceMappingURL=index.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts"],
4
4
  "sourcesContent": ["export * from './Toast.js'\n"],
5
- "mappings": "AAAA,WAAc",
5
+ "mappings": "AAAA,cAAc;",
6
6
  "names": []
7
7
  }
package/dist/jsx/Toast.js CHANGED
@@ -1,2 +1,157 @@
1
- import{composeEventHandlers as P,styled as n,themeable as _,useEvent as u,useId as R,withStaticProperties as b}from"@tamagui/core";import{ThemeableStack as I}from"@tamagui/stacks";import{SizableText as f}from"@tamagui/text";import{useControllableState as M}from"@tamagui/use-controllable-state";import*as a from"react";import{TOAST_NAME as O}from"./constants";import{ToastAnnounceExclude as C}from"./ToastAnnounce";import{useToast as V,useToastController as $,useToastState as G}from"./ToastImperative.js";import{ToastImpl as L,ToastImplFrame as y,useToastInteractiveContext as k}from"./ToastImpl";import{ToastProvider as H,createToastScope as j}from"./ToastProvider";import{ToastViewport as q}from"./ToastViewport";const E="ToastTitle",B=n(f,{name:E,variants:{unstyled:{false:{color:"$color",size:"$4"}}},defaultVariants:{unstyled:!1}}),S=a.forwardRef((o,t)=>{const{__scopeToast:s,...e}=o;return<B{...e}ref={t}/>});S.displayName=E;const v="ToastDescription",J=n(f,{name:v,variants:{unstyled:{false:{color:"$color11",size:"$1"}}},defaultVariants:{unstyled:!1}}),A=a.forwardRef((o,t)=>{const{__scopeToast:s,...e}=o;return<J{...e}ref={t}/>});A.displayName=v;const x="ToastAction",p=a.forwardRef((o,t)=>{const{altText:s,...e}=o;return s?<C altText={s}asChild><T{...e}ref={t}/></C>:null});p.propTypes={altText(o){return o.altText?null:new Error(`Missing prop \`altText\` expected on \`${x}\``)}},p.displayName=x;const i="ToastClose",K=n(I,{name:i,tag:"button"}),T=a.forwardRef((o,t)=>{const{__scopeToast:s,...e}=o,r=k(i,s);return<C asChild><K accessibilityLabel="Dialog Close"{...e}ref={t}onPress={P(o.onPress,r.onClose)}/></C>});T.displayName=i;const N=a.forwardRef(y.extractable((o,t)=>{const{forceMount:s,open:e,defaultOpen:r,onOpenChange:D,...w}=o,[c,m]=M({prop:e,defaultProp:r??!0,onChange:D}),g=R(),h=u(o.onPause),F=u(o.onResume);return s||c?<L id={g}open={c}{...w}ref={t}onClose={()=>m(!1)}onPause={h}onResume={F}onSwipeEnd={P(o.onSwipeEnd,W=>{m(!1)})}/>:null}));N.displayName=O;const Q=b(_(N,y.staticConfig),{Title:S,Description:A,Action:p,Close:T});export{Q as Toast,H as ToastProvider,q as ToastViewport,j as createToastScope,V as useToast,$ as useToastController,G as useToastState};
1
+ import {
2
+ composeEventHandlers,
3
+ styled,
4
+ themeable,
5
+ useEvent,
6
+ useId,
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.js";
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 <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 <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 <ToastAnnounceExclude altText={altText} asChild><ToastClose {...actionProps} ref={forwardedRef} /></ToastAnnounceExclude>;
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 <ToastAnnounceExclude asChild><ToastCloseFrame
102
+ accessibilityLabel="Dialog Close"
103
+ {...closeProps}
104
+ ref={forwardedRef}
105
+ onPress={composeEventHandlers(props.onPress, interactiveContext.onClose)}
106
+ /></ToastAnnounceExclude>;
107
+ }
108
+ );
109
+ ToastClose.displayName = CLOSE_NAME;
110
+ const ToastComponent = React.forwardRef(
111
+ ToastImplFrame.extractable((props, forwardedRef) => {
112
+ const { forceMount, open: openProp, defaultOpen, onOpenChange, ...toastProps } = props;
113
+ const [open, setOpen] = useControllableState({
114
+ prop: openProp,
115
+ defaultProp: defaultOpen ?? true,
116
+ onChange: onOpenChange
117
+ });
118
+ const id = useId();
119
+ const onPause = useEvent(props.onPause);
120
+ const onResume = useEvent(props.onResume);
121
+ const shouldShow = forceMount || open;
122
+ if (!shouldShow)
123
+ return null;
124
+ return <ToastImpl
125
+ id={id}
126
+ open={open}
127
+ {...toastProps}
128
+ ref={forwardedRef}
129
+ onClose={() => setOpen(false)}
130
+ onPause={onPause}
131
+ onResume={onResume}
132
+ onSwipeEnd={composeEventHandlers(props.onSwipeEnd, (event) => {
133
+ setOpen(false);
134
+ })}
135
+ />;
136
+ })
137
+ );
138
+ ToastComponent.displayName = TOAST_NAME;
139
+ const Toast = withStaticProperties(
140
+ themeable(ToastComponent, ToastImplFrame.staticConfig),
141
+ {
142
+ Title: ToastTitle,
143
+ Description: ToastDescription,
144
+ Action: ToastAction,
145
+ Close: ToastClose
146
+ }
147
+ );
148
+ export {
149
+ Toast,
150
+ ToastProvider,
151
+ ToastViewport,
152
+ createToastScope,
153
+ useToast,
154
+ useToastController,
155
+ useToastState
156
+ };
2
157
  //# sourceMappingURL=Toast.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/Toast.tsx"],
4
4
  "sourcesContent": ["import {\n GetProps,\n TamaguiElement,\n composeEventHandlers,\n styled,\n themeable,\n useEvent,\n useId,\n withStaticProperties,\n} from '@tamagui/core'\nimport { ThemeableStack } from '@tamagui/stacks'\nimport { SizableText } from '@tamagui/text'\nimport { useControllableState } from '@tamagui/use-controllable-state'\nimport * as React from 'react'\n\nimport { TOAST_NAME } from './constants'\nimport { ToastAnnounceExclude } from './ToastAnnounce'\nimport {\n ToastNativePlatform,\n ToastNativeValue,\n useToast,\n useToastController,\n useToastState,\n} from './ToastImperative.js'\nimport {\n ToastImpl,\n ToastImplFrame,\n ToastProps,\n useToastInteractiveContext,\n} from './ToastImpl'\nimport {\n ScopedProps,\n ToastProvider,\n ToastProviderProps,\n createToastScope,\n} from './ToastProvider'\nimport { ToastViewport, ToastViewportProps } from './ToastViewport'\n\n/* -------------------------------------------------------------------------------------------------\n * ToastTitle\n * -----------------------------------------------------------------------------------------------*/\n\nconst TITLE_NAME = 'ToastTitle'\n\nconst ToastTitleFrame = styled(SizableText, {\n name: TITLE_NAME,\n variants: {\n unstyled: {\n false: {\n color: '$color',\n size: '$4',\n },\n },\n },\n defaultVariants: {\n unstyled: false,\n },\n})\n\ntype PrimitiveDivProps = GetProps<typeof ToastTitleFrame>\ntype ToastTitleProps = PrimitiveDivProps & {}\n\nconst ToastTitle = React.forwardRef<TamaguiElement, ToastTitleProps>(\n (props: ScopedProps<ToastTitleProps>, forwardedRef) => {\n const { __scopeToast, ...titleProps } = props\n return <ToastTitleFrame {...titleProps} ref={forwardedRef} />\n }\n)\n\nToastTitle.displayName = TITLE_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * ToastDescription\n * -----------------------------------------------------------------------------------------------*/\n\nconst DESCRIPTION_NAME = 'ToastDescription'\n\nconst ToastDescriptionFrame = styled(SizableText, {\n name: DESCRIPTION_NAME,\n\n variants: {\n unstyled: {\n false: {\n color: '$color11',\n size: '$1',\n },\n },\n },\n\n defaultVariants: {\n unstyled: false,\n },\n})\n\ntype ToastDescriptionFrameProps = GetProps<typeof ToastDescriptionFrame>\ntype ToastDescriptionProps = ToastDescriptionFrameProps & {}\n\nconst ToastDescription = React.forwardRef<TamaguiElement, ToastDescriptionProps>(\n (props: ScopedProps<ToastDescriptionProps>, forwardedRef) => {\n const { __scopeToast, ...descriptionProps } = props\n return <ToastDescriptionFrame {...descriptionProps} ref={forwardedRef} />\n }\n)\n\nToastDescription.displayName = DESCRIPTION_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * ToastAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst ACTION_NAME = 'ToastAction'\n\ntype ToastActionProps = ToastCloseProps & {\n /**\n * A short description for an alternate way to carry out the action. For screen reader users\n * who will not be able to navigate to the button easily/quickly.\n * @example <ToastAction altText=\"Goto account settings to updgrade\">Upgrade</ToastAction>\n * @example <ToastAction altText=\"Undo (Alt+U)\">Undo</ToastAction>\n */\n altText: string\n}\n\nconst ToastAction = React.forwardRef<TamaguiElement, ToastActionProps>(\n (props: ScopedProps<ToastActionProps>, forwardedRef) => {\n const { altText, ...actionProps } = props\n if (!altText) return null\n return (\n <ToastAnnounceExclude altText={altText} asChild>\n <ToastClose {...actionProps} ref={forwardedRef} />\n </ToastAnnounceExclude>\n )\n }\n)\n\nToastAction.propTypes = {\n altText(props) {\n if (!props.altText) {\n return new Error(`Missing prop \\`altText\\` expected on \\`${ACTION_NAME}\\``)\n }\n return null\n },\n}\n\nToastAction.displayName = ACTION_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * ToastClose\n * -----------------------------------------------------------------------------------------------*/\n\nconst CLOSE_NAME = 'ToastClose'\n\nconst ToastCloseFrame = styled(ThemeableStack, {\n name: CLOSE_NAME,\n tag: 'button',\n})\ntype ToastCloseFrameProps = GetProps<typeof ToastCloseFrame>\ntype ToastCloseProps = ToastCloseFrameProps & {}\n\nconst ToastClose = React.forwardRef<TamaguiElement, ToastCloseProps>(\n (props: ScopedProps<ToastCloseProps>, forwardedRef) => {\n const { __scopeToast, ...closeProps } = props\n const interactiveContext = useToastInteractiveContext(CLOSE_NAME, __scopeToast)\n\n return (\n <ToastAnnounceExclude asChild>\n <ToastCloseFrame\n accessibilityLabel=\"Dialog Close\"\n {...closeProps}\n ref={forwardedRef}\n onPress={composeEventHandlers(props.onPress as any, interactiveContext.onClose)}\n />\n </ToastAnnounceExclude>\n )\n }\n)\n\nToastClose.displayName = CLOSE_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * Toast\n * -----------------------------------------------------------------------------------------------*/\n\nconst ToastComponent = React.forwardRef<TamaguiElement, ToastProps>(\n ToastImplFrame.extractable((props: ScopedProps<ToastProps>, forwardedRef) => {\n const { forceMount, open: openProp, defaultOpen, onOpenChange, ...toastProps } = props\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? true,\n onChange: onOpenChange,\n })\n\n const id = useId()\n const onPause = useEvent(props.onPause)\n const onResume = useEvent(props.onResume)\n const shouldShow = forceMount || open\n\n if (!shouldShow) return null\n\n return (\n <ToastImpl\n id={id}\n open={open}\n {...toastProps}\n ref={forwardedRef}\n onClose={() => setOpen(false)}\n onPause={onPause}\n onResume={onResume}\n onSwipeEnd={composeEventHandlers(props.onSwipeEnd, (event) => {\n setOpen(false)\n })}\n />\n )\n })\n)\n\nToastComponent.displayName = TOAST_NAME\n\nconst Toast = withStaticProperties(\n themeable(ToastComponent, ToastImplFrame.staticConfig),\n {\n Title: ToastTitle,\n Description: ToastDescription,\n Action: ToastAction,\n Close: ToastClose,\n }\n)\n\n/* ---------------------------------------------------------------------------------------------- */\n\nexport {\n Toast,\n ToastProvider,\n ToastViewport,\n //\n createToastScope,\n // imperative\n useToast,\n useToastController,\n useToastState,\n}\nexport type {\n ToastActionProps,\n ToastCloseProps,\n ToastDescriptionProps,\n ToastProps,\n ToastProviderProps,\n ToastTitleProps,\n ToastViewportProps,\n // imperative\n ToastNativeValue,\n ToastNativePlatform,\n}\n"],
5
- "mappings": "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",
6
- "names": ["composeEventHandlers", "styled", "themeable", "useEvent", "useId", "withStaticProperties", "ThemeableStack", "SizableText", "useControllableState", "React", "TOAST_NAME", "ToastAnnounceExclude", "useToast", "useToastController", "useToastState", "ToastImpl", "ToastImplFrame", "useToastInteractiveContext", "ToastProvider", "createToastScope", "ToastViewport", "TITLE_NAME", "ToastTitleFrame", "ToastTitle", "props", "forwardedRef", "__scopeToast", "titleProps", "DESCRIPTION_NAME", "ToastDescriptionFrame", "ToastDescription", "descriptionProps", "ACTION_NAME", "ToastAction", "altText", "actionProps", "ToastClose", "CLOSE_NAME", "ToastCloseFrame", "closeProps", "interactiveContext", "ToastComponent", "forceMount", "openProp", "defaultOpen", "onOpenChange", "toastProps", "open", "setOpen", "id", "onPause", "onResume", "event", "Toast"]
5
+ "mappings": "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",
6
+ "names": []
7
7
  }
@@ -1,2 +1,157 @@
1
- import{composeEventHandlers as P,styled as n,themeable as _,useEvent as u,useId as R,withStaticProperties as b}from"@tamagui/core";import{ThemeableStack as I}from"@tamagui/stacks";import{SizableText as f}from"@tamagui/text";import{useControllableState as M}from"@tamagui/use-controllable-state";import*as a from"react";import{TOAST_NAME as O}from"./constants";import{ToastAnnounceExclude as C}from"./ToastAnnounce";import{useToast as V,useToastController as $,useToastState as G}from"./ToastImperative.js";import{ToastImpl as L,ToastImplFrame as y,useToastInteractiveContext as k}from"./ToastImpl";import{ToastProvider as H,createToastScope as j}from"./ToastProvider";import{ToastViewport as q}from"./ToastViewport";const E="ToastTitle",B=n(f,{name:E,variants:{unstyled:{false:{color:"$color",size:"$4"}}},defaultVariants:{unstyled:!1}}),S=a.forwardRef((o,t)=>{const{__scopeToast:s,...e}=o;return<B{...e}ref={t}/>});S.displayName=E;const v="ToastDescription",J=n(f,{name:v,variants:{unstyled:{false:{color:"$color11",size:"$1"}}},defaultVariants:{unstyled:!1}}),A=a.forwardRef((o,t)=>{const{__scopeToast:s,...e}=o;return<J{...e}ref={t}/>});A.displayName=v;const x="ToastAction",p=a.forwardRef((o,t)=>{const{altText:s,...e}=o;return s?<C altText={s}asChild><T{...e}ref={t}/></C>:null});p.propTypes={altText(o){return o.altText?null:new Error(`Missing prop \`altText\` expected on \`${x}\``)}},p.displayName=x;const i="ToastClose",K=n(I,{name:i,tag:"button"}),T=a.forwardRef((o,t)=>{const{__scopeToast:s,...e}=o,r=k(i,s);return<C asChild><K accessibilityLabel="Dialog Close"{...e}ref={t}onPress={P(o.onPress,r.onClose)}/></C>});T.displayName=i;const N=a.forwardRef(y.extractable((o,t)=>{const{forceMount:s,open:e,defaultOpen:r,onOpenChange:D,...w}=o,[c,m]=M({prop:e,defaultProp:r??!0,onChange:D}),g=R(),h=u(o.onPause),F=u(o.onResume);return s||c?<L id={g}open={c}{...w}ref={t}onClose={()=>m(!1)}onPause={h}onResume={F}onSwipeEnd={P(o.onSwipeEnd,W=>{m(!1)})}/>:null}));N.displayName=O;const Q=b(_(N,y.staticConfig),{Title:S,Description:A,Action:p,Close:T});export{Q as Toast,H as ToastProvider,q as ToastViewport,j as createToastScope,V as useToast,$ as useToastController,G as useToastState};
1
+ import {
2
+ composeEventHandlers,
3
+ styled,
4
+ themeable,
5
+ useEvent,
6
+ useId,
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.js";
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 <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 <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 <ToastAnnounceExclude altText={altText} asChild><ToastClose {...actionProps} ref={forwardedRef} /></ToastAnnounceExclude>;
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 <ToastAnnounceExclude asChild><ToastCloseFrame
102
+ accessibilityLabel="Dialog Close"
103
+ {...closeProps}
104
+ ref={forwardedRef}
105
+ onPress={composeEventHandlers(props.onPress, interactiveContext.onClose)}
106
+ /></ToastAnnounceExclude>;
107
+ }
108
+ );
109
+ ToastClose.displayName = CLOSE_NAME;
110
+ const ToastComponent = React.forwardRef(
111
+ ToastImplFrame.extractable((props, forwardedRef) => {
112
+ const { forceMount, open: openProp, defaultOpen, onOpenChange, ...toastProps } = props;
113
+ const [open, setOpen] = useControllableState({
114
+ prop: openProp,
115
+ defaultProp: defaultOpen ?? true,
116
+ onChange: onOpenChange
117
+ });
118
+ const id = useId();
119
+ const onPause = useEvent(props.onPause);
120
+ const onResume = useEvent(props.onResume);
121
+ const shouldShow = forceMount || open;
122
+ if (!shouldShow)
123
+ return null;
124
+ return <ToastImpl
125
+ id={id}
126
+ open={open}
127
+ {...toastProps}
128
+ ref={forwardedRef}
129
+ onClose={() => setOpen(false)}
130
+ onPause={onPause}
131
+ onResume={onResume}
132
+ onSwipeEnd={composeEventHandlers(props.onSwipeEnd, (event) => {
133
+ setOpen(false);
134
+ })}
135
+ />;
136
+ })
137
+ );
138
+ ToastComponent.displayName = TOAST_NAME;
139
+ const Toast = withStaticProperties(
140
+ themeable(ToastComponent, ToastImplFrame.staticConfig),
141
+ {
142
+ Title: ToastTitle,
143
+ Description: ToastDescription,
144
+ Action: ToastAction,
145
+ Close: ToastClose
146
+ }
147
+ );
148
+ export {
149
+ Toast,
150
+ ToastProvider,
151
+ ToastViewport,
152
+ createToastScope,
153
+ useToast,
154
+ useToastController,
155
+ useToastState
156
+ };
2
157
  //# sourceMappingURL=Toast.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/Toast.tsx"],
4
4
  "sourcesContent": ["import {\n GetProps,\n TamaguiElement,\n composeEventHandlers,\n styled,\n themeable,\n useEvent,\n useId,\n withStaticProperties,\n} from '@tamagui/core'\nimport { ThemeableStack } from '@tamagui/stacks'\nimport { SizableText } from '@tamagui/text'\nimport { useControllableState } from '@tamagui/use-controllable-state'\nimport * as React from 'react'\n\nimport { TOAST_NAME } from './constants'\nimport { ToastAnnounceExclude } from './ToastAnnounce'\nimport {\n ToastNativePlatform,\n ToastNativeValue,\n useToast,\n useToastController,\n useToastState,\n} from './ToastImperative.js'\nimport {\n ToastImpl,\n ToastImplFrame,\n ToastProps,\n useToastInteractiveContext,\n} from './ToastImpl'\nimport {\n ScopedProps,\n ToastProvider,\n ToastProviderProps,\n createToastScope,\n} from './ToastProvider'\nimport { ToastViewport, ToastViewportProps } from './ToastViewport'\n\n/* -------------------------------------------------------------------------------------------------\n * ToastTitle\n * -----------------------------------------------------------------------------------------------*/\n\nconst TITLE_NAME = 'ToastTitle'\n\nconst ToastTitleFrame = styled(SizableText, {\n name: TITLE_NAME,\n variants: {\n unstyled: {\n false: {\n color: '$color',\n size: '$4',\n },\n },\n },\n defaultVariants: {\n unstyled: false,\n },\n})\n\ntype PrimitiveDivProps = GetProps<typeof ToastTitleFrame>\ntype ToastTitleProps = PrimitiveDivProps & {}\n\nconst ToastTitle = React.forwardRef<TamaguiElement, ToastTitleProps>(\n (props: ScopedProps<ToastTitleProps>, forwardedRef) => {\n const { __scopeToast, ...titleProps } = props\n return <ToastTitleFrame {...titleProps} ref={forwardedRef} />\n }\n)\n\nToastTitle.displayName = TITLE_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * ToastDescription\n * -----------------------------------------------------------------------------------------------*/\n\nconst DESCRIPTION_NAME = 'ToastDescription'\n\nconst ToastDescriptionFrame = styled(SizableText, {\n name: DESCRIPTION_NAME,\n\n variants: {\n unstyled: {\n false: {\n color: '$color11',\n size: '$1',\n },\n },\n },\n\n defaultVariants: {\n unstyled: false,\n },\n})\n\ntype ToastDescriptionFrameProps = GetProps<typeof ToastDescriptionFrame>\ntype ToastDescriptionProps = ToastDescriptionFrameProps & {}\n\nconst ToastDescription = React.forwardRef<TamaguiElement, ToastDescriptionProps>(\n (props: ScopedProps<ToastDescriptionProps>, forwardedRef) => {\n const { __scopeToast, ...descriptionProps } = props\n return <ToastDescriptionFrame {...descriptionProps} ref={forwardedRef} />\n }\n)\n\nToastDescription.displayName = DESCRIPTION_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * ToastAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst ACTION_NAME = 'ToastAction'\n\ntype ToastActionProps = ToastCloseProps & {\n /**\n * A short description for an alternate way to carry out the action. For screen reader users\n * who will not be able to navigate to the button easily/quickly.\n * @example <ToastAction altText=\"Goto account settings to updgrade\">Upgrade</ToastAction>\n * @example <ToastAction altText=\"Undo (Alt+U)\">Undo</ToastAction>\n */\n altText: string\n}\n\nconst ToastAction = React.forwardRef<TamaguiElement, ToastActionProps>(\n (props: ScopedProps<ToastActionProps>, forwardedRef) => {\n const { altText, ...actionProps } = props\n if (!altText) return null\n return (\n <ToastAnnounceExclude altText={altText} asChild>\n <ToastClose {...actionProps} ref={forwardedRef} />\n </ToastAnnounceExclude>\n )\n }\n)\n\nToastAction.propTypes = {\n altText(props) {\n if (!props.altText) {\n return new Error(`Missing prop \\`altText\\` expected on \\`${ACTION_NAME}\\``)\n }\n return null\n },\n}\n\nToastAction.displayName = ACTION_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * ToastClose\n * -----------------------------------------------------------------------------------------------*/\n\nconst CLOSE_NAME = 'ToastClose'\n\nconst ToastCloseFrame = styled(ThemeableStack, {\n name: CLOSE_NAME,\n tag: 'button',\n})\ntype ToastCloseFrameProps = GetProps<typeof ToastCloseFrame>\ntype ToastCloseProps = ToastCloseFrameProps & {}\n\nconst ToastClose = React.forwardRef<TamaguiElement, ToastCloseProps>(\n (props: ScopedProps<ToastCloseProps>, forwardedRef) => {\n const { __scopeToast, ...closeProps } = props\n const interactiveContext = useToastInteractiveContext(CLOSE_NAME, __scopeToast)\n\n return (\n <ToastAnnounceExclude asChild>\n <ToastCloseFrame\n accessibilityLabel=\"Dialog Close\"\n {...closeProps}\n ref={forwardedRef}\n onPress={composeEventHandlers(props.onPress as any, interactiveContext.onClose)}\n />\n </ToastAnnounceExclude>\n )\n }\n)\n\nToastClose.displayName = CLOSE_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * Toast\n * -----------------------------------------------------------------------------------------------*/\n\nconst ToastComponent = React.forwardRef<TamaguiElement, ToastProps>(\n ToastImplFrame.extractable((props: ScopedProps<ToastProps>, forwardedRef) => {\n const { forceMount, open: openProp, defaultOpen, onOpenChange, ...toastProps } = props\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? true,\n onChange: onOpenChange,\n })\n\n const id = useId()\n const onPause = useEvent(props.onPause)\n const onResume = useEvent(props.onResume)\n const shouldShow = forceMount || open\n\n if (!shouldShow) return null\n\n return (\n <ToastImpl\n id={id}\n open={open}\n {...toastProps}\n ref={forwardedRef}\n onClose={() => setOpen(false)}\n onPause={onPause}\n onResume={onResume}\n onSwipeEnd={composeEventHandlers(props.onSwipeEnd, (event) => {\n setOpen(false)\n })}\n />\n )\n })\n)\n\nToastComponent.displayName = TOAST_NAME\n\nconst Toast = withStaticProperties(\n themeable(ToastComponent, ToastImplFrame.staticConfig),\n {\n Title: ToastTitle,\n Description: ToastDescription,\n Action: ToastAction,\n Close: ToastClose,\n }\n)\n\n/* ---------------------------------------------------------------------------------------------- */\n\nexport {\n Toast,\n ToastProvider,\n ToastViewport,\n //\n createToastScope,\n // imperative\n useToast,\n useToastController,\n useToastState,\n}\nexport type {\n ToastActionProps,\n ToastCloseProps,\n ToastDescriptionProps,\n ToastProps,\n ToastProviderProps,\n ToastTitleProps,\n ToastViewportProps,\n // imperative\n ToastNativeValue,\n ToastNativePlatform,\n}\n"],
5
- "mappings": "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",
6
- "names": ["composeEventHandlers", "styled", "themeable", "useEvent", "useId", "withStaticProperties", "ThemeableStack", "SizableText", "useControllableState", "React", "TOAST_NAME", "ToastAnnounceExclude", "useToast", "useToastController", "useToastState", "ToastImpl", "ToastImplFrame", "useToastInteractiveContext", "ToastProvider", "createToastScope", "ToastViewport", "TITLE_NAME", "ToastTitleFrame", "ToastTitle", "props", "forwardedRef", "__scopeToast", "titleProps", "DESCRIPTION_NAME", "ToastDescriptionFrame", "ToastDescription", "descriptionProps", "ACTION_NAME", "ToastAction", "altText", "actionProps", "ToastClose", "CLOSE_NAME", "ToastCloseFrame", "closeProps", "interactiveContext", "ToastComponent", "forceMount", "openProp", "defaultOpen", "onOpenChange", "toastProps", "open", "setOpen", "id", "onPause", "onResume", "event", "Toast"]
5
+ "mappings": "AAAA;AAAA,EAGE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,sBAAsB;AAC/B,SAAS,mBAAmB;AAC5B,SAAS,4BAA4B;AACrC,YAAY,WAAW;AAEvB,SAAS,kBAAkB;AAC3B,SAAS,4BAA4B;AACrC;AAAA,EAGE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EAEA;AAAA,OACK;AACP;AAAA,EAEE;AAAA,EAEA;AAAA,OACK;AACP,SAAS,qBAAyC;AAMlD,MAAM,aAAa;AAEnB,MAAM,kBAAkB,OAAO,aAAa;AAAA,EAC1C,MAAM;AAAA,EACN,UAAU;AAAA,IACR,UAAU;AAAA,MACR,OAAO;AAAA,QACL,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,UAAU;AAAA,EACZ;AACF,CAAC;AAKD,MAAM,aAAa,MAAM;AAAA,EACvB,CAAC,OAAqC,iBAAiB;AACrD,UAAM,EAAE,cAAc,GAAG,WAAW,IAAI;AACxC,WAAO,CAAC,oBAAoB,YAAY,KAAK,cAAc;AAAA,EAC7D;AACF;AAEA,WAAW,cAAc;AAMzB,MAAM,mBAAmB;AAEzB,MAAM,wBAAwB,OAAO,aAAa;AAAA,EAChD,MAAM;AAAA,EAEN,UAAU;AAAA,IACR,UAAU;AAAA,MACR,OAAO;AAAA,QACL,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAAA,EAEA,iBAAiB;AAAA,IACf,UAAU;AAAA,EACZ;AACF,CAAC;AAKD,MAAM,mBAAmB,MAAM;AAAA,EAC7B,CAAC,OAA2C,iBAAiB;AAC3D,UAAM,EAAE,cAAc,GAAG,iBAAiB,IAAI;AAC9C,WAAO,CAAC,0BAA0B,kBAAkB,KAAK,cAAc;AAAA,EACzE;AACF;AAEA,iBAAiB,cAAc;AAM/B,MAAM,cAAc;AAYpB,MAAM,cAAc,MAAM;AAAA,EACxB,CAAC,OAAsC,iBAAiB;AACtD,UAAM,EAAE,SAAS,GAAG,YAAY,IAAI;AACpC,QAAI,CAAC;AAAS,aAAO;AACrB,WACE,CAAC,qBAAqB,SAAS,SAAS,QACtC,CAAC,eAAe,aAAa,KAAK,cAAc,EAClD,EAFC;AAAA,EAIL;AACF;AAEA,YAAY,YAAY;AAAA,EACtB,QAAQ,OAAO;AACb,QAAI,CAAC,MAAM,SAAS;AAClB,aAAO,IAAI,MAAM,0CAA0C,eAAe;AAAA,IAC5E;AACA,WAAO;AAAA,EACT;AACF;AAEA,YAAY,cAAc;AAM1B,MAAM,aAAa;AAEnB,MAAM,kBAAkB,OAAO,gBAAgB;AAAA,EAC7C,MAAM;AAAA,EACN,KAAK;AACP,CAAC;AAID,MAAM,aAAa,MAAM;AAAA,EACvB,CAAC,OAAqC,iBAAiB;AACrD,UAAM,EAAE,cAAc,GAAG,WAAW,IAAI;AACxC,UAAM,qBAAqB,2BAA2B,YAAY,YAAY;AAE9E,WACE,CAAC,qBAAqB,QACpB,CAAC;AAAA,MACC,mBAAmB;AAAA,UACf;AAAA,MACJ,KAAK;AAAA,MACL,SAAS,qBAAqB,MAAM,SAAgB,mBAAmB,OAAO;AAAA,IAChF,EACF,EAPC;AAAA,EASL;AACF;AAEA,WAAW,cAAc;AAMzB,MAAM,iBAAiB,MAAM;AAAA,EAC3B,eAAe,YAAY,CAAC,OAAgC,iBAAiB;AAC3E,UAAM,EAAE,YAAY,MAAM,UAAU,aAAa,cAAc,GAAG,WAAW,IAAI;AACjF,UAAM,CAAC,MAAM,OAAO,IAAI,qBAAqB;AAAA,MAC3C,MAAM;AAAA,MACN,aAAa,eAAe;AAAA,MAC5B,UAAU;AAAA,IACZ,CAAC;AAED,UAAM,KAAK,MAAM;AACjB,UAAM,UAAU,SAAS,MAAM,OAAO;AACtC,UAAM,WAAW,SAAS,MAAM,QAAQ;AACxC,UAAM,aAAa,cAAc;AAEjC,QAAI,CAAC;AAAY,aAAO;AAExB,WACE,CAAC;AAAA,MACC,IAAI;AAAA,MACJ,MAAM;AAAA,UACF;AAAA,MACJ,KAAK;AAAA,MACL,SAAS,MAAM,QAAQ,KAAK;AAAA,MAC5B,SAAS;AAAA,MACT,UAAU;AAAA,MACV,YAAY,qBAAqB,MAAM,YAAY,CAAC,UAAU;AAC5D,gBAAQ,KAAK;AAAA,MACf,CAAC;AAAA,IACH;AAAA,EAEJ,CAAC;AACH;AAEA,eAAe,cAAc;AAE7B,MAAM,QAAQ;AAAA,EACZ,UAAU,gBAAgB,eAAe,YAAY;AAAA,EACrD;AAAA,IACE,OAAO;AAAA,IACP,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,OAAO;AAAA,EACT;AACF;",
6
+ "names": []
7
7
  }
@@ -1,2 +1,60 @@
1
- import{Stack as i,Text as T,styled as A,useEvent as f,useIsomorphicLayoutEffect as x}from"@tamagui/core";import{Portal as P}from"@tamagui/portal";import{VisuallyHidden as E}from"@tamagui/visually-hidden";import*as s from"react";import{useToastProviderContext as F}from"./ToastProvider";import{TOAST_NAME as y}from"./constants";const S=A(i,{name:"ToastAnnounceExclude"}),h=s.forwardRef((o,e)=>{const{__scopeToast:t,altText:n,...r}=o;return<S data-toast-announce-exclude=""data-toast-announce-alt={n||void 0}{...r}ref={e}/>}),_=o=>{const{__scopeToast:e,children:t,...n}=o,r=F(y,e),[a,c]=s.useState(!1),[u,l]=s.useState(!1);return g(()=>c(!0)),s.useEffect(()=>{const d=setTimeout(()=>l(!0),1e3);return()=>clearTimeout(d)},[]),u?null:<P asChild><E{...n}>{a&&<T>{r.label} {t}</T>}</E></P>};function g(o=()=>{}){const e=f(o);x(()=>{let t=0,n=0;return t=requestAnimationFrame(()=>n=requestAnimationFrame(e)),()=>{cancelAnimationFrame(t),cancelAnimationFrame(n)}},[e])}export{_ as ToastAnnounce,h as ToastAnnounceExclude};
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 { useToastProviderContext } from "./ToastProvider";
12
+ import { TOAST_NAME } from "./constants";
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(() => raf2 = requestAnimationFrame(fn));
50
+ return () => {
51
+ cancelAnimationFrame(raf1);
52
+ cancelAnimationFrame(raf2);
53
+ };
54
+ }, [fn]);
55
+ }
56
+ export {
57
+ ToastAnnounce,
58
+ ToastAnnounceExclude
59
+ };
2
60
  //# sourceMappingURL=ToastAnnounce.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/ToastAnnounce.tsx"],
4
4
  "sourcesContent": ["import {\n GetProps,\n Stack,\n TamaguiElement,\n Text,\n styled,\n useEvent,\n useIsomorphicLayoutEffect,\n} from '@tamagui/core'\nimport { Portal } from '@tamagui/portal'\nimport { VisuallyHidden } from '@tamagui/visually-hidden'\nimport * as React from 'react'\n\nimport { ScopedProps, useToastProviderContext } from './ToastProvider'\nimport { TOAST_NAME } from './constants'\n\nconst ToastAnnounceExcludeFrame = styled(Stack, {\n name: 'ToastAnnounceExclude',\n})\ntype ToastAnnounceExcludeFrameProps = GetProps<typeof ToastAnnounceExcludeFrame>\ntype ToastAnnounceExcludeProps = ToastAnnounceExcludeFrameProps & {\n altText?: string\n}\n\nconst ToastAnnounceExclude = React.forwardRef<TamaguiElement, ToastAnnounceExcludeProps>(\n (props: ScopedProps<ToastAnnounceExcludeProps>, forwardedRef) => {\n const { __scopeToast, altText, ...announceExcludeProps } = props\n\n return (\n <ToastAnnounceExcludeFrame\n data-toast-announce-exclude=\"\"\n data-toast-announce-alt={altText || undefined}\n {...announceExcludeProps}\n ref={forwardedRef}\n />\n )\n }\n)\n\n/* -----------------------------------------------------------------------------------------------*/\n\ninterface ToastAnnounceProps\n extends Omit<GetProps<typeof VisuallyHidden>, 'children'>,\n ScopedProps<{ children: string[] }> {}\n\nconst ToastAnnounce: React.FC<ToastAnnounceProps> = (\n props: ScopedProps<ToastAnnounceProps>\n) => {\n const { __scopeToast, children, ...announceProps } = props\n const context = useToastProviderContext(TOAST_NAME, __scopeToast)\n const [renderAnnounceText, setRenderAnnounceText] = React.useState(false)\n const [isAnnounced, setIsAnnounced] = React.useState(false)\n\n // render text content in the next frame to ensure toast is announced in NVDA\n useNextFrame(() => setRenderAnnounceText(true))\n\n // cleanup after announcing\n React.useEffect(() => {\n const timer = setTimeout(() => setIsAnnounced(true), 1000)\n return () => clearTimeout(timer)\n }, [])\n\n return isAnnounced ? null : (\n <Portal asChild>\n <VisuallyHidden {...announceProps}>\n {renderAnnounceText && (\n <Text>\n {context.label} {children}\n </Text>\n )}\n </VisuallyHidden>\n </Portal>\n )\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction useNextFrame(callback = () => {}) {\n const fn = useEvent(callback)\n useIsomorphicLayoutEffect(() => {\n let raf1 = 0\n let raf2 = 0\n raf1 = requestAnimationFrame(() => (raf2 = requestAnimationFrame(fn)))\n return () => {\n cancelAnimationFrame(raf1)\n cancelAnimationFrame(raf2)\n }\n }, [fn])\n}\n\n\nexport {\n ToastAnnounce,\n ToastAnnounceProps,\n ToastAnnounceExclude,\n ToastAnnounceExcludeProps,\n}\n"],
5
- "mappings": "AAAA,OAEE,SAAAA,EAEA,QAAAC,EACA,UAAAC,EACA,YAAAC,EACA,6BAAAC,MACK,gBACP,OAAS,UAAAC,MAAc,kBACvB,OAAS,kBAAAC,MAAsB,2BAC/B,UAAYC,MAAW,QAEvB,OAAsB,2BAAAC,MAA+B,kBACrD,OAAS,cAAAC,MAAkB,cAE3B,MAAMC,EAA4BR,EAAOF,EAAO,CAC9C,KAAM,sBACR,CAAC,EAMKW,EAAuBJ,EAAM,WACjC,CAACK,EAA+CC,IAAiB,CAC/D,KAAM,CAAE,aAAAC,EAAc,QAAAC,EAAS,GAAGC,CAAqB,EAAIJ,EAE3D,MACE,CAACF,EACC,4BAA4B,EAC5B,yBAAyBK,GAAW,WAChCC,EACJ,KAAKH,EACP,EAEJ,CACF,EAQMI,EACJL,GACG,CACH,KAAM,CAAE,aAAAE,EAAc,SAAAI,EAAU,GAAGC,CAAc,EAAIP,EAC/CQ,EAAUZ,EAAwBC,EAAYK,CAAY,EAC1D,CAACO,EAAoBC,CAAqB,EAAIf,EAAM,SAAS,EAAK,EAClE,CAACgB,EAAaC,CAAc,EAAIjB,EAAM,SAAS,EAAK,EAG1D,OAAAkB,EAAa,IAAMH,EAAsB,EAAI,CAAC,EAG9Cf,EAAM,UAAU,IAAM,CACpB,MAAMmB,EAAQ,WAAW,IAAMF,EAAe,EAAI,EAAG,GAAI,EACzD,MAAO,IAAM,aAAaE,CAAK,CACjC,EAAG,CAAC,CAAC,EAEEH,EAAc,KACnB,CAAClB,EAAO,QACN,CAACC,KAAmBa,IACjBE,GACC,CAACpB,GACEmB,EAAQ,MAAM,EAAEF,EACnB,EAFCjB,GAIL,EANCK,EAOH,EARCD,EAUL,EAIA,SAASoB,EAAaE,EAAW,IAAM,CAAC,EAAG,CACzC,MAAMC,EAAKzB,EAASwB,CAAQ,EAC5BvB,EAA0B,IAAM,CAC9B,IAAIyB,EAAO,EACPC,EAAO,EACX,OAAAD,EAAO,sBAAsB,IAAOC,EAAO,sBAAsBF,CAAE,CAAE,EAC9D,IAAM,CACX,qBAAqBC,CAAI,EACzB,qBAAqBC,CAAI,CAC3B,CACF,EAAG,CAACF,CAAE,CAAC,CACT",
6
- "names": ["Stack", "Text", "styled", "useEvent", "useIsomorphicLayoutEffect", "Portal", "VisuallyHidden", "React", "useToastProviderContext", "TOAST_NAME", "ToastAnnounceExcludeFrame", "ToastAnnounceExclude", "props", "forwardedRef", "__scopeToast", "altText", "announceExcludeProps", "ToastAnnounce", "children", "announceProps", "context", "renderAnnounceText", "setRenderAnnounceText", "isAnnounced", "setIsAnnounced", "useNextFrame", "timer", "callback", "fn", "raf1", "raf2"]
5
+ "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,SAAsB,+BAA+B;AACrD,SAAS,kBAAkB;AAE3B,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,MAAO,OAAO,sBAAsB,EAAE,CAAE;AACrE,WAAO,MAAM;AACX,2BAAqB,IAAI;AACzB,2BAAqB,IAAI;AAAA,IAC3B;AAAA,EACF,GAAG,CAAC,EAAE,CAAC;AACT;",
6
+ "names": []
7
7
  }
@@ -1,2 +1,60 @@
1
- import{Stack as i,Text as T,styled as A,useEvent as f,useIsomorphicLayoutEffect as x}from"@tamagui/core";import{Portal as P}from"@tamagui/portal";import{VisuallyHidden as E}from"@tamagui/visually-hidden";import*as s from"react";import{useToastProviderContext as F}from"./ToastProvider";import{TOAST_NAME as y}from"./constants";const S=A(i,{name:"ToastAnnounceExclude"}),h=s.forwardRef((o,e)=>{const{__scopeToast:t,altText:n,...r}=o;return<S data-toast-announce-exclude=""data-toast-announce-alt={n||void 0}{...r}ref={e}/>}),_=o=>{const{__scopeToast:e,children:t,...n}=o,r=F(y,e),[a,c]=s.useState(!1),[u,l]=s.useState(!1);return g(()=>c(!0)),s.useEffect(()=>{const d=setTimeout(()=>l(!0),1e3);return()=>clearTimeout(d)},[]),u?null:<P asChild><E{...n}>{a&&<T>{r.label} {t}</T>}</E></P>};function g(o=()=>{}){const e=f(o);x(()=>{let t=0,n=0;return t=requestAnimationFrame(()=>n=requestAnimationFrame(e)),()=>{cancelAnimationFrame(t),cancelAnimationFrame(n)}},[e])}export{_ as ToastAnnounce,h as ToastAnnounceExclude};
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 { useToastProviderContext } from "./ToastProvider";
12
+ import { TOAST_NAME } from "./constants";
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(() => raf2 = requestAnimationFrame(fn));
50
+ return () => {
51
+ cancelAnimationFrame(raf1);
52
+ cancelAnimationFrame(raf2);
53
+ };
54
+ }, [fn]);
55
+ }
56
+ export {
57
+ ToastAnnounce,
58
+ ToastAnnounceExclude
59
+ };
2
60
  //# sourceMappingURL=ToastAnnounce.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/ToastAnnounce.tsx"],
4
4
  "sourcesContent": ["import {\n GetProps,\n Stack,\n TamaguiElement,\n Text,\n styled,\n useEvent,\n useIsomorphicLayoutEffect,\n} from '@tamagui/core'\nimport { Portal } from '@tamagui/portal'\nimport { VisuallyHidden } from '@tamagui/visually-hidden'\nimport * as React from 'react'\n\nimport { ScopedProps, useToastProviderContext } from './ToastProvider'\nimport { TOAST_NAME } from './constants'\n\nconst ToastAnnounceExcludeFrame = styled(Stack, {\n name: 'ToastAnnounceExclude',\n})\ntype ToastAnnounceExcludeFrameProps = GetProps<typeof ToastAnnounceExcludeFrame>\ntype ToastAnnounceExcludeProps = ToastAnnounceExcludeFrameProps & {\n altText?: string\n}\n\nconst ToastAnnounceExclude = React.forwardRef<TamaguiElement, ToastAnnounceExcludeProps>(\n (props: ScopedProps<ToastAnnounceExcludeProps>, forwardedRef) => {\n const { __scopeToast, altText, ...announceExcludeProps } = props\n\n return (\n <ToastAnnounceExcludeFrame\n data-toast-announce-exclude=\"\"\n data-toast-announce-alt={altText || undefined}\n {...announceExcludeProps}\n ref={forwardedRef}\n />\n )\n }\n)\n\n/* -----------------------------------------------------------------------------------------------*/\n\ninterface ToastAnnounceProps\n extends Omit<GetProps<typeof VisuallyHidden>, 'children'>,\n ScopedProps<{ children: string[] }> {}\n\nconst ToastAnnounce: React.FC<ToastAnnounceProps> = (\n props: ScopedProps<ToastAnnounceProps>\n) => {\n const { __scopeToast, children, ...announceProps } = props\n const context = useToastProviderContext(TOAST_NAME, __scopeToast)\n const [renderAnnounceText, setRenderAnnounceText] = React.useState(false)\n const [isAnnounced, setIsAnnounced] = React.useState(false)\n\n // render text content in the next frame to ensure toast is announced in NVDA\n useNextFrame(() => setRenderAnnounceText(true))\n\n // cleanup after announcing\n React.useEffect(() => {\n const timer = setTimeout(() => setIsAnnounced(true), 1000)\n return () => clearTimeout(timer)\n }, [])\n\n return isAnnounced ? null : (\n <Portal asChild>\n <VisuallyHidden {...announceProps}>\n {renderAnnounceText && (\n <Text>\n {context.label} {children}\n </Text>\n )}\n </VisuallyHidden>\n </Portal>\n )\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction useNextFrame(callback = () => {}) {\n const fn = useEvent(callback)\n useIsomorphicLayoutEffect(() => {\n let raf1 = 0\n let raf2 = 0\n raf1 = requestAnimationFrame(() => (raf2 = requestAnimationFrame(fn)))\n return () => {\n cancelAnimationFrame(raf1)\n cancelAnimationFrame(raf2)\n }\n }, [fn])\n}\n\n\nexport {\n ToastAnnounce,\n ToastAnnounceProps,\n ToastAnnounceExclude,\n ToastAnnounceExcludeProps,\n}\n"],
5
- "mappings": "AAAA,OAEE,SAAAA,EAEA,QAAAC,EACA,UAAAC,EACA,YAAAC,EACA,6BAAAC,MACK,gBACP,OAAS,UAAAC,MAAc,kBACvB,OAAS,kBAAAC,MAAsB,2BAC/B,UAAYC,MAAW,QAEvB,OAAsB,2BAAAC,MAA+B,kBACrD,OAAS,cAAAC,MAAkB,cAE3B,MAAMC,EAA4BR,EAAOF,EAAO,CAC9C,KAAM,sBACR,CAAC,EAMKW,EAAuBJ,EAAM,WACjC,CAACK,EAA+CC,IAAiB,CAC/D,KAAM,CAAE,aAAAC,EAAc,QAAAC,EAAS,GAAGC,CAAqB,EAAIJ,EAE3D,MACE,CAACF,EACC,4BAA4B,EAC5B,yBAAyBK,GAAW,WAChCC,EACJ,KAAKH,EACP,EAEJ,CACF,EAQMI,EACJL,GACG,CACH,KAAM,CAAE,aAAAE,EAAc,SAAAI,EAAU,GAAGC,CAAc,EAAIP,EAC/CQ,EAAUZ,EAAwBC,EAAYK,CAAY,EAC1D,CAACO,EAAoBC,CAAqB,EAAIf,EAAM,SAAS,EAAK,EAClE,CAACgB,EAAaC,CAAc,EAAIjB,EAAM,SAAS,EAAK,EAG1D,OAAAkB,EAAa,IAAMH,EAAsB,EAAI,CAAC,EAG9Cf,EAAM,UAAU,IAAM,CACpB,MAAMmB,EAAQ,WAAW,IAAMF,EAAe,EAAI,EAAG,GAAI,EACzD,MAAO,IAAM,aAAaE,CAAK,CACjC,EAAG,CAAC,CAAC,EAEEH,EAAc,KACnB,CAAClB,EAAO,QACN,CAACC,KAAmBa,IACjBE,GACC,CAACpB,GACEmB,EAAQ,MAAM,EAAEF,EACnB,EAFCjB,GAIL,EANCK,EAOH,EARCD,EAUL,EAIA,SAASoB,EAAaE,EAAW,IAAM,CAAC,EAAG,CACzC,MAAMC,EAAKzB,EAASwB,CAAQ,EAC5BvB,EAA0B,IAAM,CAC9B,IAAIyB,EAAO,EACPC,EAAO,EACX,OAAAD,EAAO,sBAAsB,IAAOC,EAAO,sBAAsBF,CAAE,CAAE,EAC9D,IAAM,CACX,qBAAqBC,CAAI,EACzB,qBAAqBC,CAAI,CAC3B,CACF,EAAG,CAACF,CAAE,CAAC,CACT",
6
- "names": ["Stack", "Text", "styled", "useEvent", "useIsomorphicLayoutEffect", "Portal", "VisuallyHidden", "React", "useToastProviderContext", "TOAST_NAME", "ToastAnnounceExcludeFrame", "ToastAnnounceExclude", "props", "forwardedRef", "__scopeToast", "altText", "announceExcludeProps", "ToastAnnounce", "children", "announceProps", "context", "renderAnnounceText", "setRenderAnnounceText", "isAnnounced", "setIsAnnounced", "useNextFrame", "timer", "callback", "fn", "raf1", "raf2"]
5
+ "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,SAAsB,+BAA+B;AACrD,SAAS,kBAAkB;AAE3B,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,MAAO,OAAO,sBAAsB,EAAE,CAAE;AACrE,WAAO,MAAM;AACX,2BAAqB,IAAI;AACzB,2BAAqB,IAAI;AAAA,IAC3B;AAAA,EACF,GAAG,CAAC,EAAE,CAAC;AACT;",
6
+ "names": []
7
7
  }