react-dockable-desktop 1.0.0 → 1.2.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/README.md CHANGED
@@ -18,7 +18,9 @@ A beautiful, premium, state-of-the-art React window manager and dockable layout
18
18
  * **🎨 Custom Global Style Classes**: Inject custom, global styles at the provider level (`modalClass`, `modalBodyClass`, `sidePanelClass`, `sidePanelBodyClass`, `windowClass`, and `windowBodyClass`) to style widgets uniformly.
19
19
  * **🥞 Aspect-Ratio Modal Engine**: Modals automatically wrap and shrink-to-fit content snugly, but cap height and scroll gracefully at visual aspect-ratio thresholds (4:3 for small/medium, 16:10 for large layouts).
20
20
  * **🔬 Zero-Unmount DOM Persistence**: Heavy widgets (like Leaflet Maps, WebGL viewports, terminal consoles, or stateful forms) maintain their DOM nodes and state. The engine moves existing DOM structures into a hidden document fragment host rather than unmounting them.
21
- * **🌍 i18n Ready**: Native translation pipeline designed to adapt with tools like `react-intl` (`intl.formatMessage`) or custom formatting libraries. Translate tab headers, floating window titles, taskbars, and right-click context actions dynamically.
21
+ * **🌍 i18n & Full RTL Support**: Native translation pipeline matching React Intl formats and **Right-to-Left (RTL) language layouts** (Arabic, Hebrew, Persian, etc.). Detection is completely automatic based on surrounding `dir="rtl"` elements, with explicit provider control options.
22
+ * **🛠️ Custom Header Actions**: Inject custom React components directly into tabbed headers and floating window titlebars dynamically using the `renderHeaderActions` registry property.
23
+ * **🔍 Initial Letter Hover Miniatures**: Miniature preview popovers automatically display the uppercase first character of the panel title inside a theme-responsive grayish layout fallback for panels with disabled live previews.
22
24
  * **💎 Glassmorphic & Modern Styling**: Sleek dark mode aesthetics, interactive micro-animations, and fluid transitions.
23
25
  * **🔌 Inter-Panel Pub/Sub Event Bus**: A robust messaging system for lightweight, decoupled communication between active panels.
24
26
 
@@ -89,18 +91,28 @@ PanelRegistry.register('mainMap', MapView, {
89
91
 
90
92
  ### 2. Set Up the WindowManager Context Provider
91
93
 
92
- Wrap your workspace inside the `WindowManagerProvider` and render the `Desktop` component:
94
+ Wrap your workspace inside `WindowManagerProvider` and render `WindowManager`. If you need modals or side panels, also add `ModalStackRenderer` and/or `SidePanelRenderer` inside the same provider tree.
93
95
 
94
96
  ```typescript
95
97
  import React from 'react';
96
- import { WindowManagerProvider, Desktop } from 'react-dockable-desktop';
98
+ import {
99
+ WindowManagerProvider,
100
+ WindowManager,
101
+ PanelProvider,
102
+ ModalStackRenderer,
103
+ SidePanelRenderer,
104
+ } from 'react-dockable-desktop';
97
105
 
98
106
  function App() {
99
107
  return (
100
108
  <WindowManagerProvider>
101
- <div style={{ width: '100vw', height: '100vh' }}>
102
- <Desktop />
103
- </div>
109
+ <PanelProvider>
110
+ <div style={{ width: '100vw', height: '100vh', display: 'flex', flexDirection: 'column' }}>
111
+ <WindowManager />
112
+ </div>
113
+ <ModalStackRenderer />
114
+ <SidePanelRenderer />
115
+ </PanelProvider>
104
116
  </WindowManagerProvider>
105
117
  );
106
118
  }
@@ -153,6 +165,26 @@ function App() {
153
165
 
154
166
  *If no `formatMessage` function is provided, the engine defaults to a fallback formatting template parser resolving placeholders like `Hello {user}` using values.*
155
167
 
168
+ ### Right-to-Left (RTL) Layout Support
169
+
170
+ The library features built-in, theme-resilient Right-to-Left (RTL) rendering. It automatically mirrors tab stacking flows, close icon alignments, custom header buttons, side drawers (which slide in from the opposite edge), titlebars, and taskbar icons.
171
+
172
+ #### 1. Automatic Detection (Zero Configuration)
173
+ Simply apply the HTML `dir="rtl"` attribute to the container enclosing your layout, or globally on the `<html>`/`<body>` nodes. The workspace will observe it using a `MutationObserver` and mirror dynamically:
174
+ ```html
175
+ <div dir="rtl">
176
+ <Desktop />
177
+ </div>
178
+ ```
179
+
180
+ #### 2. Explicit Programmatic Control
181
+ To force a specific direction regardless of the surrounding HTML structure, pass the `dir` prop directly to the provider:
182
+ ```typescript
183
+ <WindowManagerProvider dir="rtl">
184
+ <Desktop />
185
+ </WindowManagerProvider>
186
+ ```
187
+
156
188
  ---
157
189
 
158
190
  ## 🎛️ Programmatic Spawning and Layout API
@@ -190,7 +222,7 @@ const SidebarControls = () => {
190
222
  | `useWindowManagerActions()` | `WindowActions` | Spawns, minimizes, restores, docks, floats, maximizes, or closes panels. Also handles split sizing, custom locations, and layout serialization (`saveLayout` / `loadLayout`). |
191
223
  | `useFormatMessage()` | `(msg: ContextMenuPredefinedMessage) => string` | Returns the translation message formatter hook matching the provider preset configuration. |
192
224
  | `usePanelContext()` | `{ publish, subscribe }` | Dynamic decoupled event bus helper for active panels. |
193
- | `usePanelId()` | `string` | Returns the unique instance ID of the panel calling the hook. |
225
+ | `useStyleClasses()` | `StyleClasses` | Returns the custom CSS class overrides configured on the provider (`windowClass`, `windowBodyClass`, etc.). |
194
226
 
195
227
  ---
196
228
 
@@ -322,6 +354,12 @@ To customize CSS layout attributes, you can override variables in your styleshee
322
354
 
323
355
  ---
324
356
 
357
+ ## 📐 Architecture
358
+
359
+ For a deep-dive into the layout tree model, DOM persistence strategy, overlay system, RTL detection, and build pipeline, see [ARCHITECTURE.md](ARCHITECTURE.md).
360
+
361
+ ---
362
+
325
363
  ## 📄 License
326
364
 
327
365
  MIT. Free to use, adapt, and build upon.
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- var Bt=Object.create;var Ye=Object.defineProperty;var Ht=Object.getOwnPropertyDescriptor;var At=Object.getOwnPropertyNames;var $t=Object.getPrototypeOf,Gt=Object.prototype.hasOwnProperty;var Yt=(n,l)=>{for(var a in l)Ye(n,a,{get:l[a],enumerable:!0})},ut=(n,l,a,h)=>{if(l&&typeof l=="object"||typeof l=="function")for(let S of At(l))!Gt.call(n,S)&&S!==a&&Ye(n,S,{get:()=>l[S],enumerable:!(h=Ht(l,S))||h.enumerable});return n};var Xt=(n,l,a)=>(a=n!=null?Bt($t(n)):{},ut(l||!n||!n.__esModule?Ye(a,"default",{value:n,enumerable:!0}):a,n)),qt=n=>ut(Ye({},"__esModule",{value:!0}),n);var rn={};Yt(rn,{ConfirmationForm:()=>Tt,FormContainerContext:()=>qe,FormContainerProvider:()=>Ie,LeftPanelRenderer:()=>St,ModalStackRenderer:()=>Nt,PanelProvider:()=>It,PanelRegistry:()=>oe,RightPanelRenderer:()=>zt,SidePanelRenderer:()=>Lt,Sidebar:()=>Et,WindowManager:()=>Ct,WindowManagerProvider:()=>yt,defaultPredefinedMessages:()=>ze,formatLabel:()=>Y,useFormContainer:()=>je,useFormatMessage:()=>Ce,usePanelActions:()=>Ee,usePanelContext:()=>bt,usePanelState:()=>Me,usePredefinedMessages:()=>Fe,useStyleClasses:()=>we,useWindowManagerActions:()=>ke,useWindowManagerState:()=>Se});module.exports=qt(rn);var W=Xt(require("react"),1),it=require("react-dom");var C=require("react");var nt=class{registry=new Map;register(l,a,h){this.registry.set(l,{Component:a,defaultOptions:h})}get(l){return this.registry.get(l)}getRegisteredIds(){return Array.from(this.registry.keys())}},oe=new nt;var ze={floatWindow:{id:"dockable-desktop-floatWindow",defaultMessage:"Float Window"},minimizePanel:{id:"dockable-desktop-minimizePanel",defaultMessage:"Minimize Panel"},closeTab:{id:"dockable-desktop-closeTab",defaultMessage:"Close Tab"},restorePanel:{id:"dockable-desktop-restorePanel",defaultMessage:"Restore Panel"},maximizePanel:{id:"dockable-desktop-maximizePanel",defaultMessage:"Maximize Panel"},closePanel:{id:"dockable-desktop-closePanel",defaultMessage:"Close Panel"},dockWindow:{id:"dockable-desktop-dockWindow",defaultMessage:"Dock Window"},minimize:{id:"dockable-desktop-minimize",defaultMessage:"Minimize"},maximize:{id:"dockable-desktop-maximize",defaultMessage:"Maximize"},restoreSize:{id:"dockable-desktop-restoreSize",defaultMessage:"Restore Size"},close:{id:"dockable-desktop-close",defaultMessage:"Close"},closeEmptyGroup:{id:"dockable-desktop-closeEmptyGroup",defaultMessage:"Close empty split group"},anchorToRightEdge:{id:"dockable-desktop-anchorToRightEdge",defaultMessage:"Anchor to Right Edge"},anchorToBottomEdge:{id:"dockable-desktop-anchorToBottomEdge",defaultMessage:"Anchor to Bottom Edge"},windowAnchoringOptions:{id:"dockable-desktop-windowAnchoringOptions",defaultMessage:"Window Anchoring Options"}};var Le=require("react/jsx-runtime"),gt=(0,C.createContext)(null),ft=(0,C.createContext)(null),pt=(0,C.createContext)(null),mt=(0,C.createContext)(ze),ht=(0,C.createContext)({}),we=()=>(0,C.useContext)(ht),ot=class{listeners={};subscribe(l,a){return this.listeners[l]||(this.listeners[l]=[]),this.listeners[l].push(a),()=>{this.listeners[l]=this.listeners[l].filter(h=>h!==a)}}publish(l,a){this.listeners[l]&&this.listeners[l].forEach(h=>h(a))}},jt={type:"branch",orientation:"vertical",sizes:[.75,.25],children:[{type:"leaf",id:"group-left-top",panels:["main-map","main-editor"],activePanelId:"main-map"},{type:"leaf",id:"group-left-bottom",panels:["system-console","help-docs"],activePanelId:"system-console"}]},Kt={"main-map":{id:"main-map",title:"Main Map",component:"mainMap",state:"docked"},"main-editor":{id:"main-editor",title:"Code Editor",component:"editor",state:"docked"},"system-console":{id:"system-console",title:"Console Output",component:"terminal",state:"docked"},"help-docs":{id:"help-docs",title:"Help Center",component:"help",state:"docked"},"live-preview":{id:"live-preview",title:"Live Preview Output",component:"preview",state:"floating"}},Ut=[{id:"live-preview",x:450,y:200,width:320,height:250,z:1e3}],yt=({children:n,formatMessage:l,predefinedMessages:a,modalClass:h,modalBodyClass:S,sidePanelClass:w,sidePanelBodyClass:E,windowClass:D,windowBodyClass:b})=>{let[M,y]=(0,C.useState)({gridRoot:jt,floating:Ut,minimized:[],panels:Kt,draggedPanelId:null,pendingClose:null}),f=(0,C.useRef)(M);f.current=M;let m=(0,C.useRef)({}),R=(0,C.useMemo)(()=>({...ze,...a}),[a]),A=(0,C.useRef)(new ot),v=(0,C.useRef)(1e3),u=(0,C.useCallback)((e,s)=>A.current.subscribe(e,s),[]),x=(0,C.useCallback)((e,s)=>{A.current.publish(e,s)},[]),I=(0,C.useCallback)((e,s)=>{let o=typeof e.x=="string"?parseFloat(e.x):e.x,r=typeof e.y=="string"?parseFloat(e.y):e.y,i=typeof e.width=="string"?parseFloat(e.width):e.width,t=typeof e.height=="string"?parseFloat(e.height):e.height;isNaN(o)&&(o=300),isNaN(r)&&(r=150),isNaN(i)&&(i=450),isNaN(t)&&(t=350);let c=H=>s.some(O=>{let k=typeof O.x=="string"?parseFloat(O.x):O.x,T=typeof O.y=="string"?parseFloat(O.y):O.y;return!O.maximized&&Math.abs(k-H.x)<20&&Math.abs(T-H.y)<20}),g=0;for(;c({x:o,y:r})&&g<10;)o+=30,r+=30,g++;let P=Math.max(100,window.innerWidth||1024),z=Math.max(100,window.innerHeight||768);return(o+i>P||r+t>z)&&(o=100+g%5*30,r=100+g%5*30),o=Math.max(0,Math.min(o,P-100)),r=Math.max(0,Math.min(r,z-40)),{x:o,y:r,width:i,height:t}},[]),F=(0,C.useCallback)(e=>{v.current+=1;let s=v.current;y(o=>{let r=o.panels[e];if(!r)return o;if(r.state==="floating")return{...o,floating:o.floating.map(i=>i.id===e?{...i,z:s}:i)};if(r.state==="docked"){let i=t=>t.type==="leaf"?t.panels.includes(e)?{...t,activePanelId:e}:t:{...t,children:t.children.map(i)};return{...o,gridRoot:i(o.gridRoot)}}return o})},[]),p=(e,s)=>{if(e.type==="leaf"){let o=e.panels.indexOf(s);if(o===-1)return e;let r=e.panels.filter(c=>c!==s),i=e.activePanelId===s?r[o]||r[o-1]||r[0]||null:e.activePanelId,t={...e,panels:r,activePanelId:i};return r.length===0&&!e.keepOnEmpty?null:t}else{let o=e.children.map(t=>p(t,s)).filter(t=>t!==null);if(o.length===0)return null;if(o.length===1)return o[0];let r=e.sizes.slice(0,o.length),i=r.reduce((t,c)=>t+c,0);return{...e,children:o,sizes:r.map(t=>t/i)}}},N=(e,s,o)=>{if(e.type==="leaf"){if(e.id===s){let r=e.panels.includes(o)?e.panels:[...e.panels,o];return{...e,panels:r,activePanelId:o}}return e}else return{...e,children:e.children.map(r=>N(r,s,o))}},L=e=>{if(e.type==="leaf")return e.id;for(let s of e.children){let o=L(s);if(o)return o}return null},B=(0,C.useCallback)((e,s,o)=>{y(r=>{let i=r.panels[e],t=oe.get(s),c=o?.title||o?.title||t?.defaultOptions?.title||e,g=o?.initialTarget||t?.defaultOptions?.initialTarget||"docked",P=t?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350};if(i)if(i.state==="minimized"){let k=r.minimized.filter(T=>T.id!==e);if(g==="floating"||!r.gridRoot){v.current+=1;let T=I(P,r.floating);return{...r,minimized:k,floating:[...r.floating,{...T,id:e,z:v.current}],panels:{...r.panels,[e]:{...i,state:"floating"}}}}else{let T=L(r.gridRoot)||"group-left-top";return{...r,minimized:k,gridRoot:N(r.gridRoot,T,e),panels:{...r.panels,[e]:{...i,state:"docked"}}}}}else{if(i.state==="floating")return F(e),r;{let k=T=>T.type==="leaf"?T.panels.includes(e)?{...T,activePanelId:e}:T:{...T,children:T.children.map(k)};return{...r,gridRoot:k(r.gridRoot)}}}let H={id:e,title:c,component:s,state:g==="tabbed"?"docked":g},O={...r.panels,[e]:H};if(g==="floating"){v.current+=1;let k=I(P,r.floating),T=o?.stickyRight??t?.defaultOptions?.defaultStickyRight??!1,U=o?.stickyBottom??t?.defaultOptions?.defaultStickyBottom??!1,j=Math.max(100,window.innerWidth||1024),Z=Math.max(100,window.innerHeight||768),te=typeof k.width=="string"?parseFloat(k.width):k.width,pe=typeof k.height=="string"?parseFloat(k.height):k.height,me=k.x,xe=k.y,Ne=10;return T&&(me=j-te-Ne),U&&(xe=Z-pe-Ne),{...r,floating:[...r.floating,{...k,id:e,z:v.current,x:me,y:xe,stickyRight:T,stickyBottom:U}],panels:O}}else{let k=L(r.gridRoot)||"group-left-top";return{...r,gridRoot:N(r.gridRoot,k,e),panels:O}}})},[I,F]),$=(0,C.useCallback)(e=>{y(s=>{let o=s.panels[e];if(!o||oe.get(o.component)?.defaultOptions?.canClose===!1)return s;delete m.current[e];let i={...s.panels};delete i[e];let t=p(s.gridRoot,e);return{...s,gridRoot:t||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:s.floating.filter(c=>c.id!==e),minimized:s.minimized.filter(c=>c.id!==e),panels:i}})},[]),X=(0,C.useCallback)((e,s)=>{m.current[e]=s},[]),ue=(0,C.useCallback)(e=>{delete m.current[e]},[]),ee=(0,C.useCallback)((e,s)=>{y(o=>{let r=o.panels[e];return r?{...o,panels:{...o.panels,[e]:{...r,dirty:s}}}:o})},[]),se=(0,C.useCallback)((e,s)=>{y(o=>{let r=o.panels[e];return r?{...o,panels:{...o.panels,[e]:{...r,title:s}}}:o})},[]),le=(0,C.useCallback)(e=>{y(s=>s.pendingClose?(s.pendingClose.resolve(e),{...s,pendingClose:null}):s)},[]),re=(0,C.useCallback)(async(e,s)=>{if(s?.force){$(e);return}let o=m.current[e];o&&!await o()||f.current.panels[e]?.dirty&&!await new Promise(t=>{y(c=>({...c,pendingClose:{id:e,resolve:t}}))})||$(e)},[$]),ge=(0,C.useCallback)(e=>{y(s=>{let o=s.panels[e];if(!o||o.state==="minimized"||oe.get(o.component)?.defaultOptions?.canMinimize===!1)return s;let i,t;if(o.state==="floating"){let g=s.floating.find(P=>P.id===e);g&&(i={x:g.x,y:g.y,width:g.width,height:g.height,stickyRight:g.stickyRight,stickyBottom:g.stickyBottom})}else if(o.state==="docked"){let g=P=>{if(P.type==="leaf")return P.panels.includes(e)?P.id:null;for(let z of P.children){let H=g(z);if(H)return H}return null};t=g(s.gridRoot)}let c=p(s.gridRoot,e);return{...s,gridRoot:c||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:s.floating.filter(g=>g.id!==e),minimized:[...s.minimized,{id:e,title:o.title,component:o.component}],panels:{...s.panels,[e]:{...o,state:"minimized",previousState:o.state,lastFloatingRect:i,lastLeafId:t}}}})},[]),ve=(0,C.useCallback)(e=>{y(s=>{let o=s.panels[e];if(!o||o.state!=="minimized")return s;let r=s.minimized.filter(t=>t.id!==e);if((o.previousState||"docked")==="floating"){v.current+=1;let t=oe.get(o.component),c=o.lastFloatingRect||t?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},g=I(c,s.floating);return{...s,minimized:r,floating:[...s.floating,{...g,id:e,z:v.current,stickyRight:!!o.lastFloatingRect?.stickyRight,stickyBottom:!!o.lastFloatingRect?.stickyBottom}],panels:{...s.panels,[e]:{...o,state:"floating"}}}}else{let t=(z,H)=>z.type==="leaf"?z.id===H:z.children.some(O=>t(O,H)),c=o.lastLeafId&&t(s.gridRoot,o.lastLeafId),g=oe.get(o.component),P=g?.defaultOptions?.canDrag!==!1;if(c)return{...s,minimized:r,gridRoot:N(s.gridRoot,o.lastLeafId,e),panels:{...s.panels,[e]:{...o,state:"docked"}}};if(P){v.current+=1;let z=o.lastFloatingRect||g?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},H=I(z,s.floating);return{...s,minimized:r,floating:[...s.floating,{...H,id:e,z:v.current,stickyRight:!!o.lastFloatingRect?.stickyRight,stickyBottom:!!o.lastFloatingRect?.stickyBottom}],panels:{...s.panels,[e]:{...o,state:"floating"}}}}else{let z=L(s.gridRoot)||"group-left-top";return{...s,minimized:r,gridRoot:N(s.gridRoot,z,e),panels:{...s.panels,[e]:{...o,state:"docked"}}}}}})},[I]),he=(0,C.useCallback)((e,s)=>{y(o=>{let r=o.panels[e];if(!r||oe.get(r.component)?.defaultOptions?.canDrag===!1)return o;let t=oe.get(r.component),c=s||t?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},g=p(o.gridRoot,e);v.current+=1;let P=I(c,o.floating);return{...o,gridRoot:g||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:[...o.floating,{...P,id:e,z:v.current}],panels:{...o.panels,[e]:{...r,state:"floating"}}}})},[I]),fe=(0,C.useCallback)((e,s)=>{y(o=>{let r=o.panels[e];if(!r)return o;let i=o.floating.filter(g=>g.id!==e),t=p(o.gridRoot,e),c=s||L(t||o.gridRoot)||"group-left-top";return{...o,gridRoot:N(t||o.gridRoot,c,e),floating:i,panels:{...o.panels,[e]:{...r,state:"docked"}}}})},[]),ye=(e,s,o,r)=>{if(e.type==="leaf"){if(e.id===s){let i={type:"leaf",id:`group-split-${Date.now()}-${Math.floor(Math.random()*1e3)}`,panels:[o],activePanelId:o};return{type:"branch",orientation:r==="left"||r==="right"?"horizontal":"vertical",sizes:[.5,.5],children:r==="left"||r==="top"?[i,e]:[e,i]}}return e}else return{...e,children:e.children.map(i=>ye(i,s,o,r))}},ne=(0,C.useCallback)(e=>{y(s=>({...s,draggedPanelId:e}))},[]),be=(0,C.useCallback)((e,s,o)=>{y(r=>{let i=r.panels[e];if(!i)return r;let t=r.floating.filter(P=>P.id!==e),c=p(r.gridRoot,e),g;return o==="center"?g=N(c||r.gridRoot,s,e):g=ye(c||r.gridRoot,s,e,o),{...r,gridRoot:g,floating:t,panels:{...r.panels,[e]:{...i,state:"docked"}},draggedPanelId:null}})},[]),q=(0,C.useCallback)((e,s)=>{y(o=>{let r=o.panels[e];if(!r)return o;let i=o.floating.filter(H=>H.id!==e),t=p(o.gridRoot,e),c={type:"leaf",id:`group-edge-${Date.now()}-${Math.floor(Math.random()*1e3)}`,panels:[e],activePanelId:e},g=s==="left"||s==="right"?"horizontal":"vertical",P=s==="left"||s==="top"?[c,t||o.gridRoot]:[t||o.gridRoot,c];return{...o,gridRoot:{type:"branch",orientation:g,sizes:s==="left"||s==="top"?[.3,.7]:[.7,.3],children:P},floating:i,panels:{...o.panels,[e]:{...r,state:"docked"}},draggedPanelId:null}})},[]),G=(0,C.useCallback)((e,s,o)=>{y(r=>{let i=r.panels[e];if(!i)return r;let t=p(r.gridRoot,e),c=z=>{if(z.type==="leaf"){if(z.id===s){let H=z.panels.filter(T=>T!==e),O=Math.max(0,Math.min(o,H.length)),k=[...H];return k.splice(O,0,e),{...z,panels:k,activePanelId:e}}return z}else return{...z,children:z.children.map(c)}},g=c(t||r.gridRoot),P=r.floating.filter(z=>z.id!==e);return{...r,gridRoot:g,floating:P,panels:{...r.panels,[e]:{...i,state:"docked"}},draggedPanelId:null}})},[]),Re=(0,C.useCallback)(e=>{y(s=>{let o=i=>{if(i.type==="leaf")return i.id===e&&i.canClose!==!1?null:i;{let t=i.children.map(P=>o(P)).filter(P=>P!==null);if(t.length===0)return null;if(t.length===1)return t[0];let c=i.sizes.slice(0,t.length),g=c.reduce((P,z)=>P+z,0);return{...i,children:t,sizes:c.map(P=>P/g)}}},r=o(s.gridRoot);return{...s,gridRoot:r||{type:"leaf",id:"group-default",panels:[],activePanelId:null}}})},[]),He=(0,C.useCallback)(e=>{y(s=>({...s,floating:s.floating.map(o=>o.id===e?{...o,maximized:!o.maximized}:o)}))},[]),Ae=(0,C.useCallback)((e,s)=>{let o=(r,i)=>{if(r.type==="leaf")return r;if(i===e.length)return{...r,sizes:s};let t=e[i],c=r.children.map((g,P)=>P===t?o(g,i+1):g);return{...r,children:c}};y(r=>({...r,gridRoot:o(r.gridRoot,0)}))},[]),$e=(0,C.useCallback)((e,s)=>{y(o=>({...o,floating:o.floating.map(r=>r.id===e?{...r,...s}:r)}))},[]),Ge=(0,C.useCallback)(()=>JSON.stringify({gridRoot:M.gridRoot,floating:M.floating,minimized:M.minimized,panels:M.panels}),[M]),We=(0,C.useCallback)(e=>{try{let s=JSON.parse(e);s.gridRoot&&s.floating&&s.minimized&&s.panels&&y({gridRoot:s.gridRoot,floating:s.floating,minimized:s.minimized,panels:s.panels,draggedPanelId:null,pendingClose:null})}catch(s){console.error("Failed to parse layout configuration:",s)}},[]),Pe=(0,C.useMemo)(()=>({openPanel:B,closePanel:$,minimizePanel:ge,restorePanel:ve,floatPanel:he,dockPanel:fe,maximizePanel:He,updateSplitSizes:Ae,updateFloatingPosition:$e,bringToFront:F,saveLayout:Ge,loadLayout:We,publish:x,subscribe:u,setDraggedPanelId:ne,dockPanelToGroup:be,movePanelOrder:G,closeLeafGroup:Re,registerCloseGuard:X,unregisterCloseGuard:ue,setPanelDirty:ee,updatePanelTitle:se,requestClosePanel:re,resolvePendingClose:le,dockPanelToWorkspaceEdge:q}),[B,$,ge,ve,he,fe,He,Ae,$e,F,Ge,We,x,u,ne,be,G,Re,X,ue,ee,se,re,le,q]),Ve=e=>{let s=e.defaultMessage||e.id;return e.values&&Object.entries(e.values).forEach(([o,r])=>{s=s.replace(`{${o}}`,String(r))}),s},_e=(0,C.useMemo)(()=>({modalClass:h,modalBodyClass:S,sidePanelClass:w,sidePanelBodyClass:E,windowClass:D,windowBodyClass:b}),[h,S,w,E,D,b]);return(0,Le.jsx)(ht.Provider,{value:_e,children:(0,Le.jsx)(gt.Provider,{value:M,children:(0,Le.jsx)(ft.Provider,{value:Pe,children:(0,Le.jsx)(pt.Provider,{value:l||Ve,children:(0,Le.jsx)(mt.Provider,{value:R,children:n})})})})})},Se=()=>{let n=(0,C.useContext)(gt);if(!n)throw new Error("useWindowManagerState must be used within WindowManagerProvider");return n},ke=()=>{let n=(0,C.useContext)(ft);if(!n)throw new Error("useWindowManagerActions must be used within WindowManagerProvider");return n},Ce=()=>(0,C.useContext)(pt)||(l=>{let a=l.defaultMessage||l.id;return l.values&&Object.entries(l.values).forEach(([h,S])=>{a=a.replace(`{${h}}`,String(S))}),a}),Y=(n,l)=>n?typeof n=="string"?n:l(n):"",bt=()=>{let{publish:n,subscribe:l}=ke();return{publish:n,subscribe:l}},Fe=()=>(0,C.useContext)(mt);var vt=require("replace-react-contexify"),vn=require("replace-react-contexify/styles.css");var Xe=require("react"),Jt={requestClose:()=>{console.warn("FormContainerContract: requestClose called but no container is present")},setDirty:()=>{},onCloseRequested:()=>()=>{},setTitle:()=>{},setIcon:()=>{},containerType:"standalone",instanceId:"standalone",onClose:()=>()=>{},onMinimize:()=>()=>{},onRestore:()=>()=>{},onResize:()=>()=>{}},qe=(0,Xe.createContext)(Jt),Ie=qe.Provider,je=()=>(0,Xe.useContext)(qe);var d=require("react/jsx-runtime"),De=new Map,Ue="preserved-dom-container",st=(0,d.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:[(0,d.jsx)("rect",{x:"3",y:"3",width:"7",height:"9",rx:"1"}),(0,d.jsx)("rect",{x:"14",y:"3",width:"7",height:"5",rx:"1"}),(0,d.jsx)("rect",{x:"14",y:"12",width:"7",height:"9",rx:"1"}),(0,d.jsx)("rect",{x:"3",y:"16",width:"7",height:"5",rx:"1"})]}),Pt=n=>{let l=De.get(n);return l||(l=document.createElement("div"),l.style.width="100%",l.style.height="100%",De.set(n,l)),l},Zt=(n,l)=>{let a=oe.get(l);if(!a)return(0,d.jsxs)("div",{className:"w-100 h-100 d-flex flex-column align-items-center justify-content-center bg-transparent text-danger font-monospace p-3 text-center",style:{border:"2px dashed var(--bs-danger, #dc3545)"},children:[(0,d.jsx)("h6",{className:"fw-bold mb-1",children:"\u26A0\uFE0F Component Unregistered"}),(0,d.jsxs)("span",{className:"small text-muted",children:["Key: ",l]})]});let h=a.Component;return(0,d.jsx)(h,{panelId:n})},at=new Map,Te=new Map,Ke=n=>{let l=Te.get(n);return l||(l={onClose:new Set,onMinimize:new Set,onRestore:new Set,onResize:new Set},Te.set(n,l)),l},xt=({panelId:n})=>{let l=(0,W.useRef)(null);return(0,W.useEffect)(()=>{let a=l.current;if(!a)return;let h=Pt(n);a.appendChild(h);let S=new ResizeObserver(w=>{for(let E of w){let{width:D,height:b}=E.contentRect;if(D>0&&b>0){at.set(n,{width:D,height:b});let M=Te.get(n);M&&M.onResize.forEach(y=>y(D,b))}}});return S.observe(a),()=>{S.disconnect();let w=document.getElementById(Ue);w||(w=document.createElement("div"),w.id=Ue,w.style.display="none",document.body.appendChild(w)),w.appendChild(h)}},[n]),(0,d.jsx)("div",{ref:l,className:"w-100 h-100"})},Qt=({panelId:n})=>{let l=Se(),a=(0,W.useRef)(null),h=l.panels[n],S=h?oe.get(h.component):null,w=S?.defaultOptions?.disableLivePreview||!1,[E,D]=(0,W.useState)({width:800,height:500,scale:.25});if((0,W.useEffect)(()=>{if(w)return;let b=a.current;if(!b)return;let M=De.get(n);if(!M)return;let y=at.get(n)||{width:800,height:500},f=y.width,m=y.height,v=Math.min(220/f,140/m);return D({width:f,height:m,scale:v}),b.appendChild(M),()=>{let u=document.getElementById(Ue);u||(u=document.createElement("div"),u.id=Ue,u.style.display="none",document.body.appendChild(u)),u.appendChild(M)}},[n,w]),w){let b=at.get(n)||{width:800,height:500},f=Math.min(220/b.width,140/b.height),m=b.width*f,R=b.height*f,A=S?.defaultOptions?.icon||(0,d.jsx)("span",{children:"\u{1F533}"});return(0,d.jsxs)("div",{className:"taskbar-item-preview-frame d-flex flex-column align-items-center justify-content-center text-muted",style:{width:`${m}px`,height:`${R}px`,background:"linear-gradient(135deg, rgba(30, 41, 59, 0.9) 0%, rgba(15, 23, 42, 0.95) 100%)",border:"1px dashed var(--taskbar-item-border, rgba(255, 255, 255, 0.15))"},children:[(0,d.jsx)("div",{className:"taskbar-preview-placeholder-icon mb-1.5",style:{transform:"scale(1.2)",filter:"drop-shadow(0 0 8px rgba(56, 189, 248, 0.4))"},children:A}),(0,d.jsx)("div",{style:{fontSize:"9px",fontWeight:500,letterSpacing:"0.5px",opacity:.7,textTransform:"uppercase"},children:"Active Session"})]})}return(0,d.jsx)("div",{className:"taskbar-item-preview-frame",style:{width:`${E.width*E.scale}px`,height:`${E.height*E.scale}px`},children:(0,d.jsx)("div",{ref:a,className:"taskbar-item-preview-host",style:{width:`${E.width}px`,height:`${E.height}px`,transform:`scale(${E.scale})`,transformOrigin:"top left",position:"absolute",top:0,left:0}})})},Vt=({panelId:n,children:l})=>{let a=Se(),{requestClosePanel:h,setPanelDirty:S,registerCloseGuard:w,unregisterCloseGuard:E,updatePanelTitle:D}=ke(),b=a.minimized.some(f=>f.id===n),M=(0,W.useRef)(b);(0,W.useEffect)(()=>{let f=Te.get(n);f&&(b&&!M.current?f.onMinimize.forEach(m=>m()):!b&&M.current&&f.onRestore.forEach(m=>m()),M.current=b)},[b,n]),(0,W.useEffect)(()=>()=>{let f=Te.get(n);f&&(f.onClose.forEach(m=>m()),Te.delete(n))},[n]);let y=W.default.useMemo(()=>({requestClose:f=>h(n,f),setDirty:f=>S(n,f),onCloseRequested:f=>(w(n,f),()=>E(n)),setTitle:f=>D(n,f),instanceId:n,onClose:f=>{let m=Ke(n);return m.onClose.add(f),()=>m.onClose.delete(f)},onMinimize:f=>{let m=Ke(n);return m.onMinimize.add(f),()=>m.onMinimize.delete(f)},onRestore:f=>{let m=Ke(n);return m.onRestore.add(f),()=>m.onRestore.delete(f)},onResize:f=>{let m=Ke(n);return m.onResize.add(f),()=>m.onResize.delete(f)}}),[n,h,S,w,E,D]);return(0,d.jsx)(Ie,{value:y,children:l})},wt=({node:n,path:l,onTabRightClick:a,activeDropZone:h,onHoverDropZone:S,onTabDragStart:w,hoveredTab:E,onTabHover:D,defaultPanelIcon:b})=>{let{updateSplitSizes:M}=ke();if(n.type==="leaf")return(0,d.jsx)(_t,{leaf:n,onTabRightClick:a,activeDropZone:h,onHoverDropZone:S,onTabDragStart:w,hoveredTab:E,onTabHover:D,defaultPanelIcon:b});let y=n.orientation==="horizontal",f=(m,R)=>{R.preventDefault();let A=y?R.clientX:R.clientY,v=[...n.sizes],u=R.currentTarget.parentElement,x=u?y?u.clientWidth:u.clientHeight:y?1e3:800,I=p=>{let B=((y?p.clientX:p.clientY)-A)/x,$=[...v];$[m]+=B,$[m+1]-=B,$[m]>.1&&$[m+1]>.1&&M(l,$)},F=()=>{window.removeEventListener("mousemove",I),window.removeEventListener("mouseup",F)};window.addEventListener("mousemove",I),window.addEventListener("mouseup",F)};return(0,d.jsx)("div",{className:`d-flex w-100 h-100 ${y?"flex-row":"flex-column"}`,style:{overflow:"hidden",position:"relative"},children:n.children.map((m,R)=>{let A=n.sizes[R]*100;return(0,d.jsxs)(W.default.Fragment,{children:[(0,d.jsx)("div",{style:{flexGrow:n.sizes[R],flexBasis:`${A}%`,overflow:"hidden",position:"relative"},children:(0,d.jsx)(wt,{node:m,path:[...l,R],onTabRightClick:a,activeDropZone:h,onHoverDropZone:S,onTabDragStart:w,hoveredTab:E,onTabHover:D,defaultPanelIcon:b})}),R<n.children.length-1&&(0,d.jsx)("div",{onMouseDown:v=>f(R,v),style:{cursor:y?"col-resize":"row-resize",width:y?"6px":"100%",height:y?"100%":"6px",backgroundColor:"var(--resizer-bg)",zIndex:20,transition:"background-color 0.2s"},className:"resizer-bar hover-highlight"})]},R)})})},_t=({leaf:n,onTabRightClick:l,activeDropZone:a,onHoverDropZone:h,onTabDragStart:S,hoveredTab:w,onTabHover:E,defaultPanelIcon:D})=>{let b=Se(),{requestClosePanel:M,openPanel:y,closeLeafGroup:f}=ke(),m=Ce(),R=Fe(),{windowClass:A,windowBodyClass:v}=we(),u=x=>{y(x,b.panels[x].component)};return(0,d.jsxs)("div",{className:`workspace-panel w-100 h-100 d-flex flex-column ${A??""}`,style:{overflow:"hidden",position:"relative"},children:[(0,d.jsxs)("div",{className:"workspace-tab-bar d-flex flex-row justify-content-between align-items-center",style:{minHeight:"38px"},children:[(0,d.jsx)("div",{className:"d-flex flex-row overflow-x-auto flex-grow-1 tab-headers-container",style:{scrollbarWidth:"none"},onMouseMove:x=>{b.draggedPanelId&&x.target===x.currentTarget&&E(n.id,"EMPTY",n.panels.length,"right")},onMouseLeave:x=>{b.draggedPanelId&&x.target===x.currentTarget&&E(n.id,"",-1,null)},children:n.panels.map((x,I)=>{let F=b.panels[x];if(!F)return null;let p=n.activePanelId===x,L=oe.get(F.component)?.defaultOptions,B=w&&w.leafId===n.id&&w.panelId===x,$=I===n.panels.length-1,X=w&&w.leafId===n.id&&w.panelId==="EMPTY"&&$,ue=B?w.side==="left"?"drag-hover-left":"drag-hover-right":X?"drag-hover-right":"";return(0,d.jsxs)("div",{onClick:()=>u(x),onMouseDown:ee=>{L?.canDrag!==!1&&S(x,ee)},onContextMenu:ee=>l(x,ee),onMouseMove:ee=>{if(b.draggedPanelId){let se=ee.currentTarget.getBoundingClientRect(),re=ee.clientX-se.left<se.width/2?"left":"right";E(n.id,x,I,re)}},onMouseLeave:()=>{b.draggedPanelId&&E(n.id,"",-1,null)},className:`workspace-tab ${p?"active workspace-tab-active":"workspace-tab-inactive"} ${ue}`,style:{cursor:L?.canDrag===!1?"default":"pointer"},children:[(0,d.jsxs)("span",{className:"text-truncate d-flex align-items-center",style:{maxWidth:"120px"},children:[(0,d.jsx)("span",{className:"workspace-tab-icon",children:L?.icon||D||st}),(0,d.jsxs)("span",{children:[Y(F.title,m),F.dirty?" *":""]})]}),L?.canClose!==!1&&(0,d.jsx)("span",{onClick:ee=>{ee.stopPropagation(),M(x)},title:Y(R.closeTab,m),className:"close-tab-x ms-auto d-flex align-items-center justify-content-center",style:{width:"18px",height:"18px"},children:(0,d.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:(0,d.jsx)("path",{d:"M18 6L6 18M6 6l12 12"})})})]},x)})}),n.panels.length===0&&n.keepOnEmpty&&n.canClose!==!1&&(0,d.jsx)("span",{onClick:()=>f(n.id),className:"close-tab-x d-flex align-items-center justify-content-center me-2 header-close-empty-group",style:{width:"18px",height:"18px",cursor:"pointer"},title:Y(R.closeEmptyGroup,m),children:(0,d.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:(0,d.jsx)("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),(0,d.jsxs)("div",{className:`flex-grow-1 w-100 h-100 bg-transparent ${v??""}`,style:{position:"relative",overflow:"hidden"},children:[n.activePanelId&&b.panels[n.activePanelId]?(0,d.jsx)(xt,{panelId:n.activePanelId},n.activePanelId):(0,d.jsx)("div",{className:"w-100 h-100 d-flex align-items-center justify-content-center font-monospace text-muted small empty-leaf-placeholder",children:(0,d.jsx)("span",{children:"Empty Workspace Section"})}),b.draggedPanelId!==null&&(0,d.jsx)("div",{className:"dock-drop-zone-overlay",children:(0,d.jsxs)("div",{className:"dock-target-cross",children:[(0,d.jsx)("div",{onMouseEnter:()=>h(n.id,"top"),onMouseLeave:()=>h(n.id,null),className:"dock-target-box dock-target-top",children:"\u25B2"}),(0,d.jsx)("div",{onMouseEnter:()=>h(n.id,"bottom"),onMouseLeave:()=>h(n.id,null),className:"dock-target-box dock-target-bottom",children:"\u25BC"}),(0,d.jsx)("div",{onMouseEnter:()=>h(n.id,"left"),onMouseLeave:()=>h(n.id,null),className:"dock-target-box dock-target-left",children:"\u25C0"}),(0,d.jsx)("div",{onMouseEnter:()=>h(n.id,"right"),onMouseLeave:()=>h(n.id,null),className:"dock-target-box dock-target-right",children:"\u25B6"}),(0,d.jsx)("div",{onMouseEnter:()=>h(n.id,"center"),onMouseLeave:()=>h(n.id,null),className:"dock-target-box dock-target-center",children:"\u25A3"})]})}),b.draggedPanelId!==null&&a!==null&&a.leafId===n.id&&(0,d.jsx)("div",{className:"dock-preview-highlight",style:{left:a.position==="right"?"50%":"0",top:a.position==="bottom"?"50%":"0",width:a.position==="left"||a.position==="right"?"50%":"100%",height:a.position==="top"||a.position==="bottom"?"50%":"100%"}})]})]})},en=({skin:n="vscode",defaultPanelIcon:l})=>{let a=Se(),{restorePanel:h,minimizePanel:S,requestClosePanel:w,resolvePendingClose:E,maximizePanel:D,updateFloatingPosition:b,bringToFront:M,floatPanel:y,setDraggedPanelId:f,dockPanelToGroup:m,movePanelOrder:R,dockPanelToWorkspaceEdge:A}=ke(),v=Ce(),u=Fe(),{windowClass:x,windowBodyClass:I}=we(),[F,p]=(0,W.useState)([]),N=(0,W.useRef)(null),L=(0,W.useRef)(null),[B,$]=(0,W.useState)(null),X=(0,W.useRef)(null),[ue,ee]=(0,W.useState)(!1);(0,W.useEffect)(()=>()=>{X.current&&clearTimeout(X.current)},[]);let[se,le]=(0,W.useState)(null),re=(0,W.useRef)(null),[ge,ve]=(0,W.useState)({x:0,y:0}),[he,fe]=(0,W.useState)(null),ye=(0,W.useRef)(null),ne=i=>{fe(i),ye.current=i},[be,q]=(0,W.useState)(null),G=(0,W.useRef)(null),Re=(i,t,c,g)=>{let P=g?{leafId:i,panelId:t,index:c,side:g}:null;q(P),G.current=P},He=(i,t)=>{let c=t?{leafId:i,position:t}:null;le(c),re.current=c},Ae=(i,t)=>{if(t.button!==0)return;let c=t.clientX,g=t.clientY,P=!1,z=k=>{let T=k.clientX-c,U=k.clientY-g;!P&&(Math.abs(T)>5||Math.abs(U)>5)&&(P=!0,f(i)),P&&ve({x:k.clientX,y:k.clientY})},H=k=>{if(window.removeEventListener("mousemove",z),window.removeEventListener("mouseup",O),P){let T=re.current,U=G.current,j=ye.current;if(j)A(i,j);else if(U){let Z=U.index;U.side==="right"&&(Z+=1),R(i,U.leafId,Z)}else T?m(i,T.leafId,T.position):y(i,{x:k.clientX-150,y:k.clientY-15,width:450,height:350});f(null),le(null),re.current=null,q(null),G.current=null,ne(null)}},O=k=>{H(k)};window.addEventListener("mousemove",z),window.addEventListener("mouseup",O)},$e=(i,t)=>{t.preventDefault();let c=a.panels[i];if(!c)return;let P=oe.get(c.component)?.defaultOptions,z=[];P?.canDrag!==!1&&z.push({label:Y(u.floatWindow,v),action:()=>y(i)}),P?.canMinimize!==!1&&z.push({label:Y(u.minimizePanel,v),action:()=>S(i)}),z.length>0&&P?.canClose!==!1&&z.push({separator:!0}),P?.canClose!==!1&&z.push({label:Y(u.closeTab,v),action:()=>w(i)}),z.length!==0&&L.current?.show({event:t,contextMenu:{items:z}})},Ge=(i,t)=>{t.preventDefault(),$(null),L.current?.show({event:t,contextMenu:{items:[{label:Y(u.restorePanel,v),action:()=>h(i)},{label:Y(u.maximizePanel,v),action:()=>D(i)},{separator:!0},{label:Y(u.closePanel,v),action:()=>w(i)}]}})};(0,W.useEffect)(()=>{let i=Object.keys(a.panels);p(i);for(let t of Array.from(De.keys()))i.includes(t)||De.delete(t)},[a.panels]),(0,W.useEffect)(()=>{let i=()=>{a.draggedPanelId!==null&&(f(null),le(null),q(null))};return window.addEventListener("blur",i),()=>{window.removeEventListener("blur",i)}},[a.draggedPanelId]);let We=(0,W.useRef)(null),[Pe,Ve]=(0,W.useState)({width:1024,height:768});(0,W.useEffect)(()=>{let i=We.current;if(!i)return;let t=new ResizeObserver(c=>{if(!c||c.length===0)return;let g=c[0].contentRect;Ve({width:Math.max(100,g.width),height:Math.max(100,g.height)})});return t.observe(i),()=>{t.disconnect()}},[]),(0,W.useEffect)(()=>{let i=Pe.width,t=Pe.height;a.floating.forEach(c=>{let g=typeof c.width=="string"?parseFloat(c.width):c.width,P=typeof c.height=="string"?parseFloat(c.height):c.height,z=typeof c.x=="string"?parseFloat(c.x):c.x,H=typeof c.y=="string"?parseFloat(c.y):c.y,O=g,k=P,T=z,U=H,j=!1;O>i&&(O=Math.max(200,i-20),j=!0),k>t&&(k=Math.max(150,t-40),j=!0);let Z=10;if(c.stickyRight)T=i-O-Z,j=!0;else{let te=i-100;T>te&&(T=Math.max(0,te),j=!0)}if(c.stickyBottom)U=t-k-Z,j=!0;else{let te=t-40;U>te&&(U=Math.max(0,te),j=!0)}j&&b(c.id,{x:T,y:U,width:O,height:k})})},[Pe,a.floating,b]),(0,W.useEffect)(()=>{let i=t=>{if(t.button!==0)return;let c=t.target;if(!c)return;let g=c.closest(".floating-window");if(!g)return;let P=g.getAttribute("data-window-id");P&&M(P)};return document.addEventListener("mousedown",i),()=>{document.removeEventListener("mousedown",i)}},[M]);let _e=(i,t)=>{let c=a.floating.find(Z=>Z.id===i);if(!c||c.maximized)return;M(i);let g=t.clientX,P=t.clientY,H=t.currentTarget.closest(".floating-window"),O=H?H.offsetLeft:0,k=H?H.offsetTop:0,T=!1,U=Z=>{let te=Z.clientX-g,pe=Z.clientY-P;if(!T&&(Math.abs(te)>5||Math.abs(pe)>5)&&(T=!0,f(i)),T){let me=O+te,xe=k+pe;b(i,{x:me,y:xe,stickyRight:!1,stickyBottom:!1})}},j=()=>{if(T){let Z=re.current,te=G.current,pe=ye.current;if(pe)A(i,pe);else if(te){let me=te.index;te.side==="right"&&(me+=1),R(i,te.leafId,me)}else Z&&m(i,Z.leafId,Z.position);f(null),le(null),re.current=null,q(null),G.current=null,ne(null)}window.removeEventListener("mousemove",U),window.removeEventListener("mouseup",j)};window.addEventListener("mousemove",U),window.addEventListener("mouseup",j)},e=(i,t)=>{t.stopPropagation();let c=a.floating.find(j=>j.id===i);if(!c||c.maximized)return;M(i);let g=t.clientX,P=t.clientY,H=t.currentTarget.closest(".floating-window"),O=H?H.offsetWidth:400,k=H?H.offsetHeight:300,T=j=>{let Z=j.clientX-g,te=j.clientY-P,pe=Math.max(200,O+Z),me=Math.max(150,k+te),xe=c.x,Ne=c.y,et=Pe.width,tt=Pe.height,Wt=typeof c.x=="string"?parseFloat(c.x):c.x,Ft=typeof c.y=="string"?parseFloat(c.y):c.y,Dt=typeof c.width=="string"?parseFloat(c.width):c.width,Ot=typeof c.height=="string"?parseFloat(c.height):c.height,dt=Math.abs(Wt+Dt-et)<4,ct=Math.abs(Ft+Ot-tt)<4;dt&&(xe=et-pe,xe<0&&(xe=0,pe=et)),ct&&(Ne=tt-me,Ne<0&&(Ne=0,me=tt)),b(i,{x:xe,y:Ne,width:pe,height:me,stickyRight:dt,stickyBottom:ct})},U=()=>{window.removeEventListener("mousemove",T),window.removeEventListener("mouseup",U)};window.addEventListener("mousemove",T),window.addEventListener("mouseup",U)},s=i=>{if(N.current){let t=i==="left"?-150:150;N.current.scrollBy({left:t,behavior:"smooth"})}},[o,r]=(0,W.useState)("dark");return(0,W.useEffect)(()=>{let i=()=>{let c=document.documentElement.getAttribute("data-bs-theme")==="light"?"light":"dark";r(c)};i();let t=new MutationObserver(i);return t.observe(document.documentElement,{attributes:!0,attributeFilter:["data-bs-theme"]}),()=>t.disconnect()},[]),(0,d.jsxs)("div",{"data-workspace-skin":n,"data-bs-theme":o,className:"d-flex flex-column w-100 h-100 overflow-hidden",style:{userSelect:"none"},children:[(0,d.jsxs)("div",{ref:We,className:`flex-grow-1 w-100 position-relative ${a.draggedPanelId?"dragging-active":""}`,style:{overflow:"hidden"},children:[a.draggedPanelId!==null&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("div",{className:"workspace-edge-trigger edge-trigger-left",onMouseEnter:()=>ne("left"),onMouseLeave:()=>ne(null)}),(0,d.jsx)("div",{className:"workspace-edge-trigger edge-trigger-right",onMouseEnter:()=>ne("right"),onMouseLeave:()=>ne(null)}),(0,d.jsx)("div",{className:"workspace-edge-trigger edge-trigger-top",onMouseEnter:()=>ne("top"),onMouseLeave:()=>ne(null)}),(0,d.jsx)("div",{className:"workspace-edge-trigger edge-trigger-bottom",onMouseEnter:()=>ne("bottom"),onMouseLeave:()=>ne(null)})]}),a.draggedPanelId!==null&&he!==null&&(0,d.jsx)("div",{className:`workspace-edge-preview edge-preview-${he}`}),(0,d.jsx)("div",{className:"w-100 h-100",style:{overflow:"hidden",position:"relative"},children:a.gridRoot?(0,d.jsx)(wt,{node:a.gridRoot,path:[],onTabRightClick:$e,activeDropZone:se,onHoverDropZone:He,onTabDragStart:Ae,hoveredTab:be,onTabHover:Re,defaultPanelIcon:l}):(0,d.jsx)("div",{className:"w-100 h-100 d-flex align-items-center justify-content-center text-muted font-monospace small",children:"Grid Empty"})}),(()=>{let i=a.floating.length>0?Math.max(...a.floating.map(t=>t.z)):0;return a.floating.map(t=>{let c=a.panels[t.id];if(!c)return null;let g=t.maximized,P=a.draggedPanelId===t.id,z=t.z===i&&a.floating.length>0,O=oe.get(c.component)?.defaultOptions;return(0,d.jsxs)("div",{"data-window-id":t.id,className:`floating-window ${g?"maximized":""} ${z?"v2-window-focused":""} ${x??""}`,style:{position:"absolute",left:g?0:typeof t.x=="number"?`${t.x}px`:t.x,top:g?0:typeof t.y=="number"?`${t.y}px`:t.y,width:g?"100%":typeof t.width=="number"?`${t.width}px`:t.width,height:g?"100%":typeof t.height=="number"?`${t.height}px`:t.height,zIndex:t.z,pointerEvents:P?"none":"auto"},children:[(0,d.jsxs)("div",{onDoubleClick:()=>D(t.id),onMouseDown:k=>{O?.canDrag!==!1&&_e(t.id,k)},className:"floating-window-titlebar d-flex flex-row justify-content-between align-items-center cursor-move",style:{cursor:g||O?.canDrag===!1?"default":"move"},children:[(0,d.jsxs)("span",{className:"floating-window-title text-truncate me-2 d-flex align-items-center",children:[(0,d.jsx)("span",{className:"window-title-icon",children:O?.icon||l||st}),(0,d.jsxs)("span",{children:[Y(c.title,v),c.dirty?" *":""]})]}),(0,d.jsxs)("div",{className:"d-flex align-items-center gap-1.5",onMouseDown:k=>k.stopPropagation(),children:[O?.canDrag!==!1&&(0,d.jsx)("button",{type:"button",title:Y(u.windowAnchoringOptions,v),onClick:k=>{let T=!!t.stickyRight,U=!!t.stickyBottom;L.current?.show({event:k,contextMenu:{items:[{label:Y(u.anchorToRightEdge,v),checkbox:{active:!0,enabled:!0,value:T},action:()=>{let j=Pe.width,Z=typeof t.width=="string"?parseFloat(t.width):t.width;T?b(t.id,{stickyRight:!1}):b(t.id,{x:j-Z-10,stickyRight:!0})}},{label:Y(u.anchorToBottomEdge,v),checkbox:{active:!0,enabled:!0,value:U},action:()=>{let j=Pe.height,Z=typeof t.height=="string"?parseFloat(t.height):t.height;U?b(t.id,{stickyBottom:!1}):b(t.id,{y:j-Z-10,stickyBottom:!0})}}]}})},className:"custom-tab-btn btn-anchor-tab",children:(0,d.jsxs)("svg",{className:`anchor-icon ${t.stickyRight&&t.stickyBottom?"anchor-sticky-both":t.stickyRight?"anchor-sticky-right":t.stickyBottom?"anchor-sticky-bottom":""}`,width:"11",height:"11",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:[(0,d.jsx)("circle",{cx:"12",cy:"5",r:"2"}),(0,d.jsx)("path",{d:"M12 7v7m0 0a4 4 0 0 1-4-4M12 14a4 4 0 0 0 4-4M5 18h14"})]})}),O?.canMinimize!==!1&&(0,d.jsx)("button",{type:"button",title:Y(u.minimize,v),onClick:()=>S(t.id),className:"custom-tab-btn",children:(0,d.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:(0,d.jsx)("path",{d:"M5 12h14"})})}),(0,d.jsx)("button",{type:"button",title:g?Y(u.restoreSize,v):Y(u.maximize,v),onClick:()=>D(t.id),className:"custom-tab-btn",children:(0,d.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:(0,d.jsx)("rect",{x:"4",y:"4",width:"16",height:"16",rx:"1.5"})})}),O?.canClose!==!1&&(0,d.jsx)("button",{type:"button",title:Y(u.close,v),onClick:()=>w(t.id),className:"custom-tab-btn btn-close-tab",children:(0,d.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:(0,d.jsx)("path",{d:"M18 6L6 18M6 6l12 12"})})})]})]}),(0,d.jsx)("div",{className:`flex-grow-1 w-100 overflow-hidden ${I??""}`,style:{position:"relative"},children:(0,d.jsx)(xt,{panelId:t.id},t.id)}),!g&&(0,d.jsx)("div",{onMouseDown:k=>e(t.id,k),style:{position:"absolute",right:0,bottom:0,width:"14px",height:"14px",cursor:"se-resize",zIndex:30,background:"linear-gradient(135deg, transparent 50%, rgba(255,255,255,0.2) 50%)"}})]},t.id)})})()]}),a.minimized.length>0&&(0,d.jsxs)("div",{className:"flex-shrink-0 w-100 d-flex flex-row align-items-center taskbar-footer-container px-3 py-1.5 justify-content-center",style:{height:"48px",zIndex:100},children:[(0,d.jsx)("button",{type:"button",onClick:()=>s("left"),className:"btn btn-sm btn-link taskbar-nav-btn text-decoration-none py-0 font-monospace",style:{display:a.minimized.length>4?"block":"none"},children:"\u25C0"}),(0,d.jsx)("div",{ref:N,className:"d-flex flex-row gap-2 overflow-x-auto align-items-center mx-2 px-1 py-0.5 scrollbar-hidden",style:{maxWidth:"800px",scrollbarWidth:"none",scrollSnapType:"x mandatory"},children:a.minimized.map(i=>{let c=oe.get(i.component)?.defaultOptions?.icon||l||st;return(0,d.jsx)("div",{onClick:()=>h(i.id),onContextMenu:g=>Ge(i.id,g),onMouseEnter:g=>{if(ue)return;X.current&&clearTimeout(X.current);let P=g.currentTarget.getBoundingClientRect();$({id:i.id,rect:P,title:i.title,component:i.component})},onMouseLeave:()=>{X.current=setTimeout(()=>{$(null)},150)},className:"taskbar-glassmorphic-item rounded d-flex align-items-center justify-content-center cursor-pointer hover-elevate",style:{backdropFilter:"blur(6px)",transition:"all 0.2s",cursor:"pointer",scrollSnapAlign:"start",width:"38px",height:"38px",position:"relative",padding:0},children:(0,d.jsx)("span",{className:"taskbar-item-icon d-flex align-items-center justify-content-center",children:c})},i.id)})}),B&&(0,it.createPortal)((0,d.jsxs)("div",{className:"taskbar-item-tooltip d-flex flex-column gap-1",style:{position:"fixed",left:`${B.rect.left+B.rect.width/2}px`,top:`${B.rect.top-8}px`,transform:"translateX(-50%) translateY(-100%)",opacity:1,pointerEvents:"auto",zIndex:999999},onMouseEnter:()=>{X.current&&clearTimeout(X.current)},onMouseLeave:()=>{$(null)},children:[(0,d.jsxs)("div",{className:"d-flex flex-row align-items-center justify-content-between w-100 gap-3 px-1 py-0.5",children:[(0,d.jsxs)("span",{className:"tooltip-title-text text-truncate",style:{maxWidth:"140px"},children:[Y(B.title,v),a.panels[B.id]?.dirty?" *":""]}),(0,d.jsx)("span",{onClick:i=>{i.stopPropagation(),w(B.id),$(null)},title:Y(u.closePanel,v),className:"tooltip-close-x d-flex align-items-center justify-content-center",children:(0,d.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:(0,d.jsx)("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),(0,d.jsx)(Qt,{panelId:B.id})]}),document.body),(0,d.jsx)("button",{type:"button",onClick:()=>s("right"),className:"btn btn-sm btn-link taskbar-nav-btn text-decoration-none py-0 font-monospace",style:{display:a.minimized.length>4?"block":"none"},children:"\u25B6"})]}),F.map(i=>{let t=a.panels[i];if(!t)return null;let c=Pt(i);return(0,it.createPortal)((0,d.jsx)(Vt,{panelId:i,children:(0,d.jsx)("div",{style:{width:"100%",height:"100%"},children:Zt(i,t.component)})}),c,i)}),(0,d.jsx)(vt.JsonContextMenu,{ref:L,id:"workspace-context-menu",theme:"dark",onShow:()=>ee(!0),onHide:()=>ee(!1)}),a.draggedPanelId!==null&&!a.floating.some(i=>i.id===a.draggedPanelId)&&(0,d.jsxs)("div",{className:"position-fixed bg-black bg-opacity-80 border border-info rounded text-info font-monospace px-3 py-1.5 shadow-lg d-flex align-items-center gap-2",style:{left:ge.x+12,top:ge.y+12,zIndex:1e5,pointerEvents:"none",fontSize:"0.75rem",boxShadow:"0 8px 24px rgba(0,0,0,0.5)",borderLeft:"3px solid var(--accent-color)",whiteSpace:"nowrap"},children:["\u{1F4C4} ",Y(a.panels[a.draggedPanelId]?.title,v)||"Tab"]}),a.pendingClose&&(()=>{let i=a.panels[a.pendingClose.id],t=i?Y(i.title,v):"Panel";return(0,d.jsx)("div",{className:"close-warning-overlay",children:(0,d.jsxs)("div",{className:"close-warning-modal",children:[(0,d.jsxs)("div",{className:"close-warning-header",children:[(0,d.jsx)("div",{className:"close-warning-icon",children:"\u26A0\uFE0F"}),(0,d.jsx)("h5",{className:"close-warning-title",children:"Unsaved Changes"})]}),(0,d.jsxs)("p",{className:"close-warning-message",children:['"',t,'" has unsaved changes. Do you want to discard your changes and close the panel?']}),(0,d.jsxs)("div",{className:"close-warning-footer",children:[(0,d.jsx)("button",{type:"button",className:"btn-warning-action btn-warning-cancel",onClick:()=>E(!1),children:"Cancel"}),(0,d.jsx)("button",{type:"button",className:"btn-warning-action btn-warning-discard",onClick:()=>E(!0),children:"Discard Changes"})]})]})})})()]})},Ct=en;var K=require("react"),lt=require("react/jsx-runtime"),tn=0,rt=()=>`panel-${++tn}-${Date.now()}`,Je=new Map,Mt={leftPanel:null,rightPanel:null,modals:[]},Rt=(0,K.createContext)(null),kt=(0,K.createContext)(null),It=({children:n})=>{let[l,a]=(0,K.useState)(Mt),h=(0,K.useRef)(l);h.current=l;let S=(0,K.useCallback)((u,x)=>{Je.set(u,x)},[]),w=(0,K.useCallback)(u=>{Je.delete(u)},[]),E=(0,K.useCallback)(async(u,x,I={})=>{let F=h.current.leftPanel;if(F){let L=Je.get(F.id);if(L&&!await L())return null}let p=rt(),N={id:p,Component:u,props:x,containerType:"left-panel",options:I};return a(L=>({...L,leftPanel:N})),p},[]),D=(0,K.useCallback)(async(u,x,I={})=>{let F=h.current.rightPanel;if(F){let L=Je.get(F.id);if(L&&!await L())return null}let p=rt(),N={id:p,Component:u,props:x,containerType:"right-panel",options:I};return a(L=>({...L,rightPanel:N})),p},[]),b=(0,K.useCallback)((u,x,I={})=>{let F=rt(),p=x.title,N={...I,title:I.title||p||"Confirmation"},L={id:F,Component:u,props:x,containerType:"modal",options:N};return a(B=>({...B,modals:[...B.modals,L]})),F},[]),M=(0,K.useCallback)(u=>{a(x=>({leftPanel:x.leftPanel?.id===u?null:x.leftPanel,rightPanel:x.rightPanel?.id===u?null:x.rightPanel,modals:x.modals.filter(I=>I.id!==u)}))},[]),y=(0,K.useCallback)(()=>{a(Mt)},[]),f=(0,K.useCallback)(()=>{a(u=>({...u,modals:[]}))},[]),m=(0,K.useCallback)(u=>l.leftPanel?.id===u?l.leftPanel:l.rightPanel?.id===u?l.rightPanel:l.modals.find(x=>x.id===u),[l]),R=(0,K.useCallback)((u,x)=>{a(I=>({leftPanel:I.leftPanel?.id===u?{...I.leftPanel,...x}:I.leftPanel,rightPanel:I.rightPanel?.id===u?{...I.rightPanel,...x}:I.rightPanel,modals:I.modals.map(F=>F.id===u?{...F,...x}:F)}))},[]),A=(0,K.useCallback)((u,x)=>{R(u,{dirty:x})},[R]),v=(0,K.useMemo)(()=>({openLeftPanel:E,openRightPanel:D,openModal:b,close:M,closeAll:y,closeAllModals:f,getInstance:m,updateInstance:R,setDirty:A,registerCloseHandler:S,unregisterCloseHandler:w}),[E,D,b,M,y,f,m,R,A,S,w]);return(0,lt.jsx)(Rt.Provider,{value:l,children:(0,lt.jsx)(kt.Provider,{value:v,children:n})})},Me=()=>{let n=(0,K.useContext)(Rt);if(!n)throw new Error("usePanelState must be used within PanelProvider");return n},Ee=()=>{let n=(0,K.useContext)(kt);if(!n)throw new Error("usePanelActions must be used within PanelProvider");return n};var _=require("react");var Oe=require("react");var de=require("react/jsx-runtime"),Ze=({zIndex:n,onDiscard:l,onCancel:a,message:h,title:S})=>{let w=(0,Oe.useRef)(null);return(0,Oe.useEffect)(()=>{let M=setTimeout(()=>{w.current?.focus()},50);return()=>clearTimeout(M)},[]),(0,Oe.useEffect)(()=>{let M=y=>{y.key==="Escape"&&(y.stopPropagation(),y.preventDefault(),a())};return document.addEventListener("keydown",M,!0),()=>document.removeEventListener("keydown",M,!0)},[a]),(0,de.jsx)("div",{className:"close-warning-overlay",style:{zIndex:n},children:(0,de.jsxs)("div",{className:"close-warning-modal",children:[(0,de.jsxs)("div",{className:"close-warning-header",children:[(0,de.jsx)("div",{className:"close-warning-icon",children:"\u26A0\uFE0F"}),(0,de.jsx)("h5",{className:"close-warning-title",children:S||"Unsaved Changes"})]}),(0,de.jsx)("p",{className:"close-warning-message",children:h||"You have unsaved changes that will be lost."}),(0,de.jsx)("p",{className:"close-warning-message",style:{fontWeight:500,margin:0},children:"Do you want to discard your changes and close?"}),(0,de.jsxs)("div",{className:"close-warning-footer",children:[(0,de.jsx)("button",{type:"button",className:"btn-warning-action btn-warning-cancel",onClick:a,ref:w,children:"Cancel"}),(0,de.jsx)("button",{type:"button",className:"btn-warning-action btn-warning-discard",onClick:l,children:"Discard Changes"})]})]})})};var V=require("react/jsx-runtime"),nn=({modal:n,index:l,isTopmost:a})=>{let{close:h,updateInstance:S,setDirty:w}=Ee(),E=Ce(),{modalClass:D,modalBodyClass:b}=we(),M=(0,_.useRef)(null),[y,f]=(0,_.useState)(!1),m=(0,_.useRef)(null),{id:R,Component:A,props:v,options:u,dirty:x}=n,I=u,[F,p]=(0,_.useState)(I.icon||null),N=(0,_.useRef)(I);N.current=I;let L=(0,_.useCallback)(()=>new Promise(q=>{m.current=q,f(!0)}),[]),B=(0,_.useCallback)(()=>{m.current?.(!0),m.current=null,f(!1)},[]),$=(0,_.useCallback)(()=>{m.current?.(!1),m.current=null,f(!1)},[]),X=(0,_.useCallback)(async q=>{if(q?.force){h(R);return}if(M.current){if(!await M.current())return;h(R);return}x&&!await L()||h(R)},[h,R,x,L]),ue=(0,_.useCallback)(q=>w(R,q),[w,R]),ee=(0,_.useCallback)(q=>S(R,{options:{...N.current,title:q}}),[S,R]),se=(0,_.useCallback)(q=>p(q),[]),le=(0,_.useCallback)(q=>(M.current=q,()=>{M.current=null}),[]),re=(0,_.useMemo)(()=>({requestClose:X,setDirty:ue,setTitle:ee,setIcon:se,onCloseRequested:le,containerType:"modal",instanceId:R}),[X,ue,ee,se,le,R]),ge=Y(I.title,E),ve=x?`${ge} *`:ge,he=I.size?`v2-modal-size-${I.size}`:"v2-modal-size-auto",fe=I.closable!==!1;(0,_.useEffect)(()=>{if(!a||!fe||y)return;let q=G=>{G.key==="Escape"&&(G.stopPropagation(),X())};return document.addEventListener("keydown",q),()=>document.removeEventListener("keydown",q)},[X,fe,a,y]);let ne=1e4+l*10,be=ne+5;return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)("div",{className:"v2-modal-overlay",style:{zIndex:ne},children:[(0,V.jsx)("div",{className:"v2-modal-curtain",onClick:fe?()=>X():void 0}),(0,V.jsxs)("div",{className:`v2-modal-window ${he} ${D??""}`,children:[(0,V.jsxs)("div",{className:"v2-modal-header",children:[F&&(0,V.jsx)("div",{className:"v2-modal-icon",children:F}),(0,V.jsx)("h4",{className:"v2-modal-title",children:ve}),fe&&(0,V.jsx)("button",{className:"v2-modal-close-button",onClick:()=>X(),title:"Close",type:"button",children:(0,V.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:(0,V.jsx)("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),(0,V.jsx)("div",{className:`v2-modal-body ${b??""}`,children:(0,V.jsx)(Ie,{value:re,children:(0,V.jsx)(A,{...v,panelId:R})})})]})]}),y&&(0,V.jsx)(Ze,{zIndex:be,onDiscard:B,onCancel:$})]})},on=()=>{let{modals:n}=Me();return n.length===0?null:(0,V.jsx)(V.Fragment,{children:n.map((l,a)=>(0,V.jsx)(nn,{modal:l,index:a,isTopmost:a===n.length-1},l.id))})},Nt=on;var Q=require("react");var J=require("react/jsx-runtime"),Qe=({panel:n,position:l,defaultWidth:a})=>{let{close:h,updateInstance:S,setDirty:w,registerCloseHandler:E,unregisterCloseHandler:D}=Ee(),{modals:b}=Me(),M=Ce(),{sidePanelClass:y,sidePanelBodyClass:f}=we(),m=(0,Q.useRef)(null),[R,A]=(0,Q.useState)(!1),v=(0,Q.useRef)(null),{id:u,Component:x,props:I,options:F,dirty:p}=n,N=F,[L,B]=(0,Q.useState)(N.icon||null),$=(0,Q.useRef)(N);$.current=N;let X=(0,Q.useCallback)(()=>new Promise(G=>{v.current=G,A(!0)}),[]),ue=(0,Q.useCallback)(()=>{v.current?.(!0),v.current=null,A(!1)},[]),ee=(0,Q.useCallback)(()=>{v.current?.(!1),v.current=null,A(!1)},[]),se=(0,Q.useCallback)(async G=>{if(G?.force){h(u);return}if(m.current){if(!await m.current())return;h(u);return}p&&!await X()||h(u)},[h,u,p,X]),le=(0,Q.useCallback)(async()=>m.current?await m.current():!p,[p]);(0,Q.useEffect)(()=>(E(u,le),()=>D(u)),[u,le,E,D]);let re=(0,Q.useCallback)(G=>w(u,G),[w,u]),ge=(0,Q.useCallback)(G=>S(u,{options:{...$.current,title:G}}),[S,u]),ve=(0,Q.useCallback)(G=>B(G),[]),he=(0,Q.useCallback)(G=>(m.current=G,()=>{m.current=null}),[]),fe=(0,Q.useMemo)(()=>({requestClose:se,setDirty:re,setTitle:ge,setIcon:ve,onCloseRequested:he,containerType:l==="left"?"left-panel":"right-panel",instanceId:u}),[se,re,ge,ve,he,l,u]),ye=Y(N.title,M),ne=p?`${ye} *`:ye;(0,Q.useEffect)(()=>{let G=Re=>{Re.key==="Escape"&&b.length===0&&!R&&se()};return document.addEventListener("keydown",G),()=>document.removeEventListener("keydown",G)},[se,b.length,R]);let be=N.width||a||400,q=typeof be=="number"?`${be}px`:be;return(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)("div",{className:`v2-side-panel v2-side-panel-${l} v2-side-panel-visible ${y??""}`,style:{width:q},children:(0,J.jsxs)("div",{className:"v2-side-panel-window",children:[(0,J.jsxs)("div",{className:"v2-side-panel-header",children:[L&&(0,J.jsx)("div",{className:"v2-side-panel-icon",children:L}),(0,J.jsx)("h4",{className:"v2-side-panel-title",children:ne}),(0,J.jsx)("button",{className:"v2-side-panel-close-button",onClick:()=>se(),title:"Close",type:"button",children:(0,J.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:(0,J.jsx)("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),(0,J.jsx)("div",{className:`v2-side-panel-body ${f??""}`,children:(0,J.jsx)(Ie,{value:fe,children:(0,J.jsx)(x,{...I,panelId:u})})})]})}),R&&(0,J.jsx)(Ze,{zIndex:2e4,onDiscard:ue,onCancel:ee})]})},sn=({defaultWidth:n})=>{let{leftPanel:l,rightPanel:a}=Me();return(0,J.jsxs)(J.Fragment,{children:[l&&(0,J.jsx)(Qe,{panel:l,position:"left",defaultWidth:n},l.id),a&&(0,J.jsx)(Qe,{panel:a,position:"right",defaultWidth:n},a.id)]})},St=({defaultWidth:n})=>{let{leftPanel:l}=Me();return l?(0,J.jsx)(Qe,{panel:l,position:"left",defaultWidth:n},l.id):null},zt=({defaultWidth:n})=>{let{rightPanel:l}=Me();return l?(0,J.jsx)(Qe,{panel:l,position:"right",defaultWidth:n},l.id):null},Lt=sn;var Be=require("react");var ce=require("react/jsx-runtime"),an=({title:n,message:l,alert:a,alertType:h="info",useYesNoTitles:S=!1,onOK:w,onCancel:E})=>{let{requestClose:D,setIcon:b,setTitle:M}=je(),y=(0,Be.useRef)(null);(0,Be.useEffect)(()=>{if(n){let u=typeof n=="string"?n:n.defaultMessage||n.id;M(u)}b&&b((0,ce.jsx)("span",{children:"\u2753"}))},[n,M,b]),(0,Be.useEffect)(()=>{y.current?.focus()},[]);let f=typeof l=="string"?l:l.defaultMessage||l.id,m=S?"No":"Cancel",R=S?"Yes":"OK",A=u=>{u.preventDefault(),w?.(),D()},v=()=>{E?.(),D()};return(0,ce.jsxs)("form",{onSubmit:A,className:"p-3 d-flex flex-column gap-3",children:[a&&(0,ce.jsxs)("div",{className:`alert alert-${h==="danger"?"danger":h} d-flex align-items-center gap-2 m-0 p-2.5 small`,children:[(0,ce.jsx)("span",{children:"\u2139\uFE0F"}),(0,ce.jsx)("span",{children:a})]}),(0,ce.jsx)("div",{style:{fontSize:"0.9rem",color:"inherit",lineHeight:1.5},children:f}),(0,ce.jsx)("hr",{className:"my-2 opacity-10"}),(0,ce.jsxs)("div",{className:"d-flex justify-content-end gap-2",children:[(0,ce.jsx)("button",{type:"button",className:"btn btn-sm btn-outline-secondary font-monospace",onClick:v,children:m}),(0,ce.jsx)("button",{type:"submit",className:"btn btn-sm btn-primary font-monospace",ref:y,children:R})]})]})},Tt=an;var ie=require("react"),ae=require("react/jsx-runtime"),Et=(0,ie.forwardRef)(function({position:l="right",tabs:a,drawerWidth:h="220px",activeTabId:S,onActiveTabChange:w,children:E},D){let b=S!==void 0,[M,y]=(0,ie.useState)(null),f=b?S:M,[m,R]=(0,ie.useState)(()=>{let p=new Set;for(let N of a)N.eagerMount&&p.add(N.id);return p});(0,ie.useEffect)(()=>{let p=a.filter(N=>N.eagerMount&&!m.has(N.id));p.length>0&&R(N=>{let L=new Set(N);for(let B of p)L.add(B.id);return L})},[a]);let A=(0,ie.useRef)(f??null);(0,ie.useEffect)(()=>{A.current=f??null},[f]);let v=(0,ie.useCallback)(p=>{b||y(p),w?.(p)},[b,w]);(0,ie.useImperativeHandle)(D,()=>({openTab:p=>v(p),closeDrawer:()=>v(null),getActiveTab:()=>A.current}),[v]);let u=p=>{v(f===p?null:p)},x=(0,ie.useCallback)(()=>v(null),[v]);(0,ie.useEffect)(()=>{f&&!m.has(f)&&R(p=>{let N=new Set(p);return N.add(f),N})},[f,m]),(0,ie.useEffect)(()=>{f===null&&R(p=>{let N=!1,L=new Set(p);for(let B of p){let $=a.find(X=>X.id===B);$&&!$.eagerMount&&!$.preserveState&&(L.delete(B),N=!0)}return N?L:p})},[f,a]);let I=(0,ae.jsx)("div",{className:`sidebar-tabs-strip ${l}`,style:{width:"56px",height:"100%"},children:a.map(p=>{let N=f===p.id;return(0,ae.jsx)("button",{type:"button",onClick:()=>u(p.id),className:`sidebar-tab-btn ${N?"active":""}`,title:p.label,"aria-pressed":N,children:p.icon},p.id)})}),F=(0,ae.jsx)("div",{className:`sidebar-content-drawer h-100 ${l}`,style:{width:f?h:"0px",minWidth:f?h:"0px",overflow:"hidden",flexShrink:0},children:a.map(p=>{if(!m.has(p.id))return null;let L=f===p.id,B=()=>v(p.id);return(0,ae.jsxs)("div",{style:{display:L?"flex":"none",flexDirection:"column",height:"100%",width:"100%"},children:[(0,ae.jsxs)("div",{className:"d-flex align-items-center justify-content-between border-bottom border-secondary-subtle px-3 py-2 flex-shrink-0",style:{background:"rgba(0,0,0,0.08)",minHeight:"38px"},children:[(0,ae.jsx)("span",{className:"sidebar-header-title",children:p.label}),(0,ae.jsx)("button",{type:"button",onClick:x,className:"btn btn-link p-0 text-secondary d-flex align-items-center",style:{textDecoration:"none"},title:"Close panel","aria-label":"Close panel",children:(0,ae.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,ae.jsx)("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),(0,ae.jsx)("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),(0,ae.jsx)("div",{className:"flex-grow-1 overflow-auto",children:p.renderContent(p.id,x,B)})]},p.id)})});return(0,ae.jsxs)(ae.Fragment,{children:[l==="left"&&I,l==="left"&&F,E,l==="right"&&F,l==="right"&&I]})});0&&(module.exports={ConfirmationForm,FormContainerContext,FormContainerProvider,LeftPanelRenderer,ModalStackRenderer,PanelProvider,PanelRegistry,RightPanelRenderer,SidePanelRenderer,Sidebar,WindowManager,WindowManagerProvider,defaultPredefinedMessages,formatLabel,useFormContainer,useFormatMessage,usePanelActions,usePanelContext,usePanelState,usePredefinedMessages,useStyleClasses,useWindowManagerActions,useWindowManagerState});
1
+ var Dt=Object.create;var Ye=Object.defineProperty;var At=Object.getOwnPropertyDescriptor;var Bt=Object.getOwnPropertyNames;var Ht=Object.getPrototypeOf,$t=Object.prototype.hasOwnProperty;var Gt=(n,l)=>{for(var r in l)Ye(n,r,{get:l[r],enumerable:!0})},dt=(n,l,r,h)=>{if(l&&typeof l=="object"||typeof l=="function")for(let T of Bt(l))!$t.call(n,T)&&T!==r&&Ye(n,T,{get:()=>l[T],enumerable:!(h=At(l,T))||h.enumerable});return n};var Yt=(n,l,r)=>(r=n!=null?Dt(Ht(n)):{},dt(l||!n||!n.__esModule?Ye(r,"default",{value:n,enumerable:!0}):r,n)),Xt=n=>dt(Ye({},"__esModule",{value:!0}),n);var an={};Gt(an,{ConfirmationForm:()=>Te,FormContainerContext:()=>qe,FormContainerProvider:()=>ke,LeftPanelRenderer:()=>St,ModalStackRenderer:()=>Tt,PanelProvider:()=>wt,PanelRegistry:()=>te,RightPanelRenderer:()=>zt,SidePanelRenderer:()=>Lt,Sidebar:()=>Et,WindowManager:()=>It,WindowManagerProvider:()=>mt,defaultPredefinedMessages:()=>Ne,formatLabel:()=>X,useFormContainer:()=>Ke,useFormatMessage:()=>de,usePanelActions:()=>Ie,usePanelContext:()=>ht,usePanelState:()=>xe,usePredefinedMessages:()=>ue,useStyleClasses:()=>Ce,useWindowManagerActions:()=>Re,useWindowManagerState:()=>fe});module.exports=Xt(an);var O=Yt(require("react"),1),st=require("react-dom");var P=require("react");var tt=class{registry=new Map;register(l,r,h){this.registry.set(l,{Component:r,defaultOptions:h})}get(l){return this.registry.get(l)}getRegisteredIds(){return Array.from(this.registry.keys())}},te=new tt;var Ne={floatWindow:{id:"dockable-desktop-floatWindow",defaultMessage:"Float Window"},minimizePanel:{id:"dockable-desktop-minimizePanel",defaultMessage:"Minimize Panel"},closeTab:{id:"dockable-desktop-closeTab",defaultMessage:"Close Tab"},restorePanel:{id:"dockable-desktop-restorePanel",defaultMessage:"Restore Panel"},maximizePanel:{id:"dockable-desktop-maximizePanel",defaultMessage:"Maximize Panel"},closePanel:{id:"dockable-desktop-closePanel",defaultMessage:"Close Panel"},dockWindow:{id:"dockable-desktop-dockWindow",defaultMessage:"Dock Window"},minimize:{id:"dockable-desktop-minimize",defaultMessage:"Minimize"},maximize:{id:"dockable-desktop-maximize",defaultMessage:"Maximize"},restoreSize:{id:"dockable-desktop-restoreSize",defaultMessage:"Restore Size"},close:{id:"dockable-desktop-close",defaultMessage:"Close"},closeEmptyGroup:{id:"dockable-desktop-closeEmptyGroup",defaultMessage:"Close empty split group"},anchorToRightEdge:{id:"dockable-desktop-anchorToRightEdge",defaultMessage:"Anchor to Right Edge"},anchorToBottomEdge:{id:"dockable-desktop-anchorToBottomEdge",defaultMessage:"Anchor to Bottom Edge"},windowAnchoringOptions:{id:"dockable-desktop-windowAnchoringOptions",defaultMessage:"Window Anchoring Options"},unsavedChangesTitle:{id:"dockable-desktop-unsavedChangesTitle",defaultMessage:"Unsaved Changes"},unsavedChangesMessage:{id:"dockable-desktop-unsavedChangesMessage",defaultMessage:'"{title}" has unsaved changes. Do you want to discard your changes and close?'},discardChanges:{id:"dockable-desktop-discardChanges",defaultMessage:"Discard Changes"},cancel:{id:"dockable-desktop-cancel",defaultMessage:"Cancel"},yes:{id:"dockable-desktop-yes",defaultMessage:"Yes"},no:{id:"dockable-desktop-no",defaultMessage:"No"},ok:{id:"dockable-desktop-ok",defaultMessage:"OK"},closePanelTooltip:{id:"dockable-desktop-closePanelTooltip",defaultMessage:"Close panel"},closeTooltip:{id:"dockable-desktop-closeTooltip",defaultMessage:"Close"}};var Fe=require("react/jsx-runtime"),ct=(0,P.createContext)(null),ut=(0,P.createContext)(null),gt=(0,P.createContext)(null),pt=(0,P.createContext)(Ne),ft=(0,P.createContext)({}),Ce=()=>(0,P.useContext)(ft),nt=class{listeners={};subscribe(l,r){return this.listeners[l]||(this.listeners[l]=[]),this.listeners[l].push(r),()=>{this.listeners[l]=this.listeners[l].filter(h=>h!==r)}}publish(l,r){this.listeners[l]&&this.listeners[l].forEach(h=>h(r))}},qt={type:"branch",orientation:"vertical",sizes:[.75,.25],children:[{type:"leaf",id:"group-left-top",panels:["main-map","main-editor"],activePanelId:"main-map"},{type:"leaf",id:"group-left-bottom",panels:["system-console","help-docs"],activePanelId:"system-console"}]},Kt={"main-map":{id:"main-map",title:"Main Map",component:"mainMap",state:"docked"},"main-editor":{id:"main-editor",title:"Code Editor",component:"editor",state:"docked"},"system-console":{id:"system-console",title:"Console Output",component:"terminal",state:"docked"},"help-docs":{id:"help-docs",title:"Help Center",component:"help",state:"docked"},"live-preview":{id:"live-preview",title:"Live Preview Output",component:"preview",state:"floating"}},Ut=[{id:"live-preview",x:450,y:200,width:320,height:250,z:1e3}],mt=({children:n,formatMessage:l,predefinedMessages:r,dir:h,modalClass:T,modalBodyClass:M,sidePanelClass:A,sidePanelBodyClass:F,windowClass:x,windowBodyClass:R})=>{let[z,c]=(0,P.useState)({gridRoot:qt,floating:Ut,minimized:[],panels:Kt,draggedPanelId:null,activePanelId:"main-map",dir:h||"ltr",isRtl:h==="rtl"}),w=(0,P.useRef)(z);w.current=z;let b=(0,P.useRef)({}),L=(0,P.useMemo)(()=>({...Ne,...r}),[r]),W=(0,P.useRef)(new nt),p=(0,P.useRef)(1e3),y=(0,P.useCallback)((t,s)=>W.current.subscribe(t,s),[]),g=(0,P.useCallback)((t,s)=>{W.current.publish(t,s)},[]),k=(0,P.useCallback)((t,s)=>{let o=typeof t.x=="string"?parseFloat(t.x):t.x,e=typeof t.y=="string"?parseFloat(t.y):t.y,a=typeof t.width=="string"?parseFloat(t.width):t.width,i=typeof t.height=="string"?parseFloat(t.height):t.height;isNaN(o)&&(o=300),isNaN(e)&&(e=150),isNaN(a)&&(a=450),isNaN(i)&&(i=350);let m=D=>s.some(B=>{let I=typeof B.x=="string"?parseFloat(B.x):B.x,N=typeof B.y=="string"?parseFloat(B.y):B.y;return!B.maximized&&Math.abs(I-D.x)<20&&Math.abs(N-D.y)<20}),u=0;for(;m({x:o,y:e})&&u<10;)o+=30,e+=30,u++;let v=Math.max(100,window.innerWidth||1024),C=Math.max(100,window.innerHeight||768);return(o+a>v||e+i>C)&&(o=100+u%5*30,e=100+u%5*30),o=Math.max(0,Math.min(o,v-100)),e=Math.max(0,Math.min(e,C-40)),{x:o,y:e,width:a,height:i}},[]),H=(0,P.useCallback)(t=>{p.current+=1;let s=p.current;c(o=>{let e=o.panels[t];if(!e)return o;if(e.state==="floating")return{...o,floating:o.floating.map(a=>a.id===t?{...a,z:s}:a),activePanelId:t};if(e.state==="docked"){let a=i=>i.type==="leaf"?i.panels.includes(t)?{...i,activePanelId:t}:i:{...i,children:i.children.map(a)};return{...o,gridRoot:a(o.gridRoot),activePanelId:t}}return{...o,activePanelId:t}})},[]),$=(t,s)=>{if(t.type==="leaf"){let o=t.panels.indexOf(s);if(o===-1)return t;let e=t.panels.filter(m=>m!==s),a=t.activePanelId===s?e[o]||e[o-1]||e[0]||null:t.activePanelId,i={...t,panels:e,activePanelId:a};return e.length===0&&!t.keepOnEmpty?null:i}else{let o=t.children.map(i=>$(i,s)).filter(i=>i!==null);if(o.length===0)return null;if(o.length===1)return o[0];let e=t.sizes.slice(0,o.length),a=e.reduce((i,m)=>i+m,0);return{...t,children:o,sizes:e.map(i=>i/a)}}},f=(t,s,o)=>{if(t.type==="leaf"){if(t.id===s){let e=t.panels.includes(o)?t.panels:[...t.panels,o];return{...t,panels:e,activePanelId:o}}return t}else return{...t,children:t.children.map(e=>f(e,s,o))}},S=t=>{if(t.type==="leaf")return t.id;for(let s of t.children){let o=S(s);if(o)return o}return null},E=(0,P.useCallback)((t,s,o)=>{c(e=>{let a=e.panels[t],i=te.get(s),m=o?.title||o?.title||i?.defaultOptions?.title||t,u=o?.initialTarget||i?.defaultOptions?.initialTarget||"docked",v=i?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350};if(a)if(a.state==="minimized"){let I=e.minimized.filter(N=>N.id!==t);if(u==="floating"||!e.gridRoot){p.current+=1;let N=k(v,e.floating);return{...e,minimized:I,floating:[...e.floating,{...N,id:t,z:p.current}],panels:{...e.panels,[t]:{...a,state:"floating"}}}}else{let N=S(e.gridRoot)||"group-left-top";return{...e,minimized:I,gridRoot:f(e.gridRoot,N,t),panels:{...e.panels,[t]:{...a,state:"docked"}}}}}else{if(a.state==="floating")return H(t),e;{let I=N=>N.type==="leaf"?N.panels.includes(t)?{...N,activePanelId:t}:N:{...N,children:N.children.map(I)};return{...e,gridRoot:I(e.gridRoot)}}}let D={id:t,title:m,component:s,state:u==="tabbed"?"docked":u},B={...e.panels,[t]:D};if(u==="floating"){p.current+=1;let I=k(v,e.floating),N=o?.stickyRight??i?.defaultOptions?.defaultStickyRight??!1,U=o?.stickyBottom??i?.defaultOptions?.defaultStickyBottom??!1,Z=Math.max(100,window.innerWidth||1024),ee=Math.max(100,window.innerHeight||768),pe=typeof I.width=="string"?parseFloat(I.width):I.width,ye=typeof I.height=="string"?parseFloat(I.height):I.height,we=I.x,ze=I.y,Ee=10;return N&&(we=Z-pe-Ee),U&&(ze=ee-ye-Ee),{...e,floating:[...e.floating,{...I,id:t,z:p.current,x:we,y:ze,stickyRight:N,stickyBottom:U}],panels:B}}else{let I=S(e.gridRoot)||"group-left-top";return{...e,gridRoot:f(e.gridRoot,I,t),panels:B}}})},[k,H]),G=(0,P.useCallback)(t=>{c(s=>{let o=s.panels[t];if(!o||te.get(o.component)?.defaultOptions?.canClose===!1)return s;delete b.current[t];let a={...s.panels};delete a[t];let i=$(s.gridRoot,t);return{...s,gridRoot:i||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:s.floating.filter(m=>m.id!==t),minimized:s.minimized.filter(m=>m.id!==t),panels:a}})},[]),Y=(0,P.useCallback)((t,s)=>{b.current[t]=s},[]),_=(0,P.useCallback)(t=>{delete b.current[t]},[]),ce=(0,P.useCallback)((t,s,o)=>{c(e=>{let a=e.panels[t];return a?{...e,panels:{...e.panels,[t]:{...a,dirty:s,dirtyOptions:o}}}:e})},[]),me=(0,P.useCallback)((t,s)=>{c(o=>{let e=o.panels[t];return e?{...o,panels:{...o.panels,[t]:{...e,title:s}}}:o})},[]),K=(0,P.useCallback)(async(t,s)=>{if(s?.force){G(t);return}let o=b.current[t];if(o&&!await o())return;let e=w.current.panels[t];if(e?.dirty)if(s?.onConfirm){if(!await s.onConfirm(e.dirtyOptions))return}else return;G(t)},[G]),ie=(0,P.useCallback)(t=>{c(s=>{let o=s.panels[t];if(!o||o.state==="minimized"||te.get(o.component)?.defaultOptions?.canMinimize===!1)return s;let a,i;if(o.state==="floating"){let u=s.floating.find(v=>v.id===t);u&&(a={x:u.x,y:u.y,width:u.width,height:u.height,stickyRight:u.stickyRight,stickyBottom:u.stickyBottom})}else if(o.state==="docked"){let u=v=>{if(v.type==="leaf")return v.panels.includes(t)?v.id:null;for(let C of v.children){let D=u(C);if(D)return D}return null};i=u(s.gridRoot)}let m=$(s.gridRoot,t);return{...s,gridRoot:m||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:s.floating.filter(u=>u.id!==t),minimized:[...s.minimized,{id:t,title:o.title,component:o.component}],panels:{...s.panels,[t]:{...o,state:"minimized",previousState:o.state,lastFloatingRect:a,lastLeafId:i}}}})},[]),re=(0,P.useCallback)(t=>{c(s=>{let o=s.panels[t];if(!o||o.state!=="minimized")return s;let e=s.minimized.filter(i=>i.id!==t);if((o.previousState||"docked")==="floating"){p.current+=1;let i=te.get(o.component),m=o.lastFloatingRect||i?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},u=k(m,s.floating);return{...s,minimized:e,floating:[...s.floating,{...u,id:t,z:p.current,stickyRight:!!o.lastFloatingRect?.stickyRight,stickyBottom:!!o.lastFloatingRect?.stickyBottom}],panels:{...s.panels,[t]:{...o,state:"floating"}}}}else{let i=(C,D)=>C.type==="leaf"?C.id===D:C.children.some(B=>i(B,D)),m=o.lastLeafId&&i(s.gridRoot,o.lastLeafId),u=te.get(o.component),v=u?.defaultOptions?.canDrag!==!1;if(m)return{...s,minimized:e,gridRoot:f(s.gridRoot,o.lastLeafId,t),panels:{...s.panels,[t]:{...o,state:"docked"}}};if(v){p.current+=1;let C=o.lastFloatingRect||u?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},D=k(C,s.floating);return{...s,minimized:e,floating:[...s.floating,{...D,id:t,z:p.current,stickyRight:!!o.lastFloatingRect?.stickyRight,stickyBottom:!!o.lastFloatingRect?.stickyBottom}],panels:{...s.panels,[t]:{...o,state:"floating"}}}}else{let C=S(s.gridRoot)||"group-left-top";return{...s,minimized:e,gridRoot:f(s.gridRoot,C,t),panels:{...s.panels,[t]:{...o,state:"docked"}}}}}})},[k]),be=(0,P.useCallback)((t,s)=>{c(o=>{let e=o.panels[t];if(!e||te.get(e.component)?.defaultOptions?.canDrag===!1)return o;let i=te.get(e.component),m=s||i?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},u=$(o.gridRoot,t);p.current+=1;let v=k(m,o.floating);return{...o,gridRoot:u||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:[...o.floating,{...v,id:t,z:p.current}],panels:{...o.panels,[t]:{...e,state:"floating"}}}})},[k]),ve=(0,P.useCallback)((t,s)=>{c(o=>{let e=o.panels[t];if(!e)return o;let a=o.floating.filter(u=>u.id!==t),i=$(o.gridRoot,t),m=s||S(i||o.gridRoot)||"group-left-top";return{...o,gridRoot:f(i||o.gridRoot,m,t),floating:a,panels:{...o.panels,[t]:{...e,state:"docked"}}}})},[]),J=(t,s,o,e)=>{if(t.type==="leaf"){if(t.id===s){let a={type:"leaf",id:`group-split-${Date.now()}-${Math.floor(Math.random()*1e3)}`,panels:[o],activePanelId:o};return{type:"branch",orientation:e==="left"||e==="right"?"horizontal":"vertical",sizes:[.5,.5],children:e==="left"||e==="top"?[a,t]:[t,a]}}return t}else return{...t,children:t.children.map(a=>J(a,s,o,e))}},le=(0,P.useCallback)(t=>{c(s=>({...s,draggedPanelId:t}))},[]),q=(0,P.useCallback)((t,s,o)=>{c(e=>{let a=e.panels[t];if(!a)return e;let i=e.floating.filter(v=>v.id!==t),m=$(e.gridRoot,t),u;return o==="center"?u=f(m||e.gridRoot,s,t):u=J(m||e.gridRoot,s,t,o),{...e,gridRoot:u,floating:i,panels:{...e.panels,[t]:{...a,state:"docked"}},draggedPanelId:null}})},[]),Pe=(0,P.useCallback)((t,s)=>{c(o=>{let e=o.panels[t];if(!e)return o;let a=o.floating.filter(D=>D.id!==t),i=$(o.gridRoot,t),m={type:"leaf",id:`group-edge-${Date.now()}-${Math.floor(Math.random()*1e3)}`,panels:[t],activePanelId:t},u=s==="left"||s==="right"?"horizontal":"vertical",v=s==="left"||s==="top"?[m,i||o.gridRoot]:[i||o.gridRoot,m];return{...o,gridRoot:{type:"branch",orientation:u,sizes:s==="left"||s==="top"?[.3,.7]:[.7,.3],children:v},floating:a,panels:{...o.panels,[t]:{...e,state:"docked"}},draggedPanelId:null}})},[]),Se=(0,P.useCallback)((t,s,o)=>{c(e=>{let a=e.panels[t];if(!a)return e;let i=$(e.gridRoot,t),m=C=>{if(C.type==="leaf"){if(C.id===s){let D=C.panels.filter(N=>N!==t),B=Math.max(0,Math.min(o,D.length)),I=[...D];return I.splice(B,0,t),{...C,panels:I,activePanelId:t}}return C}else return{...C,children:C.children.map(m)}},u=m(i||e.gridRoot),v=e.floating.filter(C=>C.id!==t);return{...e,gridRoot:u,floating:v,panels:{...e.panels,[t]:{...a,state:"docked"}},draggedPanelId:null}})},[]),Me=(0,P.useCallback)(t=>{c(s=>{let o=a=>{if(a.type==="leaf")return a.id===t&&a.canClose!==!1?null:a;{let i=a.children.map(v=>o(v)).filter(v=>v!==null);if(i.length===0)return null;if(i.length===1)return i[0];let m=a.sizes.slice(0,i.length),u=m.reduce((v,C)=>v+C,0);return{...a,children:i,sizes:m.map(v=>v/u)}}},e=o(s.gridRoot);return{...s,gridRoot:e||{type:"leaf",id:"group-default",panels:[],activePanelId:null}}})},[]),Ae=(0,P.useCallback)(t=>{c(s=>({...s,floating:s.floating.map(o=>o.id===t?{...o,maximized:!o.maximized}:o)}))},[]),Be=(0,P.useCallback)((t,s)=>{let o=(e,a)=>{if(e.type==="leaf")return e;if(a===t.length)return{...e,sizes:s};let i=t[a],m=e.children.map((u,v)=>v===i?o(u,a+1):u);return{...e,children:m}};c(e=>({...e,gridRoot:o(e.gridRoot,0)}))},[]),He=(0,P.useCallback)((t,s)=>{c(o=>({...o,floating:o.floating.map(e=>e.id===t?{...e,...s}:e)}))},[]),$e=(0,P.useCallback)(()=>JSON.stringify({gridRoot:z.gridRoot,floating:z.floating,minimized:z.minimized,panels:z.panels}),[z]),Ge=(0,P.useCallback)(t=>{try{let s=JSON.parse(t);if(s.gridRoot&&s.floating&&s.minimized&&s.panels){let o=Object.keys(s.panels)[0]||null;c(e=>({...e,gridRoot:s.gridRoot,floating:s.floating,minimized:s.minimized,panels:s.panels,draggedPanelId:null,activePanelId:o}))}}catch(s){console.error("Failed to parse layout configuration:",s)}},[]),Le=(0,P.useCallback)(t=>{c(s=>s.activePanelId===t?s:{...s,activePanelId:t})},[]),he=(0,P.useCallback)(t=>{c(s=>s.dir===t?s:{...s,dir:t,isRtl:t==="rtl"})},[]);(0,P.useEffect)(()=>{h&&c(t=>t.dir===h?t:{...t,dir:h,isRtl:h==="rtl"})},[h]);let Qe=(0,P.useMemo)(()=>({openPanel:E,closePanel:G,minimizePanel:ie,restorePanel:re,floatPanel:be,dockPanel:ve,maximizePanel:Ae,updateSplitSizes:Be,updateFloatingPosition:He,bringToFront:H,saveLayout:$e,loadLayout:Ge,publish:g,subscribe:y,setDraggedPanelId:le,dockPanelToGroup:q,movePanelOrder:Se,closeLeafGroup:Me,registerCloseGuard:Y,unregisterCloseGuard:_,setPanelDirty:ce,updatePanelTitle:me,requestClosePanel:K,dockPanelToWorkspaceEdge:Pe,setActivePanel:Le,setDirection:he}),[E,G,ie,re,be,ve,Ae,Be,He,H,$e,Ge,g,y,le,q,Se,Me,Y,_,ce,me,K,Pe,Le,he]),Ve=t=>{let s=t.defaultMessage||t.id;return t.values&&Object.entries(t.values).forEach(([o,e])=>{s=s.replace(`{${o}}`,String(e))}),s},_e=(0,P.useMemo)(()=>({modalClass:T,modalBodyClass:M,sidePanelClass:A,sidePanelBodyClass:F,windowClass:x,windowBodyClass:R}),[T,M,A,F,x,R]);return(0,Fe.jsx)(ft.Provider,{value:_e,children:(0,Fe.jsx)(ct.Provider,{value:z,children:(0,Fe.jsx)(ut.Provider,{value:Qe,children:(0,Fe.jsx)(gt.Provider,{value:l||Ve,children:(0,Fe.jsx)(pt.Provider,{value:L,children:n})})})})})},fe=()=>{let n=(0,P.useContext)(ct);if(!n)throw new Error("useWindowManagerState must be used within WindowManagerProvider");return n},Re=()=>{let n=(0,P.useContext)(ut);if(!n)throw new Error("useWindowManagerActions must be used within WindowManagerProvider");return n},de=()=>(0,P.useContext)(gt)||(l=>{let r=l.defaultMessage||l.id;return l.values&&Object.entries(l.values).forEach(([h,T])=>{r=r.replace(`{${h}}`,String(T))}),r}),X=(n,l)=>n?typeof n=="string"?n:l(n):"",ht=()=>{let{publish:n,subscribe:l}=Re();return{publish:n,subscribe:l}},ue=()=>(0,P.useContext)(pt);function yt(n){if(!n)return typeof document<"u"?document.documentElement.dir?.toLowerCase()==="rtl"||document.body.dir?.toLowerCase()==="rtl":!1;let l=n.closest("[dir]");return l?l.getAttribute("dir")?.toLowerCase()==="rtl":document.documentElement.dir?.toLowerCase()==="rtl"||document.body.dir?.toLowerCase()==="rtl"}var Ct=require("replace-react-contexify"),kn=require("replace-react-contexify/styles.css");var Xe=require("react"),jt={requestClose:()=>{console.warn("FormContainerContract: requestClose called but no container is present")},setDirty:()=>{},onCloseRequested:()=>()=>{},setTitle:()=>{},setIcon:()=>{},containerType:"standalone",instanceId:"standalone",onClose:()=>()=>{},onMinimize:()=>()=>{},onRestore:()=>()=>{},onResize:()=>()=>{}},qe=(0,Xe.createContext)(jt),ke=qe.Provider,Ke=()=>(0,Xe.useContext)(qe);var j=require("react"),it=require("react/jsx-runtime"),Jt=0,ot=()=>`panel-${++Jt}-${Date.now()}`,Ue=new Map,bt={leftPanel:null,rightPanel:null,modals:[]},vt=(0,j.createContext)(null),Pt=(0,j.createContext)(null),wt=({children:n})=>{let[l,r]=(0,j.useState)(bt),h=(0,j.useRef)(l);h.current=l;let T=(0,j.useCallback)((p,y)=>{Ue.set(p,y)},[]),M=(0,j.useCallback)(p=>{Ue.delete(p)},[]),A=(0,j.useCallback)(async(p,y,g={})=>{let k=h.current.leftPanel;if(k){let f=Ue.get(k.id);if(f&&!await f())return null}let H=ot(),$={id:H,Component:p,props:y,containerType:"left-panel",options:g};return r(f=>({...f,leftPanel:$})),H},[]),F=(0,j.useCallback)(async(p,y,g={})=>{let k=h.current.rightPanel;if(k){let f=Ue.get(k.id);if(f&&!await f())return null}let H=ot(),$={id:H,Component:p,props:y,containerType:"right-panel",options:g};return r(f=>({...f,rightPanel:$})),H},[]),x=(0,j.useCallback)((p,y,g={})=>{let k=ot(),H=y.title,$={...g,title:g.title||H||"Confirmation"},f={id:k,Component:p,props:y,containerType:"modal",options:$};return r(S=>({...S,modals:[...S.modals,f]})),k},[]),R=(0,j.useCallback)(p=>{r(y=>({leftPanel:y.leftPanel?.id===p?null:y.leftPanel,rightPanel:y.rightPanel?.id===p?null:y.rightPanel,modals:y.modals.filter(g=>g.id!==p)}))},[]),z=(0,j.useCallback)(()=>{r(bt)},[]),c=(0,j.useCallback)(()=>{r(p=>({...p,modals:[]}))},[]),w=(0,j.useCallback)(p=>l.leftPanel?.id===p?l.leftPanel:l.rightPanel?.id===p?l.rightPanel:l.modals.find(y=>y.id===p),[l]),b=(0,j.useCallback)((p,y)=>{r(g=>({leftPanel:g.leftPanel?.id===p?{...g.leftPanel,...y}:g.leftPanel,rightPanel:g.rightPanel?.id===p?{...g.rightPanel,...y}:g.rightPanel,modals:g.modals.map(k=>k.id===p?{...k,...y}:k)}))},[]),L=(0,j.useCallback)((p,y,g)=>{b(p,{dirty:y,dirtyOptions:g})},[b]),W=(0,j.useMemo)(()=>({openLeftPanel:A,openRightPanel:F,openModal:x,close:R,closeAll:z,closeAllModals:c,getInstance:w,updateInstance:b,setDirty:L,registerCloseHandler:T,unregisterCloseHandler:M}),[A,F,x,R,z,c,w,b,L,T,M]);return(0,it.jsx)(vt.Provider,{value:l,children:(0,it.jsx)(Pt.Provider,{value:W,children:n})})},xe=()=>{let n=(0,j.useContext)(vt);if(!n)throw new Error("usePanelState must be used within PanelProvider");return n},Ie=()=>{let n=(0,j.useContext)(Pt);if(!n)throw new Error("usePanelActions must be used within PanelProvider");return n};var We=require("react");var ge=require("react/jsx-runtime"),Zt=({title:n,message:l,alert:r,alertType:h="info",useYesNoTitles:T=!1,onOK:M,onCancel:A})=>{let{requestClose:F,setIcon:x,setTitle:R}=Ke(),z=de(),c=ue(),w=(0,We.useRef)(null);(0,We.useEffect)(()=>{if(n){let g=typeof n=="string"?n:z(n);R(g)}x&&x((0,ge.jsx)("span",{children:"\u2753"}))},[n,R,x,z]),(0,We.useEffect)(()=>{w.current?.focus()},[]);let b=typeof l=="string"?l:z(l),L=z(T?c.no:c.cancel),W=z(T?c.yes:c.ok),p=g=>{g.preventDefault(),M?.(),F()},y=()=>{A?.(),F()};return(0,ge.jsxs)("form",{onSubmit:p,className:"confirmation-form-body",children:[r&&(0,ge.jsxs)("div",{className:`confirmation-alert confirmation-alert-${h}`,children:[(0,ge.jsx)("span",{children:"\u2139\uFE0F"}),(0,ge.jsx)("span",{children:r})]}),(0,ge.jsx)("div",{style:{fontSize:"0.9rem",color:"inherit",lineHeight:1.5},children:b}),(0,ge.jsx)("hr",{style:{marginTop:"0.5rem",marginBottom:"0.5rem",opacity:.1}}),(0,ge.jsxs)("div",{className:"confirmation-actions",children:[(0,ge.jsx)("button",{type:"button",className:"dw-btn dw-btn-sm dw-btn-outline",onClick:y,children:L}),(0,ge.jsx)("button",{type:"submit",className:"dw-btn dw-btn-sm dw-btn-primary",ref:w,children:W})]})]})},Te=Zt;var d=require("react/jsx-runtime"),De=new Map,Je="preserved-dom-container",at=(0,d.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:[(0,d.jsx)("rect",{x:"3",y:"3",width:"7",height:"9",rx:"1"}),(0,d.jsx)("rect",{x:"14",y:"3",width:"7",height:"5",rx:"1"}),(0,d.jsx)("rect",{x:"14",y:"12",width:"7",height:"9",rx:"1"}),(0,d.jsx)("rect",{x:"3",y:"16",width:"7",height:"5",rx:"1"})]}),xt=n=>{let l=De.get(n);return l||(l=document.createElement("div"),l.style.width="100%",l.style.height="100%",De.set(n,l)),l},Qt=(n,l)=>{let r=te.get(l);if(!r)return(0,d.jsxs)("div",{className:"dw-unregistered-panel",style:{border:"2px dashed #dc3545"},children:[(0,d.jsx)("h6",{style:{fontWeight:700,marginBottom:"0.25rem"},children:"\u26A0\uFE0F Component Unregistered"}),(0,d.jsxs)("span",{style:{fontSize:"0.875rem",color:"var(--text-secondary, #94a3b8)"},children:["Key: ",l]})]});let h=r.Component;return(0,d.jsx)(h,{panelId:n})},Mt=new Map,Oe=new Map,je=n=>{let l=Oe.get(n);return l||(l={onClose:new Set,onMinimize:new Set,onRestore:new Set,onResize:new Set},Oe.set(n,l)),l},Rt=({panelId:n})=>{let l=(0,O.useRef)(null);return(0,O.useEffect)(()=>{let r=l.current;if(!r)return;let h=xt(n);r.appendChild(h);let T=new ResizeObserver(M=>{for(let A of M){let{width:F,height:x}=A.contentRect;if(F>0&&x>0){Mt.set(n,{width:F,height:x});let R=Oe.get(n);R&&R.onResize.forEach(z=>z(F,x))}}});return T.observe(r),()=>{T.disconnect();let M=document.getElementById(Je);M||(M=document.createElement("div"),M.id=Je,M.style.display="none",document.body.appendChild(M)),M.appendChild(h)}},[n]),(0,d.jsx)("div",{ref:l,style:{width:"100%",height:"100%"}})},Vt=({panelId:n})=>{let l=fe(),r=de(),h=(0,O.useRef)(null),T=l.panels[n],M=T?te.get(T.component):null,A=M?.defaultOptions?.disableLivePreview||!1,F=Mt.get(n)||{width:800,height:500},x=F.width,R=F.height,w=Math.min(220/x,140/R);if((0,O.useEffect)(()=>{if(A)return;let b=h.current;if(!b)return;let L=De.get(n);if(L)return b.appendChild(L),()=>{let W=document.getElementById(Je);W||(W=document.createElement("div"),W.id=Je,W.style.display="none",document.body.appendChild(W)),W.appendChild(L)}},[n,A]),A){let b=x*w,L=R*w,W=T?.title||M?.defaultOptions?.title||"Panel",p=X(W,r),y=(Array.from(p)[0]||"P").toUpperCase();return(0,d.jsx)("div",{className:"taskbar-item-preview-frame",style:{width:`${b}px`,height:`${L}px`,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(108, 117, 125, 0.15)",border:"1px dashed var(--taskbar-item-border, rgba(255, 255, 255, 0.15))"},children:(0,d.jsx)("div",{style:{fontSize:"2rem",fontWeight:600,color:"var(--panel-title-color, var(--panel-text, rgba(255, 255, 255, 0.85)))",userSelect:"none"},children:y})})}return(0,d.jsx)("div",{className:"taskbar-item-preview-frame",style:{width:`${x*w}px`,height:`${R*w}px`},children:(0,d.jsx)("div",{ref:h,className:"taskbar-item-preview-host",style:{width:`${x}px`,height:`${R}px`,transform:`scale(${w})`,transformOrigin:"top left",position:"absolute",top:0,left:0,"--preview-scale":w}})})},_t=({panelId:n,children:l})=>{let r=fe(),{requestClosePanel:h,setPanelDirty:T,registerCloseGuard:M,unregisterCloseGuard:A,updatePanelTitle:F}=Re(),x=r.minimized.some(c=>c.id===n),R=(0,O.useRef)(x);(0,O.useEffect)(()=>{let c=Oe.get(n);c&&(x&&!R.current?c.onMinimize.forEach(w=>w()):!x&&R.current&&c.onRestore.forEach(w=>w()),R.current=x)},[x,n]),(0,O.useEffect)(()=>()=>{let c=Oe.get(n);c&&(c.onClose.forEach(w=>w()),Oe.delete(n))},[n]);let z=O.default.useMemo(()=>({requestClose:c=>h(n,c),setDirty:c=>T(n,c),onCloseRequested:c=>(M(n,c),()=>A(n)),setTitle:c=>F(n,c),instanceId:n,onClose:c=>{let w=je(n);return w.onClose.add(c),()=>w.onClose.delete(c)},onMinimize:c=>{let w=je(n);return w.onMinimize.add(c),()=>w.onMinimize.delete(c)},onRestore:c=>{let w=je(n);return w.onRestore.add(c),()=>w.onRestore.delete(c)},onResize:c=>{let w=je(n);return w.onResize.add(c),()=>w.onResize.delete(c)}}),[n,h,T,M,A,F]);return(0,d.jsx)(ke,{value:z,children:l})},kt=({node:n,path:l,onTabRightClick:r,activeDropZone:h,onHoverDropZone:T,onTabDragStart:M,hoveredTab:A,onTabHover:F,defaultPanelIcon:x,onRequestClosePanel:R})=>{let{updateSplitSizes:z}=Re();if(n.type==="leaf")return(0,d.jsx)(en,{leaf:n,onTabRightClick:r,activeDropZone:h,onHoverDropZone:T,onTabDragStart:M,hoveredTab:A,onTabHover:F,defaultPanelIcon:x,onRequestClosePanel:R});let c=n.orientation==="horizontal",w=(b,L)=>{L.preventDefault();let W=c?L.clientX:L.clientY,p=[...n.sizes],y=L.currentTarget;y.classList.add("active"),document.body.classList.add("resizing-active",c?"resizing-row-active":"resizing-col-active");let g=L.currentTarget.parentElement,k=g?c?g.clientWidth:g.clientHeight:c?1e3:800,H=f=>{let G=((c?f.clientX:f.clientY)-W)/k,Y=[...p];Y[b]+=G,Y[b+1]-=G,Y[b]>.1&&Y[b+1]>.1&&z(l,Y)},$=()=>{y.classList.remove("active"),document.body.classList.remove("resizing-active","resizing-row-active","resizing-col-active"),window.removeEventListener("mousemove",H),window.removeEventListener("mouseup",$)};window.addEventListener("mousemove",H),window.addEventListener("mouseup",$)};return(0,d.jsx)("div",{style:{display:"flex",flexDirection:c?"row":"column",width:"100%",height:"100%",overflow:"hidden",position:"relative"},children:n.children.map((b,L)=>{let W=n.sizes[L]*100;return(0,d.jsxs)(O.default.Fragment,{children:[(0,d.jsx)("div",{style:{flexGrow:n.sizes[L],flexBasis:`${W}%`,overflow:"hidden",position:"relative"},children:(0,d.jsx)(kt,{node:b,path:[...l,L],onTabRightClick:r,activeDropZone:h,onHoverDropZone:T,onTabDragStart:M,hoveredTab:A,onTabHover:F,defaultPanelIcon:x,onRequestClosePanel:R})}),L<n.children.length-1&&(0,d.jsx)("div",{onMouseDown:p=>w(L,p),style:{cursor:c?"col-resize":"row-resize",width:c?"1px":"100%",height:c?"100%":"1px",zIndex:20},className:"resizer-bar"})]},L)})})},en=({leaf:n,onTabRightClick:l,activeDropZone:r,onHoverDropZone:h,onTabDragStart:T,hoveredTab:M,onTabHover:A,defaultPanelIcon:F,onRequestClosePanel:x})=>{let R=fe(),{openPanel:z,closeLeafGroup:c,setActivePanel:w}=Re(),b=de(),L=ue(),{windowClass:W,windowBodyClass:p}=Ce(),y=g=>{z(g,R.panels[g].component),w(g)};return(0,d.jsxs)("div",{"data-active-panel-id":n.activePanelId||"",className:`workspace-panel ${W??""}`,style:{overflow:"hidden",position:"relative"},children:[(0,d.jsxs)("div",{className:"workspace-tab-bar",style:{minHeight:"38px"},children:[(0,d.jsx)("div",{className:"tab-headers-container",style:{scrollbarWidth:"none"},onMouseMove:g=>{R.draggedPanelId&&g.target===g.currentTarget&&A(n.id,"EMPTY",n.panels.length,"right")},onMouseLeave:g=>{R.draggedPanelId&&g.target===g.currentTarget&&A(n.id,"",-1,null)},children:n.panels.map((g,k)=>{let H=R.panels[g];if(!H)return null;let $=n.activePanelId===g,f=R.activePanelId===g,E=te.get(H.component)?.defaultOptions,G=M&&M.leafId===n.id&&M.panelId===g,Y=k===n.panels.length-1,_=M&&M.leafId===n.id&&M.panelId==="EMPTY"&&Y,ce=G?M.side==="left"?"drag-hover-left":"drag-hover-right":_?"drag-hover-right":"";return(0,d.jsxs)("div",{onClick:()=>y(g),onMouseDown:K=>{E?.canDrag!==!1&&T(g,K)},onContextMenu:K=>l(g,K),onMouseMove:K=>{if(R.draggedPanelId){let ie=K.currentTarget.getBoundingClientRect(),be=K.clientX-ie.left<ie.width/2?"left":"right";A(n.id,g,k,be)}},onMouseLeave:()=>{R.draggedPanelId&&A(n.id,"",-1,null)},className:`workspace-tab ${$?f?"active workspace-tab-active-focused":"active workspace-tab-active-unfocused":"workspace-tab-inactive"} ${ce}`,style:{cursor:E?.canDrag===!1?"default":"pointer"},children:[(0,d.jsxs)("span",{className:"text-truncate",style:{maxWidth:"120px",display:"flex",alignItems:"center"},children:[(0,d.jsx)("span",{className:"workspace-tab-icon",children:E?.icon||F||at}),(0,d.jsxs)("span",{children:[X(H.title,b),H.dirty?" *":""]})]}),E?.renderHeaderActions&&(0,d.jsx)("span",{className:"tab-header-actions",onClick:K=>K.stopPropagation(),onMouseDown:K=>K.stopPropagation(),children:E.renderHeaderActions(g)}),E?.canClose!==!1&&(0,d.jsx)("span",{onClick:K=>{K.stopPropagation(),x(g)},title:X(L.closeTab,b),className:"close-tab-x",style:{width:"18px",height:"18px",...E?.renderHeaderActions?{}:{marginInlineStart:"auto"}},children:(0,d.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:(0,d.jsx)("path",{d:"M18 6L6 18M6 6l12 12"})})})]},g)})}),n.panels.length===0&&n.keepOnEmpty&&n.canClose!==!1&&(0,d.jsx)("span",{onClick:()=>c(n.id),className:"close-tab-x header-close-empty-group",style:{width:"18px",height:"18px",cursor:"pointer"},title:X(L.closeEmptyGroup,b),children:(0,d.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:(0,d.jsx)("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),(0,d.jsxs)("div",{className:`dw-panel-body ${p??""}`,style:{position:"relative",overflow:"hidden"},children:[n.activePanelId&&R.panels[n.activePanelId]?(0,d.jsx)(Rt,{panelId:n.activePanelId},n.activePanelId):(0,d.jsx)("div",{className:"empty-leaf-placeholder",children:(0,d.jsx)("span",{children:"Empty Workspace Section"})}),R.draggedPanelId!==null&&(0,d.jsx)("div",{className:"dock-drop-zone-overlay",children:(0,d.jsxs)("div",{className:"dock-target-cross",children:[(0,d.jsx)("div",{onMouseEnter:()=>h(n.id,"top"),onMouseLeave:()=>h(n.id,null),className:"dock-target-box dock-target-top",children:"\u25B2"}),(0,d.jsx)("div",{onMouseEnter:()=>h(n.id,"bottom"),onMouseLeave:()=>h(n.id,null),className:"dock-target-box dock-target-bottom",children:"\u25BC"}),(0,d.jsx)("div",{onMouseEnter:()=>h(n.id,"left"),onMouseLeave:()=>h(n.id,null),className:"dock-target-box dock-target-left",children:"\u25C0"}),(0,d.jsx)("div",{onMouseEnter:()=>h(n.id,"right"),onMouseLeave:()=>h(n.id,null),className:"dock-target-box dock-target-right",children:"\u25B6"}),(0,d.jsx)("div",{onMouseEnter:()=>h(n.id,"center"),onMouseLeave:()=>h(n.id,null),className:"dock-target-box dock-target-center",children:"\u25A3"})]})}),R.draggedPanelId!==null&&r!==null&&r.leafId===n.id&&(0,d.jsx)("div",{className:"dock-preview-highlight",style:{left:r.position==="right"?"50%":"0",top:r.position==="bottom"?"50%":"0",width:r.position==="left"||r.position==="right"?"50%":"100%",height:r.position==="top"||r.position==="bottom"?"50%":"100%"}})]})]})},tn=({skin:n="vscode",defaultPanelIcon:l})=>{let r=fe(),{restorePanel:h,minimizePanel:T,requestClosePanel:M,maximizePanel:A,updateFloatingPosition:F,bringToFront:x,floatPanel:R,setDraggedPanelId:z,dockPanelToGroup:c,movePanelOrder:w,dockPanelToWorkspaceEdge:b,setActivePanel:L,setDirection:W}=Re(),{openModal:p}=Ie(),y=de(),g=ue(),k=O.default.useCallback(e=>{let a=r.panels[e];M(e,{onConfirm:i=>new Promise(m=>{let u=i||a?.dirtyOptions,v=a?X(a.title,y):"Panel";p(Te,{title:u?.title||g.unsavedChangesTitle,message:u?.message||{id:g.unsavedChangesMessage.id,defaultMessage:g.unsavedChangesMessage.defaultMessage,values:{title:v}},alert:u?.alert,alertType:u?.alertType||"danger",useYesNoTitles:!0,onOK:()=>m(!0),onCancel:()=>m(!1)},{size:"small"})})})},[M,r.panels,y,p,g]),{windowClass:H,windowBodyClass:$}=Ce(),f=(0,O.useRef)(null),S=(0,O.useRef)(null),[E,G]=(0,O.useState)(null),Y=(0,O.useRef)(null),[_,ce]=(0,O.useState)(!1);(0,O.useEffect)(()=>()=>{Y.current&&clearTimeout(Y.current)},[]),(0,O.useEffect)(()=>{E&&(r.minimized.some(a=>a.id===E.id)||G(null))},[r.minimized,E]);let[me,K]=(0,O.useState)(null),ie=(0,O.useRef)(null),[re,be]=(0,O.useState)({x:0,y:0}),[ve,J]=(0,O.useState)(null),le=(0,O.useRef)(null),q=e=>{J(e),le.current=e},[Pe,Se]=(0,O.useState)(null),Me=(0,O.useRef)(null),Ae=(e,a,i,m)=>{let u=m?{leafId:e,panelId:a,index:i,side:m}:null;Se(u),Me.current=u},Be=(e,a)=>{let i=a?{leafId:e,position:a}:null;K(i),ie.current=i},He=(e,a)=>{if(a.button!==0)return;let i=a.clientX,m=a.clientY,u=!1,v=B=>{let I=B.clientX-i,N=B.clientY-m;!u&&(Math.abs(I)>5||Math.abs(N)>5)&&(u=!0,z(e)),u&&be({x:B.clientX,y:B.clientY})},C=B=>{if(window.removeEventListener("mousemove",v),window.removeEventListener("mouseup",D),u){let I=ie.current,N=Me.current,U=le.current;if(U)b(e,U);else if(N){let Z=N.index;N.side==="right"&&(Z+=1),w(e,N.leafId,Z)}else I?c(e,I.leafId,I.position):R(e,{x:B.clientX-150,y:B.clientY-15,width:450,height:350});z(null),K(null),ie.current=null,Se(null),Me.current=null,q(null)}},D=B=>{C(B)};window.addEventListener("mousemove",v),window.addEventListener("mouseup",D)},$e=(e,a)=>{a.preventDefault();let i=r.panels[e];if(!i)return;let u=te.get(i.component)?.defaultOptions,v=[];u?.canDrag!==!1&&v.push({label:X(g.floatWindow,y),action:()=>R(e)}),u?.canMinimize!==!1&&v.push({label:X(g.minimizePanel,y),action:()=>T(e)}),v.length>0&&u?.canClose!==!1&&v.push({separator:!0}),u?.canClose!==!1&&v.push({label:X(g.closeTab,y),action:()=>k(e)}),v.length!==0&&S.current?.show({event:a,contextMenu:{items:v}})},Ge=(e,a)=>{a.preventDefault(),G(null),S.current?.show({event:a,contextMenu:{items:[{label:X(g.restorePanel,y),action:()=>h(e)},{label:X(g.maximizePanel,y),action:()=>A(e)},{separator:!0},{label:X(g.closePanel,y),action:()=>k(e)}]}})};(0,O.useEffect)(()=>{let e=Object.keys(r.panels);for(let a of Array.from(De.keys()))e.includes(a)||De.delete(a)},[r.panels]),(0,O.useEffect)(()=>{let e=()=>{r.draggedPanelId!==null&&(z(null),K(null),Se(null))};return window.addEventListener("blur",e),()=>{window.removeEventListener("blur",e)}},[r.draggedPanelId]);let Le=(0,O.useRef)(null),[he,Qe]=(0,O.useState)({width:1024,height:768});(0,O.useEffect)(()=>{let e=Le.current;if(!e)return;let a=new ResizeObserver(i=>{if(!i||i.length===0)return;let m=i[0].contentRect;Qe({width:Math.max(100,m.width),height:Math.max(100,m.height)})});return a.observe(e),()=>{a.disconnect()}},[]),(0,O.useEffect)(()=>{let e=Le.current;if(!e)return;let a=()=>{let u=yt(e);W(u?"rtl":"ltr")};a();let i=new MutationObserver(a);i.observe(document.documentElement,{attributes:!0,attributeFilter:["dir"]}),i.observe(document.body,{attributes:!0,attributeFilter:["dir"]});let m=e.closest("[dir]");return m&&m!==document.documentElement&&m!==document.body&&i.observe(m,{attributes:!0,attributeFilter:["dir"]}),()=>{i.disconnect()}},[W]),(0,O.useEffect)(()=>{let e=he.width,a=he.height;r.floating.forEach(i=>{let m=typeof i.width=="string"?parseFloat(i.width):i.width,u=typeof i.height=="string"?parseFloat(i.height):i.height,v=typeof i.x=="string"?parseFloat(i.x):i.x,C=typeof i.y=="string"?parseFloat(i.y):i.y,D=m,B=u,I=v,N=C,U=!1;D>e&&(D=Math.max(200,e-20),U=!0),B>a&&(B=Math.max(150,a-40),U=!0);let Z=10;if(i.stickyRight)I=e-D-Z,U=!0;else{let ee=e-100;I>ee&&(I=Math.max(0,ee),U=!0)}if(i.stickyBottom)N=a-B-Z,U=!0;else{let ee=a-40;N>ee&&(N=Math.max(0,ee),U=!0)}U&&F(i.id,{x:I,y:N,width:D,height:B})})},[he,r.floating,F]),(0,O.useEffect)(()=>{let e=a=>{if(a.button!==0)return;let i=a.target;if(!i)return;let m=i.closest(".floating-window");if(m){let v=m.getAttribute("data-window-id");v&&(L(v),x(v));return}let u=i.closest(".workspace-panel");if(u){let v=u.getAttribute("data-active-panel-id");v&&L(v)}};return document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[x,L]);let Ve=(e,a)=>{let i=r.floating.find(Z=>Z.id===e);if(!i||i.maximized)return;x(e);let m=a.clientX,u=a.clientY,C=a.currentTarget.closest(".floating-window"),D=C?C.offsetLeft:0,B=C?C.offsetTop:0,I=!1,N=Z=>{let ee=Z.clientX-m,pe=Z.clientY-u;if(!I&&(Math.abs(ee)>5||Math.abs(pe)>5)&&(I=!0,z(e)),I){let ye=D+ee,we=B+pe;F(e,{x:ye,y:we,stickyRight:!1,stickyBottom:!1})}},U=()=>{if(I){let Z=ie.current,ee=Me.current,pe=le.current;if(pe)b(e,pe);else if(ee){let ye=ee.index;ee.side==="right"&&(ye+=1),w(e,ee.leafId,ye)}else Z&&c(e,Z.leafId,Z.position);z(null),K(null),ie.current=null,Se(null),Me.current=null,q(null)}window.removeEventListener("mousemove",N),window.removeEventListener("mouseup",U)};window.addEventListener("mousemove",N),window.addEventListener("mouseup",U)},_e=(e,a)=>{a.stopPropagation();let i=r.floating.find(U=>U.id===e);if(!i||i.maximized)return;x(e);let m=a.clientX,u=a.clientY,C=a.currentTarget.closest(".floating-window"),D=C?C.offsetWidth:400,B=C?C.offsetHeight:300,I=U=>{let Z=U.clientX-m,ee=U.clientY-u,pe=Math.max(200,D+Z),ye=Math.max(150,B+ee),we=i.x,ze=i.y,Ee=he.width,et=he.height,Nt=typeof i.x=="string"?parseFloat(i.x):i.x,Ft=typeof i.y=="string"?parseFloat(i.y):i.y,Ot=typeof i.width=="string"?parseFloat(i.width):i.width,Wt=typeof i.height=="string"?parseFloat(i.height):i.height,rt=Math.abs(Nt+Ot-Ee)<4,lt=Math.abs(Ft+Wt-et)<4;rt&&(we=Ee-pe,we<0&&(we=0,pe=Ee)),lt&&(ze=et-ye,ze<0&&(ze=0,ye=et)),F(e,{x:we,y:ze,width:pe,height:ye,stickyRight:rt,stickyBottom:lt})},N=()=>{window.removeEventListener("mousemove",I),window.removeEventListener("mouseup",N)};window.addEventListener("mousemove",I),window.addEventListener("mouseup",N)},t=e=>{if(f.current){let a=e==="left"?-150:150;f.current.scrollBy({left:a,behavior:"smooth"})}},[s,o]=(0,O.useState)("dark");return(0,O.useEffect)(()=>{let e=()=>{let i=document.documentElement.getAttribute("data-bs-theme")==="light"?"light":"dark";o(i)};e();let a=new MutationObserver(e);return a.observe(document.documentElement,{attributes:!0,attributeFilter:["data-bs-theme"]}),()=>a.disconnect()},[]),(0,d.jsxs)("div",{"data-workspace-skin":n,"data-bs-theme":s,style:{display:"flex",flexDirection:"column",width:"100%",height:"100%",overflow:"hidden",userSelect:"none"},dir:r.dir,children:[(0,d.jsxs)("div",{ref:Le,className:r.draggedPanelId?"dragging-active":void 0,style:{flexGrow:1,width:"100%",position:"relative",overflow:"hidden"},children:[r.draggedPanelId!==null&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("div",{className:"workspace-edge-trigger edge-trigger-left",onMouseEnter:()=>q("left"),onMouseLeave:()=>q(null)}),(0,d.jsx)("div",{className:"workspace-edge-trigger edge-trigger-right",onMouseEnter:()=>q("right"),onMouseLeave:()=>q(null)}),(0,d.jsx)("div",{className:"workspace-edge-trigger edge-trigger-top",onMouseEnter:()=>q("top"),onMouseLeave:()=>q(null)}),(0,d.jsx)("div",{className:"workspace-edge-trigger edge-trigger-bottom",onMouseEnter:()=>q("bottom"),onMouseLeave:()=>q(null)})]}),r.draggedPanelId!==null&&ve!==null&&(0,d.jsx)("div",{className:`workspace-edge-preview edge-preview-${ve}`}),(0,d.jsx)("div",{style:{width:"100%",height:"100%",overflow:"hidden",position:"relative"},children:r.gridRoot?(0,d.jsx)(kt,{node:r.gridRoot,path:[],onTabRightClick:$e,activeDropZone:me,onHoverDropZone:Be,onTabDragStart:He,hoveredTab:Pe,onTabHover:Ae,defaultPanelIcon:l,onRequestClosePanel:k}):(0,d.jsx)("div",{className:"empty-workspace-grid",children:"Grid Empty"})}),r.floating.map(e=>{let a=r.panels[e.id];if(!a)return null;let i=e.maximized,m=r.draggedPanelId===e.id,u=r.activePanelId===e.id,C=te.get(a.component)?.defaultOptions;return(0,d.jsxs)("div",{"data-window-id":e.id,dir:r.dir,onMouseDownCapture:()=>{L(e.id),x(e.id)},className:`floating-window ${i?"maximized":""} ${u?"v2-window-focused":""} ${H??""}`,style:{position:"absolute",left:i?0:typeof e.x=="number"?`${e.x}px`:e.x,top:i?0:typeof e.y=="number"?`${e.y}px`:e.y,width:i?"100%":typeof e.width=="number"?`${e.width}px`:e.width,height:i?"100%":typeof e.height=="number"?`${e.height}px`:e.height,zIndex:e.z,pointerEvents:m?"none":"auto"},children:[(0,d.jsxs)("div",{onDoubleClick:()=>A(e.id),onMouseDown:D=>{C?.canDrag!==!1&&Ve(e.id,D)},className:"floating-window-titlebar cursor-move",style:{cursor:i||C?.canDrag===!1?"default":"move"},children:[(0,d.jsxs)("span",{className:"floating-window-title",children:[(0,d.jsx)("span",{className:"window-title-icon",children:C?.icon||l||at}),(0,d.jsxs)("span",{children:[X(a.title,y),a.dirty?" *":""]})]}),(0,d.jsxs)("div",{className:"fw-titlebar-actions",style:{gap:"var(--header-button-gap, 4px)"},onMouseDown:D=>D.stopPropagation(),children:[C?.renderHeaderActions&&(0,d.jsx)("div",{className:"window-header-actions",children:C.renderHeaderActions(e.id)}),C?.canDrag!==!1&&(0,d.jsx)("button",{type:"button",title:X(g.windowAnchoringOptions,y),onClick:D=>{let B=!!e.stickyRight,I=!!e.stickyBottom;S.current?.show({event:D,contextMenu:{items:[{label:X(g.anchorToRightEdge,y),checkbox:{active:!0,enabled:!0,value:B},action:()=>{let N=he.width,U=typeof e.width=="string"?parseFloat(e.width):e.width;B?F(e.id,{stickyRight:!1}):F(e.id,{x:N-U-10,stickyRight:!0})}},{label:X(g.anchorToBottomEdge,y),checkbox:{active:!0,enabled:!0,value:I},action:()=>{let N=he.height,U=typeof e.height=="string"?parseFloat(e.height):e.height;I?F(e.id,{stickyBottom:!1}):F(e.id,{y:N-U-10,stickyBottom:!0})}}]}})},className:"custom-tab-btn btn-anchor-tab",children:(0,d.jsxs)("svg",{className:`anchor-icon ${e.stickyRight&&e.stickyBottom?"anchor-sticky-both":e.stickyRight?"anchor-sticky-right":e.stickyBottom?"anchor-sticky-bottom":""}`,width:"11",height:"11",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:[(0,d.jsx)("circle",{cx:"12",cy:"5",r:"2"}),(0,d.jsx)("path",{d:"M12 7v7m0 0a4 4 0 0 1-4-4M12 14a4 4 0 0 0 4-4M5 18h14"})]})}),(0,d.jsx)("button",{type:"button",title:i?X(g.restoreSize,y):X(g.maximize,y),onClick:()=>A(e.id),className:"custom-tab-btn btn-maximize-tab",children:(0,d.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:(0,d.jsx)("rect",{x:"4",y:"4",width:"16",height:"16",rx:"1.5"})})}),C?.canMinimize!==!1&&(0,d.jsx)("button",{type:"button",title:X(g.minimize,y),onClick:()=>T(e.id),className:"custom-tab-btn btn-minimize-tab",children:(0,d.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:(0,d.jsx)("path",{d:"M5 12h14"})})}),C?.canClose!==!1&&(0,d.jsx)("button",{type:"button",title:X(g.close,y),onClick:()=>k(e.id),className:"custom-tab-btn btn-close-tab",children:(0,d.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:(0,d.jsx)("path",{d:"M18 6L6 18M6 6l12 12"})})})]})]}),(0,d.jsx)("div",{className:$??void 0,style:{flexGrow:1,width:"100%",overflow:"hidden",position:"relative",isolation:"isolate"},children:(0,d.jsx)(Rt,{panelId:e.id},e.id)}),!i&&(0,d.jsx)("div",{onMouseDown:D=>_e(e.id,D),style:{position:"absolute",right:0,bottom:0,width:"14px",height:"14px",cursor:"se-resize",zIndex:30,background:"linear-gradient(135deg, transparent 50%, rgba(255,255,255,0.2) 50%)"}})]},e.id)})]}),r.minimized.length>0&&(0,d.jsxs)("div",{className:"taskbar-footer-container",style:{height:"48px",zIndex:100},children:[(0,d.jsx)("button",{type:"button",onClick:()=>t("left"),className:"taskbar-nav-btn",style:{display:r.minimized.length>4?"block":"none"},children:"\u25C0"}),(0,d.jsx)("div",{ref:f,className:"taskbar-items-container",style:{scrollSnapType:"x mandatory"},children:r.minimized.map(e=>{let i=te.get(e.component)?.defaultOptions?.icon||l||at;return(0,d.jsx)("div",{onClick:()=>{G(null),h(e.id)},onContextMenu:m=>Ge(e.id,m),onMouseEnter:m=>{if(_)return;Y.current&&clearTimeout(Y.current);let u=m.currentTarget.getBoundingClientRect();m.clientX>=u.left&&m.clientX<=u.right&&m.clientY>=u.top&&m.clientY<=u.bottom&&G({id:e.id,rect:u,title:e.title,component:e.component})},onMouseLeave:()=>{Y.current=setTimeout(()=>{G(null)},150)},className:"taskbar-glassmorphic-item",style:{backdropFilter:"blur(6px)",transition:"all 0.2s",cursor:"pointer",scrollSnapAlign:"start",width:"38px",height:"38px",position:"relative",padding:0},children:(0,d.jsx)("span",{className:"taskbar-item-icon",children:i})},e.id)})}),E&&(0,st.createPortal)((0,d.jsxs)("div",{className:"taskbar-item-tooltip",dir:r.dir,style:{position:"fixed",left:`${E.rect.left+E.rect.width/2}px`,top:`${E.rect.top-8}px`,transform:"translateX(-50%) translateY(-100%)",opacity:1,pointerEvents:"auto",zIndex:999999},onMouseEnter:()=>{Y.current&&clearTimeout(Y.current)},onMouseLeave:()=>{G(null)},onClick:()=>{h(E.id),G(null)},children:[(0,d.jsxs)("div",{className:"tooltip-header-row",children:[(0,d.jsxs)("span",{className:"tooltip-title-text text-truncate",style:{maxWidth:"140px"},children:[X(E.title,y),r.panels[E.id]?.dirty?" *":""]}),(0,d.jsx)("span",{onClick:e=>{e.stopPropagation(),k(E.id),G(null)},title:X(g.closePanel,y),className:"tooltip-close-x",children:(0,d.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:(0,d.jsx)("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),(0,d.jsx)(Vt,{panelId:E.id})]}),document.body),(0,d.jsx)("button",{type:"button",onClick:()=>t("right"),className:"taskbar-nav-btn",style:{display:r.minimized.length>4?"block":"none"},children:"\u25B6"})]}),Object.keys(r.panels).map(e=>{let a=r.panels[e];if(!a)return null;let i=xt(e);return(0,st.createPortal)((0,d.jsx)(_t,{panelId:e,children:(0,d.jsx)("div",{style:{width:"100%",height:"100%"},children:Qt(e,a.component)})}),i,e)}),(0,d.jsx)(Ct.JsonContextMenu,{ref:S,id:"workspace-context-menu",theme:"dark",onShow:()=>ce(!0),onHide:()=>ce(!1)}),r.draggedPanelId!==null&&!r.floating.some(e=>e.id===r.draggedPanelId)&&(0,d.jsxs)("div",{className:"drag-ghost-tab",style:{left:re.x+12,top:re.y+12,zIndex:1e5},children:["\u{1F4C4} ",X(r.panels[r.draggedPanelId]?.title,y)||"Tab"]})]})},It=tn;var ae=require("react");var V=require("react/jsx-runtime"),nn=({modal:n,index:l,isTopmost:r})=>{let{close:h,openModal:T,updateInstance:M,setDirty:A}=Ie(),F=de(),x=ue(),{dir:R}=fe(),{modalClass:z,modalBodyClass:c}=Ce(),w=(0,ae.useRef)(null),{id:b,Component:L,props:W,options:p,dirty:y,dirtyOptions:g}=n,k=p,[H,$]=(0,ae.useState)(k.icon||null),f=(0,ae.useRef)(k);f.current=k;let S=X(k.title,F),E=(0,ae.useCallback)(async J=>{if(J?.force){h(b);return}if(w.current){if(!await w.current())return;h(b);return}if(y){T(Te,{title:g?.title||x.unsavedChangesTitle,message:g?.message||{id:x.unsavedChangesMessage.id,defaultMessage:x.unsavedChangesMessage.defaultMessage,values:{title:S}},alert:g?.alert,alertType:g?.alertType||"danger",useYesNoTitles:!0,onOK:()=>h(b)},{size:"small"});return}h(b)},[h,T,b,y,g,S,x]),G=(0,ae.useCallback)((J,le)=>A(b,J,le),[A,b]),Y=(0,ae.useCallback)(J=>M(b,{options:{...f.current,title:J}}),[M,b]),_=(0,ae.useCallback)(J=>$(J),[]),ce=(0,ae.useCallback)(J=>(w.current=J,()=>{w.current=null}),[]),me=(0,ae.useMemo)(()=>({requestClose:E,setDirty:G,setTitle:Y,setIcon:_,onCloseRequested:ce,containerType:"modal",instanceId:b}),[E,G,Y,_,ce,b]),K=y?`${S} *`:S,ie=k.size?`v2-modal-size-${k.size}`:"v2-modal-size-auto",re=k.closable!==!1;(0,ae.useEffect)(()=>{if(!r||!re)return;let J=le=>{le.key==="Escape"&&(le.stopPropagation(),E())};return document.addEventListener("keydown",J),()=>document.removeEventListener("keydown",J)},[E,re,r]);let ve=1e4+l*10;return(0,V.jsxs)("div",{className:"v2-modal-overlay",style:{zIndex:ve},dir:R,children:[(0,V.jsx)("div",{className:"v2-modal-curtain",onClick:re?()=>E():void 0}),(0,V.jsxs)("div",{className:`v2-modal-window ${ie} ${z??""}`,children:[(0,V.jsxs)("div",{className:"v2-modal-header",children:[H&&(0,V.jsx)("div",{className:"v2-modal-icon",children:H}),(0,V.jsx)("h4",{className:"v2-modal-title",children:K}),re&&(0,V.jsx)("button",{className:"v2-modal-close-button",onClick:()=>E(),title:F(x.closeTooltip),type:"button",children:(0,V.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:(0,V.jsx)("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),(0,V.jsx)("div",{className:`v2-modal-body ${c??""}`,children:(0,V.jsx)(ke,{value:me,children:(0,V.jsx)(L,{...W,panelId:b})})})]})]})},on=()=>{let{modals:n}=xe();return n.length===0?null:(0,V.jsx)(V.Fragment,{children:n.map((l,r)=>(0,V.jsx)(nn,{modal:l,index:r,isTopmost:r===n.length-1},l.id))})},Tt=on;var ne=require("react");var Q=require("react/jsx-runtime"),Ze=({panel:n,position:l,defaultWidth:r})=>{let{close:h,openModal:T,updateInstance:M,setDirty:A,registerCloseHandler:F,unregisterCloseHandler:x}=Ie(),{modals:R}=xe(),z=de(),c=ue(),{dir:w}=fe(),{sidePanelClass:b,sidePanelBodyClass:L}=Ce(),W=(0,ne.useRef)(null),{id:p,Component:y,props:g,options:k,dirty:H,dirtyOptions:$}=n,f=k,[S,E]=(0,ne.useState)(f.icon||null),G=(0,ne.useRef)(f);G.current=f;let Y=X(f.title,z),_=(0,ne.useCallback)(async q=>{if(q?.force){h(p);return}if(W.current){if(!await W.current())return;h(p);return}if(H){T(Te,{title:$?.title||c.unsavedChangesTitle,message:$?.message||{id:c.unsavedChangesMessage.id,defaultMessage:c.unsavedChangesMessage.defaultMessage,values:{title:Y}},alert:$?.alert,alertType:$?.alertType||"danger",useYesNoTitles:!0,onOK:()=>h(p)},{size:"small"});return}h(p)},[h,T,p,H,$,Y,c]),ce=(0,ne.useCallback)(async()=>W.current?await W.current():!H,[H]);(0,ne.useEffect)(()=>(F(p,ce),()=>x(p)),[p,ce,F,x]);let me=(0,ne.useCallback)((q,Pe)=>A(p,q,Pe),[A,p]),K=(0,ne.useCallback)(q=>M(p,{options:{...G.current,title:q}}),[M,p]),ie=(0,ne.useCallback)(q=>E(q),[]),re=(0,ne.useCallback)(q=>(W.current=q,()=>{W.current=null}),[]),be=(0,ne.useMemo)(()=>({requestClose:_,setDirty:me,setTitle:K,setIcon:ie,onCloseRequested:re,containerType:l==="left"?"left-panel":"right-panel",instanceId:p}),[_,me,K,ie,re,l,p]),ve=H?`${Y} *`:Y;(0,ne.useEffect)(()=>{let q=Pe=>{Pe.key==="Escape"&&R.length===0&&_()};return document.addEventListener("keydown",q),()=>document.removeEventListener("keydown",q)},[_,R.length]);let J=f.width||r||400,le=typeof J=="number"?`${J}px`:J;return(0,Q.jsx)("div",{className:`v2-side-panel v2-side-panel-${l} v2-side-panel-visible ${b??""}`,style:{width:le},dir:w,children:(0,Q.jsxs)("div",{className:"v2-side-panel-window",children:[(0,Q.jsxs)("div",{className:"v2-side-panel-header",children:[S&&(0,Q.jsx)("div",{className:"v2-side-panel-icon",children:S}),(0,Q.jsx)("h4",{className:"v2-side-panel-title",children:ve}),(0,Q.jsx)("button",{className:"v2-side-panel-close-button",onClick:()=>_(),title:z(c.closeTooltip),type:"button",children:(0,Q.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:(0,Q.jsx)("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),(0,Q.jsx)("div",{className:`v2-side-panel-body ${L??""}`,children:(0,Q.jsx)(ke,{value:be,children:(0,Q.jsx)(y,{...g,panelId:p})})})]})})},sn=({defaultWidth:n})=>{let{leftPanel:l,rightPanel:r}=xe();return(0,Q.jsxs)(Q.Fragment,{children:[l&&(0,Q.jsx)(Ze,{panel:l,position:"left",defaultWidth:n},l.id),r&&(0,Q.jsx)(Ze,{panel:r,position:"right",defaultWidth:n},r.id)]})},St=({defaultWidth:n})=>{let{leftPanel:l}=xe();return l?(0,Q.jsx)(Ze,{panel:l,position:"left",defaultWidth:n},l.id):null},zt=({defaultWidth:n})=>{let{rightPanel:l}=xe();return l?(0,Q.jsx)(Ze,{panel:l,position:"right",defaultWidth:n},l.id):null},Lt=sn;var oe=require("react");var se=require("react/jsx-runtime"),Et=(0,oe.forwardRef)(function({position:l="right",tabs:r,drawerWidth:h="220px",activeTabId:T,onActiveTabChange:M,children:A},F){let x=T!==void 0,R=de(),z=ue(),[c,w]=(0,oe.useState)(null),b=x?T:c,[L,W]=(0,oe.useState)(()=>{let f=new Set;for(let S of r)S.eagerMount&&f.add(S.id);return f});(0,oe.useEffect)(()=>{let f=r.filter(S=>S.eagerMount&&!L.has(S.id));f.length>0&&W(S=>{let E=new Set(S);for(let G of f)E.add(G.id);return E})},[r]);let p=(0,oe.useRef)(b??null);(0,oe.useEffect)(()=>{p.current=b??null},[b]);let y=(0,oe.useCallback)(f=>{x||w(f),M?.(f)},[x,M]);(0,oe.useImperativeHandle)(F,()=>({openTab:f=>y(f),closeDrawer:()=>y(null),getActiveTab:()=>p.current}),[y]);let g=f=>{y(b===f?null:f)},k=(0,oe.useCallback)(()=>y(null),[y]);(0,oe.useEffect)(()=>{b&&!L.has(b)&&W(f=>{let S=new Set(f);return S.add(b),S})},[b,L]),(0,oe.useEffect)(()=>{b===null&&W(f=>{let S=!1,E=new Set(f);for(let G of f){let Y=r.find(_=>_.id===G);Y&&!Y.eagerMount&&!Y.preserveState&&(E.delete(G),S=!0)}return S?E:f})},[b,r]);let H=(0,se.jsx)("div",{className:`sidebar-tabs-strip ${l}`,style:{width:"56px",height:"100%"},children:r.map(f=>{let S=b===f.id;return(0,se.jsx)("button",{type:"button",onClick:()=>g(f.id),className:`sidebar-tab-btn ${S?"active":""}`,title:f.label,"aria-pressed":S,children:f.icon},f.id)})}),$=(0,se.jsx)("div",{className:`sidebar-content-drawer h-100 ${l}`,style:{width:b?h:"0px",minWidth:b?h:"0px",overflow:"hidden",flexShrink:0},children:r.map(f=>{if(!L.has(f.id))return null;let E=b===f.id,G=()=>y(f.id);return(0,se.jsxs)("div",{style:{display:E?"flex":"none",flexDirection:"column",height:"100%",width:"100%"},children:[(0,se.jsxs)("div",{className:"sidebar-drawer-header",children:[(0,se.jsx)("span",{className:"sidebar-header-title",children:f.label}),(0,se.jsx)("button",{type:"button",onClick:k,className:"sidebar-close-btn",title:R(z.closePanelTooltip),"aria-label":R(z.closePanelTooltip),children:(0,se.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,se.jsx)("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),(0,se.jsx)("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),(0,se.jsx)("div",{className:"sidebar-drawer-body",children:f.renderContent(f.id,k,G)})]},f.id)})});return(0,se.jsxs)(se.Fragment,{children:[l==="left"&&H,l==="left"&&$,A,l==="right"&&$,l==="right"&&H]})});0&&(module.exports={ConfirmationForm,FormContainerContext,FormContainerProvider,LeftPanelRenderer,ModalStackRenderer,PanelProvider,PanelRegistry,RightPanelRenderer,SidePanelRenderer,Sidebar,WindowManager,WindowManagerProvider,defaultPredefinedMessages,formatLabel,useFormContainer,useFormatMessage,usePanelActions,usePanelContext,usePanelState,usePredefinedMessages,useStyleClasses,useWindowManagerActions,useWindowManagerState});
2
2
  //# sourceMappingURL=index.cjs.map