@yahoo/uds-mobile 2.16.0 → 2.18.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 (236) hide show
  1. package/dist/bin/fixtures/dist/index.mjs +14 -0
  2. package/dist/bin/generateTheme.mjs +7 -2
  3. package/dist/bin/mobile/scripts/utils/configToRNMappings.mjs +4 -0
  4. package/dist/components/Popover/Popover.cjs +92 -0
  5. package/dist/components/Popover/Popover.d.cts +26 -0
  6. package/dist/components/Popover/Popover.d.cts.map +1 -0
  7. package/dist/components/Popover/Popover.d.ts +26 -0
  8. package/dist/components/Popover/Popover.d.ts.map +1 -0
  9. package/dist/components/Popover/Popover.js +92 -0
  10. package/dist/components/Popover/Popover.js.map +1 -0
  11. package/dist/components/Popover/PopoverContent.cjs +124 -0
  12. package/dist/components/Popover/PopoverContent.d.cts +15 -0
  13. package/dist/components/Popover/PopoverContent.d.cts.map +1 -0
  14. package/dist/components/Popover/PopoverContent.d.ts +15 -0
  15. package/dist/components/Popover/PopoverContent.d.ts.map +1 -0
  16. package/dist/components/Popover/PopoverContent.js +124 -0
  17. package/dist/components/Popover/PopoverContent.js.map +1 -0
  18. package/dist/components/Popover/PopoverContext.cjs +14 -0
  19. package/dist/components/Popover/PopoverContext.d.cts +10 -0
  20. package/dist/components/Popover/PopoverContext.d.cts.map +1 -0
  21. package/dist/components/Popover/PopoverContext.d.ts +10 -0
  22. package/dist/components/Popover/PopoverContext.d.ts.map +1 -0
  23. package/dist/components/Popover/PopoverContext.js +13 -0
  24. package/dist/components/Popover/PopoverContext.js.map +1 -0
  25. package/dist/components/Popover/PopoverDescription.cjs +23 -0
  26. package/dist/components/Popover/PopoverDescription.d.cts +15 -0
  27. package/dist/components/Popover/PopoverDescription.d.cts.map +1 -0
  28. package/dist/components/Popover/PopoverDescription.d.ts +15 -0
  29. package/dist/components/Popover/PopoverDescription.d.ts.map +1 -0
  30. package/dist/components/Popover/PopoverDescription.js +23 -0
  31. package/dist/components/Popover/PopoverDescription.js.map +1 -0
  32. package/dist/components/Popover/PopoverDismiss.cjs +22 -0
  33. package/dist/components/Popover/PopoverDismiss.d.cts +15 -0
  34. package/dist/components/Popover/PopoverDismiss.d.cts.map +1 -0
  35. package/dist/components/Popover/PopoverDismiss.d.ts +15 -0
  36. package/dist/components/Popover/PopoverDismiss.d.ts.map +1 -0
  37. package/dist/components/Popover/PopoverDismiss.js +22 -0
  38. package/dist/components/Popover/PopoverDismiss.js.map +1 -0
  39. package/dist/components/Popover/PopoverFrame.cjs +56 -0
  40. package/dist/components/Popover/PopoverFrame.d.cts +23 -0
  41. package/dist/components/Popover/PopoverFrame.d.cts.map +1 -0
  42. package/dist/components/Popover/PopoverFrame.d.ts +23 -0
  43. package/dist/components/Popover/PopoverFrame.d.ts.map +1 -0
  44. package/dist/components/Popover/PopoverFrame.js +55 -0
  45. package/dist/components/Popover/PopoverFrame.js.map +1 -0
  46. package/dist/components/Popover/PopoverPortalLayer.cjs +45 -0
  47. package/dist/components/Popover/PopoverPortalLayer.d.cts +15 -0
  48. package/dist/components/Popover/PopoverPortalLayer.d.cts.map +1 -0
  49. package/dist/components/Popover/PopoverPortalLayer.d.ts +15 -0
  50. package/dist/components/Popover/PopoverPortalLayer.d.ts.map +1 -0
  51. package/dist/components/Popover/PopoverPortalLayer.js +45 -0
  52. package/dist/components/Popover/PopoverPortalLayer.js.map +1 -0
  53. package/dist/components/Popover/PopoverSurface.cjs +228 -0
  54. package/dist/components/Popover/PopoverSurface.d.cts +26 -0
  55. package/dist/components/Popover/PopoverSurface.d.cts.map +1 -0
  56. package/dist/components/Popover/PopoverSurface.d.ts +26 -0
  57. package/dist/components/Popover/PopoverSurface.d.ts.map +1 -0
  58. package/dist/components/Popover/PopoverSurface.js +227 -0
  59. package/dist/components/Popover/PopoverSurface.js.map +1 -0
  60. package/dist/components/Popover/PopoverTitle.cjs +23 -0
  61. package/dist/components/Popover/PopoverTitle.d.cts +15 -0
  62. package/dist/components/Popover/PopoverTitle.d.cts.map +1 -0
  63. package/dist/components/Popover/PopoverTitle.d.ts +15 -0
  64. package/dist/components/Popover/PopoverTitle.d.ts.map +1 -0
  65. package/dist/components/Popover/PopoverTitle.js +23 -0
  66. package/dist/components/Popover/PopoverTitle.js.map +1 -0
  67. package/dist/components/Popover/PopoverTrigger.cjs +88 -0
  68. package/dist/components/Popover/PopoverTrigger.d.cts +15 -0
  69. package/dist/components/Popover/PopoverTrigger.d.cts.map +1 -0
  70. package/dist/components/Popover/PopoverTrigger.d.ts +15 -0
  71. package/dist/components/Popover/PopoverTrigger.d.ts.map +1 -0
  72. package/dist/components/Popover/PopoverTrigger.js +88 -0
  73. package/dist/components/Popover/PopoverTrigger.js.map +1 -0
  74. package/dist/components/Popover/index.cjs +14 -0
  75. package/dist/components/Popover/index.d.cts +9 -0
  76. package/dist/components/Popover/index.d.ts +9 -0
  77. package/dist/components/Popover/index.js +8 -0
  78. package/dist/components/Popover/popoverFrameGeometry.cjs +177 -0
  79. package/dist/components/Popover/popoverFrameGeometry.d.cts +48 -0
  80. package/dist/components/Popover/popoverFrameGeometry.d.cts.map +1 -0
  81. package/dist/components/Popover/popoverFrameGeometry.d.ts +48 -0
  82. package/dist/components/Popover/popoverFrameGeometry.d.ts.map +1 -0
  83. package/dist/components/Popover/popoverFrameGeometry.js +177 -0
  84. package/dist/components/Popover/popoverFrameGeometry.js.map +1 -0
  85. package/dist/components/Popover/popoverLayer.cjs +16 -0
  86. package/dist/components/Popover/popoverLayer.d.cts +8 -0
  87. package/dist/components/Popover/popoverLayer.d.cts.map +1 -0
  88. package/dist/components/Popover/popoverLayer.d.ts +8 -0
  89. package/dist/components/Popover/popoverLayer.d.ts.map +1 -0
  90. package/dist/components/Popover/popoverLayer.js +16 -0
  91. package/dist/components/Popover/popoverLayer.js.map +1 -0
  92. package/dist/components/Popover/types.cjs +1 -0
  93. package/dist/components/Popover/types.d.cts +170 -0
  94. package/dist/components/Popover/types.d.cts.map +1 -0
  95. package/dist/components/Popover/types.d.ts +170 -0
  96. package/dist/components/Popover/types.d.ts.map +1 -0
  97. package/dist/components/Popover/types.js +1 -0
  98. package/dist/components/Toast/Toast.cjs +141 -0
  99. package/dist/components/Toast/Toast.d.cts +38 -0
  100. package/dist/components/Toast/Toast.d.cts.map +1 -0
  101. package/dist/components/Toast/Toast.d.ts +38 -0
  102. package/dist/components/Toast/Toast.d.ts.map +1 -0
  103. package/dist/components/Toast/Toast.js +141 -0
  104. package/dist/components/Toast/Toast.js.map +1 -0
  105. package/dist/components/Toast/ToastAnimatedItem.cjs +88 -0
  106. package/dist/components/Toast/ToastAnimatedItem.d.cts +27 -0
  107. package/dist/components/Toast/ToastAnimatedItem.d.cts.map +1 -0
  108. package/dist/components/Toast/ToastAnimatedItem.d.ts +27 -0
  109. package/dist/components/Toast/ToastAnimatedItem.d.ts.map +1 -0
  110. package/dist/components/Toast/ToastAnimatedItem.js +87 -0
  111. package/dist/components/Toast/ToastAnimatedItem.js.map +1 -0
  112. package/dist/components/Toast/ToastItem.cjs +35 -0
  113. package/dist/components/Toast/ToastItem.d.cts +25 -0
  114. package/dist/components/Toast/ToastItem.d.cts.map +1 -0
  115. package/dist/components/Toast/ToastItem.d.ts +25 -0
  116. package/dist/components/Toast/ToastItem.d.ts.map +1 -0
  117. package/dist/components/Toast/ToastItem.js +35 -0
  118. package/dist/components/Toast/ToastItem.js.map +1 -0
  119. package/dist/components/Toast/ToastProvider.cjs +144 -0
  120. package/dist/components/Toast/ToastProvider.d.cts +58 -0
  121. package/dist/components/Toast/ToastProvider.d.cts.map +1 -0
  122. package/dist/components/Toast/ToastProvider.d.ts +58 -0
  123. package/dist/components/Toast/ToastProvider.d.ts.map +1 -0
  124. package/dist/components/Toast/ToastProvider.js +143 -0
  125. package/dist/components/Toast/ToastProvider.js.map +1 -0
  126. package/dist/components/Toast/ToastViewport.cjs +48 -0
  127. package/dist/components/Toast/ToastViewport.d.cts +42 -0
  128. package/dist/components/Toast/ToastViewport.d.cts.map +1 -0
  129. package/dist/components/Toast/ToastViewport.d.ts +42 -0
  130. package/dist/components/Toast/ToastViewport.d.ts.map +1 -0
  131. package/dist/components/Toast/ToastViewport.js +48 -0
  132. package/dist/components/Toast/ToastViewport.js.map +1 -0
  133. package/dist/components/Toast/createToast.cjs +21 -0
  134. package/dist/components/Toast/createToast.d.cts +10 -0
  135. package/dist/components/Toast/createToast.d.cts.map +1 -0
  136. package/dist/components/Toast/createToast.d.ts +10 -0
  137. package/dist/components/Toast/createToast.d.ts.map +1 -0
  138. package/dist/components/Toast/createToast.js +20 -0
  139. package/dist/components/Toast/createToast.js.map +1 -0
  140. package/dist/components/Toast/index.cjs +10 -0
  141. package/dist/components/Toast/index.d.cts +6 -0
  142. package/dist/components/Toast/index.d.ts +6 -0
  143. package/dist/components/Toast/index.js +5 -0
  144. package/dist/components/Toast/types.cjs +1 -0
  145. package/dist/components/Toast/types.d.cts +113 -0
  146. package/dist/components/Toast/types.d.cts.map +1 -0
  147. package/dist/components/Toast/types.d.ts +113 -0
  148. package/dist/components/Toast/types.d.ts.map +1 -0
  149. package/dist/components/Toast/types.js +1 -0
  150. package/dist/components/Toast/useToastController.cjs +286 -0
  151. package/dist/components/Toast/useToastController.d.cts +25 -0
  152. package/dist/components/Toast/useToastController.d.cts.map +1 -0
  153. package/dist/components/Toast/useToastController.d.ts +25 -0
  154. package/dist/components/Toast/useToastController.d.ts.map +1 -0
  155. package/dist/components/Toast/useToastController.js +286 -0
  156. package/dist/components/Toast/useToastController.js.map +1 -0
  157. package/dist/components/Toast/utils.cjs +69 -0
  158. package/dist/components/Toast/utils.d.cts +27 -0
  159. package/dist/components/Toast/utils.d.cts.map +1 -0
  160. package/dist/components/Toast/utils.d.ts +27 -0
  161. package/dist/components/Toast/utils.d.ts.map +1 -0
  162. package/dist/components/Toast/utils.js +55 -0
  163. package/dist/components/Toast/utils.js.map +1 -0
  164. package/dist/components/internal/Overlay/index.cjs +4 -0
  165. package/dist/components/internal/Overlay/index.d.cts +4 -2
  166. package/dist/components/internal/Overlay/index.d.ts +4 -2
  167. package/dist/components/internal/Overlay/index.js +3 -1
  168. package/dist/components/internal/Overlay/types.d.cts +47 -1
  169. package/dist/components/internal/Overlay/types.d.cts.map +1 -1
  170. package/dist/components/internal/Overlay/types.d.ts +47 -1
  171. package/dist/components/internal/Overlay/types.d.ts.map +1 -1
  172. package/dist/components/internal/Overlay/useAnchoredPosition.cjs +225 -0
  173. package/dist/components/internal/Overlay/useAnchoredPosition.d.cts +22 -0
  174. package/dist/components/internal/Overlay/useAnchoredPosition.d.cts.map +1 -0
  175. package/dist/components/internal/Overlay/useAnchoredPosition.d.ts +22 -0
  176. package/dist/components/internal/Overlay/useAnchoredPosition.d.ts.map +1 -0
  177. package/dist/components/internal/Overlay/useAnchoredPosition.js +225 -0
  178. package/dist/components/internal/Overlay/useAnchoredPosition.js.map +1 -0
  179. package/dist/components/internal/Overlay/useOverlayDismiss.cjs +22 -0
  180. package/dist/components/internal/Overlay/useOverlayDismiss.d.cts +12 -0
  181. package/dist/components/internal/Overlay/useOverlayDismiss.d.cts.map +1 -0
  182. package/dist/components/internal/Overlay/useOverlayDismiss.d.ts +12 -0
  183. package/dist/components/internal/Overlay/useOverlayDismiss.d.ts.map +1 -0
  184. package/dist/components/internal/Overlay/useOverlayDismiss.js +22 -0
  185. package/dist/components/internal/Overlay/useOverlayDismiss.js.map +1 -0
  186. package/dist/jest/mocks/gesture-handler.cjs +38 -0
  187. package/dist/jest/mocks/gesture-handler.d.cts +41 -0
  188. package/dist/jest/mocks/gesture-handler.d.cts.map +1 -0
  189. package/dist/jest/mocks/gesture-handler.d.ts +41 -0
  190. package/dist/jest/mocks/gesture-handler.d.ts.map +1 -0
  191. package/dist/jest/mocks/gesture-handler.js +37 -0
  192. package/dist/jest/mocks/gesture-handler.js.map +1 -0
  193. package/dist/jest/mocks/react-native.cjs +14 -0
  194. package/dist/jest/mocks/react-native.d.cts +29 -1
  195. package/dist/jest/mocks/react-native.d.cts.map +1 -1
  196. package/dist/jest/mocks/react-native.d.ts +29 -1
  197. package/dist/jest/mocks/react-native.d.ts.map +1 -1
  198. package/dist/jest/mocks/react-native.js +13 -1
  199. package/dist/jest/mocks/react-native.js.map +1 -1
  200. package/dist/jest/mocks/safe-area-context.cjs +35 -0
  201. package/dist/jest/mocks/safe-area-context.d.cts +43 -0
  202. package/dist/jest/mocks/safe-area-context.d.cts.map +1 -0
  203. package/dist/jest/mocks/safe-area-context.d.ts +43 -0
  204. package/dist/jest/mocks/safe-area-context.d.ts.map +1 -0
  205. package/dist/jest/mocks/safe-area-context.js +32 -0
  206. package/dist/jest/mocks/safe-area-context.js.map +1 -0
  207. package/dist/jest/mocks/screens.cjs +8 -0
  208. package/dist/jest/mocks/screens.d.cts +12 -0
  209. package/dist/jest/mocks/screens.d.cts.map +1 -0
  210. package/dist/jest/mocks/screens.d.ts +12 -0
  211. package/dist/jest/mocks/screens.d.ts.map +1 -0
  212. package/dist/jest/mocks/screens.js +9 -0
  213. package/dist/jest/mocks/screens.js.map +1 -0
  214. package/dist/jest/mocks/styles.cjs +98 -1
  215. package/dist/jest/mocks/styles.d.cts +6 -2
  216. package/dist/jest/mocks/styles.d.cts.map +1 -1
  217. package/dist/jest/mocks/styles.d.ts +6 -2
  218. package/dist/jest/mocks/styles.d.ts.map +1 -1
  219. package/dist/jest/mocks/styles.js +95 -2
  220. package/dist/jest/mocks/styles.js.map +1 -1
  221. package/dist/jest/setup.cjs +46 -3
  222. package/dist/jest/setup.d.cts.map +1 -1
  223. package/dist/jest/setup.d.ts.map +1 -1
  224. package/dist/jest/setup.js +46 -3
  225. package/dist/jest/setup.js.map +1 -1
  226. package/dist/types/dist/index.d.cts +4 -1
  227. package/dist/types/dist/index.d.cts.map +1 -1
  228. package/dist/types/dist/index.d.ts +4 -1
  229. package/dist/types/dist/index.d.ts.map +1 -1
  230. package/fonts/index.cjs +211 -211
  231. package/fonts/index.mjs +211 -211
  232. package/generated/styles.cjs +6 -0
  233. package/generated/styles.d.ts +13 -1
  234. package/generated/styles.mjs +6 -0
  235. package/generated/unistyles.d.ts +13 -0
  236. package/package.json +21 -1
@@ -0,0 +1,69 @@
1
+ /*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ //#region src/components/Toast/utils.ts
4
+ const DEFAULT_TOAST_AUTO_CLOSE = 6e3;
5
+ const DEFAULT_TOAST_PLACEMENT = "bottom-center";
6
+ const DEFAULT_MAX_VISIBLE_TOASTS = 3;
7
+ const DEFAULT_TOAST_INSETS = {
8
+ top: 16,
9
+ bottom: 16,
10
+ horizontal: 16
11
+ };
12
+ const TOAST_ENTER_ANIMATION_DURATION = 200;
13
+ const TOAST_EXIT_ANIMATION_DURATION = 150;
14
+ const TOAST_ANIMATION_TRANSLATE_OFFSET = 16;
15
+ const TOAST_SWIPE_DISMISS_TRANSLATE_OFFSET = 96;
16
+ const TOAST_SWIPE_DISMISS_TRANSLATION = 50;
17
+ const TOAST_SWIPE_DISMISS_VELOCITY = 500;
18
+ const TOAST_SWIPE_OPPOSITE_DIRECTION_FACTOR = .2;
19
+ let toastIdCounter = 0;
20
+ function createToastId() {
21
+ toastIdCounter += 1;
22
+ return `toast-${toastIdCounter}`;
23
+ }
24
+ function isPersistentAutoClose(autoClose) {
25
+ return autoClose === false;
26
+ }
27
+ function isToastShowOptions(input) {
28
+ return "actionButton" in input || "children" in input || "closeIcon" in input || "closeOnAction" in input || "autoClose" in input || "dismissible" in input || "id" in input || "message" in input || "onActionPress" in input || "onClickActionButton" in input || "onClickCloseButton" in input || "onClose" in input || "onHide" in input || "onShow" in input || "placement" in input || "size" in input || "startIcon" in input || "variant" in input;
29
+ }
30
+ function resolveToastInput(input) {
31
+ if (input == null || typeof input !== "object") return { message: input };
32
+ return isToastShowOptions(input) ? input : { message: input };
33
+ }
34
+ function toastReducer(state, action) {
35
+ switch (action.type) {
36
+ case "upsert": {
37
+ const existingIndex = state.findIndex((toast) => toast.id === action.toast.id);
38
+ if (existingIndex === -1) return [...state, action.toast];
39
+ const next = [...state];
40
+ next[existingIndex] = action.toast;
41
+ return next;
42
+ }
43
+ case "update": return state.map((toast) => toast.id === action.id ? {
44
+ ...toast,
45
+ ...action.toast,
46
+ id: toast.id
47
+ } : toast);
48
+ case "remove": return state.filter((toast) => toast.id !== action.id);
49
+ case "set": return action.toasts;
50
+ case "removeAll": return [];
51
+ }
52
+ }
53
+ //#endregion
54
+ exports.DEFAULT_MAX_VISIBLE_TOASTS = DEFAULT_MAX_VISIBLE_TOASTS;
55
+ exports.DEFAULT_TOAST_AUTO_CLOSE = DEFAULT_TOAST_AUTO_CLOSE;
56
+ exports.DEFAULT_TOAST_INSETS = DEFAULT_TOAST_INSETS;
57
+ exports.DEFAULT_TOAST_PLACEMENT = DEFAULT_TOAST_PLACEMENT;
58
+ exports.TOAST_ANIMATION_TRANSLATE_OFFSET = TOAST_ANIMATION_TRANSLATE_OFFSET;
59
+ exports.TOAST_ENTER_ANIMATION_DURATION = TOAST_ENTER_ANIMATION_DURATION;
60
+ exports.TOAST_EXIT_ANIMATION_DURATION = TOAST_EXIT_ANIMATION_DURATION;
61
+ exports.TOAST_SWIPE_DISMISS_TRANSLATE_OFFSET = TOAST_SWIPE_DISMISS_TRANSLATE_OFFSET;
62
+ exports.TOAST_SWIPE_DISMISS_TRANSLATION = TOAST_SWIPE_DISMISS_TRANSLATION;
63
+ exports.TOAST_SWIPE_DISMISS_VELOCITY = TOAST_SWIPE_DISMISS_VELOCITY;
64
+ exports.TOAST_SWIPE_OPPOSITE_DIRECTION_FACTOR = TOAST_SWIPE_OPPOSITE_DIRECTION_FACTOR;
65
+ exports.createToastId = createToastId;
66
+ exports.isPersistentAutoClose = isPersistentAutoClose;
67
+ exports.isToastShowOptions = isToastShowOptions;
68
+ exports.resolveToastInput = resolveToastInput;
69
+ exports.toastReducer = toastReducer;
@@ -0,0 +1,27 @@
1
+
2
+ import { ToastAction, ToastAutoClose, ToastRecord, ToastShowInput } from "./types.cjs";
3
+
4
+ //#region src/components/Toast/utils.d.ts
5
+ declare const DEFAULT_TOAST_AUTO_CLOSE = 6000;
6
+ declare const DEFAULT_TOAST_PLACEMENT = "bottom-center";
7
+ declare const DEFAULT_MAX_VISIBLE_TOASTS = 3;
8
+ declare const DEFAULT_TOAST_INSETS: {
9
+ readonly top: 16;
10
+ readonly bottom: 16;
11
+ readonly horizontal: 16;
12
+ };
13
+ declare const TOAST_ENTER_ANIMATION_DURATION = 200;
14
+ declare const TOAST_EXIT_ANIMATION_DURATION = 150;
15
+ declare const TOAST_ANIMATION_TRANSLATE_OFFSET = 16;
16
+ declare const TOAST_SWIPE_DISMISS_TRANSLATE_OFFSET = 96;
17
+ declare const TOAST_SWIPE_DISMISS_TRANSLATION = 50;
18
+ declare const TOAST_SWIPE_DISMISS_VELOCITY = 500;
19
+ declare const TOAST_SWIPE_OPPOSITE_DIRECTION_FACTOR = 0.2;
20
+ declare function createToastId(): string;
21
+ declare function isPersistentAutoClose(autoClose: ToastAutoClose): autoClose is false;
22
+ declare function isToastShowOptions(input: object): input is Partial<ToastRecord>;
23
+ declare function resolveToastInput(input: ToastShowInput): Partial<ToastRecord>;
24
+ declare function toastReducer(state: ToastRecord[], action: ToastAction): ToastRecord[];
25
+ //#endregion
26
+ export { DEFAULT_MAX_VISIBLE_TOASTS, DEFAULT_TOAST_AUTO_CLOSE, DEFAULT_TOAST_INSETS, DEFAULT_TOAST_PLACEMENT, TOAST_ANIMATION_TRANSLATE_OFFSET, TOAST_ENTER_ANIMATION_DURATION, TOAST_EXIT_ANIMATION_DURATION, TOAST_SWIPE_DISMISS_TRANSLATE_OFFSET, TOAST_SWIPE_DISMISS_TRANSLATION, TOAST_SWIPE_DISMISS_VELOCITY, TOAST_SWIPE_OPPOSITE_DIRECTION_FACTOR, createToastId, isPersistentAutoClose, isToastShowOptions, resolveToastInput, toastReducer };
27
+ //# sourceMappingURL=utils.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.cts","names":[],"sources":["../../../src/components/Toast/utils.ts"],"mappings":";;;;cAIM,wBAAA;AAAA,cACA,uBAAA;AAAA,cACA,0BAAA;AAAA,cACA,oBAAA;EAAA;;;;cAKA,8BAAA;AAAA,cACA,6BAAA;AAAA,cACA,gCAAA;AAAA,cACA,oCAAA;AAAA,cACA,+BAAA;AAAA,cACA,4BAAA;AAAA,cACA,qCAAA;AAAA,iBAIG,aAAA,CAAA;AAAA,iBAKA,qBAAA,CAAsB,SAAA,EAAW,cAAA,GAAiB,SAAA;AAAA,iBAIlD,kBAAA,CAAmB,KAAA,WAAgB,KAAA,IAAS,OAAA,CAAQ,WAAA;AAAA,iBAuBpD,iBAAA,CAAkB,KAAA,EAAO,cAAA,GAAiB,OAAA,CAAQ,WAAA;AAAA,iBAQlD,YAAA,CAAa,KAAA,EAAO,WAAA,IAAe,MAAA,EAAQ,WAAA,GAAc,WAAA"}
@@ -0,0 +1,27 @@
1
+
2
+ import { ToastAction, ToastAutoClose, ToastRecord, ToastShowInput } from "./types.js";
3
+
4
+ //#region src/components/Toast/utils.d.ts
5
+ declare const DEFAULT_TOAST_AUTO_CLOSE = 6000;
6
+ declare const DEFAULT_TOAST_PLACEMENT = "bottom-center";
7
+ declare const DEFAULT_MAX_VISIBLE_TOASTS = 3;
8
+ declare const DEFAULT_TOAST_INSETS: {
9
+ readonly top: 16;
10
+ readonly bottom: 16;
11
+ readonly horizontal: 16;
12
+ };
13
+ declare const TOAST_ENTER_ANIMATION_DURATION = 200;
14
+ declare const TOAST_EXIT_ANIMATION_DURATION = 150;
15
+ declare const TOAST_ANIMATION_TRANSLATE_OFFSET = 16;
16
+ declare const TOAST_SWIPE_DISMISS_TRANSLATE_OFFSET = 96;
17
+ declare const TOAST_SWIPE_DISMISS_TRANSLATION = 50;
18
+ declare const TOAST_SWIPE_DISMISS_VELOCITY = 500;
19
+ declare const TOAST_SWIPE_OPPOSITE_DIRECTION_FACTOR = 0.2;
20
+ declare function createToastId(): string;
21
+ declare function isPersistentAutoClose(autoClose: ToastAutoClose): autoClose is false;
22
+ declare function isToastShowOptions(input: object): input is Partial<ToastRecord>;
23
+ declare function resolveToastInput(input: ToastShowInput): Partial<ToastRecord>;
24
+ declare function toastReducer(state: ToastRecord[], action: ToastAction): ToastRecord[];
25
+ //#endregion
26
+ export { DEFAULT_MAX_VISIBLE_TOASTS, DEFAULT_TOAST_AUTO_CLOSE, DEFAULT_TOAST_INSETS, DEFAULT_TOAST_PLACEMENT, TOAST_ANIMATION_TRANSLATE_OFFSET, TOAST_ENTER_ANIMATION_DURATION, TOAST_EXIT_ANIMATION_DURATION, TOAST_SWIPE_DISMISS_TRANSLATE_OFFSET, TOAST_SWIPE_DISMISS_TRANSLATION, TOAST_SWIPE_DISMISS_VELOCITY, TOAST_SWIPE_OPPOSITE_DIRECTION_FACTOR, createToastId, isPersistentAutoClose, isToastShowOptions, resolveToastInput, toastReducer };
27
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","names":[],"sources":["../../../src/components/Toast/utils.ts"],"mappings":";;;;cAIM,wBAAA;AAAA,cACA,uBAAA;AAAA,cACA,0BAAA;AAAA,cACA,oBAAA;EAAA;;;;cAKA,8BAAA;AAAA,cACA,6BAAA;AAAA,cACA,gCAAA;AAAA,cACA,oCAAA;AAAA,cACA,+BAAA;AAAA,cACA,4BAAA;AAAA,cACA,qCAAA;AAAA,iBAIG,aAAA,CAAA;AAAA,iBAKA,qBAAA,CAAsB,SAAA,EAAW,cAAA,GAAiB,SAAA;AAAA,iBAIlD,kBAAA,CAAmB,KAAA,WAAgB,KAAA,IAAS,OAAA,CAAQ,WAAA;AAAA,iBAuBpD,iBAAA,CAAkB,KAAA,EAAO,cAAA,GAAiB,OAAA,CAAQ,WAAA;AAAA,iBAQlD,YAAA,CAAa,KAAA,EAAO,WAAA,IAAe,MAAA,EAAQ,WAAA,GAAc,WAAA"}
@@ -0,0 +1,55 @@
1
+ /*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
2
+ //#region src/components/Toast/utils.ts
3
+ const DEFAULT_TOAST_AUTO_CLOSE = 6e3;
4
+ const DEFAULT_TOAST_PLACEMENT = "bottom-center";
5
+ const DEFAULT_MAX_VISIBLE_TOASTS = 3;
6
+ const DEFAULT_TOAST_INSETS = {
7
+ top: 16,
8
+ bottom: 16,
9
+ horizontal: 16
10
+ };
11
+ const TOAST_ENTER_ANIMATION_DURATION = 200;
12
+ const TOAST_EXIT_ANIMATION_DURATION = 150;
13
+ const TOAST_ANIMATION_TRANSLATE_OFFSET = 16;
14
+ const TOAST_SWIPE_DISMISS_TRANSLATE_OFFSET = 96;
15
+ const TOAST_SWIPE_DISMISS_TRANSLATION = 50;
16
+ const TOAST_SWIPE_DISMISS_VELOCITY = 500;
17
+ const TOAST_SWIPE_OPPOSITE_DIRECTION_FACTOR = .2;
18
+ let toastIdCounter = 0;
19
+ function createToastId() {
20
+ toastIdCounter += 1;
21
+ return `toast-${toastIdCounter}`;
22
+ }
23
+ function isPersistentAutoClose(autoClose) {
24
+ return autoClose === false;
25
+ }
26
+ function isToastShowOptions(input) {
27
+ return "actionButton" in input || "children" in input || "closeIcon" in input || "closeOnAction" in input || "autoClose" in input || "dismissible" in input || "id" in input || "message" in input || "onActionPress" in input || "onClickActionButton" in input || "onClickCloseButton" in input || "onClose" in input || "onHide" in input || "onShow" in input || "placement" in input || "size" in input || "startIcon" in input || "variant" in input;
28
+ }
29
+ function resolveToastInput(input) {
30
+ if (input == null || typeof input !== "object") return { message: input };
31
+ return isToastShowOptions(input) ? input : { message: input };
32
+ }
33
+ function toastReducer(state, action) {
34
+ switch (action.type) {
35
+ case "upsert": {
36
+ const existingIndex = state.findIndex((toast) => toast.id === action.toast.id);
37
+ if (existingIndex === -1) return [...state, action.toast];
38
+ const next = [...state];
39
+ next[existingIndex] = action.toast;
40
+ return next;
41
+ }
42
+ case "update": return state.map((toast) => toast.id === action.id ? {
43
+ ...toast,
44
+ ...action.toast,
45
+ id: toast.id
46
+ } : toast);
47
+ case "remove": return state.filter((toast) => toast.id !== action.id);
48
+ case "set": return action.toasts;
49
+ case "removeAll": return [];
50
+ }
51
+ }
52
+ //#endregion
53
+ export { DEFAULT_MAX_VISIBLE_TOASTS, DEFAULT_TOAST_AUTO_CLOSE, DEFAULT_TOAST_INSETS, DEFAULT_TOAST_PLACEMENT, TOAST_ANIMATION_TRANSLATE_OFFSET, TOAST_ENTER_ANIMATION_DURATION, TOAST_EXIT_ANIMATION_DURATION, TOAST_SWIPE_DISMISS_TRANSLATE_OFFSET, TOAST_SWIPE_DISMISS_TRANSLATION, TOAST_SWIPE_DISMISS_VELOCITY, TOAST_SWIPE_OPPOSITE_DIRECTION_FACTOR, createToastId, isPersistentAutoClose, isToastShowOptions, resolveToastInput, toastReducer };
54
+
55
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","names":[],"sources":["../../../src/components/Toast/utils.ts"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport type { ToastAction, ToastAutoClose, ToastRecord, ToastShowInput } from './types';\n\nconst DEFAULT_TOAST_AUTO_CLOSE = 6_000;\nconst DEFAULT_TOAST_PLACEMENT = 'bottom-center';\nconst DEFAULT_MAX_VISIBLE_TOASTS = 3;\nconst DEFAULT_TOAST_INSETS = {\n top: 16,\n bottom: 16,\n horizontal: 16,\n} as const;\nconst TOAST_ENTER_ANIMATION_DURATION = 200;\nconst TOAST_EXIT_ANIMATION_DURATION = 150;\nconst TOAST_ANIMATION_TRANSLATE_OFFSET = 16;\nconst TOAST_SWIPE_DISMISS_TRANSLATE_OFFSET = 96;\nconst TOAST_SWIPE_DISMISS_TRANSLATION = 50;\nconst TOAST_SWIPE_DISMISS_VELOCITY = 500;\nconst TOAST_SWIPE_OPPOSITE_DIRECTION_FACTOR = 0.2;\n\nlet toastIdCounter = 0;\n\nfunction createToastId(): string {\n toastIdCounter += 1;\n return `toast-${toastIdCounter}`;\n}\n\nfunction isPersistentAutoClose(autoClose: ToastAutoClose): autoClose is false {\n return autoClose === false;\n}\n\nfunction isToastShowOptions(input: object): input is Partial<ToastRecord> {\n return (\n 'actionButton' in input ||\n 'children' in input ||\n 'closeIcon' in input ||\n 'closeOnAction' in input ||\n 'autoClose' in input ||\n 'dismissible' in input ||\n 'id' in input ||\n 'message' in input ||\n 'onActionPress' in input ||\n 'onClickActionButton' in input ||\n 'onClickCloseButton' in input ||\n 'onClose' in input ||\n 'onHide' in input ||\n 'onShow' in input ||\n 'placement' in input ||\n 'size' in input ||\n 'startIcon' in input ||\n 'variant' in input\n );\n}\n\nfunction resolveToastInput(input: ToastShowInput): Partial<ToastRecord> {\n if (input == null || typeof input !== 'object') {\n return { message: input };\n }\n\n return isToastShowOptions(input) ? input : { message: input as ReactNode };\n}\n\nfunction toastReducer(state: ToastRecord[], action: ToastAction): ToastRecord[] {\n switch (action.type) {\n case 'upsert': {\n const existingIndex = state.findIndex((toast) => toast.id === action.toast.id);\n\n if (existingIndex === -1) {\n return [...state, action.toast];\n }\n\n const next = [...state];\n next[existingIndex] = action.toast;\n return next;\n }\n case 'update': {\n return state.map((toast) =>\n toast.id === action.id ? { ...toast, ...action.toast, id: toast.id } : toast,\n );\n }\n case 'remove': {\n return state.filter((toast) => toast.id !== action.id);\n }\n case 'set': {\n return action.toasts;\n }\n case 'removeAll': {\n return [];\n }\n }\n}\n\nexport {\n createToastId,\n DEFAULT_MAX_VISIBLE_TOASTS,\n DEFAULT_TOAST_AUTO_CLOSE,\n DEFAULT_TOAST_INSETS,\n DEFAULT_TOAST_PLACEMENT,\n isPersistentAutoClose,\n isToastShowOptions,\n resolveToastInput,\n TOAST_ANIMATION_TRANSLATE_OFFSET,\n TOAST_ENTER_ANIMATION_DURATION,\n TOAST_EXIT_ANIMATION_DURATION,\n TOAST_SWIPE_DISMISS_TRANSLATE_OFFSET,\n TOAST_SWIPE_DISMISS_TRANSLATION,\n TOAST_SWIPE_DISMISS_VELOCITY,\n TOAST_SWIPE_OPPOSITE_DIRECTION_FACTOR,\n toastReducer,\n};\n"],"mappings":";;AAIA,MAAM,2BAA2B;AACjC,MAAM,0BAA0B;AAChC,MAAM,6BAA6B;AACnC,MAAM,uBAAuB;CAC3B,KAAK;CACL,QAAQ;CACR,YAAY;CACb;AACD,MAAM,iCAAiC;AACvC,MAAM,gCAAgC;AACtC,MAAM,mCAAmC;AACzC,MAAM,uCAAuC;AAC7C,MAAM,kCAAkC;AACxC,MAAM,+BAA+B;AACrC,MAAM,wCAAwC;AAE9C,IAAI,iBAAiB;AAErB,SAAS,gBAAwB;CAC/B,kBAAkB;CAClB,OAAO,SAAS;;AAGlB,SAAS,sBAAsB,WAA+C;CAC5E,OAAO,cAAc;;AAGvB,SAAS,mBAAmB,OAA8C;CACxE,OACE,kBAAkB,SAClB,cAAc,SACd,eAAe,SACf,mBAAmB,SACnB,eAAe,SACf,iBAAiB,SACjB,QAAQ,SACR,aAAa,SACb,mBAAmB,SACnB,yBAAyB,SACzB,wBAAwB,SACxB,aAAa,SACb,YAAY,SACZ,YAAY,SACZ,eAAe,SACf,UAAU,SACV,eAAe,SACf,aAAa;;AAIjB,SAAS,kBAAkB,OAA6C;CACtE,IAAI,SAAS,QAAQ,OAAO,UAAU,UACpC,OAAO,EAAE,SAAS,OAAO;CAG3B,OAAO,mBAAmB,MAAM,GAAG,QAAQ,EAAE,SAAS,OAAoB;;AAG5E,SAAS,aAAa,OAAsB,QAAoC;CAC9E,QAAQ,OAAO,MAAf;EACE,KAAK,UAAU;GACb,MAAM,gBAAgB,MAAM,WAAW,UAAU,MAAM,OAAO,OAAO,MAAM,GAAG;GAE9E,IAAI,kBAAkB,IACpB,OAAO,CAAC,GAAG,OAAO,OAAO,MAAM;GAGjC,MAAM,OAAO,CAAC,GAAG,MAAM;GACvB,KAAK,iBAAiB,OAAO;GAC7B,OAAO;;EAET,KAAK,UACH,OAAO,MAAM,KAAK,UAChB,MAAM,OAAO,OAAO,KAAK;GAAE,GAAG;GAAO,GAAG,OAAO;GAAO,IAAI,MAAM;GAAI,GAAG,MACxE;EAEH,KAAK,UACH,OAAO,MAAM,QAAQ,UAAU,MAAM,OAAO,OAAO,GAAG;EAExD,KAAK,OACH,OAAO,OAAO;EAEhB,KAAK,aACH,OAAO,EAAE"}
@@ -1,6 +1,10 @@
1
1
  /*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const require_components_internal_Overlay_OverlayPortal = require("./OverlayPortal.cjs");
4
+ const require_components_internal_Overlay_useAnchoredPosition = require("./useAnchoredPosition.cjs");
4
5
  const require_components_internal_Overlay_useControllableState = require("./useControllableState.cjs");
6
+ const require_components_internal_Overlay_useOverlayDismiss = require("./useOverlayDismiss.cjs");
5
7
  exports.OverlayPortal = require_components_internal_Overlay_OverlayPortal.OverlayPortal;
8
+ exports.useAnchoredPosition = require_components_internal_Overlay_useAnchoredPosition.useAnchoredPosition;
6
9
  exports.useControllableState = require_components_internal_Overlay_useControllableState.useControllableState;
10
+ exports.useOverlayDismiss = require_components_internal_Overlay_useOverlayDismiss.useOverlayDismiss;
@@ -1,5 +1,7 @@
1
1
 
2
- import { OverlayPortalProps, UseControllableStateProps, UseControllableStateResult } from "./types.cjs";
2
+ import { AnchoredAlign, AnchoredPlacement, AnchoredRect, AnchoredWidth, OverlayInsets, OverlayPortalProps, UseAnchoredPositionProps, UseAnchoredPositionResult, UseControllableStateProps, UseControllableStateResult, UseOverlayDismissProps } from "./types.cjs";
3
3
  import { OverlayPortal } from "./OverlayPortal.cjs";
4
+ import { useAnchoredPosition } from "./useAnchoredPosition.cjs";
4
5
  import { useControllableState } from "./useControllableState.cjs";
5
- export { OverlayPortal, type OverlayPortalProps, type UseControllableStateProps, type UseControllableStateResult, useControllableState };
6
+ import { useOverlayDismiss } from "./useOverlayDismiss.cjs";
7
+ export { type AnchoredAlign, type AnchoredPlacement, type AnchoredRect, type AnchoredWidth, type OverlayInsets, OverlayPortal, type OverlayPortalProps, type UseAnchoredPositionProps, type UseAnchoredPositionResult, type UseControllableStateProps, type UseControllableStateResult, type UseOverlayDismissProps, useAnchoredPosition, useControllableState, useOverlayDismiss };
@@ -1,5 +1,7 @@
1
1
 
2
- import { OverlayPortalProps, UseControllableStateProps, UseControllableStateResult } from "./types.js";
2
+ import { AnchoredAlign, AnchoredPlacement, AnchoredRect, AnchoredWidth, OverlayInsets, OverlayPortalProps, UseAnchoredPositionProps, UseAnchoredPositionResult, UseControllableStateProps, UseControllableStateResult, UseOverlayDismissProps } from "./types.js";
3
3
  import { OverlayPortal } from "./OverlayPortal.js";
4
+ import { useAnchoredPosition } from "./useAnchoredPosition.js";
4
5
  import { useControllableState } from "./useControllableState.js";
5
- export { OverlayPortal, type OverlayPortalProps, type UseControllableStateProps, type UseControllableStateResult, useControllableState };
6
+ import { useOverlayDismiss } from "./useOverlayDismiss.js";
7
+ export { type AnchoredAlign, type AnchoredPlacement, type AnchoredRect, type AnchoredWidth, type OverlayInsets, OverlayPortal, type OverlayPortalProps, type UseAnchoredPositionProps, type UseAnchoredPositionResult, type UseControllableStateProps, type UseControllableStateResult, type UseOverlayDismissProps, useAnchoredPosition, useControllableState, useOverlayDismiss };
@@ -1,4 +1,6 @@
1
1
  /*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
2
2
  import { OverlayPortal } from "./OverlayPortal.js";
3
+ import { useAnchoredPosition } from "./useAnchoredPosition.js";
3
4
  import { useControllableState } from "./useControllableState.js";
4
- export { OverlayPortal, useControllableState };
5
+ import { useOverlayDismiss } from "./useOverlayDismiss.js";
6
+ export { OverlayPortal, useAnchoredPosition, useControllableState, useOverlayDismiss };
@@ -1,5 +1,6 @@
1
1
 
2
2
  import { Dispatch, ReactNode, SetStateAction } from "react";
3
+ import { StyleProp, ViewStyle } from "react-native";
3
4
 
4
5
  //#region src/components/internal/Overlay/types.d.ts
5
6
  interface OverlayPortalProps {
@@ -16,6 +17,51 @@ interface UseControllableStateProps<T> {
16
17
  onChange?: (value: T) => void;
17
18
  }
18
19
  type UseControllableStateResult<T> = [T, Dispatch<SetStateAction<T>>];
20
+ type AnchoredPlacement = 'top' | 'bottom' | 'start' | 'end' | 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end' | 'start-top' | 'start-bottom' | 'end-top' | 'end-bottom';
21
+ type AnchoredAlign = 'start' | 'center' | 'end';
22
+ type AnchoredWidth = 'content' | 'trigger' | 'full' | number;
23
+ interface AnchoredRect {
24
+ x: number;
25
+ y: number;
26
+ width: number;
27
+ height: number;
28
+ }
29
+ interface OverlayInsets {
30
+ top?: number;
31
+ right?: number;
32
+ bottom?: number;
33
+ left?: number;
34
+ }
35
+ interface UseAnchoredPositionProps {
36
+ triggerRect: AnchoredRect | null;
37
+ contentSize: {
38
+ width: number;
39
+ height: number;
40
+ };
41
+ placement?: AnchoredPlacement;
42
+ align?: AnchoredAlign;
43
+ offset?: number;
44
+ alignOffset?: number;
45
+ avoidCollisions?: boolean;
46
+ collisionPadding?: number;
47
+ width?: AnchoredWidth;
48
+ sameWidth?: boolean;
49
+ insets?: OverlayInsets;
50
+ arrowWidth?: number;
51
+ arrowHeight?: number;
52
+ }
53
+ interface UseAnchoredPositionResult {
54
+ resolvedPlacement: AnchoredPlacement;
55
+ contentStyle: StyleProp<ViewStyle>;
56
+ arrowStyle: StyleProp<ViewStyle>;
57
+ anchorReady: boolean;
58
+ maxWidth: number;
59
+ }
60
+ interface UseOverlayDismissProps {
61
+ open: boolean;
62
+ dismissible?: boolean;
63
+ onDismiss: () => void;
64
+ }
19
65
  //#endregion
20
- export { type OverlayPortalProps, type UseControllableStateProps, type UseControllableStateResult };
66
+ export { type AnchoredAlign, type AnchoredPlacement, type AnchoredRect, type AnchoredWidth, type OverlayInsets, type OverlayPortalProps, type UseAnchoredPositionProps, type UseAnchoredPositionResult, type UseControllableStateProps, type UseControllableStateResult, type UseOverlayDismissProps };
21
67
  //# sourceMappingURL=types.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.cts","names":[],"sources":["../../../../src/components/internal/Overlay/types.ts"],"mappings":";;;;UAEU,kBAAA;EACR,QAAA,EAAU,SAAA;EADF;;;;EAMR,oBAAA;AAAA;AAAA,UAGQ,yBAAA;EACR,KAAA,GAAQ,CAAA;EACR,YAAA,EAAc,CAAA,UAAW,CAAA;EACzB,QAAA,IAAY,KAAA,EAAO,CAAA;AAAA;AAAA,KAGhB,0BAAA,OAAiC,CAAA,EAAG,QAAA,CAAS,cAAA,CAAe,CAAA"}
1
+ {"version":3,"file":"types.d.cts","names":[],"sources":["../../../../src/components/internal/Overlay/types.ts"],"mappings":";;;;;UAGU,kBAAA;EACR,QAAA,EAAU,SAAA;EADF;;;;EAMR,oBAAA;AAAA;AAAA,UAGQ,yBAAA;EACR,KAAA,GAAQ,CAAA;EACR,YAAA,EAAc,CAAA,UAAW,CAAA;EACzB,QAAA,IAAY,KAAA,EAAO,CAAA;AAAA;AAAA,KAGhB,0BAAA,OAAiC,CAAA,EAAG,QAAA,CAAS,cAAA,CAAe,CAAA;AAAA,KAE5D,iBAAA;AAAA,KAcA,aAAA;AAAA,KAEA,aAAA;AAAA,UAEK,YAAA;EACR,CAAA;EACA,CAAA;EACA,KAAA;EACA,MAAA;AAAA;AAAA,UAGQ,aAAA;EACR,GAAA;EACA,KAAA;EACA,MAAA;EACA,IAAA;AAAA;AAAA,UAGQ,wBAAA;EACR,WAAA,EAAa,YAAA;EACb,WAAA;IAAe,KAAA;IAAe,MAAA;EAAA;EAC9B,SAAA,GAAY,iBAAA;EACZ,KAAA,GAAQ,aAAA;EACR,MAAA;EACA,WAAA;EACA,eAAA;EACA,gBAAA;EACA,KAAA,GAAQ,aAAA;EACR,SAAA;EACA,MAAA,GAAS,aAAA;EACT,UAAA;EACA,WAAA;AAAA;AAAA,UAGQ,yBAAA;EACR,iBAAA,EAAmB,iBAAA;EACnB,YAAA,EAAc,SAAA,CAAU,SAAA;EACxB,UAAA,EAAY,SAAA,CAAU,SAAA;EACtB,WAAA;EACA,QAAA;AAAA;AAAA,UAGQ,sBAAA;EACR,IAAA;EACA,WAAA;EACA,SAAA;AAAA"}
@@ -1,5 +1,6 @@
1
1
 
2
2
  import { Dispatch, ReactNode, SetStateAction } from "react";
3
+ import { StyleProp, ViewStyle } from "react-native";
3
4
 
4
5
  //#region src/components/internal/Overlay/types.d.ts
5
6
  interface OverlayPortalProps {
@@ -16,6 +17,51 @@ interface UseControllableStateProps<T> {
16
17
  onChange?: (value: T) => void;
17
18
  }
18
19
  type UseControllableStateResult<T> = [T, Dispatch<SetStateAction<T>>];
20
+ type AnchoredPlacement = 'top' | 'bottom' | 'start' | 'end' | 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end' | 'start-top' | 'start-bottom' | 'end-top' | 'end-bottom';
21
+ type AnchoredAlign = 'start' | 'center' | 'end';
22
+ type AnchoredWidth = 'content' | 'trigger' | 'full' | number;
23
+ interface AnchoredRect {
24
+ x: number;
25
+ y: number;
26
+ width: number;
27
+ height: number;
28
+ }
29
+ interface OverlayInsets {
30
+ top?: number;
31
+ right?: number;
32
+ bottom?: number;
33
+ left?: number;
34
+ }
35
+ interface UseAnchoredPositionProps {
36
+ triggerRect: AnchoredRect | null;
37
+ contentSize: {
38
+ width: number;
39
+ height: number;
40
+ };
41
+ placement?: AnchoredPlacement;
42
+ align?: AnchoredAlign;
43
+ offset?: number;
44
+ alignOffset?: number;
45
+ avoidCollisions?: boolean;
46
+ collisionPadding?: number;
47
+ width?: AnchoredWidth;
48
+ sameWidth?: boolean;
49
+ insets?: OverlayInsets;
50
+ arrowWidth?: number;
51
+ arrowHeight?: number;
52
+ }
53
+ interface UseAnchoredPositionResult {
54
+ resolvedPlacement: AnchoredPlacement;
55
+ contentStyle: StyleProp<ViewStyle>;
56
+ arrowStyle: StyleProp<ViewStyle>;
57
+ anchorReady: boolean;
58
+ maxWidth: number;
59
+ }
60
+ interface UseOverlayDismissProps {
61
+ open: boolean;
62
+ dismissible?: boolean;
63
+ onDismiss: () => void;
64
+ }
19
65
  //#endregion
20
- export { type OverlayPortalProps, type UseControllableStateProps, type UseControllableStateResult };
66
+ export { type AnchoredAlign, type AnchoredPlacement, type AnchoredRect, type AnchoredWidth, type OverlayInsets, type OverlayPortalProps, type UseAnchoredPositionProps, type UseAnchoredPositionResult, type UseControllableStateProps, type UseControllableStateResult, type UseOverlayDismissProps };
21
67
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../../../../src/components/internal/Overlay/types.ts"],"mappings":";;;;UAEU,kBAAA;EACR,QAAA,EAAU,SAAA;EADF;;;;EAMR,oBAAA;AAAA;AAAA,UAGQ,yBAAA;EACR,KAAA,GAAQ,CAAA;EACR,YAAA,EAAc,CAAA,UAAW,CAAA;EACzB,QAAA,IAAY,KAAA,EAAO,CAAA;AAAA;AAAA,KAGhB,0BAAA,OAAiC,CAAA,EAAG,QAAA,CAAS,cAAA,CAAe,CAAA"}
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../../../src/components/internal/Overlay/types.ts"],"mappings":";;;;;UAGU,kBAAA;EACR,QAAA,EAAU,SAAA;EADF;;;;EAMR,oBAAA;AAAA;AAAA,UAGQ,yBAAA;EACR,KAAA,GAAQ,CAAA;EACR,YAAA,EAAc,CAAA,UAAW,CAAA;EACzB,QAAA,IAAY,KAAA,EAAO,CAAA;AAAA;AAAA,KAGhB,0BAAA,OAAiC,CAAA,EAAG,QAAA,CAAS,cAAA,CAAe,CAAA;AAAA,KAE5D,iBAAA;AAAA,KAcA,aAAA;AAAA,KAEA,aAAA;AAAA,UAEK,YAAA;EACR,CAAA;EACA,CAAA;EACA,KAAA;EACA,MAAA;AAAA;AAAA,UAGQ,aAAA;EACR,GAAA;EACA,KAAA;EACA,MAAA;EACA,IAAA;AAAA;AAAA,UAGQ,wBAAA;EACR,WAAA,EAAa,YAAA;EACb,WAAA;IAAe,KAAA;IAAe,MAAA;EAAA;EAC9B,SAAA,GAAY,iBAAA;EACZ,KAAA,GAAQ,aAAA;EACR,MAAA;EACA,WAAA;EACA,eAAA;EACA,gBAAA;EACA,KAAA,GAAQ,aAAA;EACR,SAAA;EACA,MAAA,GAAS,aAAA;EACT,UAAA;EACA,WAAA;AAAA;AAAA,UAGQ,yBAAA;EACR,iBAAA,EAAmB,iBAAA;EACnB,YAAA,EAAc,SAAA,CAAU,SAAA;EACxB,UAAA,EAAY,SAAA,CAAU,SAAA;EACtB,WAAA;EACA,QAAA;AAAA;AAAA,UAGQ,sBAAA;EACR,IAAA;EACA,WAAA;EACA,SAAA;AAAA"}
@@ -0,0 +1,225 @@
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
+ let react = require("react");
5
+ let react_native = require("react-native");
6
+ let react_native_safe_area_context = require("react-native-safe-area-context");
7
+ //#region src/components/internal/Overlay/useAnchoredPosition.ts
8
+ const DEFAULT_COLLISION_PADDING = 12;
9
+ const DEFAULT_OFFSET = 9;
10
+ const DEFAULT_ARROW_WIDTH = 22;
11
+ const DEFAULT_ARROW_HEIGHT = 12;
12
+ const DEFAULT_ARROW_BASELINE_INSET = 1;
13
+ function clamp(value, min, max) {
14
+ if (max < min) return min;
15
+ return Math.min(Math.max(value, min), max);
16
+ }
17
+ function resolveLogicalSide(side) {
18
+ return {
19
+ top: "top",
20
+ bottom: "bottom",
21
+ start: react_native.I18nManager.isRTL ? "right" : "left",
22
+ end: react_native.I18nManager.isRTL ? "left" : "right"
23
+ }[side];
24
+ }
25
+ function getOppositeSide(side) {
26
+ switch (side) {
27
+ case "top": return "bottom";
28
+ case "bottom": return "top";
29
+ case "left": return "right";
30
+ case "right": return "left";
31
+ }
32
+ }
33
+ function formatPlacement(side, align) {
34
+ const logicalSide = {
35
+ top: "top",
36
+ bottom: "bottom",
37
+ left: react_native.I18nManager.isRTL ? "end" : "start",
38
+ right: react_native.I18nManager.isRTL ? "start" : "end"
39
+ }[side];
40
+ if (align === "center") return logicalSide;
41
+ if (side === "top" || side === "bottom") return `${logicalSide}-${align}`;
42
+ return `${logicalSide}-${align === "start" ? "top" : "bottom"}`;
43
+ }
44
+ function parsePlacement(placement, alignOverride) {
45
+ const [rawSide, rawAlign] = placement.split("-");
46
+ const side = resolveLogicalSide(rawSide);
47
+ if (alignOverride) return {
48
+ side,
49
+ align: alignOverride
50
+ };
51
+ if (!rawAlign) return {
52
+ side,
53
+ align: "center"
54
+ };
55
+ if (rawAlign === "top") return {
56
+ side,
57
+ align: "start"
58
+ };
59
+ if (rawAlign === "bottom") return {
60
+ side,
61
+ align: "end"
62
+ };
63
+ return {
64
+ side,
65
+ align: rawAlign
66
+ };
67
+ }
68
+ function getContentSize(triggerRect, contentSize, maxWidth, sameWidth, width) {
69
+ const resolvedWidth = sameWidth || width === "trigger" ? triggerRect.width : width === "full" ? maxWidth : typeof width === "number" ? width : contentSize.width || triggerRect.width;
70
+ return {
71
+ width: Math.min(resolvedWidth, maxWidth),
72
+ height: contentSize.height
73
+ };
74
+ }
75
+ function getCoordinate({ align, alignOffset, contentLength, triggerLength, triggerStart }) {
76
+ if (align === "start") return triggerStart + alignOffset;
77
+ if (align === "end") return triggerStart + triggerLength - contentLength + alignOffset;
78
+ return triggerStart + triggerLength / 2 - contentLength / 2 + alignOffset;
79
+ }
80
+ function getRawPosition({ align, alignOffset, contentHeight, contentWidth, offset, side, triggerRect }) {
81
+ if (side === "top" || side === "bottom") return {
82
+ left: getCoordinate({
83
+ align,
84
+ alignOffset,
85
+ contentLength: contentWidth,
86
+ triggerLength: triggerRect.width,
87
+ triggerStart: triggerRect.x
88
+ }),
89
+ top: side === "top" ? triggerRect.y - contentHeight - offset : triggerRect.y + triggerRect.height + offset
90
+ };
91
+ return {
92
+ left: side === "left" ? triggerRect.x - contentWidth - offset : triggerRect.x + triggerRect.width + offset,
93
+ top: getCoordinate({
94
+ align,
95
+ alignOffset,
96
+ contentLength: contentHeight,
97
+ triggerLength: triggerRect.height,
98
+ triggerStart: triggerRect.y
99
+ })
100
+ };
101
+ }
102
+ function shouldFlip({ contentHeight, contentWidth, maxBottom, maxRight, minLeft, minTop, side, triggerRect, windowHeight, windowWidth }) {
103
+ if (side === "top") return triggerRect.y - contentHeight < minTop && windowHeight - (triggerRect.y + triggerRect.height) > triggerRect.y;
104
+ if (side === "bottom") return triggerRect.y + triggerRect.height + contentHeight > maxBottom && triggerRect.y > windowHeight - (triggerRect.y + triggerRect.height);
105
+ if (side === "left") return triggerRect.x - contentWidth < minLeft && windowWidth - (triggerRect.x + triggerRect.width) > triggerRect.x;
106
+ return triggerRect.x + triggerRect.width + contentWidth > maxRight && triggerRect.x > windowWidth - (triggerRect.x + triggerRect.width);
107
+ }
108
+ function getArrowPosition({ arrowHeight, arrowWidth, contentHeight, contentLeft, contentTop, contentWidth, side, triggerRect }) {
109
+ const arrowBase = {
110
+ position: "absolute",
111
+ zIndex: 2
112
+ };
113
+ if (side === "top" || side === "bottom") {
114
+ const left = clamp(triggerRect.x + triggerRect.width / 2 - contentLeft - arrowWidth / 2, arrowHeight, contentWidth - arrowWidth - arrowHeight);
115
+ return {
116
+ ...arrowBase,
117
+ width: arrowWidth,
118
+ height: arrowHeight,
119
+ left,
120
+ ...side === "top" ? { bottom: -arrowHeight + DEFAULT_ARROW_BASELINE_INSET } : { top: -arrowHeight + DEFAULT_ARROW_BASELINE_INSET }
121
+ };
122
+ }
123
+ const top = clamp(triggerRect.y + triggerRect.height / 2 - contentTop - arrowWidth / 2, arrowHeight, contentHeight - arrowWidth - arrowHeight);
124
+ return {
125
+ ...arrowBase,
126
+ width: arrowHeight,
127
+ height: arrowWidth,
128
+ top,
129
+ ...side === "left" ? { right: -arrowHeight + DEFAULT_ARROW_BASELINE_INSET } : { left: -arrowHeight + DEFAULT_ARROW_BASELINE_INSET }
130
+ };
131
+ }
132
+ function useAnchoredPosition({ triggerRect, contentSize, placement = "bottom", align, offset = DEFAULT_OFFSET, alignOffset = 0, avoidCollisions = true, collisionPadding = DEFAULT_COLLISION_PADDING, width = "content", sameWidth = false, insets, arrowWidth, arrowHeight }) {
133
+ const windowDimensions = (0, react_native.useWindowDimensions)();
134
+ const safeAreaInsets = (0, react_native_safe_area_context.useSafeAreaInsets)();
135
+ const resolvedArrowWidth = arrowWidth ?? DEFAULT_ARROW_WIDTH;
136
+ const resolvedArrowHeight = arrowHeight ?? DEFAULT_ARROW_HEIGHT;
137
+ return (0, react.useMemo)(() => {
138
+ const fallbackPlacement = placement;
139
+ const maxWidth = windowDimensions.width - (insets?.left ?? safeAreaInsets.left) - (insets?.right ?? safeAreaInsets.right) - collisionPadding * 2;
140
+ if (!triggerRect) return {
141
+ resolvedPlacement: fallbackPlacement,
142
+ contentStyle: {
143
+ position: "absolute",
144
+ left: collisionPadding,
145
+ top: (insets?.top ?? safeAreaInsets.top) + collisionPadding,
146
+ maxWidth,
147
+ opacity: 0
148
+ },
149
+ arrowStyle: { opacity: 0 },
150
+ anchorReady: false,
151
+ maxWidth
152
+ };
153
+ const minLeft = (insets?.left ?? safeAreaInsets.left) + collisionPadding;
154
+ const minTop = (insets?.top ?? safeAreaInsets.top) + collisionPadding;
155
+ const maxRight = windowDimensions.width - (insets?.right ?? safeAreaInsets.right) - collisionPadding;
156
+ const maxBottom = windowDimensions.height - (insets?.bottom ?? safeAreaInsets.bottom) - collisionPadding;
157
+ const { width: contentWidth, height: contentHeight } = getContentSize(triggerRect, contentSize, maxWidth, sameWidth, width);
158
+ const placementParts = parsePlacement(placement, align);
159
+ let { side } = placementParts;
160
+ const resolvedAlign = placementParts.align;
161
+ if (avoidCollisions && shouldFlip({
162
+ contentHeight,
163
+ contentWidth,
164
+ maxBottom,
165
+ maxRight,
166
+ minLeft,
167
+ minTop,
168
+ side,
169
+ triggerRect,
170
+ windowHeight: windowDimensions.height,
171
+ windowWidth: windowDimensions.width
172
+ })) side = getOppositeSide(side);
173
+ const rawPosition = getRawPosition({
174
+ align: resolvedAlign,
175
+ alignOffset,
176
+ contentHeight,
177
+ contentWidth,
178
+ offset,
179
+ side,
180
+ triggerRect
181
+ });
182
+ const left = clamp(rawPosition.left, minLeft, maxRight - contentWidth);
183
+ const top = clamp(rawPosition.top, minTop, maxBottom - contentHeight);
184
+ return {
185
+ resolvedPlacement: formatPlacement(side, resolvedAlign),
186
+ contentStyle: {
187
+ position: "absolute",
188
+ left,
189
+ top,
190
+ width: sameWidth || width !== "content" ? contentWidth : void 0,
191
+ maxWidth
192
+ },
193
+ arrowStyle: getArrowPosition({
194
+ arrowHeight: resolvedArrowHeight,
195
+ arrowWidth: resolvedArrowWidth,
196
+ contentHeight,
197
+ contentLeft: left,
198
+ contentTop: top,
199
+ contentWidth,
200
+ side,
201
+ triggerRect
202
+ }),
203
+ anchorReady: true,
204
+ maxWidth
205
+ };
206
+ }, [
207
+ align,
208
+ alignOffset,
209
+ avoidCollisions,
210
+ collisionPadding,
211
+ contentSize,
212
+ insets,
213
+ offset,
214
+ placement,
215
+ resolvedArrowHeight,
216
+ resolvedArrowWidth,
217
+ safeAreaInsets,
218
+ sameWidth,
219
+ triggerRect,
220
+ width,
221
+ windowDimensions
222
+ ]);
223
+ }
224
+ //#endregion
225
+ exports.useAnchoredPosition = useAnchoredPosition;
@@ -0,0 +1,22 @@
1
+
2
+ import { UseAnchoredPositionProps, UseAnchoredPositionResult } from "./types.cjs";
3
+
4
+ //#region src/components/internal/Overlay/useAnchoredPosition.d.ts
5
+ declare function useAnchoredPosition({
6
+ triggerRect,
7
+ contentSize,
8
+ placement,
9
+ align,
10
+ offset,
11
+ alignOffset,
12
+ avoidCollisions,
13
+ collisionPadding,
14
+ width,
15
+ sameWidth,
16
+ insets,
17
+ arrowWidth,
18
+ arrowHeight
19
+ }: UseAnchoredPositionProps): UseAnchoredPositionResult;
20
+ //#endregion
21
+ export { useAnchoredPosition };
22
+ //# sourceMappingURL=useAnchoredPosition.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAnchoredPosition.d.cts","names":[],"sources":["../../../../src/components/internal/Overlay/useAnchoredPosition.ts"],"mappings":";;;;iBAsTS,mBAAA,CAAA;EACP,WAAA;EACA,WAAA;EACA,SAAA;EACA,KAAA;EACA,MAAA;EACA,WAAA;EACA,eAAA;EACA,gBAAA;EACA,KAAA;EACA,SAAA;EACA,MAAA;EACA,UAAA;EACA;AAAA,GACC,wBAAA,GAA2B,yBAAA"}
@@ -0,0 +1,22 @@
1
+
2
+ import { UseAnchoredPositionProps, UseAnchoredPositionResult } from "./types.js";
3
+
4
+ //#region src/components/internal/Overlay/useAnchoredPosition.d.ts
5
+ declare function useAnchoredPosition({
6
+ triggerRect,
7
+ contentSize,
8
+ placement,
9
+ align,
10
+ offset,
11
+ alignOffset,
12
+ avoidCollisions,
13
+ collisionPadding,
14
+ width,
15
+ sameWidth,
16
+ insets,
17
+ arrowWidth,
18
+ arrowHeight
19
+ }: UseAnchoredPositionProps): UseAnchoredPositionResult;
20
+ //#endregion
21
+ export { useAnchoredPosition };
22
+ //# sourceMappingURL=useAnchoredPosition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAnchoredPosition.d.ts","names":[],"sources":["../../../../src/components/internal/Overlay/useAnchoredPosition.ts"],"mappings":";;;;iBAsTS,mBAAA,CAAA;EACP,WAAA;EACA,WAAA;EACA,SAAA;EACA,KAAA;EACA,MAAA;EACA,WAAA;EACA,eAAA;EACA,gBAAA;EACA,KAAA;EACA,SAAA;EACA,MAAA;EACA,UAAA;EACA;AAAA,GACC,wBAAA,GAA2B,yBAAA"}