(function(x,a){typeof exports=="object"&&typeof module<"u"?a(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],a):(x=typeof globalThis<"u"?globalThis:x||self,a(x.splitpanes={},x.Vue))})(this,function(x,a){"use strict";const j={__name:"splitpanes",props:{horizontal:{type:Boolean},pushOtherPanes:{type:Boolean,default:!0},dblClickSplitter:{type:Boolean,default:!0},rtl:{type:Boolean,default:!1},firstSplitter:{type:Boolean}},emits:["ready","resize","resized","pane-click","pane-maximize","pane-add","pane-remove","splitter-click"],setup(R,{emit:S}){const f=S,u=R,M=a.useSlots(),l=a.ref([]),w=a.computed(()=>l.value.reduce((e,n)=>(e[~~n.id]=n)&&e,{})),v=a.computed(()=>l.value.length),h=a.ref(null),P=a.ref(!1),m=a.ref({mouseDown:!1,dragging:!1,activeSplitter:null,cursorOffset:0}),p=a.ref({splitter:null,timeoutId:null}),E=a.computed(()=>({[`splitpanes splitpanes--${u.horizontal?"horizontal":"vertical"}`]:!0,"splitpanes--dragging":m.value.dragging})),k=()=>{document.addEventListener("mousemove",c,{passive:!1}),document.addEventListener("mouseup",g),"ontouchstart"in window&&(document.addEventListener("touchmove",c,{passive:!1}),document.addEventListener("touchend",g))},C=()=>{document.removeEventListener("mousemove",c,{passive:!1}),document.removeEventListener("mouseup",g),"ontouchstart"in window&&(document.removeEventListener("touchmove",c,{passive:!1}),document.removeEventListener("touchend",g))},y=(e,n)=>{const t=e.target.closest(".splitpanes__splitter");if(t){const{left:i,top:s}=t.getBoundingClientRect(),{clientX:o,clientY:r}="ontouchstart"in window&&e.touches?e.touches[0]:e;m.value.cursorOffset=u.horizontal?r-s:o-i}k(),m.value.mouseDown=!0,m.value.activeSplitter=n},c=e=>{m.value.mouseDown&&(e.preventDefault(),m.value.dragging=!0,requestAnimationFrame(()=>{H(F(e)),f("resize",l.value.map(n=>({min:n.min,max:n.max,size:n.size})))}))},g=()=>{m.value.dragging&&f("resized",l.value.map(e=>({min:e.min,max:e.max,size:e.size}))),m.value.mouseDown=!1,setTimeout(()=>{m.value.dragging=!1,C()},100)},N=(e,n)=>{"ontouchstart"in window&&(e.preventDefault(),u.dblClickSplitter&&(p.value.splitter===n?(clearTimeout(p.value.timeoutId),p.value.timeoutId=null,B(e,n),p.value.splitter=null):(p.value.splitter=n,p.value.timeoutId=setTimeout(()=>p.value.splitter=null,500)))),m.value.dragging||f("splitter-click",l.value[n])},B=(e,n)=>{let t=0;l.value=l.value.map((i,s)=>(i.size=s===n?i.max:i.min,s!==n&&(t+=i.min),i)),l.value[n].size-=t,f("pane-maximize",l.value[n]),f("resized",l.value.map(i=>({min:i.min,max:i.max,size:i.size})))},$=(e,n)=>{f("pane-click",w.value[n])},F=e=>{const n=h.value.getBoundingClientRect(),{clientX:t,clientY:i}="ontouchstart"in window&&e.touches?e.touches[0]:e;return{x:t-(u.horizontal?0:m.value.cursorOffset)-n.left,y:i-(u.horizontal?m.value.cursorOffset:0)-n.top}},I=e=>{e=e[u.horizontal?"y":"x"];const n=h.value[u.horizontal?"clientHeight":"clientWidth"];return u.rtl&&!u.horizontal&&(e=n-e),e*100/n},H=e=>{const n=m.value.activeSplitter;let t={prevPanesSize:q(n),nextPanesSize:_(n),prevReachedMinPanes:0,nextReachedMinPanes:0};const i=0+(u.pushOtherPanes?0:t.prevPanesSize),s=100-(u.pushOtherPanes?0:t.nextPanesSize),o=Math.max(Math.min(I(e),s),i);let r=[n,n+1],d=l.value[r[0]]||null,z=l.value[r[1]]||null;const L=d.max<100&&o>=d.max+t.prevPanesSize,te=z.max<100&&o<=100-(z.max+_(n+1));if(L||te){L?(d.size=d.max,z.size=Math.max(100-d.max-t.prevPanesSize-t.nextPanesSize,0)):(d.size=Math.max(100-z.max-t.prevPanesSize-_(n+1),0),z.size=z.max);return}if(u.pushOtherPanes){const T=G(t,o);if(!T)return;({sums:t,panesToResize:r}=T),d=l.value[r[0]]||null,z=l.value[r[1]]||null}d!==null&&(d.size=Math.min(Math.max(o-t.prevPanesSize-t.prevReachedMinPanes,d.min),d.max)),z!==null&&(z.size=Math.min(Math.max(100-o-t.nextPanesSize-t.nextReachedMinPanes,z.min),z.max))},G=(e,n)=>{const t=m.value.activeSplitter,i=[t,t+1];return n{o>i[0]&&o<=t&&(s.size=s.min,e.prevReachedMinPanes+=s.min)}),e.prevPanesSize=q(i[0]),i[0]===void 0)?(e.prevReachedMinPanes=0,l.value[0].size=l.value[0].min,l.value.forEach((s,o)=>{o>0&&o<=t&&(s.size=s.min,e.prevReachedMinPanes+=s.min)}),l.value[i[1]].size=100-e.prevReachedMinPanes-l.value[0].min-e.prevPanesSize-e.nextPanesSize,null):n>100-e.nextPanesSize-l.value[i[1]].min&&(i[1]=Y(t).index,e.nextReachedMinPanes=0,i[1]>t+1&&l.value.forEach((s,o)=>{o>t&&o{o=t+1&&(s.size=s.min,e.nextReachedMinPanes+=s.min)}),l.value[i[0]].size=100-e.prevPanesSize-_(i[0]-1),null):{sums:e,panesToResize:i}},q=e=>l.value.reduce((n,t,i)=>n+(il.value.reduce((n,t,i)=>n+(i>e+1?t.size:0),0),X=e=>[...l.value].reverse().find(t=>t.indext.min)||{},Y=e=>l.value.find(t=>t.index>e+1&&t.size>t.min)||{},V=()=>{var n;Array.from(((n=h.value)==null?void 0:n.children)||[]).forEach(t=>{const i=t.classList.contains("splitpanes__pane"),s=t.classList.contains("splitpanes__splitter");!i&&!s&&(t.remove(),console.warn("Splitpanes: Only elements are allowed at the root of . One of your DOM nodes was removed."))})},A=(e,n,t=!1)=>{const i=e-1,s=document.createElement("div");s.classList.add("splitpanes__splitter"),t||(s.onmousedown=o=>y(o,i),typeof window<"u"&&"ontouchstart"in window&&(s.ontouchstart=o=>y(o,i)),s.onclick=o=>N(o,i+1)),u.dblClickSplitter&&(s.ondblclick=o=>B(o,i+1)),n.parentNode.insertBefore(s,n)},W=e=>{e.onmousedown=void 0,e.onclick=void 0,e.ondblclick=void 0,e.remove()},b=()=>{var t;const e=Array.from(((t=h.value)==null?void 0:t.children)||[]);e.forEach(i=>{i.className.includes("splitpanes__splitter")&&W(i)});let n=0;e.forEach(i=>{i.className.includes("splitpanes__pane")&&(!n&&u.firstSplitter?A(n,i,!0):n&&A(n,i),n++)})},J=({uid:e,...n})=>{const t=w.value[e];Object.entries(n).forEach(([i,s])=>t[i]=s)},K=e=>{var t;let n=-1;Array.from(((t=h.value)==null?void 0:t.children)||[]).some(i=>(i.className.includes("splitpanes__pane")&&n++,i.isSameNode(e.el))),l.value.splice(n,0,{...e,index:n}),l.value.forEach((i,s)=>i.index=s),P.value&&a.nextTick(()=>{b(),O({addedPane:l.value[n]}),f("pane-add",{index:n,panes:l.value.map(i=>({min:i.min,max:i.max,size:i.size}))})})},Q=e=>{const n=l.value.findIndex(i=>i.id===e),t=l.value.splice(n,1)[0];l.value.forEach((i,s)=>i.index=s),a.nextTick(()=>{b(),O({removedPane:{...t}}),f("pane-remove",{removed:t,panes:l.value.map(i=>({min:i.min,max:i.max,size:i.size}))})})},O=(e={})=>{!e.addedPane&&!e.removedPane?ee():l.value.some(n=>n.givenSize!==null||n.min||n.max<100)?ie(e):Z(),P.value&&f("resized",l.value.map(n=>({min:n.min,max:n.max,size:n.size})))},Z=()=>{const e=100/v.value;let n=0;const t=[],i=[];l.value.forEach(s=>{s.size=Math.max(Math.min(e,s.max),s.min),n-=s.size,s.size>=s.max&&t.push(s.id),s.size<=s.min&&i.push(s.id)}),n>.1&&D(n,t,i)},ee=()=>{let e=100;const n=[],t=[];let i=0;l.value.forEach(o=>{e-=o.size,o.givenSize!==null&&i++,o.size>=o.max&&n.push(o.id),o.size<=o.min&&t.push(o.id)});let s=100;e>.1&&(l.value.forEach(o=>{o.givenSize===null&&(o.size=Math.max(Math.min(e/(v.value-i),o.max),o.min)),s-=o.size}),s>.1&&D(s,n,t))},ie=({addedPane:e,removedPane:n}={})=>{let t=100/v.value,i=0;const s=[],o=[];((e==null?void 0:e.givenSize)??null)!==null&&(t=(100-e.givenSize)/(v.value-1).value),l.value.forEach(r=>{i-=r.size,r.size>=r.max&&s.push(r.id),r.size<=r.min&&o.push(r.id)}),!(Math.abs(i)<.1)&&(l.value.forEach(r=>{(e==null?void 0:e.givenSize)!==null&&(e==null?void 0:e.id)===r.id||(r.size=Math.max(Math.min(t,r.max),r.min)),i-=r.size,r.size>=r.max&&s.push(r.id),r.size<=r.min&&o.push(r.id)}),i>.1&&D(i,s,o))},D=(e,n,t)=>{let i;e>0?i=e/(v.value-n.length):i=e/(v.value-t.length),l.value.forEach((s,o)=>{if(e>0&&!n.includes(s.id)){const r=Math.max(Math.min(s.size+i,s.max),s.min),d=r-s.size;e-=d,s.size=r}else if(!t.includes(s.id)){const r=Math.max(Math.min(s.size+i,s.max),s.min),d=r-s.size;e-=d,s.size=r}}),Math.abs(e)>.1&&a.nextTick(()=>{P.value&&console.warn("Splitpanes: Could not resize panes correctly due to their constraints.")})};a.watch(()=>u.firstSplitter,()=>b()),a.watch(()=>u.dblClickSplitter,e=>{[...h.value.querySelectorAll(".splitpanes__splitter")].forEach((t,i)=>{t.ondblclick=e?s=>B(s,i):void 0})}),a.onBeforeUnmount(()=>P.value=!1),a.onMounted(()=>{V(),b(),O(),f("ready"),P.value=!0});const ne=()=>{var e;return a.h("div",{ref:h,class:E.value},(e=M.default)==null?void 0:e.call(M))};return a.provide("panes",l),a.provide("indexedPanes",w),a.provide("horizontal",a.computed(()=>u.horizontal)),a.provide("requestUpdate",J),a.provide("onPaneAdd",K),a.provide("onPaneRemove",Q),a.provide("onPaneClick",$),(e,n)=>(a.openBlock(),a.createBlock(a.resolveDynamicComponent(ne)))}},U={__name:"pane",props:{size:{type:[Number,String]},minSize:{type:[Number,String],default:0},maxSize:{type:[Number,String],default:100}},setup(R){var y;const S=R,f=a.inject("requestUpdate"),u=a.inject("onPaneAdd"),M=a.inject("horizontal"),l=a.inject("onPaneRemove"),w=a.inject("onPaneClick"),v=(y=a.getCurrentInstance())==null?void 0:y.uid,h=a.inject("indexedPanes"),P=a.computed(()=>h.value[v]),m=a.ref(null),p=a.computed(()=>{const c=isNaN(S.size)||S.size===void 0?0:parseFloat(S.size);return Math.max(Math.min(c,k.value),E.value)}),E=a.computed(()=>{const c=parseFloat(S.minSize);return isNaN(c)?0:c}),k=a.computed(()=>{const c=parseFloat(S.maxSize);return isNaN(c)?100:c}),C=a.computed(()=>{var c;return`${M.value?"height":"width"}: ${(c=P.value)==null?void 0:c.size}%`});return a.onMounted(()=>{u({id:v,el:m.value,min:E.value,max:k.value,givenSize:S.size===void 0?null:p.value,size:p.value})}),a.watch(()=>p.value,c=>f({uid:v,size:c})),a.watch(()=>E.value,c=>f({uid:v,min:c})),a.watch(()=>k.value,c=>f({uid:v,max:c})),a.onBeforeUnmount(()=>l(v)),(c,g)=>(a.openBlock(),a.createElementBlock("div",{ref_key:"paneEl",ref:m,class:"splitpanes__pane",onClick:g[0]||(g[0]=N=>a.unref(w)(N,c._.uid)),style:a.normalizeStyle(C.value)},[a.renderSlot(c.$slots,"default")],4))}};x.Pane=U,x.Splitpanes=j,Object.defineProperty(x,Symbol.toStringTag,{value:"Module"})});