@vue-dnd-kit/core 0.5.6 → 0.5.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -10
- package/dist/index.d.ts +81 -596
- package/dist/vue-dnd-kit-core.cjs.js +1 -1
- package/dist/vue-dnd-kit-core.cjs.js.map +1 -1
- package/dist/vue-dnd-kit-core.es.js +475 -450
- package/dist/vue-dnd-kit-core.es.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var N=Object.defineProperty;var $=(n,e,t)=>e in n?N(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var C=(n,e,t)=>$(n,typeof e!="symbol"?e+"":e,t);Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const d=require("vue"),A=require("@vueuse/core"),h=class h{};C(h,"remove",(e,t)=>{if(!e||t===void 0)return;const[r]=e.splice(t,1);return r}),C(h,"insert",(e,t,r)=>{!e||t===void 0||e.splice(t,0,r)}),C(h,"move",(e,t,r,l)=>{if(!e||!r||t===void 0||l===void 0)return;const o=h.remove(e,t);h.insert(r,l,o)}),C(h,"swap",(e,t,r,l)=>{if(!e||!r||t===void 0||l===void 0)return;const o=e[t],a=r[l];e[t]=a,r[l]=o}),C(h,"copy",(e,t,r,l)=>{if(!e||t===void 0||!r||l===void 0)return;const o=e[t];h.insert(r,l,o)}),C(h,"applyTransfer",e=>{const t=e.hovered.element.value,r=e.hovered.zone.value;t?e.draggingElements.value.forEach(l=>{var o,a,c,v;return h.move((o=l.data)==null?void 0:o.source,(a=l.data)==null?void 0:a.index,(c=t.data)==null?void 0:c.source,(v=t.data)==null?void 0:v.index)}):e.draggingElements.value.forEach(l=>{var o,a,c,v,f;return h.move((o=l.data)==null?void 0:o.source,(a=l.data)==null?void 0:a.index,(c=r==null?void 0:r.data)==null?void 0:c.source,(f=(v=r==null?void 0:r.data)==null?void 0:v.source)==null?void 0:f.length)})}),C(h,"applyCopy",e=>{const t=e.hovered.element.value,r=e.hovered.zone.value;t?e.draggingElements.value.forEach(l=>{var o,a,c,v;return h.copy((o=l.data)==null?void 0:o.source,(a=l.data)==null?void 0:a.index,(c=t.data)==null?void 0:c.source,(v=t.data)==null?void 0:v.index)}):e.draggingElements.value.forEach(l=>{var o,a,c,v,f;return h.copy((o=l.data)==null?void 0:o.source,(a=l.data)==null?void 0:a.index,(c=r==null?void 0:r.data)==null?void 0:c.source,(f=(v=r==null?void 0:r.data)==null?void 0:v.source)==null?void 0:f.length)})}),C(h,"applySwap",e=>{var l,o,a,c;const t=e.hovered.element.value,r=e.hovered.zone.value;if(t&&e.draggingElements.value.length===1){const v=e.draggingElements.value[0];h.swap((l=v.data)==null?void 0:l.source,(o=v.data)==null?void 0:o.index,(a=t.data)==null?void 0:a.source,(c=t.data)==null?void 0:c.index)}else e.draggingElements.value.forEach(v=>{var f,u,g,s,i;return h.move((f=v.data)==null?void 0:f.source,(u=v.data)==null?void 0:u.index,(g=r==null?void 0:r.data)==null?void 0:g.source,(i=(s=r==null?void 0:r.data)==null?void 0:s.source)==null?void 0:i.length)})}),C(h,"applyRemove",e=>{e.draggingElements.value.forEach(t=>{var r,l;(r=t.data)!=null&&r.source&&((l=t.data)==null?void 0:l.index)!==void 0&&h.remove(t.data.source,t.data.index)})}),C(h,"applyInsert",(e,t)=>{const r=e.hovered.element.value,l=e.hovered.zone.value;r&&t.length>0?t.forEach(o=>{var a,c;h.insert((a=r.data)==null?void 0:a.source,(c=r.data)==null?void 0:c.index,o)}):t.forEach(o=>{var a,c,v;h.insert((a=l==null?void 0:l.data)==null?void 0:a.source,(v=(c=l==null?void 0:l.data)==null?void 0:c.source)==null?void 0:v.length,o)})});let U=h;const _=A.createGlobalState(()=>{const n=d.ref([]),e=d.computed(()=>n.value.length>0),t={component:d.ref(null),ref:d.shallowRef(null)},r=d.ref([]),l=d.ref([]),o=d.ref([]),a={zone:d.ref(null),element:d.ref(null)},c={current:d.shallowRef(null),start:d.shallowRef(null),offset:{percent:d.shallowRef(null),pixel:d.shallowRef(null)}},{w:v,s:f,a:u,d:g,ctrl:s,shift:i,alt:p,meta:w}=A.useMagicKeys();return{isDragging:e,activeContainer:t,elements:r,draggingElements:n,selectedElements:l,zones:o,hovered:a,pointerPosition:c,keyboard:{w:v,s:f,a:u,d:g,ctrl:s,shift:i,alt:p,meta:w}}}),G=()=>{const n=d.ref(null),{draggingElements:e,pointerPosition:t,isDragging:r,activeContainer:l}=_();return d.onMounted(()=>{l.ref=n}),d.onBeforeUnmount(()=>{l.ref.value=null}),{elementRef:n,draggingElements:e,pointerPosition:t,isDragging:r}},j=["innerHTML"],J=d.defineComponent({__name:"DefaultOverlay",setup(n){const{elementRef:e,pointerPosition:t,isDragging:r,draggingElements:l}=G(),o=d.computed(()=>{var a,c,v,f;return{transform:`translate3d(${(((a=t.current.value)==null?void 0:a.x)??0)-(((c=t.offset.pixel.value)==null?void 0:c.x)??0)}px, ${(((v=t.current.value)==null?void 0:v.y)??0)-(((f=t.offset.pixel.value)==null?void 0:f.y)??0)}px, 0)`,zIndex:1e3,position:"fixed",top:0,left:0,transition:"0.3s cubic-bezier(0.165, 0.84, 0.44, 1)"}});return(a,c)=>d.unref(r)?(d.openBlock(),d.createElementBlock("div",{key:0,ref_key:"elementRef",ref:e,style:d.normalizeStyle(o.value)},[(d.openBlock(!0),d.createElementBlock(d.Fragment,null,d.renderList(d.unref(l),(v,f)=>{var u,g;return d.openBlock(),d.createElementBlock("div",{key:f,innerHTML:v.initialHTML,style:d.normalizeStyle({width:`${(u=v.initialRect)==null?void 0:u.width}px`,height:`${(g=v.initialRect)==null?void 0:g.height}px`})},null,12,j)}),128))],4)):d.createCommentVNode("",!0)}}),B=d.defineComponent({__name:"DragOverlay",setup(n){const{activeContainer:e}=_(),t=d.computed(()=>e.component.value??J);return(r,l)=>(d.openBlock(),d.createBlock(d.resolveDynamicComponent(t.value)))}}),Q={install(n){n.component("DragOverlay",B);const e=n.mount;n.mount=function(r){const l=e.call(this,r),o=typeof r=="string"?document.querySelector(r):r;if(o&&o instanceof Element&&!o.querySelector("#vue-dnd-kit-overlay")){const a=document.createElement("div");a.id="vue-dnd-kit-overlay",a.style.pointerEvents="none",o.appendChild(a);const c=d.createVNode(B);d.render(c,a),n.__VUE_DND_KIT_OVERLAY__={container:a,vnode:c}}return l};const t=n.unmount;n.unmount=function(){return n.__VUE_DND_KIT_OVERLAY__&&(d.render(null,n.__VUE_DND_KIT_OVERLAY__.container),delete n.__VUE_DND_KIT_OVERLAY__),t.call(this)}}},O=(n,e)=>n.x<e.x+e.width&&n.x+n.width>e.x&&n.y<e.y+e.height&&n.y+n.height>e.y,b=n=>{if(!n)return{x:0,y:0,width:0,height:0,bottom:0,left:0,right:0,top:0};const e=n.getBoundingClientRect();return{bottom:e.bottom,left:e.left,right:e.right,top:e.top,x:e.x,y:e.y,width:e.width,height:e.height}},H=n=>({x:n.x+n.width/2,y:n.y+n.height/2}),W=(n,e)=>{const t=b(n);return{pixel:{x:e.x-t.x,y:e.y-t.y},percent:{x:(e.x-t.x)/t.width*100,y:(e.y-t.y)/t.height*100}}},X=(n,e)=>{const t=e.x-n.x,r=e.y-n.y;return Math.sqrt(t*t+r*r)},q=(n,e)=>{const t=Math.max(0,Math.min(n.x+n.width,e.x+e.width)-Math.max(n.x,e.x)),r=Math.max(0,Math.min(n.y+n.height,e.y+e.height)-Math.max(n.y,e.y)),l=t*r,o=n.width*n.height,a=e.width*e.height;return(l/o*100+l/a*100)/2},F="data-vue-dnd-kit-draggable",S=n=>{n.preventDefault()},Z=n=>{const{elements:e,draggingElements:t,hovered:r,selectedElements:l,isDragging:o}=_(),a=d.ref(null),c=d.computed(()=>{var s;return((s=r.element.value)==null?void 0:s.node)===a.value}),v=d.computed(()=>t.value.some(s=>s.node===a.value)),f=d.computed(()=>{if(!a.value||!o.value)return!1;const s=e.value.find(i=>i.node===a.value);return s!=null&&s.groups.length?!t.value.some(i=>i.groups.length?!i.groups.some(p=>s.groups.includes(p)):!1):!0});return{elementRef:a,registerElement:()=>{if(!a.value)throw new Error("ElementRef is not set");e.value.push({node:a.value,groups:(n==null?void 0:n.groups)??[],layer:(n==null?void 0:n.layer)??null,defaultLayer:(n==null?void 0:n.layer)??null,events:(n==null?void 0:n.events)??{},data:(n==null?void 0:n.data)??null}),a.value.addEventListener("dragstart",S),a.value.addEventListener("drag",S),a.value.setAttribute(F,"true"),a.value.setAttribute("draggable","false")},unregisterElement:()=>{var p,w,I,D;const s=e.value.findIndex(M=>M.node===a.value);s!==-1&&e.value.splice(s,1);const i=l.value.findIndex(M=>M.node===a.value);i!==-1&&l.value.splice(i,1),(p=a.value)==null||p.removeEventListener("dragstart",S),(w=a.value)==null||w.removeEventListener("drag",S),(I=a.value)==null||I.removeAttribute(F),(D=a.value)==null||D.removeAttribute("draggable")},isDragging:v,isOvered:c,isAllowed:f}},T=(n,e)=>n?e.contains(n):!1,ee=n=>{var u,g;const e=b(n.activeContainer.ref.value),t=H(e),r=((u=n.pointerPosition.current.value)==null?void 0:u.x)??0,l=((g=n.pointerPosition.current.value)==null?void 0:g.y)??0,a=!(e&&r>=e.x&&r<=e.x+e.width&&l>=e.y&&l<=e.y+e.height),c=n.draggingElements.value.map(s=>s.node),v=n.elements.value.filter(s=>{if(!s.node)return!1;const i=b(s.node);return i&&e&&O(i,e)}).map(s=>{const i=b(s.node),p=H(i),w=r>=i.x&&r<=i.x+i.width&&l>=i.y&&l<=i.y+i.height,I=q(i,e),D=X(t,p),M=n.elements.value.filter(P=>P!==s&&P.node&&s.node&&T(s.node,P.node)).length;return{element:s,node:s.node,isPointerInElement:w,overlapPercent:I,depth:M,centerDistance:D}}).sort((s,i)=>{if(!a){if(s.isPointerInElement&&i.isPointerInElement)return i.depth-s.depth;if(s.isPointerInElement!==i.isPointerInElement)return s.isPointerInElement?-1:1}return Math.abs(s.overlapPercent-i.overlapPercent)<=1?s.centerDistance-i.centerDistance:i.overlapPercent-s.overlapPercent}),f=n.zones.value.filter(s=>{if(!s.node||c.some(p=>p&&T(s.node,p)))return!1;const i=b(s.node);return i&&e&&O(i,e)}).map(s=>{const i=b(s.node),p=H(i),w=r>=i.x&&r<=i.x+i.width&&l>=i.y&&l<=i.y+i.height,I=q(i,e),D=X(t,p),M=n.zones.value.filter(P=>P!==s&&P.node&&s.node&&T(s.node,P.node)).length;return{zone:s,node:s.node,isPointerInElement:w,overlapPercent:I,depth:M,centerDistance:D}}).sort((s,i)=>{if(!a){if(s.isPointerInElement&&i.isPointerInElement)return i.depth-s.depth;if(s.isPointerInElement!==i.isPointerInElement)return s.isPointerInElement?-1:1}return Math.abs(s.overlapPercent-i.overlapPercent)<=1?s.centerDistance-i.centerDistance:i.overlapPercent-s.overlapPercent});return[...v.map(s=>s.node),...f.map(s=>s.node)]},te=(n,e)=>{const{pointerPosition:t,keyboard:r}=_(),l=(e==null?void 0:e.moveStep)||10;return{onKeyboardStart:v=>{var s;S(v);const f=b(n.value);(s=n.value)==null||s.blur();const u=f.x+f.width/2,g=f.y+f.height/2;t.start.value={x:u,y:g},t.current.value={x:u,y:g},t.offset.pixel.value={x:f.width/2,y:f.height/2},t.offset.percent.value={x:50,y:50}},onKeyboardMove:()=>{if(!t.current.value)return;const v=t.current.value.x,f=t.current.value.y;let u=v,g=f;r.w.value&&(g-=l),r.s.value&&(g+=l),r.a.value&&(u-=l),r.d.value&&(u+=l),t.current.value={x:u,y:g}},onKeyboardEnd:()=>{t.current.value=null,t.start.value=null,t.offset.pixel.value=null,t.offset.percent.value=null}}},ne=n=>{const e=_();return{onPointerStart:o=>{e.pointerPosition.start.value={x:o.clientX,y:o.clientY},e.pointerPosition.current.value={x:o.clientX,y:o.clientY};const{pixel:a,percent:c}=W(n.value,{x:o.clientX,y:o.clientY});e.pointerPosition.offset.pixel.value=a,e.pointerPosition.offset.percent.value=c},onPointerMove:o=>{e.pointerPosition.current.value={x:o.clientX,y:o.clientY}},onPointerEnd:()=>{e.pointerPosition.current.value=null,e.pointerPosition.start.value=null,e.pointerPosition.offset.pixel.value=null,e.pointerPosition.offset.percent.value=null}}},re=(n,e)=>{var Y,V;const t=_(),{onPointerStart:r,onPointerMove:l,onPointerEnd:o}=ne(n),{onKeyboardStart:a,onKeyboardMove:c,onKeyboardEnd:v}=te(n,e==null?void 0:e.keyboard);let f=null;const u=y=>{var K,R;const L=t.selectedElements.value.some(m=>m.node===y);if(t.selectedElements.value.length&&L)return t.selectedElements.value.map(m=>{var E,k;return{...m,initialHTML:((E=m.node)==null?void 0:E.outerHTML)??"",initialRect:(k=m.node)==null?void 0:k.getBoundingClientRect()}});t.selectedElements.value=[];const x=t.elements.value.find(m=>m.node===y);return x?[{...x,initialHTML:((K=x.node)==null?void 0:K.outerHTML)??"",initialRect:(R=x.node)==null?void 0:R.getBoundingClientRect()}]:[]},g=y=>{if(!y)return{element:null,zone:null};const L=Array.isArray(y)?y:[y],x=t.draggingElements.value.map(m=>m.node),K=L.map(m=>t.elements.value.find(E=>E.node===m)).filter(m=>!m||x.some(E=>E&&(E===m.node||T(m.node,E)))?!1:m.groups.length?!t.draggingElements.value.some(k=>k.groups.length?!k.groups.some(z=>m.groups.includes(z)):!1):!0),R=L.map(m=>t.zones.value.find(E=>E.node===m)).filter(m=>!m||x.some(E=>E&&(E===m.node||T(m.node,E)))?!1:m.groups.length&&!!t.draggingElements.value.some(k=>k.groups.length?!k.groups.some(z=>m.groups.includes(z)):!1)?null:!0);return{element:K[0]??null,zone:R[0]??null}},s=((Y=e==null?void 0:e.sensor)==null?void 0:Y.setup)||ee,i=y=>{var K,R,m,E,k,z;const L=t.hovered.element.value,x=t.hovered.zone.value;t.hovered.element.value=y.element,t.hovered.zone.value=y.zone,t.hovered.element.value!==L&&((K=L==null?void 0:L.events)!=null&&K.onLeave&&L.events.onLeave(t),(m=(R=t.hovered.element.value)==null?void 0:R.events)!=null&&m.onHover&&t.hovered.element.value.events.onHover(t)),t.hovered.zone.value!==x&&((E=x==null?void 0:x.events)!=null&&E.onLeave&&x.events.onLeave(t),(z=(k=t.hovered.zone.value)==null?void 0:k.events)!=null&&z.onHover&&t.hovered.zone.value.events.onHover(t))},p=A.useThrottleFn(()=>{const y=s(t),L=g(y);i(L)},((V=e==null?void 0:e.sensor)==null?void 0:V.throttle)??0),w=()=>{p(),f=requestAnimationFrame(w)},I=()=>w(),D=()=>{f!==null&&(cancelAnimationFrame(f),f=null)};return{activate:y=>{t.draggingElements.value=u(n.value),y instanceof PointerEvent?r(y):a(y),I()},track:y=>{y instanceof KeyboardEvent?c():l(y)},deactivate:(y=!0)=>{var L,x;o(),v(),y&&(t.hovered.zone.value?(x=(L=t.hovered.zone.value.events).onDrop)==null||x.call(L,t):t.draggingElements.value.forEach(K=>{var R,m;return(m=(R=K.events).onEnd)==null?void 0:m.call(R,t)}),t.selectedElements.value=[]),t.draggingElements.value=[],t.hovered.zone.value=null,t.hovered.element.value=null,D()}}},le=A.createGlobalState(()=>{let n="",e="",t="",r=null,l=null,o=null,a=null,c=null;const{activeContainer:v}=_(),f=()=>{const i=document.body;n=i.style.userSelect,i.style.userSelect="none",window.addEventListener("contextmenu",S),window.addEventListener("selectstart",S),window.addEventListener("touchstart",S),window.addEventListener("touchmove",S)},u=()=>{const i=document.body;i.style.userSelect=n,i.style.touchAction=e,i.style.overscrollBehavior=t,window.removeEventListener("contextmenu",S),window.removeEventListener("selectstart",S),window.removeEventListener("touchstart",S),window.removeEventListener("touchmove",S)},g=()=>{r&&(document.removeEventListener("pointermove",r),r=null),l&&(document.removeEventListener("pointerup",l),l=null),o&&(o=null),a&&(document.removeEventListener("wheel",a),a=null),c&&(document.removeEventListener("keydown",c),document.removeEventListener("keypress",c),document.removeEventListener("keyup",c),c=null)};return{handleDragStart:(i,p,w)=>{g(),i.target.blur(),w!=null&&w.container&&(v.component.value=d.markRaw(w.container));const{activate:I,track:D,deactivate:M}=re(p,w);l=()=>{v.component.value=null,u(),M(!0),g()},o=()=>{v.component.value=null,u(),M(!1),g()},r=P=>D(P),a=P=>D(P),c=P=>{P.type==="keyup"&&(P.code==="Escape"&&(o==null||o()),P.code==="Enter"&&(l==null||l())),D(P)},f(),I(i),document.addEventListener("pointermove",r),document.addEventListener("pointerup",l),document.addEventListener("wheel",a),document.addEventListener("keydown",c),document.addEventListener("keypress",c),document.addEventListener("keyup",c)}}}),oe=n=>{const{elementRef:e,registerElement:t,unregisterElement:r,isDragging:l,isOvered:o,isAllowed:a}=Z(n),{pointerPosition:c}=_(),{handleDragStart:v}=le(),f=u=>v(u,e,n);return d.onMounted(t),d.onBeforeUnmount(r),{pointerPosition:c,elementRef:e,isDragging:l,isOvered:o,isAllowed:a,handleDragStart:f}},ae=n=>{const{zones:e,hovered:t,draggingElements:r,isDragging:l}=_(),o=d.ref(null),a=d.computed(()=>{var u;return((u=t.zone.value)==null?void 0:u.node)===o.value}),c=d.computed(()=>{if(!o.value||!l.value)return!1;const u=e.value.find(g=>g.node===o.value);return u!=null&&u.groups.length?!r.value.some(g=>g.groups.length?!g.groups.some(s=>u.groups.includes(s)):!1):!0});return{elementRef:o,registerZone:()=>{if(!o.value)throw new Error("elementRef is not set");e.value.push({node:o.value,groups:(n==null?void 0:n.groups)??[],events:(n==null?void 0:n.events)??{},data:(n==null?void 0:n.data)??void 0}),o.value.setAttribute("data-dnd-droppable","true")},unregisterZone:()=>{if(!o.value)throw new Error("elementRef is not set");const u=e.value.findIndex(g=>g.node===o.value);u!==-1&&e.value.splice(u,1)},isOvered:a,isAllowed:c}},se=n=>{const{elementRef:e,registerZone:t,unregisterZone:r,isOvered:l,isAllowed:o}=ae(n);return d.onMounted(t),d.onBeforeUnmount(r),{elementRef:e,isOvered:l,isAllowed:o}},ie=n=>{const{selectedElements:e,elements:t}=_(),r=d.computed(()=>t.value.find(u=>u.node===n.value)),l=d.computed(()=>e.value.some(u=>u.node===n.value)),o=d.computed(()=>n.value?e.value.some(u=>u.node&&T(u.node,n.value)):!1),a=d.computed(()=>n.value?e.value.some(u=>u.node&&T(n.value,u.node)):!1),c=()=>{r.value&&(e.value=e.value.filter(u=>u.node!==n.value))},v=()=>{r.value&&(o.value&&(e.value=e.value.filter(u=>u.node&&!T(u.node,n.value))),a.value&&(e.value=e.value.filter(u=>u.node&&!T(n.value,u.node))),e.value.push(r.value))};return{handleUnselect:c,handleSelect:v,handleToggleSelect:()=>{r.value&&(e.value.some(u=>u.node===n.value)?c():v())},isSelected:l,isParentOfSelected:o}};exports.DnDOperations=U;exports.default=Q;exports.getBoundingBox=b;exports.useDnDStore=_;exports.useDraggable=oe;exports.useDroppable=se;exports.useSelection=ie;
|
|
1
|
+
"use strict";var W=Object.defineProperty;var ee=(n,e,t)=>e in n?W(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var I=(n,e,t)=>ee(n,typeof e!="symbol"?e+"":e,t);Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const c=require("vue"),H=require("@vueuse/core"),y=class y{};I(y,"remove",(e,t)=>{if(!e||t===void 0)return;const[r]=e.splice(t,1);return r}),I(y,"insert",(e,t,r)=>{!e||t===void 0||e.splice(t,0,r)}),I(y,"move",(e,t,r,a)=>{if(!e||!r||t===void 0||a===void 0)return;const s=y.remove(e,t);y.insert(r,a,s)}),I(y,"swap",(e,t,r,a)=>{if(!e||!r||t===void 0||a===void 0)return;const s=e[t],l=r[a];e[t]=l,r[a]=s}),I(y,"copy",(e,t,r,a)=>{if(!e||t===void 0||!r||a===void 0)return;const s=e[t];y.insert(r,a,s)}),I(y,"applyTransfer",e=>{const t=e.hovered.element.value,r=e.hovered.zone.value;t?e.draggingElements.value.forEach(a=>{var s,l,v,o,u,i;return y.move((s=a.data)==null?void 0:s.source,(l=a.data)==null?void 0:l.index,(o=(v=e.elementsMap.value.get(t))==null?void 0:v.data)==null?void 0:o.source,(i=(u=e.elementsMap.value.get(t))==null?void 0:u.data)==null?void 0:i.index)}):r&&e.draggingElements.value.forEach(a=>{var s,l,v,o,u,i,f;return y.move((s=a.data)==null?void 0:s.source,(l=a.data)==null?void 0:l.index,(o=(v=e.zonesMap.value.get(r))==null?void 0:v.data)==null?void 0:o.source,(f=(i=(u=e.zonesMap.value.get(r))==null?void 0:u.data)==null?void 0:i.source)==null?void 0:f.length)})}),I(y,"applyCopy",e=>{const t=e.hovered.element.value,r=e.hovered.zone.value;t?e.draggingElements.value.forEach(a=>{var s,l,v,o,u,i;return y.copy((s=a.data)==null?void 0:s.source,(l=a.data)==null?void 0:l.index,(o=(v=e.elementsMap.value.get(t))==null?void 0:v.data)==null?void 0:o.source,(i=(u=e.elementsMap.value.get(t))==null?void 0:u.data)==null?void 0:i.index)}):r&&e.draggingElements.value.forEach(a=>{var s,l,v,o,u,i,f;return y.copy((s=a.data)==null?void 0:s.source,(l=a.data)==null?void 0:l.index,(o=(v=e.zonesMap.value.get(r))==null?void 0:v.data)==null?void 0:o.source,(f=(i=(u=e.zonesMap.value.get(r))==null?void 0:u.data)==null?void 0:i.source)==null?void 0:f.length)})}),I(y,"applySwap",e=>{var a,s,l,v,o,u;const t=e.hovered.element.value,r=e.hovered.zone.value;if(t&&e.draggingElements.value.size===1){const i=e.draggingElements.value.values().next().value;y.swap((a=i==null?void 0:i.data)==null?void 0:a.source,(s=i==null?void 0:i.data)==null?void 0:s.index,(v=(l=e.elementsMap.value.get(t))==null?void 0:l.data)==null?void 0:v.source,(u=(o=e.elementsMap.value.get(t))==null?void 0:o.data)==null?void 0:u.index)}else r&&e.draggingElements.value.forEach(i=>{var f,d,g,h,p,z,M;return y.move((f=i.data)==null?void 0:f.source,(d=i.data)==null?void 0:d.index,(h=(g=e.zonesMap.value.get(r))==null?void 0:g.data)==null?void 0:h.source,(M=(z=(p=e.zonesMap.value.get(r))==null?void 0:p.data)==null?void 0:z.source)==null?void 0:M.length)})}),I(y,"applyRemove",e=>{e.draggingElements.value.forEach(t=>{var r,a;(r=t.data)!=null&&r.source&&((a=t.data)==null?void 0:a.index)!==void 0&&y.remove(t.data.source,t.data.index)})}),I(y,"applyInsert",(e,t)=>{const r=e.hovered.element.value,a=e.hovered.zone.value;r&&t.length>0?t.forEach(s=>{var l,v,o,u;y.insert((v=(l=e.elementsMap.value.get(r))==null?void 0:l.data)==null?void 0:v.source,(u=(o=e.elementsMap.value.get(r))==null?void 0:o.data)==null?void 0:u.index,s)}):a&&t.forEach(s=>{var l,v,o,u,i;y.insert((v=(l=e.zonesMap.value.get(a))==null?void 0:l.data)==null?void 0:v.source,(i=(u=(o=e.zonesMap.value.get(a))==null?void 0:o.data)==null?void 0:u.source)==null?void 0:i.length,s)})});let X=y;const A=H.createGlobalState(()=>{const n=c.ref(new Map),e=c.computed(()=>n.value.size>0),t={component:c.ref(null),ref:c.shallowRef(null)},r=c.ref(new Map),a=c.ref(new Map),s=c.ref(new Map),l=c.ref(new Set),v=c.ref(new Set),o=new IntersectionObserver(K=>{K.forEach(m=>v.value[m.isIntersecting?"add":"delete"](m.target))}),u=new IntersectionObserver(K=>{K.forEach(m=>l.value[m.isIntersecting?"add":"delete"](m.target))}),i=(K,m)=>{K==="add"?o.observe(m):(o.unobserve(m),v.value.delete(m))},f=(K,m)=>{K==="add"?u.observe(m):(u.unobserve(m),l.value.delete(m))};c.onUnmounted(()=>{o.disconnect(),u.disconnect()});const d={start:c.shallowRef(null),current:c.shallowRef(null),offset:{percent:c.shallowRef(null),pixel:c.shallowRef(null)}},{w:g,s:h,a:p,d:z,ctrl:M,shift:_,alt:w,meta:Z}=H.useMagicKeys(),Y={zone:c.shallowRef(null),element:c.shallowRef(null)};return{draggingElements:n,isDragging:e,activeContainer:t,elementsMap:r,selectedElementsMap:a,zonesMap:s,visibleZones:l,visibleElements:v,pointerPosition:d,keyboard:{w:g,s:h,a:p,d:z,ctrl:M,shift:_,alt:w,meta:Z},hovered:Y,handleDragElementIntersection:i,handleDropZoneIntersection:f}}),te=()=>{const n=c.ref(null),{draggingElements:e,pointerPosition:t,isDragging:r,activeContainer:a}=A();return c.onMounted(()=>{a.ref=n}),c.onBeforeUnmount(()=>{a.ref.value=null}),{elementRef:n,draggingElements:e,pointerPosition:t,isDragging:r}},ne=["innerHTML"],re=c.defineComponent({__name:"DefaultOverlay",setup(n){const{elementRef:e,pointerPosition:t,isDragging:r,draggingElements:a}=te(),s=c.computed(()=>{var l,v,o,u;return{transform:`translate3d(${(((l=t.current.value)==null?void 0:l.x)??0)-(((v=t.offset.pixel.value)==null?void 0:v.x)??0)}px, ${(((o=t.current.value)==null?void 0:o.y)??0)-(((u=t.offset.pixel.value)==null?void 0:u.y)??0)}px, 0)`,zIndex:1e3,position:"fixed",top:0,left:0,transition:"0.3s cubic-bezier(0.165, 0.84, 0.44, 1)"}});return(l,v)=>c.unref(r)?(c.openBlock(),c.createElementBlock("div",{key:0,ref_key:"elementRef",ref:e,style:c.normalizeStyle(s.value)},[(c.openBlock(!0),c.createElementBlock(c.Fragment,null,c.renderList(c.unref(a),([o,u])=>{var i,f;return c.openBlock(),c.createElementBlock("div",{key:u.id,innerHTML:u.initialHTML,style:c.normalizeStyle({width:`${(i=u.initialRect)==null?void 0:i.width}px`,height:`${(f=u.initialRect)==null?void 0:f.height}px`})},null,12,ne)}),128))],4)):c.createCommentVNode("",!0)}}),$=c.defineComponent({__name:"DragOverlay",setup(n){const{activeContainer:e}=A(),t=c.computed(()=>e.component.value??re);return(r,a)=>(c.openBlock(),c.createBlock(c.resolveDynamicComponent(t.value)))}}),ae={install(n){n.component("DragOverlay",$);const e=n.mount;n.mount=function(r){const a=e.call(this,r),s=typeof r=="string"?document.querySelector(r):r;if(s&&s instanceof Element&&!s.querySelector("#vue-dnd-kit-overlay")){const l=document.createElement("div");l.id="vue-dnd-kit-overlay",l.style.pointerEvents="none",s.appendChild(l);const v=c.createVNode($);c.render(v,l),n.__VUE_DND_KIT_OVERLAY__={container:l,vnode:v}}return a};const t=n.unmount;n.unmount=function(){return n.__VUE_DND_KIT_OVERLAY__&&(c.render(null,n.__VUE_DND_KIT_OVERLAY__.container),delete n.__VUE_DND_KIT_OVERLAY__),t.call(this)}}},G=(n,e)=>n.x<e.x+e.width&&n.x+n.width>e.x&&n.y<e.y+e.height&&n.y+n.height>e.y,T=n=>{if(!n)return{x:0,y:0,width:0,height:0,bottom:0,left:0,right:0,top:0};const e=n.getBoundingClientRect();return{bottom:e.bottom,left:e.left,right:e.right,top:e.top,x:e.x,y:e.y,width:e.width,height:e.height}},B=n=>({x:n.x+n.width/2,y:n.y+n.height/2}),le=(n,e)=>{const t=T(n);return{pixel:{x:e.x-t.x,y:e.y-t.y},percent:{x:(e.x-t.x)/t.width*100,y:(e.y-t.y)/t.height*100}}},j=(n,e)=>{const t=e.x-n.x,r=e.y-n.y;return Math.sqrt(t*t+r*r)},J=(n,e)=>{const t=Math.max(0,Math.min(n.x+n.width,e.x+e.width)-Math.max(n.x,e.x)),r=Math.max(0,Math.min(n.y+n.height,e.y+e.height)-Math.max(n.y,e.y)),a=t*r,s=n.width*n.height,l=e.width*e.height;return(a/s*100+a/l*100)/2},Q="data-vue-dnd-kit-draggable",D=n=>{n.preventDefault()},oe=n=>{const{elementsMap:e,draggingElements:t,hovered:r,selectedElementsMap:a,isDragging:s,visibleElements:l,handleDragElementIntersection:v}=A(),o=c.ref(null),u=c.computed(()=>l.value.has(o.value)&&r.element.value===o.value),i=c.shallowRef((n==null?void 0:n.id)||c.useId()),f=c.computed(()=>!o.value||!l.value.has(o.value)?!1:t.value.has(o.value)),d=c.computed(()=>{if(!o.value||!s.value||!l.value.has(o.value))return!1;const p=e.value.get(o.value);return p!=null&&p.groups.length?!Array.from(t.value.entries()).some(([z,M])=>M.groups.length?!M.groups.some(_=>p.groups.includes(_)):!1):!0});return{elementRef:o,registerElement:()=>{if(!o.value)throw new Error("ElementRef is not set");e.value.set(o.value,{node:o.value,groups:(n==null?void 0:n.groups)??[],layer:(n==null?void 0:n.layer)??null,defaultLayer:(n==null?void 0:n.layer)??null,events:(n==null?void 0:n.events)??{},data:(n==null?void 0:n.data)??null,id:i.value}),v("add",o.value),o.value.addEventListener("dragstart",D),o.value.addEventListener("drag",D),o.value.setAttribute(Q,"true"),o.value.setAttribute("draggable","false")},unregisterElement:()=>{o.value&&(v("remove",o.value),e.value.delete(o.value),a.value.delete(o.value),o.value.removeEventListener("dragstart",D),o.value.removeEventListener("drag",D),o.value.removeAttribute(Q),o.value.removeAttribute("draggable"))},isDragging:f,isOvered:u,isAllowed:d,id:i}},C=(n,e)=>n?e.contains(n):!1,se=n=>{var i,f;const e=T(n.activeContainer.ref.value),t=B(e),r=((i=n.pointerPosition.current.value)==null?void 0:i.x)??0,a=((f=n.pointerPosition.current.value)==null?void 0:f.y)??0,l=!(e&&r>=e.x&&r<=e.x+e.width&&a>=e.y&&a<=e.y+e.height),v=Array.from(n.draggingElements.value.keys()),o=Array.from(n.visibleElements.value.entries()).filter(([d,g])=>{if(!d)return!1;const h=T(d);return h&&e&&G(h,e)}).map(([d,g])=>{const h=T(d),p=B(h),z=r>=h.x&&r<=h.x+h.width&&a>=h.y&&a<=h.y+h.height,M=J(h,e),_=j(t,p);let w=0;for(const[Z,Y]of n.visibleElements.value.entries())Z!==d&&Z&&d&&C(d,Z)&&w++;return{element:g,node:d,isPointerInElement:z,overlapPercent:M,depth:w,centerDistance:_}}).sort((d,g)=>{if(!l){if(d.isPointerInElement&&g.isPointerInElement)return g.depth-d.depth;if(d.isPointerInElement!==g.isPointerInElement)return d.isPointerInElement?-1:1}return Math.abs(d.overlapPercent-g.overlapPercent)<=1?d.centerDistance-g.centerDistance:g.overlapPercent-d.overlapPercent}),u=Array.from(n.visibleZones.value.entries()).filter(([d,g])=>{if(!d||v.some(p=>p&&C(d,p)))return!1;const h=T(d);return h&&e&&G(h,e)}).map(([d,g])=>{const h=T(d),p=B(h),z=r>=h.x&&r<=h.x+h.width&&a>=h.y&&a<=h.y+h.height,M=J(h,e),_=j(t,p);let w=0;for(const[Z,Y]of n.visibleZones.value.entries())Z!==d&&Z&&d&&C(d,Z)&&w++;return{zone:g,node:d,isPointerInElement:z,overlapPercent:M,depth:w,centerDistance:_}}).sort((d,g)=>{if(!l){if(d.isPointerInElement&&g.isPointerInElement)return g.depth-d.depth;if(d.isPointerInElement!==g.isPointerInElement)return d.isPointerInElement?-1:1}return Math.abs(d.overlapPercent-g.overlapPercent)<=1?d.centerDistance-g.centerDistance:g.overlapPercent-d.overlapPercent});return[...o.map(d=>d.node),...u.map(d=>d.node)]},ue=(n,e)=>{const{pointerPosition:t,keyboard:r}=A(),a=(e==null?void 0:e.moveStep)||10;return{onKeyboardStart:o=>{var d;D(o);const u=T(n.value);(d=n.value)==null||d.blur();const i=u.x+u.width/2,f=u.y+u.height/2;t.start.value={x:i,y:f},t.current.value={x:i,y:f},t.offset.pixel.value={x:u.width/2,y:u.height/2},t.offset.percent.value={x:50,y:50}},onKeyboardMove:()=>{if(!t.current.value)return;const o=t.current.value.x,u=t.current.value.y;let i=o,f=u;r.w.value&&(f-=a),r.s.value&&(f+=a),r.a.value&&(i-=a),r.d.value&&(i+=a),t.current.value={x:i,y:f}},onKeyboardEnd:()=>{t.current.value=null,t.start.value=null,t.offset.pixel.value=null,t.offset.percent.value=null}}},ie=n=>{const e=A();return{onPointerStart:s=>{e.pointerPosition.start.value={x:s.clientX,y:s.clientY},e.pointerPosition.current.value={x:s.clientX,y:s.clientY};const{pixel:l,percent:v}=le(n.value,{x:s.clientX,y:s.clientY});e.pointerPosition.offset.pixel.value=l,e.pointerPosition.offset.percent.value=v},onPointerMove:s=>{e.pointerPosition.current.value={x:s.clientX,y:s.clientY}},onPointerEnd:()=>{e.pointerPosition.current.value=null,e.pointerPosition.start.value=null,e.pointerPosition.offset.pixel.value=null,e.pointerPosition.offset.percent.value=null}}},ce=(n,e)=>{var Y,K;const t=A(),{onPointerStart:r,onPointerMove:a,onPointerEnd:s}=ie(n),{onKeyboardStart:l,onKeyboardMove:v,onKeyboardEnd:o}=ue(n,e==null?void 0:e.keyboard);let u=null;const i=m=>{var b,E;if(!m)return new Map;const L=t.selectedElementsMap.value.has(m);if(t.selectedElementsMap.value.size>0&&L){const x=new Map;return Array.from(t.selectedElementsMap.value.entries()).forEach(([k,R])=>{var U,O;x.set(k,{...R,initialHTML:((U=R.node)==null?void 0:U.outerHTML)??"",initialRect:(O=R.node)==null?void 0:O.getBoundingClientRect()})}),x}t.selectedElementsMap.value.clear();const S=t.elementsMap.value.get(m);if(!S)return new Map;const P=new Map;return P.set(m,{...S,initialHTML:((b=S.node)==null?void 0:b.outerHTML)??"",initialRect:(E=S.node)==null?void 0:E.getBoundingClientRect()}),P},f=m=>{if(!m)return{element:null,zone:null};const L=Array.isArray(m)?m:[m],S=Array.from(t.draggingElements.value.keys()),P=L.find(E=>{if(!t.visibleZones.value.has(E))return!1;const x=t.zonesMap.value.get(E);return!(!x||S.some(k=>k&&(k===x.node||C(x.node,k)))||x.groups.length&&!!Array.from(t.draggingElements.value.values()).some(R=>R.groups.length?!R.groups.some(U=>x.groups.includes(U)):!1))});return P?{element:L.find(E=>t.visibleElements.value.has(E)&&t.elementsMap.value.has(E)&&!S.some(x=>x&&(x===E||C(E,x)||C(x,E)))&&(E===P||C(E,P)))||null,zone:P}:{element:null,zone:null}},d=((Y=e==null?void 0:e.sensor)==null?void 0:Y.setup)||se,g=m=>{var P,b,E,x,k,R,U,O,q,N,V,F;const L=t.hovered.element.value,S=t.hovered.zone.value;t.hovered.element.value=m.element,t.hovered.zone.value=m.zone,L&&t.hovered.element.value!==L&&((E=(b=(P=t.elementsMap.value.get(L))==null?void 0:P.events)==null?void 0:b.onLeave)==null||E.call(b,t),t.hovered.element.value&&((R=(k=(x=t.elementsMap.value.get(t.hovered.element.value))==null?void 0:x.events)==null?void 0:k.onHover)==null||R.call(k,t))),S&&t.hovered.zone.value!==S&&((q=(O=(U=t.zonesMap.value.get(S))==null?void 0:U.events)==null?void 0:O.onLeave)==null||q.call(O,t),t.hovered.zone.value&&((F=(V=(N=t.zonesMap.value.get(t.hovered.zone.value))==null?void 0:N.events)==null?void 0:V.onHover)==null||F.call(V,t)))},h=H.useThrottleFn(()=>{const m=d(t),L=f(m);g(L)},((K=e==null?void 0:e.sensor)==null?void 0:K.throttle)??0),p=()=>{h(),u=requestAnimationFrame(p)},z=()=>p(),M=()=>{u!==null&&(cancelAnimationFrame(u),u=null)};return{activate:m=>{t.draggingElements.value=i(n.value),m instanceof PointerEvent?r(m):l(m),z()},track:m=>{m instanceof KeyboardEvent?v():a(m)},deactivate:(m=!0)=>{var L,S;if(s(),o(),m){if(t.hovered.zone.value){const P=t.zonesMap.value.get(t.hovered.zone.value);(S=P==null?void 0:(L=P.events).onDrop)==null||S.call(L,t)}else Array.from(t.draggingElements.value.values()).forEach(P=>{var b,E;return(E=(b=P.events).onEnd)==null?void 0:E.call(b,t)});t.selectedElementsMap.value.clear()}t.draggingElements.value.clear(),t.hovered.zone.value=null,t.hovered.element.value=null,M()}}},ve=H.createGlobalState(()=>{let n="",e="",t="",r=null,a=null,s=null,l=null,v=null;const{activeContainer:o}=A(),u=()=>{const g=document.body;n=g.style.userSelect,g.style.userSelect="none",window.addEventListener("contextmenu",D),window.addEventListener("selectstart",D),window.addEventListener("touchstart",D),window.addEventListener("touchmove",D)},i=()=>{const g=document.body;g.style.userSelect=n,g.style.touchAction=e,g.style.overscrollBehavior=t,window.removeEventListener("contextmenu",D),window.removeEventListener("selectstart",D),window.removeEventListener("touchstart",D),window.removeEventListener("touchmove",D)},f=()=>{r&&(document.removeEventListener("pointermove",r),r=null),a&&(document.removeEventListener("pointerup",a),a=null),s&&(s=null),l&&(document.removeEventListener("wheel",l),l=null),v&&(document.removeEventListener("keydown",v),document.removeEventListener("keypress",v),document.removeEventListener("keyup",v),v=null)};return{handleDragStart:(g,h,p)=>{f(),g.target.blur(),p!=null&&p.container&&(o.component.value=c.markRaw(p.container));const{activate:z,track:M,deactivate:_}=ce(h,p);a=()=>{o.component.value=null,i(),_(!0),f()},s=()=>{o.component.value=null,i(),_(!1),f()},r=w=>M(w),l=w=>M(w),v=w=>{w.type==="keyup"&&(w.code==="Escape"&&(s==null||s()),w.code==="Enter"&&(a==null||a())),M(w)},u(),z(g),document.addEventListener("pointermove",r),document.addEventListener("pointerup",a),document.addEventListener("wheel",l),document.addEventListener("keydown",v),document.addEventListener("keypress",v),document.addEventListener("keyup",v)}}}),de=n=>{const{id:e,elementRef:t,isDragging:r,isOvered:a,isAllowed:s,registerElement:l,unregisterElement:v}=oe(n),{pointerPosition:o}=A(),{handleDragStart:u}=ve(),i=f=>u(f,t,n);return c.onMounted(l),c.onBeforeUnmount(v),{pointerPosition:o,elementRef:t,isDragging:r,isOvered:a,isAllowed:s,handleDragStart:i,id:e}},fe=n=>{const{zonesMap:e,hovered:t,draggingElements:r,isDragging:a,handleDropZoneIntersection:s}=A(),l=c.ref(null),v=c.computed(()=>t.zone.value===l.value),o=c.computed(()=>{if(!l.value||!a.value)return!1;const f=e.value.get(l.value);return f!=null&&f.groups.length?!Array.from(r.value.values()).some(d=>d.groups.length?!d.groups.some(g=>f.groups.includes(g)):!1):!0});return{elementRef:l,registerZone:()=>{if(!l.value)throw new Error("elementRef is not set");s("add",l.value),e.value.set(l.value,{node:l.value,groups:(n==null?void 0:n.groups)??[],events:(n==null?void 0:n.events)??{},data:(n==null?void 0:n.data)??void 0}),l.value.setAttribute("data-dnd-droppable","true")},unregisterZone:()=>{l.value&&(s("remove",l.value),e.value.delete(l.value))},isOvered:v,isAllowed:o}},ge=n=>{const{elementRef:e,registerZone:t,unregisterZone:r,isOvered:a,isAllowed:s}=fe(n);return c.onMounted(t),c.onBeforeUnmount(r),{elementRef:e,isOvered:a,isAllowed:s}},me=n=>{const{selectedElementsMap:e,elementsMap:t}=A(),r=c.computed(()=>n.value?e.value.has(n.value):!1),a=c.computed(()=>{if(!n.value)return!1;for(const[u,i]of e.value.entries())if(u&&C(u,n.value))return!0;return!1}),s=c.computed(()=>{if(!n.value)return!1;for(const[u,i]of e.value.entries())if(u&&C(n.value,u))return!0;return!1}),l=()=>{n.value&&e.value.delete(n.value)},v=()=>{if(!n.value)return;const u=t.value.get(n.value);if(u){if(a.value)for(const[i,f]of[...e.value.entries()])i&&C(i,n.value)&&e.value.delete(i);if(s.value)for(const[i,f]of[...e.value.entries()])i&&C(n.value,i)&&e.value.delete(i);e.value.set(n.value,u)}};return{handleUnselect:l,handleSelect:v,handleToggleSelect:()=>{n.value&&(e.value.has(n.value)?l():v())},isSelected:r,isParentOfSelected:a}};exports.DnDOperations=X;exports.default=ae;exports.getBoundingBox=T;exports.useDnDStore=A;exports.useDraggable=de;exports.useDroppable=ge;exports.useSelection=me;
|
|
2
2
|
//# sourceMappingURL=vue-dnd-kit-core.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vue-dnd-kit-core.cjs.js","sources":["../src/utils/operations.ts","../src/composables/useDnDStore.ts","../src/composables/useDragContainer.ts","../src/components/DefaultOverlay.vue","../src/components/DragOverlay.vue","../src/plugin.ts","../src/utils/geometry.ts","../src/utils/namespaces.ts","../src/utils/events.ts","../src/managers/useElementManager.ts","../src/utils/dom.ts","../src/utils/sensor.ts","../src/composables/useKeyboard.ts","../src/composables/usePointer.ts","../src/composables/useSensor.ts","../src/managers/useEventManager.ts","../src/composables/useDraggable.ts","../src/managers/useZoneManager.ts","../src/composables/useDroppable.ts","../src/composables/useSelection.ts"],"sourcesContent":["import { IDnDStore } from '../types';\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 if (hoveredElement) {\n store.draggingElements.value.forEach((element) =>\n DnDOperations.move(\n element.data?.source,\n element.data?.index,\n hoveredElement.data?.source,\n hoveredElement.data?.index\n )\n );\n } else {\n store.draggingElements.value.forEach((element) =>\n DnDOperations.move(\n element.data?.source,\n element.data?.index,\n hoveredZone?.data?.source,\n hoveredZone?.data?.source?.length\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 store.draggingElements.value.forEach((element) =>\n DnDOperations.copy(\n element.data?.source,\n element.data?.index,\n hoveredElement.data?.source,\n hoveredElement.data?.index\n )\n );\n } else {\n store.draggingElements.value.forEach((element) =>\n DnDOperations.copy(\n element.data?.source,\n element.data?.index,\n hoveredZone?.data?.source,\n hoveredZone?.data?.source?.length\n )\n );\n }\n };\n static applySwap = (store: IDnDStore) => {\n const hoveredElement = store.hovered.element.value;\n const hoveredZone = store.hovered.zone.value;\n if (hoveredElement && store.draggingElements.value.length === 1) {\n const element = store.draggingElements.value[0];\n DnDOperations.swap(\n element.data?.source,\n element.data?.index,\n hoveredElement.data?.source,\n hoveredElement.data?.index\n );\n } else {\n store.draggingElements.value.forEach((element) =>\n DnDOperations.move(\n element.data?.source,\n element.data?.index,\n hoveredZone?.data?.source,\n hoveredZone?.data?.source?.length\n )\n );\n }\n };\n static applyRemove = (store: IDnDStore) => {\n store.draggingElements.value.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 if (hoveredElement && items.length > 0) {\n items.forEach((item) => {\n DnDOperations.insert(\n hoveredElement.data?.source,\n hoveredElement.data?.index,\n item\n );\n });\n } else {\n items.forEach((item) => {\n DnDOperations.insert(\n hoveredZone?.data?.source,\n hoveredZone?.data?.source?.length,\n item\n );\n });\n }\n };\n}\n","import type {\n IDragElement,\n IDraggingElement,\n IDropZone,\n IPoint,\n} from '../types';\nimport { computed, ref, shallowRef, type Component } from 'vue';\nimport { createGlobalState, useMagicKeys } from '@vueuse/core';\n\nexport const useDnDStore = createGlobalState(() => {\n const draggingElements = ref<IDraggingElement[]>([]);\n const isDragging = computed<boolean>(() => draggingElements.value.length > 0);\n\n const activeContainer = {\n component: ref<Component | null>(null),\n ref: shallowRef<HTMLElement | null>(null),\n };\n\n const elements = ref<IDragElement[]>([]);\n const selectedElements = ref<IDragElement[]>([]);\n const zones = ref<IDropZone[]>([]);\n\n const hovered = {\n zone: ref<IDropZone | null>(null),\n element: ref<IDragElement | null>(null),\n };\n const pointerPosition = {\n current: shallowRef<IPoint | null>(null),\n start: 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 return {\n isDragging,\n activeContainer,\n elements,\n draggingElements,\n selectedElements,\n zones,\n hovered,\n pointerPosition,\n keyboard: {\n w,\n s,\n a,\n d,\n ctrl,\n shift,\n alt,\n meta,\n },\n };\n});\n","import { onBeforeUnmount, onMounted, ref } from 'vue';\n\nimport { useDnDStore } from './useDnDStore';\n\n/**\n * Hook for creating custom drag container with overlay management.\n * Provides functionality for controlling drag visualization and element positioning.\n *\n * This hook is typically used to create custom drag overlays, layers,\n * and control how dragged elements are displayed during drag operations.\n *\n * @example\n * ```vue\n * <script setup lang=\"ts\">\n * import { computed } from 'vue';\n * import { useDragContainer } from '../composables/useDragContainer';\n *\n * const { elementRef, pointerPosition, isDragging, draggingElements } =\n * useDragContainer();\n *\n * const computedStyle = computed(() => ({\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 * }));\n *</script>\n *\n *<template>\n * <Teleport to=\"body\">\n * <div\n * v-if=\"isDragging\"\n * ref=\"elementRef\"\n * :style=\"computedStyle\"\n * class=\"default-drag-overlay\"\n * >\n * <div\n * v-for=\"(element, index) in draggingElements\"\n * :key=\"index\"\n * v-html=\"element.initialHTML\"\n * :style=\"{\n * width: `${element.initialRect?.width}px`,\n * height: `${element.initialRect?.height}px`,\n * }\"\n * />\n * </div>\n * </Teleport>\n *</template>\n *\n *<style scoped>\n * .default-drag-overlay {\n * position: fixed;\n * top: 0;\n * left: 0;\n * background-color: rgba(0, 0, 0, 0.5);\n * transition: 0.3s cubic-bezier(0.165, 0.84, 0.44, 1);\n * z-index: 1000;\n * }\n *</style>\n *\n * ```\n *\n * @returns {Object} Container controls and state\n * @property {Ref<HTMLElement | null>} elementRef - Reference to be bound to container element\n * @property {Ref<IDragElement[]>} draggingElements - Currently dragged elements\n * @property {IPointerPosition} pointerPosition - Current pointer coordinates and offsets\n * @property {Ref<boolean>} isDragging - Whether drag operation is in progress\n */\nexport const useDragContainer = () => {\n const elementRef = ref<HTMLElement | null>(null);\n\n const { draggingElements, pointerPosition, isDragging, activeContainer } =\n useDnDStore();\n\n onMounted(() => {\n activeContainer.ref = elementRef;\n });\n\n onBeforeUnmount(() => {\n activeContainer.ref.value = null;\n });\n\n return {\n elementRef,\n draggingElements,\n pointerPosition,\n isDragging,\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 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 }));\n</script>\n\n<template>\n <div\n v-if=\"isDragging\"\n ref=\"elementRef\"\n :style=\"computedStyle\"\n >\n <div\n v-for=\"(element, index) in draggingElements\"\n :key=\"index\"\n v-html=\"element.initialHTML\"\n :style=\"{\n width: `${element.initialRect?.width}px`,\n height: `${element.initialRect?.height}px`,\n }\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\n import { computed } from 'vue';\n import { useDnDStore } from '../composables/useDnDStore';\n import DefaultOverlay from './DefaultOverlay.vue';\n\n const { activeContainer } = useDnDStore();\n\n const overlay = computed(\n () => activeContainer.component.value ?? DefaultOverlay\n );\n</script>\n\n<template>\n <component :is=\"overlay\" />\n</template>\n","import { createVNode, render } from 'vue';\n\nimport type { App } from 'vue';\nimport DragOverlay from './components/DragOverlay.vue';\n\nexport const VueDndKitPlugin = {\n install(app: App) {\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 const vnode = createVNode(DragOverlay);\n render(vnode, overlayContainer);\n app.__VUE_DND_KIT_OVERLAY__ = {\n container: overlayContainer,\n vnode,\n };\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 };\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","export const preventEvent = (event: Event) => {\n event.preventDefault();\n \n};\n\n","import { computed, ref } 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 elements,\n draggingElements,\n hovered,\n selectedElements,\n isDragging: isDragStarted,\n } = useDnDStore();\n\n const elementRef = ref<HTMLElement | null>(null);\n const isOvered = computed<boolean>(\n () => hovered.element.value?.node === elementRef.value\n );\n\n const isDragging = computed<boolean>(() =>\n draggingElements.value.some((element) => element.node === elementRef.value)\n );\n const isAllowed = computed<boolean>(() => {\n if (!elementRef.value) return false;\n if (!isDragStarted.value) return false;\n\n const currentElement = elements.value.find(\n (element) => element.node === elementRef.value\n );\n if (!currentElement?.groups.length) return true;\n\n return !draggingElements.value.some((element) => {\n if (!element.groups.length) return false;\n return !element.groups.some((group) =>\n currentElement.groups.includes(group)\n );\n });\n });\n\n const registerElement = () => {\n if (!elementRef.value) throw new Error('ElementRef is not set');\n\n elements.value.push({\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 });\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 const index = elements.value.findIndex(\n (element) => element.node === elementRef.value\n );\n if (index !== -1) elements.value.splice(index, 1);\n\n const selectedIndex = selectedElements.value.findIndex(\n (element) => element.node === elementRef.value\n );\n if (selectedIndex !== -1) selectedElements.value.splice(selectedIndex, 1);\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 };\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 = store.draggingElements.value.map((el) => el.node);\n\n const allCollidingElements = store.elements.value\n .filter((element) => {\n if (!element.node) return false;\n\n const rect = getBoundingBox(element.node as HTMLElement);\n return rect && containerRect && checkCollision(rect, containerRect);\n })\n .map((element) => {\n const rect = getBoundingBox(element.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 const depth = store.elements.value.filter(\n (parent) =>\n parent !== element &&\n parent.node &&\n element.node &&\n isDescendant(element.node as HTMLElement, parent.node as HTMLElement)\n ).length;\n\n return {\n element,\n node: element.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 = store.zones.value\n .filter((zone) => {\n if (\n !zone.node ||\n activeDragNodes.some(\n (dragNode) =>\n dragNode &&\n isDescendant(zone.node as HTMLElement, dragNode as HTMLElement)\n )\n )\n return false;\n\n const rect = getBoundingBox(zone.node as HTMLElement);\n\n return rect && containerRect && checkCollision(rect, containerRect);\n })\n .map((zone) => {\n const rect = getBoundingBox(zone.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 const depth = store.zones.value.filter(\n (parent) =>\n parent !== zone &&\n parent.node &&\n zone.node &&\n isDescendant(zone.node as HTMLElement, parent.node as HTMLElement)\n ).length;\n\n return {\n zone,\n node: zone.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 // Возвращаем все найденные HTML-элементы\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 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 { 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 ): IDraggingElement[] => {\n const isDraggableInSelection = store.selectedElements.value.some(\n (element) => element.node === draggableElement\n );\n\n if (store.selectedElements.value.length && isDraggableInSelection) {\n return store.selectedElements.value.map((element) => ({\n ...element,\n initialHTML: element.node?.outerHTML ?? '',\n initialRect: element.node?.getBoundingClientRect(),\n }));\n }\n\n store.selectedElements.value = [];\n\n const element = store.elements.value.find(\n (element) => element.node === draggableElement\n );\n if (!element) return [];\n\n return [\n {\n ...element,\n initialHTML: element.node?.outerHTML ?? '',\n initialRect: element.node?.getBoundingClientRect(),\n },\n ];\n };\n\n const processUserCollisionResults = (\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 const activeDragNodes = store.draggingElements.value.map(\n (element) => element.node\n );\n\n const filteredElements = elements\n .map((htmlElement) =>\n store.elements.value.find((e) => e.node === htmlElement)\n )\n .filter((element) => {\n if (!element) return false;\n if (\n activeDragNodes.some(\n (dragNode) =>\n dragNode &&\n (dragNode === element.node ||\n isDescendant(\n element.node as HTMLElement,\n dragNode as HTMLElement\n ))\n )\n )\n return false;\n\n // Проверяем совместимость групп\n if (element.groups.length) {\n const isCompatible = !store.draggingElements.value.some(\n (draggingElement) => {\n if (!draggingElement.groups.length) return false;\n return !draggingElement.groups.some((group) =>\n element.groups.includes(group)\n );\n }\n );\n return isCompatible;\n }\n\n return true;\n });\n\n const filteredZones = elements\n .map((htmlElement) =>\n store.zones.value.find((zone) => zone.node === htmlElement)\n )\n .filter((zone) => {\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 = !store.draggingElements.value.some((element) => {\n if (!element.groups.length) return false;\n return !element.groups.some((group) => zone.groups.includes(group));\n });\n if (!isCompatible) return null;\n }\n\n return true;\n });\n\n return {\n element: filteredElements[0] ?? null,\n zone: filteredZones[0] ?? null,\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 store.hovered.element.value = results.element;\n store.hovered.zone.value = results.zone;\n\n if (store.hovered.element.value !== previousElement) {\n if (previousElement?.events?.onLeave)\n previousElement.events.onLeave(store);\n if (store.hovered.element.value?.events?.onHover)\n store.hovered.element.value.events.onHover(store);\n }\n\n if (store.hovered.zone.value !== previousZone) {\n if (previousZone?.events?.onLeave) previousZone.events.onLeave(store);\n if (store.hovered.zone.value?.events?.onHover)\n store.hovered.zone.value.events.onHover(store);\n }\n };\n\n const throttledDetectAndProcess = useThrottleFn(() => {\n const htmlElements = detectCollisions(store);\n const processedResults = processUserCollisionResults(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 cancelAnimationFrame(animationFrameId);\n animationFrameId = null;\n }\n };\n\n const activate = (event: PointerEvent | KeyboardEvent) => {\n store.draggingElements.value = getDraggingElements(elementRef.value);\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 if (event instanceof KeyboardEvent) {\n onKeyboardMove();\n } else {\n onPointerMove(event);\n }\n };\n\n const deactivate = (triggerEvents = true) => {\n onPointerEnd();\n onKeyboardEnd();\n\n if (triggerEvents) {\n if (store.hovered.zone.value)\n store.hovered.zone.value.events.onDrop?.(store);\n else\n store.draggingElements.value.forEach((element) =>\n element.events.onEnd?.(store)\n );\n\n store.selectedElements.value = [];\n }\n store.draggingElements.value = [];\n\n store.hovered.zone.value = null;\n store.hovered.element.value = null;\n\n stopDetection();\n };\n\n return {\n activate,\n track,\n deactivate,\n };\n};\n","import { Ref, markRaw } from 'vue';\n\nimport type { IUseDragOptions } from '../types';\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 } = 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 clearAllListeners();\n\n (event.target as HTMLElement).blur();\n\n if (options?.container)\n activeContainer.component.value = markRaw(options.container);\n\n const { activate, track, deactivate } = useSensor(elementRef, options);\n\n currentEndHandler = () => {\n activeContainer.component.value = null;\n enableInteractions();\n deactivate(true);\n clearAllListeners();\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 elementRef,\n registerElement,\n unregisterElement,\n isDragging,\n isOvered,\n isAllowed,\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\n onMounted(registerElement);\n onBeforeUnmount(unregisterElement);\n\n return {\n pointerPosition,\n elementRef,\n isDragging,\n isOvered,\n isAllowed,\n handleDragStart,\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 { zones, hovered, draggingElements, isDragging } = useDnDStore();\n\n const elementRef = ref<HTMLElement | null>(null);\n\n const isOvered = computed<boolean>(() => {\n return hovered.zone.value?.node === elementRef.value;\n });\n\n const isAllowed = computed<boolean>(() => {\n if (!elementRef.value || !isDragging.value) return false;\n\n const currentZone = zones.value.find(\n (zone) => zone.node === elementRef.value\n );\n if (!currentZone?.groups.length) return true;\n\n return !draggingElements.value.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 registerZone = () => {\n if (!elementRef.value) throw new Error('elementRef is not set');\n\n zones.value.push({\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) throw new Error('elementRef is not set');\n\n const index = zones.value.findIndex(\n (zone) => zone.node === elementRef.value\n );\n\n if (index !== -1) zones.value.splice(index, 1);\n };\n\n return { elementRef, registerZone, unregisterZone, isOvered, isAllowed };\n};\n","import { onBeforeUnmount, onMounted } from 'vue';\n\nimport type { IUseDropOptions } from '../types';\nimport { useZoneManager } from '../managers/useZoneManager';\n\n/**\n * Hook for creating drop zones that can accept dragged elements.\n * Manages drop zone registration and interaction states.\n *\n * @param options - Configuration options for drop zone\n * @param options.groups - Groups that this zone accepts. Elements can only be\n * dropped if they share at least one group with the zone\n * @param options.events - Event handlers for drop zone lifecycle\n * @param options.events.onDrop - Called when compatible element is dropped\n * @param options.events.onHover - Called when compatible element hovers\n * @param options.events.onLeave - Called when element leaves zone\n * @param options.data - Custom data accessible in event handlers\n *\n * @returns Object containing:\n * - elementRef: Reference to be bound to drop zone element\n * - isOvered: Whether zone is currently being hovered by dragged element\n * - isAllowed: Whether currently dragged element can be dropped (groups match)\n *\n * @example\n * ```vue\n * <template>\n * <div\n * ref=\"elementRef\"\n * :class=\"{\n * 'drop-zone': true,\n * 'zone-hovered': isOvered,\n * 'drop-allowed': isAllowed && isOvered,\n * 'drop-forbidden': !isAllowed && isOvered\n * }\"\n * >\n * <slot />\n * </div>\n * </template>\n *\n * <script setup lang=\"ts\">\n * const { elementRef, isOvered, isAllowed } = useDrop({\n * // Зона принимает только элементы из группы 'items'\n * groups: ['items'],\n * events: {\n * onDrop: (store) => {\n * const droppedElements = store.draggingElements.value;\n * console.log('Elements dropped!', droppedElements);\n * },\n * onHover: (store) => {\n * // Подсветка зоны при наведении совместимого элемента\n * if (isAllowed.value) {\n * console.log('Compatible element hovering!');\n * }\n * },\n * onLeave: () => {\n * console.log('Element left drop zone');\n * }\n * },\n * // Пользовательские данные доступны в обработчиках\n * data: {\n * zoneId: 'main-drop-zone',\n * acceptLimit: 5\n * }\n * });\n * </script>\n *\n * <style scoped>\n * .drop-zone {\n * border: 2px dashed #ccc;\n * padding: 20px;\n * transition: all 0.3s;\n * }\n *\n * .zone-hovered {\n * background: #f0f0f0;\n * }\n *\n * .drop-allowed {\n * border-color: #4CAF50;\n * background: #E8F5E9;\n * }\n *\n * .drop-forbidden {\n * border-color: #F44336;\n * background: #FFEBEE;\n * }\n * </style>\n * ```\n */\nexport const useDroppable = (options?: IUseDropOptions) => {\n const { elementRef, registerZone, unregisterZone, isOvered, isAllowed } =\n useZoneManager(options);\n\n // Register/unregister drop zone with store\n onMounted(registerZone);\n onBeforeUnmount(unregisterZone);\n\n return { elementRef, isOvered, isAllowed };\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, elements } = useDnDStore();\n const element = computed(() =>\n elements.value.find((element) => element.node === elementRef.value)\n );\n\n const isSelected = computed<boolean>(() =>\n selectedElements.value.some((element) => element.node === elementRef.value)\n );\n\n const isParentOfSelected = computed(() => {\n if (!elementRef.value) return false;\n return selectedElements.value.some(\n (selected) =>\n selected.node &&\n isDescendant(\n selected.node as HTMLElement,\n elementRef.value as HTMLElement\n )\n );\n });\n\n const hasSelectedParent = computed(() => {\n if (!elementRef.value) return false;\n return selectedElements.value.some(\n (selected) =>\n selected.node &&\n isDescendant(\n elementRef.value as HTMLElement,\n selected.node as HTMLElement\n )\n );\n });\n\n const handleUnselect = () => {\n if (!element.value) return;\n\n selectedElements.value = selectedElements.value.filter(\n (element) => element.node !== elementRef.value\n );\n };\n\n const handleSelect = () => {\n if (!element.value) return;\n\n // If element contains selected elements, remove them and select the parent\n if (isParentOfSelected.value) {\n selectedElements.value = selectedElements.value.filter(\n (selected) =>\n selected.node &&\n !isDescendant(\n selected.node as HTMLElement,\n elementRef.value as HTMLElement\n )\n );\n }\n\n if (hasSelectedParent.value) {\n selectedElements.value = selectedElements.value.filter(\n (selected) =>\n selected.node &&\n !isDescendant(\n elementRef.value as HTMLElement,\n selected.node as HTMLElement\n )\n );\n }\n\n selectedElements.value.push(element.value);\n };\n\n const handleToggleSelect = () => {\n if (!element.value) return;\n\n selectedElements.value.some((element) => element.node === 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","element","_a","_b","_c","_d","_e","items","DnDOperations","useDnDStore","createGlobalState","draggingElements","ref","isDragging","computed","activeContainer","shallowRef","elements","selectedElements","zones","hovered","pointerPosition","w","s","a","d","ctrl","shift","alt","meta","useMagicKeys","useDragContainer","elementRef","onMounted","onBeforeUnmount","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","useElementManager","options","isDragStarted","isOvered","isAllowed","currentElement","group","selectedIndex","isDescendant","container","defaultCollisionDetection","containerRect","containerCenter","pointerX","pointerY","shouldUseNormalPriority","activeDragNodes","el","allCollidingElements","elementCenter","isPointerInElement","overlapPercent","centerDistance","depth","parent","b","allCollidingZones","zone","dragNode","zoneCenter","useKeyboard","keyboard","moveStep","centerX","centerY","currentX","currentY","newX","newY","usePointer","pixel","percent","useSensor","onPointerStart","onPointerMove","onPointerEnd","onKeyboardStart","onKeyboardMove","onKeyboardEnd","animationFrameId","getDraggingElements","draggableElement","isDraggableInSelection","processUserCollisionResults","htmlElements","filteredElements","htmlElement","e","draggingElement","filteredZones","detectCollisions","processCollisionResults","results","previousElement","previousZone","_f","throttledDetectAndProcess","useThrottleFn","processedResults","animationLoop","startDetection","stopDetection","triggerEvents","useEventManager","originalUserSelect","originalTouchAction","originalOverscrollBehavior","currentMoveHandler","currentEndHandler","currentCancelHandler","currentScrollHandler","currentKeyHandler","disableInteractions","body","enableInteractions","clearAllListeners","markRaw","activate","track","deactivate","useDraggable","registerElement","unregisterElement","start","handleDragStart","useZoneManager","currentZone","useDroppable","registerZone","unregisterZone","useSelection","isSelected","isParentOfSelected","selected","hasSelectedParent","handleUnselect","handleSelect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vue-dnd-kit-core.cjs.js","sources":["../src/utils/operations.ts","../src/composables/useDnDStore.ts","../src/composables/useDragContainer.ts","../src/components/DefaultOverlay.vue","../src/components/DragOverlay.vue","../src/plugin.ts","../src/utils/geometry.ts","../src/utils/namespaces.ts","../src/utils/events.ts","../src/managers/useElementManager.ts","../src/utils/dom.ts","../src/utils/sensor.ts","../src/composables/useKeyboard.ts","../src/composables/usePointer.ts","../src/composables/useSensor.ts","../src/managers/useEventManager.ts","../src/composables/useDraggable.ts","../src/managers/useZoneManager.ts","../src/composables/useDroppable.ts","../src/composables/useSelection.ts"],"sourcesContent":["import { IDnDStore } from '../types';\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 store.draggingElements.value.forEach((element) =>\n DnDOperations.move(\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 );\n } else if (hoveredZone) {\n store.draggingElements.value.forEach((element) =>\n DnDOperations.move(\n element.data?.source,\n element.data?.index,\n store.zonesMap.value.get(hoveredZone)?.data?.source,\n store.zonesMap.value.get(hoveredZone)?.data?.source?.length\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 store.draggingElements.value.forEach((element) =>\n DnDOperations.copy(\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 );\n } else if (hoveredZone) {\n store.draggingElements.value.forEach((element) =>\n DnDOperations.copy(\n element.data?.source,\n element.data?.index,\n store.zonesMap.value.get(hoveredZone)?.data?.source,\n store.zonesMap.value.get(hoveredZone)?.data?.source?.length\n )\n );\n }\n };\n static applySwap = (store: IDnDStore) => {\n const hoveredElement = store.hovered.element.value;\n const hoveredZone = store.hovered.zone.value;\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 store.draggingElements.value.forEach((element) =>\n DnDOperations.move(\n element.data?.source,\n element.data?.index,\n store.zonesMap.value.get(hoveredZone)?.data?.source,\n store.zonesMap.value.get(hoveredZone)?.data?.source?.length\n )\n );\n }\n };\n static applyRemove = (store: IDnDStore) => {\n store.draggingElements.value.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 if (hoveredElement && items.length > 0) {\n items.forEach((item) => {\n DnDOperations.insert(\n store.elementsMap.value.get(hoveredElement)?.data?.source,\n store.elementsMap.value.get(hoveredElement)?.data?.index,\n item\n );\n });\n } else if (hoveredZone) {\n items.forEach((item) => {\n DnDOperations.insert(\n store.zonesMap.value.get(hoveredZone)?.data?.source,\n store.zonesMap.value.get(hoveredZone)?.data?.source?.length,\n item\n );\n });\n }\n };\n}\n","import type {\n IDragElement,\n IDraggingElement,\n IDropZone,\n IPoint,\n} from '../types';\nimport { computed, ref, shallowRef, type Component, onUnmounted } from 'vue';\nimport { createGlobalState, useMagicKeys } from '@vueuse/core';\n\nexport const useDnDStore = createGlobalState(() => {\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 };\n\n const elementsMap = ref<Map<HTMLElement | Element, IDragElement>>(new Map());\n const selectedElementsMap = ref<Map<HTMLElement | Element, IDragElement>>(\n new Map()\n );\n const zonesMap = ref<Map<HTMLElement | Element, IDropZone>>(new Map());\n const visibleZones = ref<Set<HTMLElement | Element>>(new Set());\n const visibleElements = ref<Set<HTMLElement | Element>>(new Set());\n\n // Создаем IntersectionObserver для отслеживания видимости элементов\n const elementObserver = new IntersectionObserver((entries) => {\n entries.forEach((entry) =>\n visibleElements.value[entry.isIntersecting ? 'add' : 'delete'](\n entry.target\n )\n );\n });\n const zoneObserver = new IntersectionObserver((entries) => {\n entries.forEach((entry) =>\n visibleZones.value[entry.isIntersecting ? 'add' : 'delete'](entry.target)\n );\n });\n\n const handleDragElementIntersection = (\n action: 'add' | 'remove',\n element: HTMLElement | Element\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 (action === 'add') {\n zoneObserver.observe(element);\n } else {\n zoneObserver.unobserve(element);\n visibleZones.value.delete(element);\n }\n };\n\n onUnmounted(() => {\n elementObserver.disconnect();\n zoneObserver.disconnect();\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 selectedElementsMap,\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 handleDragElementIntersection,\n handleDropZoneIntersection,\n };\n});\n","import { onBeforeUnmount, onMounted, ref } from 'vue';\n\nimport { useDnDStore } from './useDnDStore';\n\n/**\n * Hook for creating custom drag container with overlay management.\n * Provides functionality for controlling drag visualization and element positioning.\n *\n * This hook is typically used to create custom drag overlays, layers,\n * and control how dragged elements are displayed during drag operations.\n *\n * @example\n * ```vue\n * <script setup lang=\"ts\">\n * import { computed } from 'vue';\n * import { useDragContainer } from '../composables/useDragContainer';\n *\n * const { elementRef, pointerPosition, isDragging, draggingElements } =\n * useDragContainer();\n *\n * const computedStyle = computed(() => ({\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 * }));\n *</script>\n *\n *<template>\n * <Teleport to=\"body\">\n * <div\n * v-if=\"isDragging\"\n * ref=\"elementRef\"\n * :style=\"computedStyle\"\n * class=\"default-drag-overlay\"\n * >\n * <div\n * v-for=\"(element, index) in draggingElements\"\n * :key=\"index\"\n * v-html=\"element.initialHTML\"\n * :style=\"{\n * width: `${element.initialRect?.width}px`,\n * height: `${element.initialRect?.height}px`,\n * }\"\n * />\n * </div>\n * </Teleport>\n *</template>\n *\n *<style scoped>\n * .default-drag-overlay {\n * position: fixed;\n * top: 0;\n * left: 0;\n * background-color: rgba(0, 0, 0, 0.5);\n * transition: 0.3s cubic-bezier(0.165, 0.84, 0.44, 1);\n * z-index: 1000;\n * }\n *</style>\n *\n * ```\n *\n * @returns {Object} Container controls and state\n * @property {Ref<HTMLElement | null>} elementRef - Reference to be bound to container element\n * @property {Ref<IDragElement[]>} draggingElements - Currently dragged elements\n * @property {IPointerPosition} pointerPosition - Current pointer coordinates and offsets\n * @property {Ref<boolean>} isDragging - Whether drag operation is in progress\n */\nexport const useDragContainer = () => {\n const elementRef = ref<HTMLElement | null>(null);\n\n const { draggingElements, pointerPosition, isDragging, activeContainer } =\n useDnDStore();\n\n onMounted(() => {\n activeContainer.ref = elementRef;\n });\n\n onBeforeUnmount(() => {\n activeContainer.ref.value = null;\n });\n\n return {\n elementRef,\n draggingElements,\n pointerPosition,\n isDragging,\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 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 }));\n</script>\n\n<template>\n <div\n v-if=\"isDragging\"\n ref=\"elementRef\"\n :style=\"computedStyle\"\n >\n <div\n v-for=\"[_, element] in draggingElements\"\n :key=\"element.id\"\n v-html=\"element.initialHTML\"\n :style=\"{\n width: `${element.initialRect?.width}px`,\n height: `${element.initialRect?.height}px`,\n }\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\n import { computed } from 'vue';\n import { useDnDStore } from '../composables/useDnDStore';\n import DefaultOverlay from './DefaultOverlay.vue';\n\n const { activeContainer } = useDnDStore();\n\n const overlay = computed(\n () => activeContainer.component.value ?? DefaultOverlay\n );\n</script>\n\n<template>\n <component :is=\"overlay\" />\n</template>\n","import { createVNode, render } from 'vue';\n\nimport type { App } from 'vue';\nimport DragOverlay from './components/DragOverlay.vue';\n\nexport const VueDndKitPlugin = {\n install(app: App) {\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 const vnode = createVNode(DragOverlay);\n render(vnode, overlayContainer);\n app.__VUE_DND_KIT_OVERLAY__ = {\n container: overlayContainer,\n vnode,\n };\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 };\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","export const preventEvent = (event: Event) => {\n event.preventDefault();\n \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 selectedElementsMap,\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 (!visibleElements.value.has(elementRef.value)) return false;\n return draggingElements.value.has(elementRef.value);\n });\n\n const isAllowed = computed<boolean>(() => {\n if (!elementRef.value) return false;\n if (!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 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 handleDragElementIntersection('remove', elementRef.value);\n\n elementsMap.value.delete(elementRef.value);\n selectedElementsMap.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 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 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 { 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.selectedElementsMap.value.has(draggableElement);\n\n if (store.selectedElementsMap.value.size > 0 && isDraggableInSelection) {\n const result = new Map<HTMLElement | Element, IDraggingElement>();\n\n Array.from(store.selectedElementsMap.value.entries()).forEach(\n ([node, element]) => {\n result.set(node, {\n ...element,\n initialHTML: element.node?.outerHTML ?? '',\n initialRect: element.node?.getBoundingClientRect(),\n });\n }\n );\n\n return result;\n }\n\n store.selectedElementsMap.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 result.set(draggableElement, {\n ...element,\n initialHTML: element.node?.outerHTML ?? '',\n initialRect: element.node?.getBoundingClientRect(),\n });\n\n return result;\n };\n\n const processUserCollisionResults = (\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 store.hovered.element.value = results.element;\n store.hovered.zone.value = results.zone;\n\n if (previousElement) {\n if (store.hovered.element.value !== previousElement) {\n store.elementsMap.value.get(previousElement)?.events?.onLeave?.(store);\n\n if (store.hovered.element.value)\n store.elementsMap.value\n .get(store.hovered.element.value)\n ?.events?.onHover?.(store);\n }\n }\n\n if (previousZone) {\n if (store.hovered.zone.value !== previousZone) {\n store.zonesMap.value.get(previousZone)?.events?.onLeave?.(store);\n\n if (store.hovered.zone.value)\n store.zonesMap.value\n .get(store.hovered.zone.value)\n ?.events?.onHover?.(store);\n }\n }\n };\n\n const throttledDetectAndProcess = useThrottleFn(() => {\n const htmlElements = detectCollisions(store);\n const processedResults = processUserCollisionResults(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 cancelAnimationFrame(animationFrameId);\n animationFrameId = null;\n }\n };\n\n const activate = (event: PointerEvent | KeyboardEvent) => {\n store.draggingElements.value = getDraggingElements(elementRef.value);\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 if (event instanceof KeyboardEvent) {\n onKeyboardMove();\n } else {\n onPointerMove(event);\n }\n };\n\n const deactivate = (triggerEvents = true) => {\n onPointerEnd();\n onKeyboardEnd();\n\n if (triggerEvents) {\n if (store.hovered.zone.value) {\n const zone = store.zonesMap.value.get(store.hovered.zone.value);\n zone?.events.onDrop?.(store);\n } else {\n Array.from(store.draggingElements.value.values()).forEach((element) =>\n element.events.onEnd?.(store)\n );\n }\n\n store.selectedElementsMap.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 {\n activate,\n track,\n deactivate,\n };\n};\n","import { Ref, markRaw } from 'vue';\n\nimport type { IUseDragOptions } from '../types';\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 } = 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 clearAllListeners();\n\n (event.target as HTMLElement).blur();\n\n if (options?.container)\n activeContainer.component.value = markRaw(options.container);\n\n const { activate, track, deactivate } = useSensor(elementRef, options);\n\n currentEndHandler = () => {\n activeContainer.component.value = null;\n enableInteractions();\n deactivate(true);\n clearAllListeners();\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 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 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 return 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 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 { elementRef, registerZone, unregisterZone, isOvered, isAllowed };\n};\n","import { onBeforeUnmount, onMounted } from 'vue';\n\nimport type { IUseDropOptions } from '../types';\nimport { useZoneManager } from '../managers/useZoneManager';\n\n/**\n * Hook for creating drop zones that can accept dragged elements.\n * Manages drop zone registration and interaction states.\n *\n * @param options - Configuration options for drop zone\n * @param options.groups - Groups that this zone accepts. Elements can only be\n * dropped if they share at least one group with the zone\n * @param options.events - Event handlers for drop zone lifecycle\n * @param options.events.onDrop - Called when compatible element is dropped\n * @param options.events.onHover - Called when compatible element hovers\n * @param options.events.onLeave - Called when element leaves zone\n * @param options.data - Custom data accessible in event handlers\n *\n * @returns Object containing:\n * - elementRef: Reference to be bound to drop zone element\n * - isOvered: Whether zone is currently being hovered by dragged element\n * - isAllowed: Whether currently dragged element can be dropped (groups match)\n *\n * @example\n * ```vue\n * <template>\n * <div\n * ref=\"elementRef\"\n * :class=\"{\n * 'drop-zone': true,\n * 'zone-hovered': isOvered,\n * 'drop-allowed': isAllowed && isOvered,\n * 'drop-forbidden': !isAllowed && isOvered\n * }\"\n * >\n * <slot />\n * </div>\n * </template>\n *\n * <script setup lang=\"ts\">\n * const { elementRef, isOvered, isAllowed } = useDrop({\n * // Зона принимает только элементы из группы 'items'\n * groups: ['items'],\n * events: {\n * onDrop: (store) => {\n * const droppedElements = store.draggingElements.value;\n * console.log('Elements dropped!', droppedElements);\n * },\n * onHover: (store) => {\n * // Подсветка зоны при наведении совместимого элемента\n * if (isAllowed.value) {\n * console.log('Compatible element hovering!');\n * }\n * },\n * onLeave: () => {\n * console.log('Element left drop zone');\n * }\n * },\n * // Пользовательские данные доступны в обработчиках\n * data: {\n * zoneId: 'main-drop-zone',\n * acceptLimit: 5\n * }\n * });\n * </script>\n *\n * <style scoped>\n * .drop-zone {\n * border: 2px dashed #ccc;\n * padding: 20px;\n * transition: all 0.3s;\n * }\n *\n * .zone-hovered {\n * background: #f0f0f0;\n * }\n *\n * .drop-allowed {\n * border-color: #4CAF50;\n * background: #E8F5E9;\n * }\n *\n * .drop-forbidden {\n * border-color: #F44336;\n * background: #FFEBEE;\n * }\n * </style>\n * ```\n */\nexport const useDroppable = (options?: IUseDropOptions) => {\n const { elementRef, registerZone, unregisterZone, isOvered, isAllowed } =\n useZoneManager(options);\n\n // Register/unregister drop zone with store\n onMounted(registerZone);\n onBeforeUnmount(unregisterZone);\n\n return { elementRef, isOvered, isAllowed };\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 { selectedElementsMap, elementsMap } = useDnDStore();\n\n const isSelected = computed<boolean>(() =>\n elementRef.value ? selectedElementsMap.value.has(elementRef.value) : false\n );\n\n const isParentOfSelected = computed(() => {\n if (!elementRef.value) return false;\n\n for (const [node, _] of selectedElementsMap.value.entries()) {\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 selectedElementsMap.value.entries()) {\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 selectedElementsMap.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 [...selectedElementsMap.value.entries()]) {\n if (\n node &&\n isDescendant(node as HTMLElement, elementRef.value as HTMLElement)\n ) {\n selectedElementsMap.value.delete(node);\n }\n }\n }\n\n if (hasSelectedParent.value) {\n // Удаляем все родительские выбранные элементы\n for (const [node, _] of [...selectedElementsMap.value.entries()]) {\n if (\n node &&\n isDescendant(elementRef.value as HTMLElement, node as HTMLElement)\n ) {\n selectedElementsMap.value.delete(node);\n }\n }\n }\n\n selectedElementsMap.value.set(elementRef.value, element);\n };\n\n const handleToggleSelect = () => {\n if (!elementRef.value) return;\n\n selectedElementsMap.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","element","_a","_b","_d","_c","_f","_e","_g","items","DnDOperations","useDnDStore","createGlobalState","draggingElements","ref","isDragging","computed","activeContainer","shallowRef","elementsMap","selectedElementsMap","zonesMap","visibleZones","visibleElements","elementObserver","entries","entry","zoneObserver","handleDragElementIntersection","action","handleDropZoneIntersection","onUnmounted","pointerPosition","w","s","a","d","ctrl","shift","alt","meta","useMagicKeys","hovered","useDragContainer","elementRef","onMounted","onBeforeUnmount","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","useElementManager","options","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","b","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","processUserCollisionResults","htmlElements","elements","filteredZoneElement","htmlElement","detectCollisions","processCollisionResults","results","previousElement","previousZone","_i","_h","_l","_k","_j","throttledDetectAndProcess","useThrottleFn","processedResults","animationLoop","startDetection","stopDetection","triggerEvents","useEventManager","originalUserSelect","originalTouchAction","originalOverscrollBehavior","currentMoveHandler","currentEndHandler","currentCancelHandler","currentScrollHandler","currentKeyHandler","disableInteractions","body","enableInteractions","clearAllListeners","markRaw","activate","track","deactivate","useDraggable","registerElement","unregisterElement","start","handleDragStart","useZoneManager","currentZone","useDroppable","registerZone","unregisterZone","useSelection","isSelected","isParentOfSelected","hasSelectedParent","handleUnselect","handleSelect"],"mappings":"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"}
|