@vue-dnd-kit/core 1.1.1 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,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 C=(n,e,t)=>te(n,typeof e!="symbol"?e+"":e,t);Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const c=require("vue"),H=require("@vueuse/core"),y=class y{};C(y,"remove",(e,t)=>{if(!e||t===void 0)return;const[r]=e.splice(t,1);return r}),C(y,"insert",(e,t,r)=>{!e||t===void 0||e.splice(t,0,r)}),C(y,"move",(e,t,r,a)=>{if(!e||!r||t===void 0||a===void 0)return;const s=y.remove(e,t);y.insert(r,a,s)}),C(y,"swap",(e,t,r,a)=>{if(!e||!r||t===void 0||a===void 0)return;const s=e[t],l=r[a];e[t]=l,r[a]=s}),C(y,"copy",(e,t,r,a)=>{if(!e||t===void 0||!r||a===void 0)return;const s=e[t];y.insert(r,a,s)}),C(y,"applyTransfer",e=>{const t=e.hovered.element.value,r=e.hovered.zone.value;t?e.draggingElements.value.forEach(a=>{var s,l,v,o,u,i;return y.move((s=a.data)==null?void 0:s.source,(l=a.data)==null?void 0:l.index,(o=(v=e.elementsMap.value.get(t))==null?void 0:v.data)==null?void 0:o.source,(i=(u=e.elementsMap.value.get(t))==null?void 0:u.data)==null?void 0:i.index)}):r&&e.draggingElements.value.forEach(a=>{var s,l,v,o,u,i,f;return y.move((s=a.data)==null?void 0:s.source,(l=a.data)==null?void 0:l.index,(o=(v=e.zonesMap.value.get(r))==null?void 0:v.data)==null?void 0:o.source,(f=(i=(u=e.zonesMap.value.get(r))==null?void 0:u.data)==null?void 0:i.source)==null?void 0:f.length)})}),C(y,"applyCopy",e=>{const t=e.hovered.element.value,r=e.hovered.zone.value;t?e.draggingElements.value.forEach(a=>{var s,l,v,o,u,i;return y.copy((s=a.data)==null?void 0:s.source,(l=a.data)==null?void 0:l.index,(o=(v=e.elementsMap.value.get(t))==null?void 0:v.data)==null?void 0:o.source,(i=(u=e.elementsMap.value.get(t))==null?void 0:u.data)==null?void 0:i.index)}):r&&e.draggingElements.value.forEach(a=>{var s,l,v,o,u,i,f;return y.copy((s=a.data)==null?void 0:s.source,(l=a.data)==null?void 0:l.index,(o=(v=e.zonesMap.value.get(r))==null?void 0:v.data)==null?void 0:o.source,(f=(i=(u=e.zonesMap.value.get(r))==null?void 0:u.data)==null?void 0:i.source)==null?void 0:f.length)})}),C(y,"applySwap",e=>{var a,s,l,v,o,u;const t=e.hovered.element.value,r=e.hovered.zone.value;if(t&&e.draggingElements.value.size===1){const i=e.draggingElements.value.values().next().value;y.swap((a=i==null?void 0:i.data)==null?void 0:a.source,(s=i==null?void 0:i.data)==null?void 0:s.index,(v=(l=e.elementsMap.value.get(t))==null?void 0:l.data)==null?void 0:v.source,(u=(o=e.elementsMap.value.get(t))==null?void 0:o.data)==null?void 0:u.index)}else r&&e.draggingElements.value.forEach(i=>{var f,d,g,h,p,L,P;return y.move((f=i.data)==null?void 0:f.source,(d=i.data)==null?void 0:d.index,(h=(g=e.zonesMap.value.get(r))==null?void 0:g.data)==null?void 0:h.source,(P=(L=(p=e.zonesMap.value.get(r))==null?void 0:p.data)==null?void 0:L.source)==null?void 0:P.length)})}),C(y,"applyRemove",e=>{e.draggingElements.value.forEach(t=>{var r,a;(r=t.data)!=null&&r.source&&((a=t.data)==null?void 0:a.index)!==void 0&&y.remove(t.data.source,t.data.index)})}),C(y,"applyInsert",(e,t)=>{const r=e.hovered.element.value,a=e.hovered.zone.value;r&&t.length>0?t.forEach(s=>{var l,v,o,u;y.insert((v=(l=e.elementsMap.value.get(r))==null?void 0:l.data)==null?void 0:v.source,(u=(o=e.elementsMap.value.get(r))==null?void 0:o.data)==null?void 0:u.index,s)}):a&&t.forEach(s=>{var l,v,o,u,i;y.insert((v=(l=e.zonesMap.value.get(a))==null?void 0:l.data)==null?void 0:v.source,(i=(u=(o=e.zonesMap.value.get(a))==null?void 0:o.data)==null?void 0:u.source)==null?void 0:i.length,s)})});let X=y;const A=H.createGlobalState(()=>{const n=c.ref(new Map),e=c.computed(()=>n.value.size>0),t={component:c.ref(null),ref:c.shallowRef(null)},r=c.ref(new Map),a=c.ref(new Map),s=c.ref(new Map),l=c.ref(new Set),v=c.ref(new Set),o=new IntersectionObserver(K=>{K.forEach(m=>v.value[m.isIntersecting?"add":"delete"](m.target))}),u=new IntersectionObserver(K=>{K.forEach(m=>l.value[m.isIntersecting?"add":"delete"](m.target))}),i=(K,m)=>{K==="add"?o.observe(m):(o.unobserve(m),v.value.delete(m))},f=(K,m)=>{K==="add"?u.observe(m):(u.unobserve(m),l.value.delete(m))};c.onUnmounted(()=>{o.disconnect(),u.disconnect()});const d={start:c.shallowRef(null),current:c.shallowRef(null),offset:{percent:c.shallowRef(null),pixel:c.shallowRef(null)}},{w:g,s:h,a:p,d:L,ctrl:P,shift:_,alt:x,meta:Z}=H.useMagicKeys(),Y={zone:c.shallowRef(null),element:c.shallowRef(null)};return{draggingElements:n,isDragging:e,activeContainer:t,elementsMap:r,selectedElementsMap:a,zonesMap:s,visibleZones:l,visibleElements:v,pointerPosition:d,keyboard:{w:g,s:h,a:p,d:L,ctrl:P,shift:_,alt:x,meta:Z},hovered:Y,handleDragElementIntersection:i,handleDropZoneIntersection:f}}),W=()=>{const n=c.ref(null),{draggingElements:e,pointerPosition:t,isDragging:r,activeContainer:a}=A();return c.onMounted(()=>{a.ref=n}),c.onBeforeUnmount(()=>{a.ref.value=null}),{elementRef:n,draggingElements:e,pointerPosition:t,isDragging:r}},ne=["innerHTML"],re=c.defineComponent({__name:"DefaultOverlay",setup(n){const{elementRef:e,pointerPosition:t,isDragging:r,draggingElements:a}=W(),s=c.computed(()=>{var l,v,o,u;return{transform:`translate3d(${(((l=t.current.value)==null?void 0:l.x)??0)-(((v=t.offset.pixel.value)==null?void 0:v.x)??0)}px, ${(((o=t.current.value)==null?void 0:o.y)??0)-(((u=t.offset.pixel.value)==null?void 0:u.y)??0)}px, 0)`,zIndex:1e3,position:"fixed",top:0,left:0,transition:"0.3s cubic-bezier(0.165, 0.84, 0.44, 1)"}});return(l,v)=>c.unref(r)?(c.openBlock(),c.createElementBlock("div",{key:0,ref_key:"elementRef",ref:e,style:c.normalizeStyle(s.value)},[(c.openBlock(!0),c.createElementBlock(c.Fragment,null,c.renderList(c.unref(a),([o,u])=>{var i,f;return c.openBlock(),c.createElementBlock("div",{key:u.id,innerHTML:u.initialHTML,style:c.normalizeStyle({width:`${(i=u.initialRect)==null?void 0:i.width}px`,height:`${(f=u.initialRect)==null?void 0:f.height}px`})},null,12,ne)}),128))],4)):c.createCommentVNode("",!0)}}),$=c.defineComponent({__name:"DragOverlay",setup(n){const{activeContainer:e}=A(),t=c.computed(()=>e.component.value??re);return(r,a)=>(c.openBlock(),c.createBlock(c.resolveDynamicComponent(t.value)))}}),ae={install(n){n.component("DragOverlay",$);const e=n.mount;n.mount=function(r){const a=e.call(this,r),s=typeof r=="string"?document.querySelector(r):r;if(s&&s instanceof Element&&!s.querySelector("#vue-dnd-kit-overlay")){const l=document.createElement("div");l.id="vue-dnd-kit-overlay",l.style.pointerEvents="none",s.appendChild(l);const v=c.createVNode($);c.render(v,l),n.__VUE_DND_KIT_OVERLAY__={container:l,vnode:v}}return a};const t=n.unmount;n.unmount=function(){return n.__VUE_DND_KIT_OVERLAY__&&(c.render(null,n.__VUE_DND_KIT_OVERLAY__.container),delete n.__VUE_DND_KIT_OVERLAY__),t.call(this)}}},G=(n,e)=>n.x<e.x+e.width&&n.x+n.width>e.x&&n.y<e.y+e.height&&n.y+n.height>e.y,T=n=>{if(!n)return{x:0,y:0,width:0,height:0,bottom:0,left:0,right:0,top:0};const e=n.getBoundingClientRect();return{bottom:e.bottom,left:e.left,right:e.right,top:e.top,x:e.x,y:e.y,width:e.width,height:e.height}},B=n=>({x:n.x+n.width/2,y:n.y+n.height/2}),le=(n,e)=>{const t=T(n);return{pixel:{x:e.x-t.x,y:e.y-t.y},percent:{x:(e.x-t.x)/t.width*100,y:(e.y-t.y)/t.height*100}}},j=(n,e)=>{const t=e.x-n.x,r=e.y-n.y;return Math.sqrt(t*t+r*r)},J=(n,e)=>{const t=Math.max(0,Math.min(n.x+n.width,e.x+e.width)-Math.max(n.x,e.x)),r=Math.max(0,Math.min(n.y+n.height,e.y+e.height)-Math.max(n.y,e.y)),a=t*r,s=n.width*n.height,l=e.width*e.height;return(a/s*100+a/l*100)/2},Q="data-vue-dnd-kit-draggable",D=n=>{n.preventDefault()},oe=n=>{const{elementsMap:e,draggingElements:t,hovered:r,selectedElementsMap:a,isDragging:s,visibleElements:l,handleDragElementIntersection:v}=A(),o=c.ref(null),u=c.computed(()=>l.value.has(o.value)&&r.element.value===o.value),i=c.shallowRef((n==null?void 0:n.id)||c.useId()),f=c.computed(()=>!o.value||!l.value.has(o.value)?!1:t.value.has(o.value)),d=c.computed(()=>{if(!o.value||!s.value||!l.value.has(o.value))return!1;const p=e.value.get(o.value);return p!=null&&p.groups.length?!Array.from(t.value.entries()).some(([L,P])=>P.groups.length?!P.groups.some(_=>p.groups.includes(_)):!1):!0});return{elementRef:o,registerElement:()=>{if(!o.value)throw new Error("ElementRef is not set");e.value.set(o.value,{node:o.value,groups:(n==null?void 0:n.groups)??[],layer:(n==null?void 0:n.layer)??null,defaultLayer:(n==null?void 0:n.layer)??null,events:(n==null?void 0:n.events)??{},data:(n==null?void 0:n.data)??null,id:i.value}),v("add",o.value),o.value.addEventListener("dragstart",D),o.value.addEventListener("drag",D),o.value.setAttribute(Q,"true"),o.value.setAttribute("draggable","false")},unregisterElement:()=>{o.value&&(e.value.delete(o.value),a.value.delete(o.value),o.value.removeEventListener("dragstart",D),o.value.removeEventListener("drag",D),o.value.removeAttribute(Q),o.value.removeAttribute("draggable"))},isDragging:f,isOvered:u,isAllowed:d,id:i}},I=(n,e)=>n?e.contains(n):!1,se=n=>{var i,f;const e=T(n.activeContainer.ref.value),t=B(e),r=((i=n.pointerPosition.current.value)==null?void 0:i.x)??0,a=((f=n.pointerPosition.current.value)==null?void 0:f.y)??0,l=!(e&&r>=e.x&&r<=e.x+e.width&&a>=e.y&&a<=e.y+e.height),v=Array.from(n.draggingElements.value.keys()),o=Array.from(n.visibleElements.value.entries()).filter(([d,g])=>{if(!d)return!1;const h=T(d);return h&&e&&G(h,e)}).map(([d,g])=>{const h=T(d),p=B(h),L=r>=h.x&&r<=h.x+h.width&&a>=h.y&&a<=h.y+h.height,P=J(h,e),_=j(t,p);let x=0;for(const[Z,Y]of n.visibleElements.value.entries())Z!==d&&Z&&d&&I(d,Z)&&x++;return{element:g,node:d,isPointerInElement:L,overlapPercent:P,depth:x,centerDistance:_}}).sort((d,g)=>{if(!l){if(d.isPointerInElement&&g.isPointerInElement)return g.depth-d.depth;if(d.isPointerInElement!==g.isPointerInElement)return d.isPointerInElement?-1:1}return Math.abs(d.overlapPercent-g.overlapPercent)<=1?d.centerDistance-g.centerDistance:g.overlapPercent-d.overlapPercent}),u=Array.from(n.visibleZones.value.entries()).filter(([d,g])=>{if(!d||v.some(p=>p&&I(d,p)))return!1;const h=T(d);return h&&e&&G(h,e)}).map(([d,g])=>{const h=T(d),p=B(h),L=r>=h.x&&r<=h.x+h.width&&a>=h.y&&a<=h.y+h.height,P=J(h,e),_=j(t,p);let x=0;for(const[Z,Y]of n.visibleZones.value.entries())Z!==d&&Z&&d&&I(d,Z)&&x++;return{zone:g,node:d,isPointerInElement:L,overlapPercent:P,depth:x,centerDistance:_}}).sort((d,g)=>{if(!l){if(d.isPointerInElement&&g.isPointerInElement)return g.depth-d.depth;if(d.isPointerInElement!==g.isPointerInElement)return d.isPointerInElement?-1:1}return Math.abs(d.overlapPercent-g.overlapPercent)<=1?d.centerDistance-g.centerDistance:g.overlapPercent-d.overlapPercent});return[...o.map(d=>d.node),...u.map(d=>d.node)]},ue=(n,e)=>{const{pointerPosition:t,keyboard:r}=A(),a=(e==null?void 0:e.moveStep)||10;return{onKeyboardStart:o=>{var d;D(o);const u=T(n.value);(d=n.value)==null||d.blur();const i=u.x+u.width/2,f=u.y+u.height/2;t.start.value={x:i,y:f},t.current.value={x:i,y:f},t.offset.pixel.value={x:u.width/2,y:u.height/2},t.offset.percent.value={x:50,y:50}},onKeyboardMove:()=>{if(!t.current.value)return;const o=t.current.value.x,u=t.current.value.y;let i=o,f=u;r.w.value&&(f-=a),r.s.value&&(f+=a),r.a.value&&(i-=a),r.d.value&&(i+=a),t.current.value={x:i,y:f}},onKeyboardEnd:()=>{t.current.value=null,t.start.value=null,t.offset.pixel.value=null,t.offset.percent.value=null}}},ie=n=>{const e=A();return{onPointerStart:s=>{e.pointerPosition.start.value={x:s.clientX,y:s.clientY},e.pointerPosition.current.value={x:s.clientX,y:s.clientY};const{pixel:l,percent:v}=le(n.value,{x:s.clientX,y:s.clientY});e.pointerPosition.offset.pixel.value=l,e.pointerPosition.offset.percent.value=v},onPointerMove:s=>{e.pointerPosition.current.value={x:s.clientX,y:s.clientY}},onPointerEnd:()=>{e.pointerPosition.current.value=null,e.pointerPosition.start.value=null,e.pointerPosition.offset.pixel.value=null,e.pointerPosition.offset.percent.value=null}}},ce=(n,e)=>{var Y,K;const t=A(),{onPointerStart:r,onPointerMove:a,onPointerEnd:s}=ie(n),{onKeyboardStart:l,onKeyboardMove:v,onKeyboardEnd:o}=ue(n,e==null?void 0:e.keyboard);let u=null;const i=m=>{var b,w;if(!m)return new Map;const S=t.selectedElementsMap.value.has(m);if(t.selectedElementsMap.value.size>0&&S){const z=new Map;return Array.from(t.selectedElementsMap.value.entries()).forEach(([k,R])=>{var U,O;z.set(k,{...R,initialHTML:((U=R.node)==null?void 0:U.outerHTML)??"",initialRect:(O=R.node)==null?void 0:O.getBoundingClientRect()})}),z}t.selectedElementsMap.value.clear();const M=t.elementsMap.value.get(m);if(!M)return new Map;const E=new Map;return E.set(m,{...M,initialHTML:((b=M.node)==null?void 0:b.outerHTML)??"",initialRect:(w=M.node)==null?void 0:w.getBoundingClientRect()}),E},f=m=>{if(!m)return{element:null,zone:null};const S=Array.isArray(m)?m:[m],M=Array.from(t.draggingElements.value.keys()),E=S.find(w=>{if(!t.visibleZones.value.has(w))return!1;const z=t.zonesMap.value.get(w);return!(!z||M.some(k=>k&&(k===z.node||I(z.node,k)))||z.groups.length&&!!Array.from(t.draggingElements.value.values()).some(R=>R.groups.length?!R.groups.some(U=>z.groups.includes(U)):!1))});return E?{element:S.find(w=>t.visibleElements.value.has(w)&&t.elementsMap.value.has(w)&&!M.some(z=>z&&(z===w||I(w,z)||I(z,w)))&&(w===E||I(w,E)))||null,zone:E}:{element:null,zone:null}},d=((Y=e==null?void 0:e.sensor)==null?void 0:Y.setup)||se,g=m=>{var E,b,w,z,k,R,U,O,q,N,V,F;const S=t.hovered.element.value,M=t.hovered.zone.value;t.hovered.element.value=m.element,t.hovered.zone.value=m.zone,S&&t.hovered.element.value!==S&&((w=(b=(E=t.elementsMap.value.get(S))==null?void 0:E.events)==null?void 0:b.onLeave)==null||w.call(b,t),t.hovered.element.value&&((R=(k=(z=t.elementsMap.value.get(t.hovered.element.value))==null?void 0:z.events)==null?void 0:k.onHover)==null||R.call(k,t))),M&&t.hovered.zone.value!==M&&((q=(O=(U=t.zonesMap.value.get(M))==null?void 0:U.events)==null?void 0:O.onLeave)==null||q.call(O,t),t.hovered.zone.value&&((F=(V=(N=t.zonesMap.value.get(t.hovered.zone.value))==null?void 0:N.events)==null?void 0:V.onHover)==null||F.call(V,t)))},h=H.useThrottleFn(()=>{const m=d(t),S=f(m);g(S)},((K=e==null?void 0:e.sensor)==null?void 0:K.throttle)??0),p=()=>{h(),u=requestAnimationFrame(p)},L=()=>p(),P=()=>{u!==null&&(cancelAnimationFrame(u),u=null)};return{activate:m=>{t.draggingElements.value=i(n.value),t.draggingElements.value.forEach(S=>{var M,E;return(E=(M=S.events).onStart)==null?void 0:E.call(M,t)}),m instanceof PointerEvent?r(m):l(m),L()},track:m=>{t.draggingElements.value.forEach(S=>{var M,E;return(E=(M=S.events).onMove)==null?void 0:E.call(M,t)}),m instanceof KeyboardEvent?v():a(m)},deactivate:(m=!0)=>{var S,M;if(s(),o(),m){if(t.hovered.zone.value){const E=t.zonesMap.value.get(t.hovered.zone.value);(M=E==null?void 0:(S=E.events).onDrop)==null||M.call(S,t)}else t.draggingElements.value.forEach(E=>{var b,w;return(w=(b=E.events).onEnd)==null?void 0:w.call(b,t)});t.selectedElementsMap.value.clear()}t.draggingElements.value.clear(),t.hovered.zone.value=null,t.hovered.element.value=null,P()}}},ve=H.createGlobalState(()=>{let n="",e="",t="",r=null,a=null,s=null,l=null,v=null;const{activeContainer:o}=A(),u=()=>{const g=document.body;n=g.style.userSelect,g.style.userSelect="none",window.addEventListener("contextmenu",D),window.addEventListener("selectstart",D),window.addEventListener("touchstart",D),window.addEventListener("touchmove",D)},i=()=>{const g=document.body;g.style.userSelect=n,g.style.touchAction=e,g.style.overscrollBehavior=t,window.removeEventListener("contextmenu",D),window.removeEventListener("selectstart",D),window.removeEventListener("touchstart",D),window.removeEventListener("touchmove",D)},f=()=>{r&&(document.removeEventListener("pointermove",r),r=null),a&&(document.removeEventListener("pointerup",a),a=null),s&&(s=null),l&&(document.removeEventListener("wheel",l),l=null),v&&(document.removeEventListener("keydown",v),document.removeEventListener("keypress",v),document.removeEventListener("keyup",v),v=null)};return{handleDragStart:(g,h,p)=>{f(),g.target.blur(),p!=null&&p.container&&(o.component.value=c.markRaw(p.container));const{activate:L,track:P,deactivate:_}=ce(h,p);a=()=>{o.component.value=null,i(),_(!0),f()},s=()=>{o.component.value=null,i(),_(!1),f()},r=x=>P(x),l=x=>P(x),v=x=>{x.type==="keyup"&&(x.code==="Escape"&&(s==null||s()),x.code==="Enter"&&(a==null||a())),P(x)},u(),L(g),document.addEventListener("pointermove",r),document.addEventListener("pointerup",a),document.addEventListener("wheel",l),document.addEventListener("keydown",v),document.addEventListener("keypress",v),document.addEventListener("keyup",v)}}}),de=n=>{const{id:e,elementRef:t,isDragging:r,isOvered:a,isAllowed:s,registerElement:l,unregisterElement:v}=oe(n),{pointerPosition:o}=A(),{handleDragStart:u}=ve(),i=f=>u(f,t,n);return c.onMounted(l),c.onBeforeUnmount(v),{pointerPosition:o,elementRef:t,isDragging:r,isOvered:a,isAllowed:s,handleDragStart:i,id:e}},fe=n=>{const{zonesMap:e,hovered:t,draggingElements:r,isDragging:a,handleDropZoneIntersection:s}=A(),l=c.ref(null),v=c.computed(()=>t.zone.value===l.value),o=c.computed(()=>{if(!l.value||!a.value)return!1;const f=e.value.get(l.value);return f!=null&&f.groups.length?!Array.from(r.value.values()).some(d=>d.groups.length?!d.groups.some(g=>f.groups.includes(g)):!1):!0});return{elementRef:l,registerZone:()=>{if(!l.value)throw new Error("elementRef is not set");s("add",l.value),e.value.set(l.value,{node:l.value,groups:(n==null?void 0:n.groups)??[],events:(n==null?void 0:n.events)??{},data:(n==null?void 0:n.data)??void 0}),l.value.setAttribute("data-dnd-droppable","true")},unregisterZone:()=>{l.value&&(s("remove",l.value),e.value.delete(l.value))},isOvered:v,isAllowed:o}},ge=n=>{const{elementRef:e,registerZone:t,unregisterZone:r,isOvered:a,isAllowed:s}=fe(n);return c.onMounted(t),c.onBeforeUnmount(r),{elementRef:e,isOvered:a,isAllowed:s}},me=n=>{const{selectedElementsMap:e,elementsMap:t}=A(),r=c.computed(()=>n.value?e.value.has(n.value):!1),a=c.computed(()=>{if(!n.value)return!1;for(const[u,i]of e.value.entries())if(u&&I(u,n.value))return!0;return!1}),s=c.computed(()=>{if(!n.value)return!1;for(const[u,i]of e.value.entries())if(u&&I(n.value,u))return!0;return!1}),l=()=>{n.value&&e.value.delete(n.value)},v=()=>{if(!n.value)return;const u=t.value.get(n.value);if(u){if(a.value)for(const[i,f]of[...e.value.entries()])i&&I(i,n.value)&&e.value.delete(i);if(s.value)for(const[i,f]of[...e.value.entries()])i&&I(n.value,i)&&e.value.delete(i);e.value.set(n.value,u)}};return{handleUnselect:l,handleSelect:v,handleToggleSelect:()=>{n.value&&(e.value.has(n.value)?l():v())},isSelected:r,isParentOfSelected:a}};exports.DnDOperations=X;exports.default=ae;exports.getBoundingBox=T;exports.useDnDStore=A;exports.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 C=(n,e,t)=>te(n,typeof e!="symbol"?e+"":e,t);Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const c=require("vue"),H=require("@vueuse/core"),y=class y{};C(y,"remove",(e,t)=>{if(!e||t===void 0)return;const[r]=e.splice(t,1);return r}),C(y,"insert",(e,t,r)=>{!e||t===void 0||e.splice(t,0,r)}),C(y,"move",(e,t,r,a)=>{if(!e||!r||t===void 0||a===void 0)return;const s=y.remove(e,t);y.insert(r,a,s)}),C(y,"swap",(e,t,r,a)=>{if(!e||!r||t===void 0||a===void 0)return;const s=e[t],l=r[a];e[t]=l,r[a]=s}),C(y,"copy",(e,t,r,a)=>{if(!e||t===void 0||!r||a===void 0)return;const s=e[t];y.insert(r,a,s)}),C(y,"applyTransfer",e=>{const t=e.hovered.element.value,r=e.hovered.zone.value;t?e.draggingElements.value.forEach(a=>{var s,l,v,o,u,i;return y.move((s=a.data)==null?void 0:s.source,(l=a.data)==null?void 0:l.index,(o=(v=e.elementsMap.value.get(t))==null?void 0:v.data)==null?void 0:o.source,(i=(u=e.elementsMap.value.get(t))==null?void 0:u.data)==null?void 0:i.index)}):r&&e.draggingElements.value.forEach(a=>{var s,l,v,o,u,i,f;return y.move((s=a.data)==null?void 0:s.source,(l=a.data)==null?void 0:l.index,(o=(v=e.zonesMap.value.get(r))==null?void 0:v.data)==null?void 0:o.source,(f=(i=(u=e.zonesMap.value.get(r))==null?void 0:u.data)==null?void 0:i.source)==null?void 0:f.length)})}),C(y,"applyCopy",e=>{const t=e.hovered.element.value,r=e.hovered.zone.value;t?e.draggingElements.value.forEach(a=>{var s,l,v,o,u,i;return y.copy((s=a.data)==null?void 0:s.source,(l=a.data)==null?void 0:l.index,(o=(v=e.elementsMap.value.get(t))==null?void 0:v.data)==null?void 0:o.source,(i=(u=e.elementsMap.value.get(t))==null?void 0:u.data)==null?void 0:i.index)}):r&&e.draggingElements.value.forEach(a=>{var s,l,v,o,u,i,f;return y.copy((s=a.data)==null?void 0:s.source,(l=a.data)==null?void 0:l.index,(o=(v=e.zonesMap.value.get(r))==null?void 0:v.data)==null?void 0:o.source,(f=(i=(u=e.zonesMap.value.get(r))==null?void 0:u.data)==null?void 0:i.source)==null?void 0:f.length)})}),C(y,"applySwap",e=>{var a,s,l,v,o,u;const t=e.hovered.element.value,r=e.hovered.zone.value;if(t&&e.draggingElements.value.size===1){const i=e.draggingElements.value.values().next().value;y.swap((a=i==null?void 0:i.data)==null?void 0:a.source,(s=i==null?void 0:i.data)==null?void 0:s.index,(v=(l=e.elementsMap.value.get(t))==null?void 0:l.data)==null?void 0:v.source,(u=(o=e.elementsMap.value.get(t))==null?void 0:o.data)==null?void 0:u.index)}else r&&e.draggingElements.value.forEach(i=>{var f,d,g,h,p,L,P;return y.move((f=i.data)==null?void 0:f.source,(d=i.data)==null?void 0:d.index,(h=(g=e.zonesMap.value.get(r))==null?void 0:g.data)==null?void 0:h.source,(P=(L=(p=e.zonesMap.value.get(r))==null?void 0:p.data)==null?void 0:L.source)==null?void 0:P.length)})}),C(y,"applyRemove",e=>{e.draggingElements.value.forEach(t=>{var r,a;(r=t.data)!=null&&r.source&&((a=t.data)==null?void 0:a.index)!==void 0&&y.remove(t.data.source,t.data.index)})}),C(y,"applyInsert",(e,t)=>{const r=e.hovered.element.value,a=e.hovered.zone.value;r&&t.length>0?t.forEach(s=>{var l,v,o,u;y.insert((v=(l=e.elementsMap.value.get(r))==null?void 0:l.data)==null?void 0:v.source,(u=(o=e.elementsMap.value.get(r))==null?void 0:o.data)==null?void 0:u.index,s)}):a&&t.forEach(s=>{var l,v,o,u,i;y.insert((v=(l=e.zonesMap.value.get(a))==null?void 0:l.data)==null?void 0:v.source,(i=(u=(o=e.zonesMap.value.get(a))==null?void 0:o.data)==null?void 0:u.source)==null?void 0:i.length,s)})});let X=y;const A=H.createGlobalState(()=>{const n=c.ref(new Map),e=c.computed(()=>n.value.size>0),t={component:c.ref(null),ref:c.shallowRef(null)},r=c.ref(new Map),a=c.ref(new Map),s=c.ref(new Map),l=c.ref(new Set),v=c.ref(new Set),o=new IntersectionObserver(K=>{K.forEach(m=>v.value[m.isIntersecting?"add":"delete"](m.target))}),u=new IntersectionObserver(K=>{K.forEach(m=>l.value[m.isIntersecting?"add":"delete"](m.target))}),i=(K,m)=>{K==="add"?o.observe(m):(o.unobserve(m),v.value.delete(m))},f=(K,m)=>{K==="add"?u.observe(m):(u.unobserve(m),l.value.delete(m))},d={start:c.shallowRef(null),current:c.shallowRef(null),offset:{percent:c.shallowRef(null),pixel:c.shallowRef(null)}},{w:g,s:h,a:p,d:L,ctrl:P,shift:_,alt:x,meta:Z}=H.useMagicKeys(),Y={zone:c.shallowRef(null),element:c.shallowRef(null)};return{draggingElements:n,isDragging:e,activeContainer:t,elementsMap:r,selectedElementsMap:a,zonesMap:s,visibleZones:l,visibleElements:v,pointerPosition:d,keyboard:{w:g,s:h,a:p,d:L,ctrl:P,shift:_,alt:x,meta:Z},hovered:Y,handleDragElementIntersection:i,handleDropZoneIntersection:f}}),W=()=>{const n=c.ref(null),{draggingElements:e,pointerPosition:t,isDragging:r,activeContainer:a}=A();return c.onMounted(()=>{a.ref=n}),c.onBeforeUnmount(()=>{a.ref.value=null}),{elementRef:n,draggingElements:e,pointerPosition:t,isDragging:r}},ne=["innerHTML"],re=c.defineComponent({__name:"DefaultOverlay",setup(n){const{elementRef:e,pointerPosition:t,isDragging:r,draggingElements:a}=W(),s=c.computed(()=>{var l,v,o,u;return{transform:`translate3d(${(((l=t.current.value)==null?void 0:l.x)??0)-(((v=t.offset.pixel.value)==null?void 0:v.x)??0)}px, ${(((o=t.current.value)==null?void 0:o.y)??0)-(((u=t.offset.pixel.value)==null?void 0:u.y)??0)}px, 0)`,zIndex:1e3,position:"fixed",top:0,left:0,transition:"0.3s cubic-bezier(0.165, 0.84, 0.44, 1)"}});return(l,v)=>c.unref(r)?(c.openBlock(),c.createElementBlock("div",{key:0,ref_key:"elementRef",ref:e,style:c.normalizeStyle(s.value)},[(c.openBlock(!0),c.createElementBlock(c.Fragment,null,c.renderList(c.unref(a),([o,u])=>{var i,f;return c.openBlock(),c.createElementBlock("div",{key:u.id,innerHTML:u.initialHTML,style:c.normalizeStyle({width:`${(i=u.initialRect)==null?void 0:i.width}px`,height:`${(f=u.initialRect)==null?void 0:f.height}px`})},null,12,ne)}),128))],4)):c.createCommentVNode("",!0)}}),$=c.defineComponent({__name:"DragOverlay",setup(n){const{activeContainer:e}=A(),t=c.computed(()=>e.component.value??re);return(r,a)=>(c.openBlock(),c.createBlock(c.resolveDynamicComponent(t.value)))}}),ae={install(n){n.component("DragOverlay",$);const e=n.mount;n.mount=function(r){const a=e.call(this,r),s=typeof r=="string"?document.querySelector(r):r;if(s&&s instanceof Element&&!s.querySelector("#vue-dnd-kit-overlay")){const l=document.createElement("div");l.id="vue-dnd-kit-overlay",l.style.pointerEvents="none",s.appendChild(l);const v=c.createVNode($);c.render(v,l),n.__VUE_DND_KIT_OVERLAY__={container:l,vnode:v}}return a};const t=n.unmount;n.unmount=function(){return n.__VUE_DND_KIT_OVERLAY__&&(c.render(null,n.__VUE_DND_KIT_OVERLAY__.container),delete n.__VUE_DND_KIT_OVERLAY__),t.call(this)}}},G=(n,e)=>n.x<e.x+e.width&&n.x+n.width>e.x&&n.y<e.y+e.height&&n.y+n.height>e.y,T=n=>{if(!n)return{x:0,y:0,width:0,height:0,bottom:0,left:0,right:0,top:0};const e=n.getBoundingClientRect();return{bottom:e.bottom,left:e.left,right:e.right,top:e.top,x:e.x,y:e.y,width:e.width,height:e.height}},B=n=>({x:n.x+n.width/2,y:n.y+n.height/2}),le=(n,e)=>{const t=T(n);return{pixel:{x:e.x-t.x,y:e.y-t.y},percent:{x:(e.x-t.x)/t.width*100,y:(e.y-t.y)/t.height*100}}},j=(n,e)=>{const t=e.x-n.x,r=e.y-n.y;return Math.sqrt(t*t+r*r)},J=(n,e)=>{const t=Math.max(0,Math.min(n.x+n.width,e.x+e.width)-Math.max(n.x,e.x)),r=Math.max(0,Math.min(n.y+n.height,e.y+e.height)-Math.max(n.y,e.y)),a=t*r,s=n.width*n.height,l=e.width*e.height;return(a/s*100+a/l*100)/2},Q="data-vue-dnd-kit-draggable",D=n=>{n.preventDefault()},oe=n=>{const{elementsMap:e,draggingElements:t,hovered:r,selectedElementsMap:a,isDragging:s,visibleElements:l,handleDragElementIntersection:v}=A(),o=c.ref(null),u=c.computed(()=>l.value.has(o.value)&&r.element.value===o.value),i=c.shallowRef((n==null?void 0:n.id)||c.useId()),f=c.computed(()=>!o.value||!l.value.has(o.value)?!1:t.value.has(o.value)),d=c.computed(()=>{if(!o.value||!s.value||!l.value.has(o.value))return!1;const p=e.value.get(o.value);return p!=null&&p.groups.length?!Array.from(t.value.entries()).some(([L,P])=>P.groups.length?!P.groups.some(_=>p.groups.includes(_)):!1):!0});return{elementRef:o,registerElement:()=>{if(!o.value)throw new Error("ElementRef is not set");e.value.set(o.value,{node:o.value,groups:(n==null?void 0:n.groups)??[],layer:(n==null?void 0:n.layer)??null,defaultLayer:(n==null?void 0:n.layer)??null,events:(n==null?void 0:n.events)??{},data:(n==null?void 0:n.data)??null,id:i.value}),v("add",o.value),o.value.addEventListener("dragstart",D),o.value.addEventListener("drag",D),o.value.setAttribute(Q,"true"),o.value.setAttribute("draggable","false")},unregisterElement:()=>{o.value&&(e.value.delete(o.value),a.value.delete(o.value),o.value.removeEventListener("dragstart",D),o.value.removeEventListener("drag",D),o.value.removeAttribute(Q),o.value.removeAttribute("draggable"))},isDragging:f,isOvered:u,isAllowed:d,id:i}},I=(n,e)=>n?e.contains(n):!1,se=n=>{var i,f;const e=T(n.activeContainer.ref.value),t=B(e),r=((i=n.pointerPosition.current.value)==null?void 0:i.x)??0,a=((f=n.pointerPosition.current.value)==null?void 0:f.y)??0,l=!(e&&r>=e.x&&r<=e.x+e.width&&a>=e.y&&a<=e.y+e.height),v=Array.from(n.draggingElements.value.keys()),o=Array.from(n.visibleElements.value.entries()).filter(([d,g])=>{if(!d)return!1;const h=T(d);return h&&e&&G(h,e)}).map(([d,g])=>{const h=T(d),p=B(h),L=r>=h.x&&r<=h.x+h.width&&a>=h.y&&a<=h.y+h.height,P=J(h,e),_=j(t,p);let x=0;for(const[Z,Y]of n.visibleElements.value.entries())Z!==d&&Z&&d&&I(d,Z)&&x++;return{element:g,node:d,isPointerInElement:L,overlapPercent:P,depth:x,centerDistance:_}}).sort((d,g)=>{if(!l){if(d.isPointerInElement&&g.isPointerInElement)return g.depth-d.depth;if(d.isPointerInElement!==g.isPointerInElement)return d.isPointerInElement?-1:1}return Math.abs(d.overlapPercent-g.overlapPercent)<=1?d.centerDistance-g.centerDistance:g.overlapPercent-d.overlapPercent}),u=Array.from(n.visibleZones.value.entries()).filter(([d,g])=>{if(!d||v.some(p=>p&&I(d,p)))return!1;const h=T(d);return h&&e&&G(h,e)}).map(([d,g])=>{const h=T(d),p=B(h),L=r>=h.x&&r<=h.x+h.width&&a>=h.y&&a<=h.y+h.height,P=J(h,e),_=j(t,p);let x=0;for(const[Z,Y]of n.visibleZones.value.entries())Z!==d&&Z&&d&&I(d,Z)&&x++;return{zone:g,node:d,isPointerInElement:L,overlapPercent:P,depth:x,centerDistance:_}}).sort((d,g)=>{if(!l){if(d.isPointerInElement&&g.isPointerInElement)return g.depth-d.depth;if(d.isPointerInElement!==g.isPointerInElement)return d.isPointerInElement?-1:1}return Math.abs(d.overlapPercent-g.overlapPercent)<=1?d.centerDistance-g.centerDistance:g.overlapPercent-d.overlapPercent});return[...o.map(d=>d.node),...u.map(d=>d.node)]},ue=(n,e)=>{const{pointerPosition:t,keyboard:r}=A(),a=(e==null?void 0:e.moveStep)||10;return{onKeyboardStart:o=>{var d;D(o);const u=T(n.value);(d=n.value)==null||d.blur();const i=u.x+u.width/2,f=u.y+u.height/2;t.start.value={x:i,y:f},t.current.value={x:i,y:f},t.offset.pixel.value={x:u.width/2,y:u.height/2},t.offset.percent.value={x:50,y:50}},onKeyboardMove:()=>{if(!t.current.value)return;const o=t.current.value.x,u=t.current.value.y;let i=o,f=u;r.w.value&&(f-=a),r.s.value&&(f+=a),r.a.value&&(i-=a),r.d.value&&(i+=a),t.current.value={x:i,y:f}},onKeyboardEnd:()=>{t.current.value=null,t.start.value=null,t.offset.pixel.value=null,t.offset.percent.value=null}}},ie=n=>{const e=A();return{onPointerStart:s=>{e.pointerPosition.start.value={x:s.clientX,y:s.clientY},e.pointerPosition.current.value={x:s.clientX,y:s.clientY};const{pixel:l,percent:v}=le(n.value,{x:s.clientX,y:s.clientY});e.pointerPosition.offset.pixel.value=l,e.pointerPosition.offset.percent.value=v},onPointerMove:s=>{e.pointerPosition.current.value={x:s.clientX,y:s.clientY}},onPointerEnd:()=>{e.pointerPosition.current.value=null,e.pointerPosition.start.value=null,e.pointerPosition.offset.pixel.value=null,e.pointerPosition.offset.percent.value=null}}},ce=(n,e)=>{var Y,K;const t=A(),{onPointerStart:r,onPointerMove:a,onPointerEnd:s}=ie(n),{onKeyboardStart:l,onKeyboardMove:v,onKeyboardEnd:o}=ue(n,e==null?void 0:e.keyboard);let u=null;const i=m=>{var b,w;if(!m)return new Map;const S=t.selectedElementsMap.value.has(m);if(t.selectedElementsMap.value.size>0&&S){const z=new Map;return Array.from(t.selectedElementsMap.value.entries()).forEach(([k,R])=>{var O,U;z.set(k,{...R,initialHTML:((O=R.node)==null?void 0:O.outerHTML)??"",initialRect:(U=R.node)==null?void 0:U.getBoundingClientRect()})}),z}t.selectedElementsMap.value.clear();const M=t.elementsMap.value.get(m);if(!M)return new Map;const E=new Map;return E.set(m,{...M,initialHTML:((b=M.node)==null?void 0:b.outerHTML)??"",initialRect:(w=M.node)==null?void 0:w.getBoundingClientRect()}),E},f=m=>{if(!m)return{element:null,zone:null};const S=Array.isArray(m)?m:[m],M=Array.from(t.draggingElements.value.keys()),E=S.find(w=>{if(!t.visibleZones.value.has(w))return!1;const z=t.zonesMap.value.get(w);return!(!z||M.some(k=>k&&(k===z.node||I(z.node,k)))||z.groups.length&&!!Array.from(t.draggingElements.value.values()).some(R=>R.groups.length?!R.groups.some(O=>z.groups.includes(O)):!1))});return E?{element:S.find(w=>t.visibleElements.value.has(w)&&t.elementsMap.value.has(w)&&!M.some(z=>z&&(z===w||I(w,z)||I(z,w)))&&(w===E||I(w,E)))||null,zone:E}:{element:null,zone:null}},d=((Y=e==null?void 0:e.sensor)==null?void 0:Y.setup)||se,g=m=>{var E,b,w,z,k,R,O,U,q,N,V,F;const S=t.hovered.element.value,M=t.hovered.zone.value;t.hovered.element.value=m.element,t.hovered.zone.value=m.zone,S&&t.hovered.element.value!==S&&((w=(b=(E=t.elementsMap.value.get(S))==null?void 0:E.events)==null?void 0:b.onLeave)==null||w.call(b,t),t.hovered.element.value&&((R=(k=(z=t.elementsMap.value.get(t.hovered.element.value))==null?void 0:z.events)==null?void 0:k.onHover)==null||R.call(k,t))),M&&t.hovered.zone.value!==M&&((q=(U=(O=t.zonesMap.value.get(M))==null?void 0:O.events)==null?void 0:U.onLeave)==null||q.call(U,t),t.hovered.zone.value&&((F=(V=(N=t.zonesMap.value.get(t.hovered.zone.value))==null?void 0:N.events)==null?void 0:V.onHover)==null||F.call(V,t)))},h=H.useThrottleFn(()=>{const m=d(t),S=f(m);g(S)},((K=e==null?void 0:e.sensor)==null?void 0:K.throttle)??0),p=()=>{h(),u=requestAnimationFrame(p)},L=()=>p(),P=()=>{u!==null&&(cancelAnimationFrame(u),u=null)};return{activate:m=>{t.draggingElements.value=i(n.value),t.draggingElements.value.forEach(S=>{var M,E;return(E=(M=S.events).onStart)==null?void 0:E.call(M,t)}),m instanceof PointerEvent?r(m):l(m),L()},track:m=>{t.draggingElements.value.forEach(S=>{var M,E;return(E=(M=S.events).onMove)==null?void 0:E.call(M,t)}),m instanceof KeyboardEvent?v():a(m)},deactivate:(m=!0)=>{var S,M;if(s(),o(),m){if(t.hovered.zone.value){const E=t.zonesMap.value.get(t.hovered.zone.value);(M=E==null?void 0:(S=E.events).onDrop)==null||M.call(S,t)}else t.draggingElements.value.forEach(E=>{var b,w;return(w=(b=E.events).onEnd)==null?void 0:w.call(b,t)});t.selectedElementsMap.value.clear()}t.draggingElements.value.clear(),t.hovered.zone.value=null,t.hovered.element.value=null,P()}}},ve=H.createGlobalState(()=>{let n="",e="",t="",r=null,a=null,s=null,l=null,v=null;const{activeContainer:o}=A(),u=()=>{const g=document.body;n=g.style.userSelect,g.style.userSelect="none",window.addEventListener("contextmenu",D),window.addEventListener("selectstart",D),window.addEventListener("touchstart",D),window.addEventListener("touchmove",D)},i=()=>{const g=document.body;g.style.userSelect=n,g.style.touchAction=e,g.style.overscrollBehavior=t,window.removeEventListener("contextmenu",D),window.removeEventListener("selectstart",D),window.removeEventListener("touchstart",D),window.removeEventListener("touchmove",D)},f=()=>{r&&(document.removeEventListener("pointermove",r),r=null),a&&(document.removeEventListener("pointerup",a),a=null),s&&(s=null),l&&(document.removeEventListener("wheel",l),l=null),v&&(document.removeEventListener("keydown",v),document.removeEventListener("keypress",v),document.removeEventListener("keyup",v),v=null)};return{handleDragStart:(g,h,p)=>{f(),g.target.blur(),p!=null&&p.container&&(o.component.value=c.markRaw(p.container));const{activate:L,track:P,deactivate:_}=ce(h,p);a=()=>{o.component.value=null,i(),_(!0),f()},s=()=>{o.component.value=null,i(),_(!1),f()},r=x=>P(x),l=x=>P(x),v=x=>{x.type==="keyup"&&(x.code==="Escape"&&(s==null||s()),x.code==="Enter"&&(a==null||a())),P(x)},u(),L(g),document.addEventListener("pointermove",r),document.addEventListener("pointerup",a),document.addEventListener("wheel",l),document.addEventListener("keydown",v),document.addEventListener("keypress",v),document.addEventListener("keyup",v)}}}),de=n=>{const{id:e,elementRef:t,isDragging:r,isOvered:a,isAllowed:s,registerElement:l,unregisterElement:v}=oe(n),{pointerPosition:o}=A(),{handleDragStart:u}=ve(),i=f=>u(f,t,n);return c.onMounted(l),c.onBeforeUnmount(v),{pointerPosition:o,elementRef:t,isDragging:r,isOvered:a,isAllowed:s,handleDragStart:i,id:e}},fe=n=>{const{zonesMap:e,hovered:t,draggingElements:r,isDragging:a,handleDropZoneIntersection:s}=A(),l=c.ref(null),v=c.computed(()=>t.zone.value===l.value),o=c.computed(()=>{if(!l.value||!a.value)return!1;const f=e.value.get(l.value);return f!=null&&f.groups.length?!Array.from(r.value.values()).some(d=>d.groups.length?!d.groups.some(g=>f.groups.includes(g)):!1):!0});return{elementRef:l,registerZone:()=>{if(!l.value)throw new Error("elementRef is not set");s("add",l.value),e.value.set(l.value,{node:l.value,groups:(n==null?void 0:n.groups)??[],events:(n==null?void 0:n.events)??{},data:(n==null?void 0:n.data)??void 0}),l.value.setAttribute("data-dnd-droppable","true")},unregisterZone:()=>{l.value&&(s("remove",l.value),e.value.delete(l.value))},isOvered:v,isAllowed:o}},ge=n=>{const{elementRef:e,registerZone:t,unregisterZone:r,isOvered:a,isAllowed:s}=fe(n);return c.onMounted(t),c.onBeforeUnmount(r),{elementRef:e,isOvered:a,isAllowed:s}},me=n=>{const{selectedElementsMap:e,elementsMap:t}=A(),r=c.computed(()=>n.value?e.value.has(n.value):!1),a=c.computed(()=>{if(!n.value)return!1;for(const[u,i]of e.value.entries())if(u&&I(u,n.value))return!0;return!1}),s=c.computed(()=>{if(!n.value)return!1;for(const[u,i]of e.value.entries())if(u&&I(n.value,u))return!0;return!1}),l=()=>{n.value&&e.value.delete(n.value)},v=()=>{if(!n.value)return;const u=t.value.get(n.value);if(u){if(a.value)for(const[i,f]of[...e.value.entries()])i&&I(i,n.value)&&e.value.delete(i);if(s.value)for(const[i,f]of[...e.value.entries()])i&&I(n.value,i)&&e.value.delete(i);e.value.set(n.value,u)}};return{handleUnselect:l,handleSelect:v,handleToggleSelect:()=>{n.value&&(e.value.has(n.value)?l():v())},isSelected:r,isParentOfSelected:a}};exports.DnDOperations=X;exports.default=ae;exports.getBoundingBox=T;exports.useDnDStore=A;exports.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 store.draggingElements.value.forEach((element) =>\r\n DnDOperations.move(\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 );\r\n } else if (hoveredZone) {\r\n store.draggingElements.value.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n store.zonesMap.value.get(hoveredZone)?.data?.source,\r\n store.zonesMap.value.get(hoveredZone)?.data?.source?.length\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 store.draggingElements.value.forEach((element) =>\r\n DnDOperations.copy(\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 );\r\n } else if (hoveredZone) {\r\n store.draggingElements.value.forEach((element) =>\r\n DnDOperations.copy(\r\n element.data?.source,\r\n element.data?.index,\r\n store.zonesMap.value.get(hoveredZone)?.data?.source,\r\n store.zonesMap.value.get(hoveredZone)?.data?.source?.length\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 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 store.draggingElements.value.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n store.zonesMap.value.get(hoveredZone)?.data?.source,\r\n store.zonesMap.value.get(hoveredZone)?.data?.source?.length\r\n )\r\n );\r\n }\r\n };\r\n static applyRemove = (store: IDnDStore) => {\r\n store.draggingElements.value.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 if (hoveredElement && items.length > 0) {\r\n items.forEach((item) => {\r\n DnDOperations.insert(\r\n store.elementsMap.value.get(hoveredElement)?.data?.source,\r\n store.elementsMap.value.get(hoveredElement)?.data?.index,\r\n item\r\n );\r\n });\r\n } else if (hoveredZone) {\r\n items.forEach((item) => {\r\n DnDOperations.insert(\r\n store.zonesMap.value.get(hoveredZone)?.data?.source,\r\n store.zonesMap.value.get(hoveredZone)?.data?.source?.length,\r\n item\r\n );\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 { computed, ref, shallowRef, type Component, onUnmounted } 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 };\r\n\r\n const elementsMap = ref<Map<HTMLElement | Element, IDragElement>>(new Map());\r\n const selectedElementsMap = ref<Map<HTMLElement | Element, IDragElement>>(\r\n new Map()\r\n );\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 onUnmounted(() => {\r\n elementObserver.disconnect();\r\n zoneObserver.disconnect();\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 selectedElementsMap,\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 { onBeforeUnmount, onMounted, ref } from 'vue';\r\n\r\nimport { useDnDStore } from './useDnDStore';\r\n\r\nexport const useDragContainer = () => {\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 });\r\n\r\n onBeforeUnmount(() => {\r\n activeContainer.ref.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 () => activeContainer.component.value ?? DefaultOverlay\r\n );\r\n</script>\r\n\r\n<template>\r\n <component :is=\"overlay\" />\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\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 app.__VUE_DND_KIT_OVERLAY__ = {\r\n container: overlayContainer,\r\n vnode,\r\n };\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 }\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 selectedElementsMap,\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 selectedElementsMap.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.selectedElementsMap.value.has(draggableElement);\r\n\r\n if (store.selectedElementsMap.value.size > 0 && isDraggableInSelection) {\r\n const result = new Map<HTMLElement | Element, IDraggingElement>();\r\n\r\n Array.from(store.selectedElementsMap.value.entries()).forEach(\r\n ([node, element]) => {\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\r\n return result;\r\n }\r\n\r\n store.selectedElementsMap.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.selectedElementsMap.value.clear();\r\n }\r\n store.draggingElements.value.clear();\r\n\r\n store.hovered.zone.value = null;\r\n store.hovered.element.value = null;\r\n\r\n stopDetection();\r\n };\r\n\r\n return {\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 { selectedElementsMap, elementsMap } = useDnDStore();\r\n\r\n const isSelected = computed<boolean>(() =>\r\n elementRef.value ? selectedElementsMap.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 selectedElementsMap.value.entries()) {\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 selectedElementsMap.value.entries()) {\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 selectedElementsMap.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 [...selectedElementsMap.value.entries()]) {\r\n if (\r\n node &&\r\n isDescendant(node as HTMLElement, elementRef.value as HTMLElement)\r\n ) {\r\n selectedElementsMap.value.delete(node);\r\n }\r\n }\r\n }\r\n\r\n if (hasSelectedParent.value) {\r\n // Удаляем все родительские выбранные элементы\r\n for (const [node, _] of [...selectedElementsMap.value.entries()]) {\r\n if (\r\n node &&\r\n isDescendant(elementRef.value as HTMLElement, node as HTMLElement)\r\n ) {\r\n selectedElementsMap.value.delete(node);\r\n }\r\n }\r\n }\r\n\r\n selectedElementsMap.value.set(elementRef.value, element);\r\n };\r\n\r\n const handleToggleSelect = () => {\r\n if (!elementRef.value) return;\r\n\r\n selectedElementsMap.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","element","_a","_b","_d","_c","_f","_e","_g","items","DnDOperations","useDnDStore","createGlobalState","draggingElements","ref","isDragging","computed","activeContainer","shallowRef","elementsMap","selectedElementsMap","zonesMap","visibleZones","visibleElements","elementObserver","entries","entry","zoneObserver","handleDragElementIntersection","action","handleDropZoneIntersection","onUnmounted","pointerPosition","w","s","a","d","ctrl","shift","alt","meta","useMagicKeys","hovered","useDragContainer","elementRef","onMounted","onBeforeUnmount","computedStyle","overlay","DefaultOverlay","VueDndKitPlugin","app","DragOverlay","originalMount","rootContainer","instance","rootEl","overlayContainer","vnode","createVNode","render","originalUnmount","checkCollision","boxA","boxB","getBoundingBox","rect","getCenter","box","getOffset","pointer","getDistance","pointA","pointB","dx","dy","getOverlapPercent","xOverlap","yOverlap","overlapArea","boxAArea","boxBArea","draggableDataName","preventEvent","event","useElementManager","options","isDragStarted","isOvered","id","useId","isAllowed","currentElement","_","draggingElement","group","isDescendant","container","defaultCollisionDetection","containerRect","containerCenter","pointerX","pointerY","shouldUseNormalPriority","activeDragNodes","allCollidingElements","node","elementCenter","isPointerInElement","overlapPercent","centerDistance","depth","parentNode","b","allCollidingZones","dragNode","zone","zoneCenter","useKeyboard","keyboard","moveStep","centerX","centerY","currentX","currentY","newX","newY","usePointer","pixel","percent","useSensor","onPointerStart","onPointerMove","onPointerEnd","onKeyboardStart","onKeyboardMove","onKeyboardEnd","animationFrameId","getDraggingElements","draggableElement","isDraggableInSelection","result","processUserCollisionResults","htmlElements","elements","filteredZoneElement","htmlElement","detectCollisions","processCollisionResults","results","previousElement","previousZone","_i","_h","_l","_k","_j","throttledDetectAndProcess","useThrottleFn","processedResults","animationLoop","startDetection","stopDetection","triggerEvents","useEventManager","originalUserSelect","originalTouchAction","originalOverscrollBehavior","currentMoveHandler","currentEndHandler","currentCancelHandler","currentScrollHandler","currentKeyHandler","disableInteractions","body","enableInteractions","clearAllListeners","markRaw","activate","track","deactivate","useDraggable","registerElement","unregisterElement","start","handleDragStart","useZoneManager","currentZone","useDroppable","registerZone","unregisterZone","useSelection","isSelected","isParentOfSelected","hasSelectedParent","handleUnselect","handleSelect"],"mappings":"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"}
|
|
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 store.draggingElements.value.forEach((element) =>\r\n DnDOperations.move(\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 );\r\n } else if (hoveredZone) {\r\n store.draggingElements.value.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n store.zonesMap.value.get(hoveredZone)?.data?.source,\r\n store.zonesMap.value.get(hoveredZone)?.data?.source?.length\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 store.draggingElements.value.forEach((element) =>\r\n DnDOperations.copy(\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 );\r\n } else if (hoveredZone) {\r\n store.draggingElements.value.forEach((element) =>\r\n DnDOperations.copy(\r\n element.data?.source,\r\n element.data?.index,\r\n store.zonesMap.value.get(hoveredZone)?.data?.source,\r\n store.zonesMap.value.get(hoveredZone)?.data?.source?.length\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 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 store.draggingElements.value.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n store.zonesMap.value.get(hoveredZone)?.data?.source,\r\n store.zonesMap.value.get(hoveredZone)?.data?.source?.length\r\n )\r\n );\r\n }\r\n };\r\n static applyRemove = (store: IDnDStore) => {\r\n store.draggingElements.value.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 if (hoveredElement && items.length > 0) {\r\n items.forEach((item) => {\r\n DnDOperations.insert(\r\n store.elementsMap.value.get(hoveredElement)?.data?.source,\r\n store.elementsMap.value.get(hoveredElement)?.data?.index,\r\n item\r\n );\r\n });\r\n } else if (hoveredZone) {\r\n items.forEach((item) => {\r\n DnDOperations.insert(\r\n store.zonesMap.value.get(hoveredZone)?.data?.source,\r\n store.zonesMap.value.get(hoveredZone)?.data?.source?.length,\r\n item\r\n );\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 { computed, ref, shallowRef, type Component } 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 };\r\n\r\n const elementsMap = ref<Map<HTMLElement | Element, IDragElement>>(new Map());\r\n const selectedElementsMap = ref<Map<HTMLElement | Element, IDragElement>>(\r\n new Map()\r\n );\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 selectedElementsMap,\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 { onBeforeUnmount, onMounted, ref } from 'vue';\r\n\r\nimport { useDnDStore } from './useDnDStore';\r\n\r\nexport const useDragContainer = () => {\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 });\r\n\r\n onBeforeUnmount(() => {\r\n activeContainer.ref.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 () => activeContainer.component.value ?? DefaultOverlay\r\n );\r\n</script>\r\n\r\n<template>\r\n <component :is=\"overlay\" />\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\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 app.__VUE_DND_KIT_OVERLAY__ = {\r\n container: overlayContainer,\r\n vnode,\r\n };\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 }\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 selectedElementsMap,\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 selectedElementsMap.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.selectedElementsMap.value.has(draggableElement);\r\n\r\n if (store.selectedElementsMap.value.size > 0 && isDraggableInSelection) {\r\n const result = new Map<HTMLElement | Element, IDraggingElement>();\r\n\r\n Array.from(store.selectedElementsMap.value.entries()).forEach(\r\n ([node, element]) => {\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\r\n return result;\r\n }\r\n\r\n store.selectedElementsMap.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.selectedElementsMap.value.clear();\r\n }\r\n store.draggingElements.value.clear();\r\n\r\n store.hovered.zone.value = null;\r\n store.hovered.element.value = null;\r\n\r\n stopDetection();\r\n };\r\n\r\n return {\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 { selectedElementsMap, elementsMap } = useDnDStore();\r\n\r\n const isSelected = computed<boolean>(() =>\r\n elementRef.value ? selectedElementsMap.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 selectedElementsMap.value.entries()) {\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 selectedElementsMap.value.entries()) {\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 selectedElementsMap.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 [...selectedElementsMap.value.entries()]) {\r\n if (\r\n node &&\r\n isDescendant(node as HTMLElement, elementRef.value as HTMLElement)\r\n ) {\r\n selectedElementsMap.value.delete(node);\r\n }\r\n }\r\n }\r\n\r\n if (hasSelectedParent.value) {\r\n // Удаляем все родительские выбранные элементы\r\n for (const [node, _] of [...selectedElementsMap.value.entries()]) {\r\n if (\r\n node &&\r\n isDescendant(elementRef.value as HTMLElement, node as HTMLElement)\r\n ) {\r\n selectedElementsMap.value.delete(node);\r\n }\r\n }\r\n }\r\n\r\n selectedElementsMap.value.set(elementRef.value, element);\r\n };\r\n\r\n const handleToggleSelect = () => {\r\n if (!elementRef.value) return;\r\n\r\n selectedElementsMap.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","element","_a","_b","_d","_c","_f","_e","_g","items","DnDOperations","useDnDStore","createGlobalState","draggingElements","ref","isDragging","computed","activeContainer","shallowRef","elementsMap","selectedElementsMap","zonesMap","visibleZones","visibleElements","elementObserver","entries","entry","zoneObserver","handleDragElementIntersection","action","handleDropZoneIntersection","pointerPosition","w","s","a","d","ctrl","shift","alt","meta","useMagicKeys","hovered","useDragContainer","elementRef","onMounted","onBeforeUnmount","computedStyle","overlay","DefaultOverlay","VueDndKitPlugin","app","DragOverlay","originalMount","rootContainer","instance","rootEl","overlayContainer","vnode","createVNode","render","originalUnmount","checkCollision","boxA","boxB","getBoundingBox","rect","getCenter","box","getOffset","pointer","getDistance","pointA","pointB","dx","dy","getOverlapPercent","xOverlap","yOverlap","overlapArea","boxAArea","boxBArea","draggableDataName","preventEvent","event","useElementManager","options","isDragStarted","isOvered","id","useId","isAllowed","currentElement","_","draggingElement","group","isDescendant","container","defaultCollisionDetection","containerRect","containerCenter","pointerX","pointerY","shouldUseNormalPriority","activeDragNodes","allCollidingElements","node","elementCenter","isPointerInElement","overlapPercent","centerDistance","depth","parentNode","b","allCollidingZones","dragNode","zone","zoneCenter","useKeyboard","keyboard","moveStep","centerX","centerY","currentX","currentY","newX","newY","usePointer","pixel","percent","useSensor","onPointerStart","onPointerMove","onPointerEnd","onKeyboardStart","onKeyboardMove","onKeyboardEnd","animationFrameId","getDraggingElements","draggableElement","isDraggableInSelection","result","processUserCollisionResults","htmlElements","elements","filteredZoneElement","htmlElement","detectCollisions","processCollisionResults","results","previousElement","previousZone","_i","_h","_l","_k","_j","throttledDetectAndProcess","useThrottleFn","processedResults","animationLoop","startDetection","stopDetection","triggerEvents","useEventManager","originalUserSelect","originalTouchAction","originalOverscrollBehavior","currentMoveHandler","currentEndHandler","currentCancelHandler","currentScrollHandler","currentKeyHandler","disableInteractions","body","enableInteractions","clearAllListeners","markRaw","activate","track","deactivate","useDraggable","registerElement","unregisterElement","start","handleDragStart","useZoneManager","currentZone","useDroppable","registerZone","unregisterZone","useSelection","isSelected","isParentOfSelected","hasSelectedParent","handleUnselect","handleSelect"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
var ue = Object.defineProperty;
|
|
2
2
|
var ce = (n, e, t) => e in n ? ue(n, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : n[e] = t;
|
|
3
3
|
var b = (n, e, t) => ce(n, typeof e != "symbol" ? e + "" : e, t);
|
|
4
|
-
import { ref as K, computed as C, shallowRef as
|
|
5
|
-
import { createGlobalState as ie, useMagicKeys as
|
|
4
|
+
import { ref as K, computed as C, shallowRef as V, onMounted as q, onBeforeUnmount as G, defineComponent as oe, createElementBlock as F, createCommentVNode as ve, unref as W, openBlock as N, normalizeStyle as B, Fragment as de, renderList as ge, createBlock as fe, resolveDynamicComponent as me, createVNode as he, render as ee, useId as ye, markRaw as Ee } from "vue";
|
|
5
|
+
import { createGlobalState as ie, useMagicKeys as pe, useThrottleFn as Me } from "@vueuse/core";
|
|
6
6
|
const y = class y {
|
|
7
7
|
};
|
|
8
8
|
b(y, "remove", (e, t) => {
|
|
@@ -123,7 +123,7 @@ const T = ie(() => {
|
|
|
123
123
|
/* @__PURE__ */ new Map()
|
|
124
124
|
), e = C(() => n.value.size > 0), t = {
|
|
125
125
|
component: K(null),
|
|
126
|
-
ref:
|
|
126
|
+
ref: V(null)
|
|
127
127
|
}, r = K(/* @__PURE__ */ new Map()), a = K(
|
|
128
128
|
/* @__PURE__ */ new Map()
|
|
129
129
|
), o = K(/* @__PURE__ */ new Map()), l = K(/* @__PURE__ */ new Set()), c = K(/* @__PURE__ */ new Set()), s = new IntersectionObserver((Z) => {
|
|
@@ -140,20 +140,16 @@ const T = ie(() => {
|
|
|
140
140
|
Z === "add" ? s.observe(f) : (s.unobserve(f), c.value.delete(f));
|
|
141
141
|
}, d = (Z, f) => {
|
|
142
142
|
Z === "add" ? i.observe(f) : (i.unobserve(f), l.value.delete(f));
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
});
|
|
147
|
-
const v = {
|
|
148
|
-
start: U(null),
|
|
149
|
-
current: U(null),
|
|
143
|
+
}, v = {
|
|
144
|
+
start: V(null),
|
|
145
|
+
current: V(null),
|
|
150
146
|
offset: {
|
|
151
|
-
percent:
|
|
152
|
-
pixel:
|
|
147
|
+
percent: V(null),
|
|
148
|
+
pixel: V(null)
|
|
153
149
|
}
|
|
154
|
-
}, { w: g, s: m, a: h, d: z, ctrl: w, shift: _, alt: P, meta: A } =
|
|
155
|
-
zone:
|
|
156
|
-
element:
|
|
150
|
+
}, { w: g, s: m, a: h, d: z, ctrl: w, shift: _, alt: P, meta: A } = pe(), U = {
|
|
151
|
+
zone: V(null),
|
|
152
|
+
element: V(null)
|
|
157
153
|
};
|
|
158
154
|
return {
|
|
159
155
|
draggingElements: n,
|
|
@@ -175,11 +171,11 @@ const T = ie(() => {
|
|
|
175
171
|
alt: P,
|
|
176
172
|
meta: A
|
|
177
173
|
},
|
|
178
|
-
hovered:
|
|
174
|
+
hovered: U,
|
|
179
175
|
handleDragElementIntersection: u,
|
|
180
176
|
handleDropZoneIntersection: d
|
|
181
177
|
};
|
|
182
|
-
}),
|
|
178
|
+
}), we = () => {
|
|
183
179
|
const n = K(null), { draggingElements: e, pointerPosition: t, isDragging: r, activeContainer: a } = T();
|
|
184
180
|
return q(() => {
|
|
185
181
|
a.ref = n;
|
|
@@ -191,10 +187,10 @@ const T = ie(() => {
|
|
|
191
187
|
pointerPosition: t,
|
|
192
188
|
isDragging: r
|
|
193
189
|
};
|
|
194
|
-
},
|
|
190
|
+
}, Pe = ["innerHTML"], xe = /* @__PURE__ */ oe({
|
|
195
191
|
__name: "DefaultOverlay",
|
|
196
192
|
setup(n) {
|
|
197
|
-
const { elementRef: e, pointerPosition: t, isDragging: r, draggingElements: a } =
|
|
193
|
+
const { elementRef: e, pointerPosition: t, isDragging: r, draggingElements: a } = we(), o = C(() => {
|
|
198
194
|
var l, c, s, i;
|
|
199
195
|
return {
|
|
200
196
|
transform: `translate3d(${(((l = t.current.value) == null ? void 0 : l.x) ?? 0) - (((c = t.offset.pixel.value) == null ? void 0 : c.x) ?? 0)}px, ${(((s = t.current.value) == null ? void 0 : s.y) ?? 0) - (((i = t.offset.pixel.value) == null ? void 0 : i.y) ?? 0)}px, 0)`,
|
|
@@ -211,7 +207,7 @@ const T = ie(() => {
|
|
|
211
207
|
ref: e,
|
|
212
208
|
style: B(o.value)
|
|
213
209
|
}, [
|
|
214
|
-
(N(!0), F(
|
|
210
|
+
(N(!0), F(de, null, ge(W(a), ([s, i]) => {
|
|
215
211
|
var u, d;
|
|
216
212
|
return N(), F("div", {
|
|
217
213
|
key: i.id,
|
|
@@ -220,19 +216,19 @@ const T = ie(() => {
|
|
|
220
216
|
width: `${(u = i.initialRect) == null ? void 0 : u.width}px`,
|
|
221
217
|
height: `${(d = i.initialRect) == null ? void 0 : d.height}px`
|
|
222
218
|
})
|
|
223
|
-
}, null, 12,
|
|
219
|
+
}, null, 12, Pe);
|
|
224
220
|
}), 128))
|
|
225
|
-
], 4)) :
|
|
221
|
+
], 4)) : ve("", !0);
|
|
226
222
|
}
|
|
227
223
|
}), ne = /* @__PURE__ */ oe({
|
|
228
224
|
__name: "DragOverlay",
|
|
229
225
|
setup(n) {
|
|
230
226
|
const { activeContainer: e } = T(), t = C(
|
|
231
|
-
() => e.component.value ??
|
|
227
|
+
() => e.component.value ?? xe
|
|
232
228
|
);
|
|
233
|
-
return (r, a) => (N(), me(
|
|
229
|
+
return (r, a) => (N(), fe(me(t.value)));
|
|
234
230
|
}
|
|
235
|
-
}),
|
|
231
|
+
}), Ke = {
|
|
236
232
|
install(n) {
|
|
237
233
|
n.component("DragOverlay", ne);
|
|
238
234
|
const e = n.mount;
|
|
@@ -241,7 +237,7 @@ const T = ie(() => {
|
|
|
241
237
|
if (o && o instanceof Element && !o.querySelector("#vue-dnd-kit-overlay")) {
|
|
242
238
|
const l = document.createElement("div");
|
|
243
239
|
l.id = "vue-dnd-kit-overlay", l.style.pointerEvents = "none", o.appendChild(l);
|
|
244
|
-
const c =
|
|
240
|
+
const c = he(ne);
|
|
245
241
|
ee(c, l), n.__VUE_DND_KIT_OVERLAY__ = {
|
|
246
242
|
container: l,
|
|
247
243
|
vnode: c
|
|
@@ -254,7 +250,7 @@ const T = ie(() => {
|
|
|
254
250
|
return n.__VUE_DND_KIT_OVERLAY__ && (ee(null, n.__VUE_DND_KIT_OVERLAY__.container), delete n.__VUE_DND_KIT_OVERLAY__), t.call(this);
|
|
255
251
|
};
|
|
256
252
|
}
|
|
257
|
-
}, re = (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,
|
|
253
|
+
}, re = (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) => {
|
|
258
254
|
if (!n)
|
|
259
255
|
return {
|
|
260
256
|
x: 0,
|
|
@@ -280,8 +276,8 @@ const T = ie(() => {
|
|
|
280
276
|
}, $ = (n) => ({
|
|
281
277
|
x: n.x + n.width / 2,
|
|
282
278
|
y: n.y + n.height / 2
|
|
283
|
-
}),
|
|
284
|
-
const t =
|
|
279
|
+
}), Le = (n, e) => {
|
|
280
|
+
const t = R(n);
|
|
285
281
|
return {
|
|
286
282
|
pixel: {
|
|
287
283
|
x: e.x - t.x,
|
|
@@ -306,7 +302,7 @@ const T = ie(() => {
|
|
|
306
302
|
return (a / o * 100 + a / l * 100) / 2;
|
|
307
303
|
}, se = "data-vue-dnd-kit-draggable", S = (n) => {
|
|
308
304
|
n.preventDefault();
|
|
309
|
-
},
|
|
305
|
+
}, ze = (n) => {
|
|
310
306
|
const {
|
|
311
307
|
elementsMap: e,
|
|
312
308
|
draggingElements: t,
|
|
@@ -317,7 +313,7 @@ const T = ie(() => {
|
|
|
317
313
|
handleDragElementIntersection: c
|
|
318
314
|
} = T(), s = K(null), i = C(
|
|
319
315
|
() => l.value.has(s.value) && r.element.value === s.value
|
|
320
|
-
), u =
|
|
316
|
+
), u = V((n == null ? void 0 : n.id) || ye()), d = C(() => !s.value || !l.value.has(s.value) ? !1 : t.value.has(s.value)), v = C(() => {
|
|
321
317
|
if (!s.value || !o.value || !l.value.has(s.value)) return !1;
|
|
322
318
|
const h = e.value.get(s.value);
|
|
323
319
|
return h != null && h.groups.length ? !Array.from(t.value.entries()).some(
|
|
@@ -348,16 +344,16 @@ const T = ie(() => {
|
|
|
348
344
|
isAllowed: v,
|
|
349
345
|
id: u
|
|
350
346
|
};
|
|
351
|
-
}, k = (n, e) => n ? e.contains(n) : !1,
|
|
347
|
+
}, k = (n, e) => n ? e.contains(n) : !1, Se = (n) => {
|
|
352
348
|
var u, d;
|
|
353
|
-
const e =
|
|
349
|
+
const e = R(n.activeContainer.ref.value), t = $(e), r = ((u = n.pointerPosition.current.value) == null ? void 0 : u.x) ?? 0, a = ((d = n.pointerPosition.current.value) == null ? void 0 : d.y) ?? 0, l = !(e && r >= e.x && r <= e.x + e.width && a >= e.y && a <= e.y + e.height), c = Array.from(n.draggingElements.value.keys()), s = Array.from(n.visibleElements.value.entries()).filter(([v, g]) => {
|
|
354
350
|
if (!v) return !1;
|
|
355
|
-
const m =
|
|
351
|
+
const m = R(v);
|
|
356
352
|
return m && e && re(m, e);
|
|
357
353
|
}).map(([v, g]) => {
|
|
358
|
-
const m =
|
|
354
|
+
const m = R(v), h = $(m), z = r >= m.x && r <= m.x + m.width && a >= m.y && a <= m.y + m.height, w = le(m, e), _ = ae(t, h);
|
|
359
355
|
let P = 0;
|
|
360
|
-
for (const [A,
|
|
356
|
+
for (const [A, U] of n.visibleElements.value.entries())
|
|
361
357
|
A !== v && A && v && k(v, A) && P++;
|
|
362
358
|
return {
|
|
363
359
|
element: g,
|
|
@@ -380,12 +376,12 @@ const T = ie(() => {
|
|
|
380
376
|
(h) => h && k(v, h)
|
|
381
377
|
))
|
|
382
378
|
return !1;
|
|
383
|
-
const m =
|
|
379
|
+
const m = R(v);
|
|
384
380
|
return m && e && re(m, e);
|
|
385
381
|
}).map(([v, g]) => {
|
|
386
|
-
const m =
|
|
382
|
+
const m = R(v), h = $(m), z = r >= m.x && r <= m.x + m.width && a >= m.y && a <= m.y + m.height, w = le(m, e), _ = ae(t, h);
|
|
387
383
|
let P = 0;
|
|
388
|
-
for (const [A,
|
|
384
|
+
for (const [A, U] of n.visibleZones.value.entries())
|
|
389
385
|
A !== v && A && v && k(v, A) && P++;
|
|
390
386
|
return {
|
|
391
387
|
zone: g,
|
|
@@ -408,13 +404,13 @@ const T = ie(() => {
|
|
|
408
404
|
...s.map((v) => v.node),
|
|
409
405
|
...i.map((v) => v.node)
|
|
410
406
|
];
|
|
411
|
-
},
|
|
407
|
+
}, _e = (n, e) => {
|
|
412
408
|
const { pointerPosition: t, keyboard: r } = T(), a = (e == null ? void 0 : e.moveStep) || 10;
|
|
413
409
|
return {
|
|
414
410
|
onKeyboardStart: (s) => {
|
|
415
411
|
var v;
|
|
416
412
|
S(s);
|
|
417
|
-
const i =
|
|
413
|
+
const i = R(n.value);
|
|
418
414
|
(v = n.value) == null || v.blur();
|
|
419
415
|
const u = i.x + i.width / 2, d = i.y + i.height / 2;
|
|
420
416
|
t.start.value = {
|
|
@@ -444,7 +440,7 @@ const T = ie(() => {
|
|
|
444
440
|
t.current.value = null, t.start.value = null, t.offset.pixel.value = null, t.offset.percent.value = null;
|
|
445
441
|
}
|
|
446
442
|
};
|
|
447
|
-
},
|
|
443
|
+
}, De = (n) => {
|
|
448
444
|
const e = T();
|
|
449
445
|
return {
|
|
450
446
|
onPointerStart: (o) => {
|
|
@@ -452,7 +448,7 @@ const T = ie(() => {
|
|
|
452
448
|
x: o.clientX,
|
|
453
449
|
y: o.clientY
|
|
454
450
|
};
|
|
455
|
-
const { pixel: l, percent: c } =
|
|
451
|
+
const { pixel: l, percent: c } = Le(n.value, {
|
|
456
452
|
x: o.clientX,
|
|
457
453
|
y: o.clientY
|
|
458
454
|
});
|
|
@@ -468,9 +464,9 @@ const T = ie(() => {
|
|
|
468
464
|
e.pointerPosition.current.value = null, e.pointerPosition.start.value = null, e.pointerPosition.offset.pixel.value = null, e.pointerPosition.offset.percent.value = null;
|
|
469
465
|
}
|
|
470
466
|
};
|
|
471
|
-
},
|
|
472
|
-
var
|
|
473
|
-
const t = T(), { onPointerStart: r, onPointerMove: a, onPointerEnd: o } =
|
|
467
|
+
}, Ie = (n, e) => {
|
|
468
|
+
var U, Z;
|
|
469
|
+
const t = T(), { onPointerStart: r, onPointerMove: a, onPointerEnd: o } = De(n), { onKeyboardStart: l, onKeyboardMove: c, onKeyboardEnd: s } = _e(
|
|
474
470
|
n,
|
|
475
471
|
e == null ? void 0 : e.keyboard
|
|
476
472
|
);
|
|
@@ -483,11 +479,11 @@ const T = ie(() => {
|
|
|
483
479
|
const L = /* @__PURE__ */ new Map();
|
|
484
480
|
return Array.from(t.selectedElementsMap.value.entries()).forEach(
|
|
485
481
|
([I, Y]) => {
|
|
486
|
-
var
|
|
482
|
+
var H, O;
|
|
487
483
|
L.set(I, {
|
|
488
484
|
...Y,
|
|
489
|
-
initialHTML: ((
|
|
490
|
-
initialRect: (
|
|
485
|
+
initialHTML: ((H = Y.node) == null ? void 0 : H.outerHTML) ?? "",
|
|
486
|
+
initialRect: (O = Y.node) == null ? void 0 : O.getBoundingClientRect()
|
|
491
487
|
});
|
|
492
488
|
}
|
|
493
489
|
), L;
|
|
@@ -511,7 +507,7 @@ const T = ie(() => {
|
|
|
511
507
|
(I) => I && (I === L.node || k(L.node, I))
|
|
512
508
|
) || L.groups.length && !!Array.from(
|
|
513
509
|
t.draggingElements.value.values()
|
|
514
|
-
).some((Y) => Y.groups.length ? !Y.groups.some((
|
|
510
|
+
).some((Y) => Y.groups.length ? !Y.groups.some((H) => L.groups.includes(H)) : !1));
|
|
515
511
|
});
|
|
516
512
|
return E ? {
|
|
517
513
|
element: x.find(
|
|
@@ -527,11 +523,11 @@ const T = ie(() => {
|
|
|
527
523
|
) || null,
|
|
528
524
|
zone: E
|
|
529
525
|
} : { element: null, zone: null };
|
|
530
|
-
}, v = ((
|
|
531
|
-
var E, D, M, L, I, Y,
|
|
526
|
+
}, v = ((U = e == null ? void 0 : e.sensor) == null ? void 0 : U.setup) || Se, g = (f) => {
|
|
527
|
+
var E, D, M, L, I, Y, H, O, j, J, X, Q;
|
|
532
528
|
const x = t.hovered.element.value, p = t.hovered.zone.value;
|
|
533
|
-
t.hovered.element.value = f.element, t.hovered.zone.value = f.zone, x && t.hovered.element.value !== x && ((M = (D = (E = t.elementsMap.value.get(x)) == null ? void 0 : E.events) == null ? void 0 : D.onLeave) == null || M.call(D, t), t.hovered.element.value && ((Y = (I = (L = t.elementsMap.value.get(t.hovered.element.value)) == null ? void 0 : L.events) == null ? void 0 : I.onHover) == null || Y.call(I, t))), p && t.hovered.zone.value !== p && ((j = (
|
|
534
|
-
}, m =
|
|
529
|
+
t.hovered.element.value = f.element, t.hovered.zone.value = f.zone, x && t.hovered.element.value !== x && ((M = (D = (E = t.elementsMap.value.get(x)) == null ? void 0 : E.events) == null ? void 0 : D.onLeave) == null || M.call(D, t), t.hovered.element.value && ((Y = (I = (L = t.elementsMap.value.get(t.hovered.element.value)) == null ? void 0 : L.events) == null ? void 0 : I.onHover) == null || Y.call(I, t))), p && t.hovered.zone.value !== p && ((j = (O = (H = t.zonesMap.value.get(p)) == null ? void 0 : H.events) == null ? void 0 : O.onLeave) == null || j.call(O, t), t.hovered.zone.value && ((Q = (X = (J = t.zonesMap.value.get(t.hovered.zone.value)) == null ? void 0 : J.events) == null ? void 0 : X.onHover) == null || Q.call(X, t)));
|
|
530
|
+
}, m = Me(() => {
|
|
535
531
|
const f = v(t), x = d(f);
|
|
536
532
|
g(x);
|
|
537
533
|
}, ((Z = e == null ? void 0 : e.sensor) == null ? void 0 : Z.throttle) ?? 0), h = () => {
|
|
@@ -574,7 +570,7 @@ const T = ie(() => {
|
|
|
574
570
|
t.draggingElements.value.clear(), t.hovered.zone.value = null, t.hovered.element.value = null, w();
|
|
575
571
|
}
|
|
576
572
|
};
|
|
577
|
-
},
|
|
573
|
+
}, be = ie(() => {
|
|
578
574
|
let n = "", e = "", t = "", r = null, a = null, o = null, l = null, c = null;
|
|
579
575
|
const { activeContainer: s } = T(), i = () => {
|
|
580
576
|
const g = document.body;
|
|
@@ -587,8 +583,8 @@ const T = ie(() => {
|
|
|
587
583
|
};
|
|
588
584
|
return {
|
|
589
585
|
handleDragStart: (g, m, h) => {
|
|
590
|
-
d(), g.target.blur(), h != null && h.container && (s.component.value =
|
|
591
|
-
const { activate: z, track: w, deactivate: _ } =
|
|
586
|
+
d(), g.target.blur(), h != null && h.container && (s.component.value = Ee(h.container));
|
|
587
|
+
const { activate: z, track: w, deactivate: _ } = Ie(m, h);
|
|
592
588
|
a = () => {
|
|
593
589
|
s.component.value = null, u(), _(!0), d();
|
|
594
590
|
}, o = () => {
|
|
@@ -598,7 +594,7 @@ const T = ie(() => {
|
|
|
598
594
|
}, i(), z(g), document.addEventListener("pointermove", r), document.addEventListener("pointerup", a), document.addEventListener("wheel", l), document.addEventListener("keydown", c), document.addEventListener("keypress", c), document.addEventListener("keyup", c);
|
|
599
595
|
}
|
|
600
596
|
};
|
|
601
|
-
}),
|
|
597
|
+
}), Te = (n) => {
|
|
602
598
|
const {
|
|
603
599
|
id: e,
|
|
604
600
|
elementRef: t,
|
|
@@ -607,7 +603,7 @@ const T = ie(() => {
|
|
|
607
603
|
isAllowed: o,
|
|
608
604
|
registerElement: l,
|
|
609
605
|
unregisterElement: c
|
|
610
|
-
} =
|
|
606
|
+
} = ze(n), { pointerPosition: s } = T(), { handleDragStart: i } = be(), u = (d) => i(d, t, n);
|
|
611
607
|
return q(l), G(c), {
|
|
612
608
|
pointerPosition: s,
|
|
613
609
|
elementRef: t,
|
|
@@ -617,7 +613,7 @@ const T = ie(() => {
|
|
|
617
613
|
handleDragStart: u,
|
|
618
614
|
id: e
|
|
619
615
|
};
|
|
620
|
-
},
|
|
616
|
+
}, ke = (n) => {
|
|
621
617
|
const {
|
|
622
618
|
zonesMap: e,
|
|
623
619
|
hovered: t,
|
|
@@ -642,8 +638,8 @@ const T = ie(() => {
|
|
|
642
638
|
}, unregisterZone: () => {
|
|
643
639
|
l.value && (o("remove", l.value), e.value.delete(l.value));
|
|
644
640
|
}, isOvered: c, isAllowed: s };
|
|
645
|
-
},
|
|
646
|
-
const { elementRef: e, registerZone: t, unregisterZone: r, isOvered: a, isAllowed: o } =
|
|
641
|
+
}, Ye = (n) => {
|
|
642
|
+
const { elementRef: e, registerZone: t, unregisterZone: r, isOvered: a, isAllowed: o } = ke(n);
|
|
647
643
|
return q(t), G(r), { elementRef: e, isOvered: a, isAllowed: o };
|
|
648
644
|
}, Ve = (n) => {
|
|
649
645
|
const { selectedElementsMap: e, elementsMap: t } = T(), r = C(
|
|
@@ -687,12 +683,12 @@ const T = ie(() => {
|
|
|
687
683
|
};
|
|
688
684
|
export {
|
|
689
685
|
te as DnDOperations,
|
|
690
|
-
|
|
691
|
-
|
|
686
|
+
Ke as default,
|
|
687
|
+
R as getBoundingBox,
|
|
692
688
|
T as useDnDStore,
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
689
|
+
we as useDragContainer,
|
|
690
|
+
Te as useDraggable,
|
|
691
|
+
Ye as useDroppable,
|
|
696
692
|
Ve as useSelection
|
|
697
693
|
};
|
|
698
694
|
//# sourceMappingURL=vue-dnd-kit-core.es.js.map
|
|
@@ -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 store.draggingElements.value.forEach((element) =>\r\n DnDOperations.move(\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 );\r\n } else if (hoveredZone) {\r\n store.draggingElements.value.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n store.zonesMap.value.get(hoveredZone)?.data?.source,\r\n store.zonesMap.value.get(hoveredZone)?.data?.source?.length\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 store.draggingElements.value.forEach((element) =>\r\n DnDOperations.copy(\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 );\r\n } else if (hoveredZone) {\r\n store.draggingElements.value.forEach((element) =>\r\n DnDOperations.copy(\r\n element.data?.source,\r\n element.data?.index,\r\n store.zonesMap.value.get(hoveredZone)?.data?.source,\r\n store.zonesMap.value.get(hoveredZone)?.data?.source?.length\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 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 store.draggingElements.value.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n store.zonesMap.value.get(hoveredZone)?.data?.source,\r\n store.zonesMap.value.get(hoveredZone)?.data?.source?.length\r\n )\r\n );\r\n }\r\n };\r\n static applyRemove = (store: IDnDStore) => {\r\n store.draggingElements.value.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 if (hoveredElement && items.length > 0) {\r\n items.forEach((item) => {\r\n DnDOperations.insert(\r\n store.elementsMap.value.get(hoveredElement)?.data?.source,\r\n store.elementsMap.value.get(hoveredElement)?.data?.index,\r\n item\r\n );\r\n });\r\n } else if (hoveredZone) {\r\n items.forEach((item) => {\r\n DnDOperations.insert(\r\n store.zonesMap.value.get(hoveredZone)?.data?.source,\r\n store.zonesMap.value.get(hoveredZone)?.data?.source?.length,\r\n item\r\n );\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 { computed, ref, shallowRef, type Component, onUnmounted } 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 };\r\n\r\n const elementsMap = ref<Map<HTMLElement | Element, IDragElement>>(new Map());\r\n const selectedElementsMap = ref<Map<HTMLElement | Element, IDragElement>>(\r\n new Map()\r\n );\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 onUnmounted(() => {\r\n elementObserver.disconnect();\r\n zoneObserver.disconnect();\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 selectedElementsMap,\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 { onBeforeUnmount, onMounted, ref } from 'vue';\r\n\r\nimport { useDnDStore } from './useDnDStore';\r\n\r\nexport const useDragContainer = () => {\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 });\r\n\r\n onBeforeUnmount(() => {\r\n activeContainer.ref.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 () => activeContainer.component.value ?? DefaultOverlay\r\n );\r\n</script>\r\n\r\n<template>\r\n <component :is=\"overlay\" />\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\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 app.__VUE_DND_KIT_OVERLAY__ = {\r\n container: overlayContainer,\r\n vnode,\r\n };\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 }\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 selectedElementsMap,\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 selectedElementsMap.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.selectedElementsMap.value.has(draggableElement);\r\n\r\n if (store.selectedElementsMap.value.size > 0 && isDraggableInSelection) {\r\n const result = new Map<HTMLElement | Element, IDraggingElement>();\r\n\r\n Array.from(store.selectedElementsMap.value.entries()).forEach(\r\n ([node, element]) => {\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\r\n return result;\r\n }\r\n\r\n store.selectedElementsMap.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.selectedElementsMap.value.clear();\r\n }\r\n store.draggingElements.value.clear();\r\n\r\n store.hovered.zone.value = null;\r\n store.hovered.element.value = null;\r\n\r\n stopDetection();\r\n };\r\n\r\n return {\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 { selectedElementsMap, elementsMap } = useDnDStore();\r\n\r\n const isSelected = computed<boolean>(() =>\r\n elementRef.value ? selectedElementsMap.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 selectedElementsMap.value.entries()) {\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 selectedElementsMap.value.entries()) {\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 selectedElementsMap.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 [...selectedElementsMap.value.entries()]) {\r\n if (\r\n node &&\r\n isDescendant(node as HTMLElement, elementRef.value as HTMLElement)\r\n ) {\r\n selectedElementsMap.value.delete(node);\r\n }\r\n }\r\n }\r\n\r\n if (hasSelectedParent.value) {\r\n // Удаляем все родительские выбранные элементы\r\n for (const [node, _] of [...selectedElementsMap.value.entries()]) {\r\n if (\r\n node &&\r\n isDescendant(elementRef.value as HTMLElement, node as HTMLElement)\r\n ) {\r\n selectedElementsMap.value.delete(node);\r\n }\r\n }\r\n }\r\n\r\n selectedElementsMap.value.set(elementRef.value, element);\r\n };\r\n\r\n const handleToggleSelect = () => {\r\n if (!elementRef.value) return;\r\n\r\n selectedElementsMap.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","element","_a","_b","_d","_c","_f","_e","_g","items","DnDOperations","useDnDStore","createGlobalState","draggingElements","ref","isDragging","computed","activeContainer","shallowRef","elementsMap","selectedElementsMap","zonesMap","visibleZones","visibleElements","elementObserver","entries","entry","zoneObserver","handleDragElementIntersection","action","handleDropZoneIntersection","onUnmounted","pointerPosition","w","s","a","d","ctrl","shift","alt","meta","useMagicKeys","hovered","useDragContainer","elementRef","onMounted","onBeforeUnmount","computedStyle","overlay","DefaultOverlay","VueDndKitPlugin","app","DragOverlay","originalMount","rootContainer","instance","rootEl","overlayContainer","vnode","createVNode","render","originalUnmount","checkCollision","boxA","boxB","getBoundingBox","rect","getCenter","box","getOffset","pointer","getDistance","pointA","pointB","dx","dy","getOverlapPercent","xOverlap","yOverlap","overlapArea","boxAArea","boxBArea","draggableDataName","preventEvent","event","useElementManager","options","isDragStarted","isOvered","id","useId","isAllowed","currentElement","_","draggingElement","group","isDescendant","container","defaultCollisionDetection","containerRect","containerCenter","pointerX","pointerY","shouldUseNormalPriority","activeDragNodes","allCollidingElements","node","elementCenter","isPointerInElement","overlapPercent","centerDistance","depth","parentNode","b","allCollidingZones","dragNode","zone","zoneCenter","useKeyboard","keyboard","moveStep","centerX","centerY","currentX","currentY","newX","newY","usePointer","pixel","percent","useSensor","onPointerStart","onPointerMove","onPointerEnd","onKeyboardStart","onKeyboardMove","onKeyboardEnd","animationFrameId","getDraggingElements","draggableElement","isDraggableInSelection","result","processUserCollisionResults","htmlElements","elements","filteredZoneElement","htmlElement","detectCollisions","processCollisionResults","results","previousElement","previousZone","_i","_h","_l","_k","_j","throttledDetectAndProcess","useThrottleFn","processedResults","animationLoop","startDetection","stopDetection","triggerEvents","useEventManager","originalUserSelect","originalTouchAction","originalOverscrollBehavior","currentMoveHandler","currentEndHandler","currentCancelHandler","currentScrollHandler","currentKeyHandler","disableInteractions","body","enableInteractions","clearAllListeners","markRaw","activate","track","deactivate","useDraggable","registerElement","unregisterElement","start","handleDragStart","useZoneManager","currentZone","useDroppable","registerZone","unregisterZone","useSelection","isSelected","isParentOfSelected","hasSelectedParent","handleUnselect","handleSelect"],"mappings":"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"}
|
|
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 store.draggingElements.value.forEach((element) =>\r\n DnDOperations.move(\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 );\r\n } else if (hoveredZone) {\r\n store.draggingElements.value.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n store.zonesMap.value.get(hoveredZone)?.data?.source,\r\n store.zonesMap.value.get(hoveredZone)?.data?.source?.length\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 store.draggingElements.value.forEach((element) =>\r\n DnDOperations.copy(\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 );\r\n } else if (hoveredZone) {\r\n store.draggingElements.value.forEach((element) =>\r\n DnDOperations.copy(\r\n element.data?.source,\r\n element.data?.index,\r\n store.zonesMap.value.get(hoveredZone)?.data?.source,\r\n store.zonesMap.value.get(hoveredZone)?.data?.source?.length\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 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 store.draggingElements.value.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n store.zonesMap.value.get(hoveredZone)?.data?.source,\r\n store.zonesMap.value.get(hoveredZone)?.data?.source?.length\r\n )\r\n );\r\n }\r\n };\r\n static applyRemove = (store: IDnDStore) => {\r\n store.draggingElements.value.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 if (hoveredElement && items.length > 0) {\r\n items.forEach((item) => {\r\n DnDOperations.insert(\r\n store.elementsMap.value.get(hoveredElement)?.data?.source,\r\n store.elementsMap.value.get(hoveredElement)?.data?.index,\r\n item\r\n );\r\n });\r\n } else if (hoveredZone) {\r\n items.forEach((item) => {\r\n DnDOperations.insert(\r\n store.zonesMap.value.get(hoveredZone)?.data?.source,\r\n store.zonesMap.value.get(hoveredZone)?.data?.source?.length,\r\n item\r\n );\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 { computed, ref, shallowRef, type Component } 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 };\r\n\r\n const elementsMap = ref<Map<HTMLElement | Element, IDragElement>>(new Map());\r\n const selectedElementsMap = ref<Map<HTMLElement | Element, IDragElement>>(\r\n new Map()\r\n );\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 selectedElementsMap,\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 { onBeforeUnmount, onMounted, ref } from 'vue';\r\n\r\nimport { useDnDStore } from './useDnDStore';\r\n\r\nexport const useDragContainer = () => {\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 });\r\n\r\n onBeforeUnmount(() => {\r\n activeContainer.ref.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 () => activeContainer.component.value ?? DefaultOverlay\r\n );\r\n</script>\r\n\r\n<template>\r\n <component :is=\"overlay\" />\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\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 app.__VUE_DND_KIT_OVERLAY__ = {\r\n container: overlayContainer,\r\n vnode,\r\n };\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 }\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 selectedElementsMap,\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 selectedElementsMap.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.selectedElementsMap.value.has(draggableElement);\r\n\r\n if (store.selectedElementsMap.value.size > 0 && isDraggableInSelection) {\r\n const result = new Map<HTMLElement | Element, IDraggingElement>();\r\n\r\n Array.from(store.selectedElementsMap.value.entries()).forEach(\r\n ([node, element]) => {\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\r\n return result;\r\n }\r\n\r\n store.selectedElementsMap.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.selectedElementsMap.value.clear();\r\n }\r\n store.draggingElements.value.clear();\r\n\r\n store.hovered.zone.value = null;\r\n store.hovered.element.value = null;\r\n\r\n stopDetection();\r\n };\r\n\r\n return {\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 { selectedElementsMap, elementsMap } = useDnDStore();\r\n\r\n const isSelected = computed<boolean>(() =>\r\n elementRef.value ? selectedElementsMap.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 selectedElementsMap.value.entries()) {\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 selectedElementsMap.value.entries()) {\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 selectedElementsMap.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 [...selectedElementsMap.value.entries()]) {\r\n if (\r\n node &&\r\n isDescendant(node as HTMLElement, elementRef.value as HTMLElement)\r\n ) {\r\n selectedElementsMap.value.delete(node);\r\n }\r\n }\r\n }\r\n\r\n if (hasSelectedParent.value) {\r\n // Удаляем все родительские выбранные элементы\r\n for (const [node, _] of [...selectedElementsMap.value.entries()]) {\r\n if (\r\n node &&\r\n isDescendant(elementRef.value as HTMLElement, node as HTMLElement)\r\n ) {\r\n selectedElementsMap.value.delete(node);\r\n }\r\n }\r\n }\r\n\r\n selectedElementsMap.value.set(elementRef.value, element);\r\n };\r\n\r\n const handleToggleSelect = () => {\r\n if (!elementRef.value) return;\r\n\r\n selectedElementsMap.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","element","_a","_b","_d","_c","_f","_e","_g","items","DnDOperations","useDnDStore","createGlobalState","draggingElements","ref","isDragging","computed","activeContainer","shallowRef","elementsMap","selectedElementsMap","zonesMap","visibleZones","visibleElements","elementObserver","entries","entry","zoneObserver","handleDragElementIntersection","action","handleDropZoneIntersection","pointerPosition","w","s","a","d","ctrl","shift","alt","meta","useMagicKeys","hovered","useDragContainer","elementRef","onMounted","onBeforeUnmount","computedStyle","overlay","DefaultOverlay","VueDndKitPlugin","app","DragOverlay","originalMount","rootContainer","instance","rootEl","overlayContainer","vnode","createVNode","render","originalUnmount","checkCollision","boxA","boxB","getBoundingBox","rect","getCenter","box","getOffset","pointer","getDistance","pointA","pointB","dx","dy","getOverlapPercent","xOverlap","yOverlap","overlapArea","boxAArea","boxBArea","draggableDataName","preventEvent","event","useElementManager","options","isDragStarted","isOvered","id","useId","isAllowed","currentElement","_","draggingElement","group","isDescendant","container","defaultCollisionDetection","containerRect","containerCenter","pointerX","pointerY","shouldUseNormalPriority","activeDragNodes","allCollidingElements","node","elementCenter","isPointerInElement","overlapPercent","centerDistance","depth","parentNode","b","allCollidingZones","dragNode","zone","zoneCenter","useKeyboard","keyboard","moveStep","centerX","centerY","currentX","currentY","newX","newY","usePointer","pixel","percent","useSensor","onPointerStart","onPointerMove","onPointerEnd","onKeyboardStart","onKeyboardMove","onKeyboardEnd","animationFrameId","getDraggingElements","draggableElement","isDraggableInSelection","result","processUserCollisionResults","htmlElements","elements","filteredZoneElement","htmlElement","detectCollisions","processCollisionResults","results","previousElement","previousZone","_i","_h","_l","_k","_j","throttledDetectAndProcess","useThrottleFn","processedResults","animationLoop","startDetection","stopDetection","triggerEvents","useEventManager","originalUserSelect","originalTouchAction","originalOverscrollBehavior","currentMoveHandler","currentEndHandler","currentCancelHandler","currentScrollHandler","currentKeyHandler","disableInteractions","body","enableInteractions","clearAllListeners","markRaw","activate","track","deactivate","useDraggable","registerElement","unregisterElement","start","handleDragStart","useZoneManager","currentZone","useDroppable","registerZone","unregisterZone","useSelection","isSelected","isParentOfSelected","hasSelectedParent","handleUnselect","handleSelect"],"mappings":"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"}
|
package/package.json
CHANGED