react-native-grab 1.1.0 → 1.1.1

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 (66) hide show
  1. package/dist/cjs/react-native/__tests__/grab-context-description.test.js +81 -0
  2. package/dist/cjs/react-native/__tests__/grab-context-description.test.js.map +1 -1
  3. package/dist/cjs/react-native/containers.js +107 -25
  4. package/dist/cjs/react-native/containers.js.map +1 -1
  5. package/dist/cjs/react-native/context-menu.js +15 -23
  6. package/dist/cjs/react-native/context-menu.js.map +1 -1
  7. package/dist/cjs/react-native/description.js +31 -4
  8. package/dist/cjs/react-native/description.js.map +1 -1
  9. package/dist/cjs/react-native/grab-colors.js +7 -0
  10. package/dist/cjs/react-native/grab-colors.js.map +1 -0
  11. package/dist/cjs/react-native/grab-control-bar.js +9 -5
  12. package/dist/cjs/react-native/grab-control-bar.js.map +1 -1
  13. package/dist/cjs/react-native/grab-controller.js +105 -16
  14. package/dist/cjs/react-native/grab-controller.js.map +1 -1
  15. package/dist/cjs/react-native/grab-overlay.js +139 -170
  16. package/dist/cjs/react-native/grab-overlay.js.map +1 -1
  17. package/dist/cjs/react-native/grab-root-controls.js +89 -0
  18. package/dist/cjs/react-native/grab-root-controls.js.map +1 -0
  19. package/dist/cjs/react-native/grab-root.js +8 -2
  20. package/dist/cjs/react-native/grab-root.js.map +1 -1
  21. package/dist/cjs/react-native/grab-screen.js +18 -3
  22. package/dist/cjs/react-native/grab-screen.js.map +1 -1
  23. package/dist/cjs/react-native/index.js.map +1 -1
  24. package/dist/esm/react-native/__tests__/grab-context-description.test.js +83 -2
  25. package/dist/esm/react-native/__tests__/grab-context-description.test.js.map +1 -1
  26. package/dist/esm/react-native/containers.js +95 -20
  27. package/dist/esm/react-native/containers.js.map +1 -1
  28. package/dist/esm/react-native/context-menu.js +15 -23
  29. package/dist/esm/react-native/context-menu.js.map +1 -1
  30. package/dist/esm/react-native/description.js +28 -3
  31. package/dist/esm/react-native/description.js.map +1 -1
  32. package/dist/esm/react-native/grab-colors.js +4 -0
  33. package/dist/esm/react-native/grab-colors.js.map +1 -0
  34. package/dist/esm/react-native/grab-control-bar.js +9 -5
  35. package/dist/esm/react-native/grab-control-bar.js.map +1 -1
  36. package/dist/esm/react-native/grab-controller.js +97 -13
  37. package/dist/esm/react-native/grab-controller.js.map +1 -1
  38. package/dist/esm/react-native/grab-overlay.js +141 -172
  39. package/dist/esm/react-native/grab-overlay.js.map +1 -1
  40. package/dist/esm/react-native/grab-root-controls.js +85 -0
  41. package/dist/esm/react-native/grab-root-controls.js.map +1 -0
  42. package/dist/esm/react-native/grab-root.js +11 -5
  43. package/dist/esm/react-native/grab-root.js.map +1 -1
  44. package/dist/esm/react-native/grab-screen.js +21 -6
  45. package/dist/esm/react-native/grab-screen.js.map +1 -1
  46. package/dist/esm/react-native/index.js.map +1 -1
  47. package/dist/types/react-native/containers.d.ts +23 -4
  48. package/dist/types/react-native/containers.d.ts.map +1 -1
  49. package/dist/types/react-native/context-menu.d.ts +6 -1
  50. package/dist/types/react-native/context-menu.d.ts.map +1 -1
  51. package/dist/types/react-native/description.d.ts +5 -0
  52. package/dist/types/react-native/description.d.ts.map +1 -1
  53. package/dist/types/react-native/grab-colors.d.ts +4 -0
  54. package/dist/types/react-native/grab-colors.d.ts.map +1 -0
  55. package/dist/types/react-native/grab-control-bar.d.ts.map +1 -1
  56. package/dist/types/react-native/grab-controller.d.ts +17 -4
  57. package/dist/types/react-native/grab-controller.d.ts.map +1 -1
  58. package/dist/types/react-native/grab-overlay.d.ts +6 -1
  59. package/dist/types/react-native/grab-overlay.d.ts.map +1 -1
  60. package/dist/types/react-native/grab-root-controls.d.ts +2 -0
  61. package/dist/types/react-native/grab-root-controls.d.ts.map +1 -0
  62. package/dist/types/react-native/grab-root.d.ts.map +1 -1
  63. package/dist/types/react-native/grab-screen.d.ts +4 -2
  64. package/dist/types/react-native/grab-screen.d.ts.map +1 -1
  65. package/dist/types/react-native/index.d.ts.map +1 -1
  66. package/package.json +1 -1
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReactNativeGrabRootControls = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const react_native_1 = require("react-native");
7
+ const dev_menu_1 = require("./dev-menu");
8
+ const full_screen_overlay_1 = require("./full-screen-overlay");
9
+ const grab_controller_1 = require("./grab-controller");
10
+ const grab_control_bar_1 = require("./grab-control-bar");
11
+ const BAR_HEIGHT = 36;
12
+ const BAR_WIDTH = 108;
13
+ const INITIAL_BAR_POSITION = {
14
+ x: (react_native_1.Dimensions.get("window").width - BAR_WIDTH) / 2,
15
+ y: 72,
16
+ };
17
+ const clamp = (value, min, max) => {
18
+ return Math.min(Math.max(value, min), max);
19
+ };
20
+ const ReactNativeGrabRootControls = () => {
21
+ const state = (0, grab_controller_1.useGrabControllerState)();
22
+ const controlBarPosition = (0, react_1.useRef)(new react_native_1.Animated.ValueXY(INITIAL_BAR_POSITION)).current;
23
+ const shouldResetControlBarPositionRef = (0, react_1.useRef)(false);
24
+ const isControlBarVisible = state.isMenuVisible && state.selectionSessionOwnerId === null && state.selectedOwnerId === null;
25
+ const toggleMenuVisibility = (0, react_1.useCallback)(() => {
26
+ shouldResetControlBarPositionRef.current = state.isMenuVisible;
27
+ (0, grab_controller_1.toggleGrabMenu)();
28
+ }, [state.isMenuVisible]);
29
+ const resetControlBarPosition = (0, react_1.useCallback)(() => {
30
+ if (!shouldResetControlBarPositionRef.current) {
31
+ return;
32
+ }
33
+ shouldResetControlBarPositionRef.current = false;
34
+ controlBarPosition.setValue(INITIAL_BAR_POSITION);
35
+ }, [controlBarPosition]);
36
+ (0, dev_menu_1.useDevMenu)(toggleMenuVisibility);
37
+ const dragHandlePanResponder = (0, react_1.useRef)(react_native_1.PanResponder.create({
38
+ onStartShouldSetPanResponder: () => true,
39
+ onMoveShouldSetPanResponder: (_, gestureState) => Math.abs(gestureState.dx) > 2 || Math.abs(gestureState.dy) > 2,
40
+ onPanResponderGrant: () => {
41
+ controlBarPosition.stopAnimation((value) => {
42
+ controlBarPosition.setOffset(value);
43
+ controlBarPosition.setValue({ x: 0, y: 0 });
44
+ });
45
+ },
46
+ onPanResponderMove: react_native_1.Animated.event([null, { dx: controlBarPosition.x, dy: controlBarPosition.y }], { useNativeDriver: false }),
47
+ onPanResponderRelease: () => {
48
+ controlBarPosition.flattenOffset();
49
+ controlBarPosition.stopAnimation((value) => {
50
+ const { width, height } = react_native_1.Dimensions.get("window");
51
+ controlBarPosition.setValue({
52
+ x: clamp(value.x, 0, Math.max(0, width - BAR_WIDTH)),
53
+ y: clamp(value.y, 0, Math.max(0, height - BAR_HEIGHT)),
54
+ });
55
+ });
56
+ },
57
+ onPanResponderTerminate: () => {
58
+ controlBarPosition.flattenOffset();
59
+ controlBarPosition.stopAnimation((value) => {
60
+ const { width, height } = react_native_1.Dimensions.get("window");
61
+ controlBarPosition.setValue({
62
+ x: clamp(value.x, 0, Math.max(0, width - BAR_WIDTH)),
63
+ y: clamp(value.y, 0, Math.max(0, height - BAR_HEIGHT)),
64
+ });
65
+ });
66
+ },
67
+ })).current;
68
+ const containerStyle = (0, react_1.useMemo)(() => [
69
+ styles.controlBar,
70
+ {
71
+ transform: controlBarPosition.getTranslateTransform(),
72
+ },
73
+ ], [controlBarPosition]);
74
+ return ((0, jsx_runtime_1.jsx)(full_screen_overlay_1.FullScreenOverlay, { children: (0, jsx_runtime_1.jsx)(react_native_1.View, { pointerEvents: "box-none", style: styles.overlayRoot, children: (0, jsx_runtime_1.jsx)(grab_control_bar_1.GrabControlBar, { containerStyle: containerStyle, dragHandlePanHandlers: dragHandlePanResponder.panHandlers, isSessionEnabled: state.selectionSessionOwnerId !== null, isVisible: isControlBarVisible, onHidden: resetControlBarPosition, onPressHide: toggleMenuVisibility, onPressSelect: grab_controller_1.enableGrabbing }) }) }));
75
+ };
76
+ exports.ReactNativeGrabRootControls = ReactNativeGrabRootControls;
77
+ const styles = react_native_1.StyleSheet.create({
78
+ overlayRoot: {
79
+ ...react_native_1.StyleSheet.absoluteFillObject,
80
+ zIndex: 9999,
81
+ },
82
+ controlBar: {
83
+ position: "absolute",
84
+ top: 0,
85
+ left: 0,
86
+ zIndex: 2,
87
+ },
88
+ });
89
+ //# sourceMappingURL=grab-root-controls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grab-root-controls.js","sourceRoot":"","sources":["../../../src/react-native/grab-root-controls.tsx"],"names":[],"mappings":"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"}
@@ -6,15 +6,21 @@ const react_1 = require("react");
6
6
  const react_native_1 = require("react-native");
7
7
  const containers_1 = require("./containers");
8
8
  const grab_overlay_1 = require("./grab-overlay");
9
+ const grab_root_controls_1 = require("./grab-root-controls");
9
10
  const ReactNativeGrabRoot = ({ children, style, ...props }) => {
10
11
  const rootRef = (0, react_1.useRef)(null);
12
+ const ownerIdRef = (0, react_1.useRef)((0, containers_1.createGrabSelectionOwnerId)("root"));
13
+ const [panHandlers, setPanHandlers] = (0, react_1.useState)(null);
11
14
  (0, react_1.useEffect)(() => {
12
15
  if (!rootRef.current) {
13
16
  return;
14
17
  }
15
- (0, containers_1.setAppRootRef)(rootRef.current);
18
+ (0, containers_1.registerGrabSelectionOwner)(ownerIdRef.current, "root", rootRef.current);
19
+ return () => {
20
+ (0, containers_1.unregisterGrabSelectionOwner)(ownerIdRef.current);
21
+ };
16
22
  }, []);
17
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(react_native_1.View, { ...props, ref: rootRef, style: [{ flex: 1 }, style], children: children }), (0, jsx_runtime_1.jsx)(grab_overlay_1.ReactNativeGrabOverlay, {})] }));
23
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)(react_native_1.View, { ...props, ...(panHandlers ?? {}), collapsable: false, ref: rootRef, style: [{ flex: 1 }, style], children: [children, (0, jsx_runtime_1.jsx)(grab_overlay_1.ReactNativeGrabOverlay, { ownerId: ownerIdRef.current, onPanHandlersChange: setPanHandlers })] }), (0, jsx_runtime_1.jsx)(grab_root_controls_1.ReactNativeGrabRootControls, {})] }));
18
24
  };
19
25
  exports.ReactNativeGrabRoot = ReactNativeGrabRoot;
20
26
  //# sourceMappingURL=grab-root.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"grab-root.js","sourceRoot":"","sources":["../../../src/react-native/grab-root.tsx"],"names":[],"mappings":";;;;AAAA,iCAA0C;AAC1C,+CAA+C;AAC/C,6CAA6C;AAC7C,iDAAwD;AAIjD,MAAM,mBAAmB,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,EAA4B,EAAE,EAAE;IAC7F,MAAM,OAAO,GAAG,IAAA,cAAM,EAAc,IAAI,CAAC,CAAC;IAE1C,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAA,0BAAa,EAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,6DACE,uBAAC,mBAAI,OAAK,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,YACvD,QAAQ,GACJ,EAEP,uBAAC,qCAAsB,KAAG,IACzB,CACJ,CAAC;AACJ,CAAC,CAAC;AApBW,QAAA,mBAAmB,uBAoB9B"}
1
+ {"version":3,"file":"grab-root.js","sourceRoot":"","sources":["../../../src/react-native/grab-root.tsx"],"names":[],"mappings":";;;;AAAA,iCAAoD;AACpD,+CAA8E;AAC9E,6CAIsB;AACtB,iDAAwD;AACxD,6DAAmE;AAI5D,MAAM,mBAAmB,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,EAA4B,EAAE,EAAE;IAC7F,MAAM,OAAO,GAAG,IAAA,cAAM,EAAc,IAAI,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAA,cAAM,EAAC,IAAA,uCAA0B,EAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,IAAA,gBAAQ,EAAkC,IAAI,CAAC,CAAC;IAEtF,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAA,uCAA0B,EAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACxE,OAAO,GAAG,EAAE;YACV,IAAA,yCAA4B,EAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACnD,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,6DACE,wBAAC,mBAAI,OACC,KAAK,KACL,CAAC,WAAW,IAAI,EAAE,CAAC,EACvB,WAAW,EAAE,KAAK,EAClB,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,aAE1B,QAAQ,EACT,uBAAC,qCAAsB,IAAC,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,mBAAmB,EAAE,cAAc,GAAI,IACvF,EAEP,uBAAC,gDAA2B,KAAG,IAC9B,CACJ,CAAC;AACJ,CAAC,CAAC;AAhCW,QAAA,mBAAmB,uBAgC9B"}
@@ -6,16 +6,31 @@ const react_1 = require("react");
6
6
  const react_native_1 = require("react-native");
7
7
  const containers_1 = require("./containers");
8
8
  const focus_effect_1 = require("./focus-effect");
9
+ const grab_overlay_1 = require("./grab-overlay");
9
10
  const useFocusEffect = (0, focus_effect_1.getFocusEffect)();
10
- const ReactNativeGrabScreen = ({ children, style, ...props }) => {
11
+ const ReactNativeGrabScreen = ({ children, style, id, ...props }) => {
11
12
  const screenRef = (0, react_1.useRef)(null);
13
+ const ownerIdRef = (0, react_1.useRef)(id ?? (0, containers_1.createGrabSelectionOwnerId)("screen"));
14
+ const [panHandlers, setPanHandlers] = (0, react_1.useState)(null);
15
+ (0, react_1.useEffect)(() => {
16
+ if (!screenRef.current) {
17
+ return;
18
+ }
19
+ (0, containers_1.registerGrabSelectionOwner)(ownerIdRef.current, "screen", screenRef.current);
20
+ return () => {
21
+ (0, containers_1.unregisterGrabSelectionOwner)(ownerIdRef.current);
22
+ };
23
+ }, []);
12
24
  useFocusEffect((0, react_1.useCallback)(() => {
13
25
  if (!screenRef.current) {
14
26
  return;
15
27
  }
16
- (0, containers_1.setFocusedScreenRef)(screenRef.current);
28
+ (0, containers_1.setGrabSelectionOwnerFocused)(ownerIdRef.current, true);
29
+ return () => {
30
+ (0, containers_1.clearGrabSelectionOwnerFocus)(ownerIdRef.current);
31
+ };
17
32
  }, []));
18
- return ((0, jsx_runtime_1.jsx)(react_native_1.View, { ...props, ref: screenRef, style: [{ flex: 1 }, style], children: children }));
33
+ return ((0, jsx_runtime_1.jsxs)(react_native_1.View, { ...props, ...(panHandlers ?? {}), collapsable: false, ref: screenRef, style: [{ flex: 1 }, style], children: [children, (0, jsx_runtime_1.jsx)(grab_overlay_1.ReactNativeGrabOverlay, { ownerId: ownerIdRef.current, onPanHandlersChange: setPanHandlers })] }));
19
34
  };
20
35
  exports.ReactNativeGrabScreen = ReactNativeGrabScreen;
21
36
  //# sourceMappingURL=grab-screen.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"grab-screen.js","sourceRoot":"","sources":["../../../src/react-native/grab-screen.tsx"],"names":[],"mappings":";;;;AAAA,iCAA4C;AAC5C,+CAAoD;AACpD,6CAAmD;AACnD,iDAAgD;AAEhD,MAAM,cAAc,GAAG,IAAA,6BAAc,GAAE,CAAC;AAIjC,MAAM,qBAAqB,GAAG,CAAC,EACpC,QAAQ,EACR,KAAK,EACL,GAAG,KAAK,EACmB,EAAE,EAAE;IAC/B,MAAM,SAAS,GAAG,IAAA,cAAM,EAAc,IAAI,CAAC,CAAC;IAE5C,cAAc,CACZ,IAAA,mBAAW,EAAC,GAAG,EAAE;QACf,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,IAAA,gCAAmB,EAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC,EAAE,EAAE,CAAC,CACP,CAAC;IAEF,OAAO,CACL,uBAAC,mBAAI,OAAK,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,YACzD,QAAQ,GACJ,CACR,CAAC;AACJ,CAAC,CAAC;AAtBW,QAAA,qBAAqB,yBAsBhC"}
1
+ {"version":3,"file":"grab-screen.js","sourceRoot":"","sources":["../../../src/react-native/grab-screen.tsx"],"names":[],"mappings":";;;;AAAA,iCAAiE;AACjE,+CAAmF;AACnF,6CAMsB;AACtB,iDAAgD;AAChD,iDAAwD;AAExD,MAAM,cAAc,GAAG,IAAA,6BAAc,GAAE,CAAC;AAMjC,MAAM,qBAAqB,GAAG,CAAC,EACpC,QAAQ,EACR,KAAK,EACL,EAAE,EACF,GAAG,KAAK,EACmB,EAAE,EAAE;IAC/B,MAAM,SAAS,GAAG,IAAA,cAAM,EAAc,IAAI,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,IAAA,cAAM,EAAC,EAAE,IAAI,IAAA,uCAA0B,EAAC,QAAQ,CAAC,CAAC,CAAC;IACtE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,IAAA,gBAAQ,EAAkC,IAAI,CAAC,CAAC;IAEtF,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,IAAA,uCAA0B,EAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;QAC5E,OAAO,GAAG,EAAE;YACV,IAAA,yCAA4B,EAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACnD,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,cAAc,CACZ,IAAA,mBAAW,EAAC,GAAG,EAAE;QACf,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,IAAA,yCAA4B,EAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACvD,OAAO,GAAG,EAAE;YACV,IAAA,yCAA4B,EAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACnD,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CACP,CAAC;IAEF,OAAO,CACL,wBAAC,mBAAI,OACC,KAAK,KACL,CAAC,WAAW,IAAI,EAAE,CAAC,EACvB,WAAW,EAAE,KAAK,EAClB,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,aAE1B,QAAQ,EACT,uBAAC,qCAAsB,IAAC,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,mBAAmB,EAAE,cAAc,GAAI,IACvF,CACR,CAAC;AACJ,CAAC,CAAC;AA9CW,QAAA,qBAAqB,yBA8ChC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react-native/index.ts"],"names":[],"mappings":";;;AAeA,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AACtB,MAAM,WAAW,GAAG,CAAC,EAAE,QAAQ,EAA4B,EAAE,EAAE,CAAC,QAAQ,CAAC;AAE5D,QAAA,mBAAmB,GAAkD,OAAO;IACvF,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,mBAAmB;IAC5C,CAAC,CAAC,WAAW,CAAC;AAEH,QAAA,qBAAqB,GAAoD,OAAO;IAC3F,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,qBAAqB;IAChD,CAAC,CAAC,WAAW,CAAC;AAEH,QAAA,8BAA8B,GACzC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,WAAW,CAAC;AAEtE,QAAA,cAAc,GAAe,OAAO;IAC/C,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,cAAc;IAC7C,CAAC,CAAC,IAAI,CAAC;AAEI,QAAA,cAAc,GAA6C,OAAO;IAC7E,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,cAAc;IAC1C,CAAC,CAAC,IAAI,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react-native/index.ts"],"names":[],"mappings":";;;AAYA,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AACtB,MAAM,WAAW,GAAG,CAAC,EAAE,QAAQ,EAA4B,EAAE,EAAE,CAAC,QAAQ,CAAC;AAE5D,QAAA,mBAAmB,GAAkD,OAAO;IACvF,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,mBAAmB;IAC5C,CAAC,CAAC,WAAW,CAAC;AAEH,QAAA,qBAAqB,GAAoD,OAAO;IAC3F,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,qBAAqB;IAChD,CAAC,CAAC,WAAW,CAAC;AAEH,QAAA,8BAA8B,GACzC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,WAAW,CAAC;AAEtE,QAAA,cAAc,GAAe,OAAO;IAC/C,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,cAAc;IAC7C,CAAC,CAAC,IAAI,CAAC;AAEI,QAAA,cAAc,GAA6C,OAAO;IAC7E,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,cAAc;IAC1C,CAAC,CAAC,IAAI,CAAC"}
@@ -1,9 +1,11 @@
1
- import { describe, expect, it, vi } from "vitest";
2
- import { getDescription } from "../description";
1
+ import { beforeEach, describe, expect, it, vi } from "vitest";
2
+ import { getDescription, getGrabSelectionTitle, GRAB_HOST_LIKE_COMPONENT_NAMES, isHostLikeComponentName, } from "../description";
3
3
  import { composeGrabContextValue, ReactNativeGrabInternalContext } from "../grab-context";
4
4
  vi.mock("../get-rendered-by", () => ({
5
5
  getRenderedBy: vi.fn(async () => []),
6
6
  }));
7
+ import { getRenderedBy } from "../get-rendered-by";
8
+ const mockedGetRenderedBy = vi.mocked(getRenderedBy);
7
9
  const createHostFiber = (props, parent = null) => ({
8
10
  type: "Text",
9
11
  memoizedProps: props,
@@ -20,6 +22,74 @@ const createContextProviderFiber = (value, parent = null) => ({
20
22
  _debugStack: new Error(),
21
23
  _debugOwner: null,
22
24
  });
25
+ const frame = (name) => ({
26
+ name,
27
+ file: null,
28
+ line: null,
29
+ column: null,
30
+ collapse: false,
31
+ });
32
+ describe("isHostLikeComponentName", () => {
33
+ it("treats View and Text as host-like", () => {
34
+ for (const name of GRAB_HOST_LIKE_COMPONENT_NAMES) {
35
+ expect(isHostLikeComponentName(name)).toBe(true);
36
+ }
37
+ expect(isHostLikeComponentName("InstallTabs")).toBe(false);
38
+ });
39
+ it("trims names before matching", () => {
40
+ expect(isHostLikeComponentName(" Text ")).toBe(true);
41
+ });
42
+ });
43
+ describe("getGrabSelectionTitle", () => {
44
+ it("skips host-like owners to show Text (in InstallTabs)", () => {
45
+ const fiber = createHostFiber({ children: "x" });
46
+ expect(getGrabSelectionTitle(fiber, [frame("Text"), frame("InstallTabs")])).toBe("Text (in InstallTabs)");
47
+ });
48
+ it("skips multiple host-like owners", () => {
49
+ const viewFiber = {
50
+ type: "View",
51
+ memoizedProps: {},
52
+ return: null,
53
+ stateNode: null,
54
+ _debugStack: new Error(),
55
+ _debugOwner: null,
56
+ };
57
+ expect(getGrabSelectionTitle(viewFiber, [frame("View"), frame("Text"), frame("Screen")])).toBe("View (in Screen)");
58
+ });
59
+ it("returns host only when every owner is host-like", () => {
60
+ const viewFiber = {
61
+ type: "View",
62
+ memoizedProps: {},
63
+ return: null,
64
+ stateNode: null,
65
+ _debugStack: new Error(),
66
+ _debugOwner: null,
67
+ };
68
+ expect(getGrabSelectionTitle(viewFiber, [frame("View"), frame("Text")])).toBe("View");
69
+ });
70
+ it("returns Selected element when host is unknown", () => {
71
+ const fiber = {
72
+ type: () => null,
73
+ memoizedProps: {},
74
+ return: null,
75
+ stateNode: null,
76
+ _debugStack: new Error(),
77
+ _debugOwner: null,
78
+ };
79
+ expect(getGrabSelectionTitle(fiber, [])).toBe("Selected element");
80
+ });
81
+ it("uses host-like name from renderedBy when the fiber has no string host", () => {
82
+ const fiber = {
83
+ type: () => null,
84
+ memoizedProps: {},
85
+ return: null,
86
+ stateNode: null,
87
+ _debugStack: new Error(),
88
+ _debugOwner: null,
89
+ };
90
+ expect(getGrabSelectionTitle(fiber, [frame("Text"), frame("InstallTabs")])).toBe("Text (in InstallTabs)");
91
+ });
92
+ });
23
93
  describe("composeGrabContextValue", () => {
24
94
  it("returns shallow copy when parent context does not exist", () => {
25
95
  const result = composeGrabContextValue(null, { screen: "home", attempt: 1 });
@@ -36,6 +106,10 @@ describe("composeGrabContextValue", () => {
36
106
  });
37
107
  });
38
108
  describe("getDescription with grab context", () => {
109
+ beforeEach(() => {
110
+ mockedGetRenderedBy.mockReset();
111
+ mockedGetRenderedBy.mockResolvedValue([]);
112
+ });
39
113
  it("keeps current output format when no context provider is in ancestors", async () => {
40
114
  const selectedFiber = createHostFiber({ children: "Hello" });
41
115
  const description = await getDescription(selectedFiber);
@@ -43,6 +117,13 @@ describe("getDescription with grab context", () => {
43
117
  expect(description).toContain("Hello");
44
118
  expect(description).not.toContain("Context:");
45
119
  });
120
+ it("uses first non-host-like renderedBy name for the preview tag", async () => {
121
+ mockedGetRenderedBy.mockResolvedValue([frame("Text"), frame("InstallTabs")]);
122
+ const selectedFiber = createHostFiber({ children: "Hello" });
123
+ const description = await getDescription(selectedFiber);
124
+ expect(description.startsWith("<InstallTabs")).toBe(true);
125
+ expect(description).toContain("Hello");
126
+ });
46
127
  it("appends Context block from nearest provider value", async () => {
47
128
  const parentProvider = createContextProviderFiber({ screen: "home", locale: "en" });
48
129
  const childProvider = createContextProviderFiber({ locale: "pl", section: "cta" }, parentProvider);
@@ -1 +1 @@
1
- {"version":3,"file":"grab-context-description.test.js","sourceRoot":"","sources":["../../../../src/react-native/__tests__/grab-context-description.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"grab-context-description.test.js","sourceRoot":"","sources":["../../../../src/react-native/__tests__/grab-context-description.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,8BAA8B,EAC9B,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,uBAAuB,EAAE,8BAA8B,EAAE,MAAM,iBAAiB,CAAC;AAI1F,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC;IACnC,aAAa,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;CACrC,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,mBAAmB,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AAErD,MAAM,eAAe,GAAG,CACtB,KAA8B,EAC9B,SAAsC,IAAI,EACpB,EAAE,CAAC,CAAC;IAC1B,IAAI,EAAE,MAAM;IACZ,aAAa,EAAE,KAAK;IACpB,MAAM,EAAE,MAAM;IACd,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI,KAAK,EAAE;IACxB,WAAW,EAAE,IAAI;CAClB,CAAC,CAAC;AAEH,MAAM,0BAA0B,GAAG,CACjC,KAAuD,EACvD,SAAsC,IAAI,EACpB,EAAE,CAAC,CAAC;IAC1B,IAAI,EAAE,8BAA8B,CAAC,QAAQ;IAC7C,aAAa,EAAE,EAAE,KAAK,EAAE;IACxB,MAAM,EAAE,MAAM;IACd,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI,KAAK,EAAE;IACxB,WAAW,EAAE,IAAI;CAClB,CAAC,CAAC;AAEH,MAAM,KAAK,GAAG,CAAC,IAAY,EAAmB,EAAE,CAAC,CAAC;IAChD,IAAI;IACJ,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,KAAK;CAChB,CAAC,CAAC;AAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,KAAK,MAAM,IAAI,IAAI,8BAA8B,EAAE,CAAC;YAClD,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC;QACD,MAAM,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAC9E,uBAAuB,CACxB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,SAAS,GAAyB;YACtC,IAAI,EAAE,MAAM;YACZ,aAAa,EAAE,EAAE;YACjB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,IAAI,KAAK,EAAE;YACxB,WAAW,EAAE,IAAI;SAClB,CAAC;QACF,MAAM,CAAC,qBAAqB,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAC5F,kBAAkB,CACnB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,SAAS,GAAyB;YACtC,IAAI,EAAE,MAAM;YACZ,aAAa,EAAE,EAAE;YACjB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,IAAI,KAAK,EAAE;YACxB,WAAW,EAAE,IAAI;SAClB,CAAC;QACF,MAAM,CAAC,qBAAqB,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,KAAK,GAAG;YACZ,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI;YAChB,aAAa,EAAE,EAAE;YACjB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,IAAI,KAAK,EAAE;YACxB,WAAW,EAAE,IAAI;SACM,CAAC;QAC1B,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAC/E,MAAM,KAAK,GAAG;YACZ,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI;YAChB,aAAa,EAAE,EAAE;YACjB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,IAAI,KAAK,EAAE;YACxB,WAAW,EAAE,IAAI;SACM,CAAC;QAC1B,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAC9E,uBAAuB,CACxB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,MAAM,GAAG,uBAAuB,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;QAE7E,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,MAAM,GAAG,uBAAuB,CACpC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,EACpD,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CACrC,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,UAAU,CAAC,GAAG,EAAE;QACd,mBAAmB,CAAC,SAAS,EAAE,CAAC;QAChC,mBAAmB,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,MAAM,aAAa,GAAG,eAAe,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAE7D,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC;QAExD,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,mBAAmB,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,aAAa,GAAG,eAAe,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAE7D,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC;QAExD,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,cAAc,GAAG,0BAA0B,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACpF,MAAM,aAAa,GAAG,0BAA0B,CAC9C,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAChC,cAAc,CACf,CAAC;QACF,MAAM,aAAa,GAAG,eAAe,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,aAAa,CAAC,CAAC;QAE7E,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC;QAExD,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAChD,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAClD,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,34 +1,109 @@
1
+ import { useSyncExternalStore } from "react";
1
2
  import { findNodeHandle } from "react-native";
2
3
  import { getFabricUIManager } from "./fabric";
3
- let focusedScreenShadowNode = null;
4
- let appRootShadowNode = null;
5
- export const setFocusedScreenRef = (ref) => {
6
- // @ts-expect-error - findNodeHandle is not typed correctly
7
- const nativeTag = findNodeHandle(ref);
8
- if (!nativeTag) {
9
- throw new Error("Failed to find native tag for focused screen");
4
+ let ownerIdCounter = 0;
5
+ let registrationOrder = 0;
6
+ let focusedScreenOwnerId = null;
7
+ const owners = new Map();
8
+ const listeners = new Set();
9
+ const notify = () => {
10
+ for (const listener of listeners) {
11
+ listener();
10
12
  }
11
- focusedScreenShadowNode = getFabricUIManager().findShadowNodeByTag_DEPRECATED(nativeTag);
12
13
  };
13
- export const setAppRootRef = (ref) => {
14
+ const subscribe = (listener) => {
15
+ listeners.add(listener);
16
+ return () => {
17
+ listeners.delete(listener);
18
+ };
19
+ };
20
+ const getSnapshot = () => ({
21
+ owners: new Map(owners),
22
+ focusedScreenOwnerId,
23
+ });
24
+ const getOwnerShadowNode = (ref, errorMessage) => {
14
25
  // @ts-expect-error - findNodeHandle is not typed correctly
15
26
  const nativeTag = findNodeHandle(ref);
16
27
  if (!nativeTag) {
17
- throw new Error("Failed to find native tag for app root");
28
+ throw new Error(errorMessage);
18
29
  }
19
- appRootShadowNode = getFabricUIManager().findShadowNodeByTag_DEPRECATED(nativeTag);
30
+ return getFabricUIManager().findShadowNodeByTag_DEPRECATED(nativeTag);
31
+ };
32
+ const getFallbackRootOwner = () => {
33
+ const rootOwners = Array.from(owners.values()).filter((owner) => owner.kind === "root");
34
+ rootOwners.sort((left, right) => right.registrationOrder - left.registrationOrder);
35
+ return rootOwners[0] ?? null;
20
36
  };
21
- export const getAppRootShadowNode = () => {
22
- if (!appRootShadowNode) {
23
- throw new Error("You seem to forgot to wrap your app root with ReactNativeGrabRoot.");
37
+ export const createGrabSelectionOwnerId = (kind) => {
38
+ ownerIdCounter += 1;
39
+ return `react-native-grab-${kind}-${ownerIdCounter}`;
40
+ };
41
+ export const registerGrabSelectionOwner = (id, kind, ref) => {
42
+ const shadowNode = getOwnerShadowNode(ref, kind === "root"
43
+ ? "Failed to find native tag for app root"
44
+ : "Failed to find native tag for screen");
45
+ registrationOrder += 1;
46
+ owners.set(id, {
47
+ id,
48
+ kind,
49
+ shadowNode,
50
+ registrationOrder,
51
+ });
52
+ notify();
53
+ };
54
+ export const unregisterGrabSelectionOwner = (id) => {
55
+ const removedOwner = owners.get(id);
56
+ if (!removedOwner) {
57
+ return;
58
+ }
59
+ owners.delete(id);
60
+ if (focusedScreenOwnerId === id) {
61
+ focusedScreenOwnerId = null;
24
62
  }
25
- return appRootShadowNode;
63
+ notify();
26
64
  };
27
- export const getFocusedScreenShadowNode = () => {
28
- if (!focusedScreenShadowNode) {
29
- // No native screens, so there will be only the app root.
30
- return getAppRootShadowNode();
65
+ export const setGrabSelectionOwnerFocused = (id, isFocused) => {
66
+ const owner = owners.get(id);
67
+ if (!owner || owner.kind !== "screen") {
68
+ return;
69
+ }
70
+ if (isFocused) {
71
+ focusedScreenOwnerId = id;
72
+ }
73
+ else if (focusedScreenOwnerId === id) {
74
+ focusedScreenOwnerId = null;
31
75
  }
32
- return focusedScreenShadowNode;
76
+ notify();
77
+ };
78
+ export const clearGrabSelectionOwnerFocus = (id) => {
79
+ if (focusedScreenOwnerId !== id) {
80
+ return;
81
+ }
82
+ focusedScreenOwnerId = null;
83
+ notify();
84
+ };
85
+ export const getGrabSelectionOwner = (id) => {
86
+ return owners.get(id) ?? null;
87
+ };
88
+ export const getResolvedGrabSelectionOwner = () => {
89
+ if (focusedScreenOwnerId) {
90
+ const focusedOwner = owners.get(focusedScreenOwnerId);
91
+ if (focusedOwner) {
92
+ return focusedOwner;
93
+ }
94
+ }
95
+ return getFallbackRootOwner();
96
+ };
97
+ export const getResolvedGrabSelectionOwnerId = () => {
98
+ return getResolvedGrabSelectionOwner()?.id ?? null;
99
+ };
100
+ export const useResolvedGrabSelectionOwnerId = () => {
101
+ return useSyncExternalStore(subscribe, () => getResolvedGrabSelectionOwnerId(), () => null);
102
+ };
103
+ export const useIsResolvedGrabSelectionOwner = (id) => {
104
+ return useSyncExternalStore(subscribe, () => getResolvedGrabSelectionOwnerId() === id, () => false);
105
+ };
106
+ export const useSelectionOwnersStore = () => {
107
+ return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
33
108
  };
34
109
  //# sourceMappingURL=containers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"containers.js","sourceRoot":"","sources":["../../../src/react-native/containers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA2B,MAAM,cAAc,CAAC;AAEvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9C,IAAI,uBAAuB,GAAiC,IAAI,CAAC;AACjE,IAAI,iBAAiB,GAAiC,IAAI,CAAC;AAE3D,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAuB,EAAE,EAAE;IAC7D,2DAA2D;IAC3D,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAEtC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,uBAAuB,GAAG,kBAAkB,EAAE,CAAC,8BAA8B,CAAC,SAAS,CAAC,CAAC;AAC3F,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAuB,EAAE,EAAE;IACvD,2DAA2D;IAC3D,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAEtC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IAED,iBAAiB,GAAG,kBAAkB,EAAE,CAAC,8BAA8B,CAAC,SAAS,CAAC,CAAC;AACrF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAA0B,EAAE;IAC9D,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;IACxF,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC,CAAC;AACF,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,EAAE;IAC7C,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC7B,yDAAyD;QACzD,OAAO,oBAAoB,EAAE,CAAC;IAChC,CAAC;IAED,OAAO,uBAAuB,CAAC;AACjC,CAAC,CAAC"}
1
+ {"version":3,"file":"containers.js","sourceRoot":"","sources":["../../../src/react-native/containers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,cAAc,EAA2B,MAAM,cAAc,CAAC;AAEvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAgB9C,IAAI,cAAc,GAAG,CAAC,CAAC;AACvB,IAAI,iBAAiB,GAAG,CAAC,CAAC;AAC1B,IAAI,oBAAoB,GAAkB,IAAI,CAAC;AAC/C,MAAM,MAAM,GAAG,IAAI,GAAG,EAA8B,CAAC;AACrD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;AAExC,MAAM,MAAM,GAAG,GAAG,EAAE;IAClB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,QAAQ,EAAE,CAAC;IACb,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,QAAoB,EAAE,EAAE;IACzC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxB,OAAO,GAAG,EAAE;QACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,GAAiC,EAAE,CAAC,CAAC;IACvD,MAAM,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC;IACvB,oBAAoB;CACrB,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,GAAuB,EAAE,YAAoB,EAAE,EAAE;IAC3E,2DAA2D;IAC3D,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAEtC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,kBAAkB,EAAE,CAAC,8BAA8B,CAAC,SAAS,CAAC,CAAC;AACxE,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,GAAG,EAAE;IAChC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IACxF,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACnF,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,IAA4B,EAAE,EAAE;IACzE,cAAc,IAAI,CAAC,CAAC;IACpB,OAAO,qBAAqB,IAAI,IAAI,cAAc,EAAE,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,EAAU,EACV,IAA4B,EAC5B,GAAuB,EACvB,EAAE;IACF,MAAM,UAAU,GAAG,kBAAkB,CACnC,GAAG,EACH,IAAI,KAAK,MAAM;QACb,CAAC,CAAC,wCAAwC;QAC1C,CAAC,CAAC,sCAAsC,CAC3C,CAAC;IAEF,iBAAiB,IAAI,CAAC,CAAC;IACvB,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE;QACb,EAAE;QACF,IAAI;QACJ,UAAU;QACV,iBAAiB;KAClB,CAAC,CAAC;IACH,MAAM,EAAE,CAAC;AACX,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,EAAU,EAAE,EAAE;IACzD,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAElB,IAAI,oBAAoB,KAAK,EAAE,EAAE,CAAC;QAChC,oBAAoB,GAAG,IAAI,CAAC;IAC9B,CAAC;IAED,MAAM,EAAE,CAAC;AACX,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,EAAU,EAAE,SAAkB,EAAE,EAAE;IAC7E,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC7B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO;IACT,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,oBAAoB,GAAG,EAAE,CAAC;IAC5B,CAAC;SAAM,IAAI,oBAAoB,KAAK,EAAE,EAAE,CAAC;QACvC,oBAAoB,GAAG,IAAI,CAAC;IAC9B,CAAC;IAED,MAAM,EAAE,CAAC;AACX,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,EAAU,EAAE,EAAE;IACzD,IAAI,oBAAoB,KAAK,EAAE,EAAE,CAAC;QAChC,OAAO;IACT,CAAC;IAED,oBAAoB,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,CAAC;AACX,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,EAAU,EAA6B,EAAE;IAC7E,OAAO,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;AAChC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAA8B,EAAE;IAC3E,IAAI,oBAAoB,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QACtD,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,YAAY,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,oBAAoB,EAAE,CAAC;AAChC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAkB,EAAE;IACjE,OAAO,6BAA6B,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC;AACrD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,EAAE;IAClD,OAAO,oBAAoB,CACzB,SAAS,EACT,GAAG,EAAE,CAAC,+BAA+B,EAAE,EACvC,GAAG,EAAE,CAAC,IAAI,CACX,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,EAAU,EAAE,EAAE;IAC5D,OAAO,oBAAoB,CACzB,SAAS,EACT,GAAG,EAAE,CAAC,+BAA+B,EAAE,KAAK,EAAE,EAC9C,GAAG,EAAE,CAAC,KAAK,CACZ,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,EAAE;IAC1C,OAAO,oBAAoB,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;AACnE,CAAC,CAAC"}
@@ -25,8 +25,8 @@ const getAlignedTop = (anchorY, menuHeight, verticalAlignment) => {
25
25
  return anchorY;
26
26
  }
27
27
  };
28
- const getMenuPosition = (anchor, menuWidth, menuHeight, horizontalAlignment, verticalAlignment, offset) => {
29
- const { width: screenWidth, height: screenHeight } = Dimensions.get("window");
28
+ const getMenuPosition = (anchor, menuWidth, menuHeight, horizontalAlignment, verticalAlignment, offset, bounds) => {
29
+ const { width: screenWidth, height: screenHeight } = bounds ?? Dimensions.get("window");
30
30
  const preferredLeft = getAlignedLeft(anchor.x, menuWidth, horizontalAlignment) + offset.x;
31
31
  const preferredTop = getAlignedTop(anchor.y, menuHeight, verticalAlignment) + offset.y;
32
32
  return {
@@ -48,7 +48,7 @@ const ContextMenuItem = ({ children, destructive = false, disabled = false, onPr
48
48
  disabled && styles.itemDisabled,
49
49
  ], children: _jsx(Text, { style: [styles.itemText, destructive && styles.destructiveText], children: children }) }));
50
50
  };
51
- export const ContextMenu = ({ anchor, children, cutout = null, horizontalAlignment = "center", offset = { x: 0, y: 10 }, onClose, verticalAlignment = "top", visible, }) => {
51
+ export const ContextMenu = ({ anchor, bounds = null, children, cutout = null, horizontalAlignment = "center", offset = { x: 0, y: 10 }, onClose, verticalAlignment = "top", visible, }) => {
52
52
  const [isRendered, setIsRendered] = useState(visible);
53
53
  const [menuSize, setMenuSize] = useState({ width: 0, height: 0 });
54
54
  const [renderedAnchor, setRenderedAnchor] = useState(anchor);
@@ -83,8 +83,9 @@ export const ContextMenu = ({ anchor, children, cutout = null, horizontalAlignme
83
83
  if (!renderedAnchor) {
84
84
  return { left: SCREEN_EDGE_MARGIN, top: SCREEN_EDGE_MARGIN };
85
85
  }
86
- return getMenuPosition(renderedAnchor, menuSize.width, menuSize.height, horizontalAlignment, verticalAlignment, offset);
86
+ return getMenuPosition(renderedAnchor, menuSize.width, menuSize.height, horizontalAlignment, verticalAlignment, offset, bounds);
87
87
  }, [
88
+ bounds,
88
89
  horizontalAlignment,
89
90
  menuSize.height,
90
91
  menuSize.width,
@@ -93,8 +94,8 @@ export const ContextMenu = ({ anchor, children, cutout = null, horizontalAlignme
93
94
  verticalAlignment,
94
95
  ]);
95
96
  const renderedItems = useMemo(() => Children.toArray(children).filter((child) => isValidElement(child)), [children]);
96
- const backdropRegions = useMemo(() => {
97
- const { width: screenWidth, height: screenHeight } = Dimensions.get("window");
97
+ const dismissalRegions = useMemo(() => {
98
+ const { width: screenWidth, height: screenHeight } = bounds ?? Dimensions.get("window");
98
99
  if (!cutout) {
99
100
  return [
100
101
  {
@@ -149,20 +150,11 @@ export const ContextMenu = ({ anchor, children, cutout = null, horizontalAlignme
149
150
  },
150
151
  },
151
152
  ];
152
- }, [cutout]);
153
+ }, [bounds, cutout]);
153
154
  if (!isRendered || !renderedAnchor || renderedItems.length === 0) {
154
155
  return null;
155
156
  }
156
- return (_jsxs(View, { pointerEvents: "box-none", style: styles.overlay, children: [backdropRegions.map((region) => (_jsx(Animated.View, { pointerEvents: "none", style: [
157
- region.style,
158
- styles.backdrop,
159
- {
160
- opacity: animation.interpolate({
161
- inputRange: [0, 1],
162
- outputRange: [0, 1],
163
- }),
164
- },
165
- ] }, `backdrop-${region.key}`))), backdropRegions.map((region) => (_jsx(Pressable, { accessibilityLabel: "Close context menu", onPress: onClose, style: region.style }, `pressable-${region.key}`))), _jsx(ContextMenuContext.Provider, { value: { onClose }, children: _jsx(Animated.View, { onLayout: handleLayout, style: [
157
+ return (_jsxs(View, { pointerEvents: "box-none", style: styles.overlay, children: [dismissalRegions.map((region) => (_jsx(Pressable, { accessibilityLabel: "Close context menu", onPress: onClose, style: region.style }, `pressable-${region.key}`))), _jsx(ContextMenuContext.Provider, { value: { onClose }, children: _jsx(Animated.View, { onLayout: handleLayout, style: [
166
158
  styles.menu,
167
159
  position,
168
160
  {
@@ -182,7 +174,7 @@ export const ContextMenu = ({ anchor, children, cutout = null, horizontalAlignme
182
174
  },
183
175
  ],
184
176
  },
185
- ], children: renderedItems.map((child, index) => (_jsx(View, { style: index > 0 ? styles.itemBorder : undefined, children: child }, index))) }) })] }));
177
+ ], children: _jsx(View, { style: styles.menuContent, children: renderedItems.map((child, index) => (_jsx(View, { style: index > 0 ? styles.itemBorder : undefined, children: child }, index))) }) }) })] }));
186
178
  };
187
179
  ContextMenu.Item = ContextMenuItem;
188
180
  const styles = StyleSheet.create({
@@ -191,22 +183,22 @@ const styles = StyleSheet.create({
191
183
  zIndex: 10,
192
184
  elevation: 10,
193
185
  },
194
- backdrop: {
195
- backgroundColor: "rgba(0, 0, 0, 0.06)",
196
- },
197
186
  menu: {
198
187
  position: "absolute",
199
188
  zIndex: 11,
200
189
  minWidth: 176,
201
190
  borderRadius: 14,
202
- backgroundColor: "#FFFFFF",
203
- overflow: "hidden",
204
191
  shadowColor: "#000000",
205
192
  shadowOffset: { width: 0, height: 10 },
206
193
  shadowOpacity: 0.16,
207
194
  shadowRadius: 24,
208
195
  elevation: 10,
209
196
  },
197
+ menuContent: {
198
+ borderRadius: 14,
199
+ backgroundColor: "#FFFFFF",
200
+ overflow: "hidden",
201
+ },
210
202
  item: {
211
203
  paddingHorizontal: 14,
212
204
  paddingVertical: 12,
@@ -1 +1 @@
1
- {"version":3,"file":"context-menu.js","sourceRoot":"","sources":["../../../src/react-native/context-menu.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context-menu.js","sourceRoot":"","sources":["../../../src/react-native/context-menu.tsx"],"names":[],"mappings":"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"}