@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
package/package.json CHANGED
@@ -1,73 +1,75 @@
1
- {
2
- "name": "@vue-dnd-kit/core",
3
- "version": "1.7.0",
4
- "description": "Core functionality for Vue DnD Kit - a lightweight Vue 3 library for building performant and accessible drag and drop interfaces",
5
- "author": "ZiZIGY",
6
- "license": "MIT",
7
- "keywords": [
8
- "vue",
9
- "dnd",
10
- "drag",
11
- "drop",
12
- "drag and drop",
13
- "drag and drop library",
14
- "vue dnd",
15
- "vue drag and drop",
16
- "vue drag and drop library",
17
- "vue dnd kit",
18
- "vue dnd kit core",
19
- "dnd-kit",
20
- "dnd-kit core",
21
- "vue-dnd-kit",
22
- "vue-dnd-kit core",
23
- "@vue-dnd-kit/core"
24
- ],
25
- "repository": {
26
- "type": "git",
27
- "url": "git+https://github.com/zizigy/vue-dnd-kit.git",
28
- "directory": "packages/core"
29
- },
30
- "scripts": {
31
- "dev": "yarn build --watch",
32
- "start": "vite build --watch",
33
- "build": "vite build",
34
- "test": "vitest run",
35
- "lint": "eslint src --ext .ts,.vue",
36
- "prepublishOnly": "vite build"
37
- },
38
- "main": "dist/vue-dnd-kit-core.cjs.js",
39
- "module": "dist/vue-dnd-kit-core.es.js",
40
- "types": "dist/index.d.ts",
41
- "exports": {
42
- ".": {
43
- "types": "./dist/index.d.ts",
44
- "import": "./dist/vue-dnd-kit-core.es.js",
45
- "require": "./dist/vue-dnd-kit-core.cjs.js"
46
- }
47
- },
48
- "files": [
49
- "README.md",
50
- "CHANGELOG.md",
51
- "LICENSE",
52
- "dist"
53
- ],
54
- "peerDependencies": {
55
- "@vueuse/core": "^13.1.0",
56
- "vue": "^3.5.13"
57
- },
58
- "devDependencies": {
59
- "@types/node": "^22.13.14",
60
- "@vitejs/plugin-vue": "^4.2.3",
61
- "@vueuse/core": "^13.1.0",
62
- "eslint": "^8.38.0",
63
- "typescript": "^4.9.5",
64
- "vite": "^6.0.5",
65
- "vite-plugin-dts": "^4.5.0",
66
- "vitepress": "^1.6.3",
67
- "vue": "^3.5.13"
68
- },
69
- "publishConfig": {
70
- "access": "public",
71
- "registry": "https://registry.npmjs.org/"
72
- }
73
- }
1
+ {
2
+ "name": "@vue-dnd-kit/core",
3
+ "version": "2.0.0-alpha10",
4
+ "description": "Core functionality for Vue DnD Kit - a lightweight Vue 3 library for building performant and accessible drag and drop interfaces",
5
+ "author": "ZiZIGY",
6
+ "license": "MIT",
7
+ "type": "module",
8
+ "keywords": [
9
+ "vue",
10
+ "dnd",
11
+ "drag",
12
+ "drop",
13
+ "drag and drop",
14
+ "drag and drop library",
15
+ "vue dnd",
16
+ "vue drag and drop",
17
+ "vue drag and drop library",
18
+ "vue dnd kit",
19
+ "vue dnd kit core",
20
+ "dnd-kit",
21
+ "dnd-kit core",
22
+ "vue-dnd-kit",
23
+ "vue-dnd-kit core",
24
+ "@vue-dnd-kit/core"
25
+ ],
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "git+https://github.com/zizigy/vue-dnd-kit.git",
29
+ "directory": "packages/core"
30
+ },
31
+ "scripts": {
32
+ "dev": "vite",
33
+ "start": "vite build --config vite.config.ts --watch",
34
+ "build": "vite build --config vite.config.ts",
35
+ "build:app": "vue-tsc -b && vite build",
36
+ "preview": "vite preview",
37
+ "prepublishOnly": "yarn build"
38
+ },
39
+ "main": "dist/vue-dnd-kit-core.cjs.js",
40
+ "module": "dist/vue-dnd-kit-core.es.js",
41
+ "types": "dist/index.d.ts",
42
+ "exports": {
43
+ ".": {
44
+ "types": "./dist/index.d.ts",
45
+ "import": "./dist/vue-dnd-kit-core.es.js",
46
+ "require": "./dist/vue-dnd-kit-core.cjs.js"
47
+ }
48
+ },
49
+ "files": [
50
+ "README.md",
51
+ "CHANGELOG.md",
52
+ "LICENSE",
53
+ "dist"
54
+ ],
55
+ "publishConfig": {
56
+ "access": "public",
57
+ "registry": "https://registry.npmjs.org/"
58
+ },
59
+ "peerDependencies": {
60
+ "vue": "^3.5.13"
61
+ },
62
+ "devDependencies": {
63
+ "@types/node": "^24.10.0",
64
+ "@vitejs/plugin-vue": "^6.0.1",
65
+ "@vitejs/plugin-vue-jsx": "^5.1.4",
66
+ "@vue/tsconfig": "^0.8.1",
67
+ "prettier": "^3.8.1",
68
+ "typescript": "~5.9.3",
69
+ "vite": "^7.2.2",
70
+ "vite-plugin-css-injected-by-js": "^3.5.2",
71
+ "vite-plugin-dts": "^4.5.4",
72
+ "vue": "^3.5.24",
73
+ "vue-tsc": "^3.1.3"
74
+ }
75
+ }
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2024 ZiZiGY
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
@@ -1 +0,0 @@
1
- {"version":3,"file":"vue-dnd-kit-core.cjs.js","sources":["../src/utils/operations.ts","../src/composables/useDnDStore.ts","../src/composables/useDragContainer.ts","../src/components/DefaultOverlay.vue","../src/components/DragOverlay.vue","../src/plugin.ts","../src/utils/geometry.ts","../src/utils/namespaces.ts","../src/utils/events.ts","../src/managers/useElementManager.ts","../src/utils/dom.ts","../src/utils/sensor.ts","../src/composables/useKeyboard.ts","../src/composables/usePointer.ts","../src/composables/useSensor.ts","../src/managers/useEventManager.ts","../src/composables/useDraggable.ts","../src/managers/useZoneManager.ts","../src/composables/useDroppable.ts","../src/composables/useSelection.ts"],"sourcesContent":["import { IDnDStore } from '../types';\r\n\r\nexport class DnDOperations {\r\n static remove = (source?: any[], index?: number) => {\r\n if (!source || index === undefined) return;\r\n const [item] = source.splice(index, 1);\r\n return item;\r\n };\r\n static insert = (target?: any[], index?: number, item?: any) => {\r\n if (!target || index === undefined) return;\r\n target.splice(index, 0, item);\r\n };\r\n static move = (\r\n source?: any[],\r\n sourceIndex?: number,\r\n target?: any[],\r\n targetIndex?: number\r\n ) => {\r\n if (\r\n !source ||\r\n !target ||\r\n sourceIndex === undefined ||\r\n targetIndex === undefined\r\n )\r\n return;\r\n const item = DnDOperations.remove(source, sourceIndex);\r\n DnDOperations.insert(target, targetIndex, item);\r\n };\r\n static swap = (\r\n source?: any[],\r\n sourceIndex?: number,\r\n target?: any[],\r\n targetIndex?: number\r\n ) => {\r\n if (\r\n !source ||\r\n !target ||\r\n sourceIndex === undefined ||\r\n targetIndex === undefined\r\n )\r\n return;\r\n\r\n const sourceItem = source[sourceIndex];\r\n const targetItem = target[targetIndex];\r\n\r\n source[sourceIndex] = targetItem;\r\n target[targetIndex] = sourceItem;\r\n };\r\n static copy = (\r\n source?: any[],\r\n index?: number,\r\n target?: any[],\r\n targetIndex?: number\r\n ) => {\r\n if (!source || index === undefined || !target || targetIndex === undefined)\r\n return;\r\n const item = source[index];\r\n DnDOperations.insert(target, targetIndex, item);\r\n };\r\n static applyTransfer = (store: IDnDStore) => {\r\n const hoveredElement = store.hovered.element.value;\r\n const hoveredZone = store.hovered.zone.value;\r\n\r\n if (hoveredElement) {\r\n const targetSource =\r\n store.elementsMap.value.get(hoveredElement)?.data?.source;\r\n const targetIndex =\r\n store.elementsMap.value.get(hoveredElement)?.data?.index;\r\n\r\n const firstElement = store.draggingElements.value.values().next().value;\r\n const firstIndex = firstElement?.data?.index;\r\n\r\n const sortDirection =\r\n firstIndex !== undefined &&\r\n targetIndex !== undefined &&\r\n firstIndex > targetIndex\r\n ? 1\r\n : -1;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort(\r\n (a, b) => sortDirection * ((a.data?.index || 0) - (b.data?.index || 0))\r\n );\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n } else if (hoveredZone) {\r\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\r\n const targetIndex = targetSource?.length;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n }\r\n };\r\n\r\n static applyCopy = (store: IDnDStore) => {\r\n const hoveredElement = store.hovered.element.value;\r\n const hoveredZone = store.hovered.zone.value;\r\n\r\n if (hoveredElement) {\r\n const targetSource =\r\n store.elementsMap.value.get(hoveredElement)?.data?.source;\r\n const targetIndex =\r\n store.elementsMap.value.get(hoveredElement)?.data?.index;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.copy(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n } else if (hoveredZone) {\r\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\r\n const targetIndex = targetSource?.length;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.copy(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n }\r\n };\r\n static applySwap = (store: IDnDStore) => {\r\n const hoveredElement = store.hovered.element.value;\r\n const hoveredZone = store.hovered.zone.value;\r\n\r\n if (hoveredElement && store.draggingElements.value.size === 1) {\r\n const element = store.draggingElements.value.values().next().value;\r\n DnDOperations.swap(\r\n element?.data?.source,\r\n element?.data?.index,\r\n store.elementsMap.value.get(hoveredElement)?.data?.source,\r\n store.elementsMap.value.get(hoveredElement)?.data?.index\r\n );\r\n } else if (hoveredZone) {\r\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\r\n const targetIndex = targetSource?.length;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n }\r\n };\r\n static applyRemove = (store: IDnDStore) => {\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) => {\r\n if (element.data?.source && element.data?.index !== undefined) {\r\n DnDOperations.remove(element.data.source, element.data.index);\r\n }\r\n });\r\n };\r\n static applyInsert = (store: IDnDStore, items: any[]) => {\r\n const hoveredElement = store.hovered.element.value;\r\n const hoveredZone = store.hovered.zone.value;\r\n\r\n if (hoveredElement && items.length > 0) {\r\n const targetSource =\r\n store.elementsMap.value.get(hoveredElement)?.data?.source;\r\n const targetIndex =\r\n store.elementsMap.value.get(hoveredElement)?.data?.index;\r\n\r\n items.forEach((item) => {\r\n DnDOperations.insert(targetSource, targetIndex, item);\r\n });\r\n } else if (hoveredZone) {\r\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\r\n const targetIndex = targetSource?.length;\r\n\r\n items.forEach((item) => {\r\n DnDOperations.insert(targetSource, targetIndex, item);\r\n });\r\n }\r\n };\r\n}\r\n","import type {\r\n IDragElement,\r\n IDraggingElement,\r\n IDropZone,\r\n IPoint,\r\n} from '../types';\r\nimport {\r\n computed,\r\n ref,\r\n shallowRef,\r\n type Component,\r\n type TransitionProps,\r\n} from 'vue';\r\nimport { createGlobalState, useMagicKeys } from '@vueuse/core';\r\n\r\nexport const useDnDStore = createGlobalState(() => {\r\n const isPending = shallowRef<boolean>(false);\r\n const draggingElements = ref<Map<HTMLElement | Element, IDraggingElement>>(\r\n new Map()\r\n );\r\n const isDragging = computed<boolean>(() => draggingElements.value.size > 0);\r\n\r\n const activeContainer = {\r\n component: ref<Component | null>(null),\r\n ref: shallowRef<HTMLElement | null>(null),\r\n options: shallowRef<TransitionProps | null>(null),\r\n props: shallowRef<Record<string, any> | null>(null),\r\n animating: {\r\n enter: shallowRef<boolean>(false),\r\n leave: shallowRef<boolean>(false),\r\n appear: shallowRef<boolean>(false),\r\n },\r\n };\r\n\r\n const elementsMap = ref<Map<HTMLElement | Element, IDragElement>>(new Map());\r\n const selectedElements = ref<Set<HTMLElement | Element>>(new Set());\r\n const zonesMap = ref<Map<HTMLElement | Element, IDropZone>>(new Map());\r\n const visibleZones = shallowRef<Set<HTMLElement | Element>>(new Set());\r\n const visibleElements = shallowRef<Set<HTMLElement | Element>>(new Set());\r\n\r\n const hasIntersectionObserver =\r\n typeof window !== 'undefined' && 'IntersectionObserver' in window;\r\n\r\n const elementObserver = hasIntersectionObserver\r\n ? new IntersectionObserver((entries) => {\r\n entries.forEach((entry) =>\r\n visibleElements.value[entry.isIntersecting ? 'add' : 'delete'](\r\n entry.target\r\n )\r\n );\r\n })\r\n : null;\r\n\r\n const zoneObserver = hasIntersectionObserver\r\n ? new IntersectionObserver((entries) => {\r\n entries.forEach((entry) =>\r\n visibleZones.value[entry.isIntersecting ? 'add' : 'delete'](\r\n entry.target\r\n )\r\n );\r\n })\r\n : null;\r\n\r\n const handleDragElementIntersection = (\r\n action: 'add' | 'remove',\r\n element: HTMLElement | Element\r\n ) => {\r\n if (!elementObserver) return;\r\n\r\n if (action === 'add') {\r\n elementObserver.observe(element);\r\n } else {\r\n elementObserver.unobserve(element);\r\n visibleElements.value.delete(element);\r\n }\r\n };\r\n\r\n const handleDropZoneIntersection = (\r\n action: 'add' | 'remove',\r\n element: HTMLElement | Element\r\n ) => {\r\n if (!zoneObserver) return;\r\n\r\n if (action === 'add') {\r\n zoneObserver.observe(element);\r\n } else {\r\n zoneObserver.unobserve(element);\r\n visibleZones.value.delete(element);\r\n }\r\n };\r\n\r\n const pointerPosition = {\r\n start: shallowRef<IPoint | null>(null),\r\n current: shallowRef<IPoint | null>(null),\r\n offset: {\r\n percent: shallowRef<IPoint | null>(null),\r\n pixel: shallowRef<IPoint | null>(null),\r\n },\r\n };\r\n\r\n const { KeyW, KeyS, KeyA, KeyD, ctrl, shift, alt, meta } = useMagicKeys();\r\n\r\n const hovered = {\r\n zone: shallowRef<HTMLElement | Element | null>(null),\r\n element: shallowRef<HTMLElement | Element | null>(null),\r\n };\r\n\r\n return {\r\n draggingElements,\r\n isDragging,\r\n activeContainer,\r\n elementsMap,\r\n selectedElements,\r\n zonesMap,\r\n visibleZones,\r\n visibleElements,\r\n pointerPosition,\r\n keyboard: {\r\n w: KeyW,\r\n s: KeyS,\r\n a: KeyA,\r\n d: KeyD,\r\n ctrl,\r\n shift,\r\n alt,\r\n meta,\r\n },\r\n hovered,\r\n isPending,\r\n handleDragElementIntersection,\r\n handleDropZoneIntersection,\r\n };\r\n});\r\n","import { onUnmounted, onMounted, ref, type TransitionProps } from 'vue';\r\n\r\nimport { useDnDStore } from './useDnDStore';\r\n\r\nexport const useDragContainer = (options?: Omit<TransitionProps, 'appear'>) => {\r\n const elementRef = ref<HTMLElement | null>(null);\r\n\r\n const { draggingElements, pointerPosition, isDragging, activeContainer } =\r\n useDnDStore();\r\n\r\n onMounted(() => {\r\n activeContainer.ref = elementRef;\r\n activeContainer.options.value = options ?? null;\r\n });\r\n\r\n onUnmounted(() => {\r\n activeContainer.ref.value = null;\r\n activeContainer.options.value = null;\r\n });\r\n\r\n return {\r\n elementRef,\r\n draggingElements,\r\n pointerPosition,\r\n isDragging,\r\n animating: activeContainer.animating,\r\n };\r\n};\r\n","<script setup lang=\"ts\">\r\n import { computed, CSSProperties } from 'vue';\r\n import { useDragContainer } from '../composables/useDragContainer';\r\n\r\n const { elementRef, pointerPosition, isDragging, draggingElements } =\r\n useDragContainer();\r\n\r\n const { styles } = defineProps<{\r\n styles?: CSSProperties;\r\n }>();\r\n\r\n const computedStyle = computed<CSSProperties>(() => ({\r\n transform: `translate3d(${\r\n (pointerPosition.current.value?.x ?? 0) -\r\n (pointerPosition.offset.pixel.value?.x ?? 0)\r\n }px, ${\r\n (pointerPosition.current.value?.y ?? 0) -\r\n (pointerPosition.offset.pixel.value?.y ?? 0)\r\n }px, 0)`,\r\n zIndex: 1000,\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n transition: '0.3s cubic-bezier(0.165, 0.84, 0.44, 1)',\r\n ...styles,\r\n }));\r\n</script>\r\n\r\n<template>\r\n <div\r\n v-if=\"isDragging\"\r\n ref=\"elementRef\"\r\n :style=\"computedStyle\"\r\n >\r\n <template\r\n v-for=\"[node, element] in draggingElements\"\r\n :key=\"element.id\"\r\n >\r\n <component\r\n v-if=\"element.layer\"\r\n :is=\"element.layer\"\r\n :node=\"node\"\r\n :data=\"element.data\"\r\n :id=\"element.id\"\r\n :groups=\"element.groups\"\r\n />\r\n <div\r\n v-else\r\n v-html=\"element.initialHTML\"\r\n :style=\"{\r\n width: `${element.initialRect?.width}px`,\r\n height: `${element.initialRect?.height}px`,\r\n }\"\r\n />\r\n </template>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n import { computed, CSSProperties } from 'vue';\r\n import { useDnDStore } from '../composables/useDnDStore';\r\n import DefaultOverlay from './DefaultOverlay.vue';\r\n\r\n const props = defineProps<{\r\n styles?: CSSProperties;\r\n }>();\r\n\r\n const { activeContainer } = useDnDStore();\r\n\r\n const overlay = computed(() => ({\r\n component: activeContainer.component.value ?? DefaultOverlay,\r\n props: {\r\n ...props,\r\n ...activeContainer.props.value,\r\n },\r\n }));\r\n</script>\r\n\r\n<template>\r\n <Transition\r\n v-if=\"activeContainer.options.value\"\r\n :name=\"activeContainer.options.value.name\"\r\n :duration=\"activeContainer.options.value.duration\"\r\n :enter-from-class=\"activeContainer.options.value.enterFromClass\"\r\n :enter-to-class=\"activeContainer.options.value.enterToClass\"\r\n :enter-active-class=\"activeContainer.options.value.enterActiveClass\"\r\n :leave-from-class=\"activeContainer.options.value.leaveFromClass\"\r\n :leave-to-class=\"activeContainer.options.value.leaveToClass\"\r\n :leave-active-class=\"activeContainer.options.value.leaveActiveClass\"\r\n :appear-active-class=\"activeContainer.options.value.appearActiveClass\"\r\n :appear-from-class=\"activeContainer.options.value.appearFromClass\"\r\n :appear-to-class=\"activeContainer.options.value.appearToClass\"\r\n :mode=\"activeContainer.options.value.mode\"\r\n :type=\"activeContainer.options.value.type\"\r\n :css=\"activeContainer.options.value.css\"\r\n :appear=\"true\"\r\n :persisted=\"activeContainer.options.value.persisted\"\r\n @enter=\"activeContainer.options.value.onEnter\"\r\n @leave=\"activeContainer.options.value.onLeave\"\r\n @before-enter=\"activeContainer.options.value.onBeforeEnter\"\r\n @before-leave=\"activeContainer.options.value.onBeforeLeave\"\r\n @before-appear=\"activeContainer.options.value.onBeforeAppear\"\r\n @after-enter=\"activeContainer.options.value.onAfterEnter\"\r\n @after-leave=\"activeContainer.options.value.onAfterLeave\"\r\n @after-appear=\"activeContainer.options.value.onAfterAppear\"\r\n >\r\n <component\r\n :is=\"overlay.component || overlay\"\r\n v-bind=\"overlay.props || {}\"\r\n />\r\n </Transition>\r\n\r\n <component\r\n v-else\r\n :is=\"overlay.component || overlay\"\r\n v-bind=\"overlay.props || {}\"\r\n />\r\n</template>\r\n","import { createVNode, render } from 'vue';\r\n\r\nimport type { App } from 'vue';\r\nimport DragOverlay from './components/DragOverlay.vue';\r\nimport { IPluginOptions } from './types';\r\nimport { useDnDStore } from './composables/useDnDStore';\r\n\r\nexport const VueDndKitPlugin = {\r\n install(app: App, options?: IPluginOptions) {\r\n app.component('DragOverlay', DragOverlay);\r\n const originalMount = app.mount;\r\n app.mount = function (rootContainer) {\r\n const instance = originalMount.call(this, rootContainer);\r\n\r\n const rootEl =\r\n typeof rootContainer === 'string'\r\n ? document.querySelector(rootContainer)\r\n : rootContainer;\r\n\r\n if (rootEl && rootEl instanceof Element) {\r\n if (!rootEl.querySelector('#vue-dnd-kit-overlay')) {\r\n const overlayContainer = document.createElement('div');\r\n\r\n overlayContainer.id = 'vue-dnd-kit-overlay';\r\n overlayContainer.style.pointerEvents = 'none';\r\n\r\n // Применяем кастомный z-index если указан\r\n if (options?.overlayPosition?.zIndex) {\r\n overlayContainer.style.zIndex =\r\n options.overlayPosition.zIndex.toString();\r\n }\r\n\r\n // Применяем кастомный класс если указан\r\n if (options?.overlayPosition?.className) {\r\n overlayContainer.className = options.overlayPosition.className;\r\n }\r\n\r\n // Определяем метод вставки overlay\r\n const insertMethod = options?.overlayPosition?.method || 'append';\r\n const targetElement = options?.overlayPosition?.target\r\n ? typeof options.overlayPosition.target === 'string'\r\n ? document.querySelector(options.overlayPosition.target)\r\n : options.overlayPosition.target\r\n : rootEl;\r\n\r\n if (targetElement && targetElement instanceof Element) {\r\n switch (insertMethod) {\r\n case 'prepend':\r\n targetElement.insertBefore(\r\n overlayContainer,\r\n targetElement.firstChild\r\n );\r\n break;\r\n case 'after':\r\n targetElement.parentNode?.insertBefore(\r\n overlayContainer,\r\n targetElement.nextSibling\r\n );\r\n break;\r\n case 'before':\r\n targetElement.parentNode?.insertBefore(\r\n overlayContainer,\r\n targetElement\r\n );\r\n break;\r\n case 'append':\r\n default:\r\n targetElement.appendChild(overlayContainer);\r\n break;\r\n }\r\n } else {\r\n // Fallback к старому поведению\r\n rootEl.appendChild(overlayContainer);\r\n }\r\n\r\n // Передаем опции напрямую в компонент\r\n const vnode = createVNode(DragOverlay, {\r\n styles: options?.defaultOverlay?.styles,\r\n });\r\n render(vnode, overlayContainer);\r\n\r\n app.__VUE_DND_KIT_OVERLAY__ = {\r\n container: overlayContainer,\r\n vnode,\r\n options: options?.defaultOverlay || {},\r\n };\r\n\r\n const store = useDnDStore();\r\n app.__VUE_DND_KIT_STORE__ = store;\r\n }\r\n }\r\n\r\n return instance;\r\n };\r\n\r\n // Модифицируем метод unmount для очистки\r\n const originalUnmount = app.unmount;\r\n app.unmount = function () {\r\n if (app.__VUE_DND_KIT_OVERLAY__) {\r\n render(null, app.__VUE_DND_KIT_OVERLAY__.container);\r\n delete app.__VUE_DND_KIT_OVERLAY__;\r\n }\r\n return originalUnmount.call(this);\r\n };\r\n },\r\n};\r\n\r\ndeclare module '@vue/runtime-core' {\r\n export interface App {\r\n __VUE_DND_KIT_OVERLAY__?: {\r\n container: HTMLElement;\r\n vnode: any;\r\n options: IPluginOptions['defaultOverlay'];\r\n };\r\n __VUE_DND_KIT_STORE__?: ReturnType<typeof useDnDStore>;\r\n }\r\n}\r\n","import type { IBoundingBox, IPoint } from '../types';\r\n\r\nexport const checkCollision = (\r\n boxA: IBoundingBox,\r\n boxB: IBoundingBox\r\n): boolean => {\r\n return (\r\n boxA.x < boxB.x + boxB.width &&\r\n boxA.x + boxA.width > boxB.x &&\r\n boxA.y < boxB.y + boxB.height &&\r\n boxA.y + boxA.height > boxB.y\r\n );\r\n};\r\n\r\nexport const getBoundingBox = (element: HTMLElement | null): IBoundingBox => {\r\n if (!element)\r\n return {\r\n x: 0,\r\n y: 0,\r\n width: 0,\r\n height: 0,\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n top: 0,\r\n };\r\n\r\n const rect = element.getBoundingClientRect();\r\n\r\n return {\r\n bottom: rect.bottom,\r\n left: rect.left,\r\n right: rect.right,\r\n top: rect.top,\r\n x: rect.x,\r\n y: rect.y,\r\n width: rect.width,\r\n height: rect.height,\r\n };\r\n};\r\n\r\nexport const getCenter = (box: IBoundingBox): IPoint => ({\r\n x: box.x + box.width / 2,\r\n y: box.y + box.height / 2,\r\n});\r\n\r\nexport const getOffset = (element: HTMLElement | null, pointer: IPoint) => {\r\n const rect = getBoundingBox(element);\r\n return {\r\n pixel: {\r\n x: pointer.x - rect.x,\r\n y: pointer.y - rect.y,\r\n },\r\n percent: {\r\n x: ((pointer.x - rect.x) / rect.width) * 100,\r\n y: ((pointer.y - rect.y) / rect.height) * 100,\r\n },\r\n };\r\n};\r\n\r\nexport const getDistance = (pointA: IPoint, pointB: IPoint): number => {\r\n const dx = pointB.x - pointA.x;\r\n const dy = pointB.y - pointA.y;\r\n return Math.sqrt(dx * dx + dy * dy);\r\n};\r\n\r\nexport const getOverlapPercent = (\r\n boxA: IBoundingBox,\r\n boxB: IBoundingBox\r\n): number => {\r\n const xOverlap = Math.max(\r\n 0,\r\n Math.min(boxA.x + boxA.width, boxB.x + boxB.width) -\r\n Math.max(boxA.x, boxB.x)\r\n );\r\n const yOverlap = Math.max(\r\n 0,\r\n Math.min(boxA.y + boxA.height, boxB.y + boxB.height) -\r\n Math.max(boxA.y, boxB.y)\r\n );\r\n\r\n const overlapArea = xOverlap * yOverlap;\r\n\r\n const boxAArea = boxA.width * boxA.height;\r\n const boxBArea = boxB.width * boxB.height;\r\n\r\n // Возвращаем среднее значение процентов перекрытия относительно обоих элементов\r\n return ((overlapArea / boxAArea) * 100 + (overlapArea / boxBArea) * 100) / 2;\r\n};\r\n","export const draggableDataName = 'data-vue-dnd-kit-draggable';\r\nexport const droppableDataName = 'data-vue-dnd-kit-droppable';\r\n\r\nexport const VUE_DND_KIT_OPTIONS = Symbol('vue-dnd-kit-options');\r\n","import { IDnDPayload, IDnDStore } from '../types';\r\n\r\nexport const preventEvent = (event: Event) => {\r\n event.preventDefault();\r\n};\r\n\r\nexport const createPayload = (store: IDnDStore): IDnDPayload => {\r\n return {\r\n items: Array.from(store.draggingElements.value.values()),\r\n };\r\n};\r\n","import { computed, ref, shallowRef, useId } from 'vue';\r\n\r\nimport type { IUseDragOptions } from '../types';\r\nimport { draggableDataName } from '../utils/namespaces';\r\nimport { preventEvent } from '../utils/events';\r\nimport { useDnDStore } from '../composables/useDnDStore';\r\n\r\nexport const useElementManager = (options?: IUseDragOptions) => {\r\n const {\r\n elementsMap,\r\n draggingElements,\r\n hovered,\r\n selectedElements,\r\n isDragging: isDragStarted,\r\n visibleElements,\r\n handleDragElementIntersection,\r\n } = useDnDStore();\r\n\r\n const elementRef = ref<HTMLElement | null>(null);\r\n const isOvered = computed<boolean>(() => {\r\n return hovered.element.value === elementRef.value;\r\n });\r\n\r\n const id = shallowRef(options?.id || useId());\r\n const disabled = shallowRef<boolean>((options?.disabled as boolean) ?? false);\r\n\r\n const isDragging = computed<boolean>(() => {\r\n if (disabled.value) return false;\r\n if (!elementRef.value) return false;\r\n if (!elementsMap.value.has(elementRef.value)) return false;\r\n return draggingElements.value.has(elementRef.value);\r\n });\r\n\r\n const isAllowed = computed<boolean>(() => {\r\n if (disabled.value) return false;\r\n if (!elementRef.value || !isDragStarted.value) return false;\r\n if (!visibleElements.value.has(elementRef.value)) return false;\r\n\r\n const currentElement = elementsMap.value.get(elementRef.value);\r\n if (!currentElement?.groups.length) return true;\r\n\r\n return !Array.from(draggingElements.value.entries()).some(\r\n ([_, draggingElement]) => {\r\n if (!draggingElement.groups.length) return false;\r\n return !draggingElement.groups.some((group) =>\r\n currentElement.groups.includes(group)\r\n );\r\n }\r\n );\r\n });\r\n\r\n const isLazyAllowed = computed<boolean>(() => {\r\n if (disabled.value) return false;\r\n if (!elementRef.value || !isDragStarted.value) return false;\r\n if (!visibleElements.value.has(elementRef.value)) return false;\r\n if (hovered.element.value !== elementRef.value) return false;\r\n\r\n const currentElement = elementsMap.value.get(elementRef.value);\r\n if (!currentElement?.groups.length) return true;\r\n\r\n return !Array.from(draggingElements.value.entries()).some(\r\n ([_, draggingElement]) => {\r\n if (!draggingElement.groups.length) return false;\r\n return !draggingElement.groups.some((group) =>\r\n currentElement.groups.includes(group)\r\n );\r\n }\r\n );\r\n });\r\n\r\n const registerElement = () => {\r\n if (!elementRef.value) throw new Error('ElementRef is not set');\r\n\r\n elementsMap.value.set(elementRef.value, {\r\n node: elementRef.value,\r\n groups: (options?.groups as string[]) ?? [],\r\n layer: options?.layer ?? null,\r\n defaultLayer: options?.layer ?? null,\r\n events: options?.events ?? {},\r\n data: options?.data ?? null,\r\n id: id.value,\r\n disabled: (disabled as unknown as boolean) ?? false,\r\n });\r\n\r\n handleDragElementIntersection('add', elementRef.value);\r\n\r\n elementRef.value.addEventListener('dragstart', preventEvent);\r\n elementRef.value.addEventListener('drag', preventEvent);\r\n elementRef.value.setAttribute(draggableDataName, 'true');\r\n elementRef.value.setAttribute('draggable', 'false');\r\n };\r\n\r\n const unregisterElement = () => {\r\n if (!elementRef.value) return;\r\n\r\n elementsMap.value.delete(elementRef.value);\r\n selectedElements.value.delete(elementRef.value);\r\n\r\n elementRef.value.removeEventListener('dragstart', preventEvent);\r\n elementRef.value.removeEventListener('drag', preventEvent);\r\n elementRef.value.removeAttribute(draggableDataName);\r\n elementRef.value.removeAttribute('draggable');\r\n };\r\n\r\n return {\r\n elementRef,\r\n registerElement,\r\n unregisterElement,\r\n isDragging,\r\n isOvered,\r\n isAllowed,\r\n isLazyAllowed,\r\n id,\r\n };\r\n};\r\n","export const isDescendant = (\r\n element: HTMLElement | Element | null,\r\n container: HTMLElement | Element\r\n): boolean => {\r\n if (!element) return false;\r\n return container.contains(element);\r\n};\r\n","import {\r\n checkCollision,\r\n getBoundingBox,\r\n getCenter,\r\n getDistance,\r\n getOverlapPercent,\r\n} from './geometry';\r\n\r\nimport { IDnDStore } from '../types';\r\nimport { isDescendant } from './dom';\r\n\r\nexport const defaultCollisionDetection = (store: IDnDStore) => {\r\n const containerRect = getBoundingBox(store.activeContainer.ref.value);\r\n const containerCenter = getCenter(containerRect);\r\n const pointerX = store.pointerPosition.current.value?.x ?? 0;\r\n const pointerY = store.pointerPosition.current.value?.y ?? 0;\r\n\r\n const isPointerInActiveContainer =\r\n containerRect &&\r\n pointerX >= containerRect.x &&\r\n pointerX <= containerRect.x + containerRect.width &&\r\n pointerY >= containerRect.y &&\r\n pointerY <= containerRect.y + containerRect.height;\r\n\r\n const shouldUseNormalPriority = !isPointerInActiveContainer;\r\n\r\n const activeDragNodes = Array.from(store.draggingElements.value.keys());\r\n\r\n const allCollidingElements = Array.from(store.visibleElements.value.entries())\r\n .filter(([node, _]) => {\r\n if (!node) return false;\r\n\r\n const rect = getBoundingBox(node as HTMLElement);\r\n return rect && containerRect && checkCollision(rect, containerRect);\r\n })\r\n .map(([node, element]) => {\r\n const rect = getBoundingBox(node as HTMLElement);\r\n const elementCenter = getCenter(rect);\r\n\r\n const isPointerInElement =\r\n pointerX >= rect.x &&\r\n pointerX <= rect.x + rect.width &&\r\n pointerY >= rect.y &&\r\n pointerY <= rect.y + rect.height;\r\n\r\n const overlapPercent = getOverlapPercent(rect, containerRect);\r\n const centerDistance = getDistance(containerCenter, elementCenter);\r\n\r\n let depth = 0;\r\n for (const [parentNode, _] of store.visibleElements.value.entries()) {\r\n if (\r\n parentNode !== node &&\r\n parentNode &&\r\n node &&\r\n isDescendant(node as HTMLElement, parentNode as HTMLElement)\r\n ) {\r\n depth++;\r\n }\r\n }\r\n\r\n return {\r\n element,\r\n node: node as HTMLElement,\r\n isPointerInElement,\r\n overlapPercent,\r\n depth,\r\n centerDistance,\r\n };\r\n })\r\n .sort((a, b) => {\r\n if (!shouldUseNormalPriority) {\r\n if (a.isPointerInElement && b.isPointerInElement)\r\n return b.depth - a.depth;\r\n if (a.isPointerInElement !== b.isPointerInElement)\r\n return a.isPointerInElement ? -1 : 1;\r\n }\r\n if (Math.abs(a.overlapPercent - b.overlapPercent) <= 1)\r\n return a.centerDistance - b.centerDistance;\r\n return b.overlapPercent - a.overlapPercent;\r\n });\r\n\r\n const allCollidingZones = Array.from(store.visibleZones.value.entries())\r\n .filter(([node, _]) => {\r\n if (\r\n !node ||\r\n activeDragNodes.some(\r\n (dragNode) =>\r\n dragNode &&\r\n isDescendant(node as HTMLElement, dragNode as HTMLElement)\r\n )\r\n )\r\n return false;\r\n\r\n const rect = getBoundingBox(node as HTMLElement);\r\n return rect && containerRect && checkCollision(rect, containerRect);\r\n })\r\n .map(([node, zone]) => {\r\n const rect = getBoundingBox(node as HTMLElement);\r\n const zoneCenter = getCenter(rect);\r\n\r\n const isPointerInElement =\r\n pointerX >= rect.x &&\r\n pointerX <= rect.x + rect.width &&\r\n pointerY >= rect.y &&\r\n pointerY <= rect.y + rect.height;\r\n\r\n const overlapPercent = getOverlapPercent(rect, containerRect);\r\n const centerDistance = getDistance(containerCenter, zoneCenter);\r\n\r\n // Вычисляем глубину вложенности\r\n let depth = 0;\r\n for (const [parentNode, _] of store.visibleZones.value.entries()) {\r\n if (\r\n parentNode !== node &&\r\n parentNode &&\r\n node &&\r\n isDescendant(node as HTMLElement, parentNode as HTMLElement)\r\n ) {\r\n depth++;\r\n }\r\n }\r\n\r\n return {\r\n zone,\r\n node: node as HTMLElement,\r\n isPointerInElement,\r\n overlapPercent,\r\n depth,\r\n centerDistance,\r\n };\r\n })\r\n .sort((a, b) => {\r\n if (!shouldUseNormalPriority) {\r\n if (a.isPointerInElement && b.isPointerInElement)\r\n return b.depth - a.depth;\r\n if (a.isPointerInElement !== b.isPointerInElement)\r\n return a.isPointerInElement ? -1 : 1;\r\n }\r\n if (Math.abs(a.overlapPercent - b.overlapPercent) <= 1)\r\n return a.centerDistance - b.centerDistance;\r\n return b.overlapPercent - a.overlapPercent;\r\n });\r\n\r\n return [\r\n ...allCollidingElements.map((item) => item.node),\r\n ...allCollidingZones.map((item) => item.node),\r\n ];\r\n};\r\n","import type { Ref } from 'vue';\r\nimport { getBoundingBox } from '../utils/geometry';\r\nimport { preventEvent } from '../utils/events';\r\nimport { useDnDStore } from './useDnDStore';\r\n\r\nexport interface IKeyboardOptions {\r\n moveStep?: number;\r\n}\r\n\r\nexport const useKeyboard = (\r\n elementRef: Ref<HTMLElement | null>,\r\n options?: IKeyboardOptions\r\n) => {\r\n const { pointerPosition, keyboard } = useDnDStore();\r\n const moveStep = options?.moveStep || 10;\r\n\r\n const onKeyboardStart = (event: KeyboardEvent) => {\r\n preventEvent(event);\r\n\r\n const rect = getBoundingBox(elementRef.value);\r\n\r\n elementRef.value?.blur();\r\n\r\n const centerX = rect.x + rect.width / 2;\r\n const centerY = rect.y + rect.height / 2;\r\n\r\n pointerPosition.start.value = {\r\n x: centerX,\r\n y: centerY,\r\n };\r\n\r\n pointerPosition.current.value = {\r\n x: centerX,\r\n y: centerY,\r\n };\r\n\r\n pointerPosition.offset.pixel.value = {\r\n x: rect.width / 2,\r\n y: rect.height / 2,\r\n };\r\n\r\n pointerPosition.offset.percent.value = {\r\n x: 50,\r\n y: 50,\r\n };\r\n };\r\n\r\n const onKeyboardMove = () => {\r\n if (!pointerPosition.current.value) return;\r\n\r\n const currentX = pointerPosition.current.value.x;\r\n const currentY = pointerPosition.current.value.y;\r\n\r\n let newX = currentX;\r\n let newY = currentY;\r\n\r\n if (keyboard.w.value) newY -= moveStep;\r\n if (keyboard.s.value) newY += moveStep;\r\n if (keyboard.a.value) newX -= moveStep;\r\n if (keyboard.d.value) newX += moveStep;\r\n\r\n pointerPosition.current.value = {\r\n x: newX,\r\n y: newY,\r\n };\r\n };\r\n\r\n const onKeyboardEnd = () => {\r\n pointerPosition.current.value = null;\r\n pointerPosition.start.value = null;\r\n pointerPosition.offset.pixel.value = null;\r\n pointerPosition.offset.percent.value = null;\r\n };\r\n\r\n return {\r\n onKeyboardStart,\r\n onKeyboardMove,\r\n onKeyboardEnd,\r\n };\r\n};\r\n","import type { Ref } from 'vue';\r\nimport { getOffset } from '../utils/geometry';\r\nimport { useDnDStore } from './useDnDStore';\r\n\r\nexport const usePointer = (elementRef: Ref<HTMLElement | null>) => {\r\n const store = useDnDStore();\r\n\r\n const onPointerStart = (event: PointerEvent) => {\r\n store.pointerPosition.start.value = { x: event.clientX, y: event.clientY };\r\n store.pointerPosition.current.value = {\r\n x: event.clientX,\r\n y: event.clientY,\r\n };\r\n\r\n const { pixel, percent } = getOffset(elementRef.value, {\r\n x: event.clientX,\r\n y: event.clientY,\r\n });\r\n\r\n store.pointerPosition.offset.pixel.value = pixel;\r\n store.pointerPosition.offset.percent.value = percent;\r\n };\r\n\r\n const onPointerMove = (event: PointerEvent | WheelEvent) => {\r\n if (store.isPending.value) return;\r\n\r\n store.pointerPosition.current.value = {\r\n x: event.clientX,\r\n y: event.clientY,\r\n };\r\n };\r\n\r\n const onPointerEnd = () => {\r\n store.pointerPosition.current.value = null;\r\n store.pointerPosition.start.value = null;\r\n store.pointerPosition.offset.pixel.value = null;\r\n store.pointerPosition.offset.percent.value = null;\r\n };\r\n\r\n return {\r\n onPointerStart,\r\n onPointerMove,\r\n onPointerEnd,\r\n };\r\n};\r\n","import type {\r\n ICollisionDetectionResult,\r\n IDraggingElement,\r\n IUseDragOptions,\r\n} from '../types';\r\n\r\nimport type { Ref } from 'vue';\r\nimport { createPayload } from '../utils/events';\r\nimport { defaultCollisionDetection } from '../utils/sensor';\r\nimport { isDescendant } from '../utils/dom';\r\nimport { useDnDStore } from './useDnDStore';\r\nimport { useKeyboard } from './useKeyboard';\r\nimport { usePointer } from './usePointer';\r\nimport { useThrottleFn } from '@vueuse/core';\r\n\r\nexport const useSensor = (\r\n elementRef: Ref<HTMLElement | null>,\r\n options?: IUseDragOptions\r\n) => {\r\n const store = useDnDStore();\r\n\r\n const { onPointerStart, onPointerMove, onPointerEnd } =\r\n usePointer(elementRef);\r\n\r\n const { onKeyboardStart, onKeyboardMove, onKeyboardEnd } = useKeyboard(\r\n elementRef,\r\n options?.keyboard\r\n );\r\n\r\n let animationFrameId: number | null = null;\r\n\r\n const getDraggingElements = (\r\n draggableElement: HTMLElement | null\r\n ): Map<HTMLElement | Element, IDraggingElement> => {\r\n if (!draggableElement) return new Map();\r\n\r\n const isDraggableInSelection =\r\n store.selectedElements.value.has(draggableElement);\r\n\r\n if (store.selectedElements.value.size > 0 && isDraggableInSelection) {\r\n const result = new Map<HTMLElement | Element, IDraggingElement>();\r\n\r\n store.selectedElements.value.forEach((node) => {\r\n const element = store.elementsMap.value.get(node);\r\n if (!element) return;\r\n\r\n result.set(node, {\r\n ...element,\r\n initialHTML: element.node?.outerHTML ?? '',\r\n initialRect: element.node?.getBoundingClientRect(),\r\n });\r\n });\r\n\r\n return result;\r\n }\r\n\r\n store.selectedElements.value.clear();\r\n\r\n const element = store.elementsMap.value.get(draggableElement);\r\n if (!element) return new Map();\r\n\r\n const result = new Map<HTMLElement | Element, IDraggingElement>();\r\n\r\n result.set(draggableElement, {\r\n ...element,\r\n initialHTML: element.node?.outerHTML ?? '',\r\n initialRect: element.node?.getBoundingClientRect(),\r\n });\r\n\r\n return result;\r\n };\r\n\r\n const validateCollisionResults = (\r\n htmlElements: HTMLElement | HTMLElement[] | Element | Element[] | null\r\n ) => {\r\n if (!htmlElements) {\r\n return { element: null, zone: null };\r\n }\r\n\r\n const elements = Array.isArray(htmlElements)\r\n ? htmlElements\r\n : [htmlElements];\r\n const activeDragNodes = Array.from(store.draggingElements.value.keys());\r\n\r\n const disabledZones = Array.from(store.zonesMap.value.entries()).flatMap(\r\n ([element, zone]) => (zone.disabled ? [element] : [])\r\n );\r\n\r\n const disabledElements = Array.from(\r\n store.elementsMap.value.entries()\r\n ).flatMap(([element, data]) => (data.disabled ? [element] : []));\r\n\r\n const filteredZoneElement = elements.find((htmlElement) => {\r\n if (!store.visibleZones.value.has(htmlElement)) return false;\r\n\r\n const zone = store.zonesMap.value.get(htmlElement);\r\n if (!zone) return false;\r\n\r\n if (zone.disabled) return false;\r\n\r\n const isInsideDisabledZone = disabledZones.some(\r\n (disabledZone) =>\r\n htmlElement === disabledZone ||\r\n isDescendant(htmlElement as HTMLElement, disabledZone as HTMLElement)\r\n );\r\n\r\n if (isInsideDisabledZone) return false;\r\n\r\n if (\r\n activeDragNodes.some(\r\n (dragNode) =>\r\n dragNode &&\r\n (dragNode === zone.node ||\r\n isDescendant(zone.node as HTMLElement, dragNode as HTMLElement))\r\n )\r\n )\r\n return false;\r\n\r\n if (zone.groups.length) {\r\n const isCompatible = !Array.from(\r\n store.draggingElements.value.values()\r\n ).some((element) => {\r\n if (!element.groups.length) return false;\r\n return !element.groups.some((group) => zone.groups.includes(group));\r\n });\r\n if (!isCompatible) return false;\r\n }\r\n\r\n return true;\r\n });\r\n\r\n if (!filteredZoneElement) {\r\n return { element: null, zone: null };\r\n }\r\n\r\n const filteredElements = elements.filter((htmlElement) => {\r\n if (!store.visibleElements.value.has(htmlElement)) return false;\r\n if (!store.elementsMap.value.has(htmlElement)) return false;\r\n\r\n const element = store.elementsMap.value.get(htmlElement);\r\n if (element?.disabled) return false;\r\n\r\n const isInsideDisabledZone = disabledZones.some(\r\n (disabledZone) =>\r\n htmlElement === disabledZone ||\r\n isDescendant(htmlElement as HTMLElement, disabledZone as HTMLElement)\r\n );\r\n\r\n const isInsideDisabledElement = disabledElements.some(\r\n (disabledElement) =>\r\n htmlElement === disabledElement ||\r\n isDescendant(\r\n htmlElement as HTMLElement,\r\n disabledElement as HTMLElement\r\n )\r\n );\r\n\r\n if (isInsideDisabledZone || isInsideDisabledElement) return false;\r\n\r\n const isGroupsCompatible = !Array.from(\r\n store.draggingElements.value.values()\r\n ).some((element) => {\r\n if (!element.groups.length) return false;\r\n return !element.groups.some((group) =>\r\n store.elementsMap.value.get(htmlElement)?.groups.includes(group)\r\n );\r\n });\r\n\r\n return isGroupsCompatible;\r\n });\r\n\r\n const possibleElement = filteredElements.find((htmlElement) => {\r\n const isCompatible = !activeDragNodes.some(\r\n (dragNode) =>\r\n dragNode &&\r\n (dragNode === htmlElement ||\r\n isDescendant(htmlElement as HTMLElement, dragNode as HTMLElement) ||\r\n isDescendant(dragNode as HTMLElement, htmlElement as HTMLElement))\r\n );\r\n\r\n if (!isCompatible) return false;\r\n\r\n return (\r\n htmlElement === filteredZoneElement ||\r\n isDescendant(\r\n htmlElement as HTMLElement,\r\n filteredZoneElement as HTMLElement\r\n )\r\n );\r\n });\r\n\r\n return {\r\n element: possibleElement || null,\r\n zone: filteredZoneElement,\r\n };\r\n };\r\n\r\n const detectCollisions = options?.sensor?.setup || defaultCollisionDetection;\r\n\r\n const processCollisionResults = (results: ICollisionDetectionResult) => {\r\n const previousElement = store.hovered.element.value;\r\n const previousZone = store.hovered.zone.value;\r\n\r\n const newElement = results.element;\r\n const newZone = results.zone;\r\n\r\n store.hovered.element.value = newElement;\r\n store.hovered.zone.value = newZone;\r\n\r\n if (previousElement !== newElement) {\r\n if (previousElement) {\r\n store.elementsMap.value\r\n .get(previousElement)\r\n ?.events?.onLeave?.(store, createPayload(store));\r\n }\r\n\r\n if (newElement) {\r\n store.elementsMap.value\r\n .get(newElement)\r\n ?.events?.onHover?.(store, createPayload(store));\r\n }\r\n }\r\n\r\n if (previousZone !== newZone) {\r\n if (previousZone) {\r\n store.zonesMap.value\r\n .get(previousZone)\r\n ?.events?.onLeave?.(store, createPayload(store));\r\n }\r\n\r\n if (newZone) {\r\n store.zonesMap.value\r\n .get(newZone)\r\n ?.events?.onHover?.(store, createPayload(store));\r\n }\r\n }\r\n };\r\n\r\n const throttledDetectAndProcess = useThrottleFn(() => {\r\n const htmlElements = detectCollisions(store);\r\n const processedResults = validateCollisionResults(htmlElements);\r\n processCollisionResults(processedResults);\r\n }, options?.sensor?.throttle ?? 0);\r\n\r\n const animationLoop = () => {\r\n throttledDetectAndProcess();\r\n\r\n animationFrameId = requestAnimationFrame(animationLoop);\r\n };\r\n\r\n const startDetection = () => animationLoop();\r\n\r\n const stopDetection = () => {\r\n if (animationFrameId !== null) {\r\n onPointerEnd();\r\n onKeyboardEnd();\r\n cancelAnimationFrame(animationFrameId);\r\n animationFrameId = null;\r\n }\r\n };\r\n\r\n const activate = (event: PointerEvent | KeyboardEvent) => {\r\n store.draggingElements.value = getDraggingElements(elementRef.value);\r\n store.draggingElements.value.forEach((element) =>\r\n element.events.onStart?.(store, createPayload(store))\r\n );\r\n\r\n if (event instanceof PointerEvent) {\r\n onPointerStart(event);\r\n } else {\r\n onKeyboardStart(event);\r\n }\r\n\r\n startDetection();\r\n };\r\n\r\n const track = (event: PointerEvent | WheelEvent | KeyboardEvent) => {\r\n store.draggingElements.value.forEach((element) =>\r\n element.events.onMove?.(store, createPayload(store))\r\n );\r\n\r\n if (event instanceof KeyboardEvent) {\r\n onKeyboardMove();\r\n } else {\r\n onPointerMove(event);\r\n }\r\n };\r\n\r\n const deactivate = async (triggerEvents = true) => {\r\n if (store.hovered.zone.value) {\r\n const zone = store.zonesMap.value.get(store.hovered.zone.value);\r\n const result = zone?.events.onDrop?.(store, createPayload(store));\r\n\r\n if (result instanceof Promise) {\r\n try {\r\n store.isPending.value = true;\r\n\r\n const promiseResult = await result;\r\n\r\n if (promiseResult) {\r\n if (triggerEvents) store.selectedElements.value.clear();\r\n\r\n store.draggingElements.value.clear();\r\n\r\n store.hovered.zone.value = null;\r\n store.hovered.element.value = null;\r\n\r\n stopDetection();\r\n }\r\n\r\n return promiseResult;\r\n } catch {\r\n return false;\r\n } finally {\r\n store.isPending.value = false;\r\n }\r\n } else {\r\n if (triggerEvents) store.selectedElements.value.clear();\r\n\r\n store.draggingElements.value.clear();\r\n\r\n store.hovered.zone.value = null;\r\n store.hovered.element.value = null;\r\n\r\n stopDetection();\r\n }\r\n } else {\r\n store.draggingElements.value.forEach((element) =>\r\n element.events.onEnd?.(store, createPayload(store))\r\n );\r\n\r\n if (triggerEvents) store.selectedElements.value.clear();\r\n\r\n store.draggingElements.value.clear();\r\n\r\n store.hovered.zone.value = null;\r\n store.hovered.element.value = null;\r\n\r\n stopDetection();\r\n }\r\n };\r\n\r\n return {\r\n activate,\r\n track,\r\n deactivate,\r\n };\r\n};\r\n","import type { IUseDragOptions } from '../types';\r\nimport { Ref } from 'vue';\r\nimport { createGlobalState } from '@vueuse/core';\r\nimport { preventEvent } from '../utils/events';\r\nimport { useDnDStore } from '../composables/useDnDStore';\r\nimport { useSensor } from '../composables/useSensor';\r\n\r\nenum EKeyboardKey {\r\n ESCAPE = 'Escape',\r\n SPACE = 'Space',\r\n ENTER = 'Enter',\r\n W = 'KeyW',\r\n A = 'KeyA',\r\n S = 'KeyS',\r\n D = 'KeyD',\r\n CONTROL = 'ControlLeft',\r\n ALT = 'AltLeft',\r\n SHIFT = 'ShiftLeft',\r\n META = 'MetaLeft',\r\n}\r\n\r\nexport const useEventManager = createGlobalState(() => {\r\n let originalUserSelect = '';\r\n let originalTouchAction = '';\r\n let originalOverscrollBehavior = '';\r\n\r\n let currentMoveHandler: ((event: any) => void) | null = null;\r\n let currentEndHandler: (() => void) | null = null;\r\n let currentCancelHandler: (() => void) | null = null;\r\n let currentScrollHandler: ((event: WheelEvent) => void) | null = null;\r\n let currentKeyHandler: ((event: KeyboardEvent) => void) | null = null;\r\n\r\n const { activeContainer, isPending, elementsMap } = useDnDStore();\r\n\r\n const disableInteractions = () => {\r\n const body = document.body;\r\n\r\n originalUserSelect = body.style.userSelect;\r\n\r\n body.style.userSelect = 'none';\r\n\r\n window.addEventListener('contextmenu', preventEvent);\r\n window.addEventListener('selectstart', preventEvent);\r\n window.addEventListener('touchstart', preventEvent);\r\n window.addEventListener('touchmove', preventEvent);\r\n };\r\n\r\n const enableInteractions = () => {\r\n const body = document.body;\r\n\r\n body.style.userSelect = originalUserSelect;\r\n body.style.touchAction = originalTouchAction;\r\n body.style.overscrollBehavior = originalOverscrollBehavior;\r\n\r\n window.removeEventListener('contextmenu', preventEvent);\r\n window.removeEventListener('selectstart', preventEvent);\r\n window.removeEventListener('touchstart', preventEvent);\r\n window.removeEventListener('touchmove', preventEvent);\r\n };\r\n\r\n const clearAllListeners = () => {\r\n if (currentMoveHandler) {\r\n document.removeEventListener('pointermove', currentMoveHandler);\r\n currentMoveHandler = null;\r\n }\r\n\r\n if (currentEndHandler) {\r\n document.removeEventListener('pointerup', currentEndHandler);\r\n currentEndHandler = null;\r\n }\r\n\r\n if (currentCancelHandler) {\r\n currentCancelHandler = null;\r\n }\r\n\r\n if (currentScrollHandler) {\r\n document.removeEventListener('wheel', currentScrollHandler);\r\n currentScrollHandler = null;\r\n }\r\n\r\n if (currentKeyHandler) {\r\n document.removeEventListener('keydown', currentKeyHandler);\r\n document.removeEventListener('keypress', currentKeyHandler);\r\n document.removeEventListener('keyup', currentKeyHandler);\r\n currentKeyHandler = null;\r\n }\r\n };\r\n\r\n const handleDragStart = (\r\n event: PointerEvent | KeyboardEvent,\r\n elementRef: Ref<HTMLElement | null>,\r\n options?: IUseDragOptions\r\n ) => {\r\n if (!elementRef.value) return;\r\n if (isPending.value) return;\r\n\r\n const element = elementsMap.value.get(elementRef.value);\r\n if (element?.disabled) return;\r\n\r\n clearAllListeners();\r\n\r\n (event.target as HTMLElement).blur();\r\n\r\n if (options?.container) activeContainer.component.value = options.container;\r\n if (options?.containerProps) {\r\n activeContainer.props.value = options.containerProps;\r\n }\r\n\r\n const { activate, track, deactivate } = useSensor(elementRef, options);\r\n\r\n currentEndHandler = () => {\r\n deactivate(true).then((response) => {\r\n if (response === false) return;\r\n\r\n activeContainer.component.value = null;\r\n enableInteractions();\r\n deactivate(true);\r\n clearAllListeners();\r\n });\r\n };\r\n\r\n currentCancelHandler = () => {\r\n activeContainer.component.value = null;\r\n enableInteractions();\r\n deactivate(false);\r\n clearAllListeners();\r\n };\r\n\r\n currentMoveHandler = (event: PointerEvent | KeyboardEvent) => track(event);\r\n currentScrollHandler = (event: WheelEvent) => track(event);\r\n currentKeyHandler = (event: KeyboardEvent) => {\r\n if (event.type === 'keyup') {\r\n if (event.code === EKeyboardKey.ESCAPE) currentCancelHandler?.();\r\n if (event.code === EKeyboardKey.ENTER) currentEndHandler?.();\r\n }\r\n\r\n track(event);\r\n };\r\n\r\n disableInteractions();\r\n activate(event);\r\n\r\n document.addEventListener('pointermove', currentMoveHandler);\r\n document.addEventListener('pointerup', currentEndHandler);\r\n document.addEventListener('wheel', currentScrollHandler);\r\n document.addEventListener('keydown', currentKeyHandler);\r\n document.addEventListener('keypress', currentKeyHandler);\r\n document.addEventListener('keyup', currentKeyHandler);\r\n };\r\n\r\n return {\r\n handleDragStart,\r\n };\r\n});\r\n","import { onBeforeUnmount, onMounted } from 'vue';\r\n\r\nimport type { IUseDragOptions } from '../types';\r\nimport { useDnDStore } from './useDnDStore';\r\nimport { useElementManager } from '../managers/useElementManager';\r\nimport { useEventManager } from '../managers/useEventManager';\r\n\r\nexport const useDraggable = (options?: IUseDragOptions) => {\r\n const {\r\n id,\r\n elementRef,\r\n isDragging,\r\n isOvered,\r\n isAllowed,\r\n isLazyAllowed,\r\n registerElement,\r\n unregisterElement,\r\n } = useElementManager(options);\r\n\r\n const { pointerPosition } = useDnDStore();\r\n const { handleDragStart: start } = useEventManager();\r\n\r\n const handleDragStart = (event: PointerEvent | KeyboardEvent) =>\r\n start(event, elementRef, options);\r\n\r\n onMounted(registerElement);\r\n onBeforeUnmount(unregisterElement);\r\n\r\n return {\r\n pointerPosition,\r\n elementRef,\r\n isDragging,\r\n isOvered,\r\n isAllowed,\r\n isLazyAllowed,\r\n handleDragStart,\r\n id,\r\n };\r\n};\r\n","import { computed, ref } from 'vue';\r\n\r\nimport type { IUseDropOptions } from '../types';\r\nimport { useDnDStore } from '../composables/useDnDStore';\r\n\r\nexport const useZoneManager = (options?: IUseDropOptions) => {\r\n const {\r\n zonesMap,\r\n hovered,\r\n draggingElements,\r\n isDragging,\r\n handleDropZoneIntersection,\r\n } = useDnDStore();\r\n\r\n const elementRef = ref<HTMLElement | null>(null);\r\n\r\n const isOvered = computed<boolean>(\r\n () => hovered.zone.value === elementRef.value\r\n );\r\n\r\n const isAllowed = computed<boolean>(() => {\r\n if (!elementRef.value || !isDragging.value) return false;\r\n\r\n const currentZone = zonesMap.value.get(elementRef.value);\r\n if (!currentZone?.groups.length) return true;\r\n\r\n return !Array.from(draggingElements.value.values()).some((element) => {\r\n if (!element.groups.length) return false;\r\n return !element.groups.some((group) =>\r\n currentZone.groups.includes(group)\r\n );\r\n });\r\n });\r\n\r\n const isLazyAllowed = computed<boolean>(() => {\r\n if (!elementRef.value || !isDragging.value) return false;\r\n if (hovered.zone.value !== elementRef.value) return false;\r\n\r\n const currentZone = zonesMap.value.get(elementRef.value);\r\n if (!currentZone?.groups.length) return true;\r\n\r\n return !Array.from(draggingElements.value.values()).some((element) => {\r\n return !element.groups.some((group) =>\r\n currentZone.groups.includes(group)\r\n );\r\n });\r\n });\r\n\r\n const registerZone = () => {\r\n if (!elementRef.value) throw new Error('elementRef is not set');\r\n\r\n handleDropZoneIntersection('add', elementRef.value);\r\n\r\n zonesMap.value.set(elementRef.value, {\r\n node: elementRef.value,\r\n groups: options?.groups ?? [],\r\n events: options?.events ?? {},\r\n data: options?.data ?? undefined,\r\n disabled: (options?.disabled as boolean) ?? false,\r\n });\r\n\r\n elementRef.value.setAttribute('data-dnd-droppable', 'true');\r\n };\r\n\r\n const unregisterZone = () => {\r\n if (!elementRef.value) return;\r\n\r\n handleDropZoneIntersection('remove', elementRef.value);\r\n\r\n zonesMap.value.delete(elementRef.value);\r\n };\r\n\r\n return {\r\n elementRef,\r\n registerZone,\r\n unregisterZone,\r\n isOvered,\r\n isAllowed,\r\n isLazyAllowed,\r\n };\r\n};\r\n","import { onBeforeUnmount, onMounted } from 'vue';\r\n\r\nimport type { IUseDropOptions } from '../types';\r\nimport { useZoneManager } from '../managers/useZoneManager';\r\n\r\nexport const useDroppable = (options?: IUseDropOptions) => {\r\n const {\r\n elementRef,\r\n registerZone,\r\n unregisterZone,\r\n isOvered,\r\n isAllowed,\r\n isLazyAllowed,\r\n } = useZoneManager(options);\r\n\r\n // Register/unregister drop zone with store\r\n onMounted(registerZone);\r\n onBeforeUnmount(unregisterZone);\r\n\r\n return { elementRef, isOvered, isAllowed, isLazyAllowed };\r\n};\r\n","import { computed, type Ref } from 'vue';\r\nimport { useDnDStore } from './useDnDStore';\r\nimport { isDescendant } from '../utils/dom';\r\n\r\nexport const useSelection = (elementRef: Ref<HTMLElement | null>) => {\r\n const { selectedElements, elementsMap } = useDnDStore();\r\n\r\n const isSelected = computed<boolean>(() =>\r\n elementRef.value ? selectedElements.value.has(elementRef.value) : false\r\n );\r\n\r\n const isParentOfSelected = computed(() => {\r\n if (!elementRef.value) return false;\r\n\r\n for (const node of selectedElements.value) {\r\n if (\r\n node &&\r\n isDescendant(node as HTMLElement, elementRef.value as HTMLElement)\r\n ) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n\r\n const hasSelectedParent = computed(() => {\r\n if (!elementRef.value) return false;\r\n\r\n for (const node of selectedElements.value) {\r\n if (\r\n node &&\r\n isDescendant(elementRef.value as HTMLElement, node as HTMLElement)\r\n ) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n\r\n const handleUnselect = () => {\r\n if (!elementRef.value) return;\r\n selectedElements.value.delete(elementRef.value);\r\n };\r\n\r\n const handleSelect = () => {\r\n if (!elementRef.value) return;\r\n const element = elementsMap.value.get(elementRef.value);\r\n if (!element) return;\r\n\r\n if (isParentOfSelected.value) {\r\n // Удаляем все дочерние выбранные элементы\r\n for (const node of selectedElements.value) {\r\n if (\r\n node &&\r\n isDescendant(node as HTMLElement, elementRef.value as HTMLElement)\r\n ) {\r\n selectedElements.value.delete(node);\r\n }\r\n }\r\n }\r\n\r\n if (hasSelectedParent.value) {\r\n // Удаляем все родительские выбранные элементы\r\n for (const node of selectedElements.value) {\r\n if (\r\n node &&\r\n isDescendant(elementRef.value as HTMLElement, node as HTMLElement)\r\n ) {\r\n selectedElements.value.delete(node);\r\n }\r\n }\r\n }\r\n\r\n selectedElements.value.add(elementRef.value);\r\n };\r\n\r\n const handleToggleSelect = () => {\r\n if (!elementRef.value) return;\r\n\r\n selectedElements.value.has(elementRef.value)\r\n ? handleUnselect()\r\n : handleSelect();\r\n };\r\n\r\n return {\r\n handleUnselect,\r\n handleSelect,\r\n handleToggleSelect,\r\n isSelected,\r\n isParentOfSelected,\r\n };\r\n};\r\n"],"names":["_DnDOperations","__publicField","source","index","item","target","sourceIndex","targetIndex","sourceItem","targetItem","store","hoveredElement","hoveredZone","targetSource","_b","_a","_d","_c","firstElement","firstIndex","_e","sortDirection","a","b","element","_g","_f","_h","items","DnDOperations","useDnDStore","createGlobalState","isPending","shallowRef","draggingElements","ref","isDragging","computed","activeContainer","elementsMap","selectedElements","zonesMap","visibleZones","visibleElements","hasIntersectionObserver","elementObserver","entries","entry","zoneObserver","handleDragElementIntersection","action","handleDropZoneIntersection","pointerPosition","KeyW","KeyS","KeyA","KeyD","ctrl","shift","alt","meta","useMagicKeys","hovered","useDragContainer","options","elementRef","onMounted","onUnmounted","computedStyle","__props","props","overlay","DefaultOverlay","VueDndKitPlugin","app","DragOverlay","originalMount","rootContainer","instance","rootEl","overlayContainer","insertMethod","targetElement","vnode","createVNode","render","originalUnmount","checkCollision","boxA","boxB","getBoundingBox","rect","getCenter","box","getOffset","pointer","getDistance","pointA","pointB","dx","dy","getOverlapPercent","xOverlap","yOverlap","overlapArea","boxAArea","boxBArea","draggableDataName","preventEvent","event","createPayload","useElementManager","isDragStarted","isOvered","id","useId","disabled","isAllowed","currentElement","_","draggingElement","group","isLazyAllowed","isDescendant","container","defaultCollisionDetection","containerRect","containerCenter","pointerX","pointerY","shouldUseNormalPriority","activeDragNodes","allCollidingElements","node","elementCenter","isPointerInElement","overlapPercent","centerDistance","depth","parentNode","allCollidingZones","dragNode","zone","zoneCenter","useKeyboard","keyboard","moveStep","centerX","centerY","currentX","currentY","newX","newY","usePointer","pixel","percent","useSensor","onPointerStart","onPointerMove","onPointerEnd","onKeyboardStart","onKeyboardMove","onKeyboardEnd","animationFrameId","getDraggingElements","draggableElement","isDraggableInSelection","result","validateCollisionResults","htmlElements","elements","disabledZones","disabledElements","data","filteredZoneElement","htmlElement","disabledZone","isInsideDisabledZone","isInsideDisabledElement","disabledElement","detectCollisions","processCollisionResults","results","previousElement","previousZone","newElement","newZone","_i","_l","_k","_j","throttledDetectAndProcess","useThrottleFn","processedResults","animationLoop","startDetection","stopDetection","triggerEvents","promiseResult","useEventManager","originalUserSelect","originalTouchAction","originalOverscrollBehavior","currentMoveHandler","currentEndHandler","currentCancelHandler","currentScrollHandler","currentKeyHandler","disableInteractions","body","enableInteractions","clearAllListeners","activate","track","deactivate","response","useDraggable","registerElement","unregisterElement","start","handleDragStart","onBeforeUnmount","useZoneManager","currentZone","useDroppable","registerZone","unregisterZone","useSelection","isSelected","isParentOfSelected","hasSelectedParent","handleUnselect","handleSelect"],"mappings":"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"}