@aiquants/resize-panels 1.4.0 → 1.6.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/Panel.d.ts +1 -2
- package/dist/Panel.d.ts.map +1 -1
- package/dist/PanelDebugInfo.d.ts +1 -2
- package/dist/PanelDebugInfo.d.ts.map +1 -1
- package/dist/PanelGroup.d.ts +1 -2
- package/dist/PanelGroup.d.ts.map +1 -1
- package/dist/PanelResizeHandle.d.ts +1 -2
- package/dist/PanelResizeHandle.d.ts.map +1 -1
- package/dist/context.d.ts +0 -1
- package/dist/debugOverlayStore.d.ts +0 -1
- package/dist/hooks.d.ts +0 -1
- package/dist/hooks.d.ts.map +1 -1
- package/dist/index.cjs +2 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.js +2258 -0
- package/dist/reducer.d.ts +0 -1
- package/dist/reducer.d.ts.map +1 -1
- package/dist/resize-panels.css +1 -1
- package/dist/styles/resize-panels.css +2 -2
- package/dist/types.d.ts +0 -1
- package/dist/utils/simple-logger.d.ts +98 -0
- package/dist/utils/simple-logger.d.ts.map +1 -0
- package/dist/utils.d.ts +0 -1
- package/package.json +80 -79
- package/dist/index.es.js +0 -5176
- package/dist/index.umd.js +0 -7
package/dist/Panel.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { PanelProps } from './types';
|
|
2
|
-
|
|
3
2
|
/**
|
|
4
3
|
* Render a resizable panel within a managed group, keeping DOM measurements in sync with reducer state.
|
|
5
4
|
* 管理対象グループ内で DOM 計測とリデューサー状態を同期させながらリサイズ可能パネルを描画するコンポーネント。
|
|
6
5
|
*/
|
|
7
|
-
export declare const Panel: import('react').MemoExoticComponent<({ id: providedId, defaultSize, minSize, maxSize, autoMinSize, className, style, children, order, collapsible, defaultCollapsed, pixelAdjustPriority, flexAdjustPriority, contentOverflow }: PanelProps) => import("react
|
|
6
|
+
export declare const Panel: import('react').MemoExoticComponent<({ id: providedId, defaultSize, minSize, maxSize, autoMinSize, className, style, children, order, collapsible, defaultCollapsed, pixelAdjustPriority, flexAdjustPriority, contentOverflow }: PanelProps) => import("react").JSX.Element>;
|
|
8
7
|
//# sourceMappingURL=Panel.d.ts.map
|
package/dist/Panel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../src/Panel.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAA6C,UAAU,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../src/Panel.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAA6C,UAAU,EAAE,MAAM,SAAS,CAAA;AAyEpF;;;GAGG;AACH,eAAO,MAAM,KAAK,mOACwO,UAAU,iCAudnQ,CAAA"}
|
package/dist/PanelDebugInfo.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { PanelDirection, PanelLayoutData } from './types';
|
|
2
|
-
|
|
3
2
|
type PanelDebugInfoProps = {
|
|
4
3
|
panel: PanelLayoutData | undefined;
|
|
5
4
|
measuredPixelSize: number;
|
|
@@ -22,6 +21,6 @@ type FormattedPanelDebugInfo = {
|
|
|
22
21
|
titleText: string;
|
|
23
22
|
};
|
|
24
23
|
export declare const formatPanelDebugInfo: ({ panel, measuredPixelSize, measuredPercentageSize, containerAxisSize, containerLabel }: FormatPanelDebugInfoArgs) => FormattedPanelDebugInfo;
|
|
25
|
-
export declare const PanelDebugInfo: import('react').MemoExoticComponent<({ panel, measuredPixelSize, measuredPercentageSize, containerAxisSize, direction }: PanelDebugInfoProps) => import("react
|
|
24
|
+
export declare const PanelDebugInfo: import('react').MemoExoticComponent<({ panel, measuredPixelSize, measuredPercentageSize, containerAxisSize, direction }: PanelDebugInfoProps) => import("react").JSX.Element>;
|
|
26
25
|
export {};
|
|
27
26
|
//# sourceMappingURL=PanelDebugInfo.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PanelDebugInfo.d.ts","sourceRoot":"","sources":["../src/PanelDebugInfo.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE9D,KAAK,mBAAmB,GAAG;IACvB,KAAK,EAAE,eAAe,GAAG,SAAS,CAAA;IAClC,iBAAiB,EAAE,MAAM,CAAA;IACzB,sBAAsB,EAAE,MAAM,CAAA;IAC9B,iBAAiB,EAAE,MAAM,CAAA;IACzB,SAAS,EAAE,cAAc,CAAA;CAC5B,CAAA;AAED,KAAK,wBAAwB,GAAG;IAC5B,KAAK,EAAE,eAAe,GAAG,SAAS,CAAA;IAClC,iBAAiB,EAAE,MAAM,CAAA;IACzB,sBAAsB,EAAE,MAAM,CAAA;IAC9B,iBAAiB,EAAE,MAAM,CAAA;IACzB,cAAc,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,KAAK,uBAAuB,GAAG;IAC3B,iBAAiB,EAAE,MAAM,CAAA;IACzB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,gBAAgB,EAAE,MAAM,CAAA;IACxB,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,yFAAyF,wBAAwB,KAAG,uBAkBxJ,CAAA;AAED,eAAO,MAAM,cAAc,2HAA6F,mBAAmB,
|
|
1
|
+
{"version":3,"file":"PanelDebugInfo.d.ts","sourceRoot":"","sources":["../src/PanelDebugInfo.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE9D,KAAK,mBAAmB,GAAG;IACvB,KAAK,EAAE,eAAe,GAAG,SAAS,CAAA;IAClC,iBAAiB,EAAE,MAAM,CAAA;IACzB,sBAAsB,EAAE,MAAM,CAAA;IAC9B,iBAAiB,EAAE,MAAM,CAAA;IACzB,SAAS,EAAE,cAAc,CAAA;CAC5B,CAAA;AAED,KAAK,wBAAwB,GAAG;IAC5B,KAAK,EAAE,eAAe,GAAG,SAAS,CAAA;IAClC,iBAAiB,EAAE,MAAM,CAAA;IACzB,sBAAsB,EAAE,MAAM,CAAA;IAC9B,iBAAiB,EAAE,MAAM,CAAA;IACzB,cAAc,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,KAAK,uBAAuB,GAAG;IAC3B,iBAAiB,EAAE,MAAM,CAAA;IACzB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,gBAAgB,EAAE,MAAM,CAAA;IACxB,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,yFAAyF,wBAAwB,KAAG,uBAkBxJ,CAAA;AAED,eAAO,MAAM,cAAc,2HAA6F,mBAAmB,iCA+FzI,CAAA"}
|
package/dist/PanelGroup.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { PanelGroupProps } from './types';
|
|
2
|
-
|
|
3
2
|
/**
|
|
4
3
|
* Provide layout context and container for coordinated panels.
|
|
5
4
|
* 連動するパネルのためのレイアウトコンテキストとコンテナを提供するコンポーネント。
|
|
6
5
|
*/
|
|
7
|
-
export declare const PanelGroup: (props: PanelGroupProps) => import("react
|
|
6
|
+
export declare const PanelGroup: (props: PanelGroupProps) => import("react").JSX.Element;
|
|
8
7
|
//# sourceMappingURL=PanelGroup.d.ts.map
|
package/dist/PanelGroup.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PanelGroup.d.ts","sourceRoot":"","sources":["../src/PanelGroup.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAwK9C;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,eAAe,
|
|
1
|
+
{"version":3,"file":"PanelGroup.d.ts","sourceRoot":"","sources":["../src/PanelGroup.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAwK9C;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,eAAe,gCAuJhD,CAAA"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { PanelResizeHandleProps } from './types';
|
|
2
|
-
|
|
3
2
|
/**
|
|
4
3
|
* Render an interactive divider that manages adjacent panel resizing gestures.
|
|
5
4
|
* 隣接パネルのリサイズ操作を管理するインタラクティブなディバイダーを描画するコンポーネント。
|
|
6
5
|
*/
|
|
7
|
-
export declare const PanelResizeHandle: import('react').MemoExoticComponent<({ id, disabled, className, style, children, onDragging }: PanelResizeHandleProps) => import("react
|
|
6
|
+
export declare const PanelResizeHandle: import('react').MemoExoticComponent<({ id, disabled, className, style, children, onDragging }: PanelResizeHandleProps) => import("react").JSX.Element>;
|
|
8
7
|
//# sourceMappingURL=PanelResizeHandle.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PanelResizeHandle.d.ts","sourceRoot":"","sources":["../src/PanelResizeHandle.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EASH,KAAK,sBAAsB,EAE9B,MAAM,SAAS,CAAA;AAGhB;;;GAGG;AACH,eAAO,MAAM,iBAAiB,iGAA2E,sBAAsB,
|
|
1
|
+
{"version":3,"file":"PanelResizeHandle.d.ts","sourceRoot":"","sources":["../src/PanelResizeHandle.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EASH,KAAK,sBAAsB,EAE9B,MAAM,SAAS,CAAA;AAGhB;;;GAGG;AACH,eAAO,MAAM,iBAAiB,iGAA2E,sBAAsB,iCA6jB7H,CAAA"}
|
package/dist/context.d.ts
CHANGED
package/dist/hooks.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { CSSProperties } from 'react';
|
|
2
2
|
import { LayoutConstraintViolation, PanelCollapseDirection, PanelGroupProps, PanelLayoutData, PanelMeasurement, ResizeHandleLayoutData } from './types';
|
|
3
|
-
|
|
4
3
|
/**
|
|
5
4
|
* Orchestrate registration, constraint resolution, measurement sync, and persistence for a panel group.
|
|
6
5
|
* パネルグループにおける登録処理・制約判定・計測同期・永続化の統括。
|
package/dist/hooks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,aAAa,EAAkF,MAAM,OAAO,CAAA;AAG1H,OAAO,KAAK,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,aAAa,EAAkF,MAAM,OAAO,CAAA;AAG1H,OAAO,KAAK,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAM5J;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,2DAAmE,eAAe;;;;;;;;;;;+BAmevE,eAAe;8BA8ChB,MAAM;+BA6BlC,MAAM,WAAW,MAAM,YAAY,MAAM,aAAa,MAAM;4BAoFhE,MAAM,QAAQ,sBAAsB;0BAapC,MAAM,QAAQ,sBAAsB,eAAe,MAAM;uBAazD,MAAM;0CAWsC,MAAM,eAAe,gBAAgB,GAAG,IAAI;;4CA6B1C,MAAM,eAAe,sBAAsB,GAAG,IAAI;;;;;CA2E5G,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM;;;;;qBAKjC,sBAAsB;mBAOtB,sBAAsB,eAAe,MAAM;mBAO3C,sBAAsB,eAAe,MAAM;CAsBzD,CAAA"}
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("react"),M=require("react/jsx-runtime"),Le=require("tailwind-merge"),mt=require("react-dom"),Ye=p.createContext(null),Ge=()=>{const t=p.useContext(Ye);if(!t)throw new Error("usePanelGroup must be used within a PanelGroup");return t},st=(t,e=0)=>{if(!Number.isFinite(t))return t;const n=10**e,d=t*n,r=Math.floor(d),l=d-r,i=Number.EPSILON*Math.max(1,Math.abs(d));return l<.5-i?r/n:l>.5+i?(r+1)/n:(r%2===0?r:r+1)/n},ot=12,Ze=8,St=8,Pt=8,at=.05,lt=10,bt=.05,Ct=20,yt=.05,Xe=0,ct=6,xe=(t,e)=>e<=0?0:st(t/e*100,ct),Ae=(t,e)=>!t||e<=0?0:t/100*e,Te=(t,e="percentage")=>{if(t!==void 0)return typeof t=="number"?{value:t,unit:e}:t},Je=(t,e)=>t?t.unit==="percentage"?t.value/100*e:t.value:0,J=(t,e,n)=>t?typeof t=="number"?t/100*n:t.unit==="pixels"?t.value:t.value/100*n:e,ce=(t,e,n)=>Math.min(Math.max(t,e),n),$e=t=>{if(!Number.isFinite(t)||t<=0)return Xe;const e=t*at,n=Math.min(ot,lt,e);return Math.max(Xe,n)},dt=(t,e,n,d={})=>{if(Math.abs(e)<=0)return e;const r=d.enforceAutoMinSize??!1,l=t.map((o,a)=>({panel:o,index:a})).filter(({panel:o})=>!o.collapsed&&(o.sizeUnit==="pixels"||o.originalPixelSize!==void 0));if(l.length===0)return e;const i=e>0,f=[...l].sort((o,a)=>{const s=o.panel.pixelAdjustPriority??o.index+1,m=a.panel.pixelAdjustPriority??a.index+1;return s===m?i?a.index-o.index:o.index-a.index:i?m-s:s-m});let u=e;const x=o=>{for(const{index:a}of f){if(Math.abs(u)<=0)break;const s=t[a];if(!s||s.collapsed)continue;const m=Te(s.minSize,"pixels"),y=Te(s.maxSize,"pixels"),b=m?Je(m,n):0,E=y?Je(y,n):n,S=r?J(s.autoMinSize,0,n):0,v=Math.max(b,S),P=s.preferredPixelSize!==void 0?ce(s.preferredPixelSize,v,E):s.size,O=s.collapseFromStart||s.collapseFromEnd;if(u>0){if(Math.abs(s.size)<=0&&(s.percentageSize??0)<=0)continue;const K=Math.max(s.size,P),se=o?Math.min(E,K):E,$=Math.max(0,se-s.size);if($<=0)continue;const _=Math.min($,u);if(_<=0)continue;const I=s.size+_,te=xe(I,n),T=O?I:s.sizeBeforeCollapse,V=O?s.measuredPixelSizeBeforeCollapse??s.measuredPixelSize??I:s.measuredPixelSizeBeforeCollapse;t[a]={...s,size:I,percentageSize:te,sizeBeforeCollapse:T,measuredPixelSizeBeforeCollapse:V,measuredPixelSize:void 0,measuredPercentageSize:void 0},u-=_}else{const X=o?P:v,K=Math.max(0,s.size-X);if(K<=0)continue;const se=Math.min(K,Math.abs(u));if(se<=0)continue;const $=s.size-se,_=xe($,n),I=O?$:s.sizeBeforeCollapse,te=O?s.measuredPixelSizeBeforeCollapse??s.measuredPixelSize??$:s.measuredPixelSizeBeforeCollapse;t[a]={...s,size:$,percentageSize:_,sizeBeforeCollapse:I,measuredPixelSizeBeforeCollapse:te,measuredPixelSize:void 0,measuredPercentageSize:void 0},u+=se}}};return x(!0),(i&&u>0||!i&&u<0)&&x(!1),u},_e=t=>{if(!t)return 0;const e=parseFloat(t);return Number.isFinite(e)?e:0},Ee=(t,e)=>{const n=t.getBoundingClientRect(),d=typeof window<"u"?window.getComputedStyle(t):null,r=d?_e(d.borderLeftWidth)+_e(d.borderRightWidth):0,l=d?_e(d.borderTopWidth)+_e(d.borderBottomWidth):0;if(e==="horizontal"){const x=n.width>0?n.width:t.offsetWidth,o=n.width>0?Math.max(0,n.width-r):t.clientWidth,a=t.offsetWidth>0?t.offsetWidth:t.clientWidth+r;return{inner:o>0?o:Math.max(0,t.clientWidth),outer:x>0?x:Math.max(0,a)}}const i=n.height>0?n.height:t.offsetHeight,f=n.height>0?Math.max(0,n.height-l):t.clientHeight,u=t.offsetHeight>0?t.offsetHeight:t.clientHeight+l;return{inner:f>0?f:Math.max(0,t.clientHeight),outer:i>0?i:Math.max(0,u)}},ut=(t,e)=>{try{localStorage.setItem(`panel-layout-${t}`,JSON.stringify(e))}catch(n){console.warn("Failed to save panel layout:",n)}},ft=t=>{try{const e=localStorage.getItem(`panel-layout-${t}`);return e?JSON.parse(e):null}catch(e){return console.warn("Failed to load panel layout:",e),null}};var He=(t=>(t[t.DEBUG=0]="DEBUG",t[t.INFO=1]="INFO",t[t.WARN=2]="WARN",t[t.ERROR=3]="ERROR",t[t.NONE=4]="NONE",t))(He||{});const be=class be{constructor(e=2,n="[resize-panels]",d=console){this.level=e,this.prefix=n,this.impl=d}static setLevel(e){be.instance.setLevel(e)}setLevel(e){this.level=e}static setImplementation(e){be.instance.setImplementation(e)}setImplementation(e){this.impl=e}static setPrefix(e){be.instance.setPrefix(e)}setPrefix(e){this.prefix=e}formatMessage(e){return typeof e=="string"?[`${this.prefix} ${e}`]:[this.prefix,e]}static debug(e,...n){be.instance.debug(e,...n)}debug(e,...n){this.level<=0&&this.impl.debug(...this.formatMessage(e),...n)}static info(e,...n){be.instance.info(e,...n)}info(e,...n){this.level<=1&&this.impl.info(...this.formatMessage(e),...n)}static warn(e,...n){be.instance.warn(e,...n)}warn(e,...n){this.level<=2&&this.impl.warn(...this.formatMessage(e),...n)}static error(e,...n){be.instance.error(e,...n)}error(e,...n){this.level<=3&&this.impl.error(...this.formatMessage(e),...n)}};be.instance=new be(2,"[resize-panels]");let De=be;const le=new De(He.INFO,"[resize-panels]"),me=t=>t.map(e=>({id:e.id,size:e.size,percentageSize:e.percentageSize,preferredPercentageSize:e.preferredPercentageSize,sizeBeforeCollapse:e.sizeBeforeCollapse,percentageSizeBeforeCollapse:e.percentageSizeBeforeCollapse,preferredPercentageSizeBeforeCollapse:e.preferredPercentageSizeBeforeCollapse,measuredPercentageSize:e.measuredPercentageSize,excludeFromAutoGrowth:e.excludeFromAutoGrowth??!1,collapsed:e.collapsed??!1,collapseFromStart:e.collapseFromStart,collapseFromEnd:e.collapseFromEnd,collapsedByDirection:e.collapsedByDirection??null})),je=t=>t?me([t])[0]:null,Be=t=>t?!!(t.collapseFromStart||t.collapseFromEnd):!1,We=(t,e)=>{if(!Number.isFinite(e)||e<=0)return t;const n=t.map(u=>({...u})),d=[];for(let u=0;u<n.length;u+=1){const x=n[u];if(x.collapsed){n[u]={...x,size:0,percentageSize:0};continue}const o=Math.max(0,J(x.minSize,0,e)),a=Math.max(0,J(x.autoMinSize,0,e)),s=Math.max(o,a),m=Math.max(.001,s),y=J(x.maxSize,e,e),b=Math.max(s,y),E=x.sizeUnit==="pixels"||x.originalPixelSize!==void 0,S=Math.max(0,x.size);let v=s;if(E){const O=x.preferredPixelSize??x.size??x.originalPixelSize??s;v=ce(O,s,b)}else{const O=x.preferredPercentageSize??x.percentageSize??xe(x.size,e),X=Ae(O,e);v=ce(X,s,b)}const P=!E&&(x.excludeFromAutoGrowth??!1)&&S<=m;d.push({index:u,isPixelPanel:E,minSize:s,maxSize:b,preferredSize:v,priority:x.pixelAdjustPriority??u+1,flexPriority:E?void 0:x.flexAdjustPriority,excludeFromGrowth:P})}if(d.length===0)return n;const r=new Map;let l=0;for(const u of d)r.set(u.index,u.minSize),l+=u.minSize;let i=e-l;const f=(u,x)=>{if(x<=0)return 0;const o=r.get(u.index)??u.minSize,a=Math.max(0,u.maxSize-o);if(a<=0)return 0;const s=Math.min(x,a);return r.set(u.index,o+s),s};if(i>0){const u=o=>{for(;i>1e-6;){let s=0;const m=[];for(const E of o){if(!E.isPixelPanel&&E.excludeFromGrowth)continue;const S=r.get(E.index)??E.minSize,v=Math.min(E.preferredSize,E.maxSize),P=Math.max(0,v-S);P>1e-6&&(s+=P,m.push({descriptor:E,capacity:P}))}if(m.length===0||s<=1e-6)break;let y=0;const b=i;for(const E of m){if(i<=1e-6)break;if(!E.descriptor.isPixelPanel&&E.descriptor.excludeFromGrowth)continue;const S=b*E.capacity/s,v=Math.min(E.capacity,S);if(v<=0)continue;const P=f(E.descriptor,v);P>0&&(i-=P,y+=P)}if(y<=1e-6)break}},x=d.filter(o=>o.isPixelPanel);x.sort((o,a)=>a.priority-o.priority);for(const o of x){if(i<=0)break;const a=r.get(o.index)??o.minSize,s=Math.min(o.preferredSize,o.maxSize),m=Math.max(0,s-a);if(m<=0)continue;const y=f(o,Math.min(m,i));y>0&&(i-=y)}if(i>0){const o=d.filter(a=>!a.isPixelPanel);if(o.length>0){const a=o.filter(s=>s.flexPriority!==void 0&&!s.excludeFromGrowth);if(a.length>0){a.sort((s,m)=>(m.flexPriority??0)-(s.flexPriority??0));for(const s of a){if(i<=0)break;if(s.excludeFromGrowth)continue;const m=r.get(s.index)??s.minSize,y=Math.min(s.preferredSize,s.maxSize),b=Math.max(0,y-m);if(b<=0)continue;const E=f(s,Math.min(b,i));E>0&&(i-=E)}}if(i>0){const s=a.length>0?o.filter(m=>m.flexPriority===void 0&&!m.excludeFromGrowth):o.filter(m=>!m.excludeFromGrowth);s.length>0&&u(s)}}}}if(i>0){let u=i;for(;;){let x=0;const o=[];for(const s of d){if(!s.isPixelPanel&&s.excludeFromGrowth)continue;const m=r.get(s.index)??s.minSize,y=s.isPixelPanel?Math.min(s.maxSize,s.preferredSize):s.maxSize,b=Math.max(0,y-m);b>0&&(o.push(s),x+=b)}if(x<=0)break;const a=i;for(const s of o){if(i<=0)break;if(!s.isPixelPanel&&s.excludeFromGrowth)continue;const m=r.get(s.index)??s.minSize,y=s.isPixelPanel?Math.min(s.maxSize,s.preferredSize):s.maxSize,b=Math.max(0,y-m);if(b<=0)continue;const E=a*b/x,S=f(s,Math.min(b,E));S>0&&(i-=S)}if(i<=1e-6||Math.abs(u-i)<=1e-6)break;u=i}i=Math.max(0,i)}if(i<0){let u=i;const x=d.filter(o=>o.isPixelPanel);for(x.sort((o,a)=>o.priority-a.priority);!(i>=0);){let o=!1;for(const a of x){if(i>=0)break;const s=r.get(a.index)??a.minSize,m=ce(a.preferredSize,a.minSize,a.maxSize),y=Math.max(0,s-m);if(y>0&&i<0){const E=Math.min(y,Math.abs(i));r.set(a.index,s-E),i+=E,o=!0;continue}const b=Math.max(0,s-a.minSize);if(b>0&&i<0){const E=Math.min(b,Math.abs(i));r.set(a.index,s-E),i+=E,o=!0}}if(!o||Math.abs(u-i)<=1e-6)break;u=i}}for(const u of d){const x=r.get(u.index)??u.minSize,o=n[u.index],a=Be(o),s=a?x:o.sizeBeforeCollapse,m=a?o.measuredPixelSizeBeforeCollapse??o.measuredPixelSize??x:o.measuredPixelSizeBeforeCollapse,y=e>0?xe(x,e):0;n[u.index]={...o,size:x,percentageSize:y,preferredPercentageSize:o.preferredPercentageSize,preferredPixelSize:u.isPixelPanel?o.preferredPixelSize??x:o.preferredPixelSize,sizeBeforeCollapse:s,measuredPixelSizeBeforeCollapse:m,measuredPixelSize:void 0,measuredPercentageSize:void 0}}return Re(n)},Re=t=>{let e=0;for(const r of t)r.collapsed||(e+=Math.max(r.size,0));if(e<=0){let r=!1;const l=t.map(i=>(i.percentageSize??0)!==0?(r=!0,{...i,percentageSize:0,measuredPercentageSize:i.measuredPercentageSize!==void 0?0:i.measuredPercentageSize}):!i.collapsed&&i.sizeBeforeCollapse!==i.size?(r=!0,{...i,sizeBeforeCollapse:i.size}):i);return r?l:t}let n=!1;const d=t.map(r=>{if(r.collapsed)return(r.percentageSize??0)!==0?(n=!0,{...r,percentageSize:0,measuredPercentageSize:r.measuredPercentageSize!==void 0?0:r.measuredPercentageSize}):r;const l=xe(r.size,e),i=r.measuredPercentageSize,x=(i!==void 0?Math.abs(i-l):1/0)<1e-4&&i!==void 0?i:l,o=st(x,ct),s=Math.abs((r.percentageSize??0)-o)>0||r.percentageSize===void 0,m=r.sizeBeforeCollapse===void 0||r.sizeBeforeCollapse!==r.size,y=Be(r),b=y&&m,E=r.measuredPixelSize??r.size,S=y&&(r.measuredPixelSizeBeforeCollapse===void 0||r.measuredPixelSizeBeforeCollapse!==E);if(!(s||b||S))return r;n=!0;const v=b?r.size:r.sizeBeforeCollapse,P=S?E:r.measuredPixelSizeBeforeCollapse;return{...r,percentageSize:o,sizeBeforeCollapse:v,measuredPixelSizeBeforeCollapse:P,collapsedByDirection:r.collapsed?r.collapsedByDirection??null:null}});return n?d:t},ke=(t,e)=>{if(e<=0)return!1;const n=[];let d=0;for(let o=0;o<t.length;o+=1){const a=t[o];!a||a.collapsed||(n.push(o),d+=a.size)}if(n.length===0)return!1;let r=e-d;if(Math.abs(r)<=0)return!1;let l=!1;const i=o=>{const a=t[o],s=J(a.minSize,0,e),m=J(a.autoMinSize,0,e),y=Math.max(s,m),b=J(a.maxSize,e,e),E=a.sizeUnit==="percentage"&&a.originalPixelSize===void 0;return{index:o,minSize:y,maxSize:b,isFlexible:E}},f=(o,a)=>{if(!Number.isFinite(a)||Math.abs(a)<=0)return;const s=t[o];if(!s)return;const m=Math.max(0,s.size+a);if(Math.abs(m-s.size)<=0)return;const y=xe(m,e),b=Be(s),E=b?m:s.sizeBeforeCollapse,S=b?s.measuredPixelSizeBeforeCollapse??s.measuredPixelSize??m:s.measuredPixelSizeBeforeCollapse;t[o]={...s,size:m,percentageSize:y,sizeBeforeCollapse:E,measuredPixelSizeBeforeCollapse:S,measuredPixelSize:void 0,measuredPercentageSize:void 0},r-=a,l=!0},u=o=>{for(const a of o){if(Math.abs(r)<=0)break;const s=t[a.index];if(!s||s.collapsed)continue;const m=s.size;if(r>0){const y=Math.max(0,a.maxSize-m);if(y<=0)continue;const b=Math.min(y,r);if(b<=0)continue;f(a.index,b)}else{const y=Math.max(0,m-a.minSize);if(y<=0)continue;const b=Math.min(y,Math.abs(r));if(b<=0)continue;f(a.index,-b)}}},x=n.map(o=>i(o)).filter(o=>o.isFlexible);if(x.length>0&&u(x),Math.abs(r)>0){const o=r;r=dt(t,r,e,{enforceAutoMinSize:!0}),Math.abs(r-o)>0&&(l=!0)}return l},Ke=(t,e,n)=>{if(!(t.sizeUnit==="pixels"||t.originalPixelSize!==void 0)||t.pixelAdjustPriority!==void 0)return t;const r=e.filter((i,f)=>f!==n&&(i.sizeUnit==="pixels"||i.originalPixelSize!==void 0)).map(i=>i.pixelAdjustPriority).filter(i=>i!==void 0),l=r.length>0?Math.max(...r)+1:1;return{...t,pixelAdjustPriority:l}},vt=(t,e)=>{switch(e.type){case"REGISTER_PANEL":{le.debug("REGISTER_PANEL",e.panel);const n=t.findIndex(l=>l.id===e.panel.id);if(n>=0){const l=[...t],i=t[n],f={...i,minSize:e.panel.minSize,maxSize:e.panel.maxSize,collapseFromStart:e.panel.collapseFromStart,collapseFromEnd:e.panel.collapseFromEnd,collapsedByDirection:e.panel.collapsedByDirection!==void 0?e.panel.collapsedByDirection:i.collapsedByDirection,sizeUnit:e.panel.sizeUnit,originalPixelSize:e.panel.originalPixelSize,preferredPercentageSize:e.panel.preferredPercentageSize!==void 0?e.panel.preferredPercentageSize:i.preferredPercentageSize,preferredPercentageSizeBeforeCollapse:e.panel.preferredPercentageSizeBeforeCollapse!==void 0?e.panel.preferredPercentageSizeBeforeCollapse:i.preferredPercentageSizeBeforeCollapse,percentageSizeBeforeCollapse:e.panel.percentageSizeBeforeCollapse!==void 0?e.panel.percentageSizeBeforeCollapse:i.percentageSizeBeforeCollapse,pixelAdjustPriority:e.panel.pixelAdjustPriority!==void 0?e.panel.pixelAdjustPriority:i.pixelAdjustPriority,autoMinSize:e.panel.autoMinSize!==void 0?e.panel.autoMinSize:i.autoMinSize,excludeFromAutoGrowth:e.panel.excludeFromAutoGrowth!==void 0?e.panel.excludeFromAutoGrowth:i.excludeFromAutoGrowth},u=Ke(f,t,n);return le.debug("register panel (update)",{panelId:u.id,incoming:je(e.panel),previous:je(i),next:je(u)}),l[n]=u,l}const d={...e.panel},r=Ke(d,t);return le.debug("register panel (insert)",{panelId:r.id,incoming:je(r),previousLength:t.length}),[...t,r]}case"UNREGISTER_PANEL":{le.debug("UNREGISTER_PANEL",e.id);const n=t.filter(r=>r.id!==e.id),d=Re(n);return le.debug("unregister panel",{panelId:e.id,previous:me(t),filtered:me(n),next:me(d)}),d}case"RESIZE_PANELS":{le.debug("RESIZE_PANELS",e.leftId,e.rightId,e.leftSize,e.rightSize);const n=t.findIndex(g=>g.id===e.leftId),d=t.findIndex(g=>g.id===e.rightId);if(n===-1||d===-1)return t;const r=[...t],l=r[n],i=r[d];if(l.collapsed||i.collapsed||e.leftSize===l.size&&e.rightSize===i.size)return t;const f=e.containerSize??t.reduce((g,w)=>g+w.size,0),u=J(l.minSize,0,f),x=J(l.maxSize,f,f),o=J(i.minSize,0,f),a=J(i.maxSize,f,f),s=l.size+i.size,m=t.reduce((g,w)=>w.collapsed?g:g+w.size,0),y=m-s,b=u+o,E=x+a,S=ce(e.leftSize+e.rightSize,b,E);let v=f>0?f-y:S;Number.isFinite(v)||(v=S);const P=ce(Math.max(S,v),b,E),O=g=>({min:Math.max(u,g-a),max:Math.min(x,g-o)}),X=g=>({min:Math.max(o,g-x),max:Math.min(a,g-u)}),K=Math.abs(e.leftSize-l.size),se=Math.abs(e.rightSize-i.size),$=K>=se;let _=l.size,I=i.size;if($){const g=O(P);if(g.min>g.max)return t;const w=ce(e.leftSize,g.min,g.max),z=P-w;if(z<o||z>a)return t;_=w,I=z}else{const g=X(P);if(g.min>g.max)return t;const w=ce(e.rightSize,g.min,g.max),z=P-w;if(z<u||z>x)return t;I=w,_=z}const te=_+I;if(P!==te)return t;const T=m-l.size-i.size+te,V=f>0?f:T,G=V>0?xe(_,V):0,W=V>0?xe(I,V):0,C=l.sizeUnit==="pixels"||l.originalPixelSize!==void 0?_:l.preferredPixelSize,H=i.sizeUnit==="pixels"||i.originalPixelSize!==void 0?I:i.preferredPixelSize,fe=J(l.autoMinSize,0,f),oe=J(i.autoMinSize,0,f),ue=Math.max(.001,fe),ge=Math.max(.001,oe),ie=l.sizeUnit==="percentage"&&l.originalPixelSize===void 0,ae=i.sizeUnit==="percentage"&&i.originalPixelSize===void 0;let de=l.excludeFromAutoGrowth,pe=i.excludeFromAutoGrowth;ie&&(_<=ue?de=!0:_>ue&&(de=!1)),ae&&(I<=ge?pe=!0:I>ge&&(pe=!1));const Se=Be(l),h=Be(i);return r[n]={...l,size:_,percentageSize:G,preferredPercentageSize:G>0?G:l.preferredPercentageSize,preferredPixelSize:C,sizeBeforeCollapse:Se?_:l.sizeBeforeCollapse,measuredPixelSize:void 0,measuredPercentageSize:void 0,excludeFromAutoGrowth:de},r[d]={...i,size:I,percentageSize:W,preferredPercentageSize:W>0?W:i.preferredPercentageSize,preferredPixelSize:H,sizeBeforeCollapse:h?I:i.sizeBeforeCollapse,measuredPixelSize:void 0,measuredPercentageSize:void 0,excludeFromAutoGrowth:pe},f>0&&ke(r,f)?Re(r):r}case"SET_PANELS":{le.debug("SET_PANELS",e.panels);const n=e.panels.map(u=>{const x=u.sizeUnit==="pixels"||u.originalPixelSize!==void 0,o=u.preferredPercentageSize!==void 0?u.preferredPercentageSize:u.percentageSize,a=u.preferredPixelSize!==void 0?u.preferredPixelSize:x?u.size:u.preferredPixelSize;return{...u,preferredPercentageSize:o,preferredPixelSize:a}}),d=me(t),r=me(n),l=Re(n),i=me(l);let f=d.length===i.length;if(f)for(let u=0;u<i.length;u+=1){const x=i[u],o=d[u];if(!o){f=!1;break}if(!(o.id===x.id&&o.size===x.size&&o.percentageSize===x.percentageSize&&o.sizeBeforeCollapse===x.sizeBeforeCollapse&&o.measuredPercentageSize===x.measuredPercentageSize&&o.collapsed===x.collapsed)){f=!1;break}}return f?(le.debug("set panels skipped (no diff)",{previous:d,incoming:r,next:i,previousLength:d.length,incomingLength:r.length}),t):(le.debug("set panels",{previous:d,incoming:r,next:i,previousLength:d.length,incomingLength:r.length}),l)}case"CONTAINER_RESIZED":{if(le.debug("CONTAINER_RESIZED",e.containerSize),e.containerSize<=0)return le.debug("container resized skipped (non-positive size)",{containerSize:e.containerSize,panels:me(t)}),t;le.debug("container resized (before)",{containerSize:e.containerSize,panels:me(t)});const n=We(t,e.containerSize);if(le.debug("container resized (after recalc)",{containerSize:e.containerSize,panels:me(n)}),e.containerSize>0&&ke(n,e.containerSize)){const d=Re(n);return le.debug("container resized (after reconcile)",{containerSize:e.containerSize,panels:me(d)}),d}return le.debug("container resized (final)",{containerSize:e.containerSize,panels:me(n)}),n}case"COLLAPSE_PANEL":{le.debug("COLLAPSE_PANEL",e.id);const n=t.findIndex(s=>s.id===e.id);if(n===-1)return t;const d=t[n],r=e.from==="start"?d.collapseFromStart:d.collapseFromEnd;if(!(Be(d)&&r)||d.collapsed)return t;const i=d.size,f=d.measuredPixelSize??i,u=d.percentageSize??d.preferredPercentageSize??0,x={...d,collapsed:!0,collapsedByDirection:e.from,sizeBeforeCollapse:i,percentageSizeBeforeCollapse:u,preferredPercentageSizeBeforeCollapse:d.preferredPercentageSize??u,preferredPixelSizeBeforeCollapse:d.preferredPixelSize??i,measuredPixelSizeBeforeCollapse:f,size:0,percentageSize:0,preferredPercentageSize:d.preferredPercentageSize,measuredPixelSize:d.measuredPixelSize!==void 0?0:d.measuredPixelSize,measuredPercentageSize:d.measuredPercentageSize!==void 0?0:d.measuredPercentageSize},o=[...t];o[n]=x;const a=We(o,e.containerSize);return e.containerSize>0&&ke(a,e.containerSize)?Re(a):a}case"EXPAND_PANEL":{le.debug("EXPAND_PANEL",e.id,e.targetSize);const n=t.findIndex(P=>P.id===e.id);if(n===-1)return t;const d=e.containerSize,r=t[n],l=e.from==="start"?r.collapseFromStart:r.collapseFromEnd;if(!(Be(r)&&l&&r.collapsed)||r.collapsedByDirection&&r.collapsedByDirection!==e.from)return t;const f=[e.targetSize,r.sizeBeforeCollapse,r.measuredPixelSizeBeforeCollapse,r.preferredPixelSizeBeforeCollapse,r.originalPixelSize].find(P=>P!==void 0)??0,u=J(r.minSize,0,d),x=J(r.maxSize,d,d),o=ce(f,u,x),a=xe(o,d),s=r.measuredPixelSizeBeforeCollapse??o,m=xe(s,d),y=r.preferredPercentageSizeBeforeCollapse??r.percentageSizeBeforeCollapse??a,b=r.preferredPixelSizeBeforeCollapse??r.preferredPixelSize??o,E={...r,collapsed:!1,collapsedByDirection:null,size:o,percentageSize:a,preferredPercentageSize:y,preferredPixelSize:b,sizeBeforeCollapse:o,percentageSizeBeforeCollapse:void 0,preferredPercentageSizeBeforeCollapse:void 0,preferredPixelSizeBeforeCollapse:void 0,measuredPixelSize:o,measuredPixelSizeBeforeCollapse:s,measuredPercentageSize:m},S=[...t];S[n]=E;const v=We(S,d);return d>0&&ke(v,d)?Re(v):v}default:return t}},Ne=new De(He.INFO,"[resize-panels]"),pt=({direction:t,style:e,onLayout:n,autoSaveId:d,showDebugInfo:r=!1})=>{const[l,i]=p.useReducer(vt,[]),[f,u]=p.useState({width:0,height:0}),[x,o]=p.useState(!1),[a,s]=p.useState(!1),[m,y]=p.useState(null),[b,E]=p.useState({}),[S,v]=p.useState({}),P=p.useRef(null),O=p.useRef(n),X=p.useRef(!1),K=p.useRef(0),se=p.useRef(f),$=p.useRef(f),_=p.useRef(x),I=p.useRef(m?.reason??null),te=p.useRef({}),T=p.useRef(null),V=p.useRef(null),G=p.useCallback(h=>h.map(g=>({...g})),[]);p.useEffect(()=>{$.current=f},[f]),p.useEffect(()=>{_.current=x},[x]),p.useEffect(()=>{I.current=m?.reason??null},[m?.reason]),p.useEffect(()=>{if(m)return;const h=t==="horizontal"?f.width:f.height;!Number.isFinite(h)||h<=4||l.length!==0&&(T.current=G(l))},[m,l,t,f.width,f.height,G]),p.useEffect(()=>{const h=V.current;if(m){V.current=m;return}if(h&&!m&&T.current){V.current=null;const g=G(T.current);i({type:"SET_PANELS",panels:g});return}V.current=m},[m,G]),p.useLayoutEffect(()=>{if(!P.current)return;const h=new ResizeObserver(g=>{for(const w of g){const z=w.target,B=z?Ee(z,"horizontal"):null,F=z?Ee(z,"vertical"):null,j=B?B.inner:0,Y=F?F.inner:0,A=w.contentRect.width,L=w.contentRect.height,k=j>0?j:A,R=Y>0?Y:L;u(D=>(!x&&k>0&&R>0&&o(!0),D.width===k&&D.height===R?D:{width:k,height:R}))}});return h.observe(P.current),()=>h.disconnect()},[x]),p.useLayoutEffect(()=>{const h=se.current,g=f,w=t==="horizontal"?Math.abs(h.width-g.width)>0:Math.abs(h.height-g.height)>0;if(a&&w){const z=t==="horizontal"?g.width:g.height;i({type:"CONTAINER_RESIZED",containerSize:z,direction:t})}se.current=g},[f,a,t]);const W=p.useCallback(()=>{Ne.debug("panels[0]?.id",l[0]?.id);const h=l.some(c=>{if(c.collapsed||c.sizeUnit!=="percentage")return!1;const U=c.collapseFromStart||c.collapseFromEnd?c.sizeBeforeCollapse??c.measuredPixelSizeBeforeCollapse??c.originalPixelSize??c.measuredPixelSize??0:c.measuredPixelSize??c.originalPixelSize??c.size,Z=c.percentageSize!==void 0&&c.percentageSize>0;return c.size<=0&&(U>0||Z)}),g=t==="horizontal"?f.width:f.height,w=g>0;if(m||!w||!(l.length>0&&(l.length!==K.current||!a||h)))return;const F=l.filter(c=>!c.collapsed&&(c.originalPixelSize!==void 0||c.sizeUnit==="pixels")).reduce((c,N)=>{const U=N.preferredPixelSize??N.originalPixelSize??N.size;return c+Math.max(0,U??0)},0),j=l.filter(c=>c.sizeUnit==="percentage"&&!c.collapsed),Y=j.map(c=>c.id),A=j.map(c=>{const N=c.preferredPercentageSize??c.percentageSize;return N!==void 0&&N>0?Ae(N,g):c.size>0?c.size:0}),L=A.reduce((c,N)=>c+N,0),k=g-F,R=Math.max(0,k),D=R>0,Q=l.map(c=>{if(c.collapsed){const N=c.sizeBeforeCollapse??c.measuredPixelSizeBeforeCollapse??c.originalPixelSize??(c.sizeUnit==="pixels"?c.size:void 0),U=c.sizeUnit==="percentage"&&c.percentageSize!==void 0?Ae(c.percentageSize,g):void 0,Z=N??U??0,ee=c.measuredPixelSizeBeforeCollapse??c.measuredPixelSize??Z;return{...c,size:0,percentageSize:0,preferredPercentageSize:c.preferredPercentageSize,sizeBeforeCollapse:Z,percentageSizeBeforeCollapse:c.percentageSizeBeforeCollapse??c.percentageSize??c.preferredPercentageSize??0,preferredPercentageSizeBeforeCollapse:c.preferredPercentageSizeBeforeCollapse??c.preferredPercentageSize??c.percentageSize??void 0,preferredPixelSizeBeforeCollapse:c.preferredPixelSizeBeforeCollapse??c.preferredPixelSize??Z,measuredPixelSizeBeforeCollapse:ee}}if(c.sizeUnit==="pixels"||c.originalPixelSize!==void 0){const N=c.size,U=g>0?xe(N,g):0,Z={...c,size:N,percentageSize:U,preferredPixelSize:c.preferredPixelSize??c.originalPixelSize??N,preferredPercentageSize:c.preferredPercentageSize!==void 0?c.preferredPercentageSize:U>0?U:void 0};if(c.collapseFromStart||c.collapseFromEnd){const ee=c.sizeBeforeCollapse??N,ze=c.measuredPixelSizeBeforeCollapse??c.measuredPixelSize??ee;Z.sizeBeforeCollapse=ee,Z.measuredPixelSizeBeforeCollapse=ze,Z.preferredPixelSizeBeforeCollapse=c.preferredPixelSizeBeforeCollapse??c.preferredPixelSize??ee}return Z}if(c.sizeUnit==="percentage"){const N=Y.indexOf(c.id),U=N!==-1?A[N]:0,Z=J(c.minSize,0,g),ee=J(c.maxSize,g,g),ze=Math.max(Z,c.sizeBeforeCollapse??0,c.measuredPixelSizeBeforeCollapse??0,c.measuredPixelSize??0,c.originalPixelSize??0,c.size>0?c.size:0,c.percentageSize!==void 0?Ae(c.percentageSize,g):0,1),ye=U>0?U:ze;let he;if(!D)he=Z;else if(N!==-1&&L>0){const Pe=ye/L,we=R*Pe;he=ce(we,Z,ee)}else{const Pe=c.percentageSize!==void 0?Ae(c.percentageSize,g):c.size,we=Pe>0?Pe:ye;he=ce(we,Z,ee)}const ve=g>0?xe(he,g):0,Me={...c,size:he,percentageSize:ve,preferredPercentageSize:c.preferredPercentageSize!==void 0?c.preferredPercentageSize:ve>0?ve:void 0};if(c.collapseFromStart||c.collapseFromEnd){const Pe=c.sizeBeforeCollapse??he,we=c.measuredPixelSizeBeforeCollapse??c.measuredPixelSize??Pe;Me.sizeBeforeCollapse=Pe,Me.measuredPixelSizeBeforeCollapse=we,Me.preferredPixelSizeBeforeCollapse=c.preferredPixelSizeBeforeCollapse??c.preferredPixelSize??Pe}return Me}return c}),re=[];for(let c=0;c<Q.length;c+=1){const N=Q[c];N.sizeUnit==="percentage"&&!N.collapsed&&re.push(c)}const q=re.reduce((c,N)=>c+Q[N].size,0),ne=k-q;Math.abs(ne)>0&&dt(Q,ne,g,{enforceAutoMinSize:!0}),i({type:"SET_PANELS",panels:Q}),K.current=l.length,s(!0)},[l,t,f.width,f.height,a,m]);p.useEffect(()=>{const h=t==="horizontal"?f.width:f.height,g=h>0,w=g&&l.length>0,z=w?l.reduce((L,k)=>{if(k.collapsed)return L;const R=J(k.minSize,0,h);return L+Math.max(0,R)},0):null,B=w?l.reduce((L,k)=>{if(k.collapsed)return L;const R=J(k.maxSize,h,h);return L+Math.max(0,R)},0):null,F=z??m?.totalMinimumSize??null,j=B??m?.totalMaximumSize??null;if(!g){m&&y(L=>!L||L.availableContainerSize===h?L:{reason:L.reason,totalMinimumSize:null,totalMaximumSize:null,availableContainerSize:h});return}const Y=F!==null&&F-h>Number.EPSILON,A=j!==null&&h-j>Number.EPSILON;if(Y||A){const k={reason:Y?"minimum-exceeded":"maximum-insufficient",totalMinimumSize:F,totalMaximumSize:j,availableContainerSize:h};y(R=>R&&R.reason===k.reason&&Math.abs((R.totalMinimumSize??0)-(k.totalMinimumSize??0))<=Number.EPSILON&&Math.abs((R.totalMaximumSize??0)-(k.totalMaximumSize??0))<=Number.EPSILON&&Math.abs(R.availableContainerSize-k.availableContainerSize)<=Number.EPSILON?R:k);return}if(m){const L=m.reason==="minimum-exceeded",k=m.reason==="maximum-insufficient";(!L||F!==null)&&(!k||j!==null)&&!Y&&!A&&y(q=>q&&null)}},[l,t,f.width,f.height,m]),p.useEffect(()=>{W()},[W]),p.useEffect(()=>{O.current=n},[n]);const C=p.useMemo(()=>l.map(h=>h.size),[l]);p.useLayoutEffect(()=>{C.length>0&&O.current&&O.current(C)},[C]),p.useEffect(()=>{if(d&&C.length>0){const h=setTimeout(()=>{ut(d,C)},200);return()=>clearTimeout(h)}},[d,C]),p.useEffect(()=>{if(!d||l.length===0||X.current)return;const h=t==="horizontal"?f.width:f.height;if(h<=0)return;const g=ft(d);if(g&&g.length===l.length){const w=l.map((z,B)=>{const F=J(z.minSize,0,h),j=J(z.maxSize,h,h),Y=ce(g[B],F,j),A=xe(Y,h),L=z.sizeUnit==="pixels"||z.originalPixelSize!==void 0?Y:z.preferredPixelSize;return{...z,size:Y,percentageSize:A,preferredPercentageSize:A>0?A:z.preferredPercentageSize,preferredPixelSize:L}});i({type:"SET_PANELS",panels:w}),X.current=!0}},[d,l,f.width,f.height,t]);const H=p.useCallback(h=>{const g=$.current,w=te.current,z=JSON.stringify({id:h.id,size:h.size??null,percentageSize:h.percentageSize??null,preferredPercentageSize:h.preferredPercentageSize??null,preferredPixelSize:h.preferredPixelSize??null,sizeUnit:h.sizeUnit,originalPixelSize:h.originalPixelSize??null,minSize:h.minSize??null,maxSize:h.maxSize??null,collapseFromStart:h.collapseFromStart,collapseFromEnd:h.collapseFromEnd,collapsed:h.collapsed??!1,collapsedByDirection:h.collapsedByDirection??null,sizeBeforeCollapse:h.sizeBeforeCollapse??null,percentageSizeBeforeCollapse:h.percentageSizeBeforeCollapse??null,preferredPercentageSizeBeforeCollapse:h.preferredPercentageSizeBeforeCollapse??null,preferredPixelSizeBeforeCollapse:h.preferredPixelSizeBeforeCollapse??null,pixelAdjustPriority:h.pixelAdjustPriority??null});if(w[h.id]===z){Ne.debug("useResizablePanels.registerPanel skipped",{panelId:h.id,reason:"duplicate-registration"});return}w[h.id]=z,Ne.debug("useResizablePanels.registerPanel",{panelId:h.id,containerReady:_.current,violationReason:I.current,containerSize:{width:g.width,height:g.height}}),i({type:"REGISTER_PANEL",panel:h})},[]),fe=p.useCallback(h=>{const g=$.current;Ne.debug("useResizablePanels.unregisterPanel",{panelId:h,containerReady:_.current,violationReason:I.current,containerSize:{width:g.width,height:g.height}}),i({type:"UNREGISTER_PANEL",id:h}),delete te.current[h],E(w=>{if(!(h in w))return w;const z={...w};return delete z[h],z})},[]),oe=p.useCallback((h,g,w,z)=>{const B=t==="horizontal"?f.width:f.height,F=l.find(q=>q.id===h),j=l.find(q=>q.id===g);if(!(F&&j)){i({type:"RESIZE_PANELS",leftId:h,rightId:g,leftSize:w,rightSize:z,containerSize:B});return}if(F.collapsed||j.collapsed)return;const Y=J(F.minSize,0,B),A=J(F.maxSize,B,B),L=J(j.minSize,0,B),k=J(j.maxSize,B,B);let R=ce(w,Y,A),D=ce(z,L,k);const Q=R+D,re=w+z;if(Q!==re){const q=re-Q;if(q>0){const ne=A-R,c=k-D,N=ne+c;if(N>0){const U=Math.min(q*(ne/N),ne),Z=Math.min(q-U,c);R+=U,D+=Z}}else if(q<0){const ne=Math.abs(q),c=R-Y,N=D-L,U=c+N;if(U>0){const Z=Math.min(ne*(c/U),c),ee=Math.min(ne-Z,N);R-=Z,D-=ee}}}R=ce(R,Y,A),D=ce(D,L,k),R+D!==re&&Ne.error("Total size after constraints should be close to the original total size.",{constrainedLeftSize:R,constrainedRightSize:D,originalTotalSize:re}),i({type:"RESIZE_PANELS",leftId:h,rightId:g,leftSize:R,rightSize:D,containerSize:B})},[t,f.width,f.height,l]),ue=p.useCallback((h,g)=>{const w=t==="horizontal"?f.width:f.height;i({type:"COLLAPSE_PANEL",id:h,from:g,containerSize:w})},[t,f.width,f.height]),ge=p.useCallback((h,g,w)=>{const z=t==="horizontal"?f.width:f.height;i({type:"EXPAND_PANEL",id:h,from:g,containerSize:z,targetSize:w})},[t,f.width,f.height]),ie=p.useCallback(h=>l.find(g=>g.id===h),[l]),ae=p.useCallback((h,g)=>{E(w=>{if(g===null){if(!(h in w))return w;const B={...w};return delete B[h],B}const z=w[h];return z&&z.pixelSize===g.pixelSize&&z.percentageSize===g.percentageSize?w:{...w,[h]:g}})},[]),de=p.useCallback((h,g)=>{v(w=>{if(g===null){if(!(h in w))return w;const B={...w};return delete B[h],B}const z=w[h];return z&&Math.abs(z.thickness-g.thickness)<=.25&&z.visible===g.visible&&z.direction===g.direction&&z.startPanelId===g.startPanelId&&z.endPanelId===g.endPanelId?w:{...w,[h]:g}})},[]),pe=p.useMemo(()=>({direction:t,panels:l,containerSize:f,isContainerReady:x,showDebugInfo:r,registerPanel:H,unregisterPanel:fe,resizePanels:oe,collapsePanel:ue,expandPanel:ge,getPanel:ie,reportPanelMeasurement:ae,panelMeasurements:b,reportHandleMeasurement:de,handleMeasurements:S,layoutConstraintViolation:m}),[t,l,f,x,r,H,fe,oe,ue,ge,ie,ae,b,de,S,m]),Se=p.useMemo(()=>({display:"flex",flexDirection:t==="horizontal"?"row":"column",alignItems:"stretch",width:"100%",height:"100%",minWidth:"0px",minHeight:"0px",position:"relative",overflow:"hidden",...e}),[t,e]);return{groupRef:P,contextValue:pe,groupStyle:Se}},Mt=t=>{const{getPanel:e,collapsePanel:n,expandPanel:d}=Ge(),r=e(t),l=p.useCallback(u=>{n(t,u)},[n,t]),i=p.useCallback((u,x)=>{d(t,u,x)},[d,t]),f=p.useCallback((u,x)=>{r?.collapsed?i(u,x):l(u)},[r?.collapsed,l,i]);return p.useMemo(()=>({panel:r,isCollapsed:r?.collapsed??!1,canCollapseFromStart:r?.collapseFromStart??!1,canCollapseFromEnd:r?.collapseFromEnd??!1,collapse:l,expand:i,toggle:f}),[r,l,i,f])},Et=({panel:t,measuredPixelSize:e,measuredPercentageSize:n,containerAxisSize:d,containerLabel:r})=>{const l=t?.size,i=typeof l=="number"&&Number.isFinite(l)?`${l.toFixed(3)}px`:"-",f=t?.percentageSize!==void 0?`${t.percentageSize.toFixed(3)}%`:"-",u=Number.isFinite(e)?`${e.toFixed(3)}px`:"-",x=Number.isFinite(n)?`${n.toFixed(3)}%`:"-",o=Number.isFinite(d)?`${d.toFixed(3)}px`:"-",a=`${i} / ${f}`,s=`${u} / ${x}`,m=t?.sizeUnit==="pixels"?"Fixed":"Flexible",y=[m,`${r}: ${o}`,`size (state): ${a}`,`size (measured): ${s}`];return{stateValueDisplay:a,measuredValueDisplay:s,containerDisplay:o,headlineLabel:m,titleText:y.join(`
|
|
2
|
+
`)}},wt=p.memo(({panel:t,measuredPixelSize:e,measuredPercentageSize:n,containerAxisSize:d,direction:r})=>{const l=r==="horizontal"?"container width":"container height",{stateValueDisplay:i,measuredValueDisplay:f,containerDisplay:u,headlineLabel:x,titleText:o}=p.useMemo(()=>Et({panel:t,measuredPixelSize:e,measuredPercentageSize:n,containerAxisSize:d,containerLabel:l}),[t,e,n,d,l]),a={position:"absolute",top:"2px",right:"4px",backgroundColor:"rgba(30, 41, 59, 0.6)",color:"#fff",padding:"4px 8px",borderRadius:"6px",fontSize:"11px",fontFamily:"monospace",pointerEvents:"auto",zIndex:10,boxShadow:"0 2px 4px rgba(0,0,0,0.3)",border:"1px solid rgba(255,255,255,0.1)",maxWidth:"calc(100% - 12px)",minWidth:"60px",width:"fit-content",overflow:"hidden"},s={display:"flex",flexDirection:"column",gap:"1px",minWidth:"0",width:"100%"},m={display:"flex",justifyContent:"flex-start",alignItems:"center",gap:"6px",fontSize:"10px",color:"#ccc",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",minWidth:"0",width:"100%"},y={display:"flex",justifyContent:"space-between",alignItems:"center",gap:"6px",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",minWidth:"0",width:"100%"},b={marginLeft:"auto",fontVariantNumeric:"tabular-nums",whiteSpace:"nowrap"};return M.jsx("div",{style:a,title:o,children:M.jsxs("div",{style:s,children:[M.jsx("div",{style:m,children:M.jsx("span",{children:x})}),M.jsxs("div",{style:y,children:[M.jsx("span",{children:l}),M.jsx("span",{style:b,children:u})]}),M.jsxs("div",{style:y,children:[M.jsx("span",{children:"size (state)"}),M.jsx("span",{style:b,children:i})]}),M.jsxs("div",{style:y,children:[M.jsx("span",{children:"size (measured)"}),M.jsx("span",{style:b,children:f})]})]})})}),Ve=new De(He.INFO,"[resize-panels]"),Rt={both:{collapseFromStart:!0,collapseFromEnd:!0},start:{collapseFromStart:!0,collapseFromEnd:!1},end:{collapseFromStart:!1,collapseFromEnd:!0}},Bt=t=>{if(!t)return{collapseFromStart:!1,collapseFromEnd:!1};const e=Rt[t.from];if(!e)throw new Error("Invalid collapsible configuration: unsupported 'from' value");return e},Qe=({ref:t,setState:e,panelIdRef:n,label:d})=>r=>{if(!Number.isFinite(r))return;const l=r<0?0:r;t.current!==l&&(t.current=l,Ve.debug(`commit ${d}`,{panelId:n.current,[d]:l}),e(l))},It=p.memo(({id:t,defaultSize:e={value:50,unit:"percentage"},minSize:n,maxSize:d,autoMinSize:r,className:l,style:i,children:f,order:u=0,collapsible:x,defaultCollapsed:o=!1,pixelAdjustPriority:a,flexAdjustPriority:s,contentOverflow:m="auto"})=>{const{direction:y,registerPanel:b,unregisterPanel:E,getPanel:S,showDebugInfo:v,isContainerReady:P,reportPanelMeasurement:O,containerSize:X}=Ge(),K=p.useRef(null),se=p.useId(),$=p.useRef(t||`panel-${se}`),_=p.useMemo(()=>Bt(x),[x]),I=_.collapseFromStart||_.collapseFromEnd,te=p.useMemo(()=>I?_.collapseFromStart?"start":_.collapseFromEnd?"end":null:null,[I,_.collapseFromStart,_.collapseFromEnd]),T=I&&o,V=p.useMemo(()=>Te(e),[e]),G=V?.unit==="pixels",W=G?void 0:V?.value,C=S($.current),H=!!C?.collapsed,fe=(C?.size??0)<=0,oe=H||fe,[ue,ge]=p.useState(()=>G&&V?V.value:C?.size!==void 0?C.size:0),[ie,ae]=p.useState(()=>!G&&V?V.value:C?.percentageSize!==void 0?C.percentageSize:0),de=p.useRef(ie);de.current=ie;const pe=p.useRef(ue);pe.current=ue;const Se=p.useMemo(()=>Qe({ref:pe,setState:ge,panelIdRef:$,label:"pixel"}),[]),h=p.useMemo(()=>Qe({ref:de,setState:ae,panelIdRef:$,label:"percentage"}),[]),g=p.useCallback(()=>{pe.current!==0&&(pe.current=0,ge(0)),de.current!==0&&(de.current=0,ae(0))},[]);p.useEffect(()=>{if(!P)return;let R=0;if(G&&V){let U=V.value;n&&typeof n=="object"&&n.unit==="pixels"&&(U=Math.max(U,n.value)),d&&typeof d=="object"&&d.unit==="pixels"&&(U=Math.min(U,d.value)),R=U}const D=T,Q=D?te:null;o&&!I&&Ve.warn("Panel defaultCollapsed is ignored because collapsible configuration is not provided.");const re=I&&D&&G?R:void 0,q=I?W:void 0,ne=G?R:void 0,c={id:$.current,size:D?0:R,percentageSize:D?0:W,preferredPercentageSize:W,preferredPixelSize:ne,sizeUnit:V?.unit||"percentage",originalPixelSize:G?R:void 0,minSize:n,maxSize:d,collapseFromStart:_.collapseFromStart,collapseFromEnd:_.collapseFromEnd,collapsedByDirection:Q,collapsed:D,sizeBeforeCollapse:re,percentageSizeBeforeCollapse:q,preferredPercentageSizeBeforeCollapse:I?W:void 0,preferredPixelSizeBeforeCollapse:I?ne:void 0,pixelAdjustPriority:a,flexAdjustPriority:s,autoMinSize:r};return b(c),()=>{E($.current),O($.current,null)}},[r,_.collapseFromEnd,_.collapseFromStart,o,V,s,I,P,G,d,n,a,te,W,b,O,T,E]);const w=C?.size??0;p.useEffect(()=>{const R=K.current;if(!R)return;const D=()=>{if(!C)return;const c=R.parentElement;if(!c)return;const N=R.getBoundingClientRect(),U=Ee(c,"horizontal"),Z=Ee(c,"vertical"),ee=y==="horizontal"?N.width:N.height,ze=y==="horizontal"?U.inner:Z.inner,ye=$e(ze);if(oe){g();return}const he=C.size??0,ve=Math.max(2,ye*.5);if(he>ye&&ee<ve){Ve.debug("skip noisy measurement",{panelId:$.current,expectedPanelSize:he,measured:ee,noiseThreshold:ve});return}if(ee>0){Se(ee),ze>0&&h(ee/ze*100);return}C.size!==void 0&&Se(C.size),C.percentageSize!==void 0?h(C.percentageSize):C.sizeUnit==="pixels"&&C.size!==void 0&&ze>0&&h(C.size/ze*100)},Q=new ResizeObserver(()=>{D()});Q.observe(R),D();const re=[],q=new MutationObserver(()=>{(()=>{if(!K.current)return!1;const N=K.current.getBoundingClientRect();return(y==="horizontal"?N.width:N.height)!==pe.current})()&&setTimeout(D,0)}),ne=R.parentElement;return ne&&q.observe(ne,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["style","class"]}),()=>{Q.disconnect(),q.disconnect();for(const c of re)clearTimeout(c)}},[h,Se,C,y,oe,g]);const z=C?.size,B=C?.percentageSize,F=C?.sizeUnit;p.useEffect(()=>{if(C){if(oe){g();return}if(z!==void 0&&Se(z),B!==void 0)h(B);else if(F==="pixels"&&z!==void 0){const R=K.current,D=R?.parentElement;if(R&&D){const{width:Q,height:re}=R.getBoundingClientRect(),q=D.clientWidth,ne=D.clientHeight,c=y==="horizontal"?Q:re,N=y==="horizontal"?q:ne;if(c>0&&N>0){const U=c/N*100;h(U)}}}}},[h,Se,C,B,z,F,y,oe,g]),p.useEffect(()=>{O($.current,{pixelSize:ue,percentageSize:ie})},[O,ue,ie]);const j=()=>oe?"0px":C?.originalPixelSize!==void 0?`${w}px`:C?.percentageSize!==void 0?`${C.percentageSize}%`:`${w}px`,Y=C?.sizeUnit==="percentage"&&!C?.collapsed?1:0,A={flexBasis:j(),flexGrow:0,flexShrink:Y,overflow:"hidden",position:"relative",boxSizing:"border-box",minHeight:"0px",minWidth:"0px",...i};y==="horizontal"?(A.height="100%",A.minWidth=0):(A.width="100%",A.minHeight=0),oe&&(y==="horizontal"?(A.width="0px",A.minWidth="0px"):(A.height="0px",A.minHeight="0px"),A.flexGrow=0,A.flexShrink=0,A.pointerEvents="none",A.visibility="hidden",H&&(A.display="none"));const L=y==="horizontal"?X.width:X.height,k=p.useMemo(()=>({position:"absolute",inset:"0px",overflow:m,display:"flex",flexDirection:"column",width:"100%",height:"100%",minWidth:"0px",minHeight:"0px"}),[m]);return M.jsxs("div",{ref:K,className:Le.twMerge("panel",l),style:A,"data-panel-id":$.current,"data-panel-size":w,"data-panel-size-unit":C?.sizeUnit||"percentage","data-panel-pixel-size":C?.sizeUnit==="pixels"?C?.originalPixelSize:null,"data-panel-order":u,"data-panel-collapsible":I,"data-panel-collapse-start":_.collapseFromStart,"data-panel-collapse-end":_.collapseFromEnd,"data-panel-collapsed":C?.collapsed,"aria-hidden":oe,children:[M.jsx("div",{style:k,children:f}),v&&M.jsx(wt,{panel:C,measuredPixelSize:ue,measuredPercentageSize:ie,containerAxisSize:L,direction:y})]})}),Ft=t=>JSON.stringify(t.map(e=>({id:e.id,size:e.size,percentageSize:e.percentageSize??null,preferredPercentageSize:e.preferredPercentageSize??null,preferredPixelSize:e.preferredPixelSize??null,sizeUnit:e.sizeUnit,originalPixelSize:e.originalPixelSize??null,minSize:e.minSize??null,maxSize:e.maxSize??null,autoMinSize:e.autoMinSize??null,collapseFromStart:e.collapseFromStart,collapseFromEnd:e.collapseFromEnd,collapsedByDirection:e.collapsedByDirection??null,collapsed:e.collapsed??!1,sizeBeforeCollapse:e.sizeBeforeCollapse??null,preferredPercentageSizeBeforeCollapse:e.preferredPercentageSizeBeforeCollapse??null,preferredPixelSizeBeforeCollapse:e.preferredPixelSizeBeforeCollapse??null,measuredPixelSizeBeforeCollapse:e.measuredPixelSizeBeforeCollapse??null,pixelAdjustPriority:e.pixelAdjustPriority??null,flexAdjustPriority:e.flexAdjustPriority??null,measuredPixelSize:e.measuredPixelSize??null,measuredPercentageSize:e.measuredPercentageSize??null}))),Nt=t=>JSON.stringify(t.map(e=>({id:e.id,thickness:e.thickness,visible:e.visible,direction:e.direction,startPanelId:e.startPanelId??null,endPanelId:e.endPanelId??null}))),At=()=>{const t=new Set,e=new Map,n=new Set;let d=null,r=0,l=!0,i=[],f={ownerId:null,groups:i};const u=()=>{for(const S of t)S()},x=()=>{l=!0,u()},o=()=>{const S=d;if(S&&n.has(S))return!1;d=null;const v=n.values().next();return v.done||(d=v.value),S!==d};return{subscribe:S=>(t.add(S),()=>{t.delete(S)}),getSnapshot:()=>(o()&&(l=!0),l&&(i=Array.from(e.values()).sort((v,P)=>v.index-P.index).map(({serializedPanels:v,serializedHandles:P,...O})=>O),f={ownerId:d,groups:i},l=!1),f),getOwnerId:()=>(o()&&(l=!0),d),enableGroup:S=>{const v=n.size;n.add(S),n.size!==v&&o()&&x()},disableGroup:S=>{n.delete(S)&&o()&&x()},updateGroup:(S,v)=>{const P=e.get(S),O=P?.index??r++,X=Ft(v.panels),K=Nt(v.handles),se=P?.displayName!==v.displayName,$=P?.direction!==v.direction,_=P?P.containerSize.width!==v.containerSize.width||P.containerSize.height!==v.containerSize.height:!0;let I=P?.serializedPanels!==X;if(!I&&P)if(P.panels.length!==v.panels.length)I=!0;else for(let W=0;W<v.panels.length;W+=1){const C=P.panels[W],H=v.panels[W];if(!(C&&H)){I=!0;break}if(C.id!==H.id||C.size!==H.size||C.percentageSize!==H.percentageSize||C.collapsed!==H.collapsed||C.measuredPixelSize!==H.measuredPixelSize||C.measuredPercentageSize!==H.measuredPercentageSize){I=!0;break}}let te=P?.serializedHandles!==K;if(!te&&P)if(P.handles.length!==v.handles.length)te=!0;else for(let W=0;W<v.handles.length;W+=1){const C=P.handles[W],H=v.handles[W];if(!(C&&H)){te=!0;break}if(C.id!==H.id||C.thickness!==H.thickness||C.visible!==H.visible||C.direction!==H.direction||C.startPanelId!==H.startPanelId||C.endPanelId!==H.endPanelId){te=!0;break}}if(!P&&v.panels.length===0&&v.handles.length===0||P&&!se&&!$&&!_&&!I&&!te)return;const T=v.panels.map(W=>({...W})),V=v.handles.map(W=>({...W})),G={...v.containerSize};e.set(S,{groupId:S,displayName:v.displayName,direction:v.direction,containerSize:G,panels:T,handles:V,index:O,serializedPanels:X,serializedHandles:K}),x()},removeGroup:S=>{const v=e.delete(S),P=n.delete(S),O=o();(v||P||O)&&x()}}},Ce=At(),Lt=()=>p.useSyncExternalStore(Ce.subscribe,Ce.getOwnerId,Ce.getOwnerId),Dt=()=>p.useSyncExternalStore(Ce.subscribe,Ce.getSnapshot,Ce.getSnapshot),Ot=t=>{Ce.enableGroup(t)},et=t=>{Ce.disableGroup(t)},_t=(t,e)=>{Ce.updateGroup(t,e)},tt=t=>{Ce.removeGroup(t)};let it=0;const jt=()=>(it+=1,`panel-group-${it}`),Ie=(t,e)=>typeof t!="number"||!Number.isFinite(t)?"—":`${(t<0?0:t).toFixed(8)}${e}`,kt={position:"fixed",left:"50%",bottom:"20px",transform:"translate(-50%, 0)",zIndex:100,maxWidth:"min(90vw, 1120px)",width:"100%",borderRadius:"14px",backgroundColor:"rgba(15, 23, 42, 0.72)",color:"#e2e8f0",fontFamily:"monospace",fontSize:"11px",lineHeight:1.6,boxShadow:"0 22px 45px rgba(15,23,42,0.45)",border:"1px solid rgba(148, 163, 184, 0.22)",backdropFilter:"blur(10px)",WebkitBackdropFilter:"blur(10px)",pointerEvents:"auto",overflow:"auto"},Tt={display:"flex",justifyContent:"space-between",alignItems:"center",flexWrap:"wrap",gap:"12px"},Gt={display:"flex",flexDirection:"column",gap:"4px"},Ht={padding:"6px 10px",borderRadius:"9999px",border:"1px solid rgba(148, 163, 184, 0.35)",color:"#e2e8f0",fontWeight:600,fontSize:"10px",letterSpacing:"0.03em",textTransform:"uppercase",cursor:"pointer",transition:"background-color 0.18s ease, border-color 0.18s ease"},Ut={padding:"10px 12px",borderRadius:"10px",backgroundColor:"rgba(30, 41, 59, 0.55)",border:"1px solid rgba(148, 163, 184, 0.18)",display:"flex",flexDirection:"column",gap:"10px"},Wt={padding:"8px 10px",borderRadius:"8px",backgroundColor:"rgba(15, 23, 42, 0.55)",border:"1px solid rgba(148, 163, 184, 0.16)",display:"flex",flexDirection:"column",gap:"4px"},rt={display:"flex",justifyContent:"space-between",alignItems:"center",gap:"6px"},$t={display:"grid",gridTemplateColumns:"auto 1fr",gap:"2px 10px",color:"#e2e8f0"},Vt={padding:"2px 6px",borderRadius:"9999px",fontSize:"10px",textTransform:"uppercase"},Yt=t=>{const e=t.reason==="minimum-exceeded",n=e?"Layout unavailable: minimum panel sizes exceed the container.":"Layout unavailable: panels cannot fill the container with their maximum sizes.",d=e?`Min required: ${Math.ceil(t.totalMinimumSize??0)}px | Available: ${Math.floor(t.availableContainerSize)}px`:`Max total: ${Math.floor(t.totalMaximumSize??0)}px | Needed: ${Math.floor(t.availableContainerSize)}px`;return{summary:n,detail:d}},qt=(t,e)=>{let n=!1;const d=t.map(r=>{const l=e[r.id];return!l||r.measuredPixelSize===l.pixelSize&&r.measuredPercentageSize===l.percentageSize?r:(n=!0,{...r,measuredPixelSize:l.pixelSize,measuredPercentageSize:l.percentageSize})});return n?d:t},nt=(t,e,n)=>{const d=Ee(t,"horizontal"),r=Ee(t,"vertical"),l=t.getBoundingClientRect(),i=d.inner>0?d.inner:e??l.width,f=r.inner>0?r.inner:n??l.height;return{width:i,height:f}},Zt=t=>{const{id:e,className:n,style:d,children:r,direction:l}=t,{groupRef:i,contextValue:f,groupStyle:u}=pt(t),[x,o]=p.useState({width:0,height:0}),a=f.layoutConstraintViolation,s=!!a,m=p.useMemo(()=>{if(!a)return null;const{summary:T,detail:V}=Yt(a);return M.jsxs("div",{className:"flex w-full flex-1 flex-col items-center justify-center gap-2 rounded-lg border border-slate-300 border-dashed bg-slate-100/70 px-6 py-8 text-center text-slate-600 text-sm dark:border-slate-600 dark:bg-slate-800/50 dark:text-slate-200","data-panel-group-placeholder":"constraint-violation",children:[M.jsx("span",{children:T}),M.jsx("span",{className:"text-slate-500 text-xs dark:text-slate-400",children:V})]})},[a]),b=p.useRef(e??jt()).current,E=e??b,S=f.showDebugInfo&&f.panels.length>0,v=S?f.panels:[],P=S?f.panelMeasurements:{},O=p.useMemo(()=>{if(!S)return[];const T=Object.values(f.handleMeasurements);return T.length<=1?T:T.slice().sort((V,G)=>V.id.localeCompare(G.id))},[f.handleMeasurements,S]),X=f.containerSize,K=x.width>0?x.width:X.width,se=x.height>0?x.height:X.height,$=Lt(),_=S&&$===b;p.useLayoutEffect(()=>{if(!S){o({width:0,height:0});return}if(typeof window>"u"||typeof ResizeObserver>"u")return;const T=i.current;if(!T)return;const V=W=>{o(C=>C.width===W.width&&C.height===W.height?C:W)},G=new ResizeObserver(W=>{for(const C of W){if(C.target!==T)continue;const H=nt(T,C.contentRect.width,C.contentRect.height);V(H)}});return G.observe(T),V(nt(T)),()=>{G.disconnect()}},[i,S]);const I=p.useMemo(()=>qt(v,P),[v,P]);p.useEffect(()=>{if(!S){et(b),tt(b);return}return Ot(b),()=>{et(b),tt(b)}},[S,b]),p.useEffect(()=>{S&&_t(b,{displayName:E,direction:l,containerSize:{width:K,height:se},panels:I,handles:O})},[S,b,E,l,K,se,I,O]);const te=p.useMemo(()=>{const T={...u,...d};return T.position||(T.position="relative"),T},[u,d]);return M.jsxs(Ye.Provider,{value:f,children:[M.jsxs("div",{ref:i,className:Le.twMerge("panel-group",l==="horizontal"?"flex-row":"flex-col",n),style:te,"data-panel-group-id":e,"data-panel-group-direction":l,children:[r,s&&m?M.jsx("div",{className:"pointer-events-auto",style:{position:"absolute",inset:0,zIndex:40,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",backgroundColor:"rgba(248, 250, 252, 0.82)",backdropFilter:"blur(2px)"},children:m}):null]}),_&&M.jsx(Xt,{})]})},Xt=()=>{const e=Dt().groups,[n,d]=p.useState(!0);if(e.length===0||typeof document>"u")return null;const r=e.reduce((u,x)=>u+x.panels.length,0),l=e.reduce((u,x)=>u+(x.handles?.length??0),0),i=()=>d(u=>!u),f=M.jsxs("div",{style:{...kt,padding:n?"10px 18px":"14px 18px",maxHeight:n?"52px":"min(65vh, 520px)",transition:"max-height 0.24s ease, padding 0.24s ease"},children:[M.jsxs("div",{style:{...Tt,marginBottom:n?0:"12px"},children:[M.jsxs("div",{style:Gt,children:[M.jsx("span",{style:{fontWeight:700,fontSize:"12px",letterSpacing:"0.03em"},children:"Panel Overview"}),M.jsxs("span",{style:{color:"#cbd5f5"},children:["groups: ",e.length," / panels: ",r," / resizers: ",l]})]}),M.jsx("button",{type:"button",onClick:i,style:{...Ht,backgroundColor:n?"rgba(59, 130, 246, 0.2)":"rgba(71, 85, 105, 0.45)"},title:n?"Panel Overview を開く":"Panel Overview を閉じる",children:n?"開く":"閉じる"})]}),!n&&M.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"12px",maxHeight:"45vh",overflowY:"auto",paddingRight:"6px"},children:e.map((u,x)=>{const o=u.direction==="horizontal"?u.containerSize.width:u.containerSize.height;return M.jsxs("div",{style:Ut,children:[M.jsxs("div",{style:{...rt,flexWrap:"wrap",gap:"10px",color:"#dbeafe"},children:[M.jsxs("span",{style:{fontWeight:600,fontSize:"11px",letterSpacing:"0.02em",textTransform:"uppercase"},children:["group ",x+1,": ",u.displayName]}),M.jsxs("span",{children:["direction: ",u.direction," / container: ",Ie(u.containerSize.width,"px")," × ",Ie(u.containerSize.height,"px")]})]}),M.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(220px, 1fr))",gap:"10px"},children:u.panels.map((a,s)=>{const m=a.measuredPixelSize??a.size,y=a.size,b=Ie(y,"px"),E=a.percentageSize??(o>0?a.size/o*100:void 0),S=a.measuredPercentageSize!==void 0?a.measuredPercentageSize:o>0?m/o*100:void 0,v=a.collapsed||m<=ot,P=a.collapsed?"collapsed":v?"hidden":"visible",O=Ie(E,"%"),X=Ie(S,"%"),K=Ie(m,"px");return M.jsxs("div",{style:Wt,children:[M.jsxs("div",{style:rt,children:[M.jsx("span",{style:{flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis"},children:a.id}),M.jsx("span",{style:{...Vt,backgroundColor:a.collapsed?"rgba(251, 113, 133, 0.25)":v?"rgba(250, 204, 21, 0.25)":"rgba(74, 222, 128, 0.25)",color:a.collapsed?"#fecdd3":v?"#fef08a":"#bbf7d0"},children:P})]}),M.jsxs("div",{style:$t,children:[M.jsx("span",{children:"size (state):"}),M.jsx("span",{children:b}),M.jsx("span",{children:"size (measured):"}),M.jsx("span",{children:K}),M.jsx("span",{children:"percentage (state):"}),M.jsx("span",{children:O}),M.jsx("span",{children:"percentage (measured):"}),M.jsx("span",{children:X}),M.jsx("span",{children:"unit:"}),M.jsx("span",{children:a.sizeUnit}),M.jsx("span",{children:"min:"}),M.jsx("span",{children:a.minSize!==void 0?JSON.stringify(a.minSize):"—"}),M.jsx("span",{children:"auto min:"}),M.jsx("span",{children:a.autoMinSize!==void 0?JSON.stringify(a.autoMinSize):"—"}),M.jsx("span",{children:"max:"}),M.jsx("span",{children:a.maxSize!==void 0?JSON.stringify(a.maxSize):"—"}),M.jsx("span",{children:"priority:"}),M.jsx("span",{children:a.pixelAdjustPriority??"—"}),M.jsx("span",{children:"flex priority:"}),M.jsx("span",{children:a.flexAdjustPriority??"—"})]})]},a.id||s)})})]},u.groupId)})})]});return mt.createPortal(f,document.body)},Jt=p.memo(({id:t,disabled:e=!1,className:n,style:d,children:r,onDragging:l})=>{const{direction:i,resizePanels:f,getPanel:u,collapsePanel:x,expandPanel:o,panels:a,reportHandleMeasurement:s,containerSize:m,layoutConstraintViolation:y}=Ge(),[b,E]=p.useState(!1),S=p.useRef(null),v=p.useRef(null),P=p.useRef(""),O=p.useRef(""),[X,K]=p.useState({left:null,right:null}),se=p.useId(),$=p.useRef(t??`resize-handle-${se}`),_=p.useRef(null),I=t??$.current,te=!!y,T=e||te;p.useEffect(()=>{if(S.current){const z=S.current.parentElement;if(z){v.current=z;const B=Array.from(z.children),F=S.current,j=B.indexOf(F);if(j>0&&j<B.length-1){let Y=null,A=null;for(let L=j-1;L>=0;L-=1){const k=B[L];if(k.dataset.panelId){Y=k;break}}for(let L=j+1;L<B.length;L+=1){const k=B[L];if(k.dataset.panelId){A=k;break}}P.current=Y?.dataset.panelId||"",O.current=A?.dataset.panelId||"",K({left:P.current||null,right:O.current||null})}}}},[]),p.useEffect(()=>{if(I===$.current)return;const z=$.current;$.current=I,_.current=null,z!==I&&s(z,null)},[s,I]),p.useEffect(()=>{const z=$.current;return()=>{s(z,null)}},[s]);const V=p.useCallback(z=>{if(T||!v.current)return;z.preventDefault(),z.stopPropagation();const B=v.current,{inner:F}=Ee(B,i),j={x:z.clientX,y:z.clientY},Y=u(P.current),A=u(O.current);if(!(Y&&A))return;const L=Y.size,k=A.size;let R=0;const D=Pt;E(!0),l?.(!0),z.currentTarget.setPointerCapture(z.pointerId);const Q=q=>{if(!S.current)return;q.preventDefault(),q.stopPropagation();const ne=performance.now();if(ne-R<D)return;R=ne;const c=i==="horizontal"?q.clientX-j.x:q.clientY-j.y;if(c===0)return;const N=L+c,U=k-c,Z=u(P.current),ee=u(O.current);if(Z&&ee&&P.current&&O.current){const ze=J(Z.minSize,0,F),ye=J(ee.minSize,0,F),he=ze,ve=ye,Me=Math.min(F*at,lt),Pe=Math.min(F*bt,Ct),we=ee.collapseFromStart,zt=ee.collapsedByDirection??"start";if(we&&!ee.collapsed&&U<=Math.max(ye*.3,Me)){x(O.current,"start");return}const xt=Z.collapseFromEnd,gt=Z.collapsedByDirection??"end";if(xt&&!Z.collapsed&&N<=Math.max(ze*.3,Me)){x(P.current,"end");return}if(ee.collapsed&&U>Math.max(ye*.3,Pe)){o(O.current,zt,U);return}if(Z.collapsed&&N>Math.max(ze*.3,Pe)){o(P.current,gt,N);return}if(F>0){const qe=Z.size+ee.size,Oe=$e(F);let Ue=!1;if(he<=Oe&&N<=Oe&&L!==0){const Fe=Math.max(0,qe-0);Fe>=ve&&(f(P.current,O.current,0,Fe),Ue=!0)}else if(ve<=Oe&&U<=Oe&&k!==0){const Fe=Math.max(0,qe-0);Fe>=he&&(f(P.current,O.current,Fe,0),Ue=!0)}if(Ue)return}if(Z.collapsed||ee.collapsed)return;f(P.current,O.current,N,U)}},re=()=>{E(!1),l?.(!1),document.removeEventListener("pointermove",Q),document.removeEventListener("pointerup",re)};document.addEventListener("pointermove",Q),document.addEventListener("pointerup",re)},[T,i,f,u,x,o,l]),G=i==="horizontal",W=G?"cursor-col-resize":"cursor-row-resize",C=Le.twMerge("group absolute z-20 flex select-none items-center justify-center border-none bg-transparent transition-colors duration-150 overflow-visible",W,G?"h-full":"w-full",!T&&"hover:bg-gray-200/70 dark:hover:bg-gray-700/70",!T&&"active:bg-blue-300/60 dark:active:bg-blue-700/60",b&&"bg-blue-200/80 dark:bg-blue-800/60",T&&"cursor-not-allowed opacity-50","focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-opacity-50",n),H=p.useMemo(()=>{const z=B=>{if(!B)return-1;for(let F=0;F<a.length;F+=1)if(a[F].id===B)return F;return-1};return{left:z(X.left),right:z(X.right)}},[X.left,X.right,a]),fe=G?m.width:m.height,oe=p.useMemo(()=>{const z=(B,F)=>{if(B>F)return 0;let j=0;for(let Y=B;Y<=F;Y+=1){const A=a[Y];if(!A)continue;const L=A.size??0,k=Math.max(0,L);j+=A.collapsed?0:k}return j};return H.left>=0?z(0,H.left):H.right>0?z(0,H.right-1):0},[H.left,H.right,a]),ue=p.useMemo(()=>!Number.isFinite(oe)||oe<0?0:fe>0&&oe>fe?fe:oe,[oe,fe]),ge=p.useMemo(()=>{const z={position:"absolute",zIndex:20,touchAction:"none"};return G?(z.top=0,z.left=`${ue}px`,z.transform="translateX(-50%)",z.width=`${Ze}px`,z.height="100%"):(z.left=0,z.top=`${ue}px`,z.transform="translateY(-50%)",z.height=`${Ze}px`,z.width="100%"),z},[ue,G]),ie=p.useMemo(()=>{const z=$e(fe),B=D=>{if(D<0||D>=a.length)return!1;const Q=a[D];return Q?Q.collapsed?!0:Q.size<=z:!1},F=(D,Q)=>{if(!B(D))return 0;let re=0;for(let q=D;q>=0&&q<a.length&&B(q);q+=Q)re+=1;return re},j=H.left,Y=H.right,A=j>=0?F(j,-1):0,L=Y>=0?F(Y,1):0;return{groupSize:A+L+1,overlapIndex:A}},[H.left,H.right,a,fe]),ae=p.useMemo(()=>{if(te)return!0;if(ie.groupSize<=1)return!1;const z=ie.groupSize-1;return ie.overlapIndex>0&&ie.overlapIndex<z},[ie,te]),de=p.useMemo(()=>{if(ie.groupSize<=1||ae)return 0;const z=ie.groupSize>1?2:1;if(z===1)return 0;const B=ie.overlapIndex===0?0:z-1,F=(z-1)/2;return(B-F)*St},[ie,ae]),pe=p.useMemo(()=>{if(ae)return{display:"none"};if(de!==0)return G?{transform:`translateX(${de}px)`}:{transform:`translateY(${de}px)`}},[de,G,ae]),Se=Le.twMerge("flex items-center justify-center rounded-full bg-white text-slate-700 ring-1 ring-inset ring-white/80 backdrop-blur-sm transition-colors duration-150 shadow-[0_0_0_1px_rgba(255,255,255,0.85),0_1px_3px_rgba(15,23,42,0.18)]","dark:bg-slate-800/95 dark:text-slate-200 dark:ring-slate-500/60 dark:shadow-[0_0_0_1px_rgba(148,163,184,0.45),0_1px_3px_rgba(2,6,23,0.55)]",G?"h-12 w-[6px] px-[2px]":"h-[6px] w-20 py-[2px]",b&&"bg-blue-200/80 ring-blue-300 shadow-[0_0_0_1px_rgba(191,219,254,0.65),0_1px_4px_rgba(59,130,246,0.45)] dark:bg-blue-900/70 dark:ring-blue-400 dark:shadow-[0_0_0_1px_rgba(147,197,253,0.5),0_1px_4px_rgba(59,130,246,0.55)]"),h=Le.twMerge("rounded-full bg-slate-600 transition-colors duration-150 shadow-[0_0_0_1px_rgba(255,255,255,0.9)] dark:bg-slate-200 dark:shadow-[0_0_0_1px_rgba(15,23,42,0.55)]",G?"h-8 w-[2px]":"h-[2px] w-16",b&&"bg-blue-500 dark:bg-blue-300",!T&&"group-hover:bg-slate-700 dark:group-hover:bg-slate-100"),g=p.useCallback(()=>{const z=S.current;if(!z)return;let B=0;if(!ae){const Y=i==="horizontal"?z.offsetWidth:z.offsetHeight;let A=0,L=0;if(typeof window<"u"){const R=window.getComputedStyle(z);i==="horizontal"?(A=Number.parseFloat(R.marginLeft||"0"),L=Number.parseFloat(R.marginRight||"0")):(A=Number.parseFloat(R.marginTop||"0"),L=Number.parseFloat(R.marginBottom||"0"))}B=[Y,A,L].reduce((R,D)=>Number.isFinite(D)?R+D:R,0)}(!Number.isFinite(B)||B<0)&&(B=0);const F={id:I,thickness:B,direction:i,visible:!ae&&B>yt,startPanelId:X.left,endPanelId:X.right},j=_.current;j&&Math.abs(j.thickness-F.thickness)<=.25&&j.visible===F.visible&&j.direction===F.direction&&j.startPanelId===F.startPanelId&&j.endPanelId===F.endPanelId||(_.current=F,s(I,F))},[i,X.left,X.right,s,I,ae]);p.useEffect(()=>{g()},[g]),p.useEffect(()=>{const z=S.current;if(!z)return;if(typeof ResizeObserver>"u"){g();return}const B=new ResizeObserver(()=>{g()});return B.observe(z),()=>{B.disconnect()}},[g]);const w=p.useMemo(()=>{const z=d?{...ge,...d}:ge;return ae?{...z,display:"none",pointerEvents:"none",visibility:"hidden"}:z},[ge,ae,d]);return M.jsx("button",{type:"button",ref:S,className:C,style:w,onPointerDown:V,disabled:T,"aria-hidden":ae||void 0,"aria-label":`Resize ${G?"columns":"rows"} - Drag to collapse/expand panels`,"data-resize-handle-id":I,title:`ドラッグして${G?"列":"行"}をリサイズ、端まで移動して折りたたみ/展開`,children:r||M.jsx("div",{className:Se,style:pe,children:M.jsx("span",{className:h})})})}),Kt=t=>document.querySelector(`[data-panel-id="${t}"]`),Qt=t=>document.querySelector(`[data-panel-group-id="${t}"]`),ei=t=>document.querySelector(`[data-resize-handle-id="${t}"]`);exports.Panel=It;exports.PanelGroup=Zt;exports.PanelGroupContext=Ye;exports.PanelResizeHandle=Jt;exports.clamp=ce;exports.getConstraintInPixels=J;exports.getContainerSize=Ee;exports.getPanelElement=Kt;exports.getPanelGroupElement=Qt;exports.getResizeHandleElement=ei;exports.loadLayout=ft;exports.normalizeSizeConfig=Te;exports.saveLayout=ut;exports.usePanelControls=Mt;exports.usePanelGroup=Ge;exports.useResizablePanels=pt;
|
package/dist/index.d.ts
CHANGED