@vue-dnd-kit/core 0.0.23 → 0.0.25-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,7 @@
1
1
  # Vue Drag & Drop Library - Core Package
2
2
 
3
3
  [![Beta](https://img.shields.io/badge/status-beta-yellow.svg)](https://github.com/zizigy/vue-dnd-kit)
4
+ > ⚠️ **Warning**: This project is in active development (beta). The API may change between minor versions. Not recommended for production use until version 1.0.0.
4
5
 
5
6
  <p align="center">
6
7
  <a href="https://zizigy.github.io/vue-dnd-hooks/">
@@ -22,6 +23,16 @@
22
23
  Inspired by the popular <a href="https://dndkit.com/" target="_blank">React DnD Kit</a> library, adapted for Vue.js
23
24
  </p>
24
25
 
26
+ ## Project Status
27
+
28
+ This project is in active development. We're working toward a stable API, but until version 1.0.0, there may be breaking changes.
29
+
30
+ Roadmap:
31
+ - [x] Basic drag & drop functionality
32
+ - [x] Complete documentation
33
+ - [ ] Tests
34
+ - [ ] Stable API (version 1.0.0)
35
+
25
36
  ## Features
26
37
 
27
38
  ### Core Capabilities
@@ -31,14 +42,12 @@
31
42
  - Intuitive hooks-based approach
32
43
  - Clean and declarative syntax
33
44
  - Minimal boilerplate code
34
-
35
45
  - 🎨 **Full Customization**
36
46
 
37
47
  - Custom drag overlays
38
48
  - Flexible styling system
39
49
  - Animation support
40
50
  - Custom drag handles
41
-
42
51
  - 📱 **Advanced Input Support**
43
52
 
44
53
  - Touch devices support
@@ -53,7 +62,6 @@
53
62
  - Minimal re-renders
54
63
  - Efficient DOM updates
55
64
  - Memory leak prevention
56
-
57
65
  - 🔄 **Smart Auto-scrolling**
58
66
 
59
67
  - Smooth scroll animations
@@ -69,7 +77,6 @@
69
77
  - Type inference
70
78
  - IDE autocompletion
71
79
  - Type-safe events
72
-
73
80
  - 📐 **Layout Features**
74
81
 
75
82
  - Grid system support
@@ -85,14 +92,12 @@
85
92
  - Zone filtering
86
93
  - Nested groups
87
94
  - Dynamic group validation
88
-
89
95
  - 📊 **Rich Events System**
90
96
 
91
97
  - Comprehensive lifecycle events
92
98
  - Custom event handlers
93
99
  - Drag state tracking
94
100
  - Position coordinates
95
-
96
101
  - 🛡️ **Built-in Utilities**
97
102
 
98
103
  - Geometry calculations
@@ -195,7 +200,7 @@ pnpm install @vue-dnd-kit/core
195
200
  </style>
196
201
  ```
197
202
 
198
- ### Droppable.vue
203
+ ### Droppable.vue
199
204
 
200
205
  <sup>🧩 components/Droppable.vue</sup>
201
206
 
package/dist/index.d.ts CHANGED
@@ -1,9 +1,10 @@
1
+ import { default as DnDContext } from './components/DnDContext';
1
2
  import { default as DragOverlay } from './components/DragOverlay';
2
3
  import { useDnDStore } from './composables/useDnDStore';
3
4
  import { useDraggable } from './composables/useDraggable';
4
5
  import { useDroppable } from './composables/useDroppable';
5
6
  import { useSelection } from './composables/useSelection';
6
7
 
7
- export { DragOverlay, useDraggable, useDroppable, useDnDStore, useSelection };
8
+ export { DragOverlay, DnDContext, useDraggable, useDroppable, useDnDStore, useSelection, };
8
9
  export { getBoundingBox } from './utils/geometry';
9
10
  export type { IDnDStore, IActiveContainer, IBoundingBox, IDragElement, IDraggingElement, IDropZone, IPoint, IPointerPosition, IUseDragOptions, IUseDropOptions, } from './types';
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("vue");let G=!1,R;const L=()=>(G||(R=n.effectScope(!0).run(()=>({isDragging:n.computed(()=>R.draggingElements.value.length>0),activeContainer:{component:n.ref(null),ref:n.ref(null)},elements:n.ref([]),draggingElements:n.ref([]),selectedElements:n.ref([]),zones:n.ref([]),hovered:{zone:n.ref(null),element:n.ref(null)},pointerPosition:{current:n.ref(null),start:n.ref(null),offset:{percent:n.ref(null),pixel:n.ref(null)}}})),G=!0),R),W=()=>{const t=n.ref(null),{draggingElements:e,pointerPosition:u,isDragging:c,activeContainer:d}=L();return n.onMounted(()=>{d.ref=t}),n.onBeforeUnmount(()=>{d.ref.value=null}),{elementRef:t,draggingElements:e,pointerPosition:u,isDragging:c}},b=["innerHTML"],ee=n.defineComponent({__name:"DefaultOverlay",setup(t){const{elementRef:e,pointerPosition:u,isDragging:c,draggingElements:d}=W(),r=n.computed(()=>{var s,m,h,y;return{transform:`translate3d(${(((s=u.current.value)==null?void 0:s.x)??0)-(((m=u.offset.pixel.value)==null?void 0:m.x)??0)}px, ${(((h=u.current.value)==null?void 0:h.y)??0)-(((y=u.offset.pixel.value)==null?void 0:y.y)??0)}px, 0)`,zIndex:1e3,position:"fixed",top:0,left:0,transition:"0.3s cubic-bezier(0.165, 0.84, 0.44, 1)"}});return(s,m)=>n.unref(c)?(n.openBlock(),n.createElementBlock("div",{key:0,ref_key:"elementRef",ref:e,style:n.normalizeStyle(r.value)},[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(d),(h,y)=>{var i,E;return n.openBlock(),n.createElementBlock("div",{key:y,innerHTML:h.initialHTML,style:n.normalizeStyle({width:`${(i=h.initialRect)==null?void 0:i.width}px`,height:`${(E=h.initialRect)==null?void 0:E.height}px`})},null,12,b)}),128))],4)):n.createCommentVNode("",!0)}}),te=n.defineComponent({__name:"DragOverlay",setup(t){const{activeContainer:e}=L(),u=n.computed(()=>e.component.value??ee);return(c,d)=>(n.openBlock(),n.createBlock(n.resolveDynamicComponent(u.value)))}}),ne="data-dnd-draggable",re=t=>{const{elements:e,draggingElements:u,hovered:c,selectedElements:d,isDragging:r}=L(),s=n.ref(null),m=n.computed(()=>{var p;return((p=c.element.value)==null?void 0:p.node)===s.value}),h=n.computed(()=>u.value.some(p=>p.node===s.value)),y=n.computed(()=>{if(!s.value||!r.value)return!1;const p=e.value.find(D=>D.node===s.value);return p!=null&&p.groups.length?!u.value.some(D=>D.groups.length?!D.groups.some(o=>p.groups.includes(o)):!1):!0});return{elementRef:s,registerElement:()=>{if(!s.value)throw new Error("ElementRef is not set");e.value.push({node:s.value,groups:(t==null?void 0:t.groups)??[],layer:(t==null?void 0:t.layer)??null,defaultLayer:(t==null?void 0:t.layer)??null,events:(t==null?void 0:t.events)??{},data:(t==null?void 0:t.data)??void 0}),s.value.setAttribute(ne,"true")},unregisterElement:()=>{const p=e.value.findIndex(o=>o.node===s.value);p!==-1&&e.value.splice(p,1);const D=d.value.findIndex(o=>o.node===s.value);D!==-1&&d.value.splice(D,1)},isDragging:h,isOvered:m,isAllowed:y}},oe=()=>{let t="",e="",u="";const c=()=>{const s=document.body;t=s.style.userSelect,e=s.style.touchAction,u=s.style.overscrollBehavior,s.style.userSelect="none",s.style.touchAction="none",s.style.overscrollBehavior="none",window.addEventListener("contextmenu",r),window.addEventListener("selectstart",r),window.addEventListener("touchstart",r),window.addEventListener("touchmove",r)},d=()=>{const s=document.body;s.style.userSelect=t,s.style.touchAction=e,s.style.overscrollBehavior=u,window.removeEventListener("contextmenu",r),window.removeEventListener("selectstart",r),window.removeEventListener("touchstart",r),window.removeEventListener("touchmove",r)},r=s=>s.preventDefault();return{disableInteractions:c,enableInteractions:d}},J=(t,e)=>t.x<e.x+e.width&&t.x+t.width>e.x&&t.y<e.y+e.height&&t.y+t.height>e.y,k=t=>{if(!t)return{x:0,y:0,width:0,height:0,bottom:0,left:0,right:0,top:0};const e=t.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}},U=t=>({x:t.x+t.width/2,y:t.y+t.height/2}),le=(t,e)=>{const u=k(t);return{pixel:{x:e.x-u.x,y:e.y-u.y},percent:{x:(e.x-u.x)/u.width*100,y:(e.y-u.y)/u.height*100}}},K=(t,e)=>{const u=e.x-t.x,c=e.y-t.y;return Math.sqrt(u*u+c*c)},M=(t,e)=>t?e.contains(t):!1,ie=t=>{const e=L();return{onPointerStart:r=>{e.pointerPosition.start.value={x:r.clientX,y:r.clientY},e.pointerPosition.current.value={x:r.clientX,y:r.clientY};const{pixel:s,percent:m}=le(t.value,{x:r.clientX,y:r.clientY});e.pointerPosition.offset.pixel.value=s,e.pointerPosition.offset.percent.value=m},onPointerMove:r=>{e.pointerPosition.current.value={x:r.clientX,y:r.clientY}},onPointerEnd:()=>{e.pointerPosition.current.value=null,e.pointerPosition.start.value=null,e.pointerPosition.offset.pixel.value=null,e.pointerPosition.offset.percent.value=null}}},se=t=>{const e=L(),{onPointerStart:u,onPointerMove:c,onPointerEnd:d}=ie(t);let r=null;const s=o=>{var v,x;const g=e.selectedElements.value.some(P=>P.node===o);if(e.selectedElements.value.length&&g)return e.selectedElements.value.map(P=>{var C,H;return{...P,initialHTML:((C=P.node)==null?void 0:C.outerHTML)??"",initialRect:(H=P.node)==null?void 0:H.getBoundingClientRect()}});e.selectedElements.value=[];const f=e.elements.value.find(P=>P.node===o);return f?[{...f,initialHTML:((v=f.node)==null?void 0:v.outerHTML)??"",initialRect:(x=f.node)==null?void 0:x.getBoundingClientRect()}]:[]},m=(o,g)=>{const f=Math.max(0,Math.min(o.x+o.width,g.x+g.width)-Math.max(o.x,g.x)),v=Math.max(0,Math.min(o.y+o.height,g.y+g.height)-Math.max(o.y,g.y)),x=f*v,P=o.width*o.height,C=g.width*g.height;return(x/P*100+x/C*100)/2},h=()=>{var Z,A,X,Y,$,F,q,N,j,V;const o=k(e.activeContainer.ref.value),g=U(o),f=((Z=e.pointerPosition.current.value)==null?void 0:Z.x)??0,v=((A=e.pointerPosition.current.value)==null?void 0:A.y)??0,P=!(o&&f>=o.x&&f<=o.x+o.width&&v>=o.y&&v<=o.y+o.height),C=e.draggingElements.value.map(l=>l.node),H=e.elements.value.filter(l=>{if(!l.node||C.some(w=>w&&M(l.node,w))||l.groups.length&&!!e.draggingElements.value.some(S=>S.groups.length?!S.groups.some(I=>l.groups.includes(I)):!1))return!1;const a=k(l.node);return a&&o&&J(a,o)}).map(l=>{const a=k(l.node),w=U(a),S=f>=a.x&&f<=a.x+a.width&&v>=a.y&&v<=a.y+a.height,I=m(a,o),T=K(g,w),B=e.elements.value.filter(_=>_!==l&&_.node&&l.node&&M(l.node,_.node)).length;return{element:l,isPointerInElement:S,overlapPercent:I,depth:B,centerDistance:T}}).sort((l,a)=>{if(!P){if(l.isPointerInElement&&a.isPointerInElement)return a.depth-l.depth;if(l.isPointerInElement!==a.isPointerInElement)return l.isPointerInElement?-1:1}return Math.abs(l.overlapPercent-a.overlapPercent)<=1?l.centerDistance-a.centerDistance:a.overlapPercent-l.overlapPercent}),Q=e.zones.value.filter(l=>{if(!l.node||C.some(w=>w&&M(l.node,w))||l.groups.length&&!!e.draggingElements.value.some(S=>S.groups.length?!S.groups.some(I=>l.groups.includes(I)):!1))return!1;const a=k(l.node);return a&&o&&J(a,o)}).map(l=>{const a=k(l.node),w=U(a),S=f>=a.x&&f<=a.x+a.width&&v>=a.y&&v<=a.y+a.height,I=m(a,o),T=K(g,w),B=e.zones.value.filter(_=>_!==l&&_.node&&l.node&&M(l.node,_.node)).length;return{zone:l,isPointerInElement:S,overlapPercent:I,depth:B,centerDistance:T}}).sort((l,a)=>{if(!P){if(l.isPointerInElement&&a.isPointerInElement)return a.depth-l.depth;if(l.isPointerInElement!==a.isPointerInElement)return l.isPointerInElement?-1:1}return Math.abs(l.overlapPercent-a.overlapPercent)<=1?l.centerDistance-a.centerDistance:a.overlapPercent-l.overlapPercent}),O=e.hovered.element.value,z=e.hovered.zone.value;e.hovered.element.value=((X=H[0])==null?void 0:X.element)??null,e.hovered.zone.value=((Y=Q[0])==null?void 0:Y.zone)??null,e.hovered.element.value!==O&&(($=O==null?void 0:O.events)!=null&&$.onLeave&&O.events.onLeave(e),(q=(F=e.hovered.element.value)==null?void 0:F.events)!=null&&q.onHover&&e.hovered.element.value.events.onHover(e)),e.hovered.zone.value!==z&&((N=z==null?void 0:z.events)!=null&&N.onLeave&&z.events.onLeave(e),(V=(j=e.hovered.zone.value)==null?void 0:j.events)!=null&&V.onHover&&e.hovered.zone.value.events.onHover(e)),r=requestAnimationFrame(h)},y=()=>{h()},i=()=>{r!==null&&(cancelAnimationFrame(r),r=null)};return{activate:o=>{e.draggingElements.value=s(t.value),u(o),y()},track:o=>{c(o)},deactivate:()=>{var o,g;d(),e.hovered.zone.value?(g=(o=e.hovered.zone.value.events).onDrop)==null||g.call(o,e):e.draggingElements.value.forEach(f=>{var v,x;return(x=(v=f.events).onEnd)==null?void 0:x.call(v,e)}),e.draggingElements.value=[],e.selectedElements.value=[],e.hovered.zone.value=null,e.hovered.element.value=null,i()}}},ae=t=>{const{elementRef:e,registerElement:u,unregisterElement:c,isDragging:d,isOvered:r,isAllowed:s}=re(t),{disableInteractions:m,enableInteractions:h}=oe(),y=L(),{activate:i,track:E,deactivate:p}=se(e),D=v=>{t!=null&&t.container&&(y.activeContainer.component.value=n.markRaw(t.container)),m(),i(v),document.addEventListener("pointermove",o),document.addEventListener("pointerup",f),document.addEventListener("wheel",g)},o=v=>{E(v)},g=v=>{E(v)},f=()=>{y.activeContainer.component.value=null,h(),p(),document.removeEventListener("pointermove",o),document.removeEventListener("pointerup",f),document.removeEventListener("wheel",g)};return n.onMounted(u),n.onBeforeUnmount(c),{pointerPosition:y.pointerPosition,elementRef:e,isDragging:d,isOvered:r,isAllowed:s,handleDragStart:D}},ue=t=>{const{zones:e,hovered:u,draggingElements:c,isDragging:d}=L(),r=n.ref(null),s=n.computed(()=>{var i;return((i=u.zone.value)==null?void 0:i.node)===r.value}),m=n.computed(()=>{if(!r.value||!d.value)return!1;const i=e.value.find(E=>E.node===r.value);return i!=null&&i.groups.length?!c.value.some(E=>E.groups.length?!E.groups.some(p=>i.groups.includes(p)):!1):!0});return{elementRef:r,registerZone:()=>{if(!r.value)throw new Error("elementRef is not set");e.value.push({node:r.value,groups:(t==null?void 0:t.groups)??[],events:(t==null?void 0:t.events)??{},data:(t==null?void 0:t.data)??void 0}),r.value.setAttribute("data-dnd-droppable","true")},unregisterZone:()=>{if(!r.value)throw new Error("elementRef is not set");const i=e.value.findIndex(E=>E.node===r.value);i!==-1&&e.value.splice(i,1)},isOvered:s,isAllowed:m}},ce=t=>{const{elementRef:e,registerZone:u,unregisterZone:c,isOvered:d,isAllowed:r}=ue(t);return n.onMounted(u),n.onBeforeUnmount(c),{elementRef:e,isOvered:d,isAllowed:r}},de=t=>{const{selectedElements:e,elements:u}=L(),c=n.computed(()=>u.value.find(i=>i.node===t.value)),d=n.computed(()=>e.value.some(i=>i.node===t.value)),r=n.computed(()=>t.value?e.value.some(i=>i.node&&M(i.node,t.value)):!1),s=n.computed(()=>t.value?e.value.some(i=>i.node&&M(t.value,i.node)):!1),m=()=>{c.value&&(e.value=e.value.filter(i=>i.node!==t.value))},h=()=>{c.value&&(r.value&&(e.value=e.value.filter(i=>i.node&&!M(i.node,t.value))),s.value&&(e.value=e.value.filter(i=>i.node&&!M(t.value,i.node))),e.value.push(c.value))};return{handleUnselect:m,handleSelect:h,handleToggleSelect:()=>{c.value&&(e.value.some(i=>i.node===t.value)?m():h())},isSelected:d,isParentOfSelected:r}};exports.DragOverlay=te;exports.getBoundingBox=k;exports.useDnDStore=L;exports.useDraggable=ae;exports.useDroppable=ce;exports.useSelection=de;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("vue");let G=!1,T;const S=()=>(G||(T=n.effectScope(!0).run(()=>({isDragging:n.computed(()=>T.draggingElements.value.length>0),activeContainer:{component:n.ref(null),ref:n.ref(null)},elements:n.ref([]),draggingElements:n.ref([]),selectedElements:n.ref([]),zones:n.ref([]),hovered:{zone:n.ref(null),element:n.ref(null)},pointerPosition:{current:n.ref(null),start:n.ref(null),offset:{percent:n.ref(null),pixel:n.ref(null)}}})),G=!0),T),b=()=>{const t=n.ref(null),{draggingElements:e,pointerPosition:s,isDragging:c,activeContainer:d}=S();return n.onMounted(()=>{d.ref=t}),n.onBeforeUnmount(()=>{d.ref.value=null}),{elementRef:t,draggingElements:e,pointerPosition:s,isDragging:c}},ee=["innerHTML"],te=n.defineComponent({__name:"DefaultOverlay",setup(t){const{elementRef:e,pointerPosition:s,isDragging:c,draggingElements:d}=b(),r=n.computed(()=>{var a,m,h,y;return{transform:`translate3d(${(((a=s.current.value)==null?void 0:a.x)??0)-(((m=s.offset.pixel.value)==null?void 0:m.x)??0)}px, ${(((h=s.current.value)==null?void 0:h.y)??0)-(((y=s.offset.pixel.value)==null?void 0:y.y)??0)}px, 0)`,zIndex:1e3,position:"fixed",top:0,left:0,transition:"0.3s cubic-bezier(0.165, 0.84, 0.44, 1)"}});return(a,m)=>n.unref(c)?(n.openBlock(),n.createElementBlock("div",{key:0,ref_key:"elementRef",ref:e,style:n.normalizeStyle(r.value)},[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(d),(h,y)=>{var i,E;return n.openBlock(),n.createElementBlock("div",{key:y,innerHTML:h.initialHTML,style:n.normalizeStyle({width:`${(i=h.initialRect)==null?void 0:i.width}px`,height:`${(E=h.initialRect)==null?void 0:E.height}px`})},null,12,ee)}),128))],4)):n.createCommentVNode("",!0)}}),Q=n.defineComponent({__name:"DragOverlay",setup(t){const{activeContainer:e}=S(),s=n.computed(()=>e.component.value??te);return(c,d)=>(n.openBlock(),n.createBlock(n.resolveDynamicComponent(s.value)))}}),ne=n.defineComponent({__name:"DnDContext",setup(t){const e=n.ref(null);return(s,c)=>(n.openBlock(),n.createElementBlock("div",{ref_key:"contextRef",ref:e},[n.renderSlot(s.$slots,"default"),n.createVNode(Q)],512))}}),re="data-dnd-draggable",oe=t=>{const{elements:e,draggingElements:s,hovered:c,selectedElements:d,isDragging:r}=S(),a=n.ref(null),m=n.computed(()=>{var p;return((p=c.element.value)==null?void 0:p.node)===a.value}),h=n.computed(()=>s.value.some(p=>p.node===a.value)),y=n.computed(()=>{if(!a.value||!r.value)return!1;const p=e.value.find(D=>D.node===a.value);return p!=null&&p.groups.length?!s.value.some(D=>D.groups.length?!D.groups.some(o=>p.groups.includes(o)):!1):!0});return{elementRef:a,registerElement:()=>{if(!a.value)throw new Error("ElementRef is not set");e.value.push({node:a.value,groups:(t==null?void 0:t.groups)??[],layer:(t==null?void 0:t.layer)??null,defaultLayer:(t==null?void 0:t.layer)??null,events:(t==null?void 0:t.events)??{},data:(t==null?void 0:t.data)??void 0}),a.value.setAttribute(re,"true")},unregisterElement:()=>{const p=e.value.findIndex(o=>o.node===a.value);p!==-1&&e.value.splice(p,1);const D=d.value.findIndex(o=>o.node===a.value);D!==-1&&d.value.splice(D,1)},isDragging:h,isOvered:m,isAllowed:y}},le=()=>{let t="",e="",s="";const c=()=>{const a=document.body;t=a.style.userSelect,e=a.style.touchAction,s=a.style.overscrollBehavior,a.style.userSelect="none",a.style.touchAction="none",a.style.overscrollBehavior="none",window.addEventListener("contextmenu",r),window.addEventListener("selectstart",r),window.addEventListener("touchstart",r),window.addEventListener("touchmove",r)},d=()=>{const a=document.body;a.style.userSelect=t,a.style.touchAction=e,a.style.overscrollBehavior=s,window.removeEventListener("contextmenu",r),window.removeEventListener("selectstart",r),window.removeEventListener("touchstart",r),window.removeEventListener("touchmove",r)},r=a=>a.preventDefault();return{disableInteractions:c,enableInteractions:d}},J=(t,e)=>t.x<e.x+e.width&&t.x+t.width>e.x&&t.y<e.y+e.height&&t.y+t.height>e.y,k=t=>{if(!t)return{x:0,y:0,width:0,height:0,bottom:0,left:0,right:0,top:0};const e=t.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}},$=t=>({x:t.x+t.width/2,y:t.y+t.height/2}),ie=(t,e)=>{const s=k(t);return{pixel:{x:e.x-s.x,y:e.y-s.y},percent:{x:(e.x-s.x)/s.width*100,y:(e.y-s.y)/s.height*100}}},K=(t,e)=>{const s=e.x-t.x,c=e.y-t.y;return Math.sqrt(s*s+c*c)},L=(t,e)=>t?e.contains(t):!1,se=t=>{const e=S();return{onPointerStart:r=>{e.pointerPosition.start.value={x:r.clientX,y:r.clientY},e.pointerPosition.current.value={x:r.clientX,y:r.clientY};const{pixel:a,percent:m}=ie(t.value,{x:r.clientX,y:r.clientY});e.pointerPosition.offset.pixel.value=a,e.pointerPosition.offset.percent.value=m},onPointerMove:r=>{e.pointerPosition.current.value={x:r.clientX,y:r.clientY}},onPointerEnd:()=>{e.pointerPosition.current.value=null,e.pointerPosition.start.value=null,e.pointerPosition.offset.pixel.value=null,e.pointerPosition.offset.percent.value=null}}},ae=t=>{const e=S(),{onPointerStart:s,onPointerMove:c,onPointerEnd:d}=se(t);let r=null;const a=o=>{var v,x;const g=e.selectedElements.value.some(P=>P.node===o);if(e.selectedElements.value.length&&g)return e.selectedElements.value.map(P=>{var M,B;return{...P,initialHTML:((M=P.node)==null?void 0:M.outerHTML)??"",initialRect:(B=P.node)==null?void 0:B.getBoundingClientRect()}});e.selectedElements.value=[];const f=e.elements.value.find(P=>P.node===o);return f?[{...f,initialHTML:((v=f.node)==null?void 0:v.outerHTML)??"",initialRect:(x=f.node)==null?void 0:x.getBoundingClientRect()}]:[]},m=(o,g)=>{const f=Math.max(0,Math.min(o.x+o.width,g.x+g.width)-Math.max(o.x,g.x)),v=Math.max(0,Math.min(o.y+o.height,g.y+g.height)-Math.max(o.y,g.y)),x=f*v,P=o.width*o.height,M=g.width*g.height;return(x/P*100+x/M*100)/2},h=()=>{var U,Z,A,X,Y,F,q,N,V,j;const o=k(e.activeContainer.ref.value),g=$(o),f=((U=e.pointerPosition.current.value)==null?void 0:U.x)??0,v=((Z=e.pointerPosition.current.value)==null?void 0:Z.y)??0,P=!(o&&f>=o.x&&f<=o.x+o.width&&v>=o.y&&v<=o.y+o.height),M=e.draggingElements.value.map(l=>l.node),B=e.elements.value.filter(l=>{if(!l.node||M.some(w=>w&&L(l.node,w))||l.groups.length&&!!e.draggingElements.value.some(C=>C.groups.length?!C.groups.some(_=>l.groups.includes(_)):!1))return!1;const u=k(l.node);return u&&o&&J(u,o)}).map(l=>{const u=k(l.node),w=$(u),C=f>=u.x&&f<=u.x+u.width&&v>=u.y&&v<=u.y+u.height,_=m(u,o),H=K(g,w),R=e.elements.value.filter(I=>I!==l&&I.node&&l.node&&L(l.node,I.node)).length;return{element:l,isPointerInElement:C,overlapPercent:_,depth:R,centerDistance:H}}).sort((l,u)=>{if(!P){if(l.isPointerInElement&&u.isPointerInElement)return u.depth-l.depth;if(l.isPointerInElement!==u.isPointerInElement)return l.isPointerInElement?-1:1}return Math.abs(l.overlapPercent-u.overlapPercent)<=1?l.centerDistance-u.centerDistance:u.overlapPercent-l.overlapPercent}),W=e.zones.value.filter(l=>{if(!l.node||M.some(w=>w&&L(l.node,w))||l.groups.length&&!!e.draggingElements.value.some(C=>C.groups.length?!C.groups.some(_=>l.groups.includes(_)):!1))return!1;const u=k(l.node);return u&&o&&J(u,o)}).map(l=>{const u=k(l.node),w=$(u),C=f>=u.x&&f<=u.x+u.width&&v>=u.y&&v<=u.y+u.height,_=m(u,o),H=K(g,w),R=e.zones.value.filter(I=>I!==l&&I.node&&l.node&&L(l.node,I.node)).length;return{zone:l,isPointerInElement:C,overlapPercent:_,depth:R,centerDistance:H}}).sort((l,u)=>{if(!P){if(l.isPointerInElement&&u.isPointerInElement)return u.depth-l.depth;if(l.isPointerInElement!==u.isPointerInElement)return l.isPointerInElement?-1:1}return Math.abs(l.overlapPercent-u.overlapPercent)<=1?l.centerDistance-u.centerDistance:u.overlapPercent-l.overlapPercent}),O=e.hovered.element.value,z=e.hovered.zone.value;e.hovered.element.value=((A=B[0])==null?void 0:A.element)??null,e.hovered.zone.value=((X=W[0])==null?void 0:X.zone)??null,e.hovered.element.value!==O&&((Y=O==null?void 0:O.events)!=null&&Y.onLeave&&O.events.onLeave(e),(q=(F=e.hovered.element.value)==null?void 0:F.events)!=null&&q.onHover&&e.hovered.element.value.events.onHover(e)),e.hovered.zone.value!==z&&((N=z==null?void 0:z.events)!=null&&N.onLeave&&z.events.onLeave(e),(j=(V=e.hovered.zone.value)==null?void 0:V.events)!=null&&j.onHover&&e.hovered.zone.value.events.onHover(e)),r=requestAnimationFrame(h)},y=()=>{h()},i=()=>{r!==null&&(cancelAnimationFrame(r),r=null)};return{activate:o=>{e.draggingElements.value=a(t.value),s(o),y()},track:o=>{c(o)},deactivate:()=>{var o,g;d(),e.hovered.zone.value?(g=(o=e.hovered.zone.value.events).onDrop)==null||g.call(o,e):e.draggingElements.value.forEach(f=>{var v,x;return(x=(v=f.events).onEnd)==null?void 0:x.call(v,e)}),e.draggingElements.value=[],e.selectedElements.value=[],e.hovered.zone.value=null,e.hovered.element.value=null,i()}}},ue=t=>{const{elementRef:e,registerElement:s,unregisterElement:c,isDragging:d,isOvered:r,isAllowed:a}=oe(t),{disableInteractions:m,enableInteractions:h}=le(),y=S(),{activate:i,track:E,deactivate:p}=ae(e),D=v=>{t!=null&&t.container&&(y.activeContainer.component.value=n.markRaw(t.container)),m(),i(v),document.addEventListener("pointermove",o),document.addEventListener("pointerup",f),document.addEventListener("wheel",g)},o=v=>{E(v)},g=v=>{E(v)},f=()=>{y.activeContainer.component.value=null,h(),p(),document.removeEventListener("pointermove",o),document.removeEventListener("pointerup",f),document.removeEventListener("wheel",g)};return n.onMounted(s),n.onBeforeUnmount(c),{pointerPosition:y.pointerPosition,elementRef:e,isDragging:d,isOvered:r,isAllowed:a,handleDragStart:D}},ce=t=>{const{zones:e,hovered:s,draggingElements:c,isDragging:d}=S(),r=n.ref(null),a=n.computed(()=>{var i;return((i=s.zone.value)==null?void 0:i.node)===r.value}),m=n.computed(()=>{if(!r.value||!d.value)return!1;const i=e.value.find(E=>E.node===r.value);return i!=null&&i.groups.length?!c.value.some(E=>E.groups.length?!E.groups.some(p=>i.groups.includes(p)):!1):!0});return{elementRef:r,registerZone:()=>{if(!r.value)throw new Error("elementRef is not set");e.value.push({node:r.value,groups:(t==null?void 0:t.groups)??[],events:(t==null?void 0:t.events)??{},data:(t==null?void 0:t.data)??void 0}),r.value.setAttribute("data-dnd-droppable","true")},unregisterZone:()=>{if(!r.value)throw new Error("elementRef is not set");const i=e.value.findIndex(E=>E.node===r.value);i!==-1&&e.value.splice(i,1)},isOvered:a,isAllowed:m}},de=t=>{const{elementRef:e,registerZone:s,unregisterZone:c,isOvered:d,isAllowed:r}=ce(t);return n.onMounted(s),n.onBeforeUnmount(c),{elementRef:e,isOvered:d,isAllowed:r}},ve=t=>{const{selectedElements:e,elements:s}=S(),c=n.computed(()=>s.value.find(i=>i.node===t.value)),d=n.computed(()=>e.value.some(i=>i.node===t.value)),r=n.computed(()=>t.value?e.value.some(i=>i.node&&L(i.node,t.value)):!1),a=n.computed(()=>t.value?e.value.some(i=>i.node&&L(t.value,i.node)):!1),m=()=>{c.value&&(e.value=e.value.filter(i=>i.node!==t.value))},h=()=>{c.value&&(r.value&&(e.value=e.value.filter(i=>i.node&&!L(i.node,t.value))),a.value&&(e.value=e.value.filter(i=>i.node&&!L(t.value,i.node))),e.value.push(c.value))};return{handleUnselect:m,handleSelect:h,handleToggleSelect:()=>{c.value&&(e.value.some(i=>i.node===t.value)?m():h())},isSelected:d,isParentOfSelected:r}};exports.DnDContext=ne;exports.DragOverlay=Q;exports.getBoundingBox=k;exports.useDnDStore=S;exports.useDraggable=ue;exports.useDroppable=de;exports.useSelection=ve;
@@ -1,9 +1,9 @@
1
- import { effectScope as ie, ref as p, computed as w, onMounted as F, onBeforeUnmount as U, defineComponent as oe, createElementBlock as X, createCommentVNode as se, unref as b, openBlock as R, normalizeStyle as ee, Fragment as ae, renderList as ue, createBlock as ce, resolveDynamicComponent as ve, markRaw as de } from "vue";
2
- let te = !1, Y;
3
- const M = () => (te || (Y = ie(!0).run(() => ({
1
+ import { effectScope as ie, ref as p, computed as w, onMounted as F, onBeforeUnmount as U, defineComponent as N, createElementBlock as $, createCommentVNode as se, unref as ee, openBlock as R, normalizeStyle as te, Fragment as ae, renderList as ue, createBlock as ce, resolveDynamicComponent as ve, renderSlot as de, createVNode as ge, markRaw as he } from "vue";
2
+ let ne = !1, X;
3
+ const I = () => (ne || (X = ie(!0).run(() => ({
4
4
  /** Whether any drag operation is currently active */
5
5
  isDragging: w(
6
- () => Y.draggingElements.value.length > 0
6
+ () => X.draggingElements.value.length > 0
7
7
  ),
8
8
  /** Active container where dragging occurs */
9
9
  activeContainer: {
@@ -41,8 +41,8 @@ const M = () => (te || (Y = ie(!0).run(() => ({
41
41
  pixel: p(null)
42
42
  }
43
43
  }
44
- })), te = !0), Y), ge = () => {
45
- const t = p(null), { draggingElements: e, pointerPosition: a, isDragging: u, activeContainer: c } = M();
44
+ })), ne = !0), X), fe = () => {
45
+ const t = p(null), { draggingElements: e, pointerPosition: i, isDragging: u, activeContainer: c } = I();
46
46
  return F(() => {
47
47
  c.ref = t;
48
48
  }), U(() => {
@@ -50,16 +50,16 @@ const M = () => (te || (Y = ie(!0).run(() => ({
50
50
  }), {
51
51
  elementRef: t,
52
52
  draggingElements: e,
53
- pointerPosition: a,
53
+ pointerPosition: i,
54
54
  isDragging: u
55
55
  };
56
- }, he = ["innerHTML"], fe = /* @__PURE__ */ oe({
56
+ }, me = ["innerHTML"], pe = /* @__PURE__ */ N({
57
57
  __name: "DefaultOverlay",
58
58
  setup(t) {
59
- const { elementRef: e, pointerPosition: a, isDragging: u, draggingElements: c } = ge(), n = w(() => {
60
- var i, h, f, y;
59
+ const { elementRef: e, pointerPosition: i, isDragging: u, draggingElements: c } = fe(), n = w(() => {
60
+ var s, h, f, y;
61
61
  return {
62
- transform: `translate3d(${(((i = a.current.value) == null ? void 0 : i.x) ?? 0) - (((h = a.offset.pixel.value) == null ? void 0 : h.x) ?? 0)}px, ${(((f = a.current.value) == null ? void 0 : f.y) ?? 0) - (((y = a.offset.pixel.value) == null ? void 0 : y.y) ?? 0)}px, 0)`,
62
+ transform: `translate3d(${(((s = i.current.value) == null ? void 0 : s.x) ?? 0) - (((h = i.offset.pixel.value) == null ? void 0 : h.x) ?? 0)}px, ${(((f = i.current.value) == null ? void 0 : f.y) ?? 0) - (((y = i.offset.pixel.value) == null ? void 0 : y.y) ?? 0)}px, 0)`,
63
63
  zIndex: 1e3,
64
64
  position: "fixed",
65
65
  top: 0,
@@ -67,76 +67,88 @@ const M = () => (te || (Y = ie(!0).run(() => ({
67
67
  transition: "0.3s cubic-bezier(0.165, 0.84, 0.44, 1)"
68
68
  };
69
69
  });
70
- return (i, h) => b(u) ? (R(), X("div", {
70
+ return (s, h) => ee(u) ? (R(), $("div", {
71
71
  key: 0,
72
72
  ref_key: "elementRef",
73
73
  ref: e,
74
- style: ee(n.value)
74
+ style: te(n.value)
75
75
  }, [
76
- (R(!0), X(ae, null, ue(b(c), (f, y) => {
76
+ (R(!0), $(ae, null, ue(ee(c), (f, y) => {
77
77
  var l, E;
78
- return R(), X("div", {
78
+ return R(), $("div", {
79
79
  key: y,
80
80
  innerHTML: f.initialHTML,
81
- style: ee({
81
+ style: te({
82
82
  width: `${(l = f.initialRect) == null ? void 0 : l.width}px`,
83
83
  height: `${(E = f.initialRect) == null ? void 0 : E.height}px`
84
84
  })
85
- }, null, 12, he);
85
+ }, null, 12, me);
86
86
  }), 128))
87
87
  ], 4)) : se("", !0);
88
88
  }
89
- }), Le = /* @__PURE__ */ oe({
89
+ }), ye = /* @__PURE__ */ N({
90
90
  __name: "DragOverlay",
91
91
  setup(t) {
92
- const { activeContainer: e } = M(), a = w(
93
- () => e.component.value ?? fe
92
+ const { activeContainer: e } = I(), i = w(
93
+ () => e.component.value ?? pe
94
94
  );
95
- return (u, c) => (R(), ce(ve(a.value)));
95
+ return (u, c) => (R(), ce(ve(i.value)));
96
96
  }
97
- }), me = "data-dnd-draggable", pe = (t) => {
97
+ }), Ie = /* @__PURE__ */ N({
98
+ __name: "DnDContext",
99
+ setup(t) {
100
+ const e = p(null);
101
+ return (i, u) => (R(), $("div", {
102
+ ref_key: "contextRef",
103
+ ref: e
104
+ }, [
105
+ de(i.$slots, "default"),
106
+ ge(ye)
107
+ ], 512));
108
+ }
109
+ }), Ee = "data-dnd-draggable", Pe = (t) => {
98
110
  const {
99
111
  elements: e,
100
- draggingElements: a,
112
+ draggingElements: i,
101
113
  hovered: u,
102
114
  selectedElements: c,
103
115
  isDragging: n
104
- } = M(), i = p(null), h = w(
116
+ } = I(), s = p(null), h = w(
105
117
  () => {
106
118
  var m;
107
- return ((m = u.element.value) == null ? void 0 : m.node) === i.value;
119
+ return ((m = u.element.value) == null ? void 0 : m.node) === s.value;
108
120
  }
109
121
  ), f = w(
110
- () => a.value.some((m) => m.node === i.value)
122
+ () => i.value.some((m) => m.node === s.value)
111
123
  ), y = w(() => {
112
- if (!i.value || !n.value) return !1;
124
+ if (!s.value || !n.value) return !1;
113
125
  const m = e.value.find(
114
- (D) => D.node === i.value
126
+ (D) => D.node === s.value
115
127
  );
116
- return m != null && m.groups.length ? !a.value.some((D) => D.groups.length ? !D.groups.some(
128
+ return m != null && m.groups.length ? !i.value.some((D) => D.groups.length ? !D.groups.some(
117
129
  (r) => m.groups.includes(r)
118
130
  ) : !1) : !0;
119
131
  });
120
132
  return {
121
- elementRef: i,
133
+ elementRef: s,
122
134
  registerElement: () => {
123
- if (!i.value) throw new Error("ElementRef is not set");
135
+ if (!s.value) throw new Error("ElementRef is not set");
124
136
  e.value.push({
125
- node: i.value,
137
+ node: s.value,
126
138
  groups: (t == null ? void 0 : t.groups) ?? [],
127
139
  layer: (t == null ? void 0 : t.layer) ?? null,
128
140
  defaultLayer: (t == null ? void 0 : t.layer) ?? null,
129
141
  events: (t == null ? void 0 : t.events) ?? {},
130
142
  data: (t == null ? void 0 : t.data) ?? void 0
131
- }), i.value.setAttribute(me, "true");
143
+ }), s.value.setAttribute(Ee, "true");
132
144
  },
133
145
  unregisterElement: () => {
134
146
  const m = e.value.findIndex(
135
- (r) => r.node === i.value
147
+ (r) => r.node === s.value
136
148
  );
137
149
  m !== -1 && e.value.splice(m, 1);
138
150
  const D = c.value.findIndex(
139
- (r) => r.node === i.value
151
+ (r) => r.node === s.value
140
152
  );
141
153
  D !== -1 && c.value.splice(D, 1);
142
154
  },
@@ -144,20 +156,20 @@ const M = () => (te || (Y = ie(!0).run(() => ({
144
156
  isOvered: h,
145
157
  isAllowed: y
146
158
  };
147
- }, ye = () => {
148
- let t = "", e = "", a = "";
159
+ }, we = () => {
160
+ let t = "", e = "", i = "";
149
161
  const u = () => {
150
- const i = document.body;
151
- t = i.style.userSelect, e = i.style.touchAction, a = i.style.overscrollBehavior, i.style.userSelect = "none", i.style.touchAction = "none", i.style.overscrollBehavior = "none", window.addEventListener("contextmenu", n), window.addEventListener("selectstart", n), window.addEventListener("touchstart", n), window.addEventListener("touchmove", n);
162
+ const s = document.body;
163
+ t = s.style.userSelect, e = s.style.touchAction, i = s.style.overscrollBehavior, s.style.userSelect = "none", s.style.touchAction = "none", s.style.overscrollBehavior = "none", window.addEventListener("contextmenu", n), window.addEventListener("selectstart", n), window.addEventListener("touchstart", n), window.addEventListener("touchmove", n);
152
164
  }, c = () => {
153
- const i = document.body;
154
- i.style.userSelect = t, i.style.touchAction = e, i.style.overscrollBehavior = a, window.removeEventListener("contextmenu", n), window.removeEventListener("selectstart", n), window.removeEventListener("touchstart", n), window.removeEventListener("touchmove", n);
155
- }, n = (i) => i.preventDefault();
165
+ const s = document.body;
166
+ s.style.userSelect = t, s.style.touchAction = e, s.style.overscrollBehavior = i, window.removeEventListener("contextmenu", n), window.removeEventListener("selectstart", n), window.removeEventListener("touchstart", n), window.removeEventListener("touchmove", n);
167
+ }, n = (s) => s.preventDefault();
156
168
  return {
157
169
  disableInteractions: u,
158
170
  enableInteractions: c
159
171
  };
160
- }, ne = (t, e) => t.x < e.x + e.width && t.x + t.width > e.x && t.y < e.y + e.height && t.y + t.height > e.y, z = (t) => {
172
+ }, re = (t, e) => t.x < e.x + e.width && t.x + t.width > e.x && t.y < e.y + e.height && t.y + t.height > e.y, k = (t) => {
161
173
  if (!t)
162
174
  return {
163
175
  x: 0,
@@ -180,37 +192,37 @@ const M = () => (te || (Y = ie(!0).run(() => ({
180
192
  width: e.width,
181
193
  height: e.height
182
194
  };
183
- }, $ = (t) => ({
195
+ }, Y = (t) => ({
184
196
  x: t.x + t.width / 2,
185
197
  y: t.y + t.height / 2
186
- }), Ee = (t, e) => {
187
- const a = z(t);
198
+ }), xe = (t, e) => {
199
+ const i = k(t);
188
200
  return {
189
201
  pixel: {
190
- x: e.x - a.x,
191
- y: e.y - a.y
202
+ x: e.x - i.x,
203
+ y: e.y - i.y
192
204
  },
193
205
  percent: {
194
- x: (e.x - a.x) / a.width * 100,
195
- y: (e.y - a.y) / a.height * 100
206
+ x: (e.x - i.x) / i.width * 100,
207
+ y: (e.y - i.y) / i.height * 100
196
208
  }
197
209
  };
198
- }, re = (t, e) => {
199
- const a = e.x - t.x, u = e.y - t.y;
200
- return Math.sqrt(a * a + u * u);
201
- }, C = (t, e) => t ? e.contains(t) : !1, Pe = (t) => {
202
- const e = M();
210
+ }, oe = (t, e) => {
211
+ const i = e.x - t.x, u = e.y - t.y;
212
+ return Math.sqrt(i * i + u * u);
213
+ }, _ = (t, e) => t ? e.contains(t) : !1, De = (t) => {
214
+ const e = I();
203
215
  return {
204
216
  onPointerStart: (n) => {
205
217
  e.pointerPosition.start.value = { x: n.clientX, y: n.clientY }, e.pointerPosition.current.value = {
206
218
  x: n.clientX,
207
219
  y: n.clientY
208
220
  };
209
- const { pixel: i, percent: h } = Ee(t.value, {
221
+ const { pixel: s, percent: h } = xe(t.value, {
210
222
  x: n.clientX,
211
223
  y: n.clientY
212
224
  });
213
- e.pointerPosition.offset.pixel.value = i, e.pointerPosition.offset.percent.value = h;
225
+ e.pointerPosition.offset.pixel.value = s, e.pointerPosition.offset.percent.value = h;
214
226
  },
215
227
  onPointerMove: (n) => {
216
228
  e.pointerPosition.current.value = {
@@ -222,20 +234,20 @@ const M = () => (te || (Y = ie(!0).run(() => ({
222
234
  e.pointerPosition.current.value = null, e.pointerPosition.start.value = null, e.pointerPosition.offset.pixel.value = null, e.pointerPosition.offset.percent.value = null;
223
235
  }
224
236
  };
225
- }, we = (t) => {
226
- const e = M(), { onPointerStart: a, onPointerMove: u, onPointerEnd: c } = Pe(t);
237
+ }, Ce = (t) => {
238
+ const e = I(), { onPointerStart: i, onPointerMove: u, onPointerEnd: c } = De(t);
227
239
  let n = null;
228
- const i = (r) => {
229
- var v, L;
240
+ const s = (r) => {
241
+ var v, C;
230
242
  const d = e.selectedElements.value.some(
231
243
  (P) => P.node === r
232
244
  );
233
245
  if (e.selectedElements.value.length && d)
234
246
  return e.selectedElements.value.map((P) => {
235
- var S, T;
247
+ var M, T;
236
248
  return {
237
249
  ...P,
238
- initialHTML: ((S = P.node) == null ? void 0 : S.outerHTML) ?? "",
250
+ initialHTML: ((M = P.node) == null ? void 0 : M.outerHTML) ?? "",
239
251
  initialRect: (T = P.node) == null ? void 0 : T.getBoundingClientRect()
240
252
  };
241
253
  });
@@ -247,7 +259,7 @@ const M = () => (te || (Y = ie(!0).run(() => ({
247
259
  {
248
260
  ...g,
249
261
  initialHTML: ((v = g.node) == null ? void 0 : v.outerHTML) ?? "",
250
- initialRect: (L = g.node) == null ? void 0 : L.getBoundingClientRect()
262
+ initialRect: (C = g.node) == null ? void 0 : C.getBoundingClientRect()
251
263
  }
252
264
  ] : [];
253
265
  }, h = (r, d) => {
@@ -257,71 +269,71 @@ const M = () => (te || (Y = ie(!0).run(() => ({
257
269
  ), v = Math.max(
258
270
  0,
259
271
  Math.min(r.y + r.height, d.y + d.height) - Math.max(r.y, d.y)
260
- ), L = g * v, P = r.width * r.height, S = d.width * d.height;
261
- return (L / P * 100 + L / S * 100) / 2;
272
+ ), C = g * v, P = r.width * r.height, M = d.width * d.height;
273
+ return (C / P * 100 + C / M * 100) / 2;
262
274
  }, f = () => {
263
- var q, N, B, V, j, G, J, K, Q, W;
264
- const r = z(e.activeContainer.ref.value), d = $(r), g = ((q = e.pointerPosition.current.value) == null ? void 0 : q.x) ?? 0, v = ((N = e.pointerPosition.current.value) == null ? void 0 : N.y) ?? 0, P = !(r && g >= r.x && g <= r.x + r.width && v >= r.y && v <= r.y + r.height), S = e.draggingElements.value.map((o) => o.node), T = e.elements.value.filter((o) => {
265
- if (!o.node || S.some(
266
- (x) => x && C(o.node, x)
275
+ var q, V, B, j, G, J, K, Q, W, b;
276
+ const r = k(e.activeContainer.ref.value), d = Y(r), g = ((q = e.pointerPosition.current.value) == null ? void 0 : q.x) ?? 0, v = ((V = e.pointerPosition.current.value) == null ? void 0 : V.y) ?? 0, P = !(r && g >= r.x && g <= r.x + r.width && v >= r.y && v <= r.y + r.height), M = e.draggingElements.value.map((o) => o.node), T = e.elements.value.filter((o) => {
277
+ if (!o.node || M.some(
278
+ (x) => x && _(o.node, x)
267
279
  ) || o.groups.length && !!e.draggingElements.value.some(
268
- (I) => I.groups.length ? !I.groups.some(
269
- (_) => o.groups.includes(_)
280
+ (L) => L.groups.length ? !L.groups.some(
281
+ (S) => o.groups.includes(S)
270
282
  ) : !1
271
283
  ))
272
284
  return !1;
273
- const s = z(o.node);
274
- return s && r && ne(s, r);
285
+ const a = k(o.node);
286
+ return a && r && re(a, r);
275
287
  }).map((o) => {
276
- const s = z(o.node), x = $(s), I = g >= s.x && g <= s.x + s.width && v >= s.y && v <= s.y + s.height, _ = h(s, r), Z = re(d, x), A = e.elements.value.filter(
277
- (O) => O !== o && O.node && o.node && C(
288
+ const a = k(o.node), x = Y(a), L = g >= a.x && g <= a.x + a.width && v >= a.y && v <= a.y + a.height, S = h(a, r), Z = oe(d, x), A = e.elements.value.filter(
289
+ (O) => O !== o && O.node && o.node && _(
278
290
  o.node,
279
291
  O.node
280
292
  )
281
293
  ).length;
282
294
  return {
283
295
  element: o,
284
- isPointerInElement: I,
285
- overlapPercent: _,
296
+ isPointerInElement: L,
297
+ overlapPercent: S,
286
298
  depth: A,
287
299
  centerDistance: Z
288
300
  };
289
- }).sort((o, s) => {
301
+ }).sort((o, a) => {
290
302
  if (!P) {
291
- if (o.isPointerInElement && s.isPointerInElement)
292
- return s.depth - o.depth;
293
- if (o.isPointerInElement !== s.isPointerInElement)
303
+ if (o.isPointerInElement && a.isPointerInElement)
304
+ return a.depth - o.depth;
305
+ if (o.isPointerInElement !== a.isPointerInElement)
294
306
  return o.isPointerInElement ? -1 : 1;
295
307
  }
296
- return Math.abs(o.overlapPercent - s.overlapPercent) <= 1 ? o.centerDistance - s.centerDistance : s.overlapPercent - o.overlapPercent;
308
+ return Math.abs(o.overlapPercent - a.overlapPercent) <= 1 ? o.centerDistance - a.centerDistance : a.overlapPercent - o.overlapPercent;
297
309
  }), le = e.zones.value.filter((o) => {
298
- if (!o.node || S.some(
299
- (x) => x && C(o.node, x)
300
- ) || o.groups.length && !!e.draggingElements.value.some((I) => I.groups.length ? !I.groups.some((_) => o.groups.includes(_)) : !1))
310
+ if (!o.node || M.some(
311
+ (x) => x && _(o.node, x)
312
+ ) || o.groups.length && !!e.draggingElements.value.some((L) => L.groups.length ? !L.groups.some((S) => o.groups.includes(S)) : !1))
301
313
  return !1;
302
- const s = z(o.node);
303
- return s && r && ne(s, r);
314
+ const a = k(o.node);
315
+ return a && r && re(a, r);
304
316
  }).map((o) => {
305
- const s = z(o.node), x = $(s), I = g >= s.x && g <= s.x + s.width && v >= s.y && v <= s.y + s.height, _ = h(s, r), Z = re(d, x), A = e.zones.value.filter(
306
- (O) => O !== o && O.node && o.node && C(o.node, O.node)
317
+ const a = k(o.node), x = Y(a), L = g >= a.x && g <= a.x + a.width && v >= a.y && v <= a.y + a.height, S = h(a, r), Z = oe(d, x), A = e.zones.value.filter(
318
+ (O) => O !== o && O.node && o.node && _(o.node, O.node)
307
319
  ).length;
308
320
  return {
309
321
  zone: o,
310
- isPointerInElement: I,
311
- overlapPercent: _,
322
+ isPointerInElement: L,
323
+ overlapPercent: S,
312
324
  depth: A,
313
325
  centerDistance: Z
314
326
  };
315
- }).sort((o, s) => {
327
+ }).sort((o, a) => {
316
328
  if (!P) {
317
- if (o.isPointerInElement && s.isPointerInElement)
318
- return s.depth - o.depth;
319
- if (o.isPointerInElement !== s.isPointerInElement)
329
+ if (o.isPointerInElement && a.isPointerInElement)
330
+ return a.depth - o.depth;
331
+ if (o.isPointerInElement !== a.isPointerInElement)
320
332
  return o.isPointerInElement ? -1 : 1;
321
333
  }
322
- return Math.abs(o.overlapPercent - s.overlapPercent) <= 1 ? o.centerDistance - s.centerDistance : s.overlapPercent - o.overlapPercent;
323
- }), k = e.hovered.element.value, H = e.hovered.zone.value;
324
- e.hovered.element.value = ((B = T[0]) == null ? void 0 : B.element) ?? null, e.hovered.zone.value = ((V = le[0]) == null ? void 0 : V.zone) ?? null, e.hovered.element.value !== k && ((j = k == null ? void 0 : k.events) != null && j.onLeave && k.events.onLeave(e), (J = (G = e.hovered.element.value) == null ? void 0 : G.events) != null && J.onHover && e.hovered.element.value.events.onHover(e)), e.hovered.zone.value !== H && ((K = H == null ? void 0 : H.events) != null && K.onLeave && H.events.onLeave(e), (W = (Q = e.hovered.zone.value) == null ? void 0 : Q.events) != null && W.onHover && e.hovered.zone.value.events.onHover(e)), n = requestAnimationFrame(f);
334
+ return Math.abs(o.overlapPercent - a.overlapPercent) <= 1 ? o.centerDistance - a.centerDistance : a.overlapPercent - o.overlapPercent;
335
+ }), z = e.hovered.element.value, H = e.hovered.zone.value;
336
+ e.hovered.element.value = ((B = T[0]) == null ? void 0 : B.element) ?? null, e.hovered.zone.value = ((j = le[0]) == null ? void 0 : j.zone) ?? null, e.hovered.element.value !== z && ((G = z == null ? void 0 : z.events) != null && G.onLeave && z.events.onLeave(e), (K = (J = e.hovered.element.value) == null ? void 0 : J.events) != null && K.onHover && e.hovered.element.value.events.onHover(e)), e.hovered.zone.value !== H && ((Q = H == null ? void 0 : H.events) != null && Q.onLeave && H.events.onLeave(e), (b = (W = e.hovered.zone.value) == null ? void 0 : W.events) != null && b.onHover && e.hovered.zone.value.events.onHover(e)), n = requestAnimationFrame(f);
325
337
  }, y = () => {
326
338
  f();
327
339
  }, l = () => {
@@ -329,7 +341,7 @@ const M = () => (te || (Y = ie(!0).run(() => ({
329
341
  };
330
342
  return {
331
343
  activate: (r) => {
332
- e.draggingElements.value = i(t.value), a(r), y();
344
+ e.draggingElements.value = s(t.value), i(r), y();
333
345
  },
334
346
  track: (r) => {
335
347
  u(r);
@@ -338,22 +350,22 @@ const M = () => (te || (Y = ie(!0).run(() => ({
338
350
  var r, d;
339
351
  c(), e.hovered.zone.value ? (d = (r = e.hovered.zone.value.events).onDrop) == null || d.call(r, e) : e.draggingElements.value.forEach(
340
352
  (g) => {
341
- var v, L;
342
- return (L = (v = g.events).onEnd) == null ? void 0 : L.call(v, e);
353
+ var v, C;
354
+ return (C = (v = g.events).onEnd) == null ? void 0 : C.call(v, e);
343
355
  }
344
356
  ), e.draggingElements.value = [], e.selectedElements.value = [], e.hovered.zone.value = null, e.hovered.element.value = null, l();
345
357
  }
346
358
  };
347
- }, Ie = (t) => {
359
+ }, Me = (t) => {
348
360
  const {
349
361
  elementRef: e,
350
- registerElement: a,
362
+ registerElement: i,
351
363
  unregisterElement: u,
352
364
  isDragging: c,
353
365
  isOvered: n,
354
- isAllowed: i
355
- } = pe(t), { disableInteractions: h, enableInteractions: f } = ye(), y = M(), { activate: l, track: E, deactivate: m } = we(e), D = (v) => {
356
- t != null && t.container && (y.activeContainer.component.value = de(t.container)), h(), l(v), document.addEventListener("pointermove", r), document.addEventListener("pointerup", g), document.addEventListener("wheel", d);
366
+ isAllowed: s
367
+ } = Pe(t), { disableInteractions: h, enableInteractions: f } = we(), y = I(), { activate: l, track: E, deactivate: m } = Ce(e), D = (v) => {
368
+ t != null && t.container && (y.activeContainer.component.value = he(t.container)), h(), l(v), document.addEventListener("pointermove", r), document.addEventListener("pointerup", g), document.addEventListener("wheel", d);
357
369
  }, r = (v) => {
358
370
  E(v);
359
371
  }, d = (v) => {
@@ -361,18 +373,18 @@ const M = () => (te || (Y = ie(!0).run(() => ({
361
373
  }, g = () => {
362
374
  y.activeContainer.component.value = null, f(), m(), document.removeEventListener("pointermove", r), document.removeEventListener("pointerup", g), document.removeEventListener("wheel", d);
363
375
  };
364
- return F(a), U(u), {
376
+ return F(i), U(u), {
365
377
  pointerPosition: y.pointerPosition,
366
378
  elementRef: e,
367
379
  isDragging: c,
368
380
  isOvered: n,
369
- isAllowed: i,
381
+ isAllowed: s,
370
382
  handleDragStart: D
371
383
  };
372
- }, xe = (t) => {
373
- const { zones: e, hovered: a, draggingElements: u, isDragging: c } = M(), n = p(null), i = w(() => {
384
+ }, Le = (t) => {
385
+ const { zones: e, hovered: i, draggingElements: u, isDragging: c } = I(), n = p(null), s = w(() => {
374
386
  var l;
375
- return ((l = a.zone.value) == null ? void 0 : l.node) === n.value;
387
+ return ((l = i.zone.value) == null ? void 0 : l.node) === n.value;
376
388
  }), h = w(() => {
377
389
  if (!n.value || !c.value) return !1;
378
390
  const l = e.value.find(
@@ -396,22 +408,22 @@ const M = () => (te || (Y = ie(!0).run(() => ({
396
408
  (E) => E.node === n.value
397
409
  );
398
410
  l !== -1 && e.value.splice(l, 1);
399
- }, isOvered: i, isAllowed: h };
400
- }, Ce = (t) => {
401
- const { elementRef: e, registerZone: a, unregisterZone: u, isOvered: c, isAllowed: n } = xe(t);
402
- return F(a), U(u), { elementRef: e, isOvered: c, isAllowed: n };
403
- }, Me = (t) => {
404
- const { selectedElements: e, elements: a } = M(), u = w(
405
- () => a.value.find((l) => l.node === t.value)
411
+ }, isOvered: s, isAllowed: h };
412
+ }, Se = (t) => {
413
+ const { elementRef: e, registerZone: i, unregisterZone: u, isOvered: c, isAllowed: n } = Le(t);
414
+ return F(i), U(u), { elementRef: e, isOvered: c, isAllowed: n };
415
+ }, Oe = (t) => {
416
+ const { selectedElements: e, elements: i } = I(), u = w(
417
+ () => i.value.find((l) => l.node === t.value)
406
418
  ), c = w(
407
419
  () => e.value.some((l) => l.node === t.value)
408
420
  ), n = w(() => t.value ? e.value.some(
409
- (l) => l.node && C(
421
+ (l) => l.node && _(
410
422
  l.node,
411
423
  t.value
412
424
  )
413
- ) : !1), i = w(() => t.value ? e.value.some(
414
- (l) => l.node && C(
425
+ ) : !1), s = w(() => t.value ? e.value.some(
426
+ (l) => l.node && _(
415
427
  t.value,
416
428
  l.node
417
429
  )
@@ -421,12 +433,12 @@ const M = () => (te || (Y = ie(!0).run(() => ({
421
433
  ));
422
434
  }, f = () => {
423
435
  u.value && (n.value && (e.value = e.value.filter(
424
- (l) => l.node && !C(
436
+ (l) => l.node && !_(
425
437
  l.node,
426
438
  t.value
427
439
  )
428
- )), i.value && (e.value = e.value.filter(
429
- (l) => l.node && !C(
440
+ )), s.value && (e.value = e.value.filter(
441
+ (l) => l.node && !_(
430
442
  t.value,
431
443
  l.node
432
444
  )
@@ -443,10 +455,11 @@ const M = () => (te || (Y = ie(!0).run(() => ({
443
455
  };
444
456
  };
445
457
  export {
446
- Le as DragOverlay,
447
- z as getBoundingBox,
448
- M as useDnDStore,
449
- Ie as useDraggable,
450
- Ce as useDroppable,
451
- Me as useSelection
458
+ Ie as DnDContext,
459
+ ye as DragOverlay,
460
+ k as getBoundingBox,
461
+ I as useDnDStore,
462
+ Me as useDraggable,
463
+ Se as useDroppable,
464
+ Oe as useSelection
452
465
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vue-dnd-kit/core",
3
- "version": "0.0.23",
3
+ "version": "0.0.25-beta",
4
4
  "description": "Core functionality for Vue DnD Kit - a lightweight Vue 3 library for building performant and accessible drag and drop interfaces",
5
5
  "author": "ZiZIGY",
6
6
  "license": "MIT",