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