@vue-dnd-kit/core 2.4.7 → 3.0.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.
Files changed (68) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +71 -48
  3. package/dist/devtools.cjs +2 -0
  4. package/dist/devtools.cjs.map +1 -0
  5. package/dist/devtools.d.cts +610 -0
  6. package/dist/devtools.d.ts +610 -0
  7. package/dist/devtools.js +569 -0
  8. package/dist/devtools.js.map +1 -0
  9. package/dist/index.cjs +12 -0
  10. package/dist/index.cjs.map +1 -0
  11. package/dist/index.d.cts +2425 -0
  12. package/dist/index.d.ts +2425 -2
  13. package/dist/index.js +5865 -0
  14. package/dist/index.js.map +1 -0
  15. package/package.json +59 -29
  16. package/dist/external/components/DnDProvider.vue.d.ts +0 -25
  17. package/dist/external/components/DragPreview.vue.d.ts +0 -89
  18. package/dist/external/composables/makeAutoScroll.d.ts +0 -14
  19. package/dist/external/composables/makeConstraintArea.d.ts +0 -7
  20. package/dist/external/composables/makeDraggable.d.ts +0 -24
  21. package/dist/external/composables/makeDroppable.d.ts +0 -21
  22. package/dist/external/composables/makeSelectionArea.d.ts +0 -15
  23. package/dist/external/composables/useDnDProvider.d.ts +0 -2
  24. package/dist/external/env.d.ts +0 -7
  25. package/dist/external/index.d.ts +0 -11
  26. package/dist/external/types/entities.d.ts +0 -208
  27. package/dist/external/types/index.d.ts +0 -5
  28. package/dist/external/types/operations.d.ts +0 -187
  29. package/dist/external/types/placement.d.ts +0 -34
  30. package/dist/external/types/pointer.d.ts +0 -10
  31. package/dist/external/types/provider.d.ts +0 -89
  32. package/dist/internal/composables/useDnDProviderEvents.d.ts +0 -2
  33. package/dist/internal/composables/useDnDProviderInternal.d.ts +0 -2
  34. package/dist/internal/composables/useDnDProviderState.d.ts +0 -4
  35. package/dist/internal/composables/useViewportAutoScroll.d.ts +0 -9
  36. package/dist/internal/logic/hover.d.ts +0 -6
  37. package/dist/internal/logic/keyboard.d.ts +0 -6
  38. package/dist/internal/logic/operations.d.ts +0 -35
  39. package/dist/internal/logic/payload.d.ts +0 -5
  40. package/dist/internal/logic/pointer.d.ts +0 -11
  41. package/dist/internal/logic/scroll.d.ts +0 -2
  42. package/dist/internal/sensors/default-collision.d.ts +0 -18
  43. package/dist/internal/sensors/index.d.ts +0 -2
  44. package/dist/internal/sensors/sensor.d.ts +0 -68
  45. package/dist/internal/sensors/steps.d.ts +0 -58
  46. package/dist/internal/types/auto-scroll.d.ts +0 -20
  47. package/dist/internal/types/observer.d.ts +0 -11
  48. package/dist/internal/types/provider.d.ts +0 -31
  49. package/dist/internal/utils/auto-scroll.d.ts +0 -13
  50. package/dist/internal/utils/constraints.d.ts +0 -43
  51. package/dist/internal/utils/disabled.d.ts +0 -9
  52. package/dist/internal/utils/dom.d.ts +0 -44
  53. package/dist/internal/utils/drag-activation.d.ts +0 -29
  54. package/dist/internal/utils/events.d.ts +0 -22
  55. package/dist/internal/utils/geometry.d.ts +0 -23
  56. package/dist/internal/utils/groups.d.ts +0 -23
  57. package/dist/internal/utils/hover.d.ts +0 -15
  58. package/dist/internal/utils/keyboard.d.ts +0 -5
  59. package/dist/internal/utils/namespaces.d.ts +0 -18
  60. package/dist/internal/utils/observer.d.ts +0 -15
  61. package/dist/internal/utils/placement.d.ts +0 -22
  62. package/dist/internal/utils/pointer.d.ts +0 -33
  63. package/dist/internal/utils/provider.d.ts +0 -12
  64. package/dist/internal/utils/selection.d.ts +0 -36
  65. package/dist/internal/utils/session.d.ts +0 -5
  66. package/dist/vite.svg +0 -1
  67. package/dist/vue-dnd-kit-core.cjs.js +0 -2
  68. package/dist/vue-dnd-kit-core.es.js +0 -1524
@@ -1,187 +0,0 @@
1
- import { IPlacement, TInsertSide, TPlacementOrientation } from './placement';
2
-
3
-
4
- // ── Result types ───────────────────────────────────────────────────────────────
5
-
6
- /**
7
- * Result of suggestSort.
8
- * Same-list: sourceItems === targetItems (one array, reordered).
9
- * Cross-list: two different arrays — apply both.
10
- */
11
- export interface ISuggestSortResult<T = unknown> {
12
- /** Source list after removing dragged items. Same ref as targetItems when sameList. */
13
- sourceItems: T[];
14
- /** Target list after inserting dragged items at targetIndex. */
15
- targetItems: T[];
16
- /** The items that were moved (in original order). */
17
- draggedItems: T[];
18
- sourceIndexes: number[];
19
- targetIndex: number;
20
- mode: 'insert' | 'append' | 'prepend';
21
- sameList: boolean;
22
- }
23
-
24
- /**
25
- * Result of suggestSwap.
26
- * Same-list: one array with positions swapped (sourceItems === targetItems).
27
- * Cross-list: two arrays with the items exchanged.
28
- * Multi-drag: dragged group exchanges with the single hovered item.
29
- */
30
- export interface ISuggestSwapResult<T = unknown> {
31
- /** Source list after swap. */
32
- sourceItems: T[];
33
- /** Target list after swap. Same ref as sourceItems when sameList. */
34
- targetItems: T[];
35
- sourceIndexes: number[];
36
- targetIndex: number;
37
- sameList: boolean;
38
- }
39
-
40
- /**
41
- * Result of suggestCopy.
42
- * Source list is NEVER modified — only target receives new items.
43
- */
44
- export interface ISuggestCopyResult<T = unknown> {
45
- /** Target list after inserting copies. */
46
- targetItems: T[];
47
- /** Shallow copies of the dragged items that were inserted. */
48
- copiedItems: T[];
49
- targetIndex: number;
50
- mode: 'insert' | 'append' | 'prepend';
51
- }
52
-
53
- /**
54
- * Result of suggestRemove.
55
- */
56
- export interface ISuggestRemoveResult<T = unknown> {
57
- /** Source list after removing dragged items. */
58
- sourceItems: T[];
59
- /** The items that were removed. */
60
- removedItems: T[];
61
- sourceIndexes: number[];
62
- }
63
-
64
- /** Draggable element currently under the cursor (inside the drop zone). */
65
- export interface IHoveredDraggableContext<T = unknown> {
66
- element: HTMLElement;
67
- /** Cursor position relative to this element. */
68
- placement: IPlacement;
69
- index: number;
70
- /** The actual object: items[index]. */
71
- item: T;
72
- items: T[];
73
- /** Custom data from the `data` option (reactive, always up-to-date) */
74
- data?: unknown;
75
- }
76
-
77
- /** Placement helpers: interpret placement flags by list orientation. */
78
- export interface IPlacementHelpers {
79
- /** 'before' = top (vertical) / left (horizontal). 'after' = bottom / right. */
80
- getInsertSide(
81
- placement: IPlacement | undefined,
82
- orientation: TPlacementOrientation
83
- ): TInsertSide | null;
84
- isAtZoneStart(
85
- placement: IPlacement | undefined,
86
- orientation: TPlacementOrientation
87
- ): boolean;
88
- isAtZoneEnd(
89
- placement: IPlacement | undefined,
90
- orientation: TPlacementOrientation
91
- ): boolean;
92
- }
93
-
94
- /**
95
- * Helpers object available on every drag event via `event.helpers`.
96
- *
97
- * ── Low-level (stateless, no event context) ─────────────────────────────────
98
- * Array primitives and placement interpreters. Use these to build custom logic.
99
- *
100
- * ── High-level (event-bound) ────────────────────────────────────────────────
101
- * Preset operations that read the current event context.
102
- * The user decides which one to call based on `event.hoveredDraggable`:
103
- *
104
- * ```ts
105
- * onDrop(event) {
106
- * if (event.hoveredDraggable) {
107
- * // hovering over an element → sort / swap / copy into position
108
- * const r = event.helpers.suggestSort()
109
- * if (r) list.value = r.targetItems
110
- * } else {
111
- * // hovering over zone only → append / prepend / copy to zone
112
- * const r = event.helpers.suggestSort()
113
- * if (r) list.value = r.targetItems
114
- * }
115
- * }
116
- * ```
117
- */
118
- export interface IHelpers {
119
- // ── Low-level: array ops ──────────────────────────────────────────────────
120
- /** Insert toInsert items into items at index. Returns new array. */
121
- insertAt<T>(items: T[], index: number, toInsert: T[]): T[];
122
- /** Remove count items at index. Returns new array. */
123
- removeAt<T>(items: T[], index: number, count?: number): T[];
124
- /** Remove multiple indexes (high → low, safe). Returns new array. */
125
- removeIndexes<T>(items: T[], indexes: number[]): T[];
126
- /** Swap items at positions i and j. Returns new array. */
127
- swapAt<T>(items: T[], i: number, j: number): T[];
128
-
129
- // ── Low-level: placement ──────────────────────────────────────────────────
130
- /** 'before' or 'after' relative to the orientation axis, or null if ambiguous. */
131
- getInsertSide(
132
- placement: IPlacement | undefined,
133
- orientation: TPlacementOrientation
134
- ): TInsertSide | null;
135
- /** True when pointer is at the very start edge of the zone (no center). */
136
- isAtZoneStart(
137
- placement: IPlacement | undefined,
138
- orientation: TPlacementOrientation
139
- ): boolean;
140
- /** True when pointer is at the very end edge of the zone (no center). */
141
- isAtZoneEnd(
142
- placement: IPlacement | undefined,
143
- orientation: TPlacementOrientation
144
- ): boolean;
145
-
146
- // ── High-level: event-bound presets ───────────────────────────────────────
147
-
148
- /**
149
- * **Sort / Transfer** — universal insert.
150
- *
151
- * - With `hoveredDraggable`: inserts dragged items before or after the
152
- * hovered element (determined by cursor placement).
153
- * - Without `hoveredDraggable`: appends to zone start/end based on zone placement.
154
- * - Same-list: reorders in place. Cross-list: transfers (removes from source, inserts into target).
155
- *
156
- * Returns null when context is insufficient (no draggedItems or no dropZone).
157
- * Cast result arrays to your item type: `r.targetItems as MyItem[]`.
158
- */
159
- suggestSort(orientation?: TPlacementOrientation): ISuggestSortResult | null;
160
-
161
- /**
162
- * **Swap** — exchange the single dragged item with the hovered element.
163
- *
164
- * - Same-list: swaps two positions in one array.
165
- * - Cross-list: exchanges items between two arrays.
166
- *
167
- * Returns null when multi-drag or no `hoveredDraggable`.
168
- */
169
- suggestSwap(): ISuggestSwapResult | null;
170
-
171
- /**
172
- * **Copy** — insert copies of dragged items at target position WITHOUT removing from source.
173
- *
174
- * Position logic is identical to `suggestSort`.
175
- * Useful for copy-on-drag (e.g. held Ctrl key).
176
- *
177
- * Returns null when context is insufficient.
178
- */
179
- suggestCopy(orientation?: TPlacementOrientation): ISuggestCopyResult | null;
180
-
181
- /**
182
- * **Remove** — remove dragged items from their source list.
183
- *
184
- * Returns null when there are no draggedItems.
185
- */
186
- suggestRemove(): ISuggestRemoveResult | null;
187
- }
@@ -1,34 +0,0 @@
1
- /**
2
- * Which side(s) of the element/zone the pointer is in.
3
- * Multiple flags can be true (e.g. top + right for corner). Do not normalize.
4
- * - vertical list: top = before, bottom = after
5
- * - horizontal list: left = before, right = after
6
- * - center: pointer in center zone (dual-role draggable+zone)
7
- */
8
- export interface IPlacement {
9
- top: boolean;
10
- right: boolean;
11
- bottom: boolean;
12
- left: boolean;
13
- /** True when pointer is in center zone (inside placementMargins). Used for dual-role draggable+zone. */
14
- center: boolean;
15
- }
16
-
17
- export type TPlacementOrientation = 'vertical' | 'horizontal';
18
-
19
- /** 'before' | 'after' for insert position along one axis */
20
- export type TInsertSide = 'before' | 'after';
21
-
22
- export interface IPlacementMargins {
23
- top?: number;
24
- right?: number;
25
- bottom?: number;
26
- left?: number;
27
- }
28
-
29
- /** Options for makeAutoScroll and DnDProvider autoScrollViewport prop */
30
- export interface IAutoScrollOptions {
31
- threshold?: number | IPlacementMargins;
32
- speed?: number;
33
- disabled?: boolean;
34
- }
@@ -1,10 +0,0 @@
1
- export interface ICoordinates {
2
- x: number;
3
- y: number;
4
- }
5
-
6
- export type TPointerState = {
7
- start: ICoordinates;
8
- current: ICoordinates;
9
- offset: ICoordinates;
10
- } | undefined | null
@@ -1,89 +0,0 @@
1
- import { IConstraintsAreaEntity, IDraggableEntity, IDroppableEntity, IEntities, ISelectableAreaEntity, TDnDNode, IDragItem, IDropZoneContext } from './entities';
2
- import { ICoordinates, TPointerState } from './pointer';
3
- import { IAutoScrollOptions } from './placement';
4
- import { IHelpers, IHoveredDraggableContext } from './operations';
5
- import { Component, ComputedRef, CSSProperties, Reactive, Ref, ShallowRef, VNode, VueElement, WritableComputedRef } from 'vue';
6
-
7
-
8
- /** Event object passed to all drag/drop handlers */
9
- export interface IDragEvent<DragT = unknown, ZoneT = unknown> {
10
- /** All dragged items sorted by index. Length > 1 means multi-drag. */
11
- draggedItems: IDragItem<DragT>[];
12
- /** Drop zone context — present in onEnter / onDrop / onLeave. */
13
- dropZone: IDropZoneContext<ZoneT> | undefined;
14
- /** Draggable element under cursor inside the zone — use for insert-before/after. */
15
- hoveredDraggable: IHoveredDraggableContext | undefined;
16
- provider: IDnDProviderExternal;
17
- /** Helpers bound to this event. Low-level array ops + high-level suggest* presets. */
18
- helpers: IHelpers;
19
- }
20
-
21
- /** Map element → placement for elements under cursor during drag */
22
- export type THoveredMap = Map<HTMLElement, IPlacement>;
23
-
24
- export interface IHovered {
25
- draggable: THoveredMap;
26
- droppable: THoveredMap;
27
- }
28
-
29
- export interface ICollision {
30
- throttle: Ref<number>;
31
- }
32
-
33
- export interface IDnDProviderExternal {
34
- state: Ref<TDnDState | undefined>;
35
- pointer: Ref<TPointerState | undefined>;
36
- entities: Reactive<IEntities>;
37
- keyboard: {
38
- keys: {
39
- pressedKeys: Ref<Set<string>>;
40
- forDrag: string[];
41
- forCancel: string[];
42
- forDrop: string[];
43
- forMove: string[];
44
- forMoveFaster: string[];
45
- };
46
- step: number;
47
- moveFaster: number;
48
- };
49
- scrollPosition: Reactive<ICoordinates>;
50
- delay: Reactive<IDelay>;
51
- distanceProgress: ComputedRef<number>;
52
- preview: {
53
- ref: Ref<HTMLElement | null>;
54
- position: ComputedRef<ICoordinates>;
55
- size: ShallowRef<DOMRect>;
56
- render: Ref<Component | undefined>;
57
- to: WritableComputedRef<string | false | null | undefined>;
58
- };
59
- hovered: IHovered;
60
- collision: ICollision;
61
- autoScrollViewport: ComputedRef<
62
- IAutoScrollOptions | true | false | null | undefined
63
- >;
64
- }
65
-
66
- export interface IDelay {
67
- progress: number;
68
- startTime: number;
69
- }
70
-
71
- export type TDnDState =
72
- | 'dragging'
73
- | 'selecting'
74
- | 'activating'
75
- | 'pending' /** awaiting async onDrop (e.g. confirm); drag still active */
76
- | null
77
- | undefined;
78
-
79
- export type TDropResult = 'accept' | 'cancel' | 'decline';
80
-
81
- /** DnDProvider props */
82
- export interface IDnDProviderProps {
83
- /** Enable viewport auto-scroll: true = defaults, object = options. false | null | undefined = disabled. */
84
- autoScrollViewport?: IAutoScrollOptions | true | false | null;
85
- /** Teleport preview to element: 'body' = defaults, string = element id. false | null | undefined = disabled. */
86
- previewTo?: string | false | null;
87
- style?: any;
88
- class?: any;
89
- }
@@ -1,2 +0,0 @@
1
- import { IDnDProviderInternal } from '../types/provider';
2
- export declare const useDnDProviderEvents: (provider: IDnDProviderInternal) => void;
@@ -1,2 +0,0 @@
1
- import { IDnDProviderInternal } from '../types/provider';
2
- export declare const useDnDProviderInternal: () => IDnDProviderInternal;
@@ -1,4 +0,0 @@
1
- import { Ref } from 'vue';
2
- import { IDnDProviderProps } from '../../external/types/provider';
3
- import { IDnDProviderInternal } from '../types/provider';
4
- export declare function useDnDProviderState(previewRef: Ref<HTMLElement | null>, props?: IDnDProviderProps): IDnDProviderInternal;
@@ -1,9 +0,0 @@
1
- import { IAutoScrollOptionsInternal } from '../types/auto-scroll';
2
- import { IDnDProviderInternal } from '../types/provider';
3
- /**
4
- * Internal composable: viewport (window) auto-scroll. Not exposed to user.
5
- */
6
- export declare function useViewportAutoScroll(provider: IDnDProviderInternal, options?: IAutoScrollOptionsInternal): {
7
- isScrolling: import('vue').ShallowRef<boolean, boolean>;
8
- stop: () => void;
9
- };
@@ -1,6 +0,0 @@
1
- import { IDnDProviderInternal } from '../types/provider';
2
- import { IHovered } from '../../external/types/provider';
3
- export declare const applyCollisionResultToHovered: (provider: IDnDProviderInternal, hovered: IHovered, result: {
4
- elements: HTMLElement[];
5
- zones: HTMLElement[];
6
- }) => void;
@@ -1,6 +0,0 @@
1
- import { IDnDProviderInternal } from '../types/provider';
2
- export declare const handleKeyboardEvents: {
3
- keyDown: (provider: IDnDProviderInternal) => (event: KeyboardEvent) => void;
4
- keyUp: (provider: IDnDProviderInternal) => (event: KeyboardEvent) => void;
5
- clear: (provider: IDnDProviderInternal) => () => void;
6
- };
@@ -1,35 +0,0 @@
1
- import { IHelpers, IPlacementHelpers, ISuggestCopyResult, ISuggestRemoveResult, ISuggestSortResult, ISuggestSwapResult } from '../../external/types/operations';
2
- import { TPlacementOrientation, IPlacement } from '../../external/types/placement';
3
- /** Minimal event shape used by internal suggest* (avoids circular import). */
4
- export interface IDropEventContext {
5
- draggedItems: Array<{
6
- index: number;
7
- item: unknown;
8
- items: unknown[];
9
- data?: unknown;
10
- }>;
11
- dropZone?: {
12
- items: unknown[];
13
- placement: IPlacement | undefined;
14
- data?: unknown;
15
- };
16
- hoveredDraggable?: {
17
- element: HTMLElement;
18
- placement: IPlacement;
19
- index: number;
20
- item: unknown;
21
- items: unknown[];
22
- data?: unknown;
23
- };
24
- }
25
- export declare function insertAt<T>(items: T[], index: number, toInsert: T[]): T[];
26
- export declare function removeAt<T>(items: T[], index: number, count?: number): T[];
27
- /** Remove multiple indexes (order-safe: removes high → low). Returns new array. */
28
- export declare function removeIndexes<T>(items: T[], indexes: number[]): T[];
29
- export declare function swapAt<T>(items: T[], i: number, j: number): T[];
30
- export declare const placementHelpers: IPlacementHelpers;
31
- export declare function _suggestSort(event: IDropEventContext, orientation?: TPlacementOrientation): ISuggestSortResult | null;
32
- export declare function _suggestSwap(event: IDropEventContext): ISuggestSwapResult | null;
33
- export declare function _suggestCopy(event: IDropEventContext, orientation?: TPlacementOrientation): ISuggestCopyResult | null;
34
- export declare function _suggestRemove(event: IDropEventContext): ISuggestRemoveResult | null;
35
- export declare function createHelpers(ctx: IDropEventContext): IHelpers;
@@ -1,5 +0,0 @@
1
- export {};
2
- /**
3
- * @internal — legacy helpers kept for compatibility with any code that might import them.
4
- * The main drag event is now built directly in events.ts via buildDraggedItems().
5
- */
@@ -1,11 +0,0 @@
1
- import { IDnDProviderInternal } from '../types/provider';
2
- import { TDropResult } from '../../external';
3
- export declare function runCollisionAndApply(provider: IDnDProviderInternal): void;
4
- export declare function handleDropAndFinish(provider: IDnDProviderInternal): Promise<TDropResult>;
5
- export declare function finishDragSession(provider: IDnDProviderInternal): void;
6
- export declare const createPointerHandlers: (provider: IDnDProviderInternal) => {
7
- pointerDown: (event: PointerEvent) => void;
8
- pointerUp: () => Promise<void>;
9
- pointerMove: (event: PointerEvent) => void;
10
- cleanup: () => void;
11
- };
@@ -1,2 +0,0 @@
1
- import { IDnDProviderInternal } from '../types/provider';
2
- export declare const handleScrollEvent: (provider: IDnDProviderInternal) => () => void;
@@ -1,18 +0,0 @@
1
- import { CollisionDetectionFn } from './sensor';
2
- import { IDnDProviderInternal } from '../types/provider';
3
- /**
4
- * Phase 1: ancestor-walk from the topmost element under the cursor.
5
- *
6
- * document.elementFromPoint (singular) returns the actual hit-tested element —
7
- * the same target as a real pointer event. Walking up from it collects only
8
- * registered elements that are ancestors (or the element itself), which means
9
- * elements behind a modal are never included even though they share the same
10
- * screen coordinates.
11
- *
12
- * Returns null when no registered element or zone is found in the ancestor chain.
13
- */
14
- export declare function runCursorPhase(provider: IDnDProviderInternal): {
15
- elements: HTMLElement[];
16
- zones: HTMLElement[];
17
- } | null;
18
- export declare const defaultCollisionDetection: CollisionDetectionFn;
@@ -1,2 +0,0 @@
1
- export * from './steps';
2
- export { defaultCollisionDetection } from './default-collision';
@@ -1,68 +0,0 @@
1
- import { IBoundingBox } from '../utils/geometry';
2
- import { IDnDProviderInternal } from '../types/provider';
3
- /**
4
- * Collision detection function signature.
5
- * Returns sorted lists of colliding elements and zones.
6
- *
7
- * IMPORTANT: When implementing custom sensors, use:
8
- * - `provider.entities.allowedDroppableSet` for zones (visible + filtered by groups)
9
- * - `provider.entities.allowedDraggableSet` for draggedItems (visible + filtered by groups)
10
- * OR use helper functions from `steps.ts`: `allowedVisibleZones()` and `visibleElements()`.
11
- */
12
- export type CollisionDetectionFn = (provider: IDnDProviderInternal) => {
13
- elements: HTMLElement[];
14
- zones: HTMLElement[];
15
- };
16
- export type TContainerFn = (provider: IDnDProviderInternal) => HTMLElement | null;
17
- export type TContainerBoxFn = (provider: IDnDProviderInternal) => IBoundingBox;
18
- export type TCandidatesFn = (provider: IDnDProviderInternal) => Iterable<HTMLElement>;
19
- export type TFilterFn = (node: HTMLElement, provider: IDnDProviderInternal) => boolean;
20
- export type TCollisionContext = {
21
- containerBox: IBoundingBox;
22
- pointer: {
23
- x: number;
24
- y: number;
25
- };
26
- };
27
- export type TCollisionCheckFn = (nodeBox: IBoundingBox, ctx: TCollisionContext) => boolean;
28
- export type TSortCompareFn = (a: {
29
- node: HTMLElement;
30
- box: IBoundingBox;
31
- meta: ICollisionMeta;
32
- }, b: {
33
- node: HTMLElement;
34
- box: IBoundingBox;
35
- meta: ICollisionMeta;
36
- }, ctx: {
37
- containerBox: IBoundingBox;
38
- pointer: {
39
- x: number;
40
- y: number;
41
- };
42
- }) => number;
43
- /** Merge strategy: how to combine elements and zones into final result */
44
- export type TMergeStrategy = 'separate' | 'unified-closest';
45
- export interface ICollisionMeta {
46
- isPointerInElement: boolean;
47
- overlapPercent: number;
48
- depth: number;
49
- centerDistance: number;
50
- }
51
- export interface ISensorBuilder {
52
- container(fn: TContainerFn): ISensorBuilder;
53
- containerBox(fn: TContainerBoxFn): ISensorBuilder;
54
- elements(fn: TCandidatesFn): ISensorBuilder;
55
- zones(fn: TCandidatesFn): ISensorBuilder;
56
- filterElements(fn: TFilterFn): ISensorBuilder;
57
- filterZones(fn: TFilterFn): ISensorBuilder;
58
- collision(fn: TCollisionCheckFn): ISensorBuilder;
59
- sortElements(fn: TSortCompareFn): ISensorBuilder;
60
- sortZones(fn: TSortCompareFn): ISensorBuilder;
61
- mergeStrategy(strategy: TMergeStrategy): ISensorBuilder;
62
- /** Pick closest between first zone and first element by distance to pointer */
63
- pickClosestBetweenFirst(enable: boolean): ISensorBuilder;
64
- /** Filter by minimum overlap percent (0-100). Applied after collision check. */
65
- minOverlapPercent(percent: number): ISensorBuilder;
66
- build(): CollisionDetectionFn;
67
- }
68
- export declare const createSensor: () => ISensorBuilder;
@@ -1,58 +0,0 @@
1
- import { IDnDProviderInternal } from '../types/provider';
2
- import { TSortCompareFn, TFilterFn, TCollisionCheckFn, TContainerBoxFn } from './sensor';
3
- /** Container from overlay ref */
4
- export declare const previewContainer: (p: IDnDProviderInternal) => HTMLElement | null;
5
- /**
6
- * Box from overlay style (x,y) + size.
7
- * The overlay is `position:fixed; top:0; left:0; transform:translate(x,y)`, so
8
- * getBoundingClientRect() is unreliable for the position (transform offsets it from 0,0).
9
- * However the SIZE from getBoundingClientRect IS correct and is used as a fallback
10
- * when the ResizeObserver hasn't fired yet (`overlay.size.value` is still null).
11
- *
12
- * Without the fallback: size=0 → containerBox is a zero-size point → pointer.x <= box.x+0
13
- * fails whenever offset.x>0 (grabbed away from left edge) → pointerInContainer=false always.
14
- */
15
- export declare const previewBoxFromStyle: TContainerBoxFn;
16
- /** Allowed draggedItems (visible + filtered by groups) */
17
- export declare const visibleElements: (p: IDnDProviderInternal) => Set<HTMLElement>;
18
- /** Allowed droppables (visible + filtered by groups) */
19
- export declare const allowedVisibleZones: (p: IDnDProviderInternal) => Set<HTMLElement>;
20
- /** Exclude nodes being dragged */
21
- export declare const filterNotDragging: TFilterFn;
22
- /** Exclude nodes that are descendants of any dragged element (nesting into self) */
23
- export declare const filterNotDescendantOfDragged: TFilterFn;
24
- /**
25
- * Exclude disabled draggedItems (including those inside disabled parents).
26
- * Role-specific: only looks at the node's draggable disabled state, so a node
27
- * that is also registered as droppable is unaffected by this check.
28
- */
29
- export declare const filterNotDisabledDraggable: TFilterFn;
30
- /**
31
- * Exclude disabled zones (including those inside disabled parents).
32
- * Role-specific: only looks at the node's droppable disabled state, so a node
33
- * that is also registered as draggable is unaffected by this check.
34
- */
35
- export declare const filterNotDisabledDroppable: TFilterFn;
36
- /** Exclude: not dragging, not descendant of dragged, not disabled — as a draggable */
37
- export declare const filterValidDraggableTarget: TFilterFn;
38
- /** Exclude: not dragging, not descendant of dragged, not disabled — as a zone */
39
- export declare const filterValidDroppableTarget: TFilterFn;
40
- /** AABB overlap check (element vs container) — legacy */
41
- export declare const aabbCollision: TCollisionCheckFn;
42
- /** Pointer-in-element: cursor must be inside element (AABB of element) */
43
- export declare const pointerInElementCollision: TCollisionCheckFn;
44
- /** Always true — no container check (for "closest on screen" regardless of overlay position) */
45
- export declare const noContainerCollision: TCollisionCheckFn;
46
- /** Sort: deepest first (topmost visible element under cursor) */
47
- export declare const sortByDepth: TSortCompareFn;
48
- /** Sort: by distance from pointer to element center (closest first) */
49
- export declare const sortByPointerDistance: TSortCompareFn;
50
- /**
51
- * Sort: pointer-in-element + depth when pointer inside container; overlap % + centerDistance when outside.
52
- *
53
- * The container box MUST be computed via previewBoxFromStyle (not getBoundingClientRect) so that
54
- * position is correct for a fixed+transform overlay. The size fallback in previewBoxFromStyle ensures
55
- * the box is never zero-sized on the first frame, making `pointerInContainer` reliably true whenever
56
- * the cursor is above the drag ghost.
57
- */
58
- export declare const sortByOverlapAndPointer: TSortCompareFn;
@@ -1,20 +0,0 @@
1
- /** Internal: options for auto-scroll controller (same shape as IAutoScrollOptions for compatibility) */
2
- export interface IAutoScrollOptionsInternal {
3
- threshold?: number | { top?: number; right?: number; bottom?: number; left?: number };
4
- speed?: number;
5
- disabled?: boolean;
6
- }
7
-
8
- export interface IScrollState {
9
- scrollTop: number;
10
- scrollLeft: number;
11
- }
12
-
13
- export interface IScrollAdapter {
14
- getScrollState(el: HTMLElement): IScrollState;
15
- setScroll(el: HTMLElement, scrollTop: number, scrollLeft: number): void;
16
- /** Override rect calculation. Defaults to el.getBoundingClientRect(). */
17
- getRect?(el: HTMLElement): DOMRect;
18
- }
19
-
20
- export type TOverlayPoint = { x: number; y: number } | null;
@@ -1,11 +0,0 @@
1
- export interface ISizeObserverWrapper {
2
- observe: (element: HTMLElement) => void;
3
- unobserve: (element: HTMLElement) => void;
4
- disconnect: () => void;
5
- }
6
-
7
- export interface IIntersectionObserverWrapper {
8
- observe: (element: HTMLElement) => void;
9
- unobserve: (element: HTMLElement) => void;
10
- disconnect: () => void;
11
- }
@@ -1,31 +0,0 @@
1
- import { Ref } from 'vue';
2
- import { IDnDProviderExternal } from '../../external';
3
- import { IAutoScrollOptions } from '../../external/types/placement';
4
- import { IIntersectionObserverWrapper } from './observer';
5
-
6
-
7
- export interface IKeyboardKeys {
8
- pressedKeys: Ref<Set<string>>;
9
- forDrag: string[];
10
- forCancel: string[];
11
- forDrop: string[];
12
- forMove: string[];
13
- forMoveFaster: string[];
14
- }
15
-
16
- export interface IKeyboardState {
17
- keys: IKeyboardKeys;
18
- step: number;
19
- moveFaster: number;
20
- }
21
-
22
- export interface IDnDProviderInternal extends IDnDProviderExternal {
23
- keyboard: IKeyboardState;
24
- lib: {
25
- draggableObserver: IIntersectionObserverWrapper;
26
- droppableObserver: IIntersectionObserverWrapper;
27
- selectableAreaObserver: IIntersectionObserverWrapper;
28
- /** BoundingClientRect cache — invalidated on scroll and session reset */
29
- rectCache: Map<HTMLElement, DOMRect>;
30
- };
31
- }
@@ -1,13 +0,0 @@
1
- import { IAutoScrollOptionsInternal, IScrollAdapter, TOverlayPoint } from '../types/auto-scroll';
2
- export declare const defaultScrollAdapter: IScrollAdapter;
3
- /**
4
- * Creates run/stop controller for auto-scroll loop. Element scroll only (no viewport).
5
- */
6
- export declare function createAutoScrollController(containerRef: {
7
- value: HTMLElement | null;
8
- }, options: IAutoScrollOptionsInternal, getOverlayPoint: () => TOverlayPoint, scrollAdapter?: IScrollAdapter, isScrollingRef?: {
9
- value: boolean;
10
- }): {
11
- run: () => void;
12
- stop: () => void;
13
- };