react-dockable-desktop 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -58,6 +58,7 @@ interface PanelRegistryEntry {
58
58
  /**
59
59
  * Registry mapping catalog entries to allow programmatic panel instantiation
60
60
  * inside dynamic layout cells or floating windows.
61
+ * Exported so WorkspaceClient can create scoped, per-instance registries.
61
62
  */
62
63
  declare class PanelRegistryClass {
63
64
  private registry;
@@ -439,6 +440,9 @@ interface StyleClasses {
439
440
  declare const useStyleClasses: () => StyleClasses;
440
441
  interface WindowManagerProviderProps {
441
442
  children: React__default.ReactNode;
443
+ /** WorkspaceClient instance created outside the React tree. When provided, its registry
444
+ * and config take precedence over the individual props below. */
445
+ client?: WorkspaceClient;
442
446
  formatMessage?: MessageFormatter;
443
447
  predefinedMessages?: Record<string, ContextMenuPredefinedMessage>;
444
448
  dir?: 'ltr' | 'rtl';
@@ -480,6 +484,85 @@ declare const usePanelContext: () => {
480
484
  */
481
485
  declare const usePredefinedMessages: () => Record<"floatWindow" | "minimizePanel" | "closeTab" | "restorePanel" | "maximizePanel" | "closePanel" | "dockWindow" | "minimize" | "maximize" | "restoreSize" | "close" | "closeEmptyGroup" | "anchorToRightEdge" | "anchorToBottomEdge" | "windowAnchoringOptions" | "unsavedChangesTitle" | "unsavedChangesMessage" | "discardChanges" | "cancel" | "yes" | "no" | "ok" | "closePanelTooltip" | "closeTooltip", ContextMenuPredefinedMessage>;
482
486
 
487
+ /** Per-panel definition supplied to WorkspaceClient constructor. */
488
+ interface PanelDefinition {
489
+ component: ComponentType<any>;
490
+ defaultOptions?: PanelRegistryEntry['defaultOptions'];
491
+ }
492
+ /** Configuration object accepted by the WorkspaceClient constructor. */
493
+ interface WorkspaceClientConfig {
494
+ /**
495
+ * Declarative panel catalog. Replaces imperative PanelRegistry.register() calls.
496
+ * Keys are the component identifiers used in openPanel() and serialised layouts.
497
+ */
498
+ panels?: Record<string, PanelDefinition>;
499
+ /**
500
+ * Serialised layout produced by a previous saveLayout() call.
501
+ * Pass null or omit to start with an empty canvas.
502
+ */
503
+ initialState?: string | null;
504
+ /** Custom i18n formatter for all internal strings. */
505
+ formatMessage?: MessageFormatter;
506
+ /** Override any subset of the built-in predefined message catalog. */
507
+ predefinedMessages?: Record<string, ContextMenuPredefinedMessage>;
508
+ /** Initial layout direction. */
509
+ dir?: 'ltr' | 'rtl';
510
+ }
511
+ /**
512
+ * WorkspaceClient is the central configuration and imperative API object for
513
+ * react-dockable-desktop. Create one instance outside the React tree and pass
514
+ * it to <WindowManagerProvider client={client}>.
515
+ *
516
+ * Pattern: TanStack QueryClient / Redux store — configuration and imperative
517
+ * access live on the client; rendering is delegated to the thin React provider.
518
+ *
519
+ * @example
520
+ * const workspace = new WorkspaceClient({
521
+ * panels: {
522
+ * map: { component: MapPanel },
523
+ * editor: { component: EditorPanel, defaultOptions: { title: 'Code Editor' } },
524
+ * },
525
+ * initialState: localStorage.getItem('layout'),
526
+ * });
527
+ *
528
+ * <WindowManagerProvider client={workspace}>
529
+ * <WindowManager />
530
+ * </WindowManagerProvider>
531
+ *
532
+ * // Imperative access from anywhere:
533
+ * workspace.saveLayout();
534
+ * workspace.openPanel('map', 'map');
535
+ */
536
+ declare class WorkspaceClient {
537
+ /** Scoped panel registry — fully independent from the global singleton. */
538
+ readonly registry: PanelRegistryClass;
539
+ /** Serialised layout to restore on mount, or null to start with an empty canvas. */
540
+ readonly initialState: string | null;
541
+ /** Non-rendering configuration forwarded to the provider. */
542
+ readonly config: Pick<WorkspaceClientConfig, 'formatMessage' | 'predefinedMessages' | 'dir'>;
543
+ private _actions;
544
+ constructor(config?: WorkspaceClientConfig);
545
+ /** @internal Called by WindowManagerProvider after mount. */
546
+ _connect(actions: WindowActions): void;
547
+ /** @internal Called by WindowManagerProvider on unmount. */
548
+ _disconnect(): void;
549
+ /** True while the provider is mounted and React state is accessible. */
550
+ get isConnected(): boolean;
551
+ saveLayout(): string;
552
+ loadLayout(json: string): void;
553
+ openPanel(...args: Parameters<WindowActions['openPanel']>): void;
554
+ closePanel(id: string): void;
555
+ minimizePanel(id: string): void;
556
+ restorePanel(id: string): void;
557
+ floatPanel(...args: Parameters<WindowActions['floatPanel']>): void;
558
+ dockPanel(...args: Parameters<WindowActions['dockPanel']>): void;
559
+ maximizePanel(id: string): void;
560
+ bringToFront(id: string): void;
561
+ setDirection(dir: 'ltr' | 'rtl'): void;
562
+ publish(event: string, data: unknown): void;
563
+ subscribe(event: string, callback: (data: unknown) => void): () => void;
564
+ }
565
+
483
566
  /**
484
567
  * Options used when requesting to close a container.
485
568
  */
@@ -769,4 +852,4 @@ interface SidebarHandle {
769
852
  */
770
853
  declare const Sidebar: React__default.ForwardRefExoticComponent<SidebarProps & React__default.RefAttributes<SidebarHandle>>;
771
854
 
772
- export { type CloseOptions, ConfirmationForm, type ConfirmationFormProps, type ContextMenuPredefinedMessage, type FloatingWindow, FormContainerContext, type FormContainerContract, FormContainerProvider, type LayoutGridNode, type LayoutLeafNode, type LayoutNode, LeftPanelRenderer, type MessageFormatter, type ModalOptions, ModalStackRenderer, type PanelActions, type PanelInfo, type PanelInstance, type PanelInstanceId, PanelProvider, PanelRegistry, type PanelState, type PanelTitle, type PredefinedMessageKey, RightPanelRenderer, type SidePanelOptions, SidePanelRenderer, type SidePanelRendererProps, Sidebar, type SidebarHandle, type SidebarProps, type SidebarTab, type SplitOrientation, type StyleClasses, type WindowActions, WindowManager, WindowManagerProvider, type WindowState, defaultPredefinedMessages, formatLabel, useFormContainer, useFormatMessage, usePanelActions, usePanelContext, usePanelState, usePredefinedMessages, useStyleClasses, useWindowManagerActions, useWindowManagerState };
855
+ export { type CloseOptions, ConfirmationForm, type ConfirmationFormProps, type ContextMenuPredefinedMessage, type FloatingWindow, FormContainerContext, type FormContainerContract, FormContainerProvider, type LayoutGridNode, type LayoutLeafNode, type LayoutNode, LeftPanelRenderer, type MessageFormatter, type ModalOptions, ModalStackRenderer, type PanelActions, type PanelDefinition, type PanelInfo, type PanelInstance, type PanelInstanceId, PanelProvider, PanelRegistry, type PanelRegistryEntry, type PanelState, type PanelTitle, type PredefinedMessageKey, RightPanelRenderer, type SidePanelOptions, SidePanelRenderer, type SidePanelRendererProps, Sidebar, type SidebarHandle, type SidebarProps, type SidebarTab, type SplitOrientation, type StyleClasses, type WindowActions, WindowManager, WindowManagerProvider, type WindowState, WorkspaceClient, type WorkspaceClientConfig, defaultPredefinedMessages, formatLabel, useFormContainer, useFormatMessage, usePanelActions, usePanelContext, usePanelState, usePredefinedMessages, useStyleClasses, useWindowManagerActions, useWindowManagerState };
package/dist/index.d.ts CHANGED
@@ -58,6 +58,7 @@ interface PanelRegistryEntry {
58
58
  /**
59
59
  * Registry mapping catalog entries to allow programmatic panel instantiation
60
60
  * inside dynamic layout cells or floating windows.
61
+ * Exported so WorkspaceClient can create scoped, per-instance registries.
61
62
  */
62
63
  declare class PanelRegistryClass {
63
64
  private registry;
@@ -439,6 +440,9 @@ interface StyleClasses {
439
440
  declare const useStyleClasses: () => StyleClasses;
440
441
  interface WindowManagerProviderProps {
441
442
  children: React__default.ReactNode;
443
+ /** WorkspaceClient instance created outside the React tree. When provided, its registry
444
+ * and config take precedence over the individual props below. */
445
+ client?: WorkspaceClient;
442
446
  formatMessage?: MessageFormatter;
443
447
  predefinedMessages?: Record<string, ContextMenuPredefinedMessage>;
444
448
  dir?: 'ltr' | 'rtl';
@@ -480,6 +484,85 @@ declare const usePanelContext: () => {
480
484
  */
481
485
  declare const usePredefinedMessages: () => Record<"floatWindow" | "minimizePanel" | "closeTab" | "restorePanel" | "maximizePanel" | "closePanel" | "dockWindow" | "minimize" | "maximize" | "restoreSize" | "close" | "closeEmptyGroup" | "anchorToRightEdge" | "anchorToBottomEdge" | "windowAnchoringOptions" | "unsavedChangesTitle" | "unsavedChangesMessage" | "discardChanges" | "cancel" | "yes" | "no" | "ok" | "closePanelTooltip" | "closeTooltip", ContextMenuPredefinedMessage>;
482
486
 
487
+ /** Per-panel definition supplied to WorkspaceClient constructor. */
488
+ interface PanelDefinition {
489
+ component: ComponentType<any>;
490
+ defaultOptions?: PanelRegistryEntry['defaultOptions'];
491
+ }
492
+ /** Configuration object accepted by the WorkspaceClient constructor. */
493
+ interface WorkspaceClientConfig {
494
+ /**
495
+ * Declarative panel catalog. Replaces imperative PanelRegistry.register() calls.
496
+ * Keys are the component identifiers used in openPanel() and serialised layouts.
497
+ */
498
+ panels?: Record<string, PanelDefinition>;
499
+ /**
500
+ * Serialised layout produced by a previous saveLayout() call.
501
+ * Pass null or omit to start with an empty canvas.
502
+ */
503
+ initialState?: string | null;
504
+ /** Custom i18n formatter for all internal strings. */
505
+ formatMessage?: MessageFormatter;
506
+ /** Override any subset of the built-in predefined message catalog. */
507
+ predefinedMessages?: Record<string, ContextMenuPredefinedMessage>;
508
+ /** Initial layout direction. */
509
+ dir?: 'ltr' | 'rtl';
510
+ }
511
+ /**
512
+ * WorkspaceClient is the central configuration and imperative API object for
513
+ * react-dockable-desktop. Create one instance outside the React tree and pass
514
+ * it to <WindowManagerProvider client={client}>.
515
+ *
516
+ * Pattern: TanStack QueryClient / Redux store — configuration and imperative
517
+ * access live on the client; rendering is delegated to the thin React provider.
518
+ *
519
+ * @example
520
+ * const workspace = new WorkspaceClient({
521
+ * panels: {
522
+ * map: { component: MapPanel },
523
+ * editor: { component: EditorPanel, defaultOptions: { title: 'Code Editor' } },
524
+ * },
525
+ * initialState: localStorage.getItem('layout'),
526
+ * });
527
+ *
528
+ * <WindowManagerProvider client={workspace}>
529
+ * <WindowManager />
530
+ * </WindowManagerProvider>
531
+ *
532
+ * // Imperative access from anywhere:
533
+ * workspace.saveLayout();
534
+ * workspace.openPanel('map', 'map');
535
+ */
536
+ declare class WorkspaceClient {
537
+ /** Scoped panel registry — fully independent from the global singleton. */
538
+ readonly registry: PanelRegistryClass;
539
+ /** Serialised layout to restore on mount, or null to start with an empty canvas. */
540
+ readonly initialState: string | null;
541
+ /** Non-rendering configuration forwarded to the provider. */
542
+ readonly config: Pick<WorkspaceClientConfig, 'formatMessage' | 'predefinedMessages' | 'dir'>;
543
+ private _actions;
544
+ constructor(config?: WorkspaceClientConfig);
545
+ /** @internal Called by WindowManagerProvider after mount. */
546
+ _connect(actions: WindowActions): void;
547
+ /** @internal Called by WindowManagerProvider on unmount. */
548
+ _disconnect(): void;
549
+ /** True while the provider is mounted and React state is accessible. */
550
+ get isConnected(): boolean;
551
+ saveLayout(): string;
552
+ loadLayout(json: string): void;
553
+ openPanel(...args: Parameters<WindowActions['openPanel']>): void;
554
+ closePanel(id: string): void;
555
+ minimizePanel(id: string): void;
556
+ restorePanel(id: string): void;
557
+ floatPanel(...args: Parameters<WindowActions['floatPanel']>): void;
558
+ dockPanel(...args: Parameters<WindowActions['dockPanel']>): void;
559
+ maximizePanel(id: string): void;
560
+ bringToFront(id: string): void;
561
+ setDirection(dir: 'ltr' | 'rtl'): void;
562
+ publish(event: string, data: unknown): void;
563
+ subscribe(event: string, callback: (data: unknown) => void): () => void;
564
+ }
565
+
483
566
  /**
484
567
  * Options used when requesting to close a container.
485
568
  */
@@ -769,4 +852,4 @@ interface SidebarHandle {
769
852
  */
770
853
  declare const Sidebar: React__default.ForwardRefExoticComponent<SidebarProps & React__default.RefAttributes<SidebarHandle>>;
771
854
 
772
- export { type CloseOptions, ConfirmationForm, type ConfirmationFormProps, type ContextMenuPredefinedMessage, type FloatingWindow, FormContainerContext, type FormContainerContract, FormContainerProvider, type LayoutGridNode, type LayoutLeafNode, type LayoutNode, LeftPanelRenderer, type MessageFormatter, type ModalOptions, ModalStackRenderer, type PanelActions, type PanelInfo, type PanelInstance, type PanelInstanceId, PanelProvider, PanelRegistry, type PanelState, type PanelTitle, type PredefinedMessageKey, RightPanelRenderer, type SidePanelOptions, SidePanelRenderer, type SidePanelRendererProps, Sidebar, type SidebarHandle, type SidebarProps, type SidebarTab, type SplitOrientation, type StyleClasses, type WindowActions, WindowManager, WindowManagerProvider, type WindowState, defaultPredefinedMessages, formatLabel, useFormContainer, useFormatMessage, usePanelActions, usePanelContext, usePanelState, usePredefinedMessages, useStyleClasses, useWindowManagerActions, useWindowManagerState };
855
+ export { type CloseOptions, ConfirmationForm, type ConfirmationFormProps, type ContextMenuPredefinedMessage, type FloatingWindow, FormContainerContext, type FormContainerContract, FormContainerProvider, type LayoutGridNode, type LayoutLeafNode, type LayoutNode, LeftPanelRenderer, type MessageFormatter, type ModalOptions, ModalStackRenderer, type PanelActions, type PanelDefinition, type PanelInfo, type PanelInstance, type PanelInstanceId, PanelProvider, PanelRegistry, type PanelRegistryEntry, type PanelState, type PanelTitle, type PredefinedMessageKey, RightPanelRenderer, type SidePanelOptions, SidePanelRenderer, type SidePanelRendererProps, Sidebar, type SidebarHandle, type SidebarProps, type SidebarTab, type SplitOrientation, type StyleClasses, type WindowActions, WindowManager, WindowManagerProvider, type WindowState, WorkspaceClient, type WorkspaceClientConfig, defaultPredefinedMessages, formatLabel, useFormContainer, useFormatMessage, usePanelActions, usePanelContext, usePanelState, usePredefinedMessages, useStyleClasses, useWindowManagerActions, useWindowManagerState };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import ut,{useState as Ce,useRef as fe,useEffect as ie}from"react";import{createPortal as St}from"react-dom";import{createContext as De,useContext as Ae,useState as Yt,useRef as Ke,useMemo as it,useCallback as Y,useEffect as Xt}from"react";var ot=class{registry=new Map;register(l,r,y){this.registry.set(l,{Component:r,defaultOptions:y})}get(l){return this.registry.get(l)}getRegisteredIds(){return Array.from(this.registry.keys())}},_=new ot;var Oe={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"}};import{jsx as We}from"react/jsx-runtime";var ht=De(null),yt=De(null),bt=De(null),vt=De(Oe),Pt=De({}),Pe=()=>Ae(Pt),st=class{listeners={};subscribe(l,r){return this.listeners[l]||(this.listeners[l]=[]),this.listeners[l].push(r),()=>{this.listeners[l]=this.listeners[l].filter(y=>y!==r)}}publish(l,r){this.listeners[l]&&this.listeners[l].forEach(y=>y(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}],jt=({children:i,formatMessage:l,predefinedMessages:r,dir:y,modalClass:N,modalBodyClass:x,sidePanelClass:W,sidePanelBodyClass:E,windowClass:C,windowBodyClass:M})=>{let[T,d]=Yt({gridRoot:qt,floating:Ut,minimized:[],panels:Kt,draggedPanelId:null,activePanelId:"main-map",dir:y||"ltr",isRtl:y==="rtl"}),P=Ke(T);P.current=T;let b=Ke({}),S=it(()=>({...Oe,...r}),[r]),F=Ke(new st),p=Ke(1e3),h=Y((t,s)=>F.current.subscribe(t,s),[]),u=Y((t,s)=>{F.current.publish(t,s)},[]),R=Y((t,s)=>{let n=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,o=typeof t.height=="string"?parseFloat(t.height):t.height;isNaN(n)&&(n=300),isNaN(e)&&(e=150),isNaN(a)&&(a=450),isNaN(o)&&(o=350);let m=O=>s.some(D=>{let k=typeof D.x=="string"?parseFloat(D.x):D.x,L=typeof D.y=="string"?parseFloat(D.y):D.y;return!D.maximized&&Math.abs(k-O.x)<20&&Math.abs(L-O.y)<20}),c=0;for(;m({x:n,y:e})&&c<10;)n+=30,e+=30,c++;let v=Math.max(100,window.innerWidth||1024),w=Math.max(100,window.innerHeight||768);return(n+a>v||e+o>w)&&(n=100+c%5*30,e=100+c%5*30),n=Math.max(0,Math.min(n,v-100)),e=Math.max(0,Math.min(e,w-40)),{x:n,y:e,width:a,height:o}},[]),A=Y(t=>{p.current+=1;let s=p.current;d(n=>{let e=n.panels[t];if(!e)return n;if(e.state==="floating")return{...n,floating:n.floating.map(a=>a.id===t?{...a,z:s}:a),activePanelId:t};if(e.state==="docked"){let a=o=>o.type==="leaf"?o.panels.includes(t)?{...o,activePanelId:t}:o:{...o,children:o.children.map(a)};return{...n,gridRoot:a(n.gridRoot),activePanelId:t}}return{...n,activePanelId:t}})},[]),B=(t,s)=>{if(t.type==="leaf"){let n=t.panels.indexOf(s);if(n===-1)return t;let e=t.panels.filter(m=>m!==s),a=t.activePanelId===s?e[n]||e[n-1]||e[0]||null:t.activePanelId,o={...t,panels:e,activePanelId:a};return e.length===0&&!t.keepOnEmpty?null:o}else{let n=t.children.map(o=>B(o,s)).filter(o=>o!==null);if(n.length===0)return null;if(n.length===1)return n[0];let e=t.sizes.slice(0,n.length),a=e.reduce((o,m)=>o+m,0);return{...t,children:n,sizes:e.map(o=>o/a)}}},f=(t,s,n)=>{if(t.type==="leaf"){if(t.id===s){let e=t.panels.includes(n)?t.panels:[...t.panels,n];return{...t,panels:e,activePanelId:n}}return t}else return{...t,children:t.children.map(e=>f(e,s,n))}},I=t=>{if(t.type==="leaf")return t.id;for(let s of t.children){let n=I(s);if(n)return n}return null},z=Y((t,s,n)=>{d(e=>{let a=e.panels[t],o=_.get(s),m=n?.title||n?.title||o?.defaultOptions?.title||t,c=n?.initialTarget||o?.defaultOptions?.initialTarget||"docked",v=o?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350};if(a)if(a.state==="minimized"){let k=e.minimized.filter(L=>L.id!==t);if(c==="floating"||!e.gridRoot){p.current+=1;let L=R(v,e.floating);return{...e,minimized:k,floating:[...e.floating,{...L,id:t,z:p.current}],panels:{...e.panels,[t]:{...a,state:"floating"}}}}else{let L=I(e.gridRoot)||"group-left-top";return{...e,minimized:k,gridRoot:f(e.gridRoot,L,t),panels:{...e.panels,[t]:{...a,state:"docked"}}}}}else{if(a.state==="floating")return A(t),e;{let k=L=>L.type==="leaf"?L.panels.includes(t)?{...L,activePanelId:t}:L:{...L,children:L.children.map(k)};return{...e,gridRoot:k(e.gridRoot)}}}let O={id:t,title:m,component:s,state:c==="tabbed"?"docked":c},D={...e.panels,[t]:O};if(c==="floating"){p.current+=1;let k=R(v,e.floating),L=n?.stickyRight??o?.defaultOptions?.defaultStickyRight??!1,K=n?.stickyBottom??o?.defaultOptions?.defaultStickyBottom??!1,J=Math.max(100,window.innerWidth||1024),Q=Math.max(100,window.innerHeight||768),re=typeof k.width=="string"?parseFloat(k.width):k.width,ge=typeof k.height=="string"?parseFloat(k.height):k.height,be=k.x,Re=k.y,Ee=10;return L&&(be=J-re-Ee),K&&(Re=Q-ge-Ee),{...e,floating:[...e.floating,{...k,id:t,z:p.current,x:be,y:Re,stickyRight:L,stickyBottom:K}],panels:D}}else{let k=I(e.gridRoot)||"group-left-top";return{...e,gridRoot:f(e.gridRoot,k,t),panels:D}}})},[R,A]),H=Y(t=>{d(s=>{let n=s.panels[t];if(!n||_.get(n.component)?.defaultOptions?.canClose===!1)return s;delete b.current[t];let a={...s.panels};delete a[t];let o=B(s.gridRoot,t);return{...s,gridRoot:o||{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((t,s)=>{b.current[t]=s},[]),Z=Y(t=>{delete b.current[t]},[]),ne=Y((t,s,n)=>{d(e=>{let a=e.panels[t];return a?{...e,panels:{...e.panels,[t]:{...a,dirty:s,dirtyOptions:n}}}:e})},[]),ce=Y((t,s)=>{d(n=>{let e=n.panels[t];return e?{...n,panels:{...n.panels,[t]:{...e,title:s}}}:n})},[]),q=Y(async(t,s)=>{if(s?.force){H(t);return}let n=b.current[t];if(n&&!await n())return;let e=P.current.panels[t];if(e?.dirty)if(s?.onConfirm){if(!await s.onConfirm(e.dirtyOptions))return}else return;H(t)},[H]),V=Y(t=>{d(s=>{let n=s.panels[t];if(!n||n.state==="minimized"||_.get(n.component)?.defaultOptions?.canMinimize===!1)return s;let a,o;if(n.state==="floating"){let c=s.floating.find(v=>v.id===t);c&&(a={x:c.x,y:c.y,width:c.width,height:c.height,stickyRight:c.stickyRight,stickyBottom:c.stickyBottom})}else if(n.state==="docked"){let c=v=>{if(v.type==="leaf")return v.panels.includes(t)?v.id:null;for(let w of v.children){let O=c(w);if(O)return O}return null};o=c(s.gridRoot)}let m=B(s.gridRoot,t);return{...s,gridRoot:m||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:s.floating.filter(c=>c.id!==t),minimized:[...s.minimized,{id:t,title:n.title,component:n.component}],panels:{...s.panels,[t]:{...n,state:"minimized",previousState:n.state,lastFloatingRect:a,lastLeafId:o}}}})},[]),ee=Y(t=>{d(s=>{let n=s.panels[t];if(!n||n.state!=="minimized")return s;let e=s.minimized.filter(o=>o.id!==t);if((n.previousState||"docked")==="floating"){p.current+=1;let o=_.get(n.component),m=n.lastFloatingRect||o?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},c=R(m,s.floating);return{...s,minimized:e,floating:[...s.floating,{...c,id:t,z:p.current,stickyRight:!!n.lastFloatingRect?.stickyRight,stickyBottom:!!n.lastFloatingRect?.stickyBottom}],panels:{...s.panels,[t]:{...n,state:"floating"}}}}else{let o=(w,O)=>w.type==="leaf"?w.id===O:w.children.some(D=>o(D,O)),m=n.lastLeafId&&o(s.gridRoot,n.lastLeafId),c=_.get(n.component),v=c?.defaultOptions?.canDrag!==!1;if(m)return{...s,minimized:e,gridRoot:f(s.gridRoot,n.lastLeafId,t),panels:{...s.panels,[t]:{...n,state:"docked"}}};if(v){p.current+=1;let w=n.lastFloatingRect||c?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},O=R(w,s.floating);return{...s,minimized:e,floating:[...s.floating,{...O,id:t,z:p.current,stickyRight:!!n.lastFloatingRect?.stickyRight,stickyBottom:!!n.lastFloatingRect?.stickyBottom}],panels:{...s.panels,[t]:{...n,state:"floating"}}}}else{let w=I(s.gridRoot)||"group-left-top";return{...s,minimized:e,gridRoot:f(s.gridRoot,w,t),panels:{...s.panels,[t]:{...n,state:"docked"}}}}}})},[R]),me=Y((t,s)=>{d(n=>{let e=n.panels[t];if(!e||_.get(e.component)?.defaultOptions?.canDrag===!1)return n;let o=_.get(e.component),m=s||o?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},c=B(n.gridRoot,t);p.current+=1;let v=R(m,n.floating);return{...n,gridRoot:c||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:[...n.floating,{...v,id:t,z:p.current}],panels:{...n.panels,[t]:{...e,state:"floating"}}}})},[R]),he=Y((t,s)=>{d(n=>{let e=n.panels[t];if(!e)return n;let a=n.floating.filter(c=>c.id!==t),o=B(n.gridRoot,t),m=s||I(o||n.gridRoot)||"group-left-top";return{...n,gridRoot:f(o||n.gridRoot,m,t),floating:a,panels:{...n.panels,[t]:{...e,state:"docked"}}}})},[]),j=(t,s,n,e)=>{if(t.type==="leaf"){if(t.id===s){let a={type:"leaf",id:`group-split-${Date.now()}-${Math.floor(Math.random()*1e3)}`,panels:[n],activePanelId:n};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,n,e))}},te=Y(t=>{d(s=>({...s,draggedPanelId:t}))},[]),X=Y((t,s,n)=>{d(e=>{let a=e.panels[t];if(!a)return e;let o=e.floating.filter(v=>v.id!==t),m=B(e.gridRoot,t),c;return n==="center"?c=f(m||e.gridRoot,s,t):c=j(m||e.gridRoot,s,t,n),{...e,gridRoot:c,floating:o,panels:{...e.panels,[t]:{...a,state:"docked"}},draggedPanelId:null}})},[]),ye=Y((t,s)=>{d(n=>{let e=n.panels[t];if(!e)return n;let a=n.floating.filter(O=>O.id!==t),o=B(n.gridRoot,t),m={type:"leaf",id:`group-edge-${Date.now()}-${Math.floor(Math.random()*1e3)}`,panels:[t],activePanelId:t},c=s==="left"||s==="right"?"horizontal":"vertical",v=s==="left"||s==="top"?[m,o||n.gridRoot]:[o||n.gridRoot,m];return{...n,gridRoot:{type:"branch",orientation:c,sizes:s==="left"||s==="top"?[.3,.7]:[.7,.3],children:v},floating:a,panels:{...n.panels,[t]:{...e,state:"docked"}},draggedPanelId:null}})},[]),Me=Y((t,s,n)=>{d(e=>{let a=e.panels[t];if(!a)return e;let o=B(e.gridRoot,t),m=w=>{if(w.type==="leaf"){if(w.id===s){let O=w.panels.filter(L=>L!==t),D=Math.max(0,Math.min(n,O.length)),k=[...O];return k.splice(D,0,t),{...w,panels:k,activePanelId:t}}return w}else return{...w,children:w.children.map(m)}},c=m(o||e.gridRoot),v=e.floating.filter(w=>w.id!==t);return{...e,gridRoot:c,floating:v,panels:{...e.panels,[t]:{...a,state:"docked"}},draggedPanelId:null}})},[]),ve=Y(t=>{d(s=>{let n=a=>{if(a.type==="leaf")return a.id===t&&a.canClose!==!1?null:a;{let o=a.children.map(v=>n(v)).filter(v=>v!==null);if(o.length===0)return null;if(o.length===1)return o[0];let m=a.sizes.slice(0,o.length),c=m.reduce((v,w)=>v+w,0);return{...a,children:o,sizes:m.map(v=>v/c)}}},e=n(s.gridRoot);return{...s,gridRoot:e||{type:"leaf",id:"group-default",panels:[],activePanelId:null}}})},[]),$e=Y(t=>{d(s=>({...s,floating:s.floating.map(n=>n.id===t?{...n,maximized:!n.maximized}:n)}))},[]),Ge=Y((t,s)=>{let n=(e,a)=>{if(e.type==="leaf")return e;if(a===t.length)return{...e,sizes:s};let o=t[a],m=e.children.map((c,v)=>v===o?n(c,a+1):c);return{...e,children:m}};d(e=>({...e,gridRoot:n(e.gridRoot,0)}))},[]),Ye=Y((t,s)=>{d(n=>({...n,floating:n.floating.map(e=>e.id===t?{...e,...s}:e)}))},[]),Xe=Y(()=>JSON.stringify({gridRoot:T.gridRoot,floating:T.floating,minimized:T.minimized,panels:T.panels}),[T]),qe=Y(t=>{try{let s=JSON.parse(t);if(s.gridRoot&&s.floating&&s.minimized&&s.panels){let n=Object.keys(s.panels)[0]||null;d(e=>({...e,gridRoot:s.gridRoot,floating:s.floating,minimized:s.minimized,panels:s.panels,draggedPanelId:null,activePanelId:n}))}}catch(s){console.error("Failed to parse layout configuration:",s)}},[]),Le=Y(t=>{d(s=>s.activePanelId===t?s:{...s,activePanelId:t})},[]),ue=Y(t=>{d(s=>s.dir===t?s:{...s,dir:t,isRtl:t==="rtl"})},[]);Xt(()=>{y&&d(t=>t.dir===y?t:{...t,dir:y,isRtl:y==="rtl"})},[y]);let _e=it(()=>({openPanel:z,closePanel:H,minimizePanel:V,restorePanel:ee,floatPanel:me,dockPanel:he,maximizePanel:$e,updateSplitSizes:Ge,updateFloatingPosition:Ye,bringToFront:A,saveLayout:Xe,loadLayout:qe,publish:u,subscribe:h,setDraggedPanelId:te,dockPanelToGroup:X,movePanelOrder:Me,closeLeafGroup:ve,registerCloseGuard:$,unregisterCloseGuard:Z,setPanelDirty:ne,updatePanelTitle:ce,requestClosePanel:q,dockPanelToWorkspaceEdge:ye,setActivePanel:Le,setDirection:ue}),[z,H,V,ee,me,he,$e,Ge,Ye,A,Xe,qe,u,h,te,X,Me,ve,$,Z,ne,ce,q,ye,Le,ue]),et=t=>{let s=t.defaultMessage||t.id;return t.values&&Object.entries(t.values).forEach(([n,e])=>{s=s.replace(`{${n}}`,String(e))}),s},tt=it(()=>({modalClass:N,modalBodyClass:x,sidePanelClass:W,sidePanelBodyClass:E,windowClass:C,windowBodyClass:M}),[N,x,W,E,C,M]);return We(Pt.Provider,{value:tt,children:We(ht.Provider,{value:T,children:We(yt.Provider,{value:_e,children:We(bt.Provider,{value:l||et,children:We(vt.Provider,{value:S,children:i})})})})})},pe=()=>{let i=Ae(ht);if(!i)throw new Error("useWindowManagerState must be used within WindowManagerProvider");return i},ke=()=>{let i=Ae(yt);if(!i)throw new Error("useWindowManagerActions must be used within WindowManagerProvider");return i},oe=()=>Ae(bt)||(l=>{let r=l.defaultMessage||l.id;return l.values&&Object.entries(l.values).forEach(([y,N])=>{r=r.replace(`{${y}}`,String(N))}),r}),G=(i,l)=>i?typeof i=="string"?i:l(i):"",Jt=()=>{let{publish:i,subscribe:l}=ke();return{publish:i,subscribe:l}},ae=()=>Ae(vt);function wt(i){if(!i)return typeof document<"u"?document.documentElement.dir?.toLowerCase()==="rtl"||document.body.dir?.toLowerCase()==="rtl":!1;let l=i.closest("[dir]");return l?l.getAttribute("dir")?.toLowerCase()==="rtl":document.documentElement.dir?.toLowerCase()==="rtl"||document.body.dir?.toLowerCase()==="rtl"}import{JsonContextMenu as rn}from"replace-react-contexify";import"replace-react-contexify/styles.css";import{createContext as Zt,useContext as Qt}from"react";var Vt={requestClose:()=>{console.warn("FormContainerContract: requestClose called but no container is present")},setDirty:()=>{},onCloseRequested:()=>()=>{},setTitle:()=>{},setIcon:()=>{},containerType:"standalone",instanceId:"standalone",onClose:()=>()=>{},onMinimize:()=>()=>{},onRestore:()=>()=>{},onResize:()=>()=>{}},at=Zt(Vt),Ie=at.Provider,rt=()=>Qt(at);import{createContext as Mt,useContext as Rt,useState as _t,useCallback as le,useMemo as en,useRef as tn}from"react";import{jsx as xt}from"react/jsx-runtime";var nn=0,lt=()=>`panel-${++nn}-${Date.now()}`,Ue=new Map,Ct={leftPanel:null,rightPanel:null,modals:[]},kt=Mt(null),It=Mt(null),on=({children:i})=>{let[l,r]=_t(Ct),y=tn(l);y.current=l;let N=le((p,h)=>{Ue.set(p,h)},[]),x=le(p=>{Ue.delete(p)},[]),W=le(async(p,h,u={})=>{let R=y.current.leftPanel;if(R){let f=Ue.get(R.id);if(f&&!await f())return null}let A=lt(),B={id:A,Component:p,props:h,containerType:"left-panel",options:u};return r(f=>({...f,leftPanel:B})),A},[]),E=le(async(p,h,u={})=>{let R=y.current.rightPanel;if(R){let f=Ue.get(R.id);if(f&&!await f())return null}let A=lt(),B={id:A,Component:p,props:h,containerType:"right-panel",options:u};return r(f=>({...f,rightPanel:B})),A},[]),C=le((p,h,u={})=>{let R=lt(),A=h.title,B={...u,title:u.title||A||"Confirmation"},f={id:R,Component:p,props:h,containerType:"modal",options:B};return r(I=>({...I,modals:[...I.modals,f]})),R},[]),M=le(p=>{r(h=>({leftPanel:h.leftPanel?.id===p?null:h.leftPanel,rightPanel:h.rightPanel?.id===p?null:h.rightPanel,modals:h.modals.filter(u=>u.id!==p)}))},[]),T=le(()=>{r(Ct)},[]),d=le(()=>{r(p=>({...p,modals:[]}))},[]),P=le(p=>l.leftPanel?.id===p?l.leftPanel:l.rightPanel?.id===p?l.rightPanel:l.modals.find(h=>h.id===p),[l]),b=le((p,h)=>{r(u=>({leftPanel:u.leftPanel?.id===p?{...u.leftPanel,...h}:u.leftPanel,rightPanel:u.rightPanel?.id===p?{...u.rightPanel,...h}:u.rightPanel,modals:u.modals.map(R=>R.id===p?{...R,...h}:R)}))},[]),S=le((p,h,u)=>{b(p,{dirty:h,dirtyOptions:u})},[b]),F=en(()=>({openLeftPanel:W,openRightPanel:E,openModal:C,close:M,closeAll:T,closeAllModals:d,getInstance:P,updateInstance:b,setDirty:S,registerCloseHandler:N,unregisterCloseHandler:x}),[W,E,C,M,T,d,P,b,S,N,x]);return xt(kt.Provider,{value:l,children:xt(It.Provider,{value:F,children:i})})},we=()=>{let i=Rt(kt);if(!i)throw new Error("usePanelState must be used within PanelProvider");return i},Te=()=>{let i=Rt(It);if(!i)throw new Error("usePanelActions must be used within PanelProvider");return i};import{useEffect as Tt,useRef as sn}from"react";import{jsx as Se,jsxs as dt}from"react/jsx-runtime";var an=({title:i,message:l,alert:r,alertType:y="info",useYesNoTitles:N=!1,onOK:x,onCancel:W})=>{let{requestClose:E,setIcon:C,setTitle:M}=rt(),T=oe(),d=ae(),P=sn(null);Tt(()=>{if(i){let u=typeof i=="string"?i:T(i);M(u)}C&&C(Se("span",{children:"\u2753"}))},[i,M,C,T]),Tt(()=>{P.current?.focus()},[]);let b=typeof l=="string"?l:T(l),S=T(N?d.no:d.cancel),F=T(N?d.yes:d.ok),p=u=>{u.preventDefault(),x?.(),E()},h=()=>{W?.(),E()};return dt("form",{onSubmit:p,className:"confirmation-form-body",children:[r&&dt("div",{className:`confirmation-alert confirmation-alert-${y}`,children:[Se("span",{children:"\u2139\uFE0F"}),Se("span",{children:r})]}),Se("div",{style:{fontSize:"0.9rem",color:"inherit",lineHeight:1.5},children:b}),Se("hr",{style:{marginTop:"0.5rem",marginBottom:"0.5rem",opacity:.1}}),dt("div",{className:"confirmation-actions",children:[Se("button",{type:"button",className:"dw-btn dw-btn-sm dw-btn-outline",onClick:h,children:S}),Se("button",{type:"submit",className:"dw-btn dw-btn-sm dw-btn-primary",ref:P,children:F})]})]})},ze=an;import{Fragment as fn,jsx as g,jsxs as U}from"react/jsx-runtime";var Be=new Map,Je="preserved-dom-container",ct=U("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:[g("rect",{x:"3",y:"3",width:"7",height:"9",rx:"1"}),g("rect",{x:"14",y:"3",width:"7",height:"5",rx:"1"}),g("rect",{x:"14",y:"12",width:"7",height:"9",rx:"1"}),g("rect",{x:"3",y:"16",width:"7",height:"5",rx:"1"})]}),zt=i=>{let l=Be.get(i);return l||(l=document.createElement("div"),l.style.width="100%",l.style.height="100%",Be.set(i,l)),l},ln=(i,l)=>{let r=_.get(l);if(!r)return U("div",{className:"dw-unregistered-panel",style:{border:"2px dashed #dc3545"},children:[g("h6",{style:{fontWeight:700,marginBottom:"0.25rem"},children:"\u26A0\uFE0F Component Unregistered"}),U("span",{style:{fontSize:"0.875rem",color:"var(--text-secondary, #94a3b8)"},children:["Key: ",l]})]});let y=r.Component;return g(y,{panelId:i})},Lt=new Map,Ne=new Map,je=i=>{let l=Ne.get(i);return l||(l={onClose:new Set,onMinimize:new Set,onRestore:new Set,onResize:new Set},Ne.set(i,l)),l},Et=({panelId:i})=>{let l=fe(null);return ie(()=>{let r=l.current;if(!r)return;let y=zt(i);r.appendChild(y);let N=new ResizeObserver(x=>{for(let W of x){let{width:E,height:C}=W.contentRect;if(E>0&&C>0){Lt.set(i,{width:E,height:C});let M=Ne.get(i);M&&M.onResize.forEach(T=>T(E,C))}}});return N.observe(r),()=>{N.disconnect();let x=document.getElementById(Je);x||(x=document.createElement("div"),x.id=Je,x.style.display="none",document.body.appendChild(x)),x.appendChild(y)}},[i]),g("div",{ref:l,style:{width:"100%",height:"100%"}})},dn=({panelId:i})=>{let l=pe(),r=oe(),y=fe(null),N=l.panels[i],x=N?_.get(N.component):null,W=x?.defaultOptions?.disableLivePreview||!1,E=Lt.get(i)||{width:800,height:500},C=E.width,M=E.height,P=Math.min(220/C,140/M);if(ie(()=>{if(W)return;let b=y.current;if(!b)return;let S=Be.get(i);if(S)return b.appendChild(S),()=>{let F=document.getElementById(Je);F||(F=document.createElement("div"),F.id=Je,F.style.display="none",document.body.appendChild(F)),F.appendChild(S)}},[i,W]),W){let b=C*P,S=M*P,F=N?.title||x?.defaultOptions?.title||"Panel",p=G(F,r),h=(Array.from(p)[0]||"P").toUpperCase();return g("div",{className:"taskbar-item-preview-frame",style:{width:`${b}px`,height:`${S}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:g("div",{style:{fontSize:"2rem",fontWeight:600,color:"var(--panel-title-color, var(--panel-text, rgba(255, 255, 255, 0.85)))",userSelect:"none"},children:h})})}return g("div",{className:"taskbar-item-preview-frame",style:{width:`${C*P}px`,height:`${M*P}px`},children:g("div",{ref:y,className:"taskbar-item-preview-host",style:{width:`${C}px`,height:`${M}px`,transform:`scale(${P})`,transformOrigin:"top left",position:"absolute",top:0,left:0,"--preview-scale":P}})})},cn=({panelId:i,children:l})=>{let r=pe(),{requestClosePanel:y,setPanelDirty:N,registerCloseGuard:x,unregisterCloseGuard:W,updatePanelTitle:E}=ke(),C=r.minimized.some(d=>d.id===i),M=fe(C);ie(()=>{let d=Ne.get(i);d&&(C&&!M.current?d.onMinimize.forEach(P=>P()):!C&&M.current&&d.onRestore.forEach(P=>P()),M.current=C)},[C,i]),ie(()=>()=>{let d=Ne.get(i);d&&(d.onClose.forEach(P=>P()),Ne.delete(i))},[i]);let T=ut.useMemo(()=>({requestClose:d=>y(i,d),setDirty:d=>N(i,d),onCloseRequested:d=>(x(i,d),()=>W(i)),setTitle:d=>E(i,d),instanceId:i,onClose:d=>{let P=je(i);return P.onClose.add(d),()=>P.onClose.delete(d)},onMinimize:d=>{let P=je(i);return P.onMinimize.add(d),()=>P.onMinimize.delete(d)},onRestore:d=>{let P=je(i);return P.onRestore.add(d),()=>P.onRestore.delete(d)},onResize:d=>{let P=je(i);return P.onResize.add(d),()=>P.onResize.delete(d)}}),[i,y,N,x,W,E]);return g(Ie,{value:T,children:l})},Nt=({node:i,path:l,onTabRightClick:r,activeDropZone:y,onHoverDropZone:N,onTabDragStart:x,hoveredTab:W,onTabHover:E,defaultPanelIcon:C,onRequestClosePanel:M})=>{let{updateSplitSizes:T}=ke();if(i.type==="leaf")return g(un,{leaf:i,onTabRightClick:r,activeDropZone:y,onHoverDropZone:N,onTabDragStart:x,hoveredTab:W,onTabHover:E,defaultPanelIcon:C,onRequestClosePanel:M});let d=i.orientation==="horizontal",P=(b,S)=>{S.preventDefault();let F=d?S.clientX:S.clientY,p=[...i.sizes],h=S.currentTarget;h.classList.add("active"),document.body.classList.add("resizing-active",d?"resizing-row-active":"resizing-col-active");let u=S.currentTarget.parentElement,R=u?d?u.clientWidth:u.clientHeight:d?1e3:800,A=f=>{let H=((d?f.clientX:f.clientY)-F)/R,$=[...p];$[b]+=H,$[b+1]-=H,$[b]>.1&&$[b+1]>.1&&T(l,$)},B=()=>{h.classList.remove("active"),document.body.classList.remove("resizing-active","resizing-row-active","resizing-col-active"),window.removeEventListener("mousemove",A),window.removeEventListener("mouseup",B)};window.addEventListener("mousemove",A),window.addEventListener("mouseup",B)};return g("div",{style:{display:"flex",flexDirection:d?"row":"column",width:"100%",height:"100%",overflow:"hidden",position:"relative"},children:i.children.map((b,S)=>{let F=i.sizes[S]*100;return U(ut.Fragment,{children:[g("div",{style:{flexGrow:i.sizes[S],flexBasis:`${F}%`,overflow:"hidden",position:"relative"},children:g(Nt,{node:b,path:[...l,S],onTabRightClick:r,activeDropZone:y,onHoverDropZone:N,onTabDragStart:x,hoveredTab:W,onTabHover:E,defaultPanelIcon:C,onRequestClosePanel:M})}),S<i.children.length-1&&g("div",{onMouseDown:p=>P(S,p),style:{cursor:d?"col-resize":"row-resize",width:d?"1px":"100%",height:d?"100%":"1px",zIndex:20},className:"resizer-bar"})]},S)})})},un=({leaf:i,onTabRightClick:l,activeDropZone:r,onHoverDropZone:y,onTabDragStart:N,hoveredTab:x,onTabHover:W,defaultPanelIcon:E,onRequestClosePanel:C})=>{let M=pe(),{openPanel:T,closeLeafGroup:d,setActivePanel:P}=ke(),b=oe(),S=ae(),{windowClass:F,windowBodyClass:p}=Pe(),h=u=>{T(u,M.panels[u].component),P(u)};return U("div",{"data-active-panel-id":i.activePanelId||"",className:`workspace-panel ${F??""}`,style:{overflow:"hidden",position:"relative"},children:[U("div",{className:"workspace-tab-bar",style:{minHeight:"38px"},children:[g("div",{className:"tab-headers-container",style:{scrollbarWidth:"none"},onMouseMove:u=>{M.draggedPanelId&&u.target===u.currentTarget&&W(i.id,"EMPTY",i.panels.length,"right")},onMouseLeave:u=>{M.draggedPanelId&&u.target===u.currentTarget&&W(i.id,"",-1,null)},children:i.panels.map((u,R)=>{let A=M.panels[u];if(!A)return null;let B=i.activePanelId===u,f=M.activePanelId===u,z=_.get(A.component)?.defaultOptions,H=x&&x.leafId===i.id&&x.panelId===u,$=R===i.panels.length-1,Z=x&&x.leafId===i.id&&x.panelId==="EMPTY"&&$,ne=H?x.side==="left"?"drag-hover-left":"drag-hover-right":Z?"drag-hover-right":"";return U("div",{onClick:()=>h(u),onMouseDown:q=>{z?.canDrag!==!1&&N(u,q)},onContextMenu:q=>l(u,q),onMouseMove:q=>{if(M.draggedPanelId){let V=q.currentTarget.getBoundingClientRect(),me=q.clientX-V.left<V.width/2?"left":"right";W(i.id,u,R,me)}},onMouseLeave:()=>{M.draggedPanelId&&W(i.id,"",-1,null)},className:`workspace-tab ${B?f?"active workspace-tab-active-focused":"active workspace-tab-active-unfocused":"workspace-tab-inactive"} ${ne}`,style:{cursor:z?.canDrag===!1?"default":"pointer"},children:[U("span",{className:"text-truncate",style:{maxWidth:"120px",display:"flex",alignItems:"center"},children:[g("span",{className:"workspace-tab-icon",children:z?.icon||E||ct}),U("span",{children:[G(A.title,b),A.dirty?" *":""]})]}),z?.renderHeaderActions&&g("span",{className:"tab-header-actions",onClick:q=>q.stopPropagation(),onMouseDown:q=>q.stopPropagation(),children:z.renderHeaderActions(u)}),z?.canClose!==!1&&g("span",{onClick:q=>{q.stopPropagation(),C(u)},title:G(S.closeTab,b),className:"close-tab-x",style:{width:"18px",height:"18px",...z?.renderHeaderActions?{}:{marginInlineStart:"auto"}},children:g("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:g("path",{d:"M18 6L6 18M6 6l12 12"})})})]},u)})}),i.panels.length===0&&i.keepOnEmpty&&i.canClose!==!1&&g("span",{onClick:()=>d(i.id),className:"close-tab-x header-close-empty-group",style:{width:"18px",height:"18px",cursor:"pointer"},title:G(S.closeEmptyGroup,b),children:g("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:g("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),U("div",{className:`dw-panel-body ${p??""}`,style:{position:"relative",overflow:"hidden"},children:[i.activePanelId&&M.panels[i.activePanelId]?g(Et,{panelId:i.activePanelId},i.activePanelId):g("div",{className:"empty-leaf-placeholder",children:g("span",{children:"Empty Workspace Section"})}),M.draggedPanelId!==null&&g("div",{className:"dock-drop-zone-overlay",children:U("div",{className:"dock-target-cross",children:[g("div",{onMouseEnter:()=>y(i.id,"top"),onMouseLeave:()=>y(i.id,null),className:"dock-target-box dock-target-top",children:"\u25B2"}),g("div",{onMouseEnter:()=>y(i.id,"bottom"),onMouseLeave:()=>y(i.id,null),className:"dock-target-box dock-target-bottom",children:"\u25BC"}),g("div",{onMouseEnter:()=>y(i.id,"left"),onMouseLeave:()=>y(i.id,null),className:"dock-target-box dock-target-left",children:"\u25C0"}),g("div",{onMouseEnter:()=>y(i.id,"right"),onMouseLeave:()=>y(i.id,null),className:"dock-target-box dock-target-right",children:"\u25B6"}),g("div",{onMouseEnter:()=>y(i.id,"center"),onMouseLeave:()=>y(i.id,null),className:"dock-target-box dock-target-center",children:"\u25A3"})]})}),M.draggedPanelId!==null&&r!==null&&r.leafId===i.id&&g("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%"}})]})]})},gn=({skin:i="vscode",defaultPanelIcon:l})=>{let r=pe(),{restorePanel:y,minimizePanel:N,requestClosePanel:x,maximizePanel:W,updateFloatingPosition:E,bringToFront:C,floatPanel:M,setDraggedPanelId:T,dockPanelToGroup:d,movePanelOrder:P,dockPanelToWorkspaceEdge:b,setActivePanel:S,setDirection:F}=ke(),{openModal:p}=Te(),h=oe(),u=ae(),R=ut.useCallback(e=>{let a=r.panels[e];x(e,{onConfirm:o=>new Promise(m=>{let c=o||a?.dirtyOptions,v=a?G(a.title,h):"Panel";p(ze,{title:c?.title||u.unsavedChangesTitle,message:c?.message||{id:u.unsavedChangesMessage.id,defaultMessage:u.unsavedChangesMessage.defaultMessage,values:{title:v}},alert:c?.alert,alertType:c?.alertType||"danger",useYesNoTitles:!0,onOK:()=>m(!0),onCancel:()=>m(!1)},{size:"small"})})})},[x,r.panels,h,p,u]),{windowClass:A,windowBodyClass:B}=Pe(),f=fe(null),I=fe(null),[z,H]=Ce(null),$=fe(null),[Z,ne]=Ce(!1);ie(()=>()=>{$.current&&clearTimeout($.current)},[]),ie(()=>{z&&(r.minimized.some(a=>a.id===z.id)||H(null))},[r.minimized,z]);let[ce,q]=Ce(null),V=fe(null),[ee,me]=Ce({x:0,y:0}),[he,j]=Ce(null),te=fe(null),X=e=>{j(e),te.current=e},[ye,Me]=Ce(null),ve=fe(null),$e=(e,a,o,m)=>{let c=m?{leafId:e,panelId:a,index:o,side:m}:null;Me(c),ve.current=c},Ge=(e,a)=>{let o=a?{leafId:e,position:a}:null;q(o),V.current=o},Ye=(e,a)=>{if(a.button!==0)return;let o=a.clientX,m=a.clientY,c=!1,v=D=>{let k=D.clientX-o,L=D.clientY-m;!c&&(Math.abs(k)>5||Math.abs(L)>5)&&(c=!0,T(e)),c&&me({x:D.clientX,y:D.clientY})},w=D=>{if(window.removeEventListener("mousemove",v),window.removeEventListener("mouseup",O),c){let k=V.current,L=ve.current,K=te.current;if(K)b(e,K);else if(L){let J=L.index;L.side==="right"&&(J+=1),P(e,L.leafId,J)}else k?d(e,k.leafId,k.position):M(e,{x:D.clientX-150,y:D.clientY-15,width:450,height:350});T(null),q(null),V.current=null,Me(null),ve.current=null,X(null)}},O=D=>{w(D)};window.addEventListener("mousemove",v),window.addEventListener("mouseup",O)},Xe=(e,a)=>{a.preventDefault();let o=r.panels[e];if(!o)return;let c=_.get(o.component)?.defaultOptions,v=[];c?.canDrag!==!1&&v.push({label:G(u.floatWindow,h),action:()=>M(e)}),c?.canMinimize!==!1&&v.push({label:G(u.minimizePanel,h),action:()=>N(e)}),v.length>0&&c?.canClose!==!1&&v.push({separator:!0}),c?.canClose!==!1&&v.push({label:G(u.closeTab,h),action:()=>R(e)}),v.length!==0&&I.current?.show({event:a,contextMenu:{items:v}})},qe=(e,a)=>{a.preventDefault(),H(null),I.current?.show({event:a,contextMenu:{items:[{label:G(u.restorePanel,h),action:()=>y(e)},{label:G(u.maximizePanel,h),action:()=>W(e)},{separator:!0},{label:G(u.closePanel,h),action:()=>R(e)}]}})};ie(()=>{let e=Object.keys(r.panels);for(let a of Array.from(Be.keys()))e.includes(a)||Be.delete(a)},[r.panels]),ie(()=>{let e=()=>{r.draggedPanelId!==null&&(T(null),q(null),Me(null))};return window.addEventListener("blur",e),()=>{window.removeEventListener("blur",e)}},[r.draggedPanelId]);let Le=fe(null),[ue,_e]=Ce({width:1024,height:768});ie(()=>{let e=Le.current;if(!e)return;let a=new ResizeObserver(o=>{if(!o||o.length===0)return;let m=o[0].contentRect;_e({width:Math.max(100,m.width),height:Math.max(100,m.height)})});return a.observe(e),()=>{a.disconnect()}},[]),ie(()=>{let e=Le.current;if(!e)return;let a=()=>{let c=wt(e);F(c?"rtl":"ltr")};a();let o=new MutationObserver(a);o.observe(document.documentElement,{attributes:!0,attributeFilter:["dir"]}),o.observe(document.body,{attributes:!0,attributeFilter:["dir"]});let m=e.closest("[dir]");return m&&m!==document.documentElement&&m!==document.body&&o.observe(m,{attributes:!0,attributeFilter:["dir"]}),()=>{o.disconnect()}},[F]),ie(()=>{let e=ue.width,a=ue.height;r.floating.forEach(o=>{let m=typeof o.width=="string"?parseFloat(o.width):o.width,c=typeof o.height=="string"?parseFloat(o.height):o.height,v=typeof o.x=="string"?parseFloat(o.x):o.x,w=typeof o.y=="string"?parseFloat(o.y):o.y,O=m,D=c,k=v,L=w,K=!1;O>e&&(O=Math.max(200,e-20),K=!0),D>a&&(D=Math.max(150,a-40),K=!0);let J=10;if(o.stickyRight)k=e-O-J,K=!0;else{let Q=e-100;k>Q&&(k=Math.max(0,Q),K=!0)}if(o.stickyBottom)L=a-D-J,K=!0;else{let Q=a-40;L>Q&&(L=Math.max(0,Q),K=!0)}K&&E(o.id,{x:k,y:L,width:O,height:D})})},[ue,r.floating,E]),ie(()=>{let e=a=>{if(a.button!==0)return;let o=a.target;if(!o)return;let m=o.closest(".floating-window");if(m){let v=m.getAttribute("data-window-id");v&&(S(v),C(v));return}let c=o.closest(".workspace-panel");if(c){let v=c.getAttribute("data-active-panel-id");v&&S(v)}};return document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[C,S]);let et=(e,a)=>{let o=r.floating.find(J=>J.id===e);if(!o||o.maximized)return;C(e);let m=a.clientX,c=a.clientY,w=a.currentTarget.closest(".floating-window"),O=w?w.offsetLeft:0,D=w?w.offsetTop:0,k=!1,L=J=>{let Q=J.clientX-m,re=J.clientY-c;if(!k&&(Math.abs(Q)>5||Math.abs(re)>5)&&(k=!0,T(e)),k){let ge=O+Q,be=D+re;E(e,{x:ge,y:be,stickyRight:!1,stickyBottom:!1})}},K=()=>{if(k){let J=V.current,Q=ve.current,re=te.current;if(re)b(e,re);else if(Q){let ge=Q.index;Q.side==="right"&&(ge+=1),P(e,Q.leafId,ge)}else J&&d(e,J.leafId,J.position);T(null),q(null),V.current=null,Me(null),ve.current=null,X(null)}window.removeEventListener("mousemove",L),window.removeEventListener("mouseup",K)};window.addEventListener("mousemove",L),window.addEventListener("mouseup",K)},tt=(e,a)=>{a.stopPropagation();let o=r.floating.find(K=>K.id===e);if(!o||o.maximized)return;C(e);let m=a.clientX,c=a.clientY,w=a.currentTarget.closest(".floating-window"),O=w?w.offsetWidth:400,D=w?w.offsetHeight:300,k=K=>{let J=K.clientX-m,Q=K.clientY-c,re=Math.max(200,O+J),ge=Math.max(150,D+Q),be=o.x,Re=o.y,Ee=ue.width,nt=ue.height,Bt=typeof o.x=="string"?parseFloat(o.x):o.x,Ht=typeof o.y=="string"?parseFloat(o.y):o.y,$t=typeof o.width=="string"?parseFloat(o.width):o.width,Gt=typeof o.height=="string"?parseFloat(o.height):o.height,ft=Math.abs(Bt+$t-Ee)<4,mt=Math.abs(Ht+Gt-nt)<4;ft&&(be=Ee-re,be<0&&(be=0,re=Ee)),mt&&(Re=nt-ge,Re<0&&(Re=0,ge=nt)),E(e,{x:be,y:Re,width:re,height:ge,stickyRight:ft,stickyBottom:mt})},L=()=>{window.removeEventListener("mousemove",k),window.removeEventListener("mouseup",L)};window.addEventListener("mousemove",k),window.addEventListener("mouseup",L)},t=e=>{if(f.current){let a=e==="left"?-150:150;f.current.scrollBy({left:a,behavior:"smooth"})}},[s,n]=Ce("dark");return ie(()=>{let e=()=>{let o=document.documentElement.getAttribute("data-bs-theme")==="light"?"light":"dark";n(o)};e();let a=new MutationObserver(e);return a.observe(document.documentElement,{attributes:!0,attributeFilter:["data-bs-theme"]}),()=>a.disconnect()},[]),U("div",{"data-workspace-skin":i,"data-bs-theme":s,style:{display:"flex",flexDirection:"column",width:"100%",height:"100%",overflow:"hidden",userSelect:"none"},dir:r.dir,children:[U("div",{ref:Le,className:r.draggedPanelId?"dragging-active":void 0,style:{flexGrow:1,width:"100%",position:"relative",overflow:"hidden"},children:[r.draggedPanelId!==null&&U(fn,{children:[g("div",{className:"workspace-edge-trigger edge-trigger-left",onMouseEnter:()=>X("left"),onMouseLeave:()=>X(null)}),g("div",{className:"workspace-edge-trigger edge-trigger-right",onMouseEnter:()=>X("right"),onMouseLeave:()=>X(null)}),g("div",{className:"workspace-edge-trigger edge-trigger-top",onMouseEnter:()=>X("top"),onMouseLeave:()=>X(null)}),g("div",{className:"workspace-edge-trigger edge-trigger-bottom",onMouseEnter:()=>X("bottom"),onMouseLeave:()=>X(null)})]}),r.draggedPanelId!==null&&he!==null&&g("div",{className:`workspace-edge-preview edge-preview-${he}`}),g("div",{style:{width:"100%",height:"100%",overflow:"hidden",position:"relative"},children:r.gridRoot?g(Nt,{node:r.gridRoot,path:[],onTabRightClick:Xe,activeDropZone:ce,onHoverDropZone:Ge,onTabDragStart:Ye,hoveredTab:ye,onTabHover:$e,defaultPanelIcon:l,onRequestClosePanel:R}):g("div",{className:"empty-workspace-grid",children:"Grid Empty"})}),r.floating.map(e=>{let a=r.panels[e.id];if(!a)return null;let o=e.maximized,m=r.draggedPanelId===e.id,c=r.activePanelId===e.id,w=_.get(a.component)?.defaultOptions;return U("div",{"data-window-id":e.id,dir:r.dir,onMouseDownCapture:()=>{S(e.id),C(e.id)},className:`floating-window ${o?"maximized":""} ${c?"v2-window-focused":""} ${A??""}`,style:{position:"absolute",left:o?0:typeof e.x=="number"?`${e.x}px`:e.x,top:o?0:typeof e.y=="number"?`${e.y}px`:e.y,width:o?"100%":typeof e.width=="number"?`${e.width}px`:e.width,height:o?"100%":typeof e.height=="number"?`${e.height}px`:e.height,zIndex:e.z,pointerEvents:m?"none":"auto"},children:[U("div",{onDoubleClick:()=>W(e.id),onMouseDown:O=>{w?.canDrag!==!1&&et(e.id,O)},className:"floating-window-titlebar cursor-move",style:{cursor:o||w?.canDrag===!1?"default":"move"},children:[U("span",{className:"floating-window-title",children:[g("span",{className:"window-title-icon",children:w?.icon||l||ct}),U("span",{children:[G(a.title,h),a.dirty?" *":""]})]}),U("div",{className:"fw-titlebar-actions",style:{gap:"var(--header-button-gap, 4px)"},onMouseDown:O=>O.stopPropagation(),children:[w?.renderHeaderActions&&g("div",{className:"window-header-actions",children:w.renderHeaderActions(e.id)}),w?.canDrag!==!1&&g("button",{type:"button",title:G(u.windowAnchoringOptions,h),onClick:O=>{let D=!!e.stickyRight,k=!!e.stickyBottom;I.current?.show({event:O,contextMenu:{items:[{label:G(u.anchorToRightEdge,h),checkbox:{active:!0,enabled:!0,value:D},action:()=>{let L=ue.width,K=typeof e.width=="string"?parseFloat(e.width):e.width;D?E(e.id,{stickyRight:!1}):E(e.id,{x:L-K-10,stickyRight:!0})}},{label:G(u.anchorToBottomEdge,h),checkbox:{active:!0,enabled:!0,value:k},action:()=>{let L=ue.height,K=typeof e.height=="string"?parseFloat(e.height):e.height;k?E(e.id,{stickyBottom:!1}):E(e.id,{y:L-K-10,stickyBottom:!0})}}]}})},className:"custom-tab-btn btn-anchor-tab",children:U("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:[g("circle",{cx:"12",cy:"5",r:"2"}),g("path",{d:"M12 7v7m0 0a4 4 0 0 1-4-4M12 14a4 4 0 0 0 4-4M5 18h14"})]})}),g("button",{type:"button",title:o?G(u.restoreSize,h):G(u.maximize,h),onClick:()=>W(e.id),className:"custom-tab-btn btn-maximize-tab",children:g("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:g("rect",{x:"4",y:"4",width:"16",height:"16",rx:"1.5"})})}),w?.canMinimize!==!1&&g("button",{type:"button",title:G(u.minimize,h),onClick:()=>N(e.id),className:"custom-tab-btn btn-minimize-tab",children:g("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:g("path",{d:"M5 12h14"})})}),w?.canClose!==!1&&g("button",{type:"button",title:G(u.close,h),onClick:()=>R(e.id),className:"custom-tab-btn btn-close-tab",children:g("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:g("path",{d:"M18 6L6 18M6 6l12 12"})})})]})]}),g("div",{className:B??void 0,style:{flexGrow:1,width:"100%",overflow:"hidden",position:"relative",isolation:"isolate"},children:g(Et,{panelId:e.id},e.id)}),!o&&g("div",{onMouseDown:O=>tt(e.id,O),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&&U("div",{className:"taskbar-footer-container",style:{height:"48px",zIndex:100},children:[g("button",{type:"button",onClick:()=>t("left"),className:"taskbar-nav-btn",style:{display:r.minimized.length>4?"block":"none"},children:"\u25C0"}),g("div",{ref:f,className:"taskbar-items-container",style:{scrollSnapType:"x mandatory"},children:r.minimized.map(e=>{let o=_.get(e.component)?.defaultOptions?.icon||l||ct;return g("div",{onClick:()=>{H(null),y(e.id)},onContextMenu:m=>qe(e.id,m),onMouseEnter:m=>{if(Z)return;$.current&&clearTimeout($.current);let c=m.currentTarget.getBoundingClientRect();m.clientX>=c.left&&m.clientX<=c.right&&m.clientY>=c.top&&m.clientY<=c.bottom&&H({id:e.id,rect:c,title:e.title,component:e.component})},onMouseLeave:()=>{$.current=setTimeout(()=>{H(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:g("span",{className:"taskbar-item-icon",children:o})},e.id)})}),z&&St(U("div",{className:"taskbar-item-tooltip",dir:r.dir,style:{position:"fixed",left:`${z.rect.left+z.rect.width/2}px`,top:`${z.rect.top-8}px`,transform:"translateX(-50%) translateY(-100%)",opacity:1,pointerEvents:"auto",zIndex:999999},onMouseEnter:()=>{$.current&&clearTimeout($.current)},onMouseLeave:()=>{H(null)},onClick:()=>{y(z.id),H(null)},children:[U("div",{className:"tooltip-header-row",children:[U("span",{className:"tooltip-title-text text-truncate",style:{maxWidth:"140px"},children:[G(z.title,h),r.panels[z.id]?.dirty?" *":""]}),g("span",{onClick:e=>{e.stopPropagation(),R(z.id),H(null)},title:G(u.closePanel,h),className:"tooltip-close-x",children:g("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:g("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),g(dn,{panelId:z.id})]}),document.body),g("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 o=zt(e);return St(g(cn,{panelId:e,children:g("div",{style:{width:"100%",height:"100%"},children:ln(e,a.component)})}),o,e)}),g(rn,{ref:I,id:"workspace-context-menu",theme:"dark",onShow:()=>ne(!0),onHide:()=>ne(!1)}),r.draggedPanelId!==null&&!r.floating.some(e=>e.id===r.draggedPanelId)&&U("div",{className:"drag-ghost-tab",style:{left:ee.x+12,top:ee.y+12,zIndex:1e5},children:["\u{1F4C4} ",G(r.panels[r.draggedPanelId]?.title,h)||"Tab"]})]})},pn=gn;import{useCallback as He,useRef as Ft,useEffect as mn,useState as hn,useMemo as yn}from"react";import{Fragment as wn,jsx as de,jsxs as gt}from"react/jsx-runtime";var bn=({modal:i,index:l,isTopmost:r})=>{let{close:y,openModal:N,updateInstance:x,setDirty:W}=Te(),E=oe(),C=ae(),{dir:M}=pe(),{modalClass:T,modalBodyClass:d}=Pe(),P=Ft(null),{id:b,Component:S,props:F,options:p,dirty:h,dirtyOptions:u}=i,R=p,[A,B]=hn(R.icon||null),f=Ft(R);f.current=R;let I=G(R.title,E),z=He(async j=>{if(j?.force){y(b);return}if(P.current){if(!await P.current())return;y(b);return}if(h){N(ze,{title:u?.title||C.unsavedChangesTitle,message:u?.message||{id:C.unsavedChangesMessage.id,defaultMessage:C.unsavedChangesMessage.defaultMessage,values:{title:I}},alert:u?.alert,alertType:u?.alertType||"danger",useYesNoTitles:!0,onOK:()=>y(b)},{size:"small"});return}y(b)},[y,N,b,h,u,I,C]),H=He((j,te)=>W(b,j,te),[W,b]),$=He(j=>x(b,{options:{...f.current,title:j}}),[x,b]),Z=He(j=>B(j),[]),ne=He(j=>(P.current=j,()=>{P.current=null}),[]),ce=yn(()=>({requestClose:z,setDirty:H,setTitle:$,setIcon:Z,onCloseRequested:ne,containerType:"modal",instanceId:b}),[z,H,$,Z,ne,b]),q=h?`${I} *`:I,V=R.size?`v2-modal-size-${R.size}`:"v2-modal-size-auto",ee=R.closable!==!1;mn(()=>{if(!r||!ee)return;let j=te=>{te.key==="Escape"&&(te.stopPropagation(),z())};return document.addEventListener("keydown",j),()=>document.removeEventListener("keydown",j)},[z,ee,r]);let he=1e4+l*10;return gt("div",{className:"v2-modal-overlay",style:{zIndex:he},dir:M,children:[de("div",{className:"v2-modal-curtain",onClick:ee?()=>z():void 0}),gt("div",{className:`v2-modal-window ${V} ${T??""}`,children:[gt("div",{className:"v2-modal-header",children:[A&&de("div",{className:"v2-modal-icon",children:A}),de("h4",{className:"v2-modal-title",children:q}),ee&&de("button",{className:"v2-modal-close-button",onClick:()=>z(),title:E(C.closeTooltip),type:"button",children:de("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:de("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),de("div",{className:`v2-modal-body ${d??""}`,children:de(Ie,{value:ce,children:de(S,{...F,panelId:b})})})]})]})},vn=()=>{let{modals:i}=we();return i.length===0?null:de(wn,{children:i.map((l,r)=>de(bn,{modal:l,index:r,isTopmost:r===i.length-1},l.id))})},Pn=vn;import{useCallback as Fe,useRef as Ot,useEffect as Wt,useState as Cn,useMemo as xn}from"react";import{Fragment as Tn,jsx as se,jsxs as pt}from"react/jsx-runtime";var Ze=({panel:i,position:l,defaultWidth:r})=>{let{close:y,openModal:N,updateInstance:x,setDirty:W,registerCloseHandler:E,unregisterCloseHandler:C}=Te(),{modals:M}=we(),T=oe(),d=ae(),{dir:P}=pe(),{sidePanelClass:b,sidePanelBodyClass:S}=Pe(),F=Ot(null),{id:p,Component:h,props:u,options:R,dirty:A,dirtyOptions:B}=i,f=R,[I,z]=Cn(f.icon||null),H=Ot(f);H.current=f;let $=G(f.title,T),Z=Fe(async X=>{if(X?.force){y(p);return}if(F.current){if(!await F.current())return;y(p);return}if(A){N(ze,{title:B?.title||d.unsavedChangesTitle,message:B?.message||{id:d.unsavedChangesMessage.id,defaultMessage:d.unsavedChangesMessage.defaultMessage,values:{title:$}},alert:B?.alert,alertType:B?.alertType||"danger",useYesNoTitles:!0,onOK:()=>y(p)},{size:"small"});return}y(p)},[y,N,p,A,B,$,d]),ne=Fe(async()=>F.current?await F.current():!A,[A]);Wt(()=>(E(p,ne),()=>C(p)),[p,ne,E,C]);let ce=Fe((X,ye)=>W(p,X,ye),[W,p]),q=Fe(X=>x(p,{options:{...H.current,title:X}}),[x,p]),V=Fe(X=>z(X),[]),ee=Fe(X=>(F.current=X,()=>{F.current=null}),[]),me=xn(()=>({requestClose:Z,setDirty:ce,setTitle:q,setIcon:V,onCloseRequested:ee,containerType:l==="left"?"left-panel":"right-panel",instanceId:p}),[Z,ce,q,V,ee,l,p]),he=A?`${$} *`:$;Wt(()=>{let X=ye=>{ye.key==="Escape"&&M.length===0&&Z()};return document.addEventListener("keydown",X),()=>document.removeEventListener("keydown",X)},[Z,M.length]);let j=f.width||r||400,te=typeof j=="number"?`${j}px`:j;return se("div",{className:`v2-side-panel v2-side-panel-${l} v2-side-panel-visible ${b??""}`,style:{width:te},dir:P,children:pt("div",{className:"v2-side-panel-window",children:[pt("div",{className:"v2-side-panel-header",children:[I&&se("div",{className:"v2-side-panel-icon",children:I}),se("h4",{className:"v2-side-panel-title",children:he}),se("button",{className:"v2-side-panel-close-button",onClick:()=>Z(),title:T(d.closeTooltip),type:"button",children:se("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:se("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),se("div",{className:`v2-side-panel-body ${S??""}`,children:se(Ie,{value:me,children:se(h,{...u,panelId:p})})})]})})},Mn=({defaultWidth:i})=>{let{leftPanel:l,rightPanel:r}=we();return pt(Tn,{children:[l&&se(Ze,{panel:l,position:"left",defaultWidth:i},l.id),r&&se(Ze,{panel:r,position:"right",defaultWidth:i},r.id)]})},Rn=({defaultWidth:i})=>{let{leftPanel:l}=we();return l?se(Ze,{panel:l,position:"left",defaultWidth:i},l.id):null},kn=({defaultWidth:i})=>{let{rightPanel:l}=we();return l?se(Ze,{panel:l,position:"right",defaultWidth:i},l.id):null},In=Mn;import{useState as Dt,useEffect as Qe,useRef as Sn,useCallback as At,useImperativeHandle as zn,forwardRef as Ln}from"react";import{Fragment as Nn,jsx as xe,jsxs as Ve}from"react/jsx-runtime";var En=Ln(function({position:l="right",tabs:r,drawerWidth:y="220px",activeTabId:N,onActiveTabChange:x,children:W},E){let C=N!==void 0,M=oe(),T=ae(),[d,P]=Dt(null),b=C?N:d,[S,F]=Dt(()=>{let f=new Set;for(let I of r)I.eagerMount&&f.add(I.id);return f});Qe(()=>{let f=r.filter(I=>I.eagerMount&&!S.has(I.id));f.length>0&&F(I=>{let z=new Set(I);for(let H of f)z.add(H.id);return z})},[r]);let p=Sn(b??null);Qe(()=>{p.current=b??null},[b]);let h=At(f=>{C||P(f),x?.(f)},[C,x]);zn(E,()=>({openTab:f=>h(f),closeDrawer:()=>h(null),getActiveTab:()=>p.current}),[h]);let u=f=>{h(b===f?null:f)},R=At(()=>h(null),[h]);Qe(()=>{b&&!S.has(b)&&F(f=>{let I=new Set(f);return I.add(b),I})},[b,S]),Qe(()=>{b===null&&F(f=>{let I=!1,z=new Set(f);for(let H of f){let $=r.find(Z=>Z.id===H);$&&!$.eagerMount&&!$.preserveState&&(z.delete(H),I=!0)}return I?z:f})},[b,r]);let A=xe("div",{className:`sidebar-tabs-strip ${l}`,style:{width:"56px",height:"100%"},children:r.map(f=>{let I=b===f.id;return xe("button",{type:"button",onClick:()=>u(f.id),className:`sidebar-tab-btn ${I?"active":""}`,title:f.label,"aria-pressed":I,children:f.icon},f.id)})}),B=xe("div",{className:`sidebar-content-drawer h-100 ${l}`,style:{width:b?y:"0px",minWidth:b?y:"0px",overflow:"hidden",flexShrink:0},children:r.map(f=>{if(!S.has(f.id))return null;let z=b===f.id,H=()=>h(f.id);return Ve("div",{style:{display:z?"flex":"none",flexDirection:"column",height:"100%",width:"100%"},children:[Ve("div",{className:"sidebar-drawer-header",children:[xe("span",{className:"sidebar-header-title",children:f.label}),xe("button",{type:"button",onClick:R,className:"sidebar-close-btn",title:M(T.closePanelTooltip),"aria-label":M(T.closePanelTooltip),children:Ve("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[xe("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),xe("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),xe("div",{className:"sidebar-drawer-body",children:f.renderContent(f.id,R,H)})]},f.id)})});return Ve(Nn,{children:[l==="left"&&A,l==="left"&&B,W,l==="right"&&B,l==="right"&&A]})});export{ze as ConfirmationForm,at as FormContainerContext,Ie as FormContainerProvider,Rn as LeftPanelRenderer,Pn as ModalStackRenderer,on as PanelProvider,_ as PanelRegistry,kn as RightPanelRenderer,In as SidePanelRenderer,En as Sidebar,pn as WindowManager,jt as WindowManagerProvider,Oe as defaultPredefinedMessages,G as formatLabel,rt as useFormContainer,oe as useFormatMessage,Te as usePanelActions,Jt as usePanelContext,we as usePanelState,ae as usePredefinedMessages,Pe as useStyleClasses,ke as useWindowManagerActions,pe as useWindowManagerState};
1
+ import ht,{useState as Pe,useRef as ge,useEffect as te}from"react";import{createPortal as Dt}from"react-dom";import{createContext as Te,useContext as ze,useState as jt,useRef as Be,useMemo as dt,useCallback as q,useEffect as Mt}from"react";var De=class{registry=new Map;register(i,r,y){this.registry.set(i,{Component:r,defaultOptions:y})}get(i){return this.registry.get(i)}getRegisteredIds(){return Array.from(this.registry.keys())}},et=new De;var Ae={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"}};import{jsx as Se}from"react/jsx-runtime";var wt=Te(null),xt=Te(null),Rt=Te(null),kt=Te(Ae),It=Te({}),he=()=>ze(It),St=Te(et),tt=()=>ze(St),ct=class{listeners={};subscribe(i,r){return this.listeners[i]||(this.listeners[i]=[]),this.listeners[i].push(r),()=>{this.listeners[i]=this.listeners[i].filter(y=>y!==r)}}publish(i,r){this.listeners[i]&&this.listeners[i].forEach(y=>y(r))}},Ut={type:"leaf",id:"group-default",panels:[],activePanelId:null};function Jt(s){if(s)try{let i=JSON.parse(s);if(i.gridRoot&&Array.isArray(i.floating)&&Array.isArray(i.minimized)&&i.panels)return{gridRoot:i.gridRoot,floating:i.floating,minimized:i.minimized,panels:i.panels,activePanelId:Object.keys(i.panels)[0]??null}}catch{}return{gridRoot:Ut,floating:[],minimized:[],panels:{},activePanelId:null}}var Zt=({children:s,client:i,formatMessage:r,predefinedMessages:y,dir:E,modalClass:R,modalBodyClass:A,sidePanelClass:D,sidePanelBodyClass:M,windowClass:w,windowBodyClass:O})=>{let u=Be(i?.registry??et).current,I=i?.config.formatMessage??r,P=i?.config.predefinedMessages??y,k=i?.config.dir??E,[N,l]=jt(()=>({...Jt(i?.initialState??null),draggedPanelId:null,dir:k||"ltr",isRtl:k==="rtl"})),v=Be(N);v.current=N;let m=Be({}),p=dt(()=>({...Ae,...P}),[P]),B=Be(new ct),L=Be(1e3),h=q((e,t)=>B.current.subscribe(e,t),[]),T=q((e,t)=>{B.current.publish(e,t)},[]),$=q((e,t)=>{let n=typeof e.x=="string"?parseFloat(e.x):e.x,o=typeof e.y=="string"?parseFloat(e.y):e.y,d=typeof e.width=="string"?parseFloat(e.width):e.width,c=typeof e.height=="string"?parseFloat(e.height):e.height;isNaN(n)&&(n=300),isNaN(o)&&(o=150),isNaN(d)&&(d=450),isNaN(c)&&(c=350);let b=z=>t.some(H=>{let F=typeof H.x=="string"?parseFloat(H.x):H.x,G=typeof H.y=="string"?parseFloat(H.y):H.y;return!H.maximized&&Math.abs(F-z.x)<20&&Math.abs(G-z.y)<20}),f=0;for(;b({x:n,y:o})&&f<10;)n+=30,o+=30,f++;let C=Math.max(100,window.innerWidth||1024),x=Math.max(100,window.innerHeight||768);return(n+d>C||o+c>x)&&(n=100+f%5*30,o=100+f%5*30),n=Math.max(0,Math.min(n,C-100)),o=Math.max(0,Math.min(o,x-40)),{x:n,y:o,width:d,height:c}},[]),S=q(e=>{L.current+=1;let t=L.current;l(n=>{let o=n.panels[e];if(!o)return n;if(o.state==="floating")return{...n,floating:n.floating.map(d=>d.id===e?{...d,z:t}:d),activePanelId:e};if(o.state==="docked"){let d=c=>c.type==="leaf"?c.panels.includes(e)?{...c,activePanelId:e}:c:{...c,children:c.children.map(d)};return{...n,gridRoot:d(n.gridRoot),activePanelId:e}}return{...n,activePanelId:e}})},[]),W=(e,t)=>{if(e.type==="leaf"){let n=e.panels.indexOf(t);if(n===-1)return e;let o=e.panels.filter(b=>b!==t),d=e.activePanelId===t?o[n]||o[n-1]||o[0]||null:e.activePanelId,c={...e,panels:o,activePanelId:d};return o.length===0&&!e.keepOnEmpty?null:c}else{let n=e.children.map(c=>W(c,t)).filter(c=>c!==null);if(n.length===0)return null;if(n.length===1)return n[0];let o=e.sizes.slice(0,n.length),d=o.reduce((c,b)=>c+b,0);return{...e,children:n,sizes:o.map(c=>c/d)}}},Y=(e,t,n)=>{if(e.type==="leaf"){if(e.id===t){let o=e.panels.includes(n)?e.panels:[...e.panels,n];return{...e,panels:o,activePanelId:n}}return e}else return{...e,children:e.children.map(o=>Y(o,t,n))}},Q=e=>{if(e.type==="leaf")return e.id;for(let t of e.children){let n=Q(t);if(n)return n}return null},oe=q((e,t,n)=>{l(o=>{let d=o.panels[e],c=u.get(t),b=n?.title||n?.title||c?.defaultOptions?.title||e,f=n?.initialTarget||c?.defaultOptions?.initialTarget||"docked",C=c?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350};if(d)if(d.state==="minimized"){let F=o.minimized.filter(G=>G.id!==e);if(f==="floating"||!o.gridRoot){L.current+=1;let G=$(C,o.floating);return{...o,minimized:F,floating:[...o.floating,{...G,id:e,z:L.current}],panels:{...o.panels,[e]:{...d,state:"floating"}}}}else{let G=Q(o.gridRoot)||"group-default";return{...o,minimized:F,gridRoot:Y(o.gridRoot,G,e),panels:{...o.panels,[e]:{...d,state:"docked"}}}}}else{if(d.state==="floating")return S(e),o;{let F=G=>G.type==="leaf"?G.panels.includes(e)?{...G,activePanelId:e}:G:{...G,children:G.children.map(F)};return{...o,gridRoot:F(o.gridRoot)}}}let z={id:e,title:b,component:t,state:f==="tabbed"?"docked":f},H={...o.panels,[e]:z};if(f==="floating"){L.current+=1;let F=$(C,o.floating),G=n?.stickyRight??c?.defaultOptions?.defaultStickyRight??!1,ae=n?.stickyBottom??c?.defaultOptions?.defaultStickyBottom??!1,me=Math.max(100,window.innerWidth||1024),Ie=Math.max(100,window.innerHeight||768),Oe=typeof F.width=="string"?parseFloat(F.width):F.width,We=typeof F.height=="string"?parseFloat(F.height):F.height,Ze=F.x,Qe=F.y,Ve=10;return G&&(Ze=me-Oe-Ve),ae&&(Qe=Ie-We-Ve),{...o,floating:[...o.floating,{...F,id:e,z:L.current,x:Ze,y:Qe,stickyRight:G,stickyBottom:ae}],panels:H}}else{let F=Q(o.gridRoot)||"group-default";return{...o,gridRoot:Y(o.gridRoot,F,e),panels:H}}})},[$,S]),V=q(e=>{l(t=>{let n=t.panels[e];if(!n||u.get(n.component)?.defaultOptions?.canClose===!1)return t;delete m.current[e];let d={...t.panels};delete d[e];let c=W(t.gridRoot,e);return{...t,gridRoot:c||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:t.floating.filter(b=>b.id!==e),minimized:t.minimized.filter(b=>b.id!==e),panels:d}})},[]),_=q((e,t)=>{m.current[e]=t},[]),U=q(e=>{delete m.current[e]},[]),pe=q((e,t,n)=>{l(o=>{let d=o.panels[e];return d?{...o,panels:{...o.panels,[e]:{...d,dirty:t,dirtyOptions:n}}}:o})},[]),de=q((e,t)=>{l(n=>{let o=n.panels[e];return o?{...n,panels:{...n.panels,[e]:{...o,title:t}}}:n})},[]),j=q(async(e,t)=>{if(t?.force){V(e);return}let n=m.current[e];if(n&&!await n())return;let o=v.current.panels[e];if(o?.dirty)if(t?.onConfirm){if(!await t.onConfirm(o.dirtyOptions))return}else return;V(e)},[V]),ie=q(e=>{l(t=>{let n=t.panels[e];if(!n||n.state==="minimized"||u.get(n.component)?.defaultOptions?.canMinimize===!1)return t;let d,c;if(n.state==="floating"){let f=t.floating.find(C=>C.id===e);f&&(d={x:f.x,y:f.y,width:f.width,height:f.height,stickyRight:f.stickyRight,stickyBottom:f.stickyBottom})}else if(n.state==="docked"){let f=C=>{if(C.type==="leaf")return C.panels.includes(e)?C.id:null;for(let x of C.children){let z=f(x);if(z)return z}return null};c=f(t.gridRoot)}let b=W(t.gridRoot,e);return{...t,gridRoot:b||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:t.floating.filter(f=>f.id!==e),minimized:[...t.minimized,{id:e,title:n.title,component:n.component}],panels:{...t.panels,[e]:{...n,state:"minimized",previousState:n.state,lastFloatingRect:d,lastLeafId:c}}}})},[]),J=q(e=>{l(t=>{let n=t.panels[e];if(!n||n.state!=="minimized")return t;let o=t.minimized.filter(c=>c.id!==e);if((n.previousState||"docked")==="floating"){L.current+=1;let c=u.get(n.component),b=n.lastFloatingRect||c?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},f=$(b,t.floating);return{...t,minimized:o,floating:[...t.floating,{...f,id:e,z:L.current,stickyRight:!!n.lastFloatingRect?.stickyRight,stickyBottom:!!n.lastFloatingRect?.stickyBottom}],panels:{...t.panels,[e]:{...n,state:"floating"}}}}else{let c=(x,z)=>x.type==="leaf"?x.id===z:x.children.some(H=>c(H,z)),b=n.lastLeafId&&c(t.gridRoot,n.lastLeafId),f=u.get(n.component),C=f?.defaultOptions?.canDrag!==!1;if(b)return{...t,minimized:o,gridRoot:Y(t.gridRoot,n.lastLeafId,e),panels:{...t.panels,[e]:{...n,state:"docked"}}};if(C){L.current+=1;let x=n.lastFloatingRect||f?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},z=$(x,t.floating);return{...t,minimized:o,floating:[...t.floating,{...z,id:e,z:L.current,stickyRight:!!n.lastFloatingRect?.stickyRight,stickyBottom:!!n.lastFloatingRect?.stickyBottom}],panels:{...t.panels,[e]:{...n,state:"floating"}}}}else{let x=Q(t.gridRoot)||"group-default";return{...t,minimized:o,gridRoot:Y(t.gridRoot,x,e),panels:{...t.panels,[e]:{...n,state:"docked"}}}}}})},[$]),Z=q((e,t)=>{l(n=>{let o=n.panels[e];if(!o||u.get(o.component)?.defaultOptions?.canDrag===!1)return n;let c=u.get(o.component),b=t||c?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},f=W(n.gridRoot,e);L.current+=1;let C=$(b,n.floating);return{...n,gridRoot:f||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:[...n.floating,{...C,id:e,z:L.current}],panels:{...n.panels,[e]:{...o,state:"floating"}}}})},[$]),Ge=q((e,t)=>{l(n=>{let o=n.panels[e];if(!o)return n;let d=n.floating.filter(f=>f.id!==e),c=W(n.gridRoot,e),b=t||Q(c||n.gridRoot)||"group-default";return{...n,gridRoot:Y(c||n.gridRoot,b,e),floating:d,panels:{...n.panels,[e]:{...o,state:"docked"}}}})},[]),ve=(e,t,n,o)=>{if(e.type==="leaf"){if(e.id===t){let d={type:"leaf",id:`group-split-${Date.now()}-${Math.floor(Math.random()*1e3)}`,panels:[n],activePanelId:n};return{type:"branch",orientation:o==="left"||o==="right"?"horizontal":"vertical",sizes:[.5,.5],children:o==="left"||o==="top"?[d,e]:[e,d]}}return e}else return{...e,children:e.children.map(d=>ve(d,t,n,o))}},fe=q(e=>{l(t=>({...t,draggedPanelId:e}))},[]),Ye=q((e,t,n)=>{l(o=>{let d=o.panels[e];if(!d)return o;let c=o.floating.filter(C=>C.id!==e),b=W(o.gridRoot,e),f;return n==="center"?f=Y(b||o.gridRoot,t,e):f=ve(b||o.gridRoot,t,e,n),{...o,gridRoot:f,floating:c,panels:{...o.panels,[e]:{...d,state:"docked"}},draggedPanelId:null}})},[]),Xe=q((e,t)=>{l(n=>{let o=n.panels[e];if(!o)return n;let d=n.floating.filter(z=>z.id!==e),c=W(n.gridRoot,e),b={type:"leaf",id:`group-edge-${Date.now()}-${Math.floor(Math.random()*1e3)}`,panels:[e],activePanelId:e},f=t==="left"||t==="right"?"horizontal":"vertical",C=t==="left"||t==="top"?[b,c||n.gridRoot]:[c||n.gridRoot,b];return{...n,gridRoot:{type:"branch",orientation:f,sizes:t==="left"||t==="top"?[.3,.7]:[.7,.3],children:C},floating:d,panels:{...n.panels,[e]:{...o,state:"docked"}},draggedPanelId:null}})},[]),qe=q((e,t,n)=>{l(o=>{let d=o.panels[e];if(!d)return o;let c=W(o.gridRoot,e),b=x=>{if(x.type==="leaf"){if(x.id===t){let z=x.panels.filter(G=>G!==e),H=Math.max(0,Math.min(n,z.length)),F=[...z];return F.splice(H,0,e),{...x,panels:F,activePanelId:e}}return x}else return{...x,children:x.children.map(b)}},f=b(c||o.gridRoot),C=o.floating.filter(x=>x.id!==e);return{...o,gridRoot:f,floating:C,panels:{...o.panels,[e]:{...d,state:"docked"}},draggedPanelId:null}})},[]),_e=q(e=>{l(t=>{let n=d=>{if(d.type==="leaf")return d.id===e&&d.canClose!==!1?null:d;{let c=d.children.map(C=>n(C)).filter(C=>C!==null);if(c.length===0)return null;if(c.length===1)return c[0];let b=d.sizes.slice(0,c.length),f=b.reduce((C,x)=>C+x,0);return{...d,children:c,sizes:b.map(C=>C/f)}}},o=n(t.gridRoot);return{...t,gridRoot:o||{type:"leaf",id:"group-default",panels:[],activePanelId:null}}})},[]),Ke=q(e=>{l(t=>({...t,floating:t.floating.map(n=>n.id===e?{...n,maximized:!n.maximized}:n)}))},[]),ke=q((e,t)=>{let n=(o,d)=>{if(o.type==="leaf")return o;if(d===e.length)return{...o,sizes:t};let c=e[d],b=o.children.map((f,C)=>C===c?n(f,d+1):f);return{...o,children:b}};l(o=>({...o,gridRoot:n(o.gridRoot,0)}))},[]),ce=q((e,t)=>{l(n=>({...n,floating:n.floating.map(o=>o.id===e?{...o,...t}:o)}))},[]),je=q(()=>JSON.stringify({gridRoot:v.current.gridRoot,floating:v.current.floating,minimized:v.current.minimized,panels:v.current.panels}),[]),Ue=q(e=>{try{let t=JSON.parse(e);if(t.gridRoot&&t.floating&&t.minimized&&t.panels){let n=Object.keys(t.panels)[0]||null;l(o=>({...o,gridRoot:t.gridRoot,floating:t.floating,minimized:t.minimized,panels:t.panels,draggedPanelId:null,activePanelId:n}))}}catch(t){console.error("Failed to parse layout configuration:",t)}},[]),Je=q(e=>{l(t=>t.activePanelId===e?t:{...t,activePanelId:e})},[]),Ne=q(e=>{l(t=>t.dir===e?t:{...t,dir:e,isRtl:e==="rtl"})},[]);Mt(()=>{k&&l(e=>e.dir===k?e:{...e,dir:k,isRtl:k==="rtl"})},[k]);let Fe=dt(()=>({openPanel:oe,closePanel:V,minimizePanel:ie,restorePanel:J,floatPanel:Z,dockPanel:Ge,maximizePanel:Ke,updateSplitSizes:ke,updateFloatingPosition:ce,bringToFront:S,saveLayout:je,loadLayout:Ue,publish:T,subscribe:h,setDraggedPanelId:fe,dockPanelToGroup:Ye,movePanelOrder:qe,closeLeafGroup:_e,registerCloseGuard:_,unregisterCloseGuard:U,setPanelDirty:pe,updatePanelTitle:de,requestClosePanel:j,dockPanelToWorkspaceEdge:Xe,setActivePanel:Je,setDirection:Ne}),[oe,V,ie,J,Z,Ge,Ke,ke,ce,S,je,Ue,T,h,fe,Ye,qe,_e,_,U,pe,de,j,Xe,Je,Ne]),lt=e=>{let t=e.defaultMessage||e.id;return e.values&&Object.entries(e.values).forEach(([n,o])=>{t=t.replace(`{${n}}`,String(o))}),t},a=dt(()=>({modalClass:R,modalBodyClass:A,sidePanelClass:D,sidePanelBodyClass:M,windowClass:w,windowBodyClass:O}),[R,A,D,M,w,O]);return Mt(()=>{if(i)return i._connect(Fe),()=>{i._disconnect()}},[i,Fe]),Se(It.Provider,{value:a,children:Se(St.Provider,{value:u,children:Se(wt.Provider,{value:N,children:Se(xt.Provider,{value:Fe,children:Se(Rt.Provider,{value:I||lt,children:Se(kt.Provider,{value:p,children:s})})})})})})},ue=()=>{let s=ze(wt);if(!s)throw new Error("useWindowManagerState must be used within WindowManagerProvider");return s},Ce=()=>{let s=ze(xt);if(!s)throw new Error("useWindowManagerActions must be used within WindowManagerProvider");return s},ee=()=>ze(Rt)||(i=>{let r=i.defaultMessage||i.id;return i.values&&Object.entries(i.values).forEach(([y,E])=>{r=r.replace(`{${y}}`,String(E))}),r}),X=(s,i)=>s?typeof s=="string"?s:i(s):"",Qt=()=>{let{publish:s,subscribe:i}=Ce();return{publish:s,subscribe:i}},se=()=>ze(kt);function Tt(s){if(!s)return typeof document<"u"?document.documentElement.dir?.toLowerCase()==="rtl"||document.body.dir?.toLowerCase()==="rtl":!1;let i=s.closest("[dir]");return i?i.getAttribute("dir")?.toLowerCase()==="rtl":document.documentElement.dir?.toLowerCase()==="rtl"||document.body.dir?.toLowerCase()==="rtl"}import{JsonContextMenu as cn}from"replace-react-contexify";import"replace-react-contexify/styles.css";import{createContext as Vt,useContext as en}from"react";var tn={requestClose:()=>{console.warn("FormContainerContract: requestClose called but no container is present")},setDirty:()=>{},onCloseRequested:()=>()=>{},setTitle:()=>{},setIcon:()=>{},containerType:"standalone",instanceId:"standalone",onClose:()=>()=>{},onMinimize:()=>()=>{},onRestore:()=>()=>{},onResize:()=>()=>{}},ut=Vt(tn),Me=ut.Provider,gt=()=>en(ut);import{createContext as Et,useContext as Nt,useState as nn,useCallback as re,useMemo as on,useRef as sn}from"react";import{jsx as Lt}from"react/jsx-runtime";var an=0,pt=()=>`panel-${++an}-${Date.now()}`,nt=new Map,zt={leftPanel:null,rightPanel:null,modals:[]},Ft=Et(null),Ot=Et(null),rn=({children:s})=>{let[i,r]=nn(zt),y=sn(i);y.current=i;let E=re((l,v)=>{nt.set(l,v)},[]),R=re(l=>{nt.delete(l)},[]),A=re(async(l,v,m={})=>{let p=y.current.leftPanel;if(p){let h=nt.get(p.id);if(h&&!await h())return null}let B=pt(),L={id:B,Component:l,props:v,containerType:"left-panel",options:m};return r(h=>({...h,leftPanel:L})),B},[]),D=re(async(l,v,m={})=>{let p=y.current.rightPanel;if(p){let h=nt.get(p.id);if(h&&!await h())return null}let B=pt(),L={id:B,Component:l,props:v,containerType:"right-panel",options:m};return r(h=>({...h,rightPanel:L})),B},[]),M=re((l,v,m={})=>{let p=pt(),B=v.title,L={...m,title:m.title||B||"Confirmation"},h={id:p,Component:l,props:v,containerType:"modal",options:L};return r(T=>({...T,modals:[...T.modals,h]})),p},[]),w=re(l=>{r(v=>({leftPanel:v.leftPanel?.id===l?null:v.leftPanel,rightPanel:v.rightPanel?.id===l?null:v.rightPanel,modals:v.modals.filter(m=>m.id!==l)}))},[]),O=re(()=>{r(zt)},[]),u=re(()=>{r(l=>({...l,modals:[]}))},[]),I=re(l=>i.leftPanel?.id===l?i.leftPanel:i.rightPanel?.id===l?i.rightPanel:i.modals.find(v=>v.id===l),[i]),P=re((l,v)=>{r(m=>({leftPanel:m.leftPanel?.id===l?{...m.leftPanel,...v}:m.leftPanel,rightPanel:m.rightPanel?.id===l?{...m.rightPanel,...v}:m.rightPanel,modals:m.modals.map(p=>p.id===l?{...p,...v}:p)}))},[]),k=re((l,v,m)=>{P(l,{dirty:v,dirtyOptions:m})},[P]),N=on(()=>({openLeftPanel:A,openRightPanel:D,openModal:M,close:w,closeAll:O,closeAllModals:u,getInstance:I,updateInstance:P,setDirty:k,registerCloseHandler:E,unregisterCloseHandler:R}),[A,D,M,w,O,u,I,P,k,E,R]);return Lt(Ft.Provider,{value:i,children:Lt(Ot.Provider,{value:N,children:s})})},ye=()=>{let s=Nt(Ft);if(!s)throw new Error("usePanelState must be used within PanelProvider");return s},we=()=>{let s=Nt(Ot);if(!s)throw new Error("usePanelActions must be used within PanelProvider");return s};import{useEffect as Wt,useRef as ln}from"react";import{jsx as xe,jsxs as ft}from"react/jsx-runtime";var dn=({title:s,message:i,alert:r,alertType:y="info",useYesNoTitles:E=!1,onOK:R,onCancel:A})=>{let{requestClose:D,setIcon:M,setTitle:w}=gt(),O=ee(),u=se(),I=ln(null);Wt(()=>{if(s){let m=typeof s=="string"?s:O(s);w(m)}M&&M(xe("span",{children:"\u2753"}))},[s,w,M,O]),Wt(()=>{I.current?.focus()},[]);let P=typeof i=="string"?i:O(i),k=O(E?u.no:u.cancel),N=O(E?u.yes:u.ok),l=m=>{m.preventDefault(),R?.(),D()},v=()=>{A?.(),D()};return ft("form",{onSubmit:l,className:"confirmation-form-body",children:[r&&ft("div",{className:`confirmation-alert confirmation-alert-${y}`,children:[xe("span",{children:"\u2139\uFE0F"}),xe("span",{children:r})]}),xe("div",{style:{fontSize:"0.9rem",color:"inherit",lineHeight:1.5},children:P}),xe("hr",{style:{marginTop:"0.5rem",marginBottom:"0.5rem",opacity:.1}}),ft("div",{className:"confirmation-actions",children:[xe("button",{type:"button",className:"dw-btn dw-btn-sm dw-btn-outline",onClick:v,children:k}),xe("button",{type:"submit",className:"dw-btn dw-btn-sm dw-btn-primary",ref:I,children:N})]})]})},Re=dn;import{Fragment as yn,jsx as g,jsxs as K}from"react/jsx-runtime";var He=new Map,it="preserved-dom-container",mt=K("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:[g("rect",{x:"3",y:"3",width:"7",height:"9",rx:"1"}),g("rect",{x:"14",y:"3",width:"7",height:"5",rx:"1"}),g("rect",{x:"14",y:"12",width:"7",height:"9",rx:"1"}),g("rect",{x:"3",y:"16",width:"7",height:"5",rx:"1"})]}),At=s=>{let i=He.get(s);return i||(i=document.createElement("div"),i.style.width="100%",i.style.height="100%",He.set(s,i)),i},un=(s,i,r)=>{let y=r.get(i);if(!y)return K("div",{className:"dw-unregistered-panel",style:{border:"2px dashed #dc3545"},children:[g("h6",{style:{fontWeight:700,marginBottom:"0.25rem"},children:"\u26A0\uFE0F Component Unregistered"}),K("span",{style:{fontSize:"0.875rem",color:"var(--text-secondary, #94a3b8)"},children:["Key: ",i]})]});let E=y.Component;return g(E,{panelId:s})},Bt=new Map,Le=new Map,ot=s=>{let i=Le.get(s);return i||(i={onClose:new Set,onMinimize:new Set,onRestore:new Set,onResize:new Set},Le.set(s,i)),i},Ht=({panelId:s})=>{let i=ge(null);return te(()=>{let r=i.current;if(!r)return;let y=At(s);r.appendChild(y);let E=new ResizeObserver(R=>{for(let A of R){let{width:D,height:M}=A.contentRect;if(D>0&&M>0){Bt.set(s,{width:D,height:M});let w=Le.get(s);w&&w.onResize.forEach(O=>O(D,M))}}});return E.observe(r),()=>{E.disconnect();let R=document.getElementById(it);R||(R=document.createElement("div"),R.id=it,R.style.display="none",document.body.appendChild(R)),R.appendChild(y)}},[s]),g("div",{ref:i,style:{width:"100%",height:"100%"}})},gn=({panelId:s})=>{let i=ue(),r=tt(),y=ee(),E=ge(null),R=i.panels[s],A=R?r.get(R.component):null,D=A?.defaultOptions?.disableLivePreview||!1,M=Bt.get(s)||{width:800,height:500},w=M.width,O=M.height,P=Math.min(220/w,140/O);if(te(()=>{if(D)return;let k=E.current;if(!k)return;let N=He.get(s);if(N)return k.appendChild(N),()=>{let l=document.getElementById(it);l||(l=document.createElement("div"),l.id=it,l.style.display="none",document.body.appendChild(l)),l.appendChild(N)}},[s,D]),D){let k=w*P,N=O*P,l=R?.title||A?.defaultOptions?.title||"Panel",v=X(l,y),m=(Array.from(v)[0]||"P").toUpperCase();return g("div",{className:"taskbar-item-preview-frame",style:{width:`${k}px`,height:`${N}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:g("div",{style:{fontSize:"2rem",fontWeight:600,color:"var(--panel-title-color, var(--panel-text, rgba(255, 255, 255, 0.85)))",userSelect:"none"},children:m})})}return g("div",{className:"taskbar-item-preview-frame",style:{width:`${w*P}px`,height:`${O*P}px`},children:g("div",{ref:E,className:"taskbar-item-preview-host",style:{width:`${w}px`,height:`${O}px`,transform:`scale(${P})`,transformOrigin:"top left",position:"absolute",top:0,left:0,"--preview-scale":P}})})},pn=({panelId:s,children:i})=>{let r=ue(),{requestClosePanel:y,setPanelDirty:E,registerCloseGuard:R,unregisterCloseGuard:A,updatePanelTitle:D}=Ce(),M=r.minimized.some(u=>u.id===s),w=ge(M);te(()=>{let u=Le.get(s);u&&(M&&!w.current?u.onMinimize.forEach(I=>I()):!M&&w.current&&u.onRestore.forEach(I=>I()),w.current=M)},[M,s]),te(()=>()=>{let u=Le.get(s);u&&(u.onClose.forEach(I=>I()),Le.delete(s))},[s]);let O=ht.useMemo(()=>({requestClose:u=>y(s,u),setDirty:u=>E(s,u),onCloseRequested:u=>(R(s,u),()=>A(s)),setTitle:u=>D(s,u),instanceId:s,onClose:u=>{let I=ot(s);return I.onClose.add(u),()=>I.onClose.delete(u)},onMinimize:u=>{let I=ot(s);return I.onMinimize.add(u),()=>I.onMinimize.delete(u)},onRestore:u=>{let I=ot(s);return I.onRestore.add(u),()=>I.onRestore.delete(u)},onResize:u=>{let I=ot(s);return I.onResize.add(u),()=>I.onResize.delete(u)}}),[s,y,E,R,A,D]);return g(Me,{value:O,children:i})},$t=({node:s,path:i,onTabRightClick:r,activeDropZone:y,onHoverDropZone:E,onTabDragStart:R,hoveredTab:A,onTabHover:D,defaultPanelIcon:M,onRequestClosePanel:w})=>{let{updateSplitSizes:O}=Ce();if(s.type==="leaf")return g(fn,{leaf:s,onTabRightClick:r,activeDropZone:y,onHoverDropZone:E,onTabDragStart:R,hoveredTab:A,onTabHover:D,defaultPanelIcon:M,onRequestClosePanel:w});let u=s.orientation==="horizontal",I=(P,k)=>{k.preventDefault();let N=u?k.clientX:k.clientY,l=[...s.sizes],v=k.currentTarget;v.classList.add("active"),document.body.classList.add("resizing-active",u?"resizing-row-active":"resizing-col-active");let m=k.currentTarget.parentElement,p=m?u?m.clientWidth:m.clientHeight:u?1e3:800,B=h=>{let S=((u?h.clientX:h.clientY)-N)/p,W=[...l];W[P]+=S,W[P+1]-=S,W[P]>.1&&W[P+1]>.1&&O(i,W)},L=()=>{v.classList.remove("active"),document.body.classList.remove("resizing-active","resizing-row-active","resizing-col-active"),window.removeEventListener("mousemove",B),window.removeEventListener("mouseup",L)};window.addEventListener("mousemove",B),window.addEventListener("mouseup",L)};return g("div",{style:{display:"flex",flexDirection:u?"row":"column",width:"100%",height:"100%",overflow:"hidden",position:"relative"},children:s.children.map((P,k)=>{let N=s.sizes[k]*100;return K(ht.Fragment,{children:[g("div",{style:{flexGrow:s.sizes[k],flexBasis:`${N}%`,overflow:"hidden",position:"relative"},children:g($t,{node:P,path:[...i,k],onTabRightClick:r,activeDropZone:y,onHoverDropZone:E,onTabDragStart:R,hoveredTab:A,onTabHover:D,defaultPanelIcon:M,onRequestClosePanel:w})}),k<s.children.length-1&&g("div",{onMouseDown:l=>I(k,l),style:{cursor:u?"col-resize":"row-resize",width:u?"1px":"100%",height:u?"100%":"1px",zIndex:20},className:"resizer-bar"})]},k)})})},fn=({leaf:s,onTabRightClick:i,activeDropZone:r,onHoverDropZone:y,onTabDragStart:E,hoveredTab:R,onTabHover:A,defaultPanelIcon:D,onRequestClosePanel:M})=>{let w=ue(),O=tt(),{openPanel:u,closeLeafGroup:I,setActivePanel:P}=Ce(),k=ee(),N=se(),{windowClass:l,windowBodyClass:v}=he(),m=p=>{u(p,w.panels[p].component),P(p)};return K("div",{"data-active-panel-id":s.activePanelId||"",className:`workspace-panel ${l??""}`,style:{overflow:"hidden",position:"relative"},children:[K("div",{className:"workspace-tab-bar",style:{minHeight:"38px"},children:[g("div",{className:"tab-headers-container",style:{scrollbarWidth:"none"},onMouseMove:p=>{w.draggedPanelId&&p.target===p.currentTarget&&A(s.id,"EMPTY",s.panels.length,"right")},onMouseLeave:p=>{w.draggedPanelId&&p.target===p.currentTarget&&A(s.id,"",-1,null)},children:s.panels.map((p,B)=>{let L=w.panels[p];if(!L)return null;let h=s.activePanelId===p,T=w.activePanelId===p,S=O.get(L.component)?.defaultOptions,W=R&&R.leafId===s.id&&R.panelId===p,Y=B===s.panels.length-1,Q=R&&R.leafId===s.id&&R.panelId==="EMPTY"&&Y,oe=W?R.side==="left"?"drag-hover-left":"drag-hover-right":Q?"drag-hover-right":"";return K("div",{onClick:()=>m(p),onMouseDown:_=>{S?.canDrag!==!1&&E(p,_)},onContextMenu:_=>i(p,_),onMouseMove:_=>{if(w.draggedPanelId){let U=_.currentTarget.getBoundingClientRect(),de=_.clientX-U.left<U.width/2?"left":"right";A(s.id,p,B,de)}},onMouseLeave:()=>{w.draggedPanelId&&A(s.id,"",-1,null)},className:`workspace-tab ${h?T?"active workspace-tab-active-focused":"active workspace-tab-active-unfocused":"workspace-tab-inactive"} ${oe}`,style:{cursor:S?.canDrag===!1?"default":"pointer"},children:[K("span",{className:"text-truncate",style:{maxWidth:"120px",display:"flex",alignItems:"center"},children:[g("span",{className:"workspace-tab-icon",children:S?.icon||D||mt}),K("span",{children:[X(L.title,k),L.dirty?" *":""]})]}),S?.renderHeaderActions&&g("span",{className:"tab-header-actions",onClick:_=>_.stopPropagation(),onMouseDown:_=>_.stopPropagation(),children:S.renderHeaderActions(p)}),S?.canClose!==!1&&g("span",{onClick:_=>{_.stopPropagation(),M(p)},title:X(N.closeTab,k),className:"close-tab-x",style:{width:"18px",height:"18px",...S?.renderHeaderActions?{}:{marginInlineStart:"auto"}},children:g("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:g("path",{d:"M18 6L6 18M6 6l12 12"})})})]},p)})}),s.panels.length===0&&s.keepOnEmpty&&s.canClose!==!1&&g("span",{onClick:()=>I(s.id),className:"close-tab-x header-close-empty-group",style:{width:"18px",height:"18px",cursor:"pointer"},title:X(N.closeEmptyGroup,k),children:g("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:g("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),K("div",{className:`dw-panel-body ${v??""}`,style:{position:"relative",overflow:"hidden"},children:[s.activePanelId&&w.panels[s.activePanelId]?g(Ht,{panelId:s.activePanelId},s.activePanelId):g("div",{className:"empty-leaf-placeholder",children:g("span",{children:"Empty Workspace Section"})}),w.draggedPanelId!==null&&g("div",{className:"dock-drop-zone-overlay",children:K("div",{className:"dock-target-cross",children:[g("div",{onMouseEnter:()=>y(s.id,"top"),onMouseLeave:()=>y(s.id,null),className:"dock-target-box dock-target-top",children:"\u25B2"}),g("div",{onMouseEnter:()=>y(s.id,"bottom"),onMouseLeave:()=>y(s.id,null),className:"dock-target-box dock-target-bottom",children:"\u25BC"}),g("div",{onMouseEnter:()=>y(s.id,"left"),onMouseLeave:()=>y(s.id,null),className:"dock-target-box dock-target-left",children:"\u25C0"}),g("div",{onMouseEnter:()=>y(s.id,"right"),onMouseLeave:()=>y(s.id,null),className:"dock-target-box dock-target-right",children:"\u25B6"}),g("div",{onMouseEnter:()=>y(s.id,"center"),onMouseLeave:()=>y(s.id,null),className:"dock-target-box dock-target-center",children:"\u25A3"})]})}),w.draggedPanelId!==null&&r!==null&&r.leafId===s.id&&g("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%"}})]})]})},mn=({skin:s="vscode",defaultPanelIcon:i})=>{let r=ue(),y=tt(),{restorePanel:E,minimizePanel:R,requestClosePanel:A,maximizePanel:D,updateFloatingPosition:M,bringToFront:w,floatPanel:O,setDraggedPanelId:u,dockPanelToGroup:I,movePanelOrder:P,dockPanelToWorkspaceEdge:k,setActivePanel:N,setDirection:l}=Ce(),{openModal:v}=we(),m=ee(),p=se(),B=ht.useCallback(a=>{let e=r.panels[a];A(a,{onConfirm:t=>new Promise(n=>{let o=t||e?.dirtyOptions,d=e?X(e.title,m):"Panel";v(Re,{title:o?.title||p.unsavedChangesTitle,message:o?.message||{id:p.unsavedChangesMessage.id,defaultMessage:p.unsavedChangesMessage.defaultMessage,values:{title:d}},alert:o?.alert,alertType:o?.alertType||"danger",useYesNoTitles:!0,onOK:()=>n(!0),onCancel:()=>n(!1)},{size:"small"})})})},[A,r.panels,m,v,p]),{windowClass:L,windowBodyClass:h}=he(),T=ge(null),$=ge(null),[S,W]=Pe(null),Y=ge(null),[Q,oe]=Pe(!1);te(()=>()=>{Y.current&&clearTimeout(Y.current)},[]),te(()=>{S&&(r.minimized.some(e=>e.id===S.id)||W(null))},[r.minimized,S]);let[V,_]=Pe(null),U=ge(null),[pe,de]=Pe({x:0,y:0}),[j,ie]=Pe(null),J=ge(null),Z=a=>{ie(a),J.current=a},[Ge,ve]=Pe(null),fe=ge(null),Ye=(a,e,t,n)=>{let o=n?{leafId:a,panelId:e,index:t,side:n}:null;ve(o),fe.current=o},Xe=(a,e)=>{let t=e?{leafId:a,position:e}:null;_(t),U.current=t},qe=(a,e)=>{if(e.button!==0)return;let t=e.clientX,n=e.clientY,o=!1,d=f=>{let C=f.clientX-t,x=f.clientY-n;!o&&(Math.abs(C)>5||Math.abs(x)>5)&&(o=!0,u(a)),o&&de({x:f.clientX,y:f.clientY})},c=f=>{if(window.removeEventListener("mousemove",d),window.removeEventListener("mouseup",b),o){let C=U.current,x=fe.current,z=J.current;if(z)k(a,z);else if(x){let H=x.index;x.side==="right"&&(H+=1),P(a,x.leafId,H)}else C?I(a,C.leafId,C.position):O(a,{x:f.clientX-150,y:f.clientY-15,width:450,height:350});u(null),_(null),U.current=null,ve(null),fe.current=null,Z(null)}},b=f=>{c(f)};window.addEventListener("mousemove",d),window.addEventListener("mouseup",b)},_e=(a,e)=>{e.preventDefault();let t=r.panels[a];if(!t)return;let o=y.get(t.component)?.defaultOptions,d=[];o?.canDrag!==!1&&d.push({label:X(p.floatWindow,m),action:()=>O(a)}),o?.canMinimize!==!1&&d.push({label:X(p.minimizePanel,m),action:()=>R(a)}),d.length>0&&o?.canClose!==!1&&d.push({separator:!0}),o?.canClose!==!1&&d.push({label:X(p.closeTab,m),action:()=>B(a)}),d.length!==0&&$.current?.show({event:e,contextMenu:{items:d}})},Ke=(a,e)=>{e.preventDefault(),W(null),$.current?.show({event:e,contextMenu:{items:[{label:X(p.restorePanel,m),action:()=>E(a)},{label:X(p.maximizePanel,m),action:()=>D(a)},{separator:!0},{label:X(p.closePanel,m),action:()=>B(a)}]}})};te(()=>{let a=Object.keys(r.panels);for(let e of Array.from(He.keys()))a.includes(e)||He.delete(e)},[r.panels]),te(()=>{let a=()=>{r.draggedPanelId!==null&&(u(null),_(null),ve(null))};return window.addEventListener("blur",a),()=>{window.removeEventListener("blur",a)}},[r.draggedPanelId]);let ke=ge(null),[ce,je]=Pe({width:1024,height:768});te(()=>{let a=ke.current;if(!a)return;let e=new ResizeObserver(t=>{if(!t||t.length===0)return;let n=t[0].contentRect;je({width:Math.max(100,n.width),height:Math.max(100,n.height)})});return e.observe(a),()=>{e.disconnect()}},[]),te(()=>{let a=ke.current;if(!a)return;let e=()=>{let o=Tt(a);l(o?"rtl":"ltr")};e();let t=new MutationObserver(e);t.observe(document.documentElement,{attributes:!0,attributeFilter:["dir"]}),t.observe(document.body,{attributes:!0,attributeFilter:["dir"]});let n=a.closest("[dir]");return n&&n!==document.documentElement&&n!==document.body&&t.observe(n,{attributes:!0,attributeFilter:["dir"]}),()=>{t.disconnect()}},[l]),te(()=>{let a=ce.width,e=ce.height;r.floating.forEach(t=>{let n=typeof t.width=="string"?parseFloat(t.width):t.width,o=typeof t.height=="string"?parseFloat(t.height):t.height,d=typeof t.x=="string"?parseFloat(t.x):t.x,c=typeof t.y=="string"?parseFloat(t.y):t.y,b=n,f=o,C=d,x=c,z=!1;b>a&&(b=Math.max(200,a-20),z=!0),f>e&&(f=Math.max(150,e-40),z=!0);let H=10;if(t.stickyRight)C=a-b-H,z=!0;else{let F=a-100;C>F&&(C=Math.max(0,F),z=!0)}if(t.stickyBottom)x=e-f-H,z=!0;else{let F=e-40;x>F&&(x=Math.max(0,F),z=!0)}z&&M(t.id,{x:C,y:x,width:b,height:f})})},[ce,r.floating,M]),te(()=>{let a=e=>{if(e.button!==0)return;let t=e.target;if(!t)return;let n=t.closest(".floating-window");if(n){let d=n.getAttribute("data-window-id");d&&(N(d),w(d));return}let o=t.closest(".workspace-panel");if(o){let d=o.getAttribute("data-active-panel-id");d&&N(d)}};return document.addEventListener("mousedown",a),()=>{document.removeEventListener("mousedown",a)}},[w,N]);let Ue=(a,e)=>{let t=r.floating.find(H=>H.id===a);if(!t||t.maximized)return;w(a);let n=e.clientX,o=e.clientY,c=e.currentTarget.closest(".floating-window"),b=c?c.offsetLeft:0,f=c?c.offsetTop:0,C=!1,x=H=>{let F=H.clientX-n,G=H.clientY-o;if(!C&&(Math.abs(F)>5||Math.abs(G)>5)&&(C=!0,u(a)),C){let ae=b+F,me=f+G;M(a,{x:ae,y:me,stickyRight:!1,stickyBottom:!1})}},z=()=>{if(C){let H=U.current,F=fe.current,G=J.current;if(G)k(a,G);else if(F){let ae=F.index;F.side==="right"&&(ae+=1),P(a,F.leafId,ae)}else H&&I(a,H.leafId,H.position);u(null),_(null),U.current=null,ve(null),fe.current=null,Z(null)}window.removeEventListener("mousemove",x),window.removeEventListener("mouseup",z)};window.addEventListener("mousemove",x),window.addEventListener("mouseup",z)},Je=(a,e)=>{e.stopPropagation();let t=r.floating.find(z=>z.id===a);if(!t||t.maximized)return;w(a);let n=e.clientX,o=e.clientY,c=e.currentTarget.closest(".floating-window"),b=c?c.offsetWidth:400,f=c?c.offsetHeight:300,C=z=>{let H=z.clientX-n,F=z.clientY-o,G=Math.max(200,b+H),ae=Math.max(150,f+F),me=t.x,Ie=t.y,Oe=ce.width,We=ce.height,Ze=typeof t.x=="string"?parseFloat(t.x):t.x,Qe=typeof t.y=="string"?parseFloat(t.y):t.y,Ve=typeof t.width=="string"?parseFloat(t.width):t.width,Kt=typeof t.height=="string"?parseFloat(t.height):t.height,vt=Math.abs(Ze+Ve-Oe)<4,Ct=Math.abs(Qe+Kt-We)<4;vt&&(me=Oe-G,me<0&&(me=0,G=Oe)),Ct&&(Ie=We-ae,Ie<0&&(Ie=0,ae=We)),M(a,{x:me,y:Ie,width:G,height:ae,stickyRight:vt,stickyBottom:Ct})},x=()=>{window.removeEventListener("mousemove",C),window.removeEventListener("mouseup",x)};window.addEventListener("mousemove",C),window.addEventListener("mouseup",x)},Ne=a=>{if(T.current){let e=a==="left"?-150:150;T.current.scrollBy({left:e,behavior:"smooth"})}},[Fe,lt]=Pe("dark");return te(()=>{let a=()=>{let t=document.documentElement.getAttribute("data-color-scheme")==="light"?"light":"dark";lt(t)};a();let e=new MutationObserver(a);return e.observe(document.documentElement,{attributes:!0,attributeFilter:["data-color-scheme"]}),()=>e.disconnect()},[]),K("div",{"data-workspace-skin":s,"data-color-scheme":Fe,style:{display:"flex",flexDirection:"column",width:"100%",height:"100%",overflow:"hidden",userSelect:"none"},dir:r.dir,children:[K("div",{ref:ke,className:r.draggedPanelId?"dragging-active":void 0,style:{flexGrow:1,width:"100%",position:"relative",overflow:"hidden"},children:[r.draggedPanelId!==null&&K(yn,{children:[g("div",{className:"workspace-edge-trigger edge-trigger-left",onMouseEnter:()=>Z("left"),onMouseLeave:()=>Z(null)}),g("div",{className:"workspace-edge-trigger edge-trigger-right",onMouseEnter:()=>Z("right"),onMouseLeave:()=>Z(null)}),g("div",{className:"workspace-edge-trigger edge-trigger-top",onMouseEnter:()=>Z("top"),onMouseLeave:()=>Z(null)}),g("div",{className:"workspace-edge-trigger edge-trigger-bottom",onMouseEnter:()=>Z("bottom"),onMouseLeave:()=>Z(null)})]}),r.draggedPanelId!==null&&j!==null&&g("div",{className:`workspace-edge-preview edge-preview-${j}`}),g("div",{style:{width:"100%",height:"100%",overflow:"hidden",position:"relative"},children:r.gridRoot?g($t,{node:r.gridRoot,path:[],onTabRightClick:_e,activeDropZone:V,onHoverDropZone:Xe,onTabDragStart:qe,hoveredTab:Ge,onTabHover:Ye,defaultPanelIcon:i,onRequestClosePanel:B}):g("div",{className:"empty-workspace-grid",children:"Grid Empty"})}),r.floating.map(a=>{let e=r.panels[a.id];if(!e)return null;let t=a.maximized,n=r.draggedPanelId===a.id,o=r.activePanelId===a.id,c=y.get(e.component)?.defaultOptions;return K("div",{"data-window-id":a.id,dir:r.dir,onMouseDownCapture:()=>{N(a.id),w(a.id)},className:`floating-window ${t?"maximized":""} ${o?"v2-window-focused":""} ${L??""}`,style:{position:"absolute",left:t?0:typeof a.x=="number"?`${a.x}px`:a.x,top:t?0:typeof a.y=="number"?`${a.y}px`:a.y,width:t?"100%":typeof a.width=="number"?`${a.width}px`:a.width,height:t?"100%":typeof a.height=="number"?`${a.height}px`:a.height,zIndex:a.z,pointerEvents:n?"none":"auto"},children:[K("div",{onDoubleClick:()=>D(a.id),onMouseDown:b=>{c?.canDrag!==!1&&Ue(a.id,b)},className:"floating-window-titlebar cursor-move",style:{cursor:t||c?.canDrag===!1?"default":"move"},children:[K("span",{className:"floating-window-title",children:[g("span",{className:"window-title-icon",children:c?.icon||i||mt}),K("span",{children:[X(e.title,m),e.dirty?" *":""]})]}),K("div",{className:"fw-titlebar-actions",style:{gap:"var(--header-button-gap, 4px)"},onMouseDown:b=>b.stopPropagation(),children:[c?.renderHeaderActions&&g("div",{className:"window-header-actions",children:c.renderHeaderActions(a.id)}),c?.canDrag!==!1&&g("button",{type:"button",title:X(p.windowAnchoringOptions,m),onClick:b=>{let f=!!a.stickyRight,C=!!a.stickyBottom;$.current?.show({event:b,contextMenu:{items:[{label:X(p.anchorToRightEdge,m),checkbox:{active:!0,enabled:!0,value:f},action:()=>{let x=ce.width,z=typeof a.width=="string"?parseFloat(a.width):a.width;f?M(a.id,{stickyRight:!1}):M(a.id,{x:x-z-10,stickyRight:!0})}},{label:X(p.anchorToBottomEdge,m),checkbox:{active:!0,enabled:!0,value:C},action:()=>{let x=ce.height,z=typeof a.height=="string"?parseFloat(a.height):a.height;C?M(a.id,{stickyBottom:!1}):M(a.id,{y:x-z-10,stickyBottom:!0})}}]}})},className:"custom-tab-btn btn-anchor-tab",children:K("svg",{className:`anchor-icon ${a.stickyRight&&a.stickyBottom?"anchor-sticky-both":a.stickyRight?"anchor-sticky-right":a.stickyBottom?"anchor-sticky-bottom":""}`,width:"11",height:"11",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:[g("circle",{cx:"12",cy:"5",r:"2"}),g("path",{d:"M12 7v7m0 0a4 4 0 0 1-4-4M12 14a4 4 0 0 0 4-4M5 18h14"})]})}),g("button",{type:"button",title:t?X(p.restoreSize,m):X(p.maximize,m),onClick:()=>D(a.id),className:"custom-tab-btn btn-maximize-tab",children:g("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:g("rect",{x:"4",y:"4",width:"16",height:"16",rx:"1.5"})})}),c?.canMinimize!==!1&&g("button",{type:"button",title:X(p.minimize,m),onClick:()=>R(a.id),className:"custom-tab-btn btn-minimize-tab",children:g("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:g("path",{d:"M5 12h14"})})}),c?.canClose!==!1&&g("button",{type:"button",title:X(p.close,m),onClick:()=>B(a.id),className:"custom-tab-btn btn-close-tab",children:g("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:g("path",{d:"M18 6L6 18M6 6l12 12"})})})]})]}),g("div",{className:h??void 0,style:{flexGrow:1,width:"100%",overflow:"hidden",position:"relative",isolation:"isolate"},children:g(Ht,{panelId:a.id},a.id)}),!t&&g("div",{onMouseDown:b=>Je(a.id,b),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%)"}})]},a.id)})]}),r.minimized.length>0&&K("div",{className:"taskbar-footer-container",style:{height:"48px",zIndex:100},children:[g("button",{type:"button",onClick:()=>Ne("left"),className:"taskbar-nav-btn",style:{display:r.minimized.length>4?"block":"none"},children:"\u25C0"}),g("div",{ref:T,className:"taskbar-items-container",style:{scrollSnapType:"x mandatory"},children:r.minimized.map(a=>{let t=y.get(a.component)?.defaultOptions?.icon||i||mt;return g("div",{onClick:()=>{W(null),E(a.id)},onContextMenu:n=>Ke(a.id,n),onMouseEnter:n=>{if(Q)return;Y.current&&clearTimeout(Y.current);let o=n.currentTarget.getBoundingClientRect();n.clientX>=o.left&&n.clientX<=o.right&&n.clientY>=o.top&&n.clientY<=o.bottom&&W({id:a.id,rect:o,title:a.title,component:a.component})},onMouseLeave:()=>{Y.current=setTimeout(()=>{W(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:g("span",{className:"taskbar-item-icon",children:t})},a.id)})}),S&&Dt(K("div",{className:"taskbar-item-tooltip",dir:r.dir,style:{position:"fixed",left:`${S.rect.left+S.rect.width/2}px`,top:`${S.rect.top-8}px`,transform:"translateX(-50%) translateY(-100%)",opacity:1,pointerEvents:"auto",zIndex:999999},onMouseEnter:()=>{Y.current&&clearTimeout(Y.current)},onMouseLeave:()=>{W(null)},onClick:()=>{E(S.id),W(null)},children:[K("div",{className:"tooltip-header-row",children:[K("span",{className:"tooltip-title-text text-truncate",style:{maxWidth:"140px"},children:[X(S.title,m),r.panels[S.id]?.dirty?" *":""]}),g("span",{onClick:a=>{a.stopPropagation(),B(S.id),W(null)},title:X(p.closePanel,m),className:"tooltip-close-x",children:g("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:g("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),g(gn,{panelId:S.id})]}),document.body),g("button",{type:"button",onClick:()=>Ne("right"),className:"taskbar-nav-btn",style:{display:r.minimized.length>4?"block":"none"},children:"\u25B6"})]}),Object.keys(r.panels).map(a=>{let e=r.panels[a];if(!e)return null;let t=At(a);return Dt(g(pn,{panelId:a,children:g("div",{style:{width:"100%",height:"100%"},children:un(a,e.component,y)})}),t,a)}),g(cn,{ref:$,id:"workspace-context-menu",theme:"dark",onShow:()=>oe(!0),onHide:()=>oe(!1)}),r.draggedPanelId!==null&&!r.floating.some(a=>a.id===r.draggedPanelId)&&K("div",{className:"drag-ghost-tab",style:{left:pe.x+12,top:pe.y+12,zIndex:1e5},children:["\u{1F4C4} ",X(r.panels[r.draggedPanelId]?.title,m)||"Tab"]})]})},hn=mn;var yt=class{registry;initialState;config;_actions=null;constructor(i={}){if(this.registry=new De,this.initialState=i.initialState??null,this.config={formatMessage:i.formatMessage,predefinedMessages:i.predefinedMessages,dir:i.dir},i.panels)for(let[r,y]of Object.entries(i.panels))this.registry.register(r,y.component,y.defaultOptions)}_connect(i){this._actions=i}_disconnect(){this._actions=null}get isConnected(){return this._actions!==null}saveLayout(){return this._actions?.saveLayout()??""}loadLayout(i){this._actions?.loadLayout(i)}openPanel(...i){this._actions?.openPanel(...i)}closePanel(i){this._actions?.closePanel(i)}minimizePanel(i){this._actions?.minimizePanel(i)}restorePanel(i){this._actions?.restorePanel(i)}floatPanel(...i){this._actions?.floatPanel(...i)}dockPanel(...i){this._actions?.dockPanel(...i)}maximizePanel(i){this._actions?.maximizePanel(i)}bringToFront(i){this._actions?.bringToFront(i)}setDirection(i){this._actions?.setDirection(i)}publish(i,r){this._actions?.publish(i,r)}subscribe(i,r){return this._actions?.subscribe(i,r)??(()=>{})}};import{useCallback as $e,useRef as Gt,useEffect as Pn,useState as bn,useMemo as vn}from"react";import{Fragment as xn,jsx as le,jsxs as Pt}from"react/jsx-runtime";var Cn=({modal:s,index:i,isTopmost:r})=>{let{close:y,openModal:E,updateInstance:R,setDirty:A}=we(),D=ee(),M=se(),{dir:w}=ue(),{modalClass:O,modalBodyClass:u}=he(),I=Gt(null),{id:P,Component:k,props:N,options:l,dirty:v,dirtyOptions:m}=s,p=l,[B,L]=bn(p.icon||null),h=Gt(p);h.current=p;let T=X(p.title,D),$=$e(async j=>{if(j?.force){y(P);return}if(I.current){if(!await I.current())return;y(P);return}if(v){E(Re,{title:m?.title||M.unsavedChangesTitle,message:m?.message||{id:M.unsavedChangesMessage.id,defaultMessage:M.unsavedChangesMessage.defaultMessage,values:{title:T}},alert:m?.alert,alertType:m?.alertType||"danger",useYesNoTitles:!0,onOK:()=>y(P)},{size:"small"});return}y(P)},[y,E,P,v,m,T,M]),S=$e((j,ie)=>A(P,j,ie),[A,P]),W=$e(j=>R(P,{options:{...h.current,title:j}}),[R,P]),Y=$e(j=>L(j),[]),Q=$e(j=>(I.current=j,()=>{I.current=null}),[]),oe=vn(()=>({requestClose:$,setDirty:S,setTitle:W,setIcon:Y,onCloseRequested:Q,containerType:"modal",instanceId:P}),[$,S,W,Y,Q,P]),V=v?`${T} *`:T,_=p.size?`v2-modal-size-${p.size}`:"v2-modal-size-auto",U=p.closable!==!1;Pn(()=>{if(!r||!U)return;let j=ie=>{ie.key==="Escape"&&(ie.stopPropagation(),$())};return document.addEventListener("keydown",j),()=>document.removeEventListener("keydown",j)},[$,U,r]);let de=1e4+i*10;return Pt("div",{className:"v2-modal-overlay",style:{zIndex:de},dir:w,children:[le("div",{className:"v2-modal-curtain",onClick:U?()=>$():void 0}),Pt("div",{className:`v2-modal-window ${_} ${O??""}`,children:[Pt("div",{className:"v2-modal-header",children:[B&&le("div",{className:"v2-modal-icon",children:B}),le("h4",{className:"v2-modal-title",children:V}),U&&le("button",{className:"v2-modal-close-button",onClick:()=>$(),title:D(M.closeTooltip),type:"button",children:le("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:le("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),le("div",{className:`v2-modal-body ${u??""}`,children:le(Me,{value:oe,children:le(k,{...N,panelId:P})})})]})]})},Mn=()=>{let{modals:s}=ye();return s.length===0?null:le(xn,{children:s.map((i,r)=>le(Cn,{modal:i,index:r,isTopmost:r===s.length-1},i.id))})},wn=Mn;import{useCallback as Ee,useRef as Yt,useEffect as Xt,useState as Rn,useMemo as kn}from"react";import{Fragment as Ln,jsx as ne,jsxs as bt}from"react/jsx-runtime";var st=({panel:s,position:i,defaultWidth:r})=>{let{close:y,openModal:E,updateInstance:R,setDirty:A,registerCloseHandler:D,unregisterCloseHandler:M}=we(),{modals:w}=ye(),O=ee(),u=se(),{dir:I}=ue(),{sidePanelClass:P,sidePanelBodyClass:k}=he(),N=Yt(null),{id:l,Component:v,props:m,options:p,dirty:B,dirtyOptions:L}=s,h=p,[T,$]=Rn(h.icon||null),S=Yt(h);S.current=h;let W=X(h.title,O),Y=Ee(async J=>{if(J?.force){y(l);return}if(N.current){if(!await N.current())return;y(l);return}if(B){E(Re,{title:L?.title||u.unsavedChangesTitle,message:L?.message||{id:u.unsavedChangesMessage.id,defaultMessage:u.unsavedChangesMessage.defaultMessage,values:{title:W}},alert:L?.alert,alertType:L?.alertType||"danger",useYesNoTitles:!0,onOK:()=>y(l)},{size:"small"});return}y(l)},[y,E,l,B,L,W,u]),Q=Ee(async()=>N.current?await N.current():!B,[B]);Xt(()=>(D(l,Q),()=>M(l)),[l,Q,D,M]);let oe=Ee((J,Z)=>A(l,J,Z),[A,l]),V=Ee(J=>R(l,{options:{...S.current,title:J}}),[R,l]),_=Ee(J=>$(J),[]),U=Ee(J=>(N.current=J,()=>{N.current=null}),[]),pe=kn(()=>({requestClose:Y,setDirty:oe,setTitle:V,setIcon:_,onCloseRequested:U,containerType:i==="left"?"left-panel":"right-panel",instanceId:l}),[Y,oe,V,_,U,i,l]),de=B?`${W} *`:W;Xt(()=>{let J=Z=>{Z.key==="Escape"&&w.length===0&&Y()};return document.addEventListener("keydown",J),()=>document.removeEventListener("keydown",J)},[Y,w.length]);let j=h.width||r||400,ie=typeof j=="number"?`${j}px`:j;return ne("div",{className:`v2-side-panel v2-side-panel-${i} v2-side-panel-visible ${P??""}`,style:{width:ie},dir:I,children:bt("div",{className:"v2-side-panel-window",children:[bt("div",{className:"v2-side-panel-header",children:[T&&ne("div",{className:"v2-side-panel-icon",children:T}),ne("h4",{className:"v2-side-panel-title",children:de}),ne("button",{className:"v2-side-panel-close-button",onClick:()=>Y(),title:O(u.closeTooltip),type:"button",children:ne("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:ne("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),ne("div",{className:`v2-side-panel-body ${k??""}`,children:ne(Me,{value:pe,children:ne(v,{...m,panelId:l})})})]})})},In=({defaultWidth:s})=>{let{leftPanel:i,rightPanel:r}=ye();return bt(Ln,{children:[i&&ne(st,{panel:i,position:"left",defaultWidth:s},i.id),r&&ne(st,{panel:r,position:"right",defaultWidth:s},r.id)]})},Sn=({defaultWidth:s})=>{let{leftPanel:i}=ye();return i?ne(st,{panel:i,position:"left",defaultWidth:s},i.id):null},Tn=({defaultWidth:s})=>{let{rightPanel:i}=ye();return i?ne(st,{panel:i,position:"right",defaultWidth:s},i.id):null},zn=In;import{useState as qt,useEffect as at,useRef as En,useCallback as _t,useImperativeHandle as Nn,forwardRef as Fn}from"react";import{Fragment as Wn,jsx as be,jsxs as rt}from"react/jsx-runtime";var On=Fn(function({position:i="right",tabs:r,drawerWidth:y="220px",activeTabId:E,onActiveTabChange:R,children:A},D){let M=E!==void 0,w=ee(),O=se(),[u,I]=qt(null),P=M?E:u,[k,N]=qt(()=>{let h=new Set;for(let T of r)T.eagerMount&&h.add(T.id);return h});at(()=>{let h=r.filter(T=>T.eagerMount&&!k.has(T.id));h.length>0&&N(T=>{let $=new Set(T);for(let S of h)$.add(S.id);return $})},[r]);let l=En(P??null);at(()=>{l.current=P??null},[P]);let v=_t(h=>{M||I(h),R?.(h)},[M,R]);Nn(D,()=>({openTab:h=>v(h),closeDrawer:()=>v(null),getActiveTab:()=>l.current}),[v]);let m=h=>{v(P===h?null:h)},p=_t(()=>v(null),[v]);at(()=>{P&&!k.has(P)&&N(h=>{let T=new Set(h);return T.add(P),T})},[P,k]),at(()=>{P===null&&N(h=>{let T=!1,$=new Set(h);for(let S of h){let W=r.find(Y=>Y.id===S);W&&!W.eagerMount&&!W.preserveState&&($.delete(S),T=!0)}return T?$:h})},[P,r]);let B=be("div",{className:`sidebar-tabs-strip ${i}`,style:{width:"56px",height:"100%"},children:r.map(h=>{let T=P===h.id;return be("button",{type:"button",onClick:()=>m(h.id),className:`sidebar-tab-btn ${T?"active":""}`,title:h.label,"aria-pressed":T,children:h.icon},h.id)})}),L=be("div",{className:`sidebar-content-drawer h-100 ${i}`,style:{width:P?y:"0px",minWidth:P?y:"0px",overflow:"hidden",flexShrink:0},children:r.map(h=>{if(!k.has(h.id))return null;let $=P===h.id,S=()=>v(h.id);return rt("div",{style:{display:$?"flex":"none",flexDirection:"column",height:"100%",width:"100%"},children:[rt("div",{className:"sidebar-drawer-header",children:[be("span",{className:"sidebar-header-title",children:h.label}),be("button",{type:"button",onClick:p,className:"sidebar-close-btn",title:w(O.closePanelTooltip),"aria-label":w(O.closePanelTooltip),children:rt("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[be("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),be("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),be("div",{className:"sidebar-drawer-body",children:h.renderContent(h.id,p,S)})]},h.id)})});return rt(Wn,{children:[i==="left"&&B,i==="left"&&L,A,i==="right"&&L,i==="right"&&B]})});export{Re as ConfirmationForm,ut as FormContainerContext,Me as FormContainerProvider,Sn as LeftPanelRenderer,wn as ModalStackRenderer,rn as PanelProvider,et as PanelRegistry,Tn as RightPanelRenderer,zn as SidePanelRenderer,On as Sidebar,hn as WindowManager,Zt as WindowManagerProvider,yt as WorkspaceClient,Ae as defaultPredefinedMessages,X as formatLabel,gt as useFormContainer,ee as useFormatMessage,we as usePanelActions,Qt as usePanelContext,ye as usePanelState,se as usePredefinedMessages,he as useStyleClasses,Ce as useWindowManagerActions,ue as useWindowManagerState};
2
2
  //# sourceMappingURL=index.js.map