@vue-dnd-kit/core 1.3.4 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"vue-dnd-kit-core.es.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 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 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 = ref<Set<HTMLElement | Element>>(new Set());\r\n const visibleElements = ref<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 { w, s, a, d, 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,\r\n s,\r\n a,\r\n d,\r\n ctrl,\r\n shift,\r\n alt,\r\n meta,\r\n },\r\n hovered,\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 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 }));\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 } from 'vue';\r\n import { useDnDStore } from '../composables/useDnDStore';\r\n import DefaultOverlay from './DefaultOverlay.vue';\r\n\r\n const { activeContainer } = useDnDStore();\r\n\r\n const overlay = computed(\r\n () => activeContainer.component.value ?? DefaultOverlay\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 :is=\"overlay\" />\r\n </Transition>\r\n\r\n <component\r\n v-else\r\n :is=\"overlay\"\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 { useDnDStore } from './composables/useDnDStore';\r\n\r\nexport const VueDndKitPlugin = {\r\n install(app: App) {\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 rootEl.appendChild(overlayContainer);\r\n const vnode = createVNode(DragOverlay);\r\n render(vnode, overlayContainer);\r\n\r\n app.__VUE_DND_KIT_OVERLAY__ = {\r\n container: overlayContainer,\r\n vnode,\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 };\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","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 () =>\r\n visibleElements.value.has(elementRef.value as HTMLElement) &&\r\n hovered.element.value === elementRef.value\r\n );\r\n\r\n const id = shallowRef(options?.id || useId());\r\n\r\n const isDragging = computed<boolean>(() => {\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 (!elementRef.value) return false;\r\n if (!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 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 ?? [],\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 });\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 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 // Вычисляем глубину вложенности\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 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\r\n const activeDragNodes = Array.from(store.draggingElements.value.keys());\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 (\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 possibleElement = elements.find(\r\n (htmlElement) =>\r\n store.visibleElements.value.has(htmlElement) &&\r\n store.elementsMap.value.has(htmlElement) &&\r\n !activeDragNodes.some(\r\n (dragNode) =>\r\n dragNode &&\r\n (dragNode === htmlElement ||\r\n isDescendant(\r\n htmlElement as HTMLElement,\r\n dragNode as HTMLElement\r\n ) ||\r\n isDescendant(dragNode as HTMLElement, htmlElement as HTMLElement))\r\n ) &&\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 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 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 = (triggerEvents = true) => {\r\n onPointerEnd();\r\n onKeyboardEnd();\r\n\r\n if (triggerEvents) {\r\n if (store.hovered.zone.value) {\r\n const zone = store.zonesMap.value.get(store.hovered.zone.value);\r\n zone?.events.onDrop?.(store, createPayload(store));\r\n } else {\r\n store.draggingElements.value.forEach((element) =>\r\n element.events.onEnd?.(store, createPayload(store))\r\n );\r\n }\r\n\r\n store.selectedElements.value.clear();\r\n }\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 {\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 } = 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 clearAllListeners();\r\n\r\n (event.target as HTMLElement).blur();\r\n\r\n if (options?.container) activeContainer.component.value = options.container;\r\n\r\n const { activate, track, deactivate } = useSensor(elementRef, options);\r\n\r\n currentEndHandler = () => {\r\n activeContainer.component.value = null;\r\n enableInteractions();\r\n deactivate(true);\r\n clearAllListeners();\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 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 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 return 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 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 });\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 { elementRef, registerZone, unregisterZone, isOvered, isAllowed };\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 { elementRef, registerZone, unregisterZone, isOvered, isAllowed } =\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 };\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","draggingElements","ref","isDragging","computed","activeContainer","shallowRef","elementsMap","selectedElements","zonesMap","visibleZones","visibleElements","hasIntersectionObserver","elementObserver","entries","entry","zoneObserver","handleDragElementIntersection","action","handleDropZoneIntersection","pointerPosition","w","s","d","ctrl","shift","alt","meta","useMagicKeys","hovered","useDragContainer","options","elementRef","onMounted","onUnmounted","computedStyle","overlay","DefaultOverlay","VueDndKitPlugin","app","DragOverlay","originalMount","rootContainer","instance","rootEl","overlayContainer","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","isAllowed","currentElement","_","draggingElement","group","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","filteredZoneElement","htmlElement","detectCollisions","processCollisionResults","results","previousElement","previousZone","newElement","newZone","_i","_l","_k","_j","throttledDetectAndProcess","useThrottleFn","processedResults","animationLoop","startDetection","stopDetection","triggerEvents","useEventManager","originalUserSelect","originalTouchAction","originalOverscrollBehavior","currentMoveHandler","currentEndHandler","currentCancelHandler","currentScrollHandler","currentKeyHandler","disableInteractions","body","enableInteractions","clearAllListeners","activate","track","deactivate","useDraggable","registerElement","unregisterElement","start","handleDragStart","onBeforeUnmount","useZoneManager","currentZone","useDroppable","registerZone","unregisterZone","useSelection","isSelected","isParentOfSelected","hasSelectedParent","handleUnselect","handleSelect"],"mappings":"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"}
1
+ {"version":3,"file":"vue-dnd-kit-core.es.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';\n\nexport class DnDOperations {\n static remove = (source?: any[], index?: number) => {\n if (!source || index === undefined) return;\n const [item] = source.splice(index, 1);\n return item;\n };\n static insert = (target?: any[], index?: number, item?: any) => {\n if (!target || index === undefined) return;\n target.splice(index, 0, item);\n };\n static move = (\n source?: any[],\n sourceIndex?: number,\n target?: any[],\n targetIndex?: number\n ) => {\n if (\n !source ||\n !target ||\n sourceIndex === undefined ||\n targetIndex === undefined\n )\n return;\n const item = DnDOperations.remove(source, sourceIndex);\n DnDOperations.insert(target, targetIndex, item);\n };\n static swap = (\n source?: any[],\n sourceIndex?: number,\n target?: any[],\n targetIndex?: number\n ) => {\n if (\n !source ||\n !target ||\n sourceIndex === undefined ||\n targetIndex === undefined\n )\n return;\n\n const sourceItem = source[sourceIndex];\n const targetItem = target[targetIndex];\n\n source[sourceIndex] = targetItem;\n target[targetIndex] = sourceItem;\n };\n static copy = (\n source?: any[],\n index?: number,\n target?: any[],\n targetIndex?: number\n ) => {\n if (!source || index === undefined || !target || targetIndex === undefined)\n return;\n const item = source[index];\n DnDOperations.insert(target, targetIndex, item);\n };\n static applyTransfer = (store: IDnDStore) => {\n const hoveredElement = store.hovered.element.value;\n const hoveredZone = store.hovered.zone.value;\n\n if (hoveredElement) {\n const targetSource =\n store.elementsMap.value.get(hoveredElement)?.data?.source;\n const targetIndex =\n store.elementsMap.value.get(hoveredElement)?.data?.index;\n\n const firstElement = store.draggingElements.value.values().next().value;\n const firstIndex = firstElement?.data?.index;\n\n const sortDirection =\n firstIndex !== undefined &&\n targetIndex !== undefined &&\n firstIndex > targetIndex\n ? 1\n : -1;\n\n const sortedElements = Array.from(\n store.draggingElements.value.values()\n ).sort(\n (a, b) => sortDirection * ((a.data?.index || 0) - (b.data?.index || 0))\n );\n\n sortedElements.forEach((element) =>\n DnDOperations.move(\n element.data?.source,\n element.data?.index,\n targetSource,\n targetIndex\n )\n );\n } else if (hoveredZone) {\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\n const targetIndex = targetSource?.length;\n\n const sortedElements = Array.from(\n store.draggingElements.value.values()\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\n\n sortedElements.forEach((element) =>\n DnDOperations.move(\n element.data?.source,\n element.data?.index,\n targetSource,\n targetIndex\n )\n );\n }\n };\n\n static applyCopy = (store: IDnDStore) => {\n const hoveredElement = store.hovered.element.value;\n const hoveredZone = store.hovered.zone.value;\n\n if (hoveredElement) {\n const targetSource =\n store.elementsMap.value.get(hoveredElement)?.data?.source;\n const targetIndex =\n store.elementsMap.value.get(hoveredElement)?.data?.index;\n\n const sortedElements = Array.from(\n store.draggingElements.value.values()\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\n\n sortedElements.forEach((element) =>\n DnDOperations.copy(\n element.data?.source,\n element.data?.index,\n targetSource,\n targetIndex\n )\n );\n } else if (hoveredZone) {\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\n const targetIndex = targetSource?.length;\n\n const sortedElements = Array.from(\n store.draggingElements.value.values()\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\n\n sortedElements.forEach((element) =>\n DnDOperations.copy(\n element.data?.source,\n element.data?.index,\n targetSource,\n targetIndex\n )\n );\n }\n };\n static applySwap = (store: IDnDStore) => {\n const hoveredElement = store.hovered.element.value;\n const hoveredZone = store.hovered.zone.value;\n\n if (hoveredElement && store.draggingElements.value.size === 1) {\n const element = store.draggingElements.value.values().next().value;\n DnDOperations.swap(\n element?.data?.source,\n element?.data?.index,\n store.elementsMap.value.get(hoveredElement)?.data?.source,\n store.elementsMap.value.get(hoveredElement)?.data?.index\n );\n } else if (hoveredZone) {\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\n const targetIndex = targetSource?.length;\n\n const sortedElements = Array.from(\n store.draggingElements.value.values()\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\n\n sortedElements.forEach((element) =>\n DnDOperations.move(\n element.data?.source,\n element.data?.index,\n targetSource,\n targetIndex\n )\n );\n }\n };\n static applyRemove = (store: IDnDStore) => {\n const sortedElements = Array.from(\n store.draggingElements.value.values()\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\n\n sortedElements.forEach((element) => {\n if (element.data?.source && element.data?.index !== undefined) {\n DnDOperations.remove(element.data.source, element.data.index);\n }\n });\n };\n static applyInsert = (store: IDnDStore, items: any[]) => {\n const hoveredElement = store.hovered.element.value;\n const hoveredZone = store.hovered.zone.value;\n\n if (hoveredElement && items.length > 0) {\n const targetSource =\n store.elementsMap.value.get(hoveredElement)?.data?.source;\n const targetIndex =\n store.elementsMap.value.get(hoveredElement)?.data?.index;\n\n items.forEach((item) => {\n DnDOperations.insert(targetSource, targetIndex, item);\n });\n } else if (hoveredZone) {\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\n const targetIndex = targetSource?.length;\n\n items.forEach((item) => {\n DnDOperations.insert(targetSource, targetIndex, item);\n });\n }\n };\n}\n","import type {\n IDragElement,\n IDraggingElement,\n IDropZone,\n IPoint,\n} from '../types';\nimport {\n computed,\n ref,\n shallowRef,\n type Component,\n type TransitionProps,\n} from 'vue';\nimport { createGlobalState, useMagicKeys } from '@vueuse/core';\n\nexport const useDnDStore = createGlobalState(() => {\n const isPending = shallowRef<boolean>(false);\n const draggingElements = ref<Map<HTMLElement | Element, IDraggingElement>>(\n new Map()\n );\n const isDragging = computed<boolean>(() => draggingElements.value.size > 0);\n\n const activeContainer = {\n component: ref<Component | null>(null),\n ref: shallowRef<HTMLElement | null>(null),\n options: shallowRef<TransitionProps | null>(null),\n animating: {\n enter: shallowRef<boolean>(false),\n leave: shallowRef<boolean>(false),\n appear: shallowRef<boolean>(false),\n },\n };\n\n const elementsMap = ref<Map<HTMLElement | Element, IDragElement>>(new Map());\n const selectedElements = ref<Set<HTMLElement | Element>>(new Set());\n const zonesMap = ref<Map<HTMLElement | Element, IDropZone>>(new Map());\n const visibleZones = shallowRef<Set<HTMLElement | Element>>(new Set());\n const visibleElements = shallowRef<Set<HTMLElement | Element>>(new Set());\n\n const hasIntersectionObserver =\n typeof window !== 'undefined' && 'IntersectionObserver' in window;\n\n const elementObserver = hasIntersectionObserver\n ? new IntersectionObserver((entries) => {\n entries.forEach((entry) =>\n visibleElements.value[entry.isIntersecting ? 'add' : 'delete'](\n entry.target\n )\n );\n })\n : null;\n\n const zoneObserver = hasIntersectionObserver\n ? new IntersectionObserver((entries) => {\n entries.forEach((entry) =>\n visibleZones.value[entry.isIntersecting ? 'add' : 'delete'](\n entry.target\n )\n );\n })\n : null;\n\n const handleDragElementIntersection = (\n action: 'add' | 'remove',\n element: HTMLElement | Element\n ) => {\n if (!elementObserver) return;\n\n if (action === 'add') {\n elementObserver.observe(element);\n } else {\n elementObserver.unobserve(element);\n visibleElements.value.delete(element);\n }\n };\n\n const handleDropZoneIntersection = (\n action: 'add' | 'remove',\n element: HTMLElement | Element\n ) => {\n if (!zoneObserver) return;\n\n if (action === 'add') {\n zoneObserver.observe(element);\n } else {\n zoneObserver.unobserve(element);\n visibleZones.value.delete(element);\n }\n };\n\n const pointerPosition = {\n start: shallowRef<IPoint | null>(null),\n current: shallowRef<IPoint | null>(null),\n offset: {\n percent: shallowRef<IPoint | null>(null),\n pixel: shallowRef<IPoint | null>(null),\n },\n };\n\n const { w, s, a, d, ctrl, shift, alt, meta } = useMagicKeys();\n\n const hovered = {\n zone: shallowRef<HTMLElement | Element | null>(null),\n element: shallowRef<HTMLElement | Element | null>(null),\n };\n\n return {\n draggingElements,\n isDragging,\n activeContainer,\n elementsMap,\n selectedElements,\n zonesMap,\n visibleZones,\n visibleElements,\n pointerPosition,\n keyboard: {\n w,\n s,\n a,\n d,\n ctrl,\n shift,\n alt,\n meta,\n },\n hovered,\n isPending,\n handleDragElementIntersection,\n handleDropZoneIntersection,\n };\n});\n","import { onUnmounted, onMounted, ref, type TransitionProps } from 'vue';\n\nimport { useDnDStore } from './useDnDStore';\n\nexport const useDragContainer = (options?: Omit<TransitionProps, 'appear'>) => {\n const elementRef = ref<HTMLElement | null>(null);\n\n const { draggingElements, pointerPosition, isDragging, activeContainer } =\n useDnDStore();\n\n onMounted(() => {\n activeContainer.ref = elementRef;\n activeContainer.options.value = options ?? null;\n });\n\n onUnmounted(() => {\n activeContainer.ref.value = null;\n activeContainer.options.value = null;\n });\n\n return {\n elementRef,\n draggingElements,\n pointerPosition,\n isDragging,\n animating: activeContainer.animating,\n };\n};\n","<script setup lang=\"ts\">\n import { computed, CSSProperties } from 'vue';\n import { useDragContainer } from '../composables/useDragContainer';\n\n const { elementRef, pointerPosition, isDragging, draggingElements } =\n useDragContainer();\n\n const { styles } = defineProps<{\n styles?: CSSProperties;\n }>();\n\n const computedStyle = computed<CSSProperties>(() => ({\n transform: `translate3d(${\n (pointerPosition.current.value?.x ?? 0) -\n (pointerPosition.offset.pixel.value?.x ?? 0)\n }px, ${\n (pointerPosition.current.value?.y ?? 0) -\n (pointerPosition.offset.pixel.value?.y ?? 0)\n }px, 0)`,\n zIndex: 1000,\n position: 'fixed',\n top: 0,\n left: 0,\n transition: '0.3s cubic-bezier(0.165, 0.84, 0.44, 1)',\n ...styles,\n }));\n</script>\n\n<template>\n <div\n v-if=\"isDragging\"\n ref=\"elementRef\"\n :style=\"computedStyle\"\n >\n <template\n v-for=\"[node, element] in draggingElements\"\n :key=\"element.id\"\n >\n <component\n v-if=\"element.layer\"\n :is=\"element.layer\"\n :node=\"node\"\n :data=\"element.data\"\n :id=\"element.id\"\n :groups=\"element.groups\"\n />\n <div\n v-else\n v-html=\"element.initialHTML\"\n :style=\"{\n width: `${element.initialRect?.width}px`,\n height: `${element.initialRect?.height}px`,\n }\"\n />\n </template>\n </div>\n</template>\n","<script setup lang=\"ts\">\n import { computed, CSSProperties } from 'vue';\n import { useDnDStore } from '../composables/useDnDStore';\n import DefaultOverlay from './DefaultOverlay.vue';\n\n const props = defineProps<{\n styles?: CSSProperties;\n }>();\n\n const { activeContainer } = useDnDStore();\n\n const overlay = computed(() => ({\n component: activeContainer.component.value ?? DefaultOverlay,\n props,\n }));\n</script>\n\n<template>\n <Transition\n v-if=\"activeContainer.options.value\"\n :name=\"activeContainer.options.value.name\"\n :duration=\"activeContainer.options.value.duration\"\n :enter-from-class=\"activeContainer.options.value.enterFromClass\"\n :enter-to-class=\"activeContainer.options.value.enterToClass\"\n :enter-active-class=\"activeContainer.options.value.enterActiveClass\"\n :leave-from-class=\"activeContainer.options.value.leaveFromClass\"\n :leave-to-class=\"activeContainer.options.value.leaveToClass\"\n :leave-active-class=\"activeContainer.options.value.leaveActiveClass\"\n :appear-active-class=\"activeContainer.options.value.appearActiveClass\"\n :appear-from-class=\"activeContainer.options.value.appearFromClass\"\n :appear-to-class=\"activeContainer.options.value.appearToClass\"\n :mode=\"activeContainer.options.value.mode\"\n :type=\"activeContainer.options.value.type\"\n :css=\"activeContainer.options.value.css\"\n :appear=\"true\"\n :persisted=\"activeContainer.options.value.persisted\"\n @enter=\"activeContainer.options.value.onEnter\"\n @leave=\"activeContainer.options.value.onLeave\"\n @before-enter=\"activeContainer.options.value.onBeforeEnter\"\n @before-leave=\"activeContainer.options.value.onBeforeLeave\"\n @before-appear=\"activeContainer.options.value.onBeforeAppear\"\n @after-enter=\"activeContainer.options.value.onAfterEnter\"\n @after-leave=\"activeContainer.options.value.onAfterLeave\"\n @after-appear=\"activeContainer.options.value.onAfterAppear\"\n >\n <component\n :is=\"overlay.component || overlay\"\n v-bind=\"overlay.props || {}\"\n />\n </Transition>\n\n <component\n v-else\n :is=\"overlay.component || overlay\"\n v-bind=\"overlay.props || {}\"\n />\n</template>\n","import { createVNode, render } from 'vue';\n\nimport type { App } from 'vue';\nimport DragOverlay from './components/DragOverlay.vue';\nimport { IPluginOptions } from './types';\nimport { useDnDStore } from './composables/useDnDStore';\n\nexport const VueDndKitPlugin = {\n install(app: App, options?: IPluginOptions) {\n app.component('DragOverlay', DragOverlay);\n const originalMount = app.mount;\n app.mount = function (rootContainer) {\n const instance = originalMount.call(this, rootContainer);\n\n const rootEl =\n typeof rootContainer === 'string'\n ? document.querySelector(rootContainer)\n : rootContainer;\n\n if (rootEl && rootEl instanceof Element) {\n if (!rootEl.querySelector('#vue-dnd-kit-overlay')) {\n const overlayContainer = document.createElement('div');\n\n overlayContainer.id = 'vue-dnd-kit-overlay';\n overlayContainer.style.pointerEvents = 'none';\n\n rootEl.appendChild(overlayContainer);\n\n // Передаем опции напрямую в компонент\n const vnode = createVNode(DragOverlay, {\n styles: options?.defaultOverlay?.styles,\n });\n render(vnode, overlayContainer);\n\n app.__VUE_DND_KIT_OVERLAY__ = {\n container: overlayContainer,\n vnode,\n options: options?.defaultOverlay || {},\n };\n\n const store = useDnDStore();\n app.__VUE_DND_KIT_STORE__ = store;\n }\n }\n\n return instance;\n };\n\n // Модифицируем метод unmount для очистки\n const originalUnmount = app.unmount;\n app.unmount = function () {\n if (app.__VUE_DND_KIT_OVERLAY__) {\n render(null, app.__VUE_DND_KIT_OVERLAY__.container);\n delete app.__VUE_DND_KIT_OVERLAY__;\n }\n return originalUnmount.call(this);\n };\n },\n};\n\ndeclare module '@vue/runtime-core' {\n export interface App {\n __VUE_DND_KIT_OVERLAY__?: {\n container: HTMLElement;\n vnode: any;\n options: IPluginOptions['defaultOverlay'];\n };\n __VUE_DND_KIT_STORE__?: ReturnType<typeof useDnDStore>;\n }\n}\n","import type { IBoundingBox, IPoint } from '../types';\n\nexport const checkCollision = (\n boxA: IBoundingBox,\n boxB: IBoundingBox\n): boolean => {\n return (\n boxA.x < boxB.x + boxB.width &&\n boxA.x + boxA.width > boxB.x &&\n boxA.y < boxB.y + boxB.height &&\n boxA.y + boxA.height > boxB.y\n );\n};\n\nexport const getBoundingBox = (element: HTMLElement | null): IBoundingBox => {\n if (!element)\n return {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n bottom: 0,\n left: 0,\n right: 0,\n top: 0,\n };\n\n const rect = element.getBoundingClientRect();\n\n return {\n bottom: rect.bottom,\n left: rect.left,\n right: rect.right,\n top: rect.top,\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height,\n };\n};\n\nexport const getCenter = (box: IBoundingBox): IPoint => ({\n x: box.x + box.width / 2,\n y: box.y + box.height / 2,\n});\n\nexport const getOffset = (element: HTMLElement | null, pointer: IPoint) => {\n const rect = getBoundingBox(element);\n return {\n pixel: {\n x: pointer.x - rect.x,\n y: pointer.y - rect.y,\n },\n percent: {\n x: ((pointer.x - rect.x) / rect.width) * 100,\n y: ((pointer.y - rect.y) / rect.height) * 100,\n },\n };\n};\n\nexport const getDistance = (pointA: IPoint, pointB: IPoint): number => {\n const dx = pointB.x - pointA.x;\n const dy = pointB.y - pointA.y;\n return Math.sqrt(dx * dx + dy * dy);\n};\n\nexport const getOverlapPercent = (\n boxA: IBoundingBox,\n boxB: IBoundingBox\n): number => {\n const xOverlap = Math.max(\n 0,\n Math.min(boxA.x + boxA.width, boxB.x + boxB.width) -\n Math.max(boxA.x, boxB.x)\n );\n const yOverlap = Math.max(\n 0,\n Math.min(boxA.y + boxA.height, boxB.y + boxB.height) -\n Math.max(boxA.y, boxB.y)\n );\n\n const overlapArea = xOverlap * yOverlap;\n\n const boxAArea = boxA.width * boxA.height;\n const boxBArea = boxB.width * boxB.height;\n\n // Возвращаем среднее значение процентов перекрытия относительно обоих элементов\n return ((overlapArea / boxAArea) * 100 + (overlapArea / boxBArea) * 100) / 2;\n};\n","export const draggableDataName = 'data-vue-dnd-kit-draggable';\nexport const droppableDataName = 'data-vue-dnd-kit-droppable';\n\nexport const VUE_DND_KIT_OPTIONS = Symbol('vue-dnd-kit-options');\n","import { IDnDPayload, IDnDStore } from '../types';\n\nexport const preventEvent = (event: Event) => {\n event.preventDefault();\n};\n\nexport const createPayload = (store: IDnDStore): IDnDPayload => {\n return {\n items: Array.from(store.draggingElements.value.values()),\n };\n};\n","import { computed, ref, shallowRef, useId } from 'vue';\n\nimport type { IUseDragOptions } from '../types';\nimport { draggableDataName } from '../utils/namespaces';\nimport { preventEvent } from '../utils/events';\nimport { useDnDStore } from '../composables/useDnDStore';\n\nexport const useElementManager = (options?: IUseDragOptions) => {\n const {\n elementsMap,\n draggingElements,\n hovered,\n selectedElements,\n isDragging: isDragStarted,\n visibleElements,\n handleDragElementIntersection,\n } = useDnDStore();\n\n const elementRef = ref<HTMLElement | null>(null);\n const isOvered = computed<boolean>(\n () =>\n visibleElements.value.has(elementRef.value as HTMLElement) &&\n hovered.element.value === elementRef.value\n );\n\n const id = shallowRef(options?.id || useId());\n\n const isDragging = computed<boolean>(() => {\n if (!elementRef.value) return false;\n if (!elementsMap.value.has(elementRef.value)) return false;\n return draggingElements.value.has(elementRef.value);\n });\n\n const isAllowed = computed<boolean>(() => {\n if (!elementRef.value || !isDragStarted.value) return false;\n if (!visibleElements.value.has(elementRef.value)) return false;\n\n const currentElement = elementsMap.value.get(elementRef.value);\n if (!currentElement?.groups.length) return true;\n\n return !Array.from(draggingElements.value.entries()).some(\n ([_, draggingElement]) => {\n if (!draggingElement.groups.length) return false;\n return !draggingElement.groups.some((group) =>\n currentElement.groups.includes(group)\n );\n }\n );\n });\n\n const isLazyAllowed = computed<boolean>(() => {\n if (!elementRef.value || !isDragStarted.value) return false;\n if (!visibleElements.value.has(elementRef.value)) return false;\n if (hovered.element.value !== elementRef.value) return false;\n\n const currentElement = elementsMap.value.get(elementRef.value);\n if (!currentElement?.groups.length) return true;\n\n return !Array.from(draggingElements.value.entries()).some(\n ([_, draggingElement]) => {\n if (!draggingElement.groups.length) return false;\n return !draggingElement.groups.some((group) =>\n currentElement.groups.includes(group)\n );\n }\n );\n });\n\n const registerElement = () => {\n if (!elementRef.value) throw new Error('ElementRef is not set');\n\n elementsMap.value.set(elementRef.value, {\n node: elementRef.value,\n groups: options?.groups ?? [],\n layer: options?.layer ?? null,\n defaultLayer: options?.layer ?? null,\n events: options?.events ?? {},\n data: options?.data ?? null,\n id: id.value,\n });\n\n handleDragElementIntersection('add', elementRef.value);\n\n elementRef.value.addEventListener('dragstart', preventEvent);\n elementRef.value.addEventListener('drag', preventEvent);\n elementRef.value.setAttribute(draggableDataName, 'true');\n elementRef.value.setAttribute('draggable', 'false');\n };\n\n const unregisterElement = () => {\n if (!elementRef.value) return;\n\n elementsMap.value.delete(elementRef.value);\n selectedElements.value.delete(elementRef.value);\n\n elementRef.value.removeEventListener('dragstart', preventEvent);\n elementRef.value.removeEventListener('drag', preventEvent);\n elementRef.value.removeAttribute(draggableDataName);\n elementRef.value.removeAttribute('draggable');\n };\n\n return {\n elementRef,\n registerElement,\n unregisterElement,\n isDragging,\n isOvered,\n isAllowed,\n isLazyAllowed,\n id,\n };\n};\n","export const isDescendant = (\n element: HTMLElement | Element | null,\n container: HTMLElement | Element\n): boolean => {\n if (!element) return false;\n return container.contains(element);\n};\n","import {\n checkCollision,\n getBoundingBox,\n getCenter,\n getDistance,\n getOverlapPercent,\n} from './geometry';\n\nimport { IDnDStore } from '../types';\nimport { isDescendant } from './dom';\n\nexport const defaultCollisionDetection = (store: IDnDStore) => {\n const containerRect = getBoundingBox(store.activeContainer.ref.value);\n const containerCenter = getCenter(containerRect);\n const pointerX = store.pointerPosition.current.value?.x ?? 0;\n const pointerY = store.pointerPosition.current.value?.y ?? 0;\n\n const isPointerInActiveContainer =\n containerRect &&\n pointerX >= containerRect.x &&\n pointerX <= containerRect.x + containerRect.width &&\n pointerY >= containerRect.y &&\n pointerY <= containerRect.y + containerRect.height;\n\n const shouldUseNormalPriority = !isPointerInActiveContainer;\n\n const activeDragNodes = Array.from(store.draggingElements.value.keys());\n\n const allCollidingElements = Array.from(store.visibleElements.value.entries())\n .filter(([node, _]) => {\n if (!node) return false;\n\n const rect = getBoundingBox(node as HTMLElement);\n return rect && containerRect && checkCollision(rect, containerRect);\n })\n .map(([node, element]) => {\n const rect = getBoundingBox(node as HTMLElement);\n const elementCenter = getCenter(rect);\n\n const isPointerInElement =\n pointerX >= rect.x &&\n pointerX <= rect.x + rect.width &&\n pointerY >= rect.y &&\n pointerY <= rect.y + rect.height;\n\n const overlapPercent = getOverlapPercent(rect, containerRect);\n const centerDistance = getDistance(containerCenter, elementCenter);\n\n // Вычисляем глубину вложенности\n let depth = 0;\n for (const [parentNode, _] of store.visibleElements.value.entries()) {\n if (\n parentNode !== node &&\n parentNode &&\n node &&\n isDescendant(node as HTMLElement, parentNode as HTMLElement)\n ) {\n depth++;\n }\n }\n\n return {\n element,\n node: node as HTMLElement,\n isPointerInElement,\n overlapPercent,\n depth,\n centerDistance,\n };\n })\n .sort((a, b) => {\n if (!shouldUseNormalPriority) {\n if (a.isPointerInElement && b.isPointerInElement)\n return b.depth - a.depth;\n if (a.isPointerInElement !== b.isPointerInElement)\n return a.isPointerInElement ? -1 : 1;\n }\n if (Math.abs(a.overlapPercent - b.overlapPercent) <= 1)\n return a.centerDistance - b.centerDistance;\n return b.overlapPercent - a.overlapPercent;\n });\n\n const allCollidingZones = Array.from(store.visibleZones.value.entries())\n .filter(([node, _]) => {\n if (\n !node ||\n activeDragNodes.some(\n (dragNode) =>\n dragNode &&\n isDescendant(node as HTMLElement, dragNode as HTMLElement)\n )\n )\n return false;\n\n const rect = getBoundingBox(node as HTMLElement);\n return rect && containerRect && checkCollision(rect, containerRect);\n })\n .map(([node, zone]) => {\n const rect = getBoundingBox(node as HTMLElement);\n const zoneCenter = getCenter(rect);\n\n const isPointerInElement =\n pointerX >= rect.x &&\n pointerX <= rect.x + rect.width &&\n pointerY >= rect.y &&\n pointerY <= rect.y + rect.height;\n\n const overlapPercent = getOverlapPercent(rect, containerRect);\n const centerDistance = getDistance(containerCenter, zoneCenter);\n\n // Вычисляем глубину вложенности\n let depth = 0;\n for (const [parentNode, _] of store.visibleZones.value.entries()) {\n if (\n parentNode !== node &&\n parentNode &&\n node &&\n isDescendant(node as HTMLElement, parentNode as HTMLElement)\n ) {\n depth++;\n }\n }\n\n return {\n zone,\n node: node as HTMLElement,\n isPointerInElement,\n overlapPercent,\n depth,\n centerDistance,\n };\n })\n .sort((a, b) => {\n if (!shouldUseNormalPriority) {\n if (a.isPointerInElement && b.isPointerInElement)\n return b.depth - a.depth;\n if (a.isPointerInElement !== b.isPointerInElement)\n return a.isPointerInElement ? -1 : 1;\n }\n if (Math.abs(a.overlapPercent - b.overlapPercent) <= 1)\n return a.centerDistance - b.centerDistance;\n return b.overlapPercent - a.overlapPercent;\n });\n\n return [\n ...allCollidingElements.map((item) => item.node),\n ...allCollidingZones.map((item) => item.node),\n ];\n};\n","import type { Ref } from 'vue';\nimport { getBoundingBox } from '../utils/geometry';\nimport { preventEvent } from '../utils/events';\nimport { useDnDStore } from './useDnDStore';\n\nexport interface IKeyboardOptions {\n moveStep?: number;\n}\n\nexport const useKeyboard = (\n elementRef: Ref<HTMLElement | null>,\n options?: IKeyboardOptions\n) => {\n const { pointerPosition, keyboard } = useDnDStore();\n const moveStep = options?.moveStep || 10;\n\n const onKeyboardStart = (event: KeyboardEvent) => {\n preventEvent(event);\n\n const rect = getBoundingBox(elementRef.value);\n\n elementRef.value?.blur();\n\n const centerX = rect.x + rect.width / 2;\n const centerY = rect.y + rect.height / 2;\n\n pointerPosition.start.value = {\n x: centerX,\n y: centerY,\n };\n\n pointerPosition.current.value = {\n x: centerX,\n y: centerY,\n };\n\n pointerPosition.offset.pixel.value = {\n x: rect.width / 2,\n y: rect.height / 2,\n };\n\n pointerPosition.offset.percent.value = {\n x: 50,\n y: 50,\n };\n };\n\n const onKeyboardMove = () => {\n if (!pointerPosition.current.value) return;\n\n const currentX = pointerPosition.current.value.x;\n const currentY = pointerPosition.current.value.y;\n\n let newX = currentX;\n let newY = currentY;\n\n if (keyboard.w.value) newY -= moveStep;\n if (keyboard.s.value) newY += moveStep;\n if (keyboard.a.value) newX -= moveStep;\n if (keyboard.d.value) newX += moveStep;\n\n pointerPosition.current.value = {\n x: newX,\n y: newY,\n };\n };\n\n const onKeyboardEnd = () => {\n pointerPosition.current.value = null;\n pointerPosition.start.value = null;\n pointerPosition.offset.pixel.value = null;\n pointerPosition.offset.percent.value = null;\n };\n\n return {\n onKeyboardStart,\n onKeyboardMove,\n onKeyboardEnd,\n };\n};\n","import type { Ref } from 'vue';\nimport { getOffset } from '../utils/geometry';\nimport { useDnDStore } from './useDnDStore';\n\nexport const usePointer = (elementRef: Ref<HTMLElement | null>) => {\n const store = useDnDStore();\n\n const onPointerStart = (event: PointerEvent) => {\n store.pointerPosition.start.value = { x: event.clientX, y: event.clientY };\n store.pointerPosition.current.value = {\n x: event.clientX,\n y: event.clientY,\n };\n\n const { pixel, percent } = getOffset(elementRef.value, {\n x: event.clientX,\n y: event.clientY,\n });\n\n store.pointerPosition.offset.pixel.value = pixel;\n store.pointerPosition.offset.percent.value = percent;\n };\n\n const onPointerMove = (event: PointerEvent | WheelEvent) => {\n if (store.isPending.value) return;\n\n store.pointerPosition.current.value = {\n x: event.clientX,\n y: event.clientY,\n };\n };\n\n const onPointerEnd = () => {\n store.pointerPosition.current.value = null;\n store.pointerPosition.start.value = null;\n store.pointerPosition.offset.pixel.value = null;\n store.pointerPosition.offset.percent.value = null;\n };\n\n return {\n onPointerStart,\n onPointerMove,\n onPointerEnd,\n };\n};\n","import type {\n ICollisionDetectionResult,\n IDraggingElement,\n IUseDragOptions,\n} from '../types';\n\nimport type { Ref } from 'vue';\nimport { createPayload } from '../utils/events';\nimport { defaultCollisionDetection } from '../utils/sensor';\nimport { isDescendant } from '../utils/dom';\nimport { useDnDStore } from './useDnDStore';\nimport { useKeyboard } from './useKeyboard';\nimport { usePointer } from './usePointer';\nimport { useThrottleFn } from '@vueuse/core';\n\nexport const useSensor = (\n elementRef: Ref<HTMLElement | null>,\n options?: IUseDragOptions\n) => {\n const store = useDnDStore();\n\n const { onPointerStart, onPointerMove, onPointerEnd } =\n usePointer(elementRef);\n\n const { onKeyboardStart, onKeyboardMove, onKeyboardEnd } = useKeyboard(\n elementRef,\n options?.keyboard\n );\n\n let animationFrameId: number | null = null;\n\n const getDraggingElements = (\n draggableElement: HTMLElement | null\n ): Map<HTMLElement | Element, IDraggingElement> => {\n if (!draggableElement) return new Map();\n\n const isDraggableInSelection =\n store.selectedElements.value.has(draggableElement);\n\n if (store.selectedElements.value.size > 0 && isDraggableInSelection) {\n const result = new Map<HTMLElement | Element, IDraggingElement>();\n\n store.selectedElements.value.forEach((node) => {\n const element = store.elementsMap.value.get(node);\n if (!element) return;\n\n result.set(node, {\n ...element,\n initialHTML: element.node?.outerHTML ?? '',\n initialRect: element.node?.getBoundingClientRect(),\n });\n });\n\n return result;\n }\n\n store.selectedElements.value.clear();\n\n const element = store.elementsMap.value.get(draggableElement);\n if (!element) return new Map();\n\n const result = new Map<HTMLElement | Element, IDraggingElement>();\n\n result.set(draggableElement, {\n ...element,\n initialHTML: element.node?.outerHTML ?? '',\n initialRect: element.node?.getBoundingClientRect(),\n });\n\n return result;\n };\n\n const validateCollisionResults = (\n htmlElements: HTMLElement | HTMLElement[] | Element | Element[] | null\n ) => {\n if (!htmlElements) {\n return { element: null, zone: null };\n }\n\n const elements = Array.isArray(htmlElements)\n ? htmlElements\n : [htmlElements];\n\n const activeDragNodes = Array.from(store.draggingElements.value.keys());\n\n const filteredZoneElement = elements.find((htmlElement) => {\n if (!store.visibleZones.value.has(htmlElement)) return false;\n\n const zone = store.zonesMap.value.get(htmlElement);\n if (!zone) return false;\n\n if (\n activeDragNodes.some(\n (dragNode) =>\n dragNode &&\n (dragNode === zone.node ||\n isDescendant(zone.node as HTMLElement, dragNode as HTMLElement))\n )\n )\n return false;\n\n if (zone.groups.length) {\n const isCompatible = !Array.from(\n store.draggingElements.value.values()\n ).some((element) => {\n if (!element.groups.length) return false;\n return !element.groups.some((group) => zone.groups.includes(group));\n });\n if (!isCompatible) return false;\n }\n\n return true;\n });\n\n if (!filteredZoneElement) {\n return { element: null, zone: null };\n }\n\n const possibleElement = elements.find(\n (htmlElement) =>\n store.visibleElements.value.has(htmlElement) &&\n store.elementsMap.value.has(htmlElement) &&\n !activeDragNodes.some(\n (dragNode) =>\n dragNode &&\n (dragNode === htmlElement ||\n isDescendant(\n htmlElement as HTMLElement,\n dragNode as HTMLElement\n ) ||\n isDescendant(dragNode as HTMLElement, htmlElement as HTMLElement))\n ) &&\n (htmlElement === filteredZoneElement ||\n isDescendant(\n htmlElement as HTMLElement,\n filteredZoneElement as HTMLElement\n ))\n );\n\n return {\n element: possibleElement || null,\n zone: filteredZoneElement,\n };\n };\n\n const detectCollisions = options?.sensor?.setup || defaultCollisionDetection;\n\n const processCollisionResults = (results: ICollisionDetectionResult) => {\n const previousElement = store.hovered.element.value;\n const previousZone = store.hovered.zone.value;\n\n const newElement = results.element;\n const newZone = results.zone;\n\n store.hovered.element.value = newElement;\n store.hovered.zone.value = newZone;\n\n if (previousElement !== newElement) {\n if (previousElement) {\n store.elementsMap.value\n .get(previousElement)\n ?.events?.onLeave?.(store, createPayload(store));\n }\n\n if (newElement) {\n store.elementsMap.value\n .get(newElement)\n ?.events?.onHover?.(store, createPayload(store));\n }\n }\n\n if (previousZone !== newZone) {\n if (previousZone) {\n store.zonesMap.value\n .get(previousZone)\n ?.events?.onLeave?.(store, createPayload(store));\n }\n\n if (newZone) {\n store.zonesMap.value\n .get(newZone)\n ?.events?.onHover?.(store, createPayload(store));\n }\n }\n };\n\n const throttledDetectAndProcess = useThrottleFn(() => {\n const htmlElements = detectCollisions(store);\n const processedResults = validateCollisionResults(htmlElements);\n processCollisionResults(processedResults);\n }, options?.sensor?.throttle ?? 0);\n\n const animationLoop = () => {\n throttledDetectAndProcess();\n\n animationFrameId = requestAnimationFrame(animationLoop);\n };\n\n const startDetection = () => animationLoop();\n\n const stopDetection = () => {\n if (animationFrameId !== null) {\n onPointerEnd();\n onKeyboardEnd();\n cancelAnimationFrame(animationFrameId);\n animationFrameId = null;\n }\n };\n\n const activate = (event: PointerEvent | KeyboardEvent) => {\n store.draggingElements.value = getDraggingElements(elementRef.value);\n store.draggingElements.value.forEach((element) =>\n element.events.onStart?.(store, createPayload(store))\n );\n\n if (event instanceof PointerEvent) {\n onPointerStart(event);\n } else {\n onKeyboardStart(event);\n }\n\n startDetection();\n };\n\n const track = (event: PointerEvent | WheelEvent | KeyboardEvent) => {\n store.draggingElements.value.forEach((element) =>\n element.events.onMove?.(store, createPayload(store))\n );\n\n if (event instanceof KeyboardEvent) {\n onKeyboardMove();\n } else {\n onPointerMove(event);\n }\n };\n\n const deactivate = async (triggerEvents = true) => {\n if (store.hovered.zone.value) {\n const zone = store.zonesMap.value.get(store.hovered.zone.value);\n const result = zone?.events.onDrop?.(store, createPayload(store));\n\n if (result instanceof Promise) {\n try {\n store.isPending.value = true;\n\n const promiseResult = await result;\n\n if (promiseResult) {\n if (triggerEvents) store.selectedElements.value.clear();\n\n store.draggingElements.value.clear();\n\n store.hovered.zone.value = null;\n store.hovered.element.value = null;\n\n stopDetection();\n }\n\n return promiseResult;\n } catch {\n return false;\n } finally {\n store.isPending.value = false;\n }\n } else {\n if (triggerEvents) store.selectedElements.value.clear();\n\n store.draggingElements.value.clear();\n\n store.hovered.zone.value = null;\n store.hovered.element.value = null;\n\n stopDetection();\n }\n } else {\n store.draggingElements.value.forEach((element) =>\n element.events.onEnd?.(store, createPayload(store))\n );\n\n if (triggerEvents) store.selectedElements.value.clear();\n\n store.draggingElements.value.clear();\n\n store.hovered.zone.value = null;\n store.hovered.element.value = null;\n\n stopDetection();\n }\n };\n\n return {\n activate,\n track,\n deactivate,\n };\n};\n","import type { IUseDragOptions } from '../types';\nimport { Ref } from 'vue';\nimport { createGlobalState } from '@vueuse/core';\nimport { preventEvent } from '../utils/events';\nimport { useDnDStore } from '../composables/useDnDStore';\nimport { useSensor } from '../composables/useSensor';\n\nenum EKeyboardKey {\n ESCAPE = 'Escape',\n SPACE = 'Space',\n ENTER = 'Enter',\n W = 'KeyW',\n A = 'KeyA',\n S = 'KeyS',\n D = 'KeyD',\n CONTROL = 'ControlLeft',\n ALT = 'AltLeft',\n SHIFT = 'ShiftLeft',\n META = 'MetaLeft',\n}\n\nexport const useEventManager = createGlobalState(() => {\n let originalUserSelect = '';\n let originalTouchAction = '';\n let originalOverscrollBehavior = '';\n\n let currentMoveHandler: ((event: any) => void) | null = null;\n let currentEndHandler: (() => void) | null = null;\n let currentCancelHandler: (() => void) | null = null;\n let currentScrollHandler: ((event: WheelEvent) => void) | null = null;\n let currentKeyHandler: ((event: KeyboardEvent) => void) | null = null;\n\n const { activeContainer, isPending } = useDnDStore();\n\n const disableInteractions = () => {\n const body = document.body;\n\n originalUserSelect = body.style.userSelect;\n\n body.style.userSelect = 'none';\n\n window.addEventListener('contextmenu', preventEvent);\n window.addEventListener('selectstart', preventEvent);\n window.addEventListener('touchstart', preventEvent);\n window.addEventListener('touchmove', preventEvent);\n };\n\n const enableInteractions = () => {\n const body = document.body;\n\n body.style.userSelect = originalUserSelect;\n body.style.touchAction = originalTouchAction;\n body.style.overscrollBehavior = originalOverscrollBehavior;\n\n window.removeEventListener('contextmenu', preventEvent);\n window.removeEventListener('selectstart', preventEvent);\n window.removeEventListener('touchstart', preventEvent);\n window.removeEventListener('touchmove', preventEvent);\n };\n\n const clearAllListeners = () => {\n if (currentMoveHandler) {\n document.removeEventListener('pointermove', currentMoveHandler);\n currentMoveHandler = null;\n }\n\n if (currentEndHandler) {\n document.removeEventListener('pointerup', currentEndHandler);\n currentEndHandler = null;\n }\n\n if (currentCancelHandler) {\n currentCancelHandler = null;\n }\n\n if (currentScrollHandler) {\n document.removeEventListener('wheel', currentScrollHandler);\n currentScrollHandler = null;\n }\n\n if (currentKeyHandler) {\n document.removeEventListener('keydown', currentKeyHandler);\n document.removeEventListener('keypress', currentKeyHandler);\n document.removeEventListener('keyup', currentKeyHandler);\n currentKeyHandler = null;\n }\n };\n\n const handleDragStart = (\n event: PointerEvent | KeyboardEvent,\n elementRef: Ref<HTMLElement | null>,\n options?: IUseDragOptions\n ) => {\n if (isPending.value) return;\n clearAllListeners();\n\n (event.target as HTMLElement).blur();\n\n if (options?.container) activeContainer.component.value = options.container;\n\n const { activate, track, deactivate } = useSensor(elementRef, options);\n\n currentEndHandler = () => {\n deactivate(true).then((response) => {\n if (response === false) return;\n\n activeContainer.component.value = null;\n enableInteractions();\n deactivate(true);\n clearAllListeners();\n });\n };\n\n currentCancelHandler = () => {\n activeContainer.component.value = null;\n enableInteractions();\n deactivate(false);\n clearAllListeners();\n };\n\n currentMoveHandler = (event: PointerEvent | KeyboardEvent) => track(event);\n currentScrollHandler = (event: WheelEvent) => track(event);\n currentKeyHandler = (event: KeyboardEvent) => {\n if (event.type === 'keyup') {\n if (event.code === EKeyboardKey.ESCAPE) currentCancelHandler?.();\n if (event.code === EKeyboardKey.ENTER) currentEndHandler?.();\n }\n\n track(event);\n };\n\n disableInteractions();\n activate(event);\n\n document.addEventListener('pointermove', currentMoveHandler);\n document.addEventListener('pointerup', currentEndHandler);\n document.addEventListener('wheel', currentScrollHandler);\n document.addEventListener('keydown', currentKeyHandler);\n document.addEventListener('keypress', currentKeyHandler);\n document.addEventListener('keyup', currentKeyHandler);\n };\n\n return {\n handleDragStart,\n };\n});\n","import { onBeforeUnmount, onMounted } from 'vue';\n\nimport type { IUseDragOptions } from '../types';\nimport { useDnDStore } from './useDnDStore';\nimport { useElementManager } from '../managers/useElementManager';\nimport { useEventManager } from '../managers/useEventManager';\n\nexport const useDraggable = (options?: IUseDragOptions) => {\n const {\n id,\n elementRef,\n isDragging,\n isOvered,\n isAllowed,\n isLazyAllowed,\n registerElement,\n unregisterElement,\n } = useElementManager(options);\n\n const { pointerPosition } = useDnDStore();\n const { handleDragStart: start } = useEventManager();\n\n const handleDragStart = (event: PointerEvent | KeyboardEvent) =>\n start(event, elementRef, options);\n\n onMounted(registerElement);\n onBeforeUnmount(unregisterElement);\n\n return {\n pointerPosition,\n elementRef,\n isDragging,\n isOvered,\n isAllowed,\n isLazyAllowed,\n handleDragStart,\n id,\n };\n};\n","import { computed, ref } from 'vue';\n\nimport type { IUseDropOptions } from '../types';\nimport { useDnDStore } from '../composables/useDnDStore';\n\nexport const useZoneManager = (options?: IUseDropOptions) => {\n const {\n zonesMap,\n hovered,\n draggingElements,\n isDragging,\n handleDropZoneIntersection,\n } = useDnDStore();\n\n const elementRef = ref<HTMLElement | null>(null);\n\n const isOvered = computed<boolean>(\n () => hovered.zone.value === elementRef.value\n );\n\n const isAllowed = computed<boolean>(() => {\n if (!elementRef.value || !isDragging.value) return false;\n\n const currentZone = zonesMap.value.get(elementRef.value);\n if (!currentZone?.groups.length) return true;\n\n return !Array.from(draggingElements.value.values()).some((element) => {\n if (!element.groups.length) return false;\n return !element.groups.some((group) =>\n currentZone.groups.includes(group)\n );\n });\n });\n\n const isLazyAllowed = computed<boolean>(() => {\n if (!elementRef.value || !isDragging.value) return false;\n if (hovered.zone.value !== elementRef.value) return false;\n\n const currentZone = zonesMap.value.get(elementRef.value);\n if (!currentZone?.groups.length) return true;\n\n return !Array.from(draggingElements.value.values()).some((element) => {\n return !element.groups.some((group) =>\n currentZone.groups.includes(group)\n );\n });\n });\n\n const registerZone = () => {\n if (!elementRef.value) throw new Error('elementRef is not set');\n\n handleDropZoneIntersection('add', elementRef.value);\n\n zonesMap.value.set(elementRef.value, {\n node: elementRef.value,\n groups: options?.groups ?? [],\n events: options?.events ?? {},\n data: options?.data ?? undefined,\n });\n\n elementRef.value.setAttribute('data-dnd-droppable', 'true');\n };\n\n const unregisterZone = () => {\n if (!elementRef.value) return;\n\n handleDropZoneIntersection('remove', elementRef.value);\n\n zonesMap.value.delete(elementRef.value);\n };\n\n return {\n elementRef,\n registerZone,\n unregisterZone,\n isOvered,\n isAllowed,\n isLazyAllowed,\n };\n};\n","import { onBeforeUnmount, onMounted } from 'vue';\n\nimport type { IUseDropOptions } from '../types';\nimport { useZoneManager } from '../managers/useZoneManager';\n\nexport const useDroppable = (options?: IUseDropOptions) => {\n const {\n elementRef,\n registerZone,\n unregisterZone,\n isOvered,\n isAllowed,\n isLazyAllowed,\n } = useZoneManager(options);\n\n // Register/unregister drop zone with store\n onMounted(registerZone);\n onBeforeUnmount(unregisterZone);\n\n return { elementRef, isOvered, isAllowed, isLazyAllowed };\n};\n","import { computed, type Ref } from 'vue';\nimport { useDnDStore } from './useDnDStore';\nimport { isDescendant } from '../utils/dom';\n\nexport const useSelection = (elementRef: Ref<HTMLElement | null>) => {\n const { selectedElements, elementsMap } = useDnDStore();\n\n const isSelected = computed<boolean>(() =>\n elementRef.value ? selectedElements.value.has(elementRef.value) : false\n );\n\n const isParentOfSelected = computed(() => {\n if (!elementRef.value) return false;\n\n for (const node of selectedElements.value) {\n if (\n node &&\n isDescendant(node as HTMLElement, elementRef.value as HTMLElement)\n ) {\n return true;\n }\n }\n return false;\n });\n\n const hasSelectedParent = computed(() => {\n if (!elementRef.value) return false;\n\n for (const node of selectedElements.value) {\n if (\n node &&\n isDescendant(elementRef.value as HTMLElement, node as HTMLElement)\n ) {\n return true;\n }\n }\n return false;\n });\n\n const handleUnselect = () => {\n if (!elementRef.value) return;\n selectedElements.value.delete(elementRef.value);\n };\n\n const handleSelect = () => {\n if (!elementRef.value) return;\n const element = elementsMap.value.get(elementRef.value);\n if (!element) return;\n\n if (isParentOfSelected.value) {\n // Удаляем все дочерние выбранные элементы\n for (const node of selectedElements.value) {\n if (\n node &&\n isDescendant(node as HTMLElement, elementRef.value as HTMLElement)\n ) {\n selectedElements.value.delete(node);\n }\n }\n }\n\n if (hasSelectedParent.value) {\n // Удаляем все родительские выбранные элементы\n for (const node of selectedElements.value) {\n if (\n node &&\n isDescendant(elementRef.value as HTMLElement, node as HTMLElement)\n ) {\n selectedElements.value.delete(node);\n }\n }\n }\n\n selectedElements.value.add(elementRef.value);\n };\n\n const handleToggleSelect = () => {\n if (!elementRef.value) return;\n\n selectedElements.value.has(elementRef.value)\n ? handleUnselect()\n : handleSelect();\n };\n\n return {\n handleUnselect,\n handleSelect,\n handleToggleSelect,\n isSelected,\n isParentOfSelected,\n };\n};\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","w","s","d","ctrl","shift","alt","meta","useMagicKeys","hovered","useDragContainer","options","elementRef","onMounted","onUnmounted","computedStyle","__props","props","overlay","DefaultOverlay","VueDndKitPlugin","app","DragOverlay","originalMount","rootContainer","instance","rootEl","overlayContainer","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","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","filteredZoneElement","htmlElement","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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"}
package/package.json CHANGED
@@ -1,73 +1,73 @@
1
- {
2
- "name": "@vue-dnd-kit/core",
3
- "version": "1.3.4",
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": "1.5.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
+ }