@vue-dnd-kit/core 1.6.0 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts
CHANGED
|
@@ -108,6 +108,12 @@ export declare interface IPluginOptions {
|
|
|
108
108
|
defaultOverlay?: {
|
|
109
109
|
styles?: CSSProperties;
|
|
110
110
|
};
|
|
111
|
+
overlayPosition?: {
|
|
112
|
+
target?: string | Element | HTMLElement;
|
|
113
|
+
method?: 'append' | 'prepend' | 'after' | 'before';
|
|
114
|
+
zIndex?: number;
|
|
115
|
+
className?: string;
|
|
116
|
+
};
|
|
111
117
|
}
|
|
112
118
|
|
|
113
119
|
export declare interface IPoint {
|
|
@@ -149,6 +155,7 @@ export declare interface IUseDragOptions extends IUseSensorOptions {
|
|
|
149
155
|
};
|
|
150
156
|
layer?: Component | null;
|
|
151
157
|
container?: Component;
|
|
158
|
+
containerProps?: Record<string, any>;
|
|
152
159
|
sensor?: {
|
|
153
160
|
throttle?: number;
|
|
154
161
|
setup?: (store: IDnDStore) => Element | Element[] | null;
|
|
@@ -953,6 +960,7 @@ export declare const useDnDStore: () => {
|
|
|
953
960
|
} | null>;
|
|
954
961
|
ref: ShallowRef<HTMLElement | null, HTMLElement | null>;
|
|
955
962
|
options: ShallowRef<TransitionProps | null, TransitionProps | null>;
|
|
963
|
+
props: ShallowRef<null, null> | ShallowRef<Record<string, any>, Record<string, any>>;
|
|
956
964
|
animating: {
|
|
957
965
|
enter: ShallowRef<boolean, boolean>;
|
|
958
966
|
leave: ShallowRef<boolean, boolean>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var re=Object.defineProperty;var ae=(n,t,e)=>t in n?re(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e;var Z=(n,t,e)=>ae(n,typeof t!="symbol"?t+"":t,e);Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("vue"),q=require("@vueuse/core"),P=class P{};Z(P,"remove",(t,e)=>{if(!t||e===void 0)return;const[a]=t.splice(e,1);return a}),Z(P,"insert",(t,e,a)=>{!t||e===void 0||t.splice(e,0,a)}),Z(P,"move",(t,e,a,s)=>{if(!t||!a||e===void 0||s===void 0)return;const o=P.remove(t,e);P.insert(a,s,o)}),Z(P,"swap",(t,e,a,s)=>{if(!t||!a||e===void 0||s===void 0)return;const o=t[e],i=a[s];t[e]=i,a[s]=o}),Z(P,"copy",(t,e,a,s)=>{if(!t||e===void 0||!a||s===void 0)return;const o=t[e];P.insert(a,s,o)}),Z(P,"applyTransfer",t=>{var s,o,i,m,u,c,f;const e=t.hovered.element.value,a=t.hovered.zone.value;if(e){const g=(o=(s=t.elementsMap.value.get(e))==null?void 0:s.data)==null?void 0:o.source,l=(m=(i=t.elementsMap.value.get(e))==null?void 0:i.data)==null?void 0:m.index,v=t.draggingElements.value.values().next().value,d=(u=v==null?void 0:v.data)==null?void 0:u.index,p=d!==void 0&&l!==void 0&&d>l?1:-1;Array.from(t.draggingElements.value.values()).sort((h,S)=>{var L,D;return p*((((L=h.data)==null?void 0:L.index)||0)-(((D=S.data)==null?void 0:D.index)||0))}).forEach(h=>{var S,L;return P.move((S=h.data)==null?void 0:S.source,(L=h.data)==null?void 0:L.index,g,l)})}else if(a){const g=(f=(c=t.zonesMap.value.get(a))==null?void 0:c.data)==null?void 0:f.source,l=g==null?void 0:g.length;Array.from(t.draggingElements.value.values()).sort((d,p)=>{var w,h;return(((w=p.data)==null?void 0:w.index)||0)-(((h=d.data)==null?void 0:h.index)||0)}).forEach(d=>{var p,w;return P.move((p=d.data)==null?void 0:p.source,(w=d.data)==null?void 0:w.index,g,l)})}}),Z(P,"applyCopy",t=>{var s,o,i,m,u,c;const e=t.hovered.element.value,a=t.hovered.zone.value;if(e){const f=(o=(s=t.elementsMap.value.get(e))==null?void 0:s.data)==null?void 0:o.source,g=(m=(i=t.elementsMap.value.get(e))==null?void 0:i.data)==null?void 0:m.index;Array.from(t.draggingElements.value.values()).sort((v,d)=>{var p,w;return(((p=d.data)==null?void 0:p.index)||0)-(((w=v.data)==null?void 0:w.index)||0)}).forEach(v=>{var d,p;return P.copy((d=v.data)==null?void 0:d.source,(p=v.data)==null?void 0:p.index,f,g)})}else if(a){const f=(c=(u=t.zonesMap.value.get(a))==null?void 0:u.data)==null?void 0:c.source,g=f==null?void 0:f.length;Array.from(t.draggingElements.value.values()).sort((v,d)=>{var p,w;return(((p=d.data)==null?void 0:p.index)||0)-(((w=v.data)==null?void 0:w.index)||0)}).forEach(v=>{var d,p;return P.copy((d=v.data)==null?void 0:d.source,(p=v.data)==null?void 0:p.index,f,g)})}}),Z(P,"applySwap",t=>{var s,o,i,m,u,c,f,g;const e=t.hovered.element.value,a=t.hovered.zone.value;if(e&&t.draggingElements.value.size===1){const l=t.draggingElements.value.values().next().value;P.swap((s=l==null?void 0:l.data)==null?void 0:s.source,(o=l==null?void 0:l.data)==null?void 0:o.index,(m=(i=t.elementsMap.value.get(e))==null?void 0:i.data)==null?void 0:m.source,(c=(u=t.elementsMap.value.get(e))==null?void 0:u.data)==null?void 0:c.index)}else if(a){const l=(g=(f=t.zonesMap.value.get(a))==null?void 0:f.data)==null?void 0:g.source,v=l==null?void 0:l.length;Array.from(t.draggingElements.value.values()).sort((p,w)=>{var h,S;return(((h=w.data)==null?void 0:h.index)||0)-(((S=p.data)==null?void 0:S.index)||0)}).forEach(p=>{var w,h;return P.move((w=p.data)==null?void 0:w.source,(h=p.data)==null?void 0:h.index,l,v)})}}),Z(P,"applyRemove",t=>{Array.from(t.draggingElements.value.values()).sort((a,s)=>{var o,i;return(((o=s.data)==null?void 0:o.index)||0)-(((i=a.data)==null?void 0:i.index)||0)}).forEach(a=>{var s,o;(s=a.data)!=null&&s.source&&((o=a.data)==null?void 0:o.index)!==void 0&&P.remove(a.data.source,a.data.index)})}),Z(P,"applyInsert",(t,e)=>{var o,i,m,u,c,f;const a=t.hovered.element.value,s=t.hovered.zone.value;if(a&&e.length>0){const g=(i=(o=t.elementsMap.value.get(a))==null?void 0:o.data)==null?void 0:i.source,l=(u=(m=t.elementsMap.value.get(a))==null?void 0:m.data)==null?void 0:u.index;e.forEach(v=>{P.insert(g,l,v)})}else if(s){const g=(f=(c=t.zonesMap.value.get(s))==null?void 0:c.data)==null?void 0:f.source,l=g==null?void 0:g.length;e.forEach(v=>{P.insert(g,l,v)})}});let G=P;const T=q.createGlobalState(()=>{const n=r.shallowRef(!1),t=r.ref(new Map),e=r.computed(()=>t.value.size>0),a={component:r.ref(null),ref:r.shallowRef(null),options:r.shallowRef(null),animating:{enter:r.shallowRef(!1),leave:r.shallowRef(!1),appear:r.shallowRef(!1)}},s=r.ref(new Map),o=r.ref(new Set),i=r.ref(new Map),m=r.shallowRef(new Set),u=r.shallowRef(new Set),c=typeof window<"u"&&"IntersectionObserver"in window,f=c?new IntersectionObserver(x=>{x.forEach(y=>u.value[y.isIntersecting?"add":"delete"](y.target))}):null,g=c?new IntersectionObserver(x=>{x.forEach(y=>m.value[y.isIntersecting?"add":"delete"](y.target))}):null,l=(x,y)=>{f&&(x==="add"?f.observe(y):(f.unobserve(y),u.value.delete(y)))},v=(x,y)=>{g&&(x==="add"?g.observe(y):(g.unobserve(y),m.value.delete(y)))},d={start:r.shallowRef(null),current:r.shallowRef(null),offset:{percent:r.shallowRef(null),pixel:r.shallowRef(null)}},{KeyW:p,KeyS:w,KeyA:h,KeyD:S,ctrl:L,shift:D,alt:O,meta:C}=q.useMagicKeys(),M={zone:r.shallowRef(null),element:r.shallowRef(null)};return{draggingElements:t,isDragging:e,activeContainer:a,elementsMap:s,selectedElements:o,zonesMap:i,visibleZones:m,visibleElements:u,pointerPosition:d,keyboard:{w:p,s:w,a:h,d:S,ctrl:L,shift:D,alt:O,meta:C},hovered:M,isPending:n,handleDragElementIntersection:l,handleDropZoneIntersection:v}}),ne=n=>{const t=r.ref(null),{draggingElements:e,pointerPosition:a,isDragging:s,activeContainer:o}=T();return r.onMounted(()=>{o.ref=t,o.options.value=n??null}),r.onUnmounted(()=>{o.ref.value=null,o.options.value=null}),{elementRef:t,draggingElements:e,pointerPosition:a,isDragging:s,animating:o.animating}},le=["innerHTML"],se=r.defineComponent({__name:"DefaultOverlay",props:{styles:{}},setup(n){const{elementRef:t,pointerPosition:e,isDragging:a,draggingElements:s}=ne(),o=r.computed(()=>{var i,m,u,c;return{transform:`translate3d(${(((i=e.current.value)==null?void 0:i.x)??0)-(((m=e.offset.pixel.value)==null?void 0:m.x)??0)}px, ${(((u=e.current.value)==null?void 0:u.y)??0)-(((c=e.offset.pixel.value)==null?void 0:c.y)??0)}px, 0)`,zIndex:1e3,position:"fixed",top:0,left:0,transition:"0.3s cubic-bezier(0.165, 0.84, 0.44, 1)",...n.styles}});return(i,m)=>r.unref(a)?(r.openBlock(),r.createElementBlock("div",{key:0,ref_key:"elementRef",ref:t,style:r.normalizeStyle(o.value)},[(r.openBlock(!0),r.createElementBlock(r.Fragment,null,r.renderList(r.unref(s),([u,c])=>{var f,g;return r.openBlock(),r.createElementBlock(r.Fragment,{key:c.id},[c.layer?(r.openBlock(),r.createBlock(r.resolveDynamicComponent(c.layer),{key:0,node:u,data:c.data,id:c.id,groups:c.groups},null,8,["node","data","id","groups"])):(r.openBlock(),r.createElementBlock("div",{key:1,innerHTML:c.initialHTML,style:r.normalizeStyle({width:`${(f=c.initialRect)==null?void 0:f.width}px`,height:`${(g=c.initialRect)==null?void 0:g.height}px`})},null,12,le))],64)}),128))],4)):r.createCommentVNode("",!0)}}),W=r.defineComponent({__name:"DragOverlay",props:{styles:{}},setup(n){const t=n,{activeContainer:e}=T(),a=r.computed(()=>({component:e.component.value??se,props:t}));return(s,o)=>r.unref(e).options.value?(r.openBlock(),r.createBlock(r.Transition,{key:0,name:r.unref(e).options.value.name,duration:r.unref(e).options.value.duration,"enter-from-class":r.unref(e).options.value.enterFromClass,"enter-to-class":r.unref(e).options.value.enterToClass,"enter-active-class":r.unref(e).options.value.enterActiveClass,"leave-from-class":r.unref(e).options.value.leaveFromClass,"leave-to-class":r.unref(e).options.value.leaveToClass,"leave-active-class":r.unref(e).options.value.leaveActiveClass,"appear-active-class":r.unref(e).options.value.appearActiveClass,"appear-from-class":r.unref(e).options.value.appearFromClass,"appear-to-class":r.unref(e).options.value.appearToClass,mode:r.unref(e).options.value.mode,type:r.unref(e).options.value.type,css:r.unref(e).options.value.css,appear:!0,persisted:r.unref(e).options.value.persisted,onEnter:r.unref(e).options.value.onEnter,onLeave:r.unref(e).options.value.onLeave,onBeforeEnter:r.unref(e).options.value.onBeforeEnter,onBeforeLeave:r.unref(e).options.value.onBeforeLeave,onBeforeAppear:r.unref(e).options.value.onBeforeAppear,onAfterEnter:r.unref(e).options.value.onAfterEnter,onAfterLeave:r.unref(e).options.value.onAfterLeave,onAfterAppear:r.unref(e).options.value.onAfterAppear},{default:r.withCtx(()=>[(r.openBlock(),r.createBlock(r.resolveDynamicComponent(a.value.component||a.value),r.normalizeProps(r.guardReactiveProps(a.value.props||{})),null,16))]),_:1},8,["name","duration","enter-from-class","enter-to-class","enter-active-class","leave-from-class","leave-to-class","leave-active-class","appear-active-class","appear-from-class","appear-to-class","mode","type","css","persisted","onEnter","onLeave","onBeforeEnter","onBeforeLeave","onBeforeAppear","onAfterEnter","onAfterLeave","onAfterAppear"])):(r.openBlock(),r.createBlock(r.resolveDynamicComponent(a.value.component||a.value),r.normalizeProps(r.mergeProps({key:1},a.value.props||{})),null,16))}}),oe={install(n,t){n.component("DragOverlay",W);const e=n.mount;n.mount=function(s){var m;const o=e.call(this,s),i=typeof s=="string"?document.querySelector(s):s;if(i&&i instanceof Element&&!i.querySelector("#vue-dnd-kit-overlay")){const u=document.createElement("div");u.id="vue-dnd-kit-overlay",u.style.pointerEvents="none",i.appendChild(u);const c=r.createVNode(W,{styles:(m=t==null?void 0:t.defaultOverlay)==null?void 0:m.styles});r.render(c,u),n.__VUE_DND_KIT_OVERLAY__={container:u,vnode:c,options:(t==null?void 0:t.defaultOverlay)||{}};const f=T();n.__VUE_DND_KIT_STORE__=f}return o};const a=n.unmount;n.unmount=function(){return n.__VUE_DND_KIT_OVERLAY__&&(r.render(null,n.__VUE_DND_KIT_OVERLAY__.container),delete n.__VUE_DND_KIT_OVERLAY__),a.call(this)}}},J=(n,t)=>n.x<t.x+t.width&&n.x+n.width>t.x&&n.y<t.y+t.height&&n.y+n.height>t.y,H=n=>{if(!n)return{x:0,y:0,width:0,height:0,bottom:0,left:0,right:0,top:0};const t=n.getBoundingClientRect();return{bottom:t.bottom,left:t.left,right:t.right,top:t.top,x:t.x,y:t.y,width:t.width,height:t.height}},$=n=>({x:n.x+n.width/2,y:n.y+n.height/2}),ue=(n,t)=>{const e=H(n);return{pixel:{x:t.x-e.x,y:t.y-e.y},percent:{x:(t.x-e.x)/e.width*100,y:(t.y-e.y)/e.height*100}}},Q=(n,t)=>{const e=t.x-n.x,a=t.y-n.y;return Math.sqrt(e*e+a*a)},ee=(n,t)=>{const e=Math.max(0,Math.min(n.x+n.width,t.x+t.width)-Math.max(n.x,t.x)),a=Math.max(0,Math.min(n.y+n.height,t.y+t.height)-Math.max(n.y,t.y)),s=e*a,o=n.width*n.height,i=t.width*t.height;return(s/o*100+s/i*100)/2},te="data-vue-dnd-kit-draggable",B=n=>{n.preventDefault()},Y=n=>({items:Array.from(n.draggingElements.value.values())}),ie=n=>{const{elementsMap:t,draggingElements:e,hovered:a,selectedElements:s,isDragging:o,visibleElements:i,handleDragElementIntersection:m}=T(),u=r.ref(null),c=r.computed(()=>a.element.value===u.value),f=r.shallowRef((n==null?void 0:n.id)||r.useId()),g=r.shallowRef((n==null?void 0:n.disabled)??!1),l=r.computed(()=>g.value||!u.value||!t.value.has(u.value)?!1:e.value.has(u.value)),v=r.computed(()=>{if(g.value||!u.value||!o.value||!i.value.has(u.value))return!1;const h=t.value.get(u.value);return h!=null&&h.groups.length?!Array.from(e.value.entries()).some(([S,L])=>L.groups.length?!L.groups.some(D=>h.groups.includes(D)):!1):!0}),d=r.computed(()=>{if(g.value||!u.value||!o.value||!i.value.has(u.value)||a.element.value!==u.value)return!1;const h=t.value.get(u.value);return h!=null&&h.groups.length?!Array.from(e.value.entries()).some(([S,L])=>L.groups.length?!L.groups.some(D=>h.groups.includes(D)):!1):!0});return{elementRef:u,registerElement:()=>{if(!u.value)throw new Error("ElementRef is not set");t.value.set(u.value,{node:u.value,groups:(n==null?void 0:n.groups)??[],layer:(n==null?void 0:n.layer)??null,defaultLayer:(n==null?void 0:n.layer)??null,events:(n==null?void 0:n.events)??{},data:(n==null?void 0:n.data)??null,id:f.value,disabled:g??!1}),m("add",u.value),u.value.addEventListener("dragstart",B),u.value.addEventListener("drag",B),u.value.setAttribute(te,"true"),u.value.setAttribute("draggable","false")},unregisterElement:()=>{u.value&&(t.value.delete(u.value),s.value.delete(u.value),u.value.removeEventListener("dragstart",B),u.value.removeEventListener("drag",B),u.value.removeAttribute(te),u.value.removeAttribute("draggable"))},isDragging:l,isOvered:c,isAllowed:v,isLazyAllowed:d,id:f}},k=(n,t)=>n?t.contains(n):!1,ce=n=>{var f,g;const t=H(n.activeContainer.ref.value),e=$(t),a=((f=n.pointerPosition.current.value)==null?void 0:f.x)??0,s=((g=n.pointerPosition.current.value)==null?void 0:g.y)??0,i=!(t&&a>=t.x&&a<=t.x+t.width&&s>=t.y&&s<=t.y+t.height),m=Array.from(n.draggingElements.value.keys()),u=Array.from(n.visibleElements.value.entries()).filter(([l,v])=>{if(!l)return!1;const d=H(l);return d&&t&&J(d,t)}).map(([l,v])=>{const d=H(l),p=$(d),w=a>=d.x&&a<=d.x+d.width&&s>=d.y&&s<=d.y+d.height,h=ee(d,t),S=Q(e,p);let L=0;for(const[D,O]of n.visibleElements.value.entries())D!==l&&D&&l&&k(l,D)&&L++;return{element:v,node:l,isPointerInElement:w,overlapPercent:h,depth:L,centerDistance:S}}).sort((l,v)=>{if(!i){if(l.isPointerInElement&&v.isPointerInElement)return v.depth-l.depth;if(l.isPointerInElement!==v.isPointerInElement)return l.isPointerInElement?-1:1}return Math.abs(l.overlapPercent-v.overlapPercent)<=1?l.centerDistance-v.centerDistance:v.overlapPercent-l.overlapPercent}),c=Array.from(n.visibleZones.value.entries()).filter(([l,v])=>{if(!l||m.some(p=>p&&k(l,p)))return!1;const d=H(l);return d&&t&&J(d,t)}).map(([l,v])=>{const d=H(l),p=$(d),w=a>=d.x&&a<=d.x+d.width&&s>=d.y&&s<=d.y+d.height,h=ee(d,t),S=Q(e,p);let L=0;for(const[D,O]of n.visibleZones.value.entries())D!==l&&D&&l&&k(l,D)&&L++;return{zone:v,node:l,isPointerInElement:w,overlapPercent:h,depth:L,centerDistance:S}}).sort((l,v)=>{if(!i){if(l.isPointerInElement&&v.isPointerInElement)return v.depth-l.depth;if(l.isPointerInElement!==v.isPointerInElement)return l.isPointerInElement?-1:1}return Math.abs(l.overlapPercent-v.overlapPercent)<=1?l.centerDistance-v.centerDistance:v.overlapPercent-l.overlapPercent});return[...u.map(l=>l.node),...c.map(l=>l.node)]},ve=(n,t)=>{const{pointerPosition:e,keyboard:a}=T(),s=(t==null?void 0:t.moveStep)||10;return{onKeyboardStart:u=>{var l;B(u);const c=H(n.value);(l=n.value)==null||l.blur();const f=c.x+c.width/2,g=c.y+c.height/2;e.start.value={x:f,y:g},e.current.value={x:f,y:g},e.offset.pixel.value={x:c.width/2,y:c.height/2},e.offset.percent.value={x:50,y:50}},onKeyboardMove:()=>{if(!e.current.value)return;const u=e.current.value.x,c=e.current.value.y;let f=u,g=c;a.w.value&&(g-=s),a.s.value&&(g+=s),a.a.value&&(f-=s),a.d.value&&(f+=s),e.current.value={x:f,y:g}},onKeyboardEnd:()=>{e.current.value=null,e.start.value=null,e.offset.pixel.value=null,e.offset.percent.value=null}}},de=n=>{const t=T();return{onPointerStart:o=>{t.pointerPosition.start.value={x:o.clientX,y:o.clientY},t.pointerPosition.current.value={x:o.clientX,y:o.clientY};const{pixel:i,percent:m}=ue(n.value,{x:o.clientX,y:o.clientY});t.pointerPosition.offset.pixel.value=i,t.pointerPosition.offset.percent.value=m},onPointerMove:o=>{t.isPending.value||(t.pointerPosition.current.value={x:o.clientX,y:o.clientY})},onPointerEnd:()=>{t.pointerPosition.current.value=null,t.pointerPosition.start.value=null,t.pointerPosition.offset.pixel.value=null,t.pointerPosition.offset.percent.value=null}}},fe=(n,t)=>{var O,C;const e=T(),{onPointerStart:a,onPointerMove:s,onPointerEnd:o}=de(n),{onKeyboardStart:i,onKeyboardMove:m,onKeyboardEnd:u}=ve(n,t==null?void 0:t.keyboard);let c=null;const f=M=>{var I,z;if(!M)return new Map;const x=e.selectedElements.value.has(M);if(e.selectedElements.value.size>0&&x){const U=new Map;return e.selectedElements.value.forEach(X=>{var A,_;const E=e.elementsMap.value.get(X);E&&U.set(X,{...E,initialHTML:((A=E.node)==null?void 0:A.outerHTML)??"",initialRect:(_=E.node)==null?void 0:_.getBoundingClientRect()})}),U}e.selectedElements.value.clear();const y=e.elementsMap.value.get(M);if(!y)return new Map;const b=new Map;return b.set(M,{...y,initialHTML:((I=y.node)==null?void 0:I.outerHTML)??"",initialRect:(z=y.node)==null?void 0:z.getBoundingClientRect()}),b},g=M=>{if(!M)return{element:null,zone:null};const x=Array.isArray(M)?M:[M],y=Array.from(e.draggingElements.value.keys()),b=Array.from(e.zonesMap.value.entries()).flatMap(([E,A])=>A.disabled?[E]:[]),I=Array.from(e.elementsMap.value.entries()).flatMap(([E,A])=>A.disabled?[E]:[]),z=x.find(E=>{if(!e.visibleZones.value.has(E))return!1;const A=e.zonesMap.value.get(E);return!(!A||A.disabled||b.some(K=>E===K||k(E,K))||y.some(K=>K&&(K===A.node||k(A.node,K)))||A.groups.length&&!!Array.from(e.draggingElements.value.values()).some(V=>V.groups.length?!V.groups.some(R=>A.groups.includes(R)):!1))});return z?{element:x.filter(E=>{if(!e.visibleElements.value.has(E)||!e.elementsMap.value.has(E))return!1;const A=e.elementsMap.value.get(E);if(A!=null&&A.disabled)return!1;const _=b.some(R=>E===R||k(E,R)),K=I.some(R=>E===R||k(E,R));return _||K?!1:!Array.from(e.draggingElements.value.values()).some(R=>R.groups.length?!R.groups.some(N=>{var F;return(F=e.elementsMap.value.get(E))==null?void 0:F.groups.includes(N)}):!1)}).find(E=>y.some(_=>_&&(_===E||k(E,_)||k(_,E)))?!1:E===z||k(E,z))||null,zone:z}:{element:null,zone:null}},l=((O=t==null?void 0:t.sensor)==null?void 0:O.setup)||ce,v=M=>{var z,U,X,E,A,_,K,V,R,N,F,j;const x=e.hovered.element.value,y=e.hovered.zone.value,b=M.element,I=M.zone;e.hovered.element.value=b,e.hovered.zone.value=I,x!==b&&(x&&((X=(U=(z=e.elementsMap.value.get(x))==null?void 0:z.events)==null?void 0:U.onLeave)==null||X.call(U,e,Y(e))),b&&((_=(A=(E=e.elementsMap.value.get(b))==null?void 0:E.events)==null?void 0:A.onHover)==null||_.call(A,e,Y(e)))),y!==I&&(y&&((R=(V=(K=e.zonesMap.value.get(y))==null?void 0:K.events)==null?void 0:V.onLeave)==null||R.call(V,e,Y(e))),I&&((j=(F=(N=e.zonesMap.value.get(I))==null?void 0:N.events)==null?void 0:F.onHover)==null||j.call(F,e,Y(e))))},d=q.useThrottleFn(()=>{const M=l(e),x=g(M);v(x)},((C=t==null?void 0:t.sensor)==null?void 0:C.throttle)??0),p=()=>{d(),c=requestAnimationFrame(p)},w=()=>p(),h=()=>{c!==null&&(o(),u(),cancelAnimationFrame(c),c=null)};return{activate:M=>{e.draggingElements.value=f(n.value),e.draggingElements.value.forEach(x=>{var y,b;return(b=(y=x.events).onStart)==null?void 0:b.call(y,e,Y(e))}),M instanceof PointerEvent?a(M):i(M),w()},track:M=>{e.draggingElements.value.forEach(x=>{var y,b;return(b=(y=x.events).onMove)==null?void 0:b.call(y,e,Y(e))}),M instanceof KeyboardEvent?m():s(M)},deactivate:async(M=!0)=>{var x,y;if(e.hovered.zone.value){const b=e.zonesMap.value.get(e.hovered.zone.value),I=(y=b==null?void 0:(x=b.events).onDrop)==null?void 0:y.call(x,e,Y(e));if(I instanceof Promise)try{e.isPending.value=!0;const z=await I;return z&&(M&&e.selectedElements.value.clear(),e.draggingElements.value.clear(),e.hovered.zone.value=null,e.hovered.element.value=null,h()),z}catch{return!1}finally{e.isPending.value=!1}else M&&e.selectedElements.value.clear(),e.draggingElements.value.clear(),e.hovered.zone.value=null,e.hovered.element.value=null,h()}else e.draggingElements.value.forEach(b=>{var I,z;return(z=(I=b.events).onEnd)==null?void 0:z.call(I,e,Y(e))}),M&&e.selectedElements.value.clear(),e.draggingElements.value.clear(),e.hovered.zone.value=null,e.hovered.element.value=null,h()}}},ge=q.createGlobalState(()=>{let n="",t="",e="",a=null,s=null,o=null,i=null,m=null;const{activeContainer:u,isPending:c,elementsMap:f}=T(),g=()=>{const p=document.body;n=p.style.userSelect,p.style.userSelect="none",window.addEventListener("contextmenu",B),window.addEventListener("selectstart",B),window.addEventListener("touchstart",B),window.addEventListener("touchmove",B)},l=()=>{const p=document.body;p.style.userSelect=n,p.style.touchAction=t,p.style.overscrollBehavior=e,window.removeEventListener("contextmenu",B),window.removeEventListener("selectstart",B),window.removeEventListener("touchstart",B),window.removeEventListener("touchmove",B)},v=()=>{a&&(document.removeEventListener("pointermove",a),a=null),s&&(document.removeEventListener("pointerup",s),s=null),o&&(o=null),i&&(document.removeEventListener("wheel",i),i=null),m&&(document.removeEventListener("keydown",m),document.removeEventListener("keypress",m),document.removeEventListener("keyup",m),m=null)};return{handleDragStart:(p,w,h)=>{if(!w.value||c.value)return;const S=f.value.get(w.value);if(S!=null&&S.disabled)return;v(),p.target.blur(),h!=null&&h.container&&(u.component.value=h.container);const{activate:L,track:D,deactivate:O}=fe(w,h);s=()=>{O(!0).then(C=>{C!==!1&&(u.component.value=null,l(),O(!0),v())})},o=()=>{u.component.value=null,l(),O(!1),v()},a=C=>D(C),i=C=>D(C),m=C=>{C.type==="keyup"&&(C.code==="Escape"&&(o==null||o()),C.code==="Enter"&&(s==null||s())),D(C)},g(),L(p),document.addEventListener("pointermove",a),document.addEventListener("pointerup",s),document.addEventListener("wheel",i),document.addEventListener("keydown",m),document.addEventListener("keypress",m),document.addEventListener("keyup",m)}}}),me=n=>{const{id:t,elementRef:e,isDragging:a,isOvered:s,isAllowed:o,isLazyAllowed:i,registerElement:m,unregisterElement:u}=ie(n),{pointerPosition:c}=T(),{handleDragStart:f}=ge(),g=l=>f(l,e,n);return r.onMounted(m),r.onBeforeUnmount(u),{pointerPosition:c,elementRef:e,isDragging:a,isOvered:s,isAllowed:o,isLazyAllowed:i,handleDragStart:g,id:t}},pe=n=>{const{zonesMap:t,hovered:e,draggingElements:a,isDragging:s,handleDropZoneIntersection:o}=T(),i=r.ref(null),m=r.computed(()=>e.zone.value===i.value),u=r.computed(()=>{if(!i.value||!s.value)return!1;const l=t.value.get(i.value);return l!=null&&l.groups.length?!Array.from(a.value.values()).some(v=>v.groups.length?!v.groups.some(d=>l.groups.includes(d)):!1):!0}),c=r.computed(()=>{if(!i.value||!s.value||e.zone.value!==i.value)return!1;const l=t.value.get(i.value);return l!=null&&l.groups.length?!Array.from(a.value.values()).some(v=>!v.groups.some(d=>l.groups.includes(d))):!0});return{elementRef:i,registerZone:()=>{if(!i.value)throw new Error("elementRef is not set");o("add",i.value),t.value.set(i.value,{node:i.value,groups:(n==null?void 0:n.groups)??[],events:(n==null?void 0:n.events)??{},data:(n==null?void 0:n.data)??void 0,disabled:(n==null?void 0:n.disabled)??!1}),i.value.setAttribute("data-dnd-droppable","true")},unregisterZone:()=>{i.value&&(o("remove",i.value),t.value.delete(i.value))},isOvered:m,isAllowed:u,isLazyAllowed:c}},he=n=>{const{elementRef:t,registerZone:e,unregisterZone:a,isOvered:s,isAllowed:o,isLazyAllowed:i}=pe(n);return r.onMounted(e),r.onBeforeUnmount(a),{elementRef:t,isOvered:s,isAllowed:o,isLazyAllowed:i}},ye=n=>{const{selectedElements:t,elementsMap:e}=T(),a=r.computed(()=>n.value?t.value.has(n.value):!1),s=r.computed(()=>{if(!n.value)return!1;for(const c of t.value)if(c&&k(c,n.value))return!0;return!1}),o=r.computed(()=>{if(!n.value)return!1;for(const c of t.value)if(c&&k(n.value,c))return!0;return!1}),i=()=>{n.value&&t.value.delete(n.value)},m=()=>{if(!(!n.value||!e.value.get(n.value))){if(s.value)for(const f of t.value)f&&k(f,n.value)&&t.value.delete(f);if(o.value)for(const f of t.value)f&&k(n.value,f)&&t.value.delete(f);t.value.add(n.value)}};return{handleUnselect:i,handleSelect:m,handleToggleSelect:()=>{n.value&&(t.value.has(n.value)?i():m())},isSelected:a,isParentOfSelected:s}};exports.DnDOperations=G;exports.default=oe;exports.getBoundingBox=H;exports.useDnDStore=T;exports.useDragContainer=ne;exports.useDraggable=me;exports.useDroppable=he;exports.useSelection=ye;
|
|
1
|
+
"use strict";var re=Object.defineProperty;var ae=(n,e,t)=>e in n?re(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var Z=(n,e,t)=>ae(n,typeof e!="symbol"?e+"":e,t);Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("vue"),q=require("@vueuse/core"),x=class x{};Z(x,"remove",(e,t)=>{if(!e||t===void 0)return;const[l]=e.splice(t,1);return l}),Z(x,"insert",(e,t,l)=>{!e||t===void 0||e.splice(t,0,l)}),Z(x,"move",(e,t,l,s)=>{if(!e||!l||t===void 0||s===void 0)return;const o=x.remove(e,t);x.insert(l,s,o)}),Z(x,"swap",(e,t,l,s)=>{if(!e||!l||t===void 0||s===void 0)return;const o=e[t],u=l[s];e[t]=u,l[s]=o}),Z(x,"copy",(e,t,l,s)=>{if(!e||t===void 0||!l||s===void 0)return;const o=e[t];x.insert(l,s,o)}),Z(x,"applyTransfer",e=>{var s,o,u,m,i,v,f;const t=e.hovered.element.value,l=e.hovered.zone.value;if(t){const g=(o=(s=e.elementsMap.value.get(t))==null?void 0:s.data)==null?void 0:o.source,a=(m=(u=e.elementsMap.value.get(t))==null?void 0:u.data)==null?void 0:m.index,d=e.draggingElements.value.values().next().value,c=(i=d==null?void 0:d.data)==null?void 0:i.index,p=c!==void 0&&a!==void 0&&c>a?1:-1;Array.from(e.draggingElements.value.values()).sort((h,A)=>{var L,S;return p*((((L=h.data)==null?void 0:L.index)||0)-(((S=A.data)==null?void 0:S.index)||0))}).forEach(h=>{var A,L;return x.move((A=h.data)==null?void 0:A.source,(L=h.data)==null?void 0:L.index,g,a)})}else if(l){const g=(f=(v=e.zonesMap.value.get(l))==null?void 0:v.data)==null?void 0:f.source,a=g==null?void 0:g.length;Array.from(e.draggingElements.value.values()).sort((c,p)=>{var y,h;return(((y=p.data)==null?void 0:y.index)||0)-(((h=c.data)==null?void 0:h.index)||0)}).forEach(c=>{var p,y;return x.move((p=c.data)==null?void 0:p.source,(y=c.data)==null?void 0:y.index,g,a)})}}),Z(x,"applyCopy",e=>{var s,o,u,m,i,v;const t=e.hovered.element.value,l=e.hovered.zone.value;if(t){const f=(o=(s=e.elementsMap.value.get(t))==null?void 0:s.data)==null?void 0:o.source,g=(m=(u=e.elementsMap.value.get(t))==null?void 0:u.data)==null?void 0:m.index;Array.from(e.draggingElements.value.values()).sort((d,c)=>{var p,y;return(((p=c.data)==null?void 0:p.index)||0)-(((y=d.data)==null?void 0:y.index)||0)}).forEach(d=>{var c,p;return x.copy((c=d.data)==null?void 0:c.source,(p=d.data)==null?void 0:p.index,f,g)})}else if(l){const f=(v=(i=e.zonesMap.value.get(l))==null?void 0:i.data)==null?void 0:v.source,g=f==null?void 0:f.length;Array.from(e.draggingElements.value.values()).sort((d,c)=>{var p,y;return(((p=c.data)==null?void 0:p.index)||0)-(((y=d.data)==null?void 0:y.index)||0)}).forEach(d=>{var c,p;return x.copy((c=d.data)==null?void 0:c.source,(p=d.data)==null?void 0:p.index,f,g)})}}),Z(x,"applySwap",e=>{var s,o,u,m,i,v,f,g;const t=e.hovered.element.value,l=e.hovered.zone.value;if(t&&e.draggingElements.value.size===1){const a=e.draggingElements.value.values().next().value;x.swap((s=a==null?void 0:a.data)==null?void 0:s.source,(o=a==null?void 0:a.data)==null?void 0:o.index,(m=(u=e.elementsMap.value.get(t))==null?void 0:u.data)==null?void 0:m.source,(v=(i=e.elementsMap.value.get(t))==null?void 0:i.data)==null?void 0:v.index)}else if(l){const a=(g=(f=e.zonesMap.value.get(l))==null?void 0:f.data)==null?void 0:g.source,d=a==null?void 0:a.length;Array.from(e.draggingElements.value.values()).sort((p,y)=>{var h,A;return(((h=y.data)==null?void 0:h.index)||0)-(((A=p.data)==null?void 0:A.index)||0)}).forEach(p=>{var y,h;return x.move((y=p.data)==null?void 0:y.source,(h=p.data)==null?void 0:h.index,a,d)})}}),Z(x,"applyRemove",e=>{Array.from(e.draggingElements.value.values()).sort((l,s)=>{var o,u;return(((o=s.data)==null?void 0:o.index)||0)-(((u=l.data)==null?void 0:u.index)||0)}).forEach(l=>{var s,o;(s=l.data)!=null&&s.source&&((o=l.data)==null?void 0:o.index)!==void 0&&x.remove(l.data.source,l.data.index)})}),Z(x,"applyInsert",(e,t)=>{var o,u,m,i,v,f;const l=e.hovered.element.value,s=e.hovered.zone.value;if(l&&t.length>0){const g=(u=(o=e.elementsMap.value.get(l))==null?void 0:o.data)==null?void 0:u.source,a=(i=(m=e.elementsMap.value.get(l))==null?void 0:m.data)==null?void 0:i.index;t.forEach(d=>{x.insert(g,a,d)})}else if(s){const g=(f=(v=e.zonesMap.value.get(s))==null?void 0:v.data)==null?void 0:f.source,a=g==null?void 0:g.length;t.forEach(d=>{x.insert(g,a,d)})}});let G=x;const T=q.createGlobalState(()=>{const n=r.shallowRef(!1),e=r.ref(new Map),t=r.computed(()=>e.value.size>0),l={component:r.ref(null),ref:r.shallowRef(null),options:r.shallowRef(null),props:r.shallowRef(null),animating:{enter:r.shallowRef(!1),leave:r.shallowRef(!1),appear:r.shallowRef(!1)}},s=r.ref(new Map),o=r.ref(new Set),u=r.ref(new Map),m=r.shallowRef(new Set),i=r.shallowRef(new Set),v=typeof window<"u"&&"IntersectionObserver"in window,f=v?new IntersectionObserver(M=>{M.forEach(E=>i.value[E.isIntersecting?"add":"delete"](E.target))}):null,g=v?new IntersectionObserver(M=>{M.forEach(E=>m.value[E.isIntersecting?"add":"delete"](E.target))}):null,a=(M,E)=>{f&&(M==="add"?f.observe(E):(f.unobserve(E),i.value.delete(E)))},d=(M,E)=>{g&&(M==="add"?g.observe(E):(g.unobserve(E),m.value.delete(E)))},c={start:r.shallowRef(null),current:r.shallowRef(null),offset:{percent:r.shallowRef(null),pixel:r.shallowRef(null)}},{KeyW:p,KeyS:y,KeyA:h,KeyD:A,ctrl:L,shift:S,alt:O,meta:k}=q.useMagicKeys(),P={zone:r.shallowRef(null),element:r.shallowRef(null)};return{draggingElements:e,isDragging:t,activeContainer:l,elementsMap:s,selectedElements:o,zonesMap:u,visibleZones:m,visibleElements:i,pointerPosition:c,keyboard:{w:p,s:y,a:h,d:A,ctrl:L,shift:S,alt:O,meta:k},hovered:P,isPending:n,handleDragElementIntersection:a,handleDropZoneIntersection:d}}),ne=n=>{const e=r.ref(null),{draggingElements:t,pointerPosition:l,isDragging:s,activeContainer:o}=T();return r.onMounted(()=>{o.ref=e,o.options.value=n??null}),r.onUnmounted(()=>{o.ref.value=null,o.options.value=null}),{elementRef:e,draggingElements:t,pointerPosition:l,isDragging:s,animating:o.animating}},le=["innerHTML"],se=r.defineComponent({__name:"DefaultOverlay",props:{styles:{}},setup(n){const{elementRef:e,pointerPosition:t,isDragging:l,draggingElements:s}=ne(),o=r.computed(()=>{var u,m,i,v;return{transform:`translate3d(${(((u=t.current.value)==null?void 0:u.x)??0)-(((m=t.offset.pixel.value)==null?void 0:m.x)??0)}px, ${(((i=t.current.value)==null?void 0:i.y)??0)-(((v=t.offset.pixel.value)==null?void 0:v.y)??0)}px, 0)`,zIndex:1e3,position:"fixed",top:0,left:0,transition:"0.3s cubic-bezier(0.165, 0.84, 0.44, 1)",...n.styles}});return(u,m)=>r.unref(l)?(r.openBlock(),r.createElementBlock("div",{key:0,ref_key:"elementRef",ref:e,style:r.normalizeStyle(o.value)},[(r.openBlock(!0),r.createElementBlock(r.Fragment,null,r.renderList(r.unref(s),([i,v])=>{var f,g;return r.openBlock(),r.createElementBlock(r.Fragment,{key:v.id},[v.layer?(r.openBlock(),r.createBlock(r.resolveDynamicComponent(v.layer),{key:0,node:i,data:v.data,id:v.id,groups:v.groups},null,8,["node","data","id","groups"])):(r.openBlock(),r.createElementBlock("div",{key:1,innerHTML:v.initialHTML,style:r.normalizeStyle({width:`${(f=v.initialRect)==null?void 0:f.width}px`,height:`${(g=v.initialRect)==null?void 0:g.height}px`})},null,12,le))],64)}),128))],4)):r.createCommentVNode("",!0)}}),W=r.defineComponent({__name:"DragOverlay",props:{styles:{}},setup(n){const e=n,{activeContainer:t}=T(),l=r.computed(()=>({component:t.component.value??se,props:{...e,...t.props.value}}));return(s,o)=>r.unref(t).options.value?(r.openBlock(),r.createBlock(r.Transition,{key:0,name:r.unref(t).options.value.name,duration:r.unref(t).options.value.duration,"enter-from-class":r.unref(t).options.value.enterFromClass,"enter-to-class":r.unref(t).options.value.enterToClass,"enter-active-class":r.unref(t).options.value.enterActiveClass,"leave-from-class":r.unref(t).options.value.leaveFromClass,"leave-to-class":r.unref(t).options.value.leaveToClass,"leave-active-class":r.unref(t).options.value.leaveActiveClass,"appear-active-class":r.unref(t).options.value.appearActiveClass,"appear-from-class":r.unref(t).options.value.appearFromClass,"appear-to-class":r.unref(t).options.value.appearToClass,mode:r.unref(t).options.value.mode,type:r.unref(t).options.value.type,css:r.unref(t).options.value.css,appear:!0,persisted:r.unref(t).options.value.persisted,onEnter:r.unref(t).options.value.onEnter,onLeave:r.unref(t).options.value.onLeave,onBeforeEnter:r.unref(t).options.value.onBeforeEnter,onBeforeLeave:r.unref(t).options.value.onBeforeLeave,onBeforeAppear:r.unref(t).options.value.onBeforeAppear,onAfterEnter:r.unref(t).options.value.onAfterEnter,onAfterLeave:r.unref(t).options.value.onAfterLeave,onAfterAppear:r.unref(t).options.value.onAfterAppear},{default:r.withCtx(()=>[(r.openBlock(),r.createBlock(r.resolveDynamicComponent(l.value.component||l.value),r.normalizeProps(r.guardReactiveProps(l.value.props||{})),null,16))]),_:1},8,["name","duration","enter-from-class","enter-to-class","enter-active-class","leave-from-class","leave-to-class","leave-active-class","appear-active-class","appear-from-class","appear-to-class","mode","type","css","persisted","onEnter","onLeave","onBeforeEnter","onBeforeLeave","onBeforeAppear","onAfterEnter","onAfterLeave","onAfterAppear"])):(r.openBlock(),r.createBlock(r.resolveDynamicComponent(l.value.component||l.value),r.normalizeProps(r.mergeProps({key:1},l.value.props||{})),null,16))}}),oe={install(n,e){n.component("DragOverlay",W);const t=n.mount;n.mount=function(s){var m,i,v,f,g,a,d;const o=t.call(this,s),u=typeof s=="string"?document.querySelector(s):s;if(u&&u instanceof Element&&!u.querySelector("#vue-dnd-kit-overlay")){const c=document.createElement("div");c.id="vue-dnd-kit-overlay",c.style.pointerEvents="none",(m=e==null?void 0:e.overlayPosition)!=null&&m.zIndex&&(c.style.zIndex=e.overlayPosition.zIndex.toString()),(i=e==null?void 0:e.overlayPosition)!=null&&i.className&&(c.className=e.overlayPosition.className);const p=((v=e==null?void 0:e.overlayPosition)==null?void 0:v.method)||"append",y=(f=e==null?void 0:e.overlayPosition)!=null&&f.target?typeof e.overlayPosition.target=="string"?document.querySelector(e.overlayPosition.target):e.overlayPosition.target:u;if(y&&y instanceof Element)switch(p){case"prepend":y.insertBefore(c,y.firstChild);break;case"after":(g=y.parentNode)==null||g.insertBefore(c,y.nextSibling);break;case"before":(a=y.parentNode)==null||a.insertBefore(c,y);break;case"append":default:y.appendChild(c);break}else u.appendChild(c);const h=r.createVNode(W,{styles:(d=e==null?void 0:e.defaultOverlay)==null?void 0:d.styles});r.render(h,c),n.__VUE_DND_KIT_OVERLAY__={container:c,vnode:h,options:(e==null?void 0:e.defaultOverlay)||{}};const A=T();n.__VUE_DND_KIT_STORE__=A}return o};const l=n.unmount;n.unmount=function(){return n.__VUE_DND_KIT_OVERLAY__&&(r.render(null,n.__VUE_DND_KIT_OVERLAY__.container),delete n.__VUE_DND_KIT_OVERLAY__),l.call(this)}}},J=(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,Y=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}},$=n=>({x:n.x+n.width/2,y:n.y+n.height/2}),ue=(n,e)=>{const t=Y(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}}},Q=(n,e)=>{const t=e.x-n.x,l=e.y-n.y;return Math.sqrt(t*t+l*l)},ee=(n,e)=>{const t=Math.max(0,Math.min(n.x+n.width,e.x+e.width)-Math.max(n.x,e.x)),l=Math.max(0,Math.min(n.y+n.height,e.y+e.height)-Math.max(n.y,e.y)),s=t*l,o=n.width*n.height,u=e.width*e.height;return(s/o*100+s/u*100)/2},te="data-vue-dnd-kit-draggable",R=n=>{n.preventDefault()},V=n=>({items:Array.from(n.draggingElements.value.values())}),ie=n=>{const{elementsMap:e,draggingElements:t,hovered:l,selectedElements:s,isDragging:o,visibleElements:u,handleDragElementIntersection:m}=T(),i=r.ref(null),v=r.computed(()=>l.element.value===i.value),f=r.shallowRef((n==null?void 0:n.id)||r.useId()),g=r.shallowRef((n==null?void 0:n.disabled)??!1),a=r.computed(()=>g.value||!i.value||!e.value.has(i.value)?!1:t.value.has(i.value)),d=r.computed(()=>{if(g.value||!i.value||!o.value||!u.value.has(i.value))return!1;const h=e.value.get(i.value);return h!=null&&h.groups.length?!Array.from(t.value.entries()).some(([A,L])=>L.groups.length?!L.groups.some(S=>h.groups.includes(S)):!1):!0}),c=r.computed(()=>{if(g.value||!i.value||!o.value||!u.value.has(i.value)||l.element.value!==i.value)return!1;const h=e.value.get(i.value);return h!=null&&h.groups.length?!Array.from(t.value.entries()).some(([A,L])=>L.groups.length?!L.groups.some(S=>h.groups.includes(S)):!1):!0});return{elementRef:i,registerElement:()=>{if(!i.value)throw new Error("ElementRef is not set");e.value.set(i.value,{node:i.value,groups:(n==null?void 0:n.groups)??[],layer:(n==null?void 0:n.layer)??null,defaultLayer:(n==null?void 0:n.layer)??null,events:(n==null?void 0:n.events)??{},data:(n==null?void 0:n.data)??null,id:f.value,disabled:g??!1}),m("add",i.value),i.value.addEventListener("dragstart",R),i.value.addEventListener("drag",R),i.value.setAttribute(te,"true"),i.value.setAttribute("draggable","false")},unregisterElement:()=>{i.value&&(e.value.delete(i.value),s.value.delete(i.value),i.value.removeEventListener("dragstart",R),i.value.removeEventListener("drag",R),i.value.removeAttribute(te),i.value.removeAttribute("draggable"))},isDragging:a,isOvered:v,isAllowed:d,isLazyAllowed:c,id:f}},I=(n,e)=>n?e.contains(n):!1,ce=n=>{var f,g;const e=Y(n.activeContainer.ref.value),t=$(e),l=((f=n.pointerPosition.current.value)==null?void 0:f.x)??0,s=((g=n.pointerPosition.current.value)==null?void 0:g.y)??0,u=!(e&&l>=e.x&&l<=e.x+e.width&&s>=e.y&&s<=e.y+e.height),m=Array.from(n.draggingElements.value.keys()),i=Array.from(n.visibleElements.value.entries()).filter(([a,d])=>{if(!a)return!1;const c=Y(a);return c&&e&&J(c,e)}).map(([a,d])=>{const c=Y(a),p=$(c),y=l>=c.x&&l<=c.x+c.width&&s>=c.y&&s<=c.y+c.height,h=ee(c,e),A=Q(t,p);let L=0;for(const[S,O]of n.visibleElements.value.entries())S!==a&&S&&a&&I(a,S)&&L++;return{element:d,node:a,isPointerInElement:y,overlapPercent:h,depth:L,centerDistance:A}}).sort((a,d)=>{if(!u){if(a.isPointerInElement&&d.isPointerInElement)return d.depth-a.depth;if(a.isPointerInElement!==d.isPointerInElement)return a.isPointerInElement?-1:1}return Math.abs(a.overlapPercent-d.overlapPercent)<=1?a.centerDistance-d.centerDistance:d.overlapPercent-a.overlapPercent}),v=Array.from(n.visibleZones.value.entries()).filter(([a,d])=>{if(!a||m.some(p=>p&&I(a,p)))return!1;const c=Y(a);return c&&e&&J(c,e)}).map(([a,d])=>{const c=Y(a),p=$(c),y=l>=c.x&&l<=c.x+c.width&&s>=c.y&&s<=c.y+c.height,h=ee(c,e),A=Q(t,p);let L=0;for(const[S,O]of n.visibleZones.value.entries())S!==a&&S&&a&&I(a,S)&&L++;return{zone:d,node:a,isPointerInElement:y,overlapPercent:h,depth:L,centerDistance:A}}).sort((a,d)=>{if(!u){if(a.isPointerInElement&&d.isPointerInElement)return d.depth-a.depth;if(a.isPointerInElement!==d.isPointerInElement)return a.isPointerInElement?-1:1}return Math.abs(a.overlapPercent-d.overlapPercent)<=1?a.centerDistance-d.centerDistance:d.overlapPercent-a.overlapPercent});return[...i.map(a=>a.node),...v.map(a=>a.node)]},ve=(n,e)=>{const{pointerPosition:t,keyboard:l}=T(),s=(e==null?void 0:e.moveStep)||10;return{onKeyboardStart:i=>{var a;R(i);const v=Y(n.value);(a=n.value)==null||a.blur();const f=v.x+v.width/2,g=v.y+v.height/2;t.start.value={x:f,y:g},t.current.value={x:f,y:g},t.offset.pixel.value={x:v.width/2,y:v.height/2},t.offset.percent.value={x:50,y:50}},onKeyboardMove:()=>{if(!t.current.value)return;const i=t.current.value.x,v=t.current.value.y;let f=i,g=v;l.w.value&&(g-=s),l.s.value&&(g+=s),l.a.value&&(f-=s),l.d.value&&(f+=s),t.current.value={x:f,y:g}},onKeyboardEnd:()=>{t.current.value=null,t.start.value=null,t.offset.pixel.value=null,t.offset.percent.value=null}}},de=n=>{const e=T();return{onPointerStart:o=>{e.pointerPosition.start.value={x:o.clientX,y:o.clientY},e.pointerPosition.current.value={x:o.clientX,y:o.clientY};const{pixel:u,percent:m}=ue(n.value,{x:o.clientX,y:o.clientY});e.pointerPosition.offset.pixel.value=u,e.pointerPosition.offset.percent.value=m},onPointerMove:o=>{e.isPending.value||(e.pointerPosition.current.value={x:o.clientX,y:o.clientY})},onPointerEnd:()=>{e.pointerPosition.current.value=null,e.pointerPosition.start.value=null,e.pointerPosition.offset.pixel.value=null,e.pointerPosition.offset.percent.value=null}}},fe=(n,e)=>{var O,k;const t=T(),{onPointerStart:l,onPointerMove:s,onPointerEnd:o}=de(n),{onKeyboardStart:u,onKeyboardMove:m,onKeyboardEnd:i}=ve(n,e==null?void 0:e.keyboard);let v=null;const f=P=>{var C,z;if(!P)return new Map;const M=t.selectedElements.value.has(P);if(t.selectedElements.value.size>0&&M){const N=new Map;return t.selectedElements.value.forEach(F=>{var b,_;const w=t.elementsMap.value.get(F);w&&N.set(F,{...w,initialHTML:((b=w.node)==null?void 0:b.outerHTML)??"",initialRect:(_=w.node)==null?void 0:_.getBoundingClientRect()})}),N}t.selectedElements.value.clear();const E=t.elementsMap.value.get(P);if(!E)return new Map;const D=new Map;return D.set(P,{...E,initialHTML:((C=E.node)==null?void 0:C.outerHTML)??"",initialRect:(z=E.node)==null?void 0:z.getBoundingClientRect()}),D},g=P=>{if(!P)return{element:null,zone:null};const M=Array.isArray(P)?P:[P],E=Array.from(t.draggingElements.value.keys()),D=Array.from(t.zonesMap.value.entries()).flatMap(([w,b])=>b.disabled?[w]:[]),C=Array.from(t.elementsMap.value.entries()).flatMap(([w,b])=>b.disabled?[w]:[]),z=M.find(w=>{if(!t.visibleZones.value.has(w))return!1;const b=t.zonesMap.value.get(w);return!(!b||b.disabled||D.some(K=>w===K||I(w,K))||E.some(K=>K&&(K===b.node||I(b.node,K)))||b.groups.length&&!!Array.from(t.draggingElements.value.values()).some(U=>U.groups.length?!U.groups.some(B=>b.groups.includes(B)):!1))});return z?{element:M.filter(w=>{if(!t.visibleElements.value.has(w)||!t.elementsMap.value.has(w))return!1;const b=t.elementsMap.value.get(w);if(b!=null&&b.disabled)return!1;const _=D.some(B=>w===B||I(w,B)),K=C.some(B=>w===B||I(w,B));return _||K?!1:!Array.from(t.draggingElements.value.values()).some(B=>B.groups.length?!B.groups.some(X=>{var H;return(H=t.elementsMap.value.get(w))==null?void 0:H.groups.includes(X)}):!1)}).find(w=>E.some(_=>_&&(_===w||I(w,_)||I(_,w)))?!1:w===z||I(w,z))||null,zone:z}:{element:null,zone:null}},a=((O=e==null?void 0:e.sensor)==null?void 0:O.setup)||ce,d=P=>{var z,N,F,w,b,_,K,U,B,X,H,j;const M=t.hovered.element.value,E=t.hovered.zone.value,D=P.element,C=P.zone;t.hovered.element.value=D,t.hovered.zone.value=C,M!==D&&(M&&((F=(N=(z=t.elementsMap.value.get(M))==null?void 0:z.events)==null?void 0:N.onLeave)==null||F.call(N,t,V(t))),D&&((_=(b=(w=t.elementsMap.value.get(D))==null?void 0:w.events)==null?void 0:b.onHover)==null||_.call(b,t,V(t)))),E!==C&&(E&&((B=(U=(K=t.zonesMap.value.get(E))==null?void 0:K.events)==null?void 0:U.onLeave)==null||B.call(U,t,V(t))),C&&((j=(H=(X=t.zonesMap.value.get(C))==null?void 0:X.events)==null?void 0:H.onHover)==null||j.call(H,t,V(t))))},c=q.useThrottleFn(()=>{const P=a(t),M=g(P);d(M)},((k=e==null?void 0:e.sensor)==null?void 0:k.throttle)??0),p=()=>{c(),v=requestAnimationFrame(p)},y=()=>p(),h=()=>{v!==null&&(o(),i(),cancelAnimationFrame(v),v=null)};return{activate:P=>{t.draggingElements.value=f(n.value),t.draggingElements.value.forEach(M=>{var E,D;return(D=(E=M.events).onStart)==null?void 0:D.call(E,t,V(t))}),P instanceof PointerEvent?l(P):u(P),y()},track:P=>{t.draggingElements.value.forEach(M=>{var E,D;return(D=(E=M.events).onMove)==null?void 0:D.call(E,t,V(t))}),P instanceof KeyboardEvent?m():s(P)},deactivate:async(P=!0)=>{var M,E;if(t.hovered.zone.value){const D=t.zonesMap.value.get(t.hovered.zone.value),C=(E=D==null?void 0:(M=D.events).onDrop)==null?void 0:E.call(M,t,V(t));if(C instanceof Promise)try{t.isPending.value=!0;const z=await C;return z&&(P&&t.selectedElements.value.clear(),t.draggingElements.value.clear(),t.hovered.zone.value=null,t.hovered.element.value=null,h()),z}catch{return!1}finally{t.isPending.value=!1}else P&&t.selectedElements.value.clear(),t.draggingElements.value.clear(),t.hovered.zone.value=null,t.hovered.element.value=null,h()}else t.draggingElements.value.forEach(D=>{var C,z;return(z=(C=D.events).onEnd)==null?void 0:z.call(C,t,V(t))}),P&&t.selectedElements.value.clear(),t.draggingElements.value.clear(),t.hovered.zone.value=null,t.hovered.element.value=null,h()}}},ge=q.createGlobalState(()=>{let n="",e="",t="",l=null,s=null,o=null,u=null,m=null;const{activeContainer:i,isPending:v,elementsMap:f}=T(),g=()=>{const p=document.body;n=p.style.userSelect,p.style.userSelect="none",window.addEventListener("contextmenu",R),window.addEventListener("selectstart",R),window.addEventListener("touchstart",R),window.addEventListener("touchmove",R)},a=()=>{const p=document.body;p.style.userSelect=n,p.style.touchAction=e,p.style.overscrollBehavior=t,window.removeEventListener("contextmenu",R),window.removeEventListener("selectstart",R),window.removeEventListener("touchstart",R),window.removeEventListener("touchmove",R)},d=()=>{l&&(document.removeEventListener("pointermove",l),l=null),s&&(document.removeEventListener("pointerup",s),s=null),o&&(o=null),u&&(document.removeEventListener("wheel",u),u=null),m&&(document.removeEventListener("keydown",m),document.removeEventListener("keypress",m),document.removeEventListener("keyup",m),m=null)};return{handleDragStart:(p,y,h)=>{if(!y.value||v.value)return;const A=f.value.get(y.value);if(A!=null&&A.disabled)return;d(),p.target.blur(),h!=null&&h.container&&(i.component.value=h.container),h!=null&&h.containerProps&&(i.props.value=h.containerProps);const{activate:L,track:S,deactivate:O}=fe(y,h);s=()=>{O(!0).then(k=>{k!==!1&&(i.component.value=null,a(),O(!0),d())})},o=()=>{i.component.value=null,a(),O(!1),d()},l=k=>S(k),u=k=>S(k),m=k=>{k.type==="keyup"&&(k.code==="Escape"&&(o==null||o()),k.code==="Enter"&&(s==null||s())),S(k)},g(),L(p),document.addEventListener("pointermove",l),document.addEventListener("pointerup",s),document.addEventListener("wheel",u),document.addEventListener("keydown",m),document.addEventListener("keypress",m),document.addEventListener("keyup",m)}}}),me=n=>{const{id:e,elementRef:t,isDragging:l,isOvered:s,isAllowed:o,isLazyAllowed:u,registerElement:m,unregisterElement:i}=ie(n),{pointerPosition:v}=T(),{handleDragStart:f}=ge(),g=a=>f(a,t,n);return r.onMounted(m),r.onBeforeUnmount(i),{pointerPosition:v,elementRef:t,isDragging:l,isOvered:s,isAllowed:o,isLazyAllowed:u,handleDragStart:g,id:e}},pe=n=>{const{zonesMap:e,hovered:t,draggingElements:l,isDragging:s,handleDropZoneIntersection:o}=T(),u=r.ref(null),m=r.computed(()=>t.zone.value===u.value),i=r.computed(()=>{if(!u.value||!s.value)return!1;const a=e.value.get(u.value);return a!=null&&a.groups.length?!Array.from(l.value.values()).some(d=>d.groups.length?!d.groups.some(c=>a.groups.includes(c)):!1):!0}),v=r.computed(()=>{if(!u.value||!s.value||t.zone.value!==u.value)return!1;const a=e.value.get(u.value);return a!=null&&a.groups.length?!Array.from(l.value.values()).some(d=>!d.groups.some(c=>a.groups.includes(c))):!0});return{elementRef:u,registerZone:()=>{if(!u.value)throw new Error("elementRef is not set");o("add",u.value),e.value.set(u.value,{node:u.value,groups:(n==null?void 0:n.groups)??[],events:(n==null?void 0:n.events)??{},data:(n==null?void 0:n.data)??void 0,disabled:(n==null?void 0:n.disabled)??!1}),u.value.setAttribute("data-dnd-droppable","true")},unregisterZone:()=>{u.value&&(o("remove",u.value),e.value.delete(u.value))},isOvered:m,isAllowed:i,isLazyAllowed:v}},he=n=>{const{elementRef:e,registerZone:t,unregisterZone:l,isOvered:s,isAllowed:o,isLazyAllowed:u}=pe(n);return r.onMounted(t),r.onBeforeUnmount(l),{elementRef:e,isOvered:s,isAllowed:o,isLazyAllowed:u}},ye=n=>{const{selectedElements:e,elementsMap:t}=T(),l=r.computed(()=>n.value?e.value.has(n.value):!1),s=r.computed(()=>{if(!n.value)return!1;for(const v of e.value)if(v&&I(v,n.value))return!0;return!1}),o=r.computed(()=>{if(!n.value)return!1;for(const v of e.value)if(v&&I(n.value,v))return!0;return!1}),u=()=>{n.value&&e.value.delete(n.value)},m=()=>{if(!(!n.value||!t.value.get(n.value))){if(s.value)for(const f of e.value)f&&I(f,n.value)&&e.value.delete(f);if(o.value)for(const f of e.value)f&&I(n.value,f)&&e.value.delete(f);e.value.add(n.value)}};return{handleUnselect:u,handleSelect:m,handleToggleSelect:()=>{n.value&&(e.value.has(n.value)?u():m())},isSelected:l,isParentOfSelected:s}};exports.DnDOperations=G;exports.default=oe;exports.getBoundingBox=Y;exports.useDnDStore=T;exports.useDragContainer=ne;exports.useDraggable=me;exports.useDroppable=he;exports.useSelection=ye;
|
|
2
2
|
//# sourceMappingURL=vue-dnd-kit-core.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vue-dnd-kit-core.cjs.js","sources":["../src/utils/operations.ts","../src/composables/useDnDStore.ts","../src/composables/useDragContainer.ts","../src/components/DefaultOverlay.vue","../src/components/DragOverlay.vue","../src/plugin.ts","../src/utils/geometry.ts","../src/utils/namespaces.ts","../src/utils/events.ts","../src/managers/useElementManager.ts","../src/utils/dom.ts","../src/utils/sensor.ts","../src/composables/useKeyboard.ts","../src/composables/usePointer.ts","../src/composables/useSensor.ts","../src/managers/useEventManager.ts","../src/composables/useDraggable.ts","../src/managers/useZoneManager.ts","../src/composables/useDroppable.ts","../src/composables/useSelection.ts"],"sourcesContent":["import { IDnDStore } from '../types';\r\n\r\nexport class DnDOperations {\r\n static remove = (source?: any[], index?: number) => {\r\n if (!source || index === undefined) return;\r\n const [item] = source.splice(index, 1);\r\n return item;\r\n };\r\n static insert = (target?: any[], index?: number, item?: any) => {\r\n if (!target || index === undefined) return;\r\n target.splice(index, 0, item);\r\n };\r\n static move = (\r\n source?: any[],\r\n sourceIndex?: number,\r\n target?: any[],\r\n targetIndex?: number\r\n ) => {\r\n if (\r\n !source ||\r\n !target ||\r\n sourceIndex === undefined ||\r\n targetIndex === undefined\r\n )\r\n return;\r\n const item = DnDOperations.remove(source, sourceIndex);\r\n DnDOperations.insert(target, targetIndex, item);\r\n };\r\n static swap = (\r\n source?: any[],\r\n sourceIndex?: number,\r\n target?: any[],\r\n targetIndex?: number\r\n ) => {\r\n if (\r\n !source ||\r\n !target ||\r\n sourceIndex === undefined ||\r\n targetIndex === undefined\r\n )\r\n return;\r\n\r\n const sourceItem = source[sourceIndex];\r\n const targetItem = target[targetIndex];\r\n\r\n source[sourceIndex] = targetItem;\r\n target[targetIndex] = sourceItem;\r\n };\r\n static copy = (\r\n source?: any[],\r\n index?: number,\r\n target?: any[],\r\n targetIndex?: number\r\n ) => {\r\n if (!source || index === undefined || !target || targetIndex === undefined)\r\n return;\r\n const item = source[index];\r\n DnDOperations.insert(target, targetIndex, item);\r\n };\r\n static applyTransfer = (store: IDnDStore) => {\r\n const hoveredElement = store.hovered.element.value;\r\n const hoveredZone = store.hovered.zone.value;\r\n\r\n if (hoveredElement) {\r\n const targetSource =\r\n store.elementsMap.value.get(hoveredElement)?.data?.source;\r\n const targetIndex =\r\n store.elementsMap.value.get(hoveredElement)?.data?.index;\r\n\r\n const firstElement = store.draggingElements.value.values().next().value;\r\n const firstIndex = firstElement?.data?.index;\r\n\r\n const sortDirection =\r\n firstIndex !== undefined &&\r\n targetIndex !== undefined &&\r\n firstIndex > targetIndex\r\n ? 1\r\n : -1;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort(\r\n (a, b) => sortDirection * ((a.data?.index || 0) - (b.data?.index || 0))\r\n );\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n } else if (hoveredZone) {\r\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\r\n const targetIndex = targetSource?.length;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n }\r\n };\r\n\r\n static applyCopy = (store: IDnDStore) => {\r\n const hoveredElement = store.hovered.element.value;\r\n const hoveredZone = store.hovered.zone.value;\r\n\r\n if (hoveredElement) {\r\n const targetSource =\r\n store.elementsMap.value.get(hoveredElement)?.data?.source;\r\n const targetIndex =\r\n store.elementsMap.value.get(hoveredElement)?.data?.index;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.copy(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n } else if (hoveredZone) {\r\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\r\n const targetIndex = targetSource?.length;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.copy(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n }\r\n };\r\n static applySwap = (store: IDnDStore) => {\r\n const hoveredElement = store.hovered.element.value;\r\n const hoveredZone = store.hovered.zone.value;\r\n\r\n if (hoveredElement && store.draggingElements.value.size === 1) {\r\n const element = store.draggingElements.value.values().next().value;\r\n DnDOperations.swap(\r\n element?.data?.source,\r\n element?.data?.index,\r\n store.elementsMap.value.get(hoveredElement)?.data?.source,\r\n store.elementsMap.value.get(hoveredElement)?.data?.index\r\n );\r\n } else if (hoveredZone) {\r\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\r\n const targetIndex = targetSource?.length;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n }\r\n };\r\n static applyRemove = (store: IDnDStore) => {\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) => {\r\n if (element.data?.source && element.data?.index !== undefined) {\r\n DnDOperations.remove(element.data.source, element.data.index);\r\n }\r\n });\r\n };\r\n static applyInsert = (store: IDnDStore, items: any[]) => {\r\n const hoveredElement = store.hovered.element.value;\r\n const hoveredZone = store.hovered.zone.value;\r\n\r\n if (hoveredElement && items.length > 0) {\r\n const targetSource =\r\n store.elementsMap.value.get(hoveredElement)?.data?.source;\r\n const targetIndex =\r\n store.elementsMap.value.get(hoveredElement)?.data?.index;\r\n\r\n items.forEach((item) => {\r\n DnDOperations.insert(targetSource, targetIndex, item);\r\n });\r\n } else if (hoveredZone) {\r\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\r\n const targetIndex = targetSource?.length;\r\n\r\n items.forEach((item) => {\r\n DnDOperations.insert(targetSource, targetIndex, item);\r\n });\r\n }\r\n };\r\n}\r\n","import type {\r\n IDragElement,\r\n IDraggingElement,\r\n IDropZone,\r\n IPoint,\r\n} from '../types';\r\nimport {\r\n computed,\r\n ref,\r\n shallowRef,\r\n type Component,\r\n type TransitionProps,\r\n} from 'vue';\r\nimport { createGlobalState, useMagicKeys } from '@vueuse/core';\r\n\r\nexport const useDnDStore = createGlobalState(() => {\r\n const isPending = shallowRef<boolean>(false);\r\n const draggingElements = ref<Map<HTMLElement | Element, IDraggingElement>>(\r\n new Map()\r\n );\r\n const isDragging = computed<boolean>(() => draggingElements.value.size > 0);\r\n\r\n const activeContainer = {\r\n component: ref<Component | null>(null),\r\n ref: shallowRef<HTMLElement | null>(null),\r\n options: shallowRef<TransitionProps | null>(null),\r\n animating: {\r\n enter: shallowRef<boolean>(false),\r\n leave: shallowRef<boolean>(false),\r\n appear: shallowRef<boolean>(false),\r\n },\r\n };\r\n\r\n const elementsMap = ref<Map<HTMLElement | Element, IDragElement>>(new Map());\r\n const selectedElements = ref<Set<HTMLElement | Element>>(new Set());\r\n const zonesMap = ref<Map<HTMLElement | Element, IDropZone>>(new Map());\r\n const visibleZones = shallowRef<Set<HTMLElement | Element>>(new Set());\r\n const visibleElements = shallowRef<Set<HTMLElement | Element>>(new Set());\r\n\r\n const hasIntersectionObserver =\r\n typeof window !== 'undefined' && 'IntersectionObserver' in window;\r\n\r\n const elementObserver = hasIntersectionObserver\r\n ? new IntersectionObserver((entries) => {\r\n entries.forEach((entry) =>\r\n visibleElements.value[entry.isIntersecting ? 'add' : 'delete'](\r\n entry.target\r\n )\r\n );\r\n })\r\n : null;\r\n\r\n const zoneObserver = hasIntersectionObserver\r\n ? new IntersectionObserver((entries) => {\r\n entries.forEach((entry) =>\r\n visibleZones.value[entry.isIntersecting ? 'add' : 'delete'](\r\n entry.target\r\n )\r\n );\r\n })\r\n : null;\r\n\r\n const handleDragElementIntersection = (\r\n action: 'add' | 'remove',\r\n element: HTMLElement | Element\r\n ) => {\r\n if (!elementObserver) return;\r\n\r\n if (action === 'add') {\r\n elementObserver.observe(element);\r\n } else {\r\n elementObserver.unobserve(element);\r\n visibleElements.value.delete(element);\r\n }\r\n };\r\n\r\n const handleDropZoneIntersection = (\r\n action: 'add' | 'remove',\r\n element: HTMLElement | Element\r\n ) => {\r\n if (!zoneObserver) return;\r\n\r\n if (action === 'add') {\r\n zoneObserver.observe(element);\r\n } else {\r\n zoneObserver.unobserve(element);\r\n visibleZones.value.delete(element);\r\n }\r\n };\r\n\r\n const pointerPosition = {\r\n start: shallowRef<IPoint | null>(null),\r\n current: shallowRef<IPoint | null>(null),\r\n offset: {\r\n percent: shallowRef<IPoint | null>(null),\r\n pixel: shallowRef<IPoint | null>(null),\r\n },\r\n };\r\n\r\n const { KeyW, KeyS, KeyA, KeyD, ctrl, shift, alt, meta } = useMagicKeys();\r\n\r\n const hovered = {\r\n zone: shallowRef<HTMLElement | Element | null>(null),\r\n element: shallowRef<HTMLElement | Element | null>(null),\r\n };\r\n\r\n return {\r\n draggingElements,\r\n isDragging,\r\n activeContainer,\r\n elementsMap,\r\n selectedElements,\r\n zonesMap,\r\n visibleZones,\r\n visibleElements,\r\n pointerPosition,\r\n keyboard: {\r\n w: KeyW,\r\n s: KeyS,\r\n a: KeyA,\r\n d: KeyD,\r\n ctrl,\r\n shift,\r\n alt,\r\n meta,\r\n },\r\n hovered,\r\n isPending,\r\n handleDragElementIntersection,\r\n handleDropZoneIntersection,\r\n };\r\n});\r\n","import { onUnmounted, onMounted, ref, type TransitionProps } from 'vue';\r\n\r\nimport { useDnDStore } from './useDnDStore';\r\n\r\nexport const useDragContainer = (options?: Omit<TransitionProps, 'appear'>) => {\r\n const elementRef = ref<HTMLElement | null>(null);\r\n\r\n const { draggingElements, pointerPosition, isDragging, activeContainer } =\r\n useDnDStore();\r\n\r\n onMounted(() => {\r\n activeContainer.ref = elementRef;\r\n activeContainer.options.value = options ?? null;\r\n });\r\n\r\n onUnmounted(() => {\r\n activeContainer.ref.value = null;\r\n activeContainer.options.value = null;\r\n });\r\n\r\n return {\r\n elementRef,\r\n draggingElements,\r\n pointerPosition,\r\n isDragging,\r\n animating: activeContainer.animating,\r\n };\r\n};\r\n","<script setup lang=\"ts\">\r\n import { computed, CSSProperties } from 'vue';\r\n import { useDragContainer } from '../composables/useDragContainer';\r\n\r\n const { elementRef, pointerPosition, isDragging, draggingElements } =\r\n useDragContainer();\r\n\r\n const { styles } = defineProps<{\r\n styles?: CSSProperties;\r\n }>();\r\n\r\n const computedStyle = computed<CSSProperties>(() => ({\r\n transform: `translate3d(${\r\n (pointerPosition.current.value?.x ?? 0) -\r\n (pointerPosition.offset.pixel.value?.x ?? 0)\r\n }px, ${\r\n (pointerPosition.current.value?.y ?? 0) -\r\n (pointerPosition.offset.pixel.value?.y ?? 0)\r\n }px, 0)`,\r\n zIndex: 1000,\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n transition: '0.3s cubic-bezier(0.165, 0.84, 0.44, 1)',\r\n ...styles,\r\n }));\r\n</script>\r\n\r\n<template>\r\n <div\r\n v-if=\"isDragging\"\r\n ref=\"elementRef\"\r\n :style=\"computedStyle\"\r\n >\r\n <template\r\n v-for=\"[node, element] in draggingElements\"\r\n :key=\"element.id\"\r\n >\r\n <component\r\n v-if=\"element.layer\"\r\n :is=\"element.layer\"\r\n :node=\"node\"\r\n :data=\"element.data\"\r\n :id=\"element.id\"\r\n :groups=\"element.groups\"\r\n />\r\n <div\r\n v-else\r\n v-html=\"element.initialHTML\"\r\n :style=\"{\r\n width: `${element.initialRect?.width}px`,\r\n height: `${element.initialRect?.height}px`,\r\n }\"\r\n />\r\n </template>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n import { computed, CSSProperties } from 'vue';\r\n import { useDnDStore } from '../composables/useDnDStore';\r\n import DefaultOverlay from './DefaultOverlay.vue';\r\n\r\n const props = defineProps<{\r\n styles?: CSSProperties;\r\n }>();\r\n\r\n const { activeContainer } = useDnDStore();\r\n\r\n const overlay = computed(() => ({\r\n component: activeContainer.component.value ?? DefaultOverlay,\r\n props,\r\n }));\r\n</script>\r\n\r\n<template>\r\n <Transition\r\n v-if=\"activeContainer.options.value\"\r\n :name=\"activeContainer.options.value.name\"\r\n :duration=\"activeContainer.options.value.duration\"\r\n :enter-from-class=\"activeContainer.options.value.enterFromClass\"\r\n :enter-to-class=\"activeContainer.options.value.enterToClass\"\r\n :enter-active-class=\"activeContainer.options.value.enterActiveClass\"\r\n :leave-from-class=\"activeContainer.options.value.leaveFromClass\"\r\n :leave-to-class=\"activeContainer.options.value.leaveToClass\"\r\n :leave-active-class=\"activeContainer.options.value.leaveActiveClass\"\r\n :appear-active-class=\"activeContainer.options.value.appearActiveClass\"\r\n :appear-from-class=\"activeContainer.options.value.appearFromClass\"\r\n :appear-to-class=\"activeContainer.options.value.appearToClass\"\r\n :mode=\"activeContainer.options.value.mode\"\r\n :type=\"activeContainer.options.value.type\"\r\n :css=\"activeContainer.options.value.css\"\r\n :appear=\"true\"\r\n :persisted=\"activeContainer.options.value.persisted\"\r\n @enter=\"activeContainer.options.value.onEnter\"\r\n @leave=\"activeContainer.options.value.onLeave\"\r\n @before-enter=\"activeContainer.options.value.onBeforeEnter\"\r\n @before-leave=\"activeContainer.options.value.onBeforeLeave\"\r\n @before-appear=\"activeContainer.options.value.onBeforeAppear\"\r\n @after-enter=\"activeContainer.options.value.onAfterEnter\"\r\n @after-leave=\"activeContainer.options.value.onAfterLeave\"\r\n @after-appear=\"activeContainer.options.value.onAfterAppear\"\r\n >\r\n <component\r\n :is=\"overlay.component || overlay\"\r\n v-bind=\"overlay.props || {}\"\r\n />\r\n </Transition>\r\n\r\n <component\r\n v-else\r\n :is=\"overlay.component || overlay\"\r\n v-bind=\"overlay.props || {}\"\r\n />\r\n</template>\r\n","import { createVNode, render } from 'vue';\r\n\r\nimport type { App } from 'vue';\r\nimport DragOverlay from './components/DragOverlay.vue';\r\nimport { IPluginOptions } from './types';\r\nimport { useDnDStore } from './composables/useDnDStore';\r\n\r\nexport const VueDndKitPlugin = {\r\n install(app: App, options?: IPluginOptions) {\r\n app.component('DragOverlay', DragOverlay);\r\n const originalMount = app.mount;\r\n app.mount = function (rootContainer) {\r\n const instance = originalMount.call(this, rootContainer);\r\n\r\n const rootEl =\r\n typeof rootContainer === 'string'\r\n ? document.querySelector(rootContainer)\r\n : rootContainer;\r\n\r\n if (rootEl && rootEl instanceof Element) {\r\n if (!rootEl.querySelector('#vue-dnd-kit-overlay')) {\r\n const overlayContainer = document.createElement('div');\r\n\r\n overlayContainer.id = 'vue-dnd-kit-overlay';\r\n overlayContainer.style.pointerEvents = 'none';\r\n\r\n rootEl.appendChild(overlayContainer);\r\n\r\n // Передаем опции напрямую в компонент\r\n const vnode = createVNode(DragOverlay, {\r\n styles: options?.defaultOverlay?.styles,\r\n });\r\n render(vnode, overlayContainer);\r\n\r\n app.__VUE_DND_KIT_OVERLAY__ = {\r\n container: overlayContainer,\r\n vnode,\r\n options: options?.defaultOverlay || {},\r\n };\r\n\r\n const store = useDnDStore();\r\n app.__VUE_DND_KIT_STORE__ = store;\r\n }\r\n }\r\n\r\n return instance;\r\n };\r\n\r\n // Модифицируем метод unmount для очистки\r\n const originalUnmount = app.unmount;\r\n app.unmount = function () {\r\n if (app.__VUE_DND_KIT_OVERLAY__) {\r\n render(null, app.__VUE_DND_KIT_OVERLAY__.container);\r\n delete app.__VUE_DND_KIT_OVERLAY__;\r\n }\r\n return originalUnmount.call(this);\r\n };\r\n },\r\n};\r\n\r\ndeclare module '@vue/runtime-core' {\r\n export interface App {\r\n __VUE_DND_KIT_OVERLAY__?: {\r\n container: HTMLElement;\r\n vnode: any;\r\n options: IPluginOptions['defaultOverlay'];\r\n };\r\n __VUE_DND_KIT_STORE__?: ReturnType<typeof useDnDStore>;\r\n }\r\n}\r\n","import type { IBoundingBox, IPoint } from '../types';\r\n\r\nexport const checkCollision = (\r\n boxA: IBoundingBox,\r\n boxB: IBoundingBox\r\n): boolean => {\r\n return (\r\n boxA.x < boxB.x + boxB.width &&\r\n boxA.x + boxA.width > boxB.x &&\r\n boxA.y < boxB.y + boxB.height &&\r\n boxA.y + boxA.height > boxB.y\r\n );\r\n};\r\n\r\nexport const getBoundingBox = (element: HTMLElement | null): IBoundingBox => {\r\n if (!element)\r\n return {\r\n x: 0,\r\n y: 0,\r\n width: 0,\r\n height: 0,\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n top: 0,\r\n };\r\n\r\n const rect = element.getBoundingClientRect();\r\n\r\n return {\r\n bottom: rect.bottom,\r\n left: rect.left,\r\n right: rect.right,\r\n top: rect.top,\r\n x: rect.x,\r\n y: rect.y,\r\n width: rect.width,\r\n height: rect.height,\r\n };\r\n};\r\n\r\nexport const getCenter = (box: IBoundingBox): IPoint => ({\r\n x: box.x + box.width / 2,\r\n y: box.y + box.height / 2,\r\n});\r\n\r\nexport const getOffset = (element: HTMLElement | null, pointer: IPoint) => {\r\n const rect = getBoundingBox(element);\r\n return {\r\n pixel: {\r\n x: pointer.x - rect.x,\r\n y: pointer.y - rect.y,\r\n },\r\n percent: {\r\n x: ((pointer.x - rect.x) / rect.width) * 100,\r\n y: ((pointer.y - rect.y) / rect.height) * 100,\r\n },\r\n };\r\n};\r\n\r\nexport const getDistance = (pointA: IPoint, pointB: IPoint): number => {\r\n const dx = pointB.x - pointA.x;\r\n const dy = pointB.y - pointA.y;\r\n return Math.sqrt(dx * dx + dy * dy);\r\n};\r\n\r\nexport const getOverlapPercent = (\r\n boxA: IBoundingBox,\r\n boxB: IBoundingBox\r\n): number => {\r\n const xOverlap = Math.max(\r\n 0,\r\n Math.min(boxA.x + boxA.width, boxB.x + boxB.width) -\r\n Math.max(boxA.x, boxB.x)\r\n );\r\n const yOverlap = Math.max(\r\n 0,\r\n Math.min(boxA.y + boxA.height, boxB.y + boxB.height) -\r\n Math.max(boxA.y, boxB.y)\r\n );\r\n\r\n const overlapArea = xOverlap * yOverlap;\r\n\r\n const boxAArea = boxA.width * boxA.height;\r\n const boxBArea = boxB.width * boxB.height;\r\n\r\n // Возвращаем среднее значение процентов перекрытия относительно обоих элементов\r\n return ((overlapArea / boxAArea) * 100 + (overlapArea / boxBArea) * 100) / 2;\r\n};\r\n","export const draggableDataName = 'data-vue-dnd-kit-draggable';\r\nexport const droppableDataName = 'data-vue-dnd-kit-droppable';\r\n\r\nexport const VUE_DND_KIT_OPTIONS = Symbol('vue-dnd-kit-options');\r\n","import { IDnDPayload, IDnDStore } from '../types';\r\n\r\nexport const preventEvent = (event: Event) => {\r\n event.preventDefault();\r\n};\r\n\r\nexport const createPayload = (store: IDnDStore): IDnDPayload => {\r\n return {\r\n items: Array.from(store.draggingElements.value.values()),\r\n };\r\n};\r\n","import { computed, ref, shallowRef, useId } from 'vue';\r\n\r\nimport type { IUseDragOptions } from '../types';\r\nimport { draggableDataName } from '../utils/namespaces';\r\nimport { preventEvent } from '../utils/events';\r\nimport { useDnDStore } from '../composables/useDnDStore';\r\n\r\nexport const useElementManager = (options?: IUseDragOptions) => {\r\n const {\r\n elementsMap,\r\n draggingElements,\r\n hovered,\r\n selectedElements,\r\n isDragging: isDragStarted,\r\n visibleElements,\r\n handleDragElementIntersection,\r\n } = useDnDStore();\r\n\r\n const elementRef = ref<HTMLElement | null>(null);\r\n const isOvered = computed<boolean>(() => {\r\n return hovered.element.value === elementRef.value;\r\n });\r\n\r\n const id = shallowRef(options?.id || useId());\r\n const disabled = shallowRef<boolean>((options?.disabled as boolean) ?? false);\r\n\r\n const isDragging = computed<boolean>(() => {\r\n if (disabled.value) return false;\r\n if (!elementRef.value) return false;\r\n if (!elementsMap.value.has(elementRef.value)) return false;\r\n return draggingElements.value.has(elementRef.value);\r\n });\r\n\r\n const isAllowed = computed<boolean>(() => {\r\n if (disabled.value) return false;\r\n if (!elementRef.value || !isDragStarted.value) return false;\r\n if (!visibleElements.value.has(elementRef.value)) return false;\r\n\r\n const currentElement = elementsMap.value.get(elementRef.value);\r\n if (!currentElement?.groups.length) return true;\r\n\r\n return !Array.from(draggingElements.value.entries()).some(\r\n ([_, draggingElement]) => {\r\n if (!draggingElement.groups.length) return false;\r\n return !draggingElement.groups.some((group) =>\r\n currentElement.groups.includes(group)\r\n );\r\n }\r\n );\r\n });\r\n\r\n const isLazyAllowed = computed<boolean>(() => {\r\n if (disabled.value) return false;\r\n if (!elementRef.value || !isDragStarted.value) return false;\r\n if (!visibleElements.value.has(elementRef.value)) return false;\r\n if (hovered.element.value !== elementRef.value) return false;\r\n\r\n const currentElement = elementsMap.value.get(elementRef.value);\r\n if (!currentElement?.groups.length) return true;\r\n\r\n return !Array.from(draggingElements.value.entries()).some(\r\n ([_, draggingElement]) => {\r\n if (!draggingElement.groups.length) return false;\r\n return !draggingElement.groups.some((group) =>\r\n currentElement.groups.includes(group)\r\n );\r\n }\r\n );\r\n });\r\n\r\n const registerElement = () => {\r\n if (!elementRef.value) throw new Error('ElementRef is not set');\r\n\r\n elementsMap.value.set(elementRef.value, {\r\n node: elementRef.value,\r\n groups: (options?.groups as string[]) ?? [],\r\n layer: options?.layer ?? null,\r\n defaultLayer: options?.layer ?? null,\r\n events: options?.events ?? {},\r\n data: options?.data ?? null,\r\n id: id.value,\r\n disabled: (disabled as unknown as boolean) ?? false,\r\n });\r\n\r\n handleDragElementIntersection('add', elementRef.value);\r\n\r\n elementRef.value.addEventListener('dragstart', preventEvent);\r\n elementRef.value.addEventListener('drag', preventEvent);\r\n elementRef.value.setAttribute(draggableDataName, 'true');\r\n elementRef.value.setAttribute('draggable', 'false');\r\n };\r\n\r\n const unregisterElement = () => {\r\n if (!elementRef.value) return;\r\n\r\n elementsMap.value.delete(elementRef.value);\r\n selectedElements.value.delete(elementRef.value);\r\n\r\n elementRef.value.removeEventListener('dragstart', preventEvent);\r\n elementRef.value.removeEventListener('drag', preventEvent);\r\n elementRef.value.removeAttribute(draggableDataName);\r\n elementRef.value.removeAttribute('draggable');\r\n };\r\n\r\n return {\r\n elementRef,\r\n registerElement,\r\n unregisterElement,\r\n isDragging,\r\n isOvered,\r\n isAllowed,\r\n isLazyAllowed,\r\n id,\r\n };\r\n};\r\n","export const isDescendant = (\r\n element: HTMLElement | Element | null,\r\n container: HTMLElement | Element\r\n): boolean => {\r\n if (!element) return false;\r\n return container.contains(element);\r\n};\r\n","import {\r\n checkCollision,\r\n getBoundingBox,\r\n getCenter,\r\n getDistance,\r\n getOverlapPercent,\r\n} from './geometry';\r\n\r\nimport { IDnDStore } from '../types';\r\nimport { isDescendant } from './dom';\r\n\r\nexport const defaultCollisionDetection = (store: IDnDStore) => {\r\n const containerRect = getBoundingBox(store.activeContainer.ref.value);\r\n const containerCenter = getCenter(containerRect);\r\n const pointerX = store.pointerPosition.current.value?.x ?? 0;\r\n const pointerY = store.pointerPosition.current.value?.y ?? 0;\r\n\r\n const isPointerInActiveContainer =\r\n containerRect &&\r\n pointerX >= containerRect.x &&\r\n pointerX <= containerRect.x + containerRect.width &&\r\n pointerY >= containerRect.y &&\r\n pointerY <= containerRect.y + containerRect.height;\r\n\r\n const shouldUseNormalPriority = !isPointerInActiveContainer;\r\n\r\n const activeDragNodes = Array.from(store.draggingElements.value.keys());\r\n\r\n const allCollidingElements = Array.from(store.visibleElements.value.entries())\r\n .filter(([node, _]) => {\r\n if (!node) return false;\r\n\r\n const rect = getBoundingBox(node as HTMLElement);\r\n return rect && containerRect && checkCollision(rect, containerRect);\r\n })\r\n .map(([node, element]) => {\r\n const rect = getBoundingBox(node as HTMLElement);\r\n const elementCenter = getCenter(rect);\r\n\r\n const isPointerInElement =\r\n pointerX >= rect.x &&\r\n pointerX <= rect.x + rect.width &&\r\n pointerY >= rect.y &&\r\n pointerY <= rect.y + rect.height;\r\n\r\n const overlapPercent = getOverlapPercent(rect, containerRect);\r\n const centerDistance = getDistance(containerCenter, elementCenter);\r\n\r\n let depth = 0;\r\n for (const [parentNode, _] of store.visibleElements.value.entries()) {\r\n if (\r\n parentNode !== node &&\r\n parentNode &&\r\n node &&\r\n isDescendant(node as HTMLElement, parentNode as HTMLElement)\r\n ) {\r\n depth++;\r\n }\r\n }\r\n\r\n return {\r\n element,\r\n node: node as HTMLElement,\r\n isPointerInElement,\r\n overlapPercent,\r\n depth,\r\n centerDistance,\r\n };\r\n })\r\n .sort((a, b) => {\r\n if (!shouldUseNormalPriority) {\r\n if (a.isPointerInElement && b.isPointerInElement)\r\n return b.depth - a.depth;\r\n if (a.isPointerInElement !== b.isPointerInElement)\r\n return a.isPointerInElement ? -1 : 1;\r\n }\r\n if (Math.abs(a.overlapPercent - b.overlapPercent) <= 1)\r\n return a.centerDistance - b.centerDistance;\r\n return b.overlapPercent - a.overlapPercent;\r\n });\r\n\r\n const allCollidingZones = Array.from(store.visibleZones.value.entries())\r\n .filter(([node, _]) => {\r\n if (\r\n !node ||\r\n activeDragNodes.some(\r\n (dragNode) =>\r\n dragNode &&\r\n isDescendant(node as HTMLElement, dragNode as HTMLElement)\r\n )\r\n )\r\n return false;\r\n\r\n const rect = getBoundingBox(node as HTMLElement);\r\n return rect && containerRect && checkCollision(rect, containerRect);\r\n })\r\n .map(([node, zone]) => {\r\n const rect = getBoundingBox(node as HTMLElement);\r\n const zoneCenter = getCenter(rect);\r\n\r\n const isPointerInElement =\r\n pointerX >= rect.x &&\r\n pointerX <= rect.x + rect.width &&\r\n pointerY >= rect.y &&\r\n pointerY <= rect.y + rect.height;\r\n\r\n const overlapPercent = getOverlapPercent(rect, containerRect);\r\n const centerDistance = getDistance(containerCenter, zoneCenter);\r\n\r\n // Вычисляем глубину вложенности\r\n let depth = 0;\r\n for (const [parentNode, _] of store.visibleZones.value.entries()) {\r\n if (\r\n parentNode !== node &&\r\n parentNode &&\r\n node &&\r\n isDescendant(node as HTMLElement, parentNode as HTMLElement)\r\n ) {\r\n depth++;\r\n }\r\n }\r\n\r\n return {\r\n zone,\r\n node: node as HTMLElement,\r\n isPointerInElement,\r\n overlapPercent,\r\n depth,\r\n centerDistance,\r\n };\r\n })\r\n .sort((a, b) => {\r\n if (!shouldUseNormalPriority) {\r\n if (a.isPointerInElement && b.isPointerInElement)\r\n return b.depth - a.depth;\r\n if (a.isPointerInElement !== b.isPointerInElement)\r\n return a.isPointerInElement ? -1 : 1;\r\n }\r\n if (Math.abs(a.overlapPercent - b.overlapPercent) <= 1)\r\n return a.centerDistance - b.centerDistance;\r\n return b.overlapPercent - a.overlapPercent;\r\n });\r\n\r\n return [\r\n ...allCollidingElements.map((item) => item.node),\r\n ...allCollidingZones.map((item) => item.node),\r\n ];\r\n};\r\n","import type { Ref } from 'vue';\r\nimport { getBoundingBox } from '../utils/geometry';\r\nimport { preventEvent } from '../utils/events';\r\nimport { useDnDStore } from './useDnDStore';\r\n\r\nexport interface IKeyboardOptions {\r\n moveStep?: number;\r\n}\r\n\r\nexport const useKeyboard = (\r\n elementRef: Ref<HTMLElement | null>,\r\n options?: IKeyboardOptions\r\n) => {\r\n const { pointerPosition, keyboard } = useDnDStore();\r\n const moveStep = options?.moveStep || 10;\r\n\r\n const onKeyboardStart = (event: KeyboardEvent) => {\r\n preventEvent(event);\r\n\r\n const rect = getBoundingBox(elementRef.value);\r\n\r\n elementRef.value?.blur();\r\n\r\n const centerX = rect.x + rect.width / 2;\r\n const centerY = rect.y + rect.height / 2;\r\n\r\n pointerPosition.start.value = {\r\n x: centerX,\r\n y: centerY,\r\n };\r\n\r\n pointerPosition.current.value = {\r\n x: centerX,\r\n y: centerY,\r\n };\r\n\r\n pointerPosition.offset.pixel.value = {\r\n x: rect.width / 2,\r\n y: rect.height / 2,\r\n };\r\n\r\n pointerPosition.offset.percent.value = {\r\n x: 50,\r\n y: 50,\r\n };\r\n };\r\n\r\n const onKeyboardMove = () => {\r\n if (!pointerPosition.current.value) return;\r\n\r\n const currentX = pointerPosition.current.value.x;\r\n const currentY = pointerPosition.current.value.y;\r\n\r\n let newX = currentX;\r\n let newY = currentY;\r\n\r\n if (keyboard.w.value) newY -= moveStep;\r\n if (keyboard.s.value) newY += moveStep;\r\n if (keyboard.a.value) newX -= moveStep;\r\n if (keyboard.d.value) newX += moveStep;\r\n\r\n pointerPosition.current.value = {\r\n x: newX,\r\n y: newY,\r\n };\r\n };\r\n\r\n const onKeyboardEnd = () => {\r\n pointerPosition.current.value = null;\r\n pointerPosition.start.value = null;\r\n pointerPosition.offset.pixel.value = null;\r\n pointerPosition.offset.percent.value = null;\r\n };\r\n\r\n return {\r\n onKeyboardStart,\r\n onKeyboardMove,\r\n onKeyboardEnd,\r\n };\r\n};\r\n","import type { Ref } from 'vue';\r\nimport { getOffset } from '../utils/geometry';\r\nimport { useDnDStore } from './useDnDStore';\r\n\r\nexport const usePointer = (elementRef: Ref<HTMLElement | null>) => {\r\n const store = useDnDStore();\r\n\r\n const onPointerStart = (event: PointerEvent) => {\r\n store.pointerPosition.start.value = { x: event.clientX, y: event.clientY };\r\n store.pointerPosition.current.value = {\r\n x: event.clientX,\r\n y: event.clientY,\r\n };\r\n\r\n const { pixel, percent } = getOffset(elementRef.value, {\r\n x: event.clientX,\r\n y: event.clientY,\r\n });\r\n\r\n store.pointerPosition.offset.pixel.value = pixel;\r\n store.pointerPosition.offset.percent.value = percent;\r\n };\r\n\r\n const onPointerMove = (event: PointerEvent | WheelEvent) => {\r\n if (store.isPending.value) return;\r\n\r\n store.pointerPosition.current.value = {\r\n x: event.clientX,\r\n y: event.clientY,\r\n };\r\n };\r\n\r\n const onPointerEnd = () => {\r\n store.pointerPosition.current.value = null;\r\n store.pointerPosition.start.value = null;\r\n store.pointerPosition.offset.pixel.value = null;\r\n store.pointerPosition.offset.percent.value = null;\r\n };\r\n\r\n return {\r\n onPointerStart,\r\n onPointerMove,\r\n onPointerEnd,\r\n };\r\n};\r\n","import type {\r\n ICollisionDetectionResult,\r\n IDraggingElement,\r\n IUseDragOptions,\r\n} from '../types';\r\n\r\nimport type { Ref } from 'vue';\r\nimport { createPayload } from '../utils/events';\r\nimport { defaultCollisionDetection } from '../utils/sensor';\r\nimport { isDescendant } from '../utils/dom';\r\nimport { useDnDStore } from './useDnDStore';\r\nimport { useKeyboard } from './useKeyboard';\r\nimport { usePointer } from './usePointer';\r\nimport { useThrottleFn } from '@vueuse/core';\r\n\r\nexport const useSensor = (\r\n elementRef: Ref<HTMLElement | null>,\r\n options?: IUseDragOptions\r\n) => {\r\n const store = useDnDStore();\r\n\r\n const { onPointerStart, onPointerMove, onPointerEnd } =\r\n usePointer(elementRef);\r\n\r\n const { onKeyboardStart, onKeyboardMove, onKeyboardEnd } = useKeyboard(\r\n elementRef,\r\n options?.keyboard\r\n );\r\n\r\n let animationFrameId: number | null = null;\r\n\r\n const getDraggingElements = (\r\n draggableElement: HTMLElement | null\r\n ): Map<HTMLElement | Element, IDraggingElement> => {\r\n if (!draggableElement) return new Map();\r\n\r\n const isDraggableInSelection =\r\n store.selectedElements.value.has(draggableElement);\r\n\r\n if (store.selectedElements.value.size > 0 && isDraggableInSelection) {\r\n const result = new Map<HTMLElement | Element, IDraggingElement>();\r\n\r\n store.selectedElements.value.forEach((node) => {\r\n const element = store.elementsMap.value.get(node);\r\n if (!element) return;\r\n\r\n result.set(node, {\r\n ...element,\r\n initialHTML: element.node?.outerHTML ?? '',\r\n initialRect: element.node?.getBoundingClientRect(),\r\n });\r\n });\r\n\r\n return result;\r\n }\r\n\r\n store.selectedElements.value.clear();\r\n\r\n const element = store.elementsMap.value.get(draggableElement);\r\n if (!element) return new Map();\r\n\r\n const result = new Map<HTMLElement | Element, IDraggingElement>();\r\n\r\n result.set(draggableElement, {\r\n ...element,\r\n initialHTML: element.node?.outerHTML ?? '',\r\n initialRect: element.node?.getBoundingClientRect(),\r\n });\r\n\r\n return result;\r\n };\r\n\r\n const validateCollisionResults = (\r\n htmlElements: HTMLElement | HTMLElement[] | Element | Element[] | null\r\n ) => {\r\n if (!htmlElements) {\r\n return { element: null, zone: null };\r\n }\r\n\r\n const elements = Array.isArray(htmlElements)\r\n ? htmlElements\r\n : [htmlElements];\r\n const activeDragNodes = Array.from(store.draggingElements.value.keys());\r\n\r\n const disabledZones = Array.from(store.zonesMap.value.entries()).flatMap(\r\n ([element, zone]) => (zone.disabled ? [element] : [])\r\n );\r\n\r\n const disabledElements = Array.from(\r\n store.elementsMap.value.entries()\r\n ).flatMap(([element, data]) => (data.disabled ? [element] : []));\r\n\r\n const filteredZoneElement = elements.find((htmlElement) => {\r\n if (!store.visibleZones.value.has(htmlElement)) return false;\r\n\r\n const zone = store.zonesMap.value.get(htmlElement);\r\n if (!zone) return false;\r\n\r\n if (zone.disabled) return false;\r\n\r\n const isInsideDisabledZone = disabledZones.some(\r\n (disabledZone) =>\r\n htmlElement === disabledZone ||\r\n isDescendant(htmlElement as HTMLElement, disabledZone as HTMLElement)\r\n );\r\n\r\n if (isInsideDisabledZone) return false;\r\n\r\n if (\r\n activeDragNodes.some(\r\n (dragNode) =>\r\n dragNode &&\r\n (dragNode === zone.node ||\r\n isDescendant(zone.node as HTMLElement, dragNode as HTMLElement))\r\n )\r\n )\r\n return false;\r\n\r\n if (zone.groups.length) {\r\n const isCompatible = !Array.from(\r\n store.draggingElements.value.values()\r\n ).some((element) => {\r\n if (!element.groups.length) return false;\r\n return !element.groups.some((group) => zone.groups.includes(group));\r\n });\r\n if (!isCompatible) return false;\r\n }\r\n\r\n return true;\r\n });\r\n\r\n if (!filteredZoneElement) {\r\n return { element: null, zone: null };\r\n }\r\n\r\n const filteredElements = elements.filter((htmlElement) => {\r\n if (!store.visibleElements.value.has(htmlElement)) return false;\r\n if (!store.elementsMap.value.has(htmlElement)) return false;\r\n\r\n const element = store.elementsMap.value.get(htmlElement);\r\n if (element?.disabled) return false;\r\n\r\n const isInsideDisabledZone = disabledZones.some(\r\n (disabledZone) =>\r\n htmlElement === disabledZone ||\r\n isDescendant(htmlElement as HTMLElement, disabledZone as HTMLElement)\r\n );\r\n\r\n const isInsideDisabledElement = disabledElements.some(\r\n (disabledElement) =>\r\n htmlElement === disabledElement ||\r\n isDescendant(\r\n htmlElement as HTMLElement,\r\n disabledElement as HTMLElement\r\n )\r\n );\r\n\r\n if (isInsideDisabledZone || isInsideDisabledElement) return false;\r\n\r\n const isGroupsCompatible = !Array.from(\r\n store.draggingElements.value.values()\r\n ).some((element) => {\r\n if (!element.groups.length) return false;\r\n return !element.groups.some((group) =>\r\n store.elementsMap.value.get(htmlElement)?.groups.includes(group)\r\n );\r\n });\r\n\r\n return isGroupsCompatible;\r\n });\r\n\r\n const possibleElement = filteredElements.find((htmlElement) => {\r\n const isCompatible = !activeDragNodes.some(\r\n (dragNode) =>\r\n dragNode &&\r\n (dragNode === htmlElement ||\r\n isDescendant(htmlElement as HTMLElement, dragNode as HTMLElement) ||\r\n isDescendant(dragNode as HTMLElement, htmlElement as HTMLElement))\r\n );\r\n\r\n if (!isCompatible) return false;\r\n\r\n return (\r\n htmlElement === filteredZoneElement ||\r\n isDescendant(\r\n htmlElement as HTMLElement,\r\n filteredZoneElement as HTMLElement\r\n )\r\n );\r\n });\r\n\r\n return {\r\n element: possibleElement || null,\r\n zone: filteredZoneElement,\r\n };\r\n };\r\n\r\n const detectCollisions = options?.sensor?.setup || defaultCollisionDetection;\r\n\r\n const processCollisionResults = (results: ICollisionDetectionResult) => {\r\n const previousElement = store.hovered.element.value;\r\n const previousZone = store.hovered.zone.value;\r\n\r\n const newElement = results.element;\r\n const newZone = results.zone;\r\n\r\n store.hovered.element.value = newElement;\r\n store.hovered.zone.value = newZone;\r\n\r\n if (previousElement !== newElement) {\r\n if (previousElement) {\r\n store.elementsMap.value\r\n .get(previousElement)\r\n ?.events?.onLeave?.(store, createPayload(store));\r\n }\r\n\r\n if (newElement) {\r\n store.elementsMap.value\r\n .get(newElement)\r\n ?.events?.onHover?.(store, createPayload(store));\r\n }\r\n }\r\n\r\n if (previousZone !== newZone) {\r\n if (previousZone) {\r\n store.zonesMap.value\r\n .get(previousZone)\r\n ?.events?.onLeave?.(store, createPayload(store));\r\n }\r\n\r\n if (newZone) {\r\n store.zonesMap.value\r\n .get(newZone)\r\n ?.events?.onHover?.(store, createPayload(store));\r\n }\r\n }\r\n };\r\n\r\n const throttledDetectAndProcess = useThrottleFn(() => {\r\n const htmlElements = detectCollisions(store);\r\n const processedResults = validateCollisionResults(htmlElements);\r\n processCollisionResults(processedResults);\r\n }, options?.sensor?.throttle ?? 0);\r\n\r\n const animationLoop = () => {\r\n throttledDetectAndProcess();\r\n\r\n animationFrameId = requestAnimationFrame(animationLoop);\r\n };\r\n\r\n const startDetection = () => animationLoop();\r\n\r\n const stopDetection = () => {\r\n if (animationFrameId !== null) {\r\n onPointerEnd();\r\n onKeyboardEnd();\r\n cancelAnimationFrame(animationFrameId);\r\n animationFrameId = null;\r\n }\r\n };\r\n\r\n const activate = (event: PointerEvent | KeyboardEvent) => {\r\n store.draggingElements.value = getDraggingElements(elementRef.value);\r\n store.draggingElements.value.forEach((element) =>\r\n element.events.onStart?.(store, createPayload(store))\r\n );\r\n\r\n if (event instanceof PointerEvent) {\r\n onPointerStart(event);\r\n } else {\r\n onKeyboardStart(event);\r\n }\r\n\r\n startDetection();\r\n };\r\n\r\n const track = (event: PointerEvent | WheelEvent | KeyboardEvent) => {\r\n store.draggingElements.value.forEach((element) =>\r\n element.events.onMove?.(store, createPayload(store))\r\n );\r\n\r\n if (event instanceof KeyboardEvent) {\r\n onKeyboardMove();\r\n } else {\r\n onPointerMove(event);\r\n }\r\n };\r\n\r\n const deactivate = async (triggerEvents = true) => {\r\n if (store.hovered.zone.value) {\r\n const zone = store.zonesMap.value.get(store.hovered.zone.value);\r\n const result = zone?.events.onDrop?.(store, createPayload(store));\r\n\r\n if (result instanceof Promise) {\r\n try {\r\n store.isPending.value = true;\r\n\r\n const promiseResult = await result;\r\n\r\n if (promiseResult) {\r\n if (triggerEvents) store.selectedElements.value.clear();\r\n\r\n store.draggingElements.value.clear();\r\n\r\n store.hovered.zone.value = null;\r\n store.hovered.element.value = null;\r\n\r\n stopDetection();\r\n }\r\n\r\n return promiseResult;\r\n } catch {\r\n return false;\r\n } finally {\r\n store.isPending.value = false;\r\n }\r\n } else {\r\n if (triggerEvents) store.selectedElements.value.clear();\r\n\r\n store.draggingElements.value.clear();\r\n\r\n store.hovered.zone.value = null;\r\n store.hovered.element.value = null;\r\n\r\n stopDetection();\r\n }\r\n } else {\r\n store.draggingElements.value.forEach((element) =>\r\n element.events.onEnd?.(store, createPayload(store))\r\n );\r\n\r\n if (triggerEvents) store.selectedElements.value.clear();\r\n\r\n store.draggingElements.value.clear();\r\n\r\n store.hovered.zone.value = null;\r\n store.hovered.element.value = null;\r\n\r\n stopDetection();\r\n }\r\n };\r\n\r\n return {\r\n activate,\r\n track,\r\n deactivate,\r\n };\r\n};\r\n","import type { IUseDragOptions } from '../types';\r\nimport { Ref } from 'vue';\r\nimport { createGlobalState } from '@vueuse/core';\r\nimport { preventEvent } from '../utils/events';\r\nimport { useDnDStore } from '../composables/useDnDStore';\r\nimport { useSensor } from '../composables/useSensor';\r\n\r\nenum EKeyboardKey {\r\n ESCAPE = 'Escape',\r\n SPACE = 'Space',\r\n ENTER = 'Enter',\r\n W = 'KeyW',\r\n A = 'KeyA',\r\n S = 'KeyS',\r\n D = 'KeyD',\r\n CONTROL = 'ControlLeft',\r\n ALT = 'AltLeft',\r\n SHIFT = 'ShiftLeft',\r\n META = 'MetaLeft',\r\n}\r\n\r\nexport const useEventManager = createGlobalState(() => {\r\n let originalUserSelect = '';\r\n let originalTouchAction = '';\r\n let originalOverscrollBehavior = '';\r\n\r\n let currentMoveHandler: ((event: any) => void) | null = null;\r\n let currentEndHandler: (() => void) | null = null;\r\n let currentCancelHandler: (() => void) | null = null;\r\n let currentScrollHandler: ((event: WheelEvent) => void) | null = null;\r\n let currentKeyHandler: ((event: KeyboardEvent) => void) | null = null;\r\n\r\n const { activeContainer, isPending, elementsMap } = useDnDStore();\r\n\r\n const disableInteractions = () => {\r\n const body = document.body;\r\n\r\n originalUserSelect = body.style.userSelect;\r\n\r\n body.style.userSelect = 'none';\r\n\r\n window.addEventListener('contextmenu', preventEvent);\r\n window.addEventListener('selectstart', preventEvent);\r\n window.addEventListener('touchstart', preventEvent);\r\n window.addEventListener('touchmove', preventEvent);\r\n };\r\n\r\n const enableInteractions = () => {\r\n const body = document.body;\r\n\r\n body.style.userSelect = originalUserSelect;\r\n body.style.touchAction = originalTouchAction;\r\n body.style.overscrollBehavior = originalOverscrollBehavior;\r\n\r\n window.removeEventListener('contextmenu', preventEvent);\r\n window.removeEventListener('selectstart', preventEvent);\r\n window.removeEventListener('touchstart', preventEvent);\r\n window.removeEventListener('touchmove', preventEvent);\r\n };\r\n\r\n const clearAllListeners = () => {\r\n if (currentMoveHandler) {\r\n document.removeEventListener('pointermove', currentMoveHandler);\r\n currentMoveHandler = null;\r\n }\r\n\r\n if (currentEndHandler) {\r\n document.removeEventListener('pointerup', currentEndHandler);\r\n currentEndHandler = null;\r\n }\r\n\r\n if (currentCancelHandler) {\r\n currentCancelHandler = null;\r\n }\r\n\r\n if (currentScrollHandler) {\r\n document.removeEventListener('wheel', currentScrollHandler);\r\n currentScrollHandler = null;\r\n }\r\n\r\n if (currentKeyHandler) {\r\n document.removeEventListener('keydown', currentKeyHandler);\r\n document.removeEventListener('keypress', currentKeyHandler);\r\n document.removeEventListener('keyup', currentKeyHandler);\r\n currentKeyHandler = null;\r\n }\r\n };\r\n\r\n const handleDragStart = (\r\n event: PointerEvent | KeyboardEvent,\r\n elementRef: Ref<HTMLElement | null>,\r\n options?: IUseDragOptions\r\n ) => {\r\n if (!elementRef.value) return;\r\n if (isPending.value) return;\r\n\r\n const element = elementsMap.value.get(elementRef.value);\r\n if (element?.disabled) return;\r\n\r\n clearAllListeners();\r\n\r\n (event.target as HTMLElement).blur();\r\n\r\n if (options?.container) activeContainer.component.value = options.container;\r\n\r\n const { activate, track, deactivate } = useSensor(elementRef, options);\r\n\r\n currentEndHandler = () => {\r\n deactivate(true).then((response) => {\r\n if (response === false) return;\r\n\r\n activeContainer.component.value = null;\r\n enableInteractions();\r\n deactivate(true);\r\n clearAllListeners();\r\n });\r\n };\r\n\r\n currentCancelHandler = () => {\r\n activeContainer.component.value = null;\r\n enableInteractions();\r\n deactivate(false);\r\n clearAllListeners();\r\n };\r\n\r\n currentMoveHandler = (event: PointerEvent | KeyboardEvent) => track(event);\r\n currentScrollHandler = (event: WheelEvent) => track(event);\r\n currentKeyHandler = (event: KeyboardEvent) => {\r\n if (event.type === 'keyup') {\r\n if (event.code === EKeyboardKey.ESCAPE) currentCancelHandler?.();\r\n if (event.code === EKeyboardKey.ENTER) currentEndHandler?.();\r\n }\r\n\r\n track(event);\r\n };\r\n\r\n disableInteractions();\r\n activate(event);\r\n\r\n document.addEventListener('pointermove', currentMoveHandler);\r\n document.addEventListener('pointerup', currentEndHandler);\r\n document.addEventListener('wheel', currentScrollHandler);\r\n document.addEventListener('keydown', currentKeyHandler);\r\n document.addEventListener('keypress', currentKeyHandler);\r\n document.addEventListener('keyup', currentKeyHandler);\r\n };\r\n\r\n return {\r\n handleDragStart,\r\n };\r\n});\r\n","import { onBeforeUnmount, onMounted } from 'vue';\r\n\r\nimport type { IUseDragOptions } from '../types';\r\nimport { useDnDStore } from './useDnDStore';\r\nimport { useElementManager } from '../managers/useElementManager';\r\nimport { useEventManager } from '../managers/useEventManager';\r\n\r\nexport const useDraggable = (options?: IUseDragOptions) => {\r\n const {\r\n id,\r\n elementRef,\r\n isDragging,\r\n isOvered,\r\n isAllowed,\r\n isLazyAllowed,\r\n registerElement,\r\n unregisterElement,\r\n } = useElementManager(options);\r\n\r\n const { pointerPosition } = useDnDStore();\r\n const { handleDragStart: start } = useEventManager();\r\n\r\n const handleDragStart = (event: PointerEvent | KeyboardEvent) =>\r\n start(event, elementRef, options);\r\n\r\n onMounted(registerElement);\r\n onBeforeUnmount(unregisterElement);\r\n\r\n return {\r\n pointerPosition,\r\n elementRef,\r\n isDragging,\r\n isOvered,\r\n isAllowed,\r\n isLazyAllowed,\r\n handleDragStart,\r\n id,\r\n };\r\n};\r\n","import { computed, ref } from 'vue';\r\n\r\nimport type { IUseDropOptions } from '../types';\r\nimport { useDnDStore } from '../composables/useDnDStore';\r\n\r\nexport const useZoneManager = (options?: IUseDropOptions) => {\r\n const {\r\n zonesMap,\r\n hovered,\r\n draggingElements,\r\n isDragging,\r\n handleDropZoneIntersection,\r\n } = useDnDStore();\r\n\r\n const elementRef = ref<HTMLElement | null>(null);\r\n\r\n const isOvered = computed<boolean>(\r\n () => hovered.zone.value === elementRef.value\r\n );\r\n\r\n const isAllowed = computed<boolean>(() => {\r\n if (!elementRef.value || !isDragging.value) return false;\r\n\r\n const currentZone = zonesMap.value.get(elementRef.value);\r\n if (!currentZone?.groups.length) return true;\r\n\r\n return !Array.from(draggingElements.value.values()).some((element) => {\r\n if (!element.groups.length) return false;\r\n return !element.groups.some((group) =>\r\n currentZone.groups.includes(group)\r\n );\r\n });\r\n });\r\n\r\n const isLazyAllowed = computed<boolean>(() => {\r\n if (!elementRef.value || !isDragging.value) return false;\r\n if (hovered.zone.value !== elementRef.value) return false;\r\n\r\n const currentZone = zonesMap.value.get(elementRef.value);\r\n if (!currentZone?.groups.length) return true;\r\n\r\n return !Array.from(draggingElements.value.values()).some((element) => {\r\n return !element.groups.some((group) =>\r\n currentZone.groups.includes(group)\r\n );\r\n });\r\n });\r\n\r\n const registerZone = () => {\r\n if (!elementRef.value) throw new Error('elementRef is not set');\r\n\r\n handleDropZoneIntersection('add', elementRef.value);\r\n\r\n zonesMap.value.set(elementRef.value, {\r\n node: elementRef.value,\r\n groups: options?.groups ?? [],\r\n events: options?.events ?? {},\r\n data: options?.data ?? undefined,\r\n disabled: (options?.disabled as boolean) ?? false,\r\n });\r\n\r\n elementRef.value.setAttribute('data-dnd-droppable', 'true');\r\n };\r\n\r\n const unregisterZone = () => {\r\n if (!elementRef.value) return;\r\n\r\n handleDropZoneIntersection('remove', elementRef.value);\r\n\r\n zonesMap.value.delete(elementRef.value);\r\n };\r\n\r\n return {\r\n elementRef,\r\n registerZone,\r\n unregisterZone,\r\n isOvered,\r\n isAllowed,\r\n isLazyAllowed,\r\n };\r\n};\r\n","import { onBeforeUnmount, onMounted } from 'vue';\r\n\r\nimport type { IUseDropOptions } from '../types';\r\nimport { useZoneManager } from '../managers/useZoneManager';\r\n\r\nexport const useDroppable = (options?: IUseDropOptions) => {\r\n const {\r\n elementRef,\r\n registerZone,\r\n unregisterZone,\r\n isOvered,\r\n isAllowed,\r\n isLazyAllowed,\r\n } = useZoneManager(options);\r\n\r\n // Register/unregister drop zone with store\r\n onMounted(registerZone);\r\n onBeforeUnmount(unregisterZone);\r\n\r\n return { elementRef, isOvered, isAllowed, isLazyAllowed };\r\n};\r\n","import { computed, type Ref } from 'vue';\r\nimport { useDnDStore } from './useDnDStore';\r\nimport { isDescendant } from '../utils/dom';\r\n\r\nexport const useSelection = (elementRef: Ref<HTMLElement | null>) => {\r\n const { selectedElements, elementsMap } = useDnDStore();\r\n\r\n const isSelected = computed<boolean>(() =>\r\n elementRef.value ? selectedElements.value.has(elementRef.value) : false\r\n );\r\n\r\n const isParentOfSelected = computed(() => {\r\n if (!elementRef.value) return false;\r\n\r\n for (const node of selectedElements.value) {\r\n if (\r\n node &&\r\n isDescendant(node as HTMLElement, elementRef.value as HTMLElement)\r\n ) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n\r\n const hasSelectedParent = computed(() => {\r\n if (!elementRef.value) return false;\r\n\r\n for (const node of selectedElements.value) {\r\n if (\r\n node &&\r\n isDescendant(elementRef.value as HTMLElement, node as HTMLElement)\r\n ) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n\r\n const handleUnselect = () => {\r\n if (!elementRef.value) return;\r\n selectedElements.value.delete(elementRef.value);\r\n };\r\n\r\n const handleSelect = () => {\r\n if (!elementRef.value) return;\r\n const element = elementsMap.value.get(elementRef.value);\r\n if (!element) return;\r\n\r\n if (isParentOfSelected.value) {\r\n // Удаляем все дочерние выбранные элементы\r\n for (const node of selectedElements.value) {\r\n if (\r\n node &&\r\n isDescendant(node as HTMLElement, elementRef.value as HTMLElement)\r\n ) {\r\n selectedElements.value.delete(node);\r\n }\r\n }\r\n }\r\n\r\n if (hasSelectedParent.value) {\r\n // Удаляем все родительские выбранные элементы\r\n for (const node of selectedElements.value) {\r\n if (\r\n node &&\r\n isDescendant(elementRef.value as HTMLElement, node as HTMLElement)\r\n ) {\r\n selectedElements.value.delete(node);\r\n }\r\n }\r\n }\r\n\r\n selectedElements.value.add(elementRef.value);\r\n };\r\n\r\n const handleToggleSelect = () => {\r\n if (!elementRef.value) return;\r\n\r\n selectedElements.value.has(elementRef.value)\r\n ? handleUnselect()\r\n : handleSelect();\r\n };\r\n\r\n return {\r\n handleUnselect,\r\n handleSelect,\r\n handleToggleSelect,\r\n isSelected,\r\n isParentOfSelected,\r\n };\r\n};\r\n"],"names":["_DnDOperations","__publicField","source","index","item","target","sourceIndex","targetIndex","sourceItem","targetItem","store","hoveredElement","hoveredZone","targetSource","_b","_a","_d","_c","firstElement","firstIndex","_e","sortDirection","a","b","element","_g","_f","_h","items","DnDOperations","useDnDStore","createGlobalState","isPending","shallowRef","draggingElements","ref","isDragging","computed","activeContainer","elementsMap","selectedElements","zonesMap","visibleZones","visibleElements","hasIntersectionObserver","elementObserver","entries","entry","zoneObserver","handleDragElementIntersection","action","handleDropZoneIntersection","pointerPosition","KeyW","KeyS","KeyA","KeyD","ctrl","shift","alt","meta","useMagicKeys","hovered","useDragContainer","options","elementRef","onMounted","onUnmounted","computedStyle","__props","props","overlay","DefaultOverlay","VueDndKitPlugin","app","DragOverlay","originalMount","rootContainer","instance","rootEl","overlayContainer","vnode","createVNode","render","originalUnmount","checkCollision","boxA","boxB","getBoundingBox","rect","getCenter","box","getOffset","pointer","getDistance","pointA","pointB","dx","dy","getOverlapPercent","xOverlap","yOverlap","overlapArea","boxAArea","boxBArea","draggableDataName","preventEvent","event","createPayload","useElementManager","isDragStarted","isOvered","id","useId","disabled","isAllowed","currentElement","_","draggingElement","group","isLazyAllowed","isDescendant","container","defaultCollisionDetection","containerRect","containerCenter","pointerX","pointerY","shouldUseNormalPriority","activeDragNodes","allCollidingElements","node","elementCenter","isPointerInElement","overlapPercent","centerDistance","depth","parentNode","allCollidingZones","dragNode","zone","zoneCenter","useKeyboard","keyboard","moveStep","centerX","centerY","currentX","currentY","newX","newY","usePointer","pixel","percent","useSensor","onPointerStart","onPointerMove","onPointerEnd","onKeyboardStart","onKeyboardMove","onKeyboardEnd","animationFrameId","getDraggingElements","draggableElement","isDraggableInSelection","result","validateCollisionResults","htmlElements","elements","disabledZones","disabledElements","data","filteredZoneElement","htmlElement","disabledZone","isInsideDisabledZone","isInsideDisabledElement","disabledElement","detectCollisions","processCollisionResults","results","previousElement","previousZone","newElement","newZone","_i","_l","_k","_j","throttledDetectAndProcess","useThrottleFn","processedResults","animationLoop","startDetection","stopDetection","triggerEvents","promiseResult","useEventManager","originalUserSelect","originalTouchAction","originalOverscrollBehavior","currentMoveHandler","currentEndHandler","currentCancelHandler","currentScrollHandler","currentKeyHandler","disableInteractions","body","enableInteractions","clearAllListeners","activate","track","deactivate","response","useDraggable","registerElement","unregisterElement","start","handleDragStart","onBeforeUnmount","useZoneManager","currentZone","useDroppable","registerZone","unregisterZone","useSelection","isSelected","isParentOfSelected","hasSelectedParent","handleUnselect","handleSelect"],"mappings":"qUAEaA,EAAN,MAAMA,CAAc,CAqN3B,EApNEC,EADWD,EACJ,SAAS,CAACE,EAAgBC,IAAmB,CAC9C,GAAA,CAACD,GAAUC,IAAU,OAAW,OACpC,KAAM,CAACC,CAAI,EAAIF,EAAO,OAAOC,EAAO,CAAC,EAC9B,OAAAC,CACT,GACAH,EANWD,EAMJ,SAAS,CAACK,EAAgBF,EAAgBC,IAAe,CAC1D,CAACC,GAAUF,IAAU,QAClBE,EAAA,OAAOF,EAAO,EAAGC,CAAI,CAC9B,GACAH,EAVWD,EAUJ,OAAO,CACZE,EACAI,EACAD,EACAE,IACG,CACH,GACE,CAACL,GACD,CAACG,GACDC,IAAgB,QAChBC,IAAgB,OAEhB,OACF,MAAMH,EAAOJ,EAAc,OAAOE,EAAQI,CAAW,EACvCN,EAAA,OAAOK,EAAQE,EAAaH,CAAI,CAChD,GACAH,EA1BWD,EA0BJ,OAAO,CACZE,EACAI,EACAD,EACAE,IACG,CACH,GACE,CAACL,GACD,CAACG,GACDC,IAAgB,QAChBC,IAAgB,OAEhB,OAEI,MAAAC,EAAaN,EAAOI,CAAW,EAC/BG,EAAaJ,EAAOE,CAAW,EAErCL,EAAOI,CAAW,EAAIG,EACtBJ,EAAOE,CAAW,EAAIC,CACxB,GACAP,EA9CWD,EA8CJ,OAAO,CACZE,EACAC,EACAE,EACAE,IACG,CACH,GAAI,CAACL,GAAUC,IAAU,QAAa,CAACE,GAAUE,IAAgB,OAC/D,OACI,MAAAH,EAAOF,EAAOC,CAAK,EACXH,EAAA,OAAOK,EAAQE,EAAaH,CAAI,CAChD,GACAH,EAzDWD,EAyDJ,gBAAiBU,GAAqB,mBACrC,MAAAC,EAAiBD,EAAM,QAAQ,QAAQ,MACvCE,EAAcF,EAAM,QAAQ,KAAK,MAEvC,GAAIC,EAAgB,CAClB,MAAME,GACJC,GAAAC,EAAAL,EAAM,YAAY,MAAM,IAAIC,CAAc,IAA1C,YAAAI,EAA6C,OAA7C,YAAAD,EAAmD,OAC/CP,GACJS,GAAAC,EAAAP,EAAM,YAAY,MAAM,IAAIC,CAAc,IAA1C,YAAAM,EAA6C,OAA7C,YAAAD,EAAmD,MAE/CE,EAAeR,EAAM,iBAAiB,MAAM,OAAO,EAAE,OAAO,MAC5DS,GAAaC,EAAAF,GAAA,YAAAA,EAAc,OAAd,YAAAE,EAAoB,MAEjCC,EACJF,IAAe,QACfZ,IAAgB,QAChBY,EAAaZ,EACT,EACA,GAEiB,MAAM,KAC3BG,EAAM,iBAAiB,MAAM,OAAO,CAAA,EACpC,KACA,CAACY,EAAGC,aAAM,OAAAF,MAAkBN,EAAAO,EAAE,OAAF,YAAAP,EAAQ,QAAS,MAAMD,EAAAS,EAAE,OAAF,YAAAT,EAAQ,QAAS,IACtE,EAEe,QAASU,GACtB,SAAA,OAAAxB,EAAc,MACZe,EAAAS,EAAQ,OAAR,YAAAT,EAAc,QACdD,EAAAU,EAAQ,OAAR,YAAAV,EAAc,MACdD,EACAN,CAAA,EAEJ,UACSK,EAAa,CACtB,MAAMC,GAAeY,GAAAC,EAAAhB,EAAM,SAAS,MAAM,IAAIE,CAAW,IAApC,YAAAc,EAAuC,OAAvC,YAAAD,EAA6C,OAC5DlB,EAAcM,GAAA,YAAAA,EAAc,OAEX,MAAM,KAC3BH,EAAM,iBAAiB,MAAM,OAAO,CACpC,EAAA,KAAK,CAACY,EAAGC,IAAO,SAAA,SAAAR,EAAAQ,EAAE,OAAF,YAAAR,EAAQ,QAAS,MAAMD,EAAAQ,EAAE,OAAF,YAAAR,EAAQ,QAAS,GAAE,EAE7C,QAASU,GACtB,SAAA,OAAAxB,EAAc,MACZe,EAAAS,EAAQ,OAAR,YAAAT,EAAc,QACdD,EAAAU,EAAQ,OAAR,YAAAV,EAAc,MACdD,EACAN,CAAA,EAEJ,CAAA,CAEJ,GAEAN,EA9GWD,EA8GJ,YAAaU,GAAqB,iBACjC,MAAAC,EAAiBD,EAAM,QAAQ,QAAQ,MACvCE,EAAcF,EAAM,QAAQ,KAAK,MAEvC,GAAIC,EAAgB,CAClB,MAAME,GACJC,GAAAC,EAAAL,EAAM,YAAY,MAAM,IAAIC,CAAc,IAA1C,YAAAI,EAA6C,OAA7C,YAAAD,EAAmD,OAC/CP,GACJS,GAAAC,EAAAP,EAAM,YAAY,MAAM,IAAIC,CAAc,IAA1C,YAAAM,EAA6C,OAA7C,YAAAD,EAAmD,MAE9B,MAAM,KAC3BN,EAAM,iBAAiB,MAAM,OAAO,CACpC,EAAA,KAAK,CAACY,EAAGC,IAAO,SAAA,SAAAR,EAAAQ,EAAE,OAAF,YAAAR,EAAQ,QAAS,MAAMD,EAAAQ,EAAE,OAAF,YAAAR,EAAQ,QAAS,GAAE,EAE7C,QAASU,GACtB,SAAA,OAAAxB,EAAc,MACZe,EAAAS,EAAQ,OAAR,YAAAT,EAAc,QACdD,EAAAU,EAAQ,OAAR,YAAAV,EAAc,MACdD,EACAN,CAAA,EAEJ,UACSK,EAAa,CACtB,MAAMC,GAAea,GAAAN,EAAAV,EAAM,SAAS,MAAM,IAAIE,CAAW,IAApC,YAAAQ,EAAuC,OAAvC,YAAAM,EAA6C,OAC5DnB,EAAcM,GAAA,YAAAA,EAAc,OAEX,MAAM,KAC3BH,EAAM,iBAAiB,MAAM,OAAO,CACpC,EAAA,KAAK,CAACY,EAAGC,IAAO,SAAA,SAAAR,EAAAQ,EAAE,OAAF,YAAAR,EAAQ,QAAS,MAAMD,EAAAQ,EAAE,OAAF,YAAAR,EAAQ,QAAS,GAAE,EAE7C,QAASU,GACtB,SAAA,OAAAxB,EAAc,MACZe,EAAAS,EAAQ,OAAR,YAAAT,EAAc,QACdD,EAAAU,EAAQ,OAAR,YAAAV,EAAc,MACdD,EACAN,CAAA,EAEJ,CAAA,CAEJ,GACAN,EAtJWD,EAsJJ,YAAaU,GAAqB,qBACjC,MAAAC,EAAiBD,EAAM,QAAQ,QAAQ,MACvCE,EAAcF,EAAM,QAAQ,KAAK,MAEvC,GAAIC,GAAkBD,EAAM,iBAAiB,MAAM,OAAS,EAAG,CAC7D,MAAMc,EAAUd,EAAM,iBAAiB,MAAM,OAAO,EAAE,OAAO,MAC/CV,EAAA,MACZe,EAAAS,GAAA,YAAAA,EAAS,OAAT,YAAAT,EAAe,QACfD,EAAAU,GAAA,YAAAA,EAAS,OAAT,YAAAV,EAAe,OACfE,GAAAC,EAAAP,EAAM,YAAY,MAAM,IAAIC,CAAc,IAA1C,YAAAM,EAA6C,OAA7C,YAAAD,EAAmD,QACnDU,GAAAN,EAAAV,EAAM,YAAY,MAAM,IAAIC,CAAc,IAA1C,YAAAS,EAA6C,OAA7C,YAAAM,EAAmD,KACrD,UACSd,EAAa,CACtB,MAAMC,GAAec,GAAAF,EAAAf,EAAM,SAAS,MAAM,IAAIE,CAAW,IAApC,YAAAa,EAAuC,OAAvC,YAAAE,EAA6C,OAC5DpB,EAAcM,GAAA,YAAAA,EAAc,OAEX,MAAM,KAC3BH,EAAM,iBAAiB,MAAM,OAAO,CACpC,EAAA,KAAK,CAACY,EAAGC,IAAO,SAAA,SAAAR,EAAAQ,EAAE,OAAF,YAAAR,EAAQ,QAAS,MAAMD,EAAAQ,EAAE,OAAF,YAAAR,EAAQ,QAAS,GAAE,EAE7C,QAASU,GACtB,SAAA,OAAAxB,EAAc,MACZe,EAAAS,EAAQ,OAAR,YAAAT,EAAc,QACdD,EAAAU,EAAQ,OAAR,YAAAV,EAAc,MACdD,EACAN,CAAA,EAEJ,CAAA,CAEJ,GACAN,EApLWD,EAoLJ,cAAeU,GAAqB,CAClB,MAAM,KAC3BA,EAAM,iBAAiB,MAAM,OAAO,CACpC,EAAA,KAAK,CAAC,EAAGa,IAAO,SAAA,SAAAR,EAAAQ,EAAE,OAAF,YAAAR,EAAQ,QAAS,MAAMD,EAAA,EAAE,OAAF,YAAAA,EAAQ,QAAS,GAAE,EAE7C,QAASU,GAAY,UAC9BT,EAAAS,EAAQ,OAAR,MAAAT,EAAc,UAAUD,EAAAU,EAAQ,OAAR,YAAAV,EAAc,SAAU,QAClDd,EAAc,OAAOwB,EAAQ,KAAK,OAAQA,EAAQ,KAAK,KAAK,CAC9D,CACD,CACH,GACAvB,EA/LWD,EA+LJ,cAAc,CAACU,EAAkBkB,IAAiB,iBACjD,MAAAjB,EAAiBD,EAAM,QAAQ,QAAQ,MACvCE,EAAcF,EAAM,QAAQ,KAAK,MAEnC,GAAAC,GAAkBiB,EAAM,OAAS,EAAG,CACtC,MAAMf,GACJC,GAAAC,EAAAL,EAAM,YAAY,MAAM,IAAIC,CAAc,IAA1C,YAAAI,EAA6C,OAA7C,YAAAD,EAAmD,OAC/CP,GACJS,GAAAC,EAAAP,EAAM,YAAY,MAAM,IAAIC,CAAc,IAA1C,YAAAM,EAA6C,OAA7C,YAAAD,EAAmD,MAE/CY,EAAA,QAASxB,GAAS,CACRJ,EAAA,OAAOa,EAAcN,EAAaH,CAAI,CAAA,CACrD,UACQQ,EAAa,CACtB,MAAMC,GAAea,GAAAN,EAAAV,EAAM,SAAS,MAAM,IAAIE,CAAW,IAApC,YAAAQ,EAAuC,OAAvC,YAAAM,EAA6C,OAC5DnB,EAAcM,GAAA,YAAAA,EAAc,OAE5Be,EAAA,QAASxB,GAAS,CACRJ,EAAA,OAAOa,EAAcN,EAAaH,CAAI,CAAA,CACrD,CAAA,CAEL,GApNK,IAAMyB,EAAN7B,ECaM,MAAA8B,EAAcC,oBAAkB,IAAM,CAC3C,MAAAC,EAAYC,aAAoB,EAAK,EACrCC,EAAmBC,EAAA,QACnB,GACN,EACMC,EAAaC,EAAAA,SAAkB,IAAMH,EAAiB,MAAM,KAAO,CAAC,EAEpEI,EAAkB,CACtB,UAAWH,MAAsB,IAAI,EACrC,IAAKF,aAA+B,IAAI,EACxC,QAASA,aAAmC,IAAI,EAChD,UAAW,CACT,MAAOA,aAAoB,EAAK,EAChC,MAAOA,aAAoB,EAAK,EAChC,OAAQA,aAAoB,EAAK,CAAA,CAErC,EAEMM,EAAcJ,EAAAA,IAAkD,IAAA,GAAK,EACrEK,EAAmBL,EAAAA,IAAoC,IAAA,GAAK,EAC5DM,EAAWN,EAAAA,IAA+C,IAAA,GAAK,EAC/DO,EAAeT,EAAAA,WAA2C,IAAA,GAAK,EAC/DU,EAAkBV,EAAAA,WAA2C,IAAA,GAAK,EAElEW,EACJ,OAAO,OAAW,KAAe,yBAA0B,OAEvDC,EAAkBD,EACpB,IAAI,qBAAsBE,GAAY,CAC5BA,EAAA,QAASC,GACfJ,EAAgB,MAAMI,EAAM,eAAiB,MAAQ,QAAQ,EAC3DA,EAAM,MAAA,CAEV,CACD,CAAA,EACD,KAEEC,EAAeJ,EACjB,IAAI,qBAAsBE,GAAY,CAC5BA,EAAA,QAASC,GACfL,EAAa,MAAMK,EAAM,eAAiB,MAAQ,QAAQ,EACxDA,EAAM,MAAA,CAEV,CACD,CAAA,EACD,KAEEE,EAAgC,CACpCC,EACA1B,IACG,CACEqB,IAEDK,IAAW,MACbL,EAAgB,QAAQrB,CAAO,GAE/BqB,EAAgB,UAAUrB,CAAO,EACjBmB,EAAA,MAAM,OAAOnB,CAAO,GAExC,EAEM2B,EAA6B,CACjCD,EACA1B,IACG,CACEwB,IAEDE,IAAW,MACbF,EAAa,QAAQxB,CAAO,GAE5BwB,EAAa,UAAUxB,CAAO,EACjBkB,EAAA,MAAM,OAAOlB,CAAO,GAErC,EAEM4B,EAAkB,CACtB,MAAOnB,aAA0B,IAAI,EACrC,QAASA,aAA0B,IAAI,EACvC,OAAQ,CACN,QAASA,aAA0B,IAAI,EACvC,MAAOA,aAA0B,IAAI,CAAA,CAEzC,EAEM,CAAE,KAAAoB,EAAM,KAAAC,EAAM,KAAAC,EAAM,KAAAC,EAAM,KAAAC,EAAM,MAAAC,EAAO,IAAAC,EAAK,KAAAC,CAAK,EAAIC,eAAa,EAElEC,EAAU,CACd,KAAM7B,aAAyC,IAAI,EACnD,QAASA,aAAyC,IAAI,CACxD,EAEO,MAAA,CACL,iBAAAC,EACA,WAAAE,EACA,gBAAAE,EACA,YAAAC,EACA,iBAAAC,EACA,SAAAC,EACA,aAAAC,EACA,gBAAAC,EACA,gBAAAS,EACA,SAAU,CACR,EAAGC,EACH,EAAGC,EACH,EAAGC,EACH,EAAGC,EACH,KAAAC,EACA,MAAAC,EACA,IAAAC,EACA,KAAAC,CACF,EACA,QAAAE,EACA,UAAA9B,EACA,8BAAAiB,EACA,2BAAAE,CACF,CACF,CAAC,EC/HYY,GAAoBC,GAA8C,CACvE,MAAAC,EAAa9B,MAAwB,IAAI,EAEzC,CAAE,iBAAAD,EAAkB,gBAAAkB,EAAiB,WAAAhB,EAAY,gBAAAE,CAAA,EACrDR,EAAY,EAEdoC,OAAAA,EAAAA,UAAU,IAAM,CACd5B,EAAgB,IAAM2B,EACN3B,EAAA,QAAQ,MAAQ0B,GAAW,IAAA,CAC5C,EAEDG,EAAAA,YAAY,IAAM,CAChB7B,EAAgB,IAAI,MAAQ,KAC5BA,EAAgB,QAAQ,MAAQ,IAAA,CACjC,EAEM,CACL,WAAA2B,EACA,iBAAA/B,EACA,gBAAAkB,EACA,WAAAhB,EACA,UAAWE,EAAgB,SAC7B,CACF,4FCvBE,KAAM,CAAE,WAAA2B,EAAY,gBAAAb,EAAiB,WAAAhB,EAAY,iBAAAF,CAAA,EAC/C6B,GAAiB,EAMbK,EAAgB/B,EAAAA,SAAwB,IAAO,aAAA,OACnD,UAAW,kBACRtB,EAAAqC,EAAgB,QAAQ,QAAxB,YAAArC,EAA+B,IAAK,MACpCD,EAAAsC,EAAgB,OAAO,MAAM,QAA7B,YAAAtC,EAAoC,IAAK,EAC5C,UACGG,EAAAmC,EAAgB,QAAQ,QAAxB,YAAAnC,EAA+B,IAAK,MACpCD,EAAAoC,EAAgB,OAAO,MAAM,QAA7B,YAAApC,EAAoC,IAAK,EAC5C,SACA,OAAQ,IACR,SAAU,QACV,IAAK,EACL,KAAM,EACN,WAAY,0CACZ,GAAGqD,UACH,4xBCpBF,MAAMC,EAAQD,EAIR,CAAE,gBAAA/B,CAAgB,EAAIR,EAAY,EAElCyC,EAAUlC,EAAAA,SAAS,KAAO,CAC9B,UAAWC,EAAgB,UAAU,OAASkC,GAC9C,MAAAF,CAAA,EACA,s5DCPSG,GAAkB,CAC7B,QAAQC,EAAUV,EAA0B,CACtCU,EAAA,UAAU,cAAeC,CAAW,EACxC,MAAMC,EAAgBF,EAAI,MACtBA,EAAA,MAAQ,SAAUG,EAAe,OACnC,MAAMC,EAAWF,EAAc,KAAK,KAAMC,CAAa,EAEjDE,EACJ,OAAOF,GAAkB,SACrB,SAAS,cAAcA,CAAa,EACpCA,EAEF,GAAAE,GAAUA,aAAkB,SAC1B,CAACA,EAAO,cAAc,sBAAsB,EAAG,CAC3C,MAAAC,EAAmB,SAAS,cAAc,KAAK,EAErDA,EAAiB,GAAK,sBACtBA,EAAiB,MAAM,cAAgB,OAEvCD,EAAO,YAAYC,CAAgB,EAG7B,MAAAC,EAAQC,cAAYP,EAAa,CACrC,QAAQ5D,EAAAiD,GAAA,YAAAA,EAAS,iBAAT,YAAAjD,EAAyB,MAAA,CAClC,EACDoE,EAAA,OAAOF,EAAOD,CAAgB,EAE9BN,EAAI,wBAA0B,CAC5B,UAAWM,EACX,MAAAC,EACA,SAASjB,GAAA,YAAAA,EAAS,iBAAkB,CAAA,CACtC,EAEA,MAAMtD,EAAQoB,EAAY,EAC1B4C,EAAI,sBAAwBhE,CAAA,CAIzB,OAAAoE,CACT,EAGA,MAAMM,EAAkBV,EAAI,QAC5BA,EAAI,QAAU,UAAY,CACxB,OAAIA,EAAI,0BACCS,EAAAA,OAAA,KAAMT,EAAI,wBAAwB,SAAS,EAClD,OAAOA,EAAI,yBAENU,EAAgB,KAAK,IAAI,CAClC,CAAA,CAEJ,ECxDaC,EAAiB,CAC5BC,EACAC,IAGED,EAAK,EAAIC,EAAK,EAAIA,EAAK,OACvBD,EAAK,EAAIA,EAAK,MAAQC,EAAK,GAC3BD,EAAK,EAAIC,EAAK,EAAIA,EAAK,QACvBD,EAAK,EAAIA,EAAK,OAASC,EAAK,EAInBC,EAAkBhE,GAA8C,CAC3E,GAAI,CAACA,EACI,MAAA,CACL,EAAG,EACH,EAAG,EACH,MAAO,EACP,OAAQ,EACR,OAAQ,EACR,KAAM,EACN,MAAO,EACP,IAAK,CACP,EAEI,MAAAiE,EAAOjE,EAAQ,sBAAsB,EAEpC,MAAA,CACL,OAAQiE,EAAK,OACb,KAAMA,EAAK,KACX,MAAOA,EAAK,MACZ,IAAKA,EAAK,IACV,EAAGA,EAAK,EACR,EAAGA,EAAK,EACR,MAAOA,EAAK,MACZ,OAAQA,EAAK,MACf,CACF,EAEaC,EAAaC,IAA+B,CACvD,EAAGA,EAAI,EAAIA,EAAI,MAAQ,EACvB,EAAGA,EAAI,EAAIA,EAAI,OAAS,CAC1B,GAEaC,GAAY,CAACpE,EAA6BqE,IAAoB,CACnE,MAAAJ,EAAOD,EAAehE,CAAO,EAC5B,MAAA,CACL,MAAO,CACL,EAAGqE,EAAQ,EAAIJ,EAAK,EACpB,EAAGI,EAAQ,EAAIJ,EAAK,CACtB,EACA,QAAS,CACP,GAAKI,EAAQ,EAAIJ,EAAK,GAAKA,EAAK,MAAS,IACzC,GAAKI,EAAQ,EAAIJ,EAAK,GAAKA,EAAK,OAAU,GAAA,CAE9C,CACF,EAEaK,EAAc,CAACC,EAAgBC,IAA2B,CAC/D,MAAAC,EAAKD,EAAO,EAAID,EAAO,EACvBG,EAAKF,EAAO,EAAID,EAAO,EAC7B,OAAO,KAAK,KAAKE,EAAKA,EAAKC,EAAKA,CAAE,CACpC,EAEaC,GAAoB,CAC/Bb,EACAC,IACW,CACX,MAAMa,EAAW,KAAK,IACpB,EACA,KAAK,IAAId,EAAK,EAAIA,EAAK,MAAOC,EAAK,EAAIA,EAAK,KAAK,EAC/C,KAAK,IAAID,EAAK,EAAGC,EAAK,CAAC,CAC3B,EACMc,EAAW,KAAK,IACpB,EACA,KAAK,IAAIf,EAAK,EAAIA,EAAK,OAAQC,EAAK,EAAIA,EAAK,MAAM,EACjD,KAAK,IAAID,EAAK,EAAGC,EAAK,CAAC,CAC3B,EAEMe,EAAcF,EAAWC,EAEzBE,EAAWjB,EAAK,MAAQA,EAAK,OAC7BkB,EAAWjB,EAAK,MAAQA,EAAK,OAGnC,OAASe,EAAcC,EAAY,IAAOD,EAAcE,EAAY,KAAO,CAC7E,ECxFaC,GAAoB,6BCEpBC,EAAgBC,GAAiB,CAC5CA,EAAM,eAAe,CACvB,EAEaC,EAAiBlG,IACrB,CACL,MAAO,MAAM,KAAKA,EAAM,iBAAiB,MAAM,OAAQ,CAAA,CACzD,GCFWmG,GAAqB7C,GAA8B,CACxD,KAAA,CACJ,YAAAzB,EACA,iBAAAL,EACA,QAAA4B,EACA,iBAAAtB,EACA,WAAYsE,EACZ,gBAAAnE,EACA,8BAAAM,GACEnB,EAAY,EAEVmC,EAAa9B,MAAwB,IAAI,EACzC4E,EAAW1E,EAAAA,SAAkB,IAC1ByB,EAAQ,QAAQ,QAAUG,EAAW,KAC7C,EAEK+C,EAAK/E,EAAA,YAAW+B,GAAA,YAAAA,EAAS,KAAMiD,SAAO,EACtCC,EAAWjF,EAAA,YAAqB+B,GAAA,YAAAA,EAAS,WAAwB,EAAK,EAEtE5B,EAAaC,EAAAA,SAAkB,IAC/B6E,EAAS,OACT,CAACjD,EAAW,OACZ,CAAC1B,EAAY,MAAM,IAAI0B,EAAW,KAAK,EAAU,GAC9C/B,EAAiB,MAAM,IAAI+B,EAAW,KAAK,CACnD,EAEKkD,EAAY9E,EAAAA,SAAkB,IAAM,CAGxC,GAFI6E,EAAS,OACT,CAACjD,EAAW,OAAS,CAAC6C,EAAc,OACpC,CAACnE,EAAgB,MAAM,IAAIsB,EAAW,KAAK,EAAU,MAAA,GAEzD,MAAMmD,EAAiB7E,EAAY,MAAM,IAAI0B,EAAW,KAAK,EAC7D,OAAKmD,GAAA,MAAAA,EAAgB,OAAO,OAErB,CAAC,MAAM,KAAKlF,EAAiB,MAAM,QAAS,CAAA,EAAE,KACnD,CAAC,CAACmF,EAAGC,CAAe,IACbA,EAAgB,OAAO,OACrB,CAACA,EAAgB,OAAO,KAAMC,GACnCH,EAAe,OAAO,SAASG,CAAK,CACtC,EAH2C,EAK/C,EAT2C,EAS3C,CACD,EAEKC,EAAgBnF,EAAAA,SAAkB,IAAM,CAI5C,GAHI6E,EAAS,OACT,CAACjD,EAAW,OAAS,CAAC6C,EAAc,OACpC,CAACnE,EAAgB,MAAM,IAAIsB,EAAW,KAAK,GAC3CH,EAAQ,QAAQ,QAAUG,EAAW,MAAc,MAAA,GAEvD,MAAMmD,EAAiB7E,EAAY,MAAM,IAAI0B,EAAW,KAAK,EAC7D,OAAKmD,GAAA,MAAAA,EAAgB,OAAO,OAErB,CAAC,MAAM,KAAKlF,EAAiB,MAAM,QAAS,CAAA,EAAE,KACnD,CAAC,CAACmF,EAAGC,CAAe,IACbA,EAAgB,OAAO,OACrB,CAACA,EAAgB,OAAO,KAAMC,GACnCH,EAAe,OAAO,SAASG,CAAK,CACtC,EAH2C,EAK/C,EAT2C,EAS3C,CACD,EAoCM,MAAA,CACL,WAAAtD,EACA,gBApCsB,IAAM,CAC5B,GAAI,CAACA,EAAW,MAAa,MAAA,IAAI,MAAM,uBAAuB,EAElD1B,EAAA,MAAM,IAAI0B,EAAW,MAAO,CACtC,KAAMA,EAAW,MACjB,QAASD,GAAA,YAAAA,EAAS,SAAuB,CAAC,EAC1C,OAAOA,GAAA,YAAAA,EAAS,QAAS,KACzB,cAAcA,GAAA,YAAAA,EAAS,QAAS,KAChC,QAAQA,GAAA,YAAAA,EAAS,SAAU,CAAC,EAC5B,MAAMA,GAAA,YAAAA,EAAS,OAAQ,KACvB,GAAIgD,EAAG,MACP,SAAWE,GAAmC,EAAA,CAC/C,EAE6BjE,EAAA,MAAOgB,EAAW,KAAK,EAE1CA,EAAA,MAAM,iBAAiB,YAAayC,CAAY,EAChDzC,EAAA,MAAM,iBAAiB,OAAQyC,CAAY,EAC3CzC,EAAA,MAAM,aAAawC,GAAmB,MAAM,EAC5CxC,EAAA,MAAM,aAAa,YAAa,OAAO,CACpD,EAiBE,kBAfwB,IAAM,CACzBA,EAAW,QAEJ1B,EAAA,MAAM,OAAO0B,EAAW,KAAK,EACxBzB,EAAA,MAAM,OAAOyB,EAAW,KAAK,EAEnCA,EAAA,MAAM,oBAAoB,YAAayC,CAAY,EACnDzC,EAAA,MAAM,oBAAoB,OAAQyC,CAAY,EAC9CzC,EAAA,MAAM,gBAAgBwC,EAAiB,EACvCxC,EAAA,MAAM,gBAAgB,WAAW,EAC9C,EAME,WAAA7B,EACA,SAAA2E,EACA,UAAAI,EACA,cAAAK,EACA,GAAAR,CACF,CACF,EClHaS,EAAe,CAC1BjG,EACAkG,IAEKlG,EACEkG,EAAU,SAASlG,CAAO,EADZ,GCOVmG,GAA6BjH,GAAqB,SAC7D,MAAMkH,EAAgBpC,EAAe9E,EAAM,gBAAgB,IAAI,KAAK,EAC9DmH,EAAkBnC,EAAUkC,CAAa,EACzCE,IAAW/G,EAAAL,EAAM,gBAAgB,QAAQ,QAA9B,YAAAK,EAAqC,IAAK,EACrDgH,IAAWjH,EAAAJ,EAAM,gBAAgB,QAAQ,QAA9B,YAAAI,EAAqC,IAAK,EASrDkH,EAA0B,EAN9BJ,GACAE,GAAYF,EAAc,GAC1BE,GAAYF,EAAc,EAAIA,EAAc,OAC5CG,GAAYH,EAAc,GAC1BG,GAAYH,EAAc,EAAIA,EAAc,QAIxCK,EAAkB,MAAM,KAAKvH,EAAM,iBAAiB,MAAM,MAAM,EAEhEwH,EAAuB,MAAM,KAAKxH,EAAM,gBAAgB,MAAM,QAAA,CAAS,EAC1E,OAAO,CAAC,CAACyH,EAAMd,CAAC,IAAM,CACjB,GAAA,CAACc,EAAa,MAAA,GAEZ,MAAA1C,EAAOD,EAAe2C,CAAmB,EAC/C,OAAO1C,GAAQmC,GAAiBvC,EAAeI,EAAMmC,CAAa,CACnE,CAAA,EACA,IAAI,CAAC,CAACO,EAAM3G,CAAO,IAAM,CAClB,MAAAiE,EAAOD,EAAe2C,CAAmB,EACzCC,EAAgB1C,EAAUD,CAAI,EAE9B4C,EACJP,GAAYrC,EAAK,GACjBqC,GAAYrC,EAAK,EAAIA,EAAK,OAC1BsC,GAAYtC,EAAK,GACjBsC,GAAYtC,EAAK,EAAIA,EAAK,OAEtB6C,EAAiBnC,GAAkBV,EAAMmC,CAAa,EACtDW,EAAiBzC,EAAY+B,EAAiBO,CAAa,EAEjE,IAAII,EAAQ,EACD,SAAA,CAACC,EAAYpB,CAAC,IAAK3G,EAAM,gBAAgB,MAAM,UAEtD+H,IAAeN,GACfM,GACAN,GACAV,EAAaU,EAAqBM,CAAyB,GAE3DD,IAIG,MAAA,CACL,QAAAhH,EACA,KAAA2G,EACA,mBAAAE,EACA,eAAAC,EACA,MAAAE,EACA,eAAAD,CACF,CACD,CAAA,EACA,KAAK,CAACjH,EAAGC,IAAM,CACd,GAAI,CAACyG,EAAyB,CACxB,GAAA1G,EAAE,oBAAsBC,EAAE,mBACrB,OAAAA,EAAE,MAAQD,EAAE,MACjB,GAAAA,EAAE,qBAAuBC,EAAE,mBACtB,OAAAD,EAAE,mBAAqB,GAAK,CAAA,CAEvC,OAAI,KAAK,IAAIA,EAAE,eAAiBC,EAAE,cAAc,GAAK,EAC5CD,EAAE,eAAiBC,EAAE,eACvBA,EAAE,eAAiBD,EAAE,cAAA,CAC7B,EAEGoH,EAAoB,MAAM,KAAKhI,EAAM,aAAa,MAAM,QAAA,CAAS,EACpE,OAAO,CAAC,CAACyH,EAAMd,CAAC,IAAM,CAEnB,GAAA,CAACc,GACDF,EAAgB,KACbU,GACCA,GACAlB,EAAaU,EAAqBQ,CAAuB,CAC7D,EAEO,MAAA,GAEH,MAAAlD,EAAOD,EAAe2C,CAAmB,EAC/C,OAAO1C,GAAQmC,GAAiBvC,EAAeI,EAAMmC,CAAa,CACnE,CAAA,EACA,IAAI,CAAC,CAACO,EAAMS,CAAI,IAAM,CACf,MAAAnD,EAAOD,EAAe2C,CAAmB,EACzCU,EAAanD,EAAUD,CAAI,EAE3B4C,EACJP,GAAYrC,EAAK,GACjBqC,GAAYrC,EAAK,EAAIA,EAAK,OAC1BsC,GAAYtC,EAAK,GACjBsC,GAAYtC,EAAK,EAAIA,EAAK,OAEtB6C,EAAiBnC,GAAkBV,EAAMmC,CAAa,EACtDW,EAAiBzC,EAAY+B,EAAiBgB,CAAU,EAG9D,IAAIL,EAAQ,EACD,SAAA,CAACC,EAAYpB,CAAC,IAAK3G,EAAM,aAAa,MAAM,UAEnD+H,IAAeN,GACfM,GACAN,GACAV,EAAaU,EAAqBM,CAAyB,GAE3DD,IAIG,MAAA,CACL,KAAAI,EACA,KAAAT,EACA,mBAAAE,EACA,eAAAC,EACA,MAAAE,EACA,eAAAD,CACF,CACD,CAAA,EACA,KAAK,CAACjH,EAAGC,IAAM,CACd,GAAI,CAACyG,EAAyB,CACxB,GAAA1G,EAAE,oBAAsBC,EAAE,mBACrB,OAAAA,EAAE,MAAQD,EAAE,MACjB,GAAAA,EAAE,qBAAuBC,EAAE,mBACtB,OAAAD,EAAE,mBAAqB,GAAK,CAAA,CAEvC,OAAI,KAAK,IAAIA,EAAE,eAAiBC,EAAE,cAAc,GAAK,EAC5CD,EAAE,eAAiBC,EAAE,eACvBA,EAAE,eAAiBD,EAAE,cAAA,CAC7B,EAEI,MAAA,CACL,GAAG4G,EAAqB,IAAK9H,GAASA,EAAK,IAAI,EAC/C,GAAGsI,EAAkB,IAAKtI,GAASA,EAAK,IAAI,CAC9C,CACF,EC1Ia0I,GAAc,CACzB7E,EACAD,IACG,CACH,KAAM,CAAE,gBAAAZ,EAAiB,SAAA2F,CAAS,EAAIjH,EAAY,EAC5CkH,GAAWhF,GAAA,YAAAA,EAAS,WAAY,GA4D/B,MAAA,CACL,gBA3DuB2C,GAAyB,OAChDD,EAAaC,CAAK,EAEZ,MAAAlB,EAAOD,EAAevB,EAAW,KAAK,GAE5ClD,EAAAkD,EAAW,QAAX,MAAAlD,EAAkB,OAElB,MAAMkI,EAAUxD,EAAK,EAAIA,EAAK,MAAQ,EAChCyD,EAAUzD,EAAK,EAAIA,EAAK,OAAS,EAEvCrC,EAAgB,MAAM,MAAQ,CAC5B,EAAG6F,EACH,EAAGC,CACL,EAEA9F,EAAgB,QAAQ,MAAQ,CAC9B,EAAG6F,EACH,EAAGC,CACL,EAEgB9F,EAAA,OAAO,MAAM,MAAQ,CACnC,EAAGqC,EAAK,MAAQ,EAChB,EAAGA,EAAK,OAAS,CACnB,EAEgBrC,EAAA,OAAO,QAAQ,MAAQ,CACrC,EAAG,GACH,EAAG,EACL,CACF,EA+BE,eA7BqB,IAAM,CACvB,GAAA,CAACA,EAAgB,QAAQ,MAAO,OAE9B,MAAA+F,EAAW/F,EAAgB,QAAQ,MAAM,EACzCgG,EAAWhG,EAAgB,QAAQ,MAAM,EAE/C,IAAIiG,EAAOF,EACPG,EAAOF,EAEPL,EAAS,EAAE,QAAeO,GAAAN,GAC1BD,EAAS,EAAE,QAAeO,GAAAN,GAC1BD,EAAS,EAAE,QAAeM,GAAAL,GAC1BD,EAAS,EAAE,QAAeM,GAAAL,GAE9B5F,EAAgB,QAAQ,MAAQ,CAC9B,EAAGiG,EACH,EAAGC,CACL,CACF,EAYE,cAVoB,IAAM,CAC1BlG,EAAgB,QAAQ,MAAQ,KAChCA,EAAgB,MAAM,MAAQ,KACdA,EAAA,OAAO,MAAM,MAAQ,KACrBA,EAAA,OAAO,QAAQ,MAAQ,IACzC,CAMA,CACF,EC3EamG,GAActF,GAAwC,CACjE,MAAMvD,EAAQoB,EAAY,EAkCnB,MAAA,CACL,eAjCsB6E,GAAwB,CACxCjG,EAAA,gBAAgB,MAAM,MAAQ,CAAE,EAAGiG,EAAM,QAAS,EAAGA,EAAM,OAAQ,EACnEjG,EAAA,gBAAgB,QAAQ,MAAQ,CACpC,EAAGiG,EAAM,QACT,EAAGA,EAAM,OACX,EAEA,KAAM,CAAE,MAAA6C,EAAO,QAAAC,CAAA,EAAY7D,GAAU3B,EAAW,MAAO,CACrD,EAAG0C,EAAM,QACT,EAAGA,EAAM,OAAA,CACV,EAEKjG,EAAA,gBAAgB,OAAO,MAAM,MAAQ8I,EACrC9I,EAAA,gBAAgB,OAAO,QAAQ,MAAQ+I,CAC/C,EAoBE,cAlBqB9C,GAAqC,CACtDjG,EAAM,UAAU,QAEdA,EAAA,gBAAgB,QAAQ,MAAQ,CACpC,EAAGiG,EAAM,QACT,EAAGA,EAAM,OACX,EACF,EAYE,aAVmB,IAAM,CACnBjG,EAAA,gBAAgB,QAAQ,MAAQ,KAChCA,EAAA,gBAAgB,MAAM,MAAQ,KAC9BA,EAAA,gBAAgB,OAAO,MAAM,MAAQ,KACrCA,EAAA,gBAAgB,OAAO,QAAQ,MAAQ,IAC/C,CAMA,CACF,EC7BagJ,GAAY,CACvBzF,EACAD,IACG,SACH,MAAMtD,EAAQoB,EAAY,EAEpB,CAAE,eAAA6H,EAAgB,cAAAC,EAAe,aAAAC,CAAa,EAClDN,GAAWtF,CAAU,EAEjB,CAAE,gBAAA6F,EAAiB,eAAAC,EAAgB,cAAAC,CAAkB,EAAAlB,GACzD7E,EACAD,GAAA,YAAAA,EAAS,QACX,EAEA,IAAIiG,EAAkC,KAEhC,MAAAC,EACJC,GACiD,SACjD,GAAI,CAACA,EAAyB,OAAA,IAAI,IAElC,MAAMC,EACJ1J,EAAM,iBAAiB,MAAM,IAAIyJ,CAAgB,EAEnD,GAAIzJ,EAAM,iBAAiB,MAAM,KAAO,GAAK0J,EAAwB,CAC7DC,MAAAA,MAAa,IAEnB,OAAA3J,EAAM,iBAAiB,MAAM,QAASyH,GAAS,SAC7C,MAAM3G,EAAUd,EAAM,YAAY,MAAM,IAAIyH,CAAI,EAC3C3G,GAEL6I,EAAO,IAAIlC,EAAM,CACf,GAAG3G,EACH,cAAaA,EAAAA,EAAQ,OAARA,YAAAA,EAAc,YAAa,GACxC,aAAaA,EAAAA,EAAQ,OAARA,YAAAA,EAAc,uBAAsB,CAClD,CAAA,CACF,EAEM6I,CAAA,CAGH3J,EAAA,iBAAiB,MAAM,MAAM,EAEnC,MAAMc,EAAUd,EAAM,YAAY,MAAM,IAAIyJ,CAAgB,EAC5D,GAAI,CAAC3I,EAAgB,OAAA,IAAI,IAEnB,MAAA6I,MAAa,IAEnB,OAAAA,EAAO,IAAIF,EAAkB,CAC3B,GAAG3I,EACH,cAAaT,EAAAS,EAAQ,OAAR,YAAAT,EAAc,YAAa,GACxC,aAAaD,EAAAU,EAAQ,OAAR,YAAAV,EAAc,uBAAsB,CAClD,EAEMuJ,CACT,EAEMC,EACJC,GACG,CACH,GAAI,CAACA,EACH,MAAO,CAAE,QAAS,KAAM,KAAM,IAAK,EAGrC,MAAMC,EAAW,MAAM,QAAQD,CAAY,EACvCA,EACA,CAACA,CAAY,EACXtC,EAAkB,MAAM,KAAKvH,EAAM,iBAAiB,MAAM,MAAM,EAEhE+J,EAAgB,MAAM,KAAK/J,EAAM,SAAS,MAAM,QAAS,CAAA,EAAE,QAC/D,CAAC,CAACc,EAASoH,CAAI,IAAOA,EAAK,SAAW,CAACpH,CAAO,EAAI,CAAA,CACpD,EAEMkJ,EAAmB,MAAM,KAC7BhK,EAAM,YAAY,MAAM,QAAQ,CAAA,EAChC,QAAQ,CAAC,CAACc,EAASmJ,CAAI,IAAOA,EAAK,SAAW,CAACnJ,CAAO,EAAI,EAAG,EAEzDoJ,EAAsBJ,EAAS,KAAMK,GAAgB,CACzD,GAAI,CAACnK,EAAM,aAAa,MAAM,IAAImK,CAAW,EAAU,MAAA,GAEvD,MAAMjC,EAAOlI,EAAM,SAAS,MAAM,IAAImK,CAAW,EAuB7C,MAtBA,GAACjC,GAEDA,EAAK,UAEoB6B,EAAc,KACxCK,GACCD,IAAgBC,GAChBrD,EAAaoD,EAA4BC,CAA2B,CACxE,GAKE7C,EAAgB,KACbU,GACCA,IACCA,IAAaC,EAAK,MACjBnB,EAAamB,EAAK,KAAqBD,CAAuB,EACpE,GAIEC,EAAK,OAAO,QAOV,CANiB,CAAC,MAAM,KAC1BlI,EAAM,iBAAiB,MAAM,OAAO,CAAA,EACpC,KAAMc,GACDA,EAAQ,OAAO,OACb,CAACA,EAAQ,OAAO,KAAM+F,GAAUqB,EAAK,OAAO,SAASrB,CAAK,CAAC,EAD/B,EAEpC,EAII,CACR,EAED,OAAKqD,EA4DE,CACL,QAzDuBJ,EAAS,OAAQK,GAAgB,CAExD,GADI,CAACnK,EAAM,gBAAgB,MAAM,IAAImK,CAAW,GAC5C,CAACnK,EAAM,YAAY,MAAM,IAAImK,CAAW,EAAU,MAAA,GAEtD,MAAMrJ,EAAUd,EAAM,YAAY,MAAM,IAAImK,CAAW,EACnD,GAAArJ,GAAA,MAAAA,EAAS,SAAiB,MAAA,GAE9B,MAAMuJ,EAAuBN,EAAc,KACxCK,GACCD,IAAgBC,GAChBrD,EAAaoD,EAA4BC,CAA2B,CACxE,EAEME,EAA0BN,EAAiB,KAC9CO,GACCJ,IAAgBI,GAChBxD,EACEoD,EACAI,CAAA,CAEN,EAEI,OAAAF,GAAwBC,EAAgC,GAEjC,CAAC,MAAM,KAChCtK,EAAM,iBAAiB,MAAM,OAAO,CAAA,EACpC,KAAMc,GACDA,EAAQ,OAAO,OACb,CAACA,EAAQ,OAAO,KAAM+F,GAC3B,OAAA,OAAAxG,EAAAL,EAAM,YAAY,MAAM,IAAImK,CAAW,IAAvC,YAAA9J,EAA0C,OAAO,SAASwG,GAC5D,EAHmC,EAIpC,CAEM,CACR,EAEwC,KAAMsD,GACvB5C,EAAgB,KACnCU,GACCA,IACCA,IAAakC,GACZpD,EAAaoD,EAA4BlC,CAAuB,GAChElB,EAAakB,EAAyBkC,CAA0B,EACtE,EAE0B,GAGxBA,IAAgBD,GAChBnD,EACEoD,EACAD,CACF,CAEH,GAG6B,KAC5B,KAAMA,CACR,EA9DS,CAAE,QAAS,KAAM,KAAM,IAAK,CA+DvC,EAEMM,IAAmBnK,EAAAiD,GAAA,YAAAA,EAAS,SAAT,YAAAjD,EAAiB,QAAS4G,GAE7CwD,EAA2BC,GAAuC,6BAChE,MAAAC,EAAkB3K,EAAM,QAAQ,QAAQ,MACxC4K,EAAe5K,EAAM,QAAQ,KAAK,MAElC6K,EAAaH,EAAQ,QACrBI,EAAUJ,EAAQ,KAElB1K,EAAA,QAAQ,QAAQ,MAAQ6K,EACxB7K,EAAA,QAAQ,KAAK,MAAQ8K,EAEvBH,IAAoBE,IAClBF,KACIpK,GAAAH,GAAAC,EAAAL,EAAA,YAAY,MACf,IAAI2K,CAAe,IADhB,YAAAtK,EAEF,SAFE,YAAAD,EAEM,UAFN,MAAAG,EAAA,KAAAH,EAEgBJ,EAAOkG,EAAclG,CAAK,IAG9C6K,KACI7J,GAAAN,GAAAJ,EAAAN,EAAA,YAAY,MACf,IAAI6K,CAAU,IADX,YAAAvK,EAEF,SAFE,YAAAI,EAEM,UAFN,MAAAM,EAAA,KAAAN,EAEgBV,EAAOkG,EAAclG,CAAK,KAIhD4K,IAAiBE,IACfF,KACIG,GAAA9J,GAAAF,EAAAf,EAAA,SAAS,MACZ,IAAI4K,CAAY,IADb,YAAA7J,EAEF,SAFE,YAAAE,EAEM,UAFN,MAAA8J,EAAA,KAAA9J,EAEgBjB,EAAOkG,EAAclG,CAAK,IAG9C8K,KACIE,GAAAC,GAAAC,EAAAlL,EAAA,SAAS,MACZ,IAAI8K,CAAO,IADR,YAAAI,EAEF,SAFE,YAAAD,EAEM,UAFN,MAAAD,EAAA,KAAAC,EAEgBjL,EAAOkG,EAAclG,CAAK,IAGtD,EAEMmL,EAA4BC,EAAAA,cAAc,IAAM,CAC9C,MAAAvB,EAAeW,EAAiBxK,CAAK,EACrCqL,EAAmBzB,EAAyBC,CAAY,EAC9DY,EAAwBY,CAAgB,CACvC,IAAAjL,EAAAkD,GAAA,YAAAA,EAAS,SAAT,YAAAlD,EAAiB,WAAY,CAAC,EAE3BkL,EAAgB,IAAM,CACAH,EAAA,EAE1B5B,EAAmB,sBAAsB+B,CAAa,CACxD,EAEMC,EAAiB,IAAMD,EAAc,EAErCE,EAAgB,IAAM,CACtBjC,IAAqB,OACVJ,EAAA,EACCG,EAAA,EACd,qBAAqBC,CAAgB,EAClBA,EAAA,KAEvB,EAmFO,MAAA,CACL,SAlFgBtD,GAAwC,CACxDjG,EAAM,iBAAiB,MAAQwJ,EAAoBjG,EAAW,KAAK,EACnEvD,EAAM,iBAAiB,MAAM,QAASc,GACpC,SAAA,OAAAV,GAAAC,EAAAS,EAAQ,QAAO,UAAf,YAAAV,EAAA,KAAAC,EAAyBL,EAAOkG,EAAclG,CAAK,GACrD,EAEIiG,aAAiB,aACnBgD,EAAehD,CAAK,EAEpBmD,EAAgBnD,CAAK,EAGRsF,EAAA,CACjB,EAsEE,MApEatF,GAAqD,CAClEjG,EAAM,iBAAiB,MAAM,QAASc,GACpC,SAAA,OAAAV,GAAAC,EAAAS,EAAQ,QAAO,SAAf,YAAAV,EAAA,KAAAC,EAAwBL,EAAOkG,EAAclG,CAAK,GACpD,EAEIiG,aAAiB,cACJoD,EAAA,EAEfH,EAAcjD,CAAK,CAEvB,EA2DE,WAzDiB,MAAOwF,EAAgB,KAAS,SAC7C,GAAAzL,EAAM,QAAQ,KAAK,MAAO,CACtB,MAAAkI,EAAOlI,EAAM,SAAS,MAAM,IAAIA,EAAM,QAAQ,KAAK,KAAK,EACxD2J,GAASvJ,EAAA8H,GAAA,aAAA7H,EAAA6H,EAAM,QAAO,SAAb,YAAA9H,EAAA,KAAAC,EAAsBL,EAAOkG,EAAclG,CAAK,GAE/D,GAAI2J,aAAkB,QAChB,GAAA,CACF3J,EAAM,UAAU,MAAQ,GAExB,MAAM0L,EAAgB,MAAM/B,EAE5B,OAAI+B,IACED,GAAezL,EAAM,iBAAiB,MAAM,MAAM,EAEhDA,EAAA,iBAAiB,MAAM,MAAM,EAE7BA,EAAA,QAAQ,KAAK,MAAQ,KACrBA,EAAA,QAAQ,QAAQ,MAAQ,KAEhBwL,EAAA,GAGTE,CAAA,MACD,CACC,MAAA,EAAA,QACP,CACA1L,EAAM,UAAU,MAAQ,EAAA,MAGtByL,GAAezL,EAAM,iBAAiB,MAAM,MAAM,EAEhDA,EAAA,iBAAiB,MAAM,MAAM,EAE7BA,EAAA,QAAQ,KAAK,MAAQ,KACrBA,EAAA,QAAQ,QAAQ,MAAQ,KAEhBwL,EAAA,CAChB,MAEAxL,EAAM,iBAAiB,MAAM,QAASc,GACpC,SAAA,OAAAV,GAAAC,EAAAS,EAAQ,QAAO,QAAf,YAAAV,EAAA,KAAAC,EAAuBL,EAAOkG,EAAclG,CAAK,GACnD,EAEIyL,GAAezL,EAAM,iBAAiB,MAAM,MAAM,EAEhDA,EAAA,iBAAiB,MAAM,MAAM,EAE7BA,EAAA,QAAQ,KAAK,MAAQ,KACrBA,EAAA,QAAQ,QAAQ,MAAQ,KAEhBwL,EAAA,CAElB,CAMA,CACF,ECtUaG,GAAkBtK,oBAAkB,IAAM,CACrD,IAAIuK,EAAqB,GACrBC,EAAsB,GACtBC,EAA6B,GAE7BC,EAAoD,KACpDC,EAAyC,KACzCC,EAA4C,KAC5CC,EAA6D,KAC7DC,EAA6D,KAEjE,KAAM,CAAE,gBAAAvK,EAAiB,UAAAN,EAAW,YAAAO,CAAA,EAAgBT,EAAY,EAE1DgL,EAAsB,IAAM,CAChC,MAAMC,EAAO,SAAS,KAEtBT,EAAqBS,EAAK,MAAM,WAEhCA,EAAK,MAAM,WAAa,OAEjB,OAAA,iBAAiB,cAAerG,CAAY,EAC5C,OAAA,iBAAiB,cAAeA,CAAY,EAC5C,OAAA,iBAAiB,aAAcA,CAAY,EAC3C,OAAA,iBAAiB,YAAaA,CAAY,CACnD,EAEMsG,EAAqB,IAAM,CAC/B,MAAMD,EAAO,SAAS,KAEtBA,EAAK,MAAM,WAAaT,EACxBS,EAAK,MAAM,YAAcR,EACzBQ,EAAK,MAAM,mBAAqBP,EAEzB,OAAA,oBAAoB,cAAe9F,CAAY,EAC/C,OAAA,oBAAoB,cAAeA,CAAY,EAC/C,OAAA,oBAAoB,aAAcA,CAAY,EAC9C,OAAA,oBAAoB,YAAaA,CAAY,CACtD,EAEMuG,EAAoB,IAAM,CAC1BR,IACO,SAAA,oBAAoB,cAAeA,CAAkB,EACzCA,EAAA,MAGnBC,IACO,SAAA,oBAAoB,YAAaA,CAAiB,EACvCA,EAAA,MAGlBC,IACqBA,EAAA,MAGrBC,IACO,SAAA,oBAAoB,QAASA,CAAoB,EACnCA,EAAA,MAGrBC,IACO,SAAA,oBAAoB,UAAWA,CAAiB,EAChD,SAAA,oBAAoB,WAAYA,CAAiB,EACjD,SAAA,oBAAoB,QAASA,CAAiB,EACnCA,EAAA,KAExB,EA6DO,MAAA,CACL,gBA5DsB,CACtBlG,EACA1C,EACAD,IACG,CAEH,GADI,CAACC,EAAW,OACZjC,EAAU,MAAO,OAErB,MAAMR,EAAUe,EAAY,MAAM,IAAI0B,EAAW,KAAK,EACtD,GAAIzC,GAAA,MAAAA,EAAS,SAAU,OAELyL,EAAA,EAEjBtG,EAAM,OAAuB,KAAK,EAE/B3C,GAAA,MAAAA,EAAS,YAA2B1B,EAAA,UAAU,MAAQ0B,EAAQ,WAElE,KAAM,CAAE,SAAAkJ,EAAU,MAAAC,EAAO,WAAAC,CAAe,EAAA1D,GAAUzF,EAAYD,CAAO,EAErE0I,EAAoB,IAAM,CACxBU,EAAW,EAAI,EAAE,KAAMC,GAAa,CAC9BA,IAAa,KAEjB/K,EAAgB,UAAU,MAAQ,KACf0K,EAAA,EACnBI,EAAW,EAAI,EACGH,EAAA,EAAA,CACnB,CACH,EAEAN,EAAuB,IAAM,CAC3BrK,EAAgB,UAAU,MAAQ,KACf0K,EAAA,EACnBI,EAAW,EAAK,EACEH,EAAA,CACpB,EAEqBR,EAAC9F,GAAwCwG,EAAMxG,CAAK,EAClDiG,EAACjG,GAAsBwG,EAAMxG,CAAK,EACzDkG,EAAqBlG,GAAyB,CACxCA,EAAM,OAAS,UACbA,EAAM,OAAS,WAA4CgG,GAAA,MAAAA,KAC3DhG,EAAM,OAAS,UAAwC+F,GAAA,MAAAA,MAG7DS,EAAMxG,CAAK,CACb,EAEoBmG,EAAA,EACpBI,EAASvG,CAAK,EAEL,SAAA,iBAAiB,cAAe8F,CAAkB,EAClD,SAAA,iBAAiB,YAAaC,CAAiB,EAC/C,SAAA,iBAAiB,QAASE,CAAoB,EAC9C,SAAA,iBAAiB,UAAWC,CAAiB,EAC7C,SAAA,iBAAiB,WAAYA,CAAiB,EAC9C,SAAA,iBAAiB,QAASA,CAAiB,CACtD,CAIA,CACF,CAAC,EC/IYS,GAAgBtJ,GAA8B,CACnD,KAAA,CACJ,GAAAgD,EACA,WAAA/C,EACA,WAAA7B,EACA,SAAA2E,EACA,UAAAI,EACA,cAAAK,EACA,gBAAA+F,EACA,kBAAAC,CAAA,EACE3G,GAAkB7C,CAAO,EAEvB,CAAE,gBAAAZ,CAAgB,EAAItB,EAAY,EAClC,CAAE,gBAAiB2L,CAAM,EAAIpB,GAAgB,EAE7CqB,EAAmB/G,GACvB8G,EAAM9G,EAAO1C,EAAYD,CAAO,EAElCE,OAAAA,EAAAA,UAAUqJ,CAAe,EACzBI,EAAAA,gBAAgBH,CAAiB,EAE1B,CACL,gBAAApK,EACA,WAAAa,EACA,WAAA7B,EACA,SAAA2E,EACA,UAAAI,EACA,cAAAK,EACA,gBAAAkG,EACA,GAAA1G,CACF,CACF,ECjCa4G,GAAkB5J,GAA8B,CACrD,KAAA,CACJ,SAAAvB,EACA,QAAAqB,EACA,iBAAA5B,EACA,WAAAE,EACA,2BAAAe,GACErB,EAAY,EAEVmC,EAAa9B,MAAwB,IAAI,EAEzC4E,EAAW1E,EAAA,SACf,IAAMyB,EAAQ,KAAK,QAAUG,EAAW,KAC1C,EAEMkD,EAAY9E,EAAAA,SAAkB,IAAM,CACxC,GAAI,CAAC4B,EAAW,OAAS,CAAC7B,EAAW,MAAc,MAAA,GAEnD,MAAMyL,EAAcpL,EAAS,MAAM,IAAIwB,EAAW,KAAK,EACvD,OAAK4J,GAAA,MAAAA,EAAa,OAAO,OAElB,CAAC,MAAM,KAAK3L,EAAiB,MAAM,QAAQ,EAAE,KAAMV,GACnDA,EAAQ,OAAO,OACb,CAACA,EAAQ,OAAO,KAAM+F,GAC3BsG,EAAY,OAAO,SAAStG,CAAK,CACnC,EAHmC,EAIpC,EAPuC,EAOvC,CACF,EAEKC,EAAgBnF,EAAAA,SAAkB,IAAM,CAE5C,GADI,CAAC4B,EAAW,OAAS,CAAC7B,EAAW,OACjC0B,EAAQ,KAAK,QAAUG,EAAW,MAAc,MAAA,GAEpD,MAAM4J,EAAcpL,EAAS,MAAM,IAAIwB,EAAW,KAAK,EACvD,OAAK4J,GAAA,MAAAA,EAAa,OAAO,OAElB,CAAC,MAAM,KAAK3L,EAAiB,MAAM,QAAQ,EAAE,KAAMV,GACjD,CAACA,EAAQ,OAAO,KAAM+F,GAC3BsG,EAAY,OAAO,SAAStG,CAAK,CACnC,CACD,EANuC,EAMvC,CACF,EA0BM,MAAA,CACL,WAAAtD,EACA,aA1BmB,IAAM,CACzB,GAAI,CAACA,EAAW,MAAa,MAAA,IAAI,MAAM,uBAAuB,EAEnCd,EAAA,MAAOc,EAAW,KAAK,EAEzCxB,EAAA,MAAM,IAAIwB,EAAW,MAAO,CACnC,KAAMA,EAAW,MACjB,QAAQD,GAAA,YAAAA,EAAS,SAAU,CAAC,EAC5B,QAAQA,GAAA,YAAAA,EAAS,SAAU,CAAC,EAC5B,MAAMA,GAAA,YAAAA,EAAS,OAAQ,OACvB,UAAWA,GAAA,YAAAA,EAAS,WAAwB,EAAA,CAC7C,EAEUC,EAAA,MAAM,aAAa,qBAAsB,MAAM,CAC5D,EAaE,eAXqB,IAAM,CACtBA,EAAW,QAEWd,EAAA,SAAUc,EAAW,KAAK,EAE5CxB,EAAA,MAAM,OAAOwB,EAAW,KAAK,EACxC,EAME,SAAA8C,EACA,UAAAI,EACA,cAAAK,CACF,CACF,EC3EasG,GAAgB9J,GAA8B,CACnD,KAAA,CACJ,WAAAC,EACA,aAAA8J,EACA,eAAAC,EACA,SAAAjH,EACA,UAAAI,EACA,cAAAK,CAAA,EACEoG,GAAe5J,CAAO,EAG1BE,OAAAA,EAAAA,UAAU6J,CAAY,EACtBJ,EAAAA,gBAAgBK,CAAc,EAEvB,CAAE,WAAA/J,EAAY,SAAA8C,EAAU,UAAAI,EAAW,cAAAK,CAAc,CAC1D,EChBayG,GAAgBhK,GAAwC,CACnE,KAAM,CAAE,iBAAAzB,EAAkB,YAAAD,CAAY,EAAIT,EAAY,EAEhDoM,EAAa7L,EAAA,SAAkB,IACnC4B,EAAW,MAAQzB,EAAiB,MAAM,IAAIyB,EAAW,KAAK,EAAI,EACpE,EAEMkK,EAAqB9L,EAAAA,SAAS,IAAM,CACpC,GAAA,CAAC4B,EAAW,MAAc,MAAA,GAEnB,UAAAkE,KAAQ3F,EAAiB,MAClC,GACE2F,GACAV,EAAaU,EAAqBlE,EAAW,KAAoB,EAE1D,MAAA,GAGJ,MAAA,EAAA,CACR,EAEKmK,EAAoB/L,EAAAA,SAAS,IAAM,CACnC,GAAA,CAAC4B,EAAW,MAAc,MAAA,GAEnB,UAAAkE,KAAQ3F,EAAiB,MAClC,GACE2F,GACAV,EAAaxD,EAAW,MAAsBkE,CAAmB,EAE1D,MAAA,GAGJ,MAAA,EAAA,CACR,EAEKkG,EAAiB,IAAM,CACtBpK,EAAW,OACCzB,EAAA,MAAM,OAAOyB,EAAW,KAAK,CAChD,EAEMqK,EAAe,IAAM,CAGzB,GAFI,GAACrK,EAAW,OAEZ,CADY1B,EAAY,MAAM,IAAI0B,EAAW,KAAK,GAGtD,IAAIkK,EAAmB,MAEV,UAAAhG,KAAQ3F,EAAiB,MAEhC2F,GACAV,EAAaU,EAAqBlE,EAAW,KAAoB,GAEhDzB,EAAA,MAAM,OAAO2F,CAAI,EAKxC,GAAIiG,EAAkB,MAET,UAAAjG,KAAQ3F,EAAiB,MAEhC2F,GACAV,EAAaxD,EAAW,MAAsBkE,CAAmB,GAEhD3F,EAAA,MAAM,OAAO2F,CAAI,EAKvB3F,EAAA,MAAM,IAAIyB,EAAW,KAAK,EAC7C,EAUO,MAAA,CACL,eAAAoK,EACA,aAAAC,EACA,mBAXyB,IAAM,CAC1BrK,EAAW,QAEhBzB,EAAiB,MAAM,IAAIyB,EAAW,KAAK,EACvCoK,IACAC,EAAa,EACnB,EAME,WAAAJ,EACA,mBAAAC,CACF,CACF"}
|
|
1
|
+
{"version":3,"file":"vue-dnd-kit-core.cjs.js","sources":["../src/utils/operations.ts","../src/composables/useDnDStore.ts","../src/composables/useDragContainer.ts","../src/components/DefaultOverlay.vue","../src/components/DragOverlay.vue","../src/plugin.ts","../src/utils/geometry.ts","../src/utils/namespaces.ts","../src/utils/events.ts","../src/managers/useElementManager.ts","../src/utils/dom.ts","../src/utils/sensor.ts","../src/composables/useKeyboard.ts","../src/composables/usePointer.ts","../src/composables/useSensor.ts","../src/managers/useEventManager.ts","../src/composables/useDraggable.ts","../src/managers/useZoneManager.ts","../src/composables/useDroppable.ts","../src/composables/useSelection.ts"],"sourcesContent":["import { IDnDStore } from '../types';\r\n\r\nexport class DnDOperations {\r\n static remove = (source?: any[], index?: number) => {\r\n if (!source || index === undefined) return;\r\n const [item] = source.splice(index, 1);\r\n return item;\r\n };\r\n static insert = (target?: any[], index?: number, item?: any) => {\r\n if (!target || index === undefined) return;\r\n target.splice(index, 0, item);\r\n };\r\n static move = (\r\n source?: any[],\r\n sourceIndex?: number,\r\n target?: any[],\r\n targetIndex?: number\r\n ) => {\r\n if (\r\n !source ||\r\n !target ||\r\n sourceIndex === undefined ||\r\n targetIndex === undefined\r\n )\r\n return;\r\n const item = DnDOperations.remove(source, sourceIndex);\r\n DnDOperations.insert(target, targetIndex, item);\r\n };\r\n static swap = (\r\n source?: any[],\r\n sourceIndex?: number,\r\n target?: any[],\r\n targetIndex?: number\r\n ) => {\r\n if (\r\n !source ||\r\n !target ||\r\n sourceIndex === undefined ||\r\n targetIndex === undefined\r\n )\r\n return;\r\n\r\n const sourceItem = source[sourceIndex];\r\n const targetItem = target[targetIndex];\r\n\r\n source[sourceIndex] = targetItem;\r\n target[targetIndex] = sourceItem;\r\n };\r\n static copy = (\r\n source?: any[],\r\n index?: number,\r\n target?: any[],\r\n targetIndex?: number\r\n ) => {\r\n if (!source || index === undefined || !target || targetIndex === undefined)\r\n return;\r\n const item = source[index];\r\n DnDOperations.insert(target, targetIndex, item);\r\n };\r\n static applyTransfer = (store: IDnDStore) => {\r\n const hoveredElement = store.hovered.element.value;\r\n const hoveredZone = store.hovered.zone.value;\r\n\r\n if (hoveredElement) {\r\n const targetSource =\r\n store.elementsMap.value.get(hoveredElement)?.data?.source;\r\n const targetIndex =\r\n store.elementsMap.value.get(hoveredElement)?.data?.index;\r\n\r\n const firstElement = store.draggingElements.value.values().next().value;\r\n const firstIndex = firstElement?.data?.index;\r\n\r\n const sortDirection =\r\n firstIndex !== undefined &&\r\n targetIndex !== undefined &&\r\n firstIndex > targetIndex\r\n ? 1\r\n : -1;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort(\r\n (a, b) => sortDirection * ((a.data?.index || 0) - (b.data?.index || 0))\r\n );\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n } else if (hoveredZone) {\r\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\r\n const targetIndex = targetSource?.length;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n }\r\n };\r\n\r\n static applyCopy = (store: IDnDStore) => {\r\n const hoveredElement = store.hovered.element.value;\r\n const hoveredZone = store.hovered.zone.value;\r\n\r\n if (hoveredElement) {\r\n const targetSource =\r\n store.elementsMap.value.get(hoveredElement)?.data?.source;\r\n const targetIndex =\r\n store.elementsMap.value.get(hoveredElement)?.data?.index;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.copy(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n } else if (hoveredZone) {\r\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\r\n const targetIndex = targetSource?.length;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.copy(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n }\r\n };\r\n static applySwap = (store: IDnDStore) => {\r\n const hoveredElement = store.hovered.element.value;\r\n const hoveredZone = store.hovered.zone.value;\r\n\r\n if (hoveredElement && store.draggingElements.value.size === 1) {\r\n const element = store.draggingElements.value.values().next().value;\r\n DnDOperations.swap(\r\n element?.data?.source,\r\n element?.data?.index,\r\n store.elementsMap.value.get(hoveredElement)?.data?.source,\r\n store.elementsMap.value.get(hoveredElement)?.data?.index\r\n );\r\n } else if (hoveredZone) {\r\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\r\n const targetIndex = targetSource?.length;\r\n\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) =>\r\n DnDOperations.move(\r\n element.data?.source,\r\n element.data?.index,\r\n targetSource,\r\n targetIndex\r\n )\r\n );\r\n }\r\n };\r\n static applyRemove = (store: IDnDStore) => {\r\n const sortedElements = Array.from(\r\n store.draggingElements.value.values()\r\n ).sort((a, b) => (b.data?.index || 0) - (a.data?.index || 0));\r\n\r\n sortedElements.forEach((element) => {\r\n if (element.data?.source && element.data?.index !== undefined) {\r\n DnDOperations.remove(element.data.source, element.data.index);\r\n }\r\n });\r\n };\r\n static applyInsert = (store: IDnDStore, items: any[]) => {\r\n const hoveredElement = store.hovered.element.value;\r\n const hoveredZone = store.hovered.zone.value;\r\n\r\n if (hoveredElement && items.length > 0) {\r\n const targetSource =\r\n store.elementsMap.value.get(hoveredElement)?.data?.source;\r\n const targetIndex =\r\n store.elementsMap.value.get(hoveredElement)?.data?.index;\r\n\r\n items.forEach((item) => {\r\n DnDOperations.insert(targetSource, targetIndex, item);\r\n });\r\n } else if (hoveredZone) {\r\n const targetSource = store.zonesMap.value.get(hoveredZone)?.data?.source;\r\n const targetIndex = targetSource?.length;\r\n\r\n items.forEach((item) => {\r\n DnDOperations.insert(targetSource, targetIndex, item);\r\n });\r\n }\r\n };\r\n}\r\n","import type {\r\n IDragElement,\r\n IDraggingElement,\r\n IDropZone,\r\n IPoint,\r\n} from '../types';\r\nimport {\r\n computed,\r\n ref,\r\n shallowRef,\r\n type Component,\r\n type TransitionProps,\r\n} from 'vue';\r\nimport { createGlobalState, useMagicKeys } from '@vueuse/core';\r\n\r\nexport const useDnDStore = createGlobalState(() => {\r\n const isPending = shallowRef<boolean>(false);\r\n const draggingElements = ref<Map<HTMLElement | Element, IDraggingElement>>(\r\n new Map()\r\n );\r\n const isDragging = computed<boolean>(() => draggingElements.value.size > 0);\r\n\r\n const activeContainer = {\r\n component: ref<Component | null>(null),\r\n ref: shallowRef<HTMLElement | null>(null),\r\n options: shallowRef<TransitionProps | null>(null),\r\n props: shallowRef<Record<string, any> | null>(null),\r\n animating: {\r\n enter: shallowRef<boolean>(false),\r\n leave: shallowRef<boolean>(false),\r\n appear: shallowRef<boolean>(false),\r\n },\r\n };\r\n\r\n const elementsMap = ref<Map<HTMLElement | Element, IDragElement>>(new Map());\r\n const selectedElements = ref<Set<HTMLElement | Element>>(new Set());\r\n const zonesMap = ref<Map<HTMLElement | Element, IDropZone>>(new Map());\r\n const visibleZones = shallowRef<Set<HTMLElement | Element>>(new Set());\r\n const visibleElements = shallowRef<Set<HTMLElement | Element>>(new Set());\r\n\r\n const hasIntersectionObserver =\r\n typeof window !== 'undefined' && 'IntersectionObserver' in window;\r\n\r\n const elementObserver = hasIntersectionObserver\r\n ? new IntersectionObserver((entries) => {\r\n entries.forEach((entry) =>\r\n visibleElements.value[entry.isIntersecting ? 'add' : 'delete'](\r\n entry.target\r\n )\r\n );\r\n })\r\n : null;\r\n\r\n const zoneObserver = hasIntersectionObserver\r\n ? new IntersectionObserver((entries) => {\r\n entries.forEach((entry) =>\r\n visibleZones.value[entry.isIntersecting ? 'add' : 'delete'](\r\n entry.target\r\n )\r\n );\r\n })\r\n : null;\r\n\r\n const handleDragElementIntersection = (\r\n action: 'add' | 'remove',\r\n element: HTMLElement | Element\r\n ) => {\r\n if (!elementObserver) return;\r\n\r\n if (action === 'add') {\r\n elementObserver.observe(element);\r\n } else {\r\n elementObserver.unobserve(element);\r\n visibleElements.value.delete(element);\r\n }\r\n };\r\n\r\n const handleDropZoneIntersection = (\r\n action: 'add' | 'remove',\r\n element: HTMLElement | Element\r\n ) => {\r\n if (!zoneObserver) return;\r\n\r\n if (action === 'add') {\r\n zoneObserver.observe(element);\r\n } else {\r\n zoneObserver.unobserve(element);\r\n visibleZones.value.delete(element);\r\n }\r\n };\r\n\r\n const pointerPosition = {\r\n start: shallowRef<IPoint | null>(null),\r\n current: shallowRef<IPoint | null>(null),\r\n offset: {\r\n percent: shallowRef<IPoint | null>(null),\r\n pixel: shallowRef<IPoint | null>(null),\r\n },\r\n };\r\n\r\n const { KeyW, KeyS, KeyA, KeyD, ctrl, shift, alt, meta } = useMagicKeys();\r\n\r\n const hovered = {\r\n zone: shallowRef<HTMLElement | Element | null>(null),\r\n element: shallowRef<HTMLElement | Element | null>(null),\r\n };\r\n\r\n return {\r\n draggingElements,\r\n isDragging,\r\n activeContainer,\r\n elementsMap,\r\n selectedElements,\r\n zonesMap,\r\n visibleZones,\r\n visibleElements,\r\n pointerPosition,\r\n keyboard: {\r\n w: KeyW,\r\n s: KeyS,\r\n a: KeyA,\r\n d: KeyD,\r\n ctrl,\r\n shift,\r\n alt,\r\n meta,\r\n },\r\n hovered,\r\n isPending,\r\n handleDragElementIntersection,\r\n handleDropZoneIntersection,\r\n };\r\n});\r\n","import { onUnmounted, onMounted, ref, type TransitionProps } from 'vue';\r\n\r\nimport { useDnDStore } from './useDnDStore';\r\n\r\nexport const useDragContainer = (options?: Omit<TransitionProps, 'appear'>) => {\r\n const elementRef = ref<HTMLElement | null>(null);\r\n\r\n const { draggingElements, pointerPosition, isDragging, activeContainer } =\r\n useDnDStore();\r\n\r\n onMounted(() => {\r\n activeContainer.ref = elementRef;\r\n activeContainer.options.value = options ?? null;\r\n });\r\n\r\n onUnmounted(() => {\r\n activeContainer.ref.value = null;\r\n activeContainer.options.value = null;\r\n });\r\n\r\n return {\r\n elementRef,\r\n draggingElements,\r\n pointerPosition,\r\n isDragging,\r\n animating: activeContainer.animating,\r\n };\r\n};\r\n","<script setup lang=\"ts\">\r\n import { computed, CSSProperties } from 'vue';\r\n import { useDragContainer } from '../composables/useDragContainer';\r\n\r\n const { elementRef, pointerPosition, isDragging, draggingElements } =\r\n useDragContainer();\r\n\r\n const { styles } = defineProps<{\r\n styles?: CSSProperties;\r\n }>();\r\n\r\n const computedStyle = computed<CSSProperties>(() => ({\r\n transform: `translate3d(${\r\n (pointerPosition.current.value?.x ?? 0) -\r\n (pointerPosition.offset.pixel.value?.x ?? 0)\r\n }px, ${\r\n (pointerPosition.current.value?.y ?? 0) -\r\n (pointerPosition.offset.pixel.value?.y ?? 0)\r\n }px, 0)`,\r\n zIndex: 1000,\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n transition: '0.3s cubic-bezier(0.165, 0.84, 0.44, 1)',\r\n ...styles,\r\n }));\r\n</script>\r\n\r\n<template>\r\n <div\r\n v-if=\"isDragging\"\r\n ref=\"elementRef\"\r\n :style=\"computedStyle\"\r\n >\r\n <template\r\n v-for=\"[node, element] in draggingElements\"\r\n :key=\"element.id\"\r\n >\r\n <component\r\n v-if=\"element.layer\"\r\n :is=\"element.layer\"\r\n :node=\"node\"\r\n :data=\"element.data\"\r\n :id=\"element.id\"\r\n :groups=\"element.groups\"\r\n />\r\n <div\r\n v-else\r\n v-html=\"element.initialHTML\"\r\n :style=\"{\r\n width: `${element.initialRect?.width}px`,\r\n height: `${element.initialRect?.height}px`,\r\n }\"\r\n />\r\n </template>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n import { computed, CSSProperties } from 'vue';\r\n import { useDnDStore } from '../composables/useDnDStore';\r\n import DefaultOverlay from './DefaultOverlay.vue';\r\n\r\n const props = defineProps<{\r\n styles?: CSSProperties;\r\n }>();\r\n\r\n const { activeContainer } = useDnDStore();\r\n\r\n const overlay = computed(() => ({\r\n component: activeContainer.component.value ?? DefaultOverlay,\r\n props: {\r\n ...props,\r\n ...activeContainer.props.value,\r\n },\r\n }));\r\n</script>\r\n\r\n<template>\r\n <Transition\r\n v-if=\"activeContainer.options.value\"\r\n :name=\"activeContainer.options.value.name\"\r\n :duration=\"activeContainer.options.value.duration\"\r\n :enter-from-class=\"activeContainer.options.value.enterFromClass\"\r\n :enter-to-class=\"activeContainer.options.value.enterToClass\"\r\n :enter-active-class=\"activeContainer.options.value.enterActiveClass\"\r\n :leave-from-class=\"activeContainer.options.value.leaveFromClass\"\r\n :leave-to-class=\"activeContainer.options.value.leaveToClass\"\r\n :leave-active-class=\"activeContainer.options.value.leaveActiveClass\"\r\n :appear-active-class=\"activeContainer.options.value.appearActiveClass\"\r\n :appear-from-class=\"activeContainer.options.value.appearFromClass\"\r\n :appear-to-class=\"activeContainer.options.value.appearToClass\"\r\n :mode=\"activeContainer.options.value.mode\"\r\n :type=\"activeContainer.options.value.type\"\r\n :css=\"activeContainer.options.value.css\"\r\n :appear=\"true\"\r\n :persisted=\"activeContainer.options.value.persisted\"\r\n @enter=\"activeContainer.options.value.onEnter\"\r\n @leave=\"activeContainer.options.value.onLeave\"\r\n @before-enter=\"activeContainer.options.value.onBeforeEnter\"\r\n @before-leave=\"activeContainer.options.value.onBeforeLeave\"\r\n @before-appear=\"activeContainer.options.value.onBeforeAppear\"\r\n @after-enter=\"activeContainer.options.value.onAfterEnter\"\r\n @after-leave=\"activeContainer.options.value.onAfterLeave\"\r\n @after-appear=\"activeContainer.options.value.onAfterAppear\"\r\n >\r\n <component\r\n :is=\"overlay.component || overlay\"\r\n v-bind=\"overlay.props || {}\"\r\n />\r\n </Transition>\r\n\r\n <component\r\n v-else\r\n :is=\"overlay.component || overlay\"\r\n v-bind=\"overlay.props || {}\"\r\n />\r\n</template>\r\n","import { createVNode, render } from 'vue';\r\n\r\nimport type { App } from 'vue';\r\nimport DragOverlay from './components/DragOverlay.vue';\r\nimport { IPluginOptions } from './types';\r\nimport { useDnDStore } from './composables/useDnDStore';\r\n\r\nexport const VueDndKitPlugin = {\r\n install(app: App, options?: IPluginOptions) {\r\n app.component('DragOverlay', DragOverlay);\r\n const originalMount = app.mount;\r\n app.mount = function (rootContainer) {\r\n const instance = originalMount.call(this, rootContainer);\r\n\r\n const rootEl =\r\n typeof rootContainer === 'string'\r\n ? document.querySelector(rootContainer)\r\n : rootContainer;\r\n\r\n if (rootEl && rootEl instanceof Element) {\r\n if (!rootEl.querySelector('#vue-dnd-kit-overlay')) {\r\n const overlayContainer = document.createElement('div');\r\n\r\n overlayContainer.id = 'vue-dnd-kit-overlay';\r\n overlayContainer.style.pointerEvents = 'none';\r\n\r\n // Применяем кастомный z-index если указан\r\n if (options?.overlayPosition?.zIndex) {\r\n overlayContainer.style.zIndex =\r\n options.overlayPosition.zIndex.toString();\r\n }\r\n\r\n // Применяем кастомный класс если указан\r\n if (options?.overlayPosition?.className) {\r\n overlayContainer.className = options.overlayPosition.className;\r\n }\r\n\r\n // Определяем метод вставки overlay\r\n const insertMethod = options?.overlayPosition?.method || 'append';\r\n const targetElement = options?.overlayPosition?.target\r\n ? typeof options.overlayPosition.target === 'string'\r\n ? document.querySelector(options.overlayPosition.target)\r\n : options.overlayPosition.target\r\n : rootEl;\r\n\r\n if (targetElement && targetElement instanceof Element) {\r\n switch (insertMethod) {\r\n case 'prepend':\r\n targetElement.insertBefore(\r\n overlayContainer,\r\n targetElement.firstChild\r\n );\r\n break;\r\n case 'after':\r\n targetElement.parentNode?.insertBefore(\r\n overlayContainer,\r\n targetElement.nextSibling\r\n );\r\n break;\r\n case 'before':\r\n targetElement.parentNode?.insertBefore(\r\n overlayContainer,\r\n targetElement\r\n );\r\n break;\r\n case 'append':\r\n default:\r\n targetElement.appendChild(overlayContainer);\r\n break;\r\n }\r\n } else {\r\n // Fallback к старому поведению\r\n rootEl.appendChild(overlayContainer);\r\n }\r\n\r\n // Передаем опции напрямую в компонент\r\n const vnode = createVNode(DragOverlay, {\r\n styles: options?.defaultOverlay?.styles,\r\n });\r\n render(vnode, overlayContainer);\r\n\r\n app.__VUE_DND_KIT_OVERLAY__ = {\r\n container: overlayContainer,\r\n vnode,\r\n options: options?.defaultOverlay || {},\r\n };\r\n\r\n const store = useDnDStore();\r\n app.__VUE_DND_KIT_STORE__ = store;\r\n }\r\n }\r\n\r\n return instance;\r\n };\r\n\r\n // Модифицируем метод unmount для очистки\r\n const originalUnmount = app.unmount;\r\n app.unmount = function () {\r\n if (app.__VUE_DND_KIT_OVERLAY__) {\r\n render(null, app.__VUE_DND_KIT_OVERLAY__.container);\r\n delete app.__VUE_DND_KIT_OVERLAY__;\r\n }\r\n return originalUnmount.call(this);\r\n };\r\n },\r\n};\r\n\r\ndeclare module '@vue/runtime-core' {\r\n export interface App {\r\n __VUE_DND_KIT_OVERLAY__?: {\r\n container: HTMLElement;\r\n vnode: any;\r\n options: IPluginOptions['defaultOverlay'];\r\n };\r\n __VUE_DND_KIT_STORE__?: ReturnType<typeof useDnDStore>;\r\n }\r\n}\r\n","import type { IBoundingBox, IPoint } from '../types';\r\n\r\nexport const checkCollision = (\r\n boxA: IBoundingBox,\r\n boxB: IBoundingBox\r\n): boolean => {\r\n return (\r\n boxA.x < boxB.x + boxB.width &&\r\n boxA.x + boxA.width > boxB.x &&\r\n boxA.y < boxB.y + boxB.height &&\r\n boxA.y + boxA.height > boxB.y\r\n );\r\n};\r\n\r\nexport const getBoundingBox = (element: HTMLElement | null): IBoundingBox => {\r\n if (!element)\r\n return {\r\n x: 0,\r\n y: 0,\r\n width: 0,\r\n height: 0,\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n top: 0,\r\n };\r\n\r\n const rect = element.getBoundingClientRect();\r\n\r\n return {\r\n bottom: rect.bottom,\r\n left: rect.left,\r\n right: rect.right,\r\n top: rect.top,\r\n x: rect.x,\r\n y: rect.y,\r\n width: rect.width,\r\n height: rect.height,\r\n };\r\n};\r\n\r\nexport const getCenter = (box: IBoundingBox): IPoint => ({\r\n x: box.x + box.width / 2,\r\n y: box.y + box.height / 2,\r\n});\r\n\r\nexport const getOffset = (element: HTMLElement | null, pointer: IPoint) => {\r\n const rect = getBoundingBox(element);\r\n return {\r\n pixel: {\r\n x: pointer.x - rect.x,\r\n y: pointer.y - rect.y,\r\n },\r\n percent: {\r\n x: ((pointer.x - rect.x) / rect.width) * 100,\r\n y: ((pointer.y - rect.y) / rect.height) * 100,\r\n },\r\n };\r\n};\r\n\r\nexport const getDistance = (pointA: IPoint, pointB: IPoint): number => {\r\n const dx = pointB.x - pointA.x;\r\n const dy = pointB.y - pointA.y;\r\n return Math.sqrt(dx * dx + dy * dy);\r\n};\r\n\r\nexport const getOverlapPercent = (\r\n boxA: IBoundingBox,\r\n boxB: IBoundingBox\r\n): number => {\r\n const xOverlap = Math.max(\r\n 0,\r\n Math.min(boxA.x + boxA.width, boxB.x + boxB.width) -\r\n Math.max(boxA.x, boxB.x)\r\n );\r\n const yOverlap = Math.max(\r\n 0,\r\n Math.min(boxA.y + boxA.height, boxB.y + boxB.height) -\r\n Math.max(boxA.y, boxB.y)\r\n );\r\n\r\n const overlapArea = xOverlap * yOverlap;\r\n\r\n const boxAArea = boxA.width * boxA.height;\r\n const boxBArea = boxB.width * boxB.height;\r\n\r\n // Возвращаем среднее значение процентов перекрытия относительно обоих элементов\r\n return ((overlapArea / boxAArea) * 100 + (overlapArea / boxBArea) * 100) / 2;\r\n};\r\n","export const draggableDataName = 'data-vue-dnd-kit-draggable';\r\nexport const droppableDataName = 'data-vue-dnd-kit-droppable';\r\n\r\nexport const VUE_DND_KIT_OPTIONS = Symbol('vue-dnd-kit-options');\r\n","import { IDnDPayload, IDnDStore } from '../types';\r\n\r\nexport const preventEvent = (event: Event) => {\r\n event.preventDefault();\r\n};\r\n\r\nexport const createPayload = (store: IDnDStore): IDnDPayload => {\r\n return {\r\n items: Array.from(store.draggingElements.value.values()),\r\n };\r\n};\r\n","import { computed, ref, shallowRef, useId } from 'vue';\r\n\r\nimport type { IUseDragOptions } from '../types';\r\nimport { draggableDataName } from '../utils/namespaces';\r\nimport { preventEvent } from '../utils/events';\r\nimport { useDnDStore } from '../composables/useDnDStore';\r\n\r\nexport const useElementManager = (options?: IUseDragOptions) => {\r\n const {\r\n elementsMap,\r\n draggingElements,\r\n hovered,\r\n selectedElements,\r\n isDragging: isDragStarted,\r\n visibleElements,\r\n handleDragElementIntersection,\r\n } = useDnDStore();\r\n\r\n const elementRef = ref<HTMLElement | null>(null);\r\n const isOvered = computed<boolean>(() => {\r\n return hovered.element.value === elementRef.value;\r\n });\r\n\r\n const id = shallowRef(options?.id || useId());\r\n const disabled = shallowRef<boolean>((options?.disabled as boolean) ?? false);\r\n\r\n const isDragging = computed<boolean>(() => {\r\n if (disabled.value) return false;\r\n if (!elementRef.value) return false;\r\n if (!elementsMap.value.has(elementRef.value)) return false;\r\n return draggingElements.value.has(elementRef.value);\r\n });\r\n\r\n const isAllowed = computed<boolean>(() => {\r\n if (disabled.value) return false;\r\n if (!elementRef.value || !isDragStarted.value) return false;\r\n if (!visibleElements.value.has(elementRef.value)) return false;\r\n\r\n const currentElement = elementsMap.value.get(elementRef.value);\r\n if (!currentElement?.groups.length) return true;\r\n\r\n return !Array.from(draggingElements.value.entries()).some(\r\n ([_, draggingElement]) => {\r\n if (!draggingElement.groups.length) return false;\r\n return !draggingElement.groups.some((group) =>\r\n currentElement.groups.includes(group)\r\n );\r\n }\r\n );\r\n });\r\n\r\n const isLazyAllowed = computed<boolean>(() => {\r\n if (disabled.value) return false;\r\n if (!elementRef.value || !isDragStarted.value) return false;\r\n if (!visibleElements.value.has(elementRef.value)) return false;\r\n if (hovered.element.value !== elementRef.value) return false;\r\n\r\n const currentElement = elementsMap.value.get(elementRef.value);\r\n if (!currentElement?.groups.length) return true;\r\n\r\n return !Array.from(draggingElements.value.entries()).some(\r\n ([_, draggingElement]) => {\r\n if (!draggingElement.groups.length) return false;\r\n return !draggingElement.groups.some((group) =>\r\n currentElement.groups.includes(group)\r\n );\r\n }\r\n );\r\n });\r\n\r\n const registerElement = () => {\r\n if (!elementRef.value) throw new Error('ElementRef is not set');\r\n\r\n elementsMap.value.set(elementRef.value, {\r\n node: elementRef.value,\r\n groups: (options?.groups as string[]) ?? [],\r\n layer: options?.layer ?? null,\r\n defaultLayer: options?.layer ?? null,\r\n events: options?.events ?? {},\r\n data: options?.data ?? null,\r\n id: id.value,\r\n disabled: (disabled as unknown as boolean) ?? false,\r\n });\r\n\r\n handleDragElementIntersection('add', elementRef.value);\r\n\r\n elementRef.value.addEventListener('dragstart', preventEvent);\r\n elementRef.value.addEventListener('drag', preventEvent);\r\n elementRef.value.setAttribute(draggableDataName, 'true');\r\n elementRef.value.setAttribute('draggable', 'false');\r\n };\r\n\r\n const unregisterElement = () => {\r\n if (!elementRef.value) return;\r\n\r\n elementsMap.value.delete(elementRef.value);\r\n selectedElements.value.delete(elementRef.value);\r\n\r\n elementRef.value.removeEventListener('dragstart', preventEvent);\r\n elementRef.value.removeEventListener('drag', preventEvent);\r\n elementRef.value.removeAttribute(draggableDataName);\r\n elementRef.value.removeAttribute('draggable');\r\n };\r\n\r\n return {\r\n elementRef,\r\n registerElement,\r\n unregisterElement,\r\n isDragging,\r\n isOvered,\r\n isAllowed,\r\n isLazyAllowed,\r\n id,\r\n };\r\n};\r\n","export const isDescendant = (\r\n element: HTMLElement | Element | null,\r\n container: HTMLElement | Element\r\n): boolean => {\r\n if (!element) return false;\r\n return container.contains(element);\r\n};\r\n","import {\r\n checkCollision,\r\n getBoundingBox,\r\n getCenter,\r\n getDistance,\r\n getOverlapPercent,\r\n} from './geometry';\r\n\r\nimport { IDnDStore } from '../types';\r\nimport { isDescendant } from './dom';\r\n\r\nexport const defaultCollisionDetection = (store: IDnDStore) => {\r\n const containerRect = getBoundingBox(store.activeContainer.ref.value);\r\n const containerCenter = getCenter(containerRect);\r\n const pointerX = store.pointerPosition.current.value?.x ?? 0;\r\n const pointerY = store.pointerPosition.current.value?.y ?? 0;\r\n\r\n const isPointerInActiveContainer =\r\n containerRect &&\r\n pointerX >= containerRect.x &&\r\n pointerX <= containerRect.x + containerRect.width &&\r\n pointerY >= containerRect.y &&\r\n pointerY <= containerRect.y + containerRect.height;\r\n\r\n const shouldUseNormalPriority = !isPointerInActiveContainer;\r\n\r\n const activeDragNodes = Array.from(store.draggingElements.value.keys());\r\n\r\n const allCollidingElements = Array.from(store.visibleElements.value.entries())\r\n .filter(([node, _]) => {\r\n if (!node) return false;\r\n\r\n const rect = getBoundingBox(node as HTMLElement);\r\n return rect && containerRect && checkCollision(rect, containerRect);\r\n })\r\n .map(([node, element]) => {\r\n const rect = getBoundingBox(node as HTMLElement);\r\n const elementCenter = getCenter(rect);\r\n\r\n const isPointerInElement =\r\n pointerX >= rect.x &&\r\n pointerX <= rect.x + rect.width &&\r\n pointerY >= rect.y &&\r\n pointerY <= rect.y + rect.height;\r\n\r\n const overlapPercent = getOverlapPercent(rect, containerRect);\r\n const centerDistance = getDistance(containerCenter, elementCenter);\r\n\r\n let depth = 0;\r\n for (const [parentNode, _] of store.visibleElements.value.entries()) {\r\n if (\r\n parentNode !== node &&\r\n parentNode &&\r\n node &&\r\n isDescendant(node as HTMLElement, parentNode as HTMLElement)\r\n ) {\r\n depth++;\r\n }\r\n }\r\n\r\n return {\r\n element,\r\n node: node as HTMLElement,\r\n isPointerInElement,\r\n overlapPercent,\r\n depth,\r\n centerDistance,\r\n };\r\n })\r\n .sort((a, b) => {\r\n if (!shouldUseNormalPriority) {\r\n if (a.isPointerInElement && b.isPointerInElement)\r\n return b.depth - a.depth;\r\n if (a.isPointerInElement !== b.isPointerInElement)\r\n return a.isPointerInElement ? -1 : 1;\r\n }\r\n if (Math.abs(a.overlapPercent - b.overlapPercent) <= 1)\r\n return a.centerDistance - b.centerDistance;\r\n return b.overlapPercent - a.overlapPercent;\r\n });\r\n\r\n const allCollidingZones = Array.from(store.visibleZones.value.entries())\r\n .filter(([node, _]) => {\r\n if (\r\n !node ||\r\n activeDragNodes.some(\r\n (dragNode) =>\r\n dragNode &&\r\n isDescendant(node as HTMLElement, dragNode as HTMLElement)\r\n )\r\n )\r\n return false;\r\n\r\n const rect = getBoundingBox(node as HTMLElement);\r\n return rect && containerRect && checkCollision(rect, containerRect);\r\n })\r\n .map(([node, zone]) => {\r\n const rect = getBoundingBox(node as HTMLElement);\r\n const zoneCenter = getCenter(rect);\r\n\r\n const isPointerInElement =\r\n pointerX >= rect.x &&\r\n pointerX <= rect.x + rect.width &&\r\n pointerY >= rect.y &&\r\n pointerY <= rect.y + rect.height;\r\n\r\n const overlapPercent = getOverlapPercent(rect, containerRect);\r\n const centerDistance = getDistance(containerCenter, zoneCenter);\r\n\r\n // Вычисляем глубину вложенности\r\n let depth = 0;\r\n for (const [parentNode, _] of store.visibleZones.value.entries()) {\r\n if (\r\n parentNode !== node &&\r\n parentNode &&\r\n node &&\r\n isDescendant(node as HTMLElement, parentNode as HTMLElement)\r\n ) {\r\n depth++;\r\n }\r\n }\r\n\r\n return {\r\n zone,\r\n node: node as HTMLElement,\r\n isPointerInElement,\r\n overlapPercent,\r\n depth,\r\n centerDistance,\r\n };\r\n })\r\n .sort((a, b) => {\r\n if (!shouldUseNormalPriority) {\r\n if (a.isPointerInElement && b.isPointerInElement)\r\n return b.depth - a.depth;\r\n if (a.isPointerInElement !== b.isPointerInElement)\r\n return a.isPointerInElement ? -1 : 1;\r\n }\r\n if (Math.abs(a.overlapPercent - b.overlapPercent) <= 1)\r\n return a.centerDistance - b.centerDistance;\r\n return b.overlapPercent - a.overlapPercent;\r\n });\r\n\r\n return [\r\n ...allCollidingElements.map((item) => item.node),\r\n ...allCollidingZones.map((item) => item.node),\r\n ];\r\n};\r\n","import type { Ref } from 'vue';\r\nimport { getBoundingBox } from '../utils/geometry';\r\nimport { preventEvent } from '../utils/events';\r\nimport { useDnDStore } from './useDnDStore';\r\n\r\nexport interface IKeyboardOptions {\r\n moveStep?: number;\r\n}\r\n\r\nexport const useKeyboard = (\r\n elementRef: Ref<HTMLElement | null>,\r\n options?: IKeyboardOptions\r\n) => {\r\n const { pointerPosition, keyboard } = useDnDStore();\r\n const moveStep = options?.moveStep || 10;\r\n\r\n const onKeyboardStart = (event: KeyboardEvent) => {\r\n preventEvent(event);\r\n\r\n const rect = getBoundingBox(elementRef.value);\r\n\r\n elementRef.value?.blur();\r\n\r\n const centerX = rect.x + rect.width / 2;\r\n const centerY = rect.y + rect.height / 2;\r\n\r\n pointerPosition.start.value = {\r\n x: centerX,\r\n y: centerY,\r\n };\r\n\r\n pointerPosition.current.value = {\r\n x: centerX,\r\n y: centerY,\r\n };\r\n\r\n pointerPosition.offset.pixel.value = {\r\n x: rect.width / 2,\r\n y: rect.height / 2,\r\n };\r\n\r\n pointerPosition.offset.percent.value = {\r\n x: 50,\r\n y: 50,\r\n };\r\n };\r\n\r\n const onKeyboardMove = () => {\r\n if (!pointerPosition.current.value) return;\r\n\r\n const currentX = pointerPosition.current.value.x;\r\n const currentY = pointerPosition.current.value.y;\r\n\r\n let newX = currentX;\r\n let newY = currentY;\r\n\r\n if (keyboard.w.value) newY -= moveStep;\r\n if (keyboard.s.value) newY += moveStep;\r\n if (keyboard.a.value) newX -= moveStep;\r\n if (keyboard.d.value) newX += moveStep;\r\n\r\n pointerPosition.current.value = {\r\n x: newX,\r\n y: newY,\r\n };\r\n };\r\n\r\n const onKeyboardEnd = () => {\r\n pointerPosition.current.value = null;\r\n pointerPosition.start.value = null;\r\n pointerPosition.offset.pixel.value = null;\r\n pointerPosition.offset.percent.value = null;\r\n };\r\n\r\n return {\r\n onKeyboardStart,\r\n onKeyboardMove,\r\n onKeyboardEnd,\r\n };\r\n};\r\n","import type { Ref } from 'vue';\r\nimport { getOffset } from '../utils/geometry';\r\nimport { useDnDStore } from './useDnDStore';\r\n\r\nexport const usePointer = (elementRef: Ref<HTMLElement | null>) => {\r\n const store = useDnDStore();\r\n\r\n const onPointerStart = (event: PointerEvent) => {\r\n store.pointerPosition.start.value = { x: event.clientX, y: event.clientY };\r\n store.pointerPosition.current.value = {\r\n x: event.clientX,\r\n y: event.clientY,\r\n };\r\n\r\n const { pixel, percent } = getOffset(elementRef.value, {\r\n x: event.clientX,\r\n y: event.clientY,\r\n });\r\n\r\n store.pointerPosition.offset.pixel.value = pixel;\r\n store.pointerPosition.offset.percent.value = percent;\r\n };\r\n\r\n const onPointerMove = (event: PointerEvent | WheelEvent) => {\r\n if (store.isPending.value) return;\r\n\r\n store.pointerPosition.current.value = {\r\n x: event.clientX,\r\n y: event.clientY,\r\n };\r\n };\r\n\r\n const onPointerEnd = () => {\r\n store.pointerPosition.current.value = null;\r\n store.pointerPosition.start.value = null;\r\n store.pointerPosition.offset.pixel.value = null;\r\n store.pointerPosition.offset.percent.value = null;\r\n };\r\n\r\n return {\r\n onPointerStart,\r\n onPointerMove,\r\n onPointerEnd,\r\n };\r\n};\r\n","import type {\r\n ICollisionDetectionResult,\r\n IDraggingElement,\r\n IUseDragOptions,\r\n} from '../types';\r\n\r\nimport type { Ref } from 'vue';\r\nimport { createPayload } from '../utils/events';\r\nimport { defaultCollisionDetection } from '../utils/sensor';\r\nimport { isDescendant } from '../utils/dom';\r\nimport { useDnDStore } from './useDnDStore';\r\nimport { useKeyboard } from './useKeyboard';\r\nimport { usePointer } from './usePointer';\r\nimport { useThrottleFn } from '@vueuse/core';\r\n\r\nexport const useSensor = (\r\n elementRef: Ref<HTMLElement | null>,\r\n options?: IUseDragOptions\r\n) => {\r\n const store = useDnDStore();\r\n\r\n const { onPointerStart, onPointerMove, onPointerEnd } =\r\n usePointer(elementRef);\r\n\r\n const { onKeyboardStart, onKeyboardMove, onKeyboardEnd } = useKeyboard(\r\n elementRef,\r\n options?.keyboard\r\n );\r\n\r\n let animationFrameId: number | null = null;\r\n\r\n const getDraggingElements = (\r\n draggableElement: HTMLElement | null\r\n ): Map<HTMLElement | Element, IDraggingElement> => {\r\n if (!draggableElement) return new Map();\r\n\r\n const isDraggableInSelection =\r\n store.selectedElements.value.has(draggableElement);\r\n\r\n if (store.selectedElements.value.size > 0 && isDraggableInSelection) {\r\n const result = new Map<HTMLElement | Element, IDraggingElement>();\r\n\r\n store.selectedElements.value.forEach((node) => {\r\n const element = store.elementsMap.value.get(node);\r\n if (!element) return;\r\n\r\n result.set(node, {\r\n ...element,\r\n initialHTML: element.node?.outerHTML ?? '',\r\n initialRect: element.node?.getBoundingClientRect(),\r\n });\r\n });\r\n\r\n return result;\r\n }\r\n\r\n store.selectedElements.value.clear();\r\n\r\n const element = store.elementsMap.value.get(draggableElement);\r\n if (!element) return new Map();\r\n\r\n const result = new Map<HTMLElement | Element, IDraggingElement>();\r\n\r\n result.set(draggableElement, {\r\n ...element,\r\n initialHTML: element.node?.outerHTML ?? '',\r\n initialRect: element.node?.getBoundingClientRect(),\r\n });\r\n\r\n return result;\r\n };\r\n\r\n const validateCollisionResults = (\r\n htmlElements: HTMLElement | HTMLElement[] | Element | Element[] | null\r\n ) => {\r\n if (!htmlElements) {\r\n return { element: null, zone: null };\r\n }\r\n\r\n const elements = Array.isArray(htmlElements)\r\n ? htmlElements\r\n : [htmlElements];\r\n const activeDragNodes = Array.from(store.draggingElements.value.keys());\r\n\r\n const disabledZones = Array.from(store.zonesMap.value.entries()).flatMap(\r\n ([element, zone]) => (zone.disabled ? [element] : [])\r\n );\r\n\r\n const disabledElements = Array.from(\r\n store.elementsMap.value.entries()\r\n ).flatMap(([element, data]) => (data.disabled ? [element] : []));\r\n\r\n const filteredZoneElement = elements.find((htmlElement) => {\r\n if (!store.visibleZones.value.has(htmlElement)) return false;\r\n\r\n const zone = store.zonesMap.value.get(htmlElement);\r\n if (!zone) return false;\r\n\r\n if (zone.disabled) return false;\r\n\r\n const isInsideDisabledZone = disabledZones.some(\r\n (disabledZone) =>\r\n htmlElement === disabledZone ||\r\n isDescendant(htmlElement as HTMLElement, disabledZone as HTMLElement)\r\n );\r\n\r\n if (isInsideDisabledZone) return false;\r\n\r\n if (\r\n activeDragNodes.some(\r\n (dragNode) =>\r\n dragNode &&\r\n (dragNode === zone.node ||\r\n isDescendant(zone.node as HTMLElement, dragNode as HTMLElement))\r\n )\r\n )\r\n return false;\r\n\r\n if (zone.groups.length) {\r\n const isCompatible = !Array.from(\r\n store.draggingElements.value.values()\r\n ).some((element) => {\r\n if (!element.groups.length) return false;\r\n return !element.groups.some((group) => zone.groups.includes(group));\r\n });\r\n if (!isCompatible) return false;\r\n }\r\n\r\n return true;\r\n });\r\n\r\n if (!filteredZoneElement) {\r\n return { element: null, zone: null };\r\n }\r\n\r\n const filteredElements = elements.filter((htmlElement) => {\r\n if (!store.visibleElements.value.has(htmlElement)) return false;\r\n if (!store.elementsMap.value.has(htmlElement)) return false;\r\n\r\n const element = store.elementsMap.value.get(htmlElement);\r\n if (element?.disabled) return false;\r\n\r\n const isInsideDisabledZone = disabledZones.some(\r\n (disabledZone) =>\r\n htmlElement === disabledZone ||\r\n isDescendant(htmlElement as HTMLElement, disabledZone as HTMLElement)\r\n );\r\n\r\n const isInsideDisabledElement = disabledElements.some(\r\n (disabledElement) =>\r\n htmlElement === disabledElement ||\r\n isDescendant(\r\n htmlElement as HTMLElement,\r\n disabledElement as HTMLElement\r\n )\r\n );\r\n\r\n if (isInsideDisabledZone || isInsideDisabledElement) return false;\r\n\r\n const isGroupsCompatible = !Array.from(\r\n store.draggingElements.value.values()\r\n ).some((element) => {\r\n if (!element.groups.length) return false;\r\n return !element.groups.some((group) =>\r\n store.elementsMap.value.get(htmlElement)?.groups.includes(group)\r\n );\r\n });\r\n\r\n return isGroupsCompatible;\r\n });\r\n\r\n const possibleElement = filteredElements.find((htmlElement) => {\r\n const isCompatible = !activeDragNodes.some(\r\n (dragNode) =>\r\n dragNode &&\r\n (dragNode === htmlElement ||\r\n isDescendant(htmlElement as HTMLElement, dragNode as HTMLElement) ||\r\n isDescendant(dragNode as HTMLElement, htmlElement as HTMLElement))\r\n );\r\n\r\n if (!isCompatible) return false;\r\n\r\n return (\r\n htmlElement === filteredZoneElement ||\r\n isDescendant(\r\n htmlElement as HTMLElement,\r\n filteredZoneElement as HTMLElement\r\n )\r\n );\r\n });\r\n\r\n return {\r\n element: possibleElement || null,\r\n zone: filteredZoneElement,\r\n };\r\n };\r\n\r\n const detectCollisions = options?.sensor?.setup || defaultCollisionDetection;\r\n\r\n const processCollisionResults = (results: ICollisionDetectionResult) => {\r\n const previousElement = store.hovered.element.value;\r\n const previousZone = store.hovered.zone.value;\r\n\r\n const newElement = results.element;\r\n const newZone = results.zone;\r\n\r\n store.hovered.element.value = newElement;\r\n store.hovered.zone.value = newZone;\r\n\r\n if (previousElement !== newElement) {\r\n if (previousElement) {\r\n store.elementsMap.value\r\n .get(previousElement)\r\n ?.events?.onLeave?.(store, createPayload(store));\r\n }\r\n\r\n if (newElement) {\r\n store.elementsMap.value\r\n .get(newElement)\r\n ?.events?.onHover?.(store, createPayload(store));\r\n }\r\n }\r\n\r\n if (previousZone !== newZone) {\r\n if (previousZone) {\r\n store.zonesMap.value\r\n .get(previousZone)\r\n ?.events?.onLeave?.(store, createPayload(store));\r\n }\r\n\r\n if (newZone) {\r\n store.zonesMap.value\r\n .get(newZone)\r\n ?.events?.onHover?.(store, createPayload(store));\r\n }\r\n }\r\n };\r\n\r\n const throttledDetectAndProcess = useThrottleFn(() => {\r\n const htmlElements = detectCollisions(store);\r\n const processedResults = validateCollisionResults(htmlElements);\r\n processCollisionResults(processedResults);\r\n }, options?.sensor?.throttle ?? 0);\r\n\r\n const animationLoop = () => {\r\n throttledDetectAndProcess();\r\n\r\n animationFrameId = requestAnimationFrame(animationLoop);\r\n };\r\n\r\n const startDetection = () => animationLoop();\r\n\r\n const stopDetection = () => {\r\n if (animationFrameId !== null) {\r\n onPointerEnd();\r\n onKeyboardEnd();\r\n cancelAnimationFrame(animationFrameId);\r\n animationFrameId = null;\r\n }\r\n };\r\n\r\n const activate = (event: PointerEvent | KeyboardEvent) => {\r\n store.draggingElements.value = getDraggingElements(elementRef.value);\r\n store.draggingElements.value.forEach((element) =>\r\n element.events.onStart?.(store, createPayload(store))\r\n );\r\n\r\n if (event instanceof PointerEvent) {\r\n onPointerStart(event);\r\n } else {\r\n onKeyboardStart(event);\r\n }\r\n\r\n startDetection();\r\n };\r\n\r\n const track = (event: PointerEvent | WheelEvent | KeyboardEvent) => {\r\n store.draggingElements.value.forEach((element) =>\r\n element.events.onMove?.(store, createPayload(store))\r\n );\r\n\r\n if (event instanceof KeyboardEvent) {\r\n onKeyboardMove();\r\n } else {\r\n onPointerMove(event);\r\n }\r\n };\r\n\r\n const deactivate = async (triggerEvents = true) => {\r\n if (store.hovered.zone.value) {\r\n const zone = store.zonesMap.value.get(store.hovered.zone.value);\r\n const result = zone?.events.onDrop?.(store, createPayload(store));\r\n\r\n if (result instanceof Promise) {\r\n try {\r\n store.isPending.value = true;\r\n\r\n const promiseResult = await result;\r\n\r\n if (promiseResult) {\r\n if (triggerEvents) store.selectedElements.value.clear();\r\n\r\n store.draggingElements.value.clear();\r\n\r\n store.hovered.zone.value = null;\r\n store.hovered.element.value = null;\r\n\r\n stopDetection();\r\n }\r\n\r\n return promiseResult;\r\n } catch {\r\n return false;\r\n } finally {\r\n store.isPending.value = false;\r\n }\r\n } else {\r\n if (triggerEvents) store.selectedElements.value.clear();\r\n\r\n store.draggingElements.value.clear();\r\n\r\n store.hovered.zone.value = null;\r\n store.hovered.element.value = null;\r\n\r\n stopDetection();\r\n }\r\n } else {\r\n store.draggingElements.value.forEach((element) =>\r\n element.events.onEnd?.(store, createPayload(store))\r\n );\r\n\r\n if (triggerEvents) store.selectedElements.value.clear();\r\n\r\n store.draggingElements.value.clear();\r\n\r\n store.hovered.zone.value = null;\r\n store.hovered.element.value = null;\r\n\r\n stopDetection();\r\n }\r\n };\r\n\r\n return {\r\n activate,\r\n track,\r\n deactivate,\r\n };\r\n};\r\n","import type { IUseDragOptions } from '../types';\r\nimport { Ref } from 'vue';\r\nimport { createGlobalState } from '@vueuse/core';\r\nimport { preventEvent } from '../utils/events';\r\nimport { useDnDStore } from '../composables/useDnDStore';\r\nimport { useSensor } from '../composables/useSensor';\r\n\r\nenum EKeyboardKey {\r\n ESCAPE = 'Escape',\r\n SPACE = 'Space',\r\n ENTER = 'Enter',\r\n W = 'KeyW',\r\n A = 'KeyA',\r\n S = 'KeyS',\r\n D = 'KeyD',\r\n CONTROL = 'ControlLeft',\r\n ALT = 'AltLeft',\r\n SHIFT = 'ShiftLeft',\r\n META = 'MetaLeft',\r\n}\r\n\r\nexport const useEventManager = createGlobalState(() => {\r\n let originalUserSelect = '';\r\n let originalTouchAction = '';\r\n let originalOverscrollBehavior = '';\r\n\r\n let currentMoveHandler: ((event: any) => void) | null = null;\r\n let currentEndHandler: (() => void) | null = null;\r\n let currentCancelHandler: (() => void) | null = null;\r\n let currentScrollHandler: ((event: WheelEvent) => void) | null = null;\r\n let currentKeyHandler: ((event: KeyboardEvent) => void) | null = null;\r\n\r\n const { activeContainer, isPending, elementsMap } = useDnDStore();\r\n\r\n const disableInteractions = () => {\r\n const body = document.body;\r\n\r\n originalUserSelect = body.style.userSelect;\r\n\r\n body.style.userSelect = 'none';\r\n\r\n window.addEventListener('contextmenu', preventEvent);\r\n window.addEventListener('selectstart', preventEvent);\r\n window.addEventListener('touchstart', preventEvent);\r\n window.addEventListener('touchmove', preventEvent);\r\n };\r\n\r\n const enableInteractions = () => {\r\n const body = document.body;\r\n\r\n body.style.userSelect = originalUserSelect;\r\n body.style.touchAction = originalTouchAction;\r\n body.style.overscrollBehavior = originalOverscrollBehavior;\r\n\r\n window.removeEventListener('contextmenu', preventEvent);\r\n window.removeEventListener('selectstart', preventEvent);\r\n window.removeEventListener('touchstart', preventEvent);\r\n window.removeEventListener('touchmove', preventEvent);\r\n };\r\n\r\n const clearAllListeners = () => {\r\n if (currentMoveHandler) {\r\n document.removeEventListener('pointermove', currentMoveHandler);\r\n currentMoveHandler = null;\r\n }\r\n\r\n if (currentEndHandler) {\r\n document.removeEventListener('pointerup', currentEndHandler);\r\n currentEndHandler = null;\r\n }\r\n\r\n if (currentCancelHandler) {\r\n currentCancelHandler = null;\r\n }\r\n\r\n if (currentScrollHandler) {\r\n document.removeEventListener('wheel', currentScrollHandler);\r\n currentScrollHandler = null;\r\n }\r\n\r\n if (currentKeyHandler) {\r\n document.removeEventListener('keydown', currentKeyHandler);\r\n document.removeEventListener('keypress', currentKeyHandler);\r\n document.removeEventListener('keyup', currentKeyHandler);\r\n currentKeyHandler = null;\r\n }\r\n };\r\n\r\n const handleDragStart = (\r\n event: PointerEvent | KeyboardEvent,\r\n elementRef: Ref<HTMLElement | null>,\r\n options?: IUseDragOptions\r\n ) => {\r\n if (!elementRef.value) return;\r\n if (isPending.value) return;\r\n\r\n const element = elementsMap.value.get(elementRef.value);\r\n if (element?.disabled) return;\r\n\r\n clearAllListeners();\r\n\r\n (event.target as HTMLElement).blur();\r\n\r\n if (options?.container) activeContainer.component.value = options.container;\r\n if (options?.containerProps) {\r\n activeContainer.props.value = options.containerProps;\r\n }\r\n\r\n const { activate, track, deactivate } = useSensor(elementRef, options);\r\n\r\n currentEndHandler = () => {\r\n deactivate(true).then((response) => {\r\n if (response === false) return;\r\n\r\n activeContainer.component.value = null;\r\n enableInteractions();\r\n deactivate(true);\r\n clearAllListeners();\r\n });\r\n };\r\n\r\n currentCancelHandler = () => {\r\n activeContainer.component.value = null;\r\n enableInteractions();\r\n deactivate(false);\r\n clearAllListeners();\r\n };\r\n\r\n currentMoveHandler = (event: PointerEvent | KeyboardEvent) => track(event);\r\n currentScrollHandler = (event: WheelEvent) => track(event);\r\n currentKeyHandler = (event: KeyboardEvent) => {\r\n if (event.type === 'keyup') {\r\n if (event.code === EKeyboardKey.ESCAPE) currentCancelHandler?.();\r\n if (event.code === EKeyboardKey.ENTER) currentEndHandler?.();\r\n }\r\n\r\n track(event);\r\n };\r\n\r\n disableInteractions();\r\n activate(event);\r\n\r\n document.addEventListener('pointermove', currentMoveHandler);\r\n document.addEventListener('pointerup', currentEndHandler);\r\n document.addEventListener('wheel', currentScrollHandler);\r\n document.addEventListener('keydown', currentKeyHandler);\r\n document.addEventListener('keypress', currentKeyHandler);\r\n document.addEventListener('keyup', currentKeyHandler);\r\n };\r\n\r\n return {\r\n handleDragStart,\r\n };\r\n});\r\n","import { onBeforeUnmount, onMounted } from 'vue';\r\n\r\nimport type { IUseDragOptions } from '../types';\r\nimport { useDnDStore } from './useDnDStore';\r\nimport { useElementManager } from '../managers/useElementManager';\r\nimport { useEventManager } from '../managers/useEventManager';\r\n\r\nexport const useDraggable = (options?: IUseDragOptions) => {\r\n const {\r\n id,\r\n elementRef,\r\n isDragging,\r\n isOvered,\r\n isAllowed,\r\n isLazyAllowed,\r\n registerElement,\r\n unregisterElement,\r\n } = useElementManager(options);\r\n\r\n const { pointerPosition } = useDnDStore();\r\n const { handleDragStart: start } = useEventManager();\r\n\r\n const handleDragStart = (event: PointerEvent | KeyboardEvent) =>\r\n start(event, elementRef, options);\r\n\r\n onMounted(registerElement);\r\n onBeforeUnmount(unregisterElement);\r\n\r\n return {\r\n pointerPosition,\r\n elementRef,\r\n isDragging,\r\n isOvered,\r\n isAllowed,\r\n isLazyAllowed,\r\n handleDragStart,\r\n id,\r\n };\r\n};\r\n","import { computed, ref } from 'vue';\r\n\r\nimport type { IUseDropOptions } from '../types';\r\nimport { useDnDStore } from '../composables/useDnDStore';\r\n\r\nexport const useZoneManager = (options?: IUseDropOptions) => {\r\n const {\r\n zonesMap,\r\n hovered,\r\n draggingElements,\r\n isDragging,\r\n handleDropZoneIntersection,\r\n } = useDnDStore();\r\n\r\n const elementRef = ref<HTMLElement | null>(null);\r\n\r\n const isOvered = computed<boolean>(\r\n () => hovered.zone.value === elementRef.value\r\n );\r\n\r\n const isAllowed = computed<boolean>(() => {\r\n if (!elementRef.value || !isDragging.value) return false;\r\n\r\n const currentZone = zonesMap.value.get(elementRef.value);\r\n if (!currentZone?.groups.length) return true;\r\n\r\n return !Array.from(draggingElements.value.values()).some((element) => {\r\n if (!element.groups.length) return false;\r\n return !element.groups.some((group) =>\r\n currentZone.groups.includes(group)\r\n );\r\n });\r\n });\r\n\r\n const isLazyAllowed = computed<boolean>(() => {\r\n if (!elementRef.value || !isDragging.value) return false;\r\n if (hovered.zone.value !== elementRef.value) return false;\r\n\r\n const currentZone = zonesMap.value.get(elementRef.value);\r\n if (!currentZone?.groups.length) return true;\r\n\r\n return !Array.from(draggingElements.value.values()).some((element) => {\r\n return !element.groups.some((group) =>\r\n currentZone.groups.includes(group)\r\n );\r\n });\r\n });\r\n\r\n const registerZone = () => {\r\n if (!elementRef.value) throw new Error('elementRef is not set');\r\n\r\n handleDropZoneIntersection('add', elementRef.value);\r\n\r\n zonesMap.value.set(elementRef.value, {\r\n node: elementRef.value,\r\n groups: options?.groups ?? [],\r\n events: options?.events ?? {},\r\n data: options?.data ?? undefined,\r\n disabled: (options?.disabled as boolean) ?? false,\r\n });\r\n\r\n elementRef.value.setAttribute('data-dnd-droppable', 'true');\r\n };\r\n\r\n const unregisterZone = () => {\r\n if (!elementRef.value) return;\r\n\r\n handleDropZoneIntersection('remove', elementRef.value);\r\n\r\n zonesMap.value.delete(elementRef.value);\r\n };\r\n\r\n return {\r\n elementRef,\r\n registerZone,\r\n unregisterZone,\r\n isOvered,\r\n isAllowed,\r\n isLazyAllowed,\r\n };\r\n};\r\n","import { onBeforeUnmount, onMounted } from 'vue';\r\n\r\nimport type { IUseDropOptions } from '../types';\r\nimport { useZoneManager } from '../managers/useZoneManager';\r\n\r\nexport const useDroppable = (options?: IUseDropOptions) => {\r\n const {\r\n elementRef,\r\n registerZone,\r\n unregisterZone,\r\n isOvered,\r\n isAllowed,\r\n isLazyAllowed,\r\n } = useZoneManager(options);\r\n\r\n // Register/unregister drop zone with store\r\n onMounted(registerZone);\r\n onBeforeUnmount(unregisterZone);\r\n\r\n return { elementRef, isOvered, isAllowed, isLazyAllowed };\r\n};\r\n","import { computed, type Ref } from 'vue';\r\nimport { useDnDStore } from './useDnDStore';\r\nimport { isDescendant } from '../utils/dom';\r\n\r\nexport const useSelection = (elementRef: Ref<HTMLElement | null>) => {\r\n const { selectedElements, elementsMap } = useDnDStore();\r\n\r\n const isSelected = computed<boolean>(() =>\r\n elementRef.value ? selectedElements.value.has(elementRef.value) : false\r\n );\r\n\r\n const isParentOfSelected = computed(() => {\r\n if (!elementRef.value) return false;\r\n\r\n for (const node of selectedElements.value) {\r\n if (\r\n node &&\r\n isDescendant(node as HTMLElement, elementRef.value as HTMLElement)\r\n ) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n\r\n const hasSelectedParent = computed(() => {\r\n if (!elementRef.value) return false;\r\n\r\n for (const node of selectedElements.value) {\r\n if (\r\n node &&\r\n isDescendant(elementRef.value as HTMLElement, node as HTMLElement)\r\n ) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n\r\n const handleUnselect = () => {\r\n if (!elementRef.value) return;\r\n selectedElements.value.delete(elementRef.value);\r\n };\r\n\r\n const handleSelect = () => {\r\n if (!elementRef.value) return;\r\n const element = elementsMap.value.get(elementRef.value);\r\n if (!element) return;\r\n\r\n if (isParentOfSelected.value) {\r\n // Удаляем все дочерние выбранные элементы\r\n for (const node of selectedElements.value) {\r\n if (\r\n node &&\r\n isDescendant(node as HTMLElement, elementRef.value as HTMLElement)\r\n ) {\r\n selectedElements.value.delete(node);\r\n }\r\n }\r\n }\r\n\r\n if (hasSelectedParent.value) {\r\n // Удаляем все родительские выбранные элементы\r\n for (const node of selectedElements.value) {\r\n if (\r\n node &&\r\n isDescendant(elementRef.value as HTMLElement, node as HTMLElement)\r\n ) {\r\n selectedElements.value.delete(node);\r\n }\r\n }\r\n }\r\n\r\n selectedElements.value.add(elementRef.value);\r\n };\r\n\r\n const handleToggleSelect = () => {\r\n if (!elementRef.value) return;\r\n\r\n selectedElements.value.has(elementRef.value)\r\n ? handleUnselect()\r\n : handleSelect();\r\n };\r\n\r\n return {\r\n handleUnselect,\r\n handleSelect,\r\n handleToggleSelect,\r\n isSelected,\r\n isParentOfSelected,\r\n };\r\n};\r\n"],"names":["_DnDOperations","__publicField","source","index","item","target","sourceIndex","targetIndex","sourceItem","targetItem","store","hoveredElement","hoveredZone","targetSource","_b","_a","_d","_c","firstElement","firstIndex","_e","sortDirection","a","b","element","_g","_f","_h","items","DnDOperations","useDnDStore","createGlobalState","isPending","shallowRef","draggingElements","ref","isDragging","computed","activeContainer","elementsMap","selectedElements","zonesMap","visibleZones","visibleElements","hasIntersectionObserver","elementObserver","entries","entry","zoneObserver","handleDragElementIntersection","action","handleDropZoneIntersection","pointerPosition","KeyW","KeyS","KeyA","KeyD","ctrl","shift","alt","meta","useMagicKeys","hovered","useDragContainer","options","elementRef","onMounted","onUnmounted","computedStyle","__props","props","overlay","DefaultOverlay","VueDndKitPlugin","app","DragOverlay","originalMount","rootContainer","instance","rootEl","overlayContainer","insertMethod","targetElement","vnode","createVNode","render","originalUnmount","checkCollision","boxA","boxB","getBoundingBox","rect","getCenter","box","getOffset","pointer","getDistance","pointA","pointB","dx","dy","getOverlapPercent","xOverlap","yOverlap","overlapArea","boxAArea","boxBArea","draggableDataName","preventEvent","event","createPayload","useElementManager","isDragStarted","isOvered","id","useId","disabled","isAllowed","currentElement","_","draggingElement","group","isLazyAllowed","isDescendant","container","defaultCollisionDetection","containerRect","containerCenter","pointerX","pointerY","shouldUseNormalPriority","activeDragNodes","allCollidingElements","node","elementCenter","isPointerInElement","overlapPercent","centerDistance","depth","parentNode","allCollidingZones","dragNode","zone","zoneCenter","useKeyboard","keyboard","moveStep","centerX","centerY","currentX","currentY","newX","newY","usePointer","pixel","percent","useSensor","onPointerStart","onPointerMove","onPointerEnd","onKeyboardStart","onKeyboardMove","onKeyboardEnd","animationFrameId","getDraggingElements","draggableElement","isDraggableInSelection","result","validateCollisionResults","htmlElements","elements","disabledZones","disabledElements","data","filteredZoneElement","htmlElement","disabledZone","isInsideDisabledZone","isInsideDisabledElement","disabledElement","detectCollisions","processCollisionResults","results","previousElement","previousZone","newElement","newZone","_i","_l","_k","_j","throttledDetectAndProcess","useThrottleFn","processedResults","animationLoop","startDetection","stopDetection","triggerEvents","promiseResult","useEventManager","originalUserSelect","originalTouchAction","originalOverscrollBehavior","currentMoveHandler","currentEndHandler","currentCancelHandler","currentScrollHandler","currentKeyHandler","disableInteractions","body","enableInteractions","clearAllListeners","activate","track","deactivate","response","useDraggable","registerElement","unregisterElement","start","handleDragStart","onBeforeUnmount","useZoneManager","currentZone","useDroppable","registerZone","unregisterZone","useSelection","isSelected","isParentOfSelected","hasSelectedParent","handleUnselect","handleSelect"],"mappings":"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"}
|