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 @@
|
|
|
1
|
+
{"version":3,"names":["createContext","memo","useCallback","useContext","useLayoutEffect","useMemo","useRef","useState","useSyncExternalStore","GestureDetector","useCompetingGestures","useManualGesture","createGroupingState","groupGestureOwners","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","SENTINEL_CONFIG","enabled","onTouchesDown","createGestureHost","Group","toTarget","RootContentContext","NativeRoot","GestureGroup","NativeGestureDetector","NativeGestureDetectorImpl","nativeGestures","sentinel","gesture","values","children","GestureHost","GestureHostImpl","registry","runtime","owners","subscribe","getSnapshot","mounted","gestureValues","Map","gestureVersion","setGestureVersion","current","publish","id","get","has","set","delete","version","grouping","groups","group","channel","targets","map","groupId","relations","Host","value"],"sourceRoot":"../../../src","sources":["gesture/gestureHost.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
export { GridController } from "./components/GridController.js";
|
|
4
|
+
export { DndProvider } from "./components/DndProvider.js";
|
|
5
|
+
export { SortableList } from "./components/SortableList.js";
|
|
6
|
+
export { SortableGrid } from "./components/SortableGrid.js";
|
|
7
|
+
export { resolveListVirtualization } from "./adapters/virtualizedList.js";
|
|
8
|
+
export { DragHandle } from "./components/DragHandle.js";
|
|
9
|
+
export { useDndState } from "./controller/useDndState.js";
|
|
10
|
+
export { createDndStateStore, respondToDndProposal } from "./controller/dndState.js";
|
|
11
|
+
export { computeListLayout, computeListIndex, ListSizeCache } from "./engine/list.js";
|
|
12
|
+
export { computeLayoutMove } from "./engine/layoutMove.js";
|
|
13
|
+
export { computeAutoScroll, constrainDragPoint, validateAutoScrollOptions } from "./adapters/scroll.js";
|
|
14
|
+
export { GridDragHandle } from "./components/GridDragHandle.js";
|
|
15
|
+
export { GridZoneView } from "./components/GridZoneView.js";
|
|
16
|
+
export { useGridState } from "./controller/useGridState.js";
|
|
17
|
+
export { createGridStateStore, respondToGridProposal } from "./controller/gridState.js";
|
|
18
|
+
export { DEFAULT_ACTIVATION_DELAY_MS, DEFAULT_SEARCH_BUDGET } from "./defaults.js";
|
|
19
|
+
export { DEFAULT_GRID_MOVEMENT_POLICY, HOME_GRID_MOVEMENT_POLICY, resolveGridMovementPolicy, validateGridMovementPolicy } from "./engine/movementPolicy.js";
|
|
20
|
+
export { validateLayoutState, fromGridValue, toGridValue } from "./engine/layoutState.js";
|
|
21
|
+
export { screenToContent, contentToScreen, screenRectToContent, contentRectToScreen, validateRectMeasurement } from "./adapters/coordinates.js";
|
|
22
|
+
export { computeMove, computeOrderedIndex, computeZoneLayout, hasSameLayout, packItems, validateValue } from "./engine/index.js";
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["GridController","DndProvider","SortableList","SortableGrid","resolveListVirtualization","DragHandle","useDndState","createDndStateStore","respondToDndProposal","computeListLayout","computeListIndex","ListSizeCache","computeLayoutMove","computeAutoScroll","constrainDragPoint","validateAutoScrollOptions","GridDragHandle","GridZoneView","useGridState","createGridStateStore","respondToGridProposal","DEFAULT_ACTIVATION_DELAY_MS","DEFAULT_SEARCH_BUDGET","DEFAULT_GRID_MOVEMENT_POLICY","HOME_GRID_MOVEMENT_POLICY","resolveGridMovementPolicy","validateGridMovementPolicy","validateLayoutState","fromGridValue","toGridValue","screenToContent","contentToScreen","screenRectToContent","contentRectToScreen","validateRectMeasurement","computeMove","computeOrderedIndex","computeZoneLayout","hasSameLayout","packItems","validateValue"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SAASA,cAAc,QAAQ,gCAA6B;AAC5D,SAASC,WAAW,QAAQ,6BAA0B;AACtD,SAASC,YAAY,QAAQ,8BAA2B;AACxD,SAASC,YAAY,QAAQ,8BAA2B;AACxD,SAASC,yBAAyB,QAAQ,+BAA4B;AAKtE,SAASC,UAAU,QAAQ,4BAAyB;AAapD,SAASC,WAAW,QAAQ,6BAA0B;AAEtD,SACEC,mBAAmB,EACnBC,oBAAoB,QACf,0BAAuB;AAc9B,SACEC,iBAAiB,EACjBC,gBAAgB,EAChBC,aAAa,QACR,kBAAe;AAQtB,SAASC,iBAAiB,QAAQ,wBAAqB;AAMvD,SACEC,iBAAiB,EACjBC,kBAAkB,EAClBC,yBAAyB,QACpB,sBAAmB;AAQ1B,SAASC,cAAc,QAAQ,gCAA6B;AAC5D,SAASC,YAAY,QAAQ,8BAA2B;AACxD,SAASC,YAAY,QAAQ,8BAA2B;AAExD,SACEC,oBAAoB,EACpBC,qBAAqB,QAChB,2BAAwB;AAQ/B,SAASC,2BAA2B,EAAEC,qBAAqB,QAAQ,eAAY;AAC/E,SACEC,4BAA4B,EAC5BC,yBAAyB,EACzBC,yBAAyB,EACzBC,0BAA0B,QACrB,4BAAyB;AAOhC,SACEC,mBAAmB,EACnBC,aAAa,EACbC,WAAW,QACN,yBAAsB;AAC7B,SACEC,eAAe,EACfC,eAAe,EACfC,mBAAmB,EACnBC,mBAAmB,EACnBC,uBAAuB,QAClB,2BAAwB;AAa/B,SACEC,WAAW,EACXC,mBAAmB,EACnBC,iBAAiB,EACjBC,aAAa,EACbC,SAAS,EACTC,aAAa,QACR,mBAAU","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { findListTargetIndex } from "../engine/listIndex.js";
|
|
4
|
+
import { isUsableRect, itemRect, orderedSlotIndex, orderedSlotPosition, readPointerTarget, rectContains } from "./geometry.js";
|
|
5
|
+
import { measurePreparedGrid } from "./layoutTarget.js";
|
|
6
|
+
export function sameLayoutTarget(a, b) {
|
|
7
|
+
'worklet';
|
|
8
|
+
|
|
9
|
+
if (a === b) return true;
|
|
10
|
+
if (!a || !b || a.kind !== b.kind || a.zoneId !== b.zoneId) return false;
|
|
11
|
+
return a.kind === 'list' ? b.kind === 'list' && a.index === b.index : b.kind === 'grid' && a.position.row === b.position.row && a.position.col === b.position.col;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/** Prepared geometry only; policy permission and final validation stay on JS. */
|
|
15
|
+
export function uiLayoutTarget(state, registrations, session, previousTarget) {
|
|
16
|
+
'worklet';
|
|
17
|
+
|
|
18
|
+
if (state.itemId === null || !isUsableRect(state.root) || !Number.isSafeInteger(state.revision) || state.revision < 0 || !rectContains(state.root, state.pointer.x, state.pointer.y) || !Number.isFinite(state.width) || state.width <= 0 || !Number.isFinite(state.height) || state.height <= 0 || !Number.isFinite(state.grip.x) || !Number.isFinite(state.grip.y)) return null;
|
|
19
|
+
const previousIndex = state.zones.findIndex(zone => zone.zoneId === previousTarget?.zoneId);
|
|
20
|
+
for (let order = -1; order < state.zones.length; order++) {
|
|
21
|
+
const index = order === -1 ? previousIndex : order;
|
|
22
|
+
if (index < 0 || order >= 0 && index === previousIndex) continue;
|
|
23
|
+
const measured = state.zones[index];
|
|
24
|
+
const registration = registrations.find(zone => zone.zoneId === measured.zoneId);
|
|
25
|
+
if (!registration || registration.revision !== state.revision || registration.layoutVersion !== measured.layoutVersion || measured.viewport.revision !== state.revision || registration.kind === 'grid' && measured.offset !== 0 || measured.viewport.source !== 'measured' || measured.viewport.space !== 'screen' || !Number.isFinite(measured.viewport.timestampMs) || measured.viewport.timestampMs < 0 || !isUsableRect(measured.viewport.rect) || !rectContains(measured.viewport.rect, state.pointer.x, state.pointer.y)) continue;
|
|
26
|
+
if (registration.kind === 'list') {
|
|
27
|
+
if (!registration.targetIndex || registration.targetIndex.revision !== state.revision || !Number.isFinite(measured.offset)) continue;
|
|
28
|
+
const vertical = registration.orientation === 'vertical';
|
|
29
|
+
const center = vertical ? state.pointer.y - state.grip.y + state.height / 2 - measured.viewport.rect.y + measured.offset : state.pointer.x - state.grip.x + state.width / 2 - measured.viewport.rect.x + measured.offset;
|
|
30
|
+
const targetIndex = findListTargetIndex(registration.targetIndex, state.itemId, center);
|
|
31
|
+
return targetIndex === null ? null : {
|
|
32
|
+
kind: 'list',
|
|
33
|
+
zoneId: measured.zoneId,
|
|
34
|
+
index: targetIndex
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const recipe = session.gridItems[`#${measured.zoneId}`];
|
|
38
|
+
const grid = registration.targetGrid ? measurePreparedGrid(registration.targetGrid, measured) : null;
|
|
39
|
+
if (!recipe || !grid || !Number.isSafeInteger(recipe.span.rows) || recipe.span.rows <= 0 || !Number.isSafeInteger(recipe.span.cols) || recipe.span.cols <= 0) return null;
|
|
40
|
+
const content = itemRect({
|
|
41
|
+
row: 0,
|
|
42
|
+
col: 0
|
|
43
|
+
}, {
|
|
44
|
+
rows: grid.zone.rows,
|
|
45
|
+
cols: grid.zone.columns
|
|
46
|
+
}, grid.geometry, grid.cells);
|
|
47
|
+
if (!rectContains({
|
|
48
|
+
...content,
|
|
49
|
+
x: grid.rect.x + content.x,
|
|
50
|
+
y: grid.rect.y + content.y
|
|
51
|
+
}, state.pointer.x, state.pointer.y)) continue;
|
|
52
|
+
// An ordered zone reasons in slot indices; handing it a spatial position
|
|
53
|
+
// would silently disable its boundary hysteresis. `resolveLayoutTarget`
|
|
54
|
+
// converts the same way on JS.
|
|
55
|
+
const orderedPrevious = previousTarget?.kind === 'grid' && previousTarget.zoneId === grid.zone.id && grid.zone.strategy === 'ordered' ? orderedSlotIndex(previousTarget.position, grid.zone.itemSpan, grid.zone.columns) : null;
|
|
56
|
+
const result = readPointerTarget({
|
|
57
|
+
token: state.token,
|
|
58
|
+
phase: 'dragging',
|
|
59
|
+
itemId: state.itemId,
|
|
60
|
+
sourceZoneId: state.sourceZoneId,
|
|
61
|
+
seq: Math.max(0, state.seq - 1),
|
|
62
|
+
target: previousTarget?.kind !== 'grid' ? null : orderedPrevious === null ? {
|
|
63
|
+
zoneId: previousTarget.zoneId,
|
|
64
|
+
strategy: 'spatial',
|
|
65
|
+
position: previousTarget.position
|
|
66
|
+
} : {
|
|
67
|
+
zoneId: previousTarget.zoneId,
|
|
68
|
+
strategy: 'ordered',
|
|
69
|
+
index: orderedPrevious
|
|
70
|
+
},
|
|
71
|
+
span: recipe.span,
|
|
72
|
+
x: state.pointer.x - state.grip.x,
|
|
73
|
+
y: state.pointer.y - state.grip.y,
|
|
74
|
+
width: state.width,
|
|
75
|
+
height: state.height,
|
|
76
|
+
gripX: Math.max(0, Math.min(1, state.grip.x / state.width)),
|
|
77
|
+
gripY: Math.max(0, Math.min(1, state.grip.y / state.height)),
|
|
78
|
+
zones: [grid],
|
|
79
|
+
outlet: state.root,
|
|
80
|
+
validity: 'pending',
|
|
81
|
+
visible: state.visible,
|
|
82
|
+
destination: null,
|
|
83
|
+
movementPolicy: session.movementPolicy,
|
|
84
|
+
baseRevision: state.revision
|
|
85
|
+
}, state.pointer.x, state.pointer.y);
|
|
86
|
+
if (result.target?.strategy === 'spatial') return {
|
|
87
|
+
kind: 'grid',
|
|
88
|
+
zoneId: result.target.zoneId,
|
|
89
|
+
position: result.target.position
|
|
90
|
+
};
|
|
91
|
+
// Without this branch an ordered zone reports no target at all, so the
|
|
92
|
+
// frame gate sees no change and stops requesting candidates mid-drag.
|
|
93
|
+
if (result.target?.strategy === 'ordered' && grid.zone.strategy === 'ordered') return {
|
|
94
|
+
kind: 'grid',
|
|
95
|
+
zoneId: result.target.zoneId,
|
|
96
|
+
position: orderedSlotPosition(result.target.index, grid.zone.itemSpan, grid.zone.columns)
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=dndTarget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["findListTargetIndex","isUsableRect","itemRect","orderedSlotIndex","orderedSlotPosition","readPointerTarget","rectContains","measurePreparedGrid","sameLayoutTarget","a","b","kind","zoneId","index","position","row","col","uiLayoutTarget","state","registrations","session","previousTarget","itemId","root","Number","isSafeInteger","revision","pointer","x","y","isFinite","width","height","grip","previousIndex","zones","findIndex","zone","order","length","measured","registration","find","layoutVersion","viewport","offset","source","space","timestampMs","rect","targetIndex","vertical","orientation","center","recipe","gridItems","grid","targetGrid","span","rows","cols","content","columns","geometry","cells","orderedPrevious","id","strategy","itemSpan","result","token","phase","sourceZoneId","seq","Math","max","target","gripX","min","gripY","outlet","validity","visible","destination","movementPolicy","baseRevision"],"sourceRoot":"../../../src","sources":["pointer/dndTarget.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { DEFAULT_GRID_MOVEMENT_POLICY } from "../engine/movementPolicy.js";
|
|
4
|
+
import { selectSpatialMove } from "../engine/spatialPolicy.js";
|
|
5
|
+
function clamp(value, min, max) {
|
|
6
|
+
'worklet';
|
|
7
|
+
|
|
8
|
+
return Math.max(min, Math.min(max, value));
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* The cell an ordered slot starts at. The engine owns the same arithmetic in
|
|
13
|
+
* `slotPosition`; that module stays free of worklet directives, so the pointer
|
|
14
|
+
* keeps a worklet copy and `tests/pointer/orderedSlots.test.ts` pins them
|
|
15
|
+
* together.
|
|
16
|
+
*/
|
|
17
|
+
export function orderedSlotPosition(index, itemSpan, columns) {
|
|
18
|
+
'worklet';
|
|
19
|
+
|
|
20
|
+
const perRow = Math.floor(columns / itemSpan.cols);
|
|
21
|
+
return {
|
|
22
|
+
row: Math.floor(index / perRow) * itemSpan.rows,
|
|
23
|
+
col: index % perRow * itemSpan.cols
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** The ordered slot a cell starts, or null when it is not a slot origin. */
|
|
28
|
+
export function orderedSlotIndex(position, itemSpan, columns) {
|
|
29
|
+
'worklet';
|
|
30
|
+
|
|
31
|
+
const perRow = Math.floor(columns / itemSpan.cols);
|
|
32
|
+
if (perRow <= 0 || position.row < 0 || position.col < 0 || position.row % itemSpan.rows !== 0 || position.col % itemSpan.cols !== 0) return null;
|
|
33
|
+
const col = position.col / itemSpan.cols;
|
|
34
|
+
if (col >= perRow) return null;
|
|
35
|
+
return position.row / itemSpan.rows * perRow + col;
|
|
36
|
+
}
|
|
37
|
+
export function isUsableRect(rect) {
|
|
38
|
+
'worklet';
|
|
39
|
+
|
|
40
|
+
return !!rect && Number.isFinite(rect.x) && Number.isFinite(rect.y) && Number.isFinite(rect.width) && Number.isFinite(rect.height) && rect.width > 0 && rect.height > 0;
|
|
41
|
+
}
|
|
42
|
+
export function rectContains(rect, x, y) {
|
|
43
|
+
'worklet';
|
|
44
|
+
|
|
45
|
+
return x >= rect.x && y >= rect.y && x <= rect.x + rect.width && y <= rect.y + rect.height;
|
|
46
|
+
}
|
|
47
|
+
function containsRectangle(outer, inner, pixelRatio) {
|
|
48
|
+
'worklet';
|
|
49
|
+
|
|
50
|
+
// Compare actual rendered edges. Native layout uses Float32 and snaps edges
|
|
51
|
+
// relative to the root; widening a hit box would also accept clipped pixels.
|
|
52
|
+
return Math.round(inner.x * pixelRatio) >= Math.round(outer.x * pixelRatio) && Math.round(inner.y * pixelRatio) >= Math.round(outer.y * pixelRatio) && Math.round((inner.x + inner.width) * pixelRatio) <= Math.round((outer.x + outer.width) * pixelRatio) && Math.round((inner.y + inner.height) * pixelRatio) <= Math.round((outer.y + outer.height) * pixelRatio);
|
|
53
|
+
}
|
|
54
|
+
export function getCellGeometry(zone, geometry, width, height, pixelRatio = 1) {
|
|
55
|
+
'worklet';
|
|
56
|
+
|
|
57
|
+
if (!zone || typeof zone !== 'object' || Array.isArray(zone) || !geometry || typeof geometry !== 'object' || Array.isArray(geometry) || geometry.mode !== 'fixed' && geometry.mode !== 'fit' || !geometry.padding || typeof geometry.padding !== 'object' || Array.isArray(geometry.padding) || !Number.isSafeInteger(zone.rows) || zone.rows <= 0 || !Number.isSafeInteger(zone.columns) || zone.columns <= 0 || !Number.isFinite(width) || width <= 0 || !Number.isFinite(height) || height <= 0 || !Number.isFinite(pixelRatio) || pixelRatio <= 0) return null;
|
|
58
|
+
const {
|
|
59
|
+
padding,
|
|
60
|
+
rowGap,
|
|
61
|
+
columnGap
|
|
62
|
+
} = geometry;
|
|
63
|
+
if (![padding.top, padding.right, padding.bottom, padding.left, rowGap, columnGap].every(value => Number.isFinite(value) && value >= 0)) return null;
|
|
64
|
+
const cellWidth = geometry.mode === 'fixed' ? geometry.cellWidth : (width - padding.left - padding.right - (zone.columns - 1) * columnGap) / zone.columns;
|
|
65
|
+
const cellHeight = geometry.mode === 'fixed' ? geometry.cellHeight : (height - padding.top - padding.bottom - (zone.rows - 1) * rowGap) / zone.rows;
|
|
66
|
+
const contentWidth = zone.columns * cellWidth + (zone.columns - 1) * columnGap;
|
|
67
|
+
const contentHeight = zone.rows * cellHeight + (zone.rows - 1) * rowGap;
|
|
68
|
+
const requiredWidth = contentWidth + padding.left + padding.right;
|
|
69
|
+
const requiredHeight = contentHeight + padding.top + padding.bottom;
|
|
70
|
+
// A native extent is the difference between two rounded root-relative edges.
|
|
71
|
+
// That can be slightly smaller than the requested size (less than one pixel).
|
|
72
|
+
// Preserve explicit cell sizes; final targeting still checks rendered edges.
|
|
73
|
+
const pixelSize = 1 / pixelRatio;
|
|
74
|
+
return Number.isFinite(requiredWidth) && Number.isFinite(requiredHeight) && (geometry.mode !== 'fixed' || requiredWidth - width < pixelSize && requiredHeight - height < pixelSize) && Number.isFinite(cellWidth) && cellWidth > 0 && Number.isFinite(cellHeight) && cellHeight > 0 ? {
|
|
75
|
+
cellWidth,
|
|
76
|
+
cellHeight
|
|
77
|
+
} : null;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** Item rectangle relative to its zone, including the zone's content padding. */
|
|
81
|
+
export function itemRect(position, span, geometry, cells) {
|
|
82
|
+
'worklet';
|
|
83
|
+
|
|
84
|
+
return {
|
|
85
|
+
x: geometry.padding.left + position.col * (cells.cellWidth + geometry.columnGap),
|
|
86
|
+
y: geometry.padding.top + position.row * (cells.cellHeight + geometry.rowGap),
|
|
87
|
+
width: span.cols * cells.cellWidth + (span.cols - 1) * geometry.columnGap,
|
|
88
|
+
height: span.rows * cells.cellHeight + (span.rows - 1) * geometry.rowGap
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/** Check the resolved placement, which a region exchange may shift from the pointer target. */
|
|
93
|
+
export function isPlacementVisible(zones, outlet, target, span) {
|
|
94
|
+
'worklet';
|
|
95
|
+
|
|
96
|
+
const measured = zones.find(entry => entry.zone.id === target.zoneId);
|
|
97
|
+
if (!measured || measured.zone.strategy !== target.strategy || !isUsableRect(measured.rect) || !isUsableRect(outlet) || !Number.isFinite(measured.pixelRatio) || measured.pixelRatio <= 0 || !Number.isSafeInteger(span.rows) || !Number.isSafeInteger(span.cols) || span.rows <= 0 || span.cols <= 0) return false;
|
|
98
|
+
const {
|
|
99
|
+
zone,
|
|
100
|
+
rect,
|
|
101
|
+
geometry,
|
|
102
|
+
cells
|
|
103
|
+
} = measured;
|
|
104
|
+
let position;
|
|
105
|
+
if (zone.strategy === 'ordered' && target.strategy === 'ordered') {
|
|
106
|
+
if (span.rows !== zone.itemSpan.rows || span.cols !== zone.itemSpan.cols || !Number.isSafeInteger(target.index) || target.index < 0 || target.index > zone.items.length) return false;
|
|
107
|
+
const slotsPerRow = Math.floor(zone.columns / span.cols);
|
|
108
|
+
if (slotsPerRow <= 0) return false;
|
|
109
|
+
position = {
|
|
110
|
+
row: Math.floor(target.index / slotsPerRow) * span.rows,
|
|
111
|
+
col: target.index % slotsPerRow * span.cols
|
|
112
|
+
};
|
|
113
|
+
} else if (target.strategy === 'spatial') {
|
|
114
|
+
position = target.position;
|
|
115
|
+
} else {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
if (!Number.isSafeInteger(position.row) || !Number.isSafeInteger(position.col) || position.row < 0 || position.col < 0 || position.row > zone.rows - span.rows || position.col > zone.columns - span.cols) return false;
|
|
119
|
+
const anchored = itemRect(position, span, geometry, cells);
|
|
120
|
+
const windowTarget = {
|
|
121
|
+
...anchored,
|
|
122
|
+
x: rect.x + anchored.x,
|
|
123
|
+
y: rect.y + anchored.y
|
|
124
|
+
};
|
|
125
|
+
return isUsableRect(windowTarget) && containsRectangle(rect, windowTarget, measured.pixelRatio) && containsRectangle(outlet, windowTarget, measured.pixelRatio);
|
|
126
|
+
}
|
|
127
|
+
export function sameTarget(left, right) {
|
|
128
|
+
'worklet';
|
|
129
|
+
|
|
130
|
+
if (!left || !right) return left === right;
|
|
131
|
+
if (left.zoneId !== right.zoneId || left.strategy !== right.strategy) return false;
|
|
132
|
+
return left.strategy === 'ordered' && right.strategy === 'ordered' ? left.index === right.index : left.strategy === 'spatial' && right.strategy === 'spatial' && left.position.row === right.position.row && left.position.col === right.position.col;
|
|
133
|
+
}
|
|
134
|
+
export function sourceItemTarget(measured, itemId) {
|
|
135
|
+
'worklet';
|
|
136
|
+
|
|
137
|
+
const {
|
|
138
|
+
zone
|
|
139
|
+
} = measured;
|
|
140
|
+
if (zone.strategy === 'ordered') {
|
|
141
|
+
const index = zone.items.findIndex(item => item.id === itemId);
|
|
142
|
+
return index < 0 ? null : {
|
|
143
|
+
zoneId: zone.id,
|
|
144
|
+
strategy: 'ordered',
|
|
145
|
+
index
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
const item = zone.items.find(candidate => candidate.id === itemId);
|
|
149
|
+
return item ? {
|
|
150
|
+
zoneId: zone.id,
|
|
151
|
+
strategy: 'spatial',
|
|
152
|
+
position: {
|
|
153
|
+
...item.position
|
|
154
|
+
}
|
|
155
|
+
} : null;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/** Worklet equivalent of computeOrderedIndex for already validated measured zones. */
|
|
159
|
+
export function orderedIndexForCenter(measured, itemId, centerX, centerY) {
|
|
160
|
+
'worklet';
|
|
161
|
+
|
|
162
|
+
const {
|
|
163
|
+
zone,
|
|
164
|
+
geometry,
|
|
165
|
+
cells
|
|
166
|
+
} = measured;
|
|
167
|
+
if (zone.strategy !== 'ordered') return null;
|
|
168
|
+
const span = zone.itemSpan;
|
|
169
|
+
const slotsPerRow = Math.floor(zone.columns / span.cols);
|
|
170
|
+
const slotRows = Math.floor(zone.rows / span.rows);
|
|
171
|
+
if (slotsPerRow === 0 || slotRows === 0) return null;
|
|
172
|
+
const itemCount = zone.items.reduce((count, item) => count + Number(item.id !== itemId), 0);
|
|
173
|
+
const slotWidth = span.cols * cells.cellWidth + (span.cols - 1) * geometry.columnGap;
|
|
174
|
+
const slotHeight = span.rows * cells.cellHeight + (span.rows - 1) * geometry.rowGap;
|
|
175
|
+
const strideX = slotWidth + geometry.columnGap;
|
|
176
|
+
const strideY = slotHeight + geometry.rowGap;
|
|
177
|
+
const width = zone.columns * cells.cellWidth + (zone.columns - 1) * geometry.columnGap;
|
|
178
|
+
const height = zone.rows * cells.cellHeight + (zone.rows - 1) * geometry.rowGap;
|
|
179
|
+
const x = clamp(centerX, 0, width);
|
|
180
|
+
const y = clamp(centerY, 0, height);
|
|
181
|
+
if (zone.rows % span.rows !== 0 && y >= slotRows * strideY - geometry.rowGap) return itemCount;
|
|
182
|
+
const row = clamp(Math.floor((y - slotHeight / 2) / strideY + 0.5), 0, slotRows - 1);
|
|
183
|
+
if (zone.columns % span.cols !== 0 && x >= slotsPerRow * strideX - geometry.columnGap) return Math.min(itemCount, (row + 1) * slotsPerRow);
|
|
184
|
+
const col = clamp(Math.floor((x - slotWidth / 2) / strideX + 0.5), 0, slotsPerRow - 1);
|
|
185
|
+
const slot = row * slotsPerRow + col;
|
|
186
|
+
if (slot >= itemCount) return itemCount;
|
|
187
|
+
const after = slotsPerRow === 1 ? y >= row * strideY + slotHeight / 2 : x >= col * strideX + slotWidth / 2;
|
|
188
|
+
return Math.min(itemCount, slot + Number(after));
|
|
189
|
+
}
|
|
190
|
+
function stableAnchor(value, previous, maximum, hysteresis) {
|
|
191
|
+
'worklet';
|
|
192
|
+
|
|
193
|
+
if (previous !== undefined && previous >= 0 && previous <= maximum && Math.abs(value - previous) <= 0.5 + hysteresis) return previous;
|
|
194
|
+
return clamp(Math.round(value), 0, maximum);
|
|
195
|
+
}
|
|
196
|
+
function stableExchangeAnchor(value, previous, maximum, threshold) {
|
|
197
|
+
'worklet';
|
|
198
|
+
|
|
199
|
+
if (Math.abs(value - previous) <= threshold) return previous;
|
|
200
|
+
// Quantize each crossed boundary so a fast jump cannot bypass the threshold.
|
|
201
|
+
return clamp(value > previous ? Math.floor(value + (1 - threshold)) : Math.ceil(value - (1 - threshold)), 0, maximum);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/** Use the same explicit placement policy as the engine, without application data. */
|
|
205
|
+
function exchangeOrigin(current, zone, position) {
|
|
206
|
+
'worklet';
|
|
207
|
+
|
|
208
|
+
if (zone.id !== current.sourceZoneId) return null;
|
|
209
|
+
const active = zone.items.find(item => item.id === current.itemId);
|
|
210
|
+
if (!active) return null;
|
|
211
|
+
const {
|
|
212
|
+
move,
|
|
213
|
+
kind,
|
|
214
|
+
colliders
|
|
215
|
+
} = selectSpatialMove({
|
|
216
|
+
items: zone.items.filter(item => item.id !== active.id),
|
|
217
|
+
active: {
|
|
218
|
+
...active,
|
|
219
|
+
position
|
|
220
|
+
},
|
|
221
|
+
origin: active,
|
|
222
|
+
rows: zone.rows,
|
|
223
|
+
columns: zone.columns,
|
|
224
|
+
searchBudget: 1,
|
|
225
|
+
movementPolicy: current.movementPolicy
|
|
226
|
+
});
|
|
227
|
+
if (kind === 'exchange') return colliders.length > 0 ? active.position : null;
|
|
228
|
+
if (kind !== 'row-rotation' || !move.origin) return null;
|
|
229
|
+
const corridorTop = Math.min(move.origin.position.row, move.active.position.row);
|
|
230
|
+
const corridorBottom = Math.max(move.origin.position.row, move.active.position.row) + move.active.span.rows;
|
|
231
|
+
const exchanges = move.items.some(item => corridorTop < item.position.row + item.span.rows && corridorBottom > item.position.row);
|
|
232
|
+
return exchanges ? active.position : null;
|
|
233
|
+
}
|
|
234
|
+
function selectZone(current, x, y) {
|
|
235
|
+
'worklet';
|
|
236
|
+
|
|
237
|
+
if (!rectContains(current.outlet, x, y)) return null;
|
|
238
|
+
const previousId = current.target?.zoneId ?? (current.seq === 0 ? current.sourceZoneId : null);
|
|
239
|
+
for (const zone of current.zones) {
|
|
240
|
+
if (zone.zone.id === previousId && rectContains(zone.rect, x, y)) return zone;
|
|
241
|
+
}
|
|
242
|
+
for (const zone of current.zones) {
|
|
243
|
+
const boundary = current.movementPolicy?.pointer?.boundaryHysteresis ?? DEFAULT_GRID_MOVEMENT_POLICY.pointer.boundaryHysteresis;
|
|
244
|
+
const marginX = Math.min(boundary, zone.rect.width / 4);
|
|
245
|
+
const marginY = Math.min(boundary, zone.rect.height / 4);
|
|
246
|
+
if (x >= zone.rect.x + marginX && x <= zone.rect.x + zone.rect.width - marginX && y >= zone.rect.y + marginY && y <= zone.rect.y + zone.rect.height - marginY) return zone;
|
|
247
|
+
}
|
|
248
|
+
return null;
|
|
249
|
+
}
|
|
250
|
+
/** Preview movement and release use this same hysteresis-adjusted logical target. */
|
|
251
|
+
export function readPointerTarget(current, absoluteX, absoluteY) {
|
|
252
|
+
'worklet';
|
|
253
|
+
|
|
254
|
+
const outside = {
|
|
255
|
+
target: null,
|
|
256
|
+
x: absoluteX - current.gripX * current.width,
|
|
257
|
+
y: absoluteY - current.gripY * current.height,
|
|
258
|
+
width: current.width,
|
|
259
|
+
height: current.height
|
|
260
|
+
};
|
|
261
|
+
if (!Number.isFinite(absoluteX) || !Number.isFinite(absoluteY)) return {
|
|
262
|
+
...outside,
|
|
263
|
+
x: current.x,
|
|
264
|
+
y: current.y
|
|
265
|
+
};
|
|
266
|
+
const measured = selectZone(current, absoluteX, absoluteY);
|
|
267
|
+
if (!measured) return outside;
|
|
268
|
+
const {
|
|
269
|
+
zone,
|
|
270
|
+
rect,
|
|
271
|
+
geometry,
|
|
272
|
+
cells
|
|
273
|
+
} = measured;
|
|
274
|
+
const {
|
|
275
|
+
span
|
|
276
|
+
} = current;
|
|
277
|
+
const sensitivity = current.movementPolicy?.pointer;
|
|
278
|
+
const cellHysteresis = sensitivity?.cellHysteresis ?? DEFAULT_GRID_MOVEMENT_POLICY.pointer.cellHysteresis;
|
|
279
|
+
const exchangeThreshold = sensitivity?.exchangeThreshold ?? DEFAULT_GRID_MOVEMENT_POLICY.pointer.exchangeThreshold;
|
|
280
|
+
const boundaryHysteresis = sensitivity?.boundaryHysteresis ?? DEFAULT_GRID_MOVEMENT_POLICY.pointer.boundaryHysteresis;
|
|
281
|
+
if (span.rows > zone.rows || span.cols > zone.columns) return outside;
|
|
282
|
+
const size = itemRect({
|
|
283
|
+
row: 0,
|
|
284
|
+
col: 0
|
|
285
|
+
}, span, geometry, cells);
|
|
286
|
+
if (!isUsableRect(size)) return outside;
|
|
287
|
+
const x = absoluteX - current.gripX * size.width;
|
|
288
|
+
const y = absoluteY - current.gripY * size.height;
|
|
289
|
+
const contentX = x - rect.x - geometry.padding.left;
|
|
290
|
+
const contentY = y - rect.y - geometry.padding.top;
|
|
291
|
+
const previous = current.target?.zoneId === zone.id ? current.target : null;
|
|
292
|
+
let target;
|
|
293
|
+
let position;
|
|
294
|
+
if (zone.strategy === 'spatial') {
|
|
295
|
+
const old = previous?.strategy === 'spatial' ? previous.position : undefined;
|
|
296
|
+
const row = contentY / (cells.cellHeight + geometry.rowGap);
|
|
297
|
+
const col = contentX / (cells.cellWidth + geometry.columnGap);
|
|
298
|
+
position = {
|
|
299
|
+
row: stableAnchor(row, old?.row, zone.rows - span.rows, cellHysteresis),
|
|
300
|
+
col: stableAnchor(col, old?.col, zone.columns - span.cols, cellHysteresis)
|
|
301
|
+
};
|
|
302
|
+
// Classify the nearest cell before hysteresis so a configured exchange
|
|
303
|
+
// threshold below the ordinary cell threshold can still take effect.
|
|
304
|
+
const origin = exchangeOrigin(current, zone, {
|
|
305
|
+
row: clamp(Math.round(row), 0, zone.rows - span.rows),
|
|
306
|
+
col: clamp(Math.round(col), 0, zone.columns - span.cols)
|
|
307
|
+
});
|
|
308
|
+
if (origin) {
|
|
309
|
+
// Re-entering the source zone must not bypass the exchange threshold.
|
|
310
|
+
// A full-width widget can move intervening items even at an empty target.
|
|
311
|
+
// Empty corridors and insertion retain their existing immediate targeting.
|
|
312
|
+
const reference = old ?? origin;
|
|
313
|
+
position = {
|
|
314
|
+
row: stableExchangeAnchor(row, reference.row, zone.rows - span.rows, exchangeThreshold),
|
|
315
|
+
col: stableExchangeAnchor(col, reference.col, zone.columns - span.cols, exchangeThreshold)
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
target = {
|
|
319
|
+
zoneId: zone.id,
|
|
320
|
+
strategy: 'spatial',
|
|
321
|
+
position
|
|
322
|
+
};
|
|
323
|
+
} else {
|
|
324
|
+
const centerX = contentX + size.width / 2;
|
|
325
|
+
const centerY = contentY + size.height / 2;
|
|
326
|
+
let index = orderedIndexForCenter(measured, current.itemId, centerX, centerY);
|
|
327
|
+
if (index === null) return outside;
|
|
328
|
+
if (previous?.strategy === 'ordered' && previous.index !== index) {
|
|
329
|
+
const slot = itemRect({
|
|
330
|
+
row: 0,
|
|
331
|
+
col: 0
|
|
332
|
+
}, zone.itemSpan, geometry, cells);
|
|
333
|
+
const marginX = Math.min(boundaryHysteresis, slot.width / 4);
|
|
334
|
+
const marginY = Math.min(boundaryHysteresis, slot.height / 4);
|
|
335
|
+
for (const dx of [-marginX, marginX]) {
|
|
336
|
+
for (const dy of [-marginY, marginY]) {
|
|
337
|
+
if (orderedIndexForCenter(measured, current.itemId, centerX + dx, centerY + dy) === previous.index) index = previous.index;
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
position = orderedSlotPosition(index, zone.itemSpan, zone.columns);
|
|
342
|
+
target = {
|
|
343
|
+
zoneId: zone.id,
|
|
344
|
+
strategy: 'ordered',
|
|
345
|
+
index
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
const anchored = itemRect(position, span, geometry, cells);
|
|
349
|
+
const windowTarget = {
|
|
350
|
+
...anchored,
|
|
351
|
+
x: rect.x + anchored.x,
|
|
352
|
+
y: rect.y + anchored.y
|
|
353
|
+
};
|
|
354
|
+
if (!containsRectangle(rect, windowTarget, measured.pixelRatio) || !containsRectangle(current.outlet, windowTarget, measured.pixelRatio)) return outside;
|
|
355
|
+
return {
|
|
356
|
+
target,
|
|
357
|
+
x,
|
|
358
|
+
y,
|
|
359
|
+
width: size.width,
|
|
360
|
+
height: size.height
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
//# sourceMappingURL=geometry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["DEFAULT_GRID_MOVEMENT_POLICY","selectSpatialMove","clamp","value","min","max","Math","orderedSlotPosition","index","itemSpan","columns","perRow","floor","cols","row","rows","col","orderedSlotIndex","position","isUsableRect","rect","Number","isFinite","x","y","width","height","rectContains","containsRectangle","outer","inner","pixelRatio","round","getCellGeometry","zone","geometry","Array","isArray","mode","padding","isSafeInteger","rowGap","columnGap","top","right","bottom","left","every","cellWidth","cellHeight","contentWidth","contentHeight","requiredWidth","requiredHeight","pixelSize","itemRect","span","cells","isPlacementVisible","zones","outlet","target","measured","find","entry","id","zoneId","strategy","items","length","slotsPerRow","anchored","windowTarget","sameTarget","sourceItemTarget","itemId","findIndex","item","candidate","orderedIndexForCenter","centerX","centerY","slotRows","itemCount","reduce","count","slotWidth","slotHeight","strideX","strideY","slot","after","stableAnchor","previous","maximum","hysteresis","undefined","abs","stableExchangeAnchor","threshold","ceil","exchangeOrigin","current","sourceZoneId","active","move","kind","colliders","filter","origin","searchBudget","movementPolicy","corridorTop","corridorBottom","exchanges","some","selectZone","previousId","seq","boundary","pointer","boundaryHysteresis","marginX","marginY","readPointerTarget","absoluteX","absoluteY","outside","gripX","gripY","sensitivity","cellHysteresis","exchangeThreshold","size","contentX","contentY","old","reference","dx","dy"],"sourceRoot":"../../../src","sources":["pointer/geometry.ts"],"mappings":"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","ignoreList":[]}
|