@yahoo/uds-mobile 2.15.0 → 2.17.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.
Files changed (150) hide show
  1. package/README.md +27 -24
  2. package/dist/bin/fixtures/dist/index.mjs +14 -0
  3. package/dist/components/Input.cjs +16 -13
  4. package/dist/components/Input.d.cts.map +1 -1
  5. package/dist/components/Input.d.ts.map +1 -1
  6. package/dist/components/Input.js +16 -13
  7. package/dist/components/Input.js.map +1 -1
  8. package/dist/components/InputHelpText.cjs +52 -0
  9. package/dist/components/InputHelpText.d.cts +37 -0
  10. package/dist/components/InputHelpText.d.cts.map +1 -0
  11. package/dist/components/InputHelpText.d.ts +37 -0
  12. package/dist/components/InputHelpText.d.ts.map +1 -0
  13. package/dist/components/InputHelpText.js +52 -0
  14. package/dist/components/InputHelpText.js.map +1 -0
  15. package/dist/components/Toast/Toast.cjs +141 -0
  16. package/dist/components/Toast/Toast.d.cts +38 -0
  17. package/dist/components/Toast/Toast.d.cts.map +1 -0
  18. package/dist/components/Toast/Toast.d.ts +38 -0
  19. package/dist/components/Toast/Toast.d.ts.map +1 -0
  20. package/dist/components/Toast/Toast.js +141 -0
  21. package/dist/components/Toast/Toast.js.map +1 -0
  22. package/dist/components/Toast/ToastAnimatedItem.cjs +88 -0
  23. package/dist/components/Toast/ToastAnimatedItem.d.cts +27 -0
  24. package/dist/components/Toast/ToastAnimatedItem.d.cts.map +1 -0
  25. package/dist/components/Toast/ToastAnimatedItem.d.ts +27 -0
  26. package/dist/components/Toast/ToastAnimatedItem.d.ts.map +1 -0
  27. package/dist/components/Toast/ToastAnimatedItem.js +87 -0
  28. package/dist/components/Toast/ToastAnimatedItem.js.map +1 -0
  29. package/dist/components/Toast/ToastItem.cjs +35 -0
  30. package/dist/components/Toast/ToastItem.d.cts +25 -0
  31. package/dist/components/Toast/ToastItem.d.cts.map +1 -0
  32. package/dist/components/Toast/ToastItem.d.ts +25 -0
  33. package/dist/components/Toast/ToastItem.d.ts.map +1 -0
  34. package/dist/components/Toast/ToastItem.js +35 -0
  35. package/dist/components/Toast/ToastItem.js.map +1 -0
  36. package/dist/components/Toast/ToastProvider.cjs +144 -0
  37. package/dist/components/Toast/ToastProvider.d.cts +58 -0
  38. package/dist/components/Toast/ToastProvider.d.cts.map +1 -0
  39. package/dist/components/Toast/ToastProvider.d.ts +58 -0
  40. package/dist/components/Toast/ToastProvider.d.ts.map +1 -0
  41. package/dist/components/Toast/ToastProvider.js +143 -0
  42. package/dist/components/Toast/ToastProvider.js.map +1 -0
  43. package/dist/components/Toast/ToastViewport.cjs +48 -0
  44. package/dist/components/Toast/ToastViewport.d.cts +42 -0
  45. package/dist/components/Toast/ToastViewport.d.cts.map +1 -0
  46. package/dist/components/Toast/ToastViewport.d.ts +42 -0
  47. package/dist/components/Toast/ToastViewport.d.ts.map +1 -0
  48. package/dist/components/Toast/ToastViewport.js +48 -0
  49. package/dist/components/Toast/ToastViewport.js.map +1 -0
  50. package/dist/components/Toast/createToast.cjs +21 -0
  51. package/dist/components/Toast/createToast.d.cts +10 -0
  52. package/dist/components/Toast/createToast.d.cts.map +1 -0
  53. package/dist/components/Toast/createToast.d.ts +10 -0
  54. package/dist/components/Toast/createToast.d.ts.map +1 -0
  55. package/dist/components/Toast/createToast.js +20 -0
  56. package/dist/components/Toast/createToast.js.map +1 -0
  57. package/dist/components/Toast/index.cjs +10 -0
  58. package/dist/components/Toast/index.d.cts +6 -0
  59. package/dist/components/Toast/index.d.ts +6 -0
  60. package/dist/components/Toast/index.js +5 -0
  61. package/dist/components/Toast/types.cjs +1 -0
  62. package/dist/components/Toast/types.d.cts +113 -0
  63. package/dist/components/Toast/types.d.cts.map +1 -0
  64. package/dist/components/Toast/types.d.ts +113 -0
  65. package/dist/components/Toast/types.d.ts.map +1 -0
  66. package/dist/components/Toast/types.js +1 -0
  67. package/dist/components/Toast/useToastController.cjs +286 -0
  68. package/dist/components/Toast/useToastController.d.cts +25 -0
  69. package/dist/components/Toast/useToastController.d.cts.map +1 -0
  70. package/dist/components/Toast/useToastController.d.ts +25 -0
  71. package/dist/components/Toast/useToastController.d.ts.map +1 -0
  72. package/dist/components/Toast/useToastController.js +286 -0
  73. package/dist/components/Toast/useToastController.js.map +1 -0
  74. package/dist/components/Toast/utils.cjs +69 -0
  75. package/dist/components/Toast/utils.d.cts +27 -0
  76. package/dist/components/Toast/utils.d.cts.map +1 -0
  77. package/dist/components/Toast/utils.d.ts +27 -0
  78. package/dist/components/Toast/utils.d.ts.map +1 -0
  79. package/dist/components/Toast/utils.js +55 -0
  80. package/dist/components/Toast/utils.js.map +1 -0
  81. package/dist/components/internal/Overlay/OverlayPortal.cjs +20 -0
  82. package/dist/components/internal/Overlay/OverlayPortal.d.cts +17 -0
  83. package/dist/components/internal/Overlay/OverlayPortal.d.cts.map +1 -0
  84. package/dist/components/internal/Overlay/OverlayPortal.d.ts +17 -0
  85. package/dist/components/internal/Overlay/OverlayPortal.d.ts.map +1 -0
  86. package/dist/components/internal/Overlay/OverlayPortal.js +20 -0
  87. package/dist/components/internal/Overlay/OverlayPortal.js.map +1 -0
  88. package/dist/components/internal/Overlay/index.cjs +6 -0
  89. package/dist/components/internal/Overlay/index.d.cts +5 -0
  90. package/dist/components/internal/Overlay/index.d.ts +5 -0
  91. package/dist/components/internal/Overlay/index.js +4 -0
  92. package/dist/components/internal/Overlay/types.cjs +1 -0
  93. package/dist/components/internal/Overlay/types.d.cts +21 -0
  94. package/dist/components/internal/Overlay/types.d.cts.map +1 -0
  95. package/dist/components/internal/Overlay/types.d.ts +21 -0
  96. package/dist/components/internal/Overlay/types.d.ts.map +1 -0
  97. package/dist/components/internal/Overlay/types.js +1 -0
  98. package/dist/components/internal/Overlay/useControllableState.cjs +34 -0
  99. package/dist/components/internal/Overlay/useControllableState.d.cts +18 -0
  100. package/dist/components/internal/Overlay/useControllableState.d.cts.map +1 -0
  101. package/dist/components/internal/Overlay/useControllableState.d.ts +18 -0
  102. package/dist/components/internal/Overlay/useControllableState.d.ts.map +1 -0
  103. package/dist/components/internal/Overlay/useControllableState.js +34 -0
  104. package/dist/components/internal/Overlay/useControllableState.js.map +1 -0
  105. package/dist/jest/mocks/gesture-handler.cjs +38 -0
  106. package/dist/jest/mocks/gesture-handler.d.cts +41 -0
  107. package/dist/jest/mocks/gesture-handler.d.cts.map +1 -0
  108. package/dist/jest/mocks/gesture-handler.d.ts +41 -0
  109. package/dist/jest/mocks/gesture-handler.d.ts.map +1 -0
  110. package/dist/jest/mocks/gesture-handler.js +37 -0
  111. package/dist/jest/mocks/gesture-handler.js.map +1 -0
  112. package/dist/jest/mocks/safe-area-context.cjs +35 -0
  113. package/dist/jest/mocks/safe-area-context.d.cts +43 -0
  114. package/dist/jest/mocks/safe-area-context.d.cts.map +1 -0
  115. package/dist/jest/mocks/safe-area-context.d.ts +43 -0
  116. package/dist/jest/mocks/safe-area-context.d.ts.map +1 -0
  117. package/dist/jest/mocks/safe-area-context.js +32 -0
  118. package/dist/jest/mocks/safe-area-context.js.map +1 -0
  119. package/dist/jest/mocks/screens.cjs +8 -0
  120. package/dist/jest/mocks/screens.d.cts +12 -0
  121. package/dist/jest/mocks/screens.d.cts.map +1 -0
  122. package/dist/jest/mocks/screens.d.ts +12 -0
  123. package/dist/jest/mocks/screens.d.ts.map +1 -0
  124. package/dist/jest/mocks/screens.js +9 -0
  125. package/dist/jest/mocks/screens.js.map +1 -0
  126. package/dist/jest/mocks/styles.cjs +38 -1
  127. package/dist/jest/mocks/styles.d.cts +3 -2
  128. package/dist/jest/mocks/styles.d.cts.map +1 -1
  129. package/dist/jest/mocks/styles.d.ts +3 -2
  130. package/dist/jest/mocks/styles.d.ts.map +1 -1
  131. package/dist/jest/mocks/styles.js +38 -2
  132. package/dist/jest/mocks/styles.js.map +1 -1
  133. package/dist/portal.cjs +1 -0
  134. package/dist/portal.d.cts +6 -1
  135. package/dist/portal.d.cts.map +1 -1
  136. package/dist/portal.d.ts +6 -1
  137. package/dist/portal.d.ts.map +1 -1
  138. package/dist/portal.js +1 -1
  139. package/dist/portal.js.map +1 -1
  140. package/dist/types/dist/index.d.cts +4 -1
  141. package/dist/types/dist/index.d.cts.map +1 -1
  142. package/dist/types/dist/index.d.ts +4 -1
  143. package/dist/types/dist/index.d.ts.map +1 -1
  144. package/fonts/index.cjs +209 -209
  145. package/fonts/index.mjs +209 -209
  146. package/generated/styles.cjs +114 -0
  147. package/generated/styles.d.ts +29 -0
  148. package/generated/styles.mjs +114 -0
  149. package/generated/unistyles.d.ts +110 -0
  150. package/package.json +21 -1
@@ -0,0 +1,10 @@
1
+
2
+ import { ToastController, ToastHandle, ToastShowInput } from "./types.js";
3
+
4
+ //#region src/components/Toast/createToast.d.ts
5
+ declare function setToastController(controller: ToastController): () => void;
6
+ declare function createToast(input: ToastShowInput): ToastHandle;
7
+ declare function clearWaitingQueue(): void;
8
+ //#endregion
9
+ export { clearWaitingQueue, createToast, setToastController };
10
+ //# sourceMappingURL=createToast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createToast.d.ts","names":[],"sources":["../../../src/components/Toast/createToast.ts"],"mappings":";;;;iBAIS,kBAAA,CAAmB,UAAA,EAAY,eAAA;AAAA,iBAU/B,WAAA,CAAY,KAAA,EAAO,cAAA,GAAiB,WAAA;AAAA,iBAQpC,iBAAA,CAAA"}
@@ -0,0 +1,20 @@
1
+ /*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
2
+ //#region src/components/Toast/createToast.ts
3
+ let activeToastController = null;
4
+ function setToastController(controller) {
5
+ activeToastController = controller;
6
+ return () => {
7
+ if (activeToastController === controller) activeToastController = null;
8
+ };
9
+ }
10
+ function createToast(input) {
11
+ if (!activeToastController) throw new Error("createToast must be called after a ToastProvider has been mounted.");
12
+ return activeToastController.show(input);
13
+ }
14
+ function clearWaitingQueue() {
15
+ activeToastController?.clearWaitingQueue();
16
+ }
17
+ //#endregion
18
+ export { clearWaitingQueue, createToast, setToastController };
19
+
20
+ //# sourceMappingURL=createToast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createToast.js","names":[],"sources":["../../../src/components/Toast/createToast.ts"],"sourcesContent":["import type { ToastController, ToastHandle, ToastShowInput } from './types';\n\nlet activeToastController: ToastController | null = null;\n\nfunction setToastController(controller: ToastController): () => void {\n activeToastController = controller;\n\n return () => {\n if (activeToastController === controller) {\n activeToastController = null;\n }\n };\n}\n\nfunction createToast(input: ToastShowInput): ToastHandle {\n if (!activeToastController) {\n throw new Error('createToast must be called after a ToastProvider has been mounted.');\n }\n\n return activeToastController.show(input);\n}\n\nfunction clearWaitingQueue(): void {\n activeToastController?.clearWaitingQueue();\n}\n\nexport { clearWaitingQueue, createToast, setToastController };\n"],"mappings":";;AAEA,IAAI,wBAAgD;AAEpD,SAAS,mBAAmB,YAAyC;CACnE,wBAAwB;CAExB,aAAa;EACX,IAAI,0BAA0B,YAC5B,wBAAwB;;;AAK9B,SAAS,YAAY,OAAoC;CACvD,IAAI,CAAC,uBACH,MAAM,IAAI,MAAM,qEAAqE;CAGvF,OAAO,sBAAsB,KAAK,MAAM;;AAG1C,SAAS,oBAA0B;CACjC,uBAAuB,mBAAmB"}
@@ -0,0 +1,10 @@
1
+ /*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const require_components_Toast_Toast = require("./Toast.cjs");
4
+ const require_components_Toast_createToast = require("./createToast.cjs");
5
+ const require_components_Toast_ToastProvider = require("./ToastProvider.cjs");
6
+ exports.Toast = require_components_Toast_Toast.Toast;
7
+ exports.ToastProvider = require_components_Toast_ToastProvider.ToastProvider;
8
+ exports.clearWaitingQueue = require_components_Toast_createToast.clearWaitingQueue;
9
+ exports.createToast = require_components_Toast_createToast.createToast;
10
+ exports.useToast = require_components_Toast_ToastProvider.useToast;
@@ -0,0 +1,6 @@
1
+
2
+ import { ToastAutoClose, ToastController, ToastHandle, ToastInsets, ToastPlacement, ToastProps, ToastProviderProps, ToastShowInput, ToastShowOptions } from "./types.cjs";
3
+ import { Toast } from "./Toast.cjs";
4
+ import { ToastProvider, useToast } from "./ToastProvider.cjs";
5
+ import { clearWaitingQueue, createToast } from "./createToast.cjs";
6
+ export { Toast, type ToastAutoClose, type ToastController, type ToastHandle, type ToastInsets, type ToastPlacement, type ToastProps, ToastProvider, type ToastProviderProps, type ToastShowInput, type ToastShowOptions, clearWaitingQueue, createToast, useToast };
@@ -0,0 +1,6 @@
1
+
2
+ import { ToastAutoClose, ToastController, ToastHandle, ToastInsets, ToastPlacement, ToastProps, ToastProviderProps, ToastShowInput, ToastShowOptions } from "./types.js";
3
+ import { Toast } from "./Toast.js";
4
+ import { ToastProvider, useToast } from "./ToastProvider.js";
5
+ import { clearWaitingQueue, createToast } from "./createToast.js";
6
+ export { Toast, type ToastAutoClose, type ToastController, type ToastHandle, type ToastInsets, type ToastPlacement, type ToastProps, ToastProvider, type ToastProviderProps, type ToastShowInput, type ToastShowOptions, clearWaitingQueue, createToast, useToast };
@@ -0,0 +1,5 @@
1
+ /*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
2
+ import { Toast } from "./Toast.js";
3
+ import { clearWaitingQueue, createToast } from "./createToast.js";
4
+ import { ToastProvider, useToast } from "./ToastProvider.js";
5
+ export { Toast, ToastProvider, clearWaitingQueue, createToast, useToast };
@@ -0,0 +1 @@
1
+ /*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
@@ -0,0 +1,113 @@
1
+
2
+ import { ToastPosition, ToastSize, ToastVariant } from "../../types/dist/index.cjs";
3
+ import { IconSlotType } from "../IconSlot.cjs";
4
+ import { ReactNode, Ref } from "react";
5
+ import { StyleProp, View, ViewProps, ViewStyle } from "react-native";
6
+
7
+ //#region src/components/Toast/types.d.ts
8
+ type ToastPlacement = Extract<ToastPosition, 'top-center' | 'bottom-center'>;
9
+ type ToastAutoClose = number | false;
10
+ interface ToastInsets {
11
+ top?: number;
12
+ bottom?: number;
13
+ horizontal?: number;
14
+ }
15
+ interface ToastProps extends Omit<ViewProps, 'children'> {
16
+ /** Toast id, passed back to close callbacks. */
17
+ id?: string;
18
+ /** The visual size of the toast. */
19
+ size?: ToastSize;
20
+ /** The visual style variant. */
21
+ variant?: ToastVariant;
22
+ /** Message content. */
23
+ message?: ReactNode;
24
+ /** Custom content. Prefer `message` for standard toasts. */
25
+ children?: ReactNode;
26
+ /** Optional action button label/content. */
27
+ actionButton?: ReactNode;
28
+ /** Mobile-native action callback. */
29
+ onActionPress?: () => void;
30
+ /** Web parity alias for action callbacks. */
31
+ onClickActionButton?: () => void;
32
+ /** Mobile-native close callback. */
33
+ onClose?: (id?: string) => void;
34
+ /** Web parity alias for close callbacks. */
35
+ onClickCloseButton?: (id?: string) => void;
36
+ /** Icon displayed before the message. Use `false` to hide. */
37
+ startIcon?: IconSlotType | false;
38
+ /** Close icon. Use `false` to hide. */
39
+ closeIcon?: IconSlotType | false;
40
+ /** Whether the toast can be manually dismissed with close affordances or swipe. Defaults to `false` when `closeIcon` is `false`. */
41
+ dismissible?: boolean;
42
+ /** Accessible label for the close button. */
43
+ closeAccessibilityLabel?: string;
44
+ /** Ref to the underlying View. */
45
+ ref?: Ref<View>;
46
+ }
47
+ interface ToastRecord extends Omit<ToastProps, 'style' | 'ref'> {
48
+ id: string;
49
+ placement: ToastPlacement;
50
+ autoClose: ToastAutoClose;
51
+ createdAt: number;
52
+ closeOnAction: boolean;
53
+ isExiting: boolean;
54
+ onShow?: () => void;
55
+ onHide?: () => void;
56
+ }
57
+ type ToastShowOptions = Omit<ToastRecord, 'id' | 'placement' | 'autoClose' | 'createdAt' | 'closeOnAction' | 'isExiting' | 'onShow' | 'onHide'> & {
58
+ id?: string;
59
+ placement?: ToastPlacement;
60
+ autoClose?: ToastAutoClose;
61
+ closeOnAction?: boolean;
62
+ onShow?: () => void;
63
+ onHide?: () => void;
64
+ };
65
+ type ToastShowInput = ReactNode | ToastShowOptions;
66
+ interface ToastHandle {
67
+ id: string;
68
+ update: (options: Partial<ToastShowOptions>) => ToastHandle;
69
+ close: () => void;
70
+ }
71
+ interface ToastController {
72
+ show: (input: ToastShowInput) => ToastHandle;
73
+ update: (id: string, options: Partial<ToastShowOptions>) => ToastHandle;
74
+ hide: (id?: string | 'all') => void;
75
+ hideAll: () => void;
76
+ clearWaitingQueue: () => void;
77
+ }
78
+ interface ToastProviderProps {
79
+ children: ReactNode;
80
+ /** Default placement for new toasts. @default 'bottom-center' */
81
+ placement?: ToastPlacement;
82
+ /** Default auto-dismiss duration. Use `false` to disable. @default 6000 */
83
+ autoClose?: ToastAutoClose;
84
+ /** Maximum visible toasts. @default 3 */
85
+ limit?: number;
86
+ /** Extra viewport offsets added on top of device safe-area insets. */
87
+ insets?: ToastInsets;
88
+ /** Optional style for the toast viewport. */
89
+ viewportStyle?: StyleProp<ViewStyle>;
90
+ /** Render through iOS FullWindowOverlay. @default true */
91
+ useFullWindowOverlay?: boolean;
92
+ /** Disable motion and transition effects for toasts. */
93
+ reduceMotion?: boolean;
94
+ }
95
+ type ToastAction = {
96
+ type: 'upsert';
97
+ toast: ToastRecord;
98
+ } | {
99
+ type: 'update';
100
+ id: string;
101
+ toast: Partial<ToastRecord>;
102
+ } | {
103
+ type: 'remove';
104
+ id: string;
105
+ } | {
106
+ type: 'set';
107
+ toasts: ToastRecord[];
108
+ } | {
109
+ type: 'removeAll';
110
+ };
111
+ //#endregion
112
+ export { type ToastAction, type ToastAutoClose, type ToastController, type ToastHandle, type ToastInsets, type ToastPlacement, type ToastProps, type ToastProviderProps, type ToastRecord, type ToastShowInput, type ToastShowOptions };
113
+ //# sourceMappingURL=types.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.cts","names":[],"sources":["../../../src/components/Toast/types.ts"],"mappings":";;;;;;;KAMK,cAAA,GAAiB,OAAA,CAAQ,aAAA;AAAA,KACzB,cAAA;AAAA,UAEK,WAAA;EACR,GAAA;EACA,MAAA;EACA,UAAA;AAAA;AAAA,UAGQ,UAAA,SAAmB,IAAA,CAAK,SAAA;EARf;EAUjB,EAAA;EAViB;EAYjB,IAAA,GAAO,SAAA;EAVC;EAYR,OAAA,GAAU,YAAA;;EAEV,OAAA,GAAU,SAAA;EAbV;EAeA,QAAA,GAAW,SAAA;EAbX;EAeA,YAAA,GAAe,SAAA;EAfL;EAiBV,aAAA;EAdmB;EAgBnB,mBAAA;EAhBgC;EAkBhC,OAAA,IAAW,EAAA;EAZD;EAcV,kBAAA,IAAsB,EAAA;EAVX;EAYX,SAAA,GAAY,YAAA;EAAA;EAEZ,SAAA,GAAY,YAAA;EAMF;EAJV,WAAA;EA1B2B;EA4B3B,uBAAA;EA5B+B;EA8B/B,GAAA,GAAM,GAAA,CAAI,IAAA;AAAA;AAAA,UAGF,WAAA,SAAoB,IAAA,CAAK,UAAA;EACjC,EAAA;EACA,SAAA,EAAW,cAAA;EACX,SAAA,EAAW,cAAA;EACX,SAAA;EACA,aAAA;EACA,SAAA;EACA,MAAA;EACA,MAAA;AAAA;AAAA,KAGG,gBAAA,GAAmB,IAAA,CACtB,WAAA;EAUA,EAAA;EACA,SAAA,GAAY,cAAA;EACZ,SAAA,GAAY,cAAA;EACZ,aAAA;EACA,MAAA;EACA,MAAA;AAAA;AAAA,KAGG,cAAA,GAAiB,SAAA,GAAY,gBAAA;AAAA,UAExB,WAAA;EACR,EAAA;EACA,MAAA,GAAS,OAAA,EAAS,OAAA,CAAQ,gBAAA,MAAsB,WAAA;EAChD,KAAA;AAAA;AAAA,UAGQ,eAAA;EACR,IAAA,GAAO,KAAA,EAAO,cAAA,KAAmB,WAAA;EACjC,MAAA,GAAS,EAAA,UAAY,OAAA,EAAS,OAAA,CAAQ,gBAAA,MAAsB,WAAA;EAC5D,IAAA,GAAO,EAAA;EACP,OAAA;EACA,iBAAA;AAAA;AAAA,UAGQ,kBAAA;EACR,QAAA,EAAU,SAAA;EA5CC;EA8CX,SAAA,GAAY,cAAA;EAjDoB;EAmDhC,SAAA,GAAY,cAAA;EAnDgB;EAqD5B,KAAA;EApDA;EAsDA,MAAA,GAAS,WAAA;EArDE;EAuDX,aAAA,GAAgB,SAAA,CAAU,SAAA;EAtDf;EAwDX,oBAAA;EAtDA;EAwDA,YAAA;AAAA;AAAA,KAGG,WAAA;EACC,IAAA;EAAgB,KAAA,EAAO,WAAA;AAAA;EACvB,IAAA;EAAgB,EAAA;EAAY,KAAA,EAAO,OAAA,CAAQ,WAAA;AAAA;EAC3C,IAAA;EAAgB,EAAA;AAAA;EAChB,IAAA;EAAa,MAAA,EAAQ,WAAA;AAAA;EACrB,IAAA;AAAA"}
@@ -0,0 +1,113 @@
1
+
2
+ import { ToastPosition, ToastSize, ToastVariant } from "../../types/dist/index.js";
3
+ import { IconSlotType } from "../IconSlot.js";
4
+ import { ReactNode, Ref } from "react";
5
+ import { StyleProp, View, ViewProps, ViewStyle } from "react-native";
6
+
7
+ //#region src/components/Toast/types.d.ts
8
+ type ToastPlacement = Extract<ToastPosition, 'top-center' | 'bottom-center'>;
9
+ type ToastAutoClose = number | false;
10
+ interface ToastInsets {
11
+ top?: number;
12
+ bottom?: number;
13
+ horizontal?: number;
14
+ }
15
+ interface ToastProps extends Omit<ViewProps, 'children'> {
16
+ /** Toast id, passed back to close callbacks. */
17
+ id?: string;
18
+ /** The visual size of the toast. */
19
+ size?: ToastSize;
20
+ /** The visual style variant. */
21
+ variant?: ToastVariant;
22
+ /** Message content. */
23
+ message?: ReactNode;
24
+ /** Custom content. Prefer `message` for standard toasts. */
25
+ children?: ReactNode;
26
+ /** Optional action button label/content. */
27
+ actionButton?: ReactNode;
28
+ /** Mobile-native action callback. */
29
+ onActionPress?: () => void;
30
+ /** Web parity alias for action callbacks. */
31
+ onClickActionButton?: () => void;
32
+ /** Mobile-native close callback. */
33
+ onClose?: (id?: string) => void;
34
+ /** Web parity alias for close callbacks. */
35
+ onClickCloseButton?: (id?: string) => void;
36
+ /** Icon displayed before the message. Use `false` to hide. */
37
+ startIcon?: IconSlotType | false;
38
+ /** Close icon. Use `false` to hide. */
39
+ closeIcon?: IconSlotType | false;
40
+ /** Whether the toast can be manually dismissed with close affordances or swipe. Defaults to `false` when `closeIcon` is `false`. */
41
+ dismissible?: boolean;
42
+ /** Accessible label for the close button. */
43
+ closeAccessibilityLabel?: string;
44
+ /** Ref to the underlying View. */
45
+ ref?: Ref<View>;
46
+ }
47
+ interface ToastRecord extends Omit<ToastProps, 'style' | 'ref'> {
48
+ id: string;
49
+ placement: ToastPlacement;
50
+ autoClose: ToastAutoClose;
51
+ createdAt: number;
52
+ closeOnAction: boolean;
53
+ isExiting: boolean;
54
+ onShow?: () => void;
55
+ onHide?: () => void;
56
+ }
57
+ type ToastShowOptions = Omit<ToastRecord, 'id' | 'placement' | 'autoClose' | 'createdAt' | 'closeOnAction' | 'isExiting' | 'onShow' | 'onHide'> & {
58
+ id?: string;
59
+ placement?: ToastPlacement;
60
+ autoClose?: ToastAutoClose;
61
+ closeOnAction?: boolean;
62
+ onShow?: () => void;
63
+ onHide?: () => void;
64
+ };
65
+ type ToastShowInput = ReactNode | ToastShowOptions;
66
+ interface ToastHandle {
67
+ id: string;
68
+ update: (options: Partial<ToastShowOptions>) => ToastHandle;
69
+ close: () => void;
70
+ }
71
+ interface ToastController {
72
+ show: (input: ToastShowInput) => ToastHandle;
73
+ update: (id: string, options: Partial<ToastShowOptions>) => ToastHandle;
74
+ hide: (id?: string | 'all') => void;
75
+ hideAll: () => void;
76
+ clearWaitingQueue: () => void;
77
+ }
78
+ interface ToastProviderProps {
79
+ children: ReactNode;
80
+ /** Default placement for new toasts. @default 'bottom-center' */
81
+ placement?: ToastPlacement;
82
+ /** Default auto-dismiss duration. Use `false` to disable. @default 6000 */
83
+ autoClose?: ToastAutoClose;
84
+ /** Maximum visible toasts. @default 3 */
85
+ limit?: number;
86
+ /** Extra viewport offsets added on top of device safe-area insets. */
87
+ insets?: ToastInsets;
88
+ /** Optional style for the toast viewport. */
89
+ viewportStyle?: StyleProp<ViewStyle>;
90
+ /** Render through iOS FullWindowOverlay. @default true */
91
+ useFullWindowOverlay?: boolean;
92
+ /** Disable motion and transition effects for toasts. */
93
+ reduceMotion?: boolean;
94
+ }
95
+ type ToastAction = {
96
+ type: 'upsert';
97
+ toast: ToastRecord;
98
+ } | {
99
+ type: 'update';
100
+ id: string;
101
+ toast: Partial<ToastRecord>;
102
+ } | {
103
+ type: 'remove';
104
+ id: string;
105
+ } | {
106
+ type: 'set';
107
+ toasts: ToastRecord[];
108
+ } | {
109
+ type: 'removeAll';
110
+ };
111
+ //#endregion
112
+ export { type ToastAction, type ToastAutoClose, type ToastController, type ToastHandle, type ToastInsets, type ToastPlacement, type ToastProps, type ToastProviderProps, type ToastRecord, type ToastShowInput, type ToastShowOptions };
113
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/components/Toast/types.ts"],"mappings":";;;;;;;KAMK,cAAA,GAAiB,OAAA,CAAQ,aAAA;AAAA,KACzB,cAAA;AAAA,UAEK,WAAA;EACR,GAAA;EACA,MAAA;EACA,UAAA;AAAA;AAAA,UAGQ,UAAA,SAAmB,IAAA,CAAK,SAAA;EARf;EAUjB,EAAA;EAViB;EAYjB,IAAA,GAAO,SAAA;EAVC;EAYR,OAAA,GAAU,YAAA;;EAEV,OAAA,GAAU,SAAA;EAbV;EAeA,QAAA,GAAW,SAAA;EAbX;EAeA,YAAA,GAAe,SAAA;EAfL;EAiBV,aAAA;EAdmB;EAgBnB,mBAAA;EAhBgC;EAkBhC,OAAA,IAAW,EAAA;EAZD;EAcV,kBAAA,IAAsB,EAAA;EAVX;EAYX,SAAA,GAAY,YAAA;EAAA;EAEZ,SAAA,GAAY,YAAA;EAMF;EAJV,WAAA;EA1B2B;EA4B3B,uBAAA;EA5B+B;EA8B/B,GAAA,GAAM,GAAA,CAAI,IAAA;AAAA;AAAA,UAGF,WAAA,SAAoB,IAAA,CAAK,UAAA;EACjC,EAAA;EACA,SAAA,EAAW,cAAA;EACX,SAAA,EAAW,cAAA;EACX,SAAA;EACA,aAAA;EACA,SAAA;EACA,MAAA;EACA,MAAA;AAAA;AAAA,KAGG,gBAAA,GAAmB,IAAA,CACtB,WAAA;EAUA,EAAA;EACA,SAAA,GAAY,cAAA;EACZ,SAAA,GAAY,cAAA;EACZ,aAAA;EACA,MAAA;EACA,MAAA;AAAA;AAAA,KAGG,cAAA,GAAiB,SAAA,GAAY,gBAAA;AAAA,UAExB,WAAA;EACR,EAAA;EACA,MAAA,GAAS,OAAA,EAAS,OAAA,CAAQ,gBAAA,MAAsB,WAAA;EAChD,KAAA;AAAA;AAAA,UAGQ,eAAA;EACR,IAAA,GAAO,KAAA,EAAO,cAAA,KAAmB,WAAA;EACjC,MAAA,GAAS,EAAA,UAAY,OAAA,EAAS,OAAA,CAAQ,gBAAA,MAAsB,WAAA;EAC5D,IAAA,GAAO,EAAA;EACP,OAAA;EACA,iBAAA;AAAA;AAAA,UAGQ,kBAAA;EACR,QAAA,EAAU,SAAA;EA5CC;EA8CX,SAAA,GAAY,cAAA;EAjDoB;EAmDhC,SAAA,GAAY,cAAA;EAnDgB;EAqD5B,KAAA;EApDA;EAsDA,MAAA,GAAS,WAAA;EArDE;EAuDX,aAAA,GAAgB,SAAA,CAAU,SAAA;EAtDf;EAwDX,oBAAA;EAtDA;EAwDA,YAAA;AAAA;AAAA,KAGG,WAAA;EACC,IAAA;EAAgB,KAAA,EAAO,WAAA;AAAA;EACvB,IAAA;EAAgB,EAAA;EAAY,KAAA,EAAO,OAAA,CAAQ,WAAA;AAAA;EAC3C,IAAA;EAAgB,EAAA;AAAA;EAChB,IAAA;EAAa,MAAA,EAAQ,WAAA;AAAA;EACrB,IAAA;AAAA"}
@@ -0,0 +1 @@
1
+ /*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
@@ -0,0 +1,286 @@
1
+ /*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ require("../../_virtual/_rolldown/runtime.cjs");
4
+ const require_components_Toast_utils = require("./utils.cjs");
5
+ let react = require("react");
6
+ //#region src/components/Toast/useToastController.ts
7
+ function useToastController({ autoClose, limit, placement, shouldReduceMotion }) {
8
+ const [toasts, baseDispatch] = (0, react.useReducer)(require_components_Toast_utils.toastReducer, []);
9
+ const [waitingToastCount, setWaitingToastCount] = (0, react.useState)(0);
10
+ const toastsRef = (0, react.useRef)(toasts);
11
+ const limitRef = (0, react.useRef)(limit);
12
+ const waitingQueueRef = (0, react.useRef)([]);
13
+ const timeoutRefs = (0, react.useRef)(/* @__PURE__ */ new Map());
14
+ const exitTimeoutRefs = (0, react.useRef)(/* @__PURE__ */ new Map());
15
+ const hideRef = (0, react.useRef)(null);
16
+ (0, react.useEffect)(() => {
17
+ toastsRef.current = toasts;
18
+ }, [toasts]);
19
+ const dispatchToastAction = (0, react.useCallback)((action) => {
20
+ toastsRef.current = require_components_Toast_utils.toastReducer(toastsRef.current, action);
21
+ baseDispatch(action);
22
+ }, [baseDispatch]);
23
+ const clearToastTimer = (0, react.useCallback)((id) => {
24
+ const timeout = timeoutRefs.current.get(id);
25
+ if (timeout) {
26
+ clearTimeout(timeout);
27
+ timeoutRefs.current.delete(id);
28
+ }
29
+ }, []);
30
+ const clearAllToastTimers = (0, react.useCallback)(() => {
31
+ timeoutRefs.current.forEach((timeout) => clearTimeout(timeout));
32
+ timeoutRefs.current.clear();
33
+ }, []);
34
+ const clearToastExitTimer = (0, react.useCallback)((id) => {
35
+ const timeout = exitTimeoutRefs.current.get(id);
36
+ if (timeout) {
37
+ clearTimeout(timeout);
38
+ exitTimeoutRefs.current.delete(id);
39
+ }
40
+ }, []);
41
+ const clearAllToastExitTimers = (0, react.useCallback)(() => {
42
+ exitTimeoutRefs.current.forEach((timeout) => clearTimeout(timeout));
43
+ exitTimeoutRefs.current.clear();
44
+ }, []);
45
+ const syncWaitingToastCount = (0, react.useCallback)(() => {
46
+ setWaitingToastCount(waitingQueueRef.current.length);
47
+ }, []);
48
+ const clearWaitingQueue = (0, react.useCallback)(() => {
49
+ waitingQueueRef.current = [];
50
+ syncWaitingToastCount();
51
+ }, [syncWaitingToastCount]);
52
+ const getQueuedToastIndex = (0, react.useCallback)((id) => waitingQueueRef.current.findIndex((toast) => toast.id === id), []);
53
+ const removeQueuedToast = (0, react.useCallback)((id) => {
54
+ const queuedToastIndex = getQueuedToastIndex(id);
55
+ if (queuedToastIndex === -1) return false;
56
+ waitingQueueRef.current.splice(queuedToastIndex, 1);
57
+ syncWaitingToastCount();
58
+ return true;
59
+ }, [getQueuedToastIndex, syncWaitingToastCount]);
60
+ const scheduleToast = (0, react.useCallback)((toast) => {
61
+ clearToastTimer(toast.id);
62
+ if (require_components_Toast_utils.isPersistentAutoClose(toast.autoClose)) return;
63
+ if (!Number.isFinite(toast.autoClose)) return;
64
+ if (toast.autoClose <= 0) {
65
+ hideRef.current?.(toast.id);
66
+ return;
67
+ }
68
+ const timeout = setTimeout(() => {
69
+ hideRef.current?.(toast.id);
70
+ timeoutRefs.current.delete(toast.id);
71
+ }, toast.autoClose);
72
+ timeoutRefs.current.set(toast.id, timeout);
73
+ }, [clearToastTimer]);
74
+ const showVisibleToast = (0, react.useCallback)((toast, shouldCallOnShow) => {
75
+ clearToastExitTimer(toast.id);
76
+ removeQueuedToast(toast.id);
77
+ dispatchToastAction({
78
+ type: "upsert",
79
+ toast
80
+ });
81
+ if (shouldCallOnShow) toast.onShow?.();
82
+ scheduleToast(toast);
83
+ }, [
84
+ clearToastExitTimer,
85
+ dispatchToastAction,
86
+ removeQueuedToast,
87
+ scheduleToast
88
+ ]);
89
+ const flushWaitingQueue = (0, react.useCallback)(() => {
90
+ let availableSlots = limitRef.current - toastsRef.current.length;
91
+ while (availableSlots > 0 && waitingQueueRef.current.length > 0) {
92
+ const toast = waitingQueueRef.current.shift();
93
+ if (toast) {
94
+ showVisibleToast(toast, true);
95
+ availableSlots -= 1;
96
+ }
97
+ }
98
+ syncWaitingToastCount();
99
+ }, [showVisibleToast, syncWaitingToastCount]);
100
+ const removeToast = (0, react.useCallback)((id) => {
101
+ clearToastTimer(id);
102
+ clearToastExitTimer(id);
103
+ dispatchToastAction({
104
+ type: "remove",
105
+ id
106
+ });
107
+ flushWaitingQueue();
108
+ }, [
109
+ clearToastExitTimer,
110
+ clearToastTimer,
111
+ dispatchToastAction,
112
+ flushWaitingQueue
113
+ ]);
114
+ const beginHideToast = (0, react.useCallback)((toast) => {
115
+ clearToastTimer(toast.id);
116
+ if (toast.isExiting) return;
117
+ toast.onHide?.();
118
+ if (shouldReduceMotion) {
119
+ removeToast(toast.id);
120
+ return;
121
+ }
122
+ dispatchToastAction({
123
+ type: "update",
124
+ id: toast.id,
125
+ toast: { isExiting: true }
126
+ });
127
+ clearToastExitTimer(toast.id);
128
+ const timeout = setTimeout(() => {
129
+ exitTimeoutRefs.current.delete(toast.id);
130
+ removeToast(toast.id);
131
+ }, 150);
132
+ exitTimeoutRefs.current.set(toast.id, timeout);
133
+ }, [
134
+ clearToastExitTimer,
135
+ clearToastTimer,
136
+ dispatchToastAction,
137
+ removeToast,
138
+ shouldReduceMotion
139
+ ]);
140
+ const hide = (0, react.useCallback)((id) => {
141
+ if (id === "all") {
142
+ clearWaitingQueue();
143
+ toastsRef.current.forEach(beginHideToast);
144
+ return;
145
+ }
146
+ const toastId = id ?? toastsRef.current.at(-1)?.id;
147
+ if (!toastId) return;
148
+ const toast = toastsRef.current.find((item) => item.id === toastId);
149
+ if (!toast) {
150
+ removeQueuedToast(toastId);
151
+ return;
152
+ }
153
+ beginHideToast(toast);
154
+ }, [
155
+ beginHideToast,
156
+ clearWaitingQueue,
157
+ removeQueuedToast
158
+ ]);
159
+ (0, react.useEffect)(() => {
160
+ hideRef.current = hide;
161
+ }, [hide]);
162
+ const createToastRecord = (0, react.useCallback)((options, existingToast) => {
163
+ const id = options.id ?? existingToast?.id ?? require_components_Toast_utils.createToastId();
164
+ return {
165
+ ...existingToast,
166
+ ...options,
167
+ id,
168
+ size: options.size ?? existingToast?.size ?? "default",
169
+ variant: options.variant ?? existingToast?.variant ?? "info",
170
+ placement: options.placement ?? existingToast?.placement ?? placement,
171
+ autoClose: options.autoClose ?? existingToast?.autoClose ?? autoClose,
172
+ createdAt: existingToast?.createdAt ?? Date.now(),
173
+ closeOnAction: options.closeOnAction ?? existingToast?.closeOnAction ?? false,
174
+ isExiting: false
175
+ };
176
+ }, [autoClose, placement]);
177
+ const upsertToast = (0, react.useCallback)((toast, shouldCallOnShow) => {
178
+ if (toastsRef.current.find((item) => item.id === toast.id) || toastsRef.current.length < limitRef.current) {
179
+ showVisibleToast(toast, shouldCallOnShow);
180
+ return;
181
+ }
182
+ const queuedToastIndex = getQueuedToastIndex(toast.id);
183
+ if (queuedToastIndex === -1) {
184
+ waitingQueueRef.current.push(toast);
185
+ syncWaitingToastCount();
186
+ return;
187
+ }
188
+ waitingQueueRef.current[queuedToastIndex] = toast;
189
+ }, [
190
+ getQueuedToastIndex,
191
+ showVisibleToast,
192
+ syncWaitingToastCount
193
+ ]);
194
+ const update = (0, react.useCallback)((id, options) => {
195
+ const existingToast = toastsRef.current.find((toast) => toast.id === id);
196
+ const queuedToastIndex = getQueuedToastIndex(id);
197
+ const queuedToast = queuedToastIndex === -1 ? void 0 : waitingQueueRef.current[queuedToastIndex];
198
+ upsertToast(createToastRecord({
199
+ ...options,
200
+ id
201
+ }, existingToast ?? queuedToast), false);
202
+ return {
203
+ id,
204
+ update: (nextOptions) => update(id, nextOptions),
205
+ close: () => hide(id)
206
+ };
207
+ }, [
208
+ createToastRecord,
209
+ getQueuedToastIndex,
210
+ hide,
211
+ upsertToast
212
+ ]);
213
+ const show = (0, react.useCallback)((input) => {
214
+ const options = require_components_Toast_utils.resolveToastInput(input);
215
+ const id = options.id ?? require_components_Toast_utils.createToastId();
216
+ const existingToast = toastsRef.current.find((toast) => toast.id === id);
217
+ const queuedToastIndex = getQueuedToastIndex(id);
218
+ const queuedToast = queuedToastIndex === -1 ? void 0 : waitingQueueRef.current[queuedToastIndex];
219
+ upsertToast(createToastRecord({
220
+ ...options,
221
+ id
222
+ }, existingToast ?? queuedToast), true);
223
+ return {
224
+ id,
225
+ update: (nextOptions) => update(id, nextOptions),
226
+ close: () => hide(id)
227
+ };
228
+ }, [
229
+ createToastRecord,
230
+ getQueuedToastIndex,
231
+ hide,
232
+ update,
233
+ upsertToast
234
+ ]);
235
+ const hideAll = (0, react.useCallback)(() => hide("all"), [hide]);
236
+ (0, react.useEffect)(() => {
237
+ limitRef.current = limit;
238
+ if (toastsRef.current.length > limit) {
239
+ const visibleToasts = toastsRef.current.slice(0, limit);
240
+ const queuedToasts = toastsRef.current.slice(limit).map((toast) => ({
241
+ ...toast,
242
+ isExiting: false
243
+ }));
244
+ queuedToasts.forEach((toast) => {
245
+ clearToastTimer(toast.id);
246
+ clearToastExitTimer(toast.id);
247
+ });
248
+ waitingQueueRef.current = [...queuedToasts, ...waitingQueueRef.current];
249
+ syncWaitingToastCount();
250
+ dispatchToastAction({
251
+ type: "set",
252
+ toasts: visibleToasts
253
+ });
254
+ return;
255
+ }
256
+ flushWaitingQueue();
257
+ }, [
258
+ clearToastExitTimer,
259
+ clearToastTimer,
260
+ dispatchToastAction,
261
+ flushWaitingQueue,
262
+ limit,
263
+ syncWaitingToastCount
264
+ ]);
265
+ return {
266
+ clearAllToastExitTimers,
267
+ clearAllToastTimers,
268
+ controller: (0, react.useMemo)(() => ({
269
+ show,
270
+ update,
271
+ hide,
272
+ hideAll,
273
+ clearWaitingQueue
274
+ }), [
275
+ clearWaitingQueue,
276
+ hide,
277
+ hideAll,
278
+ show,
279
+ update
280
+ ]),
281
+ toasts,
282
+ waitingToastCount
283
+ };
284
+ }
285
+ //#endregion
286
+ exports.useToastController = useToastController;
@@ -0,0 +1,25 @@
1
+
2
+ import { ToastAutoClose, ToastController, ToastPlacement, ToastRecord } from "./types.cjs";
3
+
4
+ //#region src/components/Toast/useToastController.d.ts
5
+ interface UseToastControllerOptions {
6
+ autoClose: ToastAutoClose;
7
+ limit: number;
8
+ placement: ToastPlacement;
9
+ shouldReduceMotion: boolean;
10
+ }
11
+ declare function useToastController({
12
+ autoClose,
13
+ limit,
14
+ placement,
15
+ shouldReduceMotion
16
+ }: UseToastControllerOptions): {
17
+ clearAllToastExitTimers: () => void;
18
+ clearAllToastTimers: () => void;
19
+ controller: ToastController;
20
+ toasts: ToastRecord[];
21
+ waitingToastCount: number;
22
+ };
23
+ //#endregion
24
+ export { useToastController };
25
+ //# sourceMappingURL=useToastController.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useToastController.d.cts","names":[],"sources":["../../../src/components/Toast/useToastController.ts"],"mappings":";;;;UAoBU,yBAAA;EACR,SAAA,EAAW,cAAA;EACX,KAAA;EACA,SAAA,EAAW,cAAA;EACX,kBAAA;AAAA;AAAA,iBAGO,kBAAA,CAAA;EACP,SAAA;EACA,KAAA;EACA,SAAA;EACA;AAAA,GACC,yBAAA"}
@@ -0,0 +1,25 @@
1
+
2
+ import { ToastAutoClose, ToastController, ToastPlacement, ToastRecord } from "./types.js";
3
+
4
+ //#region src/components/Toast/useToastController.d.ts
5
+ interface UseToastControllerOptions {
6
+ autoClose: ToastAutoClose;
7
+ limit: number;
8
+ placement: ToastPlacement;
9
+ shouldReduceMotion: boolean;
10
+ }
11
+ declare function useToastController({
12
+ autoClose,
13
+ limit,
14
+ placement,
15
+ shouldReduceMotion
16
+ }: UseToastControllerOptions): {
17
+ clearAllToastExitTimers: () => void;
18
+ clearAllToastTimers: () => void;
19
+ controller: ToastController;
20
+ toasts: ToastRecord[];
21
+ waitingToastCount: number;
22
+ };
23
+ //#endregion
24
+ export { useToastController };
25
+ //# sourceMappingURL=useToastController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useToastController.d.ts","names":[],"sources":["../../../src/components/Toast/useToastController.ts"],"mappings":";;;;UAoBU,yBAAA;EACR,SAAA,EAAW,cAAA;EACX,KAAA;EACA,SAAA,EAAW,cAAA;EACX,kBAAA;AAAA;AAAA,iBAGO,kBAAA,CAAA;EACP,SAAA;EACA,KAAA;EACA,SAAA;EACA;AAAA,GACC,yBAAA"}