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,27 @@
|
|
|
1
|
+
import type { LayoutLocation, LayoutState, LayoutValidationIssue, MoveProposal, ProposalResponse } from '../contracts.js';
|
|
2
|
+
import { type ApprovalResult } from './approval.js';
|
|
3
|
+
export type DndValue<T> = LayoutState<T> & {
|
|
4
|
+
proposalResponse?: ProposalResponse;
|
|
5
|
+
};
|
|
6
|
+
export type DndProposal<T> = MoveProposal<LayoutState<T>, LayoutLocation>;
|
|
7
|
+
export type DndProposalResult<T> = ApprovalResult<DndValue<T>, LayoutValidationIssue>;
|
|
8
|
+
/** Validate the complete atomic proposal before applying a matching revision response. */
|
|
9
|
+
export declare function respondToDndProposal<T>(current: DndValue<T>, proposal: DndProposal<T>, accepted: boolean): DndProposalResult<T>;
|
|
10
|
+
/**
|
|
11
|
+
* Internal entry for a caller that has already validated `current` and holds
|
|
12
|
+
* it immutably since (the session keeps its committed value). The proposal and
|
|
13
|
+
* its complete candidate are still checked in full.
|
|
14
|
+
*/
|
|
15
|
+
export declare function respondToValidatedDndProposal<T>(current: DndValue<T>, proposal: DndProposal<T>, accepted: boolean): DndProposalResult<T>;
|
|
16
|
+
export type DndStateUpdate<T> = LayoutState<T> | ((current: DndValue<T>) => LayoutState<T>);
|
|
17
|
+
export type DndStateStore<T> = {
|
|
18
|
+
getSnapshot(): DndValue<T>;
|
|
19
|
+
subscribe(listener: () => void): () => void;
|
|
20
|
+
onChange(next: DndValue<T>, proposal: DndProposal<T>): void;
|
|
21
|
+
/** External edits advance the revision and clear the previous proposal response. */
|
|
22
|
+
setValue(next: DndStateUpdate<T>): void;
|
|
23
|
+
respond(proposal: DndProposal<T>, accepted: boolean): DndProposalResult<T>;
|
|
24
|
+
};
|
|
25
|
+
/** The same synchronous approval path for React state and external stores. */
|
|
26
|
+
export declare function createDndStateStore<T>(initialValue: LayoutState<T>): DndStateStore<T>;
|
|
27
|
+
//# sourceMappingURL=dndState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dndState.d.ts","sourceRoot":"","sources":["../../../../src/controller/dndState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EACjB,MAAM,iBAAc,CAAC;AAItB,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,eAAY,CAAC;AAGpB,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG;IACzC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC,CAAC;AACF,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;AAC1E,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,cAAc,CAC/C,QAAQ,CAAC,CAAC,CAAC,EACX,qBAAqB,CACtB,CAAC;AAiFF,0FAA0F;AAC1F,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EACpB,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,EACxB,QAAQ,EAAE,OAAO,GAChB,iBAAiB,CAAC,CAAC,CAAC,CAQtB;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,CAAC,EAC7C,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EACpB,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,EACxB,QAAQ,EAAE,OAAO,GAChB,iBAAiB,CAAC,CAAC,CAAC,CAQtB;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,IAC1B,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI;IAC7B,WAAW,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC3B,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAC5C,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC5D,oFAAoF;IACpF,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACxC,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;CAC5E,CAAC;AAQF,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,GAC3B,aAAa,CAAC,CAAC,CAAC,CAqClB"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { LayoutLocation, LayoutState, LayoutValidationIssue } from '../contracts.js';
|
|
2
|
+
import type { DragEndEvent, GridChange, GridItem, GridValue, ItemLocation, ValidationIssue } from '../types.js';
|
|
3
|
+
import type { DndDragEndEvent } from './dndSession.js';
|
|
4
|
+
import type { DndProposal, DndValue } from './dndState.js';
|
|
5
|
+
/**
|
|
6
|
+
* Maps the `GridValue` API of `GridController` onto the layout-state API of
|
|
7
|
+
* the shared provider: values, locations, changes, end events and validation
|
|
8
|
+
* issues. Every function is pure; the component keeps only React state.
|
|
9
|
+
*/
|
|
10
|
+
/** The grid API's location for a layout location; ordered grids use slot indices. */
|
|
11
|
+
export declare function toItemLocation<T>(state: LayoutState<T>, location: LayoutLocation): ItemLocation;
|
|
12
|
+
/** The layout location for a grid API location, or null when it names no slot. */
|
|
13
|
+
export declare function toLayoutLocation<T>(state: LayoutState<T>, location: ItemLocation): LayoutLocation | null;
|
|
14
|
+
/** The legacy change record of a proposal; the base revision is optional API. */
|
|
15
|
+
export declare function gridChangeOf<T>(proposal: DndProposal<T>, includeBaseRevision: boolean): GridChange;
|
|
16
|
+
export declare function gridEndEvent<T>(event: DndDragEndEvent<T>, includeBaseRevision: boolean): DragEndEvent;
|
|
17
|
+
/** Layout-state issues in the grid API's vocabulary. */
|
|
18
|
+
export declare function gridIssues(issues: ReadonlyArray<Pick<LayoutValidationIssue, 'message' | 'zoneId' | 'itemId'> & {
|
|
19
|
+
code: string;
|
|
20
|
+
}>): ValidationIssue[];
|
|
21
|
+
export type ConvertedGridValue<T> = {
|
|
22
|
+
/** Null when the grid value is invalid; `issues` then explains why. */
|
|
23
|
+
state: DndValue<T> | null;
|
|
24
|
+
issues: ValidationIssue[];
|
|
25
|
+
revision: number;
|
|
26
|
+
};
|
|
27
|
+
export type PreviousConversion<T> = {
|
|
28
|
+
value: GridValue<T>;
|
|
29
|
+
revision: number;
|
|
30
|
+
state: DndValue<T> | null;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Convert a committed grid value for the provider. Values without a revision
|
|
34
|
+
* receive a synthetic one that advances whenever the layout changes, so the
|
|
35
|
+
* provider's revision protocol still detects edits; a response that omits its
|
|
36
|
+
* base revision is attributed to the proposal it answers. Item objects whose
|
|
37
|
+
* data is unchanged keep their identity, so cells and the approval reducer see
|
|
38
|
+
* stable objects; acceptance itself compares layout and revision only, so an
|
|
39
|
+
* owner may rebuild an item's data for its new zone.
|
|
40
|
+
*/
|
|
41
|
+
export declare function convertGridValue<T>(value: GridValue<T>, previous: PreviousConversion<T> | null, pendingBaseRevision: number | undefined): ConvertedGridValue<T>;
|
|
42
|
+
/** The caller's own item objects by ID, so render callbacks see stable identities. */
|
|
43
|
+
export declare function gridItemIndex<T>(value: GridValue<T>): Map<string, GridItem<T>>;
|
|
44
|
+
//# sourceMappingURL=gridAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gridAdapter.d.ts","sourceRoot":"","sources":["../../../../src/controller/gridAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,cAAc,EACd,WAAW,EACX,qBAAqB,EACtB,MAAM,iBAAc,CAAC;AAStB,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,SAAS,EACT,YAAY,EAEZ,eAAe,EAChB,MAAM,aAAU,CAAC;AAElB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAc,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,eAAY,CAAC;AAExD;;;;GAIG;AAEH,qFAAqF;AACrF,wBAAgB,cAAc,CAAC,CAAC,EAC9B,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EACrB,QAAQ,EAAE,cAAc,GACvB,YAAY,CAmBd;AAED,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EACrB,QAAQ,EAAE,YAAY,GACrB,cAAc,GAAG,IAAI,CA6BvB;AAED,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,CAAC,EAC5B,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,EACxB,mBAAmB,EAAE,OAAO,GAC3B,UAAU,CAQZ;AAED,wBAAgB,YAAY,CAAC,CAAC,EAC5B,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,EACzB,mBAAmB,EAAE,OAAO,GAC3B,YAAY,CAqCd;AAmBD,wDAAwD;AACxD,wBAAgB,UAAU,CACxB,MAAM,EAAE,aAAa,CACnB,IAAI,CAAC,qBAAqB,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC,GAAG;IAC7D,IAAI,EAAE,MAAM,CAAC;CACd,CACF,GACA,eAAe,EAAE,CASnB;AAED,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI;IAClC,uEAAuE;IACvE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI;IAClC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,EACnB,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,IAAI,EACtC,mBAAmB,EAAE,MAAM,GAAG,SAAS,GACtC,kBAAkB,CAAC,CAAC,CAAC,CAgCvB;AAiBD,sFAAsF;AACtF,wBAAgB,aAAa,CAAC,CAAC,EAC7B,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,GAClB,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAK1B"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { GridChange, GridProposal, GridValue, RevisionedGridValue, ValidationIssue } from '../types.js';
|
|
2
|
+
import { type ApprovalResult } from './approval.js';
|
|
3
|
+
export type GridProposalResult<T> = ApprovalResult<RevisionedGridValue<T>, ValidationIssue>;
|
|
4
|
+
/** A response only changes the exact revision on which the complete proposal was based. */
|
|
5
|
+
export declare function respondToGridProposal<T>(current: RevisionedGridValue<T>, proposal: GridProposal<T>, accepted: boolean): GridProposalResult<T>;
|
|
6
|
+
export type GridStateUpdate<T> = GridValue<T> | ((current: RevisionedGridValue<T>) => GridValue<T>);
|
|
7
|
+
export type GridStateStore<T> = {
|
|
8
|
+
getSnapshot(): RevisionedGridValue<T>;
|
|
9
|
+
subscribe(listener: () => void): () => void;
|
|
10
|
+
/** Synchronously accept valid controller proposals. Use canDrop for synchronous rejection. */
|
|
11
|
+
onChange(next: GridValue<T>, change: GridChange): void;
|
|
12
|
+
/** External edits advance the revision and clear any previous response. */
|
|
13
|
+
setValue(next: GridStateUpdate<T>): void;
|
|
14
|
+
respond(proposal: GridProposal<T>, accepted: boolean): GridProposalResult<T>;
|
|
15
|
+
};
|
|
16
|
+
/** React-independent store; the state hook and external stores share the response reducer. */
|
|
17
|
+
export declare function createGridStateStore<T>(initialValue: GridValue<T>): GridStateStore<T>;
|
|
18
|
+
//# sourceMappingURL=gridState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gridState.d.ts","sourceRoot":"","sources":["../../../../src/controller/gridState.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,SAAS,EAET,mBAAmB,EACnB,eAAe,EAChB,MAAM,aAAU,CAAC;AAElB,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,eAAY,CAAC;AAGpB,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI,cAAc,CAChD,mBAAmB,CAAC,CAAC,CAAC,EACtB,eAAe,CAChB,CAAC;AAmGF,2FAA2F;AAC3F,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAC/B,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,EACzB,QAAQ,EAAE,OAAO,GAChB,kBAAkB,CAAC,CAAC,CAAC,CAEvB;AAED,MAAM,MAAM,eAAe,CAAC,CAAC,IAC3B,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;IAC9B,WAAW,IAAI,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACtC,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAC5C,8FAA8F;IAC9F,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IACvD,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACzC,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;CAC9E,CAAC;AAQF,8FAA8F;AAC9F,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,GACzB,cAAc,CAAC,CAAC,CAAC,CAoCnB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { LayoutLocation, LayoutState } from '../contracts.js';
|
|
2
|
+
import type { GridValue, ItemLocation } from '../types.js';
|
|
3
|
+
/** Where a validated grid value places the item, or null when it is absent. */
|
|
4
|
+
export declare function itemLocation<T>(value: GridValue<T>, itemId: string): ItemLocation | null;
|
|
5
|
+
export declare function sameItemLocation(first: ItemLocation, second: ItemLocation | null): boolean;
|
|
6
|
+
/** Where a validated layout state places the item, or null when it is absent. */
|
|
7
|
+
export declare function layoutLocation<T>(value: LayoutState<T>, itemId: string): LayoutLocation | null;
|
|
8
|
+
export declare function sameLayoutLocation(first: LayoutLocation, second: LayoutLocation | null): boolean;
|
|
9
|
+
//# sourceMappingURL=locations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locations.d.ts","sourceRoot":"","sources":["../../../../src/controller/locations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,iBAAc,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAU,CAAC;AAExD,+EAA+E;AAC/E,wBAAgB,YAAY,CAAC,CAAC,EAC5B,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,EACnB,MAAM,EAAE,MAAM,GACb,YAAY,GAAG,IAAI,CAarB;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,YAAY,GAAG,IAAI,GAC1B,OAAO,CAQT;AAED,iFAAiF;AACjF,wBAAgB,cAAc,CAAC,CAAC,EAC9B,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EACrB,MAAM,EAAE,MAAM,GACb,cAAc,GAAG,IAAI,CAcvB;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,cAAc,GAAG,IAAI,GAC5B,OAAO,CAQT"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cumulative preview path of one drag session inside one zone.
|
|
3
|
+
*
|
|
4
|
+
* Every valid, permitted candidate the session displays becomes the baseline
|
|
5
|
+
* for the next target in the same zone, so an exchange made on the way stays
|
|
6
|
+
* where the user saw it (moving a widget A → B → C swaps at C against the
|
|
7
|
+
* layout shown at B, as launchers do). Returning to a target visited earlier
|
|
8
|
+
* restores exactly that layout, and the item's committed location always
|
|
9
|
+
* restores the committed layout. The path is dropped whenever the display
|
|
10
|
+
* returns to the committed value: leaving every zone, entering another zone,
|
|
11
|
+
* a rejected or failed candidate, or a candidate equal to the committed layout.
|
|
12
|
+
*/
|
|
13
|
+
type PreviewStep<Location, Value> = {
|
|
14
|
+
/** The logical target that produced the step. */
|
|
15
|
+
target: Location;
|
|
16
|
+
/** The item's committed location, reported as the origin of every candidate. */
|
|
17
|
+
from: Location;
|
|
18
|
+
/** Where the candidate placed the dragged item. */
|
|
19
|
+
to: Location;
|
|
20
|
+
value: Value;
|
|
21
|
+
};
|
|
22
|
+
export type PreviewBaseline<Location, Value> = {
|
|
23
|
+
kind: 'restored';
|
|
24
|
+
step: PreviewStep<Location, Value>;
|
|
25
|
+
} | {
|
|
26
|
+
kind: 'compute';
|
|
27
|
+
base: Value;
|
|
28
|
+
/** True when the base is an earlier preview rather than the committed value. */
|
|
29
|
+
cumulative: boolean;
|
|
30
|
+
};
|
|
31
|
+
export declare class PreviewPath<Location, Value> {
|
|
32
|
+
private readonly sameLocation;
|
|
33
|
+
/** Re-attach a stored layout to a recommit that changed only item data. */
|
|
34
|
+
private readonly rebase;
|
|
35
|
+
private steps;
|
|
36
|
+
private committed;
|
|
37
|
+
constructor(sameLocation: (first: Location, second: Location) => boolean,
|
|
38
|
+
/** Re-attach a stored layout to a recommit that changed only item data. */
|
|
39
|
+
rebase: (value: Value, committed: Value) => Value);
|
|
40
|
+
get length(): number;
|
|
41
|
+
reset(): void;
|
|
42
|
+
/** Choose the layout a new target builds on, or the earlier step it restores. */
|
|
43
|
+
resolve(committed: Value, origin: Location, target: Location): PreviewBaseline<Location, Value>;
|
|
44
|
+
/** Record a displayed candidate that differs from the committed layout. */
|
|
45
|
+
push(committed: Value, step: PreviewStep<Location, Value>): void;
|
|
46
|
+
private sync;
|
|
47
|
+
}
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=previewPath.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"previewPath.d.ts","sourceRoot":"","sources":["../../../../src/controller/previewPath.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,KAAK,WAAW,CAAC,QAAQ,EAAE,KAAK,IAAI;IAClC,iDAAiD;IACjD,MAAM,EAAE,QAAQ,CAAC;IACjB,gFAAgF;IAChF,IAAI,EAAE,QAAQ,CAAC;IACf,mDAAmD;IACnD,EAAE,EAAE,QAAQ,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,eAAe,CAAC,QAAQ,EAAE,KAAK,IACvC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;CAAE,GACxD;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,KAAK,CAAC;IACZ,gFAAgF;IAChF,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEN,qBAAa,WAAW,CAAC,QAAQ,EAAE,KAAK;IAKpC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAI7B,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,MAAM;IATzB,OAAO,CAAC,KAAK,CAAsC;IACnD,OAAO,CAAC,SAAS,CAAsB;gBAGpB,YAAY,EAAE,CAC7B,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,QAAQ,KACb,OAAO;IACZ,2EAA2E;IAC1D,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,KAAK,KAAK;IAGpE,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,KAAK,IAAI,IAAI;IAIb,iFAAiF;IACjF,OAAO,CACL,SAAS,EAAE,KAAK,EAChB,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,QAAQ,GACf,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC;IAmBnC,2EAA2E;IAC3E,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,IAAI;IAKhE,OAAO,CAAC,IAAI;CAOb"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { type DiagnosticObserver } from '../diagnostics.js';
|
|
2
|
+
import type { CancelReason, DragStartEvent, DropDecision, GridDiagnosticEvent } from '../types.js';
|
|
3
|
+
import { CoordinatorBase } from './coordinatorBase.js';
|
|
4
|
+
import { PreviewPath } from './previewPath.js';
|
|
5
|
+
/** Engine outcome normalized for both value shapes. */
|
|
6
|
+
export type CandidateResult<Value, Location> = {
|
|
7
|
+
status: 'ok';
|
|
8
|
+
value: Value;
|
|
9
|
+
from: Location;
|
|
10
|
+
to: Location;
|
|
11
|
+
changed: boolean;
|
|
12
|
+
} | {
|
|
13
|
+
status: 'impossible' | 'unresolved' | 'invalid';
|
|
14
|
+
};
|
|
15
|
+
type OkCandidate<Value, Location> = Extract<CandidateResult<Value, Location>, {
|
|
16
|
+
status: 'ok';
|
|
17
|
+
}>;
|
|
18
|
+
export type CandidateFailure = 'unresolvable' | 'search-budget' | 'invalid-target';
|
|
19
|
+
export declare function candidateFailure(status: 'impossible' | 'unresolved' | 'invalid'): CandidateFailure;
|
|
20
|
+
/** Snapshot fields every coordinator publishes; subclasses add their own. */
|
|
21
|
+
export type CoreSnapshot<Value> = {
|
|
22
|
+
value: Value | null;
|
|
23
|
+
displayValue: Value | null;
|
|
24
|
+
phase: string;
|
|
25
|
+
sessionId: string | null;
|
|
26
|
+
itemId: string | null;
|
|
27
|
+
sourceZoneId: string | null;
|
|
28
|
+
targetZoneId: string | null;
|
|
29
|
+
seq: number;
|
|
30
|
+
validity: 'pending' | 'valid' | 'invalid';
|
|
31
|
+
disabled: boolean;
|
|
32
|
+
};
|
|
33
|
+
/** Session fields the shared candidate flow reads and writes. */
|
|
34
|
+
export type CoreSession<Value, Location> = DragStartEvent & {
|
|
35
|
+
seq: number;
|
|
36
|
+
target: Location | null;
|
|
37
|
+
path: PreviewPath<Location, Value>;
|
|
38
|
+
deadline?: number;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* The drag session logic both coordinators share: request guards, the
|
|
42
|
+
* cumulative preview baseline, engine dispatch, the permission callback with
|
|
43
|
+
* its reentrancy guard, candidate publication and the final proposal. The
|
|
44
|
+
* value shape, engine call, snapshot fields and terminal transitions
|
|
45
|
+
* (cancel, unchanged, handoff) come from the subclass.
|
|
46
|
+
*/
|
|
47
|
+
export declare abstract class SessionCore<Value, Location extends {
|
|
48
|
+
zoneId: string;
|
|
49
|
+
}, Snapshot extends CoreSnapshot<Value>, Session extends CoreSession<Value, Location>, Proposal> extends CoordinatorBase<Snapshot> {
|
|
50
|
+
protected session: Session | null;
|
|
51
|
+
protected lastValidValue: Value | null;
|
|
52
|
+
protected disposed: boolean;
|
|
53
|
+
private diagnosticEvents;
|
|
54
|
+
private flushingDiagnostics;
|
|
55
|
+
protected constructor(initial: Snapshot, lastValidValue: Value | null);
|
|
56
|
+
/** The consumer's optional JS-only observer; exceptions never affect a drag. */
|
|
57
|
+
protected abstract diagnosticObserver(): DiagnosticObserver | undefined;
|
|
58
|
+
protected queueDiagnostic(observer: DiagnosticObserver, event: GridDiagnosticEvent): void;
|
|
59
|
+
/** Diagnostics queued during a batch are delivered after its subscribers. */
|
|
60
|
+
protected batchFinished(): void;
|
|
61
|
+
private flushDiagnostics;
|
|
62
|
+
protected lifecycle(name: Extract<GridDiagnosticEvent, {
|
|
63
|
+
type: 'lifecycle';
|
|
64
|
+
}>['name'], session: Session): void;
|
|
65
|
+
/** Time one engine or policy step for the observer, including failures. */
|
|
66
|
+
protected timed<R>(session: Session, name: 'compute-move' | 'policy', run: () => R, status: (result: R) => string, attempts?: (result: R) => number | undefined): R;
|
|
67
|
+
protected event(session: Session): DragStartEvent;
|
|
68
|
+
/** The live dragging session when the request sequence is acceptable. */
|
|
69
|
+
protected acceptsRequest(sessionId: string, seq: number, final: boolean): Session | null;
|
|
70
|
+
protected abstract location(value: Value, itemId: string): Location | null;
|
|
71
|
+
/** Spatial targets accumulate previews; ordered/list targets never do. */
|
|
72
|
+
protected abstract isSpatial(target: Location): boolean;
|
|
73
|
+
/** A failure detail that rejects the target before any computation. */
|
|
74
|
+
protected abstract precheck(session: Session, target: Location): string | null;
|
|
75
|
+
protected abstract compute(session: Session, target: Location, baseline: {
|
|
76
|
+
base: Value;
|
|
77
|
+
cumulative: boolean;
|
|
78
|
+
}, committed: Value, from: Location | null): CandidateResult<Value, Location>;
|
|
79
|
+
/** Whether a failed candidate leaves the earlier preview on screen. */
|
|
80
|
+
protected abstract keepsPreview(session: Session, target: Location, status: 'impossible' | 'unresolved' | 'invalid'): boolean;
|
|
81
|
+
protected abstract prepareProposal(session: Session, result: OkCandidate<Value, Location>): Proposal;
|
|
82
|
+
/** Runs the permission callback and validates its shape; may throw. */
|
|
83
|
+
protected abstract askPolicy(session: Session, committed: Value, proposal: Proposal, result: OkCandidate<Value, Location>): DropDecision;
|
|
84
|
+
protected abstract policyFailed(session: Session, seq: number, error: unknown): void;
|
|
85
|
+
/** Re-check a changed candidate after the callback ran; true when it stands. */
|
|
86
|
+
protected abstract revalidate(session: Session, committed: Value, proposal: Proposal, result: OkCandidate<Value, Location>): boolean;
|
|
87
|
+
protected abstract showCandidate(result: OkCandidate<Value, Location>): void;
|
|
88
|
+
protected abstract showFailure(committed: Value | null, failure: string, keepPreview: boolean): void;
|
|
89
|
+
protected abstract expectedPhase(final: boolean): string;
|
|
90
|
+
protected abstract sessionEnded(session: Session): boolean;
|
|
91
|
+
protected abstract cancelWith(reason: CancelReason, error?: unknown, policyReason?: string): void;
|
|
92
|
+
protected abstract finishUnchanged(session: Session): void;
|
|
93
|
+
/** Store the proposal, arm the deadline and enter awaiting-response. */
|
|
94
|
+
protected abstract registerProposal(session: Session, proposal: Proposal, result: OkCandidate<Value, Location>): void;
|
|
95
|
+
protected abstract emitChange(proposal: Proposal, result: OkCandidate<Value, Location>): void;
|
|
96
|
+
protected abstract changeFailed(session: Session, error: unknown): void;
|
|
97
|
+
/**
|
|
98
|
+
* Compute, permit and publish the candidate for `session.target`. The
|
|
99
|
+
* subclass has already stored the target and its sequence on the session.
|
|
100
|
+
*/
|
|
101
|
+
protected calculateCandidate(session: Session, final: boolean): void;
|
|
102
|
+
}
|
|
103
|
+
/** Shape-check a permission callback result; the caller reports a throw. */
|
|
104
|
+
export declare function validatedDecision(decision: unknown): DropDecision;
|
|
105
|
+
export {};
|
|
106
|
+
//# sourceMappingURL=sessionCore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionCore.d.ts","sourceRoot":"","sources":["../../../../src/controller/sessionCore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { LayoutState } from '../contracts.js';
|
|
2
|
+
import { type DndStateStore, type DndValue } from './dndState.js';
|
|
3
|
+
export type DndState<T> = Pick<DndStateStore<T>, 'onChange' | 'setValue' | 'respond'> & {
|
|
4
|
+
value: DndValue<T>;
|
|
5
|
+
};
|
|
6
|
+
/** Own normalized state and synchronously acknowledge proposals; initialValue is read once. */
|
|
7
|
+
export declare function useDndState<T>(initialValue: LayoutState<T> | (() => LayoutState<T>)): DndState<T>;
|
|
8
|
+
//# sourceMappingURL=useDndState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDndState.d.ts","sourceRoot":"","sources":["../../../../src/controller/useDndState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAc,CAAC;AAEhD,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,QAAQ,EACd,MAAM,eAAY,CAAC;AAGpB,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,IAAI,CAC5B,aAAa,CAAC,CAAC,CAAC,EAChB,UAAU,GAAG,UAAU,GAAG,SAAS,CACpC,GAAG;IACF,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;CACpB,CAAC;AAEF,+FAA+F;AAC/F,wBAAgB,WAAW,CAAC,CAAC,EAC3B,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,WAAW,CAAC,CAAC,CAAC,CAAC,GACpD,QAAQ,CAAC,CAAC,CAAC,CAMb"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { GridValue, RevisionedGridValue } from '../types.js';
|
|
2
|
+
import { type GridStateStore } from './gridState.js';
|
|
3
|
+
export type GridState<T> = Pick<GridStateStore<T>, 'onChange' | 'setValue' | 'respond'> & {
|
|
4
|
+
value: RevisionedGridValue<T>;
|
|
5
|
+
};
|
|
6
|
+
/** Own grid state and acknowledge proposals synchronously; initialValue is read once. */
|
|
7
|
+
export declare function useGridState<T>(initialValue: GridValue<T> | (() => GridValue<T>)): GridState<T>;
|
|
8
|
+
//# sourceMappingURL=useGridState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useGridState.d.ts","sourceRoot":"","sources":["../../../../src/controller/useGridState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,aAAU,CAAC;AAE/D,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,gBAAa,CAAC;AAGxE,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,IAAI,CAC7B,cAAc,CAAC,CAAC,CAAC,EACjB,UAAU,GAAG,UAAU,GAAG,SAAS,CACpC,GAAG;IACF,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;CAC/B,CAAC;AAEF,yFAAyF;AACzF,wBAAgB,YAAY,CAAC,CAAC,EAC5B,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC,GAChD,SAAS,CAAC,CAAC,CAAC,CAMd"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
type StateStore<Value, OnChange, SetValue, Respond> = {
|
|
2
|
+
getSnapshot(): Value;
|
|
3
|
+
subscribe(listener: () => void): () => void;
|
|
4
|
+
onChange: OnChange;
|
|
5
|
+
setValue: SetValue;
|
|
6
|
+
respond: Respond;
|
|
7
|
+
};
|
|
8
|
+
/** Own one approval store for the component's lifetime and subscribe to it. */
|
|
9
|
+
export declare function useStoreState<Value, OnChange, SetValue, Respond>(create: () => StateStore<Value, OnChange, SetValue, Respond>): {
|
|
10
|
+
value: Value;
|
|
11
|
+
onChange: OnChange;
|
|
12
|
+
setValue: SetValue;
|
|
13
|
+
respond: Respond;
|
|
14
|
+
};
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=useStoreState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useStoreState.d.ts","sourceRoot":"","sources":["../../../../src/controller/useStoreState.ts"],"names":[],"mappings":"AAEA,KAAK,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,IAAI;IACpD,WAAW,IAAI,KAAK,CAAC;IACrB,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAC5C,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAC9D,MAAM,EAAE,MAAM,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,GAC3D;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAa5E"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Maximum search steps per grid calculation; exhaustion is not proof of no space. */
|
|
2
|
+
export declare const DEFAULT_SEARCH_BUDGET = 10000;
|
|
3
|
+
/** Long press duration in milliseconds. */
|
|
4
|
+
export declare const DEFAULT_ACTIVATION_DELAY_MS = 250;
|
|
5
|
+
//# sourceMappingURL=defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/defaults.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAC5C,2CAA2C;AAC3C,eAAO,MAAM,2BAA2B,MAAM,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { GridDiagnosticEvent } from './types.js';
|
|
2
|
+
export type DiagnosticObserver = (event: GridDiagnosticEvent) => void;
|
|
3
|
+
export type TimingDiagnostic = Extract<GridDiagnosticEvent, {
|
|
4
|
+
type: 'timing';
|
|
5
|
+
}>;
|
|
6
|
+
export declare function diagnosticNow(): number;
|
|
7
|
+
/** Observers receive newly-created scalar payloads and cannot fail a drag. */
|
|
8
|
+
export declare function emitDiagnostic(observer: DiagnosticObserver, event: GridDiagnosticEvent): void;
|
|
9
|
+
//# sourceMappingURL=diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../../src/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAS,CAAC;AAEnD,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;AACtE,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,CAAC;AAEhF,wBAAgB,aAAa,IAAI,MAAM,CAKtC;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,mBAAmB,GACzB,IAAI,CAMN"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { GridPlacement } from '../contracts.js';
|
|
2
|
+
import type { CellPosition, CellSpan } from '../types.js';
|
|
3
|
+
export declare function samePlacement(first: GridPlacement, second: GridPlacement): boolean;
|
|
4
|
+
/** Slot grid of an ordered zone: reading-order cells of one item span. */
|
|
5
|
+
export type OrderedSlots = {
|
|
6
|
+
perRow: number;
|
|
7
|
+
rows: number;
|
|
8
|
+
};
|
|
9
|
+
export declare function orderedSlots(zone: {
|
|
10
|
+
rows: number;
|
|
11
|
+
columns: number;
|
|
12
|
+
}, itemSpan: CellSpan): OrderedSlots;
|
|
13
|
+
/** The cell an ordered slot starts at; the caller guarantees `perRow > 0`. */
|
|
14
|
+
export declare function slotPosition(index: number, itemSpan: CellSpan, perRow: number): CellPosition;
|
|
15
|
+
/** The reading-order slot a position starts, or null when it is not a slot origin. */
|
|
16
|
+
export declare function slotIndex(position: CellPosition, itemSpan: CellSpan, perRow: number): number | null;
|
|
17
|
+
/**
|
|
18
|
+
* Give ordered placements their reading-order positions, reusing an existing
|
|
19
|
+
* placement object whenever the item keeps the same slot.
|
|
20
|
+
*/
|
|
21
|
+
export declare function packOrderedPlacements(placements: readonly GridPlacement[], itemSpan: CellSpan, perRow: number, previous?: readonly GridPlacement[]): GridPlacement[];
|
|
22
|
+
//# sourceMappingURL=gridPlacements.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gridPlacements.d.ts","sourceRoot":"","sources":["../../../../src/engine/gridPlacements.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAc,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAU,CAAC;AAEvD,wBAAgB,aAAa,CAC3B,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,aAAa,GACpB,OAAO,CAST;AAED,0EAA0E;AAC1E,MAAM,MAAM,YAAY,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5D,wBAAgB,YAAY,CAC1B,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EACvC,QAAQ,EAAE,QAAQ,GACjB,YAAY,CAKd;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,GACb,YAAY,CAKd;AAED,sFAAsF;AACtF,wBAAgB,SAAS,CACvB,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,GACb,MAAM,GAAG,IAAI,CAYf;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,SAAS,aAAa,EAAE,EACpC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,SAAS,aAAa,EAAO,GACtC,aAAa,EAAE,CAcjB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export { computeZoneLayout } from './layout.js';
|
|
2
|
+
export { resolveListVirtualization } from '../adapters/virtualizedList.js';
|
|
3
|
+
export type { ListVirtualizationOptions, ListVirtualizationResult, } from '../adapters/virtualizedList.js';
|
|
4
|
+
export { computeListLayout, computeListIndex, ListSizeCache } from './list.js';
|
|
5
|
+
export type { ListLayout, ListLayoutEntry, ListLayoutInput, ListLayoutResult, ListMeasurementContext, } from './list.js';
|
|
6
|
+
export { computeLayoutMove } from './layoutMove.js';
|
|
7
|
+
export type { GridItemLayout, LayoutMoveInput, LayoutMoveResult, } from './layoutMove.js';
|
|
8
|
+
export { createDndStateStore, respondToDndProposal, } from '../controller/dndState.js';
|
|
9
|
+
export type { DndValue, DndProposal, DndProposalResult, DndStateStore, DndStateUpdate, } from '../controller/dndState.js';
|
|
10
|
+
export { computeAutoScroll, constrainDragPoint, validateAutoScrollOptions, } from '../adapters/scroll.js';
|
|
11
|
+
export type { AutoScrollInput, AutoScrollOptions, AutoScrollOptionsValidationResult, AutoScrollResult, DragAxis, } from '../adapters/scroll.js';
|
|
12
|
+
export type * from '../contracts.js';
|
|
13
|
+
export { validateLayoutState, fromGridValue, toGridValue } from './layoutState.js';
|
|
14
|
+
export { screenToContent, contentToScreen, screenRectToContent, contentRectToScreen, validateRectMeasurement, } from '../adapters/coordinates.js';
|
|
15
|
+
export { DEFAULT_SEARCH_BUDGET } from '../defaults.js';
|
|
16
|
+
export { createGridStateStore, respondToGridProposal, } from '../controller/gridState.js';
|
|
17
|
+
export type { GridStateStore, GridStateUpdate, GridProposalResult, } from '../controller/gridState.js';
|
|
18
|
+
export type { GridProposal, RevisionedGridValue } from '../types.js';
|
|
19
|
+
export { computeMove } from './move.js';
|
|
20
|
+
export { DEFAULT_GRID_MOVEMENT_POLICY, HOME_GRID_MOVEMENT_POLICY, resolveGridMovementPolicy, validateGridMovementPolicy, } from './movementPolicy.js';
|
|
21
|
+
export type { GridMoveCandidate, GridMovementPolicy, ResolvedGridMovementPolicy, } from './movementPolicy.js';
|
|
22
|
+
export type { OrderedIndexInput, OrderedIndexResult } from './orderedTarget.js';
|
|
23
|
+
export { computeOrderedIndex } from './orderedTarget.js';
|
|
24
|
+
export { packItems } from './pack.js';
|
|
25
|
+
export { hasSameLayout } from './sameLayout.js';
|
|
26
|
+
export { validateValue } from './validation.js';
|
|
27
|
+
export type { CellPosition, CellSpan, GridItem, GridValue, GridZone, ItemLocation, ItemPlacement, MoveInput, MoveResult, OrderedZone, PackInput, PackResult, PositionedItem, SpatialZone, ValidationIssue, ValidationResult, ZoneLayoutResult, } from '../types.js';
|
|
28
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/engine/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAU,CAAC;AAC7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAA6B,CAAC;AACxE,YAAY,EACV,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,gCAA6B,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,WAAQ,CAAC;AAC5E,YAAY,EACV,UAAU,EACV,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,WAAQ,CAAC;AAChB,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAc,CAAC;AACjD,YAAY,EACV,cAAc,EACd,eAAe,EACf,gBAAgB,GACjB,MAAM,iBAAc,CAAC;AACtB,OAAO,EACL,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,2BAAwB,CAAC;AAChC,YAAY,EACV,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,cAAc,GACf,MAAM,2BAAwB,CAAC;AAChC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,uBAAoB,CAAC;AAC5B,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,iCAAiC,EACjC,gBAAgB,EAChB,QAAQ,GACT,MAAM,uBAAoB,CAAC;AAC5B,mBAAmB,iBAAc,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAe,CAAC;AAChF,OAAO,EACL,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,4BAAyB,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAa,CAAC;AACpD,OAAO,EACL,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,4BAAyB,CAAC;AACjC,YAAY,EACV,cAAc,EACd,eAAe,EACf,kBAAkB,GACnB,MAAM,4BAAyB,CAAC;AACjC,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAU,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAQ,CAAC;AACrC,OAAO,EACL,4BAA4B,EAC5B,yBAAyB,EACzB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,qBAAkB,CAAC;AAC1B,YAAY,EACV,iBAAiB,EACjB,kBAAkB,EAClB,0BAA0B,GAC3B,MAAM,qBAAkB,CAAC;AAC1B,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,oBAAiB,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAiB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAQ,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAc,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAc,CAAC;AAC7C,YAAY,EACV,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,SAAS,EACT,UAAU,EACV,WAAW,EACX,SAAS,EACT,UAAU,EACV,cAAc,EACd,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,aAAU,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { GridZone, ZoneLayoutResult } from '../types.js';
|
|
2
|
+
/** Compute cell positions only. This never packs or changes the supplied zone. */
|
|
3
|
+
export declare function computeZoneLayout<T>(zone: GridZone<T>): ZoneLayoutResult<T>;
|
|
4
|
+
//# sourceMappingURL=layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../../src/engine/layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAU,CAAC;AAI3D,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAuB3E"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { LayoutConversionIssue, LayoutLocation, LayoutState } from '../contracts.js';
|
|
2
|
+
import type { CellSpan, ItemPlacement } from '../types.js';
|
|
3
|
+
import { type GridMovementPolicy } from './movementPolicy.js';
|
|
4
|
+
/** Caller-owned target grid geometry; list membership never stores a grid span. */
|
|
5
|
+
export type GridItemLayout = {
|
|
6
|
+
span: CellSpan;
|
|
7
|
+
placement?: ItemPlacement;
|
|
8
|
+
};
|
|
9
|
+
export type LayoutMoveInput<T> = {
|
|
10
|
+
value: LayoutState<T>;
|
|
11
|
+
itemId: string;
|
|
12
|
+
/** List indices address the target order after removing the active item. */
|
|
13
|
+
to: LayoutLocation;
|
|
14
|
+
/** Required on list-to-grid moves; optional conversion on cross-grid moves. */
|
|
15
|
+
gridItem?: GridItemLayout;
|
|
16
|
+
movementPolicy?: GridMovementPolicy;
|
|
17
|
+
searchBudget?: number;
|
|
18
|
+
};
|
|
19
|
+
export type LayoutMoveResult<T> = {
|
|
20
|
+
status: 'ok';
|
|
21
|
+
value: LayoutState<T>;
|
|
22
|
+
from: LayoutLocation;
|
|
23
|
+
to: LayoutLocation;
|
|
24
|
+
changed: boolean;
|
|
25
|
+
attempts: number;
|
|
26
|
+
} | {
|
|
27
|
+
status: 'impossible' | 'unresolved';
|
|
28
|
+
attempts: number;
|
|
29
|
+
} | {
|
|
30
|
+
status: 'invalid';
|
|
31
|
+
issues: LayoutConversionIssue[];
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Compute an atomic move from one complete baseline. The existing spatial
|
|
35
|
+
* solver owns grid movement policy and bounded search; list membership drops
|
|
36
|
+
* grid geometry. Opaque data is never read, copied, or passed to the solver.
|
|
37
|
+
*/
|
|
38
|
+
export declare function computeLayoutMove<T>(input: LayoutMoveInput<T>): LayoutMoveResult<T>;
|
|
39
|
+
/**
|
|
40
|
+
* Internal entry for a caller that has already passed `input.value` through
|
|
41
|
+
* `validateLayoutState` and holds it immutably since (the session keeps its
|
|
42
|
+
* committed value). Only that baseline pass is skipped; the complete candidate
|
|
43
|
+
* is still validated before it is returned.
|
|
44
|
+
*/
|
|
45
|
+
export declare function computeValidatedLayoutMove<T>(input: LayoutMoveInput<T>): LayoutMoveResult<T>;
|
|
46
|
+
//# sourceMappingURL=layoutMove.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layoutMove.d.ts","sourceRoot":"","sources":["../../../../src/engine/layoutMove.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,qBAAqB,EACrB,cAAc,EACd,WAAW,EAEZ,MAAM,iBAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAkB,MAAM,aAAU,CAAC;AAUxE,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,qBAAkB,CAAC;AAS1B,mFAAmF;AACnF,MAAM,MAAM,cAAc,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,SAAS,CAAC,EAAE,aAAa,CAAA;CAAE,CAAC;AAE3E,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAC/B,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,EAAE,EAAE,cAAc,CAAC;IACnB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAC1B;IACE,MAAM,EAAE,IAAI,CAAC;IACb,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,EAAE,cAAc,CAAC;IACrB,EAAE,EAAE,cAAc,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,GACD;IAAE,MAAM,EAAE,YAAY,GAAG,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,qBAAqB,EAAE,CAAA;CAAE,CAAC;AAwC3D;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GACxB,gBAAgB,CAAC,CAAC,CAAC,CAQrB;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,EAC1C,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GACxB,gBAAgB,CAAC,CAAC,CAAC,CAyRrB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { LayoutConversionResult, LayoutState, LayoutValidationResult } from '../contracts.js';
|
|
2
|
+
import type { GridValue } from '../types.js';
|
|
3
|
+
/** Validates the complete candidate without inspecting data or modifying inputs. */
|
|
4
|
+
export declare function validateLayoutState<T>(state: LayoutState<T>): LayoutValidationResult;
|
|
5
|
+
/**
|
|
6
|
+
* Imports existing spatial/ordered grids into explicit cell placements. Ordered
|
|
7
|
+
* grids keep their rendered positions and their `itemSpan`, so `toGridValue`
|
|
8
|
+
* restores the ordered strategy; they do not become one-dimensional lists.
|
|
9
|
+
* Proposal responses are session metadata and are not copied into layout state.
|
|
10
|
+
*/
|
|
11
|
+
export declare function fromGridValue<T>(value: GridValue<T>, revision?: number): LayoutConversionResult<LayoutState<T>>;
|
|
12
|
+
/**
|
|
13
|
+
* Exports all-grid state: zones with `itemSpan` become ordered grids again and
|
|
14
|
+
* the rest spatial grids; list zones require the future list adapter.
|
|
15
|
+
*/
|
|
16
|
+
export declare function toGridValue<T>(state: LayoutState<T>): LayoutConversionResult<GridValue<T>>;
|
|
17
|
+
/**
|
|
18
|
+
* Internal unchecked export for a state that only contains grid zones and was
|
|
19
|
+
* validated on the way in (the controller adapter converts every candidate).
|
|
20
|
+
*/
|
|
21
|
+
export declare function layoutToGridValue<T>(state: LayoutState<T>): GridValue<T>;
|
|
22
|
+
//# sourceMappingURL=layoutState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layoutState.d.ts","sourceRoot":"","sources":["../../../../src/engine/layoutState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,sBAAsB,EACtB,WAAW,EAEX,sBAAsB,EACvB,MAAM,iBAAc,CAAC;AACtB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAU,CAAC;AAsP1C,oFAAoF;AACpF,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GACpB,sBAAsB,CA+GxB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAC7B,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,sBAAsB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CA0CxC;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAC3B,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GACpB,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAetC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAsCxE"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { LayoutRect, LayoutValidationIssue, ListLayoutZone } from '../contracts.js';
|
|
2
|
+
export type ListMeasurementContext = {
|
|
3
|
+
orientation: ListLayoutZone['orientation'];
|
|
4
|
+
/** Available width for vertical lists, or height for horizontal lists. */
|
|
5
|
+
crossSize: number;
|
|
6
|
+
/** Advance after content/font changes that invalidate measured item sizes. */
|
|
7
|
+
epoch?: number;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Sizes belong to IDs, never array positions. A measurement is reusable after
|
|
11
|
+
* reordering, but only with matching orientation, cross-axis size and epoch.
|
|
12
|
+
* The measurement revision prevents delayed events from replacing newer sizes.
|
|
13
|
+
*/
|
|
14
|
+
export declare class ListSizeCache {
|
|
15
|
+
private sizes;
|
|
16
|
+
get(itemId: string, context: ListMeasurementContext): number | undefined;
|
|
17
|
+
set(itemId: string, size: number, context: ListMeasurementContext, measurementRevision?: number): boolean;
|
|
18
|
+
prune(itemIds: readonly string[]): void;
|
|
19
|
+
clear(): void;
|
|
20
|
+
}
|
|
21
|
+
export type ListLayoutEntry = {
|
|
22
|
+
itemId: string;
|
|
23
|
+
index: number;
|
|
24
|
+
/** Main-axis content coordinate, including start padding. */
|
|
25
|
+
start: number;
|
|
26
|
+
size: number;
|
|
27
|
+
source: 'measured' | 'estimated';
|
|
28
|
+
rect: LayoutRect;
|
|
29
|
+
/** Rect coordinates belong to this layout revision, unlike reusable sizes. */
|
|
30
|
+
revision: number;
|
|
31
|
+
};
|
|
32
|
+
export type ListLayout = {
|
|
33
|
+
orientation: ListLayoutZone['orientation'];
|
|
34
|
+
crossSize: number;
|
|
35
|
+
revision: number;
|
|
36
|
+
entries: ListLayoutEntry[];
|
|
37
|
+
totalSize: number;
|
|
38
|
+
};
|
|
39
|
+
export type ListLayoutInput = {
|
|
40
|
+
itemIds: readonly string[];
|
|
41
|
+
orientation: ListLayoutZone['orientation'];
|
|
42
|
+
crossSize: number;
|
|
43
|
+
estimatedItemSize: number;
|
|
44
|
+
/** Authoritative size used by fixed-size or caller-sized item rendering. */
|
|
45
|
+
itemSize?: number | ((itemId: string, index: number) => number);
|
|
46
|
+
cache?: ListSizeCache;
|
|
47
|
+
measurementEpoch?: number;
|
|
48
|
+
gap?: number;
|
|
49
|
+
paddingStart?: number;
|
|
50
|
+
paddingEnd?: number;
|
|
51
|
+
revision: number;
|
|
52
|
+
};
|
|
53
|
+
export type ListLayoutResult = ({
|
|
54
|
+
valid: true;
|
|
55
|
+
} & ListLayout) | {
|
|
56
|
+
valid: false;
|
|
57
|
+
issues: LayoutValidationIssue[];
|
|
58
|
+
};
|
|
59
|
+
/** Compute content rects from one order snapshot without modifying the cache. */
|
|
60
|
+
export declare function computeListLayout(input: ListLayoutInput): ListLayoutResult;
|
|
61
|
+
/**
|
|
62
|
+
* Return an insertion index in the order AFTER removing the active item.
|
|
63
|
+
* Thresholds are the original non-active item centers, including the active
|
|
64
|
+
* footprint and all original gaps. Never measure a compressed preview here.
|
|
65
|
+
* An ID absent from the target list is allowed for cross-list insertion.
|
|
66
|
+
*/
|
|
67
|
+
export declare function computeListIndex(layout: ListLayout, activeItemId: string | null, center: number): number | null;
|
|
68
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/engine/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,qBAAqB,EACrB,cAAc,EACf,MAAM,iBAAc,CAAC;AAItB,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC;IAC3C,0EAA0E;IAC1E,SAAS,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAkCF;;;;GAIG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAiC;IAE9C,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,MAAM,GAAG,SAAS;IAQxE,GAAG,CACD,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,sBAAsB,EAC/B,mBAAmB,SAAI,GACtB,OAAO;IA0BV,KAAK,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI;IAOvC,KAAK,IAAI,IAAI;CAGd;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,GAAG,WAAW,CAAC;IACjC,IAAI,EAAE,UAAU,CAAC;IACjB,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,WAAW,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,WAAW,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;IAChE,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GACxB,CAAC;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,GAAG,UAAU,CAAC,GAC9B;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,qBAAqB,EAAE,CAAA;CAAE,CAAC;AAatD,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CAuH1E;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,MAAM,EAAE,MAAM,GACb,MAAM,GAAG,IAAI,CAiBf"}
|