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.
Files changed (183) hide show
  1. package/README.md +23 -21
  2. package/dist/cjs/metro/withReactNativeGrab.js +0 -48
  3. package/dist/cjs/metro/withReactNativeGrab.js.map +1 -1
  4. package/dist/cjs/react-native/containers.js +41 -0
  5. package/dist/cjs/react-native/containers.js.map +1 -0
  6. package/dist/cjs/react-native/copy.js +27 -0
  7. package/dist/cjs/react-native/copy.js.map +1 -0
  8. package/dist/cjs/react-native/description.js +160 -0
  9. package/dist/cjs/react-native/description.js.map +1 -0
  10. package/dist/cjs/react-native/dev-menu.js +34 -0
  11. package/dist/cjs/react-native/dev-menu.js.map +1 -0
  12. package/dist/cjs/react-native/fabric.js +11 -0
  13. package/dist/cjs/react-native/fabric.js.map +1 -0
  14. package/dist/cjs/react-native/full-screen-overlay.js +24 -0
  15. package/dist/cjs/react-native/full-screen-overlay.js.map +1 -0
  16. package/dist/cjs/react-native/get-rendered-by.js +169 -0
  17. package/dist/cjs/react-native/get-rendered-by.js.map +1 -0
  18. package/dist/cjs/react-native/grab-overlay.js +180 -0
  19. package/dist/cjs/react-native/grab-overlay.js.map +1 -0
  20. package/dist/cjs/react-native/grab-root.js +21 -0
  21. package/dist/cjs/react-native/grab-root.js.map +1 -0
  22. package/dist/cjs/react-native/grab-root.web.js +9 -0
  23. package/dist/cjs/react-native/grab-root.web.js.map +1 -0
  24. package/dist/cjs/react-native/grab-screen.js +35 -0
  25. package/dist/cjs/react-native/grab-screen.js.map +1 -0
  26. package/dist/cjs/react-native/grab-screen.web.js +9 -0
  27. package/dist/cjs/react-native/grab-screen.web.js.map +1 -0
  28. package/dist/cjs/react-native/index.js +7 -535
  29. package/dist/cjs/react-native/index.js.map +1 -1
  30. package/dist/cjs/react-native/measure.js +23 -0
  31. package/dist/cjs/react-native/measure.js.map +1 -0
  32. package/dist/cjs/react-native/utils.js +13 -0
  33. package/dist/cjs/react-native/utils.js.map +1 -0
  34. package/dist/esm/metro/withReactNativeGrab.js +0 -48
  35. package/dist/esm/metro/withReactNativeGrab.js.map +1 -1
  36. package/dist/esm/react-native/containers.js +34 -0
  37. package/dist/esm/react-native/containers.js.map +1 -0
  38. package/dist/esm/react-native/copy.js +23 -0
  39. package/dist/esm/react-native/copy.js.map +1 -0
  40. package/dist/esm/react-native/description.js +156 -0
  41. package/dist/esm/react-native/description.js.map +1 -0
  42. package/dist/esm/react-native/dev-menu.js +30 -0
  43. package/dist/esm/react-native/dev-menu.js.map +1 -0
  44. package/dist/esm/react-native/fabric.js +7 -0
  45. package/dist/esm/react-native/fabric.js.map +1 -0
  46. package/dist/esm/react-native/full-screen-overlay.js +20 -0
  47. package/dist/esm/react-native/full-screen-overlay.js.map +1 -0
  48. package/dist/esm/react-native/get-rendered-by.js +162 -0
  49. package/dist/esm/react-native/get-rendered-by.js.map +1 -0
  50. package/dist/esm/react-native/grab-overlay.js +176 -0
  51. package/dist/esm/react-native/grab-overlay.js.map +1 -0
  52. package/dist/esm/react-native/grab-root.js +17 -0
  53. package/dist/esm/react-native/grab-root.js.map +1 -0
  54. package/dist/esm/react-native/grab-root.web.js +5 -0
  55. package/dist/esm/react-native/grab-root.web.js.map +1 -0
  56. package/dist/esm/react-native/grab-screen.js +31 -0
  57. package/dist/esm/react-native/grab-screen.js.map +1 -0
  58. package/dist/esm/react-native/grab-screen.web.js +5 -0
  59. package/dist/esm/react-native/grab-screen.web.js.map +1 -0
  60. package/dist/esm/react-native/index.js +3 -533
  61. package/dist/esm/react-native/index.js.map +1 -1
  62. package/dist/esm/react-native/measure.js +18 -0
  63. package/dist/esm/react-native/measure.js.map +1 -0
  64. package/dist/esm/react-native/utils.js +9 -0
  65. package/dist/esm/react-native/utils.js.map +1 -0
  66. package/dist/types/metro/withReactNativeGrab.d.ts.map +1 -1
  67. package/dist/types/react-native/containers.d.ts +7 -0
  68. package/dist/types/react-native/containers.d.ts.map +1 -0
  69. package/dist/types/react-native/copy.d.ts +7 -0
  70. package/dist/types/react-native/copy.d.ts.map +1 -0
  71. package/dist/types/react-native/description.d.ts +3 -0
  72. package/dist/types/react-native/description.d.ts.map +1 -0
  73. package/dist/types/react-native/dev-menu.d.ts +2 -0
  74. package/dist/types/react-native/dev-menu.d.ts.map +1 -0
  75. package/dist/types/react-native/fabric.d.ts +12 -0
  76. package/dist/types/react-native/fabric.d.ts.map +1 -0
  77. package/dist/types/react-native/full-screen-overlay.d.ts +6 -0
  78. package/dist/types/react-native/full-screen-overlay.d.ts.map +1 -0
  79. package/dist/types/react-native/get-rendered-by.d.ts +10 -0
  80. package/dist/types/react-native/get-rendered-by.d.ts.map +1 -0
  81. package/dist/types/react-native/grab-overlay.d.ts +2 -0
  82. package/dist/types/react-native/grab-overlay.d.ts.map +1 -0
  83. package/dist/types/react-native/grab-root.d.ts +4 -0
  84. package/dist/types/react-native/grab-root.d.ts.map +1 -0
  85. package/dist/types/react-native/grab-root.web.d.ts +2 -0
  86. package/dist/types/react-native/grab-root.web.d.ts.map +1 -0
  87. package/dist/types/react-native/grab-screen.d.ts +4 -0
  88. package/dist/types/react-native/grab-screen.d.ts.map +1 -0
  89. package/dist/types/react-native/grab-screen.web.d.ts +2 -0
  90. package/dist/types/react-native/grab-screen.web.d.ts.map +1 -0
  91. package/dist/types/react-native/index.d.ts +3 -1
  92. package/dist/types/react-native/index.d.ts.map +1 -1
  93. package/dist/types/react-native/measure.d.ts +4 -0
  94. package/dist/types/react-native/measure.d.ts.map +1 -0
  95. package/dist/types/react-native/types.d.ts +11 -43
  96. package/dist/types/react-native/types.d.ts.map +1 -1
  97. package/dist/types/react-native/utils.d.ts +2 -0
  98. package/dist/types/react-native/utils.d.ts.map +1 -0
  99. package/package.json +16 -2
  100. package/dist/cjs/react-native/__tests__/dom-traversal.test.js +0 -160
  101. package/dist/cjs/react-native/__tests__/dom-traversal.test.js.map +0 -1
  102. package/dist/cjs/react-native/__tests__/mock-dom.js +0 -65
  103. package/dist/cjs/react-native/__tests__/mock-dom.js.map +0 -1
  104. package/dist/cjs/react-native/__tests__/setup.js +0 -43
  105. package/dist/cjs/react-native/__tests__/setup.js.map +0 -1
  106. package/dist/cjs/react-native/__tests__/z-index.test.js +0 -106
  107. package/dist/cjs/react-native/__tests__/z-index.test.js.map +0 -1
  108. package/dist/cjs/react-native/copy-payload.js +0 -336
  109. package/dist/cjs/react-native/copy-payload.js.map +0 -1
  110. package/dist/cjs/react-native/dom-traversal.js +0 -254
  111. package/dist/cjs/react-native/dom-traversal.js.map +0 -1
  112. package/dist/cjs/react-native/fiber.js +0 -142
  113. package/dist/cjs/react-native/fiber.js.map +0 -1
  114. package/dist/cjs/react-native/get-dev-server.js +0 -9
  115. package/dist/cjs/react-native/get-dev-server.js.map +0 -1
  116. package/dist/cjs/react-native/index.web.js +0 -8
  117. package/dist/cjs/react-native/index.web.js.map +0 -1
  118. package/dist/cjs/react-native/pointer-events.js +0 -114
  119. package/dist/cjs/react-native/pointer-events.js.map +0 -1
  120. package/dist/cjs/react-native/selection-trigger.js +0 -19
  121. package/dist/cjs/react-native/selection-trigger.js.map +0 -1
  122. package/dist/cjs/react-native/settings.js +0 -98
  123. package/dist/cjs/react-native/settings.js.map +0 -1
  124. package/dist/cjs/react-native/symbolicate.js +0 -15
  125. package/dist/cjs/react-native/symbolicate.js.map +0 -1
  126. package/dist/cjs/react-native/z-index.js +0 -65
  127. package/dist/cjs/react-native/z-index.js.map +0 -1
  128. package/dist/esm/react-native/__tests__/dom-traversal.test.js +0 -158
  129. package/dist/esm/react-native/__tests__/dom-traversal.test.js.map +0 -1
  130. package/dist/esm/react-native/__tests__/mock-dom.js +0 -58
  131. package/dist/esm/react-native/__tests__/mock-dom.js.map +0 -1
  132. package/dist/esm/react-native/__tests__/setup.js +0 -41
  133. package/dist/esm/react-native/__tests__/setup.js.map +0 -1
  134. package/dist/esm/react-native/__tests__/z-index.test.js +0 -104
  135. package/dist/esm/react-native/__tests__/z-index.test.js.map +0 -1
  136. package/dist/esm/react-native/copy-payload.js +0 -329
  137. package/dist/esm/react-native/copy-payload.js.map +0 -1
  138. package/dist/esm/react-native/dom-traversal.js +0 -247
  139. package/dist/esm/react-native/dom-traversal.js.map +0 -1
  140. package/dist/esm/react-native/fiber.js +0 -133
  141. package/dist/esm/react-native/fiber.js.map +0 -1
  142. package/dist/esm/react-native/get-dev-server.js +0 -3
  143. package/dist/esm/react-native/get-dev-server.js.map +0 -1
  144. package/dist/esm/react-native/index.web.js +0 -4
  145. package/dist/esm/react-native/index.web.js.map +0 -1
  146. package/dist/esm/react-native/pointer-events.js +0 -106
  147. package/dist/esm/react-native/pointer-events.js.map +0 -1
  148. package/dist/esm/react-native/selection-trigger.js +0 -14
  149. package/dist/esm/react-native/selection-trigger.js.map +0 -1
  150. package/dist/esm/react-native/settings.js +0 -91
  151. package/dist/esm/react-native/settings.js.map +0 -1
  152. package/dist/esm/react-native/symbolicate.js +0 -8
  153. package/dist/esm/react-native/symbolicate.js.map +0 -1
  154. package/dist/esm/react-native/z-index.js +0 -61
  155. package/dist/esm/react-native/z-index.js.map +0 -1
  156. package/dist/types/react-native/__tests__/dom-traversal.test.d.ts +0 -2
  157. package/dist/types/react-native/__tests__/dom-traversal.test.d.ts.map +0 -1
  158. package/dist/types/react-native/__tests__/mock-dom.d.ts +0 -24
  159. package/dist/types/react-native/__tests__/mock-dom.d.ts.map +0 -1
  160. package/dist/types/react-native/__tests__/setup.d.ts +0 -2
  161. package/dist/types/react-native/__tests__/setup.d.ts.map +0 -1
  162. package/dist/types/react-native/__tests__/z-index.test.d.ts +0 -2
  163. package/dist/types/react-native/__tests__/z-index.test.d.ts.map +0 -1
  164. package/dist/types/react-native/copy-payload.d.ts +0 -22
  165. package/dist/types/react-native/copy-payload.d.ts.map +0 -1
  166. package/dist/types/react-native/dom-traversal.d.ts +0 -21
  167. package/dist/types/react-native/dom-traversal.d.ts.map +0 -1
  168. package/dist/types/react-native/fiber.d.ts +0 -22
  169. package/dist/types/react-native/fiber.d.ts.map +0 -1
  170. package/dist/types/react-native/get-dev-server.d.ts +0 -3
  171. package/dist/types/react-native/get-dev-server.d.ts.map +0 -1
  172. package/dist/types/react-native/index.web.d.ts +0 -2
  173. package/dist/types/react-native/index.web.d.ts.map +0 -1
  174. package/dist/types/react-native/pointer-events.d.ts +0 -13
  175. package/dist/types/react-native/pointer-events.d.ts.map +0 -1
  176. package/dist/types/react-native/selection-trigger.d.ts +0 -3
  177. package/dist/types/react-native/selection-trigger.d.ts.map +0 -1
  178. package/dist/types/react-native/settings.d.ts +0 -8
  179. package/dist/types/react-native/settings.d.ts.map +0 -1
  180. package/dist/types/react-native/symbolicate.d.ts +0 -3
  181. package/dist/types/react-native/symbolicate.d.ts.map +0 -1
  182. package/dist/types/react-native/z-index.d.ts +0 -3
  183. package/dist/types/react-native/z-index.d.ts.map +0 -1
@@ -1,534 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Fragment, useCallback, useEffect, useRef, useState, } from "react";
3
- import { Animated, DevSettings, Dimensions, PanResponder, Platform, Pressable, StatusBar, StyleSheet, Text, useWindowDimensions, View, } from "react-native";
4
- import { getDevServer } from "./get-dev-server";
5
- import { FullWindowOverlay } from "react-native-screens";
6
- import { buildInspectorCopyPayload } from "./copy-payload";
7
- import { startSession as startTraversalSession, } from "./dom-traversal";
8
- import { requestInspectorSelection, subscribeInspectorSelectionRequest } from "./selection-trigger";
9
- import { getInspectorSettings, initializeInspectorSettings, subscribeInspectorSettings, updateInspectorSettings, } from "./settings";
10
- const SETTLE_MS = 80;
11
- const MOVEMENT_EPSILON_PX = 8;
12
- const MAX_STACK_LINES = 3;
13
- const MAX_PREVIEW_TEXT = 120;
14
- const INSPECTOR_COPY_ENDPOINT = "/__react-native-grab/copy";
15
- const FAB_SIZE = 56;
16
- const FAB_SCREEN_PADDING = 8;
17
- const FAB_DEFAULT_RIGHT_OFFSET = 20;
18
- const FAB_DEFAULT_BOTTOM_OFFSET = 32;
19
- const getMetroBaseUrl = () => {
20
- const devServer = getDevServer();
21
- if (!devServer?.url)
22
- return null;
23
- return devServer.url.replace(/\/$/, "");
24
- };
25
- const getInitialFabPosition = () => {
26
- const { width, height } = Dimensions.get("window");
27
- return {
28
- x: Math.max(FAB_SCREEN_PADDING, width - FAB_DEFAULT_RIGHT_OFFSET - FAB_SIZE),
29
- y: Math.max(FAB_SCREEN_PADDING, height - FAB_DEFAULT_BOTTOM_OFFSET - FAB_SIZE),
30
- };
31
- };
32
- const clampFabPosition = (x, y, windowWidth, windowHeight) => {
33
- const maxX = Math.max(FAB_SCREEN_PADDING, windowWidth - FAB_SIZE - FAB_SCREEN_PADDING);
34
- const maxY = Math.max(FAB_SCREEN_PADDING, windowHeight - FAB_SIZE - FAB_SCREEN_PADDING);
35
- return {
36
- x: Math.min(Math.max(x, FAB_SCREEN_PADDING), maxX),
37
- y: Math.min(Math.max(y, FAB_SCREEN_PADDING), maxY),
38
- };
39
- };
40
- const useLatestRef = (value) => {
41
- const ref = useRef(value);
42
- ref.current = value;
43
- return ref;
44
- };
45
- const useTraversalSelectionSession = ({ anchorRef, inspectorRootRef, overlayRef, statusBarOffset, setHighlightRect, }) => {
46
- const traversalSessionRef = useRef(null);
47
- const skipRefsRef = useRef([inspectorRootRef, overlayRef]);
48
- const stopSession = useCallback(() => {
49
- traversalSessionRef.current?.stop();
50
- traversalSessionRef.current = null;
51
- }, []);
52
- const startSession = useCallback(() => {
53
- const skipPredicate = Platform.OS === "ios"
54
- ? (node) => {
55
- const inspectorRootNode = inspectorRootRef.current;
56
- if (!inspectorRootNode)
57
- return false;
58
- return node === inspectorRootNode.parentElement;
59
- }
60
- : undefined;
61
- stopSession();
62
- traversalSessionRef.current = startTraversalSession({
63
- anchorRef,
64
- skipRefs: skipRefsRef.current,
65
- offset: statusBarOffset,
66
- skipPredicate,
67
- });
68
- setHighlightRect(null);
69
- }, [anchorRef, inspectorRootRef, setHighlightRect, statusBarOffset, stopSession]);
70
- const queryAtPoint = useCallback((x, y) => {
71
- const session = traversalSessionRef.current;
72
- if (!session) {
73
- setHighlightRect(null);
74
- return null;
75
- }
76
- const hitTarget = session.move({
77
- x,
78
- y: y - statusBarOffset,
79
- });
80
- setHighlightRect(hitTarget?.rect ?? null);
81
- return hitTarget;
82
- }, [setHighlightRect, statusBarOffset]);
83
- useEffect(() => {
84
- return () => {
85
- stopSession();
86
- };
87
- }, [stopSession]);
88
- return {
89
- startSession,
90
- queryAtPoint,
91
- stopSession,
92
- };
93
- };
94
- const useSelectionGesture = ({ isSelecting, queryAtPoint, onHitTarget, onCancel, }) => {
95
- const isSelectingRef = useLatestRef(isSelecting);
96
- const queryAtPointRef = useLatestRef(queryAtPoint);
97
- const onHitTargetRef = useLatestRef(onHitTarget);
98
- const onCancelRef = useLatestRef(onCancel);
99
- const settleTimeoutRef = useRef(null);
100
- const lastQueryPositionRef = useRef(null);
101
- const movePositionRef = useRef({ x: 0, y: 0 });
102
- const clearSettleTimeout = useCallback(() => {
103
- if (settleTimeoutRef.current != null) {
104
- clearTimeout(settleTimeoutRef.current);
105
- settleTimeoutRef.current = null;
106
- }
107
- }, []);
108
- const resetGestureState = useCallback(() => {
109
- clearSettleTimeout();
110
- lastQueryPositionRef.current = null;
111
- }, [clearSettleTimeout]);
112
- const panResponder = useRef(PanResponder.create({
113
- onStartShouldSetPanResponder: () => true,
114
- onMoveShouldSetPanResponder: () => true,
115
- onPanResponderGrant: (evt) => {
116
- if (!isSelectingRef.current)
117
- return;
118
- const x = evt.nativeEvent.locationX;
119
- const y = evt.nativeEvent.locationY;
120
- queryAtPointRef.current(x, y);
121
- lastQueryPositionRef.current = { x, y };
122
- },
123
- onPanResponderMove: (evt) => {
124
- if (!isSelectingRef.current)
125
- return;
126
- movePositionRef.current = {
127
- x: evt.nativeEvent.locationX,
128
- y: evt.nativeEvent.locationY,
129
- };
130
- clearSettleTimeout();
131
- settleTimeoutRef.current = setTimeout(() => {
132
- settleTimeoutRef.current = null;
133
- if (!isSelectingRef.current)
134
- return;
135
- const pos = movePositionRef.current;
136
- const last = lastQueryPositionRef.current;
137
- const distance = last ? Math.hypot(pos.x - last.x, pos.y - last.y) : Infinity;
138
- if (distance < MOVEMENT_EPSILON_PX)
139
- return;
140
- lastQueryPositionRef.current = pos;
141
- queryAtPointRef.current(pos.x, pos.y);
142
- }, SETTLE_MS);
143
- },
144
- onPanResponderRelease: (evt) => {
145
- if (!isSelectingRef.current)
146
- return;
147
- const hitTarget = queryAtPointRef.current(evt.nativeEvent.locationX, evt.nativeEvent.locationY);
148
- if (!hitTarget) {
149
- onCancelRef.current();
150
- return;
151
- }
152
- onHitTargetRef.current(hitTarget);
153
- },
154
- onPanResponderTerminate: () => {
155
- if (isSelectingRef.current) {
156
- onCancelRef.current();
157
- }
158
- },
159
- })).current;
160
- useEffect(() => {
161
- return () => {
162
- clearSettleTimeout();
163
- };
164
- }, [clearSettleTimeout]);
165
- return {
166
- panHandlers: panResponder.panHandlers,
167
- resetGestureState,
168
- };
169
- };
170
- const useFabController = (windowWidth, windowHeight) => {
171
- const initialFabPosition = useRef(getInitialFabPosition()).current;
172
- const fabAppearAnim = useRef(new Animated.Value(1)).current;
173
- const fabPressAnim = useRef(new Animated.Value(1)).current;
174
- const fabPosition = useRef(new Animated.ValueXY(initialFabPosition)).current;
175
- const fabPositionRef = useRef(initialFabPosition);
176
- const fabDragStartOffsetRef = useRef({ x: 0, y: 0 });
177
- const windowSizeRef = useRef({ width: windowWidth, height: windowHeight });
178
- windowSizeRef.current = { width: windowWidth, height: windowHeight };
179
- const animateFabPress = useCallback((toValue) => {
180
- Animated.spring(fabPressAnim, {
181
- toValue,
182
- useNativeDriver: true,
183
- tension: 220,
184
- friction: 16,
185
- }).start();
186
- }, [fabPressAnim]);
187
- const fabPanResponder = useRef(PanResponder.create({
188
- onStartShouldSetPanResponder: () => false,
189
- onMoveShouldSetPanResponder: (_evt, gestureState) => Math.abs(gestureState.dx) > 2 || Math.abs(gestureState.dy) > 2,
190
- onPanResponderGrant: (_evt, gestureState) => {
191
- fabDragStartOffsetRef.current = {
192
- x: fabPositionRef.current.x - gestureState.x0,
193
- y: fabPositionRef.current.y - gestureState.y0,
194
- };
195
- },
196
- onPanResponderMove: (_evt, gestureState) => {
197
- const { width, height } = windowSizeRef.current;
198
- const nextPosition = clampFabPosition(gestureState.moveX + fabDragStartOffsetRef.current.x, gestureState.moveY + fabDragStartOffsetRef.current.y, width, height);
199
- fabPositionRef.current = nextPosition;
200
- fabPosition.setValue(nextPosition);
201
- },
202
- onPanResponderTerminationRequest: () => true,
203
- onPanResponderTerminate: () => {
204
- fabPressAnim.setValue(1);
205
- },
206
- onPanResponderRelease: () => {
207
- fabPressAnim.setValue(1);
208
- },
209
- })).current;
210
- useEffect(() => {
211
- const nextPosition = clampFabPosition(fabPositionRef.current.x, fabPositionRef.current.y, windowWidth, windowHeight);
212
- fabPositionRef.current = nextPosition;
213
- fabPosition.setValue(nextPosition);
214
- }, [fabPosition, windowHeight, windowWidth]);
215
- return {
216
- animateFabPress,
217
- fabAppearAnim,
218
- fabPanHandlers: fabPanResponder.panHandlers,
219
- fabPosition,
220
- fabPressAnim,
221
- };
222
- };
223
- export const ElementInspector = () => {
224
- const { width: windowWidth, height: windowHeight } = useWindowDimensions();
225
- const statusBarOffset = Platform.OS === "android" ? (StatusBar.currentHeight ?? 0) : 0;
226
- const [state, setState] = useState({ status: "idle" });
227
- const [highlightRect, setHighlightRect] = useState(null);
228
- const [toastVisible, setToastVisible] = useState(false);
229
- const [selectionPillVisible, setSelectionPillVisible] = useState(() => getInspectorSettings().selectionPillVisible);
230
- const isClosingRef = useRef(false);
231
- const anchorRef = useRef(null);
232
- const inspectorRootRef = useRef(null);
233
- const overlayRef = useRef(null);
234
- const selectingHintAnim = useRef(new Animated.Value(0)).current;
235
- const toastAnim = useRef(new Animated.Value(0)).current;
236
- const idle = state.status === "idle";
237
- const selecting = state.status === "selecting";
238
- const overlayVisible = state.status !== "idle";
239
- const activeHighlightRect = state.status === "copying" ? state.selectedRect : highlightRect;
240
- const { animateFabPress, fabAppearAnim, fabPanHandlers, fabPosition, fabPressAnim } = useFabController(windowWidth, windowHeight);
241
- const { queryAtPoint, startSession, stopSession } = useTraversalSelectionSession({
242
- anchorRef,
243
- inspectorRootRef,
244
- overlayRef,
245
- statusBarOffset,
246
- setHighlightRect,
247
- });
248
- const closeOverlayImmediately = useCallback(() => {
249
- stopSession();
250
- setState({ status: "idle" });
251
- setHighlightRect(null);
252
- }, [stopSession]);
253
- const closeOverlay = useCallback(() => {
254
- if (isClosingRef.current)
255
- return;
256
- isClosingRef.current = true;
257
- closeOverlayImmediately();
258
- isClosingRef.current = false;
259
- }, [closeOverlayImmediately]);
260
- const showCopiedToast = useCallback(() => {
261
- setToastVisible(true);
262
- toastAnim.setValue(0);
263
- Animated.sequence([
264
- Animated.timing(toastAnim, {
265
- toValue: 1,
266
- duration: 140,
267
- useNativeDriver: true,
268
- }),
269
- Animated.delay(700),
270
- Animated.timing(toastAnim, {
271
- toValue: 0,
272
- duration: 180,
273
- useNativeDriver: true,
274
- }),
275
- ]).start(() => setToastVisible(false));
276
- }, [toastAnim]);
277
- const copyFeedbackToHostClipboard = useCallback(async (text) => {
278
- const baseUrl = getMetroBaseUrl();
279
- if (!baseUrl)
280
- return false;
281
- try {
282
- const response = await fetch(`${baseUrl}${INSPECTOR_COPY_ENDPOINT}`, {
283
- method: "POST",
284
- headers: { "Content-Type": "application/json" },
285
- body: JSON.stringify({ text }),
286
- });
287
- return response.ok;
288
- }
289
- catch {
290
- return false;
291
- }
292
- }, []);
293
- const handleSelectionHit = useCallback((hitTarget) => {
294
- setState({ status: "copying", selectedRect: hitTarget.rect });
295
- void (async () => {
296
- const clipboardText = await buildInspectorCopyPayload(hitTarget, {
297
- maxStackLines: MAX_STACK_LINES,
298
- maxPreviewText: MAX_PREVIEW_TEXT,
299
- pathRootHint: null,
300
- });
301
- const copied = await copyFeedbackToHostClipboard(clipboardText);
302
- if (copied) {
303
- showCopiedToast();
304
- }
305
- closeOverlay();
306
- })();
307
- }, [closeOverlay, copyFeedbackToHostClipboard, showCopiedToast]);
308
- const { panHandlers: selectionPanHandlers, resetGestureState } = useSelectionGesture({
309
- isSelecting: selecting,
310
- queryAtPoint,
311
- onHitTarget: handleSelectionHit,
312
- onCancel: closeOverlay,
313
- });
314
- const startSelecting = useCallback(() => {
315
- resetGestureState();
316
- startSession();
317
- setState({ status: "selecting" });
318
- }, [resetGestureState, startSession]);
319
- useEffect(() => {
320
- return subscribeInspectorSettings(() => {
321
- setSelectionPillVisible(getInspectorSettings().selectionPillVisible);
322
- });
323
- }, []);
324
- useEffect(() => {
325
- return subscribeInspectorSelectionRequest(() => {
326
- startSelecting();
327
- });
328
- }, [startSelecting]);
329
- useEffect(() => {
330
- void initializeInspectorSettings();
331
- }, []);
332
- useEffect(() => {
333
- DevSettings.addMenuItem("Toggle React Native Grab", () => {
334
- void (async () => {
335
- await initializeInspectorSettings();
336
- const current = getInspectorSettings().selectionPillVisible;
337
- console.log(`[InspectorFeedback] Toggle pill visibility: ${current} -> ${!current}`);
338
- await updateInspectorSettings({ selectionPillVisible: !current });
339
- })();
340
- });
341
- DevSettings.addMenuItem("Start React Native Grab Selection", () => {
342
- console.log("[InspectorFeedback] Start selection menu item pressed");
343
- requestInspectorSelection();
344
- });
345
- }, []);
346
- useEffect(() => {
347
- if (!selecting) {
348
- selectingHintAnim.stopAnimation();
349
- selectingHintAnim.setValue(0);
350
- return;
351
- }
352
- const loop = Animated.loop(Animated.sequence([
353
- Animated.timing(selectingHintAnim, {
354
- toValue: 1,
355
- duration: 900,
356
- useNativeDriver: true,
357
- }),
358
- Animated.timing(selectingHintAnim, {
359
- toValue: 0,
360
- duration: 900,
361
- useNativeDriver: true,
362
- }),
363
- ]));
364
- loop.start();
365
- return () => loop.stop();
366
- }, [selecting, selectingHintAnim]);
367
- useEffect(() => {
368
- Animated.timing(fabAppearAnim, {
369
- toValue: idle ? 1 : 0,
370
- duration: 140,
371
- useNativeDriver: true,
372
- }).start();
373
- }, [fabAppearAnim, idle]);
374
- useEffect(() => {
375
- return () => {
376
- resetGestureState();
377
- stopSession();
378
- };
379
- }, [resetGestureState, stopSession]);
380
- return (_jsx(InspectorRootContainer, { children: _jsxs(View, { ref: inspectorRootRef, style: StyleSheet.absoluteFill, pointerEvents: "box-none", children: [_jsx(View, { ref: anchorRef, style: [StyleSheet.absoluteFill, styles.anchor], pointerEvents: "none" }), _jsx(SelectionFab, { visible: idle && selectionPillVisible, onPress: startSelecting, onPressIn: () => animateFabPress(0.96), onPressOut: () => animateFabPress(1), panHandlers: fabPanHandlers, fabAppearAnim: fabAppearAnim, fabPosition: fabPosition, fabPressAnim: fabPressAnim }), _jsx(SelectionOverlay, { visible: overlayVisible, selecting: selecting, overlayRef: overlayRef, panHandlers: selectionPanHandlers, highlightRect: activeHighlightRect, statusBarOffset: statusBarOffset, selectingHintAnim: selectingHintAnim }), _jsx(CopiedToast, { visible: toastVisible, toastAnim: toastAnim })] }) }));
381
- };
382
- const SelectionFab = ({ visible, onPress, onPressIn, onPressOut, panHandlers, fabAppearAnim, fabPosition, fabPressAnim, }) => {
383
- if (!visible) {
384
- return null;
385
- }
386
- return (_jsx(Animated.View, { ...panHandlers, style: [
387
- styles.fab,
388
- {
389
- opacity: fabAppearAnim,
390
- transform: [
391
- { translateX: fabPosition.x },
392
- {
393
- translateY: Animated.add(fabPosition.y, fabAppearAnim.interpolate({
394
- inputRange: [0, 1],
395
- outputRange: [8, 0],
396
- })),
397
- },
398
- { scale: fabPressAnim },
399
- ],
400
- },
401
- ], children: _jsx(Pressable, { style: styles.fabInner, onPress: onPress, onPressIn: onPressIn, onPressOut: onPressOut, children: _jsx(Text, { style: styles.fabIcon, allowFontScaling: false, children: "\u2316" }) }) }));
402
- };
403
- const SelectionOverlay = ({ visible, selecting, overlayRef, panHandlers, highlightRect, statusBarOffset, selectingHintAnim, }) => {
404
- if (!visible) {
405
- return null;
406
- }
407
- return (_jsxs(View, { ref: overlayRef, style: styles.overlay, ...(selecting ? panHandlers : {}), children: [highlightRect && (_jsx(View, { pointerEvents: "none", style: [
408
- styles.highlight,
409
- {
410
- left: highlightRect.x,
411
- top: highlightRect.y + statusBarOffset,
412
- width: highlightRect.width,
413
- height: highlightRect.height,
414
- },
415
- ] })), selecting && (_jsx(Animated.View, { pointerEvents: "none", style: [
416
- styles.selectionHint,
417
- {
418
- opacity: selectingHintAnim.interpolate({
419
- inputRange: [0, 1],
420
- outputRange: [0.76, 1],
421
- }),
422
- transform: [
423
- {
424
- translateY: selectingHintAnim.interpolate({
425
- inputRange: [0, 1],
426
- outputRange: [0, -2],
427
- }),
428
- },
429
- ],
430
- },
431
- ], children: _jsx(Text, { style: styles.selectionHintText, children: "Drag or tap to find a source" }) }))] }));
432
- };
433
- const CopiedToast = ({ visible, toastAnim }) => {
434
- if (!visible) {
435
- return null;
436
- }
437
- return (_jsx(Animated.View, { pointerEvents: "none", style: [
438
- styles.toast,
439
- {
440
- opacity: toastAnim,
441
- transform: [
442
- {
443
- translateY: toastAnim.interpolate({
444
- inputRange: [0, 1],
445
- outputRange: [-8, 0],
446
- }),
447
- },
448
- ],
449
- },
450
- ], children: _jsx(Text, { style: styles.toastText, children: "Source location copied" }) }));
451
- };
452
- const InspectorRootContainer = ({ children }) => {
453
- if (Platform.OS === "ios") {
454
- return _jsx(FullWindowOverlay, { children: children });
455
- }
456
- return _jsx(Fragment, { children: children });
457
- };
458
- const styles = StyleSheet.create({
459
- anchor: {
460
- opacity: 0,
461
- },
462
- fab: {
463
- position: "absolute",
464
- left: 0,
465
- top: 0,
466
- zIndex: 9999,
467
- width: FAB_SIZE,
468
- height: FAB_SIZE,
469
- borderRadius: 9999,
470
- backgroundColor: "rgba(14,20,26,0.98)",
471
- borderWidth: 1,
472
- borderColor: "rgba(255,255,255,0.14)",
473
- elevation: 4,
474
- shadowColor: "#000",
475
- shadowOffset: { width: 0, height: 2 },
476
- shadowOpacity: 0.28,
477
- shadowRadius: 6,
478
- },
479
- fabInner: {
480
- flex: 1,
481
- flexDirection: "row",
482
- justifyContent: "center",
483
- alignItems: "center",
484
- width: "100%",
485
- height: "100%",
486
- },
487
- fabIcon: {
488
- color: "#F5F7FA",
489
- fontSize: 28,
490
- fontWeight: "500",
491
- },
492
- overlay: {
493
- ...StyleSheet.absoluteFillObject,
494
- backgroundColor: "rgba(0,0,0,0.015)",
495
- },
496
- selectionHint: {
497
- position: "absolute",
498
- top: 56,
499
- alignSelf: "center",
500
- backgroundColor: "rgba(14,20,26,0.9)",
501
- borderRadius: 18,
502
- paddingHorizontal: 14,
503
- paddingVertical: 8,
504
- borderWidth: 1,
505
- borderColor: "rgba(255,255,255,0.14)",
506
- },
507
- selectionHintText: {
508
- color: "#F5F7FA",
509
- fontSize: 13,
510
- fontWeight: "600",
511
- },
512
- highlight: {
513
- position: "absolute",
514
- borderWidth: 2,
515
- borderColor: "#1264A3",
516
- backgroundColor: "rgba(18,100,163,0.16)",
517
- },
518
- toast: {
519
- position: "absolute",
520
- top: 52,
521
- left: 16,
522
- right: 16,
523
- alignItems: "center",
524
- paddingVertical: 10,
525
- borderRadius: 10,
526
- backgroundColor: "rgba(18,100,163,0.96)",
527
- },
528
- toastText: {
529
- color: "#fff",
530
- fontSize: 14,
531
- fontWeight: "700",
532
- },
533
- });
1
+ export { ReactNativeGrabRoot } from "./grab-root";
2
+ export { ReactNativeGrabScreen } from "./grab-screen";
3
+ export { copyViaMetro } from "./copy";
534
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react-native/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react-native/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAiC,MAAM,aAAa,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAmC,MAAM,eAAe,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,18 @@
1
+ export const measureInWindow = (node) => {
2
+ let boundingClientRect = null;
3
+ nativeFabricUIManager.measureInWindow(node, (x, y, width, height) => {
4
+ boundingClientRect = [x, y, width, height];
5
+ });
6
+ if (!boundingClientRect) {
7
+ throw new Error("Failed to measure node");
8
+ }
9
+ return boundingClientRect;
10
+ };
11
+ export const findNodeAtPoint = (node, x, y) => {
12
+ let fiberNode = null;
13
+ nativeFabricUIManager.findNodeAtPoint(node, x, y, (internalNode) => {
14
+ fiberNode = internalNode;
15
+ });
16
+ return fiberNode;
17
+ };
18
+ //# sourceMappingURL=measure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"measure.js","sourceRoot":"","sources":["../../../src/react-native/measure.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAA2B,EAAsB,EAAE;IAClF,IAAI,kBAAkB,GAA8B,IAAI,CAAC;IAEzD,qBAAqB,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QACnE,kBAAkB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,kBAAkB,CAAC;AAC3B,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAA2B,EAAE,CAAS,EAAE,CAAS,EAA+B,EAAE;IACjH,IAAI,SAAS,GAAgC,IAAI,CAAC;IAElD,qBAAqB,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE;QAClE,SAAS,GAAG,YAAY,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC;AAClB,CAAC,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { useEffect, useRef } from "react";
2
+ export const useLatest = (value) => {
3
+ const ref = useRef(value);
4
+ useEffect(() => {
5
+ ref.current = value;
6
+ }, [value]);
7
+ return ref;
8
+ };
9
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/react-native/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE1C,MAAM,CAAC,MAAM,SAAS,GAAG,CAAI,KAAQ,EAAE,EAAE;IACxC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE1B,SAAS,CAAC,GAAG,EAAE;QACd,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC;IACrB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"withReactNativeGrab.d.ts","sourceRoot":"","sources":["../../../src/metro/withReactNativeGrab.ts"],"names":[],"mappings":"AA4NA,eAAO,MAAM,mBAAmB,4JAsB/B,CAAC"}
1
+ {"version":3,"file":"withReactNativeGrab.d.ts","sourceRoot":"","sources":["../../../src/metro/withReactNativeGrab.ts"],"names":[],"mappings":"AAsJA,eAAO,MAAM,mBAAmB,4JAsB/B,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { type ReactNativeElement } from "react-native";
2
+ import type { ReactNativeShadowNode } from "./types";
3
+ export declare const setFocusedScreenRef: (ref: ReactNativeElement) => void;
4
+ export declare const setAppRootRef: (ref: ReactNativeElement) => void;
5
+ export declare const getAppRootShadowNode: () => ReactNativeShadowNode;
6
+ export declare const getFocusedScreenShadowNode: () => unknown;
7
+ //# sourceMappingURL=containers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"containers.d.ts","sourceRoot":"","sources":["../../../src/react-native/containers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAMrD,eAAO,MAAM,mBAAmB,GAAI,KAAK,kBAAkB,SAS1D,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,KAAK,kBAAkB,SASpD,CAAA;AAED,eAAO,MAAM,oBAAoB,QAAO,qBAMvC,CAAC;AACF,eAAO,MAAM,0BAA0B,eAOtC,CAAC"}
@@ -0,0 +1,7 @@
1
+ type CopyViaMetroOptions = {
2
+ endpoint?: string;
3
+ signal?: AbortSignal;
4
+ };
5
+ export declare const copyViaMetro: (text: string, options?: CopyViaMetroOptions) => Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=copy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy.d.ts","sourceRoot":"","sources":["../../../src/react-native/copy.ts"],"names":[],"mappings":"AAWA,KAAK,mBAAmB,GAAG;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,MAAM,MAAM,EACZ,UAAS,mBAAwB,KAChC,OAAO,CAAC,IAAI,CAsBd,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { ReactNativeFiberNode } from "./types";
2
+ export declare const getDescription: (node: ReactNativeFiberNode) => Promise<string>;
3
+ //# sourceMappingURL=description.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"description.d.ts","sourceRoot":"","sources":["../../../src/react-native/description.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AA0K/C,eAAO,MAAM,cAAc,GAAU,MAAM,oBAAoB,KAAG,OAAO,CAAC,MAAM,CAQ/E,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const useDevMenu: (onToggle: () => void) => void;
2
+ //# sourceMappingURL=dev-menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-menu.d.ts","sourceRoot":"","sources":["../../../src/react-native/dev-menu.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,UAAU,GAAI,UAAU,MAAM,IAAI,SA2B9C,CAAC"}