react-native-grab 1.0.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 (83) hide show
  1. package/README.md +8 -0
  2. package/dist/cjs/react-native/__tests__/grab-context-description.test.js +81 -0
  3. package/dist/cjs/react-native/__tests__/grab-context-description.test.js.map +1 -1
  4. package/dist/cjs/react-native/containers.js +107 -25
  5. package/dist/cjs/react-native/containers.js.map +1 -1
  6. package/dist/cjs/react-native/context-menu.js +229 -0
  7. package/dist/cjs/react-native/context-menu.js.map +1 -0
  8. package/dist/cjs/react-native/description.js +31 -4
  9. package/dist/cjs/react-native/description.js.map +1 -1
  10. package/dist/cjs/react-native/focus-effect.js +38 -0
  11. package/dist/cjs/react-native/focus-effect.js.map +1 -0
  12. package/dist/cjs/react-native/grab-colors.js +7 -0
  13. package/dist/cjs/react-native/grab-colors.js.map +1 -0
  14. package/dist/cjs/react-native/grab-control-bar.js +105 -0
  15. package/dist/cjs/react-native/grab-control-bar.js.map +1 -0
  16. package/dist/cjs/react-native/grab-controller.js +109 -7
  17. package/dist/cjs/react-native/grab-controller.js.map +1 -1
  18. package/dist/cjs/react-native/grab-overlay.js +216 -51
  19. package/dist/cjs/react-native/grab-overlay.js.map +1 -1
  20. package/dist/cjs/react-native/grab-root-controls.js +89 -0
  21. package/dist/cjs/react-native/grab-root-controls.js.map +1 -0
  22. package/dist/cjs/react-native/grab-root.js +8 -2
  23. package/dist/cjs/react-native/grab-root.js.map +1 -1
  24. package/dist/cjs/react-native/grab-screen.js +20 -19
  25. package/dist/cjs/react-native/grab-screen.js.map +1 -1
  26. package/dist/cjs/react-native/index.js +4 -1
  27. package/dist/cjs/react-native/index.js.map +1 -1
  28. package/dist/cjs/react-native/open.js +21 -0
  29. package/dist/cjs/react-native/open.js.map +1 -0
  30. package/dist/esm/react-native/__tests__/grab-context-description.test.js +83 -2
  31. package/dist/esm/react-native/__tests__/grab-context-description.test.js.map +1 -1
  32. package/dist/esm/react-native/containers.js +95 -20
  33. package/dist/esm/react-native/containers.js.map +1 -1
  34. package/dist/esm/react-native/context-menu.js +225 -0
  35. package/dist/esm/react-native/context-menu.js.map +1 -0
  36. package/dist/esm/react-native/description.js +28 -3
  37. package/dist/esm/react-native/description.js.map +1 -1
  38. package/dist/esm/react-native/focus-effect.js +33 -0
  39. package/dist/esm/react-native/focus-effect.js.map +1 -0
  40. package/dist/esm/react-native/grab-colors.js +4 -0
  41. package/dist/esm/react-native/grab-colors.js.map +1 -0
  42. package/dist/esm/react-native/grab-control-bar.js +101 -0
  43. package/dist/esm/react-native/grab-control-bar.js.map +1 -0
  44. package/dist/esm/react-native/grab-controller.js +100 -5
  45. package/dist/esm/react-native/grab-controller.js.map +1 -1
  46. package/dist/esm/react-native/grab-overlay.js +220 -55
  47. package/dist/esm/react-native/grab-overlay.js.map +1 -1
  48. package/dist/esm/react-native/grab-root-controls.js +85 -0
  49. package/dist/esm/react-native/grab-root-controls.js.map +1 -0
  50. package/dist/esm/react-native/grab-root.js +11 -5
  51. package/dist/esm/react-native/grab-root.js.map +1 -1
  52. package/dist/esm/react-native/grab-screen.js +23 -22
  53. package/dist/esm/react-native/grab-screen.js.map +1 -1
  54. package/dist/esm/react-native/index.js +3 -0
  55. package/dist/esm/react-native/index.js.map +1 -1
  56. package/dist/esm/react-native/open.js +14 -0
  57. package/dist/esm/react-native/open.js.map +1 -0
  58. package/dist/types/react-native/containers.d.ts +23 -4
  59. package/dist/types/react-native/containers.d.ts.map +1 -1
  60. package/dist/types/react-native/context-menu.d.ts +43 -0
  61. package/dist/types/react-native/context-menu.d.ts.map +1 -0
  62. package/dist/types/react-native/description.d.ts +5 -0
  63. package/dist/types/react-native/description.d.ts.map +1 -1
  64. package/dist/types/react-native/focus-effect.d.ts +3 -0
  65. package/dist/types/react-native/focus-effect.d.ts.map +1 -0
  66. package/dist/types/react-native/grab-colors.d.ts +4 -0
  67. package/dist/types/react-native/grab-colors.d.ts.map +1 -0
  68. package/dist/types/react-native/grab-control-bar.d.ts +13 -0
  69. package/dist/types/react-native/grab-control-bar.d.ts.map +1 -0
  70. package/dist/types/react-native/grab-controller.d.ts +18 -2
  71. package/dist/types/react-native/grab-controller.d.ts.map +1 -1
  72. package/dist/types/react-native/grab-overlay.d.ts +6 -1
  73. package/dist/types/react-native/grab-overlay.d.ts.map +1 -1
  74. package/dist/types/react-native/grab-root-controls.d.ts +2 -0
  75. package/dist/types/react-native/grab-root-controls.d.ts.map +1 -0
  76. package/dist/types/react-native/grab-root.d.ts.map +1 -1
  77. package/dist/types/react-native/grab-screen.d.ts +4 -2
  78. package/dist/types/react-native/grab-screen.d.ts.map +1 -1
  79. package/dist/types/react-native/index.d.ts +1 -0
  80. package/dist/types/react-native/index.d.ts.map +1 -1
  81. package/dist/types/react-native/open.d.ts +7 -0
  82. package/dist/types/react-native/open.d.ts.map +1 -0
  83. package/package.json +1 -1
@@ -5,37 +5,50 @@ const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const react_native_1 = require("react-native");
7
7
  const containers_1 = require("./containers");
8
- const measure_1 = require("./measure");
9
- const dev_menu_1 = require("./dev-menu");
10
- const description_1 = require("./description");
11
8
  const copy_1 = require("./copy");
12
- const full_screen_overlay_1 = require("./full-screen-overlay");
9
+ const context_menu_1 = require("./context-menu");
10
+ const grab_colors_1 = require("./grab-colors");
13
11
  const grab_controller_1 = require("./grab-controller");
12
+ const description_1 = require("./description");
13
+ const get_rendered_by_1 = require("./get-rendered-by");
14
+ const measure_1 = require("./measure");
15
+ const open_1 = require("./open");
14
16
  const COPY_BADGE_DURATION_MS = 1600;
15
- const CALLSTACK_PRIMARY = "#8232FF";
16
- const HIGHLIGHT_FILL = "rgba(130, 50, 255, 0.2)";
17
- const BADGE_BACKGROUND = "rgba(130, 50, 255, 0.92)";
18
- const ReactNativeGrabOverlay = () => {
17
+ const ReactNativeGrabOverlay = ({ ownerId, onPanHandlersChange, }) => {
18
+ const isResolvedSelectionOwner = (0, containers_1.useIsResolvedGrabSelectionOwner)(ownerId);
19
19
  const copyBadgeTimeoutRef = (0, react_1.useRef)(null);
20
+ const [bounds, setBounds] = (0, react_1.useState)({ width: 0, height: 0 });
20
21
  const [state, setState] = (0, react_1.useState)({
21
22
  isSessionEnabled: false,
22
23
  grabbedElement: null,
23
24
  isCopyBadgeVisible: false,
25
+ selectedElement: null,
24
26
  });
25
27
  const startSession = (0, react_1.useCallback)(() => {
26
28
  setState((prev) => ({
27
29
  ...prev,
28
30
  grabbedElement: null,
29
31
  isSessionEnabled: true,
32
+ selectedElement: null,
30
33
  }));
31
34
  }, []);
32
35
  const stopSession = (0, react_1.useCallback)(() => {
33
36
  setState((prev) => ({
34
37
  ...prev,
35
- grabbedElement: null,
36
38
  isSessionEnabled: false,
39
+ grabbedElement: null,
37
40
  }));
38
41
  }, []);
42
+ const closeSelectedElementMenu = (0, react_1.useCallback)(() => {
43
+ (0, grab_controller_1.hideGrabSelectionMenu)(ownerId);
44
+ setState((prev) => {
45
+ return {
46
+ ...prev,
47
+ selectedElement: null,
48
+ grabbedElement: null,
49
+ };
50
+ });
51
+ }, [ownerId]);
39
52
  (0, react_1.useEffect)(() => {
40
53
  return () => {
41
54
  if (copyBadgeTimeoutRef.current) {
@@ -60,30 +73,38 @@ const ReactNativeGrabOverlay = () => {
60
73
  }, COPY_BADGE_DURATION_MS);
61
74
  }, []);
62
75
  (0, react_1.useEffect)(() => {
63
- (0, grab_controller_1.setEnableGrabbingHandler)(startSession);
64
- return () => {
65
- (0, grab_controller_1.setEnableGrabbingHandler)(null);
66
- };
67
- }, [startSession]);
68
- (0, dev_menu_1.useDevMenu)(startSession);
69
- const getElementAtPoint = (nativePageX, nativePageY) => {
70
- const appRootShadowNode = (0, containers_1.getAppRootShadowNode)();
71
- const focusedScreenShadowNode = (0, containers_1.getFocusedScreenShadowNode)();
72
- const appRootBoundingClientRect = (0, measure_1.measureInWindow)(appRootShadowNode);
73
- const focusedScreenBoundingClientRect = (0, measure_1.measureInWindow)(focusedScreenShadowNode);
74
- let focusedScreenOffsetY = focusedScreenBoundingClientRect[1];
75
- let focusedScreenHeight = focusedScreenBoundingClientRect[3];
76
- let appRootHeight = appRootBoundingClientRect[3];
77
- const offset = appRootHeight - focusedScreenHeight - focusedScreenOffsetY;
78
- const pageX = nativePageX;
79
- const pageY = nativePageY - (appRootHeight - focusedScreenHeight);
80
- const internalNode = (0, measure_1.findNodeAtPoint)(focusedScreenShadowNode, pageX, pageY);
76
+ if (isResolvedSelectionOwner) {
77
+ return;
78
+ }
79
+ (0, grab_controller_1.clearGrabOwnerPresentation)(ownerId);
80
+ setState((prev) => {
81
+ if (!prev.isSessionEnabled && !prev.grabbedElement && !prev.selectedElement) {
82
+ return prev;
83
+ }
84
+ return {
85
+ ...prev,
86
+ isSessionEnabled: false,
87
+ grabbedElement: null,
88
+ selectedElement: null,
89
+ };
90
+ });
91
+ }, [isResolvedSelectionOwner, ownerId]);
92
+ const getElementAtPoint = (pageX, pageY) => {
93
+ const owner = (0, containers_1.getGrabSelectionOwner)(ownerId);
94
+ if (!owner) {
95
+ return null;
96
+ }
97
+ const internalNode = (0, measure_1.findNodeAtPoint)(owner.shadowNode, pageX, pageY);
81
98
  const shadowNode = internalNode?.stateNode?.node;
82
99
  if (!shadowNode) {
83
100
  return null;
84
101
  }
102
+ const ownerRect = (0, measure_1.measureInWindow)(owner.shadowNode);
85
103
  const rect = nativeFabricUIManager.getBoundingClientRect(shadowNode, true);
86
- return { fiberNode: internalNode, rect: [rect[0], rect[1] + offset, rect[2], rect[3]] };
104
+ return {
105
+ fiberNode: internalNode,
106
+ rect: [rect[0] - ownerRect[0], rect[1] - ownerRect[1], rect[2], rect[3]],
107
+ };
87
108
  };
88
109
  const handleTouch = (nativeEvent) => {
89
110
  const result = getElementAtPoint(nativeEvent.pageX, nativeEvent.pageY);
@@ -93,11 +114,40 @@ const ReactNativeGrabOverlay = () => {
93
114
  }
94
115
  updateGrabbedElement(result);
95
116
  };
96
- const handleGrabbing = async (result) => {
97
- const description = await (0, description_1.getDescription)(result.fiberNode);
98
- console.log("[react-native-grab] Description:", description);
99
- await (0, copy_1.copyViaMetro)(description);
100
- };
117
+ const handleGrabbing = (0, react_1.useCallback)(async (result) => {
118
+ const [description, renderedBy] = await Promise.all([
119
+ (0, description_1.getDescription)(result.fiberNode),
120
+ (0, get_rendered_by_1.getRenderedBy)(result.fiberNode),
121
+ ]);
122
+ const firstFrame = renderedBy.find((frame) => Boolean(frame.file)) ?? null;
123
+ const elementName = (0, description_1.getGrabSelectionTitle)(result.fiberNode, renderedBy);
124
+ setState((prev) => ({
125
+ ...prev,
126
+ grabbedElement: result,
127
+ selectedElement: {
128
+ description,
129
+ elementName,
130
+ frame: firstFrame,
131
+ result,
132
+ },
133
+ }));
134
+ (0, grab_controller_1.showGrabSelectionMenu)(ownerId);
135
+ }, [ownerId]);
136
+ (0, react_1.useEffect)(() => {
137
+ (0, grab_controller_1.registerLocalGrabSelectionController)(ownerId, {
138
+ closeSelectionMenu: () => {
139
+ closeSelectedElementMenu();
140
+ },
141
+ startSelection: startSession,
142
+ stopSelection: () => {
143
+ closeSelectedElementMenu();
144
+ stopSession();
145
+ },
146
+ });
147
+ return () => {
148
+ (0, grab_controller_1.unregisterLocalGrabSelectionController)(ownerId);
149
+ };
150
+ }, [closeSelectedElementMenu, ownerId, startSession, stopSession]);
101
151
  const panResponder = (0, react_1.useRef)(react_native_1.PanResponder.create({
102
152
  onStartShouldSetPanResponderCapture: () => true,
103
153
  onMoveShouldSetPanResponderCapture: () => true,
@@ -111,32 +161,105 @@ const ReactNativeGrabOverlay = () => {
111
161
  return;
112
162
  }
113
163
  await handleGrabbing(result);
114
- showCopiedBadge();
115
164
  }
116
165
  catch {
117
- console.error("[react-native-grab] Copying failed. Ensure your Metro config is wrapped with withReactNativeGrab(...) and Metro has been restarted.");
166
+ console.error("[react-native-grab] Grabbing failed.");
118
167
  }
119
168
  finally {
169
+ (0, grab_controller_1.setGrabSelectionSessionOwner)(null);
120
170
  stopSession();
121
171
  }
122
172
  })();
123
173
  },
124
174
  })).current;
125
- return ((0, jsx_runtime_1.jsx)(full_screen_overlay_1.FullScreenOverlay, { children: (0, jsx_runtime_1.jsxs)(react_native_1.View, { pointerEvents: "box-none", style: styles.overlayRoot, children: [state.isSessionEnabled && ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: [react_native_1.StyleSheet.absoluteFill], ...panResponder.panHandlers })), state.isSessionEnabled && ((0, jsx_runtime_1.jsx)(react_native_1.View, { pointerEvents: "none", style: styles.topBadge, children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: styles.topBadgeText, children: "Touch and move around to grab" }) })), state.isCopyBadgeVisible && ((0, jsx_runtime_1.jsx)(react_native_1.View, { pointerEvents: "none", style: styles.topBadge, children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: styles.topBadgeText, children: "Element copied" }) })), !!state.grabbedElement && ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: [
126
- {
127
- position: "absolute",
128
- left: state.grabbedElement.rect[0],
129
- top: state.grabbedElement.rect[1],
130
- width: state.grabbedElement.rect[2],
131
- height: state.grabbedElement.rect[3],
132
- pointerEvents: "none",
133
- },
134
- {
135
- backgroundColor: HIGHLIGHT_FILL,
136
- borderWidth: 1,
137
- borderColor: CALLSTACK_PRIMARY,
138
- },
139
- ] }))] }) }));
175
+ (0, react_1.useEffect)(() => {
176
+ onPanHandlersChange?.(state.isSessionEnabled ? panResponder.panHandlers : null);
177
+ return () => {
178
+ onPanHandlersChange?.(null);
179
+ };
180
+ }, [onPanHandlersChange, panResponder.panHandlers, state.isSessionEnabled]);
181
+ const handleCopySelectedElement = (0, react_1.useCallback)(async () => {
182
+ const selectedElement = state.selectedElement;
183
+ if (!selectedElement) {
184
+ return;
185
+ }
186
+ closeSelectedElementMenu();
187
+ try {
188
+ await (0, copy_1.copyViaMetro)(selectedElement.description);
189
+ showCopiedBadge();
190
+ }
191
+ catch {
192
+ console.error("[react-native-grab] Copying failed. Ensure your Metro config is wrapped with withReactNativeGrab(...) and Metro has been restarted.");
193
+ }
194
+ }, [closeSelectedElementMenu, showCopiedBadge, state.selectedElement]);
195
+ const handleOpenSelectedElement = (0, react_1.useCallback)(async () => {
196
+ const frame = state.selectedElement?.frame;
197
+ if (!frame?.file || frame.line == null) {
198
+ return;
199
+ }
200
+ closeSelectedElementMenu();
201
+ try {
202
+ await (0, open_1.openStackFrameInEditor)({
203
+ file: frame.file,
204
+ lineNumber: frame.line,
205
+ });
206
+ }
207
+ catch {
208
+ console.error("[react-native-grab] Opening editor failed.");
209
+ }
210
+ }, [closeSelectedElementMenu, state.selectedElement]);
211
+ const selectedElementMenuAnchor = (0, react_1.useMemo)(() => {
212
+ if (!state.selectedElement) {
213
+ return null;
214
+ }
215
+ const rect = state.selectedElement.result.rect;
216
+ return {
217
+ x: rect[0] + rect[2] / 2,
218
+ y: rect[1] + rect[3],
219
+ };
220
+ }, [state.selectedElement]);
221
+ const highlightedElement = state.grabbedElement ?? state.selectedElement?.result ?? null;
222
+ if (!state.isSessionEnabled &&
223
+ !state.isCopyBadgeVisible &&
224
+ !state.grabbedElement &&
225
+ !state.selectedElement) {
226
+ return null;
227
+ }
228
+ return ((0, jsx_runtime_1.jsxs)(react_native_1.View, { pointerEvents: "box-none", style: styles.overlayRoot, onLayout: (event) => {
229
+ const { width, height } = event.nativeEvent.layout;
230
+ setBounds((prev) => {
231
+ if (prev.width === width && prev.height === height) {
232
+ return prev;
233
+ }
234
+ return { width, height };
235
+ });
236
+ }, children: [state.isSessionEnabled && ((0, jsx_runtime_1.jsx)(react_native_1.View, { pointerEvents: "none", style: styles.topBadge, children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: styles.topBadgeText, children: "Touch and move around to grab" }) })), state.isCopyBadgeVisible && ((0, jsx_runtime_1.jsx)(react_native_1.View, { pointerEvents: "none", style: styles.topBadge, children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: styles.topBadgeText, children: "Element copied" }) })), !!highlightedElement && ((0, jsx_runtime_1.jsx)(react_native_1.View, { pointerEvents: "none", style: [
237
+ styles.highlight,
238
+ {
239
+ left: highlightedElement.rect[0],
240
+ top: highlightedElement.rect[1],
241
+ width: highlightedElement.rect[2],
242
+ height: highlightedElement.rect[3],
243
+ },
244
+ ] })), (0, jsx_runtime_1.jsxs)(context_menu_1.ContextMenu, { anchor: selectedElementMenuAnchor, bounds: bounds, cutout: state.selectedElement
245
+ ? {
246
+ x: state.selectedElement.result.rect[0],
247
+ y: state.selectedElement.result.rect[1],
248
+ width: state.selectedElement.result.rect[2],
249
+ height: state.selectedElement.result.rect[3],
250
+ }
251
+ : null, horizontalAlignment: "center", offset: { x: 0, y: 8 }, onClose: closeSelectedElementMenu, visible: state.selectedElement !== null, children: [(0, jsx_runtime_1.jsx)(react_native_1.View, { style: styles.selectionMenuHeader, children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { adjustsFontSizeToFit: true, minimumFontScale: 0.65, numberOfLines: 1, style: styles.selectionMenuTitle, children: state.selectedElement?.elementName }) }), (0, jsx_runtime_1.jsxs)(react_native_1.View, { style: styles.selectionMenuActions, children: [(0, jsx_runtime_1.jsx)(react_native_1.Pressable, { accessibilityRole: "button", onPress: () => void handleCopySelectedElement(), style: ({ pressed }) => [
252
+ styles.selectionMenuActionButton,
253
+ pressed && styles.selectionMenuActionButtonPressed,
254
+ ], children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: styles.selectionMenuActionText, children: "Copy" }) }), (0, jsx_runtime_1.jsx)(react_native_1.View, { style: styles.selectionMenuActionDivider }), (0, jsx_runtime_1.jsx)(react_native_1.Pressable, { accessibilityRole: "button", disabled: !state.selectedElement?.frame?.file, onPress: () => void handleOpenSelectedElement(), style: ({ pressed }) => [
255
+ styles.selectionMenuActionButton,
256
+ pressed &&
257
+ state.selectedElement?.frame?.file &&
258
+ styles.selectionMenuActionButtonPressed,
259
+ ], children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: [
260
+ styles.selectionMenuActionText,
261
+ !state.selectedElement?.frame?.file && styles.selectionMenuActionTextDisabled,
262
+ ], children: "Open" }) })] })] })] }));
140
263
  };
141
264
  exports.ReactNativeGrabOverlay = ReactNativeGrabOverlay;
142
265
  const styles = react_native_1.StyleSheet.create({
@@ -151,12 +274,54 @@ const styles = react_native_1.StyleSheet.create({
151
274
  borderRadius: 999,
152
275
  paddingHorizontal: 14,
153
276
  paddingVertical: 8,
154
- backgroundColor: BADGE_BACKGROUND,
277
+ backgroundColor: grab_colors_1.GRAB_BADGE_BACKGROUND,
155
278
  },
156
279
  topBadgeText: {
157
280
  color: "#FFFFFF",
158
281
  fontSize: 13,
159
282
  fontWeight: "600",
160
283
  },
284
+ highlight: {
285
+ position: "absolute",
286
+ backgroundColor: grab_colors_1.GRAB_HIGHLIGHT_FILL,
287
+ borderWidth: 1,
288
+ borderColor: grab_colors_1.GRAB_PRIMARY,
289
+ },
290
+ selectionMenuHeader: {
291
+ alignSelf: "stretch",
292
+ paddingHorizontal: 14,
293
+ paddingVertical: 12,
294
+ },
295
+ selectionMenuTitle: {
296
+ width: "100%",
297
+ color: "#111111",
298
+ fontSize: 14,
299
+ fontWeight: "600",
300
+ },
301
+ selectionMenuActions: {
302
+ flexDirection: "row",
303
+ },
304
+ selectionMenuActionButton: {
305
+ flex: 1,
306
+ },
307
+ selectionMenuActionButtonPressed: {
308
+ backgroundColor: "rgba(17, 17, 17, 0.06)",
309
+ },
310
+ selectionMenuActionDivider: {
311
+ width: react_native_1.StyleSheet.hairlineWidth,
312
+ backgroundColor: "rgba(17, 17, 17, 0.12)",
313
+ },
314
+ selectionMenuActionText: {
315
+ flex: 1,
316
+ paddingHorizontal: 14,
317
+ paddingVertical: 12,
318
+ color: "#111111",
319
+ fontSize: 14,
320
+ fontWeight: "500",
321
+ textAlign: "center",
322
+ },
323
+ selectionMenuActionTextDisabled: {
324
+ opacity: 0.4,
325
+ },
161
326
  });
162
327
  //# sourceMappingURL=grab-overlay.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"grab-overlay.js","sourceRoot":"","sources":["../../../src/react-native/grab-overlay.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"grab-overlay.js","sourceRoot":"","sources":["../../../src/react-native/grab-overlay.tsx"],"names":[],"mappings":"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"}
@@ -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"}
@@ -5,31 +5,32 @@ const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const react_native_1 = require("react-native");
7
7
  const containers_1 = require("./containers");
8
- const getFocusEffectImpl = () => {
9
- try {
10
- return require("expo-router").useFocusEffect;
11
- }
12
- catch {
13
- // Nothing we can do about it, it's not installed in the project.
14
- }
15
- try {
16
- return require("@react-navigation/native").useFocusEffect;
17
- }
18
- catch {
19
- // Nothing we can do about it, it's not installed in the project.
20
- }
21
- throw new Error("No useFocusEffect implementation found");
22
- };
23
- const useFocusEffect = getFocusEffectImpl();
24
- const ReactNativeGrabScreen = ({ children, style, ...props }) => {
8
+ const focus_effect_1 = require("./focus-effect");
9
+ const grab_overlay_1 = require("./grab-overlay");
10
+ const useFocusEffect = (0, focus_effect_1.getFocusEffect)();
11
+ const ReactNativeGrabScreen = ({ children, style, id, ...props }) => {
25
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
+ }, []);
26
24
  useFocusEffect((0, react_1.useCallback)(() => {
27
25
  if (!screenRef.current) {
28
26
  return;
29
27
  }
30
- (0, containers_1.setFocusedScreenRef)(screenRef.current);
28
+ (0, containers_1.setGrabSelectionOwnerFocused)(ownerIdRef.current, true);
29
+ return () => {
30
+ (0, containers_1.clearGrabSelectionOwnerFocus)(ownerIdRef.current);
31
+ };
31
32
  }, []));
32
- 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 })] }));
33
34
  };
34
35
  exports.ReactNativeGrabScreen = ReactNativeGrabScreen;
35
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;AAEnD,MAAM,kBAAkB,GAAG,GAA+B,EAAE;IAC1D,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,iEAAiE;IACnE,CAAC;IAED,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,0BAA0B,CAAC,CAAC,cAAc,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,iEAAiE;IACnE,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;AAC5D,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,kBAAkB,EAAE,CAAC;AAIrC,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,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.enableGrabbing = exports.ReactNativeGrabContextProvider = exports.ReactNativeGrabScreen = exports.ReactNativeGrabRoot = void 0;
3
+ exports.setFocusEffect = exports.enableGrabbing = exports.ReactNativeGrabContextProvider = exports.ReactNativeGrabScreen = exports.ReactNativeGrabRoot = void 0;
4
4
  const noop = () => { };
5
5
  const Passthrough = ({ children }) => children;
6
6
  exports.ReactNativeGrabRoot = __DEV__
@@ -13,4 +13,7 @@ exports.ReactNativeGrabContextProvider = __DEV__ ? require("./grab-context").Rea
13
13
  exports.enableGrabbing = __DEV__
14
14
  ? require("./grab-controller").enableGrabbing
15
15
  : noop;
16
+ exports.setFocusEffect = __DEV__
17
+ ? require("./focus-effect").setFocusEffect
18
+ : noop;
16
19
  //# sourceMappingURL=index.js.map
@@ -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"}
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"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.openStackFrameInEditor = void 0;
7
+ const getDevServer_1 = __importDefault(require("react-native/Libraries/Core/Devtools/getDevServer"));
8
+ const openStackFrameInEditor = async (payload) => {
9
+ const response = await fetch(`${(0, getDevServer_1.default)().url}open-stack-frame`, {
10
+ method: "POST",
11
+ headers: {
12
+ "Content-Type": "application/json",
13
+ },
14
+ body: JSON.stringify(payload),
15
+ });
16
+ if (!response.ok) {
17
+ throw new Error(`Open stack frame request failed with status ${response.status}`);
18
+ }
19
+ };
20
+ exports.openStackFrameInEditor = openStackFrameInEditor;
21
+ //# sourceMappingURL=open.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open.js","sourceRoot":"","sources":["../../../src/react-native/open.ts"],"names":[],"mappings":";;;;;;AAAA,qGAA6E;AAOtE,MAAM,sBAAsB,GAAG,KAAK,EAAE,OAAyB,EAAiB,EAAE;IACvF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAA,sBAAY,GAAE,CAAC,GAAG,kBAAkB,EAAE;QACpE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;KAC9B,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,+CAA+C,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACpF,CAAC;AACH,CAAC,CAAC;AAZW,QAAA,sBAAsB,0BAYjC"}