react-native-layout-dnd 0.1.0-alpha.0
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/LICENSE +20 -0
- package/README.md +262 -0
- package/lib/module/adapters/coordinates.js +135 -0
- package/lib/module/adapters/coordinates.js.map +1 -0
- package/lib/module/adapters/scroll.js +81 -0
- package/lib/module/adapters/scroll.js.map +1 -0
- package/lib/module/adapters/virtualizedList.js +69 -0
- package/lib/module/adapters/virtualizedList.js.map +1 -0
- package/lib/module/components/DndProvider.js +1144 -0
- package/lib/module/components/DndProvider.js.map +1 -0
- package/lib/module/components/DragHandle.js +65 -0
- package/lib/module/components/DragHandle.js.map +1 -0
- package/lib/module/components/GridController.js +151 -0
- package/lib/module/components/GridController.js.map +1 -0
- package/lib/module/components/GridDragHandle.js +15 -0
- package/lib/module/components/GridDragHandle.js.map +1 -0
- package/lib/module/components/GridZoneView.js +59 -0
- package/lib/module/components/GridZoneView.js.map +1 -0
- package/lib/module/components/SortableGrid.js +305 -0
- package/lib/module/components/SortableGrid.js.map +1 -0
- package/lib/module/components/SortableList.js +714 -0
- package/lib/module/components/SortableList.js.map +1 -0
- package/lib/module/components/dndTypes.js +4 -0
- package/lib/module/components/dndTypes.js.map +1 -0
- package/lib/module/components/gridTypes.js +4 -0
- package/lib/module/components/gridTypes.js.map +1 -0
- package/lib/module/components/handleViewProps.js +13 -0
- package/lib/module/components/handleViewProps.js.map +1 -0
- package/lib/module/contracts.js +4 -0
- package/lib/module/contracts.js.map +1 -0
- package/lib/module/controller/approval.js +98 -0
- package/lib/module/controller/approval.js.map +1 -0
- package/lib/module/controller/coordinatorBase.js +93 -0
- package/lib/module/controller/coordinatorBase.js.map +1 -0
- package/lib/module/controller/dndSession.js +621 -0
- package/lib/module/controller/dndSession.js.map +1 -0
- package/lib/module/controller/dndState.js +103 -0
- package/lib/module/controller/dndState.js.map +1 -0
- package/lib/module/controller/gridAdapter.js +191 -0
- package/lib/module/controller/gridAdapter.js.map +1 -0
- package/lib/module/controller/gridState.js +101 -0
- package/lib/module/controller/gridState.js.map +1 -0
- package/lib/module/controller/locations.js +48 -0
- package/lib/module/controller/locations.js.map +1 -0
- package/lib/module/controller/previewPath.js +73 -0
- package/lib/module/controller/previewPath.js.map +1 -0
- package/lib/module/controller/sessionCore.js +222 -0
- package/lib/module/controller/sessionCore.js.map +1 -0
- package/lib/module/controller/useDndState.js +9 -0
- package/lib/module/controller/useDndState.js.map +1 -0
- package/lib/module/controller/useGridState.js +9 -0
- package/lib/module/controller/useGridState.js.map +1 -0
- package/lib/module/controller/useStoreState.js +15 -0
- package/lib/module/controller/useStoreState.js.map +1 -0
- package/lib/module/defaults.js +7 -0
- package/lib/module/defaults.js.map +1 -0
- package/lib/module/diagnostics.js +16 -0
- package/lib/module/diagnostics.js.map +1 -0
- package/lib/module/engine/gridPlacements.js +54 -0
- package/lib/module/engine/gridPlacements.js.map +1 -0
- package/lib/module/engine/index.js +19 -0
- package/lib/module/engine/index.js.map +1 -0
- package/lib/module/engine/layout.js +36 -0
- package/lib/module/engine/layout.js.map +1 -0
- package/lib/module/engine/layoutMove.js +326 -0
- package/lib/module/engine/layoutMove.js.map +1 -0
- package/lib/module/engine/layoutState.js +344 -0
- package/lib/module/engine/layoutState.js.map +1 -0
- package/lib/module/engine/list.js +172 -0
- package/lib/module/engine/list.js.map +1 -0
- package/lib/module/engine/listIndex.js +125 -0
- package/lib/module/engine/listIndex.js.map +1 -0
- package/lib/module/engine/move.js +216 -0
- package/lib/module/engine/move.js.map +1 -0
- package/lib/module/engine/movementPolicy.js +77 -0
- package/lib/module/engine/movementPolicy.js.map +1 -0
- package/lib/module/engine/orderedTarget.js +71 -0
- package/lib/module/engine/orderedTarget.js.map +1 -0
- package/lib/module/engine/pack.js +30 -0
- package/lib/module/engine/pack.js.map +1 -0
- package/lib/module/engine/rectangles.js +12 -0
- package/lib/module/engine/rectangles.js.map +1 -0
- package/lib/module/engine/sameLayout.js +29 -0
- package/lib/module/engine/sameLayout.js.map +1 -0
- package/lib/module/engine/search.js +159 -0
- package/lib/module/engine/search.js.map +1 -0
- package/lib/module/engine/spatial.js +27 -0
- package/lib/module/engine/spatial.js.map +1 -0
- package/lib/module/engine/spatialAppRotation.js +39 -0
- package/lib/module/engine/spatialAppRotation.js.map +1 -0
- package/lib/module/engine/spatialExchange.js +164 -0
- package/lib/module/engine/spatialExchange.js.map +1 -0
- package/lib/module/engine/spatialInsertion.js +135 -0
- package/lib/module/engine/spatialInsertion.js.map +1 -0
- package/lib/module/engine/spatialPolicy.js +41 -0
- package/lib/module/engine/spatialPolicy.js.map +1 -0
- package/lib/module/engine/spatialRotation.js +48 -0
- package/lib/module/engine/spatialRotation.js.map +1 -0
- package/lib/module/engine/validation.js +205 -0
- package/lib/module/engine/validation.js.map +1 -0
- package/lib/module/gesture/DndGestureGroup.js +268 -0
- package/lib/module/gesture/DndGestureGroup.js.map +1 -0
- package/lib/module/gesture/DndGestureHost.js +32 -0
- package/lib/module/gesture/DndGestureHost.js.map +1 -0
- package/lib/module/gesture/gestureConfig.js +81 -0
- package/lib/module/gesture/gestureConfig.js.map +1 -0
- package/lib/module/gesture/gestureGrouping.js +122 -0
- package/lib/module/gesture/gestureGrouping.js.map +1 -0
- package/lib/module/gesture/gestureHost.js +106 -0
- package/lib/module/gesture/gestureHost.js.map +1 -0
- package/lib/module/index.js +23 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/pointer/dndTarget.js +101 -0
- package/lib/module/pointer/dndTarget.js.map +1 -0
- package/lib/module/pointer/geometry.js +363 -0
- package/lib/module/pointer/geometry.js.map +1 -0
- package/lib/module/pointer/layoutTarget.js +307 -0
- package/lib/module/pointer/layoutTarget.js.map +1 -0
- package/lib/module/pointer/listCellMotion.js +99 -0
- package/lib/module/pointer/listCellMotion.js.map +1 -0
- package/lib/module/pointer/listTarget.js +42 -0
- package/lib/module/pointer/listTarget.js.map +1 -0
- package/lib/module/pointer/motion.js +37 -0
- package/lib/module/pointer/motion.js.map +1 -0
- package/lib/module/runtime/dndPresentation.js +81 -0
- package/lib/module/runtime/dndPresentation.js.map +1 -0
- package/lib/module/runtime/dndRenderStore.js +129 -0
- package/lib/module/runtime/dndRenderStore.js.map +1 -0
- package/lib/module/runtime/dndRuntime.js +135 -0
- package/lib/module/runtime/dndRuntime.js.map +1 -0
- package/lib/module/runtime/dndSettlement.js +77 -0
- package/lib/module/runtime/dndSettlement.js.map +1 -0
- package/lib/module/runtime/gridRuntime.js +37 -0
- package/lib/module/runtime/gridRuntime.js.map +1 -0
- package/lib/module/types.js +4 -0
- package/lib/module/types.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/adapters/coordinates.d.ts +9 -0
- package/lib/typescript/src/adapters/coordinates.d.ts.map +1 -0
- package/lib/typescript/src/adapters/scroll.d.ts +49 -0
- package/lib/typescript/src/adapters/scroll.d.ts.map +1 -0
- package/lib/typescript/src/adapters/virtualizedList.d.ts +22 -0
- package/lib/typescript/src/adapters/virtualizedList.d.ts.map +1 -0
- package/lib/typescript/src/components/DndProvider.d.ts +4 -0
- package/lib/typescript/src/components/DndProvider.d.ts.map +1 -0
- package/lib/typescript/src/components/DragHandle.d.ts +4 -0
- package/lib/typescript/src/components/DragHandle.d.ts.map +1 -0
- package/lib/typescript/src/components/GridController.d.ts +21 -0
- package/lib/typescript/src/components/GridController.d.ts.map +1 -0
- package/lib/typescript/src/components/GridDragHandle.d.ts +8 -0
- package/lib/typescript/src/components/GridDragHandle.d.ts.map +1 -0
- package/lib/typescript/src/components/GridZoneView.d.ts +8 -0
- package/lib/typescript/src/components/GridZoneView.d.ts.map +1 -0
- package/lib/typescript/src/components/SortableGrid.d.ts +4 -0
- package/lib/typescript/src/components/SortableGrid.d.ts.map +1 -0
- package/lib/typescript/src/components/SortableList.d.ts +4 -0
- package/lib/typescript/src/components/SortableList.d.ts.map +1 -0
- package/lib/typescript/src/components/dndTypes.d.ts +94 -0
- package/lib/typescript/src/components/dndTypes.d.ts.map +1 -0
- package/lib/typescript/src/components/gridTypes.d.ts +84 -0
- package/lib/typescript/src/components/gridTypes.d.ts.map +1 -0
- package/lib/typescript/src/components/handleViewProps.d.ts +6 -0
- package/lib/typescript/src/components/handleViewProps.d.ts.map +1 -0
- package/lib/typescript/src/contracts.d.ts +145 -0
- package/lib/typescript/src/contracts.d.ts.map +1 -0
- package/lib/typescript/src/controller/approval.d.ts +66 -0
- package/lib/typescript/src/controller/approval.d.ts.map +1 -0
- package/lib/typescript/src/controller/coordinatorBase.d.ts +37 -0
- package/lib/typescript/src/controller/coordinatorBase.d.ts.map +1 -0
- package/lib/typescript/src/controller/dndSession.d.ts +152 -0
- package/lib/typescript/src/controller/dndSession.d.ts.map +1 -0
- package/lib/typescript/src/controller/dndState.d.ts +27 -0
- package/lib/typescript/src/controller/dndState.d.ts.map +1 -0
- package/lib/typescript/src/controller/gridAdapter.d.ts +44 -0
- package/lib/typescript/src/controller/gridAdapter.d.ts.map +1 -0
- package/lib/typescript/src/controller/gridState.d.ts +18 -0
- package/lib/typescript/src/controller/gridState.d.ts.map +1 -0
- package/lib/typescript/src/controller/locations.d.ts +9 -0
- package/lib/typescript/src/controller/locations.d.ts.map +1 -0
- package/lib/typescript/src/controller/previewPath.d.ts +49 -0
- package/lib/typescript/src/controller/previewPath.d.ts.map +1 -0
- package/lib/typescript/src/controller/sessionCore.d.ts +106 -0
- package/lib/typescript/src/controller/sessionCore.d.ts.map +1 -0
- package/lib/typescript/src/controller/useDndState.d.ts +8 -0
- package/lib/typescript/src/controller/useDndState.d.ts.map +1 -0
- package/lib/typescript/src/controller/useGridState.d.ts +8 -0
- package/lib/typescript/src/controller/useGridState.d.ts.map +1 -0
- package/lib/typescript/src/controller/useStoreState.d.ts +16 -0
- package/lib/typescript/src/controller/useStoreState.d.ts.map +1 -0
- package/lib/typescript/src/defaults.d.ts +5 -0
- package/lib/typescript/src/defaults.d.ts.map +1 -0
- package/lib/typescript/src/diagnostics.d.ts +9 -0
- package/lib/typescript/src/diagnostics.d.ts.map +1 -0
- package/lib/typescript/src/engine/gridPlacements.d.ts +22 -0
- package/lib/typescript/src/engine/gridPlacements.d.ts.map +1 -0
- package/lib/typescript/src/engine/index.d.ts +28 -0
- package/lib/typescript/src/engine/index.d.ts.map +1 -0
- package/lib/typescript/src/engine/layout.d.ts +4 -0
- package/lib/typescript/src/engine/layout.d.ts.map +1 -0
- package/lib/typescript/src/engine/layoutMove.d.ts +46 -0
- package/lib/typescript/src/engine/layoutMove.d.ts.map +1 -0
- package/lib/typescript/src/engine/layoutState.d.ts +22 -0
- package/lib/typescript/src/engine/layoutState.d.ts.map +1 -0
- package/lib/typescript/src/engine/list.d.ts +68 -0
- package/lib/typescript/src/engine/list.d.ts.map +1 -0
- package/lib/typescript/src/engine/listIndex.d.ts +32 -0
- package/lib/typescript/src/engine/listIndex.d.ts.map +1 -0
- package/lib/typescript/src/engine/move.d.ts +10 -0
- package/lib/typescript/src/engine/move.d.ts.map +1 -0
- package/lib/typescript/src/engine/movementPolicy.d.ts +34 -0
- package/lib/typescript/src/engine/movementPolicy.d.ts.map +1 -0
- package/lib/typescript/src/engine/orderedTarget.d.ts +32 -0
- package/lib/typescript/src/engine/orderedTarget.d.ts.map +1 -0
- package/lib/typescript/src/engine/pack.d.ts +3 -0
- package/lib/typescript/src/engine/pack.d.ts.map +1 -0
- package/lib/typescript/src/engine/rectangles.d.ts +9 -0
- package/lib/typescript/src/engine/rectangles.d.ts.map +1 -0
- package/lib/typescript/src/engine/sameLayout.d.ts +4 -0
- package/lib/typescript/src/engine/sameLayout.d.ts.map +1 -0
- package/lib/typescript/src/engine/search.d.ts +28 -0
- package/lib/typescript/src/engine/search.d.ts.map +1 -0
- package/lib/typescript/src/engine/spatial.d.ts +16 -0
- package/lib/typescript/src/engine/spatial.d.ts.map +1 -0
- package/lib/typescript/src/engine/spatialAppRotation.d.ts +4 -0
- package/lib/typescript/src/engine/spatialAppRotation.d.ts.map +1 -0
- package/lib/typescript/src/engine/spatialExchange.d.ts +5 -0
- package/lib/typescript/src/engine/spatialExchange.d.ts.map +1 -0
- package/lib/typescript/src/engine/spatialInsertion.d.ts +5 -0
- package/lib/typescript/src/engine/spatialInsertion.d.ts.map +1 -0
- package/lib/typescript/src/engine/spatialPolicy.d.ts +9 -0
- package/lib/typescript/src/engine/spatialPolicy.d.ts.map +1 -0
- package/lib/typescript/src/engine/spatialRotation.d.ts +8 -0
- package/lib/typescript/src/engine/spatialRotation.d.ts.map +1 -0
- package/lib/typescript/src/engine/validation.d.ts +9 -0
- package/lib/typescript/src/engine/validation.d.ts.map +1 -0
- package/lib/typescript/src/gesture/DndGestureGroup.d.ts +33 -0
- package/lib/typescript/src/gesture/DndGestureGroup.d.ts.map +1 -0
- package/lib/typescript/src/gesture/DndGestureHost.d.ts +12 -0
- package/lib/typescript/src/gesture/DndGestureHost.d.ts.map +1 -0
- package/lib/typescript/src/gesture/gestureConfig.d.ts +15 -0
- package/lib/typescript/src/gesture/gestureConfig.d.ts.map +1 -0
- package/lib/typescript/src/gesture/gestureGrouping.d.ts +66 -0
- package/lib/typescript/src/gesture/gestureGrouping.d.ts.map +1 -0
- package/lib/typescript/src/gesture/gestureHost.d.ts +23 -0
- package/lib/typescript/src/gesture/gestureHost.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +38 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/pointer/dndTarget.d.ts +14 -0
- package/lib/typescript/src/pointer/dndTarget.d.ts.map +1 -0
- package/lib/typescript/src/pointer/geometry.d.ts +28 -0
- package/lib/typescript/src/pointer/geometry.d.ts.map +1 -0
- package/lib/typescript/src/pointer/layoutTarget.d.ts +43 -0
- package/lib/typescript/src/pointer/layoutTarget.d.ts.map +1 -0
- package/lib/typescript/src/pointer/listCellMotion.d.ts +43 -0
- package/lib/typescript/src/pointer/listCellMotion.d.ts.map +1 -0
- package/lib/typescript/src/pointer/listTarget.d.ts +7 -0
- package/lib/typescript/src/pointer/listTarget.d.ts.map +1 -0
- package/lib/typescript/src/pointer/motion.d.ts +20 -0
- package/lib/typescript/src/pointer/motion.d.ts.map +1 -0
- package/lib/typescript/src/runtime/dndPresentation.d.ts +37 -0
- package/lib/typescript/src/runtime/dndPresentation.d.ts.map +1 -0
- package/lib/typescript/src/runtime/dndRenderStore.d.ts +46 -0
- package/lib/typescript/src/runtime/dndRenderStore.d.ts.map +1 -0
- package/lib/typescript/src/runtime/dndRuntime.d.ts +138 -0
- package/lib/typescript/src/runtime/dndRuntime.d.ts.map +1 -0
- package/lib/typescript/src/runtime/dndSettlement.d.ts +18 -0
- package/lib/typescript/src/runtime/dndSettlement.d.ts.map +1 -0
- package/lib/typescript/src/runtime/gridRuntime.d.ts +54 -0
- package/lib/typescript/src/runtime/gridRuntime.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +180 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/package.json +136 -0
- package/src/adapters/coordinates.ts +181 -0
- package/src/adapters/scroll.ts +147 -0
- package/src/adapters/virtualizedList.ts +112 -0
- package/src/components/DndProvider.tsx +1836 -0
- package/src/components/DragHandle.tsx +89 -0
- package/src/components/GridController.tsx +213 -0
- package/src/components/GridDragHandle.tsx +11 -0
- package/src/components/GridZoneView.tsx +57 -0
- package/src/components/SortableGrid.tsx +449 -0
- package/src/components/SortableList.tsx +1028 -0
- package/src/components/dndTypes.ts +102 -0
- package/src/components/gridTypes.ts +90 -0
- package/src/components/handleViewProps.ts +35 -0
- package/src/contracts.ts +149 -0
- package/src/controller/approval.ts +179 -0
- package/src/controller/coordinatorBase.ts +118 -0
- package/src/controller/dndSession.ts +1058 -0
- package/src/controller/dndState.ts +198 -0
- package/src/controller/gridAdapter.ts +268 -0
- package/src/controller/gridState.ts +187 -0
- package/src/controller/locations.ts +67 -0
- package/src/controller/previewPath.ts +90 -0
- package/src/controller/sessionCore.ts +390 -0
- package/src/controller/useDndState.ts +26 -0
- package/src/controller/useGridState.ts +22 -0
- package/src/controller/useStoreState.ts +27 -0
- package/src/defaults.ts +4 -0
- package/src/diagnostics.ts +23 -0
- package/src/engine/gridPlacements.ts +85 -0
- package/src/engine/index.ts +99 -0
- package/src/engine/layout.ts +29 -0
- package/src/engine/layoutMove.ts +401 -0
- package/src/engine/layoutState.ts +490 -0
- package/src/engine/list.ts +307 -0
- package/src/engine/listIndex.ts +174 -0
- package/src/engine/move.ts +274 -0
- package/src/engine/movementPolicy.ts +151 -0
- package/src/engine/orderedTarget.ts +131 -0
- package/src/engine/pack.ts +24 -0
- package/src/engine/rectangles.ts +18 -0
- package/src/engine/sameLayout.ts +50 -0
- package/src/engine/search.ts +174 -0
- package/src/engine/spatial.ts +36 -0
- package/src/engine/spatialAppRotation.ts +53 -0
- package/src/engine/spatialExchange.ts +212 -0
- package/src/engine/spatialInsertion.ts +157 -0
- package/src/engine/spatialPolicy.ts +48 -0
- package/src/engine/spatialRotation.ts +56 -0
- package/src/engine/validation.ts +358 -0
- package/src/gesture/DndGestureGroup.tsx +357 -0
- package/src/gesture/DndGestureHost.tsx +50 -0
- package/src/gesture/gestureConfig.ts +123 -0
- package/src/gesture/gestureGrouping.ts +210 -0
- package/src/gesture/gestureHost.tsx +163 -0
- package/src/index.ts +162 -0
- package/src/pointer/dndTarget.ts +213 -0
- package/src/pointer/geometry.ts +584 -0
- package/src/pointer/layoutTarget.ts +515 -0
- package/src/pointer/listCellMotion.ts +174 -0
- package/src/pointer/listTarget.ts +56 -0
- package/src/pointer/motion.ts +66 -0
- package/src/runtime/dndPresentation.ts +113 -0
- package/src/runtime/dndRenderStore.ts +246 -0
- package/src/runtime/dndRuntime.ts +311 -0
- package/src/runtime/dndSettlement.ts +117 -0
- package/src/runtime/gridRuntime.ts +73 -0
- package/src/types.ts +189 -0
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useLayoutEffect, useMemo, useRef } from 'react';
|
|
4
|
+
import { GestureStateManager, usePanGesture } from 'react-native-gesture-handler';
|
|
5
|
+
import { useSharedValue } from 'react-native-reanimated';
|
|
6
|
+
import { scheduleOnRN } from 'react-native-worklets';
|
|
7
|
+
import { constrainDragPoint } from "../adapters/scroll.js";
|
|
8
|
+
import { EMPTY_DND_MOTION, measureDndRect, pointInRect, readListViewports } from "../runtime/dndRuntime.js";
|
|
9
|
+
import { createTargetChannel as createChannel } from "./gestureGrouping.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* UI-thread hit target of one registered handle. The host keeps the object
|
|
13
|
+
* identical while its registration is unchanged, so Worklets reuses the
|
|
14
|
+
* serialized copy when the group's target list is published again.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/** Delivers a group's hit targets without re-rendering the group. */
|
|
18
|
+
export function createTargetChannel(initial) {
|
|
19
|
+
return createChannel(initial);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* One native Pan serves every handle that shares a gesture relation signature.
|
|
23
|
+
* The recognizer belongs to the Provider, so a source cell can leave the
|
|
24
|
+
* virtualized window or remount without touching the active gesture; the hit
|
|
25
|
+
* target list only decides which handle an initial touch may activate.
|
|
26
|
+
*/
|
|
27
|
+
export function DndGestureGroup({
|
|
28
|
+
groupId,
|
|
29
|
+
relations,
|
|
30
|
+
channel,
|
|
31
|
+
runtime,
|
|
32
|
+
publish
|
|
33
|
+
}) {
|
|
34
|
+
const ownToken = useSharedValue(0);
|
|
35
|
+
const ownHandle = useSharedValue(-1);
|
|
36
|
+
const uiTargets = useSharedValue(channel.targets);
|
|
37
|
+
const publishedTargets = useRef(channel.targets);
|
|
38
|
+
useLayoutEffect(() => {
|
|
39
|
+
const sync = targets => {
|
|
40
|
+
if (publishedTargets.current === targets) return;
|
|
41
|
+
publishedTargets.current = targets;
|
|
42
|
+
uiTargets.set(targets);
|
|
43
|
+
};
|
|
44
|
+
sync(channel.targets);
|
|
45
|
+
return channel.subscribe(sync);
|
|
46
|
+
}, [channel, uiTargets]);
|
|
47
|
+
const {
|
|
48
|
+
motion,
|
|
49
|
+
token,
|
|
50
|
+
zones,
|
|
51
|
+
disabled: providerDisabled,
|
|
52
|
+
rootRef,
|
|
53
|
+
begin,
|
|
54
|
+
move,
|
|
55
|
+
release,
|
|
56
|
+
prepareRelease,
|
|
57
|
+
dragAxis,
|
|
58
|
+
revision,
|
|
59
|
+
activationDelayMs,
|
|
60
|
+
gestureConfigRevision,
|
|
61
|
+
frameDriven,
|
|
62
|
+
enabled
|
|
63
|
+
} = runtime;
|
|
64
|
+
const config = useMemo(() => {
|
|
65
|
+
const currentRevision = () => {
|
|
66
|
+
'worklet';
|
|
67
|
+
|
|
68
|
+
return typeof revision === 'number' ? revision : revision.get();
|
|
69
|
+
};
|
|
70
|
+
// Every provider-owned recognizer receives the initial root touch. Find the
|
|
71
|
+
// enabled handle under the pointer before measuring the root or any scroll
|
|
72
|
+
// viewport; a handle that does not contain the pointer costs one measure.
|
|
73
|
+
const hit = (x, y, committedRevision) => {
|
|
74
|
+
'worklet';
|
|
75
|
+
|
|
76
|
+
if (!Number.isFinite(x) || !Number.isFinite(y) || providerDisabled.get()) return null;
|
|
77
|
+
const pointer = {
|
|
78
|
+
x,
|
|
79
|
+
y
|
|
80
|
+
};
|
|
81
|
+
const list = uiTargets.get();
|
|
82
|
+
let target = null;
|
|
83
|
+
for (let index = 0; index < list.length; index++) {
|
|
84
|
+
const candidate = list[index];
|
|
85
|
+
if (candidate.disabled) continue;
|
|
86
|
+
const handle = measureDndRect(candidate.ref);
|
|
87
|
+
if (handle && pointInRect(pointer, handle)) {
|
|
88
|
+
target = candidate;
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (!target) return null;
|
|
93
|
+
const root = measureDndRect(rootRef);
|
|
94
|
+
if (!root || !pointInRect(pointer, root)) return null;
|
|
95
|
+
const sourceZoneId = target.zoneId;
|
|
96
|
+
const source = zones.get().find(zone => zone.zoneId === sourceZoneId);
|
|
97
|
+
if (!source || source.revision !== committedRevision || source.kind === 'list' && !Number.isFinite(source.offset.get())) return null;
|
|
98
|
+
const viewport = measureDndRect(source.ref);
|
|
99
|
+
return viewport && pointInRect(pointer, viewport) ? target : null;
|
|
100
|
+
};
|
|
101
|
+
const owned = current => {
|
|
102
|
+
'worklet';
|
|
103
|
+
|
|
104
|
+
return current.phase === 'dragging' && current.token === ownToken.get() && current.handleId === ownHandle.get();
|
|
105
|
+
};
|
|
106
|
+
const cancelOwned = () => {
|
|
107
|
+
'worklet';
|
|
108
|
+
|
|
109
|
+
const current = motion.get();
|
|
110
|
+
if (!owned(current)) return;
|
|
111
|
+
const next = {
|
|
112
|
+
...current,
|
|
113
|
+
phase: 'released',
|
|
114
|
+
seq: current.seq + 1
|
|
115
|
+
};
|
|
116
|
+
motion.set(next);
|
|
117
|
+
scheduleOnRN(release, next, true);
|
|
118
|
+
};
|
|
119
|
+
return {
|
|
120
|
+
block: relations?.block,
|
|
121
|
+
requireToFail: relations?.requireToFail,
|
|
122
|
+
simultaneousWith: relations?.simultaneousWith,
|
|
123
|
+
enabled,
|
|
124
|
+
maxPointers: 1,
|
|
125
|
+
activateAfterLongPress: activationDelayMs,
|
|
126
|
+
cancelsTouchesInView: true,
|
|
127
|
+
onBegin: () => {
|
|
128
|
+
'worklet';
|
|
129
|
+
|
|
130
|
+
ownToken.set(0);
|
|
131
|
+
ownHandle.set(-1);
|
|
132
|
+
},
|
|
133
|
+
onTouchesDown: event => {
|
|
134
|
+
'worklet';
|
|
135
|
+
|
|
136
|
+
if (event.numberOfTouches > 1) {
|
|
137
|
+
cancelOwned();
|
|
138
|
+
GestureStateManager.fail(event.handlerTag);
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
const touch = event.changedTouches[0];
|
|
142
|
+
// Root-attached recognizers must restrict activation to a visible handle.
|
|
143
|
+
if (!touch || !hit(touch.absoluteX, touch.absoluteY, currentRevision()) || motion.get().phase !== 'idle') {
|
|
144
|
+
GestureStateManager.fail(event.handlerTag);
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
onActivate: event => {
|
|
148
|
+
'worklet';
|
|
149
|
+
|
|
150
|
+
// Read committed state at activation without rebuilding the native
|
|
151
|
+
// handler when another drop advances the layout revision.
|
|
152
|
+
const committedRevision = currentRevision();
|
|
153
|
+
const target = motion.get().phase === 'idle' ? hit(event.absoluteX, event.absoluteY, committedRevision) : null;
|
|
154
|
+
if (!target) {
|
|
155
|
+
GestureStateManager.fail(event.handlerTag);
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const source = measureDndRect(target.sourceRef);
|
|
159
|
+
const root = measureDndRect(rootRef);
|
|
160
|
+
if (!source || !root) {
|
|
161
|
+
GestureStateManager.fail(event.handlerTag);
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
const nextToken = token.get() + 1;
|
|
165
|
+
token.set(nextToken);
|
|
166
|
+
ownToken.set(nextToken);
|
|
167
|
+
ownHandle.set(target.id);
|
|
168
|
+
const pointer = {
|
|
169
|
+
x: event.absoluteX,
|
|
170
|
+
y: event.absoluteY
|
|
171
|
+
};
|
|
172
|
+
const next = {
|
|
173
|
+
...EMPTY_DND_MOTION,
|
|
174
|
+
token: nextToken,
|
|
175
|
+
handleId: target.id,
|
|
176
|
+
seq: 1,
|
|
177
|
+
phase: 'dragging',
|
|
178
|
+
itemId: target.itemId,
|
|
179
|
+
sourceZoneId: target.zoneId,
|
|
180
|
+
revision: committedRevision,
|
|
181
|
+
pointer,
|
|
182
|
+
origin: pointer,
|
|
183
|
+
axis: dragAxis,
|
|
184
|
+
activationDelayMs,
|
|
185
|
+
configRevision: gestureConfigRevision,
|
|
186
|
+
grip: {
|
|
187
|
+
x: pointer.x - source.x,
|
|
188
|
+
y: pointer.y - source.y
|
|
189
|
+
},
|
|
190
|
+
width: source.width,
|
|
191
|
+
height: source.height,
|
|
192
|
+
root,
|
|
193
|
+
zones: readListViewports(zones.get())
|
|
194
|
+
};
|
|
195
|
+
motion.set(next);
|
|
196
|
+
scheduleOnRN(begin, next);
|
|
197
|
+
},
|
|
198
|
+
onUpdate: event => {
|
|
199
|
+
'worklet';
|
|
200
|
+
|
|
201
|
+
if (!Number.isFinite(event.absoluteX) || !Number.isFinite(event.absoluteY)) return;
|
|
202
|
+
const current = motion.get();
|
|
203
|
+
if (!owned(current)) return;
|
|
204
|
+
if (providerDisabled.get() || event.numberOfPointers > 1) {
|
|
205
|
+
cancelOwned();
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
const root = frameDriven ? current.root : measureDndRect(rootRef);
|
|
209
|
+
const next = {
|
|
210
|
+
...current,
|
|
211
|
+
pointer: constrainDragPoint({
|
|
212
|
+
x: event.absoluteX,
|
|
213
|
+
y: event.absoluteY
|
|
214
|
+
}, current.origin, current.axis),
|
|
215
|
+
zones: frameDriven ? current.zones : root ? readListViewports(zones.get()) : [],
|
|
216
|
+
root: root ?? current.root,
|
|
217
|
+
seq: current.seq + 1
|
|
218
|
+
};
|
|
219
|
+
motion.set(next);
|
|
220
|
+
if (!frameDriven) scheduleOnRN(move, next);
|
|
221
|
+
},
|
|
222
|
+
onDeactivate: event => {
|
|
223
|
+
'worklet';
|
|
224
|
+
|
|
225
|
+
if (!Number.isFinite(event.absoluteX) || !Number.isFinite(event.absoluteY)) {
|
|
226
|
+
cancelOwned();
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
const current = motion.get();
|
|
230
|
+
if (!owned(current)) return;
|
|
231
|
+
if (event.canceled || providerDisabled.get()) {
|
|
232
|
+
cancelOwned();
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
const root = measureDndRect(rootRef);
|
|
236
|
+
const next = {
|
|
237
|
+
...current,
|
|
238
|
+
phase: 'released',
|
|
239
|
+
pointer: constrainDragPoint({
|
|
240
|
+
x: event.absoluteX,
|
|
241
|
+
y: event.absoluteY
|
|
242
|
+
}, current.origin, current.axis),
|
|
243
|
+
zones: root ? readListViewports(zones.get()) : [],
|
|
244
|
+
root: root ?? current.root,
|
|
245
|
+
seq: current.seq + 1
|
|
246
|
+
};
|
|
247
|
+
if (root) prepareRelease?.(next);
|
|
248
|
+
motion.set(next);
|
|
249
|
+
scheduleOnRN(release, next, root ? false : 'measure-failed');
|
|
250
|
+
},
|
|
251
|
+
onTouchesCancel: cancelOwned,
|
|
252
|
+
onFinalize: () => {
|
|
253
|
+
'worklet';
|
|
254
|
+
|
|
255
|
+
cancelOwned();
|
|
256
|
+
ownToken.set(0);
|
|
257
|
+
ownHandle.set(-1);
|
|
258
|
+
}
|
|
259
|
+
};
|
|
260
|
+
}, [relations, motion, token, zones, providerDisabled, rootRef, begin, move, release, prepareRelease, dragAxis, revision, activationDelayMs, gestureConfigRevision, frameDriven, enabled, ownToken, ownHandle, uiTargets]);
|
|
261
|
+
const pan = usePanGesture(config);
|
|
262
|
+
useLayoutEffect(() => {
|
|
263
|
+
publish(groupId, pan);
|
|
264
|
+
}, [groupId, pan, publish]);
|
|
265
|
+
useLayoutEffect(() => () => publish(groupId, null), [groupId, publish]);
|
|
266
|
+
return null;
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=DndGestureGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useLayoutEffect","useMemo","useRef","GestureStateManager","usePanGesture","useSharedValue","scheduleOnRN","constrainDragPoint","EMPTY_DND_MOTION","measureDndRect","pointInRect","readListViewports","createTargetChannel","createChannel","initial","DndGestureGroup","groupId","relations","channel","runtime","publish","ownToken","ownHandle","uiTargets","targets","publishedTargets","sync","current","set","subscribe","motion","token","zones","disabled","providerDisabled","rootRef","begin","move","release","prepareRelease","dragAxis","revision","activationDelayMs","gestureConfigRevision","frameDriven","enabled","config","currentRevision","get","hit","x","y","committedRevision","Number","isFinite","pointer","list","target","index","length","candidate","handle","ref","root","sourceZoneId","zoneId","source","find","zone","kind","offset","viewport","owned","phase","handleId","cancelOwned","next","seq","block","requireToFail","simultaneousWith","maxPointers","activateAfterLongPress","cancelsTouchesInView","onBegin","onTouchesDown","event","numberOfTouches","fail","handlerTag","touch","changedTouches","absoluteX","absoluteY","onActivate","sourceRef","nextToken","id","itemId","origin","axis","configRevision","grip","width","height","onUpdate","numberOfPointers","onDeactivate","canceled","onTouchesCancel","onFinalize","pan"],"sourceRoot":"../../../src","sources":["gesture/DndGestureGroup.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { DndGestureGroup } from "./DndGestureGroup.js";
|
|
4
|
+
import { createGestureRegistry, groupGestureOwners as groupOwners } from "./gestureGrouping.js";
|
|
5
|
+
import { createGestureHost } from "./gestureHost.js";
|
|
6
|
+
function toDndTarget({
|
|
7
|
+
id,
|
|
8
|
+
registration
|
|
9
|
+
}) {
|
|
10
|
+
return {
|
|
11
|
+
id,
|
|
12
|
+
itemId: registration.itemId,
|
|
13
|
+
zoneId: registration.zoneId,
|
|
14
|
+
ref: registration.ref,
|
|
15
|
+
sourceRef: registration.sourceRef,
|
|
16
|
+
disabled: registration.disabled
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** Handle mounts update their native owners without rendering the Provider. */
|
|
21
|
+
export function createDndGestureRegistry() {
|
|
22
|
+
return createGestureRegistry();
|
|
23
|
+
}
|
|
24
|
+
/** Groups the published owners by gesture relation signature; see `groupGestureOwners`. */
|
|
25
|
+
export function groupGestureOwners(owners, state) {
|
|
26
|
+
return groupOwners(owners, state, toDndTarget);
|
|
27
|
+
}
|
|
28
|
+
export const DndGestureHost = createGestureHost({
|
|
29
|
+
Group: DndGestureGroup,
|
|
30
|
+
toTarget: toDndTarget
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=DndGestureHost.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["DndGestureGroup","createGestureRegistry","groupGestureOwners","groupOwners","createGestureHost","toDndTarget","id","registration","itemId","zoneId","ref","sourceRef","disabled","createDndGestureRegistry","owners","state","DndGestureHost","Group","toTarget"],"sourceRoot":"../../../src","sources":["gesture/DndGestureHost.tsx"],"mappings":";;AAAA,SACEA,eAAe,QAGV,sBAAmB;AAE1B,SACEC,qBAAqB,EACrBC,kBAAkB,IAAIC,WAAW,QAK5B,sBAAmB;AAC1B,SAASC,iBAAiB,QAAQ,kBAAe;AAEjD,SAASC,WAAWA,CAAC;EACnBC,EAAE;EACFC;AACmC,CAAC,EAAmB;EACvD,OAAO;IACLD,EAAE;IACFE,MAAM,EAAED,YAAY,CAACC,MAAM;IAC3BC,MAAM,EAAEF,YAAY,CAACE,MAAM;IAC3BC,GAAG,EAAEH,YAAY,CAACG,GAAG;IACrBC,SAAS,EAAEJ,YAAY,CAACI,SAAS;IACjCC,QAAQ,EAAEL,YAAY,CAACK;EACzB,CAAC;AACH;;AAEA;AACA,OAAO,SAASC,wBAAwBA,CAAA,EAA2C;EACjF,OAAOZ,qBAAqB,CAAwB,CAAC;AACvD;AAIA;AACA,OAAO,SAASC,kBAAkBA,CAChCY,MAAsD,EACtDC,KAA4D,EACV;EAClD,OAAOZ,WAAW,CAACW,MAAM,EAAEC,KAAK,EAAEV,WAAW,CAAC;AAChD;AAEA,OAAO,MAAMW,cAAc,GAAGZ,iBAAiB,CAI7C;EAAEa,KAAK,EAAEjB,eAAe;EAAEkB,QAAQ,EAAEb;AAAY,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function record(value) {
|
|
4
|
+
return !!value && typeof value === 'object' && !Array.isArray(value);
|
|
5
|
+
}
|
|
6
|
+
function tags(value) {
|
|
7
|
+
return Array.isArray(value) && value.every(tag => Number.isSafeInteger(tag) && tag > 0);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/** Published RNGH v3 gesture surface, without probing detector internals. */
|
|
11
|
+
function gestureTags(gesture) {
|
|
12
|
+
if (!record(gesture) || typeof gesture.type !== 'string' || !gesture.type || !record(gesture.config) || !record(gesture.detectorCallbacks)) return null;
|
|
13
|
+
if ('handlerTags' in gesture) {
|
|
14
|
+
return tags(gesture.handlerTags) && tags(gesture.externalSimultaneousHandlers) && Array.isArray(gesture.gestures) ? gesture.handlerTags : null;
|
|
15
|
+
}
|
|
16
|
+
const relations = gesture.gestureRelations;
|
|
17
|
+
if (!Number.isSafeInteger(gesture.handlerTag) || gesture.handlerTag <= 0 || !record(relations) || !tags(relations.simultaneousHandlers) || !tags(relations.waitFor) || !tags(relations.blocksHandlers)) return null;
|
|
18
|
+
return [gesture.handlerTag];
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** Element-wise equality of the three relation lists; a single gesture equals a one-element list. */
|
|
22
|
+
export function sameGestureRelations(first, second) {
|
|
23
|
+
return ['block', 'requireToFail', 'simultaneousWith'].every(key => {
|
|
24
|
+
const a = first?.[key];
|
|
25
|
+
const b = second?.[key];
|
|
26
|
+
const aa = a === undefined ? [] : Array.isArray(a) ? a : [a];
|
|
27
|
+
const bb = b === undefined ? [] : Array.isArray(b) ? b : [b];
|
|
28
|
+
return aa.length === bb.length && aa.every((gesture, index) => gesture === bb[index]);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** Attachment to an actual detector still requires device validation by the caller. */
|
|
33
|
+
export function validateGestureRelations(value) {
|
|
34
|
+
if (value === undefined) return {
|
|
35
|
+
valid: true,
|
|
36
|
+
relations: undefined
|
|
37
|
+
};
|
|
38
|
+
const fail = message => ({
|
|
39
|
+
valid: false,
|
|
40
|
+
issues: [{
|
|
41
|
+
code: 'invalid-configuration',
|
|
42
|
+
message
|
|
43
|
+
}]
|
|
44
|
+
});
|
|
45
|
+
const keys = ['block', 'requireToFail', 'simultaneousWith'];
|
|
46
|
+
if (!record(value) || Object.keys(value).some(key => !keys.some(known => known === key))) {
|
|
47
|
+
return fail('gestureRelations must contain only block, requireToFail and simultaneousWith.');
|
|
48
|
+
}
|
|
49
|
+
const normalized = {};
|
|
50
|
+
const objectOwners = new Map();
|
|
51
|
+
const tagOwners = new Map();
|
|
52
|
+
for (const key of keys) {
|
|
53
|
+
const relation = value[key];
|
|
54
|
+
if (relation === undefined) continue;
|
|
55
|
+
const gestures = Array.isArray(relation) ? relation : [relation];
|
|
56
|
+
const unique = new Set();
|
|
57
|
+
for (const gesture of gestures) {
|
|
58
|
+
const handlerTags = gestureTags(gesture);
|
|
59
|
+
if (!handlerTags || !record(gesture)) {
|
|
60
|
+
return fail(`${key} requires v3 gesture objects, not refs or incomplete objects.`);
|
|
61
|
+
}
|
|
62
|
+
const prior = objectOwners.get(gesture);
|
|
63
|
+
if (prior && prior !== key) return fail(`The same gesture cannot be in both ${prior} and ${key}.`);
|
|
64
|
+
objectOwners.set(gesture, key);
|
|
65
|
+
for (const tag of handlerTags) {
|
|
66
|
+
const owner = tagOwners.get(tag);
|
|
67
|
+
if (owner && owner !== key) return fail(`The same native handler cannot be in both ${owner} and ${key}.`);
|
|
68
|
+
tagOwners.set(tag, key);
|
|
69
|
+
}
|
|
70
|
+
unique.add(gesture);
|
|
71
|
+
}
|
|
72
|
+
// Preserve actual gesture object identities; v3 connects relations through
|
|
73
|
+
// these objects and mutates their symmetric relation lists itself.
|
|
74
|
+
normalized[key] = [...unique];
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
valid: true,
|
|
78
|
+
relations: normalized
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=gestureConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["record","value","Array","isArray","tags","every","tag","Number","isSafeInteger","gestureTags","gesture","type","config","detectorCallbacks","handlerTags","externalSimultaneousHandlers","gestures","relations","gestureRelations","handlerTag","simultaneousHandlers","waitFor","blocksHandlers","sameGestureRelations","first","second","key","a","b","aa","undefined","bb","length","index","validateGestureRelations","valid","fail","message","issues","code","keys","Object","some","known","normalized","objectOwners","Map","tagOwners","relation","unique","Set","prior","get","set","owner","add"],"sourceRoot":"../../../src","sources":["gesture/gestureConfig.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { sameGestureRelations } from "./gestureConfig.js";
|
|
4
|
+
|
|
5
|
+
/** One registered handle as the gesture host sees it. */
|
|
6
|
+
|
|
7
|
+
/** Handle mounts update their native owners without rendering the controller. */
|
|
8
|
+
export function createGestureRegistry() {
|
|
9
|
+
let owners = [];
|
|
10
|
+
const listeners = new Set();
|
|
11
|
+
return {
|
|
12
|
+
getSnapshot: () => owners,
|
|
13
|
+
subscribe(listener) {
|
|
14
|
+
listeners.add(listener);
|
|
15
|
+
return () => {
|
|
16
|
+
listeners.delete(listener);
|
|
17
|
+
};
|
|
18
|
+
},
|
|
19
|
+
setOwners(next) {
|
|
20
|
+
if (next.length === owners.length && next.every((owner, index) => owner.id === owners[index].id && owner.registration === owners[index].registration)) return;
|
|
21
|
+
owners = next.map(({
|
|
22
|
+
id,
|
|
23
|
+
registration
|
|
24
|
+
}) => ({
|
|
25
|
+
id,
|
|
26
|
+
registration
|
|
27
|
+
}));
|
|
28
|
+
for (const listener of Array.from(listeners)) listener();
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Delivers a group's hit targets without re-rendering the group. A re-render
|
|
35
|
+
* would make Reanimated and Gesture Handler rebuild and re-register the native
|
|
36
|
+
* event handler, which costs a serialization of every callback closure.
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
export function createTargetChannel(initial) {
|
|
40
|
+
let targets = initial;
|
|
41
|
+
const listeners = new Set();
|
|
42
|
+
return {
|
|
43
|
+
get targets() {
|
|
44
|
+
return targets;
|
|
45
|
+
},
|
|
46
|
+
set(next) {
|
|
47
|
+
if (next === targets) return;
|
|
48
|
+
targets = next;
|
|
49
|
+
for (const listener of Array.from(listeners)) listener(next);
|
|
50
|
+
},
|
|
51
|
+
subscribe(listener) {
|
|
52
|
+
listeners.add(listener);
|
|
53
|
+
return () => {
|
|
54
|
+
listeners.delete(listener);
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** Props of one shared-recognizer component rendered by a gesture host. */
|
|
61
|
+
|
|
62
|
+
/** Handles sharing one relation signature share one native recognizer. */
|
|
63
|
+
|
|
64
|
+
export function createGroupingState() {
|
|
65
|
+
return {
|
|
66
|
+
targets: new Map(),
|
|
67
|
+
signatures: [],
|
|
68
|
+
nextGroupId: 0,
|
|
69
|
+
groups: []
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function sameTargets(previous, next) {
|
|
73
|
+
return previous.length === next.length && previous.every((target, index) => target === next[index]);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Groups the published owners by gesture relation signature. Target objects
|
|
78
|
+
* stay identical while their registration is unchanged and a group's target
|
|
79
|
+
* array stays identical while its content is unchanged, so an unchanged group
|
|
80
|
+
* publishes nothing to the UI runtime.
|
|
81
|
+
*/
|
|
82
|
+
export function groupGestureOwners(owners, state, toTarget) {
|
|
83
|
+
const targets = new Map();
|
|
84
|
+
const collected = new Map();
|
|
85
|
+
for (const owner of owners) {
|
|
86
|
+
const cached = state.targets.get(owner.id);
|
|
87
|
+
const target = cached?.registration === owner.registration ? cached.target : toTarget(owner);
|
|
88
|
+
targets.set(owner.id, {
|
|
89
|
+
registration: owner.registration,
|
|
90
|
+
target
|
|
91
|
+
});
|
|
92
|
+
let signature = state.signatures.find(entry => sameGestureRelations(entry.relations, owner.registration.gestureRelations));
|
|
93
|
+
if (!signature) {
|
|
94
|
+
signature = {
|
|
95
|
+
relations: owner.registration.gestureRelations,
|
|
96
|
+
groupId: ++state.nextGroupId
|
|
97
|
+
};
|
|
98
|
+
state.signatures.push(signature);
|
|
99
|
+
}
|
|
100
|
+
const group = collected.get(signature.groupId);
|
|
101
|
+
if (group) group.targets.push(target);else collected.set(signature.groupId, {
|
|
102
|
+
relations: signature.relations,
|
|
103
|
+
targets: [target]
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
state.targets = targets;
|
|
107
|
+
// A signature without handles releases its native recognizer.
|
|
108
|
+
state.signatures = state.signatures.filter(entry => collected.has(entry.groupId));
|
|
109
|
+
const groups = Array.from(collected, ([groupId, group]) => {
|
|
110
|
+
const previous = state.groups.find(entry => entry.groupId === groupId);
|
|
111
|
+
const hitTargets = previous && sameTargets(previous.targets, group.targets) ? previous.targets : group.targets;
|
|
112
|
+
return {
|
|
113
|
+
groupId,
|
|
114
|
+
relations: previous?.relations ?? group.relations,
|
|
115
|
+
targets: hitTargets,
|
|
116
|
+
channel: previous?.channel ?? createTargetChannel(hitTargets)
|
|
117
|
+
};
|
|
118
|
+
});
|
|
119
|
+
state.groups = groups.length === state.groups.length && groups.every((group, index) => group.groupId === state.groups[index].groupId && group.targets === state.groups[index].targets && group.relations === state.groups[index].relations) ? state.groups : groups;
|
|
120
|
+
return state.groups;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=gestureGrouping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["sameGestureRelations","createGestureRegistry","owners","listeners","Set","getSnapshot","subscribe","listener","add","delete","setOwners","next","length","every","owner","index","id","registration","map","Array","from","createTargetChannel","initial","targets","set","createGroupingState","Map","signatures","nextGroupId","groups","sameTargets","previous","target","groupGestureOwners","state","toTarget","collected","cached","get","signature","find","entry","relations","gestureRelations","groupId","push","group","filter","has","hitTargets","channel"],"sourceRoot":"../../../src","sources":["gesture/gestureGrouping.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { createContext, memo, useCallback, useContext, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';
|
|
4
|
+
import { GestureDetector, useCompetingGestures, useManualGesture } from 'react-native-gesture-handler';
|
|
5
|
+
import { createGroupingState, groupGestureOwners } from "./gestureGrouping.js";
|
|
6
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
7
|
+
const SENTINEL_CONFIG = {
|
|
8
|
+
enabled: false,
|
|
9
|
+
onTouchesDown: () => {
|
|
10
|
+
'worklet';
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Builds a host that owns one native recognizer per gesture relation
|
|
16
|
+
* signature. Handle mounts publish through the registry; the host groups them,
|
|
17
|
+
* renders one `Group` per signature and composes their recognizers on a single
|
|
18
|
+
* detector around the root content. Root content updates never render the
|
|
19
|
+
* detector or the groups.
|
|
20
|
+
*/
|
|
21
|
+
export function createGestureHost({
|
|
22
|
+
Group,
|
|
23
|
+
toTarget
|
|
24
|
+
}) {
|
|
25
|
+
const RootContentContext = /*#__PURE__*/createContext(null);
|
|
26
|
+
|
|
27
|
+
// Only this descendant consumes changing root content. Its context update does
|
|
28
|
+
// not render the detector or re-run the gesture composition hooks above it.
|
|
29
|
+
function NativeRoot() {
|
|
30
|
+
return useContext(RootContentContext);
|
|
31
|
+
}
|
|
32
|
+
const GestureGroup = /*#__PURE__*/memo(Group);
|
|
33
|
+
const NativeGestureDetector = /*#__PURE__*/memo(function NativeGestureDetectorImpl({
|
|
34
|
+
nativeGestures
|
|
35
|
+
}) {
|
|
36
|
+
// Keep the native component type stable while no handle is registered.
|
|
37
|
+
const sentinel = useManualGesture(SENTINEL_CONFIG);
|
|
38
|
+
const gesture = useCompetingGestures(sentinel, ...nativeGestures.values());
|
|
39
|
+
return /*#__PURE__*/_jsx(GestureDetector, {
|
|
40
|
+
gesture: gesture,
|
|
41
|
+
children: /*#__PURE__*/_jsx(NativeRoot, {})
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
const GestureHost = /*#__PURE__*/memo(function GestureHostImpl({
|
|
45
|
+
registry,
|
|
46
|
+
runtime
|
|
47
|
+
}) {
|
|
48
|
+
const owners = useSyncExternalStore(registry.subscribe, registry.getSnapshot, registry.getSnapshot);
|
|
49
|
+
const mounted = useRef(true);
|
|
50
|
+
const gestureValues = useRef(new Map());
|
|
51
|
+
const [gestureVersion, setGestureVersion] = useState(0);
|
|
52
|
+
// Group layout effects can publish several changes in one commit. Update
|
|
53
|
+
// their private map in O(1), then copy once when React renders the combined
|
|
54
|
+
// update. Never mutate the snapshot passed to the memoized detector.
|
|
55
|
+
const nativeGestures = useMemo(() => new Map(gestureValues.current),
|
|
56
|
+
// The version explicitly invalidates this snapshot of the mutable registry.
|
|
57
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
58
|
+
[gestureVersion]);
|
|
59
|
+
useLayoutEffect(() => {
|
|
60
|
+
mounted.current = true;
|
|
61
|
+
return () => {
|
|
62
|
+
mounted.current = false;
|
|
63
|
+
};
|
|
64
|
+
}, []);
|
|
65
|
+
const publish = useCallback((id, gesture) => {
|
|
66
|
+
if (!mounted.current) return;
|
|
67
|
+
const current = gestureValues.current;
|
|
68
|
+
if (gesture ? current.get(id) === gesture : !current.has(id)) return;
|
|
69
|
+
if (gesture) current.set(id, gesture);else current.delete(id);
|
|
70
|
+
setGestureVersion(version => version + 1);
|
|
71
|
+
}, []);
|
|
72
|
+
const grouping = useRef(createGroupingState()).current;
|
|
73
|
+
// Re-running this for the same owners is idempotent, which keeps StrictMode
|
|
74
|
+
// and discarded renders from producing different group identities.
|
|
75
|
+
const groups = useMemo(() => groupGestureOwners(owners, grouping, toTarget), [owners, grouping]);
|
|
76
|
+
// Publish after commit: the group's subscription effect is registered first.
|
|
77
|
+
useLayoutEffect(() => {
|
|
78
|
+
for (const group of groups) group.channel.set(group.targets);
|
|
79
|
+
}, [groups]);
|
|
80
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
81
|
+
children: [/*#__PURE__*/_jsx(NativeGestureDetector, {
|
|
82
|
+
nativeGestures: nativeGestures
|
|
83
|
+
}), groups.map(group => /*#__PURE__*/_jsx(GestureGroup, {
|
|
84
|
+
groupId: group.groupId,
|
|
85
|
+
relations: group.relations,
|
|
86
|
+
channel: group.channel,
|
|
87
|
+
runtime: runtime,
|
|
88
|
+
publish: publish
|
|
89
|
+
}, group.groupId))]
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
return function Host({
|
|
93
|
+
children,
|
|
94
|
+
registry,
|
|
95
|
+
runtime
|
|
96
|
+
}) {
|
|
97
|
+
return /*#__PURE__*/_jsx(RootContentContext, {
|
|
98
|
+
value: children,
|
|
99
|
+
children: /*#__PURE__*/_jsx(GestureHost, {
|
|
100
|
+
registry: registry,
|
|
101
|
+
runtime: runtime
|
|
102
|
+
})
|
|
103
|
+
});
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=gestureHost.js.map
|