regular-layout 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
- var b={type:"split-panel",orientation:"horizontal",sizes:[],children:[]};var y=Object.freeze({CUSTOM_EVENT_NAME_PREFIX:"regular-layout",CHILD_ATTRIBUTE_NAME:"name",MIN_DRAG_DISTANCE:10,SHOULD_ROUND:!1,OVERLAY_CLASSNAME:"overlay",MINIMUM_REDISTRIBUTION_SIZE_THRESHOLD:.15,SPLIT_EDGE_TOLERANCE:.25,SPLIT_ROOT_EDGE_TOLERANCE:.01,GRID_TRACK_COLLAPSE_TOLERANCE:.001,OVERLAY_DEFAULT:"absolute",GRID_DIVIDER_SIZE:6,GRID_DIVIDER_CHECK_TARGET:!0});function H(r,t,e){return(t.length===0||Math.abs(e-t[t.length-1])>r.GRID_TRACK_COLLAPSE_TOLERANCE)&&t.push(e),t}function V(r,t){return t.sort((n,o)=>n-o).reduce(H.bind(void 0,r),[])}function C(r,t,e,n,o){if(r.type==="child-panel")return[e,n];let i=[e,n];if(r.orientation===t){let s=e,l=n-e;for(let c=0;c<r.children.length;c++){let h=r.sizes[c],d=s+h*l;i.push(...C(r.children[c],t,s,d,o)),s=d}}else for(let s of r.children)i.push(...C(s,t,e,n,o));return V(o,i)}function R(r,t,e){let n=t.findIndex(o=>Math.abs(o-e)<r.GRID_TRACK_COLLAPSE_TOLERANCE);return n===-1?0:n}function O(r,t,e,n,o,i,s,l){if(r.type==="child-panel"){let m=r.selected??0;return[{child:r.child[m],colStart:R(l,t,n),colEnd:R(l,t,o),rowStart:R(l,e,i),rowEnd:R(l,e,s)}]}let{children:c,sizes:h,orientation:d}=r,a=d==="horizontal",u=a?n:i,p=a?o-n:s-i,f=[];for(let m=0;m<c.length;m++){let E=u+h[m]*p;a?f.push(...O(c[m],t,e,u,E,i,s,l)):f.push(...O(c[m],t,e,n,o,u,E,l)),u=E}return f}var x=(r,t)=>`:host ::slotted(*){display:none}:host{display:grid;grid-template-rows:${r};grid-template-columns:${t}}`,A=(r,t,e,n)=>`:host ::slotted([${r.CHILD_ATTRIBUTE_NAME}="${t}"]){display:flex;grid-column:${n};grid-row:${e}}`;function T(r,t,e=y){if(r.type==="child-panel"){let a=r.selected??0;return[x("100%","100%"),A(e,r.child[a],"1","1")].join(`
2
- `)}let n=a=>a.slice(0,-1).map((p,f)=>a[f+1]-p).map(p=>`${e.SHOULD_ROUND?Math.round(p*100):p*100}fr`).join(" "),o=C(r,"horizontal",0,1,e),i=n(o),s=C(r,"vertical",0,1,e),l=n(s),c=(a,u)=>u-a===1?`${a+1}`:`${a+1} / ${u+1}`,h=O(r,o,s,0,1,0,1,e),d=[x(l,i)];for(let a of h){let u=c(a.colStart,a.colEnd),p=c(a.rowStart,a.rowEnd);d.push(A(e,a.child,p,u)),a.child===t?.[1]&&(d.push(A(e,t[0],p,u)),d.push(`:host ::slotted([${e.CHILD_ATTRIBUTE_NAME}=${t[0]}]){z-index:1}`))}return d.join(`
3
- `)}var F={row_start:0,row_end:1,col_start:0,col_end:1};function L(r,t,e,n=null){return U(r,t,e,n)}function U(r,t,e,n,o=null,i=structuredClone(F),s=[]){if(r<0||t<0||r>1||t>1)return null;if(e.type==="child-panel"){let f=e.selected??0,m=i.col_end-i.col_start,E=i.row_end-i.row_start;return{type:"layout-path",layout:void 0,slot:e.child[f],path:s,view_window:i,is_edge:!1,column:r,row:t,column_offset:(r-i.col_start)/m,row_offset:(t-i.row_start)/E,orientation:o||"horizontal"}}let l=e.orientation==="vertical",c=l?t:r,h=l?"row_start":"col_start",d=l?"row_end":"col_end",a=l?n?.rect?.height:n?.rect?.width,u=i[h],p=i[d]-i[h];for(let f=0;f<e.children.length;f++){let m=u+p*e.sizes[f];if(n&&a){let E=n.size/a;if(Math.abs(c-m)<E)return{path:[...s,f],type:e.orientation,view_window:{...i,[h]:u,[d]:m}}}if(c>=u&&c<m)return U(r,t,e.children[f],n,e.orientation,{...i,[h]:u,[d]:m},[...s,f]);u=m}return null}function v(r,t){if(r.type==="child-panel"){if(r.child.includes(t)){let s=r.child.filter(l=>l!==t);return s.length===0?structuredClone(b):{type:"child-panel",child:s}}return structuredClone(r)}let e=structuredClone(r),n=e.children.findIndex(s=>s.type==="child-panel"?s.child.includes(t):!1);if(n!==-1){let s=e.children[n];if(s.child.length===1){let l=e.children.filter((h,d)=>d!==n),c=Y(e.sizes,n);if(l.length===1)return l[0];e.children=l,e.sizes=c}else s.child.splice(s.child.indexOf(t),1),s.selected&&s.selected>=s.child.length&&s.selected--;return e}let o=!1,i=e.children.map(s=>{if(s.type==="split-panel"){let l=v(s,t);return l!==s&&(o=!0),l}return s});return o&&(e.children=i),e}function Y(r,t){let e=[],n=r[t],o=0;for(let i=0;i<r.length;i++)i!==t&&(o+=r[i]);for(let i=0;i<r.length;i++)if(i!==t){let s=r[i]/o;e.push(r[i]+n*s)}return e}function _(r,t,e,n){let o=a=>({type:"child-panel",child:[a]});if(e.length===0){if(r.type==="child-panel")return{type:"child-panel",child:[t,...r.child]};if(n)return{type:"split-panel",orientation:n,children:[o(t),r],sizes:[.5,.5]};{let a=[...r.children,o(t)],u=[...r.sizes,1/(a.length-1)];return{...r,children:a,sizes:I(u)}}}let[i,...s]=e;if(n&&s.length===0){if(r.type==="split-panel"&&r.orientation===n){let u=[...r.children];u.splice(i,0,o(t));let p=[...r.sizes];return p.splice(i,0,1/(u.length-1)),{...r,children:u,sizes:I(p)}}let a=i===0?[o(t),r]:[r,o(t)];return{type:"split-panel",orientation:n,children:a,sizes:[.5,.5]}}if(r.type==="child-panel"){if(s.length===0&&n===void 0&&i>=0&&i<=r.child.length){let u=[...r.child];return u.splice(i,0,t),{...r,child:u}}return _({type:"split-panel",orientation:n||"horizontal",children:[r],sizes:[1]},t,e,n)}if(s.length===0||i===r.children.length){if(n&&r.children[i]){let p={type:"split-panel",orientation:n,children:[o(t),r.children[i]],sizes:[.5,.5]},f=[...r.children];return f[i]=p,{...r,children:f,sizes:I(r.sizes)}}let a=[...r.children];a.splice(i,0,o(t));let u=[...r.sizes];return u.splice(i,0,1/(a.length-1)),{...r,children:a,sizes:I(u)}}let l=r.children[i],c=l.type==="child-panel"&&s.length>0&&n!==void 0?r.orientation==="horizontal"?"vertical":"horizontal":n,h=_(l,t,s,c),d=[...r.children];return d[i]=h,{...r,children:d}}function I(r){let t=r.reduce((e,n)=>e+n,0);return r.map(e=>e/t)}function M(r,t,e,n=y){let o=structuredClone(r),i=o,s={horizontal:e,vertical:e};for(let l=0;l<t.length-1;l++)i.type==="split-panel"&&(s[i.orientation]/=i.sizes[t[l]],i=i.children[t[l]]);if(i.type==="split-panel"){let l=s[i.orientation],c=t[t.length-1];c<i.sizes.length-1&&(i.sizes=$(n,i.sizes,c,l))}return o}function $(r,t,e,n){let o=[...t],i=0;for(let l=0;l<=e;l++)i+=t[l];let s=0;for(let l=e+1;l<t.length;l++)s+=t[l];n=Math.sign(n)*Math.min(Math.abs(n),(1-r.MINIMUM_REDISTRIBUTION_SIZE_THRESHOLD)*(n>0?i:s));for(let l=0;l<=e;l++){let c=t[l]/i;o[l]=t[l]-n*c}for(let l=e+1;l<t.length;l++){let c=t[l]/s;o[l]=t[l]+n*c}return o}function G(r,t,e,n,o=y){if(!n)return`:host ::slotted([${o.CHILD_ATTRIBUTE_NAME}="${r}"]){display:none;}`;let{view_window:{row_start:i,row_end:s,col_start:l,col_end:c}}=n,h=t.height-parseFloat(e.paddingTop)-parseFloat(e.paddingBottom),d=t.width-parseFloat(e.paddingLeft)-parseFloat(e.paddingRight),a=i*h+parseFloat(e.paddingTop),u=l*d+parseFloat(e.paddingLeft),p=(s-i)*h,f=(c-l)*d,m=`display:flex;position:absolute!important;z-index:1;top:${a}px;left:${u}px;height:${p}px;width:${f}px;`;return`::slotted([${o.CHILD_ATTRIBUTE_NAME}="${r}"]){${m}}`}function z(r,t,e,n,o,i,s=y){if(r<s.SPLIT_ROOT_EDGE_TOLERANCE)return D(e,n,o,[0],!0,"horizontal");if(r>1-s.SPLIT_ROOT_EDGE_TOLERANCE)return D(e,n,o,o.path.length>0?o.path:[1],!1,"horizontal");if(t<s.SPLIT_ROOT_EDGE_TOLERANCE)return D(e,n,o,[0],!0,"vertical");if(t>1-s.SPLIT_ROOT_EDGE_TOLERANCE)return D(e,n,o,o.path.length>0?o.path:[1],!1,"vertical");let l=o.column_offset<s.SPLIT_EDGE_TOLERANCE||o.column_offset>1-s.SPLIT_EDGE_TOLERANCE,c=o.row_offset<s.SPLIT_EDGE_TOLERANCE||o.row_offset>1-s.SPLIT_EDGE_TOLERANCE;if(l&&c){let h=Math.abs(o.column_offset-.5),d=Math.abs(o.row_offset-.5),a=(i?.width||1)*(o.view_window.col_end-o.view_window.col_start),u=(i?.height||1)*(o.view_window.row_end-o.view_window.row_start),p=h*a>d*u;return P(e,n,o,p?o.column_offset<s.SPLIT_EDGE_TOLERANCE:o.row_offset<s.SPLIT_EDGE_TOLERANCE,p?"horizontal":"vertical")}return l?P(e,n,o,o.column_offset<s.SPLIT_EDGE_TOLERANCE,"horizontal"):c?P(e,n,o,o.row_offset<s.SPLIT_EDGE_TOLERANCE,"vertical"):{...o,path:[...o.path,0]}}function D(r,t,e,n,o,i){return P(r,t,{...e,path:n,orientation:i},o,i)}function P(r,t,e,n,o){let i;if(e.orientation===o)if(e.path.length===0)i=[n?0:1];else{let c=e.path[e.path.length-1];i=[...e.path.slice(0,-1),n?c:c+1]}else i=[...e.path,n?0:1];let s=_(r,t,i,o),l=B(s,i);return{...e,path:i,slot:e.slot,is_edge:!0,orientation:o,view_window:l}}function B(r,t){let e={row_start:0,row_end:1,col_start:0,col_end:1},n=r;for(let o of t){if(n.type==="child-panel")break;let i=Math.min(o,n.children.length-1),s=n.orientation==="vertical",l=s?"row_start":"col_start",c=s?"row_end":"col_end",h=e[c]-e[l],d=n.sizes.slice(0,i).reduce((a,u)=>a+u*h,e[l]);e={...e,[l]:d,[c]:d+h*n.sizes[i]},n=n.children[i]}return e}function N(r){if(r.type==="child-panel")return r.selected=r.selected||0,r;let t=[],e=[];for(let n=0;n<r.children.length;n++){let o=r.children[n],i=r.sizes[n],s=N(o);if(s.type==="split-panel"&&s.orientation===r.orientation)for(let l=0;l<s.children.length;l++)t.push(s.children[l]),e.push(s.sizes[l]*i);else t.push(s),e.push(i)}return t.length===1?t[0]:{type:"split-panel",orientation:r.orientation,children:t,sizes:e}}var g=class extends HTMLElement{s;i;c;u;h;l;p;t;constructor(){super(),this.t=y,this.i=structuredClone(b),this.s=this.attachShadow({mode:"open"}),this.s.innerHTML="<slot></slot>",this.c=new CSSStyleSheet,this.u=new CSSStyleSheet,this.l=!1,this.s.adoptedStyleSheets=[this.c,this.u]}connectedCallback(){this.addEventListener("pointerdown",this.onPointerDown),this.addEventListener("pointerup",this.onPointerUp),this.addEventListener("pointermove",this.onPointerMove)}disconnectedCallback(){this.removeEventListener("pointerdown",this.onPointerDown),this.removeEventListener("pointerup",this.onPointerUp),this.removeEventListener("pointermove",this.onPointerMove)}calculateIntersect=(t,e,n=!1)=>{let[o,i,s]=this.relativeCoordinates(t,e,!1),l=L(o,i,this.i,n?{rect:s,size:this.t.GRID_DIVIDER_SIZE}:null);return l?.type==="layout-path"?{...l,layout:this.save()}:null};setOverlayState=(t,e,{slot:n},o=this.t.OVERLAY_CLASSNAME,i=this.t.OVERLAY_DEFAULT)=>{let s=v(this.i,n);Array.from(this.children).find(f=>f.getAttribute(this.t.CHILD_ATTRIBUTE_NAME)===n)?.classList.add(o);let[l,c,h,d]=this.relativeCoordinates(t,e,!1),a=L(l,c,s);if(a&&(a=z(l,c,s,n,a,h,this.t)),i==="grid"&&a){let f=[n,a?.slot],m=T(s,f,this.t);this.c.replaceSync(m)}else if(i==="absolute"){let f=T(s,void 0,this.t),m=G(n,h,d,a,this.t);this.c.replaceSync([f,m].join(`
4
- `))}let u=`${this.t.CUSTOM_EVENT_NAME_PREFIX}-before-update`,p=new CustomEvent(u,{detail:s});this.dispatchEvent(p)};clearOverlayState=(t,e,n,o=this.t.OVERLAY_CLASSNAME)=>{let i=this.i;i=v(i,n.slot),Array.from(this.children).find(p=>p.getAttribute(this.t.CHILD_ATTRIBUTE_NAME)===n.slot)?.classList.remove(o);let[s,l,c]=this.relativeCoordinates(t,e,!1),h=L(s,l,i);h&&(h=z(s,l,i,n.slot,h,c,this.t));let{path:d,orientation:a}=h||n,u=h?_(i,n.slot,d,h?.is_edge?a:void 0):n.layout;this.restore(u)};insertPanel=(t,e=[],n)=>{let o;typeof n=="boolean"&&n?o="horizontal":typeof n=="string"&&(o=n),this.restore(_(this.i,t,e,o))};removePanel=t=>{this.restore(v(this.i,t))};getPanel=(t,e=this.i)=>{if(e.type==="child-panel")return e.child.includes(t)?e:null;for(let n of e.children){let o=this.getPanel(t,n);if(o)return o}return null};clear=()=>{this.restore(b)};restore=(t,e=!1)=>{this.i=e?t:N(t);let n=T(this.i,void 0,this.t);this.c.replaceSync(n);let o=`${this.t.CUSTOM_EVENT_NAME_PREFIX}-update`,i=new CustomEvent(o,{detail:this.i});this.dispatchEvent(i)};save=()=>structuredClone(this.i);restorePhysics(t){this.t=Object.freeze({...this.t,...t})}savePhysics(){return this.t}relativeCoordinates=(t,e,n=!0)=>{(n||!this.p)&&(this.p={box:this.getBoundingClientRect(),style:getComputedStyle(this)});let o=this.p.box,i=this.p.style,s=(t-o.left-parseFloat(i.paddingLeft))/(o.width-parseFloat(i.paddingLeft)-parseFloat(i.paddingRight)),l=(e-o.top-parseFloat(i.paddingTop))/(o.height-parseFloat(i.paddingTop)-parseFloat(i.paddingBottom));return[s,l,o,i]};onPointerDown=t=>{if(!this.t.GRID_DIVIDER_CHECK_TARGET||t.target===this){let[e,n,o]=this.relativeCoordinates(t.clientX,t.clientY),i=L(e,n,this.i,{rect:o,size:this.t.GRID_DIVIDER_SIZE});i&&i.type!=="layout-path"&&(this.h=[i,e,n],this.setPointerCapture(t.pointerId),t.preventDefault())}};onPointerMove=t=>{if(this.h){let[s,l]=this.relativeCoordinates(t.clientX,t.clientY,!1),[{path:c,type:h},d,a]=this.h,u=h==="horizontal"?d-s:a-l,p=M(this.i,c,u);this.c.replaceSync(T(p,void 0,this.t))}if(this.t.GRID_DIVIDER_CHECK_TARGET&&t.target!==this){this.l&&(this.l=!1,this.u.replaceSync(""));return}let[e,n,o]=this.relativeCoordinates(t.clientX,t.clientY,!1),i=L(e,n,this.i,{rect:o,size:this.t.GRID_DIVIDER_SIZE});i?.type==="vertical"?(this.u.replaceSync(":host{cursor:row-resize"),this.l=!0):i?.type==="horizontal"?(this.u.replaceSync(":host{cursor:col-resize"),this.l=!0):this.l&&(this.l=!1,this.u.replaceSync(""))};onPointerUp=t=>{if(this.h){this.releasePointerCapture(t.pointerId);let[e,n]=this.relativeCoordinates(t.clientX,t.clientY,!1),[{path:o,type:i},s,l]=this.h,c=i==="horizontal"?s-e:l-n,h=M(this.i,o,c);this.restore(h,!0),this.h=void 0}}};var k=`
1
+ var b={type:"split-layout",orientation:"horizontal",sizes:[],children:[]};var E=Object.freeze({CUSTOM_EVENT_NAME_PREFIX:"regular-layout",CHILD_ATTRIBUTE_NAME:"name",MIN_DRAG_DISTANCE:10,SHOULD_ROUND:!1,OVERLAY_CLASSNAME:"overlay",MINIMUM_REDISTRIBUTION_SIZE_THRESHOLD:.15,SPLIT_EDGE_TOLERANCE:.25,SPLIT_ROOT_EDGE_TOLERANCE:.01,GRID_TRACK_COLLAPSE_TOLERANCE:.001,OVERLAY_DEFAULT:"absolute",GRID_DIVIDER_SIZE:6,GRID_DIVIDER_CHECK_TARGET:!0});function F(r,e,t){return(e.length===0||Math.abs(t-e[e.length-1])>r.GRID_TRACK_COLLAPSE_TOLERANCE)&&e.push(t),e}function $(r,e){return e.sort((o,i)=>o-i).reduce(F.bind(void 0,r),[])}function C(r,e,t,o,i){if(r.type==="tab-layout")return[t,o];let n=[t,o];if(r.orientation===e){let s=t,a=o-t;for(let u=0;u<r.children.length;u++){let d=r.sizes[u],h=s+d*a;n.push(...C(r.children[u],e,s,h,i)),s=h}}else for(let s of r.children)n.push(...C(s,e,t,o,i));return $(i,n)}function S(r,e,t){let o=e.findIndex(i=>Math.abs(i-t)<r.GRID_TRACK_COLLAPSE_TOLERANCE);return o===-1?0:o}function M(r,e,t,o,i,n,s,a){if(r.type==="tab-layout"){let p=r.selected??0;return[{child:r.tabs[p],colStart:S(a,e,o),colEnd:S(a,e,i),rowStart:S(a,t,n),rowEnd:S(a,t,s)}]}let{children:u,sizes:d,orientation:h}=r,l=h==="horizontal",c=l?o:n,y=l?i-o:s-n,f=[];for(let p=0;p<u.length;p++){let m=c+d[p]*y;l?f.push(...M(u[p],e,t,c,m,n,s,a)):f.push(...M(u[p],e,t,o,i,c,m,a)),c=m}return f}var x=(r,e)=>`:host ::slotted(*){display:none}:host{display:grid;grid-template-rows:${r};grid-template-columns:${e}}`,A=(r,e,t,o)=>`:host ::slotted([${r.CHILD_ATTRIBUTE_NAME}="${e}"]){display:flex;grid-column:${o};grid-row:${t}}`;function v(r,e,t=E){if(r.type==="tab-layout"){let l=r.selected??0;return[x("100%","100%"),A(t,r.tabs[l],"1","1")].join(`
2
+ `)}let o=l=>l.slice(0,-1).map((y,f)=>l[f+1]-y).map(y=>`${t.SHOULD_ROUND?Math.round(y*100):y*100}fr`).join(" "),i=C(r,"horizontal",0,1,t),n=o(i),s=C(r,"vertical",0,1,t),a=o(s),u=(l,c)=>c-l===1?`${l+1}`:`${l+1} / ${c+1}`,d=M(r,i,s,0,1,0,1,t),h=[x(a,n)];for(let l of d){let c=u(l.colStart,l.colEnd),y=u(l.rowStart,l.rowEnd);h.push(A(t,l.child,y,c)),l.child===e?.[1]&&(h.push(A(t,e[0],y,c)),h.push(`:host ::slotted([${t.CHILD_ATTRIBUTE_NAME}=${e[0]}]){z-index:1}`))}return h.join(`
3
+ `)}var Y={row_start:0,row_end:1,col_start:0,col_end:1};function _(r,e,t,o=null){return U(r,e,t,o)}function U(r,e,t,o,i=null,n=structuredClone(Y),s=[]){if(r<0||e<0||r>1||e>1)return null;if(t.type==="tab-layout"){let f=t.selected??0,p=n.col_end-n.col_start,m=n.row_end-n.row_start;return{type:"layout-path",layout:t,slot:t.tabs[f],path:s,view_window:n,is_edge:!1,column:r,row:e,column_offset:(r-n.col_start)/p,row_offset:(e-n.row_start)/m,orientation:i||"horizontal"}}let a=t.orientation==="vertical",u=a?e:r,d=a?"row_start":"col_start",h=a?"row_end":"col_end",l=a?o?.rect?.height:o?.rect?.width,c=n[d],y=n[h]-n[d];for(let f=0;f<t.children.length;f++){let p=c+y*t.sizes[f];if(o&&l){let m=o.size/l;if(Math.abs(u-p)<m)return{path:[...s,f],type:t.orientation,view_window:{...n,[d]:c,[h]:p}}}if(u>=c&&u<p)return U(r,e,t.children[f],o,t.orientation,{...n,[d]:c,[h]:p},[...s,f]);c=p}return null}function T(r,e){if(r.type==="tab-layout"){if(r.tabs.includes(e)){let s=r.tabs.filter(a=>a!==e);return s.length===0?structuredClone(b):{type:"tab-layout",tabs:s}}return structuredClone(r)}let t=structuredClone(r),o=t.children.findIndex(s=>s.type==="tab-layout"?s.tabs.includes(e):!1);if(o!==-1){let s=t.children[o];if(s.tabs.length===1){let a=t.children.filter((d,h)=>h!==o),u=k(t.sizes,o);if(a.length===1)return a[0];t.children=a,t.sizes=u}else s.tabs.splice(s.tabs.indexOf(e),1),s.selected&&s.selected>=s.tabs.length&&s.selected--;return t}let i=!1,n=t.children.map(s=>{if(s.type==="split-layout"){let a=T(s,e);return a!==s&&(i=!0),a}return s});return i&&(t.children=n),t}function k(r,e){let t=[],o=r[e],i=0;for(let n=0;n<r.length;n++)n!==e&&(i+=r[n]);for(let n=0;n<r.length;n++)if(n!==e){let s=r[n]/i;t.push(r[n]+o*s)}return t}function L(r,e,t,o){let i=l=>({type:"tab-layout",tabs:[l]});if(t.length===0){if(r.type==="tab-layout")return{type:"tab-layout",tabs:[e,...r.tabs]};if(o)return{type:"split-layout",orientation:o,children:[i(e),r],sizes:[.5,.5]};{let l=[...r.children,i(e)],c=[...r.sizes,1/(l.length-1)];return{...r,children:l,sizes:R(c)}}}let[n,...s]=t;if(o&&s.length===0){if(r.type==="split-layout"&&r.orientation===o){let c=[...r.children];c.splice(n,0,i(e));let y=[...r.sizes];return y.splice(n,0,1/(c.length-1)),{...r,children:c,sizes:R(y)}}let l=n===0?[i(e),r]:[r,i(e)];return{type:"split-layout",orientation:o,children:l,sizes:[.5,.5]}}if(r.type==="tab-layout"){if(s.length===0&&o===void 0&&n>=0&&n<=r.tabs.length){let c=[...r.tabs];return c.splice(n,0,e),{...r,tabs:c}}return L({type:"split-layout",orientation:o||"horizontal",children:[r],sizes:[1]},e,t,o)}if(s.length===0||n===r.children.length){if(o&&r.children[n]){let y={type:"split-layout",orientation:o,children:[i(e),r.children[n]],sizes:[.5,.5]},f=[...r.children];return f[n]=y,{...r,children:f,sizes:R(r.sizes)}}let l=[...r.children];l.splice(n,0,i(e));let c=[...r.sizes];return c.splice(n,0,1/(l.length-1)),{...r,children:l,sizes:R(c)}}let a=r.children[n],u=a.type==="tab-layout"&&s.length>0&&o!==void 0?r.orientation==="horizontal"?"vertical":"horizontal":o,d=L(a,e,s,u),h=[...r.children];return h[n]=d,{...r,children:h}}function R(r){let e=r.reduce((t,o)=>t+o,0);return r.map(t=>t/e)}function I(r,e,t,o=E){let i=structuredClone(r),n=i,s={horizontal:t||0,vertical:t||0};for(let a=0;a<e.length-1;a++)n.type==="split-layout"&&(s[n.orientation]/=n.sizes[e[a]],n=n.children[e[a]]);if(n.type==="split-layout")if(t===void 0)n.sizes=n.sizes.map(a=>1/n.sizes.length);else{let a=s[n.orientation],u=e[e.length-1];u<n.sizes.length-1&&(n.sizes=B(o,n.sizes,u,a))}return i}function B(r,e,t,o){let i=[...e],n=0;for(let a=0;a<=t;a++)n+=e[a];let s=0;for(let a=t+1;a<e.length;a++)s+=e[a];o=Math.sign(o)*Math.min(Math.abs(o),(1-r.MINIMUM_REDISTRIBUTION_SIZE_THRESHOLD)*(o>0?n:s));for(let a=0;a<=t;a++){let u=e[a]/n;i[a]=e[a]-o*u}for(let a=t+1;a<e.length;a++){let u=e[a]/s;i[a]=e[a]+o*u}return i}function G(r,e,t,o,i=E){if(!o)return`:host ::slotted([${i.CHILD_ATTRIBUTE_NAME}="${r}"]){display:none;}`;let{view_window:{row_start:n,row_end:s,col_start:a,col_end:u}}=o,d=e.height-parseFloat(t.paddingTop)-parseFloat(t.paddingBottom),h=e.width-parseFloat(t.paddingLeft)-parseFloat(t.paddingRight),l=n*d+parseFloat(t.paddingTop),c=a*h+parseFloat(t.paddingLeft),y=(s-n)*d,f=(u-a)*h,p=`display:flex;position:absolute!important;z-index:1;top:${l}px;left:${c}px;height:${y}px;width:${f}px;`;return`::slotted([${i.CHILD_ATTRIBUTE_NAME}="${r}"]){${p}}`}function z(r,e,t,o,i,n,s=E){if(r<s.SPLIT_ROOT_EDGE_TOLERANCE)return D(t,o,i,[0],!0,"horizontal");if(r>1-s.SPLIT_ROOT_EDGE_TOLERANCE)return D(t,o,i,i.path.length>0?i.path:[1],!1,"horizontal");if(e<s.SPLIT_ROOT_EDGE_TOLERANCE)return D(t,o,i,[0],!0,"vertical");if(e>1-s.SPLIT_ROOT_EDGE_TOLERANCE)return D(t,o,i,i.path.length>0?i.path:[1],!1,"vertical");let a=i.column_offset<s.SPLIT_EDGE_TOLERANCE||i.column_offset>1-s.SPLIT_EDGE_TOLERANCE,u=i.row_offset<s.SPLIT_EDGE_TOLERANCE||i.row_offset>1-s.SPLIT_EDGE_TOLERANCE;if(a&&u){let d=Math.abs(i.column_offset-.5),h=Math.abs(i.row_offset-.5),l=(n?.width||1)*(i.view_window.col_end-i.view_window.col_start),c=(n?.height||1)*(i.view_window.row_end-i.view_window.row_start),y=l/2-d*l<c/2-h*c;return w(t,o,i,y?i.column_offset<s.SPLIT_EDGE_TOLERANCE:i.row_offset<s.SPLIT_EDGE_TOLERANCE,y?"horizontal":"vertical")}return a?w(t,o,i,i.column_offset<s.SPLIT_EDGE_TOLERANCE,"horizontal"):u?w(t,o,i,i.row_offset<s.SPLIT_EDGE_TOLERANCE,"vertical"):{...i,path:[...i.path,0]}}function D(r,e,t,o,i,n){return w(r,e,{...t,path:o,orientation:n},i,n)}function w(r,e,t,o,i){let n;if(t.orientation===i)if(t.path.length===0)n=[o?0:1];else{let u=t.path[t.path.length-1];n=[...t.path.slice(0,-1),o?u:u+1]}else n=[...t.path,o?0:1];let s=L(r,e,n,i),a=W(s,n);return{...t,path:n,slot:t.slot,is_edge:!0,orientation:i,view_window:a}}function W(r,e){let t={row_start:0,row_end:1,col_start:0,col_end:1},o=r;for(let i of e){if(o.type==="tab-layout")break;let n=Math.min(i,o.children.length-1),s=o.orientation==="vertical",a=s?"row_start":"col_start",u=s?"row_end":"col_end",d=t[u]-t[a],h=o.sizes.slice(0,n).reduce((l,c)=>l+c*d,t[a]);t={...t,[a]:h,[u]:h+d*o.sizes[n]},o=o.children[n]}return t}function N(r){if(r.type==="tab-layout")return r.selected=r.selected||0,r;let e=[],t=[];for(let o=0;o<r.children.length;o++){let i=r.children[o],n=r.sizes[o],s=N(i);if(s.type==="split-layout"&&s.orientation===r.orientation)for(let a=0;a<s.children.length;a++)e.push(s.children[a]),t.push(s.sizes[a]*n);else e.push(s),t.push(n)}return e.length===1?e[0]:{type:"split-layout",orientation:r.orientation,children:e,sizes:t}}function H(r,e){return V(r,e,[])}function V(r,e,t){if(e.type==="tab-layout")return e.tabs.includes(r)?t:null;for(let o=0;o<e.children.length;o++){let i=V(r,e.children[o],[...t,o]);if(i)return i}return null}var g=class extends HTMLElement{s;o;u;c;h;a;d;t;constructor(){super(),this.t=E,this.o=structuredClone(b),this.s=this.attachShadow({mode:"open"}),this.s.innerHTML="<slot></slot>",this.u=new CSSStyleSheet,this.c=new CSSStyleSheet,this.a=!1,this.s.adoptedStyleSheets=[this.u,this.c]}connectedCallback(){this.addEventListener("dblclick",this.onDblClick),this.addEventListener("pointerdown",this.onPointerDown),this.addEventListener("pointerup",this.onPointerUp),this.addEventListener("pointermove",this.onPointerMove)}disconnectedCallback(){this.removeEventListener("dblclick",this.onDblClick),this.removeEventListener("pointerdown",this.onPointerDown),this.removeEventListener("pointerup",this.onPointerUp),this.removeEventListener("pointermove",this.onPointerMove)}calculateIntersect=e=>{let[t,o,i]=this.relativeCoordinates(e,!1);return _(t,o,this.o)};calculatePath=e=>H(e,this.o);setOverlayState=(e,{slot:t},o=this.t.OVERLAY_CLASSNAME,i=this.t.OVERLAY_DEFAULT)=>{let n=T(this.o,t),s=`:scope > [${this.t.CHILD_ATTRIBUTE_NAME}="${t}"]`,a=this.querySelector(s);a&&a.classList.add(o);let[u,d,h,l]=this.relativeCoordinates(e,!0),c=_(u,d,n);if(c&&(c=z(u,d,n,t,c,h,this.t)),i==="grid"&&c){let p=[t,c?.slot],m=v(n,p,this.t);this.u.replaceSync(m)}else if(i==="absolute"){let p=v(n,void 0,this.t),m=G(t,h,l,c,this.t);this.u.replaceSync([p,m].join(`
4
+ `))}let y=`${this.t.CUSTOM_EVENT_NAME_PREFIX}-before-update`,f=new CustomEvent(y,{detail:n});this.dispatchEvent(f)};clearOverlayState=(e,{slot:t,layout:o},i=this.t.OVERLAY_CLASSNAME)=>{let n=this.o;n=T(n,t);let s=`:scope > [${this.t.CHILD_ATTRIBUTE_NAME}="${t}"]`,a=this.querySelector(s);if(a&&a.classList.remove(i),e===null){this.restore(o);return}let[u,d,h]=this.relativeCoordinates(e,!1),l=_(u,d,n);if(l&&(l=z(u,d,n,t,l,h,this.t)),l){let c=l?.is_edge?l.orientation:void 0,y=L(n,t,l.path,c);this.restore(y)}else this.restore(o)};insertPanel=(e,t=[],o)=>{let i;typeof o=="boolean"&&o?i="horizontal":typeof o=="string"&&(i=o),this.restore(L(this.o,e,t,i))};removePanel=e=>{this.restore(T(this.o,e))};getPanel=(e,t=this.o)=>{if(t.type==="tab-layout")return t.tabs.includes(e)?t:null;for(let o of t.children){let i=this.getPanel(e,o);if(i)return i}return null};clear=()=>{this.restore(b)};restore=(e,t=!1)=>{this.o=t?e:N(e);let o=v(this.o,void 0,this.t);this.u.replaceSync(o);let i=`${this.t.CUSTOM_EVENT_NAME_PREFIX}-update`,n=new CustomEvent(i,{detail:this.o});this.dispatchEvent(n)};save=()=>structuredClone(this.o);restorePhysics(e){this.t=Object.freeze({...this.t,...e})}savePhysics(){return this.t}relativeCoordinates=(e,t=!0)=>{(t||!this.d)&&(this.d={box:this.getBoundingClientRect(),style:getComputedStyle(this)});let o=this.d.box,i=this.d.style,n=(e.clientX-o.left-parseFloat(i.paddingLeft))/(o.width-parseFloat(i.paddingLeft)-parseFloat(i.paddingRight)),s=(e.clientY-o.top-parseFloat(i.paddingTop))/(o.height-parseFloat(i.paddingTop)-parseFloat(i.paddingBottom));return[n,s,o,i]};diffCoordinates=(e,t)=>{let[o,i,n]=this.relativeCoordinates(e,!1),s=(o-t.column)*n.width,a=(i-t.row)*n.height;return Math.sqrt(s**2+a**2)};onDblClick=e=>{let[t,o,i]=this.relativeCoordinates(e,!1),n=_(t,o,this.o,{rect:i,size:this.t.GRID_DIVIDER_SIZE});if(n?.type==="horizontal"||n?.type==="vertical"){let s=I(this.o,n.path,void 0);this.restore(s,!0)}};onPointerDown=e=>{if(!this.t.GRID_DIVIDER_CHECK_TARGET||e.target===this){let[t,o,i]=this.relativeCoordinates(e),n=this.t.GRID_DIVIDER_SIZE,s=_(t,o,this.o,{rect:i,size:n});s&&s.type!=="layout-path"&&(this.h=[s,t,o],this.setPointerCapture(e.pointerId),e.preventDefault())}};onPointerMove=e=>{if(this.h){let[s,a]=this.relativeCoordinates(e,!1),[{path:u,type:d},h,l]=this.h,c=d==="horizontal"?h-s:l-a,y=I(this.o,u,c);this.u.replaceSync(v(y,void 0,this.t))}if(this.t.GRID_DIVIDER_CHECK_TARGET&&e.target!==this){this.a&&(this.a=!1,this.c.replaceSync(""));return}let[t,o,i]=this.relativeCoordinates(e,!1),n=_(t,o,this.o,{rect:i,size:this.t.GRID_DIVIDER_SIZE});n?.type==="vertical"?(this.c.replaceSync(":host{cursor:row-resize"),this.a=!0):n?.type==="horizontal"?(this.c.replaceSync(":host{cursor:col-resize"),this.a=!0):this.a&&(this.a=!1,this.c.replaceSync(""))};onPointerUp=e=>{if(this.h){this.releasePointerCapture(e.pointerId);let[t,o]=this.relativeCoordinates(e,!1),[{path:i,type:n},s,a]=this.h,u=n==="horizontal"?s-t:a-o,d=I(this.o,i,u);this.restore(d,!0),this.h=void 0}}};var K=`
5
5
  :host{box-sizing:border-box;flex-direction:column}
6
6
  :host::part(titlebar){display:flex;height:24px;user-select:none;overflow:hidden}
7
7
  :host::part(container){flex:1 1 auto}
@@ -9,8 +9,8 @@ var b={type:"split-panel",orientation:"horizontal",sizes:[],children:[]};var y=O
9
9
  :host::part(close){align-self:stretch}
10
10
  :host::slotted{flex:1 1 auto;}
11
11
  :host regular-layout-tab{width:0px;}
12
- `,W=`
12
+ `,Z=`
13
13
  <div part="titlebar"></div>
14
14
  <slot part="container"></slot>
15
- `,S=class extends HTMLElement{s;f;e;n;o=null;d=!1;m=new WeakMap;constructor(){super(),this.f=new CSSStyleSheet,this.f.replaceSync(k),this.s=this.attachShadow({mode:"open"}),this.s.adoptedStyleSheets=[this.f]}connectedCallback(){this.s.innerHTML=W,this.e=this.parentElement,this.n=this.s.children[0],this.n.addEventListener("pointerdown",this.onPointerDown),this.n.addEventListener("pointermove",this.onPointerMove),this.n.addEventListener("pointerup",this.onPointerUp),this.n.addEventListener("lostpointercapture",this.onPointerLost),this.e.addEventListener("regular-layout-update",this.drawTabs),this.e.addEventListener("regular-layout-before-update",this.drawTabs)}disconnectedCallback(){this.n.removeEventListener("pointerdown",this.onPointerDown),this.n.removeEventListener("pointermove",this.onPointerMove),this.n.removeEventListener("pointerup",this.onPointerUp),this.n.removeEventListener("lostpointercapture",this.onPointerLost),this.e.removeEventListener("regular-layout-update",this.drawTabs),this.e.removeEventListener("regular-layout-before-update",this.drawTabs)}onPointerDown=t=>{t.target.part.contains("tab")&&(this.o=this.e.calculateIntersect(t.clientX,t.clientY),this.o&&(this.n.setPointerCapture(t.pointerId),t.preventDefault()))};onPointerMove=t=>{if(this.o){let e=this.e.savePhysics();if(!this.d){let[n,o,i]=this.e.relativeCoordinates(t.clientX,t.clientY),s=(n-this.o.column)*i.width,l=(o-this.o.row)*i.height;if(Math.sqrt(s*s+l*l)<=e.MIN_DRAG_DISTANCE)return}this.d=!0,this.e.setOverlayState(t.clientX,t.clientY,this.o,e.OVERLAY_CLASSNAME)}};onPointerUp=t=>{this.o&&this.d&&this.e.clearOverlayState(t.clientX,t.clientY,this.o),this.n.releasePointerCapture(t.pointerId),this.o=null,this.d=!1};onPointerLost=t=>{this.o&&this.e.clearOverlayState(-1,-1,this.o),this.n.releasePointerCapture(t.pointerId),this.o=null,this.d=!1};drawTabs=t=>{let e=this.getAttribute(this.e.savePhysics().CHILD_ATTRIBUTE_NAME);if(!e)return;let n=t.detail,o=this.e.getPanel(e,n);o||(o={type:"child-panel",child:[e],selected:0});for(let s=0;s<o.child.length;s++)if(s>=this.n.children.length){let l=document.createElement("regular-layout-tab");l.populate(this.e,o,s),this.n.appendChild(l),this.m.set(l,s)}else this.n.children[s].populate(this.e,o,s);let i=o.child.length;for(let s=this.n.children.length-1;s>=i;s--)this.n.removeChild(this.n.children[s])}};var w=class extends HTMLElement{e;r;a;populate=(t,e,n)=>{if(this.r){if(n===e.selected!=(n===this.r?.selected)||this.r?.child[n]!==e.child[n]){let s=e.selected===n,l=e.child[n];this.children[0].textContent=l,s?(this.children[1].part.add("active-close"),this.part.add("active-tab")):(this.children[1].part.remove("active-close"),this.part.remove("active-tab"))}}else{let o=e.child[n],i=e.selected===n,s=i?"active-close close":"close";this.innerHTML=`<div part="title"></div><button part="${s}"></button>`,i?this.part.add("tab","active-tab"):this.part.add("tab"),this.addEventListener("pointerdown",this.onTabClick),this.children[0].textContent=o,this.children[1].addEventListener("pointerdown",this.onTabClose)}this.r=e,this.e=t,this.a=n};onTabClose=t=>{this.r!==void 0&&this.a!==void 0&&this.e?.removePanel(this.r.child[this.a])};onTabClick=t=>{if(this.r!==void 0&&this.a!==void 0&&this.a!==this.r.selected){let e=this.e?.save(),n=this.e?.getPanel(this.r.child[this.a],e);n&&e&&(n.selected=this.a,this.e?.restore(e))}}};customElements.define("regular-layout",g);customElements.define("regular-layout-frame",S);customElements.define("regular-layout-tab",w);export{g as RegularLayout,S as RegularLayoutFrame};
15
+ `,P=class extends HTMLElement{s;y;e;r;n=null;f=new WeakMap;connectedCallback(){this.y??=new CSSStyleSheet,this.y.replaceSync(K),this.s??=this.attachShadow({mode:"open"}),this.s.adoptedStyleSheets=[this.y],this.s.innerHTML=Z,this.e=this.parentElement,this.r=this.s.children[0],this.r.addEventListener("pointerdown",this.onPointerDown),this.addEventListener("pointermove",this.onPointerMove),this.addEventListener("pointerup",this.onPointerUp),this.addEventListener("pointercancel",this.onPointerCancel),this.addEventListener("lostpointercapture",this.onPointerLost),this.e.addEventListener("regular-layout-update",this.drawTabs),this.e.addEventListener("regular-layout-before-update",this.drawTabs)}disconnectedCallback(){this.r.removeEventListener("pointerdown",this.onPointerDown),this.removeEventListener("pointermove",this.onPointerMove),this.removeEventListener("pointerup",this.onPointerUp),this.removeEventListener("pointercancel",this.onPointerUp),this.removeEventListener("lostpointercapture",this.onPointerLost),this.e.removeEventListener("regular-layout-update",this.drawTabs),this.e.removeEventListener("regular-layout-before-update",this.drawTabs)}onPointerDown=e=>{if(e.target.part.contains("tab")){let o=this.e.calculateIntersect(e);o?(this.n={path:o},this.setPointerCapture(e.pointerId),e.preventDefault()):this.n=null}};onPointerMove=e=>{if(this.n){let t=this.e.savePhysics();if(!this.n.moved&&this.e.diffCoordinates(e,this.n.path)<=t.MIN_DRAG_DISTANCE)return;this.n.moved=!0,this.e.setOverlayState(e,this.n.path)}};onPointerUp=e=>{this.n?.moved&&this.e.clearOverlayState(e,this.n.path)};onPointerCancel=e=>{this.n?.moved&&this.e.clearOverlayState(null,this.n.path)};onPointerLost=e=>{this.releasePointerCapture(e.pointerId),this.n=null};drawTabs=e=>{let t=this.e.savePhysics().CHILD_ATTRIBUTE_NAME,o=this.getAttribute(t);if(!o)return;let i=e.detail,n=this.e.getPanel(o,i);n||(n={type:"tab-layout",tabs:[o],selected:0});for(let a=0;a<n.tabs.length;a++)if(a>=this.r.children.length){let u=document.createElement("regular-layout-tab");u.populate(this.e,n,a),this.r.appendChild(u),this.f.set(u,a)}else this.r.children[a].populate(this.e,n,a);let s=n.tabs.length;for(let a=this.r.children.length-1;a>=s;a--)this.r.removeChild(this.r.children[a])}};var O=class extends HTMLElement{e;i;l;populate=(e,t,o)=>{if(this.i){if(o===t.selected!=(o===this.i?.selected)||this.i?.tabs[o]!==t.tabs[o]){let s=t.selected===o,a=t.tabs[o];this.children[0].textContent=a,s?(this.children[1].part.add("active-close"),this.part.add("active-tab")):(this.children[1].part.remove("active-close"),this.part.remove("active-tab"))}}else{let i=t.tabs[o],n=t.selected===o,s=n?"active-close close":"close";this.innerHTML=`<div part="title"></div><button part="${s}"></button>`,n?this.part.add("tab","active-tab"):this.part.add("tab"),this.addEventListener("pointerdown",this.onTabClick),this.children[0].textContent=i,this.children[1].addEventListener("pointerdown",this.onTabClose)}this.i=t,this.e=e,this.l=o};onTabClose=e=>{this.i!==void 0&&this.l!==void 0&&this.e?.removePanel(this.i.tabs[this.l])};onTabClick=e=>{if(this.i!==void 0&&this.l!==void 0&&this.l!==this.i.selected){let t=this.e?.save(),o=this.e?.getPanel(this.i.tabs[this.l],t);o&&t&&(o.selected=this.l,this.e?.restore(t))}}};customElements.define("regular-layout",g);customElements.define("regular-layout-frame",P);customElements.define("regular-layout-tab",O);export{g as RegularLayout,P as RegularLayoutFrame};
16
16
  //# sourceMappingURL=index.js.map