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":["orderedSlots","slotPosition","computeZoneLayout","rectanglesOverlap","isCellPosition","isCellSpan","isPositiveInteger","isRecord","validateValue","addIssue","issues","code","message","context","push","isRevision","value","Number","isSafeInteger","collectReference","itemId","itemIds","references","itemContext","has","add","collectGridIssues","zone","dimensionsValid","rows","columns","Array","isArray","placements","rectangles","placement","undefined","spanValid","span","positionValid","position","rectangle","row","col","cols","previous","itemSpan","collectOrderedIssues","slots","length","perRow","Math","ceil","forEach","index","expected","validateLayoutState","state","valid","revision","Set","items","item","id","zoneIds","zones","zoneId","kind","orientation","fromGridValue","validation","nextRevision","layout","strategy","map","data","toGridValue","unsupported","filter","layoutToGridValue","Map","get"],"sourceRoot":"../../../src","sources":["engine/layoutState.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { isRecord } from "./validation.js";
|
|
4
|
+
function isNonnegative(value) {
|
|
5
|
+
return typeof value === 'number' && Number.isFinite(value) && value >= 0;
|
|
6
|
+
}
|
|
7
|
+
function isRevision(value) {
|
|
8
|
+
return isNonnegative(value) && Number.isSafeInteger(value);
|
|
9
|
+
}
|
|
10
|
+
function isContext(context) {
|
|
11
|
+
return isRecord(context) && (context.orientation === 'vertical' || context.orientation === 'horizontal') && isNonnegative(context.crossSize) && isRevision(context.epoch ?? 0);
|
|
12
|
+
}
|
|
13
|
+
function sameContext(a, b) {
|
|
14
|
+
return a.orientation === b.orientation && a.crossSize === b.crossSize && (a.epoch ?? 0) === (b.epoch ?? 0);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Sizes belong to IDs, never array positions. A measurement is reusable after
|
|
19
|
+
* reordering, but only with matching orientation, cross-axis size and epoch.
|
|
20
|
+
* The measurement revision prevents delayed events from replacing newer sizes.
|
|
21
|
+
*/
|
|
22
|
+
export class ListSizeCache {
|
|
23
|
+
sizes = new Map();
|
|
24
|
+
get(itemId, context) {
|
|
25
|
+
if (typeof itemId !== 'string' || !isContext(context)) return undefined;
|
|
26
|
+
const cached = this.sizes.get(itemId);
|
|
27
|
+
return cached && sameContext(cached.context, context) ? cached.size : undefined;
|
|
28
|
+
}
|
|
29
|
+
set(itemId, size, context, measurementRevision = 0) {
|
|
30
|
+
if (typeof itemId !== 'string' || !isNonnegative(size) || !isContext(context) || !isRevision(measurementRevision)) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
const cached = this.sizes.get(itemId);
|
|
34
|
+
if (cached && ((context.epoch ?? 0) < (cached.context.epoch ?? 0) || (context.epoch ?? 0) === (cached.context.epoch ?? 0) && measurementRevision < cached.measurementRevision)) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
this.sizes.set(itemId, {
|
|
38
|
+
size,
|
|
39
|
+
context: {
|
|
40
|
+
...context
|
|
41
|
+
},
|
|
42
|
+
measurementRevision
|
|
43
|
+
});
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
prune(itemIds) {
|
|
47
|
+
const retained = new Set(itemIds);
|
|
48
|
+
for (const itemId of this.sizes.keys()) {
|
|
49
|
+
if (!retained.has(itemId)) this.sizes.delete(itemId);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
clear() {
|
|
53
|
+
this.sizes.clear();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function invalid(code, message, itemId) {
|
|
57
|
+
return {
|
|
58
|
+
valid: false,
|
|
59
|
+
issues: [{
|
|
60
|
+
code,
|
|
61
|
+
message,
|
|
62
|
+
...(itemId === undefined ? {} : {
|
|
63
|
+
itemId
|
|
64
|
+
})
|
|
65
|
+
}]
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** Compute content rects from one order snapshot without modifying the cache. */
|
|
70
|
+
export function computeListLayout(input) {
|
|
71
|
+
if (!isRecord(input) || !Array.isArray(input.itemIds)) {
|
|
72
|
+
return invalid('invalid-structure', 'List item IDs must be an array.');
|
|
73
|
+
}
|
|
74
|
+
if (input.orientation !== 'vertical' && input.orientation !== 'horizontal') {
|
|
75
|
+
return invalid('invalid-orientation', 'List orientation must be vertical or horizontal.');
|
|
76
|
+
}
|
|
77
|
+
if (!isRevision(input.revision)) {
|
|
78
|
+
return invalid('invalid-revision', 'Revision must be a nonnegative safe integer.');
|
|
79
|
+
}
|
|
80
|
+
if (!isNonnegative(input.crossSize) || !isNonnegative(input.estimatedItemSize) || !isNonnegative(input.gap ?? 0) || !isNonnegative(input.paddingStart ?? 0) || !isNonnegative(input.paddingEnd ?? 0) || !isRevision(input.measurementEpoch ?? 0) || input.itemSize !== undefined && typeof input.itemSize !== 'function' && !isNonnegative(input.itemSize) || input.cache !== undefined && !(input.cache instanceof ListSizeCache)) {
|
|
81
|
+
return invalid('invalid-configuration', 'List sizes, gap and padding must be finite and nonnegative; the cache and measurement epoch must be valid.');
|
|
82
|
+
}
|
|
83
|
+
const knownIds = new Set();
|
|
84
|
+
for (const itemId of input.itemIds) {
|
|
85
|
+
if (typeof itemId !== 'string') {
|
|
86
|
+
return invalid('invalid-structure', 'Every list item ID must be a string.');
|
|
87
|
+
}
|
|
88
|
+
if (knownIds.has(itemId)) {
|
|
89
|
+
return invalid('duplicate-reference', 'List item IDs must be unique.', itemId);
|
|
90
|
+
}
|
|
91
|
+
knownIds.add(itemId);
|
|
92
|
+
}
|
|
93
|
+
const context = {
|
|
94
|
+
orientation: input.orientation,
|
|
95
|
+
crossSize: input.crossSize,
|
|
96
|
+
epoch: input.measurementEpoch ?? 0
|
|
97
|
+
};
|
|
98
|
+
const entries = [];
|
|
99
|
+
let start = input.paddingStart ?? 0;
|
|
100
|
+
for (let index = 0; index < input.itemIds.length; index += 1) {
|
|
101
|
+
const itemId = input.itemIds[index];
|
|
102
|
+
const measured = input.cache?.get(itemId, context);
|
|
103
|
+
let declared;
|
|
104
|
+
try {
|
|
105
|
+
declared = typeof input.itemSize === 'function' ? input.itemSize(itemId, index) : input.itemSize;
|
|
106
|
+
} catch {
|
|
107
|
+
return invalid('invalid-configuration', 'The item size callback failed.', itemId);
|
|
108
|
+
}
|
|
109
|
+
if (input.itemSize !== undefined && !isNonnegative(declared)) {
|
|
110
|
+
return invalid('invalid-configuration', 'Every item size must be finite and nonnegative.', itemId);
|
|
111
|
+
}
|
|
112
|
+
const size = declared ?? measured ?? input.estimatedItemSize;
|
|
113
|
+
const source = measured === size ? 'measured' : 'estimated';
|
|
114
|
+
const rect = input.orientation === 'vertical' ? {
|
|
115
|
+
x: 0,
|
|
116
|
+
y: start,
|
|
117
|
+
width: input.crossSize,
|
|
118
|
+
height: size
|
|
119
|
+
} : {
|
|
120
|
+
x: start,
|
|
121
|
+
y: 0,
|
|
122
|
+
width: size,
|
|
123
|
+
height: input.crossSize
|
|
124
|
+
};
|
|
125
|
+
entries.push({
|
|
126
|
+
itemId,
|
|
127
|
+
index,
|
|
128
|
+
start,
|
|
129
|
+
size,
|
|
130
|
+
source,
|
|
131
|
+
rect,
|
|
132
|
+
revision: input.revision
|
|
133
|
+
});
|
|
134
|
+
start += size + (index < input.itemIds.length - 1 ? input.gap ?? 0 : 0);
|
|
135
|
+
if (!Number.isFinite(start)) {
|
|
136
|
+
return invalid('invalid-configuration', 'List content size must remain finite.');
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
const totalSize = start + (input.paddingEnd ?? 0);
|
|
140
|
+
if (!Number.isFinite(totalSize)) {
|
|
141
|
+
return invalid('invalid-configuration', 'List content size must remain finite.');
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
valid: true,
|
|
145
|
+
orientation: input.orientation,
|
|
146
|
+
crossSize: input.crossSize,
|
|
147
|
+
revision: input.revision,
|
|
148
|
+
entries,
|
|
149
|
+
totalSize
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Return an insertion index in the order AFTER removing the active item.
|
|
155
|
+
* Thresholds are the original non-active item centers, including the active
|
|
156
|
+
* footprint and all original gaps. Never measure a compressed preview here.
|
|
157
|
+
* An ID absent from the target list is allowed for cross-list insertion.
|
|
158
|
+
*/
|
|
159
|
+
export function computeListIndex(layout, activeItemId, center) {
|
|
160
|
+
if (!Number.isFinite(center)) return null;
|
|
161
|
+
const activeIndex = layout.entries.findIndex(entry => entry.itemId === activeItemId);
|
|
162
|
+
let index = 0;
|
|
163
|
+
for (const entry of layout.entries) {
|
|
164
|
+
if (entry.itemId === activeItemId) continue;
|
|
165
|
+
const threshold = entry.start + entry.size / 2;
|
|
166
|
+
if (center > threshold || center === threshold && entry.index < activeIndex) {
|
|
167
|
+
index += 1;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return index;
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["isRecord","isNonnegative","value","Number","isFinite","isRevision","isSafeInteger","isContext","context","orientation","crossSize","epoch","sameContext","a","b","ListSizeCache","sizes","Map","get","itemId","undefined","cached","size","set","measurementRevision","prune","itemIds","retained","Set","keys","has","delete","clear","invalid","code","message","valid","issues","computeListLayout","input","Array","isArray","revision","estimatedItemSize","gap","paddingStart","paddingEnd","measurementEpoch","itemSize","cache","knownIds","add","entries","start","index","length","measured","declared","source","rect","x","y","width","height","push","totalSize","computeListIndex","layout","activeItemId","center","activeIndex","findIndex","entry","threshold"],"sourceRoot":"../../../src","sources":["engine/list.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A detached snapshot shared with UI worklets: rebuild it whenever the layout
|
|
5
|
+
* geometry changes. Numeric columns are typed arrays so each crosses runtimes
|
|
6
|
+
* as one buffer copy, and unchanged columns keep their identity so the runtime
|
|
7
|
+
* serialization cache can reuse them.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
function compareBoundaries(a, b) {
|
|
11
|
+
if (a.threshold < b.threshold) return -1;
|
|
12
|
+
if (a.threshold > b.threshold) return 1;
|
|
13
|
+
if (a.entryIndex < b.entryIndex) return -1;
|
|
14
|
+
if (a.entryIndex > b.entryIndex) return 1;
|
|
15
|
+
return 0;
|
|
16
|
+
}
|
|
17
|
+
function sameSlots(slots, keys) {
|
|
18
|
+
return Object.keys(slots).length === keys.length && keys.every((key, slot) => slots[key] === slot);
|
|
19
|
+
}
|
|
20
|
+
function sameColumn(previous, next) {
|
|
21
|
+
if (previous.length !== next.length) return false;
|
|
22
|
+
for (let index = 0; index < next.length; index += 1) if (previous[index] !== next[index]) return false;
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Prepare once on the JS thread, then share this plain data with UI worklets.
|
|
28
|
+
* Original centers retain the active item's footprint; only the returned
|
|
29
|
+
* insertion index excludes it. No references to the mutable layout are kept.
|
|
30
|
+
* Passing the previous index of the same zone reuses its unchanged columns.
|
|
31
|
+
*/
|
|
32
|
+
export function createListTargetIndex(layout, previous) {
|
|
33
|
+
const boundaries = [];
|
|
34
|
+
const slotByKey = new Map();
|
|
35
|
+
const keys = [];
|
|
36
|
+
const positionList = [];
|
|
37
|
+
let ordered = true;
|
|
38
|
+
for (let position = 0; position < layout.entries.length; position += 1) {
|
|
39
|
+
const entry = layout.entries[position];
|
|
40
|
+
// Prefixing protects arbitrary item IDs such as "__proto__" on both runtimes.
|
|
41
|
+
const itemKey = `$${entry.itemId}`;
|
|
42
|
+
let slot = slotByKey.get(itemKey);
|
|
43
|
+
if (slot === undefined) {
|
|
44
|
+
slot = keys.length;
|
|
45
|
+
slotByKey.set(itemKey, slot);
|
|
46
|
+
keys.push(itemKey);
|
|
47
|
+
positionList.push(position);
|
|
48
|
+
}
|
|
49
|
+
const threshold = entry.start + entry.size / 2;
|
|
50
|
+
// NaN thresholds never pass the original comparison for any center.
|
|
51
|
+
if (Number.isNaN(threshold)) continue;
|
|
52
|
+
const boundary = {
|
|
53
|
+
threshold,
|
|
54
|
+
entryIndex: Number.isNaN(entry.index) ? Infinity : entry.index,
|
|
55
|
+
slot
|
|
56
|
+
};
|
|
57
|
+
const last = boundaries[boundaries.length - 1];
|
|
58
|
+
if (last && compareBoundaries(last, boundary) > 0) ordered = false;
|
|
59
|
+
boundaries.push(boundary);
|
|
60
|
+
}
|
|
61
|
+
// Layouts produced by computeListLayout are already ordered: O(n) preparation.
|
|
62
|
+
// Sorting also preserves the public scan's meaning for caller-edited layouts.
|
|
63
|
+
if (!ordered) boundaries.sort(compareBoundaries);
|
|
64
|
+
const thresholds = new Float64Array(boundaries.length);
|
|
65
|
+
const entryIndices = new Float64Array(boundaries.length);
|
|
66
|
+
const ranks = new Int32Array(keys.length).fill(-1);
|
|
67
|
+
let additionalRanks;
|
|
68
|
+
for (let rank = 0; rank < boundaries.length; rank += 1) {
|
|
69
|
+
const boundary = boundaries[rank];
|
|
70
|
+
thresholds[rank] = boundary.threshold;
|
|
71
|
+
entryIndices[rank] = boundary.entryIndex;
|
|
72
|
+
if (ranks[boundary.slot] < 0) ranks[boundary.slot] = rank;else ((additionalRanks ??= {})[keys[boundary.slot]] ??= []).push(rank);
|
|
73
|
+
}
|
|
74
|
+
const positions = Int32Array.from(positionList);
|
|
75
|
+
const reusable = previous?.revision === layout.revision ? previous : undefined;
|
|
76
|
+
return {
|
|
77
|
+
revision: layout.revision,
|
|
78
|
+
thresholds,
|
|
79
|
+
entryIndices: reusable && sameColumn(reusable.entryIndices, entryIndices) ? reusable.entryIndices : entryIndices,
|
|
80
|
+
slots: reusable && sameSlots(reusable.slots, keys) ? reusable.slots : Object.fromEntries(keys.map((key, slot) => [key, slot])),
|
|
81
|
+
positions: reusable && sameColumn(reusable.positions, positions) ? reusable.positions : positions,
|
|
82
|
+
ranks: reusable && sameColumn(reusable.ranks, ranks) ? reusable.ranks : ranks,
|
|
83
|
+
...(additionalRanks ? {
|
|
84
|
+
additionalRanks
|
|
85
|
+
} : {})
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** Find an insertion index in O(log n), without allocation or layout scanning. */
|
|
90
|
+
export function findListTargetIndex(index, activeItemId, center) {
|
|
91
|
+
'worklet';
|
|
92
|
+
|
|
93
|
+
if (!Number.isFinite(center)) return null;
|
|
94
|
+
const activeKey = activeItemId === null ? null : `$${activeItemId}`;
|
|
95
|
+
const slot = activeKey === null ? undefined : index.slots[activeKey];
|
|
96
|
+
const activePosition = slot === undefined ? -1 : index.positions[slot];
|
|
97
|
+
const activeRank = slot === undefined ? -1 : index.ranks[slot];
|
|
98
|
+
let low = 0;
|
|
99
|
+
let high = index.thresholds.length;
|
|
100
|
+
while (low < high) {
|
|
101
|
+
const middle = Math.floor((low + high) / 2);
|
|
102
|
+
const threshold = index.thresholds[middle];
|
|
103
|
+
if (center > threshold || center === threshold && index.entryIndices[middle] < activePosition) {
|
|
104
|
+
low = middle + 1;
|
|
105
|
+
} else {
|
|
106
|
+
high = middle;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
let result = low;
|
|
110
|
+
if (activeRank >= 0 && activeRank < low) result -= 1;
|
|
111
|
+
// Valid layouts have unique IDs. Preserve scan semantics for caller-edited
|
|
112
|
+
// duplicate IDs too, without making the normal lookup linear.
|
|
113
|
+
const additionalRanks = activeKey === null ? undefined : index.additionalRanks?.[activeKey];
|
|
114
|
+
if (additionalRanks) {
|
|
115
|
+
let first = 0;
|
|
116
|
+
let last = additionalRanks.length;
|
|
117
|
+
while (first < last) {
|
|
118
|
+
const middle = Math.floor((first + last) / 2);
|
|
119
|
+
if (additionalRanks[middle] < low) first = middle + 1;else last = middle;
|
|
120
|
+
}
|
|
121
|
+
result -= first;
|
|
122
|
+
}
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=listIndex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["compareBoundaries","a","b","threshold","entryIndex","sameSlots","slots","keys","Object","length","every","key","slot","sameColumn","previous","next","index","createListTargetIndex","layout","boundaries","slotByKey","Map","positionList","ordered","position","entries","entry","itemKey","itemId","get","undefined","set","push","start","size","Number","isNaN","boundary","Infinity","last","sort","thresholds","Float64Array","entryIndices","ranks","Int32Array","fill","additionalRanks","rank","positions","from","reusable","revision","fromEntries","map","findListTargetIndex","activeItemId","center","isFinite","activeKey","activePosition","activeRank","low","high","middle","Math","floor","result","first"],"sourceRoot":"../../../src","sources":["engine/listIndex.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { diagnosticNow, emitDiagnostic } from "../diagnostics.js";
|
|
4
|
+
import { DEFAULT_SEARCH_BUDGET } from "../defaults.js";
|
|
5
|
+
import { hasSameLayout } from "./sameLayout.js";
|
|
6
|
+
import { validateGridMovementPolicy } from "./movementPolicy.js";
|
|
7
|
+
import { resolveSpatialMove } from "./spatial.js";
|
|
8
|
+
import { isCellPosition, isPositiveInteger, isRecord, validateValue } from "./validation.js";
|
|
9
|
+
function invalid(code, message, ids = {}) {
|
|
10
|
+
return {
|
|
11
|
+
status: 'invalid',
|
|
12
|
+
issues: [{
|
|
13
|
+
code,
|
|
14
|
+
message,
|
|
15
|
+
...ids
|
|
16
|
+
}]
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Compute one atomic candidate from the input snapshot. The engine remembers no
|
|
22
|
+
* earlier preview; the session decides whether that snapshot is the committed
|
|
23
|
+
* value or the latest same-zone preview. Drop permission, pointer geometry,
|
|
24
|
+
* sessions and animation belong to the controller.
|
|
25
|
+
*/
|
|
26
|
+
export function computeMove(input, onDiagnostic) {
|
|
27
|
+
if (typeof onDiagnostic !== 'function') return calculateMove(input);
|
|
28
|
+
const timings = [];
|
|
29
|
+
const startedAt = diagnosticNow();
|
|
30
|
+
let result;
|
|
31
|
+
try {
|
|
32
|
+
result = calculateMove(input, timings);
|
|
33
|
+
return result;
|
|
34
|
+
} finally {
|
|
35
|
+
timings.push({
|
|
36
|
+
type: 'timing',
|
|
37
|
+
name: 'compute-move',
|
|
38
|
+
durationMs: diagnosticNow() - startedAt,
|
|
39
|
+
status: result?.status ?? 'error',
|
|
40
|
+
...(result && 'attempts' in result ? {
|
|
41
|
+
attempts: result.attempts
|
|
42
|
+
} : {})
|
|
43
|
+
});
|
|
44
|
+
// Deliver after the calculation so observer cost is not part of its timing.
|
|
45
|
+
for (const event of timings) emitDiagnostic(onDiagnostic, event);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function timedValidation(value, name, timings) {
|
|
49
|
+
const startedAt = diagnosticNow();
|
|
50
|
+
const result = validateValue(value);
|
|
51
|
+
timings.push({
|
|
52
|
+
type: 'timing',
|
|
53
|
+
name,
|
|
54
|
+
durationMs: diagnosticNow() - startedAt,
|
|
55
|
+
status: result.valid ? 'valid' : 'invalid'
|
|
56
|
+
});
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
function calculateMove(input, timings) {
|
|
60
|
+
if (!isRecord(input)) return invalid('invalid-structure', 'Expected a move input object.');
|
|
61
|
+
const validation = timings ? timedValidation(input.value, 'input-validation', timings) : validateValue(input.value);
|
|
62
|
+
if (!validation.valid) return {
|
|
63
|
+
status: 'invalid',
|
|
64
|
+
issues: validation.issues
|
|
65
|
+
};
|
|
66
|
+
const policyValidation = validateGridMovementPolicy(input.movementPolicy);
|
|
67
|
+
if (!policyValidation.valid) return {
|
|
68
|
+
status: 'invalid',
|
|
69
|
+
issues: policyValidation.issues
|
|
70
|
+
};
|
|
71
|
+
const searchBudget = input.searchBudget === undefined ? DEFAULT_SEARCH_BUDGET : input.searchBudget;
|
|
72
|
+
if (!isPositiveInteger(searchBudget)) return invalid('invalid-budget', 'searchBudget must be a positive safe integer.');
|
|
73
|
+
if (typeof input.itemId !== 'string') return invalid('invalid-structure', 'itemId must be a string.');
|
|
74
|
+
const {
|
|
75
|
+
value,
|
|
76
|
+
itemId,
|
|
77
|
+
to
|
|
78
|
+
} = input;
|
|
79
|
+
if (!isRecord(to) || typeof to.zoneId !== 'string') return invalid('invalid-structure', 'A target zone is required.', {
|
|
80
|
+
itemId
|
|
81
|
+
});
|
|
82
|
+
const source = value.zones.find(zone => zone.items.some(item => item.id === itemId));
|
|
83
|
+
const target = value.zones.find(zone => zone.id === to.zoneId);
|
|
84
|
+
if (!source || !target) return invalid('invalid-structure', 'The item and target zone must exist.', {
|
|
85
|
+
itemId,
|
|
86
|
+
zoneId: to.zoneId
|
|
87
|
+
});
|
|
88
|
+
if (to.strategy !== target.strategy) return invalid('invalid-structure', 'Target strategy must match its zone.', {
|
|
89
|
+
itemId,
|
|
90
|
+
zoneId: target.id
|
|
91
|
+
});
|
|
92
|
+
const sourceIndex = source.items.findIndex(item => item.id === itemId);
|
|
93
|
+
const active = source.items[sourceIndex];
|
|
94
|
+
const from = source.strategy === 'ordered' ? {
|
|
95
|
+
zoneId: source.id,
|
|
96
|
+
strategy: 'ordered',
|
|
97
|
+
index: sourceIndex
|
|
98
|
+
} : {
|
|
99
|
+
zoneId: source.id,
|
|
100
|
+
strategy: 'spatial',
|
|
101
|
+
position: source.items[sourceIndex].position
|
|
102
|
+
};
|
|
103
|
+
const sameZone = source.id === target.id;
|
|
104
|
+
let nextTarget;
|
|
105
|
+
let resolvedTo = to;
|
|
106
|
+
let attempts = 0;
|
|
107
|
+
if (target.strategy === 'ordered' && to.strategy === 'ordered') {
|
|
108
|
+
const remaining = target.items.filter(item => item.id !== itemId);
|
|
109
|
+
if (!Number.isSafeInteger(to.index) || to.index < 0 || to.index > remaining.length) return invalid('invalid-position', 'Insertion index must address the array after removal.', {
|
|
110
|
+
itemId,
|
|
111
|
+
zoneId: target.id
|
|
112
|
+
});
|
|
113
|
+
const slotsPerRow = Math.floor(target.columns / target.itemSpan.cols);
|
|
114
|
+
const slotRows = Math.floor(target.rows / target.itemSpan.rows);
|
|
115
|
+
if (active.span.rows !== target.itemSpan.rows || active.span.cols !== target.itemSpan.cols || slotsPerRow === 0 || slotRows === 0 || Math.ceil((remaining.length + 1) / slotsPerRow) > slotRows) return {
|
|
116
|
+
status: 'impossible',
|
|
117
|
+
attempts
|
|
118
|
+
};
|
|
119
|
+
// Spatial position has no meaning in an ordered zone. Preserve opaque data by reference.
|
|
120
|
+
const inserted = {
|
|
121
|
+
id: active.id,
|
|
122
|
+
span: active.span,
|
|
123
|
+
...(active.placement === undefined ? {} : {
|
|
124
|
+
placement: active.placement
|
|
125
|
+
}),
|
|
126
|
+
data: active.data
|
|
127
|
+
};
|
|
128
|
+
remaining.splice(to.index, 0, inserted);
|
|
129
|
+
nextTarget = {
|
|
130
|
+
...target,
|
|
131
|
+
items: remaining
|
|
132
|
+
};
|
|
133
|
+
} else if (target.strategy === 'spatial' && to.strategy === 'spatial') {
|
|
134
|
+
if (!isCellPosition(to.position)) return invalid('invalid-position', 'A spatial target requires safe integer coordinates.', {
|
|
135
|
+
itemId,
|
|
136
|
+
zoneId: target.id
|
|
137
|
+
});
|
|
138
|
+
if (to.position.row < 0 || to.position.col < 0 || to.position.row > target.rows - active.span.rows || to.position.col > target.columns - active.span.cols) return {
|
|
139
|
+
status: 'impossible',
|
|
140
|
+
attempts
|
|
141
|
+
};
|
|
142
|
+
const moved = {
|
|
143
|
+
id: active.id,
|
|
144
|
+
span: active.span,
|
|
145
|
+
...(active.placement === undefined ? {} : {
|
|
146
|
+
placement: active.placement
|
|
147
|
+
}),
|
|
148
|
+
data: active.data,
|
|
149
|
+
position: {
|
|
150
|
+
...to.position
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
const result = resolveSpatialMove({
|
|
154
|
+
items: target.items.filter(item => item.id !== itemId),
|
|
155
|
+
active: moved,
|
|
156
|
+
origin: sameZone && source.strategy === 'spatial' ? source.items[sourceIndex] : undefined,
|
|
157
|
+
rows: target.rows,
|
|
158
|
+
columns: target.columns,
|
|
159
|
+
searchBudget,
|
|
160
|
+
movementPolicy: input.movementPolicy
|
|
161
|
+
});
|
|
162
|
+
if (result.status !== 'ok') return result;
|
|
163
|
+
attempts = result.attempts;
|
|
164
|
+
const placements = new Map(result.placements.map(item => [item.id, item]));
|
|
165
|
+
resolvedTo = {
|
|
166
|
+
zoneId: target.id,
|
|
167
|
+
strategy: 'spatial',
|
|
168
|
+
position: placements.get(itemId).position
|
|
169
|
+
};
|
|
170
|
+
const items = target.items.map(item => placements.get(item.id));
|
|
171
|
+
if (!sameZone) items.push(placements.get(itemId));
|
|
172
|
+
nextTarget = {
|
|
173
|
+
...target,
|
|
174
|
+
items
|
|
175
|
+
};
|
|
176
|
+
} else {
|
|
177
|
+
return invalid('invalid-structure', 'Unsupported target strategy.', {
|
|
178
|
+
itemId
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
const zones = value.zones.map(zone => {
|
|
182
|
+
if (zone.id === target.id) return nextTarget;
|
|
183
|
+
if (zone.id !== source.id) return zone;
|
|
184
|
+
const remaining = {
|
|
185
|
+
...zone
|
|
186
|
+
};
|
|
187
|
+
remaining.items = zone.items.filter(item => item.id !== itemId);
|
|
188
|
+
return remaining;
|
|
189
|
+
});
|
|
190
|
+
// Deliberately omit the previous proposalResponse from every candidate.
|
|
191
|
+
const nextValue = {
|
|
192
|
+
zones
|
|
193
|
+
};
|
|
194
|
+
const candidateValidation = timings ? timedValidation(nextValue, 'candidate-validation', timings) : validateValue(nextValue);
|
|
195
|
+
if (!candidateValidation.valid) return {
|
|
196
|
+
status: 'invalid',
|
|
197
|
+
issues: candidateValidation.issues
|
|
198
|
+
};
|
|
199
|
+
const changed = !hasSameLayout(value, nextValue);
|
|
200
|
+
if (value.revision !== undefined) {
|
|
201
|
+
if (changed && value.revision === Number.MAX_SAFE_INTEGER) return invalid('invalid-configuration', 'The layout revision cannot exceed a safe integer.');
|
|
202
|
+
nextValue.revision = value.revision + Number(changed);
|
|
203
|
+
}
|
|
204
|
+
return {
|
|
205
|
+
status: 'ok',
|
|
206
|
+
value: changed ? nextValue : {
|
|
207
|
+
...nextValue,
|
|
208
|
+
zones: value.zones
|
|
209
|
+
},
|
|
210
|
+
from,
|
|
211
|
+
to: resolvedTo,
|
|
212
|
+
changed,
|
|
213
|
+
attempts
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=move.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["diagnosticNow","emitDiagnostic","DEFAULT_SEARCH_BUDGET","hasSameLayout","validateGridMovementPolicy","resolveSpatialMove","isCellPosition","isPositiveInteger","isRecord","validateValue","invalid","code","message","ids","status","issues","computeMove","input","onDiagnostic","calculateMove","timings","startedAt","result","push","type","name","durationMs","attempts","event","timedValidation","value","valid","validation","policyValidation","movementPolicy","searchBudget","undefined","itemId","to","zoneId","source","zones","find","zone","items","some","item","id","target","strategy","sourceIndex","findIndex","active","from","index","position","sameZone","nextTarget","resolvedTo","remaining","filter","Number","isSafeInteger","length","slotsPerRow","Math","floor","columns","itemSpan","cols","slotRows","rows","span","ceil","inserted","placement","data","splice","row","col","moved","origin","placements","Map","map","get","nextValue","candidateValidation","changed","revision","MAX_SAFE_INTEGER"],"sourceRoot":"../../../src","sources":["engine/move.ts"],"mappings":"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","ignoreList":[]}
|