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
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
3
|
+
import { PanResponder, Pressable, StyleSheet, Text, View } from "react-native";
|
|
4
|
+
import { getAppRootShadowNode, getFocusedScreenShadowNode } from "./containers";
|
|
5
|
+
import { findNodeAtPoint, measureInWindow } from "./measure";
|
|
6
|
+
import { useDevMenu } from "./dev-menu";
|
|
7
|
+
import { getDescription } from "./description";
|
|
8
|
+
import { copyViaMetro } from "./copy";
|
|
9
|
+
import { FullScreenOverlay } from "./full-screen-overlay";
|
|
10
|
+
const COPY_BADGE_DURATION_MS = 1600;
|
|
11
|
+
const CALLSTACK_PRIMARY = "#8232FF";
|
|
12
|
+
const HIGHLIGHT_FILL = "rgba(130, 50, 255, 0.2)";
|
|
13
|
+
const BADGE_BACKGROUND = "rgba(130, 50, 255, 0.92)";
|
|
14
|
+
export const ReactNativeGrabOverlay = () => {
|
|
15
|
+
const copyBadgeTimeoutRef = useRef(null);
|
|
16
|
+
const [state, setState] = useState({
|
|
17
|
+
isButtonEnabled: false,
|
|
18
|
+
isSessionEnabled: false,
|
|
19
|
+
grabbedElement: null,
|
|
20
|
+
isCopyBadgeVisible: false,
|
|
21
|
+
});
|
|
22
|
+
const startSession = useCallback(() => {
|
|
23
|
+
setState((prev) => ({
|
|
24
|
+
...prev,
|
|
25
|
+
grabbedElement: null,
|
|
26
|
+
isSessionEnabled: true,
|
|
27
|
+
}));
|
|
28
|
+
}, []);
|
|
29
|
+
const stopSession = useCallback(() => {
|
|
30
|
+
setState((prev) => ({
|
|
31
|
+
...prev,
|
|
32
|
+
grabbedElement: null,
|
|
33
|
+
isSessionEnabled: false,
|
|
34
|
+
}));
|
|
35
|
+
}, []);
|
|
36
|
+
const toggleButtonEnabled = useCallback(() => {
|
|
37
|
+
setState((prev) => ({
|
|
38
|
+
...prev,
|
|
39
|
+
isButtonEnabled: !prev.isButtonEnabled,
|
|
40
|
+
isSessionEnabled: !prev.isButtonEnabled ? prev.isSessionEnabled : false,
|
|
41
|
+
grabbedElement: !prev.isButtonEnabled ? prev.grabbedElement : null,
|
|
42
|
+
}));
|
|
43
|
+
}, []);
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
return () => {
|
|
46
|
+
if (copyBadgeTimeoutRef.current) {
|
|
47
|
+
clearTimeout(copyBadgeTimeoutRef.current);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
}, []);
|
|
51
|
+
const updateGrabbedElement = useCallback((grabbedElement) => {
|
|
52
|
+
setState((prev) => ({
|
|
53
|
+
...prev,
|
|
54
|
+
grabbedElement,
|
|
55
|
+
}));
|
|
56
|
+
}, []);
|
|
57
|
+
const showCopiedBadge = useCallback(() => {
|
|
58
|
+
if (copyBadgeTimeoutRef.current) {
|
|
59
|
+
clearTimeout(copyBadgeTimeoutRef.current);
|
|
60
|
+
}
|
|
61
|
+
setState((prev) => ({ ...prev, isCopyBadgeVisible: true }));
|
|
62
|
+
copyBadgeTimeoutRef.current = setTimeout(() => {
|
|
63
|
+
setState((prev) => ({ ...prev, isCopyBadgeVisible: false }));
|
|
64
|
+
copyBadgeTimeoutRef.current = null;
|
|
65
|
+
}, COPY_BADGE_DURATION_MS);
|
|
66
|
+
}, []);
|
|
67
|
+
useDevMenu(toggleButtonEnabled);
|
|
68
|
+
const getElementAtPoint = (nativePageX, nativePageY) => {
|
|
69
|
+
const appRootShadowNode = getAppRootShadowNode();
|
|
70
|
+
const focusedScreenShadowNode = getFocusedScreenShadowNode();
|
|
71
|
+
const appRootBoundingClientRect = measureInWindow(appRootShadowNode);
|
|
72
|
+
const focusedScreenBoundingClientRect = measureInWindow(focusedScreenShadowNode);
|
|
73
|
+
let focusedScreenOffsetY = focusedScreenBoundingClientRect[1];
|
|
74
|
+
let focusedScreenHeight = focusedScreenBoundingClientRect[3];
|
|
75
|
+
let appRootHeight = appRootBoundingClientRect[3];
|
|
76
|
+
const offset = appRootHeight - focusedScreenHeight - focusedScreenOffsetY;
|
|
77
|
+
const pageX = nativePageX;
|
|
78
|
+
const pageY = nativePageY - (appRootHeight - focusedScreenHeight);
|
|
79
|
+
const internalNode = findNodeAtPoint(focusedScreenShadowNode, pageX, pageY);
|
|
80
|
+
const shadowNode = internalNode?.stateNode?.node;
|
|
81
|
+
if (!shadowNode) {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
const rect = nativeFabricUIManager.getBoundingClientRect(shadowNode, true);
|
|
85
|
+
return { fiberNode: internalNode, rect: [rect[0], rect[1] + offset, rect[2], rect[3]] };
|
|
86
|
+
};
|
|
87
|
+
const handleTouch = (nativeEvent) => {
|
|
88
|
+
const result = getElementAtPoint(nativeEvent.pageX, nativeEvent.pageY);
|
|
89
|
+
if (!result) {
|
|
90
|
+
updateGrabbedElement(null);
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
updateGrabbedElement(result);
|
|
94
|
+
};
|
|
95
|
+
const handleGrabbing = async (result) => {
|
|
96
|
+
const description = await getDescription(result.fiberNode);
|
|
97
|
+
await copyViaMetro(description);
|
|
98
|
+
};
|
|
99
|
+
const panResponder = useRef(PanResponder.create({
|
|
100
|
+
onStartShouldSetPanResponderCapture: () => true,
|
|
101
|
+
onMoveShouldSetPanResponderCapture: () => true,
|
|
102
|
+
onPanResponderGrant: (evt) => handleTouch(evt.nativeEvent),
|
|
103
|
+
onPanResponderMove: (evt) => handleTouch(evt.nativeEvent),
|
|
104
|
+
onPanResponderRelease: (evt) => {
|
|
105
|
+
void (async () => {
|
|
106
|
+
try {
|
|
107
|
+
const result = getElementAtPoint(evt.nativeEvent.pageX, evt.nativeEvent.pageY);
|
|
108
|
+
if (!result) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
await handleGrabbing(result);
|
|
112
|
+
showCopiedBadge();
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
// No-op: only show the copy badge when copy succeeds.
|
|
116
|
+
}
|
|
117
|
+
finally {
|
|
118
|
+
stopSession();
|
|
119
|
+
}
|
|
120
|
+
})();
|
|
121
|
+
},
|
|
122
|
+
})).current;
|
|
123
|
+
return (_jsx(FullScreenOverlay, { children: _jsxs(View, { pointerEvents: "box-none", style: styles.overlayRoot, children: [state.isButtonEnabled && !state.isSessionEnabled && (_jsx(Pressable, { onPress: startSession, style: styles.floatingButton, children: _jsx(Text, { style: styles.floatingButtonText, children: "Grab" }) })), state.isSessionEnabled && (_jsx(View, { style: [StyleSheet.absoluteFill], ...panResponder.panHandlers })), state.isSessionEnabled && (_jsx(View, { pointerEvents: "none", style: styles.topBadge, children: _jsx(Text, { style: styles.topBadgeText, children: "Touch and move around to grab" }) })), state.isCopyBadgeVisible && (_jsx(View, { pointerEvents: "none", style: styles.topBadge, children: _jsx(Text, { style: styles.topBadgeText, children: "Element copied" }) })), !!state.grabbedElement && (_jsx(View, { style: [
|
|
124
|
+
{
|
|
125
|
+
position: "absolute",
|
|
126
|
+
left: state.grabbedElement.rect[0],
|
|
127
|
+
top: state.grabbedElement.rect[1],
|
|
128
|
+
width: state.grabbedElement.rect[2],
|
|
129
|
+
height: state.grabbedElement.rect[3],
|
|
130
|
+
pointerEvents: "none",
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
backgroundColor: HIGHLIGHT_FILL,
|
|
134
|
+
borderWidth: 1,
|
|
135
|
+
borderColor: CALLSTACK_PRIMARY,
|
|
136
|
+
},
|
|
137
|
+
] }))] }) }));
|
|
138
|
+
};
|
|
139
|
+
const styles = StyleSheet.create({
|
|
140
|
+
overlayRoot: {
|
|
141
|
+
...StyleSheet.absoluteFillObject,
|
|
142
|
+
zIndex: 2147483647,
|
|
143
|
+
elevation: 2147483647,
|
|
144
|
+
},
|
|
145
|
+
floatingButton: {
|
|
146
|
+
position: "absolute",
|
|
147
|
+
right: 18,
|
|
148
|
+
bottom: 28,
|
|
149
|
+
borderRadius: 999,
|
|
150
|
+
paddingHorizontal: 16,
|
|
151
|
+
paddingVertical: 10,
|
|
152
|
+
backgroundColor: BADGE_BACKGROUND,
|
|
153
|
+
zIndex: 2147483647,
|
|
154
|
+
elevation: 2147483647,
|
|
155
|
+
},
|
|
156
|
+
floatingButtonText: {
|
|
157
|
+
color: "#FFFFFF",
|
|
158
|
+
fontSize: 14,
|
|
159
|
+
fontWeight: "700",
|
|
160
|
+
},
|
|
161
|
+
topBadge: {
|
|
162
|
+
position: "absolute",
|
|
163
|
+
top: 52,
|
|
164
|
+
alignSelf: "center",
|
|
165
|
+
borderRadius: 999,
|
|
166
|
+
paddingHorizontal: 14,
|
|
167
|
+
paddingVertical: 8,
|
|
168
|
+
backgroundColor: BADGE_BACKGROUND,
|
|
169
|
+
},
|
|
170
|
+
topBadgeText: {
|
|
171
|
+
color: "#FFFFFF",
|
|
172
|
+
fontSize: 13,
|
|
173
|
+
fontWeight: "600",
|
|
174
|
+
},
|
|
175
|
+
});
|
|
176
|
+
//# sourceMappingURL=grab-overlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grab-overlay.js","sourceRoot":"","sources":["../../../src/react-native/grab-overlay.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef } from "react";
|
|
3
|
+
import { View } from "react-native";
|
|
4
|
+
import { setAppRootRef } from "./containers";
|
|
5
|
+
import { ReactNativeGrabOverlay } from "./grab-overlay";
|
|
6
|
+
export const ReactNativeGrabRoot = ({ children, style, ...props }) => {
|
|
7
|
+
const rootRef = useRef(null);
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
if (!rootRef.current) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
setAppRootRef(rootRef.current);
|
|
13
|
+
}, []);
|
|
14
|
+
useEffect(() => { }, []);
|
|
15
|
+
return (_jsxs(_Fragment, { children: [_jsx(View, { ...props, ref: rootRef, style: [{ flex: 1 }, style], children: children }), _jsx(ReactNativeGrabOverlay, {})] }));
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=grab-root.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grab-root.js","sourceRoot":"","sources":["../../../src/react-native/grab-root.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAa,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAIxD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,EAA4B,EAAE,EAAE;IAC7F,MAAM,OAAO,GAAG,MAAM,CAAc,IAAI,CAAC,CAAC;IAE1C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE,GAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAExB,OAAO,CACL,8BACE,KAAC,IAAI,OAAK,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,YACvD,QAAQ,GACJ,EAEP,KAAC,sBAAsB,KAAG,IACzB,CACJ,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grab-root.web.js","sourceRoot":"","sources":["../../../src/react-native/grab-root.web.tsx"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,EAAE;IACtC,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useRef } from "react";
|
|
3
|
+
import { View } from "react-native";
|
|
4
|
+
import { setFocusedScreenRef } from "./containers";
|
|
5
|
+
const getFocusEffectImpl = () => {
|
|
6
|
+
try {
|
|
7
|
+
return require("expo-router").useFocusEffect;
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
// Nothing we can do about it, it's not installed in the project.
|
|
11
|
+
}
|
|
12
|
+
try {
|
|
13
|
+
return require("@react-navigation/native").useFocusEffect;
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
// Nothing we can do about it, it's not installed in the project.
|
|
17
|
+
}
|
|
18
|
+
throw new Error("No useFocusEffect implementation found");
|
|
19
|
+
};
|
|
20
|
+
const useFocusEffect = getFocusEffectImpl();
|
|
21
|
+
export const ReactNativeGrabScreen = ({ children, style, ...props }) => {
|
|
22
|
+
const screenRef = useRef(null);
|
|
23
|
+
useFocusEffect(useCallback(() => {
|
|
24
|
+
if (!screenRef.current) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
setFocusedScreenRef(screenRef.current);
|
|
28
|
+
}, []));
|
|
29
|
+
return (_jsx(View, { ...props, ref: screenRef, style: [{ flex: 1 }, style], children: children }));
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=grab-screen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grab-screen.js","sourceRoot":"","sources":["../../../src/react-native/grab-screen.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAkB,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;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;AAI5C,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,EACpC,QAAQ,EACR,KAAK,EACL,GAAG,KAAK,EACmB,EAAE,EAAE;IAC/B,MAAM,SAAS,GAAG,MAAM,CAAc,IAAI,CAAC,CAAC;IAE5C,cAAc,CACZ,WAAW,CAAC,GAAG,EAAE;QACf,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,mBAAmB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC,EAAE,EAAE,CAAC,CACP,CAAC;IAEF,OAAO,CACL,KAAC,IAAI,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grab-screen.web.js","sourceRoot":"","sources":["../../../src/react-native/grab-screen.web.tsx"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,EAAE;IACxC,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
|