react-native-grab 0.0.3 → 0.0.5
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 +150 -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 +146 -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 +20 -3
- 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 -259
- 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 -55
- package/dist/cjs/react-native/z-index.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 -252
- 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 -51
- package/dist/esm/react-native/z-index.js.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,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getRenderedBy = void 0;
|
|
7
|
+
const symbolicateStackTrace_1 = __importDefault(require("react-native/Libraries/Core/Devtools/symbolicateStackTrace"));
|
|
8
|
+
const firstUserFrameFromError = (error) => {
|
|
9
|
+
let callSites = null;
|
|
10
|
+
const prev = Error.prepareStackTrace;
|
|
11
|
+
Error.prepareStackTrace = (_, sites) => {
|
|
12
|
+
callSites = sites;
|
|
13
|
+
return '';
|
|
14
|
+
};
|
|
15
|
+
void error.stack;
|
|
16
|
+
Error.prepareStackTrace = prev;
|
|
17
|
+
if (callSites && callSites.length > 0) {
|
|
18
|
+
const sites = callSites;
|
|
19
|
+
let start = 0;
|
|
20
|
+
for (let i = 0; i < Math.min(sites.length, 3); i++) {
|
|
21
|
+
const fn = sites[i].getFunctionName() ?? '';
|
|
22
|
+
if (fn.includes('react-stack-top-frame') ||
|
|
23
|
+
fn.includes('react_stack_bottom_frame') ||
|
|
24
|
+
fn === '') {
|
|
25
|
+
start = i + 1;
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
for (let i = start; i < sites.length; i++) {
|
|
32
|
+
const fn = sites[i].getFunctionName() ?? '';
|
|
33
|
+
if (fn.includes('react_stack_bottom_frame') ||
|
|
34
|
+
fn.includes('react-stack-bottom-frame')) {
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
const file = sites[i].getFileName();
|
|
38
|
+
if (!file)
|
|
39
|
+
continue;
|
|
40
|
+
return {
|
|
41
|
+
file,
|
|
42
|
+
line: sites[i].getLineNumber(),
|
|
43
|
+
column: sites[i].getColumnNumber(),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
const prevStr = Error.prepareStackTrace;
|
|
49
|
+
Error.prepareStackTrace = undefined;
|
|
50
|
+
let stack = error.stack ?? '';
|
|
51
|
+
Error.prepareStackTrace = prevStr;
|
|
52
|
+
if (stack.startsWith('Error: react-stack-top-frame\n')) {
|
|
53
|
+
stack = stack.slice('Error: react-stack-top-frame\n'.length);
|
|
54
|
+
}
|
|
55
|
+
for (let i = 0; i < 2; i++) {
|
|
56
|
+
const nl = stack.indexOf('\n');
|
|
57
|
+
if (nl !== -1)
|
|
58
|
+
stack = stack.slice(nl + 1);
|
|
59
|
+
}
|
|
60
|
+
const sentinelIdx = stack.search(/react[_-]stack[_-]bottom[_-]frame/);
|
|
61
|
+
if (sentinelIdx !== -1) {
|
|
62
|
+
const cut = stack.lastIndexOf('\n', sentinelIdx);
|
|
63
|
+
if (cut !== -1)
|
|
64
|
+
stack = stack.slice(0, cut);
|
|
65
|
+
}
|
|
66
|
+
const firstLine = stack.split('\n').find(l => l.trim());
|
|
67
|
+
if (!firstLine)
|
|
68
|
+
return null;
|
|
69
|
+
const v8 = firstLine.match(/at\s+(?:.+?\s+\()?(.+):(\d+):(\d+)\)?$/);
|
|
70
|
+
if (v8) {
|
|
71
|
+
return { file: v8[1], line: parseInt(v8[2], 10), column: parseInt(v8[3], 10) };
|
|
72
|
+
}
|
|
73
|
+
const gecko = firstLine.match(/@(.+):(\d+):(\d+)$/);
|
|
74
|
+
if (gecko) {
|
|
75
|
+
return { file: gecko[1], line: parseInt(gecko[2], 10), column: parseInt(gecko[3], 10) };
|
|
76
|
+
}
|
|
77
|
+
return null;
|
|
78
|
+
};
|
|
79
|
+
const getNameFromFiber = (fiber) => {
|
|
80
|
+
const type = fiber?.type;
|
|
81
|
+
if (!type)
|
|
82
|
+
return '(unknown)';
|
|
83
|
+
if (typeof type === 'function') {
|
|
84
|
+
return type.displayName || type.name || '(anonymous)';
|
|
85
|
+
}
|
|
86
|
+
if (typeof type === 'string') {
|
|
87
|
+
return type;
|
|
88
|
+
}
|
|
89
|
+
if (type.render) {
|
|
90
|
+
return (type.displayName ||
|
|
91
|
+
type.render.displayName ||
|
|
92
|
+
type.render.name ||
|
|
93
|
+
'ForwardRef');
|
|
94
|
+
}
|
|
95
|
+
if (type.type) {
|
|
96
|
+
const inner = type.type;
|
|
97
|
+
return (type.displayName ||
|
|
98
|
+
(typeof inner === 'function'
|
|
99
|
+
? inner.displayName || inner.name
|
|
100
|
+
: null) ||
|
|
101
|
+
'Memo');
|
|
102
|
+
}
|
|
103
|
+
return '(unknown)';
|
|
104
|
+
};
|
|
105
|
+
const getRenderedByFrames = (fiber) => {
|
|
106
|
+
const result = [];
|
|
107
|
+
let current = fiber;
|
|
108
|
+
while (current) {
|
|
109
|
+
const owner = current._debugOwner;
|
|
110
|
+
const debugStack = current._debugStack;
|
|
111
|
+
if (!owner)
|
|
112
|
+
break;
|
|
113
|
+
const name = getNameFromFiber(owner);
|
|
114
|
+
if (!debugStack) {
|
|
115
|
+
result.push({ name, file: null, line: null, column: null, collapse: false });
|
|
116
|
+
current = owner;
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
const loc = typeof debugStack === 'string'
|
|
120
|
+
? (() => {
|
|
121
|
+
const m = debugStack.match(/at\s+(?:.+?\s+\()?(.+):(\d+):(\d+)\)?/);
|
|
122
|
+
return m
|
|
123
|
+
? { file: m[1], line: parseInt(m[2], 10), column: parseInt(m[3], 10) }
|
|
124
|
+
: null;
|
|
125
|
+
})()
|
|
126
|
+
: firstUserFrameFromError(debugStack);
|
|
127
|
+
result.push({
|
|
128
|
+
name,
|
|
129
|
+
file: loc?.file ?? null,
|
|
130
|
+
line: loc?.line ?? null,
|
|
131
|
+
column: loc?.column ?? null,
|
|
132
|
+
collapse: false,
|
|
133
|
+
});
|
|
134
|
+
current = owner;
|
|
135
|
+
}
|
|
136
|
+
return result;
|
|
137
|
+
};
|
|
138
|
+
const toMetroStackFrame = (frame) => {
|
|
139
|
+
return {
|
|
140
|
+
methodName: frame.name,
|
|
141
|
+
file: frame.file ?? undefined,
|
|
142
|
+
lineNumber: frame.line ?? undefined,
|
|
143
|
+
column: frame.column ?? undefined,
|
|
144
|
+
collapse: frame.collapse,
|
|
145
|
+
};
|
|
146
|
+
};
|
|
147
|
+
const getRenderedBy = async (fiber) => {
|
|
148
|
+
const frames = getRenderedByFrames(fiber);
|
|
149
|
+
if (frames.length === 0)
|
|
150
|
+
return frames;
|
|
151
|
+
try {
|
|
152
|
+
const metroFrames = frames.map(toMetroStackFrame);
|
|
153
|
+
const { stack: symbolicated } = await (0, symbolicateStackTrace_1.default)(metroFrames);
|
|
154
|
+
return symbolicated
|
|
155
|
+
.filter(sf => sf.collapse !== true)
|
|
156
|
+
.map((sf, i) => ({
|
|
157
|
+
name: frames[i]?.name ?? sf.methodName,
|
|
158
|
+
file: sf.file ?? null,
|
|
159
|
+
line: sf.lineNumber ?? null,
|
|
160
|
+
column: sf.column ?? null,
|
|
161
|
+
collapse: sf.collapse === true,
|
|
162
|
+
}));
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
return frames;
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
exports.getRenderedBy = getRenderedBy;
|
|
169
|
+
//# sourceMappingURL=get-rendered-by.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-rendered-by.js","sourceRoot":"","sources":["../../../src/react-native/get-rendered-by.ts"],"names":[],"mappings":";;;;;;AAAA,uHAA+F;AAmB/F,MAAM,uBAAuB,GAAG,CAC/B,KAAY,EACiE,EAAE;IAC/E,IAAI,SAAS,GAAwB,IAAI,CAAC;IAC1C,MAAM,IAAI,GAAI,KAAa,CAAC,iBAAiB,CAAC;IAC7C,KAAa,CAAC,iBAAiB,GAAG,CAAC,CAAU,EAAE,KAAmB,EAAE,EAAE;QACtE,SAAS,GAAG,KAAK,CAAC;QAClB,OAAO,EAAE,CAAC;IACX,CAAC,CAAC;IACF,KAAK,KAAK,CAAC,KAAK,CAAC;IAChB,KAAa,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAExC,IAAI,SAAS,IAAK,SAA0B,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzD,MAAM,KAAK,GAAG,SAAyB,CAAC;QAExC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACpD,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC;YAC5C,IACC,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;gBACpC,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;gBACvC,EAAE,KAAK,EAAE,EACR,CAAC;gBACF,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;YACf,CAAC;iBAAM,CAAC;gBACP,MAAM;YACP,CAAC;QACF,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC;YAC5C,IACC,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;gBACvC,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EACtC,CAAC;gBACF,MAAM;YACP,CAAC;YACD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,OAAO;gBACN,IAAI;gBACJ,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE;gBAC9B,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE;aAClC,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,OAAO,GAAI,KAAa,CAAC,iBAAiB,CAAC;IAChD,KAAa,CAAC,iBAAiB,GAAG,SAAS,CAAC;IAC7C,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;IAC7B,KAAa,CAAC,iBAAiB,GAAG,OAAO,CAAC;IAE3C,IAAI,KAAK,CAAC,UAAU,CAAC,gCAAgC,CAAC,EAAE,CAAC;QACxD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,gCAAgC,CAAC,MAAM,CAAC,CAAC;IAC9D,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,EAAE,KAAK,CAAC,CAAC;YAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC;IACtE,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACjD,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACxD,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,MAAM,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACrE,IAAI,EAAE,EAAE,CAAC;QACR,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IAChF,CAAC;IACD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACpD,IAAI,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IACzF,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,KAAU,EAAU,EAAE;IAC/C,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC;IACzB,IAAI,CAAC,IAAI;QAAE,OAAO,WAAW,CAAC;IAC9B,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,IAAI,aAAa,CAAC;IACvD,CAAC;IACD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,CACN,IAAI,CAAC,WAAW;YAChB,IAAI,CAAC,MAAM,CAAC,WAAW;YACvB,IAAI,CAAC,MAAM,CAAC,IAAI;YAChB,YAAY,CACZ,CAAC;IACH,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;QACxB,OAAO,CACN,IAAI,CAAC,WAAW;YAChB,CAAC,OAAO,KAAK,KAAK,UAAU;gBAC3B,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI;gBACjC,CAAC,CAAC,IAAI,CAAC;YACR,MAAM,CACN,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,KAAU,EAAqB,EAAE;IAC7D,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,IAAI,OAAO,GAAQ,KAAK,CAAC;IAEzB,OAAO,OAAO,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC;QAClC,MAAM,UAAU,GAAsC,OAAO,CAAC,WAAW,CAAC;QAE1E,IAAI,CAAC,KAAK;YAAE,MAAM;QAElB,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAErC,IAAI,CAAC,UAAU,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7E,OAAO,GAAG,KAAK,CAAC;YAChB,SAAS;QACV,CAAC;QAED,MAAM,GAAG,GACR,OAAO,UAAU,KAAK,QAAQ;YAC7B,CAAC,CAAC,CAAC,GAAG,EAAE;gBACP,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;gBACpE,OAAO,CAAC;oBACP,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;oBACtE,CAAC,CAAC,IAAI,CAAC;YACT,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;QAExC,MAAM,CAAC,IAAI,CAAC;YACX,IAAI;YACJ,IAAI,EAAE,GAAG,EAAE,IAAI,IAAI,IAAI;YACvB,IAAI,EAAE,GAAG,EAAE,IAAI,IAAI,IAAI;YACvB,MAAM,EAAE,GAAG,EAAE,MAAM,IAAI,IAAI;YAC3B,QAAQ,EAAE,KAAK;SACf,CAAC,CAAC;QAEH,OAAO,GAAG,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,KAAsB,EAAc,EAAE;IAChE,OAAO;QACN,UAAU,EAAE,KAAK,CAAC,IAAI;QACtB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS;QAC7B,UAAU,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS;QACnC,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,SAAS;QACjC,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACxB,CAAC;AACH,CAAC,CAAC;AAEK,MAAM,aAAa,GAAG,KAAK,EACjC,KAA2B,EACE,EAAE;IAC/B,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IAEvC,IAAI,CAAC;QACJ,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAClD,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,IAAA,+BAAqB,EAAC,WAAW,CAAC,CAAC;QACzE,OAAO,YAAY;aACjB,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,KAAK,IAAI,CAAC;aAClC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAChB,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,UAAU;YACtC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI;YACrB,IAAI,EAAE,EAAE,CAAC,UAAU,IAAI,IAAI;YAC3B,MAAM,EAAE,EAAE,CAAC,MAAM,IAAI,IAAI;YACzB,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,IAAI;SAC9B,CAAC,CAAC,CAAC;IACN,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,MAAM,CAAC;IACf,CAAC;AACF,CAAC,CAAC;AArBW,QAAA,aAAa,iBAqBxB"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ReactNativeGrabOverlay = 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 containers_1 = require("./containers");
|
|
8
|
+
const measure_1 = require("./measure");
|
|
9
|
+
const dev_menu_1 = require("./dev-menu");
|
|
10
|
+
const description_1 = require("./description");
|
|
11
|
+
const copy_1 = require("./copy");
|
|
12
|
+
const full_screen_overlay_1 = require("./full-screen-overlay");
|
|
13
|
+
const COPY_BADGE_DURATION_MS = 1600;
|
|
14
|
+
const CALLSTACK_PRIMARY = "#8232FF";
|
|
15
|
+
const HIGHLIGHT_FILL = "rgba(130, 50, 255, 0.2)";
|
|
16
|
+
const BADGE_BACKGROUND = "rgba(130, 50, 255, 0.92)";
|
|
17
|
+
const ReactNativeGrabOverlay = () => {
|
|
18
|
+
const copyBadgeTimeoutRef = (0, react_1.useRef)(null);
|
|
19
|
+
const [state, setState] = (0, react_1.useState)({
|
|
20
|
+
isEnabled: false,
|
|
21
|
+
grabbedElement: null,
|
|
22
|
+
isCopyBadgeVisible: false,
|
|
23
|
+
});
|
|
24
|
+
const startSession = (0, react_1.useCallback)(() => {
|
|
25
|
+
setState(() => ({
|
|
26
|
+
grabbedElement: null,
|
|
27
|
+
isEnabled: true,
|
|
28
|
+
isCopyBadgeVisible: false,
|
|
29
|
+
}));
|
|
30
|
+
}, []);
|
|
31
|
+
const stopSession = (0, react_1.useCallback)(() => {
|
|
32
|
+
setState((prev) => ({
|
|
33
|
+
...prev,
|
|
34
|
+
grabbedElement: null,
|
|
35
|
+
isEnabled: false,
|
|
36
|
+
}));
|
|
37
|
+
}, []);
|
|
38
|
+
(0, react_1.useEffect)(() => {
|
|
39
|
+
return () => {
|
|
40
|
+
if (copyBadgeTimeoutRef.current) {
|
|
41
|
+
clearTimeout(copyBadgeTimeoutRef.current);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
}, []);
|
|
45
|
+
const updateGrabbedElement = (0, react_1.useCallback)((grabbedElement) => {
|
|
46
|
+
setState((prev) => ({
|
|
47
|
+
...prev,
|
|
48
|
+
grabbedElement,
|
|
49
|
+
}));
|
|
50
|
+
}, []);
|
|
51
|
+
const showCopiedBadge = (0, react_1.useCallback)(() => {
|
|
52
|
+
if (copyBadgeTimeoutRef.current) {
|
|
53
|
+
clearTimeout(copyBadgeTimeoutRef.current);
|
|
54
|
+
}
|
|
55
|
+
setState((prev) => ({ ...prev, isCopyBadgeVisible: true }));
|
|
56
|
+
copyBadgeTimeoutRef.current = setTimeout(() => {
|
|
57
|
+
setState((prev) => ({ ...prev, isCopyBadgeVisible: false }));
|
|
58
|
+
copyBadgeTimeoutRef.current = null;
|
|
59
|
+
}, COPY_BADGE_DURATION_MS);
|
|
60
|
+
}, []);
|
|
61
|
+
(0, dev_menu_1.useDevMenu)(startSession);
|
|
62
|
+
const getElementAtPoint = (nativePageX, nativePageY) => {
|
|
63
|
+
const appRootShadowNode = (0, containers_1.getAppRootShadowNode)();
|
|
64
|
+
const focusedScreenShadowNode = (0, containers_1.getFocusedScreenShadowNode)();
|
|
65
|
+
const appRootBoundingClientRect = (0, measure_1.measureInWindow)(appRootShadowNode);
|
|
66
|
+
const focusedScreenBoundingClientRect = (0, measure_1.measureInWindow)(focusedScreenShadowNode);
|
|
67
|
+
let focusedScreenOffsetY = focusedScreenBoundingClientRect[1];
|
|
68
|
+
let focusedScreenHeight = focusedScreenBoundingClientRect[3];
|
|
69
|
+
let appRootHeight = appRootBoundingClientRect[3];
|
|
70
|
+
const offset = appRootHeight - focusedScreenHeight - focusedScreenOffsetY;
|
|
71
|
+
const pageX = nativePageX;
|
|
72
|
+
const pageY = nativePageY - (appRootHeight - focusedScreenHeight);
|
|
73
|
+
const internalNode = (0, measure_1.findNodeAtPoint)(focusedScreenShadowNode, pageX, pageY);
|
|
74
|
+
const shadowNode = internalNode?.stateNode?.node;
|
|
75
|
+
if (!shadowNode) {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
const rect = nativeFabricUIManager.getBoundingClientRect(shadowNode, true);
|
|
79
|
+
return { fiberNode: internalNode, rect: [rect[0], rect[1] + offset, rect[2], rect[3]] };
|
|
80
|
+
};
|
|
81
|
+
const handleTouch = (nativeEvent) => {
|
|
82
|
+
const result = getElementAtPoint(nativeEvent.pageX, nativeEvent.pageY);
|
|
83
|
+
if (!result) {
|
|
84
|
+
updateGrabbedElement(null);
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
updateGrabbedElement(result);
|
|
88
|
+
};
|
|
89
|
+
const handleGrabbing = async (result) => {
|
|
90
|
+
const description = await (0, description_1.getDescription)(result.fiberNode);
|
|
91
|
+
await (0, copy_1.copyViaMetro)(description);
|
|
92
|
+
};
|
|
93
|
+
const panResponder = (0, react_1.useRef)(react_native_1.PanResponder.create({
|
|
94
|
+
onStartShouldSetPanResponderCapture: () => true,
|
|
95
|
+
onMoveShouldSetPanResponderCapture: () => true,
|
|
96
|
+
onPanResponderGrant: (evt) => handleTouch(evt.nativeEvent),
|
|
97
|
+
onPanResponderMove: (evt) => handleTouch(evt.nativeEvent),
|
|
98
|
+
onPanResponderRelease: (evt) => {
|
|
99
|
+
void (async () => {
|
|
100
|
+
try {
|
|
101
|
+
const result = getElementAtPoint(evt.nativeEvent.pageX, evt.nativeEvent.pageY);
|
|
102
|
+
if (!result) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
await handleGrabbing(result);
|
|
106
|
+
showCopiedBadge();
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// No-op: only show the copy badge when copy succeeds.
|
|
110
|
+
}
|
|
111
|
+
finally {
|
|
112
|
+
stopSession();
|
|
113
|
+
}
|
|
114
|
+
})();
|
|
115
|
+
},
|
|
116
|
+
})).current;
|
|
117
|
+
return ((0, jsx_runtime_1.jsxs)(full_screen_overlay_1.FullScreenOverlay, { children: [state.isEnabled && (0, jsx_runtime_1.jsx)(react_native_1.View, { style: [react_native_1.StyleSheet.absoluteFill], ...panResponder.panHandlers }), state.isEnabled && ((0, jsx_runtime_1.jsx)(react_native_1.View, { pointerEvents: "none", style: styles.topBadge, children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: styles.topBadgeText, children: "Touch and move around to grab" }) })), state.isCopyBadgeVisible && ((0, jsx_runtime_1.jsx)(react_native_1.View, { pointerEvents: "none", style: styles.topBadge, children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: styles.topBadgeText, children: "Element copied" }) })), !!state.grabbedElement && ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: [
|
|
118
|
+
{
|
|
119
|
+
position: "absolute",
|
|
120
|
+
left: state.grabbedElement.rect[0],
|
|
121
|
+
top: state.grabbedElement.rect[1],
|
|
122
|
+
width: state.grabbedElement.rect[2],
|
|
123
|
+
height: state.grabbedElement.rect[3],
|
|
124
|
+
pointerEvents: "none",
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
backgroundColor: HIGHLIGHT_FILL,
|
|
128
|
+
borderWidth: 1,
|
|
129
|
+
borderColor: CALLSTACK_PRIMARY,
|
|
130
|
+
},
|
|
131
|
+
] }))] }));
|
|
132
|
+
};
|
|
133
|
+
exports.ReactNativeGrabOverlay = ReactNativeGrabOverlay;
|
|
134
|
+
const styles = react_native_1.StyleSheet.create({
|
|
135
|
+
topBadge: {
|
|
136
|
+
position: "absolute",
|
|
137
|
+
top: 52,
|
|
138
|
+
alignSelf: "center",
|
|
139
|
+
borderRadius: 999,
|
|
140
|
+
paddingHorizontal: 14,
|
|
141
|
+
paddingVertical: 8,
|
|
142
|
+
backgroundColor: BADGE_BACKGROUND,
|
|
143
|
+
},
|
|
144
|
+
topBadgeText: {
|
|
145
|
+
color: "#FFFFFF",
|
|
146
|
+
fontSize: 13,
|
|
147
|
+
fontWeight: "600",
|
|
148
|
+
},
|
|
149
|
+
});
|
|
150
|
+
//# 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,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ReactNativeGrabRoot = 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 containers_1 = require("./containers");
|
|
8
|
+
const grab_overlay_1 = require("./grab-overlay");
|
|
9
|
+
const ReactNativeGrabRoot = ({ children, style, ...props }) => {
|
|
10
|
+
const rootRef = (0, react_1.useRef)(null);
|
|
11
|
+
(0, react_1.useEffect)(() => {
|
|
12
|
+
if (!rootRef.current) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
(0, containers_1.setAppRootRef)(rootRef.current);
|
|
16
|
+
}, []);
|
|
17
|
+
(0, react_1.useEffect)(() => { }, []);
|
|
18
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(react_native_1.View, { ...props, ref: rootRef, style: [{ flex: 1 }, style], children: children }), (0, jsx_runtime_1.jsx)(grab_overlay_1.ReactNativeGrabOverlay, {})] }));
|
|
19
|
+
};
|
|
20
|
+
exports.ReactNativeGrabRoot = ReactNativeGrabRoot;
|
|
21
|
+
//# 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,iCAA0C;AAC1C,+CAA+C;AAC/C,6CAA6C;AAC7C,iDAAwD;AAIjD,MAAM,mBAAmB,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,EAA4B,EAAE,EAAE;IAC7F,MAAM,OAAO,GAAG,IAAA,cAAM,EAAc,IAAI,CAAC,CAAC;IAE1C,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAA,0BAAa,EAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAA,iBAAS,EAAC,GAAG,EAAE,GAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAExB,OAAO,CACL,6DACE,uBAAC,mBAAI,OAAK,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,YACvD,QAAQ,GACJ,EAEP,uBAAC,qCAAsB,KAAG,IACzB,CACJ,CAAC;AACJ,CAAC,CAAC;AAtBW,QAAA,mBAAmB,uBAsB9B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ReactNativeGrabRoot = void 0;
|
|
4
|
+
// React Native Grab doesn't support web yet!
|
|
5
|
+
const ReactNativeGrabRoot = () => {
|
|
6
|
+
return null;
|
|
7
|
+
};
|
|
8
|
+
exports.ReactNativeGrabRoot = ReactNativeGrabRoot;
|
|
9
|
+
//# sourceMappingURL=grab-root.web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grab-root.web.js","sourceRoot":"","sources":["../../../src/react-native/grab-root.web.tsx"],"names":[],"mappings":";;;AAAA,6CAA6C;AACtC,MAAM,mBAAmB,GAAG,GAAG,EAAE;IACtC,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAFW,QAAA,mBAAmB,uBAE9B"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ReactNativeGrabScreen = 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 containers_1 = require("./containers");
|
|
8
|
+
const getFocusEffectImpl = () => {
|
|
9
|
+
try {
|
|
10
|
+
return require("expo-router").useFocusEffect;
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
// Nothing we can do about it, it's not installed in the project.
|
|
14
|
+
}
|
|
15
|
+
try {
|
|
16
|
+
return require("@react-navigation/native").useFocusEffect;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
// Nothing we can do about it, it's not installed in the project.
|
|
20
|
+
}
|
|
21
|
+
throw new Error("No useFocusEffect implementation found");
|
|
22
|
+
};
|
|
23
|
+
const useFocusEffect = getFocusEffectImpl();
|
|
24
|
+
const ReactNativeGrabScreen = ({ children, style, ...props }) => {
|
|
25
|
+
const screenRef = (0, react_1.useRef)(null);
|
|
26
|
+
useFocusEffect((0, react_1.useCallback)(() => {
|
|
27
|
+
if (!screenRef.current) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
(0, containers_1.setFocusedScreenRef)(screenRef.current);
|
|
31
|
+
}, []));
|
|
32
|
+
return ((0, jsx_runtime_1.jsx)(react_native_1.View, { ...props, ref: screenRef, style: [{ flex: 1 }, style], children: children }));
|
|
33
|
+
};
|
|
34
|
+
exports.ReactNativeGrabScreen = ReactNativeGrabScreen;
|
|
35
|
+
//# 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,iCAA4C;AAC5C,+CAAoD;AACpD,6CAAmD;AAEnD,MAAM,kBAAkB,GAAG,GAA+B,EAAE;IAC1D,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,iEAAiE;IACnE,CAAC;IAED,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,0BAA0B,CAAC,CAAC,cAAc,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,iEAAiE;IACnE,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;AAC5D,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,kBAAkB,EAAE,CAAC;AAIrC,MAAM,qBAAqB,GAAG,CAAC,EACpC,QAAQ,EACR,KAAK,EACL,GAAG,KAAK,EACmB,EAAE,EAAE;IAC/B,MAAM,SAAS,GAAG,IAAA,cAAM,EAAc,IAAI,CAAC,CAAC;IAE5C,cAAc,CACZ,IAAA,mBAAW,EAAC,GAAG,EAAE;QACf,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,IAAA,gCAAmB,EAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC,EAAE,EAAE,CAAC,CACP,CAAC;IAEF,OAAO,CACL,uBAAC,mBAAI,OAAK,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,YACzD,QAAQ,GACJ,CACR,CAAC;AACJ,CAAC,CAAC;AAtBW,QAAA,qBAAqB,yBAsBhC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ReactNativeGrabScreen = void 0;
|
|
4
|
+
// React Native Grab doesn't support web yet!
|
|
5
|
+
const ReactNativeGrabScreen = () => {
|
|
6
|
+
return null;
|
|
7
|
+
};
|
|
8
|
+
exports.ReactNativeGrabScreen = ReactNativeGrabScreen;
|
|
9
|
+
//# sourceMappingURL=grab-screen.web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grab-screen.web.js","sourceRoot":"","sources":["../../../src/react-native/grab-screen.web.tsx"],"names":[],"mappings":";;;AAAA,6CAA6C;AACtC,MAAM,qBAAqB,GAAG,GAAG,EAAE;IACxC,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAFW,QAAA,qBAAqB,yBAEhC"}
|