react-native-grab 0.0.4 → 0.0.6
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.
- package/README.md +23 -21
- package/dist/cjs/metro/withReactNativeGrab.js +0 -48
- package/dist/cjs/metro/withReactNativeGrab.js.map +1 -1
- package/dist/cjs/react-native/containers.js +41 -0
- package/dist/cjs/react-native/containers.js.map +1 -0
- package/dist/cjs/react-native/copy.js +27 -0
- package/dist/cjs/react-native/copy.js.map +1 -0
- package/dist/cjs/react-native/description.js +160 -0
- package/dist/cjs/react-native/description.js.map +1 -0
- package/dist/cjs/react-native/dev-menu.js +34 -0
- package/dist/cjs/react-native/dev-menu.js.map +1 -0
- package/dist/cjs/react-native/fabric.js +11 -0
- package/dist/cjs/react-native/fabric.js.map +1 -0
- package/dist/cjs/react-native/full-screen-overlay.js +24 -0
- package/dist/cjs/react-native/full-screen-overlay.js.map +1 -0
- package/dist/cjs/react-native/get-rendered-by.js +169 -0
- package/dist/cjs/react-native/get-rendered-by.js.map +1 -0
- package/dist/cjs/react-native/grab-overlay.js +180 -0
- package/dist/cjs/react-native/grab-overlay.js.map +1 -0
- package/dist/cjs/react-native/grab-root.js +21 -0
- package/dist/cjs/react-native/grab-root.js.map +1 -0
- package/dist/cjs/react-native/grab-root.web.js +9 -0
- package/dist/cjs/react-native/grab-root.web.js.map +1 -0
- package/dist/cjs/react-native/grab-screen.js +35 -0
- package/dist/cjs/react-native/grab-screen.js.map +1 -0
- package/dist/cjs/react-native/grab-screen.web.js +9 -0
- package/dist/cjs/react-native/grab-screen.web.js.map +1 -0
- package/dist/cjs/react-native/index.js +7 -535
- package/dist/cjs/react-native/index.js.map +1 -1
- package/dist/cjs/react-native/measure.js +23 -0
- package/dist/cjs/react-native/measure.js.map +1 -0
- package/dist/cjs/react-native/utils.js +13 -0
- package/dist/cjs/react-native/utils.js.map +1 -0
- package/dist/esm/metro/withReactNativeGrab.js +0 -48
- package/dist/esm/metro/withReactNativeGrab.js.map +1 -1
- package/dist/esm/react-native/containers.js +34 -0
- package/dist/esm/react-native/containers.js.map +1 -0
- package/dist/esm/react-native/copy.js +23 -0
- package/dist/esm/react-native/copy.js.map +1 -0
- package/dist/esm/react-native/description.js +156 -0
- package/dist/esm/react-native/description.js.map +1 -0
- package/dist/esm/react-native/dev-menu.js +30 -0
- package/dist/esm/react-native/dev-menu.js.map +1 -0
- package/dist/esm/react-native/fabric.js +7 -0
- package/dist/esm/react-native/fabric.js.map +1 -0
- package/dist/esm/react-native/full-screen-overlay.js +20 -0
- package/dist/esm/react-native/full-screen-overlay.js.map +1 -0
- package/dist/esm/react-native/get-rendered-by.js +162 -0
- package/dist/esm/react-native/get-rendered-by.js.map +1 -0
- package/dist/esm/react-native/grab-overlay.js +176 -0
- package/dist/esm/react-native/grab-overlay.js.map +1 -0
- package/dist/esm/react-native/grab-root.js +17 -0
- package/dist/esm/react-native/grab-root.js.map +1 -0
- package/dist/esm/react-native/grab-root.web.js +5 -0
- package/dist/esm/react-native/grab-root.web.js.map +1 -0
- package/dist/esm/react-native/grab-screen.js +31 -0
- package/dist/esm/react-native/grab-screen.js.map +1 -0
- package/dist/esm/react-native/grab-screen.web.js +5 -0
- package/dist/esm/react-native/grab-screen.web.js.map +1 -0
- package/dist/esm/react-native/index.js +3 -533
- package/dist/esm/react-native/index.js.map +1 -1
- package/dist/esm/react-native/measure.js +18 -0
- package/dist/esm/react-native/measure.js.map +1 -0
- package/dist/esm/react-native/utils.js +9 -0
- package/dist/esm/react-native/utils.js.map +1 -0
- package/dist/types/metro/withReactNativeGrab.d.ts.map +1 -1
- package/dist/types/react-native/containers.d.ts +7 -0
- package/dist/types/react-native/containers.d.ts.map +1 -0
- package/dist/types/react-native/copy.d.ts +7 -0
- package/dist/types/react-native/copy.d.ts.map +1 -0
- package/dist/types/react-native/description.d.ts +3 -0
- package/dist/types/react-native/description.d.ts.map +1 -0
- package/dist/types/react-native/dev-menu.d.ts +2 -0
- package/dist/types/react-native/dev-menu.d.ts.map +1 -0
- package/dist/types/react-native/fabric.d.ts +12 -0
- package/dist/types/react-native/fabric.d.ts.map +1 -0
- package/dist/types/react-native/full-screen-overlay.d.ts +6 -0
- package/dist/types/react-native/full-screen-overlay.d.ts.map +1 -0
- package/dist/types/react-native/get-rendered-by.d.ts +10 -0
- package/dist/types/react-native/get-rendered-by.d.ts.map +1 -0
- package/dist/types/react-native/grab-overlay.d.ts +2 -0
- package/dist/types/react-native/grab-overlay.d.ts.map +1 -0
- package/dist/types/react-native/grab-root.d.ts +4 -0
- package/dist/types/react-native/grab-root.d.ts.map +1 -0
- package/dist/types/react-native/grab-root.web.d.ts +2 -0
- package/dist/types/react-native/grab-root.web.d.ts.map +1 -0
- package/dist/types/react-native/grab-screen.d.ts +4 -0
- package/dist/types/react-native/grab-screen.d.ts.map +1 -0
- package/dist/types/react-native/grab-screen.web.d.ts +2 -0
- package/dist/types/react-native/grab-screen.web.d.ts.map +1 -0
- package/dist/types/react-native/index.d.ts +3 -1
- package/dist/types/react-native/index.d.ts.map +1 -1
- package/dist/types/react-native/measure.d.ts +4 -0
- package/dist/types/react-native/measure.d.ts.map +1 -0
- package/dist/types/react-native/types.d.ts +11 -43
- package/dist/types/react-native/types.d.ts.map +1 -1
- package/dist/types/react-native/utils.d.ts +2 -0
- package/dist/types/react-native/utils.d.ts.map +1 -0
- package/package.json +16 -2
- package/dist/cjs/react-native/__tests__/dom-traversal.test.js +0 -160
- package/dist/cjs/react-native/__tests__/dom-traversal.test.js.map +0 -1
- package/dist/cjs/react-native/__tests__/mock-dom.js +0 -65
- package/dist/cjs/react-native/__tests__/mock-dom.js.map +0 -1
- package/dist/cjs/react-native/__tests__/setup.js +0 -43
- package/dist/cjs/react-native/__tests__/setup.js.map +0 -1
- package/dist/cjs/react-native/__tests__/z-index.test.js +0 -106
- package/dist/cjs/react-native/__tests__/z-index.test.js.map +0 -1
- package/dist/cjs/react-native/copy-payload.js +0 -336
- package/dist/cjs/react-native/copy-payload.js.map +0 -1
- package/dist/cjs/react-native/dom-traversal.js +0 -254
- package/dist/cjs/react-native/dom-traversal.js.map +0 -1
- package/dist/cjs/react-native/fiber.js +0 -142
- package/dist/cjs/react-native/fiber.js.map +0 -1
- package/dist/cjs/react-native/get-dev-server.js +0 -9
- package/dist/cjs/react-native/get-dev-server.js.map +0 -1
- package/dist/cjs/react-native/index.web.js +0 -8
- package/dist/cjs/react-native/index.web.js.map +0 -1
- package/dist/cjs/react-native/pointer-events.js +0 -114
- package/dist/cjs/react-native/pointer-events.js.map +0 -1
- package/dist/cjs/react-native/selection-trigger.js +0 -19
- package/dist/cjs/react-native/selection-trigger.js.map +0 -1
- package/dist/cjs/react-native/settings.js +0 -98
- package/dist/cjs/react-native/settings.js.map +0 -1
- package/dist/cjs/react-native/symbolicate.js +0 -15
- package/dist/cjs/react-native/symbolicate.js.map +0 -1
- package/dist/cjs/react-native/z-index.js +0 -65
- package/dist/cjs/react-native/z-index.js.map +0 -1
- package/dist/esm/react-native/__tests__/dom-traversal.test.js +0 -158
- package/dist/esm/react-native/__tests__/dom-traversal.test.js.map +0 -1
- package/dist/esm/react-native/__tests__/mock-dom.js +0 -58
- package/dist/esm/react-native/__tests__/mock-dom.js.map +0 -1
- package/dist/esm/react-native/__tests__/setup.js +0 -41
- package/dist/esm/react-native/__tests__/setup.js.map +0 -1
- package/dist/esm/react-native/__tests__/z-index.test.js +0 -104
- package/dist/esm/react-native/__tests__/z-index.test.js.map +0 -1
- package/dist/esm/react-native/copy-payload.js +0 -329
- package/dist/esm/react-native/copy-payload.js.map +0 -1
- package/dist/esm/react-native/dom-traversal.js +0 -247
- package/dist/esm/react-native/dom-traversal.js.map +0 -1
- package/dist/esm/react-native/fiber.js +0 -133
- package/dist/esm/react-native/fiber.js.map +0 -1
- package/dist/esm/react-native/get-dev-server.js +0 -3
- package/dist/esm/react-native/get-dev-server.js.map +0 -1
- package/dist/esm/react-native/index.web.js +0 -4
- package/dist/esm/react-native/index.web.js.map +0 -1
- package/dist/esm/react-native/pointer-events.js +0 -106
- package/dist/esm/react-native/pointer-events.js.map +0 -1
- package/dist/esm/react-native/selection-trigger.js +0 -14
- package/dist/esm/react-native/selection-trigger.js.map +0 -1
- package/dist/esm/react-native/settings.js +0 -91
- package/dist/esm/react-native/settings.js.map +0 -1
- package/dist/esm/react-native/symbolicate.js +0 -8
- package/dist/esm/react-native/symbolicate.js.map +0 -1
- package/dist/esm/react-native/z-index.js +0 -61
- package/dist/esm/react-native/z-index.js.map +0 -1
- package/dist/types/react-native/__tests__/dom-traversal.test.d.ts +0 -2
- package/dist/types/react-native/__tests__/dom-traversal.test.d.ts.map +0 -1
- package/dist/types/react-native/__tests__/mock-dom.d.ts +0 -24
- package/dist/types/react-native/__tests__/mock-dom.d.ts.map +0 -1
- package/dist/types/react-native/__tests__/setup.d.ts +0 -2
- package/dist/types/react-native/__tests__/setup.d.ts.map +0 -1
- package/dist/types/react-native/__tests__/z-index.test.d.ts +0 -2
- package/dist/types/react-native/__tests__/z-index.test.d.ts.map +0 -1
- package/dist/types/react-native/copy-payload.d.ts +0 -22
- package/dist/types/react-native/copy-payload.d.ts.map +0 -1
- package/dist/types/react-native/dom-traversal.d.ts +0 -21
- package/dist/types/react-native/dom-traversal.d.ts.map +0 -1
- package/dist/types/react-native/fiber.d.ts +0 -22
- package/dist/types/react-native/fiber.d.ts.map +0 -1
- package/dist/types/react-native/get-dev-server.d.ts +0 -3
- package/dist/types/react-native/get-dev-server.d.ts.map +0 -1
- package/dist/types/react-native/index.web.d.ts +0 -2
- package/dist/types/react-native/index.web.d.ts.map +0 -1
- package/dist/types/react-native/pointer-events.d.ts +0 -13
- package/dist/types/react-native/pointer-events.d.ts.map +0 -1
- package/dist/types/react-native/selection-trigger.d.ts +0 -3
- package/dist/types/react-native/selection-trigger.d.ts.map +0 -1
- package/dist/types/react-native/settings.d.ts +0 -8
- package/dist/types/react-native/settings.d.ts.map +0 -1
- package/dist/types/react-native/symbolicate.d.ts +0 -3
- package/dist/types/react-native/symbolicate.d.ts.map +0 -1
- package/dist/types/react-native/z-index.d.ts +0 -3
- package/dist/types/react-native/z-index.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -6,10 +6,10 @@ React Grab equivalent for React Native.
|
|
|
6
6
|
|
|
7
7
|
## Why this is useful
|
|
8
8
|
|
|
9
|
-
React Grab
|
|
9
|
+
React Grab's main value on web is removing the "search phase" for AI edits.
|
|
10
10
|
This package applies the same workflow in React Native:
|
|
11
11
|
|
|
12
|
-
- Point, don
|
|
12
|
+
- Point, don't describe: select the exact element on screen.
|
|
13
13
|
- Faster UI iteration: less back-and-forth explaining which component to edit.
|
|
14
14
|
- Better AI prompts: copied context includes component/source signal, not vague screenshots.
|
|
15
15
|
- Dev-only integration: middleware + inspector are intended for local development.
|
|
@@ -22,11 +22,6 @@ If you make frequent low-entropy UI changes (spacing, alignment, copy, visual po
|
|
|
22
22
|
npm install react-native-grab
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
Peer dependencies:
|
|
26
|
-
|
|
27
|
-
- `react`
|
|
28
|
-
- `react-native`
|
|
29
|
-
|
|
30
25
|
## Quick start
|
|
31
26
|
|
|
32
27
|
### 1. Wire Metro middleware
|
|
@@ -42,32 +37,39 @@ const config = getDefaultConfig(__dirname);
|
|
|
42
37
|
module.exports = withReactNativeGrab(config);
|
|
43
38
|
```
|
|
44
39
|
|
|
45
|
-
### 2.
|
|
40
|
+
### 2. Wrap app root and each screen
|
|
46
41
|
|
|
47
42
|
```tsx
|
|
48
43
|
import React from "react";
|
|
49
|
-
import {
|
|
50
|
-
import { ElementInspector } from "react-native-grab";
|
|
44
|
+
import { Stack } from "expo-router";
|
|
45
|
+
import { ElementInspector, ReactNativeGrabRoot, ReactNativeGrabScreen } from "react-native-grab";
|
|
46
|
+
|
|
47
|
+
function HomeScreen() {
|
|
48
|
+
return <ReactNativeGrabScreen>{/* screen content */}</ReactNativeGrabScreen>;
|
|
49
|
+
}
|
|
51
50
|
|
|
52
|
-
export function
|
|
51
|
+
export default function AppLayout() {
|
|
53
52
|
return (
|
|
54
|
-
<
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
</View>
|
|
53
|
+
<ReactNativeGrabRoot>
|
|
54
|
+
<Stack />
|
|
55
|
+
</ReactNativeGrabRoot>
|
|
58
56
|
);
|
|
59
57
|
}
|
|
60
58
|
```
|
|
61
59
|
|
|
60
|
+
Notes:
|
|
61
|
+
|
|
62
|
+
- `ReactNativeGrabRoot` must wrap your whole app tree once.
|
|
63
|
+
- If you use native navigators, wrap each route/screen in `ReactNativeGrabScreen`.
|
|
64
|
+
|
|
62
65
|
## Workflow
|
|
63
66
|
|
|
64
67
|
1. Start your app in development.
|
|
65
|
-
2. Open the React Native Dev Menu and
|
|
66
|
-
3. Tap the floating
|
|
67
|
-
4.
|
|
68
|
-
5.
|
|
69
|
-
6.
|
|
70
|
-
7. Paste into Codex/Cursor/Claude Code/Copilot with your requested change.
|
|
68
|
+
2. Open the React Native Dev Menu and select `React Native Grab: Toggle Button`.
|
|
69
|
+
3. Tap the floating `Grab` button.
|
|
70
|
+
4. Touch and move on screen to select elements, then release to capture.
|
|
71
|
+
5. Context is sent to Metro and copied to your host clipboard.
|
|
72
|
+
6. Paste into Codex/Cursor/Claude Code/Copilot with your requested change.
|
|
71
73
|
|
|
72
74
|
## Development (this repo)
|
|
73
75
|
|
|
@@ -5,12 +5,7 @@ const node_child_process_1 = require("node:child_process");
|
|
|
5
5
|
const metro_config_transformers_1 = require("metro-config-transformers");
|
|
6
6
|
const MAX_BODY_BYTES = 1024 * 512;
|
|
7
7
|
const JSON_HEADERS = { "Content-Type": "application/json" };
|
|
8
|
-
const SETTINGS_ROUTE = "/__react-native-grab/settings";
|
|
9
8
|
const COPY_ROUTE = "/__react-native-grab/copy";
|
|
10
|
-
const DEFAULT_SETTINGS = Object.freeze({
|
|
11
|
-
selectionPillVisible: false,
|
|
12
|
-
});
|
|
13
|
-
let persistedSettings = { ...DEFAULT_SETTINGS };
|
|
14
9
|
const tryCopy = (command, args, text) => {
|
|
15
10
|
try {
|
|
16
11
|
(0, node_child_process_1.execFileSync)(command, args, { input: text });
|
|
@@ -88,23 +83,6 @@ const readJsonBody = (req, res, onSuccess) => {
|
|
|
88
83
|
}
|
|
89
84
|
});
|
|
90
85
|
};
|
|
91
|
-
const hasOwn = (payload, key) => {
|
|
92
|
-
return Object.prototype.hasOwnProperty.call(payload, key);
|
|
93
|
-
};
|
|
94
|
-
const validateSettingsPatch = (payload) => {
|
|
95
|
-
const patch = {};
|
|
96
|
-
if (hasOwn(payload, "selectionPillVisible")) {
|
|
97
|
-
const value = payload.selectionPillVisible;
|
|
98
|
-
if (typeof value !== "boolean") {
|
|
99
|
-
return {
|
|
100
|
-
ok: false,
|
|
101
|
-
error: "selectionPillVisible must be a boolean",
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
patch.selectionPillVisible = value;
|
|
105
|
-
}
|
|
106
|
-
return { ok: true, patch };
|
|
107
|
-
};
|
|
108
86
|
const handleCopyRequest = (req, res) => {
|
|
109
87
|
if (req.method !== "POST") {
|
|
110
88
|
sendJson(res, 405, { ok: false, error: "Method not allowed" });
|
|
@@ -124,38 +102,12 @@ const handleCopyRequest = (req, res) => {
|
|
|
124
102
|
sendJson(res, 200, { ok: true });
|
|
125
103
|
});
|
|
126
104
|
};
|
|
127
|
-
const handleSettingsRequest = (req, res) => {
|
|
128
|
-
if (req.method === "GET") {
|
|
129
|
-
sendJson(res, 200, { ok: true, settings: persistedSettings });
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
if (req.method !== "POST") {
|
|
133
|
-
sendJson(res, 405, { ok: false, error: "Method not allowed" });
|
|
134
|
-
return;
|
|
135
|
-
}
|
|
136
|
-
readJsonBody(req, res, (payload) => {
|
|
137
|
-
const validation = validateSettingsPatch(payload);
|
|
138
|
-
if (!validation.ok) {
|
|
139
|
-
sendJson(res, 400, { ok: false, error: validation.error });
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
persistedSettings = {
|
|
143
|
-
...persistedSettings,
|
|
144
|
-
...validation.patch,
|
|
145
|
-
};
|
|
146
|
-
sendJson(res, 200, { ok: true, settings: persistedSettings });
|
|
147
|
-
});
|
|
148
|
-
};
|
|
149
105
|
const handleReactNativeGrabRequest = (req, res, next) => {
|
|
150
106
|
const pathname = getPathname(req);
|
|
151
107
|
if (pathname === COPY_ROUTE) {
|
|
152
108
|
handleCopyRequest(req, res);
|
|
153
109
|
return;
|
|
154
110
|
}
|
|
155
|
-
if (pathname === SETTINGS_ROUTE) {
|
|
156
|
-
handleSettingsRequest(req, res);
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
111
|
next();
|
|
160
112
|
};
|
|
161
113
|
exports.withReactNativeGrab = (0, metro_config_transformers_1.createMetroConfigTransformer)((config) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withReactNativeGrab.js","sourceRoot":"","sources":["../../../src/metro/withReactNativeGrab.ts"],"names":[],"mappings":";;;AAAA,2DAAkD;AAGlD,yEAAyE;AAEzE,MAAM,cAAc,GAAG,IAAI,GAAG,GAAG,CAAC;AAClC,MAAM,YAAY,GAAG,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;AAC5D,MAAM,
|
|
1
|
+
{"version":3,"file":"withReactNativeGrab.js","sourceRoot":"","sources":["../../../src/metro/withReactNativeGrab.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getFocusedScreenShadowNode = exports.getAppRootShadowNode = exports.setAppRootRef = exports.setFocusedScreenRef = void 0;
|
|
4
|
+
const react_native_1 = require("react-native");
|
|
5
|
+
const fabric_1 = require("./fabric");
|
|
6
|
+
let focusedScreenShadowNode = null;
|
|
7
|
+
let appRootShadowNode = null;
|
|
8
|
+
const setFocusedScreenRef = (ref) => {
|
|
9
|
+
// @ts-expect-error - findNodeHandle is not typed correctly
|
|
10
|
+
const nativeTag = (0, react_native_1.findNodeHandle)(ref);
|
|
11
|
+
if (!nativeTag) {
|
|
12
|
+
throw new Error("Failed to find native tag for focused screen");
|
|
13
|
+
}
|
|
14
|
+
focusedScreenShadowNode = (0, fabric_1.getFabricUIManager)().findShadowNodeByTag_DEPRECATED(nativeTag);
|
|
15
|
+
};
|
|
16
|
+
exports.setFocusedScreenRef = setFocusedScreenRef;
|
|
17
|
+
const setAppRootRef = (ref) => {
|
|
18
|
+
// @ts-expect-error - findNodeHandle is not typed correctly
|
|
19
|
+
const nativeTag = (0, react_native_1.findNodeHandle)(ref);
|
|
20
|
+
if (!nativeTag) {
|
|
21
|
+
throw new Error("Failed to find native tag for app root");
|
|
22
|
+
}
|
|
23
|
+
appRootShadowNode = (0, fabric_1.getFabricUIManager)().findShadowNodeByTag_DEPRECATED(nativeTag);
|
|
24
|
+
};
|
|
25
|
+
exports.setAppRootRef = setAppRootRef;
|
|
26
|
+
const getAppRootShadowNode = () => {
|
|
27
|
+
if (!appRootShadowNode) {
|
|
28
|
+
throw new Error("You seem to forgot to wrap your app root with ReactNativeGrabRoot.");
|
|
29
|
+
}
|
|
30
|
+
return appRootShadowNode;
|
|
31
|
+
};
|
|
32
|
+
exports.getAppRootShadowNode = getAppRootShadowNode;
|
|
33
|
+
const getFocusedScreenShadowNode = () => {
|
|
34
|
+
if (!focusedScreenShadowNode) {
|
|
35
|
+
// No native screens, so there will be only the app root.
|
|
36
|
+
return (0, exports.getAppRootShadowNode)();
|
|
37
|
+
}
|
|
38
|
+
return focusedScreenShadowNode;
|
|
39
|
+
};
|
|
40
|
+
exports.getFocusedScreenShadowNode = getFocusedScreenShadowNode;
|
|
41
|
+
//# sourceMappingURL=containers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"containers.js","sourceRoot":"","sources":["../../../src/react-native/containers.ts"],"names":[],"mappings":";;;AAAA,+CAAuE;AAEvE,qCAA8C;AAE9C,IAAI,uBAAuB,GAAiC,IAAI,CAAC;AACjE,IAAI,iBAAiB,GAAiC,IAAI,CAAC;AAEpD,MAAM,mBAAmB,GAAG,CAAC,GAAuB,EAAE,EAAE;IAC9D,2DAA2D;IAC3D,MAAM,SAAS,GAAG,IAAA,6BAAc,EAAC,GAAG,CAAC,CAAC;IAEtC,IAAI,CAAC,SAAS,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACjE,CAAC;IAED,uBAAuB,GAAG,IAAA,2BAAkB,GAAE,CAAC,8BAA8B,CAAC,SAAS,CAAC,CAAC;AAC1F,CAAC,CAAC;AATW,QAAA,mBAAmB,uBAS9B;AAEK,MAAM,aAAa,GAAG,CAAC,GAAuB,EAAE,EAAE;IACxD,2DAA2D;IAC3D,MAAM,SAAS,GAAG,IAAA,6BAAc,EAAC,GAAG,CAAC,CAAC;IAEtC,IAAI,CAAC,SAAS,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC3D,CAAC;IAED,iBAAiB,GAAG,IAAA,2BAAkB,GAAE,CAAC,8BAA8B,CAAC,SAAS,CAAC,CAAC;AACpF,CAAC,CAAA;AATY,QAAA,aAAa,iBASzB;AAEM,MAAM,oBAAoB,GAAG,GAA0B,EAAE;IAC/D,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;IACvF,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC1B,CAAC,CAAC;AANW,QAAA,oBAAoB,wBAM/B;AACK,MAAM,0BAA0B,GAAG,GAAG,EAAE;IAC9C,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC9B,yDAAyD;QACzD,OAAO,IAAA,4BAAoB,GAAE,CAAC;IAC/B,CAAC;IAED,OAAO,uBAAuB,CAAC;AAChC,CAAC,CAAC;AAPW,QAAA,0BAA0B,8BAOrC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.copyViaMetro = void 0;
|
|
4
|
+
const DEFAULT_COPY_ENDPOINT = "/__react-native-grab/copy";
|
|
5
|
+
const copyViaMetro = async (text, options = {}) => {
|
|
6
|
+
if (!text.trim()) {
|
|
7
|
+
throw new Error("Text to copy cannot be empty");
|
|
8
|
+
}
|
|
9
|
+
const response = await fetch(options.endpoint ?? DEFAULT_COPY_ENDPOINT, {
|
|
10
|
+
method: "POST",
|
|
11
|
+
headers: { "Content-Type": "application/json" },
|
|
12
|
+
body: JSON.stringify({ text }),
|
|
13
|
+
signal: options.signal,
|
|
14
|
+
});
|
|
15
|
+
let payload;
|
|
16
|
+
try {
|
|
17
|
+
payload = (await response.json());
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
payload = undefined;
|
|
21
|
+
}
|
|
22
|
+
if (!response.ok || payload?.ok === false) {
|
|
23
|
+
throw new Error(payload?.error ?? `Copy request failed with status ${response.status}`);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
exports.copyViaMetro = copyViaMetro;
|
|
27
|
+
//# sourceMappingURL=copy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy.js","sourceRoot":"","sources":["../../../src/react-native/copy.ts"],"names":[],"mappings":";;;AAAA,MAAM,qBAAqB,GAAG,2BAA2B,CAAC;AAgBnD,MAAM,YAAY,GAAG,KAAK,EAC/B,IAAY,EACZ,UAA+B,EAAE,EAClB,EAAE;IACjB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,IAAI,qBAAqB,EAAE;QACtE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAA+B,CAAC;QAC3D,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,IAAI,OAAwC,CAAC;IAC7C,IAAI,CAAC;QACH,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAwB,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,SAAS,CAAC;IACtB,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,OAAO,EAAE,EAAE,KAAK,KAAK,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,KAAK,IAAI,mCAAmC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1F,CAAC;AACH,CAAC,CAAC;AAzBW,QAAA,YAAY,gBAyBvB"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getDescription = void 0;
|
|
4
|
+
const get_rendered_by_1 = require("./get-rendered-by");
|
|
5
|
+
const MAX_STACK_LINES = 3;
|
|
6
|
+
const MAX_TEXT_LENGTH = 120;
|
|
7
|
+
const MAX_ATTR_VALUE_LENGTH = 80;
|
|
8
|
+
const MAX_ATTRS = 6;
|
|
9
|
+
const PRIORITY_ATTRS = [
|
|
10
|
+
"testID",
|
|
11
|
+
"nativeID",
|
|
12
|
+
"accessibilityLabel",
|
|
13
|
+
"accessibilityRole",
|
|
14
|
+
"accessibilityHint",
|
|
15
|
+
"accessibilityState",
|
|
16
|
+
"accessibilityValue",
|
|
17
|
+
];
|
|
18
|
+
const truncate = (value, maxLength) => {
|
|
19
|
+
if (value.length <= maxLength)
|
|
20
|
+
return value;
|
|
21
|
+
return `${value.slice(0, maxLength - 3)}...`;
|
|
22
|
+
};
|
|
23
|
+
const escapeAttr = (value) => {
|
|
24
|
+
return value
|
|
25
|
+
.replace(/\\/g, "\\\\")
|
|
26
|
+
.replace(/\r?\n|\r/g, " ")
|
|
27
|
+
.replace(/"/g, '\\"');
|
|
28
|
+
};
|
|
29
|
+
const stringifyAttrValue = (value) => {
|
|
30
|
+
if (value == null)
|
|
31
|
+
return null;
|
|
32
|
+
if (typeof value === "string") {
|
|
33
|
+
if (value.trim().length === 0)
|
|
34
|
+
return null;
|
|
35
|
+
return value;
|
|
36
|
+
}
|
|
37
|
+
if (typeof value === "number" || typeof value === "boolean") {
|
|
38
|
+
return String(value);
|
|
39
|
+
}
|
|
40
|
+
if (typeof value === "object") {
|
|
41
|
+
try {
|
|
42
|
+
return JSON.stringify(value);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return String(value);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
};
|
|
50
|
+
const collectPrimitiveText = (value, out) => {
|
|
51
|
+
if (typeof value === "string" || typeof value === "number") {
|
|
52
|
+
const text = String(value).trim();
|
|
53
|
+
if (text.length > 0)
|
|
54
|
+
out.push(text);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
if (Array.isArray(value)) {
|
|
58
|
+
for (const item of value) {
|
|
59
|
+
collectPrimitiveText(item, out);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
const extractTextPreview = (props) => {
|
|
64
|
+
if (!props || !("children" in props))
|
|
65
|
+
return "";
|
|
66
|
+
const parts = [];
|
|
67
|
+
collectPrimitiveText(props.children, parts);
|
|
68
|
+
if (parts.length === 0)
|
|
69
|
+
return "";
|
|
70
|
+
const normalized = parts.join(" ").replace(/\s+/g, " ").trim();
|
|
71
|
+
return truncate(normalized, MAX_TEXT_LENGTH);
|
|
72
|
+
};
|
|
73
|
+
const getHostFiber = (node) => {
|
|
74
|
+
let current = node;
|
|
75
|
+
while (current) {
|
|
76
|
+
if (typeof current.type === "string") {
|
|
77
|
+
return current;
|
|
78
|
+
}
|
|
79
|
+
current = current.return ?? null;
|
|
80
|
+
}
|
|
81
|
+
return node ?? null;
|
|
82
|
+
};
|
|
83
|
+
const getHostComponentName = (fiber) => {
|
|
84
|
+
const componentType = fiber?.type;
|
|
85
|
+
if (typeof componentType === "string" && componentType.length > 0) {
|
|
86
|
+
return componentType;
|
|
87
|
+
}
|
|
88
|
+
return "(unknown)";
|
|
89
|
+
};
|
|
90
|
+
const getMemoizedProps = (fiber) => {
|
|
91
|
+
const props = fiber?.memoizedProps;
|
|
92
|
+
if (!props || typeof props !== "object")
|
|
93
|
+
return null;
|
|
94
|
+
return props;
|
|
95
|
+
};
|
|
96
|
+
const extractPriorityAttrs = (props) => {
|
|
97
|
+
if (!props)
|
|
98
|
+
return "";
|
|
99
|
+
const pairs = [];
|
|
100
|
+
for (const key of PRIORITY_ATTRS) {
|
|
101
|
+
if (pairs.length >= MAX_ATTRS)
|
|
102
|
+
break;
|
|
103
|
+
const rawValue = stringifyAttrValue(props[key]);
|
|
104
|
+
if (!rawValue)
|
|
105
|
+
continue;
|
|
106
|
+
const value = escapeAttr(truncate(rawValue, MAX_ATTR_VALUE_LENGTH));
|
|
107
|
+
pairs.push(`${key}="${value}"`);
|
|
108
|
+
}
|
|
109
|
+
return pairs.length > 0 ? ` ${pairs.join(" ")}` : "";
|
|
110
|
+
};
|
|
111
|
+
const getPreviewComponentName = (node, renderedBy) => {
|
|
112
|
+
const firstRenderedBy = renderedBy[0]?.name?.trim();
|
|
113
|
+
if (firstRenderedBy)
|
|
114
|
+
return firstRenderedBy;
|
|
115
|
+
const hostFiber = getHostFiber(node);
|
|
116
|
+
return getHostComponentName(hostFiber);
|
|
117
|
+
};
|
|
118
|
+
const buildElementPreview = (node, renderedBy) => {
|
|
119
|
+
const componentName = getPreviewComponentName(node, renderedBy);
|
|
120
|
+
const hostFiber = getHostFiber(node);
|
|
121
|
+
const props = getMemoizedProps(hostFiber);
|
|
122
|
+
const attrs = extractPriorityAttrs(props);
|
|
123
|
+
const text = extractTextPreview(props);
|
|
124
|
+
if (!text) {
|
|
125
|
+
return `<${componentName}${attrs} />`;
|
|
126
|
+
}
|
|
127
|
+
return `<${componentName}${attrs}>\n ${text}\n</${componentName}>`;
|
|
128
|
+
};
|
|
129
|
+
const formatFrameLocation = (file, line, column) => {
|
|
130
|
+
if (!file)
|
|
131
|
+
return null;
|
|
132
|
+
if (line == null)
|
|
133
|
+
return file;
|
|
134
|
+
if (column == null)
|
|
135
|
+
return `${file}:${line}`;
|
|
136
|
+
return `${file}:${line}:${column}`;
|
|
137
|
+
};
|
|
138
|
+
const buildStackContext = (renderedBy) => {
|
|
139
|
+
const lines = renderedBy
|
|
140
|
+
.filter((frame) => Boolean(frame.file))
|
|
141
|
+
.slice(0, MAX_STACK_LINES)
|
|
142
|
+
.map((frame) => {
|
|
143
|
+
const location = formatFrameLocation(frame.file, frame.line, frame.column);
|
|
144
|
+
if (!location)
|
|
145
|
+
return "";
|
|
146
|
+
return `\n in ${frame.name} (at ${location})`;
|
|
147
|
+
})
|
|
148
|
+
.filter(Boolean);
|
|
149
|
+
return lines.join("");
|
|
150
|
+
};
|
|
151
|
+
const getDescription = async (node) => {
|
|
152
|
+
let renderedBy = await (0, get_rendered_by_1.getRenderedBy)(node);
|
|
153
|
+
const preview = buildElementPreview(node, renderedBy);
|
|
154
|
+
const stackContext = buildStackContext(renderedBy);
|
|
155
|
+
if (!stackContext)
|
|
156
|
+
return preview;
|
|
157
|
+
return `${preview}${stackContext}`;
|
|
158
|
+
};
|
|
159
|
+
exports.getDescription = getDescription;
|
|
160
|
+
//# sourceMappingURL=description.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"description.js","sourceRoot":"","sources":["../../../src/react-native/description.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useDevMenu = void 0;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const react_native_1 = require("react-native");
|
|
6
|
+
const utils_1 = require("./utils");
|
|
7
|
+
const useDevMenu = (onToggle) => {
|
|
8
|
+
const onToggleRef = (0, utils_1.useLatest)(onToggle);
|
|
9
|
+
// Add to React Native Dev Menu
|
|
10
|
+
(0, react_1.useEffect)(() => {
|
|
11
|
+
react_native_1.DevSettings.addMenuItem("React Native Grab: Toggle Button", () => {
|
|
12
|
+
onToggleRef.current();
|
|
13
|
+
});
|
|
14
|
+
}, []);
|
|
15
|
+
// Add to Expo Dev Menu if available
|
|
16
|
+
(0, react_1.useEffect)(() => {
|
|
17
|
+
try {
|
|
18
|
+
const expoDevMenuModule = require("expo-dev-menu");
|
|
19
|
+
expoDevMenuModule.registerDevMenuItems([
|
|
20
|
+
{
|
|
21
|
+
name: "React Native Grab: Toggle Button",
|
|
22
|
+
callback: () => {
|
|
23
|
+
onToggleRef.current();
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
]);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
// Nothing we can do about it, it's not installed in the project.
|
|
30
|
+
}
|
|
31
|
+
}, []);
|
|
32
|
+
};
|
|
33
|
+
exports.useDevMenu = useDevMenu;
|
|
34
|
+
//# sourceMappingURL=dev-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-menu.js","sourceRoot":"","sources":["../../../src/react-native/dev-menu.ts"],"names":[],"mappings":";;;AAAA,iCAAkC;AAClC,+CAA2C;AAC3C,mCAAoC;AAG7B,MAAM,UAAU,GAAG,CAAC,QAAoB,EAAE,EAAE;IACjD,MAAM,WAAW,GAAG,IAAA,iBAAS,EAAC,QAAQ,CAAC,CAAC;IAExC,+BAA+B;IAC/B,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,0BAAW,CAAC,WAAW,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC/D,WAAW,CAAC,OAAO,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,oCAAoC;IACpC,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC;YACH,MAAM,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAA6B,CAAC;YAE/E,iBAAiB,CAAC,oBAAoB,CAAC;gBACrC;oBACE,IAAI,EAAE,kCAAkC;oBACxC,QAAQ,EAAE,GAAG,EAAE;wBACb,WAAW,CAAC,OAAO,EAAE,CAAC;oBACxB,CAAC;iBACF;aACF,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,iEAAiE;QACnE,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC,CAAC;AA3BW,QAAA,UAAU,cA2BrB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getFabricUIManager = void 0;
|
|
4
|
+
const getFabricUIManager = () => {
|
|
5
|
+
if (typeof nativeFabricUIManager === "undefined") {
|
|
6
|
+
throw new Error("React Native Grab requires New Architecture (Fabric) to be enabled.");
|
|
7
|
+
}
|
|
8
|
+
return nativeFabricUIManager;
|
|
9
|
+
};
|
|
10
|
+
exports.getFabricUIManager = getFabricUIManager;
|
|
11
|
+
//# sourceMappingURL=fabric.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fabric.js","sourceRoot":"","sources":["../../../src/react-native/fabric.ts"],"names":[],"mappings":";;;AAkBO,MAAM,kBAAkB,GAAG,GAAoB,EAAE;IACvD,IAAI,OAAO,qBAAqB,KAAK,WAAW,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACxF,CAAC;IAED,OAAO,qBAAqB,CAAC;AAC9B,CAAC,CAAC;AANW,QAAA,kBAAkB,sBAM7B"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FullScreenOverlay = 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 getRoot = () => {
|
|
8
|
+
if (react_native_1.Platform.OS !== "ios") {
|
|
9
|
+
return react_1.Fragment;
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
return require("react-native-screens").FullWindowOverlay;
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
// Nothing we can do about it, it's not installed in the project.
|
|
16
|
+
}
|
|
17
|
+
return react_1.Fragment;
|
|
18
|
+
};
|
|
19
|
+
const Root = getRoot();
|
|
20
|
+
const FullScreenOverlay = ({ children }) => {
|
|
21
|
+
return (0, jsx_runtime_1.jsx)(Root, { children: children });
|
|
22
|
+
};
|
|
23
|
+
exports.FullScreenOverlay = FullScreenOverlay;
|
|
24
|
+
//# sourceMappingURL=full-screen-overlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"full-screen-overlay.js","sourceRoot":"","sources":["../../../src/react-native/full-screen-overlay.tsx"],"names":[],"mappings":";;;;AAAA,iCAA4C;AAC5C,+CAAwC;AAExC,MAAM,OAAO,GAAG,GAAG,EAAE;IACnB,IAAI,uBAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;QAC1B,OAAO,gBAAQ,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,sBAAsB,CAAC,CAAC,iBAAiB,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,iEAAiE;IACnE,CAAC;IAED,OAAO,gBAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;AAMhB,MAAM,iBAAiB,GAAG,CAAC,EAAE,QAAQ,EAA0B,EAAE,EAAE;IACxE,OAAO,uBAAC,IAAI,cAAE,QAAQ,GAAQ,CAAC;AACjC,CAAC,CAAC;AAFW,QAAA,iBAAiB,qBAE5B"}
|