@cdx-ui/primitives 0.0.1-beta.159 → 0.0.1-beta.160

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 (233) hide show
  1. package/lib/commonjs/dialog/DialogContent.js +17 -3
  2. package/lib/commonjs/dialog/DialogContent.js.map +1 -1
  3. package/lib/commonjs/dialog/DialogPopup.js +5 -1
  4. package/lib/commonjs/dialog/DialogPopup.js.map +1 -1
  5. package/lib/commonjs/index.js +54 -0
  6. package/lib/commonjs/index.js.map +1 -1
  7. package/lib/commonjs/menu/MenuCheckboxItem.js +42 -0
  8. package/lib/commonjs/menu/MenuCheckboxItem.js.map +1 -0
  9. package/lib/commonjs/menu/MenuItem.js +142 -0
  10. package/lib/commonjs/menu/MenuItem.js.map +1 -0
  11. package/lib/commonjs/menu/MenuOverlayRoot.js +80 -0
  12. package/lib/commonjs/menu/MenuOverlayRoot.js.map +1 -0
  13. package/lib/commonjs/menu/MenuPopup.js +78 -0
  14. package/lib/commonjs/menu/MenuPopup.js.map +1 -0
  15. package/lib/commonjs/menu/MenuRadioGroup.js +48 -0
  16. package/lib/commonjs/menu/MenuRadioGroup.js.map +1 -0
  17. package/lib/commonjs/menu/MenuRadioItem.js +32 -0
  18. package/lib/commonjs/menu/MenuRadioItem.js.map +1 -0
  19. package/lib/commonjs/menu/MenuRoot.js +139 -0
  20. package/lib/commonjs/menu/MenuRoot.js.map +1 -0
  21. package/lib/commonjs/menu/MenuTrigger.js +59 -0
  22. package/lib/commonjs/menu/MenuTrigger.js.map +1 -0
  23. package/lib/commonjs/menu/context.js +36 -0
  24. package/lib/commonjs/menu/context.js.map +1 -0
  25. package/lib/commonjs/menu/index.js +118 -0
  26. package/lib/commonjs/menu/index.js.map +1 -0
  27. package/lib/commonjs/menu/overlayContext.js +30 -0
  28. package/lib/commonjs/menu/overlayContext.js.map +1 -0
  29. package/lib/commonjs/menu/types.js +6 -0
  30. package/lib/commonjs/menu/types.js.map +1 -0
  31. package/lib/commonjs/menu/useMenuNavigation.js +87 -0
  32. package/lib/commonjs/menu/useMenuNavigation.js.map +1 -0
  33. package/lib/commonjs/menu/useMenuOverlayLifecycle.js +68 -0
  34. package/lib/commonjs/menu/useMenuOverlayLifecycle.js.map +1 -0
  35. package/lib/commonjs/menu/useMenuTrigger.js +115 -0
  36. package/lib/commonjs/menu/useMenuTrigger.js.map +1 -0
  37. package/lib/commonjs/overlay/OverlayContainer.js +2 -3
  38. package/lib/commonjs/overlay/OverlayContainer.js.map +1 -1
  39. package/lib/commonjs/overlay/OverlayStack.js +125 -0
  40. package/lib/commonjs/overlay/OverlayStack.js.map +1 -0
  41. package/lib/commonjs/overlay/constants.js +7 -1
  42. package/lib/commonjs/overlay/constants.js.map +1 -1
  43. package/lib/commonjs/overlay/getAnchoredOverlayPosition.js +188 -0
  44. package/lib/commonjs/overlay/getAnchoredOverlayPosition.js.map +1 -0
  45. package/lib/commonjs/overlay/index.js +39 -0
  46. package/lib/commonjs/overlay/index.js.map +1 -1
  47. package/lib/commonjs/overlay/useAnchoredOverlay.js +127 -0
  48. package/lib/commonjs/overlay/useAnchoredOverlay.js.map +1 -0
  49. package/lib/commonjs/overlay/useDismissOverlay.js +8 -1
  50. package/lib/commonjs/overlay/useDismissOverlay.js.map +1 -1
  51. package/lib/commonjs/overlay/useDismissOverlay.web.js +11 -3
  52. package/lib/commonjs/overlay/useDismissOverlay.web.js.map +1 -1
  53. package/lib/commonjs/overlay/useEscapeKey.js +8 -1
  54. package/lib/commonjs/overlay/useEscapeKey.js.map +1 -1
  55. package/lib/commonjs/overlay/useEscapeKey.web.js +11 -3
  56. package/lib/commonjs/overlay/useEscapeKey.web.js.map +1 -1
  57. package/lib/commonjs/overlay/useOverlayPosition.js +16 -7
  58. package/lib/commonjs/overlay/useOverlayPosition.js.map +1 -1
  59. package/lib/commonjs/portal/portal.js +86 -63
  60. package/lib/commonjs/portal/portal.js.map +1 -1
  61. package/lib/commonjs/select/SelectContent.js +23 -11
  62. package/lib/commonjs/select/SelectContent.js.map +1 -1
  63. package/lib/commonjs/select/useListboxNavigation.js +10 -11
  64. package/lib/commonjs/select/useListboxNavigation.js.map +1 -1
  65. package/lib/commonjs/tooltip/TooltipContent.js +25 -24
  66. package/lib/commonjs/tooltip/TooltipContent.js.map +1 -1
  67. package/lib/commonjs/tooltip/getTooltipPosition.js +37 -84
  68. package/lib/commonjs/tooltip/getTooltipPosition.js.map +1 -1
  69. package/lib/module/dialog/DialogContent.js +18 -4
  70. package/lib/module/dialog/DialogContent.js.map +1 -1
  71. package/lib/module/dialog/DialogPopup.js +5 -1
  72. package/lib/module/dialog/DialogPopup.js.map +1 -1
  73. package/lib/module/index.js +2 -1
  74. package/lib/module/index.js.map +1 -1
  75. package/lib/module/menu/MenuCheckboxItem.js +38 -0
  76. package/lib/module/menu/MenuCheckboxItem.js.map +1 -0
  77. package/lib/module/menu/MenuItem.js +138 -0
  78. package/lib/module/menu/MenuItem.js.map +1 -0
  79. package/lib/module/menu/MenuOverlayRoot.js +76 -0
  80. package/lib/module/menu/MenuOverlayRoot.js.map +1 -0
  81. package/lib/module/menu/MenuPopup.js +74 -0
  82. package/lib/module/menu/MenuPopup.js.map +1 -0
  83. package/lib/module/menu/MenuRadioGroup.js +44 -0
  84. package/lib/module/menu/MenuRadioGroup.js.map +1 -0
  85. package/lib/module/menu/MenuRadioItem.js +28 -0
  86. package/lib/module/menu/MenuRadioItem.js.map +1 -0
  87. package/lib/module/menu/MenuRoot.js +135 -0
  88. package/lib/module/menu/MenuRoot.js.map +1 -0
  89. package/lib/module/menu/MenuTrigger.js +55 -0
  90. package/lib/module/menu/MenuTrigger.js.map +1 -0
  91. package/lib/module/menu/context.js +27 -0
  92. package/lib/module/menu/context.js.map +1 -0
  93. package/lib/module/menu/index.js +13 -0
  94. package/lib/module/menu/index.js.map +1 -0
  95. package/lib/module/menu/overlayContext.js +24 -0
  96. package/lib/module/menu/overlayContext.js.map +1 -0
  97. package/lib/module/menu/types.js +4 -0
  98. package/lib/module/menu/types.js.map +1 -0
  99. package/lib/module/menu/useMenuNavigation.js +84 -0
  100. package/lib/module/menu/useMenuNavigation.js.map +1 -0
  101. package/lib/module/menu/useMenuOverlayLifecycle.js +63 -0
  102. package/lib/module/menu/useMenuOverlayLifecycle.js.map +1 -0
  103. package/lib/module/menu/useMenuTrigger.js +111 -0
  104. package/lib/module/menu/useMenuTrigger.js.map +1 -0
  105. package/lib/module/overlay/OverlayContainer.js +2 -3
  106. package/lib/module/overlay/OverlayContainer.js.map +1 -1
  107. package/lib/module/overlay/OverlayStack.js +119 -0
  108. package/lib/module/overlay/OverlayStack.js.map +1 -0
  109. package/lib/module/overlay/constants.js +6 -0
  110. package/lib/module/overlay/constants.js.map +1 -1
  111. package/lib/module/overlay/getAnchoredOverlayPosition.js +183 -0
  112. package/lib/module/overlay/getAnchoredOverlayPosition.js.map +1 -0
  113. package/lib/module/overlay/index.js +4 -1
  114. package/lib/module/overlay/index.js.map +1 -1
  115. package/lib/module/overlay/useAnchoredOverlay.js +123 -0
  116. package/lib/module/overlay/useAnchoredOverlay.js.map +1 -0
  117. package/lib/module/overlay/useDismissOverlay.js +9 -1
  118. package/lib/module/overlay/useDismissOverlay.js.map +1 -1
  119. package/lib/module/overlay/useDismissOverlay.web.js +11 -3
  120. package/lib/module/overlay/useDismissOverlay.web.js.map +1 -1
  121. package/lib/module/overlay/useEscapeKey.js +9 -1
  122. package/lib/module/overlay/useEscapeKey.js.map +1 -1
  123. package/lib/module/overlay/useEscapeKey.web.js +11 -3
  124. package/lib/module/overlay/useEscapeKey.web.js.map +1 -1
  125. package/lib/module/overlay/useOverlayPosition.js +16 -7
  126. package/lib/module/overlay/useOverlayPosition.js.map +1 -1
  127. package/lib/module/portal/portal.js +86 -64
  128. package/lib/module/portal/portal.js.map +1 -1
  129. package/lib/module/select/SelectContent.js +25 -13
  130. package/lib/module/select/SelectContent.js.map +1 -1
  131. package/lib/module/select/useListboxNavigation.js +10 -11
  132. package/lib/module/select/useListboxNavigation.js.map +1 -1
  133. package/lib/module/tooltip/TooltipContent.js +30 -29
  134. package/lib/module/tooltip/TooltipContent.js.map +1 -1
  135. package/lib/module/tooltip/getTooltipPosition.js +37 -84
  136. package/lib/module/tooltip/getTooltipPosition.js.map +1 -1
  137. package/lib/typescript/dialog/DialogContent.d.ts.map +1 -1
  138. package/lib/typescript/dialog/DialogPopup.d.ts.map +1 -1
  139. package/lib/typescript/index.d.ts +2 -1
  140. package/lib/typescript/index.d.ts.map +1 -1
  141. package/lib/typescript/menu/MenuCheckboxItem.d.ts +6 -0
  142. package/lib/typescript/menu/MenuCheckboxItem.d.ts.map +1 -0
  143. package/lib/typescript/menu/MenuItem.d.ts +8 -0
  144. package/lib/typescript/menu/MenuItem.d.ts.map +1 -0
  145. package/lib/typescript/menu/MenuOverlayRoot.d.ts +8 -0
  146. package/lib/typescript/menu/MenuOverlayRoot.d.ts.map +1 -0
  147. package/lib/typescript/menu/MenuPopup.d.ts +8 -0
  148. package/lib/typescript/menu/MenuPopup.d.ts.map +1 -0
  149. package/lib/typescript/menu/MenuRadioGroup.d.ts +8 -0
  150. package/lib/typescript/menu/MenuRadioGroup.d.ts.map +1 -0
  151. package/lib/typescript/menu/MenuRadioItem.d.ts +6 -0
  152. package/lib/typescript/menu/MenuRadioItem.d.ts.map +1 -0
  153. package/lib/typescript/menu/MenuRoot.d.ts +8 -0
  154. package/lib/typescript/menu/MenuRoot.d.ts.map +1 -0
  155. package/lib/typescript/menu/MenuTrigger.d.ts +7 -0
  156. package/lib/typescript/menu/MenuTrigger.d.ts.map +1 -0
  157. package/lib/typescript/menu/context.d.ts +15 -0
  158. package/lib/typescript/menu/context.d.ts.map +1 -0
  159. package/lib/typescript/menu/index.d.ts +12 -0
  160. package/lib/typescript/menu/index.d.ts.map +1 -0
  161. package/lib/typescript/menu/overlayContext.d.ts +35 -0
  162. package/lib/typescript/menu/overlayContext.d.ts.map +1 -0
  163. package/lib/typescript/menu/types.d.ts +104 -0
  164. package/lib/typescript/menu/types.d.ts.map +1 -0
  165. package/lib/typescript/menu/useMenuNavigation.d.ts +16 -0
  166. package/lib/typescript/menu/useMenuNavigation.d.ts.map +1 -0
  167. package/lib/typescript/menu/useMenuOverlayLifecycle.d.ts +15 -0
  168. package/lib/typescript/menu/useMenuOverlayLifecycle.d.ts.map +1 -0
  169. package/lib/typescript/menu/useMenuTrigger.d.ts +35 -0
  170. package/lib/typescript/menu/useMenuTrigger.d.ts.map +1 -0
  171. package/lib/typescript/overlay/OverlayContainer.d.ts.map +1 -1
  172. package/lib/typescript/overlay/OverlayStack.d.ts +46 -0
  173. package/lib/typescript/overlay/OverlayStack.d.ts.map +1 -0
  174. package/lib/typescript/overlay/constants.d.ts +5 -0
  175. package/lib/typescript/overlay/constants.d.ts.map +1 -1
  176. package/lib/typescript/overlay/getAnchoredOverlayPosition.d.ts +45 -0
  177. package/lib/typescript/overlay/getAnchoredOverlayPosition.d.ts.map +1 -0
  178. package/lib/typescript/overlay/index.d.ts +5 -2
  179. package/lib/typescript/overlay/index.d.ts.map +1 -1
  180. package/lib/typescript/overlay/useAnchoredOverlay.d.ts +15 -0
  181. package/lib/typescript/overlay/useAnchoredOverlay.d.ts.map +1 -0
  182. package/lib/typescript/overlay/useDismissOverlay.d.ts +2 -1
  183. package/lib/typescript/overlay/useDismissOverlay.d.ts.map +1 -1
  184. package/lib/typescript/overlay/useDismissOverlay.web.d.ts +2 -1
  185. package/lib/typescript/overlay/useDismissOverlay.web.d.ts.map +1 -1
  186. package/lib/typescript/overlay/useEscapeKey.d.ts +2 -1
  187. package/lib/typescript/overlay/useEscapeKey.d.ts.map +1 -1
  188. package/lib/typescript/overlay/useEscapeKey.web.d.ts +2 -1
  189. package/lib/typescript/overlay/useEscapeKey.web.d.ts.map +1 -1
  190. package/lib/typescript/overlay/useOverlayPosition.d.ts +5 -1
  191. package/lib/typescript/overlay/useOverlayPosition.d.ts.map +1 -1
  192. package/lib/typescript/portal/portal.d.ts +3 -0
  193. package/lib/typescript/portal/portal.d.ts.map +1 -1
  194. package/lib/typescript/select/SelectContent.d.ts.map +1 -1
  195. package/lib/typescript/select/useListboxNavigation.d.ts.map +1 -1
  196. package/lib/typescript/tooltip/TooltipContent.d.ts.map +1 -1
  197. package/lib/typescript/tooltip/getTooltipPosition.d.ts +6 -8
  198. package/lib/typescript/tooltip/getTooltipPosition.d.ts.map +1 -1
  199. package/package.json +3 -3
  200. package/src/dialog/DialogContent.tsx +16 -4
  201. package/src/dialog/DialogPopup.tsx +5 -1
  202. package/src/index.ts +23 -0
  203. package/src/menu/MenuCheckboxItem.tsx +51 -0
  204. package/src/menu/MenuItem.tsx +197 -0
  205. package/src/menu/MenuOverlayRoot.tsx +100 -0
  206. package/src/menu/MenuPopup.tsx +81 -0
  207. package/src/menu/MenuRadioGroup.tsx +48 -0
  208. package/src/menu/MenuRadioItem.tsx +32 -0
  209. package/src/menu/MenuRoot.tsx +190 -0
  210. package/src/menu/MenuTrigger.tsx +57 -0
  211. package/src/menu/context.tsx +38 -0
  212. package/src/menu/index.ts +36 -0
  213. package/src/menu/overlayContext.tsx +61 -0
  214. package/src/menu/types.ts +119 -0
  215. package/src/menu/useMenuNavigation.ts +102 -0
  216. package/src/menu/useMenuOverlayLifecycle.ts +77 -0
  217. package/src/menu/useMenuTrigger.ts +161 -0
  218. package/src/overlay/OverlayContainer.tsx +3 -1
  219. package/src/overlay/OverlayStack.tsx +202 -0
  220. package/src/overlay/constants.ts +6 -0
  221. package/src/overlay/getAnchoredOverlayPosition.ts +326 -0
  222. package/src/overlay/index.ts +29 -1
  223. package/src/overlay/useAnchoredOverlay.ts +153 -0
  224. package/src/overlay/useDismissOverlay.ts +10 -2
  225. package/src/overlay/useDismissOverlay.web.ts +9 -2
  226. package/src/overlay/useEscapeKey.ts +13 -1
  227. package/src/overlay/useEscapeKey.web.ts +13 -3
  228. package/src/overlay/useOverlayPosition.ts +35 -8
  229. package/src/portal/portal.tsx +109 -69
  230. package/src/select/SelectContent.tsx +29 -17
  231. package/src/select/useListboxNavigation.ts +12 -9
  232. package/src/tooltip/TooltipContent.tsx +32 -34
  233. package/src/tooltip/getTooltipPosition.ts +58 -125
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+
3
+ import { useCallback, useMemo, useRef } from 'react';
4
+ import { composeEventHandlers, mergeRefs } from '@cdx-ui/utils';
5
+ import { useFocus } from '@react-native-aria/focus';
6
+ import { useHover } from '@react-native-aria/interactions';
7
+ import { useMenuOverlayContext } from './overlayContext';
8
+ export function useMenuTrigger(forwardedRef, options) {
9
+ const {
10
+ onPress: consumerOnPress,
11
+ onHoverIn: consumerOnHoverIn,
12
+ onHoverOut: consumerOnHoverOut,
13
+ onFocus: consumerOnFocus,
14
+ onBlur: consumerOnBlur,
15
+ onKeyDown: consumerOnKeyDown
16
+ } = options;
17
+ const {
18
+ open,
19
+ setOpen,
20
+ closeMenu,
21
+ disabled,
22
+ triggerRef,
23
+ triggerId,
24
+ menuId,
25
+ focusOnOpenRef
26
+ } = useMenuOverlayContext();
27
+ const pendingKeyboardOpenRef = useRef(null);
28
+ const {
29
+ isFocused,
30
+ focusProps
31
+ } = useFocus();
32
+ const {
33
+ isHovered,
34
+ hoverProps
35
+ } = useHover();
36
+ const clearPendingKeyboardOpen = useCallback(() => {
37
+ pendingKeyboardOpenRef.current = null;
38
+ }, []);
39
+ const handlePress = useCallback(_e => {
40
+ if (disabled) {
41
+ return;
42
+ }
43
+ if (open) {
44
+ pendingKeyboardOpenRef.current = null;
45
+ closeMenu('trigger');
46
+ return;
47
+ }
48
+ focusOnOpenRef.current = pendingKeyboardOpenRef.current ?? 'menu';
49
+ pendingKeyboardOpenRef.current = null;
50
+ setOpen(true);
51
+ }, [closeMenu, disabled, focusOnOpenRef, open, setOpen]);
52
+ const handleKeyDown = useCallback(e => {
53
+ if (disabled) {
54
+ return;
55
+ }
56
+ switch (e.key) {
57
+ case 'Enter':
58
+ case ' ':
59
+ {
60
+ e.preventDefault();
61
+ pendingKeyboardOpenRef.current = 'first';
62
+ break;
63
+ }
64
+ case 'ArrowDown':
65
+ {
66
+ e.preventDefault();
67
+ pendingKeyboardOpenRef.current = null;
68
+ focusOnOpenRef.current = 'first';
69
+ setOpen(true);
70
+ break;
71
+ }
72
+ case 'ArrowUp':
73
+ {
74
+ e.preventDefault();
75
+ pendingKeyboardOpenRef.current = null;
76
+ focusOnOpenRef.current = 'last';
77
+ setOpen(true);
78
+ break;
79
+ }
80
+ }
81
+ }, [disabled, focusOnOpenRef, setOpen]);
82
+ const interactionState = useMemo(() => ({
83
+ hover: !!isHovered,
84
+ focus: !!isFocused,
85
+ disabled: !!disabled
86
+ }), [isHovered, isFocused, disabled]);
87
+ const mergedRef = mergeRefs(forwardedRef, triggerRef);
88
+ const ariaProps = {
89
+ role: 'button',
90
+ id: triggerId,
91
+ 'aria-haspopup': 'menu',
92
+ 'aria-expanded': open,
93
+ 'aria-controls': menuId,
94
+ disabled
95
+ };
96
+ const handlers = {
97
+ onPress: composeEventHandlers(consumerOnPress, handlePress),
98
+ onHoverIn: composeEventHandlers(consumerOnHoverIn, hoverProps.onHoverIn),
99
+ onHoverOut: composeEventHandlers(consumerOnHoverOut, hoverProps.onHoverOut),
100
+ onFocus: composeEventHandlers(consumerOnFocus, focusProps.onFocus),
101
+ onBlur: composeEventHandlers(composeEventHandlers(consumerOnBlur, focusProps.onBlur), clearPendingKeyboardOpen),
102
+ onKeyDown: composeEventHandlers(consumerOnKeyDown, handleKeyDown)
103
+ };
104
+ return {
105
+ ariaProps,
106
+ interactionState,
107
+ mergedRef,
108
+ handlers
109
+ };
110
+ }
111
+ //# sourceMappingURL=useMenuTrigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useMemo","useRef","composeEventHandlers","mergeRefs","useFocus","useHover","useMenuOverlayContext","useMenuTrigger","forwardedRef","options","onPress","consumerOnPress","onHoverIn","consumerOnHoverIn","onHoverOut","consumerOnHoverOut","onFocus","consumerOnFocus","onBlur","consumerOnBlur","onKeyDown","consumerOnKeyDown","open","setOpen","closeMenu","disabled","triggerRef","triggerId","menuId","focusOnOpenRef","pendingKeyboardOpenRef","isFocused","focusProps","isHovered","hoverProps","clearPendingKeyboardOpen","current","handlePress","_e","handleKeyDown","e","key","preventDefault","interactionState","hover","focus","mergedRef","ariaProps","role","id","handlers"],"sourceRoot":"../../../src","sources":["menu/useMenuTrigger.ts"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,OAAO,EAAEC,MAAM,QAA6C,OAAO;AAEzF,SAASC,oBAAoB,EAAEC,SAAS,QAAQ,eAAe;AAC/D,SAASC,QAAQ,QAAQ,0BAA0B;AACnD,SAASC,QAAQ,QAAQ,iCAAiC;AAE1D,SAASC,qBAAqB,QAAQ,kBAAkB;AAmCxD,OAAO,SAASC,cAAcA,CAC5BC,YAAmC,EACnCC,OAA8B,EACR;EACtB,MAAM;IACJC,OAAO,EAAEC,eAAe;IACxBC,SAAS,EAAEC,iBAAiB;IAC5BC,UAAU,EAAEC,kBAAkB;IAC9BC,OAAO,EAAEC,eAAe;IACxBC,MAAM,EAAEC,cAAc;IACtBC,SAAS,EAAEC;EACb,CAAC,GAAGZ,OAAO;EAEX,MAAM;IAAEa,IAAI;IAAEC,OAAO;IAAEC,SAAS;IAAEC,QAAQ;IAAEC,UAAU;IAAEC,SAAS;IAAEC,MAAM;IAAEC;EAAe,CAAC,GACzFvB,qBAAqB,CAAC,CAAC;EACzB,MAAMwB,sBAAsB,GAAG7B,MAAM,CAA0B,IAAI,CAAC;EAEpE,MAAM;IAAE8B,SAAS;IAAEC;EAAW,CAAC,GAAG5B,QAAQ,CAAC,CAAC;EAC5C,MAAM;IAAE6B,SAAS;IAAEC;EAAW,CAAC,GAAG7B,QAAQ,CAAC,CAAC;EAC5C,MAAM8B,wBAAwB,GAAGpC,WAAW,CAAC,MAAM;IACjD+B,sBAAsB,CAACM,OAAO,GAAG,IAAI;EACvC,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMC,WAAW,GAAGtC,WAAW,CAC5BuC,EAAyB,IAAK;IAC7B,IAAIb,QAAQ,EAAE;MACZ;IACF;IAEA,IAAIH,IAAI,EAAE;MACRQ,sBAAsB,CAACM,OAAO,GAAG,IAAI;MACrCZ,SAAS,CAAC,SAAS,CAAC;MACpB;IACF;IAEAK,cAAc,CAACO,OAAO,GAAGN,sBAAsB,CAACM,OAAO,IAAI,MAAM;IACjEN,sBAAsB,CAACM,OAAO,GAAG,IAAI;IACrCb,OAAO,CAAC,IAAI,CAAC;EACf,CAAC,EACD,CAACC,SAAS,EAAEC,QAAQ,EAAEI,cAAc,EAAEP,IAAI,EAAEC,OAAO,CACrD,CAAC;EAED,MAAMgB,aAAa,GAAGxC,WAAW,CAC9ByC,CAAgB,IAAK;IACpB,IAAIf,QAAQ,EAAE;MACZ;IACF;IAEA,QAAQe,CAAC,CAACC,GAAG;MACX,KAAK,OAAO;MACZ,KAAK,GAAG;QAAE;UACRD,CAAC,CAACE,cAAc,CAAC,CAAC;UAClBZ,sBAAsB,CAACM,OAAO,GAAG,OAAO;UACxC;QACF;MACA,KAAK,WAAW;QAAE;UAChBI,CAAC,CAACE,cAAc,CAAC,CAAC;UAClBZ,sBAAsB,CAACM,OAAO,GAAG,IAAI;UACrCP,cAAc,CAACO,OAAO,GAAG,OAAO;UAChCb,OAAO,CAAC,IAAI,CAAC;UACb;QACF;MACA,KAAK,SAAS;QAAE;UACdiB,CAAC,CAACE,cAAc,CAAC,CAAC;UAClBZ,sBAAsB,CAACM,OAAO,GAAG,IAAI;UACrCP,cAAc,CAACO,OAAO,GAAG,MAAM;UAC/Bb,OAAO,CAAC,IAAI,CAAC;UACb;QACF;IACF;EACF,CAAC,EACD,CAACE,QAAQ,EAAEI,cAAc,EAAEN,OAAO,CACpC,CAAC;EAED,MAAMoB,gBAAgB,GAAG3C,OAAO,CAC9B,OAAO;IACL4C,KAAK,EAAE,CAAC,CAACX,SAAS;IAClBY,KAAK,EAAE,CAAC,CAACd,SAAS;IAClBN,QAAQ,EAAE,CAAC,CAACA;EACd,CAAC,CAAC,EACF,CAACQ,SAAS,EAAEF,SAAS,EAAEN,QAAQ,CACjC,CAAC;EAED,MAAMqB,SAAS,GAAG3C,SAAS,CAACK,YAAY,EAAEkB,UAAU,CAAC;EAErD,MAAMqB,SAA+B,GAAG;IACtCC,IAAI,EAAE,QAAQ;IACdC,EAAE,EAAEtB,SAAS;IACb,eAAe,EAAE,MAAM;IACvB,eAAe,EAAEL,IAAI;IACrB,eAAe,EAAEM,MAAM;IACvBH;EACF,CAAC;EAED,MAAMyB,QAAQ,GAAG;IACfxC,OAAO,EAAER,oBAAoB,CAC3BS,eAAe,EACf0B,WACF,CAAgD;IAChDzB,SAAS,EAAEV,oBAAoB,CAC7BW,iBAAiB,EACjBqB,UAAU,CAACtB,SACb,CAAkD;IAClDE,UAAU,EAAEZ,oBAAoB,CAC9Ba,kBAAkB,EAClBmB,UAAU,CAACpB,UACb,CAAmD;IACnDE,OAAO,EAAEd,oBAAoB,CAACe,eAAe,EAAEe,UAAU,CAAChB,OAAO,CAAC;IAClEE,MAAM,EAAEhB,oBAAoB,CAC1BA,oBAAoB,CAACiB,cAAc,EAAEa,UAAU,CAACd,MAAM,CAAC,EACvDiB,wBACF,CAAC;IACDf,SAAS,EAAElB,oBAAoB,CAC7BmB,iBAAiB,EACjBkB,aACF;EACF,CAAC;EAED,OAAO;IAAEQ,SAAS;IAAEJ,gBAAgB;IAAEG,SAAS;IAAEI;EAAS,CAAC;AAC7D","ignoreList":[]}
@@ -50,9 +50,8 @@ export function OverlayContainer({
50
50
  }), /*#__PURE__*/_jsx(Animated.View, {
51
51
  entering: entering,
52
52
  exiting: exiting,
53
- style: [{
54
- position: 'absolute'
55
- }, style],
53
+ pointerEvents: "box-none",
54
+ style: [StyleSheet.absoluteFill, style],
56
55
  children: children
57
56
  })]
58
57
  });
@@ -1 +1 @@
1
- {"version":3,"names":["Modal","Platform","Pressable","StyleSheet","View","Animated","createPortalFn","MODAL_OVERLAY_Z_INDEX","jsx","_jsx","jsxs","_jsxs","OverlayContainer","onDismiss","entering","exiting","style","children","OS","position","zIndex","document","body","visible","transparent","animationType","statusBarTranslucent","onRequestClose","absoluteFill","onPress","accessible","importantForAccessibility"],"sourceRoot":"../../../src","sources":["overlay/OverlayContainer.tsx"],"mappings":";;AACA,SACEA,KAAK,EACLC,QAAQ,EACRC,SAAS,EACTC,UAAU,EACVC,IAAI,QAGC,cAAc;AACrB,OAAOC,QAAQ,MAAsC,yBAAyB;AAC9E,SAASC,cAAc,QAAQ,uBAAuB;AACtD,SAASC,qBAAqB,QAAQ,aAAa;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAUpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAAC;EAC/BC,SAAS;EACTC,QAAQ;EACRC,OAAO;EACPC,KAAK;EACLC;AAC+B,CAAC,EAAE;EAClC,IAAIhB,QAAQ,CAACiB,EAAE,KAAK,KAAK,IAAIZ,cAAc,EAAE;IAC3C,OAAOA,cAAc,cACnBG,IAAA,CAACL,IAAI;MAACY,KAAK,EAAE,CAAC;QAAEG,QAAQ,EAAE,OAAc;QAAEC,MAAM,EAAEb;MAAsB,CAAC,EAAES,KAAK,CAAE;MAAAC,QAAA,EAC/EA;IAAQ,CACL,CAAC,EACPI,QAAQ,CAACC,IACX,CAAC;EACH;EAEA,oBACEX,KAAA,CAACX,KAAK;IAACuB,OAAO;IAACC,WAAW;IAACC,aAAa,EAAC,MAAM;IAACC,oBAAoB;IAACC,cAAc,EAAEd,SAAU;IAAAI,QAAA,gBAC7FR,IAAA,CAACP,SAAS;MACRc,KAAK,EAAEb,UAAU,CAACyB,YAAa;MAC/BC,OAAO,EAAEhB,SAAU;MACnBiB,UAAU,EAAE,KAAM;MAClBC,yBAAyB,EAAC;IAAqB,CAChD,CAAC,eACFtB,IAAA,CAACJ,QAAQ,CAACD,IAAI;MACZU,QAAQ,EAAEA,QAAS;MACnBC,OAAO,EAAEA,OAAQ;MACjBC,KAAK,EAAE,CAAC;QAAEG,QAAQ,EAAE;MAAW,CAAC,EAAEH,KAAK,CAAE;MAAAC,QAAA,EAExCA;IAAQ,CACI,CAAC;EAAA,CACX,CAAC;AAEZ","ignoreList":[]}
1
+ {"version":3,"names":["Modal","Platform","Pressable","StyleSheet","View","Animated","createPortalFn","MODAL_OVERLAY_Z_INDEX","jsx","_jsx","jsxs","_jsxs","OverlayContainer","onDismiss","entering","exiting","style","children","OS","position","zIndex","document","body","visible","transparent","animationType","statusBarTranslucent","onRequestClose","absoluteFill","onPress","accessible","importantForAccessibility","pointerEvents"],"sourceRoot":"../../../src","sources":["overlay/OverlayContainer.tsx"],"mappings":";;AACA,SACEA,KAAK,EACLC,QAAQ,EACRC,SAAS,EACTC,UAAU,EACVC,IAAI,QAGC,cAAc;AACrB,OAAOC,QAAQ,MAAsC,yBAAyB;AAC9E,SAASC,cAAc,QAAQ,uBAAuB;AACtD,SAASC,qBAAqB,QAAQ,aAAa;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAUpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAAC;EAC/BC,SAAS;EACTC,QAAQ;EACRC,OAAO;EACPC,KAAK;EACLC;AAC+B,CAAC,EAAE;EAClC,IAAIhB,QAAQ,CAACiB,EAAE,KAAK,KAAK,IAAIZ,cAAc,EAAE;IAC3C,OAAOA,cAAc,cACnBG,IAAA,CAACL,IAAI;MAACY,KAAK,EAAE,CAAC;QAAEG,QAAQ,EAAE,OAAc;QAAEC,MAAM,EAAEb;MAAsB,CAAC,EAAES,KAAK,CAAE;MAAAC,QAAA,EAC/EA;IAAQ,CACL,CAAC,EACPI,QAAQ,CAACC,IACX,CAAC;EACH;EAEA,oBACEX,KAAA,CAACX,KAAK;IAACuB,OAAO;IAACC,WAAW;IAACC,aAAa,EAAC,MAAM;IAACC,oBAAoB;IAACC,cAAc,EAAEd,SAAU;IAAAI,QAAA,gBAC7FR,IAAA,CAACP,SAAS;MACRc,KAAK,EAAEb,UAAU,CAACyB,YAAa;MAC/BC,OAAO,EAAEhB,SAAU;MACnBiB,UAAU,EAAE,KAAM;MAClBC,yBAAyB,EAAC;IAAqB,CAChD,CAAC,eAEFtB,IAAA,CAACJ,QAAQ,CAACD,IAAI;MACZU,QAAQ,EAAEA,QAAS;MACnBC,OAAO,EAAEA,OAAQ;MACjBiB,aAAa,EAAC,UAAU;MACxBhB,KAAK,EAAE,CAACb,UAAU,CAACyB,YAAY,EAAEZ,KAAK,CAAE;MAAAC,QAAA,EAEvCA;IAAQ,CACI,CAAC;EAAA,CACX,CAAC;AAEZ","ignoreList":[]}
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+
3
+ import React, { createContext, useCallback, useContext, useEffect, useId, useRef, useSyncExternalStore } from 'react';
4
+ import { jsx as _jsx } from "react/jsx-runtime";
5
+ function createOverlayStackRegistry() {
6
+ const entries = new Map();
7
+ const listeners = new Set();
8
+ let activationOrder = 0;
9
+ let version = 0;
10
+ const emit = () => {
11
+ version += 1;
12
+ for (const listener of listeners) listener();
13
+ };
14
+ return {
15
+ register(token, entry) {
16
+ activationOrder += 1;
17
+ entries.set(token, {
18
+ ...entry,
19
+ token,
20
+ activationOrder
21
+ });
22
+ emit();
23
+ },
24
+ unregister(token) {
25
+ if (entries.delete(token)) emit();
26
+ },
27
+ isTopmost(token, capability) {
28
+ const current = entries.get(token);
29
+ if (!current?.capabilities.has(capability)) return false;
30
+ let topmost = current;
31
+ for (const candidate of entries.values()) {
32
+ if (!candidate.capabilities.has(capability)) continue;
33
+ if (candidate.activationOrder > topmost.activationOrder) {
34
+ topmost = candidate;
35
+ }
36
+ }
37
+ return topmost.token === token;
38
+ },
39
+ subscribe(listener) {
40
+ listeners.add(listener);
41
+ return () => {
42
+ listeners.delete(listener);
43
+ };
44
+ },
45
+ getSnapshot() {
46
+ return version;
47
+ }
48
+ };
49
+ }
50
+ const OverlayStackContext = /*#__PURE__*/createContext(null);
51
+ const subscribeNoop = () => {
52
+ return () => undefined;
53
+ };
54
+ const getZeroSnapshot = () => 0;
55
+
56
+ /**
57
+ * Scopes overlay ordering and dismissal coordination to a provider subtree.
58
+ * Hooks retain their standalone behavior when no provider is present.
59
+ */
60
+ export function OverlayStackProvider({
61
+ children
62
+ }) {
63
+ const [registry] = React.useState(createOverlayStackRegistry);
64
+ return /*#__PURE__*/_jsx(OverlayStackContext.Provider, {
65
+ value: registry,
66
+ children: children
67
+ });
68
+ }
69
+
70
+ /**
71
+ * Registers one active overlay and reports whether it is topmost for a specific
72
+ * dismissal capability. Capabilities are resolved independently so a
73
+ * notification without dismissal capabilities never blocks a modal.
74
+ */
75
+ export function useOverlayStackRegistration({
76
+ active,
77
+ capabilities = [],
78
+ layer = 'nonmodal',
79
+ id,
80
+ parentId,
81
+ groupId
82
+ }) {
83
+ const registry = useContext(OverlayStackContext);
84
+ const token = useRef(Symbol('forge-ui-overlay')).current;
85
+ const generatedId = `forge-ui-overlay-${useId()}`;
86
+ const resolvedId = id ?? generatedId;
87
+ const handlesEscape = capabilities.includes('escape');
88
+ const handlesOutside = capabilities.includes('outside');
89
+ const handlesBack = capabilities.includes('back');
90
+ useEffect(() => {
91
+ if (!registry || !active) return;
92
+ const resolvedCapabilities = new Set();
93
+ if (handlesEscape) resolvedCapabilities.add('escape');
94
+ if (handlesOutside) resolvedCapabilities.add('outside');
95
+ if (handlesBack) resolvedCapabilities.add('back');
96
+ registry.register(token, {
97
+ id: resolvedId,
98
+ layer,
99
+ parentId,
100
+ groupId,
101
+ capabilities: resolvedCapabilities
102
+ });
103
+ return () => {
104
+ registry.unregister(token);
105
+ };
106
+ }, [active, groupId, handlesBack, handlesEscape, handlesOutside, layer, parentId, registry, resolvedId, token]);
107
+ useSyncExternalStore(registry?.subscribe ?? subscribeNoop, registry?.getSnapshot ?? getZeroSnapshot, getZeroSnapshot);
108
+ const isTopmost = useCallback(capability => {
109
+ if (!active) return false;
110
+ const handlesCapability = capability === 'escape' && handlesEscape || capability === 'outside' && handlesOutside || capability === 'back' && handlesBack;
111
+ if (!handlesCapability) return false;
112
+ return !registry || registry.isTopmost(token, capability);
113
+ }, [active, handlesBack, handlesEscape, handlesOutside, registry, token]);
114
+ return {
115
+ id: resolvedId,
116
+ isTopmost
117
+ };
118
+ }
119
+ //# sourceMappingURL=OverlayStack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","createContext","useCallback","useContext","useEffect","useId","useRef","useSyncExternalStore","jsx","_jsx","createOverlayStackRegistry","entries","Map","listeners","Set","activationOrder","version","emit","listener","register","token","entry","set","unregister","delete","isTopmost","capability","current","get","capabilities","has","topmost","candidate","values","subscribe","add","getSnapshot","OverlayStackContext","subscribeNoop","undefined","getZeroSnapshot","OverlayStackProvider","children","registry","useState","Provider","value","useOverlayStackRegistration","active","layer","id","parentId","groupId","Symbol","generatedId","resolvedId","handlesEscape","includes","handlesOutside","handlesBack","resolvedCapabilities","handlesCapability"],"sourceRoot":"../../../src","sources":["overlay/OverlayStack.tsx"],"mappings":"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","ignoreList":[]}
@@ -5,4 +5,10 @@
5
5
  * so Dialog / AlertDialog stack on top when opened from a bottom sheet.
6
6
  */
7
7
  export const MODAL_OVERLAY_Z_INDEX = 10000;
8
+
9
+ /**
10
+ * Notification overlay z-index — above modal surfaces while remaining
11
+ * nonmodal and pointer-transparent outside the notification content.
12
+ */
13
+ export const NOTIFICATION_OVERLAY_Z_INDEX = 11000;
8
14
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["MODAL_OVERLAY_Z_INDEX"],"sourceRoot":"../../../src","sources":["overlay/constants.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA,OAAO,MAAMA,qBAAqB,GAAG,KAAK","ignoreList":[]}
1
+ {"version":3,"names":["MODAL_OVERLAY_Z_INDEX","NOTIFICATION_OVERLAY_Z_INDEX"],"sourceRoot":"../../../src","sources":["overlay/constants.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA,OAAO,MAAMA,qBAAqB,GAAG,KAAK;;AAE1C;AACA;AACA;AACA;AACA,OAAO,MAAMC,4BAA4B,GAAG,KAAK","ignoreList":[]}
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+
3
+ export const OVERLAY_PLACEMENTS = ['auto', 'auto-start', 'auto-end', 'top', 'top-start', 'top-end', 'right', 'right-start', 'right-end', 'bottom', 'bottom-start', 'bottom-end', 'left', 'left-start', 'left-end'];
4
+ const DEFAULT_COLLISION_PADDING = 8;
5
+ const DEFAULT_OFFSET = 4;
6
+ function toInsets(value) {
7
+ if (typeof value === 'number') {
8
+ return {
9
+ top: value,
10
+ right: value,
11
+ bottom: value,
12
+ left: value
13
+ };
14
+ }
15
+ return {
16
+ top: value?.top ?? DEFAULT_COLLISION_PADDING,
17
+ right: value?.right ?? DEFAULT_COLLISION_PADDING,
18
+ bottom: value?.bottom ?? DEFAULT_COLLISION_PADDING,
19
+ left: value?.left ?? DEFAULT_COLLISION_PADDING
20
+ };
21
+ }
22
+ function parsePlacement(placement) {
23
+ const [side, align = 'center'] = placement.split('-');
24
+ return {
25
+ side,
26
+ align
27
+ };
28
+ }
29
+ function stringifyPlacement({
30
+ side,
31
+ align
32
+ }) {
33
+ return align === 'center' ? side : `${side}-${align}`;
34
+ }
35
+ function oppositeSide(side) {
36
+ switch (side) {
37
+ case 'top':
38
+ return 'bottom';
39
+ case 'right':
40
+ return 'left';
41
+ case 'bottom':
42
+ return 'top';
43
+ case 'left':
44
+ return 'right';
45
+ }
46
+ }
47
+ function availableMainAxis(side, anchor, boundary, offset) {
48
+ switch (side) {
49
+ case 'top':
50
+ return anchor.y - offset - boundary.top;
51
+ case 'right':
52
+ return boundary.right - (anchor.x + anchor.width + offset);
53
+ case 'bottom':
54
+ return boundary.bottom - (anchor.y + anchor.height + offset);
55
+ case 'left':
56
+ return anchor.x - offset - boundary.left;
57
+ }
58
+ }
59
+ function mainAxisSize(side, floating) {
60
+ return side === 'top' || side === 'bottom' ? floating.height : floating.width;
61
+ }
62
+ function resolveAutoSide(anchor, floating, boundary, offset) {
63
+ const sides = ['bottom', 'top', 'right', 'left'];
64
+ return sides.reduce((best, side) => {
65
+ const available = availableMainAxis(side, anchor, boundary, offset);
66
+ const bestAvailable = availableMainAxis(best, anchor, boundary, offset);
67
+ const fits = available >= mainAxisSize(side, floating);
68
+ const bestFits = bestAvailable >= mainAxisSize(best, floating);
69
+ if (fits !== bestFits) {
70
+ return fits ? side : best;
71
+ }
72
+ return available > bestAvailable ? side : best;
73
+ });
74
+ }
75
+ function alignCoordinate(anchorStart, anchorSize, floatingSize, align, reverseLogicalAlignment) {
76
+ const resolvedAlign = reverseLogicalAlignment && align !== 'center' ? align === 'start' ? 'end' : 'start' : align;
77
+ if (resolvedAlign === 'start') {
78
+ return anchorStart;
79
+ }
80
+ if (resolvedAlign === 'end') {
81
+ return anchorStart + anchorSize - floatingSize;
82
+ }
83
+ return anchorStart + (anchorSize - floatingSize) / 2;
84
+ }
85
+ function clamp(value, min, max) {
86
+ if (max < min) return min;
87
+ return Math.min(Math.max(value, min), max);
88
+ }
89
+ function getTransformOrigin(side, arrow, floating) {
90
+ const x = arrow.x ?? floating.width / 2;
91
+ const y = arrow.y ?? floating.height / 2;
92
+ switch (side) {
93
+ case 'top':
94
+ return `${String(x)}px 100%`;
95
+ case 'right':
96
+ return `0% ${String(y)}px`;
97
+ case 'bottom':
98
+ return `${String(x)}px 0%`;
99
+ case 'left':
100
+ return `100% ${String(y)}px`;
101
+ }
102
+ }
103
+ export function getAnchoredOverlayPosition(anchor, floatingLayout, viewport, options = {}) {
104
+ const placement = options.placement ?? 'bottom-start';
105
+ const offset = options.offset ?? DEFAULT_OFFSET;
106
+ const crossOffset = options.crossOffset ?? 0;
107
+ const collisionBehavior = options.collisionBehavior ?? 'flip-shift';
108
+ const collisionPadding = toInsets(options.collisionPadding);
109
+ const insets = {
110
+ top: options.insets?.top ?? 0,
111
+ right: options.insets?.right ?? 0,
112
+ bottom: options.insets?.bottom ?? 0,
113
+ left: options.insets?.left ?? 0
114
+ };
115
+ const boundary = {
116
+ top: insets.top + collisionPadding.top,
117
+ right: viewport.width - insets.right - collisionPadding.right,
118
+ bottom: viewport.height - insets.bottom - collisionPadding.bottom,
119
+ left: insets.left + collisionPadding.left
120
+ };
121
+ const parsed = parsePlacement(placement);
122
+ const measuredFloating = {
123
+ width: options.width === 'anchor' ? anchor.width : floatingLayout.width,
124
+ height: floatingLayout.height
125
+ };
126
+ let side = parsed.side === 'auto' ? resolveAutoSide(anchor, measuredFloating, boundary, offset) : parsed.side;
127
+ const align = parsed.align;
128
+ if (parsed.side !== 'auto' && collisionBehavior !== 'none') {
129
+ const opposite = oppositeSide(side);
130
+ const available = availableMainAxis(side, anchor, boundary, offset);
131
+ const oppositeAvailable = availableMainAxis(opposite, anchor, boundary, offset);
132
+ const required = mainAxisSize(side, measuredFloating);
133
+ if (available < required && oppositeAvailable > available) {
134
+ side = opposite;
135
+ }
136
+ }
137
+ let left;
138
+ let top;
139
+ if (side === 'top' || side === 'bottom') {
140
+ left = alignCoordinate(anchor.x, anchor.width, measuredFloating.width, align, options.isRTL ?? false) + crossOffset;
141
+ top = side === 'top' ? anchor.y - offset - measuredFloating.height : anchor.y + anchor.height + offset;
142
+ } else {
143
+ left = side === 'left' ? anchor.x - offset - measuredFloating.width : anchor.x + anchor.width + offset;
144
+ top = alignCoordinate(anchor.y, anchor.height, measuredFloating.height, align, false) + crossOffset;
145
+ }
146
+ if (collisionBehavior === 'flip-shift') {
147
+ if (side === 'top' || side === 'bottom') {
148
+ left = clamp(left, boundary.left, boundary.right - measuredFloating.width);
149
+ } else {
150
+ top = clamp(top, boundary.top, boundary.bottom - measuredFloating.height);
151
+ }
152
+ }
153
+ const availableWidth = side === 'left' || side === 'right' ? Math.max(0, availableMainAxis(side, anchor, boundary, offset)) : Math.max(0, boundary.right - boundary.left);
154
+ const availableHeight = side === 'top' || side === 'bottom' ? Math.max(0, availableMainAxis(side, anchor, boundary, offset)) : Math.max(0, boundary.bottom - boundary.top);
155
+ const arrowBoundaryOffset = options.arrowBoundaryOffset ?? 8;
156
+ const anchorCenterX = anchor.x + anchor.width / 2;
157
+ const anchorCenterY = anchor.y + anchor.height / 2;
158
+ const arrow = side === 'top' || side === 'bottom' ? {
159
+ x: clamp(anchorCenterX - left, arrowBoundaryOffset, measuredFloating.width - arrowBoundaryOffset)
160
+ } : {
161
+ y: clamp(anchorCenterY - top, arrowBoundaryOffset, measuredFloating.height - arrowBoundaryOffset)
162
+ };
163
+ const resolvedPlacement = {
164
+ side,
165
+ align
166
+ };
167
+ return {
168
+ style: {
169
+ left,
170
+ top,
171
+ width: options.width === 'anchor' ? anchor.width : undefined,
172
+ maxWidth: availableWidth,
173
+ maxHeight: availableHeight
174
+ },
175
+ resolvedPlacement,
176
+ placement: stringifyPlacement(resolvedPlacement),
177
+ availableWidth,
178
+ availableHeight,
179
+ arrow,
180
+ transformOrigin: getTransformOrigin(side, arrow, measuredFloating)
181
+ };
182
+ }
183
+ //# sourceMappingURL=getAnchoredOverlayPosition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["OVERLAY_PLACEMENTS","DEFAULT_COLLISION_PADDING","DEFAULT_OFFSET","toInsets","value","top","right","bottom","left","parsePlacement","placement","side","align","split","stringifyPlacement","oppositeSide","availableMainAxis","anchor","boundary","offset","y","x","width","height","mainAxisSize","floating","resolveAutoSide","sides","reduce","best","available","bestAvailable","fits","bestFits","alignCoordinate","anchorStart","anchorSize","floatingSize","reverseLogicalAlignment","resolvedAlign","clamp","min","max","Math","getTransformOrigin","arrow","String","getAnchoredOverlayPosition","floatingLayout","viewport","options","crossOffset","collisionBehavior","collisionPadding","insets","parsed","measuredFloating","opposite","oppositeAvailable","required","isRTL","availableWidth","availableHeight","arrowBoundaryOffset","anchorCenterX","anchorCenterY","resolvedPlacement","style","undefined","maxWidth","maxHeight","transformOrigin"],"sourceRoot":"../../../src","sources":["overlay/getAnchoredOverlayPosition.ts"],"mappings":"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","ignoreList":[]}
@@ -1,9 +1,12 @@
1
1
  "use strict";
2
2
 
3
- export { MODAL_OVERLAY_Z_INDEX } from './constants';
3
+ export { MODAL_OVERLAY_Z_INDEX, NOTIFICATION_OVERLAY_Z_INDEX } from './constants';
4
4
  export { OverlayContainer } from './OverlayContainer';
5
+ export { OverlayStackProvider, useOverlayStackRegistration } from './OverlayStack';
5
6
  export { useAnchorPosition } from './useAnchorPosition';
6
7
  export { useDismissOverlay } from './useDismissOverlay';
7
8
  export { useEscapeKey } from './useEscapeKey';
9
+ export { getAnchoredOverlayPosition, OVERLAY_PLACEMENTS } from './getAnchoredOverlayPosition';
10
+ export { useAnchoredOverlay } from './useAnchoredOverlay';
8
11
  export { useOverlayPosition, OverlayInsetsProvider } from './useOverlayPosition';
9
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["MODAL_OVERLAY_Z_INDEX","OverlayContainer","useAnchorPosition","useDismissOverlay","useEscapeKey","useOverlayPosition","OverlayInsetsProvider"],"sourceRoot":"../../../src","sources":["overlay/index.ts"],"mappings":";;AAAA,SAASA,qBAAqB,QAAQ,aAAa;AACnD,SAASC,gBAAgB,QAAQ,oBAAoB;AAErD,SAASC,iBAAiB,QAA2B,qBAAqB;AAC1E,SAASC,iBAAiB,QAAQ,qBAAqB;AACvD,SAASC,YAAY,QAAQ,gBAAgB;AAC7C,SACEC,kBAAkB,EAElBC,qBAAqB,QAEhB,sBAAsB","ignoreList":[]}
1
+ {"version":3,"names":["MODAL_OVERLAY_Z_INDEX","NOTIFICATION_OVERLAY_Z_INDEX","OverlayContainer","OverlayStackProvider","useOverlayStackRegistration","useAnchorPosition","useDismissOverlay","useEscapeKey","getAnchoredOverlayPosition","OVERLAY_PLACEMENTS","useAnchoredOverlay","useOverlayPosition","OverlayInsetsProvider"],"sourceRoot":"../../../src","sources":["overlay/index.ts"],"mappings":";;AAAA,SAASA,qBAAqB,EAAEC,4BAA4B,QAAQ,aAAa;AACjF,SAASC,gBAAgB,QAAQ,oBAAoB;AAErD,SACEC,oBAAoB,EACpBC,2BAA2B,QAMtB,gBAAgB;AACvB,SAASC,iBAAiB,QAA2B,qBAAqB;AAC1E,SAASC,iBAAiB,QAAQ,qBAAqB;AACvD,SAASC,YAAY,QAAQ,gBAAgB;AAC7C,SACEC,0BAA0B,EAC1BC,kBAAkB,QAUb,8BAA8B;AACrC,SACEC,kBAAkB,QAGb,sBAAsB;AAC7B,SACEC,kBAAkB,EAGlBC,qBAAqB,QAEhB,sBAAsB","ignoreList":[]}
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+
3
+ import { useCallback, useContext, useEffect, useMemo, useReducer, useRef, useState } from 'react';
4
+ import { I18nManager, Platform, useWindowDimensions } from 'react-native';
5
+ import { getAnchoredOverlayPosition } from './getAnchoredOverlayPosition';
6
+ import { useAnchorPosition } from './useAnchorPosition';
7
+ import { OverlayInsetsContext } from './useOverlayPosition';
8
+ const STAGING_STYLE = {
9
+ left: -10000,
10
+ opacity: 0,
11
+ pointerEvents: 'none',
12
+ position: 'absolute',
13
+ top: -10000
14
+ };
15
+ function setLayoutIfChanged(setLayout, next) {
16
+ setLayout(previous => {
17
+ if (previous?.width === next.width && previous.height === next.height) {
18
+ return previous;
19
+ }
20
+ return next;
21
+ });
22
+ }
23
+ export function useAnchoredOverlay(anchorRef, open, options = {}) {
24
+ const {
25
+ remeasureKey: externalRemeasureKey,
26
+ trackWhileOpen,
27
+ ...positionOptions
28
+ } = options;
29
+ const [revision, update] = useReducer(value => value + 1, 0);
30
+ const remeasureKey = useMemo(() => ({
31
+ externalRemeasureKey,
32
+ revision
33
+ }), [externalRemeasureKey, revision]);
34
+ const anchorLayout = useAnchorPosition(anchorRef, open, {
35
+ remeasureKey,
36
+ trackWhileOpen
37
+ });
38
+ const floatingRef = useRef(null);
39
+ const [floatingLayout, setFloatingLayout] = useState(null);
40
+ const viewport = useWindowDimensions();
41
+ const insets = useContext(OverlayInsetsContext);
42
+ const measureFloating = useCallback(() => {
43
+ const floating = floatingRef.current;
44
+ if (!floating) return;
45
+ if (Platform.OS === 'web' && typeof floating.getBoundingClientRect === 'function') {
46
+ const rect = floating.getBoundingClientRect();
47
+ setLayoutIfChanged(setFloatingLayout, {
48
+ width: rect.width,
49
+ height: rect.height
50
+ });
51
+ return;
52
+ }
53
+ if (typeof floating.measure === 'function') {
54
+ floating.measure((_x, _y, width, height) => {
55
+ setLayoutIfChanged(setFloatingLayout, {
56
+ width,
57
+ height
58
+ });
59
+ });
60
+ }
61
+ }, []);
62
+ const onFloatingLayout = useCallback(event => {
63
+ const {
64
+ width,
65
+ height
66
+ } = event.nativeEvent.layout;
67
+ setLayoutIfChanged(setFloatingLayout, {
68
+ width,
69
+ height
70
+ });
71
+ }, []);
72
+ const requestUpdate = useCallback(() => {
73
+ update();
74
+ measureFloating();
75
+ }, [measureFloating]);
76
+ useEffect(() => {
77
+ if (!open) {
78
+ setFloatingLayout(null);
79
+ return;
80
+ }
81
+ measureFloating();
82
+ }, [measureFloating, open, revision]);
83
+ useEffect(() => {
84
+ if (!open || Platform.OS !== 'web') return;
85
+ const floating = floatingRef.current;
86
+ const anchor = anchorRef.current;
87
+ const resizeObserver = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(() => {
88
+ requestUpdate();
89
+ });
90
+ if (floating) resizeObserver?.observe(floating);
91
+ if (anchor) resizeObserver?.observe(anchor);
92
+ const visualViewport = window.visualViewport;
93
+ visualViewport?.addEventListener('resize', requestUpdate);
94
+ visualViewport?.addEventListener('scroll', requestUpdate);
95
+ return () => {
96
+ resizeObserver?.disconnect();
97
+ visualViewport?.removeEventListener('resize', requestUpdate);
98
+ visualViewport?.removeEventListener('scroll', requestUpdate);
99
+ };
100
+ }, [anchorRef, open, requestUpdate]);
101
+ const position = useMemo(() => {
102
+ if (!anchorLayout || !floatingLayout) return null;
103
+ return getAnchoredOverlayPosition(anchorLayout, floatingLayout, viewport, {
104
+ ...positionOptions,
105
+ insets: positionOptions.insets ?? insets,
106
+ isRTL: positionOptions.isRTL ?? I18nManager.isRTL
107
+ });
108
+ }, [anchorLayout, floatingLayout, viewport, positionOptions, insets]);
109
+ const ready = position !== null;
110
+ const positionStyle = Platform.OS === 'web' ? 'fixed' : 'absolute';
111
+ return {
112
+ floatingRef,
113
+ onFloatingLayout,
114
+ style: ready ? {
115
+ position: positionStyle,
116
+ ...position.style
117
+ } : STAGING_STYLE,
118
+ position,
119
+ ready,
120
+ update: requestUpdate
121
+ };
122
+ }
123
+ //# sourceMappingURL=useAnchoredOverlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useContext","useEffect","useMemo","useReducer","useRef","useState","I18nManager","Platform","useWindowDimensions","getAnchoredOverlayPosition","useAnchorPosition","OverlayInsetsContext","STAGING_STYLE","left","opacity","pointerEvents","position","top","setLayoutIfChanged","setLayout","next","previous","width","height","useAnchoredOverlay","anchorRef","open","options","remeasureKey","externalRemeasureKey","trackWhileOpen","positionOptions","revision","update","value","anchorLayout","floatingRef","floatingLayout","setFloatingLayout","viewport","insets","measureFloating","floating","current","OS","getBoundingClientRect","rect","measure","_x","_y","onFloatingLayout","event","nativeEvent","layout","requestUpdate","anchor","resizeObserver","ResizeObserver","observe","visualViewport","window","addEventListener","disconnect","removeEventListener","isRTL","ready","positionStyle","style"],"sourceRoot":"../../../src","sources":["overlay/useAnchoredOverlay.ts"],"mappings":"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","ignoreList":[]}