@vue-dnd-kit/core 1.2.0 → 1.2.1

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/dist/index.d.ts CHANGED
@@ -1389,7 +1389,7 @@ export declare const useDnDStore: () => {
1389
1389
  handleDropZoneIntersection: (action: 'add' | 'remove', element: HTMLElement | Element) => void;
1390
1390
  };
1391
1391
 
1392
- export declare const useDragContainer: (options?: TransitionProps) => {
1392
+ export declare const useDragContainer: (options?: Omit<TransitionProps, 'appear'>) => {
1393
1393
  elementRef: Ref<HTMLElement | null, HTMLElement | null>;
1394
1394
  draggingElements: Ref<Map<HTMLElement | Element, {
1395
1395
  initialHTML: string;
@@ -1,2 +1,2 @@
1
- "use strict";var ee=Object.defineProperty;var te=(n,e,t)=>e in n?ee(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var b=(n,e,t)=>te(n,typeof e!="symbol"?e+"":e,t);Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("vue"),Y=require("@vueuse/core"),w=class w{};b(w,"remove",(e,t)=>{if(!e||t===void 0)return;const[a]=e.splice(t,1);return a}),b(w,"insert",(e,t,a)=>{!e||t===void 0||e.splice(t,0,a)}),b(w,"move",(e,t,a,o)=>{if(!e||!a||t===void 0||o===void 0)return;const s=w.remove(e,t);w.insert(a,o,s)}),b(w,"swap",(e,t,a,o)=>{if(!e||!a||t===void 0||o===void 0)return;const s=e[t],u=a[o];e[t]=u,a[o]=s}),b(w,"copy",(e,t,a,o)=>{if(!e||t===void 0||!a||o===void 0)return;const s=e[t];w.insert(a,o,s)}),b(w,"applyTransfer",e=>{var o,s,u,m,i,v,f;const t=e.hovered.element.value,a=e.hovered.zone.value;if(t){const d=(s=(o=e.elementsMap.value.get(t))==null?void 0:o.data)==null?void 0:s.source,l=(m=(u=e.elementsMap.value.get(t))==null?void 0:u.data)==null?void 0:m.index,c=e.draggingElements.value.values().next().value,g=(i=c==null?void 0:c.data)==null?void 0:i.index,p=g!==void 0&&l!==void 0&&g>l?1:-1;Array.from(e.draggingElements.value.values()).sort((y,L)=>{var x,_;return p*((((x=y.data)==null?void 0:x.index)||0)-(((_=L.data)==null?void 0:_.index)||0))}).forEach(y=>{var L,x;return w.move((L=y.data)==null?void 0:L.source,(x=y.data)==null?void 0:x.index,d,l)})}else if(a){const d=(f=(v=e.zonesMap.value.get(a))==null?void 0:v.data)==null?void 0:f.source,l=d==null?void 0:d.length;Array.from(e.draggingElements.value.values()).sort((g,p)=>{var E,y;return(((E=p.data)==null?void 0:E.index)||0)-(((y=g.data)==null?void 0:y.index)||0)}).forEach(g=>{var p,E;return w.move((p=g.data)==null?void 0:p.source,(E=g.data)==null?void 0:E.index,d,l)})}}),b(w,"applyCopy",e=>{var o,s,u,m,i,v;const t=e.hovered.element.value,a=e.hovered.zone.value;if(t){const f=(s=(o=e.elementsMap.value.get(t))==null?void 0:o.data)==null?void 0:s.source,d=(m=(u=e.elementsMap.value.get(t))==null?void 0:u.data)==null?void 0:m.index;Array.from(e.draggingElements.value.values()).sort((c,g)=>{var p,E;return(((p=g.data)==null?void 0:p.index)||0)-(((E=c.data)==null?void 0:E.index)||0)}).forEach(c=>{var g,p;return w.copy((g=c.data)==null?void 0:g.source,(p=c.data)==null?void 0:p.index,f,d)})}else if(a){const f=(v=(i=e.zonesMap.value.get(a))==null?void 0:i.data)==null?void 0:v.source,d=f==null?void 0:f.length;Array.from(e.draggingElements.value.values()).sort((c,g)=>{var p,E;return(((p=g.data)==null?void 0:p.index)||0)-(((E=c.data)==null?void 0:E.index)||0)}).forEach(c=>{var g,p;return w.copy((g=c.data)==null?void 0:g.source,(p=c.data)==null?void 0:p.index,f,d)})}}),b(w,"applySwap",e=>{var o,s,u,m,i,v,f,d;const t=e.hovered.element.value,a=e.hovered.zone.value;if(t&&e.draggingElements.value.size===1){const l=e.draggingElements.value.values().next().value;w.swap((o=l==null?void 0:l.data)==null?void 0:o.source,(s=l==null?void 0:l.data)==null?void 0:s.index,(m=(u=e.elementsMap.value.get(t))==null?void 0:u.data)==null?void 0:m.source,(v=(i=e.elementsMap.value.get(t))==null?void 0:i.data)==null?void 0:v.index)}else if(a){const l=(d=(f=e.zonesMap.value.get(a))==null?void 0:f.data)==null?void 0:d.source,c=l==null?void 0:l.length;Array.from(e.draggingElements.value.values()).sort((p,E)=>{var y,L;return(((y=E.data)==null?void 0:y.index)||0)-(((L=p.data)==null?void 0:L.index)||0)}).forEach(p=>{var E,y;return w.move((E=p.data)==null?void 0:E.source,(y=p.data)==null?void 0:y.index,l,c)})}}),b(w,"applyRemove",e=>{Array.from(e.draggingElements.value.values()).sort((a,o)=>{var s,u;return(((s=o.data)==null?void 0:s.index)||0)-(((u=a.data)==null?void 0:u.index)||0)}).forEach(a=>{var o,s;(o=a.data)!=null&&o.source&&((s=a.data)==null?void 0:s.index)!==void 0&&w.remove(a.data.source,a.data.index)})}),b(w,"applyInsert",(e,t)=>{var s,u,m,i,v,f;const a=e.hovered.element.value,o=e.hovered.zone.value;if(a&&t.length>0){const d=(u=(s=e.elementsMap.value.get(a))==null?void 0:s.data)==null?void 0:u.source,l=(i=(m=e.elementsMap.value.get(a))==null?void 0:m.data)==null?void 0:i.index;t.forEach(c=>{w.insert(d,l,c)})}else if(o){const d=(f=(v=e.zonesMap.value.get(o))==null?void 0:v.data)==null?void 0:f.source,l=d==null?void 0:d.length;t.forEach(c=>{w.insert(d,l,c)})}});let F=w;const z=Y.createGlobalState(()=>{const n=r.ref(new Map),e=r.computed(()=>n.value.size>0),t={component:r.ref(null),ref:r.shallowRef(null),options:r.shallowRef(null)},a=r.ref(new Map),o=r.ref(new Set),s=r.ref(new Map),u=r.ref(new Set),m=r.ref(new Set),i=new IntersectionObserver(B=>{B.forEach(h=>m.value[h.isIntersecting?"add":"delete"](h.target))}),v=new IntersectionObserver(B=>{B.forEach(h=>u.value[h.isIntersecting?"add":"delete"](h.target))}),f=(B,h)=>{B==="add"?i.observe(h):(i.unobserve(h),m.value.delete(h))},d=(B,h)=>{B==="add"?v.observe(h):(v.unobserve(h),u.value.delete(h))},l={start:r.shallowRef(null),current:r.shallowRef(null),offset:{percent:r.shallowRef(null),pixel:r.shallowRef(null)}},{w:c,s:g,a:p,d:E,ctrl:y,shift:L,alt:x,meta:_}=Y.useMagicKeys(),U={zone:r.shallowRef(null),element:r.shallowRef(null)};return{draggingElements:n,isDragging:e,activeContainer:t,elementsMap:a,selectedElements:o,zonesMap:s,visibleZones:u,visibleElements:m,pointerPosition:l,keyboard:{w:c,s:g,a:p,d:E,ctrl:y,shift:L,alt:x,meta:_},hovered:U,handleDragElementIntersection:f,handleDropZoneIntersection:d}}),W=n=>{const e=r.ref(null),{draggingElements:t,pointerPosition:a,isDragging:o,activeContainer:s}=z();return r.onMounted(()=>{s.ref=e,s.options.value=n??null}),r.onUnmounted(()=>{s.ref.value=null,s.options.value=null}),{elementRef:e,draggingElements:t,pointerPosition:a,isDragging:o}},ne=["innerHTML"],re=r.defineComponent({__name:"DefaultOverlay",setup(n){const{elementRef:e,pointerPosition:t,isDragging:a,draggingElements:o}=W(),s=r.computed(()=>{var u,m,i,v;return{transform:`translate3d(${(((u=t.current.value)==null?void 0:u.x)??0)-(((m=t.offset.pixel.value)==null?void 0:m.x)??0)}px, ${(((i=t.current.value)==null?void 0:i.y)??0)-(((v=t.offset.pixel.value)==null?void 0:v.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(u,m)=>r.unref(a)?(r.openBlock(),r.createElementBlock("div",{key:0,ref_key:"elementRef",ref:e,style:r.normalizeStyle(s.value)},[(r.openBlock(!0),r.createElementBlock(r.Fragment,null,r.renderList(r.unref(o),([i,v])=>{var f,d;return r.openBlock(),r.createElementBlock("div",{key:v.id,innerHTML:v.initialHTML,style:r.normalizeStyle({width:`${(f=v.initialRect)==null?void 0:f.width}px`,height:`${(d=v.initialRect)==null?void 0:d.height}px`})},null,12,ne)}),128))],4)):r.createCommentVNode("",!0)}}),$=r.defineComponent({__name:"DragOverlay",setup(n){const{activeContainer:e}=z(),t=r.computed(()=>e.component.value??re);return(a,o)=>r.unref(e).options.value?(r.openBlock(),r.createBlock(r.Transition,{key:0,name:r.unref(e).options.value.name,duration:r.unref(e).options.value.duration,"enter-from-class":r.unref(e).options.value.enterFromClass,"enter-to-class":r.unref(e).options.value.enterToClass,"enter-active-class":r.unref(e).options.value.enterActiveClass,"leave-from-class":r.unref(e).options.value.leaveFromClass,"leave-to-class":r.unref(e).options.value.leaveToClass,"leave-active-class":r.unref(e).options.value.leaveActiveClass,mode:r.unref(e).options.value.mode,type:r.unref(e).options.value.type,css:r.unref(e).options.value.css,appear:r.unref(e).options.value.appear,"appear-active-class":r.unref(e).options.value.appearActiveClass,"appear-from-class":r.unref(e).options.value.appearFromClass,"appear-to-class":r.unref(e).options.value.appearToClass,persisted:r.unref(e).options.value.persisted,onEnter:r.unref(e).options.value.onEnter,onLeave:r.unref(e).options.value.onLeave,onBeforeEnter:r.unref(e).options.value.onBeforeEnter,onBeforeLeave:r.unref(e).options.value.onBeforeLeave,onBeforeAppear:r.unref(e).options.value.onBeforeAppear,onAfterEnter:r.unref(e).options.value.onAfterEnter,onAfterLeave:r.unref(e).options.value.onAfterLeave,onAfterAppear:r.unref(e).options.value.onAfterAppear},{default:r.withCtx(()=>[(r.openBlock(),r.createBlock(r.resolveDynamicComponent(t.value)))]),_:1},8,["name","duration","enter-from-class","enter-to-class","enter-active-class","leave-from-class","leave-to-class","leave-active-class","mode","type","css","appear","appear-active-class","appear-from-class","appear-to-class","persisted","onEnter","onLeave","onBeforeEnter","onBeforeLeave","onBeforeAppear","onAfterEnter","onAfterLeave","onAfterAppear"])):(r.openBlock(),r.createBlock(r.resolveDynamicComponent(t.value),{key:1}))}}),ae={install(n){n.component("DragOverlay",$);const e=n.mount;n.mount=function(a){const o=e.call(this,a),s=typeof a=="string"?document.querySelector(a):a;if(s&&s instanceof Element&&!s.querySelector("#vue-dnd-kit-overlay")){const u=document.createElement("div");u.id="vue-dnd-kit-overlay",u.style.pointerEvents="none",s.appendChild(u);const m=r.createVNode($);r.render(m,u),n.__VUE_DND_KIT_OVERLAY__={container:u,vnode:m};const i=z();n.__VUE_DND_KIT_STORE__=i}return o};const t=n.unmount;n.unmount=function(){return n.__VUE_DND_KIT_OVERLAY__&&(r.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,R=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}),le=(n,e)=>{const t=R(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,a=e.y-n.y;return Math.sqrt(t*t+a*a)},J=(n,e)=>{const t=Math.max(0,Math.min(n.x+n.width,e.x+e.width)-Math.max(n.x,e.x)),a=Math.max(0,Math.min(n.y+n.height,e.y+e.height)-Math.max(n.y,e.y)),o=t*a,s=n.width*n.height,u=e.width*e.height;return(o/s*100+o/u*100)/2},Q="data-vue-dnd-kit-draggable",C=n=>{n.preventDefault()},oe=n=>{const{elementsMap:e,draggingElements:t,hovered:a,selectedElements:o,isDragging:s,visibleElements:u,handleDragElementIntersection:m}=z(),i=r.ref(null),v=r.computed(()=>u.value.has(i.value)&&a.element.value===i.value),f=r.shallowRef((n==null?void 0:n.id)||r.useId()),d=r.computed(()=>!i.value||!u.value.has(i.value)?!1:t.value.has(i.value)),l=r.computed(()=>{if(!i.value||!s.value||!u.value.has(i.value))return!1;const p=e.value.get(i.value);return p!=null&&p.groups.length?!Array.from(t.value.entries()).some(([E,y])=>y.groups.length?!y.groups.some(L=>p.groups.includes(L)):!1):!0});return{elementRef:i,registerElement:()=>{if(!i.value)throw new Error("ElementRef is not set");e.value.set(i.value,{node:i.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:f.value}),m("add",i.value),i.value.addEventListener("dragstart",C),i.value.addEventListener("drag",C),i.value.setAttribute(Q,"true"),i.value.setAttribute("draggable","false")},unregisterElement:()=>{i.value&&(e.value.delete(i.value),o.value.delete(i.value),i.value.removeEventListener("dragstart",C),i.value.removeEventListener("drag",C),i.value.removeAttribute(Q),i.value.removeAttribute("draggable"))},isDragging:d,isOvered:v,isAllowed:l,id:f}},T=(n,e)=>n?e.contains(n):!1,se=n=>{var f,d;const e=R(n.activeContainer.ref.value),t=H(e),a=((f=n.pointerPosition.current.value)==null?void 0:f.x)??0,o=((d=n.pointerPosition.current.value)==null?void 0:d.y)??0,u=!(e&&a>=e.x&&a<=e.x+e.width&&o>=e.y&&o<=e.y+e.height),m=Array.from(n.draggingElements.value.keys()),i=Array.from(n.visibleElements.value.entries()).filter(([l,c])=>{if(!l)return!1;const g=R(l);return g&&e&&G(g,e)}).map(([l,c])=>{const g=R(l),p=H(g),E=a>=g.x&&a<=g.x+g.width&&o>=g.y&&o<=g.y+g.height,y=J(g,e),L=j(t,p);let x=0;for(const[_,U]of n.visibleElements.value.entries())_!==l&&_&&l&&T(l,_)&&x++;return{element:c,node:l,isPointerInElement:E,overlapPercent:y,depth:x,centerDistance:L}}).sort((l,c)=>{if(!u){if(l.isPointerInElement&&c.isPointerInElement)return c.depth-l.depth;if(l.isPointerInElement!==c.isPointerInElement)return l.isPointerInElement?-1:1}return Math.abs(l.overlapPercent-c.overlapPercent)<=1?l.centerDistance-c.centerDistance:c.overlapPercent-l.overlapPercent}),v=Array.from(n.visibleZones.value.entries()).filter(([l,c])=>{if(!l||m.some(p=>p&&T(l,p)))return!1;const g=R(l);return g&&e&&G(g,e)}).map(([l,c])=>{const g=R(l),p=H(g),E=a>=g.x&&a<=g.x+g.width&&o>=g.y&&o<=g.y+g.height,y=J(g,e),L=j(t,p);let x=0;for(const[_,U]of n.visibleZones.value.entries())_!==l&&_&&l&&T(l,_)&&x++;return{zone:c,node:l,isPointerInElement:E,overlapPercent:y,depth:x,centerDistance:L}}).sort((l,c)=>{if(!u){if(l.isPointerInElement&&c.isPointerInElement)return c.depth-l.depth;if(l.isPointerInElement!==c.isPointerInElement)return l.isPointerInElement?-1:1}return Math.abs(l.overlapPercent-c.overlapPercent)<=1?l.centerDistance-c.centerDistance:c.overlapPercent-l.overlapPercent});return[...i.map(l=>l.node),...v.map(l=>l.node)]},ue=(n,e)=>{const{pointerPosition:t,keyboard:a}=z(),o=(e==null?void 0:e.moveStep)||10;return{onKeyboardStart:i=>{var l;C(i);const v=R(n.value);(l=n.value)==null||l.blur();const f=v.x+v.width/2,d=v.y+v.height/2;t.start.value={x:f,y:d},t.current.value={x:f,y:d},t.offset.pixel.value={x:v.width/2,y:v.height/2},t.offset.percent.value={x:50,y:50}},onKeyboardMove:()=>{if(!t.current.value)return;const i=t.current.value.x,v=t.current.value.y;let f=i,d=v;a.w.value&&(d-=o),a.s.value&&(d+=o),a.a.value&&(f-=o),a.d.value&&(f+=o),t.current.value={x:f,y:d}},onKeyboardEnd:()=>{t.current.value=null,t.start.value=null,t.offset.pixel.value=null,t.offset.percent.value=null}}},ie=n=>{const e=z();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:u,percent:m}=le(n.value,{x:s.clientX,y:s.clientY});e.pointerPosition.offset.pixel.value=u,e.pointerPosition.offset.percent.value=m},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 U,B;const t=z(),{onPointerStart:a,onPointerMove:o,onPointerEnd:s}=ie(n),{onKeyboardStart:u,onKeyboardMove:m,onKeyboardEnd:i}=ue(n,e==null?void 0:e.keyboard);let v=null;const f=h=>{var I,A;if(!h)return new Map;const S=t.selectedElements.value.has(h);if(t.selectedElements.value.size>0&&S){const D=new Map;return t.selectedElements.value.forEach(k=>{var Z,O;const K=t.elementsMap.value.get(k);K&&D.set(k,{...K,initialHTML:((Z=K.node)==null?void 0:Z.outerHTML)??"",initialRect:(O=K.node)==null?void 0:O.getBoundingClientRect()})}),D}t.selectedElements.value.clear();const P=t.elementsMap.value.get(h);if(!P)return new Map;const M=new Map;return M.set(h,{...P,initialHTML:((I=P.node)==null?void 0:I.outerHTML)??"",initialRect:(A=P.node)==null?void 0:A.getBoundingClientRect()}),M},d=h=>{if(!h)return{element:null,zone:null};const S=Array.isArray(h)?h:[h],P=Array.from(t.draggingElements.value.keys()),M=S.find(A=>{if(!t.visibleZones.value.has(A))return!1;const D=t.zonesMap.value.get(A);return!(!D||P.some(k=>k&&(k===D.node||T(D.node,k)))||D.groups.length&&!!Array.from(t.draggingElements.value.values()).some(K=>K.groups.length?!K.groups.some(Z=>D.groups.includes(Z)):!1))});return M?{element:S.find(A=>t.visibleElements.value.has(A)&&t.elementsMap.value.has(A)&&!P.some(D=>D&&(D===A||T(A,D)||T(D,A)))&&(A===M||T(A,M)))||null,zone:M}:{element:null,zone:null}},l=((U=e==null?void 0:e.sensor)==null?void 0:U.setup)||se,c=h=>{var M,I,A,D,k,K,Z,O,X,N,V,q;const S=t.hovered.element.value,P=t.hovered.zone.value;t.hovered.element.value=h.element,t.hovered.zone.value=h.zone,S&&t.hovered.element.value!==S&&((A=(I=(M=t.elementsMap.value.get(S))==null?void 0:M.events)==null?void 0:I.onLeave)==null||A.call(I,t),t.hovered.element.value&&((K=(k=(D=t.elementsMap.value.get(t.hovered.element.value))==null?void 0:D.events)==null?void 0:k.onHover)==null||K.call(k,t))),P&&t.hovered.zone.value!==P&&((X=(O=(Z=t.zonesMap.value.get(P))==null?void 0:Z.events)==null?void 0:O.onLeave)==null||X.call(O,t),t.hovered.zone.value&&((q=(V=(N=t.zonesMap.value.get(t.hovered.zone.value))==null?void 0:N.events)==null?void 0:V.onHover)==null||q.call(V,t)))},g=Y.useThrottleFn(()=>{const h=l(t),S=d(h);c(S)},((B=e==null?void 0:e.sensor)==null?void 0:B.throttle)??0),p=()=>{g(),v=requestAnimationFrame(p)},E=()=>p(),y=()=>{v!==null&&(cancelAnimationFrame(v),v=null)};return{activate:h=>{t.draggingElements.value=f(n.value),t.draggingElements.value.forEach(S=>{var P,M;return(M=(P=S.events).onStart)==null?void 0:M.call(P,t)}),h instanceof PointerEvent?a(h):u(h),E()},track:h=>{t.draggingElements.value.forEach(S=>{var P,M;return(M=(P=S.events).onMove)==null?void 0:M.call(P,t)}),h instanceof KeyboardEvent?m():o(h)},deactivate:(h=!0)=>{var S,P;if(s(),i(),h){if(t.hovered.zone.value){const M=t.zonesMap.value.get(t.hovered.zone.value);(P=M==null?void 0:(S=M.events).onDrop)==null||P.call(S,t)}else t.draggingElements.value.forEach(M=>{var I,A;return(A=(I=M.events).onEnd)==null?void 0:A.call(I,t)});t.selectedElements.value.clear()}t.draggingElements.value.clear(),t.hovered.zone.value=null,t.hovered.element.value=null,y()}}},ve=Y.createGlobalState(()=>{let n="",e="",t="",a=null,o=null,s=null,u=null,m=null;const{activeContainer:i}=z(),v=()=>{const c=document.body;n=c.style.userSelect,c.style.userSelect="none",window.addEventListener("contextmenu",C),window.addEventListener("selectstart",C),window.addEventListener("touchstart",C),window.addEventListener("touchmove",C)},f=()=>{const c=document.body;c.style.userSelect=n,c.style.touchAction=e,c.style.overscrollBehavior=t,window.removeEventListener("contextmenu",C),window.removeEventListener("selectstart",C),window.removeEventListener("touchstart",C),window.removeEventListener("touchmove",C)},d=()=>{a&&(document.removeEventListener("pointermove",a),a=null),o&&(document.removeEventListener("pointerup",o),o=null),s&&(s=null),u&&(document.removeEventListener("wheel",u),u=null),m&&(document.removeEventListener("keydown",m),document.removeEventListener("keypress",m),document.removeEventListener("keyup",m),m=null)};return{handleDragStart:(c,g,p)=>{d(),c.target.blur(),p!=null&&p.container&&(i.component.value=r.markRaw(p.container));const{activate:E,track:y,deactivate:L}=ce(g,p);o=()=>{i.component.value=null,f(),L(!0),d()},s=()=>{i.component.value=null,f(),L(!1),d()},a=x=>y(x),u=x=>y(x),m=x=>{x.type==="keyup"&&(x.code==="Escape"&&(s==null||s()),x.code==="Enter"&&(o==null||o())),y(x)},v(),E(c),document.addEventListener("pointermove",a),document.addEventListener("pointerup",o),document.addEventListener("wheel",u),document.addEventListener("keydown",m),document.addEventListener("keypress",m),document.addEventListener("keyup",m)}}}),de=n=>{const{id:e,elementRef:t,isDragging:a,isOvered:o,isAllowed:s,registerElement:u,unregisterElement:m}=oe(n),{pointerPosition:i}=z(),{handleDragStart:v}=ve(),f=d=>v(d,t,n);return r.onMounted(u),r.onBeforeUnmount(m),{pointerPosition:i,elementRef:t,isDragging:a,isOvered:o,isAllowed:s,handleDragStart:f,id:e}},fe=n=>{const{zonesMap:e,hovered:t,draggingElements:a,isDragging:o,handleDropZoneIntersection:s}=z(),u=r.ref(null),m=r.computed(()=>t.zone.value===u.value),i=r.computed(()=>{if(!u.value||!o.value)return!1;const d=e.value.get(u.value);return d!=null&&d.groups.length?!Array.from(a.value.values()).some(l=>l.groups.length?!l.groups.some(c=>d.groups.includes(c)):!1):!0});return{elementRef:u,registerZone:()=>{if(!u.value)throw new Error("elementRef is not set");s("add",u.value),e.value.set(u.value,{node:u.value,groups:(n==null?void 0:n.groups)??[],events:(n==null?void 0:n.events)??{},data:(n==null?void 0:n.data)??void 0}),u.value.setAttribute("data-dnd-droppable","true")},unregisterZone:()=>{u.value&&(s("remove",u.value),e.value.delete(u.value))},isOvered:m,isAllowed:i}},ge=n=>{const{elementRef:e,registerZone:t,unregisterZone:a,isOvered:o,isAllowed:s}=fe(n);return r.onMounted(t),r.onBeforeUnmount(a),{elementRef:e,isOvered:o,isAllowed:s}},me=n=>{const{selectedElements:e,elementsMap:t}=z(),a=r.computed(()=>n.value?e.value.has(n.value):!1),o=r.computed(()=>{if(!n.value)return!1;for(const v of e.value)if(v&&T(v,n.value))return!0;return!1}),s=r.computed(()=>{if(!n.value)return!1;for(const v of e.value)if(v&&T(n.value,v))return!0;return!1}),u=()=>{n.value&&e.value.delete(n.value)},m=()=>{if(!(!n.value||!t.value.get(n.value))){if(o.value)for(const f of e.value)f&&T(f,n.value)&&e.value.delete(f);if(s.value)for(const f of e.value)f&&T(n.value,f)&&e.value.delete(f);e.value.add(n.value)}};return{handleUnselect:u,handleSelect:m,handleToggleSelect:()=>{n.value&&(e.value.has(n.value)?u():m())},isSelected:a,isParentOfSelected:o}};exports.DnDOperations=F;exports.default=ae;exports.getBoundingBox=R;exports.useDnDStore=z;exports.useDragContainer=W;exports.useDraggable=de;exports.useDroppable=ge;exports.useSelection=me;
1
+ "use strict";var ee=Object.defineProperty;var te=(n,e,t)=>e in n?ee(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var b=(n,e,t)=>te(n,typeof e!="symbol"?e+"":e,t);Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("vue"),Y=require("@vueuse/core"),w=class w{};b(w,"remove",(e,t)=>{if(!e||t===void 0)return;const[a]=e.splice(t,1);return a}),b(w,"insert",(e,t,a)=>{!e||t===void 0||e.splice(t,0,a)}),b(w,"move",(e,t,a,o)=>{if(!e||!a||t===void 0||o===void 0)return;const s=w.remove(e,t);w.insert(a,o,s)}),b(w,"swap",(e,t,a,o)=>{if(!e||!a||t===void 0||o===void 0)return;const s=e[t],u=a[o];e[t]=u,a[o]=s}),b(w,"copy",(e,t,a,o)=>{if(!e||t===void 0||!a||o===void 0)return;const s=e[t];w.insert(a,o,s)}),b(w,"applyTransfer",e=>{var o,s,u,m,i,v,f;const t=e.hovered.element.value,a=e.hovered.zone.value;if(t){const d=(s=(o=e.elementsMap.value.get(t))==null?void 0:o.data)==null?void 0:s.source,l=(m=(u=e.elementsMap.value.get(t))==null?void 0:u.data)==null?void 0:m.index,c=e.draggingElements.value.values().next().value,g=(i=c==null?void 0:c.data)==null?void 0:i.index,h=g!==void 0&&l!==void 0&&g>l?1:-1;Array.from(e.draggingElements.value.values()).sort((y,L)=>{var x,_;return h*((((x=y.data)==null?void 0:x.index)||0)-(((_=L.data)==null?void 0:_.index)||0))}).forEach(y=>{var L,x;return w.move((L=y.data)==null?void 0:L.source,(x=y.data)==null?void 0:x.index,d,l)})}else if(a){const d=(f=(v=e.zonesMap.value.get(a))==null?void 0:v.data)==null?void 0:f.source,l=d==null?void 0:d.length;Array.from(e.draggingElements.value.values()).sort((g,h)=>{var E,y;return(((E=h.data)==null?void 0:E.index)||0)-(((y=g.data)==null?void 0:y.index)||0)}).forEach(g=>{var h,E;return w.move((h=g.data)==null?void 0:h.source,(E=g.data)==null?void 0:E.index,d,l)})}}),b(w,"applyCopy",e=>{var o,s,u,m,i,v;const t=e.hovered.element.value,a=e.hovered.zone.value;if(t){const f=(s=(o=e.elementsMap.value.get(t))==null?void 0:o.data)==null?void 0:s.source,d=(m=(u=e.elementsMap.value.get(t))==null?void 0:u.data)==null?void 0:m.index;Array.from(e.draggingElements.value.values()).sort((c,g)=>{var h,E;return(((h=g.data)==null?void 0:h.index)||0)-(((E=c.data)==null?void 0:E.index)||0)}).forEach(c=>{var g,h;return w.copy((g=c.data)==null?void 0:g.source,(h=c.data)==null?void 0:h.index,f,d)})}else if(a){const f=(v=(i=e.zonesMap.value.get(a))==null?void 0:i.data)==null?void 0:v.source,d=f==null?void 0:f.length;Array.from(e.draggingElements.value.values()).sort((c,g)=>{var h,E;return(((h=g.data)==null?void 0:h.index)||0)-(((E=c.data)==null?void 0:E.index)||0)}).forEach(c=>{var g,h;return w.copy((g=c.data)==null?void 0:g.source,(h=c.data)==null?void 0:h.index,f,d)})}}),b(w,"applySwap",e=>{var o,s,u,m,i,v,f,d;const t=e.hovered.element.value,a=e.hovered.zone.value;if(t&&e.draggingElements.value.size===1){const l=e.draggingElements.value.values().next().value;w.swap((o=l==null?void 0:l.data)==null?void 0:o.source,(s=l==null?void 0:l.data)==null?void 0:s.index,(m=(u=e.elementsMap.value.get(t))==null?void 0:u.data)==null?void 0:m.source,(v=(i=e.elementsMap.value.get(t))==null?void 0:i.data)==null?void 0:v.index)}else if(a){const l=(d=(f=e.zonesMap.value.get(a))==null?void 0:f.data)==null?void 0:d.source,c=l==null?void 0:l.length;Array.from(e.draggingElements.value.values()).sort((h,E)=>{var y,L;return(((y=E.data)==null?void 0:y.index)||0)-(((L=h.data)==null?void 0:L.index)||0)}).forEach(h=>{var E,y;return w.move((E=h.data)==null?void 0:E.source,(y=h.data)==null?void 0:y.index,l,c)})}}),b(w,"applyRemove",e=>{Array.from(e.draggingElements.value.values()).sort((a,o)=>{var s,u;return(((s=o.data)==null?void 0:s.index)||0)-(((u=a.data)==null?void 0:u.index)||0)}).forEach(a=>{var o,s;(o=a.data)!=null&&o.source&&((s=a.data)==null?void 0:s.index)!==void 0&&w.remove(a.data.source,a.data.index)})}),b(w,"applyInsert",(e,t)=>{var s,u,m,i,v,f;const a=e.hovered.element.value,o=e.hovered.zone.value;if(a&&t.length>0){const d=(u=(s=e.elementsMap.value.get(a))==null?void 0:s.data)==null?void 0:u.source,l=(i=(m=e.elementsMap.value.get(a))==null?void 0:m.data)==null?void 0:i.index;t.forEach(c=>{w.insert(d,l,c)})}else if(o){const d=(f=(v=e.zonesMap.value.get(o))==null?void 0:v.data)==null?void 0:f.source,l=d==null?void 0:d.length;t.forEach(c=>{w.insert(d,l,c)})}});let F=w;const z=Y.createGlobalState(()=>{const n=r.ref(new Map),e=r.computed(()=>n.value.size>0),t={component:r.ref(null),ref:r.shallowRef(null),options:r.shallowRef(null)},a=r.ref(new Map),o=r.ref(new Set),s=r.ref(new Map),u=r.ref(new Set),m=r.ref(new Set),i=new IntersectionObserver(B=>{B.forEach(p=>m.value[p.isIntersecting?"add":"delete"](p.target))}),v=new IntersectionObserver(B=>{B.forEach(p=>u.value[p.isIntersecting?"add":"delete"](p.target))}),f=(B,p)=>{B==="add"?i.observe(p):(i.unobserve(p),m.value.delete(p))},d=(B,p)=>{B==="add"?v.observe(p):(v.unobserve(p),u.value.delete(p))},l={start:r.shallowRef(null),current:r.shallowRef(null),offset:{percent:r.shallowRef(null),pixel:r.shallowRef(null)}},{w:c,s:g,a:h,d:E,ctrl:y,shift:L,alt:x,meta:_}=Y.useMagicKeys(),U={zone:r.shallowRef(null),element:r.shallowRef(null)};return{draggingElements:n,isDragging:e,activeContainer:t,elementsMap:a,selectedElements:o,zonesMap:s,visibleZones:u,visibleElements:m,pointerPosition:l,keyboard:{w:c,s:g,a:h,d:E,ctrl:y,shift:L,alt:x,meta:_},hovered:U,handleDragElementIntersection:f,handleDropZoneIntersection:d}}),W=n=>{const e=r.ref(null),{draggingElements:t,pointerPosition:a,isDragging:o,activeContainer:s}=z();return r.onMounted(()=>{s.ref=e,s.options.value=n??null}),r.onUnmounted(()=>{s.ref.value=null,s.options.value=null}),{elementRef:e,draggingElements:t,pointerPosition:a,isDragging:o}},ne=["innerHTML"],re=r.defineComponent({__name:"DefaultOverlay",setup(n){const{elementRef:e,pointerPosition:t,isDragging:a,draggingElements:o}=W(),s=r.computed(()=>{var u,m,i,v;return{transform:`translate3d(${(((u=t.current.value)==null?void 0:u.x)??0)-(((m=t.offset.pixel.value)==null?void 0:m.x)??0)}px, ${(((i=t.current.value)==null?void 0:i.y)??0)-(((v=t.offset.pixel.value)==null?void 0:v.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(u,m)=>r.unref(a)?(r.openBlock(),r.createElementBlock("div",{key:0,ref_key:"elementRef",ref:e,style:r.normalizeStyle(s.value)},[(r.openBlock(!0),r.createElementBlock(r.Fragment,null,r.renderList(r.unref(o),([i,v])=>{var f,d;return r.openBlock(),r.createElementBlock("div",{key:v.id,innerHTML:v.initialHTML,style:r.normalizeStyle({width:`${(f=v.initialRect)==null?void 0:f.width}px`,height:`${(d=v.initialRect)==null?void 0:d.height}px`})},null,12,ne)}),128))],4)):r.createCommentVNode("",!0)}}),$=r.defineComponent({__name:"DragOverlay",setup(n){const{activeContainer:e}=z(),t=r.computed(()=>e.component.value??re);return(a,o)=>r.unref(e).options.value?(r.openBlock(),r.createBlock(r.Transition,{key:0,name:r.unref(e).options.value.name,duration:r.unref(e).options.value.duration,"enter-from-class":r.unref(e).options.value.enterFromClass,"enter-to-class":r.unref(e).options.value.enterToClass,"enter-active-class":r.unref(e).options.value.enterActiveClass,"leave-from-class":r.unref(e).options.value.leaveFromClass,"leave-to-class":r.unref(e).options.value.leaveToClass,"leave-active-class":r.unref(e).options.value.leaveActiveClass,mode:r.unref(e).options.value.mode,type:r.unref(e).options.value.type,css:r.unref(e).options.value.css,appear:!0,"appear-active-class":r.unref(e).options.value.appearActiveClass,"appear-from-class":r.unref(e).options.value.appearFromClass,"appear-to-class":r.unref(e).options.value.appearToClass,persisted:r.unref(e).options.value.persisted,onEnter:r.unref(e).options.value.onEnter,onLeave:r.unref(e).options.value.onLeave,onBeforeEnter:r.unref(e).options.value.onBeforeEnter,onBeforeLeave:r.unref(e).options.value.onBeforeLeave,onBeforeAppear:r.unref(e).options.value.onBeforeAppear,onAfterEnter:r.unref(e).options.value.onAfterEnter,onAfterLeave:r.unref(e).options.value.onAfterLeave,onAfterAppear:r.unref(e).options.value.onAfterAppear},{default:r.withCtx(()=>[(r.openBlock(),r.createBlock(r.resolveDynamicComponent(t.value)))]),_:1},8,["name","duration","enter-from-class","enter-to-class","enter-active-class","leave-from-class","leave-to-class","leave-active-class","mode","type","css","appear-active-class","appear-from-class","appear-to-class","persisted","onEnter","onLeave","onBeforeEnter","onBeforeLeave","onBeforeAppear","onAfterEnter","onAfterLeave","onAfterAppear"])):(r.openBlock(),r.createBlock(r.resolveDynamicComponent(t.value),{key:1}))}}),ae={install(n){n.component("DragOverlay",$);const e=n.mount;n.mount=function(a){const o=e.call(this,a),s=typeof a=="string"?document.querySelector(a):a;if(s&&s instanceof Element&&!s.querySelector("#vue-dnd-kit-overlay")){const u=document.createElement("div");u.id="vue-dnd-kit-overlay",u.style.pointerEvents="none",s.appendChild(u);const m=r.createVNode($);r.render(m,u),n.__VUE_DND_KIT_OVERLAY__={container:u,vnode:m};const i=z();n.__VUE_DND_KIT_STORE__=i}return o};const t=n.unmount;n.unmount=function(){return n.__VUE_DND_KIT_OVERLAY__&&(r.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,R=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}),le=(n,e)=>{const t=R(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,a=e.y-n.y;return Math.sqrt(t*t+a*a)},J=(n,e)=>{const t=Math.max(0,Math.min(n.x+n.width,e.x+e.width)-Math.max(n.x,e.x)),a=Math.max(0,Math.min(n.y+n.height,e.y+e.height)-Math.max(n.y,e.y)),o=t*a,s=n.width*n.height,u=e.width*e.height;return(o/s*100+o/u*100)/2},Q="data-vue-dnd-kit-draggable",C=n=>{n.preventDefault()},oe=n=>{const{elementsMap:e,draggingElements:t,hovered:a,selectedElements:o,isDragging:s,visibleElements:u,handleDragElementIntersection:m}=z(),i=r.ref(null),v=r.computed(()=>u.value.has(i.value)&&a.element.value===i.value),f=r.shallowRef((n==null?void 0:n.id)||r.useId()),d=r.computed(()=>!i.value||!u.value.has(i.value)?!1:t.value.has(i.value)),l=r.computed(()=>{if(!i.value||!s.value||!u.value.has(i.value))return!1;const h=e.value.get(i.value);return h!=null&&h.groups.length?!Array.from(t.value.entries()).some(([E,y])=>y.groups.length?!y.groups.some(L=>h.groups.includes(L)):!1):!0});return{elementRef:i,registerElement:()=>{if(!i.value)throw new Error("ElementRef is not set");e.value.set(i.value,{node:i.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:f.value}),m("add",i.value),i.value.addEventListener("dragstart",C),i.value.addEventListener("drag",C),i.value.setAttribute(Q,"true"),i.value.setAttribute("draggable","false")},unregisterElement:()=>{i.value&&(e.value.delete(i.value),o.value.delete(i.value),i.value.removeEventListener("dragstart",C),i.value.removeEventListener("drag",C),i.value.removeAttribute(Q),i.value.removeAttribute("draggable"))},isDragging:d,isOvered:v,isAllowed:l,id:f}},T=(n,e)=>n?e.contains(n):!1,se=n=>{var f,d;const e=R(n.activeContainer.ref.value),t=H(e),a=((f=n.pointerPosition.current.value)==null?void 0:f.x)??0,o=((d=n.pointerPosition.current.value)==null?void 0:d.y)??0,u=!(e&&a>=e.x&&a<=e.x+e.width&&o>=e.y&&o<=e.y+e.height),m=Array.from(n.draggingElements.value.keys()),i=Array.from(n.visibleElements.value.entries()).filter(([l,c])=>{if(!l)return!1;const g=R(l);return g&&e&&G(g,e)}).map(([l,c])=>{const g=R(l),h=H(g),E=a>=g.x&&a<=g.x+g.width&&o>=g.y&&o<=g.y+g.height,y=J(g,e),L=j(t,h);let x=0;for(const[_,U]of n.visibleElements.value.entries())_!==l&&_&&l&&T(l,_)&&x++;return{element:c,node:l,isPointerInElement:E,overlapPercent:y,depth:x,centerDistance:L}}).sort((l,c)=>{if(!u){if(l.isPointerInElement&&c.isPointerInElement)return c.depth-l.depth;if(l.isPointerInElement!==c.isPointerInElement)return l.isPointerInElement?-1:1}return Math.abs(l.overlapPercent-c.overlapPercent)<=1?l.centerDistance-c.centerDistance:c.overlapPercent-l.overlapPercent}),v=Array.from(n.visibleZones.value.entries()).filter(([l,c])=>{if(!l||m.some(h=>h&&T(l,h)))return!1;const g=R(l);return g&&e&&G(g,e)}).map(([l,c])=>{const g=R(l),h=H(g),E=a>=g.x&&a<=g.x+g.width&&o>=g.y&&o<=g.y+g.height,y=J(g,e),L=j(t,h);let x=0;for(const[_,U]of n.visibleZones.value.entries())_!==l&&_&&l&&T(l,_)&&x++;return{zone:c,node:l,isPointerInElement:E,overlapPercent:y,depth:x,centerDistance:L}}).sort((l,c)=>{if(!u){if(l.isPointerInElement&&c.isPointerInElement)return c.depth-l.depth;if(l.isPointerInElement!==c.isPointerInElement)return l.isPointerInElement?-1:1}return Math.abs(l.overlapPercent-c.overlapPercent)<=1?l.centerDistance-c.centerDistance:c.overlapPercent-l.overlapPercent});return[...i.map(l=>l.node),...v.map(l=>l.node)]},ue=(n,e)=>{const{pointerPosition:t,keyboard:a}=z(),o=(e==null?void 0:e.moveStep)||10;return{onKeyboardStart:i=>{var l;C(i);const v=R(n.value);(l=n.value)==null||l.blur();const f=v.x+v.width/2,d=v.y+v.height/2;t.start.value={x:f,y:d},t.current.value={x:f,y:d},t.offset.pixel.value={x:v.width/2,y:v.height/2},t.offset.percent.value={x:50,y:50}},onKeyboardMove:()=>{if(!t.current.value)return;const i=t.current.value.x,v=t.current.value.y;let f=i,d=v;a.w.value&&(d-=o),a.s.value&&(d+=o),a.a.value&&(f-=o),a.d.value&&(f+=o),t.current.value={x:f,y:d}},onKeyboardEnd:()=>{t.current.value=null,t.start.value=null,t.offset.pixel.value=null,t.offset.percent.value=null}}},ie=n=>{const e=z();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:u,percent:m}=le(n.value,{x:s.clientX,y:s.clientY});e.pointerPosition.offset.pixel.value=u,e.pointerPosition.offset.percent.value=m},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 U,B;const t=z(),{onPointerStart:a,onPointerMove:o,onPointerEnd:s}=ie(n),{onKeyboardStart:u,onKeyboardMove:m,onKeyboardEnd:i}=ue(n,e==null?void 0:e.keyboard);let v=null;const f=p=>{var I,A;if(!p)return new Map;const S=t.selectedElements.value.has(p);if(t.selectedElements.value.size>0&&S){const D=new Map;return t.selectedElements.value.forEach(k=>{var Z,O;const K=t.elementsMap.value.get(k);K&&D.set(k,{...K,initialHTML:((Z=K.node)==null?void 0:Z.outerHTML)??"",initialRect:(O=K.node)==null?void 0:O.getBoundingClientRect()})}),D}t.selectedElements.value.clear();const P=t.elementsMap.value.get(p);if(!P)return new Map;const M=new Map;return M.set(p,{...P,initialHTML:((I=P.node)==null?void 0:I.outerHTML)??"",initialRect:(A=P.node)==null?void 0:A.getBoundingClientRect()}),M},d=p=>{if(!p)return{element:null,zone:null};const S=Array.isArray(p)?p:[p],P=Array.from(t.draggingElements.value.keys()),M=S.find(A=>{if(!t.visibleZones.value.has(A))return!1;const D=t.zonesMap.value.get(A);return!(!D||P.some(k=>k&&(k===D.node||T(D.node,k)))||D.groups.length&&!!Array.from(t.draggingElements.value.values()).some(K=>K.groups.length?!K.groups.some(Z=>D.groups.includes(Z)):!1))});return M?{element:S.find(A=>t.visibleElements.value.has(A)&&t.elementsMap.value.has(A)&&!P.some(D=>D&&(D===A||T(A,D)||T(D,A)))&&(A===M||T(A,M)))||null,zone:M}:{element:null,zone:null}},l=((U=e==null?void 0:e.sensor)==null?void 0:U.setup)||se,c=p=>{var M,I,A,D,k,K,Z,O,X,N,V,q;const S=t.hovered.element.value,P=t.hovered.zone.value;t.hovered.element.value=p.element,t.hovered.zone.value=p.zone,S&&t.hovered.element.value!==S&&((A=(I=(M=t.elementsMap.value.get(S))==null?void 0:M.events)==null?void 0:I.onLeave)==null||A.call(I,t),t.hovered.element.value&&((K=(k=(D=t.elementsMap.value.get(t.hovered.element.value))==null?void 0:D.events)==null?void 0:k.onHover)==null||K.call(k,t))),P&&t.hovered.zone.value!==P&&((X=(O=(Z=t.zonesMap.value.get(P))==null?void 0:Z.events)==null?void 0:O.onLeave)==null||X.call(O,t),t.hovered.zone.value&&((q=(V=(N=t.zonesMap.value.get(t.hovered.zone.value))==null?void 0:N.events)==null?void 0:V.onHover)==null||q.call(V,t)))},g=Y.useThrottleFn(()=>{const p=l(t),S=d(p);c(S)},((B=e==null?void 0:e.sensor)==null?void 0:B.throttle)??0),h=()=>{g(),v=requestAnimationFrame(h)},E=()=>h(),y=()=>{v!==null&&(cancelAnimationFrame(v),v=null)};return{activate:p=>{t.draggingElements.value=f(n.value),t.draggingElements.value.forEach(S=>{var P,M;return(M=(P=S.events).onStart)==null?void 0:M.call(P,t)}),p instanceof PointerEvent?a(p):u(p),E()},track:p=>{t.draggingElements.value.forEach(S=>{var P,M;return(M=(P=S.events).onMove)==null?void 0:M.call(P,t)}),p instanceof KeyboardEvent?m():o(p)},deactivate:(p=!0)=>{var S,P;if(s(),i(),p){if(t.hovered.zone.value){const M=t.zonesMap.value.get(t.hovered.zone.value);(P=M==null?void 0:(S=M.events).onDrop)==null||P.call(S,t)}else t.draggingElements.value.forEach(M=>{var I,A;return(A=(I=M.events).onEnd)==null?void 0:A.call(I,t)});t.selectedElements.value.clear()}t.draggingElements.value.clear(),t.hovered.zone.value=null,t.hovered.element.value=null,y()}}},ve=Y.createGlobalState(()=>{let n="",e="",t="",a=null,o=null,s=null,u=null,m=null;const{activeContainer:i}=z(),v=()=>{const c=document.body;n=c.style.userSelect,c.style.userSelect="none",window.addEventListener("contextmenu",C),window.addEventListener("selectstart",C),window.addEventListener("touchstart",C),window.addEventListener("touchmove",C)},f=()=>{const c=document.body;c.style.userSelect=n,c.style.touchAction=e,c.style.overscrollBehavior=t,window.removeEventListener("contextmenu",C),window.removeEventListener("selectstart",C),window.removeEventListener("touchstart",C),window.removeEventListener("touchmove",C)},d=()=>{a&&(document.removeEventListener("pointermove",a),a=null),o&&(document.removeEventListener("pointerup",o),o=null),s&&(s=null),u&&(document.removeEventListener("wheel",u),u=null),m&&(document.removeEventListener("keydown",m),document.removeEventListener("keypress",m),document.removeEventListener("keyup",m),m=null)};return{handleDragStart:(c,g,h)=>{d(),c.target.blur(),h!=null&&h.container&&(i.component.value=r.markRaw(h.container));const{activate:E,track:y,deactivate:L}=ce(g,h);o=()=>{i.component.value=null,f(),L(!0),d()},s=()=>{i.component.value=null,f(),L(!1),d()},a=x=>y(x),u=x=>y(x),m=x=>{x.type==="keyup"&&(x.code==="Escape"&&(s==null||s()),x.code==="Enter"&&(o==null||o())),y(x)},v(),E(c),document.addEventListener("pointermove",a),document.addEventListener("pointerup",o),document.addEventListener("wheel",u),document.addEventListener("keydown",m),document.addEventListener("keypress",m),document.addEventListener("keyup",m)}}}),de=n=>{const{id:e,elementRef:t,isDragging:a,isOvered:o,isAllowed:s,registerElement:u,unregisterElement:m}=oe(n),{pointerPosition:i}=z(),{handleDragStart:v}=ve(),f=d=>v(d,t,n);return r.onMounted(u),r.onBeforeUnmount(m),{pointerPosition:i,elementRef:t,isDragging:a,isOvered:o,isAllowed:s,handleDragStart:f,id:e}},fe=n=>{const{zonesMap:e,hovered:t,draggingElements:a,isDragging:o,handleDropZoneIntersection:s}=z(),u=r.ref(null),m=r.computed(()=>t.zone.value===u.value),i=r.computed(()=>{if(!u.value||!o.value)return!1;const d=e.value.get(u.value);return d!=null&&d.groups.length?!Array.from(a.value.values()).some(l=>l.groups.length?!l.groups.some(c=>d.groups.includes(c)):!1):!0});return{elementRef:u,registerZone:()=>{if(!u.value)throw new Error("elementRef is not set");s("add",u.value),e.value.set(u.value,{node:u.value,groups:(n==null?void 0:n.groups)??[],events:(n==null?void 0:n.events)??{},data:(n==null?void 0:n.data)??void 0}),u.value.setAttribute("data-dnd-droppable","true")},unregisterZone:()=>{u.value&&(s("remove",u.value),e.value.delete(u.value))},isOvered:m,isAllowed:i}},ge=n=>{const{elementRef:e,registerZone:t,unregisterZone:a,isOvered:o,isAllowed:s}=fe(n);return r.onMounted(t),r.onBeforeUnmount(a),{elementRef:e,isOvered:o,isAllowed:s}},me=n=>{const{selectedElements:e,elementsMap:t}=z(),a=r.computed(()=>n.value?e.value.has(n.value):!1),o=r.computed(()=>{if(!n.value)return!1;for(const v of e.value)if(v&&T(v,n.value))return!0;return!1}),s=r.computed(()=>{if(!n.value)return!1;for(const v of e.value)if(v&&T(n.value,v))return!0;return!1}),u=()=>{n.value&&e.value.delete(n.value)},m=()=>{if(!(!n.value||!t.value.get(n.value))){if(o.value)for(const f of e.value)f&&T(f,n.value)&&e.value.delete(f);if(s.value)for(const f of e.value)f&&T(n.value,f)&&e.value.delete(f);e.value.add(n.value)}};return{handleUnselect:u,handleSelect:m,handleToggleSelect:()=>{n.value&&(e.value.has(n.value)?u():m())},isSelected:a,isParentOfSelected:o}};exports.DnDOperations=F;exports.default=ae;exports.getBoundingBox=R;exports.useDnDStore=z;exports.useDragContainer=W;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';\r\n\r\nexport class DnDOperations {\r\n static remove = (source?: any[], index?: number) => {\r\n if (!source || index === undefined) return;\r\n const [item] = source.splice(index, 1);\r\n return item;\r\n };\r\n static insert = (target?: any[], index?: number, item?: any) => {\r\n if (!target || index === undefined) return;\r\n target.splice(index, 0, item);\r\n };\r\n static move = (\r\n source?: any[],\r\n sourceIndex?: number,\r\n target?: any[],\r\n targetIndex?: number\r\n ) => {\r\n if (\r\n !source ||\r\n !target ||\r\n sourceIndex === undefined ||\r\n targetIndex === undefined\r\n )\r\n return;\r\n const item = DnDOperations.remove(source, sourceIndex);\r\n DnDOperations.insert(target, targetIndex, item);\r\n };\r\n static swap = (\r\n source?: any[],\r\n sourceIndex?: number,\r\n target?: any[],\r\n targetIndex?: number\r\n ) => {\r\n if (\r\n !source ||\r\n !target ||\r\n sourceIndex === undefined ||\r\n targetIndex === undefined\r\n )\r\n return;\r\n\r\n const sourceItem = source[sourceIndex];\r\n const targetItem = target[targetIndex];\r\n\r\n source[sourceIndex] = targetItem;\r\n target[targetIndex] = sourceItem;\r\n };\r\n static copy = (\r\n source?: any[],\r\n index?: number,\r\n target?: any[],\r\n targetIndex?: number\r\n ) => {\r\n if (!source || index === undefined || !target || targetIndex === undefined)\r\n return;\r\n const item = source[index];\r\n DnDOperations.insert(target, targetIndex, item);\r\n };\r\n static applyTransfer = (store: IDnDStore) => {\r\n const hoveredElement = store.hovered.element.value;\r\n const hoveredZone = store.hovered.zone.value;\r\n\r\n if (hoveredElement) {\r\n const targetSource =\r\n store.elementsMap.value.get(hoveredElement)?.data?.source;\r\n const targetIndex =\r\n store.elementsMap.value.get(hoveredElement)?.data?.index;\r\n\r\n const firstElement = store.draggingElements.value.values().next().value;\r\n const firstIndex = firstElement?.data?.index;\r\n\r\n const sortDirection =\r\n firstIndex !== undefined &&\r\n targetIndex !== undefined &&\r\n firstIndex > targetIndex\r\n ? 1\r\n : -1;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort(\r\n (a, b) => sortDirection * ((a.data?.index || 0) - (b.data?.index || 0))\r\n );\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n } else if (hoveredZone) {\r\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\r\n const targetIndex = targetSource?.length;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n }\r\n };\r\n\r\n static applyCopy = (store: IDnDStore) => {\r\n const hoveredElement = store.hovered.element.value;\r\n const hoveredZone = store.hovered.zone.value;\r\n\r\n if (hoveredElement) {\r\n const targetSource =\r\n store.elementsMap.value.get(hoveredElement)?.data?.source;\r\n const targetIndex =\r\n store.elementsMap.value.get(hoveredElement)?.data?.index;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.copy(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n } else if (hoveredZone) {\r\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\r\n const targetIndex = targetSource?.length;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.copy(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n }\r\n };\r\n static applySwap = (store: IDnDStore) => {\r\n const hoveredElement = store.hovered.element.value;\r\n const hoveredZone = store.hovered.zone.value;\r\n\r\n if (hoveredElement && store.draggingElements.value.size === 1) {\r\n const element = store.draggingElements.value.values().next().value;\r\n DnDOperations.swap(\r\n element?.data?.source,\r\n element?.data?.index,\r\n store.elementsMap.value.get(hoveredElement)?.data?.source,\r\n store.elementsMap.value.get(hoveredElement)?.data?.index\r\n );\r\n } else if (hoveredZone) {\r\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\r\n const targetIndex = targetSource?.length;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n }\r\n };\r\n static applyRemove = (store: IDnDStore) => {\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) => {\r\n if (element.data?.source && element.data?.index !== undefined) {\r\n DnDOperations.remove(element.data.source, element.data.index);\r\n }\r\n });\r\n };\r\n static applyInsert = (store: IDnDStore, items: any[]) => {\r\n const hoveredElement = store.hovered.element.value;\r\n const hoveredZone = store.hovered.zone.value;\r\n\r\n if (hoveredElement && items.length > 0) {\r\n const targetSource =\r\n store.elementsMap.value.get(hoveredElement)?.data?.source;\r\n const targetIndex =\r\n store.elementsMap.value.get(hoveredElement)?.data?.index;\r\n\r\n items.forEach((item) => {\r\n DnDOperations.insert(targetSource, targetIndex, item);\r\n });\r\n } else if (hoveredZone) {\r\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\r\n const targetIndex = targetSource?.length;\r\n\r\n items.forEach((item) => {\r\n DnDOperations.insert(targetSource, targetIndex, item);\r\n });\r\n }\r\n };\r\n}\r\n","import type {\r\n IDragElement,\r\n IDraggingElement,\r\n IDropZone,\r\n IPoint,\r\n} from '../types';\r\nimport {\r\n computed,\r\n ref,\r\n shallowRef,\r\n type Component,\r\n type TransitionProps,\r\n} from 'vue';\r\nimport { createGlobalState, useMagicKeys } from '@vueuse/core';\r\n\r\nexport const useDnDStore = createGlobalState(() => {\r\n const draggingElements = ref<Map<HTMLElement | Element, IDraggingElement>>(\r\n new Map()\r\n );\r\n const isDragging = computed<boolean>(() => draggingElements.value.size > 0);\r\n\r\n const activeContainer = {\r\n component: ref<Component | null>(null),\r\n ref: shallowRef<HTMLElement | null>(null),\r\n options: shallowRef<TransitionProps | null>(null),\r\n };\r\n\r\n const elementsMap = ref<Map<HTMLElement | Element, IDragElement>>(new Map());\r\n const selectedElements = ref<Set<HTMLElement | Element>>(new Set());\r\n const zonesMap = ref<Map<HTMLElement | Element, IDropZone>>(new Map());\r\n const visibleZones = ref<Set<HTMLElement | Element>>(new Set());\r\n const visibleElements = ref<Set<HTMLElement | Element>>(new Set());\r\n\r\n const elementObserver = new IntersectionObserver((entries) => {\r\n entries.forEach((entry) =>\r\n visibleElements.value[entry.isIntersecting ? 'add' : 'delete'](\r\n entry.target\r\n )\r\n );\r\n });\r\n const zoneObserver = new IntersectionObserver((entries) => {\r\n entries.forEach((entry) =>\r\n visibleZones.value[entry.isIntersecting ? 'add' : 'delete'](entry.target)\r\n );\r\n });\r\n\r\n const handleDragElementIntersection = (\r\n action: 'add' | 'remove',\r\n element: HTMLElement | Element\r\n ) => {\r\n if (action === 'add') {\r\n elementObserver.observe(element);\r\n } else {\r\n elementObserver.unobserve(element);\r\n visibleElements.value.delete(element);\r\n }\r\n };\r\n\r\n const handleDropZoneIntersection = (\r\n action: 'add' | 'remove',\r\n element: HTMLElement | Element\r\n ) => {\r\n if (action === 'add') {\r\n zoneObserver.observe(element);\r\n } else {\r\n zoneObserver.unobserve(element);\r\n visibleZones.value.delete(element);\r\n }\r\n };\r\n\r\n const pointerPosition = {\r\n start: shallowRef<IPoint | null>(null),\r\n current: shallowRef<IPoint | null>(null),\r\n offset: {\r\n percent: shallowRef<IPoint | null>(null),\r\n pixel: shallowRef<IPoint | null>(null),\r\n },\r\n };\r\n\r\n const { w, s, a, d, ctrl, shift, alt, meta } = useMagicKeys();\r\n\r\n const hovered = {\r\n zone: shallowRef<HTMLElement | Element | null>(null),\r\n element: shallowRef<HTMLElement | Element | null>(null),\r\n };\r\n\r\n return {\r\n draggingElements,\r\n isDragging,\r\n activeContainer,\r\n elementsMap,\r\n selectedElements,\r\n zonesMap,\r\n visibleZones,\r\n visibleElements,\r\n pointerPosition,\r\n keyboard: {\r\n w,\r\n s,\r\n a,\r\n d,\r\n ctrl,\r\n shift,\r\n alt,\r\n meta,\r\n },\r\n hovered,\r\n handleDragElementIntersection,\r\n handleDropZoneIntersection,\r\n };\r\n});\r\n","import { onUnmounted, onMounted, ref, type TransitionProps } from 'vue';\r\n\r\nimport { useDnDStore } from './useDnDStore';\r\n\r\nexport const useDragContainer = (options?: TransitionProps) => {\r\n const elementRef = ref<HTMLElement | null>(null);\r\n\r\n const { draggingElements, pointerPosition, isDragging, activeContainer } =\r\n useDnDStore();\r\n\r\n onMounted(() => {\r\n activeContainer.ref = elementRef;\r\n activeContainer.options.value = options ?? null;\r\n });\r\n\r\n onUnmounted(() => {\r\n activeContainer.ref.value = null;\r\n activeContainer.options.value = null;\r\n });\r\n\r\n return {\r\n elementRef,\r\n draggingElements,\r\n pointerPosition,\r\n isDragging,\r\n };\r\n};\r\n","<script setup lang=\"ts\">\r\n import { computed, CSSProperties } from 'vue';\r\n import { useDragContainer } from '../composables/useDragContainer';\r\n\r\n const { elementRef, pointerPosition, isDragging, draggingElements } =\r\n useDragContainer();\r\n\r\n const computedStyle = computed<CSSProperties>(() => ({\r\n transform: `translate3d(${\r\n (pointerPosition.current.value?.x ?? 0) -\r\n (pointerPosition.offset.pixel.value?.x ?? 0)\r\n }px, ${\r\n (pointerPosition.current.value?.y ?? 0) -\r\n (pointerPosition.offset.pixel.value?.y ?? 0)\r\n }px, 0)`,\r\n zIndex: 1000,\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n transition: '0.3s cubic-bezier(0.165, 0.84, 0.44, 1)',\r\n }));\r\n</script>\r\n\r\n<template>\r\n <div\r\n v-if=\"isDragging\"\r\n ref=\"elementRef\"\r\n :style=\"computedStyle\"\r\n >\r\n <div\r\n v-for=\"[_, element] in draggingElements\"\r\n :key=\"element.id\"\r\n v-html=\"element.initialHTML\"\r\n :style=\"{\r\n width: `${element.initialRect?.width}px`,\r\n height: `${element.initialRect?.height}px`,\r\n }\"\r\n />\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n import { computed, Transition } from 'vue';\r\n import { useDnDStore } from '../composables/useDnDStore';\r\n import DefaultOverlay from './DefaultOverlay.vue';\r\n\r\n const { activeContainer } = useDnDStore();\r\n\r\n const overlay = computed(() => {\r\n return activeContainer.component.value ?? DefaultOverlay;\r\n });\r\n</script>\r\n\r\n<template>\r\n <Transition\r\n v-if=\"activeContainer.options.value\"\r\n :name=\"activeContainer.options.value.name\"\r\n :duration=\"activeContainer.options.value.duration\"\r\n :enter-from-class=\"activeContainer.options.value.enterFromClass\"\r\n :enter-to-class=\"activeContainer.options.value.enterToClass\"\r\n :enter-active-class=\"activeContainer.options.value.enterActiveClass\"\r\n :leave-from-class=\"activeContainer.options.value.leaveFromClass\"\r\n :leave-to-class=\"activeContainer.options.value.leaveToClass\"\r\n :leave-active-class=\"activeContainer.options.value.leaveActiveClass\"\r\n :mode=\"activeContainer.options.value.mode\"\r\n :type=\"activeContainer.options.value.type\"\r\n :css=\"activeContainer.options.value.css\"\r\n :appear=\"activeContainer.options.value.appear\"\r\n :appear-active-class=\"activeContainer.options.value.appearActiveClass\"\r\n :appear-from-class=\"activeContainer.options.value.appearFromClass\"\r\n :appear-to-class=\"activeContainer.options.value.appearToClass\"\r\n :persisted=\"activeContainer.options.value.persisted\"\r\n @enter=\"activeContainer.options.value.onEnter\"\r\n @leave=\"activeContainer.options.value.onLeave\"\r\n @before-enter=\"activeContainer.options.value.onBeforeEnter\"\r\n @before-leave=\"activeContainer.options.value.onBeforeLeave\"\r\n @before-appear=\"activeContainer.options.value.onBeforeAppear\"\r\n @after-enter=\"activeContainer.options.value.onAfterEnter\"\r\n @after-leave=\"activeContainer.options.value.onAfterLeave\"\r\n @after-appear=\"activeContainer.options.value.onAfterAppear\"\r\n >\r\n <component :is=\"overlay\" />\r\n </Transition>\r\n\r\n <component\r\n v-else\r\n :is=\"overlay\"\r\n />\r\n</template>\r\n","import { createVNode, render } from 'vue';\r\n\r\nimport type { App } from 'vue';\r\nimport DragOverlay from './components/DragOverlay.vue';\r\nimport { useDnDStore } from './composables/useDnDStore';\r\n\r\nexport const VueDndKitPlugin = {\r\n install(app: App) {\r\n app.component('DragOverlay', DragOverlay);\r\n const originalMount = app.mount;\r\n app.mount = function (rootContainer) {\r\n const instance = originalMount.call(this, rootContainer);\r\n\r\n const rootEl =\r\n typeof rootContainer === 'string'\r\n ? document.querySelector(rootContainer)\r\n : rootContainer;\r\n\r\n if (rootEl && rootEl instanceof Element) {\r\n if (!rootEl.querySelector('#vue-dnd-kit-overlay')) {\r\n const overlayContainer = document.createElement('div');\r\n\r\n overlayContainer.id = 'vue-dnd-kit-overlay';\r\n overlayContainer.style.pointerEvents = 'none';\r\n\r\n rootEl.appendChild(overlayContainer);\r\n const vnode = createVNode(DragOverlay);\r\n render(vnode, overlayContainer);\r\n\r\n app.__VUE_DND_KIT_OVERLAY__ = {\r\n container: overlayContainer,\r\n vnode,\r\n };\r\n\r\n const store = useDnDStore();\r\n app.__VUE_DND_KIT_STORE__ = store;\r\n }\r\n }\r\n\r\n return instance;\r\n };\r\n\r\n // Модифицируем метод unmount для очистки\r\n const originalUnmount = app.unmount;\r\n app.unmount = function () {\r\n if (app.__VUE_DND_KIT_OVERLAY__) {\r\n render(null, app.__VUE_DND_KIT_OVERLAY__.container);\r\n delete app.__VUE_DND_KIT_OVERLAY__;\r\n }\r\n return originalUnmount.call(this);\r\n };\r\n },\r\n};\r\n\r\ndeclare module '@vue/runtime-core' {\r\n export interface App {\r\n __VUE_DND_KIT_OVERLAY__?: {\r\n container: HTMLElement;\r\n vnode: any;\r\n };\r\n __VUE_DND_KIT_STORE__?: ReturnType<typeof useDnDStore>;\r\n }\r\n}\r\n","import type { IBoundingBox, IPoint } from '../types';\r\n\r\nexport const checkCollision = (\r\n boxA: IBoundingBox,\r\n boxB: IBoundingBox\r\n): boolean => {\r\n return (\r\n boxA.x < boxB.x + boxB.width &&\r\n boxA.x + boxA.width > boxB.x &&\r\n boxA.y < boxB.y + boxB.height &&\r\n boxA.y + boxA.height > boxB.y\r\n );\r\n};\r\n\r\nexport const getBoundingBox = (element: HTMLElement | null): IBoundingBox => {\r\n if (!element)\r\n return {\r\n x: 0,\r\n y: 0,\r\n width: 0,\r\n height: 0,\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n top: 0,\r\n };\r\n\r\n const rect = element.getBoundingClientRect();\r\n\r\n return {\r\n bottom: rect.bottom,\r\n left: rect.left,\r\n right: rect.right,\r\n top: rect.top,\r\n x: rect.x,\r\n y: rect.y,\r\n width: rect.width,\r\n height: rect.height,\r\n };\r\n};\r\n\r\nexport const getCenter = (box: IBoundingBox): IPoint => ({\r\n x: box.x + box.width / 2,\r\n y: box.y + box.height / 2,\r\n});\r\n\r\nexport const getOffset = (element: HTMLElement | null, pointer: IPoint) => {\r\n const rect = getBoundingBox(element);\r\n return {\r\n pixel: {\r\n x: pointer.x - rect.x,\r\n y: pointer.y - rect.y,\r\n },\r\n percent: {\r\n x: ((pointer.x - rect.x) / rect.width) * 100,\r\n y: ((pointer.y - rect.y) / rect.height) * 100,\r\n },\r\n };\r\n};\r\n\r\nexport const getDistance = (pointA: IPoint, pointB: IPoint): number => {\r\n const dx = pointB.x - pointA.x;\r\n const dy = pointB.y - pointA.y;\r\n return Math.sqrt(dx * dx + dy * dy);\r\n};\r\n\r\nexport const getOverlapPercent = (\r\n boxA: IBoundingBox,\r\n boxB: IBoundingBox\r\n): number => {\r\n const xOverlap = Math.max(\r\n 0,\r\n Math.min(boxA.x + boxA.width, boxB.x + boxB.width) -\r\n Math.max(boxA.x, boxB.x)\r\n );\r\n const yOverlap = Math.max(\r\n 0,\r\n Math.min(boxA.y + boxA.height, boxB.y + boxB.height) -\r\n Math.max(boxA.y, boxB.y)\r\n );\r\n\r\n const overlapArea = xOverlap * yOverlap;\r\n\r\n const boxAArea = boxA.width * boxA.height;\r\n const boxBArea = boxB.width * boxB.height;\r\n\r\n // Возвращаем среднее значение процентов перекрытия относительно обоих элементов\r\n return ((overlapArea / boxAArea) * 100 + (overlapArea / boxBArea) * 100) / 2;\r\n};\r\n","export const draggableDataName = 'data-vue-dnd-kit-draggable';\r\nexport const droppableDataName = 'data-vue-dnd-kit-droppable';\r\n","export const preventEvent = (event: Event) => {\r\n event.preventDefault();\r\n \r\n};\r\n\r\n","import { computed, ref, shallowRef, useId } from 'vue';\r\n\r\nimport type { IUseDragOptions } from '../types';\r\nimport { draggableDataName } from '../utils/namespaces';\r\nimport { preventEvent } from '../utils/events';\r\nimport { useDnDStore } from '../composables/useDnDStore';\r\n\r\nexport const useElementManager = (options?: IUseDragOptions) => {\r\n const {\r\n elementsMap,\r\n draggingElements,\r\n hovered,\r\n selectedElements,\r\n isDragging: isDragStarted,\r\n visibleElements,\r\n handleDragElementIntersection,\r\n } = useDnDStore();\r\n\r\n const elementRef = ref<HTMLElement | null>(null);\r\n const isOvered = computed<boolean>(\r\n () =>\r\n visibleElements.value.has(elementRef.value as HTMLElement) &&\r\n hovered.element.value === elementRef.value\r\n );\r\n\r\n const id = shallowRef(options?.id || useId());\r\n\r\n const isDragging = computed<boolean>(() => {\r\n if (!elementRef.value) return false;\r\n if (!visibleElements.value.has(elementRef.value)) return false;\r\n return draggingElements.value.has(elementRef.value);\r\n });\r\n\r\n const isAllowed = computed<boolean>(() => {\r\n if (!elementRef.value) return false;\r\n if (!isDragStarted.value) return false;\r\n if (!visibleElements.value.has(elementRef.value)) return false;\r\n\r\n const currentElement = elementsMap.value.get(elementRef.value);\r\n if (!currentElement?.groups.length) return true;\r\n\r\n return !Array.from(draggingElements.value.entries()).some(\r\n ([_, draggingElement]) => {\r\n if (!draggingElement.groups.length) return false;\r\n return !draggingElement.groups.some((group) =>\r\n currentElement.groups.includes(group)\r\n );\r\n }\r\n );\r\n });\r\n\r\n const registerElement = () => {\r\n if (!elementRef.value) throw new Error('ElementRef is not set');\r\n\r\n elementsMap.value.set(elementRef.value, {\r\n node: elementRef.value,\r\n groups: options?.groups ?? [],\r\n layer: options?.layer ?? null,\r\n defaultLayer: options?.layer ?? null,\r\n events: options?.events ?? {},\r\n data: options?.data ?? null,\r\n id: id.value,\r\n });\r\n\r\n handleDragElementIntersection('add', elementRef.value);\r\n\r\n elementRef.value.addEventListener('dragstart', preventEvent);\r\n elementRef.value.addEventListener('drag', preventEvent);\r\n elementRef.value.setAttribute(draggableDataName, 'true');\r\n elementRef.value.setAttribute('draggable', 'false');\r\n };\r\n\r\n const unregisterElement = () => {\r\n if (!elementRef.value) return;\r\n\r\n elementsMap.value.delete(elementRef.value);\r\n selectedElements.value.delete(elementRef.value);\r\n\r\n elementRef.value.removeEventListener('dragstart', preventEvent);\r\n elementRef.value.removeEventListener('drag', preventEvent);\r\n elementRef.value.removeAttribute(draggableDataName);\r\n elementRef.value.removeAttribute('draggable');\r\n };\r\n\r\n return {\r\n elementRef,\r\n registerElement,\r\n unregisterElement,\r\n isDragging,\r\n isOvered,\r\n isAllowed,\r\n id,\r\n };\r\n};\r\n","export const isDescendant = (\r\n element: HTMLElement | Element | null,\r\n container: HTMLElement | Element\r\n): boolean => {\r\n if (!element) return false;\r\n return container.contains(element);\r\n};\r\n","import {\r\n checkCollision,\r\n getBoundingBox,\r\n getCenter,\r\n getDistance,\r\n getOverlapPercent,\r\n} from './geometry';\r\n\r\nimport { IDnDStore } from '../types';\r\nimport { isDescendant } from './dom';\r\n\r\nexport const defaultCollisionDetection = (store: IDnDStore) => {\r\n const containerRect = getBoundingBox(store.activeContainer.ref.value);\r\n const containerCenter = getCenter(containerRect);\r\n const pointerX = store.pointerPosition.current.value?.x ?? 0;\r\n const pointerY = store.pointerPosition.current.value?.y ?? 0;\r\n\r\n const isPointerInActiveContainer =\r\n containerRect &&\r\n pointerX >= containerRect.x &&\r\n pointerX <= containerRect.x + containerRect.width &&\r\n pointerY >= containerRect.y &&\r\n pointerY <= containerRect.y + containerRect.height;\r\n\r\n const shouldUseNormalPriority = !isPointerInActiveContainer;\r\n\r\n const activeDragNodes = Array.from(store.draggingElements.value.keys());\r\n\r\n const allCollidingElements = Array.from(store.visibleElements.value.entries())\r\n .filter(([node, _]) => {\r\n if (!node) return false;\r\n\r\n const rect = getBoundingBox(node as HTMLElement);\r\n return rect && containerRect && checkCollision(rect, containerRect);\r\n })\r\n .map(([node, element]) => {\r\n const rect = getBoundingBox(node as HTMLElement);\r\n const elementCenter = getCenter(rect);\r\n\r\n const isPointerInElement =\r\n pointerX >= rect.x &&\r\n pointerX <= rect.x + rect.width &&\r\n pointerY >= rect.y &&\r\n pointerY <= rect.y + rect.height;\r\n\r\n const overlapPercent = getOverlapPercent(rect, containerRect);\r\n const centerDistance = getDistance(containerCenter, elementCenter);\r\n\r\n // Вычисляем глубину вложенности\r\n let depth = 0;\r\n for (const [parentNode, _] of store.visibleElements.value.entries()) {\r\n if (\r\n parentNode !== node &&\r\n parentNode &&\r\n node &&\r\n isDescendant(node as HTMLElement, parentNode as HTMLElement)\r\n ) {\r\n depth++;\r\n }\r\n }\r\n\r\n return {\r\n element,\r\n node: node as HTMLElement,\r\n isPointerInElement,\r\n overlapPercent,\r\n depth,\r\n centerDistance,\r\n };\r\n })\r\n .sort((a, b) => {\r\n if (!shouldUseNormalPriority) {\r\n if (a.isPointerInElement && b.isPointerInElement)\r\n return b.depth - a.depth;\r\n if (a.isPointerInElement !== b.isPointerInElement)\r\n return a.isPointerInElement ? -1 : 1;\r\n }\r\n if (Math.abs(a.overlapPercent - b.overlapPercent) <= 1)\r\n return a.centerDistance - b.centerDistance;\r\n return b.overlapPercent - a.overlapPercent;\r\n });\r\n\r\n const allCollidingZones = Array.from(store.visibleZones.value.entries())\r\n .filter(([node, _]) => {\r\n if (\r\n !node ||\r\n activeDragNodes.some(\r\n (dragNode) =>\r\n dragNode &&\r\n isDescendant(node as HTMLElement, dragNode as HTMLElement)\r\n )\r\n )\r\n return false;\r\n\r\n const rect = getBoundingBox(node as HTMLElement);\r\n return rect && containerRect && checkCollision(rect, containerRect);\r\n })\r\n .map(([node, zone]) => {\r\n const rect = getBoundingBox(node as HTMLElement);\r\n const zoneCenter = getCenter(rect);\r\n\r\n const isPointerInElement =\r\n pointerX >= rect.x &&\r\n pointerX <= rect.x + rect.width &&\r\n pointerY >= rect.y &&\r\n pointerY <= rect.y + rect.height;\r\n\r\n const overlapPercent = getOverlapPercent(rect, containerRect);\r\n const centerDistance = getDistance(containerCenter, zoneCenter);\r\n\r\n // Вычисляем глубину вложенности\r\n let depth = 0;\r\n for (const [parentNode, _] of store.visibleZones.value.entries()) {\r\n if (\r\n parentNode !== node &&\r\n parentNode &&\r\n node &&\r\n isDescendant(node as HTMLElement, parentNode as HTMLElement)\r\n ) {\r\n depth++;\r\n }\r\n }\r\n\r\n return {\r\n zone,\r\n node: node as HTMLElement,\r\n isPointerInElement,\r\n overlapPercent,\r\n depth,\r\n centerDistance,\r\n };\r\n })\r\n .sort((a, b) => {\r\n if (!shouldUseNormalPriority) {\r\n if (a.isPointerInElement && b.isPointerInElement)\r\n return b.depth - a.depth;\r\n if (a.isPointerInElement !== b.isPointerInElement)\r\n return a.isPointerInElement ? -1 : 1;\r\n }\r\n if (Math.abs(a.overlapPercent - b.overlapPercent) <= 1)\r\n return a.centerDistance - b.centerDistance;\r\n return b.overlapPercent - a.overlapPercent;\r\n });\r\n\r\n return [\r\n ...allCollidingElements.map((item) => item.node),\r\n ...allCollidingZones.map((item) => item.node),\r\n ];\r\n};\r\n","import type { Ref } from 'vue';\r\nimport { getBoundingBox } from '../utils/geometry';\r\nimport { preventEvent } from '../utils/events';\r\nimport { useDnDStore } from './useDnDStore';\r\n\r\nexport interface IKeyboardOptions {\r\n moveStep?: number;\r\n}\r\n\r\nexport const useKeyboard = (\r\n elementRef: Ref<HTMLElement | null>,\r\n options?: IKeyboardOptions\r\n) => {\r\n const { pointerPosition, keyboard } = useDnDStore();\r\n const moveStep = options?.moveStep || 10;\r\n\r\n const onKeyboardStart = (event: KeyboardEvent) => {\r\n preventEvent(event);\r\n\r\n const rect = getBoundingBox(elementRef.value);\r\n\r\n elementRef.value?.blur();\r\n\r\n const centerX = rect.x + rect.width / 2;\r\n const centerY = rect.y + rect.height / 2;\r\n\r\n pointerPosition.start.value = {\r\n x: centerX,\r\n y: centerY,\r\n };\r\n\r\n pointerPosition.current.value = {\r\n x: centerX,\r\n y: centerY,\r\n };\r\n\r\n pointerPosition.offset.pixel.value = {\r\n x: rect.width / 2,\r\n y: rect.height / 2,\r\n };\r\n\r\n pointerPosition.offset.percent.value = {\r\n x: 50,\r\n y: 50,\r\n };\r\n };\r\n\r\n const onKeyboardMove = () => {\r\n if (!pointerPosition.current.value) return;\r\n\r\n const currentX = pointerPosition.current.value.x;\r\n const currentY = pointerPosition.current.value.y;\r\n\r\n let newX = currentX;\r\n let newY = currentY;\r\n\r\n if (keyboard.w.value) newY -= moveStep;\r\n if (keyboard.s.value) newY += moveStep;\r\n if (keyboard.a.value) newX -= moveStep;\r\n if (keyboard.d.value) newX += moveStep;\r\n\r\n pointerPosition.current.value = {\r\n x: newX,\r\n y: newY,\r\n };\r\n };\r\n\r\n const onKeyboardEnd = () => {\r\n pointerPosition.current.value = null;\r\n pointerPosition.start.value = null;\r\n pointerPosition.offset.pixel.value = null;\r\n pointerPosition.offset.percent.value = null;\r\n };\r\n\r\n return {\r\n onKeyboardStart,\r\n onKeyboardMove,\r\n onKeyboardEnd,\r\n };\r\n};\r\n","import type { Ref } from 'vue';\r\nimport { getOffset } from '../utils/geometry';\r\nimport { useDnDStore } from './useDnDStore';\r\n\r\nexport const usePointer = (elementRef: Ref<HTMLElement | null>) => {\r\n const store = useDnDStore();\r\n\r\n const onPointerStart = (event: PointerEvent) => {\r\n store.pointerPosition.start.value = { x: event.clientX, y: event.clientY };\r\n store.pointerPosition.current.value = {\r\n x: event.clientX,\r\n y: event.clientY,\r\n };\r\n\r\n const { pixel, percent } = getOffset(elementRef.value, {\r\n x: event.clientX,\r\n y: event.clientY,\r\n });\r\n\r\n store.pointerPosition.offset.pixel.value = pixel;\r\n store.pointerPosition.offset.percent.value = percent;\r\n };\r\n\r\n const onPointerMove = (event: PointerEvent | WheelEvent) => {\r\n store.pointerPosition.current.value = {\r\n x: event.clientX,\r\n y: event.clientY,\r\n };\r\n };\r\n\r\n const onPointerEnd = () => {\r\n store.pointerPosition.current.value = null;\r\n store.pointerPosition.start.value = null;\r\n store.pointerPosition.offset.pixel.value = null;\r\n store.pointerPosition.offset.percent.value = null;\r\n };\r\n\r\n return {\r\n onPointerStart,\r\n onPointerMove,\r\n onPointerEnd,\r\n };\r\n};\r\n","import type {\r\n ICollisionDetectionResult,\r\n IDraggingElement,\r\n IUseDragOptions,\r\n} from '../types';\r\n\r\nimport type { Ref } from 'vue';\r\nimport { defaultCollisionDetection } from '../utils/sensor';\r\nimport { isDescendant } from '../utils/dom';\r\nimport { useDnDStore } from './useDnDStore';\r\nimport { useKeyboard } from './useKeyboard';\r\nimport { usePointer } from './usePointer';\r\nimport { useThrottleFn } from '@vueuse/core';\r\n\r\nexport const useSensor = (\r\n elementRef: Ref<HTMLElement | null>,\r\n options?: IUseDragOptions\r\n) => {\r\n const store = useDnDStore();\r\n\r\n const { onPointerStart, onPointerMove, onPointerEnd } =\r\n usePointer(elementRef);\r\n\r\n const { onKeyboardStart, onKeyboardMove, onKeyboardEnd } = useKeyboard(\r\n elementRef,\r\n options?.keyboard\r\n );\r\n\r\n let animationFrameId: number | null = null;\r\n\r\n const getDraggingElements = (\r\n draggableElement: HTMLElement | null\r\n ): Map<HTMLElement | Element, IDraggingElement> => {\r\n if (!draggableElement) return new Map();\r\n\r\n const isDraggableInSelection =\r\n store.selectedElements.value.has(draggableElement);\r\n\r\n if (store.selectedElements.value.size > 0 && isDraggableInSelection) {\r\n const result = new Map<HTMLElement | Element, IDraggingElement>();\r\n\r\n store.selectedElements.value.forEach((node) => {\r\n const element = store.elementsMap.value.get(node);\r\n if (!element) return;\r\n\r\n result.set(node, {\r\n ...element,\r\n initialHTML: element.node?.outerHTML ?? '',\r\n initialRect: element.node?.getBoundingClientRect(),\r\n });\r\n });\r\n\r\n return result;\r\n }\r\n\r\n store.selectedElements.value.clear();\r\n\r\n const element = store.elementsMap.value.get(draggableElement);\r\n if (!element) return new Map();\r\n\r\n const result = new Map<HTMLElement | Element, IDraggingElement>();\r\n result.set(draggableElement, {\r\n ...element,\r\n initialHTML: element.node?.outerHTML ?? '',\r\n initialRect: element.node?.getBoundingClientRect(),\r\n });\r\n\r\n return result;\r\n };\r\n\r\n const processUserCollisionResults = (\r\n htmlElements: HTMLElement | HTMLElement[] | Element | Element[] | null\r\n ) => {\r\n if (!htmlElements) {\r\n return { element: null, zone: null };\r\n }\r\n\r\n const elements = Array.isArray(htmlElements)\r\n ? htmlElements\r\n : [htmlElements];\r\n\r\n const activeDragNodes = Array.from(store.draggingElements.value.keys());\r\n\r\n const filteredZoneElement = elements.find((htmlElement) => {\r\n if (!store.visibleZones.value.has(htmlElement)) return false;\r\n\r\n const zone = store.zonesMap.value.get(htmlElement);\r\n if (!zone) return false;\r\n\r\n if (\r\n activeDragNodes.some(\r\n (dragNode) =>\r\n dragNode &&\r\n (dragNode === zone.node ||\r\n isDescendant(zone.node as HTMLElement, dragNode as HTMLElement))\r\n )\r\n )\r\n return false;\r\n\r\n if (zone.groups.length) {\r\n const isCompatible = !Array.from(\r\n store.draggingElements.value.values()\r\n ).some((element) => {\r\n if (!element.groups.length) return false;\r\n return !element.groups.some((group) => zone.groups.includes(group));\r\n });\r\n if (!isCompatible) return false;\r\n }\r\n\r\n return true;\r\n });\r\n\r\n if (!filteredZoneElement) {\r\n return { element: null, zone: null };\r\n }\r\n\r\n const possibleElement = elements.find(\r\n (htmlElement) =>\r\n store.visibleElements.value.has(htmlElement) &&\r\n store.elementsMap.value.has(htmlElement) &&\r\n !activeDragNodes.some(\r\n (dragNode) =>\r\n dragNode &&\r\n (dragNode === htmlElement ||\r\n isDescendant(\r\n htmlElement as HTMLElement,\r\n dragNode as HTMLElement\r\n ) ||\r\n isDescendant(dragNode as HTMLElement, htmlElement as HTMLElement))\r\n ) &&\r\n (htmlElement === filteredZoneElement ||\r\n isDescendant(\r\n htmlElement as HTMLElement,\r\n filteredZoneElement as HTMLElement\r\n ))\r\n );\r\n\r\n return {\r\n element: possibleElement || null,\r\n zone: filteredZoneElement,\r\n };\r\n };\r\n\r\n const detectCollisions = options?.sensor?.setup || defaultCollisionDetection;\r\n\r\n const processCollisionResults = (results: ICollisionDetectionResult) => {\r\n const previousElement = store.hovered.element.value;\r\n const previousZone = store.hovered.zone.value;\r\n\r\n store.hovered.element.value = results.element;\r\n store.hovered.zone.value = results.zone;\r\n\r\n if (previousElement) {\r\n if (store.hovered.element.value !== previousElement) {\r\n store.elementsMap.value.get(previousElement)?.events?.onLeave?.(store);\r\n\r\n if (store.hovered.element.value)\r\n store.elementsMap.value\r\n .get(store.hovered.element.value)\r\n ?.events?.onHover?.(store);\r\n }\r\n }\r\n\r\n if (previousZone) {\r\n if (store.hovered.zone.value !== previousZone) {\r\n store.zonesMap.value.get(previousZone)?.events?.onLeave?.(store);\r\n\r\n if (store.hovered.zone.value)\r\n store.zonesMap.value\r\n .get(store.hovered.zone.value)\r\n ?.events?.onHover?.(store);\r\n }\r\n }\r\n };\r\n\r\n const throttledDetectAndProcess = useThrottleFn(() => {\r\n const htmlElements = detectCollisions(store);\r\n const processedResults = processUserCollisionResults(htmlElements);\r\n processCollisionResults(processedResults);\r\n }, options?.sensor?.throttle ?? 0);\r\n\r\n const animationLoop = () => {\r\n throttledDetectAndProcess();\r\n\r\n animationFrameId = requestAnimationFrame(animationLoop);\r\n };\r\n\r\n const startDetection = () => animationLoop();\r\n\r\n const stopDetection = () => {\r\n if (animationFrameId !== null) {\r\n cancelAnimationFrame(animationFrameId);\r\n animationFrameId = null;\r\n }\r\n };\r\n\r\n const activate = (event: PointerEvent | KeyboardEvent) => {\r\n store.draggingElements.value = getDraggingElements(elementRef.value);\r\n store.draggingElements.value.forEach((element) =>\r\n element.events.onStart?.(store)\r\n );\r\n\r\n if (event instanceof PointerEvent) {\r\n onPointerStart(event);\r\n } else {\r\n onKeyboardStart(event);\r\n }\r\n\r\n startDetection();\r\n };\r\n\r\n const track = (event: PointerEvent | WheelEvent | KeyboardEvent) => {\r\n store.draggingElements.value.forEach((element) =>\r\n element.events.onMove?.(store)\r\n );\r\n\r\n if (event instanceof KeyboardEvent) {\r\n onKeyboardMove();\r\n } else {\r\n onPointerMove(event);\r\n }\r\n };\r\n\r\n const deactivate = (triggerEvents = true) => {\r\n onPointerEnd();\r\n onKeyboardEnd();\r\n\r\n if (triggerEvents) {\r\n if (store.hovered.zone.value) {\r\n const zone = store.zonesMap.value.get(store.hovered.zone.value);\r\n zone?.events.onDrop?.(store);\r\n } else {\r\n store.draggingElements.value.forEach((element) =>\r\n element.events.onEnd?.(store)\r\n );\r\n }\r\n\r\n store.selectedElements.value.clear();\r\n }\r\n\r\n store.draggingElements.value.clear();\r\n\r\n store.hovered.zone.value = null;\r\n store.hovered.element.value = null;\r\n\r\n stopDetection();\r\n };\r\n\r\n return {\r\n activate,\r\n track,\r\n deactivate,\r\n };\r\n};\r\n","import { Ref, markRaw } from 'vue';\r\n\r\nimport type { IUseDragOptions } from '../types';\r\nimport { createGlobalState } from '@vueuse/core';\r\nimport { preventEvent } from '../utils/events';\r\nimport { useDnDStore } from '../composables/useDnDStore';\r\nimport { useSensor } from '../composables/useSensor';\r\n\r\nenum EKeyboardKey {\r\n ESCAPE = 'Escape',\r\n SPACE = 'Space',\r\n ENTER = 'Enter',\r\n W = 'KeyW',\r\n A = 'KeyA',\r\n S = 'KeyS',\r\n D = 'KeyD',\r\n CONTROL = 'ControlLeft',\r\n ALT = 'AltLeft',\r\n SHIFT = 'ShiftLeft',\r\n META = 'MetaLeft',\r\n}\r\n\r\nexport const useEventManager = createGlobalState(() => {\r\n let originalUserSelect = '';\r\n let originalTouchAction = '';\r\n let originalOverscrollBehavior = '';\r\n\r\n let currentMoveHandler: ((event: any) => void) | null = null;\r\n let currentEndHandler: (() => void) | null = null;\r\n let currentCancelHandler: (() => void) | null = null;\r\n let currentScrollHandler: ((event: WheelEvent) => void) | null = null;\r\n let currentKeyHandler: ((event: KeyboardEvent) => void) | null = null;\r\n\r\n const { activeContainer } = useDnDStore();\r\n\r\n const disableInteractions = () => {\r\n const body = document.body;\r\n\r\n originalUserSelect = body.style.userSelect;\r\n\r\n body.style.userSelect = 'none';\r\n\r\n window.addEventListener('contextmenu', preventEvent);\r\n window.addEventListener('selectstart', preventEvent);\r\n window.addEventListener('touchstart', preventEvent);\r\n window.addEventListener('touchmove', preventEvent);\r\n };\r\n\r\n const enableInteractions = () => {\r\n const body = document.body;\r\n\r\n body.style.userSelect = originalUserSelect;\r\n body.style.touchAction = originalTouchAction;\r\n body.style.overscrollBehavior = originalOverscrollBehavior;\r\n\r\n window.removeEventListener('contextmenu', preventEvent);\r\n window.removeEventListener('selectstart', preventEvent);\r\n window.removeEventListener('touchstart', preventEvent);\r\n window.removeEventListener('touchmove', preventEvent);\r\n };\r\n\r\n const clearAllListeners = () => {\r\n if (currentMoveHandler) {\r\n document.removeEventListener('pointermove', currentMoveHandler);\r\n currentMoveHandler = null;\r\n }\r\n\r\n if (currentEndHandler) {\r\n document.removeEventListener('pointerup', currentEndHandler);\r\n currentEndHandler = null;\r\n }\r\n\r\n if (currentCancelHandler) {\r\n currentCancelHandler = null;\r\n }\r\n\r\n if (currentScrollHandler) {\r\n document.removeEventListener('wheel', currentScrollHandler);\r\n currentScrollHandler = null;\r\n }\r\n\r\n if (currentKeyHandler) {\r\n document.removeEventListener('keydown', currentKeyHandler);\r\n document.removeEventListener('keypress', currentKeyHandler);\r\n document.removeEventListener('keyup', currentKeyHandler);\r\n currentKeyHandler = null;\r\n }\r\n };\r\n\r\n const handleDragStart = (\r\n event: PointerEvent | KeyboardEvent,\r\n elementRef: Ref<HTMLElement | null>,\r\n options?: IUseDragOptions\r\n ) => {\r\n clearAllListeners();\r\n\r\n (event.target as HTMLElement).blur();\r\n\r\n if (options?.container)\r\n activeContainer.component.value = markRaw(options.container);\r\n\r\n const { activate, track, deactivate } = useSensor(elementRef, options);\r\n\r\n currentEndHandler = () => {\r\n activeContainer.component.value = null;\r\n enableInteractions();\r\n deactivate(true);\r\n clearAllListeners();\r\n };\r\n\r\n currentCancelHandler = () => {\r\n activeContainer.component.value = null;\r\n enableInteractions();\r\n deactivate(false);\r\n clearAllListeners();\r\n };\r\n\r\n currentMoveHandler = (event: PointerEvent | KeyboardEvent) => track(event);\r\n currentScrollHandler = (event: WheelEvent) => track(event);\r\n currentKeyHandler = (event: KeyboardEvent) => {\r\n if (event.type === 'keyup') {\r\n if (event.code === EKeyboardKey.ESCAPE) currentCancelHandler?.();\r\n if (event.code === EKeyboardKey.ENTER) currentEndHandler?.();\r\n }\r\n\r\n track(event);\r\n };\r\n\r\n disableInteractions();\r\n activate(event);\r\n\r\n document.addEventListener('pointermove', currentMoveHandler);\r\n document.addEventListener('pointerup', currentEndHandler);\r\n document.addEventListener('wheel', currentScrollHandler);\r\n document.addEventListener('keydown', currentKeyHandler);\r\n document.addEventListener('keypress', currentKeyHandler);\r\n document.addEventListener('keyup', currentKeyHandler);\r\n };\r\n\r\n return {\r\n handleDragStart,\r\n };\r\n});\r\n","import { onBeforeUnmount, onMounted } from 'vue';\r\n\r\nimport type { IUseDragOptions } from '../types';\r\nimport { useDnDStore } from './useDnDStore';\r\nimport { useElementManager } from '../managers/useElementManager';\r\nimport { useEventManager } from '../managers/useEventManager';\r\n\r\nexport const useDraggable = (options?: IUseDragOptions) => {\r\n const {\r\n id,\r\n elementRef,\r\n isDragging,\r\n isOvered,\r\n isAllowed,\r\n registerElement,\r\n unregisterElement,\r\n } = useElementManager(options);\r\n\r\n const { pointerPosition } = useDnDStore();\r\n const { handleDragStart: start } = useEventManager();\r\n\r\n const handleDragStart = (event: PointerEvent | KeyboardEvent) =>\r\n start(event, elementRef, options);\r\n\r\n onMounted(registerElement);\r\n onBeforeUnmount(unregisterElement);\r\n\r\n return {\r\n pointerPosition,\r\n elementRef,\r\n isDragging,\r\n isOvered,\r\n isAllowed,\r\n handleDragStart,\r\n id,\r\n };\r\n};\r\n","import { computed, ref } from 'vue';\r\n\r\nimport type { IUseDropOptions } from '../types';\r\nimport { useDnDStore } from '../composables/useDnDStore';\r\n\r\nexport const useZoneManager = (options?: IUseDropOptions) => {\r\n const {\r\n zonesMap,\r\n hovered,\r\n draggingElements,\r\n isDragging,\r\n handleDropZoneIntersection,\r\n } = useDnDStore();\r\n\r\n const elementRef = ref<HTMLElement | null>(null);\r\n\r\n const isOvered = computed<boolean>(() => {\r\n return hovered.zone.value === elementRef.value;\r\n });\r\n\r\n const isAllowed = computed<boolean>(() => {\r\n if (!elementRef.value || !isDragging.value) return false;\r\n\r\n const currentZone = zonesMap.value.get(elementRef.value);\r\n if (!currentZone?.groups.length) return true;\r\n\r\n return !Array.from(draggingElements.value.values()).some((element) => {\r\n if (!element.groups.length) return false;\r\n return !element.groups.some((group) =>\r\n currentZone.groups.includes(group)\r\n );\r\n });\r\n });\r\n\r\n const registerZone = () => {\r\n if (!elementRef.value) throw new Error('elementRef is not set');\r\n\r\n handleDropZoneIntersection('add', elementRef.value);\r\n\r\n zonesMap.value.set(elementRef.value, {\r\n node: elementRef.value,\r\n groups: options?.groups ?? [],\r\n events: options?.events ?? {},\r\n data: options?.data ?? undefined,\r\n });\r\n\r\n elementRef.value.setAttribute('data-dnd-droppable', 'true');\r\n };\r\n\r\n const unregisterZone = () => {\r\n if (!elementRef.value) return;\r\n\r\n handleDropZoneIntersection('remove', elementRef.value);\r\n\r\n zonesMap.value.delete(elementRef.value);\r\n };\r\n\r\n return { elementRef, registerZone, unregisterZone, isOvered, isAllowed };\r\n};\r\n","import { onBeforeUnmount, onMounted } from 'vue';\r\n\r\nimport type { IUseDropOptions } from '../types';\r\nimport { useZoneManager } from '../managers/useZoneManager';\r\n\r\nexport const useDroppable = (options?: IUseDropOptions) => {\r\n const { elementRef, registerZone, unregisterZone, isOvered, isAllowed } =\r\n useZoneManager(options);\r\n\r\n // Register/unregister drop zone with store\r\n onMounted(registerZone);\r\n onBeforeUnmount(unregisterZone);\r\n\r\n return { elementRef, isOvered, isAllowed };\r\n};\r\n","import { computed, type Ref } from 'vue';\r\nimport { useDnDStore } from './useDnDStore';\r\nimport { isDescendant } from '../utils/dom';\r\n\r\nexport const useSelection = (elementRef: Ref<HTMLElement | null>) => {\r\n const { selectedElements, elementsMap } = useDnDStore();\r\n\r\n const isSelected = computed<boolean>(() =>\r\n elementRef.value ? selectedElements.value.has(elementRef.value) : false\r\n );\r\n\r\n const isParentOfSelected = computed(() => {\r\n if (!elementRef.value) return false;\r\n\r\n for (const node of selectedElements.value) {\r\n if (\r\n node &&\r\n isDescendant(node as HTMLElement, elementRef.value as HTMLElement)\r\n ) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n\r\n const hasSelectedParent = computed(() => {\r\n if (!elementRef.value) return false;\r\n\r\n for (const node of selectedElements.value) {\r\n if (\r\n node &&\r\n isDescendant(elementRef.value as HTMLElement, node as HTMLElement)\r\n ) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n\r\n const handleUnselect = () => {\r\n if (!elementRef.value) return;\r\n selectedElements.value.delete(elementRef.value);\r\n };\r\n\r\n const handleSelect = () => {\r\n if (!elementRef.value) return;\r\n const element = elementsMap.value.get(elementRef.value);\r\n if (!element) return;\r\n\r\n if (isParentOfSelected.value) {\r\n // Удаляем все дочерние выбранные элементы\r\n for (const node of selectedElements.value) {\r\n if (\r\n node &&\r\n isDescendant(node as HTMLElement, elementRef.value as HTMLElement)\r\n ) {\r\n selectedElements.value.delete(node);\r\n }\r\n }\r\n }\r\n\r\n if (hasSelectedParent.value) {\r\n // Удаляем все родительские выбранные элементы\r\n for (const node of selectedElements.value) {\r\n if (\r\n node &&\r\n isDescendant(elementRef.value as HTMLElement, node as HTMLElement)\r\n ) {\r\n selectedElements.value.delete(node);\r\n }\r\n }\r\n }\r\n\r\n selectedElements.value.add(elementRef.value);\r\n };\r\n\r\n const handleToggleSelect = () => {\r\n if (!elementRef.value) return;\r\n\r\n selectedElements.value.has(elementRef.value)\r\n ? handleUnselect()\r\n : handleSelect();\r\n };\r\n\r\n return {\r\n handleUnselect,\r\n handleSelect,\r\n handleToggleSelect,\r\n isSelected,\r\n isParentOfSelected,\r\n };\r\n};\r\n"],"names":["_DnDOperations","__publicField","source","index","item","target","sourceIndex","targetIndex","sourceItem","targetItem","store","hoveredElement","hoveredZone","targetSource","_b","_a","_d","_c","firstElement","firstIndex","_e","sortDirection","a","b","element","_g","_f","_h","items","DnDOperations","useDnDStore","createGlobalState","draggingElements","ref","isDragging","computed","activeContainer","shallowRef","elementsMap","selectedElements","zonesMap","visibleZones","visibleElements","elementObserver","entries","entry","zoneObserver","handleDragElementIntersection","action","handleDropZoneIntersection","pointerPosition","w","s","d","ctrl","shift","alt","meta","useMagicKeys","hovered","useDragContainer","options","elementRef","onMounted","onUnmounted","computedStyle","overlay","DefaultOverlay","VueDndKitPlugin","app","DragOverlay","originalMount","rootContainer","instance","rootEl","overlayContainer","vnode","createVNode","render","originalUnmount","checkCollision","boxA","boxB","getBoundingBox","rect","getCenter","box","getOffset","pointer","getDistance","pointA","pointB","dx","dy","getOverlapPercent","xOverlap","yOverlap","overlapArea","boxAArea","boxBArea","draggableDataName","preventEvent","event","useElementManager","isDragStarted","isOvered","id","useId","isAllowed","currentElement","_","draggingElement","group","isDescendant","container","defaultCollisionDetection","containerRect","containerCenter","pointerX","pointerY","shouldUseNormalPriority","activeDragNodes","allCollidingElements","node","elementCenter","isPointerInElement","overlapPercent","centerDistance","depth","parentNode","allCollidingZones","dragNode","zone","zoneCenter","useKeyboard","keyboard","moveStep","centerX","centerY","currentX","currentY","newX","newY","usePointer","pixel","percent","useSensor","onPointerStart","onPointerMove","onPointerEnd","onKeyboardStart","onKeyboardMove","onKeyboardEnd","animationFrameId","getDraggingElements","draggableElement","isDraggableInSelection","result","processUserCollisionResults","htmlElements","elements","filteredZoneElement","htmlElement","detectCollisions","processCollisionResults","results","previousElement","previousZone","_i","_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","onBeforeUnmount","useZoneManager","currentZone","useDroppable","registerZone","unregisterZone","useSelection","isSelected","isParentOfSelected","hasSelectedParent","handleUnselect","handleSelect"],"mappings":"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"}
1
+ {"version":3,"file":"vue-dnd-kit-core.cjs.js","sources":["../src/utils/operations.ts","../src/composables/useDnDStore.ts","../src/composables/useDragContainer.ts","../src/components/DefaultOverlay.vue","../src/components/DragOverlay.vue","../src/plugin.ts","../src/utils/geometry.ts","../src/utils/namespaces.ts","../src/utils/events.ts","../src/managers/useElementManager.ts","../src/utils/dom.ts","../src/utils/sensor.ts","../src/composables/useKeyboard.ts","../src/composables/usePointer.ts","../src/composables/useSensor.ts","../src/managers/useEventManager.ts","../src/composables/useDraggable.ts","../src/managers/useZoneManager.ts","../src/composables/useDroppable.ts","../src/composables/useSelection.ts"],"sourcesContent":["import { IDnDStore } from '../types';\r\n\r\nexport class DnDOperations {\r\n static remove = (source?: any[], index?: number) => {\r\n if (!source || index === undefined) return;\r\n const [item] = source.splice(index, 1);\r\n return item;\r\n };\r\n static insert = (target?: any[], index?: number, item?: any) => {\r\n if (!target || index === undefined) return;\r\n target.splice(index, 0, item);\r\n };\r\n static move = (\r\n source?: any[],\r\n sourceIndex?: number,\r\n target?: any[],\r\n targetIndex?: number\r\n ) => {\r\n if (\r\n !source ||\r\n !target ||\r\n sourceIndex === undefined ||\r\n targetIndex === undefined\r\n )\r\n return;\r\n const item = DnDOperations.remove(source, sourceIndex);\r\n DnDOperations.insert(target, targetIndex, item);\r\n };\r\n static swap = (\r\n source?: any[],\r\n sourceIndex?: number,\r\n target?: any[],\r\n targetIndex?: number\r\n ) => {\r\n if (\r\n !source ||\r\n !target ||\r\n sourceIndex === undefined ||\r\n targetIndex === undefined\r\n )\r\n return;\r\n\r\n const sourceItem = source[sourceIndex];\r\n const targetItem = target[targetIndex];\r\n\r\n source[sourceIndex] = targetItem;\r\n target[targetIndex] = sourceItem;\r\n };\r\n static copy = (\r\n source?: any[],\r\n index?: number,\r\n target?: any[],\r\n targetIndex?: number\r\n ) => {\r\n if (!source || index === undefined || !target || targetIndex === undefined)\r\n return;\r\n const item = source[index];\r\n DnDOperations.insert(target, targetIndex, item);\r\n };\r\n static applyTransfer = (store: IDnDStore) => {\r\n const hoveredElement = store.hovered.element.value;\r\n const hoveredZone = store.hovered.zone.value;\r\n\r\n if (hoveredElement) {\r\n const targetSource =\r\n store.elementsMap.value.get(hoveredElement)?.data?.source;\r\n const targetIndex =\r\n store.elementsMap.value.get(hoveredElement)?.data?.index;\r\n\r\n const firstElement = store.draggingElements.value.values().next().value;\r\n const firstIndex = firstElement?.data?.index;\r\n\r\n const sortDirection =\r\n firstIndex !== undefined &&\r\n targetIndex !== undefined &&\r\n firstIndex > targetIndex\r\n ? 1\r\n : -1;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort(\r\n (a, b) => sortDirection * ((a.data?.index || 0) - (b.data?.index || 0))\r\n );\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n } else if (hoveredZone) {\r\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\r\n const targetIndex = targetSource?.length;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n }\r\n };\r\n\r\n static applyCopy = (store: IDnDStore) => {\r\n const hoveredElement = store.hovered.element.value;\r\n const hoveredZone = store.hovered.zone.value;\r\n\r\n if (hoveredElement) {\r\n const targetSource =\r\n store.elementsMap.value.get(hoveredElement)?.data?.source;\r\n const targetIndex =\r\n store.elementsMap.value.get(hoveredElement)?.data?.index;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.copy(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n } else if (hoveredZone) {\r\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\r\n const targetIndex = targetSource?.length;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.copy(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n }\r\n };\r\n static applySwap = (store: IDnDStore) => {\r\n const hoveredElement = store.hovered.element.value;\r\n const hoveredZone = store.hovered.zone.value;\r\n\r\n if (hoveredElement && store.draggingElements.value.size === 1) {\r\n const element = store.draggingElements.value.values().next().value;\r\n DnDOperations.swap(\r\n element?.data?.source,\r\n element?.data?.index,\r\n store.elementsMap.value.get(hoveredElement)?.data?.source,\r\n store.elementsMap.value.get(hoveredElement)?.data?.index\r\n );\r\n } else if (hoveredZone) {\r\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\r\n const targetIndex = targetSource?.length;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n }\r\n };\r\n static applyRemove = (store: IDnDStore) => {\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) => {\r\n if (element.data?.source && element.data?.index !== undefined) {\r\n DnDOperations.remove(element.data.source, element.data.index);\r\n }\r\n });\r\n };\r\n static applyInsert = (store: IDnDStore, items: any[]) => {\r\n const hoveredElement = store.hovered.element.value;\r\n const hoveredZone = store.hovered.zone.value;\r\n\r\n if (hoveredElement && items.length > 0) {\r\n const targetSource =\r\n store.elementsMap.value.get(hoveredElement)?.data?.source;\r\n const targetIndex =\r\n store.elementsMap.value.get(hoveredElement)?.data?.index;\r\n\r\n items.forEach((item) => {\r\n DnDOperations.insert(targetSource, targetIndex, item);\r\n });\r\n } else if (hoveredZone) {\r\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\r\n const targetIndex = targetSource?.length;\r\n\r\n items.forEach((item) => {\r\n DnDOperations.insert(targetSource, targetIndex, item);\r\n });\r\n }\r\n };\r\n}\r\n","import type {\r\n IDragElement,\r\n IDraggingElement,\r\n IDropZone,\r\n IPoint,\r\n} from '../types';\r\nimport {\r\n computed,\r\n ref,\r\n shallowRef,\r\n type Component,\r\n type TransitionProps,\r\n} from 'vue';\r\nimport { createGlobalState, useMagicKeys } from '@vueuse/core';\r\n\r\nexport const useDnDStore = createGlobalState(() => {\r\n const draggingElements = ref<Map<HTMLElement | Element, IDraggingElement>>(\r\n new Map()\r\n );\r\n const isDragging = computed<boolean>(() => draggingElements.value.size > 0);\r\n\r\n const activeContainer = {\r\n component: ref<Component | null>(null),\r\n ref: shallowRef<HTMLElement | null>(null),\r\n options: shallowRef<TransitionProps | null>(null),\r\n };\r\n\r\n const elementsMap = ref<Map<HTMLElement | Element, IDragElement>>(new Map());\r\n const selectedElements = ref<Set<HTMLElement | Element>>(new Set());\r\n const zonesMap = ref<Map<HTMLElement | Element, IDropZone>>(new Map());\r\n const visibleZones = ref<Set<HTMLElement | Element>>(new Set());\r\n const visibleElements = ref<Set<HTMLElement | Element>>(new Set());\r\n\r\n const elementObserver = new IntersectionObserver((entries) => {\r\n entries.forEach((entry) =>\r\n visibleElements.value[entry.isIntersecting ? 'add' : 'delete'](\r\n entry.target\r\n )\r\n );\r\n });\r\n const zoneObserver = new IntersectionObserver((entries) => {\r\n entries.forEach((entry) =>\r\n visibleZones.value[entry.isIntersecting ? 'add' : 'delete'](entry.target)\r\n );\r\n });\r\n\r\n const handleDragElementIntersection = (\r\n action: 'add' | 'remove',\r\n element: HTMLElement | Element\r\n ) => {\r\n if (action === 'add') {\r\n elementObserver.observe(element);\r\n } else {\r\n elementObserver.unobserve(element);\r\n visibleElements.value.delete(element);\r\n }\r\n };\r\n\r\n const handleDropZoneIntersection = (\r\n action: 'add' | 'remove',\r\n element: HTMLElement | Element\r\n ) => {\r\n if (action === 'add') {\r\n zoneObserver.observe(element);\r\n } else {\r\n zoneObserver.unobserve(element);\r\n visibleZones.value.delete(element);\r\n }\r\n };\r\n\r\n const pointerPosition = {\r\n start: shallowRef<IPoint | null>(null),\r\n current: shallowRef<IPoint | null>(null),\r\n offset: {\r\n percent: shallowRef<IPoint | null>(null),\r\n pixel: shallowRef<IPoint | null>(null),\r\n },\r\n };\r\n\r\n const { w, s, a, d, ctrl, shift, alt, meta } = useMagicKeys();\r\n\r\n const hovered = {\r\n zone: shallowRef<HTMLElement | Element | null>(null),\r\n element: shallowRef<HTMLElement | Element | null>(null),\r\n };\r\n\r\n return {\r\n draggingElements,\r\n isDragging,\r\n activeContainer,\r\n elementsMap,\r\n selectedElements,\r\n zonesMap,\r\n visibleZones,\r\n visibleElements,\r\n pointerPosition,\r\n keyboard: {\r\n w,\r\n s,\r\n a,\r\n d,\r\n ctrl,\r\n shift,\r\n alt,\r\n meta,\r\n },\r\n hovered,\r\n handleDragElementIntersection,\r\n handleDropZoneIntersection,\r\n };\r\n});\r\n","import { onUnmounted, onMounted, ref, type TransitionProps } from 'vue';\r\n\r\nimport { useDnDStore } from './useDnDStore';\r\n\r\nexport const useDragContainer = (options?: Omit<TransitionProps, 'appear'>) => {\r\n const elementRef = ref<HTMLElement | null>(null);\r\n\r\n const { draggingElements, pointerPosition, isDragging, activeContainer } =\r\n useDnDStore();\r\n\r\n onMounted(() => {\r\n activeContainer.ref = elementRef;\r\n activeContainer.options.value = options ?? null;\r\n });\r\n\r\n onUnmounted(() => {\r\n activeContainer.ref.value = null;\r\n activeContainer.options.value = null;\r\n });\r\n\r\n return {\r\n elementRef,\r\n draggingElements,\r\n pointerPosition,\r\n isDragging,\r\n };\r\n};\r\n","<script setup lang=\"ts\">\r\n import { computed, CSSProperties } from 'vue';\r\n import { useDragContainer } from '../composables/useDragContainer';\r\n\r\n const { elementRef, pointerPosition, isDragging, draggingElements } =\r\n useDragContainer();\r\n\r\n const computedStyle = computed<CSSProperties>(() => ({\r\n transform: `translate3d(${\r\n (pointerPosition.current.value?.x ?? 0) -\r\n (pointerPosition.offset.pixel.value?.x ?? 0)\r\n }px, ${\r\n (pointerPosition.current.value?.y ?? 0) -\r\n (pointerPosition.offset.pixel.value?.y ?? 0)\r\n }px, 0)`,\r\n zIndex: 1000,\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n transition: '0.3s cubic-bezier(0.165, 0.84, 0.44, 1)',\r\n }));\r\n</script>\r\n\r\n<template>\r\n <div\r\n v-if=\"isDragging\"\r\n ref=\"elementRef\"\r\n :style=\"computedStyle\"\r\n >\r\n <div\r\n v-for=\"[_, element] in draggingElements\"\r\n :key=\"element.id\"\r\n v-html=\"element.initialHTML\"\r\n :style=\"{\r\n width: `${element.initialRect?.width}px`,\r\n height: `${element.initialRect?.height}px`,\r\n }\"\r\n />\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n import { computed } from 'vue';\r\n import { useDnDStore } from '../composables/useDnDStore';\r\n import DefaultOverlay from './DefaultOverlay.vue';\r\n\r\n const { activeContainer } = useDnDStore();\r\n\r\n const overlay = computed(() => {\r\n return activeContainer.component.value ?? DefaultOverlay;\r\n });\r\n</script>\r\n\r\n<template>\r\n <Transition\r\n v-if=\"activeContainer.options.value\"\r\n :name=\"activeContainer.options.value.name\"\r\n :duration=\"activeContainer.options.value.duration\"\r\n :enter-from-class=\"activeContainer.options.value.enterFromClass\"\r\n :enter-to-class=\"activeContainer.options.value.enterToClass\"\r\n :enter-active-class=\"activeContainer.options.value.enterActiveClass\"\r\n :leave-from-class=\"activeContainer.options.value.leaveFromClass\"\r\n :leave-to-class=\"activeContainer.options.value.leaveToClass\"\r\n :leave-active-class=\"activeContainer.options.value.leaveActiveClass\"\r\n :mode=\"activeContainer.options.value.mode\"\r\n :type=\"activeContainer.options.value.type\"\r\n :css=\"activeContainer.options.value.css\"\r\n :appear=\"true\"\r\n :appear-active-class=\"activeContainer.options.value.appearActiveClass\"\r\n :appear-from-class=\"activeContainer.options.value.appearFromClass\"\r\n :appear-to-class=\"activeContainer.options.value.appearToClass\"\r\n :persisted=\"activeContainer.options.value.persisted\"\r\n @enter=\"activeContainer.options.value.onEnter\"\r\n @leave=\"activeContainer.options.value.onLeave\"\r\n @before-enter=\"activeContainer.options.value.onBeforeEnter\"\r\n @before-leave=\"activeContainer.options.value.onBeforeLeave\"\r\n @before-appear=\"activeContainer.options.value.onBeforeAppear\"\r\n @after-enter=\"activeContainer.options.value.onAfterEnter\"\r\n @after-leave=\"activeContainer.options.value.onAfterLeave\"\r\n @after-appear=\"activeContainer.options.value.onAfterAppear\"\r\n >\r\n <component :is=\"overlay\" />\r\n </Transition>\r\n\r\n <component\r\n v-else\r\n :is=\"overlay\"\r\n />\r\n</template>\r\n","import { createVNode, render } from 'vue';\r\n\r\nimport type { App } from 'vue';\r\nimport DragOverlay from './components/DragOverlay.vue';\r\nimport { useDnDStore } from './composables/useDnDStore';\r\n\r\nexport const VueDndKitPlugin = {\r\n install(app: App) {\r\n app.component('DragOverlay', DragOverlay);\r\n const originalMount = app.mount;\r\n app.mount = function (rootContainer) {\r\n const instance = originalMount.call(this, rootContainer);\r\n\r\n const rootEl =\r\n typeof rootContainer === 'string'\r\n ? document.querySelector(rootContainer)\r\n : rootContainer;\r\n\r\n if (rootEl && rootEl instanceof Element) {\r\n if (!rootEl.querySelector('#vue-dnd-kit-overlay')) {\r\n const overlayContainer = document.createElement('div');\r\n\r\n overlayContainer.id = 'vue-dnd-kit-overlay';\r\n overlayContainer.style.pointerEvents = 'none';\r\n\r\n rootEl.appendChild(overlayContainer);\r\n const vnode = createVNode(DragOverlay);\r\n render(vnode, overlayContainer);\r\n\r\n app.__VUE_DND_KIT_OVERLAY__ = {\r\n container: overlayContainer,\r\n vnode,\r\n };\r\n\r\n const store = useDnDStore();\r\n app.__VUE_DND_KIT_STORE__ = store;\r\n }\r\n }\r\n\r\n return instance;\r\n };\r\n\r\n // Модифицируем метод unmount для очистки\r\n const originalUnmount = app.unmount;\r\n app.unmount = function () {\r\n if (app.__VUE_DND_KIT_OVERLAY__) {\r\n render(null, app.__VUE_DND_KIT_OVERLAY__.container);\r\n delete app.__VUE_DND_KIT_OVERLAY__;\r\n }\r\n return originalUnmount.call(this);\r\n };\r\n },\r\n};\r\n\r\ndeclare module '@vue/runtime-core' {\r\n export interface App {\r\n __VUE_DND_KIT_OVERLAY__?: {\r\n container: HTMLElement;\r\n vnode: any;\r\n };\r\n __VUE_DND_KIT_STORE__?: ReturnType<typeof useDnDStore>;\r\n }\r\n}\r\n","import type { IBoundingBox, IPoint } from '../types';\r\n\r\nexport const checkCollision = (\r\n boxA: IBoundingBox,\r\n boxB: IBoundingBox\r\n): boolean => {\r\n return (\r\n boxA.x < boxB.x + boxB.width &&\r\n boxA.x + boxA.width > boxB.x &&\r\n boxA.y < boxB.y + boxB.height &&\r\n boxA.y + boxA.height > boxB.y\r\n );\r\n};\r\n\r\nexport const getBoundingBox = (element: HTMLElement | null): IBoundingBox => {\r\n if (!element)\r\n return {\r\n x: 0,\r\n y: 0,\r\n width: 0,\r\n height: 0,\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n top: 0,\r\n };\r\n\r\n const rect = element.getBoundingClientRect();\r\n\r\n return {\r\n bottom: rect.bottom,\r\n left: rect.left,\r\n right: rect.right,\r\n top: rect.top,\r\n x: rect.x,\r\n y: rect.y,\r\n width: rect.width,\r\n height: rect.height,\r\n };\r\n};\r\n\r\nexport const getCenter = (box: IBoundingBox): IPoint => ({\r\n x: box.x + box.width / 2,\r\n y: box.y + box.height / 2,\r\n});\r\n\r\nexport const getOffset = (element: HTMLElement | null, pointer: IPoint) => {\r\n const rect = getBoundingBox(element);\r\n return {\r\n pixel: {\r\n x: pointer.x - rect.x,\r\n y: pointer.y - rect.y,\r\n },\r\n percent: {\r\n x: ((pointer.x - rect.x) / rect.width) * 100,\r\n y: ((pointer.y - rect.y) / rect.height) * 100,\r\n },\r\n };\r\n};\r\n\r\nexport const getDistance = (pointA: IPoint, pointB: IPoint): number => {\r\n const dx = pointB.x - pointA.x;\r\n const dy = pointB.y - pointA.y;\r\n return Math.sqrt(dx * dx + dy * dy);\r\n};\r\n\r\nexport const getOverlapPercent = (\r\n boxA: IBoundingBox,\r\n boxB: IBoundingBox\r\n): number => {\r\n const xOverlap = Math.max(\r\n 0,\r\n Math.min(boxA.x + boxA.width, boxB.x + boxB.width) -\r\n Math.max(boxA.x, boxB.x)\r\n );\r\n const yOverlap = Math.max(\r\n 0,\r\n Math.min(boxA.y + boxA.height, boxB.y + boxB.height) -\r\n Math.max(boxA.y, boxB.y)\r\n );\r\n\r\n const overlapArea = xOverlap * yOverlap;\r\n\r\n const boxAArea = boxA.width * boxA.height;\r\n const boxBArea = boxB.width * boxB.height;\r\n\r\n // Возвращаем среднее значение процентов перекрытия относительно обоих элементов\r\n return ((overlapArea / boxAArea) * 100 + (overlapArea / boxBArea) * 100) / 2;\r\n};\r\n","export const draggableDataName = 'data-vue-dnd-kit-draggable';\r\nexport const droppableDataName = 'data-vue-dnd-kit-droppable';\r\n","export const preventEvent = (event: Event) => {\r\n event.preventDefault();\r\n \r\n};\r\n\r\n","import { computed, ref, shallowRef, useId } from 'vue';\r\n\r\nimport type { IUseDragOptions } from '../types';\r\nimport { draggableDataName } from '../utils/namespaces';\r\nimport { preventEvent } from '../utils/events';\r\nimport { useDnDStore } from '../composables/useDnDStore';\r\n\r\nexport const useElementManager = (options?: IUseDragOptions) => {\r\n const {\r\n elementsMap,\r\n draggingElements,\r\n hovered,\r\n selectedElements,\r\n isDragging: isDragStarted,\r\n visibleElements,\r\n handleDragElementIntersection,\r\n } = useDnDStore();\r\n\r\n const elementRef = ref<HTMLElement | null>(null);\r\n const isOvered = computed<boolean>(\r\n () =>\r\n visibleElements.value.has(elementRef.value as HTMLElement) &&\r\n hovered.element.value === elementRef.value\r\n );\r\n\r\n const id = shallowRef(options?.id || useId());\r\n\r\n const isDragging = computed<boolean>(() => {\r\n if (!elementRef.value) return false;\r\n if (!visibleElements.value.has(elementRef.value)) return false;\r\n return draggingElements.value.has(elementRef.value);\r\n });\r\n\r\n const isAllowed = computed<boolean>(() => {\r\n if (!elementRef.value) return false;\r\n if (!isDragStarted.value) return false;\r\n if (!visibleElements.value.has(elementRef.value)) return false;\r\n\r\n const currentElement = elementsMap.value.get(elementRef.value);\r\n if (!currentElement?.groups.length) return true;\r\n\r\n return !Array.from(draggingElements.value.entries()).some(\r\n ([_, draggingElement]) => {\r\n if (!draggingElement.groups.length) return false;\r\n return !draggingElement.groups.some((group) =>\r\n currentElement.groups.includes(group)\r\n );\r\n }\r\n );\r\n });\r\n\r\n const registerElement = () => {\r\n if (!elementRef.value) throw new Error('ElementRef is not set');\r\n\r\n elementsMap.value.set(elementRef.value, {\r\n node: elementRef.value,\r\n groups: options?.groups ?? [],\r\n layer: options?.layer ?? null,\r\n defaultLayer: options?.layer ?? null,\r\n events: options?.events ?? {},\r\n data: options?.data ?? null,\r\n id: id.value,\r\n });\r\n\r\n handleDragElementIntersection('add', elementRef.value);\r\n\r\n elementRef.value.addEventListener('dragstart', preventEvent);\r\n elementRef.value.addEventListener('drag', preventEvent);\r\n elementRef.value.setAttribute(draggableDataName, 'true');\r\n elementRef.value.setAttribute('draggable', 'false');\r\n };\r\n\r\n const unregisterElement = () => {\r\n if (!elementRef.value) return;\r\n\r\n elementsMap.value.delete(elementRef.value);\r\n selectedElements.value.delete(elementRef.value);\r\n\r\n elementRef.value.removeEventListener('dragstart', preventEvent);\r\n elementRef.value.removeEventListener('drag', preventEvent);\r\n elementRef.value.removeAttribute(draggableDataName);\r\n elementRef.value.removeAttribute('draggable');\r\n };\r\n\r\n return {\r\n elementRef,\r\n registerElement,\r\n unregisterElement,\r\n isDragging,\r\n isOvered,\r\n isAllowed,\r\n id,\r\n };\r\n};\r\n","export const isDescendant = (\r\n element: HTMLElement | Element | null,\r\n container: HTMLElement | Element\r\n): boolean => {\r\n if (!element) return false;\r\n return container.contains(element);\r\n};\r\n","import {\r\n checkCollision,\r\n getBoundingBox,\r\n getCenter,\r\n getDistance,\r\n getOverlapPercent,\r\n} from './geometry';\r\n\r\nimport { IDnDStore } from '../types';\r\nimport { isDescendant } from './dom';\r\n\r\nexport const defaultCollisionDetection = (store: IDnDStore) => {\r\n const containerRect = getBoundingBox(store.activeContainer.ref.value);\r\n const containerCenter = getCenter(containerRect);\r\n const pointerX = store.pointerPosition.current.value?.x ?? 0;\r\n const pointerY = store.pointerPosition.current.value?.y ?? 0;\r\n\r\n const isPointerInActiveContainer =\r\n containerRect &&\r\n pointerX >= containerRect.x &&\r\n pointerX <= containerRect.x + containerRect.width &&\r\n pointerY >= containerRect.y &&\r\n pointerY <= containerRect.y + containerRect.height;\r\n\r\n const shouldUseNormalPriority = !isPointerInActiveContainer;\r\n\r\n const activeDragNodes = Array.from(store.draggingElements.value.keys());\r\n\r\n const allCollidingElements = Array.from(store.visibleElements.value.entries())\r\n .filter(([node, _]) => {\r\n if (!node) return false;\r\n\r\n const rect = getBoundingBox(node as HTMLElement);\r\n return rect && containerRect && checkCollision(rect, containerRect);\r\n })\r\n .map(([node, element]) => {\r\n const rect = getBoundingBox(node as HTMLElement);\r\n const elementCenter = getCenter(rect);\r\n\r\n const isPointerInElement =\r\n pointerX >= rect.x &&\r\n pointerX <= rect.x + rect.width &&\r\n pointerY >= rect.y &&\r\n pointerY <= rect.y + rect.height;\r\n\r\n const overlapPercent = getOverlapPercent(rect, containerRect);\r\n const centerDistance = getDistance(containerCenter, elementCenter);\r\n\r\n // Вычисляем глубину вложенности\r\n let depth = 0;\r\n for (const [parentNode, _] of store.visibleElements.value.entries()) {\r\n if (\r\n parentNode !== node &&\r\n parentNode &&\r\n node &&\r\n isDescendant(node as HTMLElement, parentNode as HTMLElement)\r\n ) {\r\n depth++;\r\n }\r\n }\r\n\r\n return {\r\n element,\r\n node: node as HTMLElement,\r\n isPointerInElement,\r\n overlapPercent,\r\n depth,\r\n centerDistance,\r\n };\r\n })\r\n .sort((a, b) => {\r\n if (!shouldUseNormalPriority) {\r\n if (a.isPointerInElement && b.isPointerInElement)\r\n return b.depth - a.depth;\r\n if (a.isPointerInElement !== b.isPointerInElement)\r\n return a.isPointerInElement ? -1 : 1;\r\n }\r\n if (Math.abs(a.overlapPercent - b.overlapPercent) <= 1)\r\n return a.centerDistance - b.centerDistance;\r\n return b.overlapPercent - a.overlapPercent;\r\n });\r\n\r\n const allCollidingZones = Array.from(store.visibleZones.value.entries())\r\n .filter(([node, _]) => {\r\n if (\r\n !node ||\r\n activeDragNodes.some(\r\n (dragNode) =>\r\n dragNode &&\r\n isDescendant(node as HTMLElement, dragNode as HTMLElement)\r\n )\r\n )\r\n return false;\r\n\r\n const rect = getBoundingBox(node as HTMLElement);\r\n return rect && containerRect && checkCollision(rect, containerRect);\r\n })\r\n .map(([node, zone]) => {\r\n const rect = getBoundingBox(node as HTMLElement);\r\n const zoneCenter = getCenter(rect);\r\n\r\n const isPointerInElement =\r\n pointerX >= rect.x &&\r\n pointerX <= rect.x + rect.width &&\r\n pointerY >= rect.y &&\r\n pointerY <= rect.y + rect.height;\r\n\r\n const overlapPercent = getOverlapPercent(rect, containerRect);\r\n const centerDistance = getDistance(containerCenter, zoneCenter);\r\n\r\n // Вычисляем глубину вложенности\r\n let depth = 0;\r\n for (const [parentNode, _] of store.visibleZones.value.entries()) {\r\n if (\r\n parentNode !== node &&\r\n parentNode &&\r\n node &&\r\n isDescendant(node as HTMLElement, parentNode as HTMLElement)\r\n ) {\r\n depth++;\r\n }\r\n }\r\n\r\n return {\r\n zone,\r\n node: node as HTMLElement,\r\n isPointerInElement,\r\n overlapPercent,\r\n depth,\r\n centerDistance,\r\n };\r\n })\r\n .sort((a, b) => {\r\n if (!shouldUseNormalPriority) {\r\n if (a.isPointerInElement && b.isPointerInElement)\r\n return b.depth - a.depth;\r\n if (a.isPointerInElement !== b.isPointerInElement)\r\n return a.isPointerInElement ? -1 : 1;\r\n }\r\n if (Math.abs(a.overlapPercent - b.overlapPercent) <= 1)\r\n return a.centerDistance - b.centerDistance;\r\n return b.overlapPercent - a.overlapPercent;\r\n });\r\n\r\n return [\r\n ...allCollidingElements.map((item) => item.node),\r\n ...allCollidingZones.map((item) => item.node),\r\n ];\r\n};\r\n","import type { Ref } from 'vue';\r\nimport { getBoundingBox } from '../utils/geometry';\r\nimport { preventEvent } from '../utils/events';\r\nimport { useDnDStore } from './useDnDStore';\r\n\r\nexport interface IKeyboardOptions {\r\n moveStep?: number;\r\n}\r\n\r\nexport const useKeyboard = (\r\n elementRef: Ref<HTMLElement | null>,\r\n options?: IKeyboardOptions\r\n) => {\r\n const { pointerPosition, keyboard } = useDnDStore();\r\n const moveStep = options?.moveStep || 10;\r\n\r\n const onKeyboardStart = (event: KeyboardEvent) => {\r\n preventEvent(event);\r\n\r\n const rect = getBoundingBox(elementRef.value);\r\n\r\n elementRef.value?.blur();\r\n\r\n const centerX = rect.x + rect.width / 2;\r\n const centerY = rect.y + rect.height / 2;\r\n\r\n pointerPosition.start.value = {\r\n x: centerX,\r\n y: centerY,\r\n };\r\n\r\n pointerPosition.current.value = {\r\n x: centerX,\r\n y: centerY,\r\n };\r\n\r\n pointerPosition.offset.pixel.value = {\r\n x: rect.width / 2,\r\n y: rect.height / 2,\r\n };\r\n\r\n pointerPosition.offset.percent.value = {\r\n x: 50,\r\n y: 50,\r\n };\r\n };\r\n\r\n const onKeyboardMove = () => {\r\n if (!pointerPosition.current.value) return;\r\n\r\n const currentX = pointerPosition.current.value.x;\r\n const currentY = pointerPosition.current.value.y;\r\n\r\n let newX = currentX;\r\n let newY = currentY;\r\n\r\n if (keyboard.w.value) newY -= moveStep;\r\n if (keyboard.s.value) newY += moveStep;\r\n if (keyboard.a.value) newX -= moveStep;\r\n if (keyboard.d.value) newX += moveStep;\r\n\r\n pointerPosition.current.value = {\r\n x: newX,\r\n y: newY,\r\n };\r\n };\r\n\r\n const onKeyboardEnd = () => {\r\n pointerPosition.current.value = null;\r\n pointerPosition.start.value = null;\r\n pointerPosition.offset.pixel.value = null;\r\n pointerPosition.offset.percent.value = null;\r\n };\r\n\r\n return {\r\n onKeyboardStart,\r\n onKeyboardMove,\r\n onKeyboardEnd,\r\n };\r\n};\r\n","import type { Ref } from 'vue';\r\nimport { getOffset } from '../utils/geometry';\r\nimport { useDnDStore } from './useDnDStore';\r\n\r\nexport const usePointer = (elementRef: Ref<HTMLElement | null>) => {\r\n const store = useDnDStore();\r\n\r\n const onPointerStart = (event: PointerEvent) => {\r\n store.pointerPosition.start.value = { x: event.clientX, y: event.clientY };\r\n store.pointerPosition.current.value = {\r\n x: event.clientX,\r\n y: event.clientY,\r\n };\r\n\r\n const { pixel, percent } = getOffset(elementRef.value, {\r\n x: event.clientX,\r\n y: event.clientY,\r\n });\r\n\r\n store.pointerPosition.offset.pixel.value = pixel;\r\n store.pointerPosition.offset.percent.value = percent;\r\n };\r\n\r\n const onPointerMove = (event: PointerEvent | WheelEvent) => {\r\n store.pointerPosition.current.value = {\r\n x: event.clientX,\r\n y: event.clientY,\r\n };\r\n };\r\n\r\n const onPointerEnd = () => {\r\n store.pointerPosition.current.value = null;\r\n store.pointerPosition.start.value = null;\r\n store.pointerPosition.offset.pixel.value = null;\r\n store.pointerPosition.offset.percent.value = null;\r\n };\r\n\r\n return {\r\n onPointerStart,\r\n onPointerMove,\r\n onPointerEnd,\r\n };\r\n};\r\n","import type {\r\n ICollisionDetectionResult,\r\n IDraggingElement,\r\n IUseDragOptions,\r\n} from '../types';\r\n\r\nimport type { Ref } from 'vue';\r\nimport { defaultCollisionDetection } from '../utils/sensor';\r\nimport { isDescendant } from '../utils/dom';\r\nimport { useDnDStore } from './useDnDStore';\r\nimport { useKeyboard } from './useKeyboard';\r\nimport { usePointer } from './usePointer';\r\nimport { useThrottleFn } from '@vueuse/core';\r\n\r\nexport const useSensor = (\r\n elementRef: Ref<HTMLElement | null>,\r\n options?: IUseDragOptions\r\n) => {\r\n const store = useDnDStore();\r\n\r\n const { onPointerStart, onPointerMove, onPointerEnd } =\r\n usePointer(elementRef);\r\n\r\n const { onKeyboardStart, onKeyboardMove, onKeyboardEnd } = useKeyboard(\r\n elementRef,\r\n options?.keyboard\r\n );\r\n\r\n let animationFrameId: number | null = null;\r\n\r\n const getDraggingElements = (\r\n draggableElement: HTMLElement | null\r\n ): Map<HTMLElement | Element, IDraggingElement> => {\r\n if (!draggableElement) return new Map();\r\n\r\n const isDraggableInSelection =\r\n store.selectedElements.value.has(draggableElement);\r\n\r\n if (store.selectedElements.value.size > 0 && isDraggableInSelection) {\r\n const result = new Map<HTMLElement | Element, IDraggingElement>();\r\n\r\n store.selectedElements.value.forEach((node) => {\r\n const element = store.elementsMap.value.get(node);\r\n if (!element) return;\r\n\r\n result.set(node, {\r\n ...element,\r\n initialHTML: element.node?.outerHTML ?? '',\r\n initialRect: element.node?.getBoundingClientRect(),\r\n });\r\n });\r\n\r\n return result;\r\n }\r\n\r\n store.selectedElements.value.clear();\r\n\r\n const element = store.elementsMap.value.get(draggableElement);\r\n if (!element) return new Map();\r\n\r\n const result = new Map<HTMLElement | Element, IDraggingElement>();\r\n result.set(draggableElement, {\r\n ...element,\r\n initialHTML: element.node?.outerHTML ?? '',\r\n initialRect: element.node?.getBoundingClientRect(),\r\n });\r\n\r\n return result;\r\n };\r\n\r\n const processUserCollisionResults = (\r\n htmlElements: HTMLElement | HTMLElement[] | Element | Element[] | null\r\n ) => {\r\n if (!htmlElements) {\r\n return { element: null, zone: null };\r\n }\r\n\r\n const elements = Array.isArray(htmlElements)\r\n ? htmlElements\r\n : [htmlElements];\r\n\r\n const activeDragNodes = Array.from(store.draggingElements.value.keys());\r\n\r\n const filteredZoneElement = elements.find((htmlElement) => {\r\n if (!store.visibleZones.value.has(htmlElement)) return false;\r\n\r\n const zone = store.zonesMap.value.get(htmlElement);\r\n if (!zone) return false;\r\n\r\n if (\r\n activeDragNodes.some(\r\n (dragNode) =>\r\n dragNode &&\r\n (dragNode === zone.node ||\r\n isDescendant(zone.node as HTMLElement, dragNode as HTMLElement))\r\n )\r\n )\r\n return false;\r\n\r\n if (zone.groups.length) {\r\n const isCompatible = !Array.from(\r\n store.draggingElements.value.values()\r\n ).some((element) => {\r\n if (!element.groups.length) return false;\r\n return !element.groups.some((group) => zone.groups.includes(group));\r\n });\r\n if (!isCompatible) return false;\r\n }\r\n\r\n return true;\r\n });\r\n\r\n if (!filteredZoneElement) {\r\n return { element: null, zone: null };\r\n }\r\n\r\n const possibleElement = elements.find(\r\n (htmlElement) =>\r\n store.visibleElements.value.has(htmlElement) &&\r\n store.elementsMap.value.has(htmlElement) &&\r\n !activeDragNodes.some(\r\n (dragNode) =>\r\n dragNode &&\r\n (dragNode === htmlElement ||\r\n isDescendant(\r\n htmlElement as HTMLElement,\r\n dragNode as HTMLElement\r\n ) ||\r\n isDescendant(dragNode as HTMLElement, htmlElement as HTMLElement))\r\n ) &&\r\n (htmlElement === filteredZoneElement ||\r\n isDescendant(\r\n htmlElement as HTMLElement,\r\n filteredZoneElement as HTMLElement\r\n ))\r\n );\r\n\r\n return {\r\n element: possibleElement || null,\r\n zone: filteredZoneElement,\r\n };\r\n };\r\n\r\n const detectCollisions = options?.sensor?.setup || defaultCollisionDetection;\r\n\r\n const processCollisionResults = (results: ICollisionDetectionResult) => {\r\n const previousElement = store.hovered.element.value;\r\n const previousZone = store.hovered.zone.value;\r\n\r\n store.hovered.element.value = results.element;\r\n store.hovered.zone.value = results.zone;\r\n\r\n if (previousElement) {\r\n if (store.hovered.element.value !== previousElement) {\r\n store.elementsMap.value.get(previousElement)?.events?.onLeave?.(store);\r\n\r\n if (store.hovered.element.value)\r\n store.elementsMap.value\r\n .get(store.hovered.element.value)\r\n ?.events?.onHover?.(store);\r\n }\r\n }\r\n\r\n if (previousZone) {\r\n if (store.hovered.zone.value !== previousZone) {\r\n store.zonesMap.value.get(previousZone)?.events?.onLeave?.(store);\r\n\r\n if (store.hovered.zone.value)\r\n store.zonesMap.value\r\n .get(store.hovered.zone.value)\r\n ?.events?.onHover?.(store);\r\n }\r\n }\r\n };\r\n\r\n const throttledDetectAndProcess = useThrottleFn(() => {\r\n const htmlElements = detectCollisions(store);\r\n const processedResults = processUserCollisionResults(htmlElements);\r\n processCollisionResults(processedResults);\r\n }, options?.sensor?.throttle ?? 0);\r\n\r\n const animationLoop = () => {\r\n throttledDetectAndProcess();\r\n\r\n animationFrameId = requestAnimationFrame(animationLoop);\r\n };\r\n\r\n const startDetection = () => animationLoop();\r\n\r\n const stopDetection = () => {\r\n if (animationFrameId !== null) {\r\n cancelAnimationFrame(animationFrameId);\r\n animationFrameId = null;\r\n }\r\n };\r\n\r\n const activate = (event: PointerEvent | KeyboardEvent) => {\r\n store.draggingElements.value = getDraggingElements(elementRef.value);\r\n store.draggingElements.value.forEach((element) =>\r\n element.events.onStart?.(store)\r\n );\r\n\r\n if (event instanceof PointerEvent) {\r\n onPointerStart(event);\r\n } else {\r\n onKeyboardStart(event);\r\n }\r\n\r\n startDetection();\r\n };\r\n\r\n const track = (event: PointerEvent | WheelEvent | KeyboardEvent) => {\r\n store.draggingElements.value.forEach((element) =>\r\n element.events.onMove?.(store)\r\n );\r\n\r\n if (event instanceof KeyboardEvent) {\r\n onKeyboardMove();\r\n } else {\r\n onPointerMove(event);\r\n }\r\n };\r\n\r\n const deactivate = (triggerEvents = true) => {\r\n onPointerEnd();\r\n onKeyboardEnd();\r\n\r\n if (triggerEvents) {\r\n if (store.hovered.zone.value) {\r\n const zone = store.zonesMap.value.get(store.hovered.zone.value);\r\n zone?.events.onDrop?.(store);\r\n } else {\r\n store.draggingElements.value.forEach((element) =>\r\n element.events.onEnd?.(store)\r\n );\r\n }\r\n\r\n store.selectedElements.value.clear();\r\n }\r\n\r\n store.draggingElements.value.clear();\r\n\r\n store.hovered.zone.value = null;\r\n store.hovered.element.value = null;\r\n\r\n stopDetection();\r\n };\r\n\r\n return {\r\n activate,\r\n track,\r\n deactivate,\r\n };\r\n};\r\n","import { Ref, markRaw } from 'vue';\r\n\r\nimport type { IUseDragOptions } from '../types';\r\nimport { createGlobalState } from '@vueuse/core';\r\nimport { preventEvent } from '../utils/events';\r\nimport { useDnDStore } from '../composables/useDnDStore';\r\nimport { useSensor } from '../composables/useSensor';\r\n\r\nenum EKeyboardKey {\r\n ESCAPE = 'Escape',\r\n SPACE = 'Space',\r\n ENTER = 'Enter',\r\n W = 'KeyW',\r\n A = 'KeyA',\r\n S = 'KeyS',\r\n D = 'KeyD',\r\n CONTROL = 'ControlLeft',\r\n ALT = 'AltLeft',\r\n SHIFT = 'ShiftLeft',\r\n META = 'MetaLeft',\r\n}\r\n\r\nexport const useEventManager = createGlobalState(() => {\r\n let originalUserSelect = '';\r\n let originalTouchAction = '';\r\n let originalOverscrollBehavior = '';\r\n\r\n let currentMoveHandler: ((event: any) => void) | null = null;\r\n let currentEndHandler: (() => void) | null = null;\r\n let currentCancelHandler: (() => void) | null = null;\r\n let currentScrollHandler: ((event: WheelEvent) => void) | null = null;\r\n let currentKeyHandler: ((event: KeyboardEvent) => void) | null = null;\r\n\r\n const { activeContainer } = useDnDStore();\r\n\r\n const disableInteractions = () => {\r\n const body = document.body;\r\n\r\n originalUserSelect = body.style.userSelect;\r\n\r\n body.style.userSelect = 'none';\r\n\r\n window.addEventListener('contextmenu', preventEvent);\r\n window.addEventListener('selectstart', preventEvent);\r\n window.addEventListener('touchstart', preventEvent);\r\n window.addEventListener('touchmove', preventEvent);\r\n };\r\n\r\n const enableInteractions = () => {\r\n const body = document.body;\r\n\r\n body.style.userSelect = originalUserSelect;\r\n body.style.touchAction = originalTouchAction;\r\n body.style.overscrollBehavior = originalOverscrollBehavior;\r\n\r\n window.removeEventListener('contextmenu', preventEvent);\r\n window.removeEventListener('selectstart', preventEvent);\r\n window.removeEventListener('touchstart', preventEvent);\r\n window.removeEventListener('touchmove', preventEvent);\r\n };\r\n\r\n const clearAllListeners = () => {\r\n if (currentMoveHandler) {\r\n document.removeEventListener('pointermove', currentMoveHandler);\r\n currentMoveHandler = null;\r\n }\r\n\r\n if (currentEndHandler) {\r\n document.removeEventListener('pointerup', currentEndHandler);\r\n currentEndHandler = null;\r\n }\r\n\r\n if (currentCancelHandler) {\r\n currentCancelHandler = null;\r\n }\r\n\r\n if (currentScrollHandler) {\r\n document.removeEventListener('wheel', currentScrollHandler);\r\n currentScrollHandler = null;\r\n }\r\n\r\n if (currentKeyHandler) {\r\n document.removeEventListener('keydown', currentKeyHandler);\r\n document.removeEventListener('keypress', currentKeyHandler);\r\n document.removeEventListener('keyup', currentKeyHandler);\r\n currentKeyHandler = null;\r\n }\r\n };\r\n\r\n const handleDragStart = (\r\n event: PointerEvent | KeyboardEvent,\r\n elementRef: Ref<HTMLElement | null>,\r\n options?: IUseDragOptions\r\n ) => {\r\n clearAllListeners();\r\n\r\n (event.target as HTMLElement).blur();\r\n\r\n if (options?.container)\r\n activeContainer.component.value = markRaw(options.container);\r\n\r\n const { activate, track, deactivate } = useSensor(elementRef, options);\r\n\r\n currentEndHandler = () => {\r\n activeContainer.component.value = null;\r\n enableInteractions();\r\n deactivate(true);\r\n clearAllListeners();\r\n };\r\n\r\n currentCancelHandler = () => {\r\n activeContainer.component.value = null;\r\n enableInteractions();\r\n deactivate(false);\r\n clearAllListeners();\r\n };\r\n\r\n currentMoveHandler = (event: PointerEvent | KeyboardEvent) => track(event);\r\n currentScrollHandler = (event: WheelEvent) => track(event);\r\n currentKeyHandler = (event: KeyboardEvent) => {\r\n if (event.type === 'keyup') {\r\n if (event.code === EKeyboardKey.ESCAPE) currentCancelHandler?.();\r\n if (event.code === EKeyboardKey.ENTER) currentEndHandler?.();\r\n }\r\n\r\n track(event);\r\n };\r\n\r\n disableInteractions();\r\n activate(event);\r\n\r\n document.addEventListener('pointermove', currentMoveHandler);\r\n document.addEventListener('pointerup', currentEndHandler);\r\n document.addEventListener('wheel', currentScrollHandler);\r\n document.addEventListener('keydown', currentKeyHandler);\r\n document.addEventListener('keypress', currentKeyHandler);\r\n document.addEventListener('keyup', currentKeyHandler);\r\n };\r\n\r\n return {\r\n handleDragStart,\r\n };\r\n});\r\n","import { onBeforeUnmount, onMounted } from 'vue';\r\n\r\nimport type { IUseDragOptions } from '../types';\r\nimport { useDnDStore } from './useDnDStore';\r\nimport { useElementManager } from '../managers/useElementManager';\r\nimport { useEventManager } from '../managers/useEventManager';\r\n\r\nexport const useDraggable = (options?: IUseDragOptions) => {\r\n const {\r\n id,\r\n elementRef,\r\n isDragging,\r\n isOvered,\r\n isAllowed,\r\n registerElement,\r\n unregisterElement,\r\n } = useElementManager(options);\r\n\r\n const { pointerPosition } = useDnDStore();\r\n const { handleDragStart: start } = useEventManager();\r\n\r\n const handleDragStart = (event: PointerEvent | KeyboardEvent) =>\r\n start(event, elementRef, options);\r\n\r\n onMounted(registerElement);\r\n onBeforeUnmount(unregisterElement);\r\n\r\n return {\r\n pointerPosition,\r\n elementRef,\r\n isDragging,\r\n isOvered,\r\n isAllowed,\r\n handleDragStart,\r\n id,\r\n };\r\n};\r\n","import { computed, ref } from 'vue';\r\n\r\nimport type { IUseDropOptions } from '../types';\r\nimport { useDnDStore } from '../composables/useDnDStore';\r\n\r\nexport const useZoneManager = (options?: IUseDropOptions) => {\r\n const {\r\n zonesMap,\r\n hovered,\r\n draggingElements,\r\n isDragging,\r\n handleDropZoneIntersection,\r\n } = useDnDStore();\r\n\r\n const elementRef = ref<HTMLElement | null>(null);\r\n\r\n const isOvered = computed<boolean>(() => {\r\n return hovered.zone.value === elementRef.value;\r\n });\r\n\r\n const isAllowed = computed<boolean>(() => {\r\n if (!elementRef.value || !isDragging.value) return false;\r\n\r\n const currentZone = zonesMap.value.get(elementRef.value);\r\n if (!currentZone?.groups.length) return true;\r\n\r\n return !Array.from(draggingElements.value.values()).some((element) => {\r\n if (!element.groups.length) return false;\r\n return !element.groups.some((group) =>\r\n currentZone.groups.includes(group)\r\n );\r\n });\r\n });\r\n\r\n const registerZone = () => {\r\n if (!elementRef.value) throw new Error('elementRef is not set');\r\n\r\n handleDropZoneIntersection('add', elementRef.value);\r\n\r\n zonesMap.value.set(elementRef.value, {\r\n node: elementRef.value,\r\n groups: options?.groups ?? [],\r\n events: options?.events ?? {},\r\n data: options?.data ?? undefined,\r\n });\r\n\r\n elementRef.value.setAttribute('data-dnd-droppable', 'true');\r\n };\r\n\r\n const unregisterZone = () => {\r\n if (!elementRef.value) return;\r\n\r\n handleDropZoneIntersection('remove', elementRef.value);\r\n\r\n zonesMap.value.delete(elementRef.value);\r\n };\r\n\r\n return { elementRef, registerZone, unregisterZone, isOvered, isAllowed };\r\n};\r\n","import { onBeforeUnmount, onMounted } from 'vue';\r\n\r\nimport type { IUseDropOptions } from '../types';\r\nimport { useZoneManager } from '../managers/useZoneManager';\r\n\r\nexport const useDroppable = (options?: IUseDropOptions) => {\r\n const { elementRef, registerZone, unregisterZone, isOvered, isAllowed } =\r\n useZoneManager(options);\r\n\r\n // Register/unregister drop zone with store\r\n onMounted(registerZone);\r\n onBeforeUnmount(unregisterZone);\r\n\r\n return { elementRef, isOvered, isAllowed };\r\n};\r\n","import { computed, type Ref } from 'vue';\r\nimport { useDnDStore } from './useDnDStore';\r\nimport { isDescendant } from '../utils/dom';\r\n\r\nexport const useSelection = (elementRef: Ref<HTMLElement | null>) => {\r\n const { selectedElements, elementsMap } = useDnDStore();\r\n\r\n const isSelected = computed<boolean>(() =>\r\n elementRef.value ? selectedElements.value.has(elementRef.value) : false\r\n );\r\n\r\n const isParentOfSelected = computed(() => {\r\n if (!elementRef.value) return false;\r\n\r\n for (const node of selectedElements.value) {\r\n if (\r\n node &&\r\n isDescendant(node as HTMLElement, elementRef.value as HTMLElement)\r\n ) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n\r\n const hasSelectedParent = computed(() => {\r\n if (!elementRef.value) return false;\r\n\r\n for (const node of selectedElements.value) {\r\n if (\r\n node &&\r\n isDescendant(elementRef.value as HTMLElement, node as HTMLElement)\r\n ) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n\r\n const handleUnselect = () => {\r\n if (!elementRef.value) return;\r\n selectedElements.value.delete(elementRef.value);\r\n };\r\n\r\n const handleSelect = () => {\r\n if (!elementRef.value) return;\r\n const element = elementsMap.value.get(elementRef.value);\r\n if (!element) return;\r\n\r\n if (isParentOfSelected.value) {\r\n // Удаляем все дочерние выбранные элементы\r\n for (const node of selectedElements.value) {\r\n if (\r\n node &&\r\n isDescendant(node as HTMLElement, elementRef.value as HTMLElement)\r\n ) {\r\n selectedElements.value.delete(node);\r\n }\r\n }\r\n }\r\n\r\n if (hasSelectedParent.value) {\r\n // Удаляем все родительские выбранные элементы\r\n for (const node of selectedElements.value) {\r\n if (\r\n node &&\r\n isDescendant(elementRef.value as HTMLElement, node as HTMLElement)\r\n ) {\r\n selectedElements.value.delete(node);\r\n }\r\n }\r\n }\r\n\r\n selectedElements.value.add(elementRef.value);\r\n };\r\n\r\n const handleToggleSelect = () => {\r\n if (!elementRef.value) return;\r\n\r\n selectedElements.value.has(elementRef.value)\r\n ? handleUnselect()\r\n : handleSelect();\r\n };\r\n\r\n return {\r\n handleUnselect,\r\n handleSelect,\r\n handleToggleSelect,\r\n isSelected,\r\n isParentOfSelected,\r\n };\r\n};\r\n"],"names":["_DnDOperations","__publicField","source","index","item","target","sourceIndex","targetIndex","sourceItem","targetItem","store","hoveredElement","hoveredZone","targetSource","_b","_a","_d","_c","firstElement","firstIndex","_e","sortDirection","a","b","element","_g","_f","_h","items","DnDOperations","useDnDStore","createGlobalState","draggingElements","ref","isDragging","computed","activeContainer","shallowRef","elementsMap","selectedElements","zonesMap","visibleZones","visibleElements","elementObserver","entries","entry","zoneObserver","handleDragElementIntersection","action","handleDropZoneIntersection","pointerPosition","w","s","d","ctrl","shift","alt","meta","useMagicKeys","hovered","useDragContainer","options","elementRef","onMounted","onUnmounted","computedStyle","overlay","DefaultOverlay","VueDndKitPlugin","app","DragOverlay","originalMount","rootContainer","instance","rootEl","overlayContainer","vnode","createVNode","render","originalUnmount","checkCollision","boxA","boxB","getBoundingBox","rect","getCenter","box","getOffset","pointer","getDistance","pointA","pointB","dx","dy","getOverlapPercent","xOverlap","yOverlap","overlapArea","boxAArea","boxBArea","draggableDataName","preventEvent","event","useElementManager","isDragStarted","isOvered","id","useId","isAllowed","currentElement","_","draggingElement","group","isDescendant","container","defaultCollisionDetection","containerRect","containerCenter","pointerX","pointerY","shouldUseNormalPriority","activeDragNodes","allCollidingElements","node","elementCenter","isPointerInElement","overlapPercent","centerDistance","depth","parentNode","allCollidingZones","dragNode","zone","zoneCenter","useKeyboard","keyboard","moveStep","centerX","centerY","currentX","currentY","newX","newY","usePointer","pixel","percent","useSensor","onPointerStart","onPointerMove","onPointerEnd","onKeyboardStart","onKeyboardMove","onKeyboardEnd","animationFrameId","getDraggingElements","draggableElement","isDraggableInSelection","result","processUserCollisionResults","htmlElements","elements","filteredZoneElement","htmlElement","detectCollisions","processCollisionResults","results","previousElement","previousZone","_i","_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","onBeforeUnmount","useZoneManager","currentZone","useDroppable","registerZone","unregisterZone","useSelection","isSelected","isParentOfSelected","hasSelectedParent","handleUnselect","handleSelect"],"mappings":"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"}
@@ -282,7 +282,7 @@ const K = ce(() => {
282
282
  mode: y(e).options.value.mode,
283
283
  type: y(e).options.value.type,
284
284
  css: y(e).options.value.css,
285
- appear: y(e).options.value.appear,
285
+ appear: !0,
286
286
  "appear-active-class": y(e).options.value.appearActiveClass,
287
287
  "appear-from-class": y(e).options.value.appearFromClass,
288
288
  "appear-to-class": y(e).options.value.appearToClass,
@@ -300,7 +300,7 @@ const K = ce(() => {
300
300
  (F(), $(ee(t.value)))
301
301
  ]),
302
302
  _: 1
303
- }, 8, ["name", "duration", "enter-from-class", "enter-to-class", "enter-active-class", "leave-from-class", "leave-to-class", "leave-active-class", "mode", "type", "css", "appear", "appear-active-class", "appear-from-class", "appear-to-class", "persisted", "onEnter", "onLeave", "onBeforeEnter", "onBeforeLeave", "onBeforeAppear", "onAfterEnter", "onAfterLeave", "onAfterAppear"])) : (F(), $(ee(t.value), { key: 1 }));
303
+ }, 8, ["name", "duration", "enter-from-class", "enter-to-class", "enter-active-class", "leave-from-class", "leave-to-class", "leave-active-class", "mode", "type", "css", "appear-active-class", "appear-from-class", "appear-to-class", "persisted", "onEnter", "onLeave", "onBeforeEnter", "onBeforeLeave", "onBeforeAppear", "onAfterEnter", "onAfterLeave", "onAfterAppear"])) : (F(), $(ee(t.value), { key: 1 }));
304
304
  }
305
305
  }), Ve = {
306
306
  install(n) {
@@ -1 +1 @@
1
- {"version":3,"file":"vue-dnd-kit-core.es.js","sources":["../src/utils/operations.ts","../src/composables/useDnDStore.ts","../src/composables/useDragContainer.ts","../src/components/DefaultOverlay.vue","../src/components/DragOverlay.vue","../src/plugin.ts","../src/utils/geometry.ts","../src/utils/namespaces.ts","../src/utils/events.ts","../src/managers/useElementManager.ts","../src/utils/dom.ts","../src/utils/sensor.ts","../src/composables/useKeyboard.ts","../src/composables/usePointer.ts","../src/composables/useSensor.ts","../src/managers/useEventManager.ts","../src/composables/useDraggable.ts","../src/managers/useZoneManager.ts","../src/composables/useDroppable.ts","../src/composables/useSelection.ts"],"sourcesContent":["import { IDnDStore } from '../types';\r\n\r\nexport class DnDOperations {\r\n static remove = (source?: any[], index?: number) => {\r\n if (!source || index === undefined) return;\r\n const [item] = source.splice(index, 1);\r\n return item;\r\n };\r\n static insert = (target?: any[], index?: number, item?: any) => {\r\n if (!target || index === undefined) return;\r\n target.splice(index, 0, item);\r\n };\r\n static move = (\r\n source?: any[],\r\n sourceIndex?: number,\r\n target?: any[],\r\n targetIndex?: number\r\n ) => {\r\n if (\r\n !source ||\r\n !target ||\r\n sourceIndex === undefined ||\r\n targetIndex === undefined\r\n )\r\n return;\r\n const item = DnDOperations.remove(source, sourceIndex);\r\n DnDOperations.insert(target, targetIndex, item);\r\n };\r\n static swap = (\r\n source?: any[],\r\n sourceIndex?: number,\r\n target?: any[],\r\n targetIndex?: number\r\n ) => {\r\n if (\r\n !source ||\r\n !target ||\r\n sourceIndex === undefined ||\r\n targetIndex === undefined\r\n )\r\n return;\r\n\r\n const sourceItem = source[sourceIndex];\r\n const targetItem = target[targetIndex];\r\n\r\n source[sourceIndex] = targetItem;\r\n target[targetIndex] = sourceItem;\r\n };\r\n static copy = (\r\n source?: any[],\r\n index?: number,\r\n target?: any[],\r\n targetIndex?: number\r\n ) => {\r\n if (!source || index === undefined || !target || targetIndex === undefined)\r\n return;\r\n const item = source[index];\r\n DnDOperations.insert(target, targetIndex, item);\r\n };\r\n static applyTransfer = (store: IDnDStore) => {\r\n const hoveredElement = store.hovered.element.value;\r\n const hoveredZone = store.hovered.zone.value;\r\n\r\n if (hoveredElement) {\r\n const targetSource =\r\n store.elementsMap.value.get(hoveredElement)?.data?.source;\r\n const targetIndex =\r\n store.elementsMap.value.get(hoveredElement)?.data?.index;\r\n\r\n const firstElement = store.draggingElements.value.values().next().value;\r\n const firstIndex = firstElement?.data?.index;\r\n\r\n const sortDirection =\r\n firstIndex !== undefined &&\r\n targetIndex !== undefined &&\r\n firstIndex > targetIndex\r\n ? 1\r\n : -1;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort(\r\n (a, b) => sortDirection * ((a.data?.index || 0) - (b.data?.index || 0))\r\n );\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n } else if (hoveredZone) {\r\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\r\n const targetIndex = targetSource?.length;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n }\r\n };\r\n\r\n static applyCopy = (store: IDnDStore) => {\r\n const hoveredElement = store.hovered.element.value;\r\n const hoveredZone = store.hovered.zone.value;\r\n\r\n if (hoveredElement) {\r\n const targetSource =\r\n store.elementsMap.value.get(hoveredElement)?.data?.source;\r\n const targetIndex =\r\n store.elementsMap.value.get(hoveredElement)?.data?.index;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.copy(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n } else if (hoveredZone) {\r\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\r\n const targetIndex = targetSource?.length;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.copy(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n }\r\n };\r\n static applySwap = (store: IDnDStore) => {\r\n const hoveredElement = store.hovered.element.value;\r\n const hoveredZone = store.hovered.zone.value;\r\n\r\n if (hoveredElement && store.draggingElements.value.size === 1) {\r\n const element = store.draggingElements.value.values().next().value;\r\n DnDOperations.swap(\r\n element?.data?.source,\r\n element?.data?.index,\r\n store.elementsMap.value.get(hoveredElement)?.data?.source,\r\n store.elementsMap.value.get(hoveredElement)?.data?.index\r\n );\r\n } else if (hoveredZone) {\r\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\r\n const targetIndex = targetSource?.length;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n }\r\n };\r\n static applyRemove = (store: IDnDStore) => {\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) => {\r\n if (element.data?.source && element.data?.index !== undefined) {\r\n DnDOperations.remove(element.data.source, element.data.index);\r\n }\r\n });\r\n };\r\n static applyInsert = (store: IDnDStore, items: any[]) => {\r\n const hoveredElement = store.hovered.element.value;\r\n const hoveredZone = store.hovered.zone.value;\r\n\r\n if (hoveredElement && items.length > 0) {\r\n const targetSource =\r\n store.elementsMap.value.get(hoveredElement)?.data?.source;\r\n const targetIndex =\r\n store.elementsMap.value.get(hoveredElement)?.data?.index;\r\n\r\n items.forEach((item) => {\r\n DnDOperations.insert(targetSource, targetIndex, item);\r\n });\r\n } else if (hoveredZone) {\r\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\r\n const targetIndex = targetSource?.length;\r\n\r\n items.forEach((item) => {\r\n DnDOperations.insert(targetSource, targetIndex, item);\r\n });\r\n }\r\n };\r\n}\r\n","import type {\r\n IDragElement,\r\n IDraggingElement,\r\n IDropZone,\r\n IPoint,\r\n} from '../types';\r\nimport {\r\n computed,\r\n ref,\r\n shallowRef,\r\n type Component,\r\n type TransitionProps,\r\n} from 'vue';\r\nimport { createGlobalState, useMagicKeys } from '@vueuse/core';\r\n\r\nexport const useDnDStore = createGlobalState(() => {\r\n const draggingElements = ref<Map<HTMLElement | Element, IDraggingElement>>(\r\n new Map()\r\n );\r\n const isDragging = computed<boolean>(() => draggingElements.value.size > 0);\r\n\r\n const activeContainer = {\r\n component: ref<Component | null>(null),\r\n ref: shallowRef<HTMLElement | null>(null),\r\n options: shallowRef<TransitionProps | null>(null),\r\n };\r\n\r\n const elementsMap = ref<Map<HTMLElement | Element, IDragElement>>(new Map());\r\n const selectedElements = ref<Set<HTMLElement | Element>>(new Set());\r\n const zonesMap = ref<Map<HTMLElement | Element, IDropZone>>(new Map());\r\n const visibleZones = ref<Set<HTMLElement | Element>>(new Set());\r\n const visibleElements = ref<Set<HTMLElement | Element>>(new Set());\r\n\r\n const elementObserver = new IntersectionObserver((entries) => {\r\n entries.forEach((entry) =>\r\n visibleElements.value[entry.isIntersecting ? 'add' : 'delete'](\r\n entry.target\r\n )\r\n );\r\n });\r\n const zoneObserver = new IntersectionObserver((entries) => {\r\n entries.forEach((entry) =>\r\n visibleZones.value[entry.isIntersecting ? 'add' : 'delete'](entry.target)\r\n );\r\n });\r\n\r\n const handleDragElementIntersection = (\r\n action: 'add' | 'remove',\r\n element: HTMLElement | Element\r\n ) => {\r\n if (action === 'add') {\r\n elementObserver.observe(element);\r\n } else {\r\n elementObserver.unobserve(element);\r\n visibleElements.value.delete(element);\r\n }\r\n };\r\n\r\n const handleDropZoneIntersection = (\r\n action: 'add' | 'remove',\r\n element: HTMLElement | Element\r\n ) => {\r\n if (action === 'add') {\r\n zoneObserver.observe(element);\r\n } else {\r\n zoneObserver.unobserve(element);\r\n visibleZones.value.delete(element);\r\n }\r\n };\r\n\r\n const pointerPosition = {\r\n start: shallowRef<IPoint | null>(null),\r\n current: shallowRef<IPoint | null>(null),\r\n offset: {\r\n percent: shallowRef<IPoint | null>(null),\r\n pixel: shallowRef<IPoint | null>(null),\r\n },\r\n };\r\n\r\n const { w, s, a, d, ctrl, shift, alt, meta } = useMagicKeys();\r\n\r\n const hovered = {\r\n zone: shallowRef<HTMLElement | Element | null>(null),\r\n element: shallowRef<HTMLElement | Element | null>(null),\r\n };\r\n\r\n return {\r\n draggingElements,\r\n isDragging,\r\n activeContainer,\r\n elementsMap,\r\n selectedElements,\r\n zonesMap,\r\n visibleZones,\r\n visibleElements,\r\n pointerPosition,\r\n keyboard: {\r\n w,\r\n s,\r\n a,\r\n d,\r\n ctrl,\r\n shift,\r\n alt,\r\n meta,\r\n },\r\n hovered,\r\n handleDragElementIntersection,\r\n handleDropZoneIntersection,\r\n };\r\n});\r\n","import { onUnmounted, onMounted, ref, type TransitionProps } from 'vue';\r\n\r\nimport { useDnDStore } from './useDnDStore';\r\n\r\nexport const useDragContainer = (options?: TransitionProps) => {\r\n const elementRef = ref<HTMLElement | null>(null);\r\n\r\n const { draggingElements, pointerPosition, isDragging, activeContainer } =\r\n useDnDStore();\r\n\r\n onMounted(() => {\r\n activeContainer.ref = elementRef;\r\n activeContainer.options.value = options ?? null;\r\n });\r\n\r\n onUnmounted(() => {\r\n activeContainer.ref.value = null;\r\n activeContainer.options.value = null;\r\n });\r\n\r\n return {\r\n elementRef,\r\n draggingElements,\r\n pointerPosition,\r\n isDragging,\r\n };\r\n};\r\n","<script setup lang=\"ts\">\r\n import { computed, CSSProperties } from 'vue';\r\n import { useDragContainer } from '../composables/useDragContainer';\r\n\r\n const { elementRef, pointerPosition, isDragging, draggingElements } =\r\n useDragContainer();\r\n\r\n const computedStyle = computed<CSSProperties>(() => ({\r\n transform: `translate3d(${\r\n (pointerPosition.current.value?.x ?? 0) -\r\n (pointerPosition.offset.pixel.value?.x ?? 0)\r\n }px, ${\r\n (pointerPosition.current.value?.y ?? 0) -\r\n (pointerPosition.offset.pixel.value?.y ?? 0)\r\n }px, 0)`,\r\n zIndex: 1000,\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n transition: '0.3s cubic-bezier(0.165, 0.84, 0.44, 1)',\r\n }));\r\n</script>\r\n\r\n<template>\r\n <div\r\n v-if=\"isDragging\"\r\n ref=\"elementRef\"\r\n :style=\"computedStyle\"\r\n >\r\n <div\r\n v-for=\"[_, element] in draggingElements\"\r\n :key=\"element.id\"\r\n v-html=\"element.initialHTML\"\r\n :style=\"{\r\n width: `${element.initialRect?.width}px`,\r\n height: `${element.initialRect?.height}px`,\r\n }\"\r\n />\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n import { computed, Transition } from 'vue';\r\n import { useDnDStore } from '../composables/useDnDStore';\r\n import DefaultOverlay from './DefaultOverlay.vue';\r\n\r\n const { activeContainer } = useDnDStore();\r\n\r\n const overlay = computed(() => {\r\n return activeContainer.component.value ?? DefaultOverlay;\r\n });\r\n</script>\r\n\r\n<template>\r\n <Transition\r\n v-if=\"activeContainer.options.value\"\r\n :name=\"activeContainer.options.value.name\"\r\n :duration=\"activeContainer.options.value.duration\"\r\n :enter-from-class=\"activeContainer.options.value.enterFromClass\"\r\n :enter-to-class=\"activeContainer.options.value.enterToClass\"\r\n :enter-active-class=\"activeContainer.options.value.enterActiveClass\"\r\n :leave-from-class=\"activeContainer.options.value.leaveFromClass\"\r\n :leave-to-class=\"activeContainer.options.value.leaveToClass\"\r\n :leave-active-class=\"activeContainer.options.value.leaveActiveClass\"\r\n :mode=\"activeContainer.options.value.mode\"\r\n :type=\"activeContainer.options.value.type\"\r\n :css=\"activeContainer.options.value.css\"\r\n :appear=\"activeContainer.options.value.appear\"\r\n :appear-active-class=\"activeContainer.options.value.appearActiveClass\"\r\n :appear-from-class=\"activeContainer.options.value.appearFromClass\"\r\n :appear-to-class=\"activeContainer.options.value.appearToClass\"\r\n :persisted=\"activeContainer.options.value.persisted\"\r\n @enter=\"activeContainer.options.value.onEnter\"\r\n @leave=\"activeContainer.options.value.onLeave\"\r\n @before-enter=\"activeContainer.options.value.onBeforeEnter\"\r\n @before-leave=\"activeContainer.options.value.onBeforeLeave\"\r\n @before-appear=\"activeContainer.options.value.onBeforeAppear\"\r\n @after-enter=\"activeContainer.options.value.onAfterEnter\"\r\n @after-leave=\"activeContainer.options.value.onAfterLeave\"\r\n @after-appear=\"activeContainer.options.value.onAfterAppear\"\r\n >\r\n <component :is=\"overlay\" />\r\n </Transition>\r\n\r\n <component\r\n v-else\r\n :is=\"overlay\"\r\n />\r\n</template>\r\n","import { createVNode, render } from 'vue';\r\n\r\nimport type { App } from 'vue';\r\nimport DragOverlay from './components/DragOverlay.vue';\r\nimport { useDnDStore } from './composables/useDnDStore';\r\n\r\nexport const VueDndKitPlugin = {\r\n install(app: App) {\r\n app.component('DragOverlay', DragOverlay);\r\n const originalMount = app.mount;\r\n app.mount = function (rootContainer) {\r\n const instance = originalMount.call(this, rootContainer);\r\n\r\n const rootEl =\r\n typeof rootContainer === 'string'\r\n ? document.querySelector(rootContainer)\r\n : rootContainer;\r\n\r\n if (rootEl && rootEl instanceof Element) {\r\n if (!rootEl.querySelector('#vue-dnd-kit-overlay')) {\r\n const overlayContainer = document.createElement('div');\r\n\r\n overlayContainer.id = 'vue-dnd-kit-overlay';\r\n overlayContainer.style.pointerEvents = 'none';\r\n\r\n rootEl.appendChild(overlayContainer);\r\n const vnode = createVNode(DragOverlay);\r\n render(vnode, overlayContainer);\r\n\r\n app.__VUE_DND_KIT_OVERLAY__ = {\r\n container: overlayContainer,\r\n vnode,\r\n };\r\n\r\n const store = useDnDStore();\r\n app.__VUE_DND_KIT_STORE__ = store;\r\n }\r\n }\r\n\r\n return instance;\r\n };\r\n\r\n // Модифицируем метод unmount для очистки\r\n const originalUnmount = app.unmount;\r\n app.unmount = function () {\r\n if (app.__VUE_DND_KIT_OVERLAY__) {\r\n render(null, app.__VUE_DND_KIT_OVERLAY__.container);\r\n delete app.__VUE_DND_KIT_OVERLAY__;\r\n }\r\n return originalUnmount.call(this);\r\n };\r\n },\r\n};\r\n\r\ndeclare module '@vue/runtime-core' {\r\n export interface App {\r\n __VUE_DND_KIT_OVERLAY__?: {\r\n container: HTMLElement;\r\n vnode: any;\r\n };\r\n __VUE_DND_KIT_STORE__?: ReturnType<typeof useDnDStore>;\r\n }\r\n}\r\n","import type { IBoundingBox, IPoint } from '../types';\r\n\r\nexport const checkCollision = (\r\n boxA: IBoundingBox,\r\n boxB: IBoundingBox\r\n): boolean => {\r\n return (\r\n boxA.x < boxB.x + boxB.width &&\r\n boxA.x + boxA.width > boxB.x &&\r\n boxA.y < boxB.y + boxB.height &&\r\n boxA.y + boxA.height > boxB.y\r\n );\r\n};\r\n\r\nexport const getBoundingBox = (element: HTMLElement | null): IBoundingBox => {\r\n if (!element)\r\n return {\r\n x: 0,\r\n y: 0,\r\n width: 0,\r\n height: 0,\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n top: 0,\r\n };\r\n\r\n const rect = element.getBoundingClientRect();\r\n\r\n return {\r\n bottom: rect.bottom,\r\n left: rect.left,\r\n right: rect.right,\r\n top: rect.top,\r\n x: rect.x,\r\n y: rect.y,\r\n width: rect.width,\r\n height: rect.height,\r\n };\r\n};\r\n\r\nexport const getCenter = (box: IBoundingBox): IPoint => ({\r\n x: box.x + box.width / 2,\r\n y: box.y + box.height / 2,\r\n});\r\n\r\nexport const getOffset = (element: HTMLElement | null, pointer: IPoint) => {\r\n const rect = getBoundingBox(element);\r\n return {\r\n pixel: {\r\n x: pointer.x - rect.x,\r\n y: pointer.y - rect.y,\r\n },\r\n percent: {\r\n x: ((pointer.x - rect.x) / rect.width) * 100,\r\n y: ((pointer.y - rect.y) / rect.height) * 100,\r\n },\r\n };\r\n};\r\n\r\nexport const getDistance = (pointA: IPoint, pointB: IPoint): number => {\r\n const dx = pointB.x - pointA.x;\r\n const dy = pointB.y - pointA.y;\r\n return Math.sqrt(dx * dx + dy * dy);\r\n};\r\n\r\nexport const getOverlapPercent = (\r\n boxA: IBoundingBox,\r\n boxB: IBoundingBox\r\n): number => {\r\n const xOverlap = Math.max(\r\n 0,\r\n Math.min(boxA.x + boxA.width, boxB.x + boxB.width) -\r\n Math.max(boxA.x, boxB.x)\r\n );\r\n const yOverlap = Math.max(\r\n 0,\r\n Math.min(boxA.y + boxA.height, boxB.y + boxB.height) -\r\n Math.max(boxA.y, boxB.y)\r\n );\r\n\r\n const overlapArea = xOverlap * yOverlap;\r\n\r\n const boxAArea = boxA.width * boxA.height;\r\n const boxBArea = boxB.width * boxB.height;\r\n\r\n // Возвращаем среднее значение процентов перекрытия относительно обоих элементов\r\n return ((overlapArea / boxAArea) * 100 + (overlapArea / boxBArea) * 100) / 2;\r\n};\r\n","export const draggableDataName = 'data-vue-dnd-kit-draggable';\r\nexport const droppableDataName = 'data-vue-dnd-kit-droppable';\r\n","export const preventEvent = (event: Event) => {\r\n event.preventDefault();\r\n \r\n};\r\n\r\n","import { computed, ref, shallowRef, useId } from 'vue';\r\n\r\nimport type { IUseDragOptions } from '../types';\r\nimport { draggableDataName } from '../utils/namespaces';\r\nimport { preventEvent } from '../utils/events';\r\nimport { useDnDStore } from '../composables/useDnDStore';\r\n\r\nexport const useElementManager = (options?: IUseDragOptions) => {\r\n const {\r\n elementsMap,\r\n draggingElements,\r\n hovered,\r\n selectedElements,\r\n isDragging: isDragStarted,\r\n visibleElements,\r\n handleDragElementIntersection,\r\n } = useDnDStore();\r\n\r\n const elementRef = ref<HTMLElement | null>(null);\r\n const isOvered = computed<boolean>(\r\n () =>\r\n visibleElements.value.has(elementRef.value as HTMLElement) &&\r\n hovered.element.value === elementRef.value\r\n );\r\n\r\n const id = shallowRef(options?.id || useId());\r\n\r\n const isDragging = computed<boolean>(() => {\r\n if (!elementRef.value) return false;\r\n if (!visibleElements.value.has(elementRef.value)) return false;\r\n return draggingElements.value.has(elementRef.value);\r\n });\r\n\r\n const isAllowed = computed<boolean>(() => {\r\n if (!elementRef.value) return false;\r\n if (!isDragStarted.value) return false;\r\n if (!visibleElements.value.has(elementRef.value)) return false;\r\n\r\n const currentElement = elementsMap.value.get(elementRef.value);\r\n if (!currentElement?.groups.length) return true;\r\n\r\n return !Array.from(draggingElements.value.entries()).some(\r\n ([_, draggingElement]) => {\r\n if (!draggingElement.groups.length) return false;\r\n return !draggingElement.groups.some((group) =>\r\n currentElement.groups.includes(group)\r\n );\r\n }\r\n );\r\n });\r\n\r\n const registerElement = () => {\r\n if (!elementRef.value) throw new Error('ElementRef is not set');\r\n\r\n elementsMap.value.set(elementRef.value, {\r\n node: elementRef.value,\r\n groups: options?.groups ?? [],\r\n layer: options?.layer ?? null,\r\n defaultLayer: options?.layer ?? null,\r\n events: options?.events ?? {},\r\n data: options?.data ?? null,\r\n id: id.value,\r\n });\r\n\r\n handleDragElementIntersection('add', elementRef.value);\r\n\r\n elementRef.value.addEventListener('dragstart', preventEvent);\r\n elementRef.value.addEventListener('drag', preventEvent);\r\n elementRef.value.setAttribute(draggableDataName, 'true');\r\n elementRef.value.setAttribute('draggable', 'false');\r\n };\r\n\r\n const unregisterElement = () => {\r\n if (!elementRef.value) return;\r\n\r\n elementsMap.value.delete(elementRef.value);\r\n selectedElements.value.delete(elementRef.value);\r\n\r\n elementRef.value.removeEventListener('dragstart', preventEvent);\r\n elementRef.value.removeEventListener('drag', preventEvent);\r\n elementRef.value.removeAttribute(draggableDataName);\r\n elementRef.value.removeAttribute('draggable');\r\n };\r\n\r\n return {\r\n elementRef,\r\n registerElement,\r\n unregisterElement,\r\n isDragging,\r\n isOvered,\r\n isAllowed,\r\n id,\r\n };\r\n};\r\n","export const isDescendant = (\r\n element: HTMLElement | Element | null,\r\n container: HTMLElement | Element\r\n): boolean => {\r\n if (!element) return false;\r\n return container.contains(element);\r\n};\r\n","import {\r\n checkCollision,\r\n getBoundingBox,\r\n getCenter,\r\n getDistance,\r\n getOverlapPercent,\r\n} from './geometry';\r\n\r\nimport { IDnDStore } from '../types';\r\nimport { isDescendant } from './dom';\r\n\r\nexport const defaultCollisionDetection = (store: IDnDStore) => {\r\n const containerRect = getBoundingBox(store.activeContainer.ref.value);\r\n const containerCenter = getCenter(containerRect);\r\n const pointerX = store.pointerPosition.current.value?.x ?? 0;\r\n const pointerY = store.pointerPosition.current.value?.y ?? 0;\r\n\r\n const isPointerInActiveContainer =\r\n containerRect &&\r\n pointerX >= containerRect.x &&\r\n pointerX <= containerRect.x + containerRect.width &&\r\n pointerY >= containerRect.y &&\r\n pointerY <= containerRect.y + containerRect.height;\r\n\r\n const shouldUseNormalPriority = !isPointerInActiveContainer;\r\n\r\n const activeDragNodes = Array.from(store.draggingElements.value.keys());\r\n\r\n const allCollidingElements = Array.from(store.visibleElements.value.entries())\r\n .filter(([node, _]) => {\r\n if (!node) return false;\r\n\r\n const rect = getBoundingBox(node as HTMLElement);\r\n return rect && containerRect && checkCollision(rect, containerRect);\r\n })\r\n .map(([node, element]) => {\r\n const rect = getBoundingBox(node as HTMLElement);\r\n const elementCenter = getCenter(rect);\r\n\r\n const isPointerInElement =\r\n pointerX >= rect.x &&\r\n pointerX <= rect.x + rect.width &&\r\n pointerY >= rect.y &&\r\n pointerY <= rect.y + rect.height;\r\n\r\n const overlapPercent = getOverlapPercent(rect, containerRect);\r\n const centerDistance = getDistance(containerCenter, elementCenter);\r\n\r\n // Вычисляем глубину вложенности\r\n let depth = 0;\r\n for (const [parentNode, _] of store.visibleElements.value.entries()) {\r\n if (\r\n parentNode !== node &&\r\n parentNode &&\r\n node &&\r\n isDescendant(node as HTMLElement, parentNode as HTMLElement)\r\n ) {\r\n depth++;\r\n }\r\n }\r\n\r\n return {\r\n element,\r\n node: node as HTMLElement,\r\n isPointerInElement,\r\n overlapPercent,\r\n depth,\r\n centerDistance,\r\n };\r\n })\r\n .sort((a, b) => {\r\n if (!shouldUseNormalPriority) {\r\n if (a.isPointerInElement && b.isPointerInElement)\r\n return b.depth - a.depth;\r\n if (a.isPointerInElement !== b.isPointerInElement)\r\n return a.isPointerInElement ? -1 : 1;\r\n }\r\n if (Math.abs(a.overlapPercent - b.overlapPercent) <= 1)\r\n return a.centerDistance - b.centerDistance;\r\n return b.overlapPercent - a.overlapPercent;\r\n });\r\n\r\n const allCollidingZones = Array.from(store.visibleZones.value.entries())\r\n .filter(([node, _]) => {\r\n if (\r\n !node ||\r\n activeDragNodes.some(\r\n (dragNode) =>\r\n dragNode &&\r\n isDescendant(node as HTMLElement, dragNode as HTMLElement)\r\n )\r\n )\r\n return false;\r\n\r\n const rect = getBoundingBox(node as HTMLElement);\r\n return rect && containerRect && checkCollision(rect, containerRect);\r\n })\r\n .map(([node, zone]) => {\r\n const rect = getBoundingBox(node as HTMLElement);\r\n const zoneCenter = getCenter(rect);\r\n\r\n const isPointerInElement =\r\n pointerX >= rect.x &&\r\n pointerX <= rect.x + rect.width &&\r\n pointerY >= rect.y &&\r\n pointerY <= rect.y + rect.height;\r\n\r\n const overlapPercent = getOverlapPercent(rect, containerRect);\r\n const centerDistance = getDistance(containerCenter, zoneCenter);\r\n\r\n // Вычисляем глубину вложенности\r\n let depth = 0;\r\n for (const [parentNode, _] of store.visibleZones.value.entries()) {\r\n if (\r\n parentNode !== node &&\r\n parentNode &&\r\n node &&\r\n isDescendant(node as HTMLElement, parentNode as HTMLElement)\r\n ) {\r\n depth++;\r\n }\r\n }\r\n\r\n return {\r\n zone,\r\n node: node as HTMLElement,\r\n isPointerInElement,\r\n overlapPercent,\r\n depth,\r\n centerDistance,\r\n };\r\n })\r\n .sort((a, b) => {\r\n if (!shouldUseNormalPriority) {\r\n if (a.isPointerInElement && b.isPointerInElement)\r\n return b.depth - a.depth;\r\n if (a.isPointerInElement !== b.isPointerInElement)\r\n return a.isPointerInElement ? -1 : 1;\r\n }\r\n if (Math.abs(a.overlapPercent - b.overlapPercent) <= 1)\r\n return a.centerDistance - b.centerDistance;\r\n return b.overlapPercent - a.overlapPercent;\r\n });\r\n\r\n return [\r\n ...allCollidingElements.map((item) => item.node),\r\n ...allCollidingZones.map((item) => item.node),\r\n ];\r\n};\r\n","import type { Ref } from 'vue';\r\nimport { getBoundingBox } from '../utils/geometry';\r\nimport { preventEvent } from '../utils/events';\r\nimport { useDnDStore } from './useDnDStore';\r\n\r\nexport interface IKeyboardOptions {\r\n moveStep?: number;\r\n}\r\n\r\nexport const useKeyboard = (\r\n elementRef: Ref<HTMLElement | null>,\r\n options?: IKeyboardOptions\r\n) => {\r\n const { pointerPosition, keyboard } = useDnDStore();\r\n const moveStep = options?.moveStep || 10;\r\n\r\n const onKeyboardStart = (event: KeyboardEvent) => {\r\n preventEvent(event);\r\n\r\n const rect = getBoundingBox(elementRef.value);\r\n\r\n elementRef.value?.blur();\r\n\r\n const centerX = rect.x + rect.width / 2;\r\n const centerY = rect.y + rect.height / 2;\r\n\r\n pointerPosition.start.value = {\r\n x: centerX,\r\n y: centerY,\r\n };\r\n\r\n pointerPosition.current.value = {\r\n x: centerX,\r\n y: centerY,\r\n };\r\n\r\n pointerPosition.offset.pixel.value = {\r\n x: rect.width / 2,\r\n y: rect.height / 2,\r\n };\r\n\r\n pointerPosition.offset.percent.value = {\r\n x: 50,\r\n y: 50,\r\n };\r\n };\r\n\r\n const onKeyboardMove = () => {\r\n if (!pointerPosition.current.value) return;\r\n\r\n const currentX = pointerPosition.current.value.x;\r\n const currentY = pointerPosition.current.value.y;\r\n\r\n let newX = currentX;\r\n let newY = currentY;\r\n\r\n if (keyboard.w.value) newY -= moveStep;\r\n if (keyboard.s.value) newY += moveStep;\r\n if (keyboard.a.value) newX -= moveStep;\r\n if (keyboard.d.value) newX += moveStep;\r\n\r\n pointerPosition.current.value = {\r\n x: newX,\r\n y: newY,\r\n };\r\n };\r\n\r\n const onKeyboardEnd = () => {\r\n pointerPosition.current.value = null;\r\n pointerPosition.start.value = null;\r\n pointerPosition.offset.pixel.value = null;\r\n pointerPosition.offset.percent.value = null;\r\n };\r\n\r\n return {\r\n onKeyboardStart,\r\n onKeyboardMove,\r\n onKeyboardEnd,\r\n };\r\n};\r\n","import type { Ref } from 'vue';\r\nimport { getOffset } from '../utils/geometry';\r\nimport { useDnDStore } from './useDnDStore';\r\n\r\nexport const usePointer = (elementRef: Ref<HTMLElement | null>) => {\r\n const store = useDnDStore();\r\n\r\n const onPointerStart = (event: PointerEvent) => {\r\n store.pointerPosition.start.value = { x: event.clientX, y: event.clientY };\r\n store.pointerPosition.current.value = {\r\n x: event.clientX,\r\n y: event.clientY,\r\n };\r\n\r\n const { pixel, percent } = getOffset(elementRef.value, {\r\n x: event.clientX,\r\n y: event.clientY,\r\n });\r\n\r\n store.pointerPosition.offset.pixel.value = pixel;\r\n store.pointerPosition.offset.percent.value = percent;\r\n };\r\n\r\n const onPointerMove = (event: PointerEvent | WheelEvent) => {\r\n store.pointerPosition.current.value = {\r\n x: event.clientX,\r\n y: event.clientY,\r\n };\r\n };\r\n\r\n const onPointerEnd = () => {\r\n store.pointerPosition.current.value = null;\r\n store.pointerPosition.start.value = null;\r\n store.pointerPosition.offset.pixel.value = null;\r\n store.pointerPosition.offset.percent.value = null;\r\n };\r\n\r\n return {\r\n onPointerStart,\r\n onPointerMove,\r\n onPointerEnd,\r\n };\r\n};\r\n","import type {\r\n ICollisionDetectionResult,\r\n IDraggingElement,\r\n IUseDragOptions,\r\n} from '../types';\r\n\r\nimport type { Ref } from 'vue';\r\nimport { defaultCollisionDetection } from '../utils/sensor';\r\nimport { isDescendant } from '../utils/dom';\r\nimport { useDnDStore } from './useDnDStore';\r\nimport { useKeyboard } from './useKeyboard';\r\nimport { usePointer } from './usePointer';\r\nimport { useThrottleFn } from '@vueuse/core';\r\n\r\nexport const useSensor = (\r\n elementRef: Ref<HTMLElement | null>,\r\n options?: IUseDragOptions\r\n) => {\r\n const store = useDnDStore();\r\n\r\n const { onPointerStart, onPointerMove, onPointerEnd } =\r\n usePointer(elementRef);\r\n\r\n const { onKeyboardStart, onKeyboardMove, onKeyboardEnd } = useKeyboard(\r\n elementRef,\r\n options?.keyboard\r\n );\r\n\r\n let animationFrameId: number | null = null;\r\n\r\n const getDraggingElements = (\r\n draggableElement: HTMLElement | null\r\n ): Map<HTMLElement | Element, IDraggingElement> => {\r\n if (!draggableElement) return new Map();\r\n\r\n const isDraggableInSelection =\r\n store.selectedElements.value.has(draggableElement);\r\n\r\n if (store.selectedElements.value.size > 0 && isDraggableInSelection) {\r\n const result = new Map<HTMLElement | Element, IDraggingElement>();\r\n\r\n store.selectedElements.value.forEach((node) => {\r\n const element = store.elementsMap.value.get(node);\r\n if (!element) return;\r\n\r\n result.set(node, {\r\n ...element,\r\n initialHTML: element.node?.outerHTML ?? '',\r\n initialRect: element.node?.getBoundingClientRect(),\r\n });\r\n });\r\n\r\n return result;\r\n }\r\n\r\n store.selectedElements.value.clear();\r\n\r\n const element = store.elementsMap.value.get(draggableElement);\r\n if (!element) return new Map();\r\n\r\n const result = new Map<HTMLElement | Element, IDraggingElement>();\r\n result.set(draggableElement, {\r\n ...element,\r\n initialHTML: element.node?.outerHTML ?? '',\r\n initialRect: element.node?.getBoundingClientRect(),\r\n });\r\n\r\n return result;\r\n };\r\n\r\n const processUserCollisionResults = (\r\n htmlElements: HTMLElement | HTMLElement[] | Element | Element[] | null\r\n ) => {\r\n if (!htmlElements) {\r\n return { element: null, zone: null };\r\n }\r\n\r\n const elements = Array.isArray(htmlElements)\r\n ? htmlElements\r\n : [htmlElements];\r\n\r\n const activeDragNodes = Array.from(store.draggingElements.value.keys());\r\n\r\n const filteredZoneElement = elements.find((htmlElement) => {\r\n if (!store.visibleZones.value.has(htmlElement)) return false;\r\n\r\n const zone = store.zonesMap.value.get(htmlElement);\r\n if (!zone) return false;\r\n\r\n if (\r\n activeDragNodes.some(\r\n (dragNode) =>\r\n dragNode &&\r\n (dragNode === zone.node ||\r\n isDescendant(zone.node as HTMLElement, dragNode as HTMLElement))\r\n )\r\n )\r\n return false;\r\n\r\n if (zone.groups.length) {\r\n const isCompatible = !Array.from(\r\n store.draggingElements.value.values()\r\n ).some((element) => {\r\n if (!element.groups.length) return false;\r\n return !element.groups.some((group) => zone.groups.includes(group));\r\n });\r\n if (!isCompatible) return false;\r\n }\r\n\r\n return true;\r\n });\r\n\r\n if (!filteredZoneElement) {\r\n return { element: null, zone: null };\r\n }\r\n\r\n const possibleElement = elements.find(\r\n (htmlElement) =>\r\n store.visibleElements.value.has(htmlElement) &&\r\n store.elementsMap.value.has(htmlElement) &&\r\n !activeDragNodes.some(\r\n (dragNode) =>\r\n dragNode &&\r\n (dragNode === htmlElement ||\r\n isDescendant(\r\n htmlElement as HTMLElement,\r\n dragNode as HTMLElement\r\n ) ||\r\n isDescendant(dragNode as HTMLElement, htmlElement as HTMLElement))\r\n ) &&\r\n (htmlElement === filteredZoneElement ||\r\n isDescendant(\r\n htmlElement as HTMLElement,\r\n filteredZoneElement as HTMLElement\r\n ))\r\n );\r\n\r\n return {\r\n element: possibleElement || null,\r\n zone: filteredZoneElement,\r\n };\r\n };\r\n\r\n const detectCollisions = options?.sensor?.setup || defaultCollisionDetection;\r\n\r\n const processCollisionResults = (results: ICollisionDetectionResult) => {\r\n const previousElement = store.hovered.element.value;\r\n const previousZone = store.hovered.zone.value;\r\n\r\n store.hovered.element.value = results.element;\r\n store.hovered.zone.value = results.zone;\r\n\r\n if (previousElement) {\r\n if (store.hovered.element.value !== previousElement) {\r\n store.elementsMap.value.get(previousElement)?.events?.onLeave?.(store);\r\n\r\n if (store.hovered.element.value)\r\n store.elementsMap.value\r\n .get(store.hovered.element.value)\r\n ?.events?.onHover?.(store);\r\n }\r\n }\r\n\r\n if (previousZone) {\r\n if (store.hovered.zone.value !== previousZone) {\r\n store.zonesMap.value.get(previousZone)?.events?.onLeave?.(store);\r\n\r\n if (store.hovered.zone.value)\r\n store.zonesMap.value\r\n .get(store.hovered.zone.value)\r\n ?.events?.onHover?.(store);\r\n }\r\n }\r\n };\r\n\r\n const throttledDetectAndProcess = useThrottleFn(() => {\r\n const htmlElements = detectCollisions(store);\r\n const processedResults = processUserCollisionResults(htmlElements);\r\n processCollisionResults(processedResults);\r\n }, options?.sensor?.throttle ?? 0);\r\n\r\n const animationLoop = () => {\r\n throttledDetectAndProcess();\r\n\r\n animationFrameId = requestAnimationFrame(animationLoop);\r\n };\r\n\r\n const startDetection = () => animationLoop();\r\n\r\n const stopDetection = () => {\r\n if (animationFrameId !== null) {\r\n cancelAnimationFrame(animationFrameId);\r\n animationFrameId = null;\r\n }\r\n };\r\n\r\n const activate = (event: PointerEvent | KeyboardEvent) => {\r\n store.draggingElements.value = getDraggingElements(elementRef.value);\r\n store.draggingElements.value.forEach((element) =>\r\n element.events.onStart?.(store)\r\n );\r\n\r\n if (event instanceof PointerEvent) {\r\n onPointerStart(event);\r\n } else {\r\n onKeyboardStart(event);\r\n }\r\n\r\n startDetection();\r\n };\r\n\r\n const track = (event: PointerEvent | WheelEvent | KeyboardEvent) => {\r\n store.draggingElements.value.forEach((element) =>\r\n element.events.onMove?.(store)\r\n );\r\n\r\n if (event instanceof KeyboardEvent) {\r\n onKeyboardMove();\r\n } else {\r\n onPointerMove(event);\r\n }\r\n };\r\n\r\n const deactivate = (triggerEvents = true) => {\r\n onPointerEnd();\r\n onKeyboardEnd();\r\n\r\n if (triggerEvents) {\r\n if (store.hovered.zone.value) {\r\n const zone = store.zonesMap.value.get(store.hovered.zone.value);\r\n zone?.events.onDrop?.(store);\r\n } else {\r\n store.draggingElements.value.forEach((element) =>\r\n element.events.onEnd?.(store)\r\n );\r\n }\r\n\r\n store.selectedElements.value.clear();\r\n }\r\n\r\n store.draggingElements.value.clear();\r\n\r\n store.hovered.zone.value = null;\r\n store.hovered.element.value = null;\r\n\r\n stopDetection();\r\n };\r\n\r\n return {\r\n activate,\r\n track,\r\n deactivate,\r\n };\r\n};\r\n","import { Ref, markRaw } from 'vue';\r\n\r\nimport type { IUseDragOptions } from '../types';\r\nimport { createGlobalState } from '@vueuse/core';\r\nimport { preventEvent } from '../utils/events';\r\nimport { useDnDStore } from '../composables/useDnDStore';\r\nimport { useSensor } from '../composables/useSensor';\r\n\r\nenum EKeyboardKey {\r\n ESCAPE = 'Escape',\r\n SPACE = 'Space',\r\n ENTER = 'Enter',\r\n W = 'KeyW',\r\n A = 'KeyA',\r\n S = 'KeyS',\r\n D = 'KeyD',\r\n CONTROL = 'ControlLeft',\r\n ALT = 'AltLeft',\r\n SHIFT = 'ShiftLeft',\r\n META = 'MetaLeft',\r\n}\r\n\r\nexport const useEventManager = createGlobalState(() => {\r\n let originalUserSelect = '';\r\n let originalTouchAction = '';\r\n let originalOverscrollBehavior = '';\r\n\r\n let currentMoveHandler: ((event: any) => void) | null = null;\r\n let currentEndHandler: (() => void) | null = null;\r\n let currentCancelHandler: (() => void) | null = null;\r\n let currentScrollHandler: ((event: WheelEvent) => void) | null = null;\r\n let currentKeyHandler: ((event: KeyboardEvent) => void) | null = null;\r\n\r\n const { activeContainer } = useDnDStore();\r\n\r\n const disableInteractions = () => {\r\n const body = document.body;\r\n\r\n originalUserSelect = body.style.userSelect;\r\n\r\n body.style.userSelect = 'none';\r\n\r\n window.addEventListener('contextmenu', preventEvent);\r\n window.addEventListener('selectstart', preventEvent);\r\n window.addEventListener('touchstart', preventEvent);\r\n window.addEventListener('touchmove', preventEvent);\r\n };\r\n\r\n const enableInteractions = () => {\r\n const body = document.body;\r\n\r\n body.style.userSelect = originalUserSelect;\r\n body.style.touchAction = originalTouchAction;\r\n body.style.overscrollBehavior = originalOverscrollBehavior;\r\n\r\n window.removeEventListener('contextmenu', preventEvent);\r\n window.removeEventListener('selectstart', preventEvent);\r\n window.removeEventListener('touchstart', preventEvent);\r\n window.removeEventListener('touchmove', preventEvent);\r\n };\r\n\r\n const clearAllListeners = () => {\r\n if (currentMoveHandler) {\r\n document.removeEventListener('pointermove', currentMoveHandler);\r\n currentMoveHandler = null;\r\n }\r\n\r\n if (currentEndHandler) {\r\n document.removeEventListener('pointerup', currentEndHandler);\r\n currentEndHandler = null;\r\n }\r\n\r\n if (currentCancelHandler) {\r\n currentCancelHandler = null;\r\n }\r\n\r\n if (currentScrollHandler) {\r\n document.removeEventListener('wheel', currentScrollHandler);\r\n currentScrollHandler = null;\r\n }\r\n\r\n if (currentKeyHandler) {\r\n document.removeEventListener('keydown', currentKeyHandler);\r\n document.removeEventListener('keypress', currentKeyHandler);\r\n document.removeEventListener('keyup', currentKeyHandler);\r\n currentKeyHandler = null;\r\n }\r\n };\r\n\r\n const handleDragStart = (\r\n event: PointerEvent | KeyboardEvent,\r\n elementRef: Ref<HTMLElement | null>,\r\n options?: IUseDragOptions\r\n ) => {\r\n clearAllListeners();\r\n\r\n (event.target as HTMLElement).blur();\r\n\r\n if (options?.container)\r\n activeContainer.component.value = markRaw(options.container);\r\n\r\n const { activate, track, deactivate } = useSensor(elementRef, options);\r\n\r\n currentEndHandler = () => {\r\n activeContainer.component.value = null;\r\n enableInteractions();\r\n deactivate(true);\r\n clearAllListeners();\r\n };\r\n\r\n currentCancelHandler = () => {\r\n activeContainer.component.value = null;\r\n enableInteractions();\r\n deactivate(false);\r\n clearAllListeners();\r\n };\r\n\r\n currentMoveHandler = (event: PointerEvent | KeyboardEvent) => track(event);\r\n currentScrollHandler = (event: WheelEvent) => track(event);\r\n currentKeyHandler = (event: KeyboardEvent) => {\r\n if (event.type === 'keyup') {\r\n if (event.code === EKeyboardKey.ESCAPE) currentCancelHandler?.();\r\n if (event.code === EKeyboardKey.ENTER) currentEndHandler?.();\r\n }\r\n\r\n track(event);\r\n };\r\n\r\n disableInteractions();\r\n activate(event);\r\n\r\n document.addEventListener('pointermove', currentMoveHandler);\r\n document.addEventListener('pointerup', currentEndHandler);\r\n document.addEventListener('wheel', currentScrollHandler);\r\n document.addEventListener('keydown', currentKeyHandler);\r\n document.addEventListener('keypress', currentKeyHandler);\r\n document.addEventListener('keyup', currentKeyHandler);\r\n };\r\n\r\n return {\r\n handleDragStart,\r\n };\r\n});\r\n","import { onBeforeUnmount, onMounted } from 'vue';\r\n\r\nimport type { IUseDragOptions } from '../types';\r\nimport { useDnDStore } from './useDnDStore';\r\nimport { useElementManager } from '../managers/useElementManager';\r\nimport { useEventManager } from '../managers/useEventManager';\r\n\r\nexport const useDraggable = (options?: IUseDragOptions) => {\r\n const {\r\n id,\r\n elementRef,\r\n isDragging,\r\n isOvered,\r\n isAllowed,\r\n registerElement,\r\n unregisterElement,\r\n } = useElementManager(options);\r\n\r\n const { pointerPosition } = useDnDStore();\r\n const { handleDragStart: start } = useEventManager();\r\n\r\n const handleDragStart = (event: PointerEvent | KeyboardEvent) =>\r\n start(event, elementRef, options);\r\n\r\n onMounted(registerElement);\r\n onBeforeUnmount(unregisterElement);\r\n\r\n return {\r\n pointerPosition,\r\n elementRef,\r\n isDragging,\r\n isOvered,\r\n isAllowed,\r\n handleDragStart,\r\n id,\r\n };\r\n};\r\n","import { computed, ref } from 'vue';\r\n\r\nimport type { IUseDropOptions } from '../types';\r\nimport { useDnDStore } from '../composables/useDnDStore';\r\n\r\nexport const useZoneManager = (options?: IUseDropOptions) => {\r\n const {\r\n zonesMap,\r\n hovered,\r\n draggingElements,\r\n isDragging,\r\n handleDropZoneIntersection,\r\n } = useDnDStore();\r\n\r\n const elementRef = ref<HTMLElement | null>(null);\r\n\r\n const isOvered = computed<boolean>(() => {\r\n return hovered.zone.value === elementRef.value;\r\n });\r\n\r\n const isAllowed = computed<boolean>(() => {\r\n if (!elementRef.value || !isDragging.value) return false;\r\n\r\n const currentZone = zonesMap.value.get(elementRef.value);\r\n if (!currentZone?.groups.length) return true;\r\n\r\n return !Array.from(draggingElements.value.values()).some((element) => {\r\n if (!element.groups.length) return false;\r\n return !element.groups.some((group) =>\r\n currentZone.groups.includes(group)\r\n );\r\n });\r\n });\r\n\r\n const registerZone = () => {\r\n if (!elementRef.value) throw new Error('elementRef is not set');\r\n\r\n handleDropZoneIntersection('add', elementRef.value);\r\n\r\n zonesMap.value.set(elementRef.value, {\r\n node: elementRef.value,\r\n groups: options?.groups ?? [],\r\n events: options?.events ?? {},\r\n data: options?.data ?? undefined,\r\n });\r\n\r\n elementRef.value.setAttribute('data-dnd-droppable', 'true');\r\n };\r\n\r\n const unregisterZone = () => {\r\n if (!elementRef.value) return;\r\n\r\n handleDropZoneIntersection('remove', elementRef.value);\r\n\r\n zonesMap.value.delete(elementRef.value);\r\n };\r\n\r\n return { elementRef, registerZone, unregisterZone, isOvered, isAllowed };\r\n};\r\n","import { onBeforeUnmount, onMounted } from 'vue';\r\n\r\nimport type { IUseDropOptions } from '../types';\r\nimport { useZoneManager } from '../managers/useZoneManager';\r\n\r\nexport const useDroppable = (options?: IUseDropOptions) => {\r\n const { elementRef, registerZone, unregisterZone, isOvered, isAllowed } =\r\n useZoneManager(options);\r\n\r\n // Register/unregister drop zone with store\r\n onMounted(registerZone);\r\n onBeforeUnmount(unregisterZone);\r\n\r\n return { elementRef, isOvered, isAllowed };\r\n};\r\n","import { computed, type Ref } from 'vue';\r\nimport { useDnDStore } from './useDnDStore';\r\nimport { isDescendant } from '../utils/dom';\r\n\r\nexport const useSelection = (elementRef: Ref<HTMLElement | null>) => {\r\n const { selectedElements, elementsMap } = useDnDStore();\r\n\r\n const isSelected = computed<boolean>(() =>\r\n elementRef.value ? selectedElements.value.has(elementRef.value) : false\r\n );\r\n\r\n const isParentOfSelected = computed(() => {\r\n if (!elementRef.value) return false;\r\n\r\n for (const node of selectedElements.value) {\r\n if (\r\n node &&\r\n isDescendant(node as HTMLElement, elementRef.value as HTMLElement)\r\n ) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n\r\n const hasSelectedParent = computed(() => {\r\n if (!elementRef.value) return false;\r\n\r\n for (const node of selectedElements.value) {\r\n if (\r\n node &&\r\n isDescendant(elementRef.value as HTMLElement, node as HTMLElement)\r\n ) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n\r\n const handleUnselect = () => {\r\n if (!elementRef.value) return;\r\n selectedElements.value.delete(elementRef.value);\r\n };\r\n\r\n const handleSelect = () => {\r\n if (!elementRef.value) return;\r\n const element = elementsMap.value.get(elementRef.value);\r\n if (!element) return;\r\n\r\n if (isParentOfSelected.value) {\r\n // Удаляем все дочерние выбранные элементы\r\n for (const node of selectedElements.value) {\r\n if (\r\n node &&\r\n isDescendant(node as HTMLElement, elementRef.value as HTMLElement)\r\n ) {\r\n selectedElements.value.delete(node);\r\n }\r\n }\r\n }\r\n\r\n if (hasSelectedParent.value) {\r\n // Удаляем все родительские выбранные элементы\r\n for (const node of selectedElements.value) {\r\n if (\r\n node &&\r\n isDescendant(elementRef.value as HTMLElement, node as HTMLElement)\r\n ) {\r\n selectedElements.value.delete(node);\r\n }\r\n }\r\n }\r\n\r\n selectedElements.value.add(elementRef.value);\r\n };\r\n\r\n const handleToggleSelect = () => {\r\n if (!elementRef.value) return;\r\n\r\n selectedElements.value.has(elementRef.value)\r\n ? handleUnselect()\r\n : handleSelect();\r\n };\r\n\r\n return {\r\n handleUnselect,\r\n handleSelect,\r\n handleToggleSelect,\r\n isSelected,\r\n isParentOfSelected,\r\n };\r\n};\r\n"],"names":["_DnDOperations","__publicField","source","index","item","target","sourceIndex","targetIndex","sourceItem","targetItem","store","hoveredElement","hoveredZone","targetSource","_b","_a","_d","_c","firstElement","firstIndex","_e","sortDirection","a","b","element","_g","_f","_h","items","DnDOperations","useDnDStore","createGlobalState","draggingElements","ref","isDragging","computed","activeContainer","shallowRef","elementsMap","selectedElements","zonesMap","visibleZones","visibleElements","elementObserver","entries","entry","zoneObserver","handleDragElementIntersection","action","handleDropZoneIntersection","pointerPosition","w","s","d","ctrl","shift","alt","meta","useMagicKeys","hovered","useDragContainer","options","elementRef","onMounted","onUnmounted","computedStyle","overlay","DefaultOverlay","VueDndKitPlugin","app","DragOverlay","originalMount","rootContainer","instance","rootEl","overlayContainer","vnode","createVNode","render","originalUnmount","checkCollision","boxA","boxB","getBoundingBox","rect","getCenter","box","getOffset","pointer","getDistance","pointA","pointB","dx","dy","getOverlapPercent","xOverlap","yOverlap","overlapArea","boxAArea","boxBArea","draggableDataName","preventEvent","event","useElementManager","isDragStarted","isOvered","id","useId","isAllowed","currentElement","_","draggingElement","group","isDescendant","container","defaultCollisionDetection","containerRect","containerCenter","pointerX","pointerY","shouldUseNormalPriority","activeDragNodes","allCollidingElements","node","elementCenter","isPointerInElement","overlapPercent","centerDistance","depth","parentNode","allCollidingZones","dragNode","zone","zoneCenter","useKeyboard","keyboard","moveStep","centerX","centerY","currentX","currentY","newX","newY","usePointer","pixel","percent","useSensor","onPointerStart","onPointerMove","onPointerEnd","onKeyboardStart","onKeyboardMove","onKeyboardEnd","animationFrameId","getDraggingElements","draggableElement","isDraggableInSelection","result","processUserCollisionResults","htmlElements","elements","filteredZoneElement","htmlElement","detectCollisions","processCollisionResults","results","previousElement","previousZone","_i","_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","onBeforeUnmount","useZoneManager","currentZone","useDroppable","registerZone","unregisterZone","useSelection","isSelected","isParentOfSelected","hasSelectedParent","handleUnselect","handleSelect"],"mappings":";;;;;AAEO,MAAMA,IAAN,MAAMA,EAAc;AAqN3B;AApNEC,EADWD,GACJ,UAAS,CAACE,GAAgBC,MAAmB;AAC9C,MAAA,CAACD,KAAUC,MAAU,OAAW;AACpC,QAAM,CAACC,CAAI,IAAIF,EAAO,OAAOC,GAAO,CAAC;AAC9B,SAAAC;AACT,IACAH,EANWD,GAMJ,UAAS,CAACK,GAAgBF,GAAgBC,MAAe;AAC1D,EAAA,CAACC,KAAUF,MAAU,UAClBE,EAAA,OAAOF,GAAO,GAAGC,CAAI;AAC9B,IACAH,EAVWD,GAUJ,QAAO,CACZE,GACAI,GACAD,GACAE,MACG;AACH,MACE,CAACL,KACD,CAACG,KACDC,MAAgB,UAChBC,MAAgB;AAEhB;AACF,QAAMH,IAAOJ,EAAc,OAAOE,GAAQI,CAAW;AACvC,EAAAN,EAAA,OAAOK,GAAQE,GAAaH,CAAI;AAChD,IACAH,EA1BWD,GA0BJ,QAAO,CACZE,GACAI,GACAD,GACAE,MACG;AACH,MACE,CAACL,KACD,CAACG,KACDC,MAAgB,UAChBC,MAAgB;AAEhB;AAEI,QAAAC,IAAaN,EAAOI,CAAW,GAC/BG,IAAaJ,EAAOE,CAAW;AAErC,EAAAL,EAAOI,CAAW,IAAIG,GACtBJ,EAAOE,CAAW,IAAIC;AACxB,IACAP,EA9CWD,GA8CJ,QAAO,CACZE,GACAC,GACAE,GACAE,MACG;AACH,MAAI,CAACL,KAAUC,MAAU,UAAa,CAACE,KAAUE,MAAgB;AAC/D;AACI,QAAAH,IAAOF,EAAOC,CAAK;AACX,EAAAH,EAAA,OAAOK,GAAQE,GAAaH,CAAI;AAChD,IACAH,EAzDWD,GAyDJ,iBAAgB,CAACU,MAAqB;;AACrC,QAAAC,IAAiBD,EAAM,QAAQ,QAAQ,OACvCE,IAAcF,EAAM,QAAQ,KAAK;AAEvC,MAAIC,GAAgB;AAClB,UAAME,KACJC,KAAAC,IAAAL,EAAM,YAAY,MAAM,IAAIC,CAAc,MAA1C,gBAAAI,EAA6C,SAA7C,gBAAAD,EAAmD,QAC/CP,KACJS,KAAAC,IAAAP,EAAM,YAAY,MAAM,IAAIC,CAAc,MAA1C,gBAAAM,EAA6C,SAA7C,gBAAAD,EAAmD,OAE/CE,IAAeR,EAAM,iBAAiB,MAAM,OAAO,EAAE,OAAO,OAC5DS,KAAaC,IAAAF,KAAA,gBAAAA,EAAc,SAAd,gBAAAE,EAAoB,OAEjCC,IACJF,MAAe,UACfZ,MAAgB,UAChBY,IAAaZ,IACT,IACA;AAQS,IANQ,MAAM;AAAA,MAC3BG,EAAM,iBAAiB,MAAM,OAAO;AAAA,IAAA,EACpC;AAAA,MACA,CAACY,GAAGC;;AAAM,eAAAF,QAAkBN,IAAAO,EAAE,SAAF,gBAAAP,EAAQ,UAAS,QAAMD,IAAAS,EAAE,SAAF,gBAAAT,EAAQ,UAAS;AAAA;AAAA,IACtE,EAEe;AAAA,MAAQ,CAACU,MACtB;;AAAA,eAAAxB,EAAc;AAAA,WACZe,IAAAS,EAAQ,SAAR,gBAAAT,EAAc;AAAA,WACdD,IAAAU,EAAQ,SAAR,gBAAAV,EAAc;AAAA,UACdD;AAAA,UACAN;AAAA,QAAA;AAAA;AAAA,IAEJ;AAAA,aACSK,GAAa;AACtB,UAAMC,KAAeY,KAAAC,IAAAhB,EAAM,SAAS,MAAM,IAAIE,CAAW,MAApC,gBAAAc,EAAuC,SAAvC,gBAAAD,EAA6C,QAC5DlB,IAAcM,KAAA,gBAAAA,EAAc;AAMnB,IAJQ,MAAM;AAAA,MAC3BH,EAAM,iBAAiB,MAAM,OAAO;AAAA,IACpC,EAAA,KAAK,CAACY,GAAGC,MAAO;;AAAA,gBAAAR,IAAAQ,EAAE,SAAF,gBAAAR,EAAQ,UAAS,QAAMD,IAAAQ,EAAE,SAAF,gBAAAR,EAAQ,UAAS;AAAA,KAAE,EAE7C;AAAA,MAAQ,CAACU,MACtB;;AAAA,eAAAxB,EAAc;AAAA,WACZe,IAAAS,EAAQ,SAAR,gBAAAT,EAAc;AAAA,WACdD,IAAAU,EAAQ,SAAR,gBAAAV,EAAc;AAAA,UACdD;AAAA,UACAN;AAAA,QAAA;AAAA;AAAA,IAEJ;AAAA,EAAA;AAEJ,IAEAN,EA9GWD,GA8GJ,aAAY,CAACU,MAAqB;;AACjC,QAAAC,IAAiBD,EAAM,QAAQ,QAAQ,OACvCE,IAAcF,EAAM,QAAQ,KAAK;AAEvC,MAAIC,GAAgB;AAClB,UAAME,KACJC,KAAAC,IAAAL,EAAM,YAAY,MAAM,IAAIC,CAAc,MAA1C,gBAAAI,EAA6C,SAA7C,gBAAAD,EAAmD,QAC/CP,KACJS,KAAAC,IAAAP,EAAM,YAAY,MAAM,IAAIC,CAAc,MAA1C,gBAAAM,EAA6C,SAA7C,gBAAAD,EAAmD;AAMtC,IAJQ,MAAM;AAAA,MAC3BN,EAAM,iBAAiB,MAAM,OAAO;AAAA,IACpC,EAAA,KAAK,CAACY,GAAGC,MAAO;;AAAA,gBAAAR,IAAAQ,EAAE,SAAF,gBAAAR,EAAQ,UAAS,QAAMD,IAAAQ,EAAE,SAAF,gBAAAR,EAAQ,UAAS;AAAA,KAAE,EAE7C;AAAA,MAAQ,CAACU,MACtB;;AAAA,eAAAxB,EAAc;AAAA,WACZe,IAAAS,EAAQ,SAAR,gBAAAT,EAAc;AAAA,WACdD,IAAAU,EAAQ,SAAR,gBAAAV,EAAc;AAAA,UACdD;AAAA,UACAN;AAAA,QAAA;AAAA;AAAA,IAEJ;AAAA,aACSK,GAAa;AACtB,UAAMC,KAAea,KAAAN,IAAAV,EAAM,SAAS,MAAM,IAAIE,CAAW,MAApC,gBAAAQ,EAAuC,SAAvC,gBAAAM,EAA6C,QAC5DnB,IAAcM,KAAA,gBAAAA,EAAc;AAMnB,IAJQ,MAAM;AAAA,MAC3BH,EAAM,iBAAiB,MAAM,OAAO;AAAA,IACpC,EAAA,KAAK,CAACY,GAAGC,MAAO;;AAAA,gBAAAR,IAAAQ,EAAE,SAAF,gBAAAR,EAAQ,UAAS,QAAMD,IAAAQ,EAAE,SAAF,gBAAAR,EAAQ,UAAS;AAAA,KAAE,EAE7C;AAAA,MAAQ,CAACU,MACtB;;AAAA,eAAAxB,EAAc;AAAA,WACZe,IAAAS,EAAQ,SAAR,gBAAAT,EAAc;AAAA,WACdD,IAAAU,EAAQ,SAAR,gBAAAV,EAAc;AAAA,UACdD;AAAA,UACAN;AAAA,QAAA;AAAA;AAAA,IAEJ;AAAA,EAAA;AAEJ,IACAN,EAtJWD,GAsJJ,aAAY,CAACU,MAAqB;;AACjC,QAAAC,IAAiBD,EAAM,QAAQ,QAAQ,OACvCE,IAAcF,EAAM,QAAQ,KAAK;AAEvC,MAAIC,KAAkBD,EAAM,iBAAiB,MAAM,SAAS,GAAG;AAC7D,UAAMc,IAAUd,EAAM,iBAAiB,MAAM,OAAO,EAAE,OAAO;AAC/C,IAAAV,EAAA;AAAA,OACZe,IAAAS,KAAA,gBAAAA,EAAS,SAAT,gBAAAT,EAAe;AAAA,OACfD,IAAAU,KAAA,gBAAAA,EAAS,SAAT,gBAAAV,EAAe;AAAA,OACfE,KAAAC,IAAAP,EAAM,YAAY,MAAM,IAAIC,CAAc,MAA1C,gBAAAM,EAA6C,SAA7C,gBAAAD,EAAmD;AAAA,OACnDU,KAAAN,IAAAV,EAAM,YAAY,MAAM,IAAIC,CAAc,MAA1C,gBAAAS,EAA6C,SAA7C,gBAAAM,EAAmD;AAAA,IACrD;AAAA,aACSd,GAAa;AACtB,UAAMC,KAAec,KAAAF,IAAAf,EAAM,SAAS,MAAM,IAAIE,CAAW,MAApC,gBAAAa,EAAuC,SAAvC,gBAAAE,EAA6C,QAC5DpB,IAAcM,KAAA,gBAAAA,EAAc;AAMnB,IAJQ,MAAM;AAAA,MAC3BH,EAAM,iBAAiB,MAAM,OAAO;AAAA,IACpC,EAAA,KAAK,CAACY,GAAGC,MAAO;;AAAA,gBAAAR,IAAAQ,EAAE,SAAF,gBAAAR,EAAQ,UAAS,QAAMD,IAAAQ,EAAE,SAAF,gBAAAR,EAAQ,UAAS;AAAA,KAAE,EAE7C;AAAA,MAAQ,CAACU,MACtB;;AAAA,eAAAxB,EAAc;AAAA,WACZe,IAAAS,EAAQ,SAAR,gBAAAT,EAAc;AAAA,WACdD,IAAAU,EAAQ,SAAR,gBAAAV,EAAc;AAAA,UACdD;AAAA,UACAN;AAAA,QAAA;AAAA;AAAA,IAEJ;AAAA,EAAA;AAEJ,IACAN,EApLWD,GAoLJ,eAAc,CAACU,MAAqB;AAK1B,EAJQ,MAAM;AAAA,IAC3BA,EAAM,iBAAiB,MAAM,OAAO;AAAA,EACpC,EAAA,KAAK,CAACY,GAAGC,MAAO;;AAAA,cAAAR,IAAAQ,EAAE,SAAF,gBAAAR,EAAQ,UAAS,QAAMD,IAAAQ,EAAE,SAAF,gBAAAR,EAAQ,UAAS;AAAA,GAAE,EAE7C,QAAQ,CAACU,MAAY;;AAClC,KAAIT,IAAAS,EAAQ,SAAR,QAAAT,EAAc,YAAUD,IAAAU,EAAQ,SAAR,gBAAAV,EAAc,WAAU,UAClDd,EAAc,OAAOwB,EAAQ,KAAK,QAAQA,EAAQ,KAAK,KAAK;AAAA,EAC9D,CACD;AACH,IACAvB,EA/LWD,GA+LJ,eAAc,CAACU,GAAkBkB,MAAiB;;AACjD,QAAAjB,IAAiBD,EAAM,QAAQ,QAAQ,OACvCE,IAAcF,EAAM,QAAQ,KAAK;AAEnC,MAAAC,KAAkBiB,EAAM,SAAS,GAAG;AACtC,UAAMf,KACJC,KAAAC,IAAAL,EAAM,YAAY,MAAM,IAAIC,CAAc,MAA1C,gBAAAI,EAA6C,SAA7C,gBAAAD,EAAmD,QAC/CP,KACJS,KAAAC,IAAAP,EAAM,YAAY,MAAM,IAAIC,CAAc,MAA1C,gBAAAM,EAA6C,SAA7C,gBAAAD,EAAmD;AAE/C,IAAAY,EAAA,QAAQ,CAACxB,MAAS;AACR,MAAAJ,EAAA,OAAOa,GAAcN,GAAaH,CAAI;AAAA,IAAA,CACrD;AAAA,aACQQ,GAAa;AACtB,UAAMC,KAAea,KAAAN,IAAAV,EAAM,SAAS,MAAM,IAAIE,CAAW,MAApC,gBAAAQ,EAAuC,SAAvC,gBAAAM,EAA6C,QAC5DnB,IAAcM,KAAA,gBAAAA,EAAc;AAE5B,IAAAe,EAAA,QAAQ,CAACxB,MAAS;AACR,MAAAJ,EAAA,OAAOa,GAAcN,GAAaH,CAAI;AAAA,IAAA,CACrD;AAAA,EAAA;AAEL;AApNK,IAAMyB,KAAN7B;ACaM,MAAA8B,IAAcC,GAAkB,MAAM;AACjD,QAAMC,IAAmBC;AAAA,wBACnB,IAAI;AAAA,EACV,GACMC,IAAaC,EAAkB,MAAMH,EAAiB,MAAM,OAAO,CAAC,GAEpEI,IAAkB;AAAA,IACtB,WAAWH,EAAsB,IAAI;AAAA,IACrC,KAAKI,EAA+B,IAAI;AAAA,IACxC,SAASA,EAAmC,IAAI;AAAA,EAClD,GAEMC,IAAcL,EAAkD,oBAAA,KAAK,GACrEM,IAAmBN,EAAoC,oBAAA,KAAK,GAC5DO,IAAWP,EAA+C,oBAAA,KAAK,GAC/DQ,IAAeR,EAAoC,oBAAA,KAAK,GACxDS,IAAkBT,EAAoC,oBAAA,KAAK,GAE3DU,IAAkB,IAAI,qBAAqB,CAACC,MAAY;AACpD,IAAAA,EAAA;AAAA,MAAQ,CAACC,MACfH,EAAgB,MAAMG,EAAM,iBAAiB,QAAQ,QAAQ;AAAA,QAC3DA,EAAM;AAAA,MAAA;AAAA,IAEV;AAAA,EAAA,CACD,GACKC,IAAe,IAAI,qBAAqB,CAACF,MAAY;AACjD,IAAAA,EAAA;AAAA,MAAQ,CAACC,MACfJ,EAAa,MAAMI,EAAM,iBAAiB,QAAQ,QAAQ,EAAEA,EAAM,MAAM;AAAA,IAC1E;AAAA,EAAA,CACD,GAEKE,IAAgC,CACpCC,GACAxB,MACG;AACH,IAAIwB,MAAW,QACbL,EAAgB,QAAQnB,CAAO,KAE/BmB,EAAgB,UAAUnB,CAAO,GACjBkB,EAAA,MAAM,OAAOlB,CAAO;AAAA,EAExC,GAEMyB,IAA6B,CACjCD,GACAxB,MACG;AACH,IAAIwB,MAAW,QACbF,EAAa,QAAQtB,CAAO,KAE5BsB,EAAa,UAAUtB,CAAO,GACjBiB,EAAA,MAAM,OAAOjB,CAAO;AAAA,EAErC,GAEM0B,IAAkB;AAAA,IACtB,OAAOb,EAA0B,IAAI;AAAA,IACrC,SAASA,EAA0B,IAAI;AAAA,IACvC,QAAQ;AAAA,MACN,SAASA,EAA0B,IAAI;AAAA,MACvC,OAAOA,EAA0B,IAAI;AAAA,IAAA;AAAA,EAEzC,GAEM,EAAE,GAAAc,GAAG,GAAAC,GAAG,GAAA9B,GAAG,GAAA+B,GAAG,MAAAC,GAAM,OAAAC,GAAO,KAAAC,GAAK,MAAAC,EAAK,IAAIC,GAAa,GAEtDC,IAAU;AAAA,IACd,MAAMtB,EAAyC,IAAI;AAAA,IACnD,SAASA,EAAyC,IAAI;AAAA,EACxD;AAEO,SAAA;AAAA,IACL,kBAAAL;AAAA,IACA,YAAAE;AAAA,IACA,iBAAAE;AAAA,IACA,aAAAE;AAAA,IACA,kBAAAC;AAAA,IACA,UAAAC;AAAA,IACA,cAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,iBAAAQ;AAAA,IACA,UAAU;AAAA,MACR,GAAAC;AAAA,MACA,GAAAC;AAAA,MACA,GAAA9B;AAAA,MACA,GAAA+B;AAAA,MACA,MAAAC;AAAA,MACA,OAAAC;AAAA,MACA,KAAAC;AAAA,MACA,MAAAC;AAAA,IACF;AAAA,IACA,SAAAE;AAAA,IACA,+BAAAZ;AAAA,IACA,4BAAAE;AAAA,EACF;AACF,CAAC,GC1GYW,KAAmB,CAACC,MAA8B;AACvD,QAAAC,IAAa7B,EAAwB,IAAI,GAEzC,EAAE,kBAAAD,GAAkB,iBAAAkB,GAAiB,YAAAhB,GAAY,iBAAAE,EAAA,IACrDN,EAAY;AAEd,SAAAiC,EAAU,MAAM;AACd,IAAA3B,EAAgB,MAAM0B,GACN1B,EAAA,QAAQ,QAAQyB,KAAW;AAAA,EAAA,CAC5C,GAEDG,GAAY,MAAM;AAChB,IAAA5B,EAAgB,IAAI,QAAQ,MAC5BA,EAAgB,QAAQ,QAAQ;AAAA,EAAA,CACjC,GAEM;AAAA,IACL,YAAA0B;AAAA,IACA,kBAAA9B;AAAA,IACA,iBAAAkB;AAAA,IACA,YAAAhB;AAAA,EACF;AACF;;;ACtBE,UAAM,EAAE,YAAA4B,GAAY,iBAAAZ,GAAiB,YAAAhB,GAAY,kBAAAF,EAAA,IAC/C4B,GAAiB,GAEbK,IAAgB9B,EAAwB,MAAO;;AAAA;AAAA,QACnD,WAAW,kBACRpB,IAAAmC,EAAgB,QAAQ,UAAxB,gBAAAnC,EAA+B,MAAK,QACpCD,IAAAoC,EAAgB,OAAO,MAAM,UAA7B,gBAAApC,EAAoC,MAAK,EAC5C,UACGG,IAAAiC,EAAgB,QAAQ,UAAxB,gBAAAjC,EAA+B,MAAK,QACpCD,IAAAkC,EAAgB,OAAO,MAAM,UAA7B,gBAAAlC,EAAoC,MAAK,EAC5C;AAAA,QACA,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,KAAK;AAAA,QACL,MAAM;AAAA,QACN,YAAY;AAAA,MAAA;AAAA,KACZ;;;;;;;;;;;;;;;;;;;;;;;ACfI,UAAA,EAAE,iBAAAoB,EAAgB,IAAIN,EAAY,GAElCoC,IAAU/B,EAAS,MAChBC,EAAgB,UAAU,SAAS+B,EAC3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICHUC,KAAkB;AAAA,EAC7B,QAAQC,GAAU;AACZ,IAAAA,EAAA,UAAU,eAAeC,EAAW;AACxC,UAAMC,IAAgBF,EAAI;AACtB,IAAAA,EAAA,QAAQ,SAAUG,GAAe;AACnC,YAAMC,IAAWF,EAAc,KAAK,MAAMC,CAAa,GAEjDE,IACJ,OAAOF,KAAkB,WACrB,SAAS,cAAcA,CAAa,IACpCA;AAEF,UAAAE,KAAUA,aAAkB,WAC1B,CAACA,EAAO,cAAc,sBAAsB,GAAG;AAC3C,cAAAC,IAAmB,SAAS,cAAc,KAAK;AAErD,QAAAA,EAAiB,KAAK,uBACtBA,EAAiB,MAAM,gBAAgB,QAEvCD,EAAO,YAAYC,CAAgB;AAC7B,cAAAC,IAAQC,GAAYP,EAAW;AACrC,QAAAQ,GAAOF,GAAOD,CAAgB,GAE9BN,EAAI,0BAA0B;AAAA,UAC5B,WAAWM;AAAA,UACX,OAAAC;AAAA,QACF;AAEA,cAAMlE,IAAQoB,EAAY;AAC1B,QAAAuC,EAAI,wBAAwB3D;AAAA,MAAA;AAIzB,aAAA+D;AAAA,IACT;AAGA,UAAMM,IAAkBV,EAAI;AAC5B,IAAAA,EAAI,UAAU,WAAY;AACxB,aAAIA,EAAI,4BACCS,GAAA,MAAMT,EAAI,wBAAwB,SAAS,GAClD,OAAOA,EAAI,0BAENU,EAAgB,KAAK,IAAI;AAAA,IAClC;AAAA,EAAA;AAEJ,GClDaC,KAAiB,CAC5BC,GACAC,MAGED,EAAK,IAAIC,EAAK,IAAIA,EAAK,SACvBD,EAAK,IAAIA,EAAK,QAAQC,EAAK,KAC3BD,EAAK,IAAIC,EAAK,IAAIA,EAAK,UACvBD,EAAK,IAAIA,EAAK,SAASC,EAAK,GAInBC,IAAiB,CAAC3D,MAA8C;AAC3E,MAAI,CAACA;AACI,WAAA;AAAA,MACL,GAAG;AAAA,MACH,GAAG;AAAA,MACH,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,OAAO;AAAA,MACP,KAAK;AAAA,IACP;AAEI,QAAA4D,IAAO5D,EAAQ,sBAAsB;AAEpC,SAAA;AAAA,IACL,QAAQ4D,EAAK;AAAA,IACb,MAAMA,EAAK;AAAA,IACX,OAAOA,EAAK;AAAA,IACZ,KAAKA,EAAK;AAAA,IACV,GAAGA,EAAK;AAAA,IACR,GAAGA,EAAK;AAAA,IACR,OAAOA,EAAK;AAAA,IACZ,QAAQA,EAAK;AAAA,EACf;AACF,GAEaC,IAAY,CAACC,OAA+B;AAAA,EACvD,GAAGA,EAAI,IAAIA,EAAI,QAAQ;AAAA,EACvB,GAAGA,EAAI,IAAIA,EAAI,SAAS;AAC1B,IAEaC,KAAY,CAAC/D,GAA6BgE,MAAoB;AACnE,QAAAJ,IAAOD,EAAe3D,CAAO;AAC5B,SAAA;AAAA,IACL,OAAO;AAAA,MACL,GAAGgE,EAAQ,IAAIJ,EAAK;AAAA,MACpB,GAAGI,EAAQ,IAAIJ,EAAK;AAAA,IACtB;AAAA,IACA,SAAS;AAAA,MACP,IAAKI,EAAQ,IAAIJ,EAAK,KAAKA,EAAK,QAAS;AAAA,MACzC,IAAKI,EAAQ,IAAIJ,EAAK,KAAKA,EAAK,SAAU;AAAA,IAAA;AAAA,EAE9C;AACF,GAEaK,KAAc,CAACC,GAAgBC,MAA2B;AAC/D,QAAAC,IAAKD,EAAO,IAAID,EAAO,GACvBG,IAAKF,EAAO,IAAID,EAAO;AAC7B,SAAO,KAAK,KAAKE,IAAKA,IAAKC,IAAKA,CAAE;AACpC,GAEaC,KAAoB,CAC/Bb,GACAC,MACW;AACX,QAAMa,IAAW,KAAK;AAAA,IACpB;AAAA,IACA,KAAK,IAAId,EAAK,IAAIA,EAAK,OAAOC,EAAK,IAAIA,EAAK,KAAK,IAC/C,KAAK,IAAID,EAAK,GAAGC,EAAK,CAAC;AAAA,EAC3B,GACMc,IAAW,KAAK;AAAA,IACpB;AAAA,IACA,KAAK,IAAIf,EAAK,IAAIA,EAAK,QAAQC,EAAK,IAAIA,EAAK,MAAM,IACjD,KAAK,IAAID,EAAK,GAAGC,EAAK,CAAC;AAAA,EAC3B,GAEMe,IAAcF,IAAWC,GAEzBE,IAAWjB,EAAK,QAAQA,EAAK,QAC7BkB,IAAWjB,EAAK,QAAQA,EAAK;AAGnC,UAASe,IAAcC,IAAY,MAAOD,IAAcE,IAAY,OAAO;AAC7E,GCxFaC,KAAoB,8BCApBC,IAAe,CAACC,MAAiB;AAC5C,EAAAA,EAAM,eAAe;AAEvB,GCIaC,KAAoB,CAAC1C,MAA8B;AACxD,QAAA;AAAA,IACJ,aAAAvB;AAAA,IACA,kBAAAN;AAAA,IACA,SAAA2B;AAAA,IACA,kBAAApB;AAAA,IACA,YAAYiE;AAAA,IACZ,iBAAA9D;AAAA,IACA,+BAAAK;AAAA,MACEjB,EAAY,GAEVgC,IAAa7B,EAAwB,IAAI,GACzCwE,IAAWtE;AAAA,IACf,MACEO,EAAgB,MAAM,IAAIoB,EAAW,KAAoB,KACzDH,EAAQ,QAAQ,UAAUG,EAAW;AAAA,EACzC,GAEM4C,IAAKrE,GAAWwB,KAAA,gBAAAA,EAAS,OAAM8C,IAAO,GAEtCzE,IAAaC,EAAkB,MAC/B,CAAC2B,EAAW,SACZ,CAACpB,EAAgB,MAAM,IAAIoB,EAAW,KAAK,IAAU,KAClD9B,EAAiB,MAAM,IAAI8B,EAAW,KAAK,CACnD,GAEK8C,IAAYzE,EAAkB,MAAM;AAGxC,QAFI,CAAC2B,EAAW,SACZ,CAAC0C,EAAc,SACf,CAAC9D,EAAgB,MAAM,IAAIoB,EAAW,KAAK,EAAU,QAAA;AAEzD,UAAM+C,IAAiBvE,EAAY,MAAM,IAAIwB,EAAW,KAAK;AAC7D,WAAK+C,KAAA,QAAAA,EAAgB,OAAO,SAErB,CAAC,MAAM,KAAK7E,EAAiB,MAAM,QAAS,CAAA,EAAE;AAAA,MACnD,CAAC,CAAC8E,GAAGC,CAAe,MACbA,EAAgB,OAAO,SACrB,CAACA,EAAgB,OAAO;AAAA,QAAK,CAACC,MACnCH,EAAe,OAAO,SAASG,CAAK;AAAA,MACtC,IAH2C;AAAA,IAK/C,IAT2C;AAAA,EAS3C,CACD;AAmCM,SAAA;AAAA,IACL,YAAAlD;AAAA,IACA,iBAnCsB,MAAM;AAC5B,UAAI,CAACA,EAAW,MAAa,OAAA,IAAI,MAAM,uBAAuB;AAElD,MAAAxB,EAAA,MAAM,IAAIwB,EAAW,OAAO;AAAA,QACtC,MAAMA,EAAW;AAAA,QACjB,SAAQD,KAAA,gBAAAA,EAAS,WAAU,CAAC;AAAA,QAC5B,QAAOA,KAAA,gBAAAA,EAAS,UAAS;AAAA,QACzB,eAAcA,KAAA,gBAAAA,EAAS,UAAS;AAAA,QAChC,SAAQA,KAAA,gBAAAA,EAAS,WAAU,CAAC;AAAA,QAC5B,OAAMA,KAAA,gBAAAA,EAAS,SAAQ;AAAA,QACvB,IAAI6C,EAAG;AAAA,MAAA,CACR,GAE6B3D,EAAA,OAAOe,EAAW,KAAK,GAE1CA,EAAA,MAAM,iBAAiB,aAAauC,CAAY,GAChDvC,EAAA,MAAM,iBAAiB,QAAQuC,CAAY,GAC3CvC,EAAA,MAAM,aAAasC,IAAmB,MAAM,GAC5CtC,EAAA,MAAM,aAAa,aAAa,OAAO;AAAA,IACpD;AAAA,IAiBE,mBAfwB,MAAM;AAC1B,MAACA,EAAW,UAEJxB,EAAA,MAAM,OAAOwB,EAAW,KAAK,GACxBvB,EAAA,MAAM,OAAOuB,EAAW,KAAK,GAEnCA,EAAA,MAAM,oBAAoB,aAAauC,CAAY,GACnDvC,EAAA,MAAM,oBAAoB,QAAQuC,CAAY,GAC9CvC,EAAA,MAAM,gBAAgBsC,EAAiB,GACvCtC,EAAA,MAAM,gBAAgB,WAAW;AAAA,IAC9C;AAAA,IAME,YAAA5B;AAAA,IACA,UAAAuE;AAAA,IACA,WAAAG;AAAA,IACA,IAAAF;AAAA,EACF;AACF,GC7FaO,IAAe,CAC1BzF,GACA0F,MAEK1F,IACE0F,EAAU,SAAS1F,CAAO,IADZ,ICOV2F,KAA4B,CAACzG,MAAqB;;AAC7D,QAAM0G,IAAgBjC,EAAezE,EAAM,gBAAgB,IAAI,KAAK,GAC9D2G,IAAkBhC,EAAU+B,CAAa,GACzCE,MAAWvG,IAAAL,EAAM,gBAAgB,QAAQ,UAA9B,gBAAAK,EAAqC,MAAK,GACrDwG,MAAWzG,IAAAJ,EAAM,gBAAgB,QAAQ,UAA9B,gBAAAI,EAAqC,MAAK,GASrD0G,IAA0B,EAN9BJ,KACAE,KAAYF,EAAc,KAC1BE,KAAYF,EAAc,IAAIA,EAAc,SAC5CG,KAAYH,EAAc,KAC1BG,KAAYH,EAAc,IAAIA,EAAc,SAIxCK,IAAkB,MAAM,KAAK/G,EAAM,iBAAiB,MAAM,MAAM,GAEhEgH,IAAuB,MAAM,KAAKhH,EAAM,gBAAgB,MAAM,QAAA,CAAS,EAC1E,OAAO,CAAC,CAACiH,GAAMb,CAAC,MAAM;AACjB,QAAA,CAACa,EAAa,QAAA;AAEZ,UAAAvC,IAAOD,EAAewC,CAAmB;AAC/C,WAAOvC,KAAQgC,KAAiBpC,GAAeI,GAAMgC,CAAa;AAAA,EACnE,CAAA,EACA,IAAI,CAAC,CAACO,GAAMnG,CAAO,MAAM;AAClB,UAAA4D,IAAOD,EAAewC,CAAmB,GACzCC,IAAgBvC,EAAUD,CAAI,GAE9ByC,IACJP,KAAYlC,EAAK,KACjBkC,KAAYlC,EAAK,IAAIA,EAAK,SAC1BmC,KAAYnC,EAAK,KACjBmC,KAAYnC,EAAK,IAAIA,EAAK,QAEtB0C,IAAiBhC,GAAkBV,GAAMgC,CAAa,GACtDW,IAAiBtC,GAAY4B,GAAiBO,CAAa;AAGjE,QAAII,IAAQ;AACD,eAAA,CAACC,GAAYnB,CAAC,KAAKpG,EAAM,gBAAgB,MAAM;AACxD,MACEuH,MAAeN,KACfM,KACAN,KACAV,EAAaU,GAAqBM,CAAyB,KAE3DD;AAIG,WAAA;AAAA,MACL,SAAAxG;AAAA,MACA,MAAAmG;AAAA,MACA,oBAAAE;AAAA,MACA,gBAAAC;AAAA,MACA,OAAAE;AAAA,MACA,gBAAAD;AAAA,IACF;AAAA,EACD,CAAA,EACA,KAAK,CAAC,GAAGxG,MAAM;AACd,QAAI,CAACiG,GAAyB;AACxB,UAAA,EAAE,sBAAsBjG,EAAE;AACrB,eAAAA,EAAE,QAAQ,EAAE;AACjB,UAAA,EAAE,uBAAuBA,EAAE;AACtB,eAAA,EAAE,qBAAqB,KAAK;AAAA,IAAA;AAEvC,WAAI,KAAK,IAAI,EAAE,iBAAiBA,EAAE,cAAc,KAAK,IAC5C,EAAE,iBAAiBA,EAAE,iBACvBA,EAAE,iBAAiB,EAAE;AAAA,EAAA,CAC7B,GAEG2G,IAAoB,MAAM,KAAKxH,EAAM,aAAa,MAAM,QAAA,CAAS,EACpE,OAAO,CAAC,CAACiH,GAAMb,CAAC,MAAM;AAEnB,QAAA,CAACa,KACDF,EAAgB;AAAA,MACd,CAACU,MACCA,KACAlB,EAAaU,GAAqBQ,CAAuB;AAAA,IAC7D;AAEO,aAAA;AAEH,UAAA/C,IAAOD,EAAewC,CAAmB;AAC/C,WAAOvC,KAAQgC,KAAiBpC,GAAeI,GAAMgC,CAAa;AAAA,EACnE,CAAA,EACA,IAAI,CAAC,CAACO,GAAMS,CAAI,MAAM;AACf,UAAAhD,IAAOD,EAAewC,CAAmB,GACzCU,IAAahD,EAAUD,CAAI,GAE3ByC,IACJP,KAAYlC,EAAK,KACjBkC,KAAYlC,EAAK,IAAIA,EAAK,SAC1BmC,KAAYnC,EAAK,KACjBmC,KAAYnC,EAAK,IAAIA,EAAK,QAEtB0C,IAAiBhC,GAAkBV,GAAMgC,CAAa,GACtDW,IAAiBtC,GAAY4B,GAAiBgB,CAAU;AAG9D,QAAIL,IAAQ;AACD,eAAA,CAACC,GAAYnB,CAAC,KAAKpG,EAAM,aAAa,MAAM;AACrD,MACEuH,MAAeN,KACfM,KACAN,KACAV,EAAaU,GAAqBM,CAAyB,KAE3DD;AAIG,WAAA;AAAA,MACL,MAAAI;AAAA,MACA,MAAAT;AAAA,MACA,oBAAAE;AAAA,MACA,gBAAAC;AAAA,MACA,OAAAE;AAAA,MACA,gBAAAD;AAAA,IACF;AAAA,EACD,CAAA,EACA,KAAK,CAAC,GAAGxG,MAAM;AACd,QAAI,CAACiG,GAAyB;AACxB,UAAA,EAAE,sBAAsBjG,EAAE;AACrB,eAAAA,EAAE,QAAQ,EAAE;AACjB,UAAA,EAAE,uBAAuBA,EAAE;AACtB,eAAA,EAAE,qBAAqB,KAAK;AAAA,IAAA;AAEvC,WAAI,KAAK,IAAI,EAAE,iBAAiBA,EAAE,cAAc,KAAK,IAC5C,EAAE,iBAAiBA,EAAE,iBACvBA,EAAE,iBAAiB,EAAE;AAAA,EAAA,CAC7B;AAEI,SAAA;AAAA,IACL,GAAGmG,EAAqB,IAAI,CAACtH,MAASA,EAAK,IAAI;AAAA,IAC/C,GAAG8H,EAAkB,IAAI,CAAC9H,MAASA,EAAK,IAAI;AAAA,EAC9C;AACF,GC3IakI,KAAc,CACzBxE,GACAD,MACG;AACH,QAAM,EAAE,iBAAAX,GAAiB,UAAAqF,EAAS,IAAIzG,EAAY,GAC5C0G,KAAW3E,KAAA,gBAAAA,EAAS,aAAY;AA4D/B,SAAA;AAAA,IACL,iBA3DsB,CAACyC,MAAyB;;AAChD,MAAAD,EAAaC,CAAK;AAEZ,YAAAlB,IAAOD,EAAerB,EAAW,KAAK;AAE5C,OAAA/C,IAAA+C,EAAW,UAAX,QAAA/C,EAAkB;AAElB,YAAM0H,IAAUrD,EAAK,IAAIA,EAAK,QAAQ,GAChCsD,IAAUtD,EAAK,IAAIA,EAAK,SAAS;AAEvC,MAAAlC,EAAgB,MAAM,QAAQ;AAAA,QAC5B,GAAGuF;AAAA,QACH,GAAGC;AAAA,MACL,GAEAxF,EAAgB,QAAQ,QAAQ;AAAA,QAC9B,GAAGuF;AAAA,QACH,GAAGC;AAAA,MACL,GAEgBxF,EAAA,OAAO,MAAM,QAAQ;AAAA,QACnC,GAAGkC,EAAK,QAAQ;AAAA,QAChB,GAAGA,EAAK,SAAS;AAAA,MACnB,GAEgBlC,EAAA,OAAO,QAAQ,QAAQ;AAAA,QACrC,GAAG;AAAA,QACH,GAAG;AAAA,MACL;AAAA,IACF;AAAA,IA+BE,gBA7BqB,MAAM;AACvB,UAAA,CAACA,EAAgB,QAAQ,MAAO;AAE9B,YAAAyF,IAAWzF,EAAgB,QAAQ,MAAM,GACzC0F,IAAW1F,EAAgB,QAAQ,MAAM;AAE/C,UAAI2F,IAAOF,GACPG,IAAOF;AAEP,MAAAL,EAAS,EAAE,UAAeO,KAAAN,IAC1BD,EAAS,EAAE,UAAeO,KAAAN,IAC1BD,EAAS,EAAE,UAAeM,KAAAL,IAC1BD,EAAS,EAAE,UAAeM,KAAAL,IAE9BtF,EAAgB,QAAQ,QAAQ;AAAA,QAC9B,GAAG2F;AAAA,QACH,GAAGC;AAAA,MACL;AAAA,IACF;AAAA,IAYE,eAVoB,MAAM;AAC1B,MAAA5F,EAAgB,QAAQ,QAAQ,MAChCA,EAAgB,MAAM,QAAQ,MACdA,EAAA,OAAO,MAAM,QAAQ,MACrBA,EAAA,OAAO,QAAQ,QAAQ;AAAA,IACzC;AAAA,EAMA;AACF,GC3Ea6F,KAAa,CAACjF,MAAwC;AACjE,QAAMpD,IAAQoB,EAAY;AAgCnB,SAAA;AAAA,IACL,gBA/BqB,CAACwE,MAAwB;AACxC,MAAA5F,EAAA,gBAAgB,MAAM,QAAQ,EAAE,GAAG4F,EAAM,SAAS,GAAGA,EAAM,QAAQ,GACnE5F,EAAA,gBAAgB,QAAQ,QAAQ;AAAA,QACpC,GAAG4F,EAAM;AAAA,QACT,GAAGA,EAAM;AAAA,MACX;AAEA,YAAM,EAAE,OAAA0C,GAAO,SAAAC,EAAA,IAAY1D,GAAUzB,EAAW,OAAO;AAAA,QACrD,GAAGwC,EAAM;AAAA,QACT,GAAGA,EAAM;AAAA,MAAA,CACV;AAEK,MAAA5F,EAAA,gBAAgB,OAAO,MAAM,QAAQsI,GACrCtI,EAAA,gBAAgB,OAAO,QAAQ,QAAQuI;AAAA,IAC/C;AAAA,IAkBE,eAhBoB,CAAC3C,MAAqC;AACpD,MAAA5F,EAAA,gBAAgB,QAAQ,QAAQ;AAAA,QACpC,GAAG4F,EAAM;AAAA,QACT,GAAGA,EAAM;AAAA,MACX;AAAA,IACF;AAAA,IAYE,cAVmB,MAAM;AACnB,MAAA5F,EAAA,gBAAgB,QAAQ,QAAQ,MAChCA,EAAA,gBAAgB,MAAM,QAAQ,MAC9BA,EAAA,gBAAgB,OAAO,MAAM,QAAQ,MACrCA,EAAA,gBAAgB,OAAO,QAAQ,QAAQ;AAAA,IAC/C;AAAA,EAMA;AACF,GC5BawI,KAAY,CACvBpF,GACAD,MACG;;AACH,QAAMnD,IAAQoB,EAAY,GAEpB,EAAE,gBAAAqH,GAAgB,eAAAC,GAAe,cAAAC,EAAa,IAClDN,GAAWjF,CAAU,GAEjB,EAAE,iBAAAwF,GAAiB,gBAAAC,GAAgB,eAAAC,EAAkB,IAAAlB;AAAA,IACzDxE;AAAA,IACAD,KAAA,gBAAAA,EAAS;AAAA,EACX;AAEA,MAAI4F,IAAkC;AAEhC,QAAAC,IAAsB,CAC1BC,MACiD;;AACjD,QAAI,CAACA,EAAyB,QAAA,oBAAI,IAAI;AAEtC,UAAMC,IACJlJ,EAAM,iBAAiB,MAAM,IAAIiJ,CAAgB;AAEnD,QAAIjJ,EAAM,iBAAiB,MAAM,OAAO,KAAKkJ,GAAwB;AAC7DC,YAAAA,wBAAa,IAA6C;AAEhE,aAAAnJ,EAAM,iBAAiB,MAAM,QAAQ,CAACiH,MAAS;;AAC7C,cAAMnG,IAAUd,EAAM,YAAY,MAAM,IAAIiH,CAAI;AAChD,QAAKnG,KAELqI,EAAO,IAAIlC,GAAM;AAAA,UACf,GAAGnG;AAAAA,UACH,eAAaA,IAAAA,EAAQ,SAARA,gBAAAA,EAAc,cAAa;AAAA,UACxC,cAAaA,IAAAA,EAAQ,SAARA,gBAAAA,EAAc;AAAA,QAAsB,CAClD;AAAA,MAAA,CACF,GAEMqI;AAAAA,IAAA;AAGH,IAAAnJ,EAAA,iBAAiB,MAAM,MAAM;AAEnC,UAAMc,IAAUd,EAAM,YAAY,MAAM,IAAIiJ,CAAgB;AAC5D,QAAI,CAACnI,EAAgB,QAAA,oBAAI,IAAI;AAEvB,UAAAqI,wBAAa,IAA6C;AAChE,WAAAA,EAAO,IAAIF,GAAkB;AAAA,MAC3B,GAAGnI;AAAA,MACH,eAAaT,IAAAS,EAAQ,SAAR,gBAAAT,EAAc,cAAa;AAAA,MACxC,cAAaD,IAAAU,EAAQ,SAAR,gBAAAV,EAAc;AAAA,IAAsB,CAClD,GAEM+I;AAAA,EACT,GAEMC,IAA8B,CAClCC,MACG;AACH,QAAI,CAACA;AACH,aAAO,EAAE,SAAS,MAAM,MAAM,KAAK;AAGrC,UAAMC,IAAW,MAAM,QAAQD,CAAY,IACvCA,IACA,CAACA,CAAY,GAEXtC,IAAkB,MAAM,KAAK/G,EAAM,iBAAiB,MAAM,MAAM,GAEhEuJ,IAAsBD,EAAS,KAAK,CAACE,MAAgB;AACzD,UAAI,CAACxJ,EAAM,aAAa,MAAM,IAAIwJ,CAAW,EAAU,QAAA;AAEvD,YAAM9B,IAAO1H,EAAM,SAAS,MAAM,IAAIwJ,CAAW;AAa7C,aAZA,GAAC9B,KAGHX,EAAgB;AAAA,QACd,CAACU,MACCA,MACCA,MAAaC,EAAK,QACjBnB,EAAamB,EAAK,MAAqBD,CAAuB;AAAA,MACpE,KAIEC,EAAK,OAAO,UAOV,CANiB,CAAC,MAAM;AAAA,QAC1B1H,EAAM,iBAAiB,MAAM,OAAO;AAAA,MAAA,EACpC,KAAK,CAACc,MACDA,EAAQ,OAAO,SACb,CAACA,EAAQ,OAAO,KAAK,CAACwF,MAAUoB,EAAK,OAAO,SAASpB,CAAK,CAAC,IAD/B,EAEpC;AAAA,IAII,CACR;AAED,WAAKiD,IAyBE;AAAA,MACL,SAtBsBD,EAAS;AAAA,QAC/B,CAACE,MACCxJ,EAAM,gBAAgB,MAAM,IAAIwJ,CAAW,KAC3CxJ,EAAM,YAAY,MAAM,IAAIwJ,CAAW,KACvC,CAACzC,EAAgB;AAAA,UACf,CAACU,MACCA,MACCA,MAAa+B,KACZjD;AAAA,YACEiD;AAAA,YACA/B;AAAA,UAAA,KAEFlB,EAAakB,GAAyB+B,CAA0B;AAAA,QAAA,MAErEA,MAAgBD,KACfhD;AAAA,UACEiD;AAAA,UACAD;AAAA,QACF;AAAA,MACN,KAG8B;AAAA,MAC5B,MAAMA;AAAA,IACR,IA3BS,EAAE,SAAS,MAAM,MAAM,KAAK;AAAA,EA4BvC,GAEME,MAAmBpJ,IAAA8C,KAAA,gBAAAA,EAAS,WAAT,gBAAA9C,EAAiB,UAASoG,IAE7CiD,IAA0B,CAACC,MAAuC;;AAChE,UAAAC,IAAkB5J,EAAM,QAAQ,QAAQ,OACxC6J,IAAe7J,EAAM,QAAQ,KAAK;AAElC,IAAAA,EAAA,QAAQ,QAAQ,QAAQ2J,EAAQ,SAChC3J,EAAA,QAAQ,KAAK,QAAQ2J,EAAQ,MAE/BC,KACE5J,EAAM,QAAQ,QAAQ,UAAU4J,OAClCrJ,KAAAH,KAAAC,IAAAL,EAAM,YAAY,MAAM,IAAI4J,CAAe,MAA3C,gBAAAvJ,EAA8C,WAA9C,gBAAAD,EAAsD,YAAtD,QAAAG,EAAA,KAAAH,GAAgEJ,IAE5DA,EAAM,QAAQ,QAAQ,WAClBgB,KAAAN,KAAAJ,IAAAN,EAAA,YAAY,MACf,IAAIA,EAAM,QAAQ,QAAQ,KAAK,MAD5B,gBAAAM,EAEF,WAFE,gBAAAI,EAEM,YAFN,QAAAM,EAAA,KAAAN,GAEgBV,MAIxB6J,KACE7J,EAAM,QAAQ,KAAK,UAAU6J,OAC/BC,KAAA7I,KAAAF,IAAAf,EAAM,SAAS,MAAM,IAAI6J,CAAY,MAArC,gBAAA9I,EAAwC,WAAxC,gBAAAE,EAAgD,YAAhD,QAAA6I,EAAA,KAAA7I,GAA0DjB,IAEtDA,EAAM,QAAQ,KAAK,WACf+J,KAAAC,KAAAC,IAAAjK,EAAA,SAAS,MACZ,IAAIA,EAAM,QAAQ,KAAK,KAAK,MADzB,gBAAAiK,EAEF,WAFE,gBAAAD,EAEM,YAFN,QAAAD,EAAA,KAAAC,GAEgBhK;AAAA,EAG9B,GAEMkK,IAA4BC,GAAc,MAAM;AAC9C,UAAAd,IAAeI,EAAiBzJ,CAAK,GACrCoK,IAAmBhB,EAA4BC,CAAY;AACjE,IAAAK,EAAwBU,CAAgB;AAAA,EACvC,KAAAhK,IAAA+C,KAAA,gBAAAA,EAAS,WAAT,gBAAA/C,EAAiB,aAAY,CAAC,GAE3BiK,IAAgB,MAAM;AACA,IAAAH,EAAA,GAE1BnB,IAAmB,sBAAsBsB,CAAa;AAAA,EACxD,GAEMC,IAAiB,MAAMD,EAAc,GAErCE,IAAgB,MAAM;AAC1B,IAAIxB,MAAqB,SACvB,qBAAqBA,CAAgB,GAClBA,IAAA;AAAA,EAEvB;AAsDO,SAAA;AAAA,IACL,UArDe,CAACnD,MAAwC;AACxD,MAAA5F,EAAM,iBAAiB,QAAQgJ,EAAoB5F,EAAW,KAAK,GACnEpD,EAAM,iBAAiB,MAAM;AAAA,QAAQ,CAACc,MACpC;;AAAA,kBAAAV,KAAAC,IAAAS,EAAQ,QAAO,YAAf,gBAAAV,EAAA,KAAAC,GAAyBL;AAAA;AAAA,MAC3B,GAEI4F,aAAiB,eACnB6C,EAAe7C,CAAK,IAEpBgD,EAAgBhD,CAAK,GAGR0E,EAAA;AAAA,IACjB;AAAA,IAyCE,OAvCY,CAAC1E,MAAqD;AAClE,MAAA5F,EAAM,iBAAiB,MAAM;AAAA,QAAQ,CAACc,MACpC;;AAAA,kBAAAV,KAAAC,IAAAS,EAAQ,QAAO,WAAf,gBAAAV,EAAA,KAAAC,GAAwBL;AAAA;AAAA,MAC1B,GAEI4F,aAAiB,gBACJiD,EAAA,IAEfH,EAAc9C,CAAK;AAAA,IAEvB;AAAA,IA8BE,YA5BiB,CAAC4E,IAAgB,OAAS;;AAI3C,UAHa7B,EAAA,GACCG,EAAA,GAEV0B,GAAe;AACb,YAAAxK,EAAM,QAAQ,KAAK,OAAO;AACtB,gBAAA0H,IAAO1H,EAAM,SAAS,MAAM,IAAIA,EAAM,QAAQ,KAAK,KAAK;AACxD,WAAAI,IAAAsH,KAAA,iBAAArH,IAAAqH,EAAA,QAAO,WAAP,QAAAtH,EAAA,KAAAC,GAAgBL;AAAA,QAAK;AAE3B,UAAAA,EAAM,iBAAiB,MAAM;AAAA,YAAQ,CAACc,MACpC;;AAAA,sBAAAV,KAAAC,IAAAS,EAAQ,QAAO,UAAf,gBAAAV,EAAA,KAAAC,GAAuBL;AAAA;AAAA,UACzB;AAGI,QAAAA,EAAA,iBAAiB,MAAM,MAAM;AAAA,MAAA;AAG/B,MAAAA,EAAA,iBAAiB,MAAM,MAAM,GAE7BA,EAAA,QAAQ,KAAK,QAAQ,MACrBA,EAAA,QAAQ,QAAQ,QAAQ,MAEhBuK,EAAA;AAAA,IAChB;AAAA,EAMA;AACF,GCvOaE,KAAkBpJ,GAAkB,MAAM;AACrD,MAAIqJ,IAAqB,IACrBC,IAAsB,IACtBC,IAA6B,IAE7BC,IAAoD,MACpDC,IAAyC,MACzCC,IAA4C,MAC5CC,IAA6D,MAC7DC,IAA6D;AAE3D,QAAA,EAAE,iBAAAvJ,EAAgB,IAAIN,EAAY,GAElC8J,IAAsB,MAAM;AAChC,UAAMC,IAAO,SAAS;AAEtB,IAAAT,IAAqBS,EAAK,MAAM,YAEhCA,EAAK,MAAM,aAAa,QAEjB,OAAA,iBAAiB,eAAexF,CAAY,GAC5C,OAAA,iBAAiB,eAAeA,CAAY,GAC5C,OAAA,iBAAiB,cAAcA,CAAY,GAC3C,OAAA,iBAAiB,aAAaA,CAAY;AAAA,EACnD,GAEMyF,IAAqB,MAAM;AAC/B,UAAMD,IAAO,SAAS;AAEtB,IAAAA,EAAK,MAAM,aAAaT,GACxBS,EAAK,MAAM,cAAcR,GACzBQ,EAAK,MAAM,qBAAqBP,GAEzB,OAAA,oBAAoB,eAAejF,CAAY,GAC/C,OAAA,oBAAoB,eAAeA,CAAY,GAC/C,OAAA,oBAAoB,cAAcA,CAAY,GAC9C,OAAA,oBAAoB,aAAaA,CAAY;AAAA,EACtD,GAEM0F,IAAoB,MAAM;AAC9B,IAAIR,MACO,SAAA,oBAAoB,eAAeA,CAAkB,GACzCA,IAAA,OAGnBC,MACO,SAAA,oBAAoB,aAAaA,CAAiB,GACvCA,IAAA,OAGlBC,MACqBA,IAAA,OAGrBC,MACO,SAAA,oBAAoB,SAASA,CAAoB,GACnCA,IAAA,OAGrBC,MACO,SAAA,oBAAoB,WAAWA,CAAiB,GAChD,SAAA,oBAAoB,YAAYA,CAAiB,GACjD,SAAA,oBAAoB,SAASA,CAAiB,GACnCA,IAAA;AAAA,EAExB;AAoDO,SAAA;AAAA,IACL,iBAnDsB,CACtBrF,GACAxC,GACAD,MACG;AACe,MAAAkI,EAAA,GAEjBzF,EAAM,OAAuB,KAAK,GAE/BzC,KAAA,QAAAA,EAAS,cACXzB,EAAgB,UAAU,QAAQ4J,GAAQnI,EAAQ,SAAS;AAE7D,YAAM,EAAE,UAAAoI,GAAU,OAAAC,GAAO,YAAAC,EAAe,IAAAjD,GAAUpF,GAAYD,CAAO;AAErE,MAAA2H,IAAoB,MAAM;AACxB,QAAApJ,EAAgB,UAAU,QAAQ,MACf0J,EAAA,GACnBK,EAAW,EAAI,GACGJ,EAAA;AAAA,MACpB,GAEAN,IAAuB,MAAM;AAC3B,QAAArJ,EAAgB,UAAU,QAAQ,MACf0J,EAAA,GACnBK,EAAW,EAAK,GACEJ,EAAA;AAAA,MACpB,GAEqBR,IAAA,CAACjF,MAAwC4F,EAAM5F,CAAK,GAClDoF,IAAA,CAACpF,MAAsB4F,EAAM5F,CAAK,GACzDqF,IAAoB,CAACrF,MAAyB;AACxCA,QAAAA,EAAM,SAAS,YACbA,EAAM,SAAS,aAA4CmF,KAAA,QAAAA,MAC3DnF,EAAM,SAAS,YAAwCkF,KAAA,QAAAA,OAG7DU,EAAM5F,CAAK;AAAA,MACb,GAEoBsF,EAAA,GACpBK,EAAS3F,CAAK,GAEL,SAAA,iBAAiB,eAAeiF,CAAkB,GAClD,SAAA,iBAAiB,aAAaC,CAAiB,GAC/C,SAAA,iBAAiB,SAASE,CAAoB,GAC9C,SAAA,iBAAiB,WAAWC,CAAiB,GAC7C,SAAA,iBAAiB,YAAYA,CAAiB,GAC9C,SAAA,iBAAiB,SAASA,CAAiB;AAAA,IACtD;AAAA,EAIA;AACF,CAAC,GCvIYS,KAAe,CAACvI,MAA8B;AACnD,QAAA;AAAA,IACJ,IAAA6C;AAAA,IACA,YAAA5C;AAAA,IACA,YAAA5B;AAAA,IACA,UAAAuE;AAAA,IACA,WAAAG;AAAA,IACA,iBAAAyF;AAAA,IACA,mBAAAC;AAAA,EAAA,IACE/F,GAAkB1C,CAAO,GAEvB,EAAE,iBAAAX,EAAgB,IAAIpB,EAAY,GAClC,EAAE,iBAAiByK,EAAM,IAAIpB,GAAgB,GAE7CqB,IAAkB,CAAClG,MACvBiG,EAAMjG,GAAOxC,GAAYD,CAAO;AAElC,SAAAE,EAAUsI,CAAe,GACzBI,GAAgBH,CAAiB,GAE1B;AAAA,IACL,iBAAApJ;AAAA,IACA,YAAAY;AAAA,IACA,YAAA5B;AAAA,IACA,UAAAuE;AAAA,IACA,WAAAG;AAAA,IACA,iBAAA4F;AAAA,IACA,IAAA9F;AAAA,EACF;AACF,GC/BagG,KAAiB,CAAC7I,MAA8B;AACrD,QAAA;AAAA,IACJ,UAAArB;AAAA,IACA,SAAAmB;AAAA,IACA,kBAAA3B;AAAA,IACA,YAAAE;AAAA,IACA,4BAAAe;AAAA,MACEnB,EAAY,GAEVgC,IAAa7B,EAAwB,IAAI,GAEzCwE,IAAWtE,EAAkB,MAC1BwB,EAAQ,KAAK,UAAUG,EAAW,KAC1C,GAEK8C,IAAYzE,EAAkB,MAAM;AACxC,QAAI,CAAC2B,EAAW,SAAS,CAAC5B,EAAW,MAAc,QAAA;AAEnD,UAAMyK,IAAcnK,EAAS,MAAM,IAAIsB,EAAW,KAAK;AACvD,WAAK6I,KAAA,QAAAA,EAAa,OAAO,SAElB,CAAC,MAAM,KAAK3K,EAAiB,MAAM,QAAQ,EAAE,KAAK,CAACR,MACnDA,EAAQ,OAAO,SACb,CAACA,EAAQ,OAAO;AAAA,MAAK,CAACwF,MAC3B2F,EAAY,OAAO,SAAS3F,CAAK;AAAA,IACnC,IAHmC,EAIpC,IAPuC;AAAA,EAOvC,CACF;AAyBD,SAAO,EAAE,YAAAlD,GAAY,cAvBA,MAAM;AACzB,QAAI,CAACA,EAAW,MAAa,OAAA,IAAI,MAAM,uBAAuB;AAEnC,IAAAb,EAAA,OAAOa,EAAW,KAAK,GAEzCtB,EAAA,MAAM,IAAIsB,EAAW,OAAO;AAAA,MACnC,MAAMA,EAAW;AAAA,MACjB,SAAQD,KAAA,gBAAAA,EAAS,WAAU,CAAC;AAAA,MAC5B,SAAQA,KAAA,gBAAAA,EAAS,WAAU,CAAC;AAAA,MAC5B,OAAMA,KAAA,gBAAAA,EAAS,SAAQ;AAAA,IAAA,CACxB,GAEUC,EAAA,MAAM,aAAa,sBAAsB,MAAM;AAAA,EAC5D,GAUmC,gBARZ,MAAM;AACvB,IAACA,EAAW,UAEWb,EAAA,UAAUa,EAAW,KAAK,GAE5CtB,EAAA,MAAM,OAAOsB,EAAW,KAAK;AAAA,EACxC,GAEmD,UAAA2C,GAAU,WAAAG,EAAU;AACzE,GCrDagG,KAAe,CAAC/I,MAA8B;AACnD,QAAA,EAAE,YAAAC,GAAY,cAAA+I,GAAc,gBAAAC,GAAgB,UAAArG,GAAU,WAAAG,EAAU,IACpE8F,GAAe7I,CAAO;AAGxB,SAAAE,EAAU8I,CAAY,GACtBJ,GAAgBK,CAAc,GAEvB,EAAE,YAAAhJ,GAAY,UAAA2C,GAAU,WAAAG,EAAU;AAC3C,GCVamG,KAAe,CAACjJ,MAAwC;AACnE,QAAM,EAAE,kBAAAvB,GAAkB,aAAAD,EAAY,IAAIR,EAAY,GAEhDkL,IAAa7K;AAAA,IAAkB,MACnC2B,EAAW,QAAQvB,EAAiB,MAAM,IAAIuB,EAAW,KAAK,IAAI;AAAA,EACpE,GAEMmJ,IAAqB9K,EAAS,MAAM;AACpC,QAAA,CAAC2B,EAAW,MAAc,QAAA;AAEnB,eAAA6D,KAAQpF,EAAiB;AAClC,UACEoF,KACAV,EAAaU,GAAqB7D,EAAW,KAAoB;AAE1D,eAAA;AAGJ,WAAA;AAAA,EAAA,CACR,GAEKoJ,IAAoB/K,EAAS,MAAM;AACnC,QAAA,CAAC2B,EAAW,MAAc,QAAA;AAEnB,eAAA6D,KAAQpF,EAAiB;AAClC,UACEoF,KACAV,EAAanD,EAAW,OAAsB6D,CAAmB;AAE1D,eAAA;AAGJ,WAAA;AAAA,EAAA,CACR,GAEKwF,IAAiB,MAAM;AACvB,IAACrJ,EAAW,SACCvB,EAAA,MAAM,OAAOuB,EAAW,KAAK;AAAA,EAChD,GAEMsJ,IAAe,MAAM;AAGzB,QAFI,GAACtJ,EAAW,SAEZ,CADYxB,EAAY,MAAM,IAAIwB,EAAW,KAAK,IAGtD;AAAA,UAAImJ,EAAmB;AAEV,mBAAAtF,KAAQpF,EAAiB;AAClC,UACEoF,KACAV,EAAaU,GAAqB7D,EAAW,KAAoB,KAEhDvB,EAAA,MAAM,OAAOoF,CAAI;AAKxC,UAAIuF,EAAkB;AAET,mBAAAvF,KAAQpF,EAAiB;AAClC,UACEoF,KACAV,EAAanD,EAAW,OAAsB6D,CAAmB,KAEhDpF,EAAA,MAAM,OAAOoF,CAAI;AAKvB,MAAApF,EAAA,MAAM,IAAIuB,EAAW,KAAK;AAAA;AAAA,EAC7C;AAUO,SAAA;AAAA,IACL,gBAAAqJ;AAAA,IACA,cAAAC;AAAA,IACA,oBAXyB,MAAM;AAC3B,MAACtJ,EAAW,UAEhBvB,EAAiB,MAAM,IAAIuB,EAAW,KAAK,IACvCqJ,MACAC,EAAa;AAAA,IACnB;AAAA,IAME,YAAAJ;AAAA,IACA,oBAAAC;AAAA,EACF;AACF;"}
1
+ {"version":3,"file":"vue-dnd-kit-core.es.js","sources":["../src/utils/operations.ts","../src/composables/useDnDStore.ts","../src/composables/useDragContainer.ts","../src/components/DefaultOverlay.vue","../src/components/DragOverlay.vue","../src/plugin.ts","../src/utils/geometry.ts","../src/utils/namespaces.ts","../src/utils/events.ts","../src/managers/useElementManager.ts","../src/utils/dom.ts","../src/utils/sensor.ts","../src/composables/useKeyboard.ts","../src/composables/usePointer.ts","../src/composables/useSensor.ts","../src/managers/useEventManager.ts","../src/composables/useDraggable.ts","../src/managers/useZoneManager.ts","../src/composables/useDroppable.ts","../src/composables/useSelection.ts"],"sourcesContent":["import { IDnDStore } from '../types';\r\n\r\nexport class DnDOperations {\r\n static remove = (source?: any[], index?: number) => {\r\n if (!source || index === undefined) return;\r\n const [item] = source.splice(index, 1);\r\n return item;\r\n };\r\n static insert = (target?: any[], index?: number, item?: any) => {\r\n if (!target || index === undefined) return;\r\n target.splice(index, 0, item);\r\n };\r\n static move = (\r\n source?: any[],\r\n sourceIndex?: number,\r\n target?: any[],\r\n targetIndex?: number\r\n ) => {\r\n if (\r\n !source ||\r\n !target ||\r\n sourceIndex === undefined ||\r\n targetIndex === undefined\r\n )\r\n return;\r\n const item = DnDOperations.remove(source, sourceIndex);\r\n DnDOperations.insert(target, targetIndex, item);\r\n };\r\n static swap = (\r\n source?: any[],\r\n sourceIndex?: number,\r\n target?: any[],\r\n targetIndex?: number\r\n ) => {\r\n if (\r\n !source ||\r\n !target ||\r\n sourceIndex === undefined ||\r\n targetIndex === undefined\r\n )\r\n return;\r\n\r\n const sourceItem = source[sourceIndex];\r\n const targetItem = target[targetIndex];\r\n\r\n source[sourceIndex] = targetItem;\r\n target[targetIndex] = sourceItem;\r\n };\r\n static copy = (\r\n source?: any[],\r\n index?: number,\r\n target?: any[],\r\n targetIndex?: number\r\n ) => {\r\n if (!source || index === undefined || !target || targetIndex === undefined)\r\n return;\r\n const item = source[index];\r\n DnDOperations.insert(target, targetIndex, item);\r\n };\r\n static applyTransfer = (store: IDnDStore) => {\r\n const hoveredElement = store.hovered.element.value;\r\n const hoveredZone = store.hovered.zone.value;\r\n\r\n if (hoveredElement) {\r\n const targetSource =\r\n store.elementsMap.value.get(hoveredElement)?.data?.source;\r\n const targetIndex =\r\n store.elementsMap.value.get(hoveredElement)?.data?.index;\r\n\r\n const firstElement = store.draggingElements.value.values().next().value;\r\n const firstIndex = firstElement?.data?.index;\r\n\r\n const sortDirection =\r\n firstIndex !== undefined &&\r\n targetIndex !== undefined &&\r\n firstIndex > targetIndex\r\n ? 1\r\n : -1;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort(\r\n (a, b) => sortDirection * ((a.data?.index || 0) - (b.data?.index || 0))\r\n );\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n } else if (hoveredZone) {\r\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\r\n const targetIndex = targetSource?.length;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n }\r\n };\r\n\r\n static applyCopy = (store: IDnDStore) => {\r\n const hoveredElement = store.hovered.element.value;\r\n const hoveredZone = store.hovered.zone.value;\r\n\r\n if (hoveredElement) {\r\n const targetSource =\r\n store.elementsMap.value.get(hoveredElement)?.data?.source;\r\n const targetIndex =\r\n store.elementsMap.value.get(hoveredElement)?.data?.index;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.copy(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n } else if (hoveredZone) {\r\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\r\n const targetIndex = targetSource?.length;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.copy(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n }\r\n };\r\n static applySwap = (store: IDnDStore) => {\r\n const hoveredElement = store.hovered.element.value;\r\n const hoveredZone = store.hovered.zone.value;\r\n\r\n if (hoveredElement && store.draggingElements.value.size === 1) {\r\n const element = store.draggingElements.value.values().next().value;\r\n DnDOperations.swap(\r\n element?.data?.source,\r\n element?.data?.index,\r\n store.elementsMap.value.get(hoveredElement)?.data?.source,\r\n store.elementsMap.value.get(hoveredElement)?.data?.index\r\n );\r\n } else if (hoveredZone) {\r\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\r\n const targetIndex = targetSource?.length;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n }\r\n };\r\n static applyRemove = (store: IDnDStore) => {\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) => {\r\n if (element.data?.source && element.data?.index !== undefined) {\r\n DnDOperations.remove(element.data.source, element.data.index);\r\n }\r\n });\r\n };\r\n static applyInsert = (store: IDnDStore, items: any[]) => {\r\n const hoveredElement = store.hovered.element.value;\r\n const hoveredZone = store.hovered.zone.value;\r\n\r\n if (hoveredElement && items.length > 0) {\r\n const targetSource =\r\n store.elementsMap.value.get(hoveredElement)?.data?.source;\r\n const targetIndex =\r\n store.elementsMap.value.get(hoveredElement)?.data?.index;\r\n\r\n items.forEach((item) => {\r\n DnDOperations.insert(targetSource, targetIndex, item);\r\n });\r\n } else if (hoveredZone) {\r\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\r\n const targetIndex = targetSource?.length;\r\n\r\n items.forEach((item) => {\r\n DnDOperations.insert(targetSource, targetIndex, item);\r\n });\r\n }\r\n };\r\n}\r\n","import type {\r\n IDragElement,\r\n IDraggingElement,\r\n IDropZone,\r\n IPoint,\r\n} from '../types';\r\nimport {\r\n computed,\r\n ref,\r\n shallowRef,\r\n type Component,\r\n type TransitionProps,\r\n} from 'vue';\r\nimport { createGlobalState, useMagicKeys } from '@vueuse/core';\r\n\r\nexport const useDnDStore = createGlobalState(() => {\r\n const draggingElements = ref<Map<HTMLElement | Element, IDraggingElement>>(\r\n new Map()\r\n );\r\n const isDragging = computed<boolean>(() => draggingElements.value.size > 0);\r\n\r\n const activeContainer = {\r\n component: ref<Component | null>(null),\r\n ref: shallowRef<HTMLElement | null>(null),\r\n options: shallowRef<TransitionProps | null>(null),\r\n };\r\n\r\n const elementsMap = ref<Map<HTMLElement | Element, IDragElement>>(new Map());\r\n const selectedElements = ref<Set<HTMLElement | Element>>(new Set());\r\n const zonesMap = ref<Map<HTMLElement | Element, IDropZone>>(new Map());\r\n const visibleZones = ref<Set<HTMLElement | Element>>(new Set());\r\n const visibleElements = ref<Set<HTMLElement | Element>>(new Set());\r\n\r\n const elementObserver = new IntersectionObserver((entries) => {\r\n entries.forEach((entry) =>\r\n visibleElements.value[entry.isIntersecting ? 'add' : 'delete'](\r\n entry.target\r\n )\r\n );\r\n });\r\n const zoneObserver = new IntersectionObserver((entries) => {\r\n entries.forEach((entry) =>\r\n visibleZones.value[entry.isIntersecting ? 'add' : 'delete'](entry.target)\r\n );\r\n });\r\n\r\n const handleDragElementIntersection = (\r\n action: 'add' | 'remove',\r\n element: HTMLElement | Element\r\n ) => {\r\n if (action === 'add') {\r\n elementObserver.observe(element);\r\n } else {\r\n elementObserver.unobserve(element);\r\n visibleElements.value.delete(element);\r\n }\r\n };\r\n\r\n const handleDropZoneIntersection = (\r\n action: 'add' | 'remove',\r\n element: HTMLElement | Element\r\n ) => {\r\n if (action === 'add') {\r\n zoneObserver.observe(element);\r\n } else {\r\n zoneObserver.unobserve(element);\r\n visibleZones.value.delete(element);\r\n }\r\n };\r\n\r\n const pointerPosition = {\r\n start: shallowRef<IPoint | null>(null),\r\n current: shallowRef<IPoint | null>(null),\r\n offset: {\r\n percent: shallowRef<IPoint | null>(null),\r\n pixel: shallowRef<IPoint | null>(null),\r\n },\r\n };\r\n\r\n const { w, s, a, d, ctrl, shift, alt, meta } = useMagicKeys();\r\n\r\n const hovered = {\r\n zone: shallowRef<HTMLElement | Element | null>(null),\r\n element: shallowRef<HTMLElement | Element | null>(null),\r\n };\r\n\r\n return {\r\n draggingElements,\r\n isDragging,\r\n activeContainer,\r\n elementsMap,\r\n selectedElements,\r\n zonesMap,\r\n visibleZones,\r\n visibleElements,\r\n pointerPosition,\r\n keyboard: {\r\n w,\r\n s,\r\n a,\r\n d,\r\n ctrl,\r\n shift,\r\n alt,\r\n meta,\r\n },\r\n hovered,\r\n handleDragElementIntersection,\r\n handleDropZoneIntersection,\r\n };\r\n});\r\n","import { onUnmounted, onMounted, ref, type TransitionProps } from 'vue';\r\n\r\nimport { useDnDStore } from './useDnDStore';\r\n\r\nexport const useDragContainer = (options?: Omit<TransitionProps, 'appear'>) => {\r\n const elementRef = ref<HTMLElement | null>(null);\r\n\r\n const { draggingElements, pointerPosition, isDragging, activeContainer } =\r\n useDnDStore();\r\n\r\n onMounted(() => {\r\n activeContainer.ref = elementRef;\r\n activeContainer.options.value = options ?? null;\r\n });\r\n\r\n onUnmounted(() => {\r\n activeContainer.ref.value = null;\r\n activeContainer.options.value = null;\r\n });\r\n\r\n return {\r\n elementRef,\r\n draggingElements,\r\n pointerPosition,\r\n isDragging,\r\n };\r\n};\r\n","<script setup lang=\"ts\">\r\n import { computed, CSSProperties } from 'vue';\r\n import { useDragContainer } from '../composables/useDragContainer';\r\n\r\n const { elementRef, pointerPosition, isDragging, draggingElements } =\r\n useDragContainer();\r\n\r\n const computedStyle = computed<CSSProperties>(() => ({\r\n transform: `translate3d(${\r\n (pointerPosition.current.value?.x ?? 0) -\r\n (pointerPosition.offset.pixel.value?.x ?? 0)\r\n }px, ${\r\n (pointerPosition.current.value?.y ?? 0) -\r\n (pointerPosition.offset.pixel.value?.y ?? 0)\r\n }px, 0)`,\r\n zIndex: 1000,\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n transition: '0.3s cubic-bezier(0.165, 0.84, 0.44, 1)',\r\n }));\r\n</script>\r\n\r\n<template>\r\n <div\r\n v-if=\"isDragging\"\r\n ref=\"elementRef\"\r\n :style=\"computedStyle\"\r\n >\r\n <div\r\n v-for=\"[_, element] in draggingElements\"\r\n :key=\"element.id\"\r\n v-html=\"element.initialHTML\"\r\n :style=\"{\r\n width: `${element.initialRect?.width}px`,\r\n height: `${element.initialRect?.height}px`,\r\n }\"\r\n />\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n import { computed } from 'vue';\r\n import { useDnDStore } from '../composables/useDnDStore';\r\n import DefaultOverlay from './DefaultOverlay.vue';\r\n\r\n const { activeContainer } = useDnDStore();\r\n\r\n const overlay = computed(() => {\r\n return activeContainer.component.value ?? DefaultOverlay;\r\n });\r\n</script>\r\n\r\n<template>\r\n <Transition\r\n v-if=\"activeContainer.options.value\"\r\n :name=\"activeContainer.options.value.name\"\r\n :duration=\"activeContainer.options.value.duration\"\r\n :enter-from-class=\"activeContainer.options.value.enterFromClass\"\r\n :enter-to-class=\"activeContainer.options.value.enterToClass\"\r\n :enter-active-class=\"activeContainer.options.value.enterActiveClass\"\r\n :leave-from-class=\"activeContainer.options.value.leaveFromClass\"\r\n :leave-to-class=\"activeContainer.options.value.leaveToClass\"\r\n :leave-active-class=\"activeContainer.options.value.leaveActiveClass\"\r\n :mode=\"activeContainer.options.value.mode\"\r\n :type=\"activeContainer.options.value.type\"\r\n :css=\"activeContainer.options.value.css\"\r\n :appear=\"true\"\r\n :appear-active-class=\"activeContainer.options.value.appearActiveClass\"\r\n :appear-from-class=\"activeContainer.options.value.appearFromClass\"\r\n :appear-to-class=\"activeContainer.options.value.appearToClass\"\r\n :persisted=\"activeContainer.options.value.persisted\"\r\n @enter=\"activeContainer.options.value.onEnter\"\r\n @leave=\"activeContainer.options.value.onLeave\"\r\n @before-enter=\"activeContainer.options.value.onBeforeEnter\"\r\n @before-leave=\"activeContainer.options.value.onBeforeLeave\"\r\n @before-appear=\"activeContainer.options.value.onBeforeAppear\"\r\n @after-enter=\"activeContainer.options.value.onAfterEnter\"\r\n @after-leave=\"activeContainer.options.value.onAfterLeave\"\r\n @after-appear=\"activeContainer.options.value.onAfterAppear\"\r\n >\r\n <component :is=\"overlay\" />\r\n </Transition>\r\n\r\n <component\r\n v-else\r\n :is=\"overlay\"\r\n />\r\n</template>\r\n","import { createVNode, render } from 'vue';\r\n\r\nimport type { App } from 'vue';\r\nimport DragOverlay from './components/DragOverlay.vue';\r\nimport { useDnDStore } from './composables/useDnDStore';\r\n\r\nexport const VueDndKitPlugin = {\r\n install(app: App) {\r\n app.component('DragOverlay', DragOverlay);\r\n const originalMount = app.mount;\r\n app.mount = function (rootContainer) {\r\n const instance = originalMount.call(this, rootContainer);\r\n\r\n const rootEl =\r\n typeof rootContainer === 'string'\r\n ? document.querySelector(rootContainer)\r\n : rootContainer;\r\n\r\n if (rootEl && rootEl instanceof Element) {\r\n if (!rootEl.querySelector('#vue-dnd-kit-overlay')) {\r\n const overlayContainer = document.createElement('div');\r\n\r\n overlayContainer.id = 'vue-dnd-kit-overlay';\r\n overlayContainer.style.pointerEvents = 'none';\r\n\r\n rootEl.appendChild(overlayContainer);\r\n const vnode = createVNode(DragOverlay);\r\n render(vnode, overlayContainer);\r\n\r\n app.__VUE_DND_KIT_OVERLAY__ = {\r\n container: overlayContainer,\r\n vnode,\r\n };\r\n\r\n const store = useDnDStore();\r\n app.__VUE_DND_KIT_STORE__ = store;\r\n }\r\n }\r\n\r\n return instance;\r\n };\r\n\r\n // Модифицируем метод unmount для очистки\r\n const originalUnmount = app.unmount;\r\n app.unmount = function () {\r\n if (app.__VUE_DND_KIT_OVERLAY__) {\r\n render(null, app.__VUE_DND_KIT_OVERLAY__.container);\r\n delete app.__VUE_DND_KIT_OVERLAY__;\r\n }\r\n return originalUnmount.call(this);\r\n };\r\n },\r\n};\r\n\r\ndeclare module '@vue/runtime-core' {\r\n export interface App {\r\n __VUE_DND_KIT_OVERLAY__?: {\r\n container: HTMLElement;\r\n vnode: any;\r\n };\r\n __VUE_DND_KIT_STORE__?: ReturnType<typeof useDnDStore>;\r\n }\r\n}\r\n","import type { IBoundingBox, IPoint } from '../types';\r\n\r\nexport const checkCollision = (\r\n boxA: IBoundingBox,\r\n boxB: IBoundingBox\r\n): boolean => {\r\n return (\r\n boxA.x < boxB.x + boxB.width &&\r\n boxA.x + boxA.width > boxB.x &&\r\n boxA.y < boxB.y + boxB.height &&\r\n boxA.y + boxA.height > boxB.y\r\n );\r\n};\r\n\r\nexport const getBoundingBox = (element: HTMLElement | null): IBoundingBox => {\r\n if (!element)\r\n return {\r\n x: 0,\r\n y: 0,\r\n width: 0,\r\n height: 0,\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n top: 0,\r\n };\r\n\r\n const rect = element.getBoundingClientRect();\r\n\r\n return {\r\n bottom: rect.bottom,\r\n left: rect.left,\r\n right: rect.right,\r\n top: rect.top,\r\n x: rect.x,\r\n y: rect.y,\r\n width: rect.width,\r\n height: rect.height,\r\n };\r\n};\r\n\r\nexport const getCenter = (box: IBoundingBox): IPoint => ({\r\n x: box.x + box.width / 2,\r\n y: box.y + box.height / 2,\r\n});\r\n\r\nexport const getOffset = (element: HTMLElement | null, pointer: IPoint) => {\r\n const rect = getBoundingBox(element);\r\n return {\r\n pixel: {\r\n x: pointer.x - rect.x,\r\n y: pointer.y - rect.y,\r\n },\r\n percent: {\r\n x: ((pointer.x - rect.x) / rect.width) * 100,\r\n y: ((pointer.y - rect.y) / rect.height) * 100,\r\n },\r\n };\r\n};\r\n\r\nexport const getDistance = (pointA: IPoint, pointB: IPoint): number => {\r\n const dx = pointB.x - pointA.x;\r\n const dy = pointB.y - pointA.y;\r\n return Math.sqrt(dx * dx + dy * dy);\r\n};\r\n\r\nexport const getOverlapPercent = (\r\n boxA: IBoundingBox,\r\n boxB: IBoundingBox\r\n): number => {\r\n const xOverlap = Math.max(\r\n 0,\r\n Math.min(boxA.x + boxA.width, boxB.x + boxB.width) -\r\n Math.max(boxA.x, boxB.x)\r\n );\r\n const yOverlap = Math.max(\r\n 0,\r\n Math.min(boxA.y + boxA.height, boxB.y + boxB.height) -\r\n Math.max(boxA.y, boxB.y)\r\n );\r\n\r\n const overlapArea = xOverlap * yOverlap;\r\n\r\n const boxAArea = boxA.width * boxA.height;\r\n const boxBArea = boxB.width * boxB.height;\r\n\r\n // Возвращаем среднее значение процентов перекрытия относительно обоих элементов\r\n return ((overlapArea / boxAArea) * 100 + (overlapArea / boxBArea) * 100) / 2;\r\n};\r\n","export const draggableDataName = 'data-vue-dnd-kit-draggable';\r\nexport const droppableDataName = 'data-vue-dnd-kit-droppable';\r\n","export const preventEvent = (event: Event) => {\r\n event.preventDefault();\r\n \r\n};\r\n\r\n","import { computed, ref, shallowRef, useId } from 'vue';\r\n\r\nimport type { IUseDragOptions } from '../types';\r\nimport { draggableDataName } from '../utils/namespaces';\r\nimport { preventEvent } from '../utils/events';\r\nimport { useDnDStore } from '../composables/useDnDStore';\r\n\r\nexport const useElementManager = (options?: IUseDragOptions) => {\r\n const {\r\n elementsMap,\r\n draggingElements,\r\n hovered,\r\n selectedElements,\r\n isDragging: isDragStarted,\r\n visibleElements,\r\n handleDragElementIntersection,\r\n } = useDnDStore();\r\n\r\n const elementRef = ref<HTMLElement | null>(null);\r\n const isOvered = computed<boolean>(\r\n () =>\r\n visibleElements.value.has(elementRef.value as HTMLElement) &&\r\n hovered.element.value === elementRef.value\r\n );\r\n\r\n const id = shallowRef(options?.id || useId());\r\n\r\n const isDragging = computed<boolean>(() => {\r\n if (!elementRef.value) return false;\r\n if (!visibleElements.value.has(elementRef.value)) return false;\r\n return draggingElements.value.has(elementRef.value);\r\n });\r\n\r\n const isAllowed = computed<boolean>(() => {\r\n if (!elementRef.value) return false;\r\n if (!isDragStarted.value) return false;\r\n if (!visibleElements.value.has(elementRef.value)) return false;\r\n\r\n const currentElement = elementsMap.value.get(elementRef.value);\r\n if (!currentElement?.groups.length) return true;\r\n\r\n return !Array.from(draggingElements.value.entries()).some(\r\n ([_, draggingElement]) => {\r\n if (!draggingElement.groups.length) return false;\r\n return !draggingElement.groups.some((group) =>\r\n currentElement.groups.includes(group)\r\n );\r\n }\r\n );\r\n });\r\n\r\n const registerElement = () => {\r\n if (!elementRef.value) throw new Error('ElementRef is not set');\r\n\r\n elementsMap.value.set(elementRef.value, {\r\n node: elementRef.value,\r\n groups: options?.groups ?? [],\r\n layer: options?.layer ?? null,\r\n defaultLayer: options?.layer ?? null,\r\n events: options?.events ?? {},\r\n data: options?.data ?? null,\r\n id: id.value,\r\n });\r\n\r\n handleDragElementIntersection('add', elementRef.value);\r\n\r\n elementRef.value.addEventListener('dragstart', preventEvent);\r\n elementRef.value.addEventListener('drag', preventEvent);\r\n elementRef.value.setAttribute(draggableDataName, 'true');\r\n elementRef.value.setAttribute('draggable', 'false');\r\n };\r\n\r\n const unregisterElement = () => {\r\n if (!elementRef.value) return;\r\n\r\n elementsMap.value.delete(elementRef.value);\r\n selectedElements.value.delete(elementRef.value);\r\n\r\n elementRef.value.removeEventListener('dragstart', preventEvent);\r\n elementRef.value.removeEventListener('drag', preventEvent);\r\n elementRef.value.removeAttribute(draggableDataName);\r\n elementRef.value.removeAttribute('draggable');\r\n };\r\n\r\n return {\r\n elementRef,\r\n registerElement,\r\n unregisterElement,\r\n isDragging,\r\n isOvered,\r\n isAllowed,\r\n id,\r\n };\r\n};\r\n","export const isDescendant = (\r\n element: HTMLElement | Element | null,\r\n container: HTMLElement | Element\r\n): boolean => {\r\n if (!element) return false;\r\n return container.contains(element);\r\n};\r\n","import {\r\n checkCollision,\r\n getBoundingBox,\r\n getCenter,\r\n getDistance,\r\n getOverlapPercent,\r\n} from './geometry';\r\n\r\nimport { IDnDStore } from '../types';\r\nimport { isDescendant } from './dom';\r\n\r\nexport const defaultCollisionDetection = (store: IDnDStore) => {\r\n const containerRect = getBoundingBox(store.activeContainer.ref.value);\r\n const containerCenter = getCenter(containerRect);\r\n const pointerX = store.pointerPosition.current.value?.x ?? 0;\r\n const pointerY = store.pointerPosition.current.value?.y ?? 0;\r\n\r\n const isPointerInActiveContainer =\r\n containerRect &&\r\n pointerX >= containerRect.x &&\r\n pointerX <= containerRect.x + containerRect.width &&\r\n pointerY >= containerRect.y &&\r\n pointerY <= containerRect.y + containerRect.height;\r\n\r\n const shouldUseNormalPriority = !isPointerInActiveContainer;\r\n\r\n const activeDragNodes = Array.from(store.draggingElements.value.keys());\r\n\r\n const allCollidingElements = Array.from(store.visibleElements.value.entries())\r\n .filter(([node, _]) => {\r\n if (!node) return false;\r\n\r\n const rect = getBoundingBox(node as HTMLElement);\r\n return rect && containerRect && checkCollision(rect, containerRect);\r\n })\r\n .map(([node, element]) => {\r\n const rect = getBoundingBox(node as HTMLElement);\r\n const elementCenter = getCenter(rect);\r\n\r\n const isPointerInElement =\r\n pointerX >= rect.x &&\r\n pointerX <= rect.x + rect.width &&\r\n pointerY >= rect.y &&\r\n pointerY <= rect.y + rect.height;\r\n\r\n const overlapPercent = getOverlapPercent(rect, containerRect);\r\n const centerDistance = getDistance(containerCenter, elementCenter);\r\n\r\n // Вычисляем глубину вложенности\r\n let depth = 0;\r\n for (const [parentNode, _] of store.visibleElements.value.entries()) {\r\n if (\r\n parentNode !== node &&\r\n parentNode &&\r\n node &&\r\n isDescendant(node as HTMLElement, parentNode as HTMLElement)\r\n ) {\r\n depth++;\r\n }\r\n }\r\n\r\n return {\r\n element,\r\n node: node as HTMLElement,\r\n isPointerInElement,\r\n overlapPercent,\r\n depth,\r\n centerDistance,\r\n };\r\n })\r\n .sort((a, b) => {\r\n if (!shouldUseNormalPriority) {\r\n if (a.isPointerInElement && b.isPointerInElement)\r\n return b.depth - a.depth;\r\n if (a.isPointerInElement !== b.isPointerInElement)\r\n return a.isPointerInElement ? -1 : 1;\r\n }\r\n if (Math.abs(a.overlapPercent - b.overlapPercent) <= 1)\r\n return a.centerDistance - b.centerDistance;\r\n return b.overlapPercent - a.overlapPercent;\r\n });\r\n\r\n const allCollidingZones = Array.from(store.visibleZones.value.entries())\r\n .filter(([node, _]) => {\r\n if (\r\n !node ||\r\n activeDragNodes.some(\r\n (dragNode) =>\r\n dragNode &&\r\n isDescendant(node as HTMLElement, dragNode as HTMLElement)\r\n )\r\n )\r\n return false;\r\n\r\n const rect = getBoundingBox(node as HTMLElement);\r\n return rect && containerRect && checkCollision(rect, containerRect);\r\n })\r\n .map(([node, zone]) => {\r\n const rect = getBoundingBox(node as HTMLElement);\r\n const zoneCenter = getCenter(rect);\r\n\r\n const isPointerInElement =\r\n pointerX >= rect.x &&\r\n pointerX <= rect.x + rect.width &&\r\n pointerY >= rect.y &&\r\n pointerY <= rect.y + rect.height;\r\n\r\n const overlapPercent = getOverlapPercent(rect, containerRect);\r\n const centerDistance = getDistance(containerCenter, zoneCenter);\r\n\r\n // Вычисляем глубину вложенности\r\n let depth = 0;\r\n for (const [parentNode, _] of store.visibleZones.value.entries()) {\r\n if (\r\n parentNode !== node &&\r\n parentNode &&\r\n node &&\r\n isDescendant(node as HTMLElement, parentNode as HTMLElement)\r\n ) {\r\n depth++;\r\n }\r\n }\r\n\r\n return {\r\n zone,\r\n node: node as HTMLElement,\r\n isPointerInElement,\r\n overlapPercent,\r\n depth,\r\n centerDistance,\r\n };\r\n })\r\n .sort((a, b) => {\r\n if (!shouldUseNormalPriority) {\r\n if (a.isPointerInElement && b.isPointerInElement)\r\n return b.depth - a.depth;\r\n if (a.isPointerInElement !== b.isPointerInElement)\r\n return a.isPointerInElement ? -1 : 1;\r\n }\r\n if (Math.abs(a.overlapPercent - b.overlapPercent) <= 1)\r\n return a.centerDistance - b.centerDistance;\r\n return b.overlapPercent - a.overlapPercent;\r\n });\r\n\r\n return [\r\n ...allCollidingElements.map((item) => item.node),\r\n ...allCollidingZones.map((item) => item.node),\r\n ];\r\n};\r\n","import type { Ref } from 'vue';\r\nimport { getBoundingBox } from '../utils/geometry';\r\nimport { preventEvent } from '../utils/events';\r\nimport { useDnDStore } from './useDnDStore';\r\n\r\nexport interface IKeyboardOptions {\r\n moveStep?: number;\r\n}\r\n\r\nexport const useKeyboard = (\r\n elementRef: Ref<HTMLElement | null>,\r\n options?: IKeyboardOptions\r\n) => {\r\n const { pointerPosition, keyboard } = useDnDStore();\r\n const moveStep = options?.moveStep || 10;\r\n\r\n const onKeyboardStart = (event: KeyboardEvent) => {\r\n preventEvent(event);\r\n\r\n const rect = getBoundingBox(elementRef.value);\r\n\r\n elementRef.value?.blur();\r\n\r\n const centerX = rect.x + rect.width / 2;\r\n const centerY = rect.y + rect.height / 2;\r\n\r\n pointerPosition.start.value = {\r\n x: centerX,\r\n y: centerY,\r\n };\r\n\r\n pointerPosition.current.value = {\r\n x: centerX,\r\n y: centerY,\r\n };\r\n\r\n pointerPosition.offset.pixel.value = {\r\n x: rect.width / 2,\r\n y: rect.height / 2,\r\n };\r\n\r\n pointerPosition.offset.percent.value = {\r\n x: 50,\r\n y: 50,\r\n };\r\n };\r\n\r\n const onKeyboardMove = () => {\r\n if (!pointerPosition.current.value) return;\r\n\r\n const currentX = pointerPosition.current.value.x;\r\n const currentY = pointerPosition.current.value.y;\r\n\r\n let newX = currentX;\r\n let newY = currentY;\r\n\r\n if (keyboard.w.value) newY -= moveStep;\r\n if (keyboard.s.value) newY += moveStep;\r\n if (keyboard.a.value) newX -= moveStep;\r\n if (keyboard.d.value) newX += moveStep;\r\n\r\n pointerPosition.current.value = {\r\n x: newX,\r\n y: newY,\r\n };\r\n };\r\n\r\n const onKeyboardEnd = () => {\r\n pointerPosition.current.value = null;\r\n pointerPosition.start.value = null;\r\n pointerPosition.offset.pixel.value = null;\r\n pointerPosition.offset.percent.value = null;\r\n };\r\n\r\n return {\r\n onKeyboardStart,\r\n onKeyboardMove,\r\n onKeyboardEnd,\r\n };\r\n};\r\n","import type { Ref } from 'vue';\r\nimport { getOffset } from '../utils/geometry';\r\nimport { useDnDStore } from './useDnDStore';\r\n\r\nexport const usePointer = (elementRef: Ref<HTMLElement | null>) => {\r\n const store = useDnDStore();\r\n\r\n const onPointerStart = (event: PointerEvent) => {\r\n store.pointerPosition.start.value = { x: event.clientX, y: event.clientY };\r\n store.pointerPosition.current.value = {\r\n x: event.clientX,\r\n y: event.clientY,\r\n };\r\n\r\n const { pixel, percent } = getOffset(elementRef.value, {\r\n x: event.clientX,\r\n y: event.clientY,\r\n });\r\n\r\n store.pointerPosition.offset.pixel.value = pixel;\r\n store.pointerPosition.offset.percent.value = percent;\r\n };\r\n\r\n const onPointerMove = (event: PointerEvent | WheelEvent) => {\r\n store.pointerPosition.current.value = {\r\n x: event.clientX,\r\n y: event.clientY,\r\n };\r\n };\r\n\r\n const onPointerEnd = () => {\r\n store.pointerPosition.current.value = null;\r\n store.pointerPosition.start.value = null;\r\n store.pointerPosition.offset.pixel.value = null;\r\n store.pointerPosition.offset.percent.value = null;\r\n };\r\n\r\n return {\r\n onPointerStart,\r\n onPointerMove,\r\n onPointerEnd,\r\n };\r\n};\r\n","import type {\r\n ICollisionDetectionResult,\r\n IDraggingElement,\r\n IUseDragOptions,\r\n} from '../types';\r\n\r\nimport type { Ref } from 'vue';\r\nimport { defaultCollisionDetection } from '../utils/sensor';\r\nimport { isDescendant } from '../utils/dom';\r\nimport { useDnDStore } from './useDnDStore';\r\nimport { useKeyboard } from './useKeyboard';\r\nimport { usePointer } from './usePointer';\r\nimport { useThrottleFn } from '@vueuse/core';\r\n\r\nexport const useSensor = (\r\n elementRef: Ref<HTMLElement | null>,\r\n options?: IUseDragOptions\r\n) => {\r\n const store = useDnDStore();\r\n\r\n const { onPointerStart, onPointerMove, onPointerEnd } =\r\n usePointer(elementRef);\r\n\r\n const { onKeyboardStart, onKeyboardMove, onKeyboardEnd } = useKeyboard(\r\n elementRef,\r\n options?.keyboard\r\n );\r\n\r\n let animationFrameId: number | null = null;\r\n\r\n const getDraggingElements = (\r\n draggableElement: HTMLElement | null\r\n ): Map<HTMLElement | Element, IDraggingElement> => {\r\n if (!draggableElement) return new Map();\r\n\r\n const isDraggableInSelection =\r\n store.selectedElements.value.has(draggableElement);\r\n\r\n if (store.selectedElements.value.size > 0 && isDraggableInSelection) {\r\n const result = new Map<HTMLElement | Element, IDraggingElement>();\r\n\r\n store.selectedElements.value.forEach((node) => {\r\n const element = store.elementsMap.value.get(node);\r\n if (!element) return;\r\n\r\n result.set(node, {\r\n ...element,\r\n initialHTML: element.node?.outerHTML ?? '',\r\n initialRect: element.node?.getBoundingClientRect(),\r\n });\r\n });\r\n\r\n return result;\r\n }\r\n\r\n store.selectedElements.value.clear();\r\n\r\n const element = store.elementsMap.value.get(draggableElement);\r\n if (!element) return new Map();\r\n\r\n const result = new Map<HTMLElement | Element, IDraggingElement>();\r\n result.set(draggableElement, {\r\n ...element,\r\n initialHTML: element.node?.outerHTML ?? '',\r\n initialRect: element.node?.getBoundingClientRect(),\r\n });\r\n\r\n return result;\r\n };\r\n\r\n const processUserCollisionResults = (\r\n htmlElements: HTMLElement | HTMLElement[] | Element | Element[] | null\r\n ) => {\r\n if (!htmlElements) {\r\n return { element: null, zone: null };\r\n }\r\n\r\n const elements = Array.isArray(htmlElements)\r\n ? htmlElements\r\n : [htmlElements];\r\n\r\n const activeDragNodes = Array.from(store.draggingElements.value.keys());\r\n\r\n const filteredZoneElement = elements.find((htmlElement) => {\r\n if (!store.visibleZones.value.has(htmlElement)) return false;\r\n\r\n const zone = store.zonesMap.value.get(htmlElement);\r\n if (!zone) return false;\r\n\r\n if (\r\n activeDragNodes.some(\r\n (dragNode) =>\r\n dragNode &&\r\n (dragNode === zone.node ||\r\n isDescendant(zone.node as HTMLElement, dragNode as HTMLElement))\r\n )\r\n )\r\n return false;\r\n\r\n if (zone.groups.length) {\r\n const isCompatible = !Array.from(\r\n store.draggingElements.value.values()\r\n ).some((element) => {\r\n if (!element.groups.length) return false;\r\n return !element.groups.some((group) => zone.groups.includes(group));\r\n });\r\n if (!isCompatible) return false;\r\n }\r\n\r\n return true;\r\n });\r\n\r\n if (!filteredZoneElement) {\r\n return { element: null, zone: null };\r\n }\r\n\r\n const possibleElement = elements.find(\r\n (htmlElement) =>\r\n store.visibleElements.value.has(htmlElement) &&\r\n store.elementsMap.value.has(htmlElement) &&\r\n !activeDragNodes.some(\r\n (dragNode) =>\r\n dragNode &&\r\n (dragNode === htmlElement ||\r\n isDescendant(\r\n htmlElement as HTMLElement,\r\n dragNode as HTMLElement\r\n ) ||\r\n isDescendant(dragNode as HTMLElement, htmlElement as HTMLElement))\r\n ) &&\r\n (htmlElement === filteredZoneElement ||\r\n isDescendant(\r\n htmlElement as HTMLElement,\r\n filteredZoneElement as HTMLElement\r\n ))\r\n );\r\n\r\n return {\r\n element: possibleElement || null,\r\n zone: filteredZoneElement,\r\n };\r\n };\r\n\r\n const detectCollisions = options?.sensor?.setup || defaultCollisionDetection;\r\n\r\n const processCollisionResults = (results: ICollisionDetectionResult) => {\r\n const previousElement = store.hovered.element.value;\r\n const previousZone = store.hovered.zone.value;\r\n\r\n store.hovered.element.value = results.element;\r\n store.hovered.zone.value = results.zone;\r\n\r\n if (previousElement) {\r\n if (store.hovered.element.value !== previousElement) {\r\n store.elementsMap.value.get(previousElement)?.events?.onLeave?.(store);\r\n\r\n if (store.hovered.element.value)\r\n store.elementsMap.value\r\n .get(store.hovered.element.value)\r\n ?.events?.onHover?.(store);\r\n }\r\n }\r\n\r\n if (previousZone) {\r\n if (store.hovered.zone.value !== previousZone) {\r\n store.zonesMap.value.get(previousZone)?.events?.onLeave?.(store);\r\n\r\n if (store.hovered.zone.value)\r\n store.zonesMap.value\r\n .get(store.hovered.zone.value)\r\n ?.events?.onHover?.(store);\r\n }\r\n }\r\n };\r\n\r\n const throttledDetectAndProcess = useThrottleFn(() => {\r\n const htmlElements = detectCollisions(store);\r\n const processedResults = processUserCollisionResults(htmlElements);\r\n processCollisionResults(processedResults);\r\n }, options?.sensor?.throttle ?? 0);\r\n\r\n const animationLoop = () => {\r\n throttledDetectAndProcess();\r\n\r\n animationFrameId = requestAnimationFrame(animationLoop);\r\n };\r\n\r\n const startDetection = () => animationLoop();\r\n\r\n const stopDetection = () => {\r\n if (animationFrameId !== null) {\r\n cancelAnimationFrame(animationFrameId);\r\n animationFrameId = null;\r\n }\r\n };\r\n\r\n const activate = (event: PointerEvent | KeyboardEvent) => {\r\n store.draggingElements.value = getDraggingElements(elementRef.value);\r\n store.draggingElements.value.forEach((element) =>\r\n element.events.onStart?.(store)\r\n );\r\n\r\n if (event instanceof PointerEvent) {\r\n onPointerStart(event);\r\n } else {\r\n onKeyboardStart(event);\r\n }\r\n\r\n startDetection();\r\n };\r\n\r\n const track = (event: PointerEvent | WheelEvent | KeyboardEvent) => {\r\n store.draggingElements.value.forEach((element) =>\r\n element.events.onMove?.(store)\r\n );\r\n\r\n if (event instanceof KeyboardEvent) {\r\n onKeyboardMove();\r\n } else {\r\n onPointerMove(event);\r\n }\r\n };\r\n\r\n const deactivate = (triggerEvents = true) => {\r\n onPointerEnd();\r\n onKeyboardEnd();\r\n\r\n if (triggerEvents) {\r\n if (store.hovered.zone.value) {\r\n const zone = store.zonesMap.value.get(store.hovered.zone.value);\r\n zone?.events.onDrop?.(store);\r\n } else {\r\n store.draggingElements.value.forEach((element) =>\r\n element.events.onEnd?.(store)\r\n );\r\n }\r\n\r\n store.selectedElements.value.clear();\r\n }\r\n\r\n store.draggingElements.value.clear();\r\n\r\n store.hovered.zone.value = null;\r\n store.hovered.element.value = null;\r\n\r\n stopDetection();\r\n };\r\n\r\n return {\r\n activate,\r\n track,\r\n deactivate,\r\n };\r\n};\r\n","import { Ref, markRaw } from 'vue';\r\n\r\nimport type { IUseDragOptions } from '../types';\r\nimport { createGlobalState } from '@vueuse/core';\r\nimport { preventEvent } from '../utils/events';\r\nimport { useDnDStore } from '../composables/useDnDStore';\r\nimport { useSensor } from '../composables/useSensor';\r\n\r\nenum EKeyboardKey {\r\n ESCAPE = 'Escape',\r\n SPACE = 'Space',\r\n ENTER = 'Enter',\r\n W = 'KeyW',\r\n A = 'KeyA',\r\n S = 'KeyS',\r\n D = 'KeyD',\r\n CONTROL = 'ControlLeft',\r\n ALT = 'AltLeft',\r\n SHIFT = 'ShiftLeft',\r\n META = 'MetaLeft',\r\n}\r\n\r\nexport const useEventManager = createGlobalState(() => {\r\n let originalUserSelect = '';\r\n let originalTouchAction = '';\r\n let originalOverscrollBehavior = '';\r\n\r\n let currentMoveHandler: ((event: any) => void) | null = null;\r\n let currentEndHandler: (() => void) | null = null;\r\n let currentCancelHandler: (() => void) | null = null;\r\n let currentScrollHandler: ((event: WheelEvent) => void) | null = null;\r\n let currentKeyHandler: ((event: KeyboardEvent) => void) | null = null;\r\n\r\n const { activeContainer } = useDnDStore();\r\n\r\n const disableInteractions = () => {\r\n const body = document.body;\r\n\r\n originalUserSelect = body.style.userSelect;\r\n\r\n body.style.userSelect = 'none';\r\n\r\n window.addEventListener('contextmenu', preventEvent);\r\n window.addEventListener('selectstart', preventEvent);\r\n window.addEventListener('touchstart', preventEvent);\r\n window.addEventListener('touchmove', preventEvent);\r\n };\r\n\r\n const enableInteractions = () => {\r\n const body = document.body;\r\n\r\n body.style.userSelect = originalUserSelect;\r\n body.style.touchAction = originalTouchAction;\r\n body.style.overscrollBehavior = originalOverscrollBehavior;\r\n\r\n window.removeEventListener('contextmenu', preventEvent);\r\n window.removeEventListener('selectstart', preventEvent);\r\n window.removeEventListener('touchstart', preventEvent);\r\n window.removeEventListener('touchmove', preventEvent);\r\n };\r\n\r\n const clearAllListeners = () => {\r\n if (currentMoveHandler) {\r\n document.removeEventListener('pointermove', currentMoveHandler);\r\n currentMoveHandler = null;\r\n }\r\n\r\n if (currentEndHandler) {\r\n document.removeEventListener('pointerup', currentEndHandler);\r\n currentEndHandler = null;\r\n }\r\n\r\n if (currentCancelHandler) {\r\n currentCancelHandler = null;\r\n }\r\n\r\n if (currentScrollHandler) {\r\n document.removeEventListener('wheel', currentScrollHandler);\r\n currentScrollHandler = null;\r\n }\r\n\r\n if (currentKeyHandler) {\r\n document.removeEventListener('keydown', currentKeyHandler);\r\n document.removeEventListener('keypress', currentKeyHandler);\r\n document.removeEventListener('keyup', currentKeyHandler);\r\n currentKeyHandler = null;\r\n }\r\n };\r\n\r\n const handleDragStart = (\r\n event: PointerEvent | KeyboardEvent,\r\n elementRef: Ref<HTMLElement | null>,\r\n options?: IUseDragOptions\r\n ) => {\r\n clearAllListeners();\r\n\r\n (event.target as HTMLElement).blur();\r\n\r\n if (options?.container)\r\n activeContainer.component.value = markRaw(options.container);\r\n\r\n const { activate, track, deactivate } = useSensor(elementRef, options);\r\n\r\n currentEndHandler = () => {\r\n activeContainer.component.value = null;\r\n enableInteractions();\r\n deactivate(true);\r\n clearAllListeners();\r\n };\r\n\r\n currentCancelHandler = () => {\r\n activeContainer.component.value = null;\r\n enableInteractions();\r\n deactivate(false);\r\n clearAllListeners();\r\n };\r\n\r\n currentMoveHandler = (event: PointerEvent | KeyboardEvent) => track(event);\r\n currentScrollHandler = (event: WheelEvent) => track(event);\r\n currentKeyHandler = (event: KeyboardEvent) => {\r\n if (event.type === 'keyup') {\r\n if (event.code === EKeyboardKey.ESCAPE) currentCancelHandler?.();\r\n if (event.code === EKeyboardKey.ENTER) currentEndHandler?.();\r\n }\r\n\r\n track(event);\r\n };\r\n\r\n disableInteractions();\r\n activate(event);\r\n\r\n document.addEventListener('pointermove', currentMoveHandler);\r\n document.addEventListener('pointerup', currentEndHandler);\r\n document.addEventListener('wheel', currentScrollHandler);\r\n document.addEventListener('keydown', currentKeyHandler);\r\n document.addEventListener('keypress', currentKeyHandler);\r\n document.addEventListener('keyup', currentKeyHandler);\r\n };\r\n\r\n return {\r\n handleDragStart,\r\n };\r\n});\r\n","import { onBeforeUnmount, onMounted } from 'vue';\r\n\r\nimport type { IUseDragOptions } from '../types';\r\nimport { useDnDStore } from './useDnDStore';\r\nimport { useElementManager } from '../managers/useElementManager';\r\nimport { useEventManager } from '../managers/useEventManager';\r\n\r\nexport const useDraggable = (options?: IUseDragOptions) => {\r\n const {\r\n id,\r\n elementRef,\r\n isDragging,\r\n isOvered,\r\n isAllowed,\r\n registerElement,\r\n unregisterElement,\r\n } = useElementManager(options);\r\n\r\n const { pointerPosition } = useDnDStore();\r\n const { handleDragStart: start } = useEventManager();\r\n\r\n const handleDragStart = (event: PointerEvent | KeyboardEvent) =>\r\n start(event, elementRef, options);\r\n\r\n onMounted(registerElement);\r\n onBeforeUnmount(unregisterElement);\r\n\r\n return {\r\n pointerPosition,\r\n elementRef,\r\n isDragging,\r\n isOvered,\r\n isAllowed,\r\n handleDragStart,\r\n id,\r\n };\r\n};\r\n","import { computed, ref } from 'vue';\r\n\r\nimport type { IUseDropOptions } from '../types';\r\nimport { useDnDStore } from '../composables/useDnDStore';\r\n\r\nexport const useZoneManager = (options?: IUseDropOptions) => {\r\n const {\r\n zonesMap,\r\n hovered,\r\n draggingElements,\r\n isDragging,\r\n handleDropZoneIntersection,\r\n } = useDnDStore();\r\n\r\n const elementRef = ref<HTMLElement | null>(null);\r\n\r\n const isOvered = computed<boolean>(() => {\r\n return hovered.zone.value === elementRef.value;\r\n });\r\n\r\n const isAllowed = computed<boolean>(() => {\r\n if (!elementRef.value || !isDragging.value) return false;\r\n\r\n const currentZone = zonesMap.value.get(elementRef.value);\r\n if (!currentZone?.groups.length) return true;\r\n\r\n return !Array.from(draggingElements.value.values()).some((element) => {\r\n if (!element.groups.length) return false;\r\n return !element.groups.some((group) =>\r\n currentZone.groups.includes(group)\r\n );\r\n });\r\n });\r\n\r\n const registerZone = () => {\r\n if (!elementRef.value) throw new Error('elementRef is not set');\r\n\r\n handleDropZoneIntersection('add', elementRef.value);\r\n\r\n zonesMap.value.set(elementRef.value, {\r\n node: elementRef.value,\r\n groups: options?.groups ?? [],\r\n events: options?.events ?? {},\r\n data: options?.data ?? undefined,\r\n });\r\n\r\n elementRef.value.setAttribute('data-dnd-droppable', 'true');\r\n };\r\n\r\n const unregisterZone = () => {\r\n if (!elementRef.value) return;\r\n\r\n handleDropZoneIntersection('remove', elementRef.value);\r\n\r\n zonesMap.value.delete(elementRef.value);\r\n };\r\n\r\n return { elementRef, registerZone, unregisterZone, isOvered, isAllowed };\r\n};\r\n","import { onBeforeUnmount, onMounted } from 'vue';\r\n\r\nimport type { IUseDropOptions } from '../types';\r\nimport { useZoneManager } from '../managers/useZoneManager';\r\n\r\nexport const useDroppable = (options?: IUseDropOptions) => {\r\n const { elementRef, registerZone, unregisterZone, isOvered, isAllowed } =\r\n useZoneManager(options);\r\n\r\n // Register/unregister drop zone with store\r\n onMounted(registerZone);\r\n onBeforeUnmount(unregisterZone);\r\n\r\n return { elementRef, isOvered, isAllowed };\r\n};\r\n","import { computed, type Ref } from 'vue';\r\nimport { useDnDStore } from './useDnDStore';\r\nimport { isDescendant } from '../utils/dom';\r\n\r\nexport const useSelection = (elementRef: Ref<HTMLElement | null>) => {\r\n const { selectedElements, elementsMap } = useDnDStore();\r\n\r\n const isSelected = computed<boolean>(() =>\r\n elementRef.value ? selectedElements.value.has(elementRef.value) : false\r\n );\r\n\r\n const isParentOfSelected = computed(() => {\r\n if (!elementRef.value) return false;\r\n\r\n for (const node of selectedElements.value) {\r\n if (\r\n node &&\r\n isDescendant(node as HTMLElement, elementRef.value as HTMLElement)\r\n ) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n\r\n const hasSelectedParent = computed(() => {\r\n if (!elementRef.value) return false;\r\n\r\n for (const node of selectedElements.value) {\r\n if (\r\n node &&\r\n isDescendant(elementRef.value as HTMLElement, node as HTMLElement)\r\n ) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n\r\n const handleUnselect = () => {\r\n if (!elementRef.value) return;\r\n selectedElements.value.delete(elementRef.value);\r\n };\r\n\r\n const handleSelect = () => {\r\n if (!elementRef.value) return;\r\n const element = elementsMap.value.get(elementRef.value);\r\n if (!element) return;\r\n\r\n if (isParentOfSelected.value) {\r\n // Удаляем все дочерние выбранные элементы\r\n for (const node of selectedElements.value) {\r\n if (\r\n node &&\r\n isDescendant(node as HTMLElement, elementRef.value as HTMLElement)\r\n ) {\r\n selectedElements.value.delete(node);\r\n }\r\n }\r\n }\r\n\r\n if (hasSelectedParent.value) {\r\n // Удаляем все родительские выбранные элементы\r\n for (const node of selectedElements.value) {\r\n if (\r\n node &&\r\n isDescendant(elementRef.value as HTMLElement, node as HTMLElement)\r\n ) {\r\n selectedElements.value.delete(node);\r\n }\r\n }\r\n }\r\n\r\n selectedElements.value.add(elementRef.value);\r\n };\r\n\r\n const handleToggleSelect = () => {\r\n if (!elementRef.value) return;\r\n\r\n selectedElements.value.has(elementRef.value)\r\n ? handleUnselect()\r\n : handleSelect();\r\n };\r\n\r\n return {\r\n handleUnselect,\r\n handleSelect,\r\n handleToggleSelect,\r\n isSelected,\r\n isParentOfSelected,\r\n };\r\n};\r\n"],"names":["_DnDOperations","__publicField","source","index","item","target","sourceIndex","targetIndex","sourceItem","targetItem","store","hoveredElement","hoveredZone","targetSource","_b","_a","_d","_c","firstElement","firstIndex","_e","sortDirection","a","b","element","_g","_f","_h","items","DnDOperations","useDnDStore","createGlobalState","draggingElements","ref","isDragging","computed","activeContainer","shallowRef","elementsMap","selectedElements","zonesMap","visibleZones","visibleElements","elementObserver","entries","entry","zoneObserver","handleDragElementIntersection","action","handleDropZoneIntersection","pointerPosition","w","s","d","ctrl","shift","alt","meta","useMagicKeys","hovered","useDragContainer","options","elementRef","onMounted","onUnmounted","computedStyle","overlay","DefaultOverlay","VueDndKitPlugin","app","DragOverlay","originalMount","rootContainer","instance","rootEl","overlayContainer","vnode","createVNode","render","originalUnmount","checkCollision","boxA","boxB","getBoundingBox","rect","getCenter","box","getOffset","pointer","getDistance","pointA","pointB","dx","dy","getOverlapPercent","xOverlap","yOverlap","overlapArea","boxAArea","boxBArea","draggableDataName","preventEvent","event","useElementManager","isDragStarted","isOvered","id","useId","isAllowed","currentElement","_","draggingElement","group","isDescendant","container","defaultCollisionDetection","containerRect","containerCenter","pointerX","pointerY","shouldUseNormalPriority","activeDragNodes","allCollidingElements","node","elementCenter","isPointerInElement","overlapPercent","centerDistance","depth","parentNode","allCollidingZones","dragNode","zone","zoneCenter","useKeyboard","keyboard","moveStep","centerX","centerY","currentX","currentY","newX","newY","usePointer","pixel","percent","useSensor","onPointerStart","onPointerMove","onPointerEnd","onKeyboardStart","onKeyboardMove","onKeyboardEnd","animationFrameId","getDraggingElements","draggableElement","isDraggableInSelection","result","processUserCollisionResults","htmlElements","elements","filteredZoneElement","htmlElement","detectCollisions","processCollisionResults","results","previousElement","previousZone","_i","_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","onBeforeUnmount","useZoneManager","currentZone","useDroppable","registerZone","unregisterZone","useSelection","isSelected","isParentOfSelected","hasSelectedParent","handleUnselect","handleSelect"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vue-dnd-kit/core",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "Core functionality for Vue DnD Kit - a lightweight Vue 3 library for building performant and accessible drag and drop interfaces",
5
5
  "author": "ZiZIGY",
6
6
  "license": "MIT",