react-native-grab 1.1.0 → 1.1.1

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 (66) hide show
  1. package/dist/cjs/react-native/__tests__/grab-context-description.test.js +81 -0
  2. package/dist/cjs/react-native/__tests__/grab-context-description.test.js.map +1 -1
  3. package/dist/cjs/react-native/containers.js +107 -25
  4. package/dist/cjs/react-native/containers.js.map +1 -1
  5. package/dist/cjs/react-native/context-menu.js +15 -23
  6. package/dist/cjs/react-native/context-menu.js.map +1 -1
  7. package/dist/cjs/react-native/description.js +31 -4
  8. package/dist/cjs/react-native/description.js.map +1 -1
  9. package/dist/cjs/react-native/grab-colors.js +7 -0
  10. package/dist/cjs/react-native/grab-colors.js.map +1 -0
  11. package/dist/cjs/react-native/grab-control-bar.js +9 -5
  12. package/dist/cjs/react-native/grab-control-bar.js.map +1 -1
  13. package/dist/cjs/react-native/grab-controller.js +105 -16
  14. package/dist/cjs/react-native/grab-controller.js.map +1 -1
  15. package/dist/cjs/react-native/grab-overlay.js +139 -170
  16. package/dist/cjs/react-native/grab-overlay.js.map +1 -1
  17. package/dist/cjs/react-native/grab-root-controls.js +89 -0
  18. package/dist/cjs/react-native/grab-root-controls.js.map +1 -0
  19. package/dist/cjs/react-native/grab-root.js +8 -2
  20. package/dist/cjs/react-native/grab-root.js.map +1 -1
  21. package/dist/cjs/react-native/grab-screen.js +18 -3
  22. package/dist/cjs/react-native/grab-screen.js.map +1 -1
  23. package/dist/cjs/react-native/index.js.map +1 -1
  24. package/dist/esm/react-native/__tests__/grab-context-description.test.js +83 -2
  25. package/dist/esm/react-native/__tests__/grab-context-description.test.js.map +1 -1
  26. package/dist/esm/react-native/containers.js +95 -20
  27. package/dist/esm/react-native/containers.js.map +1 -1
  28. package/dist/esm/react-native/context-menu.js +15 -23
  29. package/dist/esm/react-native/context-menu.js.map +1 -1
  30. package/dist/esm/react-native/description.js +28 -3
  31. package/dist/esm/react-native/description.js.map +1 -1
  32. package/dist/esm/react-native/grab-colors.js +4 -0
  33. package/dist/esm/react-native/grab-colors.js.map +1 -0
  34. package/dist/esm/react-native/grab-control-bar.js +9 -5
  35. package/dist/esm/react-native/grab-control-bar.js.map +1 -1
  36. package/dist/esm/react-native/grab-controller.js +97 -13
  37. package/dist/esm/react-native/grab-controller.js.map +1 -1
  38. package/dist/esm/react-native/grab-overlay.js +141 -172
  39. package/dist/esm/react-native/grab-overlay.js.map +1 -1
  40. package/dist/esm/react-native/grab-root-controls.js +85 -0
  41. package/dist/esm/react-native/grab-root-controls.js.map +1 -0
  42. package/dist/esm/react-native/grab-root.js +11 -5
  43. package/dist/esm/react-native/grab-root.js.map +1 -1
  44. package/dist/esm/react-native/grab-screen.js +21 -6
  45. package/dist/esm/react-native/grab-screen.js.map +1 -1
  46. package/dist/esm/react-native/index.js.map +1 -1
  47. package/dist/types/react-native/containers.d.ts +23 -4
  48. package/dist/types/react-native/containers.d.ts.map +1 -1
  49. package/dist/types/react-native/context-menu.d.ts +6 -1
  50. package/dist/types/react-native/context-menu.d.ts.map +1 -1
  51. package/dist/types/react-native/description.d.ts +5 -0
  52. package/dist/types/react-native/description.d.ts.map +1 -1
  53. package/dist/types/react-native/grab-colors.d.ts +4 -0
  54. package/dist/types/react-native/grab-colors.d.ts.map +1 -0
  55. package/dist/types/react-native/grab-control-bar.d.ts.map +1 -1
  56. package/dist/types/react-native/grab-controller.d.ts +17 -4
  57. package/dist/types/react-native/grab-controller.d.ts.map +1 -1
  58. package/dist/types/react-native/grab-overlay.d.ts +6 -1
  59. package/dist/types/react-native/grab-overlay.d.ts.map +1 -1
  60. package/dist/types/react-native/grab-root-controls.d.ts +2 -0
  61. package/dist/types/react-native/grab-root-controls.d.ts.map +1 -0
  62. package/dist/types/react-native/grab-root.d.ts.map +1 -1
  63. package/dist/types/react-native/grab-screen.d.ts +4 -2
  64. package/dist/types/react-native/grab-screen.d.ts.map +1 -1
  65. package/dist/types/react-native/index.d.ts.map +1 -1
  66. package/package.json +1 -1
@@ -1,17 +1,32 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useCallback, useRef } from "react";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useRef, useState } from "react";
3
3
  import { View } from "react-native";
4
- import { setFocusedScreenRef } from "./containers";
4
+ import { clearGrabSelectionOwnerFocus, createGrabSelectionOwnerId, registerGrabSelectionOwner, setGrabSelectionOwnerFocused, unregisterGrabSelectionOwner, } from "./containers";
5
5
  import { getFocusEffect } from "./focus-effect";
6
+ import { ReactNativeGrabOverlay } from "./grab-overlay";
6
7
  const useFocusEffect = getFocusEffect();
7
- export const ReactNativeGrabScreen = ({ children, style, ...props }) => {
8
+ export const ReactNativeGrabScreen = ({ children, style, id, ...props }) => {
8
9
  const screenRef = useRef(null);
10
+ const ownerIdRef = useRef(id ?? createGrabSelectionOwnerId("screen"));
11
+ const [panHandlers, setPanHandlers] = useState(null);
12
+ useEffect(() => {
13
+ if (!screenRef.current) {
14
+ return;
15
+ }
16
+ registerGrabSelectionOwner(ownerIdRef.current, "screen", screenRef.current);
17
+ return () => {
18
+ unregisterGrabSelectionOwner(ownerIdRef.current);
19
+ };
20
+ }, []);
9
21
  useFocusEffect(useCallback(() => {
10
22
  if (!screenRef.current) {
11
23
  return;
12
24
  }
13
- setFocusedScreenRef(screenRef.current);
25
+ setGrabSelectionOwnerFocused(ownerIdRef.current, true);
26
+ return () => {
27
+ clearGrabSelectionOwnerFocus(ownerIdRef.current);
28
+ };
14
29
  }, []));
15
- return (_jsx(View, { ...props, ref: screenRef, style: [{ flex: 1 }, style], children: children }));
30
+ return (_jsxs(View, { ...props, ...(panHandlers ?? {}), collapsable: false, ref: screenRef, style: [{ flex: 1 }, style], children: [children, _jsx(ReactNativeGrabOverlay, { ownerId: ownerIdRef.current, onPanHandlersChange: setPanHandlers })] }));
16
31
  };
17
32
  //# sourceMappingURL=grab-screen.js.map
@@ -1 +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;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,cAAc,GAAG,cAAc,EAAE,CAAC;AAIxC,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"}
1
+ {"version":3,"file":"grab-screen.js","sourceRoot":"","sources":["../../../src/react-native/grab-screen.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,IAAI,EAAiD,MAAM,cAAc,CAAC;AACnF,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,0BAA0B,EAC1B,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,cAAc,GAAG,cAAc,EAAE,CAAC;AAMxC,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,EACpC,QAAQ,EACR,KAAK,EACL,EAAE,EACF,GAAG,KAAK,EACmB,EAAE,EAAE;IAC/B,MAAM,SAAS,GAAG,MAAM,CAAc,IAAI,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,EAAE,IAAI,0BAA0B,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAkC,IAAI,CAAC,CAAC;IAEtF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,0BAA0B,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;QAC5E,OAAO,GAAG,EAAE;YACV,4BAA4B,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACnD,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,cAAc,CACZ,WAAW,CAAC,GAAG,EAAE;QACf,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,4BAA4B,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACvD,OAAO,GAAG,EAAE;YACV,4BAA4B,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACnD,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CACP,CAAC;IAEF,OAAO,CACL,MAAC,IAAI,OACC,KAAK,KACL,CAAC,WAAW,IAAI,EAAE,CAAC,EACvB,WAAW,EAAE,KAAK,EAClB,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,aAE1B,QAAQ,EACT,KAAC,sBAAsB,IAAC,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,mBAAmB,EAAE,cAAc,GAAI,IACvF,CACR,CAAC;AACJ,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react-native/index.ts"],"names":[],"mappings":"AAeA,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AACtB,MAAM,WAAW,GAAG,CAAC,EAAE,QAAQ,EAA4B,EAAE,EAAE,CAAC,QAAQ,CAAC;AAEzE,MAAM,CAAC,MAAM,mBAAmB,GAAkD,OAAO;IACvF,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,mBAAmB;IAC5C,CAAC,CAAC,WAAW,CAAC;AAEhB,MAAM,CAAC,MAAM,qBAAqB,GAAoD,OAAO;IAC3F,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,qBAAqB;IAChD,CAAC,CAAC,WAAW,CAAC;AAEhB,MAAM,CAAC,MAAM,8BAA8B,GACzC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,WAAW,CAAC;AAEnF,MAAM,CAAC,MAAM,cAAc,GAAe,OAAO;IAC/C,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,cAAc;IAC7C,CAAC,CAAC,IAAI,CAAC;AAET,MAAM,CAAC,MAAM,cAAc,GAA6C,OAAO;IAC7E,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,cAAc;IAC1C,CAAC,CAAC,IAAI,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react-native/index.ts"],"names":[],"mappings":"AAYA,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AACtB,MAAM,WAAW,GAAG,CAAC,EAAE,QAAQ,EAA4B,EAAE,EAAE,CAAC,QAAQ,CAAC;AAEzE,MAAM,CAAC,MAAM,mBAAmB,GAAkD,OAAO;IACvF,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,mBAAmB;IAC5C,CAAC,CAAC,WAAW,CAAC;AAEhB,MAAM,CAAC,MAAM,qBAAqB,GAAoD,OAAO;IAC3F,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,qBAAqB;IAChD,CAAC,CAAC,WAAW,CAAC;AAEhB,MAAM,CAAC,MAAM,8BAA8B,GACzC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,WAAW,CAAC;AAEnF,MAAM,CAAC,MAAM,cAAc,GAAe,OAAO;IAC/C,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,cAAc;IAC7C,CAAC,CAAC,IAAI,CAAC;AAET,MAAM,CAAC,MAAM,cAAc,GAA6C,OAAO;IAC7E,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,cAAc;IAC1C,CAAC,CAAC,IAAI,CAAC"}
@@ -1,7 +1,26 @@
1
1
  import { type ReactNativeElement } from "react-native";
2
2
  import type { ReactNativeShadowNode } from "./types";
3
- export declare const setFocusedScreenRef: (ref: ReactNativeElement) => void;
4
- export declare const setAppRootRef: (ref: ReactNativeElement) => void;
5
- export declare const getAppRootShadowNode: () => ReactNativeShadowNode;
6
- export declare const getFocusedScreenShadowNode: () => unknown;
3
+ export type GrabSelectionOwnerKind = "root" | "screen";
4
+ export type GrabSelectionOwner = {
5
+ id: string;
6
+ kind: GrabSelectionOwnerKind;
7
+ shadowNode: ReactNativeShadowNode;
8
+ registrationOrder: number;
9
+ };
10
+ type SelectionOwnersStoreSnapshot = {
11
+ owners: Map<string, GrabSelectionOwner>;
12
+ focusedScreenOwnerId: string | null;
13
+ };
14
+ export declare const createGrabSelectionOwnerId: (kind: GrabSelectionOwnerKind) => string;
15
+ export declare const registerGrabSelectionOwner: (id: string, kind: GrabSelectionOwnerKind, ref: ReactNativeElement) => void;
16
+ export declare const unregisterGrabSelectionOwner: (id: string) => void;
17
+ export declare const setGrabSelectionOwnerFocused: (id: string, isFocused: boolean) => void;
18
+ export declare const clearGrabSelectionOwnerFocus: (id: string) => void;
19
+ export declare const getGrabSelectionOwner: (id: string) => GrabSelectionOwner | null;
20
+ export declare const getResolvedGrabSelectionOwner: () => GrabSelectionOwner | null;
21
+ export declare const getResolvedGrabSelectionOwnerId: () => string | null;
22
+ export declare const useResolvedGrabSelectionOwnerId: () => string | null;
23
+ export declare const useIsResolvedGrabSelectionOwner: (id: string) => boolean;
24
+ export declare const useSelectionOwnersStore: () => SelectionOwnersStoreSnapshot;
25
+ export {};
7
26
  //# sourceMappingURL=containers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"containers.d.ts","sourceRoot":"","sources":["../../../src/react-native/containers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAMrD,eAAO,MAAM,mBAAmB,GAAI,KAAK,kBAAkB,SAS1D,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,KAAK,kBAAkB,SASpD,CAAC;AAEF,eAAO,MAAM,oBAAoB,QAAO,qBAMvC,CAAC;AACF,eAAO,MAAM,0BAA0B,eAOtC,CAAC"}
1
+ {"version":3,"file":"containers.d.ts","sourceRoot":"","sources":["../../../src/react-native/containers.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAGrD,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEvD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,sBAAsB,CAAC;IAC7B,UAAU,EAAE,qBAAqB,CAAC;IAClC,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,KAAK,4BAA4B,GAAG;IAClC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACxC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC,CAAC;AA2CF,eAAO,MAAM,0BAA0B,GAAI,MAAM,sBAAsB,WAGtE,CAAC;AAEF,eAAO,MAAM,0BAA0B,GACrC,IAAI,MAAM,EACV,MAAM,sBAAsB,EAC5B,KAAK,kBAAkB,SAiBxB,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAI,IAAI,MAAM,SAatD,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAI,IAAI,MAAM,EAAE,WAAW,OAAO,SAa1E,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAI,IAAI,MAAM,SAOtD,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,IAAI,MAAM,KAAG,kBAAkB,GAAG,IAEvE,CAAC;AAEF,eAAO,MAAM,6BAA6B,QAAO,kBAAkB,GAAG,IASrE,CAAC;AAEF,eAAO,MAAM,+BAA+B,QAAO,MAAM,GAAG,IAE3D,CAAC;AAEF,eAAO,MAAM,+BAA+B,qBAM3C,CAAC;AAEF,eAAO,MAAM,+BAA+B,GAAI,IAAI,MAAM,YAMzD,CAAC;AAEF,eAAO,MAAM,uBAAuB,oCAEnC,CAAC"}
@@ -9,6 +9,10 @@ export type ContextMenuCutout = {
9
9
  width: number;
10
10
  height: number;
11
11
  };
12
+ export type ContextMenuBounds = {
13
+ width: number;
14
+ height: number;
15
+ };
12
16
  export type ContextMenuHorizontalAlignment = "left" | "center" | "right";
13
17
  export type ContextMenuVerticalAlignment = "top" | "center" | "bottom";
14
18
  export type ContextMenuOffset = {
@@ -17,6 +21,7 @@ export type ContextMenuOffset = {
17
21
  };
18
22
  export type ContextMenuProps = {
19
23
  anchor: ContextMenuAnchor | null;
24
+ bounds?: ContextMenuBounds | null;
20
25
  children?: ReactNode;
21
26
  cutout?: ContextMenuCutout | null;
22
27
  horizontalAlignment?: ContextMenuHorizontalAlignment;
@@ -32,7 +37,7 @@ export type ContextMenuItemProps = {
32
37
  onPress: () => void;
33
38
  };
34
39
  export declare const ContextMenu: {
35
- ({ anchor, children, cutout, horizontalAlignment, offset, onClose, verticalAlignment, visible, }: ContextMenuProps): import("react/jsx-runtime").JSX.Element | null;
40
+ ({ anchor, bounds, children, cutout, horizontalAlignment, offset, onClose, verticalAlignment, visible, }: ContextMenuProps): import("react/jsx-runtime").JSX.Element | null;
36
41
  Item: ({ children, destructive, disabled, onPress, }: ContextMenuItemProps) => import("react/jsx-runtime").JSX.Element;
37
42
  };
38
43
  //# sourceMappingURL=context-menu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context-menu.d.ts","sourceRoot":"","sources":["../../../src/react-native/context-menu.tsx"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAcf,MAAM,MAAM,iBAAiB,GAAG;IAC9B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AACzE,MAAM,MAAM,4BAA4B,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AACvE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAQF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAClC,mBAAmB,CAAC,EAAE,8BAA8B,CAAC;IACrD,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,iBAAiB,CAAC,EAAE,4BAA4B,CAAC;IACjD,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAyFF,eAAO,MAAM,WAAW;sGASrB,gBAAgB;0DAnChB,oBAAoB;CAkOtB,CAAC"}
1
+ {"version":3,"file":"context-menu.d.ts","sourceRoot":"","sources":["../../../src/react-native/context-menu.tsx"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAcf,MAAM,MAAM,iBAAiB,GAAG;IAC9B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AACzE,MAAM,MAAM,4BAA4B,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AACvE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAQF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACjC,MAAM,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAClC,mBAAmB,CAAC,EAAE,8BAA8B,CAAC;IACrD,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,iBAAiB,CAAC,EAAE,4BAA4B,CAAC;IACjD,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AA0FF,eAAO,MAAM,WAAW;8GAUrB,gBAAgB;0DApChB,oBAAoB;CAuNtB,CAAC"}
@@ -1,3 +1,8 @@
1
1
  import { ReactNativeFiberNode } from "./types";
2
+ import type { RenderedByFrame } from "./get-rendered-by";
3
+ /** Owner names treated as host-like when resolving `Text (in Owner)` for the grab menu. */
4
+ export declare const GRAB_HOST_LIKE_COMPONENT_NAMES: readonly ["View", "Text"];
5
+ export declare const isHostLikeComponentName: (name: string) => boolean;
6
+ export declare const getGrabSelectionTitle: (node: ReactNativeFiberNode, renderedBy: RenderedByFrame[]) => string;
2
7
  export declare const getDescription: (node: ReactNativeFiberNode) => Promise<string>;
3
8
  //# sourceMappingURL=description.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"description.d.ts","sourceRoot":"","sources":["../../../src/react-native/description.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAkN/C,eAAO,MAAM,cAAc,GAAU,MAAM,oBAAoB,KAAG,OAAO,CAAC,MAAM,CAS/E,CAAC"}
1
+ {"version":3,"file":"description.d.ts","sourceRoot":"","sources":["../../../src/react-native/description.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAkBzD,2FAA2F;AAC3F,eAAO,MAAM,8BAA8B,2BAA4B,CAAC;AAIxE,eAAO,MAAM,uBAAuB,GAAI,MAAM,MAAM,KAAG,OAClB,CAAC;AA4MtC,eAAO,MAAM,qBAAqB,GAChC,MAAM,oBAAoB,EAC1B,YAAY,eAAe,EAAE,KAC5B,MAWF,CAAC;AAEF,eAAO,MAAM,cAAc,GAAU,MAAM,oBAAoB,KAAG,OAAO,CAAC,MAAM,CAS/E,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const GRAB_PRIMARY = "#8232FF";
2
+ export declare const GRAB_HIGHLIGHT_FILL = "rgba(130, 50, 255, 0.2)";
3
+ export declare const GRAB_BADGE_BACKGROUND = "rgba(130, 50, 255, 0.92)";
4
+ //# sourceMappingURL=grab-colors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grab-colors.d.ts","sourceRoot":"","sources":["../../../src/react-native/grab-colors.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,YAAY,CAAC;AACtC,eAAO,MAAM,mBAAmB,4BAA4B,CAAC;AAC7D,eAAO,MAAM,qBAAqB,6BAA6B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"grab-control-bar.d.ts","sourceRoot":"","sources":["../../../src/react-native/grab-control-bar.tsx"],"names":[],"mappings":"AACA,OAAO,EAGL,wBAAwB,EAKxB,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AActB,MAAM,MAAM,mBAAmB,GAAG;IAChC,qBAAqB,CAAC,EAAE,wBAAwB,CAAC;IACjD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,sHAS5B,mBAAmB,mDA6FrB,CAAC"}
1
+ {"version":3,"file":"grab-control-bar.d.ts","sourceRoot":"","sources":["../../../src/react-native/grab-control-bar.tsx"],"names":[],"mappings":"AACA,OAAO,EAGL,wBAAwB,EAKxB,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AActB,MAAM,MAAM,mBAAmB,GAAG;IAChC,qBAAqB,CAAC,EAAE,wBAAwB,CAAC;IACjD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,sHAS5B,mBAAmB,mDA+FrB,CAAC"}
@@ -1,7 +1,20 @@
1
- type EnableGrabbingHandler = () => void;
2
- type ToggleGrabMenuHandler = () => void;
3
- export declare const setEnableGrabbingHandler: (handler: EnableGrabbingHandler | null) => void;
4
- export declare const setToggleGrabMenuHandler: (handler: ToggleGrabMenuHandler | null) => void;
1
+ type LocalGrabSelectionController = {
2
+ closeSelectionMenu: () => void;
3
+ startSelection: () => void;
4
+ stopSelection: () => void;
5
+ };
6
+ type GrabControllerState = {
7
+ isMenuVisible: boolean;
8
+ selectedOwnerId: string | null;
9
+ selectionSessionOwnerId: string | null;
10
+ };
11
+ export declare const registerLocalGrabSelectionController: (ownerId: string, controller: LocalGrabSelectionController) => void;
12
+ export declare const unregisterLocalGrabSelectionController: (ownerId: string) => void;
13
+ export declare const useGrabControllerState: () => GrabControllerState;
14
+ export declare const setGrabSelectionSessionOwner: (ownerId: string | null) => void;
15
+ export declare const showGrabSelectionMenu: (ownerId: string) => void;
16
+ export declare const hideGrabSelectionMenu: (ownerId: string) => void;
17
+ export declare const clearGrabOwnerPresentation: (ownerId: string) => void;
5
18
  export declare const enableGrabbing: () => void;
6
19
  export declare const toggleGrabMenu: () => void;
7
20
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"grab-controller.d.ts","sourceRoot":"","sources":["../../../src/react-native/grab-controller.ts"],"names":[],"mappings":"AAAA,KAAK,qBAAqB,GAAG,MAAM,IAAI,CAAC;AACxC,KAAK,qBAAqB,GAAG,MAAM,IAAI,CAAC;AAKxC,eAAO,MAAM,wBAAwB,GAAI,SAAS,qBAAqB,GAAG,IAAI,SAE7E,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,SAAS,qBAAqB,GAAG,IAAI,SAE7E,CAAC;AAEF,eAAO,MAAM,cAAc,YAS1B,CAAC;AAEF,eAAO,MAAM,cAAc,YAO1B,CAAC"}
1
+ {"version":3,"file":"grab-controller.d.ts","sourceRoot":"","sources":["../../../src/react-native/grab-controller.ts"],"names":[],"mappings":"AAGA,KAAK,4BAA4B,GAAG;IAClC,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC,CAAC;AAsCF,eAAO,MAAM,oCAAoC,GAC/C,SAAS,MAAM,EACf,YAAY,4BAA4B,SAGzC,CAAC;AAEF,eAAO,MAAM,sCAAsC,GAAI,SAAS,MAAM,SASrE,CAAC;AAEF,eAAO,MAAM,sBAAsB,2BAMlC,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAI,SAAS,MAAM,GAAG,IAAI,SAKlE,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,SAAS,MAAM,SAOpD,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,SAAS,MAAM,SAKpD,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAI,SAAS,MAAM,SAOzD,CAAC;AAEF,eAAO,MAAM,cAAc,YAwB1B,CAAC;AAEF,eAAO,MAAM,cAAc,YAiB1B,CAAC"}
@@ -1,2 +1,7 @@
1
- export declare const ReactNativeGrabOverlay: () => import("react/jsx-runtime").JSX.Element;
1
+ import { type GestureResponderHandlers } from "react-native";
2
+ export type ReactNativeGrabOverlayProps = {
3
+ ownerId: string;
4
+ onPanHandlersChange?: (panHandlers: GestureResponderHandlers | null) => void;
5
+ };
6
+ export declare const ReactNativeGrabOverlay: ({ ownerId, onPanHandlersChange, }: ReactNativeGrabOverlayProps) => import("react/jsx-runtime").JSX.Element | null;
2
7
  //# sourceMappingURL=grab-overlay.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"grab-overlay.d.ts","sourceRoot":"","sources":["../../../src/react-native/grab-overlay.tsx"],"names":[],"mappings":"AAmDA,eAAO,MAAM,sBAAsB,+CA2YlC,CAAC"}
1
+ {"version":3,"file":"grab-overlay.d.ts","sourceRoot":"","sources":["../../../src/react-native/grab-overlay.tsx"],"names":[],"mappings":"AACA,OAAO,EAOL,KAAK,wBAAwB,EAC9B,MAAM,cAAc,CAAC;AAiCtB,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,wBAAwB,GAAG,IAAI,KAAK,IAAI,CAAC;CAC9E,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,mCAGpC,2BAA2B,mDA6W7B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const ReactNativeGrabRootControls: () => import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=grab-root-controls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grab-root-controls.d.ts","sourceRoot":"","sources":["../../../src/react-native/grab-root-controls.tsx"],"names":[],"mappings":"AAkBA,eAAO,MAAM,2BAA2B,+CAyFvC,CAAC"}
@@ -1 +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,4CAoB1F,CAAC"}
1
+ {"version":3,"file":"grab-root.d.ts","sourceRoot":"","sources":["../../../src/react-native/grab-root.tsx"],"names":[],"mappings":"AACA,OAAO,EAAQ,SAAS,EAAiC,MAAM,cAAc,CAAC;AAS9E,MAAM,MAAM,wBAAwB,GAAG,SAAS,CAAC;AAEjD,eAAO,MAAM,mBAAmB,GAAI,+BAA+B,wBAAwB,4CAgC1F,CAAC"}
@@ -1,4 +1,6 @@
1
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;
2
+ export type ReactNativeGrabScreenProps = ViewProps & {
3
+ id?: string;
4
+ };
5
+ export declare const ReactNativeGrabScreen: ({ children, style, id, ...props }: ReactNativeGrabScreenProps) => import("react/jsx-runtime").JSX.Element;
4
6
  //# sourceMappingURL=grab-screen.d.ts.map
@@ -1 +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;AAMpD,MAAM,MAAM,0BAA0B,GAAG,SAAS,CAAC;AAEnD,eAAO,MAAM,qBAAqB,GAAI,+BAInC,0BAA0B,4CAkB5B,CAAC"}
1
+ {"version":3,"file":"grab-screen.d.ts","sourceRoot":"","sources":["../../../src/react-native/grab-screen.tsx"],"names":[],"mappings":"AACA,OAAO,EAAuC,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAanF,MAAM,MAAM,0BAA0B,GAAG,SAAS,GAAG;IACnD,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,mCAKnC,0BAA0B,4CAyC5B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react-native/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,KAAK,EACV,mCAAmC,EAEpC,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC5D,YAAY,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAChE,YAAY,EACV,mCAAmC,EACnC,2BAA2B,GAC5B,MAAM,gBAAgB,CAAC;AAKxB,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAE/D,CAAC;AAEhB,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,aAAa,CAAC,0BAA0B,CAEnE,CAAC;AAEhB,eAAO,MAAM,8BAA8B,EAAE,KAAK,CAAC,aAAa,CAAC,mCAAmC,CAClB,CAAC;AAEnF,eAAO,MAAM,cAAc,EAAE,MAAM,IAE3B,CAAC;AAET,eAAO,MAAM,cAAc,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,KAAK,IAAI,KAAK,IAEzD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react-native/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,gBAAgB,CAAC;AAG1E,YAAY,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC5D,YAAY,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAChE,YAAY,EACV,mCAAmC,EACnC,2BAA2B,GAC5B,MAAM,gBAAgB,CAAC;AAKxB,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAE/D,CAAC;AAEhB,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,aAAa,CAAC,0BAA0B,CAEnE,CAAC;AAEhB,eAAO,MAAM,8BAA8B,EAAE,KAAK,CAAC,aAAa,CAAC,mCAAmC,CAClB,CAAC;AAEnF,eAAO,MAAM,cAAc,EAAE,MAAM,IAE3B,CAAC;AAET,eAAO,MAAM,cAAc,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,KAAK,IAAI,KAAK,IAEzD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-grab",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "description": "Touch-to-grab context for React Native agents.",
5
5
  "keywords": [
6
6
  "devtools",