@oxyhq/bloom 0.72.1 → 0.73.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 (151) hide show
  1. package/lib/commonjs/avatar-group/AvatarGroup.web.js +22 -21
  2. package/lib/commonjs/avatar-group/AvatarGroup.web.js.map +1 -1
  3. package/lib/commonjs/bottom-sheet/index.web.js +11 -6
  4. package/lib/commonjs/bottom-sheet/index.web.js.map +1 -1
  5. package/lib/commonjs/context-menu/index.web.js +20 -22
  6. package/lib/commonjs/context-menu/index.web.js.map +1 -1
  7. package/lib/commonjs/dialog/Dialog.js +66 -70
  8. package/lib/commonjs/dialog/Dialog.js.map +1 -1
  9. package/lib/commonjs/dialog/Dialog.web.js +49 -51
  10. package/lib/commonjs/dialog/Dialog.web.js.map +1 -1
  11. package/lib/commonjs/fonts/font-data.web.js +22 -0
  12. package/lib/commonjs/fonts/font-data.web.js.map +1 -0
  13. package/lib/commonjs/menu/index.web.js +15 -11
  14. package/lib/commonjs/menu/index.web.js.map +1 -1
  15. package/lib/commonjs/overlay/index.js +186 -39
  16. package/lib/commonjs/overlay/index.js.map +1 -1
  17. package/lib/commonjs/overlay/stack.js +170 -0
  18. package/lib/commonjs/overlay/stack.js.map +1 -0
  19. package/lib/commonjs/overlay/use-overlay-layer.js +37 -0
  20. package/lib/commonjs/overlay/use-overlay-layer.js.map +1 -0
  21. package/lib/commonjs/popover/index.web.js +31 -34
  22. package/lib/commonjs/popover/index.web.js.map +1 -1
  23. package/lib/commonjs/prompt-input/PromptInput.js +33 -29
  24. package/lib/commonjs/prompt-input/PromptInput.js.map +1 -1
  25. package/lib/commonjs/select/index.web.js +20 -22
  26. package/lib/commonjs/select/index.web.js.map +1 -1
  27. package/lib/commonjs/styles/z-index.js +33 -34
  28. package/lib/commonjs/styles/z-index.js.map +1 -1
  29. package/lib/commonjs/surfaces/SurfaceHost.js +3 -6
  30. package/lib/commonjs/surfaces/SurfaceHost.js.map +1 -1
  31. package/lib/commonjs/toast/ToastHost.js +9 -5
  32. package/lib/commonjs/toast/ToastHost.js.map +1 -1
  33. package/lib/commonjs/tooltip/index.js +9 -6
  34. package/lib/commonjs/tooltip/index.js.map +1 -1
  35. package/lib/commonjs/tooltip/index.web.js +8 -2
  36. package/lib/commonjs/tooltip/index.web.js.map +1 -1
  37. package/lib/commonjs/zoomable-image-gallery/ZoomableImageGallery.js +5 -5
  38. package/lib/commonjs/zoomable-image-gallery/ZoomableImageGallery.js.map +1 -1
  39. package/lib/module/avatar-group/AvatarGroup.web.js +21 -20
  40. package/lib/module/avatar-group/AvatarGroup.web.js.map +1 -1
  41. package/lib/module/bottom-sheet/index.web.js +11 -6
  42. package/lib/module/bottom-sheet/index.web.js.map +1 -1
  43. package/lib/module/context-menu/index.web.js +21 -23
  44. package/lib/module/context-menu/index.web.js.map +1 -1
  45. package/lib/module/dialog/Dialog.js +67 -71
  46. package/lib/module/dialog/Dialog.js.map +1 -1
  47. package/lib/module/dialog/Dialog.web.js +50 -52
  48. package/lib/module/dialog/Dialog.web.js.map +1 -1
  49. package/lib/module/fonts/font-data.web.js +18 -0
  50. package/lib/module/fonts/font-data.web.js.map +1 -0
  51. package/lib/module/menu/index.web.js +16 -12
  52. package/lib/module/menu/index.web.js.map +1 -1
  53. package/lib/module/overlay/index.js +152 -40
  54. package/lib/module/overlay/index.js.map +1 -1
  55. package/lib/module/overlay/stack.js +161 -0
  56. package/lib/module/overlay/stack.js.map +1 -0
  57. package/lib/module/overlay/use-overlay-layer.js +33 -0
  58. package/lib/module/overlay/use-overlay-layer.js.map +1 -0
  59. package/lib/module/popover/index.web.js +32 -34
  60. package/lib/module/popover/index.web.js.map +1 -1
  61. package/lib/module/prompt-input/PromptInput.js +33 -29
  62. package/lib/module/prompt-input/PromptInput.js.map +1 -1
  63. package/lib/module/select/index.web.js +21 -23
  64. package/lib/module/select/index.web.js.map +1 -1
  65. package/lib/module/styles/z-index.js +32 -30
  66. package/lib/module/styles/z-index.js.map +1 -1
  67. package/lib/module/surfaces/SurfaceHost.js +3 -6
  68. package/lib/module/surfaces/SurfaceHost.js.map +1 -1
  69. package/lib/module/toast/ToastHost.js +10 -6
  70. package/lib/module/toast/ToastHost.js.map +1 -1
  71. package/lib/module/tooltip/index.js +9 -6
  72. package/lib/module/tooltip/index.js.map +1 -1
  73. package/lib/module/tooltip/index.web.js +8 -2
  74. package/lib/module/tooltip/index.web.js.map +1 -1
  75. package/lib/module/zoomable-image-gallery/ZoomableImageGallery.js +5 -5
  76. package/lib/module/zoomable-image-gallery/ZoomableImageGallery.js.map +1 -1
  77. package/lib/typescript/commonjs/avatar-group/AvatarGroup.web.d.ts.map +1 -1
  78. package/lib/typescript/commonjs/bottom-sheet/index.web.d.ts.map +1 -1
  79. package/lib/typescript/commonjs/context-menu/index.web.d.ts.map +1 -1
  80. package/lib/typescript/commonjs/dialog/Dialog.d.ts.map +1 -1
  81. package/lib/typescript/commonjs/dialog/Dialog.web.d.ts.map +1 -1
  82. package/lib/typescript/commonjs/dialog/types.d.ts +0 -10
  83. package/lib/typescript/commonjs/dialog/types.d.ts.map +1 -1
  84. package/lib/typescript/commonjs/fonts/font-data.web.d.ts +5 -0
  85. package/lib/typescript/commonjs/fonts/font-data.web.d.ts.map +1 -0
  86. package/lib/typescript/commonjs/menu/index.web.d.ts.map +1 -1
  87. package/lib/typescript/commonjs/overlay/index.d.ts +47 -10
  88. package/lib/typescript/commonjs/overlay/index.d.ts.map +1 -1
  89. package/lib/typescript/commonjs/overlay/stack.d.ts +122 -0
  90. package/lib/typescript/commonjs/overlay/stack.d.ts.map +1 -0
  91. package/lib/typescript/commonjs/overlay/use-overlay-layer.d.ts +7 -0
  92. package/lib/typescript/commonjs/overlay/use-overlay-layer.d.ts.map +1 -0
  93. package/lib/typescript/commonjs/popover/index.web.d.ts.map +1 -1
  94. package/lib/typescript/commonjs/prompt-input/PromptInput.d.ts.map +1 -1
  95. package/lib/typescript/commonjs/select/index.web.d.ts.map +1 -1
  96. package/lib/typescript/commonjs/styles/z-index.d.ts +42 -29
  97. package/lib/typescript/commonjs/styles/z-index.d.ts.map +1 -1
  98. package/lib/typescript/commonjs/surfaces/SurfaceHost.d.ts.map +1 -1
  99. package/lib/typescript/commonjs/toast/ToastHost.d.ts.map +1 -1
  100. package/lib/typescript/commonjs/tooltip/index.d.ts.map +1 -1
  101. package/lib/typescript/commonjs/zoomable-image-gallery/ZoomableImageGallery.d.ts.map +1 -1
  102. package/lib/typescript/module/avatar-group/AvatarGroup.web.d.ts.map +1 -1
  103. package/lib/typescript/module/bottom-sheet/index.web.d.ts.map +1 -1
  104. package/lib/typescript/module/context-menu/index.web.d.ts.map +1 -1
  105. package/lib/typescript/module/dialog/Dialog.d.ts.map +1 -1
  106. package/lib/typescript/module/dialog/Dialog.web.d.ts.map +1 -1
  107. package/lib/typescript/module/dialog/types.d.ts +0 -10
  108. package/lib/typescript/module/dialog/types.d.ts.map +1 -1
  109. package/lib/typescript/module/fonts/font-data.web.d.ts +5 -0
  110. package/lib/typescript/module/fonts/font-data.web.d.ts.map +1 -0
  111. package/lib/typescript/module/menu/index.web.d.ts.map +1 -1
  112. package/lib/typescript/module/overlay/index.d.ts +47 -10
  113. package/lib/typescript/module/overlay/index.d.ts.map +1 -1
  114. package/lib/typescript/module/overlay/stack.d.ts +122 -0
  115. package/lib/typescript/module/overlay/stack.d.ts.map +1 -0
  116. package/lib/typescript/module/overlay/use-overlay-layer.d.ts +7 -0
  117. package/lib/typescript/module/overlay/use-overlay-layer.d.ts.map +1 -0
  118. package/lib/typescript/module/popover/index.web.d.ts.map +1 -1
  119. package/lib/typescript/module/prompt-input/PromptInput.d.ts.map +1 -1
  120. package/lib/typescript/module/select/index.web.d.ts.map +1 -1
  121. package/lib/typescript/module/styles/z-index.d.ts +42 -29
  122. package/lib/typescript/module/styles/z-index.d.ts.map +1 -1
  123. package/lib/typescript/module/surfaces/SurfaceHost.d.ts.map +1 -1
  124. package/lib/typescript/module/toast/ToastHost.d.ts.map +1 -1
  125. package/lib/typescript/module/tooltip/index.d.ts.map +1 -1
  126. package/lib/typescript/module/zoomable-image-gallery/ZoomableImageGallery.d.ts.map +1 -1
  127. package/package.json +2 -1
  128. package/src/__tests__/ToastHostWebFork.test.ts +11 -3
  129. package/src/__tests__/backdrop-nesting.test.tsx +95 -0
  130. package/src/__tests__/overlay-stack-order.test.tsx +270 -0
  131. package/src/avatar-group/AvatarGroup.web.tsx +35 -31
  132. package/src/bottom-sheet/index.web.tsx +10 -5
  133. package/src/context-menu/index.web.tsx +33 -30
  134. package/src/dialog/Dialog.tsx +9 -18
  135. package/src/dialog/Dialog.web.tsx +62 -60
  136. package/src/dialog/types.ts +0 -10
  137. package/src/fonts/font-data.web.ts +15 -0
  138. package/src/menu/index.web.tsx +33 -22
  139. package/src/overlay/OverlayStacking.stories.tsx +207 -0
  140. package/src/overlay/index.tsx +161 -40
  141. package/src/overlay/stack.ts +166 -0
  142. package/src/overlay/use-overlay-layer.ts +39 -0
  143. package/src/popover/index.web.tsx +47 -44
  144. package/src/prompt-input/PromptInput.tsx +36 -29
  145. package/src/select/index.web.tsx +35 -32
  146. package/src/styles/z-index.ts +32 -34
  147. package/src/surfaces/SurfaceHost.tsx +3 -10
  148. package/src/toast/ToastHost.tsx +9 -6
  149. package/src/tooltip/index.tsx +14 -7
  150. package/src/tooltip/index.web.tsx +8 -2
  151. package/src/zoomable-image-gallery/ZoomableImageGallery.tsx +4 -4
@@ -0,0 +1 @@
1
+ {"version":3,"names":["blomusModernusRegular","blomusModernusBold","interVariable","geistMonoVariable"],"sourceRoot":"../../../src","sources":["fonts/font-data.web.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,MAAMA,qBAA6B,GAAG,ioqGAAioqG;AAC9qqG,OAAO,MAAMC,kBAA0B,GAAG,qlqGAAqlqG;AAC/nqG,OAAO,MAAMC,aAAqB,GAAG,i39DAAi39D;AACt59D,OAAO,MAAMC,iBAAyB,GAAG,i9tCAAi9tC","ignoreList":[]}
@@ -4,15 +4,15 @@ import React, { useCallback, useEffect, useId, useLayoutEffect, useMemo, useRef,
4
4
  import { Pressable, StyleSheet, View } from 'react-native';
5
5
  import { useTheme } from "../theme/use-theme.js";
6
6
  import { Text } from "../typography/index.js";
7
+ import { OverlayRoot } from "../overlay/index.js";
7
8
  import { Portal } from "../portal/index.web.js";
8
- import { createDropdownZIndex } from "../styles/z-index.js";
9
+ import { Z_INDEX } from "../styles/z-index.js";
9
10
  import { WEB_POSITION_FIXED } from "../styles/web-view-style.js";
10
11
  import { resolveDropdownPlacement } from "../overlay/dropdown-placement.js";
11
12
  import { bloomShadowStyle } from '../design-tokens/shadows';
12
13
  import { MenuContext, ItemContext, useMenuContext, useMenuItemContext } from "./context.js";
13
14
  import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
14
15
  export { useMenuContext };
15
- const menuZIndex = createDropdownZIndex();
16
16
  const VIEWPORT_GUTTER = 8;
17
17
  const MENU_OFFSET = 6;
18
18
  export function useMenuControl() {
@@ -201,14 +201,16 @@ export function MenuContent({
201
201
  return null;
202
202
  }
203
203
  return /*#__PURE__*/_jsx(Portal, {
204
- children: /*#__PURE__*/_jsx(View, {
205
- ref: attachDropdown,
206
- style: [styles.dropdown, {
207
- backgroundColor: theme.isDark ? theme.colors.backgroundSecondary : theme.colors.background,
208
- borderColor: theme.colors.borderLight,
209
- ...bloomShadowStyle('m')
210
- }, style, styles.portaledDropdown, position],
211
- children: children
204
+ children: /*#__PURE__*/_jsx(OverlayRoot, {
205
+ children: /*#__PURE__*/_jsx(View, {
206
+ ref: attachDropdown,
207
+ style: [styles.dropdown, {
208
+ backgroundColor: theme.isDark ? theme.colors.backgroundSecondary : theme.colors.background,
209
+ borderColor: theme.colors.borderLight,
210
+ ...bloomShadowStyle('m')
211
+ }, style, styles.portaledDropdown, position],
212
+ children: children
213
+ })
212
214
  })
213
215
  });
214
216
  }
@@ -308,7 +310,10 @@ const styles = StyleSheet.create({
308
310
  position: 'relative'
309
311
  },
310
312
  openRoot: {
311
- zIndex: menuZIndex.root
313
+ // The INLINE trigger wrapper, still in the app's own document flow — this
314
+ // only lifts it over adjacent in-flow content while the menu is open. The
315
+ // portaled dropdown's depth is the overlay stack's business, not this.
316
+ zIndex: Z_INDEX.dropdown
312
317
  },
313
318
  dropdown: {
314
319
  // Fixed from the outset, not only once positioned: the `Portal` root is a
@@ -323,7 +328,6 @@ const styles = StyleSheet.create({
323
328
  padding: 4,
324
329
  borderWidth: 1,
325
330
  overflow: 'hidden',
326
- zIndex: menuZIndex.surface,
327
331
  // Overlay elevation applied at the usage site via `bloomShadowStyle('m')`.
328
332
  minWidth: 180
329
333
  },
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useEffect","useId","useLayoutEffect","useMemo","useRef","useState","Pressable","StyleSheet","View","useTheme","Text","Portal","createDropdownZIndex","WEB_POSITION_FIXED","resolveDropdownPlacement","bloomShadowStyle","MenuContext","ItemContext","useMenuContext","useMenuItemContext","jsx","_jsx","Fragment","_Fragment","menuZIndex","VIEWPORT_GUTTER","MENU_OFFSET","useMenuControl","id","isOpen","setIsOpen","open","close","useMenuControlAsDialogControl","menuControl","ref","dialogControl","cb","Menu","children","control","defaultControl","activeControl","rootRef","triggerRef","dropdownRef","context","document","undefined","handlePointerDown","event","rootNode","current","dropdownNode","eventTarget","target","contains","handleKeyDown","key","addEventListener","removeEventListener","Provider","value","style","styles","root","openRoot","MenuTrigger","label","role","hint","hovered","setHovered","focused","setFocused","state","pressed","props","onPress","onFocus","onBlur","accessibilityHint","accessibilityLabel","accessibilityRole","MenuContent","theme","position","setPosition","setDropdownNode","attachDropdown","node","window","triggerNode","getBoundingClientRect","updatePosition","rect","surface","width","Math","max","anchor","size","height","viewport","innerWidth","innerHeight","offset","gutter","align","right","bottom","minWidth","dropdown","backgroundColor","isDark","colors","backgroundSecondary","background","borderColor","borderLight","portaledDropdown","MenuItem","rest","handlePress","e","defaultPrevented","isDisabled","Boolean","disabled","isHighlighted","itemContextValue","onMouseEnter","onMouseLeave","webItem","contrast50","MenuItemText","webItemText","color","textTertiary","text","MenuItemIcon","icon","Comp","fill","iconLeft","iconRight","textSecondary","MenuGroup","MenuDivider","divider","create","zIndex","top","left","borderRadius","padding","borderWidth","overflow","pointerEvents","flexDirection","alignItems","gap","paddingVertical","paddingHorizontal","minHeight","flex","fontWeight","marginLeft","marginRight","marginVertical"],"sourceRoot":"../../../src","sources":["menu/index.web.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useCallback","useEffect","useId","useLayoutEffect","useMemo","useRef","useState","Pressable","StyleSheet","View","useTheme","Text","OverlayRoot","Portal","Z_INDEX","WEB_POSITION_FIXED","resolveDropdownPlacement","bloomShadowStyle","MenuContext","ItemContext","useMenuContext","useMenuItemContext","jsx","_jsx","Fragment","_Fragment","VIEWPORT_GUTTER","MENU_OFFSET","useMenuControl","id","isOpen","setIsOpen","open","close","useMenuControlAsDialogControl","menuControl","ref","dialogControl","cb","Menu","children","control","defaultControl","activeControl","rootRef","triggerRef","dropdownRef","context","document","undefined","handlePointerDown","event","rootNode","current","dropdownNode","eventTarget","target","contains","handleKeyDown","key","addEventListener","removeEventListener","Provider","value","style","styles","root","openRoot","MenuTrigger","label","role","hint","hovered","setHovered","focused","setFocused","state","pressed","props","onPress","onFocus","onBlur","accessibilityHint","accessibilityLabel","accessibilityRole","MenuContent","theme","position","setPosition","setDropdownNode","attachDropdown","node","window","triggerNode","getBoundingClientRect","updatePosition","rect","surface","width","Math","max","anchor","size","height","viewport","innerWidth","innerHeight","offset","gutter","align","right","bottom","minWidth","dropdown","backgroundColor","isDark","colors","backgroundSecondary","background","borderColor","borderLight","portaledDropdown","MenuItem","rest","handlePress","e","defaultPrevented","isDisabled","Boolean","disabled","isHighlighted","itemContextValue","onMouseEnter","onMouseLeave","webItem","contrast50","MenuItemText","webItemText","color","textTertiary","text","MenuItemIcon","icon","Comp","fill","iconLeft","iconRight","textSecondary","MenuGroup","MenuDivider","divider","create","zIndex","top","left","borderRadius","padding","borderWidth","overflow","pointerEvents","flexDirection","alignItems","gap","paddingVertical","paddingHorizontal","minHeight","flex","fontWeight","marginLeft","marginRight","marginVertical"],"sourceRoot":"../../../src","sources":["menu/index.web.tsx"],"mappings":"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","ignoreList":[]}
@@ -41,14 +41,33 @@
41
41
  * Use `<OverlayRoot>` for the surface's outermost node and `<Backdrop>` for its
42
42
  * dimming layer; do not re-implement either with raw `View`s.
43
43
  */
44
- import { memo } from 'react';
44
+ import { createContext, memo, useContext, useMemo } from 'react';
45
45
  import { BlurView } from 'expo-blur';
46
46
  import { Platform, Pressable, StyleSheet, View } from 'react-native';
47
47
  import Animated, { useAnimatedStyle } from 'react-native-reanimated';
48
48
  import { WEB_POSITION_FIXED } from "../styles/web-view-style.js";
49
+ import { layerForRank } from "./stack.js";
50
+ import { useOverlayLayer } from "./use-overlay-layer.js";
49
51
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
50
52
  const AnimatedBlurView = Animated.createAnimatedComponent(BlurView);
51
53
 
54
+ /**
55
+ * The z-indices of the nearest enclosing `OverlayRoot`. Descendants that order
56
+ * themselves within a surface (a dialog's panel above its own backdrop) read
57
+ * this instead of picking their own numbers.
58
+ *
59
+ * The default is the first rank rather than 0, so a surface part rendered
60
+ * outside any `OverlayRoot` still lands in the overlay band instead of behind
61
+ * the app.
62
+ */
63
+ const OverlayLayerContext = /*#__PURE__*/createContext(layerForRank(1));
64
+ OverlayLayerContext.displayName = 'BloomOverlayLayerContext';
65
+
66
+ /** Z-indices of the enclosing overlay surface. See `OverlayRoot`. */
67
+ export function useOverlayLayerContext() {
68
+ return useContext(OverlayLayerContext);
69
+ }
70
+
52
71
  /**
53
72
  * One blur radius for every Bloom overlay. Surfaces differ in what they show,
54
73
  * not in how the app behind them recedes.
@@ -64,28 +83,110 @@ export const BACKDROP_BLUR_INTENSITY = 80;
64
83
  */
65
84
  export const BACKDROP_DIM_OPACITY = 0.28;
66
85
  /**
67
- * Outermost node of a portaled surface. Fills the viewport and re-enables
68
- * pointer events for its own children while empty gaps stay click-through
69
- * (`box-none`), so a surface that only covers part of the screen never steals
70
- * clicks from the app behind it.
86
+ * Outermost node of a portaled surface. Three jobs:
87
+ *
88
+ * - Fills the viewport.
89
+ * - Re-enables pointer events for its own children while empty gaps stay
90
+ * click-through (`box-none`), so a surface that only covers part of the
91
+ * screen never steals clicks from the app behind it.
92
+ * - Takes this surface's place in the overlay stack, so a surface opened later
93
+ * paints above one opened earlier (see `./stack.ts`).
94
+ *
95
+ * Because the rank is taken on MOUNT, this must be rendered inside whatever
96
+ * guard makes the surface appear (`if (!isOpen) return null`), which is where
97
+ * every Bloom surface already puts it. Descendants that need to order
98
+ * themselves within the surface read `useOverlayLayerContext()`.
71
99
  */
72
100
  export function OverlayRoot({
101
+ children,
102
+ style,
103
+ testID,
104
+ zIndex
105
+ }) {
106
+ // Split into two components rather than branching on the hook: a pinned root
107
+ // must not CONSUME a rank either. The toast host is pinned and mounts for the
108
+ // whole life of the app, so holding a rank would keep the live set permanently
109
+ // non-empty — the counter would never reset and depths would climb for the
110
+ // rest of the session.
111
+ return zIndex === undefined ? /*#__PURE__*/_jsx(StackedOverlayRoot, {
112
+ style: style,
113
+ testID: testID,
114
+ children: children
115
+ }) : /*#__PURE__*/_jsx(PinnedOverlayRoot, {
116
+ zIndex: zIndex,
117
+ style: style,
118
+ testID: testID,
119
+ children: children
120
+ });
121
+ }
122
+ function StackedOverlayRoot({
73
123
  children,
74
124
  style,
75
125
  testID
76
126
  }) {
77
- return /*#__PURE__*/_jsx(View, {
78
- pointerEvents: "box-none",
79
- style: [styles.root, style],
127
+ const layer = useOverlayLayer();
128
+ return /*#__PURE__*/_jsx(OverlayRootView, {
129
+ layer: layer,
130
+ style: style,
80
131
  testID: testID,
81
132
  children: children
82
133
  });
83
134
  }
135
+ function PinnedOverlayRoot({
136
+ children,
137
+ style,
138
+ testID,
139
+ zIndex
140
+ }) {
141
+ // Outside the stack, so descendants must not read stack depths from it
142
+ // either — every slot is the pinned depth.
143
+ const layer = useMemo(() => ({
144
+ root: zIndex,
145
+ backdrop: zIndex,
146
+ surface: zIndex
147
+ }), [zIndex]);
148
+ return /*#__PURE__*/_jsx(OverlayRootView, {
149
+ layer: layer,
150
+ style: style,
151
+ testID: testID,
152
+ children: children
153
+ });
154
+ }
155
+ function OverlayRootView({
156
+ children,
157
+ style,
158
+ testID,
159
+ layer
160
+ }) {
161
+ return /*#__PURE__*/_jsx(OverlayLayerContext.Provider, {
162
+ value: layer,
163
+ children: /*#__PURE__*/_jsx(View, {
164
+ pointerEvents: "box-none",
165
+ style: [styles.root, {
166
+ zIndex: layer.root
167
+ }, style],
168
+ testID: testID,
169
+ children: children
170
+ })
171
+ });
172
+ }
84
173
  OverlayRoot.displayName = 'OverlayRoot';
85
174
  /**
86
- * Full-bleed blur + dim that dismisses the surface when pressed. Always takes
87
- * pointer events (that is its whole job), so anything that must stay pressable
88
- * goes INSIDE it as `children`, never as a sibling rendered over it.
175
+ * Full-bleed blur + dim that dismisses the surface when pressed.
176
+ *
177
+ * The dismiss target is a hit box that fills this component and sits BEHIND
178
+ * `children`, never around them. It used to wrap them, which read fine on
179
+ * native but is invalid on web: the hit box carries `accessibilityRole="button"`,
180
+ * so react-native-web renders it as a real `<button>` — and every control inside
181
+ * any Bloom surface (a dialog's own buttons, a menu's rows) became a nested
182
+ * `<button>`. React reports that as a hydration error, and the nested control's
183
+ * activation behaviour is undefined per the HTML spec.
184
+ *
185
+ * Hit testing is unchanged: the hit box still covers the whole area, `children`
186
+ * render above it and take their own presses, and a press that lands on empty
187
+ * space falls through to the hit box. Layout styles passed via `style` stay on
188
+ * the outer box, so a caller that centres its panel with this component (the
189
+ * centred dialog) keeps doing so.
89
190
  */
90
191
  export const Backdrop = /*#__PURE__*/memo(function Backdrop({
91
192
  onPress,
@@ -127,35 +228,44 @@ export const Backdrop = /*#__PURE__*/memo(function Backdrop({
127
228
  const dimFade = useAnimatedStyle(() => ({
128
229
  opacity: (progress ? progress.value : 1) * staticOpacity * dimOpacity
129
230
  }), [progress, staticOpacity, dimOpacity]);
130
- return /*#__PURE__*/_jsxs(Pressable, {
131
- pointerEvents: "auto",
132
- onPress: inert ? undefined : onPress,
133
- disabled: inert
134
- // A dimming layer is not a focus stop on web: Escape and the panel's own
135
- // controls are the keyboard paths out. It stays labelled for screen
136
- // readers that surface it as the dismiss affordance.
137
- ,
138
- focusable: false,
139
- accessibilityRole: inert ? undefined : 'button',
140
- accessibilityLabel: inert ? undefined : accessibilityLabel,
141
- testID: testID,
142
- style: [StyleSheet.absoluteFill, rootStyle],
143
- children: [blurIntensity > 0 ? /*#__PURE__*/_jsx(AnimatedBlurView, {
144
- intensity: blurIntensity,
145
- tint: blurTint
146
- // Android's default blur is a no-op on many devices; this is the
147
- // implementation that actually renders there.
148
- ,
149
- experimentalBlurMethod: "dimezisBlurView",
150
- pointerEvents: "none",
151
- style: [StyleSheet.absoluteFill, layerStyle, blurFade]
152
- }) : null, /*#__PURE__*/_jsx(Animated.View, {
153
- pointerEvents: "none",
154
- style: [StyleSheet.absoluteFill, {
155
- backgroundColor: resolvedDimColor
156
- }, layerStyle, dimFade]
157
- }), children]
158
- });
231
+ return (
232
+ /*#__PURE__*/
233
+ // `box-none` so this box never takes a press itself: the hit box below and
234
+ // `children` above are what receive them.
235
+ _jsxs(View, {
236
+ pointerEvents: "box-none",
237
+ style: [StyleSheet.absoluteFill, rootStyle],
238
+ children: [/*#__PURE__*/_jsxs(Pressable, {
239
+ pointerEvents: "auto",
240
+ onPress: inert ? undefined : onPress,
241
+ disabled: inert
242
+ // A dimming layer is not a focus stop on web: Escape and the panel's own
243
+ // controls are the keyboard paths out. It stays labelled for screen
244
+ // readers that surface it as the dismiss affordance.
245
+ ,
246
+ focusable: false,
247
+ accessibilityRole: inert ? undefined : 'button',
248
+ accessibilityLabel: inert ? undefined : accessibilityLabel,
249
+ testID: testID,
250
+ style: StyleSheet.absoluteFill,
251
+ children: [blurIntensity > 0 ? /*#__PURE__*/_jsx(AnimatedBlurView, {
252
+ intensity: blurIntensity,
253
+ tint: blurTint
254
+ // Android's default blur is a no-op on many devices; this is the
255
+ // implementation that actually renders there.
256
+ ,
257
+ experimentalBlurMethod: "dimezisBlurView",
258
+ pointerEvents: "none",
259
+ style: [StyleSheet.absoluteFill, layerStyle, blurFade]
260
+ }) : null, /*#__PURE__*/_jsx(Animated.View, {
261
+ pointerEvents: "none",
262
+ style: [StyleSheet.absoluteFill, {
263
+ backgroundColor: resolvedDimColor
264
+ }, layerStyle, dimFade]
265
+ })]
266
+ }), children]
267
+ })
268
+ );
159
269
  });
160
270
  Backdrop.displayName = 'Backdrop';
161
271
  const styles = StyleSheet.create({
@@ -172,4 +282,6 @@ const styles = StyleSheet.create({
172
282
  bottom: 0
173
283
  }
174
284
  });
285
+ export { layerForRank, OVERLAY_STACK_BAND, OVERLAY_STACK_BASE, OVERLAY_STACK_MAX_RANK, TOAST_LAYER_Z } from "./stack.js";
286
+ export { useOverlayLayer } from "./use-overlay-layer.js";
175
287
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["memo","BlurView","Platform","Pressable","StyleSheet","View","Animated","useAnimatedStyle","WEB_POSITION_FIXED","jsx","_jsx","jsxs","_jsxs","AnimatedBlurView","createAnimatedComponent","BACKDROP_BLUR_INTENSITY","BACKDROP_DIM_OPACITY","OverlayRoot","children","style","testID","pointerEvents","styles","root","displayName","Backdrop","onPress","progress","disabled","blurIntensity","blurTint","dimColor","dimOpacity","layerStyle","accessibilityLabel","inert","flat","flatten","opacity","styleOpacity","backgroundColor","styleBackground","rootStyle","staticOpacity","resolvedDimColor","blurFade","value","dimFade","undefined","focusable","accessibilityRole","absoluteFill","intensity","tint","experimentalBlurMethod","create","position","OS","top","left","right","bottom"],"sourceRoot":"../../../src","sources":["overlay/index.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["createContext","memo","useContext","useMemo","BlurView","Platform","Pressable","StyleSheet","View","Animated","useAnimatedStyle","WEB_POSITION_FIXED","layerForRank","useOverlayLayer","jsx","_jsx","jsxs","_jsxs","AnimatedBlurView","createAnimatedComponent","OverlayLayerContext","displayName","useOverlayLayerContext","BACKDROP_BLUR_INTENSITY","BACKDROP_DIM_OPACITY","OverlayRoot","children","style","testID","zIndex","undefined","StackedOverlayRoot","PinnedOverlayRoot","layer","OverlayRootView","root","backdrop","surface","Provider","value","pointerEvents","styles","Backdrop","onPress","progress","disabled","blurIntensity","blurTint","dimColor","dimOpacity","layerStyle","accessibilityLabel","inert","flat","flatten","opacity","styleOpacity","backgroundColor","styleBackground","rootStyle","staticOpacity","resolvedDimColor","blurFade","dimFade","absoluteFill","focusable","accessibilityRole","intensity","tint","experimentalBlurMethod","create","position","OS","top","left","right","bottom","OVERLAY_STACK_BAND","OVERLAY_STACK_BASE","OVERLAY_STACK_MAX_RANK","TOAST_LAYER_Z"],"sourceRoot":"../../../src","sources":["overlay/index.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * The overlay stacking authority.
5
+ *
6
+ * ## The rule
7
+ *
8
+ * An overlay opened LATER paints above one opened earlier. That is the whole
9
+ * contract, and it is decided here, once, for every Bloom overlay surface —
10
+ * never by a per-component constant.
11
+ *
12
+ * ## Why this module exists
13
+ *
14
+ * Stacking used to be a set of hand-picked rungs on a shared scale: menus at
15
+ * 40, dialogs at 50/60, tooltips at 70, sheets at 999999. Because those numbers
16
+ * are fixed per COMPONENT KIND, the answer to "which surface is on top" was
17
+ * decided by what each surface WAS rather than by when the user opened it — so
18
+ * some pairings were permanently inverted no matter the order:
19
+ *
20
+ * - A confirm dialog (50/60) opened from inside an open bottom sheet (999999)
21
+ * rendered fully, interactively, and completely underneath the sheet. It
22
+ * could be neither pressed nor dismissed.
23
+ * - A menu (40/41) opened from inside a dialog (50/60) landed behind the very
24
+ * dialog that launched it.
25
+ *
26
+ * Both failed silently: correct markup, correct styles, nothing in the console.
27
+ * Only a hit test in a real browser tells the difference, which is why
28
+ * `scripts/verify-overlay-stacking.mjs` exists alongside the unit tests here.
29
+ *
30
+ * ## How a rank is acquired
31
+ *
32
+ * `useOverlayLayer()` takes a rank on MOUNT and releases it on unmount, so the
33
+ * caller must be a component that mounts when the surface OPENS — which is how
34
+ * every Bloom surface is already built (`Dialog.web` returns null while closed;
35
+ * `BottomSheetBase` returns null until `rendered`). Acquiring per mount, in a
36
+ * `useState` initializer, is what makes the rank correct on the surface's FIRST
37
+ * paint: an effect-assigned z would leave one frame at the wrong depth, which
38
+ * on a 200ms fade-in is a visible flash of the surface behind its neighbour.
39
+ *
40
+ * It also keeps the acquisition out of any position the React Compiler may
41
+ * memoize. A counter read during render is exactly the external-mutable-state
42
+ * hazard the compiler mangles; a state initializer is not memoizable that way.
43
+ * (React StrictMode double-invokes initializers in development, so a rank can
44
+ * be consumed and dropped. That is harmless: only the ORDER of the numbers
45
+ * matters, never their density.)
46
+ *
47
+ * ## Toasts are deliberately not in this stack
48
+ *
49
+ * A toast is a notification, not a modal surface: it must stay visible over
50
+ * whatever is open, including a surface opened after it. It is pinned above the
51
+ * whole stack at `TOAST_LAYER_Z` instead of taking a rank. (Under the old
52
+ * scale a toast at 80 was already lost behind any open bottom sheet at 999999.)
53
+ */
54
+
55
+ /**
56
+ * First z-index handed to an overlay. Comfortably above app content while
57
+ * staying far below `TOAST_LAYER_Z`.
58
+ */
59
+ export const OVERLAY_STACK_BASE = 1000;
60
+
61
+ /**
62
+ * Z-index distance between consecutive overlays. A surface owns its whole band,
63
+ * so it can order its own parts (backdrop, panel, a floating control) without
64
+ * ever reaching the next surface's floor.
65
+ */
66
+ export const OVERLAY_STACK_BAND = 10;
67
+
68
+ /**
69
+ * Ceiling on simultaneously open overlays. Beyond this, ranks saturate and the
70
+ * topmost surfaces tie (falling back to DOM order) rather than climbing into
71
+ * the toast layer. Nothing in the ecosystem stacks remotely this deep; the
72
+ * clamp exists so a runaway caller degrades instead of breaking the toast
73
+ * layer's guarantee.
74
+ */
75
+ export const OVERLAY_STACK_MAX_RANK = 500;
76
+
77
+ /**
78
+ * The toast layer, pinned above every overlay rank (see the note above on why
79
+ * toasts are not part of the stack).
80
+ */
81
+ export const TOAST_LAYER_Z = OVERLAY_STACK_BASE + OVERLAY_STACK_BAND * (OVERLAY_STACK_MAX_RANK + 1);
82
+
83
+ /** The z-indices one overlay surface may use, all within its own band. */
84
+
85
+ /**
86
+ * Registry state.
87
+ *
88
+ * `sequence` only ever moves forward while anything is open, which is what
89
+ * guarantees the ordering. It resets once the last overlay closes so the
90
+ * numbers stay small over a long session.
91
+ */
92
+
93
+ /**
94
+ * `globalThis`-anchored, for the same reason as the portal group and the theme
95
+ * context: `exports` ships a `react-native` → `src` condition beside the
96
+ * `lib/module` and `lib/commonjs` forks, and overlay surfaces are imported
97
+ * cross-subpath (`./dialog`, `./bottom-sheet`, `./menu`, `./select`, …). A
98
+ * bundler can resolve those through different conditions, and two physical
99
+ * copies of this module would each run their own counter — handing out
100
+ * colliding ranks and reintroducing exactly the bug this module removes.
101
+ */
102
+ function registry() {
103
+ globalThis.__oxyhq_bloom_overlay_stack__ ??= {
104
+ sequence: 0,
105
+ live: new Set()
106
+ };
107
+ return globalThis.__oxyhq_bloom_overlay_stack__;
108
+ }
109
+
110
+ /** Z-indices for a given rank. Exported for tests and for the native surfaces. */
111
+ export function layerForRank(rank) {
112
+ const clamped = Math.min(Math.max(rank, 1), OVERLAY_STACK_MAX_RANK);
113
+ const root = OVERLAY_STACK_BASE + OVERLAY_STACK_BAND * clamped;
114
+ return {
115
+ root,
116
+ backdrop: root,
117
+ surface: root + 1
118
+ };
119
+ }
120
+
121
+ /**
122
+ * Take the next rank. Exported for tests; components use `useOverlayLayer`.
123
+ */
124
+ export function acquireOverlayRank() {
125
+ const reg = registry();
126
+ reg.sequence += 1;
127
+ return reg.sequence;
128
+ }
129
+
130
+ /**
131
+ * Mark a rank as live. Called from an effect, which React balances against
132
+ * `releaseOverlayRank` even under StrictMode's mount/unmount/remount.
133
+ *
134
+ * It also re-floors `sequence` to at least this rank. That closes the only race
135
+ * the reset below could otherwise open: a surface takes rank N during render,
136
+ * and before its effect runs, the last previously-open surface unmounts and
137
+ * resets the counter to 0 — the next surface would then take rank 1 and sit
138
+ * BELOW the one still coming up at N. Re-flooring on register makes the reset
139
+ * unable to lose a rank that has been handed out.
140
+ */
141
+ export function registerOverlayRank(rank) {
142
+ const reg = registry();
143
+ reg.live.add(rank);
144
+ if (rank > reg.sequence) reg.sequence = rank;
145
+ }
146
+
147
+ /** Release a rank; resets the counter once nothing is open. */
148
+ export function releaseOverlayRank(rank) {
149
+ const reg = registry();
150
+ reg.live.delete(rank);
151
+ if (reg.live.size === 0) reg.sequence = 0;
152
+ }
153
+
154
+ /** Test seam — drops all registry state. */
155
+ export function resetOverlayStack() {
156
+ globalThis.__oxyhq_bloom_overlay_stack__ = {
157
+ sequence: 0,
158
+ live: new Set()
159
+ };
160
+ }
161
+ //# sourceMappingURL=stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["OVERLAY_STACK_BASE","OVERLAY_STACK_BAND","OVERLAY_STACK_MAX_RANK","TOAST_LAYER_Z","registry","globalThis","__oxyhq_bloom_overlay_stack__","sequence","live","Set","layerForRank","rank","clamped","Math","min","max","root","backdrop","surface","acquireOverlayRank","reg","registerOverlayRank","add","releaseOverlayRank","delete","size","resetOverlayStack"],"sourceRoot":"../../../src","sources":["overlay/stack.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,MAAMA,kBAAkB,GAAG,IAAI;;AAEtC;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,kBAAkB,GAAG,EAAE;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,sBAAsB,GAAG,GAAG;;AAEzC;AACA;AACA;AACA;AACA,OAAO,MAAMC,aAAa,GACxBH,kBAAkB,GAAGC,kBAAkB,IAAIC,sBAAsB,GAAG,CAAC,CAAC;;AAExE;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASE,QAAQA,CAAA,EAAa;EAC5BC,UAAU,CAACC,6BAA6B,KAAK;IAAEC,QAAQ,EAAE,CAAC;IAAEC,IAAI,EAAE,IAAIC,GAAG,CAAC;EAAE,CAAC;EAC7E,OAAOJ,UAAU,CAACC,6BAA6B;AACjD;;AAEA;AACA,OAAO,SAASI,YAAYA,CAACC,IAAY,EAAgB;EACvD,MAAMC,OAAO,GAAGC,IAAI,CAACC,GAAG,CAACD,IAAI,CAACE,GAAG,CAACJ,IAAI,EAAE,CAAC,CAAC,EAAET,sBAAsB,CAAC;EACnE,MAAMc,IAAI,GAAGhB,kBAAkB,GAAGC,kBAAkB,GAAGW,OAAO;EAC9D,OAAO;IAAEI,IAAI;IAAEC,QAAQ,EAAED,IAAI;IAAEE,OAAO,EAAEF,IAAI,GAAG;EAAE,CAAC;AACpD;;AAEA;AACA;AACA;AACA,OAAO,SAASG,kBAAkBA,CAAA,EAAW;EAC3C,MAAMC,GAAG,GAAGhB,QAAQ,CAAC,CAAC;EACtBgB,GAAG,CAACb,QAAQ,IAAI,CAAC;EACjB,OAAOa,GAAG,CAACb,QAAQ;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASc,mBAAmBA,CAACV,IAAY,EAAQ;EACtD,MAAMS,GAAG,GAAGhB,QAAQ,CAAC,CAAC;EACtBgB,GAAG,CAACZ,IAAI,CAACc,GAAG,CAACX,IAAI,CAAC;EAClB,IAAIA,IAAI,GAAGS,GAAG,CAACb,QAAQ,EAAEa,GAAG,CAACb,QAAQ,GAAGI,IAAI;AAC9C;;AAEA;AACA,OAAO,SAASY,kBAAkBA,CAACZ,IAAY,EAAQ;EACrD,MAAMS,GAAG,GAAGhB,QAAQ,CAAC,CAAC;EACtBgB,GAAG,CAACZ,IAAI,CAACgB,MAAM,CAACb,IAAI,CAAC;EACrB,IAAIS,GAAG,CAACZ,IAAI,CAACiB,IAAI,KAAK,CAAC,EAAEL,GAAG,CAACb,QAAQ,GAAG,CAAC;AAC3C;;AAEA;AACA,OAAO,SAASmB,iBAAiBA,CAAA,EAAS;EACxCrB,UAAU,CAACC,6BAA6B,GAAG;IAAEC,QAAQ,EAAE,CAAC;IAAEC,IAAI,EAAE,IAAIC,GAAG,CAAC;EAAE,CAAC;AAC7E","ignoreList":[]}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * `useOverlayLayer` — the hook every Bloom overlay surface stacks with.
5
+ *
6
+ * See `./stack.ts` for the rule and the reasoning. The contract for callers is
7
+ * one line: **call this from a component that mounts when the surface OPENS**,
8
+ * not from one that stays mounted while it is closed. Every Bloom surface is
9
+ * already shaped that way (`Dialog.web` returns null while closed;
10
+ * `BottomSheetBase` returns null until `rendered`), and `OverlayRoot` — which
11
+ * lives inside those guards — is where the call actually sits for most of them.
12
+ */
13
+ import { useEffect, useState } from 'react';
14
+ import { acquireOverlayRank, layerForRank, registerOverlayRank, releaseOverlayRank } from "./stack.js";
15
+
16
+ /**
17
+ * Reserve this surface's place in the overlay stack for as long as it is
18
+ * mounted. Returns the z-indices it should paint with.
19
+ */
20
+ export function useOverlayLayer() {
21
+ // A state initializer, not a render-body call: it runs once per mount, so the
22
+ // rank is fixed before the first paint (an effect would leave one frame at
23
+ // the wrong depth) and it is not a position the React Compiler can memoize
24
+ // into a stale read.
25
+ const [rank] = useState(acquireOverlayRank);
26
+ useEffect(() => {
27
+ registerOverlayRank(rank);
28
+ return () => releaseOverlayRank(rank);
29
+ }, [rank]);
30
+ const [layer] = useState(() => layerForRank(rank));
31
+ return layer;
32
+ }
33
+ //# sourceMappingURL=use-overlay-layer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","useState","acquireOverlayRank","layerForRank","registerOverlayRank","releaseOverlayRank","useOverlayLayer","rank","layer"],"sourceRoot":"../../../src","sources":["overlay/use-overlay-layer.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAE3C,SACEC,kBAAkB,EAClBC,YAAY,EACZC,mBAAmB,EACnBC,kBAAkB,QAEb,YAAS;;AAEhB;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAAA,EAAiB;EAC9C;EACA;EACA;EACA;EACA,MAAM,CAACC,IAAI,CAAC,GAAGN,QAAQ,CAACC,kBAAkB,CAAC;EAE3CF,SAAS,CAAC,MAAM;IACdI,mBAAmB,CAACG,IAAI,CAAC;IACzB,OAAO,MAAMF,kBAAkB,CAACE,IAAI,CAAC;EACvC,CAAC,EAAE,CAACA,IAAI,CAAC,CAAC;EAEV,MAAM,CAACC,KAAK,CAAC,GAAGP,QAAQ,CAAC,MAAME,YAAY,CAACI,IAAI,CAAC,CAAC;EAClD,OAAOC,KAAK;AACd","ignoreList":[]}