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,307 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { validateRectMeasurement } from "../adapters/coordinates.js";
|
|
4
|
+
import { orderedSlots, slotIndex, slotPosition } from "../engine/gridPlacements.js";
|
|
5
|
+
import { isCellSpan } from "../engine/validation.js";
|
|
6
|
+
import { getCellGeometry, isPlacementVisible, isUsableRect, itemRect, readPointerTarget, rectContains } from "./geometry.js";
|
|
7
|
+
import { listTarget } from "./listTarget.js";
|
|
8
|
+
|
|
9
|
+
/** Geometry-only immutable input for UI pointer targeting; no refs or renderers. */
|
|
10
|
+
|
|
11
|
+
const preparedGrids = new WeakMap();
|
|
12
|
+
function sameGridInput(prepared, registration) {
|
|
13
|
+
const {
|
|
14
|
+
layout,
|
|
15
|
+
geometry,
|
|
16
|
+
cells
|
|
17
|
+
} = registration;
|
|
18
|
+
const previous = prepared.geometry;
|
|
19
|
+
if (prepared.zoneId !== registration.zoneId || prepared.revision !== registration.revision || prepared.layoutVersion !== registration.layoutVersion || prepared.pixelRatio !== registration.pixelRatio || prepared.cells.cellWidth !== cells.cellWidth || prepared.cells.cellHeight !== cells.cellHeight || prepared.zone.id !== layout.id || prepared.zone.rows !== layout.rows || prepared.zone.columns !== layout.columns || previous.mode !== geometry.mode || previous.rowGap !== geometry.rowGap || previous.columnGap !== geometry.columnGap || previous.padding.top !== geometry.padding.top || previous.padding.right !== geometry.padding.right || previous.padding.bottom !== geometry.padding.bottom || previous.padding.left !== geometry.padding.left || previous.mode === 'fixed' && (geometry.mode !== 'fixed' || previous.cellWidth !== geometry.cellWidth || previous.cellHeight !== geometry.cellHeight) || prepared.zone.items.length !== layout.placements.length || prepared.zone.strategy === 'ordered' !== (layout.itemSpan !== undefined) || prepared.zone.strategy === 'ordered' && (prepared.zone.itemSpan.rows !== layout.itemSpan?.rows || prepared.zone.itemSpan.cols !== layout.itemSpan?.cols)) return false;
|
|
20
|
+
// Direct JS callers can mutate their typed registration. Compare known
|
|
21
|
+
// primitives against our detached snapshot instead of caching by identity
|
|
22
|
+
// alone. Providers prepare once when registering, outside the pointer path.
|
|
23
|
+
const ordered = prepared.zone.strategy === 'ordered';
|
|
24
|
+
return layout.placements.every((placement, index) => {
|
|
25
|
+
const item = prepared.zone.items[index];
|
|
26
|
+
return item.id === placement.itemId && (ordered || item.position?.row === placement.position.row && item.position?.col === placement.position.col) && item.span.rows === placement.span.rows && item.span.cols === placement.span.cols && item.placement === placement.placement;
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
/** Prepare on registration, then reuse the result on the UI runtime. */
|
|
30
|
+
export function prepareGridTarget(registration) {
|
|
31
|
+
const cached = preparedGrids.get(registration.layout);
|
|
32
|
+
if (cached && sameGridInput(cached, registration)) return cached;
|
|
33
|
+
const {
|
|
34
|
+
layout,
|
|
35
|
+
geometry
|
|
36
|
+
} = registration;
|
|
37
|
+
const zone = layout.itemSpan ? Object.freeze({
|
|
38
|
+
id: layout.id,
|
|
39
|
+
strategy: 'ordered',
|
|
40
|
+
rows: layout.rows,
|
|
41
|
+
columns: layout.columns,
|
|
42
|
+
itemSpan: Object.freeze({
|
|
43
|
+
rows: layout.itemSpan.rows,
|
|
44
|
+
cols: layout.itemSpan.cols
|
|
45
|
+
}),
|
|
46
|
+
// Ordered items carry no position; their slot follows from the order.
|
|
47
|
+
items: Object.freeze(layout.placements.map(placement => Object.freeze({
|
|
48
|
+
id: placement.itemId,
|
|
49
|
+
data: undefined,
|
|
50
|
+
span: Object.freeze({
|
|
51
|
+
rows: placement.span.rows,
|
|
52
|
+
cols: placement.span.cols
|
|
53
|
+
}),
|
|
54
|
+
placement: placement.placement
|
|
55
|
+
})))
|
|
56
|
+
}) : Object.freeze({
|
|
57
|
+
id: layout.id,
|
|
58
|
+
strategy: 'spatial',
|
|
59
|
+
rows: layout.rows,
|
|
60
|
+
columns: layout.columns,
|
|
61
|
+
items: Object.freeze(layout.placements.map(placement => Object.freeze({
|
|
62
|
+
id: placement.itemId,
|
|
63
|
+
data: undefined,
|
|
64
|
+
position: Object.freeze({
|
|
65
|
+
row: placement.position.row,
|
|
66
|
+
col: placement.position.col
|
|
67
|
+
}),
|
|
68
|
+
span: Object.freeze({
|
|
69
|
+
rows: placement.span.rows,
|
|
70
|
+
cols: placement.span.cols
|
|
71
|
+
}),
|
|
72
|
+
placement: placement.placement
|
|
73
|
+
})))
|
|
74
|
+
});
|
|
75
|
+
const prepared = Object.freeze({
|
|
76
|
+
zoneId: registration.zoneId,
|
|
77
|
+
revision: registration.revision,
|
|
78
|
+
layoutVersion: registration.layoutVersion,
|
|
79
|
+
zone,
|
|
80
|
+
geometry: Object.freeze({
|
|
81
|
+
...(geometry.mode === 'fixed' ? {
|
|
82
|
+
mode: 'fixed',
|
|
83
|
+
cellWidth: geometry.cellWidth,
|
|
84
|
+
cellHeight: geometry.cellHeight
|
|
85
|
+
} : {
|
|
86
|
+
mode: 'fit'
|
|
87
|
+
}),
|
|
88
|
+
rowGap: geometry.rowGap,
|
|
89
|
+
columnGap: geometry.columnGap,
|
|
90
|
+
padding: Object.freeze({
|
|
91
|
+
top: geometry.padding.top,
|
|
92
|
+
right: geometry.padding.right,
|
|
93
|
+
bottom: geometry.padding.bottom,
|
|
94
|
+
left: geometry.padding.left
|
|
95
|
+
})
|
|
96
|
+
}),
|
|
97
|
+
cells: Object.freeze({
|
|
98
|
+
cellWidth: registration.cells.cellWidth,
|
|
99
|
+
cellHeight: registration.cells.cellHeight
|
|
100
|
+
}),
|
|
101
|
+
pixelRatio: registration.pixelRatio
|
|
102
|
+
});
|
|
103
|
+
preparedGrids.set(layout, prepared);
|
|
104
|
+
return prepared;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/** Attach current viewport coordinates without rebuilding baseline placements. */
|
|
108
|
+
export function measurePreparedGrid(prepared, measured) {
|
|
109
|
+
'worklet';
|
|
110
|
+
|
|
111
|
+
if (measured.zoneId !== prepared.zoneId || measured.layoutVersion !== prepared.layoutVersion || measured.viewport.revision !== prepared.revision || measured.viewport.source !== 'measured' || measured.viewport.space !== 'screen' || !Number.isSafeInteger(prepared.revision) || prepared.revision < 0 || !Number.isFinite(measured.viewport.timestampMs) || measured.viewport.timestampMs < 0 || measured.offset !== 0 || !isUsableRect(measured.viewport.rect)) return null;
|
|
112
|
+
const {
|
|
113
|
+
zone,
|
|
114
|
+
geometry,
|
|
115
|
+
cells,
|
|
116
|
+
pixelRatio
|
|
117
|
+
} = prepared;
|
|
118
|
+
const currentCells = getCellGeometry(zone, geometry, measured.viewport.rect.width, measured.viewport.rect.height, pixelRatio);
|
|
119
|
+
if (zone.id !== prepared.zoneId || !currentCells || currentCells.cellWidth !== cells.cellWidth || currentCells.cellHeight !== cells.cellHeight) return null;
|
|
120
|
+
return {
|
|
121
|
+
zone,
|
|
122
|
+
geometry,
|
|
123
|
+
cells,
|
|
124
|
+
pixelRatio,
|
|
125
|
+
rect: measured.viewport.rect
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
function isCurrent(state, registration, measured, ignoreLayoutVersion = false) {
|
|
129
|
+
const checked = validateRectMeasurement(measured.viewport, {
|
|
130
|
+
revision: state.revision
|
|
131
|
+
});
|
|
132
|
+
return checked.valid && checked.value.source === 'measured' && checked.value.space === 'screen' && registration.revision === state.revision && (ignoreLayoutVersion || registration.layoutVersion === measured.layoutVersion) && (registration.kind === 'grid' ? measured.offset === 0 : registration.layout.revision === state.revision && Number.isFinite(measured.offset));
|
|
133
|
+
}
|
|
134
|
+
function measuredGrid(registration, measured) {
|
|
135
|
+
const {
|
|
136
|
+
layout,
|
|
137
|
+
geometry,
|
|
138
|
+
cells,
|
|
139
|
+
pixelRatio
|
|
140
|
+
} = registration;
|
|
141
|
+
const currentCells = getCellGeometry(layout, geometry, measured.viewport.rect.width, measured.viewport.rect.height, pixelRatio);
|
|
142
|
+
if (layout.id !== registration.zoneId || !currentCells || currentCells.cellWidth !== cells.cellWidth || currentCells.cellHeight !== cells.cellHeight) return null;
|
|
143
|
+
const prepared = prepareGridTarget(registration);
|
|
144
|
+
return {
|
|
145
|
+
zone: prepared.zone,
|
|
146
|
+
geometry: prepared.geometry,
|
|
147
|
+
cells: prepared.cells,
|
|
148
|
+
pixelRatio: prepared.pixelRatio,
|
|
149
|
+
rect: measured.viewport.rect
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Use committed list geometry and the existing grid pointer policy in one
|
|
155
|
+
* measured coordinate space. Grid recipes are captured by destination zone ID.
|
|
156
|
+
*/
|
|
157
|
+
|
|
158
|
+
export function layoutTarget(state, registrations, gridItemLayouts, movementPolicy, previousTarget) {
|
|
159
|
+
return resolveLayoutTarget(state, registrations, gridItemLayouts, movementPolicy, previousTarget).target;
|
|
160
|
+
}
|
|
161
|
+
export function resolveLayoutTarget(state, registrations, gridItemLayouts, movementPolicy, previousTarget) {
|
|
162
|
+
const outside = {
|
|
163
|
+
target: null,
|
|
164
|
+
stale: false
|
|
165
|
+
};
|
|
166
|
+
if (state.itemId === null || !isUsableRect(state.root) || !rectContains(state.root, state.pointer.x, state.pointer.y) || !Number.isFinite(state.width) || !Number.isFinite(state.height) || state.width <= 0 || state.height <= 0 || !Number.isFinite(state.grip.x) || !Number.isFinite(state.grip.y)) return outside;
|
|
167
|
+
|
|
168
|
+
// Keep an overlapping previous zone until the pointer actually leaves it,
|
|
169
|
+
// matching the old grid controller's zone selection policy.
|
|
170
|
+
const previous = state.zones.find(measured => measured.zoneId === previousTarget?.zoneId);
|
|
171
|
+
const zones = previous ? [previous, ...state.zones.filter(measured => measured !== previous)] : state.zones;
|
|
172
|
+
let stale = false;
|
|
173
|
+
for (const measured of zones) {
|
|
174
|
+
const registration = registrations.get(measured.zoneId);
|
|
175
|
+
if (!registration) continue;
|
|
176
|
+
const inside = rectContains(measured.viewport.rect, state.pointer.x, state.pointer.y);
|
|
177
|
+
if (!isCurrent(state, registration, measured)) {
|
|
178
|
+
if (inside && isCurrent(state, registration, measured, true)) stale = true;
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
if (!inside) continue;
|
|
182
|
+
if (registration.kind === 'list') {
|
|
183
|
+
return {
|
|
184
|
+
target: listTarget({
|
|
185
|
+
...state,
|
|
186
|
+
zones: [measured]
|
|
187
|
+
}, new Map([[measured.zoneId, registration]])),
|
|
188
|
+
stale: false
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
const recipe = gridItemLayouts.get(measured.zoneId);
|
|
192
|
+
const grid = measuredGrid(registration, measured);
|
|
193
|
+
if (!recipe || !isCellSpan(recipe.span) || !grid) return outside;
|
|
194
|
+
const content = itemRect({
|
|
195
|
+
row: 0,
|
|
196
|
+
col: 0
|
|
197
|
+
}, {
|
|
198
|
+
rows: grid.zone.rows,
|
|
199
|
+
cols: grid.zone.columns
|
|
200
|
+
}, grid.geometry, grid.cells);
|
|
201
|
+
// Padding cannot accept a grid drop even if clamping would fit its first cell.
|
|
202
|
+
if (!rectContains({
|
|
203
|
+
...content,
|
|
204
|
+
x: grid.rect.x + content.x,
|
|
205
|
+
y: grid.rect.y + content.y
|
|
206
|
+
}, state.pointer.x, state.pointer.y)) continue;
|
|
207
|
+
const legacyMotion = {
|
|
208
|
+
token: state.token,
|
|
209
|
+
phase: 'dragging',
|
|
210
|
+
itemId: state.itemId,
|
|
211
|
+
sourceZoneId: state.sourceZoneId,
|
|
212
|
+
// Provider activation starts at sequence 1; the grid policy starts at 0.
|
|
213
|
+
seq: Math.max(0, state.seq - 1),
|
|
214
|
+
target: previousTarget?.kind === 'grid' ? legacyGridTarget(previousTarget, grid.zone) : null,
|
|
215
|
+
span: recipe.span,
|
|
216
|
+
x: state.pointer.x - state.grip.x,
|
|
217
|
+
y: state.pointer.y - state.grip.y,
|
|
218
|
+
width: state.width,
|
|
219
|
+
height: state.height,
|
|
220
|
+
gripX: Math.max(0, Math.min(1, state.grip.x / state.width)),
|
|
221
|
+
gripY: Math.max(0, Math.min(1, state.grip.y / state.height)),
|
|
222
|
+
zones: [grid],
|
|
223
|
+
outlet: state.root,
|
|
224
|
+
validity: 'pending',
|
|
225
|
+
visible: state.visible,
|
|
226
|
+
destination: null,
|
|
227
|
+
movementPolicy,
|
|
228
|
+
baseRevision: state.revision
|
|
229
|
+
};
|
|
230
|
+
const result = readPointerTarget(legacyMotion, state.pointer.x, state.pointer.y);
|
|
231
|
+
if (result.target?.strategy === 'spatial') {
|
|
232
|
+
return {
|
|
233
|
+
target: {
|
|
234
|
+
kind: 'grid',
|
|
235
|
+
zoneId: result.target.zoneId,
|
|
236
|
+
position: result.target.position
|
|
237
|
+
},
|
|
238
|
+
stale: false
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
if (result.target?.strategy === 'ordered' && grid.zone.strategy === 'ordered') {
|
|
242
|
+
const slots = orderedSlots(grid.zone, grid.zone.itemSpan);
|
|
243
|
+
return {
|
|
244
|
+
target: {
|
|
245
|
+
kind: 'grid',
|
|
246
|
+
zoneId: result.target.zoneId,
|
|
247
|
+
position: slotPosition(result.target.index, grid.zone.itemSpan, slots.perRow)
|
|
248
|
+
},
|
|
249
|
+
stale: false
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return {
|
|
254
|
+
target: null,
|
|
255
|
+
stale
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/** Hand the grid pointer policy the previous target in its own vocabulary. */
|
|
260
|
+
function legacyGridTarget(previous, zone) {
|
|
261
|
+
if (zone.strategy === 'ordered' && previous.zoneId === zone.id) {
|
|
262
|
+
const slots = orderedSlots(zone, zone.itemSpan);
|
|
263
|
+
const index = slotIndex(previous.position, zone.itemSpan, slots.perRow);
|
|
264
|
+
if (index !== null) return {
|
|
265
|
+
zoneId: previous.zoneId,
|
|
266
|
+
strategy: 'ordered',
|
|
267
|
+
index
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
return {
|
|
271
|
+
zoneId: previous.zoneId,
|
|
272
|
+
strategy: 'spatial',
|
|
273
|
+
position: previous.position
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/** Recheck a resolved grid footprint after an exchange changes its position. */
|
|
278
|
+
export function isLayoutTargetVisible(state, registrations, target, gridItemLayouts) {
|
|
279
|
+
if (!isUsableRect(state.root)) return false;
|
|
280
|
+
const registration = registrations.get(target.zoneId);
|
|
281
|
+
const measured = state.zones.find(entry => entry.zoneId === target.zoneId);
|
|
282
|
+
if (!registration || !measured || registration.kind !== target.kind || !isCurrent(state, registration, measured)) return false;
|
|
283
|
+
if (target.kind === 'list' && registration.kind === 'list') {
|
|
284
|
+
const count = registration.layout.entries.filter(entry => entry.itemId !== state.itemId).length;
|
|
285
|
+
return Number.isSafeInteger(target.index) && target.index >= 0 && target.index <= count;
|
|
286
|
+
}
|
|
287
|
+
if (target.kind !== 'grid' || registration.kind !== 'grid') return false;
|
|
288
|
+
const recipe = gridItemLayouts.get(target.zoneId);
|
|
289
|
+
const grid = measuredGrid(registration, measured);
|
|
290
|
+
if (!recipe || !grid || !isCellSpan(recipe.span)) return false;
|
|
291
|
+
if (grid.zone.strategy === 'ordered') {
|
|
292
|
+
// An ordered slot has the zone's span whatever the entering item asked for.
|
|
293
|
+
const slots = orderedSlots(grid.zone, grid.zone.itemSpan);
|
|
294
|
+
const index = slotIndex(target.position, grid.zone.itemSpan, slots.perRow);
|
|
295
|
+
return index !== null && isPlacementVisible([grid], state.root, {
|
|
296
|
+
strategy: 'ordered',
|
|
297
|
+
zoneId: target.zoneId,
|
|
298
|
+
index
|
|
299
|
+
}, grid.zone.itemSpan);
|
|
300
|
+
}
|
|
301
|
+
return isPlacementVisible([grid], state.root, {
|
|
302
|
+
strategy: 'spatial',
|
|
303
|
+
zoneId: target.zoneId,
|
|
304
|
+
position: target.position
|
|
305
|
+
}, recipe.span);
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=layoutTarget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["validateRectMeasurement","orderedSlots","slotIndex","slotPosition","isCellSpan","getCellGeometry","isPlacementVisible","isUsableRect","itemRect","readPointerTarget","rectContains","listTarget","preparedGrids","WeakMap","sameGridInput","prepared","registration","layout","geometry","cells","previous","zoneId","revision","layoutVersion","pixelRatio","cellWidth","cellHeight","zone","id","rows","columns","mode","rowGap","columnGap","padding","top","right","bottom","left","items","length","placements","strategy","itemSpan","undefined","cols","ordered","every","placement","index","item","itemId","position","row","col","span","prepareGridTarget","cached","get","Object","freeze","map","data","set","measurePreparedGrid","measured","viewport","source","space","Number","isSafeInteger","isFinite","timestampMs","offset","rect","currentCells","width","height","isCurrent","state","ignoreLayoutVersion","checked","valid","value","kind","measuredGrid","layoutTarget","registrations","gridItemLayouts","movementPolicy","previousTarget","resolveLayoutTarget","target","outside","stale","root","pointer","x","y","grip","zones","find","filter","inside","Map","recipe","grid","content","legacyMotion","token","phase","sourceZoneId","seq","Math","max","legacyGridTarget","gripX","min","gripY","outlet","validity","visible","destination","baseRevision","result","slots","perRow","isLayoutTargetVisible","entry","count","entries"],"sourceRoot":"../../../src","sources":["pointer/layoutTarget.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
4
|
+
import { makeMutable, startMapper, stopMapper, withTiming } from 'react-native-reanimated';
|
|
5
|
+
import { presentationRect } from "../runtime/dndPresentation.js";
|
|
6
|
+
/** Resolve the mount-time geometry from JS-owned data without UI reads. */
|
|
7
|
+
function resolveInitialListCellGeometry({
|
|
8
|
+
initial,
|
|
9
|
+
zoneId,
|
|
10
|
+
itemId,
|
|
11
|
+
vertical,
|
|
12
|
+
fixed,
|
|
13
|
+
size
|
|
14
|
+
}) {
|
|
15
|
+
const rect = initial.presentation !== undefined && initial.presentation.revision === initial.revision ? presentationRect(initial.presentation, zoneId, itemId) : undefined;
|
|
16
|
+
return {
|
|
17
|
+
start: rect ? vertical ? rect.y : rect.x : initial.start,
|
|
18
|
+
size: fixed && rect ? vertical ? rect.height : rect.width : size
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* One UI mapper per cell selects the validated candidate rect and animates the
|
|
24
|
+
* content start. Mount reads no UI state: a synchronous shared-value read from
|
|
25
|
+
* JS blocks on the UI runtime and copies the whole presentation table. The
|
|
26
|
+
* first UI evaluation snaps to the UI geometry so a stale estimate never
|
|
27
|
+
* becomes the start of a timing animation.
|
|
28
|
+
*/
|
|
29
|
+
export function useListCellMotion(args) {
|
|
30
|
+
const [values] = useState(() => {
|
|
31
|
+
const geometry = resolveInitialListCellGeometry(args);
|
|
32
|
+
return {
|
|
33
|
+
// NaN marks a target the UI runtime has not evaluated yet.
|
|
34
|
+
target: makeMutable(Number.NaN),
|
|
35
|
+
animatedStart: makeMutable(geometry.start),
|
|
36
|
+
targetSize: makeMutable(geometry.size)
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
const {
|
|
40
|
+
target,
|
|
41
|
+
animatedStart,
|
|
42
|
+
targetSize
|
|
43
|
+
} = values;
|
|
44
|
+
const {
|
|
45
|
+
zoneId,
|
|
46
|
+
itemId,
|
|
47
|
+
vertical,
|
|
48
|
+
fixed,
|
|
49
|
+
start,
|
|
50
|
+
size,
|
|
51
|
+
presentation,
|
|
52
|
+
revision,
|
|
53
|
+
hiddenItemId
|
|
54
|
+
} = args;
|
|
55
|
+
const {
|
|
56
|
+
durationMs,
|
|
57
|
+
reduceMotion
|
|
58
|
+
} = args.animation;
|
|
59
|
+
useEffect(() => {
|
|
60
|
+
const mapper = () => {
|
|
61
|
+
'worklet';
|
|
62
|
+
|
|
63
|
+
const current = presentation?.get();
|
|
64
|
+
const committed = typeof revision === 'number' ? revision : revision.get();
|
|
65
|
+
const rect = current !== undefined && current.revision === committed ? presentationRect(current, zoneId, itemId) : undefined;
|
|
66
|
+
const nextTarget = rect ? vertical ? rect.y : rect.x : typeof start === 'number' ? start : start.get();
|
|
67
|
+
if (fixed) {
|
|
68
|
+
const nextSize = rect ? vertical ? rect.height : rect.width : size;
|
|
69
|
+
if (targetSize.get() !== nextSize) targetSize.set(nextSize);
|
|
70
|
+
}
|
|
71
|
+
const hidden = hiddenItemId.get() === itemId;
|
|
72
|
+
const previous = target.get();
|
|
73
|
+
if (Number.isNaN(previous)) {
|
|
74
|
+
// Adopt validated UI geometry without animating away from the JS
|
|
75
|
+
// estimate that produced the initial style.
|
|
76
|
+
target.set(nextTarget);
|
|
77
|
+
animatedStart.set(nextTarget);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (previous !== nextTarget) {
|
|
81
|
+
target.set(nextTarget);
|
|
82
|
+
animatedStart.set(hidden ? nextTarget : withTiming(nextTarget, {
|
|
83
|
+
duration: durationMs,
|
|
84
|
+
reduceMotion: reduceMotion
|
|
85
|
+
}));
|
|
86
|
+
} else if (hidden && animatedStart.get() !== nextTarget) {
|
|
87
|
+
// The hidden source sits exactly in its slot; stop in-flight motion.
|
|
88
|
+
animatedStart.set(nextTarget);
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
const mapperId = startMapper(mapper, [presentation, revision, start, hiddenItemId], [target, animatedStart, targetSize]);
|
|
92
|
+
return () => stopMapper(mapperId);
|
|
93
|
+
}, [animatedStart, durationMs, fixed, hiddenItemId, itemId, presentation, reduceMotion, revision, size, start, target, targetSize, vertical, zoneId]);
|
|
94
|
+
return {
|
|
95
|
+
animatedStart,
|
|
96
|
+
targetSize
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=listCellMotion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useState","makeMutable","startMapper","stopMapper","withTiming","presentationRect","resolveInitialListCellGeometry","initial","zoneId","itemId","vertical","fixed","size","rect","presentation","undefined","revision","start","y","x","height","width","useListCellMotion","args","values","geometry","target","Number","NaN","animatedStart","targetSize","hiddenItemId","durationMs","reduceMotion","animation","mapper","current","get","committed","nextTarget","nextSize","set","hidden","previous","isNaN","duration","mapperId"],"sourceRoot":"../../../src","sources":["pointer/listCellMotion.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { screenToContent } from "../adapters/coordinates.js";
|
|
4
|
+
import { computeListIndex } from "../engine/list.js";
|
|
5
|
+
import { findListTargetIndex } from "../engine/listIndex.js";
|
|
6
|
+
import { rectContains } from "./geometry.js";
|
|
7
|
+
|
|
8
|
+
/** Target from committed order; candidate reflow must not move its own thresholds. */
|
|
9
|
+
export function listTarget(state, registrations) {
|
|
10
|
+
if (!rectContains(state.root, state.pointer.x, state.pointer.y)) return null;
|
|
11
|
+
for (const measured of state.zones) {
|
|
12
|
+
const registration = registrations.get(measured.zoneId);
|
|
13
|
+
if (!registration || registration.revision !== state.revision || registration.layout.revision !== state.revision || registration.layoutVersion !== measured.layoutVersion || !rectContains(measured.viewport.rect, state.pointer.x, state.pointer.y)) continue;
|
|
14
|
+
const vertical = registration.orientation === 'vertical';
|
|
15
|
+
const center = {
|
|
16
|
+
x: state.pointer.x - state.grip.x + state.width / 2,
|
|
17
|
+
y: state.pointer.y - state.grip.y + state.height / 2
|
|
18
|
+
};
|
|
19
|
+
const content = screenToContent(center, {
|
|
20
|
+
viewport: measured.viewport,
|
|
21
|
+
scrollOffset: vertical ? {
|
|
22
|
+
x: 0,
|
|
23
|
+
y: measured.offset
|
|
24
|
+
} : {
|
|
25
|
+
x: measured.offset,
|
|
26
|
+
y: 0
|
|
27
|
+
}
|
|
28
|
+
}, {
|
|
29
|
+
revision: state.revision
|
|
30
|
+
});
|
|
31
|
+
if (!content.valid) return null;
|
|
32
|
+
const mainAxisCenter = vertical ? content.value.y : content.value.x;
|
|
33
|
+
const index = registration.targetIndex ? findListTargetIndex(registration.targetIndex, state.itemId, mainAxisCenter) : computeListIndex(registration.layout, state.itemId, mainAxisCenter);
|
|
34
|
+
return index === null ? null : {
|
|
35
|
+
kind: 'list',
|
|
36
|
+
zoneId: measured.zoneId,
|
|
37
|
+
index
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=listTarget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["screenToContent","computeListIndex","findListTargetIndex","rectContains","listTarget","state","registrations","root","pointer","x","y","measured","zones","registration","get","zoneId","revision","layout","layoutVersion","viewport","rect","vertical","orientation","center","grip","width","height","content","scrollOffset","offset","valid","mainAxisCenter","value","index","targetIndex","itemId","kind"],"sourceRoot":"../../../src","sources":["pointer/listTarget.ts"],"mappings":";;AAAA,SAASA,eAAe,QAAQ,4BAAyB;AAEzD,SAASC,gBAAgB,QAAQ,mBAAgB;AACjD,SAASC,mBAAmB,QAAQ,wBAAqB;AAEzD,SAASC,YAAY,QAAQ,eAAY;;AAEzC;AACA,OAAO,SAASC,UAAUA,CACxBC,KAAgB,EAChBC,aAGC,EACoB;EACrB,IAAI,CAACH,YAAY,CAACE,KAAK,CAACE,IAAI,EAAEF,KAAK,CAACG,OAAO,CAACC,CAAC,EAAEJ,KAAK,CAACG,OAAO,CAACE,CAAC,CAAC,EAAE,OAAO,IAAI;EAC5E,KAAK,MAAMC,QAAQ,IAAIN,KAAK,CAACO,KAAK,EAAE;IAClC,MAAMC,YAAY,GAAGP,aAAa,CAACQ,GAAG,CAACH,QAAQ,CAACI,MAAM,CAAC;IACvD,IACE,CAACF,YAAY,IACbA,YAAY,CAACG,QAAQ,KAAKX,KAAK,CAACW,QAAQ,IACxCH,YAAY,CAACI,MAAM,CAACD,QAAQ,KAAKX,KAAK,CAACW,QAAQ,IAC/CH,YAAY,CAACK,aAAa,KAAKP,QAAQ,CAACO,aAAa,IACrD,CAACf,YAAY,CAACQ,QAAQ,CAACQ,QAAQ,CAACC,IAAI,EAAEf,KAAK,CAACG,OAAO,CAACC,CAAC,EAAEJ,KAAK,CAACG,OAAO,CAACE,CAAC,CAAC,EAEvE;IACF,MAAMW,QAAQ,GAAGR,YAAY,CAACS,WAAW,KAAK,UAAU;IACxD,MAAMC,MAAM,GAAG;MACbd,CAAC,EAAEJ,KAAK,CAACG,OAAO,CAACC,CAAC,GAAGJ,KAAK,CAACmB,IAAI,CAACf,CAAC,GAAGJ,KAAK,CAACoB,KAAK,GAAG,CAAC;MACnDf,CAAC,EAAEL,KAAK,CAACG,OAAO,CAACE,CAAC,GAAGL,KAAK,CAACmB,IAAI,CAACd,CAAC,GAAGL,KAAK,CAACqB,MAAM,GAAG;IACrD,CAAC;IACD,MAAMC,OAAO,GAAG3B,eAAe,CAC7BuB,MAAM,EACN;MACEJ,QAAQ,EAAER,QAAQ,CAACQ,QAAQ;MAC3BS,YAAY,EAAEP,QAAQ,GAClB;QAAEZ,CAAC,EAAE,CAAC;QAAEC,CAAC,EAAEC,QAAQ,CAACkB;MAAO,CAAC,GAC5B;QAAEpB,CAAC,EAAEE,QAAQ,CAACkB,MAAM;QAAEnB,CAAC,EAAE;MAAE;IACjC,CAAC,EACD;MAAEM,QAAQ,EAAEX,KAAK,CAACW;IAAS,CAC7B,CAAC;IACD,IAAI,CAACW,OAAO,CAACG,KAAK,EAAE,OAAO,IAAI;IAC/B,MAAMC,cAAc,GAAGV,QAAQ,GAAGM,OAAO,CAACK,KAAK,CAACtB,CAAC,GAAGiB,OAAO,CAACK,KAAK,CAACvB,CAAC;IACnE,MAAMwB,KAAK,GAAGpB,YAAY,CAACqB,WAAW,GAClChC,mBAAmB,CACjBW,YAAY,CAACqB,WAAW,EACxB7B,KAAK,CAAC8B,MAAM,EACZJ,cACF,CAAC,GACD9B,gBAAgB,CAACY,YAAY,CAACI,MAAM,EAAEZ,KAAK,CAAC8B,MAAM,EAAEJ,cAAc,CAAC;IACvE,OAAOE,KAAK,KAAK,IAAI,GACjB,IAAI,GACJ;MAAEG,IAAI,EAAE,MAAM;MAAErB,MAAM,EAAEJ,QAAQ,CAACI,MAAM;MAAEkB;IAAM,CAAC;EACtD;EACA,OAAO,IAAI;AACb","ignoreList":[]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
export const DEFAULT_GRID_MOTION = Object.freeze({
|
|
4
|
+
durationMs: 180,
|
|
5
|
+
reduceMotion: 'system'
|
|
6
|
+
});
|
|
7
|
+
/** Validate before sharing animation settings with the UI runtime. */
|
|
8
|
+
export function resolveGridMotion(value) {
|
|
9
|
+
const fail = message => ({
|
|
10
|
+
valid: false,
|
|
11
|
+
issues: [{
|
|
12
|
+
code: 'invalid-configuration',
|
|
13
|
+
message
|
|
14
|
+
}]
|
|
15
|
+
});
|
|
16
|
+
if (value === undefined) return {
|
|
17
|
+
valid: true,
|
|
18
|
+
motion: {
|
|
19
|
+
...DEFAULT_GRID_MOTION
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) return fail('motion must be an object with durationMs and reduceMotion.');
|
|
23
|
+
const config = value;
|
|
24
|
+
if (Object.keys(config).some(key => key !== 'durationMs' && key !== 'reduceMotion')) return fail('motion supports only durationMs and reduceMotion.');
|
|
25
|
+
const durationMs = config.durationMs === undefined ? DEFAULT_GRID_MOTION.durationMs : config.durationMs;
|
|
26
|
+
if (typeof durationMs !== 'number' || !Number.isFinite(durationMs) || durationMs < 0) return fail('motion.durationMs must be a finite non-negative number.');
|
|
27
|
+
const reduceMotion = config.reduceMotion === undefined ? DEFAULT_GRID_MOTION.reduceMotion : config.reduceMotion;
|
|
28
|
+
if (reduceMotion !== 'system' && reduceMotion !== 'always' && reduceMotion !== 'never') return fail('motion.reduceMotion must be system, always or never.');
|
|
29
|
+
return {
|
|
30
|
+
valid: true,
|
|
31
|
+
motion: {
|
|
32
|
+
durationMs: reduceMotion === 'always' ? 0 : durationMs,
|
|
33
|
+
reduceMotion
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=motion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["DEFAULT_GRID_MOTION","Object","freeze","durationMs","reduceMotion","resolveGridMotion","value","fail","message","valid","issues","code","undefined","motion","Array","isArray","config","keys","some","key","Number","isFinite"],"sourceRoot":"../../../src","sources":["pointer/motion.ts"],"mappings":";;AAWA,OAAO,MAAMA,mBAAuD,GAClEC,MAAM,CAACC,MAAM,CAAC;EAAEC,UAAU,EAAE,GAAG;EAAEC,YAAY,EAAE;AAAS,CAAC,CAAC;AAM5D;AACA,OAAO,SAASC,iBAAiBA,CAACC,KAAc,EAAoB;EAClE,MAAMC,IAAI,GAAIC,OAAe,KAAwB;IACnDC,KAAK,EAAE,KAAK;IACZC,MAAM,EAAE,CAAC;MAAEC,IAAI,EAAE,uBAAuB;MAAEH;IAAQ,CAAC;EACrD,CAAC,CAAC;EACF,IAAIF,KAAK,KAAKM,SAAS,EACrB,OAAO;IAAEH,KAAK,EAAE,IAAI;IAAEI,MAAM,EAAE;MAAE,GAAGb;IAAoB;EAAE,CAAC;EAC5D,IAAI,CAACM,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAIQ,KAAK,CAACC,OAAO,CAACT,KAAK,CAAC,EAC7D,OAAOC,IAAI,CAAC,4DAA4D,CAAC;EAC3E,MAAMS,MAAM,GAAGV,KAAgC;EAC/C,IACEL,MAAM,CAACgB,IAAI,CAACD,MAAM,CAAC,CAACE,IAAI,CACtBC,GAAG,IAAIA,GAAG,KAAK,YAAY,IAAIA,GAAG,KAAK,cACzC,CAAC,EAED,OAAOZ,IAAI,CAAC,mDAAmD,CAAC;EAElE,MAAMJ,UAAU,GACda,MAAM,CAACb,UAAU,KAAKS,SAAS,GAC3BZ,mBAAmB,CAACG,UAAU,GAC9Ba,MAAM,CAACb,UAAU;EACvB,IACE,OAAOA,UAAU,KAAK,QAAQ,IAC9B,CAACiB,MAAM,CAACC,QAAQ,CAAClB,UAAU,CAAC,IAC5BA,UAAU,GAAG,CAAC,EAEd,OAAOI,IAAI,CAAC,yDAAyD,CAAC;EAExE,MAAMH,YAAY,GAChBY,MAAM,CAACZ,YAAY,KAAKQ,SAAS,GAC7BZ,mBAAmB,CAACI,YAAY,GAChCY,MAAM,CAACZ,YAAY;EACzB,IACEA,YAAY,KAAK,QAAQ,IACzBA,YAAY,KAAK,QAAQ,IACzBA,YAAY,KAAK,OAAO,EAExB,OAAOG,IAAI,CAAC,sDAAsD,CAAC;EAErE,OAAO;IACLE,KAAK,EAAE,IAAI;IACXI,MAAM,EAAE;MACNV,UAAU,EAAEC,YAAY,KAAK,QAAQ,GAAG,CAAC,GAAGD,UAAU;MACtDC;IACF;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Only validated numeric geometry crosses into the UI runtime. Coordinates
|
|
5
|
+
* form one typed array so a zone table crosses runtimes as a single buffer;
|
|
6
|
+
* the slot map is reused while a zone keeps the same items, so repeated
|
|
7
|
+
* candidates serialize only the coordinates.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export const EMPTY_DND_PRESENTATION = {
|
|
11
|
+
token: 0,
|
|
12
|
+
revision: 0,
|
|
13
|
+
zones: {}
|
|
14
|
+
};
|
|
15
|
+
export function presentationRect(presentation, zoneId, itemId) {
|
|
16
|
+
'worklet';
|
|
17
|
+
|
|
18
|
+
const zone = presentation?.zones[`#${zoneId}`];
|
|
19
|
+
if (zone === undefined) return undefined;
|
|
20
|
+
const slot = zone.slots[`#${itemId}`];
|
|
21
|
+
if (slot === undefined) return undefined;
|
|
22
|
+
const offset = slot * 4;
|
|
23
|
+
return {
|
|
24
|
+
x: zone.rects[offset],
|
|
25
|
+
y: zone.rects[offset + 1],
|
|
26
|
+
width: zone.rects[offset + 2],
|
|
27
|
+
height: zone.rects[offset + 3]
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Build a zone table from item rects. The previous table's slot map is kept
|
|
33
|
+
* when it lists exactly these items, so unchanged maps keep their identity.
|
|
34
|
+
*/
|
|
35
|
+
export function createZonePresentation(entries, previous) {
|
|
36
|
+
let slots = previous?.slots;
|
|
37
|
+
let count = slots ? Object.keys(slots).length : 0;
|
|
38
|
+
if (!slots || count !== entries.length || entries.some(([itemId]) => slots[`#${itemId}`] === undefined)) {
|
|
39
|
+
const next = {};
|
|
40
|
+
count = 0;
|
|
41
|
+
for (const [itemId] of entries) {
|
|
42
|
+
const key = `#${itemId}`;
|
|
43
|
+
if (next[key] === undefined) next[key] = count++;
|
|
44
|
+
}
|
|
45
|
+
slots = next;
|
|
46
|
+
}
|
|
47
|
+
const rects = new Float64Array(count * 4);
|
|
48
|
+
for (const [itemId, rect] of entries) {
|
|
49
|
+
const offset = slots[`#${itemId}`] * 4;
|
|
50
|
+
rects[offset] = rect.x;
|
|
51
|
+
rects[offset + 1] = rect.y;
|
|
52
|
+
rects[offset + 2] = rect.width;
|
|
53
|
+
rects[offset + 3] = rect.height;
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
slots,
|
|
57
|
+
rects
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** Build a zone table from a `#itemId` keyed rect record. */
|
|
62
|
+
export function zonePresentationFromRects(rects) {
|
|
63
|
+
return createZonePresentation(Object.entries(rects).map(([key, rect]) => [key.slice(1), rect]));
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** Read a zone table back as a `#itemId` keyed rect record. */
|
|
67
|
+
export function zonePresentationRects(zone) {
|
|
68
|
+
const result = {};
|
|
69
|
+
if (!zone) return result;
|
|
70
|
+
for (const [key, slot] of Object.entries(zone.slots)) {
|
|
71
|
+
const offset = slot * 4;
|
|
72
|
+
result[key] = {
|
|
73
|
+
x: zone.rects[offset],
|
|
74
|
+
y: zone.rects[offset + 1],
|
|
75
|
+
width: zone.rects[offset + 2],
|
|
76
|
+
height: zone.rects[offset + 3]
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
return result;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=dndPresentation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["EMPTY_DND_PRESENTATION","token","revision","zones","presentationRect","presentation","zoneId","itemId","zone","undefined","slot","slots","offset","x","rects","y","width","height","createZonePresentation","entries","previous","count","Object","keys","length","some","next","key","Float64Array","rect","zonePresentationFromRects","map","slice","zonePresentationRects","result"],"sourceRoot":"../../../src","sources":["runtime/dndPresentation.ts"],"mappings":"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","ignoreList":[]}
|