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,94 @@
|
|
|
1
|
+
import type { ReactNode, Ref } from 'react';
|
|
2
|
+
import type { StyleProp, ViewProps, ViewStyle } from 'react-native';
|
|
3
|
+
import type { AutoScrollOptions, DragAxis } from '../adapters/scroll.js';
|
|
4
|
+
import type { ListVirtualizationOptions } from '../adapters/virtualizedList.js';
|
|
5
|
+
import type { DndItem, GridPlacement } from '../contracts.js';
|
|
6
|
+
import type { DndDragEndEvent, DndSessionOptions } from '../controller/dndSession.js';
|
|
7
|
+
import type { HandleViewProps } from './handleViewProps.js';
|
|
8
|
+
import type { GridMotionConfig } from '../pointer/motion.js';
|
|
9
|
+
import type { GestureRelations, ZoneGeometry } from './gridTypes.js';
|
|
10
|
+
export type DndMotionConfig = GridMotionConfig;
|
|
11
|
+
export type ListItemRenderArgs<T> = {
|
|
12
|
+
item: DndItem<T>;
|
|
13
|
+
index: number;
|
|
14
|
+
zoneId: string;
|
|
15
|
+
isDragging: boolean;
|
|
16
|
+
};
|
|
17
|
+
export type GridItemRenderArgs<T> = ListItemRenderArgs<T> & {
|
|
18
|
+
position: GridPlacement['position'];
|
|
19
|
+
span: GridPlacement['span'];
|
|
20
|
+
placement?: GridPlacement['placement'];
|
|
21
|
+
width: number;
|
|
22
|
+
height: number;
|
|
23
|
+
};
|
|
24
|
+
/** Spatial grid under the shared provider; cells use the existing geometry contract. */
|
|
25
|
+
export type SortableGridProps<T> = Omit<ViewProps, 'children'> & {
|
|
26
|
+
zoneId: string;
|
|
27
|
+
geometry: ZoneGeometry;
|
|
28
|
+
renderItem(args: GridItemRenderArgs<T>): ReactNode;
|
|
29
|
+
dropIndicatorStyle?: StyleProp<ViewStyle>;
|
|
30
|
+
children?: ReactNode;
|
|
31
|
+
};
|
|
32
|
+
export type DndPreviewArgs<T> = ListItemRenderArgs<T> & {
|
|
33
|
+
sessionId: string;
|
|
34
|
+
targetZoneId: string | null;
|
|
35
|
+
width: number;
|
|
36
|
+
height: number;
|
|
37
|
+
validity: 'pending' | 'valid' | 'invalid';
|
|
38
|
+
/** Call after the custom preview's drawable content has committed. Late sessions are ignored. */
|
|
39
|
+
onReady(): void;
|
|
40
|
+
};
|
|
41
|
+
export type DndProviderHandle = {
|
|
42
|
+
/** Cancel the current drag because zone geometry moved under it. */
|
|
43
|
+
invalidateGeometry(): void;
|
|
44
|
+
};
|
|
45
|
+
export type DndProviderProps<T> = Omit<ViewProps, 'children'> & DndSessionOptions<T> & {
|
|
46
|
+
children: ReactNode;
|
|
47
|
+
activation?: {
|
|
48
|
+
delayMs: number;
|
|
49
|
+
};
|
|
50
|
+
/** Independent of list orientation. Defaults to both screen axes. */
|
|
51
|
+
dragAxis?: DragAxis;
|
|
52
|
+
motion?: DndMotionConfig;
|
|
53
|
+
renderDragPreview?(args: DndPreviewArgs<T>): ReactNode;
|
|
54
|
+
/** Keep the original visible until the custom preview calls onReady. Defaults to false. */
|
|
55
|
+
waitForDragPreviewReady?: boolean;
|
|
56
|
+
dragPreviewStyle?: StyleProp<ViewStyle>;
|
|
57
|
+
/**
|
|
58
|
+
* The `onDragEnd` event again once the drag preview has finished settling
|
|
59
|
+
* into its cell, or right after `onDragEnd` when nothing animates.
|
|
60
|
+
* `GridController.onDragEnd` uses this timing.
|
|
61
|
+
*/
|
|
62
|
+
onDragSettled?(event: DndDragEndEvent<T>): void;
|
|
63
|
+
ref?: Ref<DndProviderHandle>;
|
|
64
|
+
};
|
|
65
|
+
/** ScrollView by default; enable virtualization for FlatList. Sizes are logical pixels. */
|
|
66
|
+
export type SortableListProps<T> = Omit<ViewProps, 'children'> & {
|
|
67
|
+
zoneId: string;
|
|
68
|
+
renderItem(args: ListItemRenderArgs<T>): ReactNode;
|
|
69
|
+
/** Main-axis estimate before a cell has been measured. Defaults to 48. */
|
|
70
|
+
estimatedItemSize?: number;
|
|
71
|
+
/** Optional authoritative main-axis size, constant or per item. */
|
|
72
|
+
itemSize?: number | ((itemId: string, index: number) => number);
|
|
73
|
+
gap?: number;
|
|
74
|
+
paddingStart?: number;
|
|
75
|
+
paddingEnd?: number;
|
|
76
|
+
autoScroll?: AutoScrollOptions;
|
|
77
|
+
scrollEnabled?: boolean;
|
|
78
|
+
showsScrollIndicator?: boolean;
|
|
79
|
+
onScrollOffsetChange?(offset: {
|
|
80
|
+
x: number;
|
|
81
|
+
y: number;
|
|
82
|
+
}): void;
|
|
83
|
+
/** Use FlatList windowing. True selects defaults; false is the default. */
|
|
84
|
+
virtualization?: boolean | ListVirtualizationOptions;
|
|
85
|
+
};
|
|
86
|
+
/** Accessibility and test attributes forwarded to the handle's native view. */
|
|
87
|
+
export type DragHandleViewProps = HandleViewProps;
|
|
88
|
+
export type DragHandleProps = DragHandleViewProps & {
|
|
89
|
+
children: ReactNode;
|
|
90
|
+
itemId?: string;
|
|
91
|
+
disabled?: boolean;
|
|
92
|
+
gestureRelations?: GestureRelations;
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=dndTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dndTypes.d.ts","sourceRoot":"","sources":["../../../../src/components/dndTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { ReactNode, Ref } from 'react';
|
|
2
|
+
import type { StyleProp, ViewProps, ViewStyle } from 'react-native';
|
|
3
|
+
import type { PanGestureConfig } from 'react-native-gesture-handler';
|
|
4
|
+
import type { GridMovementPolicy } from '../engine/movementPolicy.js';
|
|
5
|
+
import type { HandleViewProps } from './handleViewProps.js';
|
|
6
|
+
import type { GridMotionConfig } from '../pointer/motion.js';
|
|
7
|
+
import type { CanDropArgs, DragEndEvent, DragStartEvent, DropDecision, GridChange, GridDiagnosticEvent, GridItem, GridValue, ValidationIssue } from '../types.js';
|
|
8
|
+
export type GestureRelations = Pick<PanGestureConfig, 'block' | 'requireToFail' | 'simultaneousWith'>;
|
|
9
|
+
export type GridInsets = {
|
|
10
|
+
top: number;
|
|
11
|
+
right: number;
|
|
12
|
+
bottom: number;
|
|
13
|
+
left: number;
|
|
14
|
+
};
|
|
15
|
+
export type ZoneGeometry = {
|
|
16
|
+
rowGap: number;
|
|
17
|
+
columnGap: number;
|
|
18
|
+
padding: GridInsets;
|
|
19
|
+
} & ({
|
|
20
|
+
mode: 'fixed';
|
|
21
|
+
cellWidth: number;
|
|
22
|
+
cellHeight: number;
|
|
23
|
+
} | {
|
|
24
|
+
mode: 'fit';
|
|
25
|
+
});
|
|
26
|
+
export type ItemRenderArgs<T> = {
|
|
27
|
+
item: GridItem<T>;
|
|
28
|
+
zoneId: string;
|
|
29
|
+
width: number;
|
|
30
|
+
height: number;
|
|
31
|
+
isDragging: boolean;
|
|
32
|
+
};
|
|
33
|
+
export type DragPreviewArgs<T> = Omit<ItemRenderArgs<T>, 'zoneId'> & {
|
|
34
|
+
sessionId: string;
|
|
35
|
+
/** Call after the custom preview's drawable content has committed. Late sessions are ignored. */
|
|
36
|
+
onReady(): void;
|
|
37
|
+
sourceZoneId: string;
|
|
38
|
+
targetZoneId: string | null;
|
|
39
|
+
validity: 'pending' | 'valid' | 'invalid';
|
|
40
|
+
};
|
|
41
|
+
export type GridControllerHandle = {
|
|
42
|
+
invalidateGeometry(): void;
|
|
43
|
+
};
|
|
44
|
+
export type GridControllerProps<T> = Omit<ViewProps, 'children'> & {
|
|
45
|
+
value: GridValue<T>;
|
|
46
|
+
onChange(nextValue: GridValue<T>, change: GridChange): void;
|
|
47
|
+
renderItem(args: ItemRenderArgs<T>): ReactNode;
|
|
48
|
+
renderDragPreview?(args: DragPreviewArgs<T>): ReactNode;
|
|
49
|
+
/** Keep the original visible until the custom preview calls onReady. Defaults to false. */
|
|
50
|
+
waitForDragPreviewReady?: boolean;
|
|
51
|
+
/** Optional preview surface styling (background, border, clipping, shadow). */
|
|
52
|
+
dragPreviewStyle?: StyleProp<ViewStyle>;
|
|
53
|
+
canDrop?(args: CanDropArgs<T>): DropDecision;
|
|
54
|
+
onDragStart?(event: DragStartEvent): void;
|
|
55
|
+
/** Fires once the drag preview has settled into its cell, or at once when nothing animates. */
|
|
56
|
+
onDragEnd?(event: DragEndEvent): void;
|
|
57
|
+
onValidationError?(issues: ValidationIssue[]): void;
|
|
58
|
+
/** Optional JS-only observation. Exceptions are ignored; omit to disable timing. */
|
|
59
|
+
onDiagnostic?(event: GridDiagnosticEvent): void;
|
|
60
|
+
/** Defaults to 10,000 bounded search steps. */
|
|
61
|
+
searchBudget?: number;
|
|
62
|
+
/** Defaults to a 250ms long press. */
|
|
63
|
+
activation?: {
|
|
64
|
+
delayMs: number;
|
|
65
|
+
};
|
|
66
|
+
/** Generic rules by default; opt into HOME_GRID_MOVEMENT_POLICY for home compatibility. */
|
|
67
|
+
movementPolicy?: GridMovementPolicy;
|
|
68
|
+
motion?: GridMotionConfig;
|
|
69
|
+
responseTimeoutMs?: number;
|
|
70
|
+
disabled?: boolean;
|
|
71
|
+
ref?: Ref<GridControllerHandle>;
|
|
72
|
+
children: ReactNode;
|
|
73
|
+
};
|
|
74
|
+
export type GridZoneViewProps = ViewProps & {
|
|
75
|
+
zoneId: string;
|
|
76
|
+
geometry: ZoneGeometry;
|
|
77
|
+
};
|
|
78
|
+
export type GridDragHandleProps = HandleViewProps & {
|
|
79
|
+
itemId: string;
|
|
80
|
+
gestureRelations?: GestureRelations;
|
|
81
|
+
disabled?: boolean;
|
|
82
|
+
children: ReactNode;
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=gridTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gridTypes.d.ts","sourceRoot":"","sources":["../../../../src/components/gridTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ViewProps } from 'react-native';
|
|
2
|
+
/** Accessibility and test attributes forwarded to a handle's native view. */
|
|
3
|
+
export type HandleViewProps = Pick<ViewProps, 'accessible' | 'accessibilityLabel' | 'accessibilityHint' | 'accessibilityRole' | 'accessibilityState' | 'accessibilityActions' | 'onAccessibilityAction' | 'importantForAccessibility' | 'testID'>;
|
|
4
|
+
/** Copies only the defined view attributes so handle-specific props never reach the native view. */
|
|
5
|
+
export declare function pickHandleViewProps(props: HandleViewProps): HandleViewProps;
|
|
6
|
+
//# sourceMappingURL=handleViewProps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleViewProps.d.ts","sourceRoot":"","sources":["../../../../src/components/handleViewProps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,6EAA6E;AAC7E,MAAM,MAAM,eAAe,GAAG,IAAI,CAChC,SAAS,EACP,YAAY,GACZ,oBAAoB,GACpB,mBAAmB,GACnB,mBAAmB,GACnB,oBAAoB,GACpB,sBAAsB,GACtB,uBAAuB,GACvB,2BAA2B,GAC3B,QAAQ,CACX,CAAC;AAcF,oGAAoG;AACpG,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,eAAe,CAK3E"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import type { CellPosition, CellSpan, ItemPlacement, ValidationCode } from './types.js';
|
|
2
|
+
export type ItemId = string;
|
|
3
|
+
export type ZoneId = string;
|
|
4
|
+
/** Application data has no layout meaning and remains owned by the caller. */
|
|
5
|
+
export type DndItem<T> = {
|
|
6
|
+
id: ItemId;
|
|
7
|
+
data: T;
|
|
8
|
+
};
|
|
9
|
+
export type GridPlacement = {
|
|
10
|
+
itemId: ItemId;
|
|
11
|
+
position: CellPosition;
|
|
12
|
+
span: CellSpan;
|
|
13
|
+
placement?: ItemPlacement;
|
|
14
|
+
};
|
|
15
|
+
export type GridLayoutZone = {
|
|
16
|
+
id: ZoneId;
|
|
17
|
+
kind: 'grid';
|
|
18
|
+
rows: number;
|
|
19
|
+
columns: number;
|
|
20
|
+
placements: GridPlacement[];
|
|
21
|
+
/**
|
|
22
|
+
* Ordered packing (a dock, for example): every placement has this span,
|
|
23
|
+
* the array order is the item order and positions are the reading-order
|
|
24
|
+
* slots of that order. A move inserts at the slot the target addresses and
|
|
25
|
+
* re-packs; removing an item closes the gap; capacity is rows × columns
|
|
26
|
+
* in slots. Omitted for spatial grids.
|
|
27
|
+
*/
|
|
28
|
+
itemSpan?: CellSpan;
|
|
29
|
+
};
|
|
30
|
+
/** A one-dimensional order, independent of item sizes and the drag axis. */
|
|
31
|
+
export type ListLayoutZone = {
|
|
32
|
+
id: ZoneId;
|
|
33
|
+
kind: 'list';
|
|
34
|
+
orientation: 'vertical' | 'horizontal';
|
|
35
|
+
itemIds: ItemId[];
|
|
36
|
+
};
|
|
37
|
+
export type LayoutZone = GridLayoutZone | ListLayoutZone;
|
|
38
|
+
/**
|
|
39
|
+
* Every item is referenced by exactly one zone. Revisions are nonnegative safe
|
|
40
|
+
* integers; the owner increments the revision for each accepted/external change.
|
|
41
|
+
* Shared by the list adapter and the grid conversion helpers.
|
|
42
|
+
*/
|
|
43
|
+
export type LayoutState<T> = {
|
|
44
|
+
revision: number;
|
|
45
|
+
items: DndItem<T>[];
|
|
46
|
+
zones: LayoutZone[];
|
|
47
|
+
};
|
|
48
|
+
export type GridLocation = {
|
|
49
|
+
kind: 'grid';
|
|
50
|
+
zoneId: ZoneId;
|
|
51
|
+
position: CellPosition;
|
|
52
|
+
};
|
|
53
|
+
export type ListLocation = {
|
|
54
|
+
kind: 'list';
|
|
55
|
+
zoneId: ZoneId;
|
|
56
|
+
index: number;
|
|
57
|
+
};
|
|
58
|
+
export type LayoutLocation = GridLocation | ListLocation;
|
|
59
|
+
/** The completed candidate is approved atomically against baseRevision. */
|
|
60
|
+
export type MoveProposal<State, Location = LayoutLocation> = {
|
|
61
|
+
sessionId: string;
|
|
62
|
+
itemId: ItemId;
|
|
63
|
+
baseRevision: number;
|
|
64
|
+
from: Location;
|
|
65
|
+
to: Location;
|
|
66
|
+
value: State;
|
|
67
|
+
};
|
|
68
|
+
/** A response applies only to the matching session AND base revision. */
|
|
69
|
+
export type ProposalResponse = {
|
|
70
|
+
sessionId: string;
|
|
71
|
+
baseRevision: number;
|
|
72
|
+
accepted: boolean;
|
|
73
|
+
};
|
|
74
|
+
export type LayoutValidationCode = ValidationCode | 'invalid-revision' | 'unknown-item' | 'unplaced-item' | 'duplicate-reference' | 'invalid-orientation';
|
|
75
|
+
export type LayoutValidationIssue = {
|
|
76
|
+
code: LayoutValidationCode;
|
|
77
|
+
zoneId?: ZoneId;
|
|
78
|
+
itemId?: ItemId;
|
|
79
|
+
message: string;
|
|
80
|
+
};
|
|
81
|
+
export type LayoutValidationResult = {
|
|
82
|
+
valid: true;
|
|
83
|
+
} | {
|
|
84
|
+
valid: false;
|
|
85
|
+
issues: LayoutValidationIssue[];
|
|
86
|
+
};
|
|
87
|
+
export type LayoutConversionIssue = Omit<LayoutValidationIssue, 'code'> & {
|
|
88
|
+
code: LayoutValidationCode | 'unsupported-zone';
|
|
89
|
+
};
|
|
90
|
+
export type LayoutConversionResult<Value> = {
|
|
91
|
+
valid: true;
|
|
92
|
+
value: Value;
|
|
93
|
+
} | {
|
|
94
|
+
valid: false;
|
|
95
|
+
issues: LayoutConversionIssue[];
|
|
96
|
+
};
|
|
97
|
+
/** Logical pixels in the coordinate space named by the containing contract. */
|
|
98
|
+
export type LayoutPoint = {
|
|
99
|
+
x: number;
|
|
100
|
+
y: number;
|
|
101
|
+
};
|
|
102
|
+
export type LayoutRect = LayoutPoint & {
|
|
103
|
+
width: number;
|
|
104
|
+
height: number;
|
|
105
|
+
};
|
|
106
|
+
export type CoordinateSpace = 'screen' | 'content';
|
|
107
|
+
type MeasurementBase<Space extends CoordinateSpace> = {
|
|
108
|
+
space: Space;
|
|
109
|
+
rect: LayoutRect;
|
|
110
|
+
revision: number;
|
|
111
|
+
/** Monotonic milliseconds in the same clock domain as MeasurementFreshness.nowMs. */
|
|
112
|
+
timestampMs: number;
|
|
113
|
+
};
|
|
114
|
+
export type MeasuredRect<Space extends CoordinateSpace = CoordinateSpace> = MeasurementBase<Space> & {
|
|
115
|
+
source: 'measured';
|
|
116
|
+
};
|
|
117
|
+
export type EstimatedRect<Space extends CoordinateSpace = CoordinateSpace> = MeasurementBase<Space> & {
|
|
118
|
+
source: 'estimated';
|
|
119
|
+
};
|
|
120
|
+
export type RectMeasurement<Space extends CoordinateSpace = CoordinateSpace> = MeasuredRect<Space> | EstimatedRect<Space>;
|
|
121
|
+
export type MeasurementFreshness = {
|
|
122
|
+
revision: number;
|
|
123
|
+
/** Supply both nowMs and maxAgeMs to impose an age limit. */
|
|
124
|
+
nowMs?: number;
|
|
125
|
+
maxAgeMs?: number;
|
|
126
|
+
};
|
|
127
|
+
/**
|
|
128
|
+
* Viewport is the measured screen origin of content at scroll offset zero.
|
|
129
|
+
* Offset changes do not change layout revision. Negative offsets support bounce
|
|
130
|
+
* and insets. Padding is part of content coordinates, not another offset here.
|
|
131
|
+
*/
|
|
132
|
+
export type ZoneCoordinateContext = {
|
|
133
|
+
viewport: MeasuredRect<'screen'>;
|
|
134
|
+
scrollOffset: LayoutPoint;
|
|
135
|
+
};
|
|
136
|
+
export type CoordinateFailureReason = 'invalid-coordinate' | 'invalid-context' | 'invalid-measurement' | 'invalid-freshness' | 'stale-measurement';
|
|
137
|
+
export type CoordinateResult<Value> = {
|
|
138
|
+
valid: true;
|
|
139
|
+
value: Value;
|
|
140
|
+
} | {
|
|
141
|
+
valid: false;
|
|
142
|
+
reason: CoordinateFailureReason;
|
|
143
|
+
};
|
|
144
|
+
export {};
|
|
145
|
+
//# sourceMappingURL=contracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../src/contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { MoveProposal, ProposalResponse } from '../contracts.js';
|
|
2
|
+
/**
|
|
3
|
+
* Shared revisioned approval for both value shapes (`GridValue` and
|
|
4
|
+
* `LayoutState`). The adapter supplies the shape-specific checks; the order of
|
|
5
|
+
* checks, the stale rules and the response protocol are the same for both.
|
|
6
|
+
*/
|
|
7
|
+
export type ApprovalResult<Value, Issue> = {
|
|
8
|
+
status: 'accepted' | 'rejected' | 'stale';
|
|
9
|
+
value: Value;
|
|
10
|
+
} | {
|
|
11
|
+
status: 'invalid';
|
|
12
|
+
value: Value;
|
|
13
|
+
issues: Issue[];
|
|
14
|
+
};
|
|
15
|
+
/** Legacy grid values may carry a response without a base revision. */
|
|
16
|
+
type Revisioned = {
|
|
17
|
+
revision: number;
|
|
18
|
+
proposalResponse?: {
|
|
19
|
+
sessionId: string;
|
|
20
|
+
baseRevision?: number;
|
|
21
|
+
accepted: boolean;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
export type ApprovalAdapter<Value extends Revisioned, Location, Issue> = {
|
|
25
|
+
/** Issues of the current value, or null when it is usable as a baseline. */
|
|
26
|
+
validateCurrent(current: Value): Issue[] | null;
|
|
27
|
+
/** Issues of the complete candidate, or null when it is valid. */
|
|
28
|
+
validateCandidate(candidate: Value): Issue[] | null;
|
|
29
|
+
issue(message: string): Issue;
|
|
30
|
+
isLocation(value: unknown): value is Location;
|
|
31
|
+
location(value: Value, itemId: string): Location | null;
|
|
32
|
+
sameLocation(first: Location, second: Location | null): boolean;
|
|
33
|
+
hasDestinationZone(value: Value, to: Location): boolean;
|
|
34
|
+
zonesPreserved(current: Value, candidate: Value): boolean;
|
|
35
|
+
itemsPreserved(current: Value, candidate: Value): boolean;
|
|
36
|
+
messages: {
|
|
37
|
+
zones: string;
|
|
38
|
+
items: string;
|
|
39
|
+
destination: string;
|
|
40
|
+
};
|
|
41
|
+
/** Attach the response (and any retained caller objects) to the candidate. */
|
|
42
|
+
accept(current: Value, candidate: Value, response: ProposalResponse): Value;
|
|
43
|
+
};
|
|
44
|
+
/** A response only changes the exact revision on which the complete proposal was based. */
|
|
45
|
+
export declare function respondToProposal<Value extends Revisioned, Location, Issue>(adapter: ApprovalAdapter<Value, Location, Issue>, current: Value, proposal: MoveProposal<Value, Location>, accepted: boolean, checkCurrent: boolean): ApprovalResult<Value, Issue>;
|
|
46
|
+
export type ApprovalStore<Value, Proposal, Issue> = {
|
|
47
|
+
getSnapshot(): Value;
|
|
48
|
+
subscribe(listener: () => void): () => void;
|
|
49
|
+
respond(proposal: Proposal, accepted: boolean): ApprovalResult<Value, Issue>;
|
|
50
|
+
/** Publish a value produced outside the reducer, such as an external edit. */
|
|
51
|
+
publish(next: Value): void;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Listeners, closed-session memory and publication shared by the grid and
|
|
55
|
+
* layout stores. Rejections leave the revision unchanged; every closed session
|
|
56
|
+
* is remembered until the next revision so a delayed response cannot reopen an
|
|
57
|
+
* earlier rejection.
|
|
58
|
+
*/
|
|
59
|
+
export declare function createApprovalStore<Value extends {
|
|
60
|
+
revision: number;
|
|
61
|
+
}, Proposal extends {
|
|
62
|
+
sessionId: string;
|
|
63
|
+
baseRevision: number;
|
|
64
|
+
}, Issue>(initial: Value, respond: (current: Value, proposal: Proposal, accepted: boolean) => ApprovalResult<Value, Issue>): ApprovalStore<Value, Proposal, Issue>;
|
|
65
|
+
export {};
|
|
66
|
+
//# sourceMappingURL=approval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval.d.ts","sourceRoot":"","sources":["../../../../src/controller/approval.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Snapshot ownership shared by both session coordinators: subscribers,
|
|
3
|
+
* batched notification, shallow patching with `Object.is` change detection
|
|
4
|
+
* and the response deadline timer. The subclasses own their snapshot shapes,
|
|
5
|
+
* candidate calculation and lifecycle events.
|
|
6
|
+
*/
|
|
7
|
+
export declare abstract class CoordinatorBase<Snapshot extends object> {
|
|
8
|
+
protected snapshot: Snapshot;
|
|
9
|
+
protected changed: boolean;
|
|
10
|
+
private listeners;
|
|
11
|
+
private depth;
|
|
12
|
+
private responseTimer;
|
|
13
|
+
protected constructor(initial: Snapshot);
|
|
14
|
+
getSnapshot: () => Snapshot;
|
|
15
|
+
subscribe: (listener: () => void) => (() => void);
|
|
16
|
+
/** Nested batches notify subscribers once, after the outermost one ends. */
|
|
17
|
+
protected batch<R>(work: () => R): R;
|
|
18
|
+
protected batchStarted(): void;
|
|
19
|
+
/** Runs after subscribers were notified, even when one of them threw. */
|
|
20
|
+
protected batchFinished(): void;
|
|
21
|
+
protected get batchDepth(): number;
|
|
22
|
+
protected update(patch: Partial<Snapshot>): void;
|
|
23
|
+
/** Put back an earlier snapshot and its pending-notification flag. */
|
|
24
|
+
protected restore(snapshot: Snapshot, changed: boolean): void;
|
|
25
|
+
/**
|
|
26
|
+
* Wait for a proposal response until `deadline`. The timer re-arms while the
|
|
27
|
+
* clock has not reached the deadline (fake timers, long sleeps) and calls
|
|
28
|
+
* `onExpire` inside a batch once it has, unless `isPending` says the
|
|
29
|
+
* proposal was already settled.
|
|
30
|
+
*/
|
|
31
|
+
protected armDeadline(deadline: number | undefined, isPending: () => boolean, onExpire: () => void): void;
|
|
32
|
+
protected clearDeadline(): void;
|
|
33
|
+
}
|
|
34
|
+
/** RN provides this monotonic clock; its generated ambient declarations omit it. */
|
|
35
|
+
export declare function now(): number;
|
|
36
|
+
export declare function reportCallbackError(scope: string, error: unknown): void;
|
|
37
|
+
//# sourceMappingURL=coordinatorBase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coordinatorBase.d.ts","sourceRoot":"","sources":["../../../../src/controller/coordinatorBase.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,8BAAsB,eAAe,CAAC,QAAQ,SAAS,MAAM;IAC3D,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,SAAS,CAAC,OAAO,UAAS;IAC1B,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,aAAa,CAA4C;IAEjE,SAAS,aAAa,OAAO,EAAE,QAAQ;IAIvC,WAAW,QAAO,QAAQ,CAAkB;IAE5C,SAAS,GAAI,UAAU,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC,CAK9C;IAEF,4EAA4E;IAC5E,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC;IAoBpC,SAAS,CAAC,YAAY,IAAI,IAAI;IAE9B,yEAAyE;IACzE,SAAS,CAAC,aAAa,IAAI,IAAI;IAE/B,SAAS,KAAK,UAAU,IAAI,MAAM,CAEjC;IAED,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI;IAehD,sEAAsE;IACtE,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAK7D;;;;;OAKG;IACH,SAAS,CAAC,WAAW,CACnB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,SAAS,EAAE,MAAM,OAAO,EACxB,QAAQ,EAAE,MAAM,IAAI,GACnB,IAAI;IAeP,SAAS,CAAC,aAAa,IAAI,IAAI;CAIhC;AAED,oFAAoF;AACpF,wBAAgB,GAAG,IAAI,MAAM,CAI5B;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAEvE"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import type { DndItem, GridLayoutZone, LayoutLocation, LayoutState, LayoutValidationIssue } from '../contracts.js';
|
|
2
|
+
import { type GridItemLayout } from '../engine/layoutMove.js';
|
|
3
|
+
import { type GridMovementPolicy, type ResolvedGridMovementPolicy } from '../engine/movementPolicy.js';
|
|
4
|
+
import type { CancelReason, DragStartEvent, DropDecision, GridDiagnosticEvent } from '../types.js';
|
|
5
|
+
import { type DndProposal, type DndValue } from './dndState.js';
|
|
6
|
+
import { PreviewPath } from './previewPath.js';
|
|
7
|
+
import { type CandidateResult, SessionCore } from './sessionCore.js';
|
|
8
|
+
export type DndCancelReason = CancelReason;
|
|
9
|
+
export type DndDropFailureReason = 'outside-zones' | 'invalid-target' | 'missing-grid-item-layout' | 'invalid-grid-item-layout' | 'unresolvable' | 'search-budget' | 'policy-rejected';
|
|
10
|
+
export type GridItemLayoutResolverArgs<T> = {
|
|
11
|
+
item: DndItem<T>;
|
|
12
|
+
from: LayoutLocation;
|
|
13
|
+
target: GridLayoutZone;
|
|
14
|
+
value: LayoutState<T>;
|
|
15
|
+
};
|
|
16
|
+
export type DndDragEndEvent<T> = DragStartEvent & {
|
|
17
|
+
error?: unknown;
|
|
18
|
+
} & ({
|
|
19
|
+
outcome: 'unchanged';
|
|
20
|
+
} | {
|
|
21
|
+
outcome: 'cancelled';
|
|
22
|
+
reason: DndCancelReason;
|
|
23
|
+
targetZoneId?: string;
|
|
24
|
+
policyReason?: string;
|
|
25
|
+
} | {
|
|
26
|
+
outcome: 'proposed';
|
|
27
|
+
proposal: DndProposal<T>;
|
|
28
|
+
targetZoneId: string;
|
|
29
|
+
response: 'accepted' | 'rejected' | 'expired' | 'mismatch';
|
|
30
|
+
} | {
|
|
31
|
+
outcome: 'proposed';
|
|
32
|
+
proposal: DndProposal<T>;
|
|
33
|
+
targetZoneId: string;
|
|
34
|
+
response: 'interrupted';
|
|
35
|
+
reason: DndCancelReason | 'response-missing' | 'change-handler-error';
|
|
36
|
+
});
|
|
37
|
+
export type DndSessionSnapshot<T> = {
|
|
38
|
+
value: DndValue<T> | null;
|
|
39
|
+
displayValue: DndValue<T> | null;
|
|
40
|
+
candidate: LayoutState<T> | null;
|
|
41
|
+
phase: 'idle' | 'dragging' | 'awaiting-response';
|
|
42
|
+
sessionId: string | null;
|
|
43
|
+
itemId: string | null;
|
|
44
|
+
sourceZoneId: string | null;
|
|
45
|
+
targetZoneId: string | null;
|
|
46
|
+
target: LayoutLocation | null;
|
|
47
|
+
seq: number;
|
|
48
|
+
validity: 'pending' | 'valid' | 'invalid';
|
|
49
|
+
disabled: boolean;
|
|
50
|
+
/** Span and placement captured once for each grid target at activation. */
|
|
51
|
+
gridItemLayouts: ReadonlyMap<string, GridItemLayout>;
|
|
52
|
+
movementPolicy: ResolvedGridMovementPolicy;
|
|
53
|
+
failureReason: DndDropFailureReason | null;
|
|
54
|
+
};
|
|
55
|
+
export type DndSessionOptions<T> = {
|
|
56
|
+
value: DndValue<T>;
|
|
57
|
+
onChange(next: DndValue<T>, proposal: DndProposal<T>): void;
|
|
58
|
+
canDrop?(proposal: DndProposal<T>): DropDecision;
|
|
59
|
+
onDragStart?(event: DragStartEvent): void;
|
|
60
|
+
onDragEnd?(event: DndDragEndEvent<T>): void;
|
|
61
|
+
onValidationError?(issues: LayoutValidationIssue[]): void;
|
|
62
|
+
/** Optional JS-only observation. Exceptions are ignored; omit to disable timing. */
|
|
63
|
+
onDiagnostic?(event: GridDiagnosticEvent): void;
|
|
64
|
+
responseTimeoutMs?: number;
|
|
65
|
+
disabled?: boolean;
|
|
66
|
+
movementPolicy?: GridMovementPolicy;
|
|
67
|
+
searchBudget?: number;
|
|
68
|
+
/** Required for list-to-grid; returning null disables that target for this session. */
|
|
69
|
+
getGridItemLayout?(args: GridItemLayoutResolverArgs<T>): GridItemLayout | null;
|
|
70
|
+
};
|
|
71
|
+
type ActiveSession<T> = DragStartEvent & {
|
|
72
|
+
baseRevision: number;
|
|
73
|
+
seq: number;
|
|
74
|
+
target: LayoutLocation | null;
|
|
75
|
+
/** Same-zone grid previews the next candidate builds on. */
|
|
76
|
+
path: PreviewPath<LayoutLocation, LayoutState<T>>;
|
|
77
|
+
proposal?: DndProposal<T>;
|
|
78
|
+
proposalKey?: string;
|
|
79
|
+
deadline?: number;
|
|
80
|
+
gridItemLayouts: Map<string, GridItemLayout>;
|
|
81
|
+
gridItemLayoutErrors: Map<string, 'missing-grid-item-layout' | 'invalid-grid-item-layout'>;
|
|
82
|
+
movementPolicy: ResolvedGridMovementPolicy;
|
|
83
|
+
searchBudget: number;
|
|
84
|
+
responseTimeoutMs: number;
|
|
85
|
+
settingsKey: string;
|
|
86
|
+
getGridItemLayout: DndSessionOptions<T>['getGridItemLayout'];
|
|
87
|
+
resolving: boolean;
|
|
88
|
+
previewSeq: number | null;
|
|
89
|
+
previewInputVersion: number;
|
|
90
|
+
};
|
|
91
|
+
/** UI-independent normalized session; screen/scroll measurements stay in the adapter. */
|
|
92
|
+
export declare class DndSessionCoordinator<T> extends SessionCore<DndValue<T>, LayoutLocation, DndSessionSnapshot<T>, ActiveSession<T>, DndProposal<T>> {
|
|
93
|
+
private readonly instanceId;
|
|
94
|
+
private sessionCounter;
|
|
95
|
+
private options;
|
|
96
|
+
private lastLayoutKey;
|
|
97
|
+
private validationNotification;
|
|
98
|
+
private previewInputVersion;
|
|
99
|
+
private operationVersion;
|
|
100
|
+
constructor(options: DndSessionOptions<T>);
|
|
101
|
+
/** Every batch is one operation; a refresh may only fold into its own. */
|
|
102
|
+
protected batchStarted(): void;
|
|
103
|
+
protected diagnosticObserver(): ((event: GridDiagnosticEvent) => void) | undefined;
|
|
104
|
+
/** Commit owner state after render; ordinary scroll updates do not enter this contract. */
|
|
105
|
+
commit(options: DndSessionOptions<T>): void;
|
|
106
|
+
start(itemId: string, baseRevision?: number): string | null;
|
|
107
|
+
requestTarget(sessionId: string, seq: number, to: LayoutLocation | null, options?: {
|
|
108
|
+
refresh?: boolean;
|
|
109
|
+
}): void;
|
|
110
|
+
release(sessionId: string, seq: number, to: LayoutLocation | null): void;
|
|
111
|
+
private calculate;
|
|
112
|
+
protected location(value: DndValue<T>, itemId: string): LayoutLocation | null;
|
|
113
|
+
protected isSpatial(target: LayoutLocation): target is import("../index.js").GridLocation;
|
|
114
|
+
/** Grid destinations need the span captured at activation. */
|
|
115
|
+
protected precheck(session: ActiveSession<T>, target: LayoutLocation): "invalid-target" | "missing-grid-item-layout" | "invalid-grid-item-layout" | null;
|
|
116
|
+
protected compute(session: ActiveSession<T>, target: LayoutLocation, baseline: {
|
|
117
|
+
base: DndValue<T>;
|
|
118
|
+
cumulative: boolean;
|
|
119
|
+
}, committed: DndValue<T>, from: LayoutLocation | null): CandidateResult<DndValue<T>, LayoutLocation>;
|
|
120
|
+
protected keepsPreview(session: ActiveSession<T>, target: LayoutLocation, status: 'impossible' | 'unresolved' | 'invalid'): boolean;
|
|
121
|
+
protected prepareProposal(session: ActiveSession<T>, result: {
|
|
122
|
+
value: DndValue<T>;
|
|
123
|
+
from: LayoutLocation;
|
|
124
|
+
to: LayoutLocation;
|
|
125
|
+
}): DndProposal<T>;
|
|
126
|
+
protected askPolicy(_session: ActiveSession<T>, _committed: DndValue<T>, proposal: DndProposal<T>): DropDecision;
|
|
127
|
+
protected policyFailed(session: ActiveSession<T>, seq: number, error: unknown): void;
|
|
128
|
+
protected revalidate(_session: ActiveSession<T>, committed: DndValue<T>, proposal: DndProposal<T>): boolean;
|
|
129
|
+
protected showCandidate(result: {
|
|
130
|
+
value: DndValue<T>;
|
|
131
|
+
}): void;
|
|
132
|
+
protected showFailure(committed: DndValue<T> | null, failure: string, keepPreview: boolean): void;
|
|
133
|
+
protected expectedPhase(): string;
|
|
134
|
+
protected sessionEnded(): boolean;
|
|
135
|
+
protected finishUnchanged(session: ActiveSession<T>): void;
|
|
136
|
+
protected registerProposal(session: ActiveSession<T>, proposal: DndProposal<T>, result: {
|
|
137
|
+
value: DndValue<T>;
|
|
138
|
+
}): void;
|
|
139
|
+
protected emitChange(proposal: DndProposal<T>, result: {
|
|
140
|
+
value: DndValue<T>;
|
|
141
|
+
}): void;
|
|
142
|
+
protected changeFailed(session: ActiveSession<T>, error: unknown): void;
|
|
143
|
+
private armTimer;
|
|
144
|
+
private settle;
|
|
145
|
+
private interrupt;
|
|
146
|
+
protected cancelWith(reason: DndCancelReason, error?: unknown, policyReason?: string): void;
|
|
147
|
+
cancel(reason: DndCancelReason): void;
|
|
148
|
+
private finish;
|
|
149
|
+
dispose(): void;
|
|
150
|
+
}
|
|
151
|
+
export {};
|
|
152
|
+
//# sourceMappingURL=dndSession.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dndSession.d.ts","sourceRoot":"","sources":["../../../../src/controller/dndSession.ts"],"names":[],"mappings":"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"}
|