@yahoo/uds-mobile 2.18.0 → 2.20.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 (201) hide show
  1. package/dist/components/Modal/Modal.cjs +396 -0
  2. package/dist/components/Modal/Modal.d.cts +9 -0
  3. package/dist/components/Modal/Modal.d.cts.map +1 -0
  4. package/dist/components/Modal/Modal.d.ts +9 -0
  5. package/dist/components/Modal/Modal.d.ts.map +1 -0
  6. package/dist/components/Modal/Modal.js +395 -0
  7. package/dist/components/Modal/Modal.js.map +1 -0
  8. package/dist/components/Modal/ModalActions.cjs +47 -0
  9. package/dist/components/Modal/ModalActions.d.cts +9 -0
  10. package/dist/components/Modal/ModalActions.d.cts.map +1 -0
  11. package/dist/components/Modal/ModalActions.d.ts +9 -0
  12. package/dist/components/Modal/ModalActions.d.ts.map +1 -0
  13. package/dist/components/Modal/ModalActions.js +47 -0
  14. package/dist/components/Modal/ModalActions.js.map +1 -0
  15. package/dist/components/Modal/ModalContent.cjs +41 -0
  16. package/dist/components/Modal/ModalContent.d.cts +9 -0
  17. package/dist/components/Modal/ModalContent.d.cts.map +1 -0
  18. package/dist/components/Modal/ModalContent.d.ts +9 -0
  19. package/dist/components/Modal/ModalContent.d.ts.map +1 -0
  20. package/dist/components/Modal/ModalContent.js +41 -0
  21. package/dist/components/Modal/ModalContent.js.map +1 -0
  22. package/dist/components/Modal/ModalContext.cjs +14 -0
  23. package/dist/components/Modal/ModalContext.d.cts +10 -0
  24. package/dist/components/Modal/ModalContext.d.cts.map +1 -0
  25. package/dist/components/Modal/ModalContext.d.ts +10 -0
  26. package/dist/components/Modal/ModalContext.d.ts.map +1 -0
  27. package/dist/components/Modal/ModalContext.js +13 -0
  28. package/dist/components/Modal/ModalContext.js.map +1 -0
  29. package/dist/components/Modal/ModalDescription.cjs +21 -0
  30. package/dist/components/Modal/ModalDescription.d.cts +9 -0
  31. package/dist/components/Modal/ModalDescription.d.cts.map +1 -0
  32. package/dist/components/Modal/ModalDescription.d.ts +9 -0
  33. package/dist/components/Modal/ModalDescription.d.ts.map +1 -0
  34. package/dist/components/Modal/ModalDescription.js +21 -0
  35. package/dist/components/Modal/ModalDescription.js.map +1 -0
  36. package/dist/components/Modal/ModalTitle.cjs +22 -0
  37. package/dist/components/Modal/ModalTitle.d.cts +9 -0
  38. package/dist/components/Modal/ModalTitle.d.cts.map +1 -0
  39. package/dist/components/Modal/ModalTitle.d.ts +9 -0
  40. package/dist/components/Modal/ModalTitle.d.ts.map +1 -0
  41. package/dist/components/Modal/ModalTitle.js +22 -0
  42. package/dist/components/Modal/ModalTitle.js.map +1 -0
  43. package/dist/components/Modal/index.cjs +12 -0
  44. package/dist/components/Modal/index.d.cts +8 -0
  45. package/dist/components/Modal/index.d.ts +8 -0
  46. package/dist/components/Modal/index.js +7 -0
  47. package/dist/components/Modal/types.cjs +1 -0
  48. package/dist/components/Modal/types.d.cts +111 -0
  49. package/dist/components/Modal/types.d.cts.map +1 -0
  50. package/dist/components/Modal/types.d.ts +111 -0
  51. package/dist/components/Modal/types.d.ts.map +1 -0
  52. package/dist/components/Modal/types.js +1 -0
  53. package/dist/components/Modal/utils.cjs +59 -0
  54. package/dist/components/Modal/utils.d.cts +28 -0
  55. package/dist/components/Modal/utils.d.cts.map +1 -0
  56. package/dist/components/Modal/utils.d.ts +28 -0
  57. package/dist/components/Modal/utils.d.ts.map +1 -0
  58. package/dist/components/Modal/utils.js +56 -0
  59. package/dist/components/Modal/utils.js.map +1 -0
  60. package/dist/components/Pagination/Pagination.cjs +75 -0
  61. package/dist/components/Pagination/Pagination.d.cts +40 -0
  62. package/dist/components/Pagination/Pagination.d.cts.map +1 -0
  63. package/dist/components/Pagination/Pagination.d.ts +40 -0
  64. package/dist/components/Pagination/Pagination.d.ts.map +1 -0
  65. package/dist/components/Pagination/Pagination.js +75 -0
  66. package/dist/components/Pagination/Pagination.js.map +1 -0
  67. package/dist/components/Pagination/PaginationEllipsis.cjs +64 -0
  68. package/dist/components/Pagination/PaginationEllipsis.d.cts +21 -0
  69. package/dist/components/Pagination/PaginationEllipsis.d.cts.map +1 -0
  70. package/dist/components/Pagination/PaginationEllipsis.d.ts +21 -0
  71. package/dist/components/Pagination/PaginationEllipsis.d.ts.map +1 -0
  72. package/dist/components/Pagination/PaginationEllipsis.js +64 -0
  73. package/dist/components/Pagination/PaginationEllipsis.js.map +1 -0
  74. package/dist/components/Pagination/PaginationItem.cjs +68 -0
  75. package/dist/components/Pagination/PaginationItem.d.cts +24 -0
  76. package/dist/components/Pagination/PaginationItem.d.cts.map +1 -0
  77. package/dist/components/Pagination/PaginationItem.d.ts +24 -0
  78. package/dist/components/Pagination/PaginationItem.d.ts.map +1 -0
  79. package/dist/components/Pagination/PaginationItem.js +68 -0
  80. package/dist/components/Pagination/PaginationItem.js.map +1 -0
  81. package/dist/components/Pagination/PaginationLink.cjs +68 -0
  82. package/dist/components/Pagination/PaginationLink.d.cts +25 -0
  83. package/dist/components/Pagination/PaginationLink.d.cts.map +1 -0
  84. package/dist/components/Pagination/PaginationLink.d.ts +25 -0
  85. package/dist/components/Pagination/PaginationLink.d.ts.map +1 -0
  86. package/dist/components/Pagination/PaginationLink.js +68 -0
  87. package/dist/components/Pagination/PaginationLink.js.map +1 -0
  88. package/dist/components/Pagination/PaginationNext.cjs +72 -0
  89. package/dist/components/Pagination/PaginationNext.d.cts +24 -0
  90. package/dist/components/Pagination/PaginationNext.d.cts.map +1 -0
  91. package/dist/components/Pagination/PaginationNext.d.ts +24 -0
  92. package/dist/components/Pagination/PaginationNext.d.ts.map +1 -0
  93. package/dist/components/Pagination/PaginationNext.js +72 -0
  94. package/dist/components/Pagination/PaginationNext.js.map +1 -0
  95. package/dist/components/Pagination/PaginationNumbers.cjs +50 -0
  96. package/dist/components/Pagination/PaginationNumbers.d.cts +23 -0
  97. package/dist/components/Pagination/PaginationNumbers.d.cts.map +1 -0
  98. package/dist/components/Pagination/PaginationNumbers.d.ts +23 -0
  99. package/dist/components/Pagination/PaginationNumbers.d.ts.map +1 -0
  100. package/dist/components/Pagination/PaginationNumbers.js +50 -0
  101. package/dist/components/Pagination/PaginationNumbers.js.map +1 -0
  102. package/dist/components/Pagination/PaginationPrev.cjs +72 -0
  103. package/dist/components/Pagination/PaginationPrev.d.cts +24 -0
  104. package/dist/components/Pagination/PaginationPrev.d.cts.map +1 -0
  105. package/dist/components/Pagination/PaginationPrev.d.ts +24 -0
  106. package/dist/components/Pagination/PaginationPrev.d.ts.map +1 -0
  107. package/dist/components/Pagination/PaginationPrev.js +72 -0
  108. package/dist/components/Pagination/PaginationPrev.js.map +1 -0
  109. package/dist/components/Pagination/computeVisiblePages.cjs +21 -0
  110. package/dist/components/Pagination/computeVisiblePages.d.cts +19 -0
  111. package/dist/components/Pagination/computeVisiblePages.d.cts.map +1 -0
  112. package/dist/components/Pagination/computeVisiblePages.d.ts +19 -0
  113. package/dist/components/Pagination/computeVisiblePages.d.ts.map +1 -0
  114. package/dist/components/Pagination/computeVisiblePages.js +22 -0
  115. package/dist/components/Pagination/computeVisiblePages.js.map +1 -0
  116. package/dist/components/Pagination/ellipsisDefault.cjs +28 -0
  117. package/dist/components/Pagination/ellipsisDefault.d.cts +11 -0
  118. package/dist/components/Pagination/ellipsisDefault.d.cts.map +1 -0
  119. package/dist/components/Pagination/ellipsisDefault.d.ts +11 -0
  120. package/dist/components/Pagination/ellipsisDefault.d.ts.map +1 -0
  121. package/dist/components/Pagination/ellipsisDefault.js +29 -0
  122. package/dist/components/Pagination/ellipsisDefault.js.map +1 -0
  123. package/dist/components/Pagination/ellipsisNone.cjs +24 -0
  124. package/dist/components/Pagination/ellipsisNone.d.cts +11 -0
  125. package/dist/components/Pagination/ellipsisNone.d.cts.map +1 -0
  126. package/dist/components/Pagination/ellipsisNone.d.ts +11 -0
  127. package/dist/components/Pagination/ellipsisNone.d.ts.map +1 -0
  128. package/dist/components/Pagination/ellipsisNone.js +25 -0
  129. package/dist/components/Pagination/ellipsisNone.js.map +1 -0
  130. package/dist/components/Pagination/index.cjs +18 -0
  131. package/dist/components/Pagination/index.d.cts +10 -0
  132. package/dist/components/Pagination/index.d.ts +10 -0
  133. package/dist/components/Pagination/index.js +10 -0
  134. package/dist/components/Pagination/paginationContext.cjs +42 -0
  135. package/dist/components/Pagination/paginationContext.d.cts +34 -0
  136. package/dist/components/Pagination/paginationContext.d.cts.map +1 -0
  137. package/dist/components/Pagination/paginationContext.d.ts +34 -0
  138. package/dist/components/Pagination/paginationContext.d.ts.map +1 -0
  139. package/dist/components/Pagination/paginationContext.js +38 -0
  140. package/dist/components/Pagination/paginationContext.js.map +1 -0
  141. package/dist/components/Pagination/paginationDefaultComponents.cjs +68 -0
  142. package/dist/components/Pagination/paginationDefaultComponents.d.cts +17 -0
  143. package/dist/components/Pagination/paginationDefaultComponents.d.cts.map +1 -0
  144. package/dist/components/Pagination/paginationDefaultComponents.d.ts +17 -0
  145. package/dist/components/Pagination/paginationDefaultComponents.d.ts.map +1 -0
  146. package/dist/components/Pagination/paginationDefaultComponents.js +69 -0
  147. package/dist/components/Pagination/paginationDefaultComponents.js.map +1 -0
  148. package/dist/components/Pagination/paginationTheme.cjs +67 -0
  149. package/dist/components/Pagination/paginationTheme.d.cts +28 -0
  150. package/dist/components/Pagination/paginationTheme.d.cts.map +1 -0
  151. package/dist/components/Pagination/paginationTheme.d.ts +28 -0
  152. package/dist/components/Pagination/paginationTheme.d.ts.map +1 -0
  153. package/dist/components/Pagination/paginationTheme.js +62 -0
  154. package/dist/components/Pagination/paginationTheme.js.map +1 -0
  155. package/dist/components/Pagination/range.cjs +10 -0
  156. package/dist/components/Pagination/range.d.cts +6 -0
  157. package/dist/components/Pagination/range.d.cts.map +1 -0
  158. package/dist/components/Pagination/range.d.ts +6 -0
  159. package/dist/components/Pagination/range.d.ts.map +1 -0
  160. package/dist/components/Pagination/range.js +11 -0
  161. package/dist/components/Pagination/range.js.map +1 -0
  162. package/dist/components/Pagination/usePaginationControlStyles.cjs +78 -0
  163. package/dist/components/Pagination/usePaginationControlStyles.d.cts +26 -0
  164. package/dist/components/Pagination/usePaginationControlStyles.d.cts.map +1 -0
  165. package/dist/components/Pagination/usePaginationControlStyles.d.ts +26 -0
  166. package/dist/components/Pagination/usePaginationControlStyles.d.ts.map +1 -0
  167. package/dist/components/Pagination/usePaginationControlStyles.js +78 -0
  168. package/dist/components/Pagination/usePaginationControlStyles.js.map +1 -0
  169. package/dist/jest/bun-test-guard.cjs +8 -0
  170. package/dist/jest/bun-test-guard.d.cts +2 -0
  171. package/dist/jest/bun-test-guard.d.ts +2 -0
  172. package/dist/jest/bun-test-guard.js +10 -0
  173. package/dist/jest/bun-test-guard.js.map +1 -0
  174. package/dist/jest/mocks/gesture-handler.cjs +29 -0
  175. package/dist/jest/mocks/gesture-handler.d.cts +27 -2
  176. package/dist/jest/mocks/gesture-handler.d.cts.map +1 -1
  177. package/dist/jest/mocks/gesture-handler.d.ts +27 -2
  178. package/dist/jest/mocks/gesture-handler.d.ts.map +1 -1
  179. package/dist/jest/mocks/gesture-handler.js +22 -1
  180. package/dist/jest/mocks/gesture-handler.js.map +1 -1
  181. package/dist/jest/mocks/styles.cjs +62 -0
  182. package/dist/jest/mocks/styles.d.cts +4 -2
  183. package/dist/jest/mocks/styles.d.cts.map +1 -1
  184. package/dist/jest/mocks/styles.d.ts +4 -2
  185. package/dist/jest/mocks/styles.d.ts.map +1 -1
  186. package/dist/jest/mocks/styles.js +61 -1
  187. package/dist/jest/mocks/styles.js.map +1 -1
  188. package/dist/jest/setup.cjs +8 -28
  189. package/dist/jest/setup.d.cts.map +1 -1
  190. package/dist/jest/setup.d.ts.map +1 -1
  191. package/dist/jest/setup.js +8 -28
  192. package/dist/jest/setup.js.map +1 -1
  193. package/dist/types/dist/index.d.cts +83 -1
  194. package/dist/types/dist/index.d.cts.map +1 -1
  195. package/dist/types/dist/index.d.ts +83 -1
  196. package/dist/types/dist/index.d.ts.map +1 -1
  197. package/generated/styles.cjs +75 -0
  198. package/generated/styles.d.ts +29 -0
  199. package/generated/styles.mjs +75 -0
  200. package/generated/unistyles.d.ts +69 -0
  201. package/package.json +21 -1
@@ -0,0 +1,396 @@
1
+ /*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
4
+ const require_components_AndroidBackHandler = require("../AndroidBackHandler.cjs");
5
+ const require_components_Box = require("../Box.cjs");
6
+ const require_components_IconSlot = require("../IconSlot.cjs");
7
+ const require_components_Text = require("../Text.cjs");
8
+ const require_components_Pressable = require("../Pressable.cjs");
9
+ const require_components_Scrim = require("../Scrim.cjs");
10
+ const require_components_internal_Overlay_OverlayPortal = require("../internal/Overlay/OverlayPortal.cjs");
11
+ const require_components_Modal_ModalContext = require("./ModalContext.cjs");
12
+ const require_components_Modal_ModalActions = require("./ModalActions.cjs");
13
+ const require_components_Modal_ModalContent = require("./ModalContent.cjs");
14
+ const require_components_Modal_ModalDescription = require("./ModalDescription.cjs");
15
+ const require_components_Modal_ModalTitle = require("./ModalTitle.cjs");
16
+ const require_components_Modal_utils = require("./utils.cjs");
17
+ let react = require("react");
18
+ let react_native = require("react-native");
19
+ let react_jsx_runtime = require("react/jsx-runtime");
20
+ let generated_styles = require("../../../generated/styles");
21
+ let react_native_reanimated = require("react-native-reanimated");
22
+ react_native_reanimated = require_runtime.__toESM(react_native_reanimated);
23
+ let react_native_gesture_handler = require("react-native-gesture-handler");
24
+ let react_native_safe_area_context = require("react-native-safe-area-context");
25
+ //#region src/components/Modal/Modal.tsx
26
+ const ANIMATION_DURATION_IN = 400;
27
+ const ANIMATION_DURATION_OUT = 250;
28
+ const ANIMATION_EASING_IN = react_native_reanimated.Easing.bezier(.3, .4, .2, 1);
29
+ const ANIMATION_EASING_OUT = react_native_reanimated.Easing.bezier(.6, 0, .7, .6);
30
+ const HIDDEN_SCALE = .95;
31
+ const HIDDEN_PROGRESS = 1;
32
+ const VISIBLE_PROGRESS = 0;
33
+ const SCROLL_DISMISS_SUPPRESSION_MS = 150;
34
+ const SCROLL_OFFSET_THRESHOLD = 1;
35
+ function usePrefersReducedMotion() {
36
+ const [prefersReducedMotion, setPrefersReducedMotion] = (0, react.useState)(false);
37
+ (0, react.useEffect)(() => {
38
+ let isMounted = true;
39
+ react_native.AccessibilityInfo.isReduceMotionEnabled().then((isReduceMotionEnabled) => {
40
+ if (isMounted) setPrefersReducedMotion(isReduceMotionEnabled);
41
+ });
42
+ const subscription = react_native.AccessibilityInfo.addEventListener("reduceMotionChanged", (isReduceMotionEnabled) => {
43
+ setPrefersReducedMotion(isReduceMotionEnabled);
44
+ });
45
+ return () => {
46
+ isMounted = false;
47
+ subscription.remove();
48
+ };
49
+ }, []);
50
+ return prefersReducedMotion;
51
+ }
52
+ const Modal = (0, react.memo)(function Modal({ children, open, onClose, onOpen, portal = true, includeScrim, dismissible = true, hideDismissButton = false, reduceMotion = false, closeIcon = "Cross", closeAriaLabel = "Close", closeAccessibilityLabel, maxWidth = "auto", maxHeight = "auto", fullWidth = false, fullHeight = false, title: titleProp, description: descriptionProp, content: contentProp, actions: actionsProp, scrollBehavior = "outside", useFullWindowOverlay = true, blurTarget, style, ref, onLayout, ...viewProps }) {
53
+ generated_styles.modalStyles.useVariants({});
54
+ const surfaceRef = (0, react.useRef)(null);
55
+ const prevOpen = (0, react.useRef)(open);
56
+ const progress = (0, react_native_reanimated.useSharedValue)(HIDDEN_PROGRESS);
57
+ const closePressProgress = (0, react_native_reanimated.useSharedValue)(0);
58
+ const presenceState = (0, react.useRef)(open ? "open" : "closed");
59
+ const didModalScrollDuringGesture = (0, react.useRef)(false);
60
+ const isModalScrollInteracting = (0, react.useRef)(false);
61
+ const modalScrollDismissTimeout = (0, react.useRef)(null);
62
+ const modalScrollStartOffset = (0, react.useRef)(null);
63
+ const [, forcePresenceRender] = (0, react.useState)(0);
64
+ const prefersReducedMotion = usePrefersReducedMotion();
65
+ const reducedMotion = reduceMotion || prefersReducedMotion;
66
+ const safeAreaInsets = (0, react_native_safe_area_context.useSafeAreaInsets)();
67
+ if (open) presenceState.current = "open";
68
+ else if (presenceState.current === "open") presenceState.current = "closing";
69
+ const isRendered = open || presenceState.current === "closing";
70
+ const { title: modalTitle, description: modalDescription, content: modalContent, actions: modalActions } = require_components_Modal_utils.separateChildren(children);
71
+ const hasTitleOrDescription = !!(modalTitle || titleProp || modalDescription || descriptionProp);
72
+ const shouldRenderHeader = !hideDismissButton || hasTitleOrDescription;
73
+ const hasContent = !!(modalContent || contentProp);
74
+ const shouldRenderScrim = includeScrim ?? true;
75
+ const closeLabel = closeAccessibilityLabel ?? closeAriaLabel;
76
+ const durationIn = reducedMotion ? 0 : ANIMATION_DURATION_IN;
77
+ const durationOut = reducedMotion ? 0 : ANIMATION_DURATION_OUT;
78
+ (0, react.useEffect)(() => {
79
+ if (open && !prevOpen.current) onOpen?.();
80
+ prevOpen.current = open;
81
+ }, [open, onOpen]);
82
+ (0, react.useEffect)(() => {
83
+ if (open) {
84
+ progress.value = HIDDEN_PROGRESS;
85
+ return;
86
+ }
87
+ if (!isRendered) return;
88
+ progress.value = (0, react_native_reanimated.withTiming)(HIDDEN_PROGRESS, {
89
+ duration: durationOut,
90
+ easing: ANIMATION_EASING_OUT
91
+ });
92
+ const timeout = setTimeout(() => {
93
+ if (presenceState.current === "closing") {
94
+ presenceState.current = "closed";
95
+ forcePresenceRender((revision) => revision + 1);
96
+ }
97
+ }, durationOut);
98
+ return () => clearTimeout(timeout);
99
+ }, [
100
+ durationOut,
101
+ isRendered,
102
+ open,
103
+ progress
104
+ ]);
105
+ (0, react.useEffect)(() => {
106
+ if (!open || !isRendered) return;
107
+ if (durationIn === 0) {
108
+ progress.value = VISIBLE_PROGRESS;
109
+ return;
110
+ }
111
+ const animationFrame = requestAnimationFrame(() => {
112
+ progress.value = (0, react_native_reanimated.withTiming)(VISIBLE_PROGRESS, {
113
+ duration: durationIn,
114
+ easing: ANIMATION_EASING_IN
115
+ });
116
+ });
117
+ return () => cancelAnimationFrame(animationFrame);
118
+ }, [
119
+ durationIn,
120
+ isRendered,
121
+ open,
122
+ progress
123
+ ]);
124
+ const handleDismiss = (0, react.useCallback)(() => {
125
+ onClose?.();
126
+ }, [onClose]);
127
+ const clearModalScrollDismissTimeout = (0, react.useCallback)(() => {
128
+ if (modalScrollDismissTimeout.current) {
129
+ clearTimeout(modalScrollDismissTimeout.current);
130
+ modalScrollDismissTimeout.current = null;
131
+ }
132
+ }, []);
133
+ const handleModalScrollInteractionBegin = (0, react.useCallback)((event) => {
134
+ clearModalScrollDismissTimeout();
135
+ isModalScrollInteracting.current = true;
136
+ didModalScrollDuringGesture.current = false;
137
+ modalScrollStartOffset.current = event.nativeEvent.contentOffset;
138
+ }, [clearModalScrollDismissTimeout]);
139
+ const handleModalScroll = (0, react.useCallback)((event) => {
140
+ if (!isModalScrollInteracting.current || didModalScrollDuringGesture.current) return;
141
+ const startOffset = modalScrollStartOffset.current;
142
+ const currentOffset = event.nativeEvent.contentOffset;
143
+ if (!startOffset) return;
144
+ const movedX = Math.abs(currentOffset.x - startOffset.x);
145
+ const movedY = Math.abs(currentOffset.y - startOffset.y);
146
+ if (movedX > SCROLL_OFFSET_THRESHOLD || movedY > SCROLL_OFFSET_THRESHOLD) didModalScrollDuringGesture.current = true;
147
+ }, []);
148
+ const handleModalScrollInteractionEnd = (0, react.useCallback)(() => {
149
+ clearModalScrollDismissTimeout();
150
+ modalScrollDismissTimeout.current = setTimeout(() => {
151
+ isModalScrollInteracting.current = false;
152
+ didModalScrollDuringGesture.current = false;
153
+ modalScrollDismissTimeout.current = null;
154
+ modalScrollStartOffset.current = null;
155
+ }, SCROLL_DISMISS_SUPPRESSION_MS);
156
+ }, [clearModalScrollDismissTimeout]);
157
+ (0, react.useEffect)(() => clearModalScrollDismissTimeout, [clearModalScrollDismissTimeout]);
158
+ const handleScrimRelease = (0, react.useCallback)((absoluteX, absoluteY) => {
159
+ if (!dismissible) return;
160
+ if (!surfaceRef.current?.measureInWindow) return;
161
+ surfaceRef.current.measureInWindow((x, y, width, height) => {
162
+ if (require_components_Modal_utils.shouldDismissModalRelease({
163
+ x: absoluteX,
164
+ y: absoluteY
165
+ }, {
166
+ x,
167
+ y,
168
+ width,
169
+ height
170
+ })) onClose?.();
171
+ });
172
+ }, [dismissible, onClose]);
173
+ const handleOverlayTouchEndCapture = (0, react.useCallback)((event) => {
174
+ if (isModalScrollInteracting.current && didModalScrollDuringGesture.current) return;
175
+ const pagePoint = require_components_Modal_utils.getEventPagePoint(event);
176
+ if (!pagePoint) return;
177
+ handleScrimRelease(pagePoint.x, pagePoint.y);
178
+ }, [handleScrimRelease]);
179
+ const setSurfaceRef = (0, react.useCallback)((node) => {
180
+ surfaceRef.current = node;
181
+ if (typeof ref === "function") ref(node);
182
+ else if (ref) ref.current = node;
183
+ }, [ref]);
184
+ const handleClosePressIn = (0, react.useCallback)(() => {
185
+ closePressProgress.value = (0, react_native_reanimated.withTiming)(1, { duration: reducedMotion ? 0 : 120 });
186
+ }, [closePressProgress, reducedMotion]);
187
+ const handleClosePressOut = (0, react.useCallback)(() => {
188
+ closePressProgress.value = (0, react_native_reanimated.withTiming)(0, { duration: reducedMotion ? 0 : 120 });
189
+ }, [closePressProgress, reducedMotion]);
190
+ const animatedSurfaceStyle = (0, react_native_reanimated.useAnimatedStyle)(() => ({
191
+ opacity: (0, react_native_reanimated.interpolate)(progress.value, [VISIBLE_PROGRESS, HIDDEN_PROGRESS], [1, 0], "clamp"),
192
+ transform: [{ scale: (0, react_native_reanimated.interpolate)(progress.value, [VISIBLE_PROGRESS, HIDDEN_PROGRESS], [1, HIDDEN_SCALE], "clamp") }]
193
+ }));
194
+ const animatedCloseIconContainerStyle = (0, react_native_reanimated.useAnimatedStyle)(() => ({ backgroundColor: `rgba(29, 34, 40, ${(0, react_native_reanimated.interpolate)(closePressProgress.value, [0, 1], [0, .15], "clamp").toFixed(3)})` }));
195
+ const modalContextValue = (0, react.useMemo)(() => ({
196
+ scrollBehavior,
197
+ hasContent,
198
+ onScroll: handleModalScroll,
199
+ onScrollInteractionBegin: handleModalScrollInteractionBegin,
200
+ onScrollInteractionEnd: handleModalScrollInteractionEnd,
201
+ shouldRenderHeader
202
+ }), [
203
+ handleModalScroll,
204
+ handleModalScrollInteractionBegin,
205
+ handleModalScrollInteractionEnd,
206
+ hasContent,
207
+ scrollBehavior,
208
+ shouldRenderHeader
209
+ ]);
210
+ if (!isRendered) return null;
211
+ const rootTokens = react_native.StyleSheet.flatten(generated_styles.modalStyles.root);
212
+ const gutter = react_native.StyleSheet.flatten(generated_styles.modalStyles.scrim).padding ?? 0;
213
+ const blurIntensity = rootTokens.backgroundBlurRadius ?? 0;
214
+ const showBlurBox = blurIntensity > 0 && (react_native.Platform.OS === "ios" || blurTarget != null);
215
+ const rootBackgroundColor = showBlurBox ? "transparent" : blurIntensity > 0 ? rootTokens.backgroundBlurColor ?? rootTokens.backgroundColor : rootTokens.backgroundColor;
216
+ const rootBorderRadius = rootTokens.borderRadius ?? 0;
217
+ const rootMaxHeight = scrollBehavior === "inside" ? require_components_Modal_utils.resolveModalDimension(maxHeight) : void 0;
218
+ const shouldFillHeight = fullHeight && scrollBehavior === "inside" && rootMaxHeight !== void 0;
219
+ const headerSpacingBottom = hasContent ? generated_styles.modalStyles.root.paddingVertical ?? 0 : 0;
220
+ const closeIconContainerSize = (generated_styles.modalStyles.closeIcon.fontSize ?? 0) + (generated_styles.modalStyles.closeIconContainer.padding ?? 0) * 2;
221
+ const closeIconOffset = closeIconContainerSize / 2;
222
+ const closeIconTop = generated_styles.modalStyles.root.paddingVertical ?? 0;
223
+ const closeIconRight = generated_styles.modalStyles.spacingHorizontal.paddingHorizontal ?? 0;
224
+ const surface = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_native_reanimated.default.View, {
225
+ ref: setSurfaceRef,
226
+ accessibilityViewIsModal: true,
227
+ importantForAccessibility: "yes",
228
+ ...viewProps,
229
+ onLayout,
230
+ style: [
231
+ generated_styles.modalStyles.root,
232
+ internalStyles.surface,
233
+ {
234
+ backgroundColor: rootBackgroundColor,
235
+ maxHeight: rootMaxHeight,
236
+ maxWidth: require_components_Modal_utils.resolveModalDimension(maxWidth),
237
+ height: shouldFillHeight ? rootMaxHeight : void 0,
238
+ width: fullWidth ? "100%" : void 0,
239
+ borderRadius: rootBorderRadius,
240
+ overflow: showBlurBox ? "hidden" : void 0
241
+ },
242
+ animatedSurfaceStyle,
243
+ style
244
+ ],
245
+ children: [showBlurBox && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Box.Box, {
246
+ style: react_native.StyleSheet.absoluteFill,
247
+ blur: blurIntensity,
248
+ blurTarget
249
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
250
+ pointerEvents: "none",
251
+ style: [react_native.StyleSheet.absoluteFill, {
252
+ backgroundColor: rootTokens.backgroundBlurColor,
253
+ borderRadius: rootBorderRadius
254
+ }]
255
+ })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_components_Modal_ModalContext.ModalContext.Provider, {
256
+ value: modalContextValue,
257
+ children: [
258
+ !hideDismissButton && closeIcon !== false && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Pressable.AnimatedPressable, {
259
+ accessibilityLabel: closeLabel,
260
+ accessibilityRole: "button",
261
+ hitSlop: 12,
262
+ onPress: onClose,
263
+ onPressIn: handleClosePressIn,
264
+ onPressOut: handleClosePressOut,
265
+ style: [
266
+ generated_styles.modalStyles.closeIconContainer,
267
+ internalStyles.closeIconContainer,
268
+ {
269
+ borderRadius: closeIconContainerSize,
270
+ right: closeIconRight,
271
+ top: closeIconTop,
272
+ transform: [{ translateX: closeIconOffset }, { translateY: -closeIconOffset }]
273
+ },
274
+ animatedCloseIconContainerStyle
275
+ ],
276
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_IconSlot.IconSlot, {
277
+ icon: closeIcon,
278
+ variant: "outline",
279
+ size: generated_styles.modalStyles.closeIcon.iconSizeToken ?? "md",
280
+ style: generated_styles.modalStyles.closeIcon,
281
+ accessibilityElementsHidden: true,
282
+ importantForAccessibility: "no"
283
+ })
284
+ }),
285
+ shouldRenderHeader && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
286
+ style: [
287
+ generated_styles.modalStyles.spacingHorizontal,
288
+ internalStyles.header,
289
+ { marginBottom: headerSpacingBottom }
290
+ ],
291
+ children: hasTitleOrDescription && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_native.View, {
292
+ style: [internalStyles.titleDescriptionWrapper, { gap: generated_styles.modalStyles.titleDescriptionWrapper.gap }],
293
+ children: [modalTitle || (titleProp ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Modal_ModalTitle.ModalTitle, { children: titleProp }) : null), modalDescription || (descriptionProp ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Modal_ModalDescription.ModalDescription, { children: descriptionProp }) : null)]
294
+ })
295
+ }),
296
+ modalContent || (contentProp ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Modal_ModalContent.ModalContent, { children: typeof contentProp === "string" || typeof contentProp === "number" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Text.Text, {
297
+ color: "secondary",
298
+ variant: "ui1",
299
+ children: contentProp
300
+ }) : contentProp }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: internalStyles.grow })),
301
+ modalActions || (actionsProp ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Modal_ModalActions.ModalActions, { children: actionsProp }) : null)
302
+ ]
303
+ })]
304
+ });
305
+ const positionerInsetStyle = {
306
+ paddingTop: safeAreaInsets.top + gutter,
307
+ paddingRight: safeAreaInsets.right + gutter,
308
+ paddingBottom: safeAreaInsets.bottom + gutter,
309
+ paddingLeft: safeAreaInsets.left + gutter
310
+ };
311
+ const positionerStyle = [
312
+ internalStyles.positioner,
313
+ shouldFillHeight && internalStyles.fullHeightPositioner,
314
+ positionerInsetStyle
315
+ ];
316
+ const outsidePositionerStyle = [internalStyles.outsidePositioner, positionerInsetStyle];
317
+ const positionedSurface = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
318
+ style: positionerStyle,
319
+ testID: "uds-modal-positioner",
320
+ children: surface
321
+ });
322
+ const overlay = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native_gesture_handler.GestureHandlerRootView, {
323
+ style: react_native.StyleSheet.absoluteFill,
324
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_native.View, {
325
+ onTouchEndCapture: dismissible ? handleOverlayTouchEndCapture : void 0,
326
+ pointerEvents: "auto",
327
+ style: react_native.StyleSheet.absoluteFill,
328
+ testID: "uds-modal-overlay",
329
+ children: [
330
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_AndroidBackHandler.AndroidBackHandler, {
331
+ isOpen: open,
332
+ dismissible,
333
+ onDismiss: handleDismiss
334
+ }),
335
+ shouldRenderScrim && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Scrim.Scrim, {
336
+ translateY: progress,
337
+ openTranslateY: VISIBLE_PROGRESS,
338
+ closedTranslateY: HIDDEN_PROGRESS,
339
+ dismissible: false,
340
+ onDismiss: handleDismiss,
341
+ blurTarget
342
+ }),
343
+ scrollBehavior === "outside" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.ScrollView, {
344
+ alwaysBounceVertical: false,
345
+ bounces: false,
346
+ keyboardShouldPersistTaps: "handled",
347
+ onMomentumScrollEnd: handleModalScrollInteractionEnd,
348
+ onScroll: handleModalScroll,
349
+ onScrollBeginDrag: handleModalScrollInteractionBegin,
350
+ onScrollEndDrag: handleModalScrollInteractionEnd,
351
+ overScrollMode: "never",
352
+ scrollEventThrottle: 16,
353
+ contentContainerStyle: outsidePositionerStyle,
354
+ style: react_native.StyleSheet.absoluteFill,
355
+ children: surface
356
+ }) : positionedSurface
357
+ ]
358
+ })
359
+ });
360
+ if (!portal) return overlay;
361
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_internal_Overlay_OverlayPortal.OverlayPortal, {
362
+ useFullWindowOverlay,
363
+ children: overlay
364
+ });
365
+ });
366
+ Modal.displayName = "Modal";
367
+ const internalStyles = react_native.StyleSheet.create({
368
+ positioner: {
369
+ alignItems: "center",
370
+ flexGrow: 1,
371
+ justifyContent: "center"
372
+ },
373
+ fullHeightPositioner: { flex: 1 },
374
+ outsidePositioner: {
375
+ alignItems: "center",
376
+ justifyContent: "center",
377
+ minHeight: "100%",
378
+ position: "relative"
379
+ },
380
+ surface: {
381
+ alignSelf: "center",
382
+ position: "relative",
383
+ zIndex: 1
384
+ },
385
+ closeIconContainer: {
386
+ alignItems: "center",
387
+ justifyContent: "center",
388
+ position: "absolute",
389
+ zIndex: 1
390
+ },
391
+ header: { alignItems: "stretch" },
392
+ titleDescriptionWrapper: { minWidth: 0 },
393
+ grow: { flexGrow: 1 }
394
+ });
395
+ //#endregion
396
+ exports.Modal = Modal;
@@ -0,0 +1,9 @@
1
+
2
+ import { ModalProps } from "./types.cjs";
3
+ import * as _$react from "react";
4
+
5
+ //#region src/components/Modal/Modal.d.ts
6
+ declare const Modal: _$react.NamedExoticComponent<ModalProps>;
7
+ //#endregion
8
+ export { Modal };
9
+ //# sourceMappingURL=Modal.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Modal.d.cts","names":[],"sources":["../../../src/components/Modal/Modal.tsx"],"mappings":";;;;;cA2EM,KAAA,EAAK,OAAA,CAAA,oBAAA,CAAA,UAAA"}
@@ -0,0 +1,9 @@
1
+
2
+ import { ModalProps } from "./types.js";
3
+ import * as _$react from "react";
4
+
5
+ //#region src/components/Modal/Modal.d.ts
6
+ declare const Modal: _$react.NamedExoticComponent<ModalProps>;
7
+ //#endregion
8
+ export { Modal };
9
+ //# sourceMappingURL=Modal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Modal.d.ts","names":[],"sources":["../../../src/components/Modal/Modal.tsx"],"mappings":";;;;;cA2EM,KAAA,EAAK,OAAA,CAAA,oBAAA,CAAA,UAAA"}