@vue-dnd-kit/core 1.7.0 → 2.0.0-alpha10

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 (59) hide show
  1. package/README.md +74 -305
  2. package/dist/external/components/DefaultOverlay.vue.d.ts +2 -0
  3. package/dist/external/components/DnDProvider.vue.d.ts +25 -0
  4. package/dist/external/composables/makeAutoScroll.d.ts +13 -0
  5. package/dist/external/composables/makeConstraintArea.d.ts +7 -0
  6. package/dist/external/composables/makeDraggable.d.ts +19 -0
  7. package/dist/external/composables/makeDroppable.d.ts +13 -0
  8. package/dist/external/composables/makeSelectionArea.d.ts +14 -0
  9. package/dist/external/composables/makeSnappedOverlayPosition.d.ts +20 -0
  10. package/dist/external/composables/useDnDProvider.d.ts +2 -0
  11. package/dist/external/env.d.ts +7 -0
  12. package/dist/external/index.d.ts +11 -0
  13. package/dist/external/types/entities.d.ts +157 -0
  14. package/dist/external/types/index.d.ts +4 -0
  15. package/dist/external/types/placement.d.ts +22 -0
  16. package/dist/external/types/pointer.d.ts +10 -0
  17. package/dist/external/types/provider.d.ts +84 -0
  18. package/dist/index.d.ts +2 -2141
  19. package/dist/internal/composables/useDnDProviderEvents.d.ts +2 -0
  20. package/dist/internal/composables/useDnDProviderInternal.d.ts +2 -0
  21. package/dist/internal/composables/useDnDProviderState.d.ts +4 -0
  22. package/dist/internal/composables/useSizeObserver.d.ts +33 -0
  23. package/dist/internal/composables/useViewportAutoScroll.d.ts +9 -0
  24. package/dist/internal/logic/hover.d.ts +7 -0
  25. package/dist/internal/logic/keyboard.d.ts +6 -0
  26. package/dist/internal/logic/payload.d.ts +12 -0
  27. package/dist/internal/logic/pointer.d.ts +9 -0
  28. package/dist/internal/logic/scroll.d.ts +2 -0
  29. package/dist/internal/sensors/default-collision.d.ts +7 -0
  30. package/dist/internal/sensors/index.d.ts +3 -0
  31. package/dist/internal/sensors/sensor.d.ts +68 -0
  32. package/dist/internal/sensors/steps.d.ts +30 -0
  33. package/dist/internal/types/auto-scroll.d.ts +19 -0
  34. package/dist/internal/types/observer.d.ts +11 -0
  35. package/dist/internal/types/provider.d.ts +30 -0
  36. package/dist/internal/utils/auto-scroll.d.ts +13 -0
  37. package/dist/internal/utils/constraints.d.ts +40 -0
  38. package/dist/internal/utils/disabled.d.ts +9 -0
  39. package/dist/internal/utils/dom.d.ts +44 -0
  40. package/dist/internal/utils/drag-activation.d.ts +29 -0
  41. package/dist/internal/utils/events.d.ts +22 -0
  42. package/dist/internal/utils/geometry.d.ts +23 -0
  43. package/dist/internal/utils/groups.d.ts +19 -0
  44. package/dist/internal/utils/hover.d.ts +29 -0
  45. package/dist/internal/utils/keyboard.d.ts +5 -0
  46. package/dist/internal/utils/namespaces.d.ts +18 -0
  47. package/dist/internal/utils/observer.d.ts +27 -0
  48. package/dist/internal/utils/placement.d.ts +22 -0
  49. package/dist/internal/utils/pointer.d.ts +33 -0
  50. package/dist/internal/utils/provider.d.ts +12 -0
  51. package/dist/internal/utils/selection.d.ts +27 -0
  52. package/dist/internal/utils/session.d.ts +5 -0
  53. package/dist/vite.svg +1 -0
  54. package/dist/vue-dnd-kit-core.cjs.js +2 -2
  55. package/dist/vue-dnd-kit-core.es.js +1237 -850
  56. package/package.json +75 -73
  57. package/LICENSE +0 -21
  58. package/dist/vue-dnd-kit-core.cjs.js.map +0 -1
  59. package/dist/vue-dnd-kit-core.es.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ import { IDnDProviderInternal } from '../types/provider';
2
+ export declare const useDnDProviderEvents: (provider: IDnDProviderInternal) => void;
@@ -0,0 +1,2 @@
1
+ import { IDnDProviderInternal } from '../types/provider';
2
+ export declare const useDnDProviderInternal: () => IDnDProviderInternal;
@@ -0,0 +1,4 @@
1
+ import { Ref } from 'vue';
2
+ import { IDnDProviderProps } from '../../external/types/provider';
3
+ import { IDnDProviderInternal } from '../types/provider';
4
+ export declare function useDnDProviderState(overlayRef: Ref<HTMLElement | null>, props?: IDnDProviderProps): IDnDProviderInternal;
@@ -0,0 +1,33 @@
1
+ import { Ref } from 'vue';
2
+ /**
3
+ * Tracks element size via ResizeObserver, writes to returned ref
4
+ *
5
+ * @param elementRef - Ref to element to observe
6
+ * @returns { overlaySize, overlaySizeObserver } — ref with { width, height } and cleanup
7
+ */
8
+ export declare const useSizeObserver: (elementRef: Ref<HTMLElement | null>) => {
9
+ overlaySize: Ref<{
10
+ height: number;
11
+ width: number;
12
+ x: number;
13
+ y: number;
14
+ readonly bottom: number;
15
+ readonly left: number;
16
+ readonly right: number;
17
+ readonly top: number;
18
+ toJSON: () => any;
19
+ } | null, DOMRect | {
20
+ height: number;
21
+ width: number;
22
+ x: number;
23
+ y: number;
24
+ readonly bottom: number;
25
+ readonly left: number;
26
+ readonly right: number;
27
+ readonly top: number;
28
+ toJSON: () => any;
29
+ } | null>;
30
+ overlaySizeObserver: {
31
+ disconnect: () => void;
32
+ };
33
+ };
@@ -0,0 +1,9 @@
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
+ };
@@ -0,0 +1,7 @@
1
+ import { IDnDProviderInternal } from '../types/provider';
2
+ import { IHovered } from '../../external/types/provider';
3
+ /** Applies collision result to hovered and triggers zone/draggable events */
4
+ export declare const applyCollisionResultToHovered: (provider: IDnDProviderInternal, hovered: IHovered, result: {
5
+ elements: HTMLElement[];
6
+ zones: HTMLElement[];
7
+ }) => void;
@@ -0,0 +1,6 @@
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
+ };
@@ -0,0 +1,12 @@
1
+ import { IDragPayload, IDropZonePayload } from '../../external/types';
2
+ import { IDnDProviderInternal } from '../types/provider';
3
+ /**
4
+ * Resolves payload from initiating draggable.
5
+ * Calls entity.payload() and returns { index, items, dropData }.
6
+ */
7
+ export declare const createDragPayload: (provider: IDnDProviderInternal) => IDragPayload | undefined;
8
+ /**
9
+ * Resolves payload from a droppable zone.
10
+ * Calls zone entity.payload() and returns { items, userData }.
11
+ */
12
+ export declare const createDropZonePayload: (provider: IDnDProviderInternal, zone: HTMLElement) => IDropZonePayload | undefined;
@@ -0,0 +1,9 @@
1
+ import { IDnDProviderInternal } from '../types/provider';
2
+ export declare function handleDropAndFinish(provider: IDnDProviderInternal): Promise<boolean>;
3
+ export declare function finishDragSession(provider: IDnDProviderInternal): void;
4
+ export declare const createPointerHandlers: (provider: IDnDProviderInternal) => {
5
+ pointerDown: (event: PointerEvent) => void;
6
+ pointerUp: () => Promise<void>;
7
+ pointerMove: (event: PointerEvent) => void;
8
+ cleanup: () => void;
9
+ };
@@ -0,0 +1,2 @@
1
+ import { IDnDProviderInternal } from '../types/provider';
2
+ export declare const handleScrollEvent: (provider: IDnDProviderInternal) => () => void;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Default collision: same logic as vue-dnd-box reference
3
+ * - Filter: AABB overlap with container (overlay)
4
+ * - Sort: pointer outside container → isPointerInElement + depth; else overlap % + centerDistance
5
+ * - Picks closest to pointer when both zone and element present
6
+ */
7
+ export declare const defaultCollisionDetection: import('./sensor').CollisionDetectionFn;
@@ -0,0 +1,3 @@
1
+ export * from './steps';
2
+ export { defaultCollisionDetection } from './default-collision';
3
+ export { createSensor, type CollisionDetectionFn, type TMergeStrategy, } from './sensor';
@@ -0,0 +1,68 @@
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 draggables (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;
@@ -0,0 +1,30 @@
1
+ import { IDnDProviderInternal } from '../types/provider';
2
+ import { TSortCompareFn, TFilterFn, TCollisionCheckFn, TContainerBoxFn } from './sensor';
3
+ /** Container from overlay ref */
4
+ export declare const overlayContainer: (p: IDnDProviderInternal) => HTMLElement | null;
5
+ /** Box from overlay style (x,y) + size — overlay uses fixed+transform, getBoundingClientRect is wrong */
6
+ export declare const overlayBoxFromStyle: TContainerBoxFn;
7
+ /** Allowed draggables (visible + filtered by groups) */
8
+ export declare const visibleElements: (p: IDnDProviderInternal) => Set<HTMLElement>;
9
+ /** Allowed droppables (visible + filtered by groups) */
10
+ export declare const allowedVisibleZones: (p: IDnDProviderInternal) => Set<HTMLElement>;
11
+ /** Exclude nodes being dragged */
12
+ export declare const filterNotDragging: TFilterFn;
13
+ /** Exclude nodes that are descendants of any dragged element (nesting into self) */
14
+ export declare const filterNotDescendantOfDragged: TFilterFn;
15
+ /** Exclude disabled draggables and zones (including those inside disabled parents) */
16
+ export declare const filterNotDisabled: TFilterFn;
17
+ /** Exclude: not dragging, not descendant of dragged, not disabled */
18
+ export declare const filterValidCollisionTarget: TFilterFn;
19
+ /** AABB overlap check (element vs container) — legacy */
20
+ export declare const aabbCollision: TCollisionCheckFn;
21
+ /** Pointer-in-element: cursor must be inside element (AABB of element) */
22
+ export declare const pointerInElementCollision: TCollisionCheckFn;
23
+ /** Always true — no container check (for "closest on screen" regardless of overlay position) */
24
+ export declare const noContainerCollision: TCollisionCheckFn;
25
+ /** Sort: deepest first (topmost visible element under cursor) */
26
+ export declare const sortByDepth: TSortCompareFn;
27
+ /** Sort: by distance from pointer to element center (closest first) */
28
+ export declare const sortByPointerDistance: TSortCompareFn;
29
+ /** Sort: pointer-in-element + depth when pointer INSIDE container; overlap % + centerDistance when OUTSIDE */
30
+ export declare const sortByOverlapAndPointer: TSortCompareFn;
@@ -0,0 +1,19 @@
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
+ rect: DOMRect;
12
+ }
13
+
14
+ export interface IScrollAdapter {
15
+ getScrollState(el: HTMLElement): IScrollState;
16
+ setScroll(el: HTMLElement, scrollTop: number, scrollLeft: number): void;
17
+ }
18
+
19
+ export type TOverlayPoint = { x: number; y: number } | null;
@@ -0,0 +1,11 @@
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
+ }
@@ -0,0 +1,30 @@
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
+ overlaySizeObserver: { disconnect: () => void };
29
+ };
30
+ }
@@ -0,0 +1,13 @@
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
+ };
@@ -0,0 +1,40 @@
1
+ import { IConstraintsAreaEntity, TPointerState } from '../../external/types';
2
+ /**
3
+ * Finds constraint area for a draggable element
4
+ */
5
+ export declare function findConstraintArea(draggable: HTMLElement, constraintsAreaMap: Map<HTMLElement, IConstraintsAreaEntity>): {
6
+ element: HTMLElement;
7
+ entity: IConstraintsAreaEntity;
8
+ } | null;
9
+ /**
10
+ * Applies axis constraint
11
+ */
12
+ export declare function applyAxisConstraint(targetX: number, targetY: number, axis: 'x' | 'y' | 'both', draggableRect: DOMRect): {
13
+ x: number;
14
+ y: number;
15
+ };
16
+ /**
17
+ * Applies bounds constraint within container
18
+ */
19
+ export declare function applyBoundsConstraint(targetX: number, targetY: number, axis: 'x' | 'y' | 'both', constraintRect: DOMRect, overlayRect: DOMRect): {
20
+ x: number;
21
+ y: number;
22
+ };
23
+ /**
24
+ * Calculates final overlay position with all constraints applied
25
+ */
26
+ export declare function calculateConstrainedPosition(pointer: TPointerState, overlayElement: HTMLElement | null, firstDraggable: HTMLElement | null, constraintsAreaMap: Map<HTMLElement, IConstraintsAreaEntity>, overlaySizeFallback?: {
27
+ width: number;
28
+ height: number;
29
+ } | null): {
30
+ x: number;
31
+ y: number;
32
+ };
33
+ /**
34
+ * Updates pointer.current with constraint-applied coordinates.
35
+ * When constraints exist, stores the "effective" position so pointer matches overlay.
36
+ */
37
+ export declare function updatePointerWithConstraints(pointer: TPointerState, rawX: number, rawY: number, overlayElement: HTMLElement | null, firstDraggable: HTMLElement | null, constraintsAreaMap: Map<HTMLElement, IConstraintsAreaEntity>, overlaySizeFallback?: {
38
+ width: number;
39
+ height: number;
40
+ } | null): void;
@@ -0,0 +1,9 @@
1
+ import { IEntities } from '../../external/types';
2
+ /** Minimal context for draggable/droppable checks */
3
+ export type IEffectivelyDisabledContext = {
4
+ entities: Pick<IEntities, 'draggableMap' | 'droppableMap'>;
5
+ };
6
+ /** True if node is disabled as draggable (self or inside disabled draggable). O(draggableMap.size) */
7
+ export declare const isEffectivelyDisabledDraggable: (node: HTMLElement, ctx: IEffectivelyDisabledContext) => boolean;
8
+ /** True if node is disabled as droppable (self or inside disabled droppable). O(droppableMap.size) */
9
+ export declare const isEffectivelyDisabledDroppable: (node: HTMLElement, ctx: IEffectivelyDisabledContext) => boolean;
@@ -0,0 +1,44 @@
1
+ import { ICoordinates, TDnDNodeRef } from '../../external/types';
2
+ /**
3
+ * Resolves template ref to HTMLElement (handles both element and component refs)
4
+ */
5
+ export declare const getNode: (node: TDnDNodeRef) => HTMLElement | null;
6
+ /**
7
+ * Checks if point (x, y) is inside rect
8
+ */
9
+ export declare const containsPoint: (rect: DOMRect, x: number, y: number) => boolean;
10
+ /**
11
+ * True if child is a descendant of parent (parent.contains(child) and parent !== child)
12
+ */
13
+ export declare const isDescendant: (parent: HTMLElement, child: HTMLElement) => boolean;
14
+ /**
15
+ * Checks if two DOMRects intersect
16
+ */
17
+ export declare const checkIntersection: (rect1: DOMRect, rect2: DOMRect) => boolean;
18
+ /**
19
+ * Returns true if event target is outside the container
20
+ */
21
+ export declare const isNotDirectClick: (event: Event, container: HTMLElement | null) => boolean;
22
+ /**
23
+ * Returns scroll direction based on cursor proximity to container edges
24
+ */
25
+ export declare const getAutoScrollDirection: (coords: ICoordinates, container: HTMLElement, threshold?: number) => {
26
+ x: number;
27
+ y: number;
28
+ };
29
+ /**
30
+ * Returns true if running in browser environment
31
+ */
32
+ export declare const isClient: () => boolean;
33
+ /**
34
+ * Disables user interactions during drag (user-select, context menu, etc.)
35
+ */
36
+ export declare const disableInteractions: () => void;
37
+ /**
38
+ * Restores user interactions after drag ends
39
+ */
40
+ export declare const enableInteractions: () => void;
41
+ /**
42
+ * Prevents default browser behavior for the event
43
+ */
44
+ export declare const preventEvent: (event: Event) => void;
@@ -0,0 +1,29 @@
1
+ import { IDragActivation, TPointerState } from '../../external/types';
2
+ import { IDnDProviderInternal } from '../types/provider';
3
+ /**
4
+ * Checks if the click target is within the drag handle (if specified)
5
+ * @param skipHandle - when true (e.g. keyboard drag), bypass handle check
6
+ */
7
+ export declare function checkDragHandle(target: HTMLElement, draggable: HTMLElement, handleSelector?: string, skipHandle?: boolean): boolean;
8
+ /**
9
+ * Calculates distance progress (0-1) for activation threshold
10
+ */
11
+ export declare function calculateDistanceProgress(pointer: TPointerState, distanceThreshold: IDragActivation['distance']): number;
12
+ /**
13
+ * Returns true if distance threshold is met
14
+ */
15
+ export declare function isDistanceThresholdPassed(pointer: TPointerState, distanceThreshold: IDragActivation['distance']): boolean;
16
+ /**
17
+ * Returns true if activation conditions are met (distance + delay, respecting condition)
18
+ */
19
+ export declare function isActivationComplete(distanceProgress: number, delayProgress: number, activation?: IDragActivation): boolean;
20
+ /**
21
+ * If activation is complete, starts dragging. Returns true if drag was started
22
+ */
23
+ export declare function tryStartDragIfActivationComplete(provider: IDnDProviderInternal): boolean;
24
+ /**
25
+ * Creates RAF-based delay timer that ticks until activation is complete, then calls onComplete
26
+ */
27
+ export declare function createActivationDelayTimer(provider: IDnDProviderInternal, onComplete: () => void): {
28
+ cancel: () => void;
29
+ };
@@ -0,0 +1,22 @@
1
+ import { IDnDProviderInternal } from '../types/provider';
2
+ import { IDragEvent, IHovered } from '../../external/types/provider';
3
+ export type TSelfDragEvent = 'onSelfDragStart' | 'onSelfDragMove' | 'onSelfDragEnd' | 'onSelfDragCancel';
4
+ /** First key from Map or undefined */
5
+ export declare const getFirstKey: <K>(map: Map<K, unknown>) => K | undefined;
6
+ /** Closest draggable from event target */
7
+ export declare const getClosestDraggableFromEvent: (event: PointerEvent) => HTMLElement | null;
8
+ export declare const getDragEvent: (provider: IDnDProviderInternal, dropZone?: HTMLElement) => IDragEvent;
9
+ /** Triggers onSelf* for element from event if it's in draggingMap */
10
+ export declare const triggerSelfDragFromEvent: (provider: IDnDProviderInternal, event: PointerEvent, eventName: TSelfDragEvent) => void;
11
+ /** Triggers onSelf* only for the initiating element (event.target.closest), skip if disabled */
12
+ export declare const triggerSelfDragForElement: (provider: IDnDProviderInternal, element: HTMLElement | undefined, eventName: TSelfDragEvent) => void;
13
+ /** Triggers onDrag* for ALL non-disabled draggable elements */
14
+ export declare const triggerDragForAll: (provider: IDnDProviderInternal, eventName: "onDragStart" | "onDragMove" | "onDragEnd" | "onDragCancel") => void;
15
+ /** Triggers zone onEnter/onLeave when zone changes, skip disabled zones */
16
+ export declare const triggerZoneEnterLeave: (provider: IDnDProviderInternal, prevZone: HTMLElement | undefined, newZone: HTMLElement | undefined) => void;
17
+ /** Triggers onHover/onLeave when hovered draggable changes, skip disabled */
18
+ export declare const triggerDraggableHoverChange: (provider: IDnDProviderInternal, prevEl: HTMLElement | undefined, newEl: HTMLElement | undefined) => void;
19
+ /** Triggers zone onLeave on drag end, skip disabled */
20
+ export declare const triggerZoneLeave: (provider: IDnDProviderInternal, hovered: IHovered) => void;
21
+ /** Triggers zone onLeave on drop failure, skip disabled */
22
+ export declare const triggerDropCancelEvents: (provider: IDnDProviderInternal, hovered: IHovered) => void;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * AABB geometry utilities for collision detection
3
+ */
4
+ export interface IBoundingBox {
5
+ x: number;
6
+ y: number;
7
+ width: number;
8
+ height: number;
9
+ top: number;
10
+ left: number;
11
+ right: number;
12
+ bottom: number;
13
+ }
14
+ export interface IPoint {
15
+ x: number;
16
+ y: number;
17
+ }
18
+ export declare const checkCollision: (boxA: IBoundingBox, boxB: IBoundingBox) => boolean;
19
+ export declare const getBoundingBox: (element: HTMLElement | null) => IBoundingBox;
20
+ export declare const getCenter: (box: IBoundingBox) => IPoint;
21
+ export declare const getDistance: (pointA: IPoint, pointB: IPoint) => number;
22
+ export declare const getOverlapPercent: (boxA: IBoundingBox, boxB: IBoundingBox) => number;
23
+ export declare const containsPoint: (box: IBoundingBox, x: number, y: number) => boolean;
@@ -0,0 +1,19 @@
1
+ import { IDraggableEntity, IDraggingEntity, IDroppableEntity } from '../../external/types/entities';
2
+ /**
3
+ * Checks compatibility between two group sets.
4
+ * Used for selection area, zones, droppable, etc.
5
+ *
6
+ * - Empty array = global (compatible with any)
7
+ * - Otherwise requires at least one shared group
8
+ */
9
+ export declare const areGroupsCompatible: (groupsA: string[], groupsB: string[]) => boolean;
10
+ /**
11
+ * Фильтрует видимые зоны по группам: оставляет только те, куда можно дропнуть
12
+ * текущий набор перетаскиваемых (draggingMap). Внутри сам берёт ключи из draggingMap.
13
+ */
14
+ export declare function filterByGroupsDroppables(visibleDroppableSet: Set<HTMLElement>, draggingMap: Map<HTMLElement, IDraggingEntity>, draggableMap: Map<HTMLElement, IDraggableEntity>, droppableMap: Map<HTMLElement, IDroppableEntity>): Set<HTMLElement>;
15
+ /**
16
+ * Фильтрует видимые драгаемые по группам: оставляет только те, что в одной «доступной» группе
17
+ * с текущим перетаскиваемым набором (draggingMap). Когда не тянем — все видимые доступны.
18
+ */
19
+ export declare function filterByGroupsDraggables(visibleDraggableSet: Set<HTMLElement>, draggingMap: Map<HTMLElement, IDraggingEntity>, draggableMap: Map<HTMLElement, IDraggableEntity>): Set<HTMLElement>;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Hover utilities: distance from pointer to element center
3
+ */
4
+ /** Distance from pointer to element center */
5
+ export declare const getDistanceFromPointerToElement: (pointer: {
6
+ x: number;
7
+ y: number;
8
+ }, element: HTMLElement) => number;
9
+ /**
10
+ * Get element center coordinates from DOMRect
11
+ * Utility for inline calculations without getBoundingClientRect call
12
+ */
13
+ export declare const getCenterFromRect: (rect: DOMRect) => {
14
+ x: number;
15
+ y: number;
16
+ };
17
+ /** Calculate distance between pointer and rect center */
18
+ export declare const getDistanceToRectCenter: (pointer: {
19
+ x: number;
20
+ y: number;
21
+ }, rect: DOMRect) => number;
22
+ /** Pick closest to pointer among zone and element (by distance to center). Returns { zone?, element? } */
23
+ export declare const pickClosestToPointer: (pointer: {
24
+ x: number;
25
+ y: number;
26
+ }, zone: HTMLElement | undefined, element: HTMLElement | undefined) => {
27
+ zone?: HTMLElement;
28
+ element?: HTMLElement;
29
+ };
@@ -0,0 +1,5 @@
1
+ export {};
2
+ /**
3
+ * Keyboard utilities for DnD Kit
4
+ * Reserved for future modifier key handling, shortcuts, etc.
5
+ */
@@ -0,0 +1,18 @@
1
+ /**
2
+ * DnD Kit data attributes and CSS selectors
3
+ */
4
+ export declare const DnDAttributes: {
5
+ readonly SELECT_AREA: "data-dnd-kit-select-area";
6
+ readonly DRAGGABLE: "data-dnd-kit-draggable";
7
+ readonly DROPPABLE: "data-dnd-kit-droppable";
8
+ readonly CONSTRAINT_AREA: "data-dnd-kit-constraint-area";
9
+ readonly CONTAINER: "data-dnd-kit-container";
10
+ };
11
+ export declare const DnDSelectors: {
12
+ readonly SELECT_AREA: "[data-dnd-kit-select-area]";
13
+ readonly DRAGGABLE: "[data-dnd-kit-draggable]";
14
+ readonly DROPPABLE: "[data-dnd-kit-droppable]";
15
+ readonly CONSTRAINT_AREA: "[data-dnd-kit-constraint-area]";
16
+ readonly CONTAINER: "[data-dnd-kit-container]";
17
+ };
18
+ export declare const injectionKey: "VueDnDKitProvider";
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Observers — IntersectionObserver (visibility) and ResizeObserver (size)
3
+ */
4
+ export interface IObserverWrapper {
5
+ observe: (element: HTMLElement) => void;
6
+ unobserve: (element: HTMLElement) => void;
7
+ disconnect: () => void;
8
+ }
9
+ /**
10
+ * Creates an IntersectionObserver that manages a Set of visible elements
11
+ *
12
+ * @param targetSet - Set to add/remove elements
13
+ * @returns Object with observe/unobserve/disconnect methods
14
+ */
15
+ export declare const createIntersectionObserver: (targetSet: Set<HTMLElement>) => IObserverWrapper;
16
+ /**
17
+ * Creates a ResizeObserver that tracks element size and writes to target ref
18
+ *
19
+ * @param target - Ref to write { width, height } on resize
20
+ * @returns Object with observe/unobserve/disconnect methods
21
+ */
22
+ export declare const createSizeObserver: (target: {
23
+ value: {
24
+ width: number;
25
+ height: number;
26
+ } | null;
27
+ }) => IObserverWrapper;
@@ -0,0 +1,22 @@
1
+ import { IDnDProviderExternal, IPlacement, IPlacementMargins } from '../../external';
2
+ export interface IRect {
3
+ top: number;
4
+ left: number;
5
+ width: number;
6
+ height: number;
7
+ }
8
+ /**
9
+ * Creates pointer box from coordinates (e.g. cursor as 5×5)
10
+ */
11
+ export declare const createPointerBox: (x: number, y: number, size?: number) => IRect;
12
+ /**
13
+ * Creates pointer box from provider (cursor as 5×5)
14
+ */
15
+ export declare const getPointerBoxFromProvider: (provider: IDnDProviderExternal) => IRect;
16
+ /**
17
+ * Returns placement: which side(s) of the element the pointer is in.
18
+ * - If placementMargins set and pointer in center zone → center: true, top/right/bottom/left all false.
19
+ * - Else → center: false, and top/right/bottom/left by quadrants (e.g. top+right for top-right);
20
+ * several can be true at once, only center is exclusive.
21
+ */
22
+ export declare const getClosestPlacement: (pointerBox: IRect, elementRect: DOMRect, margins?: IPlacementMargins) => IPlacement;
@@ -0,0 +1,33 @@
1
+ import { IDraggableEntity, IDraggingEntity, TPointerState } from '../../external/types';
2
+ import { IDnDProviderInternal } from '../types/provider';
3
+ /**
4
+ * Creates initial pointer state from event
5
+ */
6
+ export declare function createPointerState(event: PointerEvent, offsetX?: number, offsetY?: number): TPointerState;
7
+ /**
8
+ * Calculates cursor offset as ratio (0–1) relative to element size
9
+ */
10
+ export declare function calculateCursorOffset(event: PointerEvent, element: HTMLElement): {
11
+ x: number;
12
+ y: number;
13
+ };
14
+ /**
15
+ * Creates dragging entity with initial data
16
+ */
17
+ export declare function createDraggingEntity(element: HTMLElement, draggableEntity?: IDraggableEntity): IDraggingEntity;
18
+ /**
19
+ * Инициализирует dragging для выбранных элементов
20
+ */
21
+ export declare function initializeDraggingFromSelection(selectedSet: Set<HTMLElement>, draggableMap: Map<HTMLElement, IDraggableEntity>, draggingMap: Map<HTMLElement, IDraggingEntity>): void;
22
+ /**
23
+ * Initializes dragging for single element
24
+ */
25
+ export declare function initializeDraggingFromElement(element: HTMLElement, draggableMap: Map<HTMLElement, IDraggableEntity>, draggingMap: Map<HTMLElement, IDraggingEntity>): void;
26
+ /**
27
+ * Starts dragging for the current provider state (initiatingDraggable + selectedSet)
28
+ */
29
+ export declare function startDraggingForProvider(provider: IDnDProviderInternal): void;
30
+ /**
31
+ * Initializes dragging (chooses between selection and single element)
32
+ */
33
+ export declare function initializeDragging(initiatingElement: HTMLElement, selectedSet: Set<HTMLElement>, draggableMap: Map<HTMLElement, IDraggableEntity>, draggingMap: Map<HTMLElement, IDraggingEntity>): void;
@@ -0,0 +1,12 @@
1
+ import { IDraggableEntity, ISelectableAreaEntity } from '../../external/types';
2
+ import { Ref } from 'vue';
3
+ /**
4
+ * Utility for filtering entities by modifier keys.
5
+ *
6
+ * @param entityMap - Map of entities (e.g. selectableAreaMap or draggableEntityMap)
7
+ * @param visibleSet - Set of visible nodes
8
+ * @param modifiers - Ref with pressed keys
9
+ * @param isDisabled - Optional: override disabled check (e.g. isEffectivelyDisabledDraggable for draggables)
10
+ * @returns Set of filtered nodes with matching modifiers
11
+ */
12
+ export declare const filterByModifiers: (entityMap: Map<HTMLElement, IDraggableEntity | ISelectableAreaEntity>, visibleSet: Set<HTMLElement>, modifiers: Ref<Set<string>>, isDisabled?: (node: HTMLElement) => boolean) => Set<HTMLElement>;