UNPKG

vue-allotment

Version:

Vue 3 port of React Allotment - resizable split views with draggable dividers

2 lines (1 loc) 34.1 kB
(function(L,g){typeof exports=="object"&&typeof module<"u"?g(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],g):(L=typeof globalThis<"u"?globalThis:L||self,g(L.VueAllotment={},L.Vue))})(this,function(L,g){"use strict";function ze(s,e,{signal:t,edges:i}={}){let r,l=null;const m=i!=null&&i.includes("leading"),a=i==null||i.includes("trailing"),n=()=>{l!==null&&(s.apply(r,l),r=void 0,l=null)},o=()=>{a&&n(),z()};let h=null;const c=()=>{h!=null&&clearTimeout(h),h=setTimeout(()=>{h=null,o()},e)},f=()=>{h!==null&&(clearTimeout(h),h=null)},z=()=>{f(),r=void 0,l=null},v=()=>{n()},I=function(...p){if(t?.aborted)return;r=this,l=p;const V=h==null;c(),m&&V&&n()};return I.schedule=c,I.cancel=z,I.flush=v,t?.addEventListener("abort",z,{once:!0}),I}function ge(){}function M(s,e,t){return t==null?Math.min(s,e):Math.min(Math.max(s,e),t)}function Z(s){return Object.getOwnPropertySymbols(s).filter(e=>Object.prototype.propertyIsEnumerable.call(s,e))}function ee(s){return s==null?s===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(s)}const ye="[object RegExp]",Se="[object String]",we="[object Number]",be="[object Boolean]",te="[object Arguments]",Ie="[object Symbol]",xe="[object Date]",_e="[object Map]",Ve="[object Set]",Ee="[object Array]",Te="[object Function]",De="[object ArrayBuffer]",W="[object Object]",Le="[object Error]",Pe="[object DataView]",je="[object Uint8Array]",Oe="[object Uint8ClampedArray]",Me="[object Uint16Array]",Ne="[object Uint32Array]",Ae="[object BigUint64Array]",Ce="[object Int8Array]",$e="[object Int16Array]",Be="[object Int32Array]",Fe="[object BigInt64Array]",He="[object Float32Array]",Ue="[object Float64Array]";function ie(s){if(!s||typeof s!="object")return!1;const e=Object.getPrototypeOf(s);return e===null||e===Object.prototype||Object.getPrototypeOf(e)===null?Object.prototype.toString.call(s)==="[object Object]":!1}function ke(s,e){return s===e||Number.isNaN(s)&&Number.isNaN(e)}function Re(s,e,t){return B(s,e,void 0,void 0,void 0,void 0,t)}function B(s,e,t,i,r,l,m){const a=m(s,e,t,i,r,l);if(a!==void 0)return a;if(typeof s==typeof e)switch(typeof s){case"bigint":case"string":case"boolean":case"symbol":case"undefined":return s===e;case"number":return s===e||Object.is(s,e);case"function":return s===e;case"object":return F(s,e,l,m)}return F(s,e,l,m)}function F(s,e,t,i){if(Object.is(s,e))return!0;let r=ee(s),l=ee(e);if(r===te&&(r=W),l===te&&(l=W),r!==l)return!1;switch(r){case Se:return s.toString()===e.toString();case we:{const n=s.valueOf(),o=e.valueOf();return ke(n,o)}case be:case xe:case Ie:return Object.is(s.valueOf(),e.valueOf());case ye:return s.source===e.source&&s.flags===e.flags;case Te:return s===e}t=t??new Map;const m=t.get(s),a=t.get(e);if(m!=null&&a!=null)return m===e;t.set(s,e),t.set(e,s);try{switch(r){case _e:{if(s.size!==e.size)return!1;for(const[n,o]of s.entries())if(!e.has(n)||!B(o,e.get(n),n,s,e,t,i))return!1;return!0}case Ve:{if(s.size!==e.size)return!1;const n=Array.from(s.values()),o=Array.from(e.values());for(let h=0;h<n.length;h++){const c=n[h],f=o.findIndex(z=>B(c,z,void 0,s,e,t,i));if(f===-1)return!1;o.splice(f,1)}return!0}case Ee:case je:case Oe:case Me:case Ne:case Ae:case Ce:case $e:case Be:case Fe:case He:case Ue:{if(typeof Buffer<"u"&&Buffer.isBuffer(s)!==Buffer.isBuffer(e)||s.length!==e.length)return!1;for(let n=0;n<s.length;n++)if(!B(s[n],e[n],n,s,e,t,i))return!1;return!0}case De:return s.byteLength!==e.byteLength?!1:F(new Uint8Array(s),new Uint8Array(e),t,i);case Pe:return s.byteLength!==e.byteLength||s.byteOffset!==e.byteOffset?!1:F(new Uint8Array(s),new Uint8Array(e),t,i);case Le:return s.name===e.name&&s.message===e.message;case W:{if(!(F(s.constructor,e.constructor,t,i)||ie(s)&&ie(e)))return!1;const o=[...Object.keys(s),...Z(s)],h=[...Object.keys(e),...Z(e)];if(o.length!==h.length)return!1;for(let c=0;c<o.length;c++){const f=o[c],z=s[f];if(!Object.hasOwn(e,f))return!1;const v=e[f];if(!B(z,v,f,s,e,t,i))return!1}return!0}default:return!1}}finally{t.delete(s),t.delete(e)}}function Ye(s,e){return Re(s,e,ge)}const A={splitView:"_splitView_pzp7c_6",sashContainer:"_sashContainer_pzp7c_13",sash:"_sash_pzp7c_13",splitViewContainer:"_splitViewContainer_pzp7c_24",splitViewView:"_splitViewView_pzp7c_31",vertical:"_vertical_pzp7c_37",horizontal:"_horizontal_pzp7c_41",separatorBorder:"_separatorBorder_pzp7c_45"};let se=!1,ne=!1,H;typeof navigator=="object"&&(H=navigator.userAgent,ne=H.includes("Macintosh"),se=(H.includes("Macintosh")||H.includes("iPad")||H.includes("iPhone"))&&!!navigator.maxTouchPoints&&navigator.maxTouchPoints>0);const re=se,Ke=ne;class oe{_size;getSize(){return this._size}setSize(e){this._size=e}}function R(s,e){const t=s.length,i=t-e.length;return i>=0&&s.slice(i,t)===e}function We(s){return s&&s.__esModule&&Object.prototype.hasOwnProperty.call(s,"default")?s.default:s}var G={exports:{}},ae;function Ge(){return ae||(ae=1,function(s){var e=Object.prototype.hasOwnProperty,t="~";function i(){}Object.create&&(i.prototype=Object.create(null),new i().__proto__||(t=!1));function r(n,o,h){this.fn=n,this.context=o,this.once=h||!1}function l(n,o,h,c,f){if(typeof h!="function")throw new TypeError("The listener must be a function");var z=new r(h,c||n,f),v=t?t+o:o;return n._events[v]?n._events[v].fn?n._events[v]=[n._events[v],z]:n._events[v].push(z):(n._events[v]=z,n._eventsCount++),n}function m(n,o){--n._eventsCount===0?n._events=new i:delete n._events[o]}function a(){this._events=new i,this._eventsCount=0}a.prototype.eventNames=function(){var o=[],h,c;if(this._eventsCount===0)return o;for(c in h=this._events)e.call(h,c)&&o.push(t?c.slice(1):c);return Object.getOwnPropertySymbols?o.concat(Object.getOwnPropertySymbols(h)):o},a.prototype.listeners=function(o){var h=t?t+o:o,c=this._events[h];if(!c)return[];if(c.fn)return[c.fn];for(var f=0,z=c.length,v=new Array(z);f<z;f++)v[f]=c[f].fn;return v},a.prototype.listenerCount=function(o){var h=t?t+o:o,c=this._events[h];return c?c.fn?1:c.length:0},a.prototype.emit=function(o,h,c,f,z,v){var I=t?t+o:o;if(!this._events[I])return!1;var p=this._events[I],V=arguments.length,P,x;if(p.fn){switch(p.once&&this.removeListener(o,p.fn,void 0,!0),V){case 1:return p.fn.call(p.context),!0;case 2:return p.fn.call(p.context,h),!0;case 3:return p.fn.call(p.context,h,c),!0;case 4:return p.fn.call(p.context,h,c,f),!0;case 5:return p.fn.call(p.context,h,c,f,z),!0;case 6:return p.fn.call(p.context,h,c,f,z,v),!0}for(x=1,P=new Array(V-1);x<V;x++)P[x-1]=arguments[x];p.fn.apply(p.context,P)}else{var k=p.length,N;for(x=0;x<k;x++)switch(p[x].once&&this.removeListener(o,p[x].fn,void 0,!0),V){case 1:p[x].fn.call(p[x].context);break;case 2:p[x].fn.call(p[x].context,h);break;case 3:p[x].fn.call(p[x].context,h,c);break;case 4:p[x].fn.call(p[x].context,h,c,f);break;default:if(!P)for(N=1,P=new Array(V-1);N<V;N++)P[N-1]=arguments[N];p[x].fn.apply(p[x].context,P)}}return!0},a.prototype.on=function(o,h,c){return l(this,o,h,c,!1)},a.prototype.once=function(o,h,c){return l(this,o,h,c,!0)},a.prototype.removeListener=function(o,h,c,f){var z=t?t+o:o;if(!this._events[z])return this;if(!h)return m(this,z),this;var v=this._events[z];if(v.fn)v.fn===h&&(!f||v.once)&&(!c||v.context===c)&&m(this,z);else{for(var I=0,p=[],V=v.length;I<V;I++)(v[I].fn!==h||f&&!v[I].once||c&&v[I].context!==c)&&p.push(v[I]);p.length?this._events[z]=p.length===1?p[0]:p:m(this,z)}return this},a.prototype.removeAllListeners=function(o){var h;return o?(h=t?t+o:o,this._events[h]&&m(this,h)):(this._events=new i,this._eventsCount=0),this},a.prototype.off=a.prototype.removeListener,a.prototype.addListener=a.prototype.on,a.prefixed=t,a.EventEmitter=a,s.exports=a}(G)),G.exports}var Xe=Ge();const X=We(Xe);function le(s,e){const t=s.indexOf(e);t!==-1&&(s.splice(t,1),s.unshift(e))}function q(s,e){const t=s.indexOf(e);t!==-1&&(s.splice(t,1),s.push(e))}function j(s,e,t=1){const i=Math.max(0,Math.ceil((e-s)/t)),r=Array.from({length:i});let l=-1;for(;++l<i;)r[l]=s+l*t;return r}const D={sash:"_sash_j5cmb_7",disabled:"_disabled_j5cmb_15",mac:"_mac_j5cmb_19",vertical:"_vertical_j5cmb_19",minimum:"_minimum_j5cmb_23",maximum:"_maximum_j5cmb_27",horizontal:"_horizontal_j5cmb_31",hover:"_hover_j5cmb_126",active:"_active_j5cmb_127"};var O=(s=>(s[s.Vertical=0]="Vertical",s[s.Horizontal=1]="Horizontal",s))(O||{}),C=(s=>(s[s.Disabled=0]="Disabled",s[s.Minimum=1]="Minimum",s[s.Maximum=2]="Maximum",s[s.Enabled=3]="Enabled",s))(C||{});let ce=re?20:8;const he=new X;function qe(s){ce=s,he.emit("onDidChangeGlobalSize",s)}class ue extends X{el;layoutProvider;orientation;size;hoverDelay=300;hoverDelayerFunc=e=>e.classList.add("sash-hover",D.hover);hoverDelayer=ze(this.hoverDelayerFunc,this.hoverDelay);_state=3;get state(){return this._state}set state(e){this._state!==e&&(this.el.classList.toggle(D.disabled,e===0),this.el.classList.toggle("sash-disabled",e===0),this.el.classList.toggle(D.minimum,e===1),this.el.classList.toggle("sash-minimum",e===1),this.el.classList.toggle(D.maximum,e===2),this.el.classList.toggle("sash-maximum",e===2),this._state=e,this.emit("enablementChange",e))}constructor(e,t,i){super(),this.el=document.createElement("div"),this.el.classList.add("sash",D.sash),this.el.dataset.testid="sash",e.append(this.el),Ke&&this.el.classList.add("sash-mac",D.mac),this.el.addEventListener("pointerdown",this.onPointerStart),this.el.addEventListener("dblclick",this.onPointerDoublePress),this.el.addEventListener("mouseenter",this.onMouseEnter),this.el.addEventListener("mouseleave",this.onMouseLeave),typeof i.size=="number"?(this.size=i.size,i.orientation===0?this.el.style.width=`${this.size}px`:this.el.style.height=`${this.size}px`):(this.size=ce,he.on("onDidChangeGlobalSize",r=>{this.size=r,this.layout()})),this.layoutProvider=t,this.orientation=i.orientation??0,this.orientation===1?(this.el.classList.add("sash-horizontal",D.horizontal),this.el.classList.remove("sash-vertical",D.vertical)):(this.el.classList.remove("sash-horizontal",D.horizontal),this.el.classList.add("sash-vertical",D.vertical)),i.skipInitialLayout||this.layout()}onPointerStart=e=>{const t=e.pageX,i=e.pageY,r={startX:t,currentX:t,startY:i,currentY:i};this.el.classList.add("sash-active",D.active),this.emit("start",r),this.el.setPointerCapture(e.pointerId);const l=a=>{a.preventDefault();const n={startX:t,currentX:a.pageX,startY:i,currentY:a.pageY};this.emit("change",n)},m=a=>{a.preventDefault(),this.el.classList.remove("sash-active",D.active),this.hoverDelayer.cancel(),this.emit("end"),this.el.releasePointerCapture(a.pointerId),globalThis.removeEventListener("pointermove",l),globalThis.removeEventListener("pointerup",m)};globalThis.addEventListener("pointermove",l),globalThis.addEventListener("pointerup",m)};onPointerDoublePress=()=>{this.emit("reset")};onMouseEnter=()=>{this.el.classList.contains(D.active)?(this.hoverDelayer.cancel(),this.el.classList.add("sash-hover",D.hover)):this.hoverDelayer(this.el)};onMouseLeave=()=>{this.hoverDelayer.cancel(),this.el.classList.remove("sash-hover",D.hover)};layout(){if(this.orientation===0){const e=this.layoutProvider;this.el.style.left=`${e.getVerticalSashLeft(this)-this.size/2}px`,e.getVerticalSashTop&&(this.el.style.top=`${e.getVerticalSashTop(this)}px`),e.getVerticalSashHeight&&(this.el.style.height=`${e.getVerticalSashHeight(this)}px`)}else{const e=this.layoutProvider;this.el.style.top=`${e.getHorizontalSashTop(this)-this.size/2}px`,e.getHorizontalSashLeft&&(this.el.style.left=`${e.getHorizontalSashLeft(this)}px`),e.getHorizontalSashWidth&&(this.el.style.width=`${e.getHorizontalSashWidth(this)}px`)}}dispose(){this.el.removeEventListener("pointerdown",this.onPointerStart),this.el.removeEventListener("dblclick",this.onPointerDoublePress),this.el.removeEventListener("mouseenter",this.onMouseEnter),this.el.removeEventListener("mouseleave",this.onMouseLeave),this.el.remove()}}const me={Distribute:{type:"distribute"},Split:s=>({type:"split",index:s}),Invisible:s=>({type:"invisible",cachedVisibleSize:s})};var U=(s=>(s[s.Normal=0]="Normal",s[s.Low=1]="Low",s[s.High=2]="High",s))(U||{});class fe{container;view;_size;_cachedVisibleSize=void 0;constructor(e,t,i){this.container=e,this.view=t,this.container.classList.add("split-view-view",A.splitViewView),this.container.dataset.testid="split-view-view",typeof i=="number"?(this._size=i,this._cachedVisibleSize=void 0,e.classList.add("split-view-view-visible")):(this._size=0,this._cachedVisibleSize=i.cachedVisibleSize)}set size(e){this._size=e}get size(){return this._size}get priority(){return this.view.priority}get snap(){return!!this.view.snap}get visible(){return this._cachedVisibleSize===void 0}setVisible(e,t){e!==this.visible&&(e?(this.size=M(this._cachedVisibleSize??0,this.view.minimumSize,this.view.maximumSize),this._cachedVisibleSize=void 0):(this._cachedVisibleSize=typeof t=="number"?t:this.size,this.size=0),this.container.classList.toggle("split-view-view-visible",e),this.view.setVisible&&this.view.setVisible(e))}get minimumSize(){return this.visible?this.view.minimumSize:0}get maximumSize(){return this.visible?this.view.maximumSize:0}get cachedVisibleSize(){return this._cachedVisibleSize}}class Je extends fe{layout(e){if(!this.visible){this.container.style.height="0px",this.container.style.top=`${e}px`,this.container.style.left="0px",this.container.style.width="100%";return}this.container.style.top=`${e}px`,this.container.style.height=`${this.size}px`,this.container.style.left="0px",this.container.style.width="100%",this.view.layout(this.size,e)}}class Qe extends fe{layout(e){if(!this.visible){this.container.style.width="0px",this.container.style.left=`${e}px`,this.container.style.top="0px",this.container.style.height="100%";return}this.container.style.left=`${e}px`,this.container.style.width=`${this.size}px`,this.container.style.top="0px",this.container.style.height="100%",this.view.layout(this.size,e)}}class pe extends X{onDidChange;onDidDragStart;onDidDragEnd;_orientation;get orientation(){return this._orientation}set orientation(e){this._orientation=e}sashContainer;size=0;contentSize=0;proportions=void 0;viewItems=[];sashItems=[];sashDragState;_proportionalLayout;get proportionalLayout(){return this._proportionalLayout}set proportionalLayout(e){this._proportionalLayout=e}getSashOrthogonalSize;_startSnappingEnabled=!0;get startSnappingEnabled(){return this._startSnappingEnabled}set startSnappingEnabled(e){this._startSnappingEnabled!==e&&(this._startSnappingEnabled=e,this.updateSashEnablement())}_endSnappingEnabled=!0;get endSnappingEnabled(){return this._endSnappingEnabled}set endSnappingEnabled(e){this._endSnappingEnabled!==e&&(this._endSnappingEnabled=e,this.updateSashEnablement())}constructor(e,t={},i,r,l){if(super(),this._orientation=t.orientation??O.Vertical,this._proportionalLayout=t.proportionalLayout??!0,this.getSashOrthogonalSize=t.getSashOrthogonalSize,i&&(this.onDidChange=i),r&&(this.onDidDragStart=r),l&&(this.onDidDragEnd=l),this.sashContainer=document.createElement("div"),this.sashContainer.classList.add("sash-container",A.sashContainer),e.prepend(this.sashContainer),t.descriptor){this.size=t.descriptor.size;for(const[m,a]of t.descriptor.views.entries()){const n=a.size,o=a.container,h=a.view;this.addView(o,h,n,m,!0)}this.contentSize=this.viewItems.reduce((m,a)=>m+a.size,0),this.saveProportions()}}addView(e,t,i,r=this.viewItems.length,l){let m;typeof i=="number"?m=i:i.type==="split"?m=this.getViewSize(i.index)/2:i.type==="invisible"?m={cachedVisibleSize:i.cachedVisibleSize}:m=t.minimumSize;const a=this.orientation===O.Vertical?new Je(e,t,m):new Qe(e,t,m);if(this.viewItems.splice(r,0,a),this.viewItems.length>1){const n=this.orientation===O.Vertical?new ue(this.sashContainer,{getHorizontalSashTop:c=>this.getSashPosition(c),getHorizontalSashWidth:this.getSashOrthogonalSize},{orientation:O.Horizontal}):new ue(this.sashContainer,{getVerticalSashLeft:c=>this.getSashPosition(c),getVerticalSashHeight:this.getSashOrthogonalSize},{orientation:O.Vertical}),o=this.orientation===O.Vertical?c=>({sash:n,start:c.startY,current:c.currentY}):c=>({sash:n,start:c.startX,current:c.currentX});n.on("start",c=>{this.emit("sashDragStart"),this.onSashStart(o(c));const f=this.viewItems.map(z=>z.size);this.onDidDragStart?.(f)}),n.on("change",c=>this.onSashChange(o(c))),n.on("end",()=>{this.emit("sashDragEnd");let c=this.sashItems.findIndex(z=>z.sash===n);if(c===-1){const z=n.el;z&&(c=this.sashItems.findIndex(v=>v.sash.el===z))}this.onSashEnd(c);const f=this.viewItems.map(z=>z.size);this.onDidDragEnd?.(f)}),n.on("reset",()=>{let c=this.sashItems.findIndex(p=>p.sash===n);if(c===-1){const p=n.el;p&&(c=this.sashItems.findIndex(V=>V.sash.el===p))}const f=j(c,-1,-1),z=j(c+1,this.viewItems.length),v=this.findFirstSnapIndex(f),I=this.findFirstSnapIndex(z);typeof v=="number"&&!this.viewItems[v].visible||typeof I=="number"&&!this.viewItems[I].visible||this.emit("sashreset",c)});const h={sash:n};this.sashItems.splice(r-1,0,h)}l||this.relayout(),!l&&typeof i!="number"&&i.type==="distribute"&&this.distributeViewSizes()}removeView(e,t){if(e<0||e>=this.viewItems.length)throw new Error("Index out of bounds");const r=this.viewItems.splice(e,1)[0].view;if(this.viewItems.length>0){const l=Math.max(e-1,0);this.sashItems.splice(l,1)[0].sash.dispose()}return this.relayout(),t&&t.type==="distribute"&&this.distributeViewSizes(),r}moveView(e,t,i){const r=this.getViewCachedVisibleSize(t),l=r===void 0?this.getViewSize(t):me.Invisible(r),m=this.removeView(t);this.addView(e,m,l,i)}getViewCachedVisibleSize(e){if(e<0||e>=this.viewItems.length)throw new Error("Index out of bounds");return this.viewItems[e].cachedVisibleSize}layout(e=this.size){if(this.viewItems.length===0)return;const t=Math.max(this.size,this.contentSize);if(this.size=e,this.proportions)for(let i=0;i<this.viewItems.length;i++){const r=this.viewItems[i];r&&this.proportions[i]!==void 0&&(r.size=M(Math.round(this.proportions[i]*e),r.minimumSize,r.maximumSize))}else{const i=j(0,this.viewItems.length),r=i.filter(m=>this.viewItems[m]&&this.viewItems[m].priority===1),l=i.filter(m=>this.viewItems[m]&&this.viewItems[m].priority===2);this.resize(this.viewItems.length-1,e-t,void 0,r,l)}this.distributeEmptySpace(),this.layoutViews()}resizeView(e,t){if(e<0||e>=this.viewItems.length)return;const i=j(0,this.viewItems.length).filter(a=>a!==e),r=[...i.filter(a=>this.viewItems[a].priority===1),e],l=i.filter(a=>this.viewItems[a].priority===2),m=this.viewItems[e];t=Math.round(t),t=M(t,m.minimumSize,Math.min(m.maximumSize,this.size)),m.size=t,this.relayout(r,l)}resizeViews(e){for(let[t,i]of e.entries()){const r=this.viewItems[t];i=Math.round(i),i=M(i,r.minimumSize,Math.min(r.maximumSize,this.size)),r.size=i}this.contentSize=this.viewItems.reduce((t,i)=>t+i.size,0),this.saveProportions(),this.layout(this.size)}getViewSize(e){return e<0||e>=this.viewItems.length?-1:this.viewItems[e].size}isViewVisible(e){if(e<0||e>=this.viewItems.length)throw new Error("Index out of bounds");return this.viewItems[e].visible}setViewVisible(e,t){if(e<0||e>=this.viewItems.length)throw new Error("Index out of bounds");this.viewItems[e].setVisible(t),this.emit("sashchange",e),this.distributeEmptySpace(),this.layoutViews(),this.saveProportions()}distributeViewSizes(){const e=[];let t=0;for(const a of this.viewItems)a.maximumSize-a.minimumSize>0&&(e.push(a),t+=a.size);const i=Math.floor(t/e.length);for(const a of e)a.size=M(i,a.minimumSize,a.maximumSize);const r=j(0,this.viewItems.length),l=r.filter(a=>this.viewItems[a].priority===1),m=r.filter(a=>this.viewItems[a].priority===2);this.relayout(l,m)}dispose(){for(const e of this.sashItems)e.sash.dispose();this.sashItems=[],this.viewItems=[],this.sashContainer&&this.sashContainer.parentElement&&this.sashContainer.remove()}onSashStart({sash:e,start:t,current:i}){let r=this.sashItems.findIndex(v=>v.sash===e);if(r===-1){const v=e.el;v&&(r=this.sashItems.findIndex(I=>I.sash.el===v))}const l=this.viewItems.map(v=>v.size),m=j(r,-1,-1),a=j(r+1,this.viewItems.length),n=this.getMinDelta(m,a,l),o=this.getMaxDelta(m,a,l);let h,c;const f=this.findFirstSnapIndex(m),z=this.findFirstSnapIndex(a);if(typeof f=="number"){const v=this.viewItems[f],I=Math.floor(v.minimumSize/2);h={index:f,limitDelta:v.visible?n-I:n+I,size:v.size}}if(typeof z=="number"){const v=this.viewItems[z],I=Math.floor(v.minimumSize/2);c={index:z,limitDelta:v.visible?o+I:o-I,size:v.size}}this.sashDragState={index:r,start:t,current:i,sizes:l,minDelta:n,maxDelta:o,snapBefore:h,snapAfter:c}}onSashChange({current:e}){const{index:t,start:i,sizes:r,minDelta:l,maxDelta:m,snapBefore:a,snapAfter:n}=this.sashDragState,o=e-i;this.resize(t,o,r,void 0,void 0,l,m,a,n),this.distributeEmptySpace(),this.layoutViews()}onSashEnd(e){this.emit("sashchange",e),this.sashDragState=void 0,this.saveProportions();const t=this.viewItems.map(i=>i.size);this.onDidChange?.(t)}getMinDelta(e,t,i){const r=e.reduce((m,a)=>m+(this.viewItems[a].minimumSize-i[a]),0),l=t.reduce((m,a)=>m+(i[a]-this.viewItems[a].maximumSize),0);return Math.max(r,l)}getMaxDelta(e,t,i){const r=e.reduce((m,a)=>m+(this.viewItems[a].maximumSize-i[a]),0),l=t.reduce((m,a)=>m+(i[a]-this.viewItems[a].minimumSize),0);return Math.min(l,r)}resize(e,t,i,r,l,m=Number.NEGATIVE_INFINITY,a=Number.POSITIVE_INFINITY,n,o){if(e<0||e>=this.viewItems.length||this.viewItems.length===0)return 0;const h=j(e,-1,-1),c=j(e+1,this.viewItems.length);if(l)for(const u of l)le(h,u),le(c,u);if(r)for(const u of r)q(h,u),q(c,u);const f=i??this.viewItems.map(u=>u?.size||0),z=h.map(u=>this.viewItems[u]),v=h.map(u=>f[u]),I=c.map(u=>this.viewItems[u]),p=c.map(u=>f[u]),V=h.reduce((u,w)=>u+(this.viewItems[w].minimumSize-f[w]),0),P=h.reduce((u,w)=>u+(this.viewItems[w].maximumSize-f[w]),0),x=c.length===0?Number.POSITIVE_INFINITY:c.reduce((u,w)=>u+(f[w]-this.viewItems[w].minimumSize),0),k=c.length===0?Number.NEGATIVE_INFINITY:c.reduce((u,w)=>u+(f[w]-this.viewItems[w].maximumSize),0),N=Math.max(V,k,m),Q=Math.min(x,P,a);let d=!1;if(n){const u=this.viewItems[n.index],w=t>=n.limitDelta;d=w!==u.visible,u.setVisible(w,n.size)}if(!d&&o){const u=this.viewItems[o.index],w=t<o.limitDelta;d=w!==u.visible,u.setVisible(w,o.size)}if(d)return this.resize(e,t,i,r,l,m,a);t=M(t,N,Q);for(let u=0,w=t;u<z.length;u++){const T=z[u];if(!T)continue;const S=M(v[u]+w,T.minimumSize,T.maximumSize),y=S-v[u];w-=y,T.size=S}for(let u=0,w=t;u<I.length;u++){const T=I[u];if(!T)continue;const S=M(p[u]-w,T.minimumSize,T.maximumSize),y=S-p[u];w+=y,T.size=S}return t}distributeEmptySpace(e){if(this.viewItems.length===0)return;const t=this.viewItems.reduce((o,h)=>o+h.size,0);let i=this.size-t;const r=j(0,this.viewItems.length),l=[],m=r.filter(o=>this.viewItems[o].priority===1),a=r.filter(o=>this.viewItems[o].priority===0),n=r.filter(o=>this.viewItems[o].priority===2);l.push(...n,...a,...m),typeof e=="number"&&q(l,e);for(let o=0;i!==0&&o<l.length;o++){const h=this.viewItems[l[o]];if(!h)continue;const c=M(h.size+i,h.minimumSize,h.maximumSize),f=c-h.size;i-=f,h.size=c}this.contentSize=this.viewItems.reduce((o,h)=>o+h.size,0)}layoutViews(){this.contentSize=this.viewItems.reduce((t,i)=>t+i.size,0);let e=0;for(const t of this.viewItems)t&&(t.layout(e),e+=t.size);for(const t of this.sashItems)t.sash.layout();this.updateSashEnablement()}saveProportions(){this.proportionalLayout&&this.contentSize>0&&(this.proportions=this.viewItems.map(e=>e.size/this.contentSize))}relayout(e,t){const i=this.viewItems.reduce((r,l)=>r+l.size,0);this.resize(this.viewItems.length-1,this.size-i,void 0,e,t,Number.NEGATIVE_INFINITY,Number.POSITIVE_INFINITY),this.distributeEmptySpace(),this.layoutViews(),this.saveProportions()}getSashPosition(e){let t=-1;for(let r=0;r<this.sashItems.length;r++)if(this.sashItems[r].sash===e){t=r;break}if(t===-1){const r=e.el||e;if(r){for(let l=0;l<this.sashItems.length;l++)if((this.sashItems[l].sash.el||this.sashItems[l].sash)===r){t=l;break}}}if(t===-1)return 0;let i=0;for(let r=0;r<=t;r++)this.viewItems[r]&&(i+=this.viewItems[r].size);return i}findFirstSnapIndex(e){for(const t of e){const i=this.viewItems[t];if(i.visible&&i.snap)return t}for(const t of e){const i=this.viewItems[t];if(i.visible&&i.maximumSize-i.minimumSize>0)return;if(!i.visible&&i.snap)return t}}updateSashEnablement(){let e=!1;const t=this.viewItems.map(n=>e=n.size-n.minimumSize>0||e);e=!1;const i=this.viewItems.map(n=>e=n.maximumSize-n.size>0||e),r=[...this.viewItems].toReversed();e=!1;const l=r.map(n=>e=n.size-n.minimumSize>0||e).toReversed();e=!1;const m=r.map(n=>e=n.maximumSize-n.size>0||e).toReversed();let a=0;for(let n=0;n<this.sashItems.length;n++){const{sash:o}=this.sashItems[n],h=this.viewItems[n];a+=h.size;const c=!(t[n]&&m[n+1]),f=!(i[n]&&l[n+1]);if(c&&f){const z=j(n,-1,-1),v=j(n+1,this.viewItems.length),I=this.findFirstSnapIndex(z),p=this.findFirstSnapIndex(v),V=typeof I=="number"&&!this.viewItems[I].visible,P=typeof p=="number"&&!this.viewItems[p].visible;V&&l[n]&&(a>0||this.startSnappingEnabled)?o.state=C.Minimum:P&&t[n]&&(a<this.contentSize||this.endSnappingEnabled)?o.state=C.Maximum:o.state=C.Disabled}else c&&!f?o.state=C.Minimum:!c&&f?o.state=C.Maximum:o.state=C.Enabled}}}class ${size;constructor(e){this.size=e}getPreferredSize(){return this.size}}class de{proportion;layoutService;constructor(e,t){this.proportion=e,this.layoutService=t}getPreferredSize(){return this.proportion*this.layoutService.getSize()}}class Y{getPreferredSize(){}}class J{minimumSize=0;maximumSize=Number.POSITIVE_INFINITY;element;priority;snap;layoutService;layoutStrategy;get preferredSize(){return this.layoutStrategy.getPreferredSize()}set preferredSize(e){if(typeof e=="number")this.layoutStrategy=new $(e);else if(typeof e=="string"){const t=e.trim();if(R(t,"%")){const i=Number(t.slice(0,-1))/100;this.layoutStrategy=new de(i,this.layoutService)}else if(R(t,"px")){const i=Number(t.slice(0,-2));this.layoutStrategy=new $(i)}else if(typeof Number.parseFloat(t)=="number"){const i=Number.parseFloat(t);this.layoutStrategy=new $(i)}else this.layoutStrategy=new Y}else this.layoutStrategy=new Y}constructor(e,t){if(this.layoutService=e,this.element=t.element,this.snap=typeof t.snap=="boolean"?t.snap:!1,this.minimumSize=this.snap?0:typeof t.minimumSize=="number"?t.minimumSize:30,this.maximumSize=typeof t.maximumSize=="number"?t.maximumSize:Number.POSITIVE_INFINITY,typeof t.preferredSize=="number")this.layoutStrategy=new $(t.preferredSize);else if(typeof t.preferredSize=="string"){const i=t.preferredSize.trim();if(R(i,"%")){const r=Number(i.slice(0,-1))/100;this.layoutStrategy=new de(r,this.layoutService)}else if(R(i,"px")){const r=Number(i.slice(0,-2));this.layoutStrategy=new $(r)}else if(typeof Number.parseFloat(i)=="number"){const r=Number.parseFloat(i);this.layoutStrategy=new $(r)}else this.layoutStrategy=new Y}else this.layoutStrategy=new Y;this.priority=t.priority??U.Normal}layout(e){}}function ve(s){const e=M(s,4,20),t=M(s,1,8);document.documentElement.style.setProperty("--sash-size",`${e}px`),document.documentElement.style.setProperty("--sash-hover-size",`${t}px`),qe(e)}const Ze=["id"],et=((s,e)=>{const t=s.__vccOpts||s;for(const[i,r]of e)t[i]=r;return t})(g.defineComponent({__name:"Allotment",props:{className:{default:""},defaultSizes:{},id:{},maxSize:{default:1/0},minSize:{default:30},proportionalLayout:{type:Boolean,default:!0},separator:{type:Boolean,default:!0},snap:{type:Boolean,default:!1},sizes:{},vertical:{type:Boolean,default:!1}},emits:["change","reset","visibleChange","dragStart","dragEnd"],setup(s,{expose:e,emit:t}){const i=s,r=t,l=g.ref(),m=g.ref(),a=g.ref(!1),n=g.ref(null),o=g.reactive(new Map),h=g.reactive(new Map),c=g.ref(new oe),f=g.ref([]),z=g.ref([]),v=g.ref(null),I=g.useSlots();g.provide("allotment",{registerPane:(d,u,w)=>{o.set(d,u),h.set(d,w),a.value&&g.nextTick(()=>{N()})},unregisterPane:d=>{o.delete(d),h.delete(d)},registerNonPane:(d,u)=>{o.set(d,u),h.set(d,{})}});const p=g.computed(()=>{const d=I.default?.({})||[],u=w=>{const T=[];for(const S of w)Array.isArray(S.children)?T.push(...u(S.children)):S.type&&T.push(S);return T};return u(d)});function V(d){const u=f.value?.[d];return typeof u?.preferredSize!="number"?!1:(n.value?.resizeView(d,Math.round(u.preferredSize)),!0)}function P(){if(r("reset"),!!n.value){n.value.distributeViewSizes();for(let d=0;d<f.value.length;d++)V(d)}}function x(d){n.value?.resizeViews(d)}e({reset:P,resize:x});function k(){if(!l.value)return;let d=!0;i.defaultSizes&&o.size!==i.defaultSizes.length&&(d=!1,console.warn(`Expected ${i.defaultSizes.length} children based on defaultSizes but found ${o.size}`));const u=i.vertical?l.value.clientHeight:l.value.clientWidth;c.value.setSize(u);let w=i.defaultSizes;if(!i.defaultSizes&&o.size>0){const S=Math.floor(u/o.size);w=Array.from({length:o.size},()=>S),w[w.length-1]+=u-S*o.size,d=!0,z.value=p.value.map(y=>y.key)}else if(i.defaultSizes){const S=i.defaultSizes.reduce((y,b)=>y+b,0);if(u>0&&S>0&&Math.abs(u-S)>1){const y=u/S;w=i.defaultSizes.map(b=>Math.round(b*y))}z.value=p.value.map(y=>y.key)}f.value=[];const T={orientation:i.vertical?O.Vertical:O.Horizontal,proportionalLayout:i.proportionalLayout,...d&&w&&{descriptor:{size:w.reduce((S,y)=>S+y,0),views:w.map((S,y)=>{const _=[...o.keys()][y],E=h.get(_),K=new J(c.value,{element:document.createElement("div"),minimumSize:E?.minSize??i.minSize,maximumSize:E?.maxSize??i.maxSize,priority:E?.priority??U.Normal,...E?.preferredSize&&{preferredSize:E?.preferredSize},snap:E?.snap??i.snap});return f.value.push(K),{container:[...o.values()][y],size:S,view:K}})}}};if(n.value=new pe(l.value,T,S=>r("change",S),S=>r("dragStart",S),S=>r("dragEnd",S)),n.value.on("sashDragStart",()=>{l.value?.classList.add("split-view-sash-dragging")}),n.value.on("sashDragEnd",()=>{l.value?.classList.remove("split-view-sash-dragging")}),n.value.on("sashchange",S=>{if(n.value){const y=p.value.map(b=>b.key);for(const[b,_]of y.entries()){const E=h.get(_);E?.visible!==void 0&&E.visible!==n.value.isViewVisible(b)&&r("visibleChange",b,n.value.isViewVisible(b))}}}),n.value?.on("sashreset",S=>{r("reset"),!V(S)&&(V(S+1)||n.value?.distributeViewSizes())}),u>0){n.value.layout(u);for(let S=0;S<f.value.length;S++)V(S)}}function N(){if(!a.value||!n.value)return;const d=p.value.map(y=>y.key),u=[...z.value],w=d.filter(y=>!z.value.includes(y)),T=d.filter(y=>z.value.includes(y)),S=z.value.map((y,b)=>({key:y,index:b,shouldExit:!d.includes(y)}));for(let y=S.length-1;y>=0;y--)S[y].shouldExit&&(n.value.removeView(S[y].index),u.splice(S[y].index,1),f.value.splice(S[y].index,1));for(const y of w){const b=h.get(y),_=new J(c.value,{element:document.createElement("div"),minimumSize:b?.minSize??i.minSize,maximumSize:b?.maxSize??i.maxSize,priority:b?.priority??U.Normal,...b?.preferredSize&&{preferredSize:b?.preferredSize},snap:b?.snap??i.snap}),E=d.indexOf(y);n.value.addView(o.get(y),_,me.Distribute,E),u.splice(E,0,y),f.value.splice(E,0,_)}for(;!Ye(d,u);)for(const[y,b]of d.entries()){const _=u.indexOf(b);if(_!==y){n.value.moveView(o.get(b),_,y);const E=u[_];u.splice(_,1),u.splice(y,0,E);const K=f.value[_];f.value.splice(_,1),f.value.splice(y,0,K);break}}for(const y of[...w,...T]){const b=h.get(y),_=d.indexOf(y);if(b){b.visible!==void 0&&n.value.isViewVisible(_)!==b.visible&&n.value.setViewVisible(_,b.visible),b.preferredSize!==void 0&&f.value[_].preferredSize!==b.preferredSize&&(f.value[_].preferredSize=b.preferredSize,V(_));let E=!1;b.minSize!==void 0&&f.value[_].minimumSize!==b.minSize&&(f.value[_].minimumSize=b.minSize,E=!0),b.maxSize!==void 0&&f.value[_].maximumSize!==b.maxSize&&(f.value[_].maximumSize=b.maxSize,E=!0),E&&n.value.layout()}}(w.length>0||S.some(y=>y.shouldExit))&&(z.value=d)}function Q(){l.value&&(v.value=new ResizeObserver(()=>{if(l.value){const d=i.vertical?l.value.clientHeight:l.value.clientWidth;d>0&&(n.value?.layout(d),c.value.setSize(d),a.value||(a.value=!0))}}),v.value.observe(l.value))}return g.onMounted(()=>{re&&ve(20),g.nextTick(()=>{k(),Q(),setTimeout(()=>{if(l.value&&n.value){const d=i.vertical?l.value.clientHeight:l.value.clientWidth;d>0&&n.value.layout(d)}},50)})}),g.watch(p,()=>{g.nextTick(()=>{N()})},{deep:!0}),g.watch(()=>i.vertical,d=>{n.value&&(n.value.orientation=d?O.Vertical:O.Horizontal,n.value.layout())}),g.watch(()=>i.proportionalLayout,d=>{n.value&&(n.value.proportionalLayout=d)}),g.onUnmounted(()=>{v.value?.disconnect(),n.value?.dispose()}),(d,u)=>(g.openBlock(),g.createElementBlock("div",{id:d.id,ref_key:"containerRef",ref:l,class:g.normalizeClass(["split-view",[d.vertical?"split-view-vertical":"split-view-horizontal",{"split-view-separator-border":d.separator},g.unref(A).splitView,d.vertical?g.unref(A).vertical:g.unref(A).horizontal,{[g.unref(A).separatorBorder]:d.separator},d.className]])},[g.createElementVNode("div",{ref_key:"splitViewContainerRef",ref:m,class:g.normalizeClass(["split-view-container",[g.unref(A).splitViewContainer]])},[g.renderSlot(d.$slots,"default",{},void 0,!0)],2)],10,Ze))}}),[["__scopeId","data-v-e77a1ca4"]]),tt=g.defineComponent({__name:"Pane",props:{className:{default:""},maxSize:{},minSize:{},snap:{type:Boolean,default:!1},preferredSize:{},priority:{},visible:{type:Boolean,default:!0}},setup(s,{expose:e}){const t=s,i=g.ref(),r=g.getCurrentInstance(),l=g.inject("allotment");function m(){return r?.vnode.key||`pane-${Math.random().toString(36).slice(2,11)}`}const a=m();return g.onMounted(()=>{l&&i.value&&l.registerPane(a,i.value,{minSize:t.minSize,maxSize:t.maxSize,preferredSize:t.preferredSize,priority:t.priority,snap:t.snap,visible:t.visible})}),g.watch(()=>t,n=>{l&&i.value&&l.registerPane(a,i.value,{minSize:n.minSize,maxSize:n.maxSize,preferredSize:n.preferredSize,priority:n.priority,snap:n.snap,visible:n.visible})},{deep:!0}),g.onUnmounted(()=>{l&&l.unregisterPane(a)}),e({element:i}),(n,o)=>(g.openBlock(),g.createElementBlock("div",{ref_key:"paneRef",ref:i,class:g.normalizeClass(["split-view-view",[n.visible&&"split-view-view-visible",g.unref(A).splitViewView,n.className]])},[g.renderSlot(n.$slots,"default")],2))}});L.Allotment=et,L.LayoutPriority=U,L.LayoutService=oe,L.Orientation=O,L.Pane=tt,L.PaneView=J,L.SplitView=pe,L.setSashSize=ve,Object.defineProperty(L,Symbol.toStringTag,{value:"Module"})});