@vue-dnd-kit/core 2.0.0-alpha1 → 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.
- package/README.md +72 -3
- package/dist/external/components/DefaultOverlay.vue.d.ts +0 -1
- package/dist/external/components/DnDProvider.vue.d.ts +2 -2
- package/dist/external/composables/makeAutoScroll.d.ts +13 -0
- package/dist/external/composables/makeConstraintArea.d.ts +7 -0
- package/dist/external/composables/makeDraggable.d.ts +6 -4
- package/dist/external/composables/makeDroppable.d.ts +9 -3
- package/dist/external/composables/{makeSelectableArea.d.ts → makeSelectionArea.d.ts} +2 -3
- package/dist/external/composables/makeSnappedOverlayPosition.d.ts +20 -0
- package/dist/external/composables/useDnDProvider.d.ts +0 -1
- package/dist/external/env.d.ts +7 -0
- package/dist/external/index.d.ts +7 -8
- package/dist/external/types/entities.d.ts +13 -0
- package/dist/external/types/index.d.ts +1 -1
- package/dist/external/types/placement.d.ts +8 -1
- package/dist/external/types/provider.d.ts +25 -5
- package/dist/internal/composables/useDnDProviderEvents.d.ts +0 -1
- package/dist/internal/composables/useDnDProviderInternal.d.ts +0 -1
- package/dist/internal/composables/useDnDProviderState.d.ts +2 -2
- package/dist/internal/composables/useSizeObserver.d.ts +0 -1
- package/dist/internal/composables/useViewportAutoScroll.d.ts +9 -0
- package/dist/internal/logic/hover.d.ts +0 -1
- package/dist/internal/logic/keyboard.d.ts +0 -1
- package/dist/internal/logic/payload.d.ts +6 -2
- package/dist/internal/logic/pointer.d.ts +0 -1
- package/dist/internal/logic/scroll.d.ts +0 -1
- package/dist/internal/sensors/{defaultCollision.d.ts → default-collision.d.ts} +1 -2
- package/dist/internal/sensors/index.d.ts +2 -2
- package/dist/internal/sensors/sensor.d.ts +16 -1
- package/dist/internal/sensors/steps.d.ts +8 -5
- package/dist/internal/types/auto-scroll.d.ts +19 -0
- package/dist/internal/types/provider.d.ts +2 -1
- package/dist/internal/utils/auto-scroll.d.ts +13 -0
- package/dist/internal/utils/constraints.d.ts +0 -1
- package/dist/internal/utils/disabled.d.ts +0 -1
- package/dist/internal/utils/dom.d.ts +0 -1
- package/dist/internal/utils/drag-activation.d.ts +0 -1
- package/dist/internal/utils/events.d.ts +2 -2
- package/dist/internal/utils/geometry.d.ts +0 -1
- package/dist/internal/utils/groups.d.ts +11 -1
- package/dist/internal/utils/hover.d.ts +29 -0
- package/dist/internal/utils/keyboard.d.ts +0 -1
- package/dist/internal/utils/namespaces.d.ts +0 -1
- package/dist/internal/utils/observer.d.ts +0 -1
- package/dist/internal/utils/placement.d.ts +5 -12
- package/dist/internal/utils/pointer.d.ts +0 -1
- package/dist/internal/utils/provider.d.ts +0 -1
- package/dist/internal/utils/selection.d.ts +0 -1
- package/dist/internal/utils/session.d.ts +0 -1
- package/dist/vue-dnd-kit-core.cjs.js +2 -2
- package/dist/vue-dnd-kit-core.es.js +902 -543
- package/package.json +4 -3
- package/dist/core.css +0 -1
- package/dist/external/components/DefaultOverlay.vue.d.ts.map +0 -1
- package/dist/external/components/DnDProvider.vue.d.ts.map +0 -1
- package/dist/external/composables/makeBoundingBox.d.ts +0 -8
- package/dist/external/composables/makeBoundingBox.d.ts.map +0 -1
- package/dist/external/composables/makeCustomOverlay.d.ts +0 -2
- package/dist/external/composables/makeCustomOverlay.d.ts.map +0 -1
- package/dist/external/composables/makeDraggable.d.ts.map +0 -1
- package/dist/external/composables/makeDroppable.d.ts.map +0 -1
- package/dist/external/composables/makeSelectableArea.d.ts.map +0 -1
- package/dist/external/composables/useDnDProvider.d.ts.map +0 -1
- package/dist/external/index.d.ts.map +0 -1
- package/dist/internal/composables/useDnDProviderEvents.d.ts.map +0 -1
- package/dist/internal/composables/useDnDProviderInternal.d.ts.map +0 -1
- package/dist/internal/composables/useDnDProviderState.d.ts.map +0 -1
- package/dist/internal/composables/useSizeObserver.d.ts.map +0 -1
- package/dist/internal/logic/hover.d.ts.map +0 -1
- package/dist/internal/logic/keyboard.d.ts.map +0 -1
- package/dist/internal/logic/payload.d.ts.map +0 -1
- package/dist/internal/logic/pointer.d.ts.map +0 -1
- package/dist/internal/logic/scroll.d.ts.map +0 -1
- package/dist/internal/sensors/defaultCollision.d.ts.map +0 -1
- package/dist/internal/sensors/index.d.ts.map +0 -1
- package/dist/internal/sensors/sensor.d.ts.map +0 -1
- package/dist/internal/sensors/steps.d.ts.map +0 -1
- package/dist/internal/utils/constraints.d.ts.map +0 -1
- package/dist/internal/utils/disabled.d.ts.map +0 -1
- package/dist/internal/utils/dom.d.ts.map +0 -1
- package/dist/internal/utils/drag-activation.d.ts.map +0 -1
- package/dist/internal/utils/events.d.ts.map +0 -1
- package/dist/internal/utils/geometry.d.ts.map +0 -1
- package/dist/internal/utils/groups.d.ts.map +0 -1
- package/dist/internal/utils/keyboard.d.ts.map +0 -1
- package/dist/internal/utils/namespaces.d.ts.map +0 -1
- package/dist/internal/utils/observer.d.ts.map +0 -1
- package/dist/internal/utils/placement.d.ts.map +0 -1
- package/dist/internal/utils/pointer.d.ts.map +0 -1
- package/dist/internal/utils/provider.d.ts.map +0 -1
- package/dist/internal/utils/selection.d.ts.map +0 -1
- package/dist/internal/utils/session.d.ts.map +0 -1
- package/dist/vue-dnd-kit-core.cjs.js.map +0 -1
- package/dist/vue-dnd-kit-core.es.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,5 +1,74 @@
|
|
|
1
|
-
# Vue
|
|
1
|
+
# Vue DnD Kit - Core Package
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://github.com/zizigy/vue-dnd-kit)
|
|
4
|
+
[](https://www.npmjs.com/package/@vue-dnd-kit/core)
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
<p align="center">
|
|
7
|
+
<a href="https://zizigy.github.io/vue-dnd-kit/">
|
|
8
|
+
<img src="https://raw.githubusercontent.com/ZiZiGY/vue-dnd-kit/v2/public/logo.svg" width="400" alt="Vue Drag & Drop Logo">
|
|
9
|
+
</a>
|
|
10
|
+
</p>
|
|
11
|
+
|
|
12
|
+
<p align="center">
|
|
13
|
+
Core package of the Vue Drag & Drop library with composables and provider-based API.
|
|
14
|
+
</p>
|
|
15
|
+
|
|
16
|
+
<p align="center">
|
|
17
|
+
<a href="https://zizigy.github.io/vue-dnd-kit/" target="_blank">
|
|
18
|
+
<img src="https://img.shields.io/badge/Documentation-Visit-blue?style=flat-square" alt="Documentation">
|
|
19
|
+
</a>
|
|
20
|
+
</p>
|
|
21
|
+
|
|
22
|
+
<p align="center">
|
|
23
|
+
Inspired by <a href="https://dndkit.com/" target="_blank">React DnD Kit</a>, adapted for Vue.js
|
|
24
|
+
</p>
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## About
|
|
29
|
+
|
|
30
|
+
**Vue DnD Kit** — lightweight drag & drop library for Vue 3. Built around a provider (`DnDProvider`) and composables: `makeDraggable`, `makeDroppable`, `makeSelectionArea`, `makeConstraintArea`.
|
|
31
|
+
|
|
32
|
+
- **Lightweight** — small bundle size, no extra dependencies (Vue as peer only)
|
|
33
|
+
- **Flexible** — works with any layout and design system
|
|
34
|
+
- **Accessible** — full keyboard support (start, move, cancel, drop)
|
|
35
|
+
- **TypeScript** — fully typed
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Features
|
|
40
|
+
|
|
41
|
+
- **Composables API** — `makeDraggable`, `makeDroppable`, `makeSelectionArea`, `makeConstraintArea`
|
|
42
|
+
- **Provider-based** — `DnDProvider` + `useDnDProvider` for state access
|
|
43
|
+
- **Keyboard support** — Enter/Space for start and drop, arrows for movement, Escape to cancel
|
|
44
|
+
- **Modifier keys** — drag only when modifier held (e.g. Ctrl)
|
|
45
|
+
- **Custom overlay** — custom drag preview via slot or `render` option
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Installation
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
npm install @vue-dnd-kit/core
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
yarn add @vue-dnd-kit/core
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
pnpm add @vue-dnd-kit/core
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**Peer dependency:** Vue 3
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## License
|
|
68
|
+
|
|
69
|
+
[MIT](LICENSE) © [ZiZiGY](https://github.com/ZiZiGY)
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
<p align="center">🎉 Congratulations on the official release! 🎉</p>
|
|
74
|
+
<p align="center">Made with ❤️ for the Vue.js community</p>
|
|
@@ -1,3 +1,2 @@
|
|
|
1
1
|
declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
2
2
|
export default _default;
|
|
3
|
-
//# sourceMappingURL=DefaultOverlay.vue.d.ts.map
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { IDnDProviderProps } from '../types/provider';
|
|
1
2
|
declare function __VLS_template(): {
|
|
2
3
|
attrs: Partial<{}>;
|
|
3
4
|
slots: {
|
|
@@ -12,7 +13,7 @@ declare function __VLS_template(): {
|
|
|
12
13
|
rootEl: any;
|
|
13
14
|
};
|
|
14
15
|
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
15
|
-
declare const __VLS_component: import('vue').DefineComponent<
|
|
16
|
+
declare const __VLS_component: import('vue').DefineComponent<IDnDProviderProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<IDnDProviderProps> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
16
17
|
overlayRef: HTMLDivElement;
|
|
17
18
|
}, any>;
|
|
18
19
|
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
@@ -22,4 +23,3 @@ type __VLS_WithTemplateSlots<T, S> = T & {
|
|
|
22
23
|
$slots: S;
|
|
23
24
|
};
|
|
24
25
|
};
|
|
25
|
-
//# sourceMappingURL=DnDProvider.vue.d.ts.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Ref } from 'vue';
|
|
2
|
+
import { IAutoScrollOptions } from '../types';
|
|
3
|
+
export type { IAutoScrollOptions };
|
|
4
|
+
/**
|
|
5
|
+
* Auto-scroll when the drag overlay is near container edges. Element scroll only.
|
|
6
|
+
*
|
|
7
|
+
* @param container - Ref to the scrollable element
|
|
8
|
+
* @param options - threshold, speed, disabled
|
|
9
|
+
* @returns { isScrolling }
|
|
10
|
+
*/
|
|
11
|
+
export declare const makeAutoScroll: (container: Ref<HTMLElement | null>, options?: IAutoScrollOptions) => {
|
|
12
|
+
isScrolling: import('vue').ShallowRef<boolean, boolean>;
|
|
13
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { TDnDNodeRef, TDragAxis } from '../types';
|
|
2
|
+
import { Ref } from 'vue';
|
|
3
|
+
export interface IMakeConstraintAreaOptions {
|
|
4
|
+
axis?: TDragAxis | Ref<TDragAxis>;
|
|
5
|
+
restrictToArea?: boolean | Ref<boolean>;
|
|
6
|
+
}
|
|
7
|
+
export declare function makeConstraintArea(ref: TDnDNodeRef, options?: IMakeConstraintAreaOptions): {};
|
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
import { IBaseOptions, IDragActivationOptions, IDraggableEvents, IModifierOptions, IPlacementMargins, TDnDNodeRef, TDraggablePayload } from '../types';
|
|
2
|
-
import { Component, Ref } from 'vue';
|
|
1
|
+
import { IBaseOptions, IDragActivationOptions, IDraggableEvents, IModifierOptions, IPlacement, IPlacementMargins, TDnDNodeRef, TDraggablePayload } from '../types';
|
|
2
|
+
import { Component, ComputedRef, Ref, WritableComputedRef } from 'vue';
|
|
3
3
|
interface IMakeDraggableOptions extends IBaseOptions {
|
|
4
4
|
events?: IDraggableEvents;
|
|
5
5
|
modifier?: IModifierOptions;
|
|
6
6
|
render?: Component;
|
|
7
7
|
dragHandle?: string | Ref<string>;
|
|
8
8
|
activation?: IDragActivationOptions;
|
|
9
|
-
/** Margins for center zone. When pointer in center and element is also droppable, zone mode is used. */
|
|
10
9
|
placementMargins?: IPlacementMargins;
|
|
11
10
|
}
|
|
12
11
|
interface IMakeDraggableReturnType {
|
|
12
|
+
selected: WritableComputedRef<boolean>;
|
|
13
|
+
isDragging: ComputedRef<boolean>;
|
|
14
|
+
isAllowed: ComputedRef<boolean>;
|
|
15
|
+
isDragOver: ComputedRef<IPlacement | undefined>;
|
|
13
16
|
}
|
|
14
17
|
export declare function makeDraggable(ref: TDnDNodeRef, payload?: TDraggablePayload): IMakeDraggableReturnType;
|
|
15
18
|
export declare function makeDraggable(ref: TDnDNodeRef, options: IMakeDraggableOptions, payload?: TDraggablePayload): IMakeDraggableReturnType;
|
|
16
19
|
export {};
|
|
17
|
-
//# sourceMappingURL=makeDraggable.d.ts.map
|
|
@@ -1,7 +1,13 @@
|
|
|
1
|
-
import { IBaseOptions, IDroppableEvents, TDnDNodeRef } from '../types';
|
|
1
|
+
import { IBaseOptions, IDroppableEvents, IPlacement, TDnDNodeRef, TDroppablePayload } from '../types';
|
|
2
|
+
import { ComputedRef } from 'vue';
|
|
2
3
|
interface IMakeDroppableOptions extends IBaseOptions {
|
|
3
4
|
events?: IDroppableEvents;
|
|
4
5
|
}
|
|
5
|
-
|
|
6
|
+
interface IMakeDroppableReturnType {
|
|
7
|
+
isAllowed: ComputedRef<boolean>;
|
|
8
|
+
isDragOver: ComputedRef<IPlacement | undefined>;
|
|
9
|
+
}
|
|
10
|
+
export declare function makeDroppable(ref: TDnDNodeRef): IMakeDroppableReturnType;
|
|
11
|
+
export declare function makeDroppable(ref: TDnDNodeRef, options: IMakeDroppableOptions, payload?: TDroppablePayload): IMakeDroppableReturnType;
|
|
12
|
+
export declare function makeDroppable(ref: TDnDNodeRef, payload: TDroppablePayload): IMakeDroppableReturnType;
|
|
6
13
|
export {};
|
|
7
|
-
//# sourceMappingURL=makeDroppable.d.ts.map
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import { Ref } from 'vue';
|
|
2
2
|
import { IBaseOptions, ISelectableAreaEvents, TDnDNodeRef, TModifierKeys, TModifierMethod } from '../types';
|
|
3
|
-
interface
|
|
3
|
+
interface ISelectionAreaOptions extends IBaseOptions {
|
|
4
4
|
modifier?: {
|
|
5
5
|
keys: TModifierKeys | Ref<TModifierKeys>;
|
|
6
6
|
method: TModifierMethod | Ref<TModifierMethod>;
|
|
7
7
|
};
|
|
8
8
|
events?: ISelectableAreaEvents;
|
|
9
9
|
}
|
|
10
|
-
export declare const
|
|
10
|
+
export declare const makeSelectionArea: (nodeRef: TDnDNodeRef, options?: ISelectionAreaOptions) => {
|
|
11
11
|
isSelecting: import('vue').ComputedRef<boolean>;
|
|
12
12
|
style: import('vue').ComputedRef<import('vue').CSSProperties>;
|
|
13
13
|
};
|
|
14
14
|
export {};
|
|
15
|
-
//# sourceMappingURL=makeSelectableArea.d.ts.map
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ComputedRef } from 'vue';
|
|
2
|
+
import { ICoordinates } from '@vue-dnd-kit/core';
|
|
3
|
+
/** Per-axis grid (no grid = step 1, no snap) */
|
|
4
|
+
export type TSnapOverlayOptions = {
|
|
5
|
+
grid: number;
|
|
6
|
+
gridX?: never;
|
|
7
|
+
gridY?: never;
|
|
8
|
+
} | {
|
|
9
|
+
grid?: never;
|
|
10
|
+
gridX: number;
|
|
11
|
+
gridY: number;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Returns a computed that maps overlay position (x, y) to grid‑snapped coordinates.
|
|
15
|
+
* Core keeps writing raw coordinates; use this for overlay display only.
|
|
16
|
+
*
|
|
17
|
+
* @param options - grid (or gridX / gridY)
|
|
18
|
+
* @returns ComputedRef<ICoordinates> — use for --position-x / --position-y in overlay
|
|
19
|
+
*/
|
|
20
|
+
export declare function makeSnappedOverlayPosition(position: ComputedRef<ICoordinates>, options?: TSnapOverlayOptions): ComputedRef<ICoordinates>;
|
package/dist/external/index.d.ts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
* Re-exports from internal for future package consumers
|
|
4
|
-
*/
|
|
5
|
-
export { default as DnDProvider } from './components/DnDProvider.vue';
|
|
1
|
+
import { default as DnDProvider } from './components/DnDProvider.vue';
|
|
2
|
+
export { DnDProvider };
|
|
6
3
|
export { makeDraggable } from './composables/makeDraggable';
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
4
|
+
export { makeSelectionArea } from './composables/makeSelectionArea';
|
|
5
|
+
export { makeConstraintArea } from './composables/makeConstraintArea';
|
|
9
6
|
export { makeDroppable } from './composables/makeDroppable';
|
|
10
7
|
export { useDnDProvider } from './composables/useDnDProvider';
|
|
8
|
+
export { makeAutoScroll, type IAutoScrollOptions, } from './composables/makeAutoScroll';
|
|
9
|
+
export { makeSnappedOverlayPosition, type TSnapOverlayOptions, } from './composables/makeSnappedOverlayPosition';
|
|
10
|
+
export { createSensor, defaultCollisionDetection, type CollisionDetectionFn, type TMergeStrategy, } from '../internal/sensors';
|
|
11
11
|
export type * from './types';
|
|
12
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -13,6 +13,14 @@ export interface IDragPayload<T = unknown, D = unknown> {
|
|
|
13
13
|
dropData?: D;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
+
export type TDroppablePayload<T = any, U = any> = () => [T[], U?];
|
|
17
|
+
|
|
18
|
+
/** Resolved payload from TDroppablePayload (items + optional userData) */
|
|
19
|
+
export interface IDropZonePayload<T = unknown, U = unknown> {
|
|
20
|
+
items: T[];
|
|
21
|
+
userData?: U;
|
|
22
|
+
}
|
|
23
|
+
|
|
16
24
|
export interface IBaseOptions {
|
|
17
25
|
disabled?: boolean | Ref<boolean>;
|
|
18
26
|
groups?: string[] | Ref<string[]>;
|
|
@@ -39,6 +47,9 @@ export interface IEntities {
|
|
|
39
47
|
modifiersDraggableSet: ComputedRef<Set<HTMLElement>>;
|
|
40
48
|
modifiersSelectableAreaSet: ComputedRef<Set<HTMLElement>>;
|
|
41
49
|
|
|
50
|
+
allowedDroppableSet: ComputedRef<Set<HTMLElement>>;
|
|
51
|
+
allowedDraggableSet: ComputedRef<Set<HTMLElement>>;
|
|
52
|
+
|
|
42
53
|
visibleDraggableSet: Set<HTMLElement>;
|
|
43
54
|
visibleDroppableSet: Set<HTMLElement>;
|
|
44
55
|
visibleSelectableAreaSet: Set<HTMLElement>;
|
|
@@ -137,8 +148,10 @@ export interface IDraggableEntity extends IBaseEntity {
|
|
|
137
148
|
export interface IDraggingEntity extends IDraggableEntity {
|
|
138
149
|
initialHTML: string;
|
|
139
150
|
initialRect: DOMRect;
|
|
151
|
+
initialOuterHTML: string;
|
|
140
152
|
}
|
|
141
153
|
|
|
142
154
|
export interface IDroppableEntity extends IBaseEntity {
|
|
143
155
|
events?: IDroppableEvents;
|
|
156
|
+
payload?: TDroppablePayload;
|
|
144
157
|
}
|
|
@@ -4,7 +4,7 @@ export interface IPlacement {
|
|
|
4
4
|
bottom: boolean;
|
|
5
5
|
left: boolean;
|
|
6
6
|
/** True when pointer is in center zone (inside placementMargins). Used for dual-role draggable+zone. */
|
|
7
|
-
center
|
|
7
|
+
center: boolean;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
export interface IPlacementMargins {
|
|
@@ -13,3 +13,10 @@ export interface IPlacementMargins {
|
|
|
13
13
|
bottom?: number;
|
|
14
14
|
left?: number;
|
|
15
15
|
}
|
|
16
|
+
|
|
17
|
+
/** Options for makeAutoScroll and DnDProvider autoScrollViewport prop */
|
|
18
|
+
export interface IAutoScrollOptions {
|
|
19
|
+
threshold?: number | IPlacementMargins;
|
|
20
|
+
speed?: number;
|
|
21
|
+
disabled?: boolean;
|
|
22
|
+
}
|
|
@@ -1,10 +1,18 @@
|
|
|
1
|
-
import { IConstraintsAreaEntity, IDragPayload, IDraggableEntity, IDroppableEntity, IEntities, ISelectableAreaEntity, TDnDNode } from './entities';
|
|
1
|
+
import { IConstraintsAreaEntity, IDragPayload, IDropZonePayload, IDraggableEntity, IDroppableEntity, IEntities, ISelectableAreaEntity, TDnDNode } from './entities';
|
|
2
2
|
import { ICoordinates, TPointerState } from './pointer';
|
|
3
|
-
import { IPlacement } from './placement';
|
|
4
|
-
import { Component, ComputedRef, CSSProperties, Reactive, Ref, ShallowRef } from 'vue';
|
|
3
|
+
import { IAutoScrollOptions, IPlacement } from './placement';
|
|
4
|
+
import { Component, ComputedRef, CSSProperties, Reactive, Ref, ShallowRef, WritableComputedRef } from 'vue';
|
|
5
5
|
/** Event object passed to drag/drop handlers */
|
|
6
|
-
export interface IDragEvent<
|
|
6
|
+
export interface IDragEvent<
|
|
7
|
+
T = unknown,
|
|
8
|
+
D = unknown,
|
|
9
|
+
U = unknown,
|
|
10
|
+
V = unknown,
|
|
11
|
+
> {
|
|
12
|
+
/** Payload from the dragged item (draggable payload) */
|
|
7
13
|
payload: IDragPayload<T, D> | undefined;
|
|
14
|
+
/** Payload from the drop zone (droppable payload), set for onEnter/onDrop/onLeave */
|
|
15
|
+
dropZonePayload?: IDropZonePayload<U, V>;
|
|
8
16
|
provider: IDnDProviderExternal;
|
|
9
17
|
}
|
|
10
18
|
|
|
@@ -37,9 +45,10 @@ export interface IDnDProviderExternal {
|
|
|
37
45
|
distanceProgress: ComputedRef<number>;
|
|
38
46
|
overlay: {
|
|
39
47
|
ref: Ref<HTMLElement | null>;
|
|
40
|
-
|
|
48
|
+
position: ComputedRef<ICoordinates>;
|
|
41
49
|
size: Ref<DOMRect | null>;
|
|
42
50
|
render: Ref<Component | undefined>;
|
|
51
|
+
to: WritableComputedRef<string | false | null | undefined>;
|
|
43
52
|
};
|
|
44
53
|
hovered: IHovered;
|
|
45
54
|
collision: {
|
|
@@ -49,6 +58,9 @@ export interface IDnDProviderExternal {
|
|
|
49
58
|
};
|
|
50
59
|
throttle: Ref<number>;
|
|
51
60
|
};
|
|
61
|
+
autoScrollViewport: ComputedRef<
|
|
62
|
+
IAutoScrollOptions | true | false | null | undefined
|
|
63
|
+
>;
|
|
52
64
|
}
|
|
53
65
|
|
|
54
66
|
export interface IDelay {
|
|
@@ -62,3 +74,11 @@ export type TDnDState =
|
|
|
62
74
|
| 'activating'
|
|
63
75
|
| null
|
|
64
76
|
| undefined;
|
|
77
|
+
|
|
78
|
+
/** DnDProvider props */
|
|
79
|
+
export interface IDnDProviderProps {
|
|
80
|
+
/** Enable viewport auto-scroll: true = defaults, object = options. false | null | undefined = disabled. */
|
|
81
|
+
autoScrollViewport?: IAutoScrollOptions | true | false | null;
|
|
82
|
+
/** Teleport overlay to element: 'body' = defaults, string = element id. false | null | undefined = disabled. */
|
|
83
|
+
overlayTo?: string | false | null;
|
|
84
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { Ref } from 'vue';
|
|
2
|
+
import { IDnDProviderProps } from '../../external/types/provider';
|
|
2
3
|
import { IDnDProviderInternal } from '../types/provider';
|
|
3
|
-
export declare function useDnDProviderState(overlayRef: Ref<HTMLElement | null
|
|
4
|
-
//# sourceMappingURL=useDnDProviderState.d.ts.map
|
|
4
|
+
export declare function useDnDProviderState(overlayRef: Ref<HTMLElement | null>, props?: IDnDProviderProps): IDnDProviderInternal;
|
|
@@ -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
|
+
};
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
import { IDragPayload } from '../../external/types';
|
|
1
|
+
import { IDragPayload, IDropZonePayload } from '../../external/types';
|
|
2
2
|
import { IDnDProviderInternal } from '../types/provider';
|
|
3
3
|
/**
|
|
4
4
|
* Resolves payload from initiating draggable.
|
|
5
5
|
* Calls entity.payload() and returns { index, items, dropData }.
|
|
6
6
|
*/
|
|
7
7
|
export declare const createDragPayload: (provider: IDnDProviderInternal) => IDragPayload | undefined;
|
|
8
|
-
|
|
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;
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
* Default collision: same logic as vue-dnd-box reference
|
|
3
3
|
* - Filter: AABB overlap with container (overlay)
|
|
4
4
|
* - Sort: pointer outside container → isPointerInElement + depth; else overlap % + centerDistance
|
|
5
|
-
* -
|
|
5
|
+
* - Picks closest to pointer when both zone and element present
|
|
6
6
|
*/
|
|
7
7
|
export declare const defaultCollisionDetection: import('./sensor').CollisionDetectionFn;
|
|
8
|
-
//# sourceMappingURL=defaultCollision.d.ts.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export * from './steps';
|
|
2
|
-
export { defaultCollisionDetection } from './
|
|
3
|
-
|
|
2
|
+
export { defaultCollisionDetection } from './default-collision';
|
|
3
|
+
export { createSensor, type CollisionDetectionFn, type TMergeStrategy, } from './sensor';
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import { IBoundingBox } from '../utils/geometry';
|
|
2
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
|
+
*/
|
|
3
12
|
export type CollisionDetectionFn = (provider: IDnDProviderInternal) => {
|
|
4
13
|
elements: HTMLElement[];
|
|
5
14
|
zones: HTMLElement[];
|
|
@@ -31,6 +40,8 @@ export type TSortCompareFn = (a: {
|
|
|
31
40
|
y: number;
|
|
32
41
|
};
|
|
33
42
|
}) => number;
|
|
43
|
+
/** Merge strategy: how to combine elements and zones into final result */
|
|
44
|
+
export type TMergeStrategy = 'separate' | 'unified-closest';
|
|
34
45
|
export interface ICollisionMeta {
|
|
35
46
|
isPointerInElement: boolean;
|
|
36
47
|
overlapPercent: number;
|
|
@@ -47,7 +58,11 @@ export interface ISensorBuilder {
|
|
|
47
58
|
collision(fn: TCollisionCheckFn): ISensorBuilder;
|
|
48
59
|
sortElements(fn: TSortCompareFn): ISensorBuilder;
|
|
49
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;
|
|
50
66
|
build(): CollisionDetectionFn;
|
|
51
67
|
}
|
|
52
68
|
export declare const createSensor: () => ISensorBuilder;
|
|
53
|
-
//# sourceMappingURL=sensor.d.ts.map
|
|
@@ -4,10 +4,10 @@ import { TSortCompareFn, TFilterFn, TCollisionCheckFn, TContainerBoxFn } from '.
|
|
|
4
4
|
export declare const overlayContainer: (p: IDnDProviderInternal) => HTMLElement | null;
|
|
5
5
|
/** Box from overlay style (x,y) + size — overlay uses fixed+transform, getBoundingClientRect is wrong */
|
|
6
6
|
export declare const overlayBoxFromStyle: TContainerBoxFn;
|
|
7
|
-
/**
|
|
8
|
-
export declare const visibleElements: (p: IDnDProviderInternal) => Set<HTMLElement
|
|
9
|
-
/**
|
|
10
|
-
export declare const
|
|
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
11
|
/** Exclude nodes being dragged */
|
|
12
12
|
export declare const filterNotDragging: TFilterFn;
|
|
13
13
|
/** Exclude nodes that are descendants of any dragged element (nesting into self) */
|
|
@@ -20,8 +20,11 @@ export declare const filterValidCollisionTarget: TFilterFn;
|
|
|
20
20
|
export declare const aabbCollision: TCollisionCheckFn;
|
|
21
21
|
/** Pointer-in-element: cursor must be inside element (AABB of element) */
|
|
22
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;
|
|
23
25
|
/** Sort: deepest first (topmost visible element under cursor) */
|
|
24
26
|
export declare const sortByDepth: TSortCompareFn;
|
|
27
|
+
/** Sort: by distance from pointer to element center (closest first) */
|
|
28
|
+
export declare const sortByPointerDistance: TSortCompareFn;
|
|
25
29
|
/** Sort: pointer-in-element + depth when pointer INSIDE container; overlap % + centerDistance when OUTSIDE */
|
|
26
30
|
export declare const sortByOverlapAndPointer: TSortCompareFn;
|
|
27
|
-
//# sourceMappingURL=steps.d.ts.map
|
|
@@ -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;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Ref } from 'vue';
|
|
2
2
|
import { IDnDProviderExternal } from '../../external';
|
|
3
|
+
import { IAutoScrollOptions } from '../../external/types/placement';
|
|
3
4
|
import { IIntersectionObserverWrapper } from './observer';
|
|
4
5
|
|
|
5
6
|
|
|
@@ -26,4 +27,4 @@ export interface IDnDProviderInternal extends IDnDProviderExternal {
|
|
|
26
27
|
selectableAreaObserver: IIntersectionObserverWrapper;
|
|
27
28
|
overlaySizeObserver: { disconnect: () => void };
|
|
28
29
|
};
|
|
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
|
+
};
|
|
@@ -7,4 +7,3 @@ export type IEffectivelyDisabledContext = {
|
|
|
7
7
|
export declare const isEffectivelyDisabledDraggable: (node: HTMLElement, ctx: IEffectivelyDisabledContext) => boolean;
|
|
8
8
|
/** True if node is disabled as droppable (self or inside disabled droppable). O(droppableMap.size) */
|
|
9
9
|
export declare const isEffectivelyDisabledDroppable: (node: HTMLElement, ctx: IEffectivelyDisabledContext) => boolean;
|
|
10
|
-
//# sourceMappingURL=disabled.d.ts.map
|
|
@@ -27,4 +27,3 @@ export declare function tryStartDragIfActivationComplete(provider: IDnDProviderI
|
|
|
27
27
|
export declare function createActivationDelayTimer(provider: IDnDProviderInternal, onComplete: () => void): {
|
|
28
28
|
cancel: () => void;
|
|
29
29
|
};
|
|
30
|
-
//# sourceMappingURL=drag-activation.d.ts.map
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { IDnDProviderInternal } from '../types/provider';
|
|
2
|
-
import { IHovered } from '../../external/types/provider';
|
|
2
|
+
import { IDragEvent, IHovered } from '../../external/types/provider';
|
|
3
3
|
export type TSelfDragEvent = 'onSelfDragStart' | 'onSelfDragMove' | 'onSelfDragEnd' | 'onSelfDragCancel';
|
|
4
4
|
/** First key from Map or undefined */
|
|
5
5
|
export declare const getFirstKey: <K>(map: Map<K, unknown>) => K | undefined;
|
|
6
6
|
/** Closest draggable from event target */
|
|
7
7
|
export declare const getClosestDraggableFromEvent: (event: PointerEvent) => HTMLElement | null;
|
|
8
|
+
export declare const getDragEvent: (provider: IDnDProviderInternal, dropZone?: HTMLElement) => IDragEvent;
|
|
8
9
|
/** Triggers onSelf* for element from event if it's in draggingMap */
|
|
9
10
|
export declare const triggerSelfDragFromEvent: (provider: IDnDProviderInternal, event: PointerEvent, eventName: TSelfDragEvent) => void;
|
|
10
11
|
/** Triggers onSelf* only for the initiating element (event.target.closest), skip if disabled */
|
|
@@ -19,4 +20,3 @@ export declare const triggerDraggableHoverChange: (provider: IDnDProviderInterna
|
|
|
19
20
|
export declare const triggerZoneLeave: (provider: IDnDProviderInternal, hovered: IHovered) => void;
|
|
20
21
|
/** Triggers zone onLeave on drop failure, skip disabled */
|
|
21
22
|
export declare const triggerDropCancelEvents: (provider: IDnDProviderInternal, hovered: IHovered) => void;
|
|
22
|
-
//# sourceMappingURL=events.d.ts.map
|
|
@@ -21,4 +21,3 @@ export declare const getCenter: (box: IBoundingBox) => IPoint;
|
|
|
21
21
|
export declare const getDistance: (pointA: IPoint, pointB: IPoint) => number;
|
|
22
22
|
export declare const getOverlapPercent: (boxA: IBoundingBox, boxB: IBoundingBox) => number;
|
|
23
23
|
export declare const containsPoint: (box: IBoundingBox, x: number, y: number) => boolean;
|
|
24
|
-
//# sourceMappingURL=geometry.d.ts.map
|