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.
Files changed (159) 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 +150 -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 +146 -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 +20 -3
  100. package/dist/cjs/react-native/copy-payload.js +0 -336
  101. package/dist/cjs/react-native/copy-payload.js.map +0 -1
  102. package/dist/cjs/react-native/dom-traversal.js +0 -259
  103. package/dist/cjs/react-native/dom-traversal.js.map +0 -1
  104. package/dist/cjs/react-native/fiber.js +0 -142
  105. package/dist/cjs/react-native/fiber.js.map +0 -1
  106. package/dist/cjs/react-native/get-dev-server.js +0 -9
  107. package/dist/cjs/react-native/get-dev-server.js.map +0 -1
  108. package/dist/cjs/react-native/index.web.js +0 -8
  109. package/dist/cjs/react-native/index.web.js.map +0 -1
  110. package/dist/cjs/react-native/pointer-events.js +0 -114
  111. package/dist/cjs/react-native/pointer-events.js.map +0 -1
  112. package/dist/cjs/react-native/selection-trigger.js +0 -19
  113. package/dist/cjs/react-native/selection-trigger.js.map +0 -1
  114. package/dist/cjs/react-native/settings.js +0 -98
  115. package/dist/cjs/react-native/settings.js.map +0 -1
  116. package/dist/cjs/react-native/symbolicate.js +0 -15
  117. package/dist/cjs/react-native/symbolicate.js.map +0 -1
  118. package/dist/cjs/react-native/z-index.js +0 -55
  119. package/dist/cjs/react-native/z-index.js.map +0 -1
  120. package/dist/esm/react-native/copy-payload.js +0 -329
  121. package/dist/esm/react-native/copy-payload.js.map +0 -1
  122. package/dist/esm/react-native/dom-traversal.js +0 -252
  123. package/dist/esm/react-native/dom-traversal.js.map +0 -1
  124. package/dist/esm/react-native/fiber.js +0 -133
  125. package/dist/esm/react-native/fiber.js.map +0 -1
  126. package/dist/esm/react-native/get-dev-server.js +0 -3
  127. package/dist/esm/react-native/get-dev-server.js.map +0 -1
  128. package/dist/esm/react-native/index.web.js +0 -4
  129. package/dist/esm/react-native/index.web.js.map +0 -1
  130. package/dist/esm/react-native/pointer-events.js +0 -106
  131. package/dist/esm/react-native/pointer-events.js.map +0 -1
  132. package/dist/esm/react-native/selection-trigger.js +0 -14
  133. package/dist/esm/react-native/selection-trigger.js.map +0 -1
  134. package/dist/esm/react-native/settings.js +0 -91
  135. package/dist/esm/react-native/settings.js.map +0 -1
  136. package/dist/esm/react-native/symbolicate.js +0 -8
  137. package/dist/esm/react-native/symbolicate.js.map +0 -1
  138. package/dist/esm/react-native/z-index.js +0 -51
  139. package/dist/esm/react-native/z-index.js.map +0 -1
  140. package/dist/types/react-native/copy-payload.d.ts +0 -22
  141. package/dist/types/react-native/copy-payload.d.ts.map +0 -1
  142. package/dist/types/react-native/dom-traversal.d.ts +0 -21
  143. package/dist/types/react-native/dom-traversal.d.ts.map +0 -1
  144. package/dist/types/react-native/fiber.d.ts +0 -22
  145. package/dist/types/react-native/fiber.d.ts.map +0 -1
  146. package/dist/types/react-native/get-dev-server.d.ts +0 -3
  147. package/dist/types/react-native/get-dev-server.d.ts.map +0 -1
  148. package/dist/types/react-native/index.web.d.ts +0 -2
  149. package/dist/types/react-native/index.web.d.ts.map +0 -1
  150. package/dist/types/react-native/pointer-events.d.ts +0 -13
  151. package/dist/types/react-native/pointer-events.d.ts.map +0 -1
  152. package/dist/types/react-native/selection-trigger.d.ts +0 -3
  153. package/dist/types/react-native/selection-trigger.d.ts.map +0 -1
  154. package/dist/types/react-native/settings.d.ts +0 -8
  155. package/dist/types/react-native/settings.d.ts.map +0 -1
  156. package/dist/types/react-native/symbolicate.d.ts +0 -3
  157. package/dist/types/react-native/symbolicate.d.ts.map +0 -1
  158. package/dist/types/react-native/z-index.d.ts +0 -3
  159. package/dist/types/react-native/z-index.d.ts.map +0 -1
@@ -0,0 +1,12 @@
1
+ import type { ReactNativeFiberNode, ReactNativeShadowNode } from "./types";
2
+ export type FabricUIManager = {
3
+ findShadowNodeByTag_DEPRECATED: (tag: number) => ReactNativeShadowNode;
4
+ findNodeAtPoint: (node: ReactNativeShadowNode, locationX: number, locationY: number, callback: (instanceHandle: ReactNativeFiberNode) => void) => void;
5
+ getBoundingClientRect: (node: ReactNativeShadowNode, includeTransform?: boolean) => [number, number, number, number];
6
+ measureInWindow: (node: ReactNativeShadowNode, callback: (x: number, y: number, width: number, height: number) => void) => void;
7
+ };
8
+ declare global {
9
+ var nativeFabricUIManager: FabricUIManager;
10
+ }
11
+ export declare const getFabricUIManager: () => FabricUIManager;
12
+ //# sourceMappingURL=fabric.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fabric.d.ts","sourceRoot":"","sources":["../../../src/react-native/fabric.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAE3E,MAAM,MAAM,eAAe,GAAG;IAC7B,8BAA8B,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,qBAAqB,CAAC;IACvE,eAAe,EAAE,CAChB,IAAI,EAAE,qBAAqB,EAC3B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,CAAC,cAAc,EAAE,oBAAoB,KAAK,IAAI,KACpD,IAAI,CAAC;IACV,qBAAqB,EAAE,CAAC,IAAI,EAAE,qBAAqB,EAAE,gBAAgB,CAAC,EAAE,OAAO,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACrH,eAAe,EAAE,CAAC,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,KAAK,IAAI,CAAC;CAChI,CAAA;AAED,OAAO,CAAC,MAAM,CAAC;IACd,IAAI,qBAAqB,EAAE,eAAe,CAAC;CAC3C;AAED,eAAO,MAAM,kBAAkB,QAAO,eAMrC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { ReactNode } from "react";
2
+ export type FullScreenOverlayProps = {
3
+ children: ReactNode;
4
+ };
5
+ export declare const FullScreenOverlay: ({ children }: FullScreenOverlayProps) => import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=full-screen-overlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"full-screen-overlay.d.ts","sourceRoot":"","sources":["../../../src/react-native/full-screen-overlay.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAY,MAAM,OAAO,CAAC;AAmB5C,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,cAAc,sBAAsB,4CAErE,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { ReactNativeFiberNode } from "./types";
2
+ export type RenderedByFrame = {
3
+ name: string;
4
+ file: string | null;
5
+ line: number | null;
6
+ column: number | null;
7
+ collapse: boolean;
8
+ };
9
+ export declare const getRenderedBy: (fiber: ReactNativeFiberNode) => Promise<RenderedByFrame[]>;
10
+ //# sourceMappingURL=get-rendered-by.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-rendered-by.d.ts","sourceRoot":"","sources":["../../../src/react-native/get-rendered-by.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAE/C,MAAM,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;CAClB,CAAC;AA4KF,eAAO,MAAM,aAAa,GACzB,OAAO,oBAAoB,KACzB,OAAO,CAAC,eAAe,EAAE,CAmB3B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const ReactNativeGrabOverlay: () => import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=grab-overlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grab-overlay.d.ts","sourceRoot":"","sources":["../../../src/react-native/grab-overlay.tsx"],"names":[],"mappings":"AAoBA,eAAO,MAAM,sBAAsB,+CAmKlC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { ViewProps } from "react-native";
2
+ export type ReactNativeGrabRootProps = ViewProps;
3
+ export declare const ReactNativeGrabRoot: ({ children, style, ...props }: ReactNativeGrabRootProps) => import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=grab-root.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grab-root.d.ts","sourceRoot":"","sources":["../../../src/react-native/grab-root.tsx"],"names":[],"mappings":"AACA,OAAO,EAAQ,SAAS,EAAE,MAAM,cAAc,CAAC;AAI/C,MAAM,MAAM,wBAAwB,GAAG,SAAS,CAAC;AAEjD,eAAO,MAAM,mBAAmB,GAAI,+BAA+B,wBAAwB,4CAsB1F,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const ReactNativeGrabRoot: () => null;
2
+ //# sourceMappingURL=grab-root.web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grab-root.web.d.ts","sourceRoot":"","sources":["../../../src/react-native/grab-root.web.tsx"],"names":[],"mappings":"AACA,eAAO,MAAM,mBAAmB,YAE/B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type ViewProps } from "react-native";
2
+ export type ReactNativeGrabScreenProps = ViewProps;
3
+ export declare const ReactNativeGrabScreen: ({ children, style, ...props }: ReactNativeGrabScreenProps) => import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=grab-screen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grab-screen.d.ts","sourceRoot":"","sources":["../../../src/react-native/grab-screen.tsx"],"names":[],"mappings":"AACA,OAAO,EAAQ,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAqBpD,MAAM,MAAM,0BAA0B,GAAG,SAAS,CAAC;AAEnD,eAAO,MAAM,qBAAqB,GAAI,+BAInC,0BAA0B,4CAkB5B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const ReactNativeGrabScreen: () => null;
2
+ //# sourceMappingURL=grab-screen.web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grab-screen.web.d.ts","sourceRoot":"","sources":["../../../src/react-native/grab-screen.web.tsx"],"names":[],"mappings":"AACA,eAAO,MAAM,qBAAqB,YAEjC,CAAC"}
@@ -1,2 +1,4 @@
1
- export declare const ElementInspector: () => import("react/jsx-runtime").JSX.Element;
1
+ export { ReactNativeGrabRoot, type ReactNativeGrabRootProps } from "./grab-root";
2
+ export { ReactNativeGrabScreen, type ReactNativeGrabScreenProps } from "./grab-screen";
3
+ export { copyViaMetro } from "./copy";
2
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react-native/index.tsx"],"names":[],"mappings":"AAyUA,eAAO,MAAM,gBAAgB,+CA4N5B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react-native/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,KAAK,0BAA0B,EAAE,MAAM,eAAe,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { BoundingClientRect, ReactNativeFiberNode, ReactNativeShadowNode } from "./types";
2
+ export declare const measureInWindow: (node: ReactNativeShadowNode) => BoundingClientRect;
3
+ export declare const findNodeAtPoint: (node: ReactNativeShadowNode, x: number, y: number) => ReactNativeFiberNode | null;
4
+ //# sourceMappingURL=measure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"measure.d.ts","sourceRoot":"","sources":["../../../src/react-native/measure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAE1F,eAAO,MAAM,eAAe,GAAI,MAAM,qBAAqB,KAAG,kBAY7D,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,MAAM,qBAAqB,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,KAAG,oBAAoB,GAAG,IAQ1G,CAAA"}
@@ -1,45 +1,13 @@
1
- export interface DOMRect {
2
- x: number;
3
- y: number;
4
- width: number;
5
- height: number;
6
- }
7
- export interface DOMElement {
8
- getBoundingClientRect(): DOMRect;
9
- children: Iterable<DOMElement> & {
10
- length: number;
11
- };
12
- contains(node: DOMElement | null | undefined): boolean;
13
- tagName?: string;
14
- __internalInstanceHandle?: unknown;
15
- ownerDocument?: {
16
- documentElement: DOMElement;
17
- };
18
- childElementCount: number;
19
- parentElement: DOMElement | null;
20
- }
21
- export interface InspectorHitTarget {
22
- rect: DOMRect;
23
- node: DOMElement;
24
- }
25
- export interface InspectorSourceFrame {
26
- componentName: string | null;
27
- filePath: string;
28
- line: number | null;
29
- column: number | null;
30
- }
31
- export interface InspectorContextPayload {
32
- mention: string;
33
- preview: string;
34
- stackLines: string[];
35
- plainText: string;
36
- }
37
- export type InspectorState = {
38
- status: "idle";
39
- } | {
40
- status: "selecting";
41
- } | {
42
- status: "copying";
43
- selectedRect: DOMRect;
1
+ export type ReactNativeShadowNode = unknown;
2
+ export type ReactNativeFiberNode = {
3
+ type?: unknown;
4
+ return?: ReactNativeFiberNode | null;
5
+ memoizedProps?: Record<string, unknown> | null;
6
+ stateNode: {
7
+ node: ReactNativeShadowNode;
8
+ } | null;
9
+ _debugStack: Error;
10
+ _debugOwner: unknown;
44
11
  };
12
+ export type BoundingClientRect = [number, number, number, number];
45
13
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/react-native/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,qBAAqB,IAAI,OAAO,CAAC;IACjC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,aAAa,CAAC,EAAE;QACd,eAAe,EAAE,UAAU,CAAC;KAC7B,CAAC;IACF,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,UAAU,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAClB;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IACA,MAAM,EAAE,SAAS,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/react-native/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC;AAC5C,MAAM,MAAM,oBAAoB,GAAG;IAClC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/C,SAAS,EAAE;QAAE,IAAI,EAAE,qBAAqB,CAAC;KAAE,GAAG,IAAI,CAAC;IACnD,WAAW,EAAE,KAAK,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;CACrB,CAAC;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const useLatest: <T>(value: T) => import("react").RefObject<T>;
2
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/react-native/utils.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,OAAO,CAAC,iCAQpC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-grab",
3
- "version": "0.0.3",
3
+ "version": "0.0.5",
4
4
  "description": "React Native touch-to-find inspector.",
5
5
  "keywords": [
6
6
  "devtools",
@@ -46,6 +46,8 @@
46
46
  "build:esm": "tsc -p tsconfig.build.esm.json",
47
47
  "build:cjs": "tsc -p tsconfig.build.cjs.json",
48
48
  "build": "npm run clean && npm run build:esm && npm run build:cjs",
49
+ "test": "vitest run",
50
+ "test:watch": "vitest",
49
51
  "format": "oxfmt .",
50
52
  "format:check": "oxfmt --check ."
51
53
  },
@@ -56,11 +58,26 @@
56
58
  "@types/node": "latest",
57
59
  "@types/react": "latest",
58
60
  "oxfmt": "latest",
59
- "typescript": "latest"
61
+ "typescript": "latest",
62
+ "vitest": "^3.2.4"
60
63
  },
61
64
  "peerDependencies": {
62
65
  "react": ">=19",
63
66
  "react-native": ">=0.82",
64
- "react-native-screens": "*"
67
+ "react-native-screens": "*",
68
+ "@react-navigation/native": "*",
69
+ "expo-router": "*",
70
+ "expo-dev-menu": "*"
71
+ },
72
+ "peerDependenciesMeta": {
73
+ "@react-navigation/native": {
74
+ "optional": true
75
+ },
76
+ "expo-router": {
77
+ "optional": true
78
+ },
79
+ "react-native-screens": {
80
+ "optional": true
81
+ }
65
82
  }
66
83
  }
@@ -1,336 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildInspectorCopyPayload = exports.buildInspectorContextPayload = exports.buildElementPreview = exports.normalizeInspectorPath = void 0;
4
- const fiber_1 = require("./fiber");
5
- const symbolicate_1 = require("./symbolicate");
6
- const MAX_CLIPBOARD_LEN = 1200;
7
- const MAX_OWNER_DEPTH = 30;
8
- const MAX_SYMBOLICATION_TASKS = 24;
9
- const MAX_FIELD_LEN = 60;
10
- const REACT_NATIVE_PRIMITIVE_NAMES = new Set([
11
- "Text",
12
- "View",
13
- "Image",
14
- "TextInput",
15
- "ScrollView",
16
- "Switch",
17
- "Modal",
18
- "SafeAreaView",
19
- "Pressable",
20
- "TouchableOpacity",
21
- "TouchableHighlight",
22
- "TouchableWithoutFeedback",
23
- ]);
24
- const truncate = (value, max) => {
25
- if (value.length <= max)
26
- return value;
27
- return `${value.slice(0, Math.max(0, max - 3))}...`;
28
- };
29
- const sanitizeLine = (value, max = MAX_FIELD_LEN) => {
30
- if (value == null)
31
- return "";
32
- const raw = String(value).replace(/\s+/g, " ").trim();
33
- if (!raw)
34
- return "";
35
- return truncate(raw, max);
36
- };
37
- const escapeAttribute = (value) => {
38
- return String(value)
39
- .replace(/&/g, "&amp;")
40
- .replace(/"/g, "&quot;")
41
- .replace(/</g, "&lt;")
42
- .replace(/>/g, "&gt;");
43
- };
44
- const isRecord = (value) => {
45
- return typeof value === "object" && value !== null;
46
- };
47
- const asErrorWithStack = (debugStack) => {
48
- if (debugStack instanceof Error)
49
- return debugStack;
50
- const stackString = typeof debugStack === "string"
51
- ? debugStack
52
- : isRecord(debugStack) && typeof debugStack.stack === "string"
53
- ? debugStack.stack
54
- : null;
55
- if (!stackString)
56
- return null;
57
- const error = new Error("Inspector debug stack");
58
- error.stack = stackString;
59
- return error;
60
- };
61
- const toFiberNode = (node) => {
62
- if (!node || !node.__internalInstanceHandle)
63
- return null;
64
- return node.__internalInstanceHandle;
65
- };
66
- const toPathSlashes = (value) => {
67
- return value.replace(/\\/g, "/");
68
- };
69
- const trimProjectRootSlashes = (value) => {
70
- return toPathSlashes(value).replace(/\/+$/, "");
71
- };
72
- const maybeDecodeURIComponent = (value) => {
73
- try {
74
- return decodeURIComponent(value);
75
- }
76
- catch {
77
- return value;
78
- }
79
- };
80
- const normalizeInspectorPath = (filePath, pathRootHint) => {
81
- const raw = sanitizeLine(filePath, 2000);
82
- if (!raw)
83
- return "-";
84
- let normalized = raw.replace(/[?#].*$/, "");
85
- if (normalized.startsWith("file://")) {
86
- normalized = normalized.replace(/^file:\/\//, "");
87
- }
88
- else if (/^[a-zA-Z]+:\/\//.test(normalized)) {
89
- try {
90
- const url = new URL(normalized);
91
- normalized = url.pathname;
92
- }
93
- catch {
94
- // keep raw when URL parsing fails
95
- }
96
- }
97
- normalized = maybeDecodeURIComponent(toPathSlashes(normalized));
98
- if (!normalized)
99
- return "-";
100
- if (normalized.startsWith("/[project]/")) {
101
- return normalized;
102
- }
103
- if (normalized.startsWith("/[metro-project]/")) {
104
- return normalized.replace("/[metro-project]/", "/[project]/");
105
- }
106
- if (!normalized.startsWith("/")) {
107
- return normalized;
108
- }
109
- const rootHint = pathRootHint ? trimProjectRootSlashes(pathRootHint) : "";
110
- if (rootHint && normalized.startsWith(`${rootHint}/`)) {
111
- return `/[project]/${normalized.slice(rootHint.length + 1)}`;
112
- }
113
- return normalized;
114
- };
115
- exports.normalizeInspectorPath = normalizeInspectorPath;
116
- const toInspectorSourceFrame = (frame, pathRootHint) => {
117
- if (frame.collapse === true)
118
- return null;
119
- const file = frame.file?.trim() ?? "";
120
- if (!file)
121
- return null;
122
- const filePath = (0, exports.normalizeInspectorPath)(file, pathRootHint);
123
- if (!filePath || filePath === "-")
124
- return null;
125
- const method = sanitizeLine(frame.methodName ?? "", 100);
126
- const componentName = method || null;
127
- const line = typeof frame.lineNumber === "number" && Number.isFinite(frame.lineNumber)
128
- ? frame.lineNumber
129
- : null;
130
- const column = typeof frame.column === "number" && Number.isFinite(frame.column) ? frame.column : null;
131
- return {
132
- componentName,
133
- filePath,
134
- line,
135
- column,
136
- };
137
- };
138
- const dedupeConsecutiveFrames = (frames) => {
139
- if (frames.length <= 1)
140
- return frames;
141
- const deduped = [];
142
- let previousKey = "";
143
- for (const frame of frames) {
144
- const key = `${frame.componentName ?? ""}|${frame.filePath}|${frame.line ?? ""}|${frame.column ?? ""}`;
145
- if (key === previousKey)
146
- continue;
147
- deduped.push(frame);
148
- previousKey = key;
149
- }
150
- return deduped;
151
- };
152
- const extractSourceFramesFromFiberChain = async (fiber, maxStackLines, symbolicateStack, pathRootHint) => {
153
- const debugStackErrors = [];
154
- let cursor = fiber?.return ?? null;
155
- let depth = 0;
156
- while (cursor && depth < MAX_OWNER_DEPTH && debugStackErrors.length < MAX_SYMBOLICATION_TASKS) {
157
- const error = asErrorWithStack(cursor._debugStack);
158
- if (error) {
159
- debugStackErrors.push(error);
160
- }
161
- cursor = cursor.return ?? null;
162
- depth += 1;
163
- }
164
- const perOwnerFrames = await Promise.all(debugStackErrors.map(async (error) => {
165
- try {
166
- const symbolicated = await symbolicateStack(error);
167
- for (const frame of symbolicated.stack) {
168
- const formatted = toInspectorSourceFrame(frame, pathRootHint);
169
- if (formatted) {
170
- return formatted;
171
- }
172
- }
173
- }
174
- catch {
175
- // keep walking owner chain on symbolication failures
176
- }
177
- return null;
178
- }));
179
- const frames = [];
180
- for (const frame of perOwnerFrames) {
181
- if (!frame)
182
- continue;
183
- frames.push(frame);
184
- if (frames.length >= maxStackLines) {
185
- break;
186
- }
187
- }
188
- return dedupeConsecutiveFrames(frames).slice(0, maxStackLines);
189
- };
190
- const extractPrimitiveNameFromDisplayName = (displayName) => {
191
- if (!displayName)
192
- return null;
193
- if (REACT_NATIVE_PRIMITIVE_NAMES.has(displayName)) {
194
- return displayName;
195
- }
196
- const wrappedMatch = /^(ForwardRef|Memo)\((.+)\)$/.exec(displayName);
197
- if (!wrappedMatch)
198
- return null;
199
- const inner = sanitizeLine(wrappedMatch[2], 80);
200
- if (!inner)
201
- return null;
202
- return REACT_NATIVE_PRIMITIVE_NAMES.has(inner) ? inner : null;
203
- };
204
- const getReactNativePrimitiveFromFiberChain = (fiber) => {
205
- let cursor = fiber;
206
- let depth = 0;
207
- while (cursor && depth < MAX_OWNER_DEPTH) {
208
- const displayName = (0, fiber_1.getDisplayNameForFiber)(cursor);
209
- const primitiveName = extractPrimitiveNameFromDisplayName(displayName);
210
- if (primitiveName)
211
- return primitiveName;
212
- cursor = cursor.return ?? null;
213
- depth += 1;
214
- }
215
- return null;
216
- };
217
- const resolveTagName = (node, overrideTagName) => {
218
- if (overrideTagName) {
219
- const normalizedOverride = sanitizeLine(overrideTagName, 50);
220
- if (normalizedOverride)
221
- return normalizedOverride;
222
- }
223
- const raw = sanitizeLine(node.tagName ?? "", 50);
224
- if (!raw)
225
- return "View";
226
- return raw;
227
- };
228
- const extractTextPreview = (props, maxPreviewText) => {
229
- if (!props || !("children" in props))
230
- return "";
231
- const children = props.children;
232
- if (typeof children === "string" || typeof children === "number") {
233
- return truncate(String(children).replace(/\s+/g, " ").trim(), maxPreviewText);
234
- }
235
- if (Array.isArray(children)) {
236
- const joined = children
237
- .filter((item) => typeof item === "string" || typeof item === "number")
238
- .map((item) => String(item))
239
- .join(" ")
240
- .replace(/\s+/g, " ")
241
- .trim();
242
- if (!joined)
243
- return "";
244
- return truncate(joined, maxPreviewText);
245
- }
246
- return "";
247
- };
248
- const buildAttributePreview = (props) => {
249
- if (!props)
250
- return "";
251
- const attributes = [];
252
- const pairs = [
253
- ["testID", "testID"],
254
- ["accessibilityLabel", "accessibilityLabel"],
255
- ["id", "id"],
256
- ["className", "className"],
257
- ];
258
- for (const [propKey, attrName] of pairs) {
259
- const value = props[propKey];
260
- if (typeof value === "string" || typeof value === "number") {
261
- attributes.push(`${attrName}="${escapeAttribute(value)}"`);
262
- }
263
- }
264
- return attributes.length > 0 ? ` ${attributes.join(" ")}` : "";
265
- };
266
- const buildElementPreview = (node, maxPreviewText, overrideTagName) => {
267
- const tagName = resolveTagName(node, overrideTagName);
268
- const props = (0, fiber_1.getMemoizedProps)(node);
269
- const attrs = buildAttributePreview(props);
270
- const text = extractTextPreview(props, maxPreviewText);
271
- const hasChildren = (node.children?.length ?? 0) > 0;
272
- if (text) {
273
- return `<${tagName}${attrs}>\n ${escapeAttribute(text)}\n</${tagName}>`;
274
- }
275
- if (hasChildren) {
276
- return `<${tagName}${attrs}>\n ...\n</${tagName}>`;
277
- }
278
- return `<${tagName}${attrs} />`;
279
- };
280
- exports.buildElementPreview = buildElementPreview;
281
- const formatStackLine = (frame) => {
282
- let fileRef = frame.filePath;
283
- if (frame.line != null) {
284
- fileRef += `:${frame.line}`;
285
- if (frame.column != null) {
286
- fileRef += `:${frame.column}`;
287
- }
288
- }
289
- if (frame.componentName) {
290
- return `in ${frame.componentName} (at ${fileRef})`;
291
- }
292
- return `in ${fileRef}`;
293
- };
294
- const composePayloadText = (payload) => {
295
- const lines = [payload.mention, "", payload.preview, ...payload.stackLines];
296
- return lines.join("\n").trim();
297
- };
298
- const getDefaultPathRootHint = () => {
299
- const processValue = globalThis.process;
300
- if (!processValue || typeof processValue.cwd !== "function") {
301
- return null;
302
- }
303
- try {
304
- return processValue.cwd();
305
- }
306
- catch {
307
- return null;
308
- }
309
- };
310
- const buildInspectorContextPayload = async (hitTarget, options = {}) => {
311
- const maxStackLines = Math.max(0, options.maxStackLines ?? 3);
312
- const maxPreviewText = Math.max(16, options.maxPreviewText ?? 120);
313
- const pathRootHint = options.pathRootHint ?? getDefaultPathRootHint();
314
- const symbolicateStack = options.symbolicateStack ?? symbolicate_1.symbolicate;
315
- const fiber = toFiberNode(hitTarget.node);
316
- const sourceFrames = await extractSourceFramesFromFiberChain(fiber, maxStackLines, symbolicateStack, pathRootHint);
317
- const primitiveName = getReactNativePrimitiveFromFiberChain(fiber);
318
- const stackLines = sourceFrames.map(formatStackLine);
319
- const resolvedName = sourceFrames[0]?.componentName || resolveTagName(hitTarget.node);
320
- const mention = `@<${resolvedName}>`;
321
- const preview = (0, exports.buildElementPreview)(hitTarget.node, maxPreviewText, primitiveName);
322
- const plainText = truncate(composePayloadText({ mention, preview, stackLines, plainText: "" }), MAX_CLIPBOARD_LEN);
323
- return {
324
- mention,
325
- preview,
326
- stackLines,
327
- plainText,
328
- };
329
- };
330
- exports.buildInspectorContextPayload = buildInspectorContextPayload;
331
- const buildInspectorCopyPayload = async (hitTarget, options = {}) => {
332
- const payload = await (0, exports.buildInspectorContextPayload)(hitTarget, options);
333
- return payload.plainText;
334
- };
335
- exports.buildInspectorCopyPayload = buildInspectorCopyPayload;
336
- //# sourceMappingURL=copy-payload.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"copy-payload.js","sourceRoot":"","sources":["../../../src/react-native/copy-payload.ts"],"names":[],"mappings":"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"}