react-dockable-desktop 1.1.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/README.md +385 -365
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +90 -3
- package/dist/index.d.ts +90 -3
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/styles.css +333 -17
- package/package.json +5 -5
package/dist/index.d.cts
CHANGED
|
@@ -22,8 +22,12 @@ interface PanelRegistryEntry {
|
|
|
22
22
|
Component: ComponentType<any>;
|
|
23
23
|
/** Default metadata settings configuration applied on instantiation. */
|
|
24
24
|
defaultOptions?: {
|
|
25
|
-
/** Tab and window headers text. */
|
|
26
|
-
title?: string
|
|
25
|
+
/** Tab and window headers text — plain string or i18n descriptor. */
|
|
26
|
+
title?: string | {
|
|
27
|
+
id: string;
|
|
28
|
+
defaultMessage?: string;
|
|
29
|
+
values?: Record<string, string | number>;
|
|
30
|
+
};
|
|
27
31
|
/** Icon placed next to title tags. */
|
|
28
32
|
icon?: React.ReactNode;
|
|
29
33
|
/** Initial mounting state inside the desktop layout grid. */
|
|
@@ -54,6 +58,7 @@ interface PanelRegistryEntry {
|
|
|
54
58
|
/**
|
|
55
59
|
* Registry mapping catalog entries to allow programmatic panel instantiation
|
|
56
60
|
* inside dynamic layout cells or floating windows.
|
|
61
|
+
* Exported so WorkspaceClient can create scoped, per-instance registries.
|
|
57
62
|
*/
|
|
58
63
|
declare class PanelRegistryClass {
|
|
59
64
|
private registry;
|
|
@@ -435,6 +440,9 @@ interface StyleClasses {
|
|
|
435
440
|
declare const useStyleClasses: () => StyleClasses;
|
|
436
441
|
interface WindowManagerProviderProps {
|
|
437
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;
|
|
438
446
|
formatMessage?: MessageFormatter;
|
|
439
447
|
predefinedMessages?: Record<string, ContextMenuPredefinedMessage>;
|
|
440
448
|
dir?: 'ltr' | 'rtl';
|
|
@@ -476,6 +484,85 @@ declare const usePanelContext: () => {
|
|
|
476
484
|
*/
|
|
477
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>;
|
|
478
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
|
+
|
|
479
566
|
/**
|
|
480
567
|
* Options used when requesting to close a container.
|
|
481
568
|
*/
|
|
@@ -765,4 +852,4 @@ interface SidebarHandle {
|
|
|
765
852
|
*/
|
|
766
853
|
declare const Sidebar: React__default.ForwardRefExoticComponent<SidebarProps & React__default.RefAttributes<SidebarHandle>>;
|
|
767
854
|
|
|
768
|
-
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
|
@@ -22,8 +22,12 @@ interface PanelRegistryEntry {
|
|
|
22
22
|
Component: ComponentType<any>;
|
|
23
23
|
/** Default metadata settings configuration applied on instantiation. */
|
|
24
24
|
defaultOptions?: {
|
|
25
|
-
/** Tab and window headers text. */
|
|
26
|
-
title?: string
|
|
25
|
+
/** Tab and window headers text — plain string or i18n descriptor. */
|
|
26
|
+
title?: string | {
|
|
27
|
+
id: string;
|
|
28
|
+
defaultMessage?: string;
|
|
29
|
+
values?: Record<string, string | number>;
|
|
30
|
+
};
|
|
27
31
|
/** Icon placed next to title tags. */
|
|
28
32
|
icon?: React.ReactNode;
|
|
29
33
|
/** Initial mounting state inside the desktop layout grid. */
|
|
@@ -54,6 +58,7 @@ interface PanelRegistryEntry {
|
|
|
54
58
|
/**
|
|
55
59
|
* Registry mapping catalog entries to allow programmatic panel instantiation
|
|
56
60
|
* inside dynamic layout cells or floating windows.
|
|
61
|
+
* Exported so WorkspaceClient can create scoped, per-instance registries.
|
|
57
62
|
*/
|
|
58
63
|
declare class PanelRegistryClass {
|
|
59
64
|
private registry;
|
|
@@ -435,6 +440,9 @@ interface StyleClasses {
|
|
|
435
440
|
declare const useStyleClasses: () => StyleClasses;
|
|
436
441
|
interface WindowManagerProviderProps {
|
|
437
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;
|
|
438
446
|
formatMessage?: MessageFormatter;
|
|
439
447
|
predefinedMessages?: Record<string, ContextMenuPredefinedMessage>;
|
|
440
448
|
dir?: 'ltr' | 'rtl';
|
|
@@ -476,6 +484,85 @@ declare const usePanelContext: () => {
|
|
|
476
484
|
*/
|
|
477
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>;
|
|
478
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
|
+
|
|
479
566
|
/**
|
|
480
567
|
* Options used when requesting to close a container.
|
|
481
568
|
*/
|
|
@@ -765,4 +852,4 @@ interface SidebarHandle {
|
|
|
765
852
|
*/
|
|
766
853
|
declare const Sidebar: React__default.ForwardRefExoticComponent<SidebarProps & React__default.RefAttributes<SidebarHandle>>;
|
|
767
854
|
|
|
768
|
-
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 we,useRef as fe,useEffect as ie}from"react";import{createPortal as Tt}from"react-dom";import{createContext as De,useContext as Ae,useState as Yt,useRef as je,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"}]},jt={"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"}},Kt=[{id:"live-preview",x:450,y:200,width:320,height:250,z:1e3}],Ut=({children:i,formatMessage:l,predefinedMessages:r,dir:y,modalClass:N,modalBodyClass:C,sidePanelClass:W,sidePanelBodyClass:E,windowClass:w,windowBodyClass:M})=>{let[S,d]=Yt({gridRoot:qt,floating:Kt,minimized:[],panels:jt,draggedPanelId:null,activePanelId:"main-map",dir:y||"ltr",isRtl:y==="rtl"}),P=je(S);P.current=S;let b=je({}),T=it(()=>({...Oe,...r}),[r]),F=je(new st),p=je(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),x=Math.max(100,window.innerHeight||768);return(n+a>v||e+o>x)&&(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,x-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}})},[]),H=(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=>H(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,j=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),j&&(Re=Q-ge-Ee),{...e,floating:[...e.floating,{...k,id:t,z:p.current,x:be,y:Re,stickyRight:L,stickyBottom:j}],panels:D}}else{let k=I(e.gridRoot)||"group-left-top";return{...e,gridRoot:f(e.gridRoot,k,t),panels:D}}})},[R,A]),B=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=H(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){B(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;B(t)},[B]),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 x of v.children){let O=c(x);if(O)return O}return null};o=c(s.gridRoot)}let m=H(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=(x,O)=>x.type==="leaf"?x.id===O:x.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 x=n.lastFloatingRect||c?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},O=R(x,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 x=I(s.gridRoot)||"group-left-top";return{...s,minimized:e,gridRoot:f(s.gridRoot,x,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=H(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=H(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"}}}})},[]),U=(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=>U(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=H(e.gridRoot,t),c;return n==="center"?c=f(m||e.gridRoot,s,t):c=U(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=H(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=H(e.gridRoot,t),m=x=>{if(x.type==="leaf"){if(x.id===s){let O=x.panels.filter(L=>L!==t),D=Math.max(0,Math.min(n,O.length)),k=[...O];return k.splice(D,0,t),{...x,panels:k,activePanelId:t}}return x}else return{...x,children:x.children.map(m)}},c=m(o||e.gridRoot),v=e.floating.filter(x=>x.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,x)=>v+x,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:S.gridRoot,floating:S.floating,minimized:S.minimized,panels:S.panels}),[S]),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:B,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,B,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:C,sidePanelClass:W,sidePanelBodyClass:E,windowClass:w,windowBodyClass:M}),[N,C,W,E,w,M]);return We(Pt.Provider,{value:tt,children:We(ht.Provider,{value:S,children:We(yt.Provider,{value:_e,children:We(bt.Provider,{value:l||et,children:We(vt.Provider,{value:T,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 xt(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 Ct}from"react/jsx-runtime";var nn=0,lt=()=>`panel-${++nn}-${Date.now()}`,Ke=new Map,wt={leftPanel:null,rightPanel:null,modals:[]},kt=Mt(null),It=Mt(null),on=({children:i})=>{let[l,r]=_t(wt),y=tn(l);y.current=l;let N=le((p,h)=>{Ke.set(p,h)},[]),C=le(p=>{Ke.delete(p)},[]),W=le(async(p,h,u={})=>{let R=y.current.leftPanel;if(R){let f=Ke.get(R.id);if(f&&!await f())return null}let A=lt(),H={id:A,Component:p,props:h,containerType:"left-panel",options:u};return r(f=>({...f,leftPanel:H})),A},[]),E=le(async(p,h,u={})=>{let R=y.current.rightPanel;if(R){let f=Ke.get(R.id);if(f&&!await f())return null}let A=lt(),H={id:A,Component:p,props:h,containerType:"right-panel",options:u};return r(f=>({...f,rightPanel:H})),A},[]),w=le((p,h,u={})=>{let R=lt(),A=h.title,H={...u,title:u.title||A||"Confirmation"},f={id:R,Component:p,props:h,containerType:"modal",options:H};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)}))},[]),S=le(()=>{r(wt)},[]),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)}))},[]),T=le((p,h,u)=>{b(p,{dirty:h,dirtyOptions:u})},[b]),F=en(()=>({openLeftPanel:W,openRightPanel:E,openModal:w,close:M,closeAll:S,closeAllModals:d,getInstance:P,updateInstance:b,setDirty:T,registerCloseHandler:N,unregisterCloseHandler:C}),[W,E,w,M,S,d,P,b,T,N,C]);return Ct(kt.Provider,{value:l,children:Ct(It.Provider,{value:F,children:i})})},xe=()=>{let i=Rt(kt);if(!i)throw new Error("usePanelState must be used within PanelProvider");return i},Se=()=>{let i=Rt(It);if(!i)throw new Error("usePanelActions must be used within PanelProvider");return i};import{useEffect as St,useRef as sn}from"react";import{jsx as Te,jsxs as dt}from"react/jsx-runtime";var an=({title:i,message:l,alert:r,alertType:y="info",useYesNoTitles:N=!1,onOK:C,onCancel:W})=>{let{requestClose:E,setIcon:w,setTitle:M}=rt(),S=oe(),d=ae(),P=sn(null);St(()=>{if(i){let u=typeof i=="string"?i:S(i);M(u)}w&&w(Te("span",{children:"\u2753"}))},[i,M,w,S]),St(()=>{P.current?.focus()},[]);let b=typeof l=="string"?l:S(l),T=S(N?d.no:d.cancel),F=S(N?d.yes:d.ok),p=u=>{u.preventDefault(),C?.(),E()},h=()=>{W?.(),E()};return dt("form",{onSubmit:p,className:"p-3 d-flex flex-column gap-3",children:[r&&dt("div",{className:`alert alert-${y==="danger"?"danger":y} d-flex align-items-center gap-2 m-0 p-2.5 small`,children:[Te("span",{children:"\u2139\uFE0F"}),Te("span",{children:r})]}),Te("div",{style:{fontSize:"0.9rem",color:"inherit",lineHeight:1.5},children:b}),Te("hr",{className:"my-2 opacity-10"}),dt("div",{className:"d-flex justify-content-end gap-2",children:[Te("button",{type:"button",className:"btn btn-sm btn-outline-secondary font-monospace",onClick:h,children:T}),Te("button",{type:"submit",className:"btn btn-sm btn-primary font-monospace",ref:P,children:F})]})]})},ze=an;import{Fragment as fn,jsx as g,jsxs as K}from"react/jsx-runtime";var He=new Map,Je="preserved-dom-container",ct=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"})]}),zt=i=>{let l=He.get(i);return l||(l=document.createElement("div"),l.style.width="100%",l.style.height="100%",He.set(i,l)),l},ln=(i,l)=>{let r=_.get(l);if(!r)return K("div",{className:"w-100 h-100 d-flex flex-column align-items-center justify-content-center bg-transparent text-danger font-monospace p-3 text-center",style:{border:"2px dashed var(--bs-danger, #dc3545)"},children:[g("h6",{className:"fw-bold mb-1",children:"\u26A0\uFE0F Component Unregistered"}),K("span",{className:"small text-muted",children:["Key: ",l]})]});let y=r.Component;return g(y,{panelId:i})},Lt=new Map,Ne=new Map,Ue=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(C=>{for(let W of C){let{width:E,height:w}=W.contentRect;if(E>0&&w>0){Lt.set(i,{width:E,height:w});let M=Ne.get(i);M&&M.onResize.forEach(S=>S(E,w))}}});return N.observe(r),()=>{N.disconnect();let C=document.getElementById(Je);C||(C=document.createElement("div"),C.id=Je,C.style.display="none",document.body.appendChild(C)),C.appendChild(y)}},[i]),g("div",{ref:l,className:"w-100 h-100"})},dn=({panelId:i})=>{let l=pe(),r=oe(),y=fe(null),N=l.panels[i],C=N?_.get(N.component):null,W=C?.defaultOptions?.disableLivePreview||!1,E=Lt.get(i)||{width:800,height:500},w=E.width,M=E.height,P=Math.min(220/w,140/M);if(ie(()=>{if(W)return;let b=y.current;if(!b)return;let T=He.get(i);if(T)return b.appendChild(T),()=>{let F=document.getElementById(Je);F||(F=document.createElement("div"),F.id=Je,F.style.display="none",document.body.appendChild(F)),F.appendChild(T)}},[i,W]),W){let b=w*P,T=M*P,F=N?.title||C?.defaultOptions?.title||"Panel",p=G(F,r),h=(Array.from(p)[0]||"P").toUpperCase();return g("div",{className:"taskbar-item-preview-frame d-flex align-items-center justify-content-center",style:{width:`${b}px`,height:`${T}px`,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:`${w*P}px`,height:`${M*P}px`},children:g("div",{ref:y,className:"taskbar-item-preview-host",style:{width:`${w}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:C,unregisterCloseGuard:W,updatePanelTitle:E}=ke(),w=r.minimized.some(d=>d.id===i),M=fe(w);ie(()=>{let d=Ne.get(i);d&&(w&&!M.current?d.onMinimize.forEach(P=>P()):!w&&M.current&&d.onRestore.forEach(P=>P()),M.current=w)},[w,i]),ie(()=>()=>{let d=Ne.get(i);d&&(d.onClose.forEach(P=>P()),Ne.delete(i))},[i]);let S=ut.useMemo(()=>({requestClose:d=>y(i,d),setDirty:d=>N(i,d),onCloseRequested:d=>(C(i,d),()=>W(i)),setTitle:d=>E(i,d),instanceId:i,onClose:d=>{let P=Ue(i);return P.onClose.add(d),()=>P.onClose.delete(d)},onMinimize:d=>{let P=Ue(i);return P.onMinimize.add(d),()=>P.onMinimize.delete(d)},onRestore:d=>{let P=Ue(i);return P.onRestore.add(d),()=>P.onRestore.delete(d)},onResize:d=>{let P=Ue(i);return P.onResize.add(d),()=>P.onResize.delete(d)}}),[i,y,N,C,W,E]);return g(Ie,{value:S,children:l})},Nt=({node:i,path:l,onTabRightClick:r,activeDropZone:y,onHoverDropZone:N,onTabDragStart:C,hoveredTab:W,onTabHover:E,defaultPanelIcon:w,onRequestClosePanel:M})=>{let{updateSplitSizes:S}=ke();if(i.type==="leaf")return g(un,{leaf:i,onTabRightClick:r,activeDropZone:y,onHoverDropZone:N,onTabDragStart:C,hoveredTab:W,onTabHover:E,defaultPanelIcon:w,onRequestClosePanel:M});let d=i.orientation==="horizontal",P=(b,T)=>{T.preventDefault();let F=d?T.clientX:T.clientY,p=[...i.sizes],h=T.currentTarget;h.classList.add("active"),document.body.classList.add("resizing-active",d?"resizing-row-active":"resizing-col-active");let u=T.currentTarget.parentElement,R=u?d?u.clientWidth:u.clientHeight:d?1e3:800,A=f=>{let B=((d?f.clientX:f.clientY)-F)/R,$=[...p];$[b]+=B,$[b+1]-=B,$[b]>.1&&$[b+1]>.1&&S(l,$)},H=()=>{h.classList.remove("active"),document.body.classList.remove("resizing-active","resizing-row-active","resizing-col-active"),window.removeEventListener("mousemove",A),window.removeEventListener("mouseup",H)};window.addEventListener("mousemove",A),window.addEventListener("mouseup",H)};return g("div",{className:`d-flex w-100 h-100 ${d?"flex-row":"flex-column"}`,style:{overflow:"hidden",position:"relative"},children:i.children.map((b,T)=>{let F=i.sizes[T]*100;return K(ut.Fragment,{children:[g("div",{style:{flexGrow:i.sizes[T],flexBasis:`${F}%`,overflow:"hidden",position:"relative"},children:g(Nt,{node:b,path:[...l,T],onTabRightClick:r,activeDropZone:y,onHoverDropZone:N,onTabDragStart:C,hoveredTab:W,onTabHover:E,defaultPanelIcon:w,onRequestClosePanel:M})}),T<i.children.length-1&&g("div",{onMouseDown:p=>P(T,p),style:{cursor:d?"col-resize":"row-resize",width:d?"1px":"100%",height:d?"100%":"1px",zIndex:20},className:"resizer-bar"})]},T)})})},un=({leaf:i,onTabRightClick:l,activeDropZone:r,onHoverDropZone:y,onTabDragStart:N,hoveredTab:C,onTabHover:W,defaultPanelIcon:E,onRequestClosePanel:w})=>{let M=pe(),{openPanel:S,closeLeafGroup:d,setActivePanel:P}=ke(),b=oe(),T=ae(),{windowClass:F,windowBodyClass:p}=Pe(),h=u=>{S(u,M.panels[u].component),P(u)};return K("div",{"data-active-panel-id":i.activePanelId||"",className:`workspace-panel w-100 h-100 d-flex flex-column ${F??""}`,style:{overflow:"hidden",position:"relative"},children:[K("div",{className:"workspace-tab-bar d-flex flex-row justify-content-between align-items-center",style:{minHeight:"38px"},children:[g("div",{className:"d-flex flex-row overflow-x-auto flex-grow-1 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 H=i.activePanelId===u,f=M.activePanelId===u,z=_.get(A.component)?.defaultOptions,B=C&&C.leafId===i.id&&C.panelId===u,$=R===i.panels.length-1,Z=C&&C.leafId===i.id&&C.panelId==="EMPTY"&&$,ne=B?C.side==="left"?"drag-hover-left":"drag-hover-right":Z?"drag-hover-right":"";return K("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 ${H?f?"active workspace-tab-active-focused":"active workspace-tab-active-unfocused":"workspace-tab-inactive"} ${ne}`,style:{cursor:z?.canDrag===!1?"default":"pointer"},children:[K("span",{className:"text-truncate d-flex align-items-center",style:{maxWidth:"120px"},children:[g("span",{className:"workspace-tab-icon",children:z?.icon||E||ct}),K("span",{children:[G(A.title,b),A.dirty?" *":""]})]}),z?.renderHeaderActions&&g("span",{className:"tab-header-actions ms-auto d-flex align-items-center me-1",style:{gap:"var(--header-button-gap, 4px)"},onClick:q=>q.stopPropagation(),onMouseDown:q=>q.stopPropagation(),children:z.renderHeaderActions(u)}),z?.canClose!==!1&&g("span",{onClick:q=>{q.stopPropagation(),w(u)},title:G(T.closeTab,b),className:`close-tab-x ${z?.renderHeaderActions?"":"ms-auto"} d-flex align-items-center justify-content-center`,style:{width:"18px",height:"18px"},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 d-flex align-items-center justify-content-center me-2 header-close-empty-group",style:{width:"18px",height:"18px",cursor:"pointer"},title:G(T.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"})})})]}),K("div",{className:`flex-grow-1 w-100 h-100 bg-transparent ${p??""}`,style:{position:"relative",overflow:"hidden"},children:[i.activePanelId&&M.panels[i.activePanelId]?g(Et,{panelId:i.activePanelId},i.activePanelId):g("div",{className:"w-100 h-100 d-flex align-items-center justify-content-center font-monospace text-muted small empty-leaf-placeholder",children:g("span",{children:"Empty Workspace Section"})}),M.draggedPanelId!==null&&g("div",{className:"dock-drop-zone-overlay",children:K("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:C,maximizePanel:W,updateFloatingPosition:E,bringToFront:w,floatPanel:M,setDraggedPanelId:S,dockPanelToGroup:d,movePanelOrder:P,dockPanelToWorkspaceEdge:b,setActivePanel:T,setDirection:F}=ke(),{openModal:p}=Se(),h=oe(),u=ae(),R=ut.useCallback(e=>{let a=r.panels[e];C(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"})})})},[C,r.panels,h,p,u]),{windowClass:A,windowBodyClass:H}=Pe(),f=fe(null),I=fe(null),[z,B]=we(null),$=fe(null),[Z,ne]=we(!1);ie(()=>()=>{$.current&&clearTimeout($.current)},[]),ie(()=>{z&&(r.minimized.some(a=>a.id===z.id)||B(null))},[r.minimized,z]);let[ce,q]=we(null),V=fe(null),[ee,me]=we({x:0,y:0}),[he,U]=we(null),te=fe(null),X=e=>{U(e),te.current=e},[ye,Me]=we(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,S(e)),c&&me({x:D.clientX,y:D.clientY})},x=D=>{if(window.removeEventListener("mousemove",v),window.removeEventListener("mouseup",O),c){let k=V.current,L=ve.current,j=te.current;if(j)b(e,j);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});S(null),q(null),V.current=null,Me(null),ve.current=null,X(null)}},O=D=>{x(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(),B(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(He.keys()))e.includes(a)||He.delete(a)},[r.panels]),ie(()=>{let e=()=>{r.draggedPanelId!==null&&(S(null),q(null),Me(null))};return window.addEventListener("blur",e),()=>{window.removeEventListener("blur",e)}},[r.draggedPanelId]);let Le=fe(null),[ue,_e]=we({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=xt(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,x=typeof o.y=="string"?parseFloat(o.y):o.y,O=m,D=c,k=v,L=x,j=!1;O>e&&(O=Math.max(200,e-20),j=!0),D>a&&(D=Math.max(150,a-40),j=!0);let J=10;if(o.stickyRight)k=e-O-J,j=!0;else{let Q=e-100;k>Q&&(k=Math.max(0,Q),j=!0)}if(o.stickyBottom)L=a-D-J,j=!0;else{let Q=a-40;L>Q&&(L=Math.max(0,Q),j=!0)}j&&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&&(T(v),w(v));return}let c=o.closest(".workspace-panel");if(c){let v=c.getAttribute("data-active-panel-id");v&&T(v)}};return document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[w,T]);let et=(e,a)=>{let o=r.floating.find(J=>J.id===e);if(!o||o.maximized)return;w(e);let m=a.clientX,c=a.clientY,x=a.currentTarget.closest(".floating-window"),O=x?x.offsetLeft:0,D=x?x.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,S(e)),k){let ge=O+Q,be=D+re;E(e,{x:ge,y:be,stickyRight:!1,stickyBottom:!1})}},j=()=>{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);S(null),q(null),V.current=null,Me(null),ve.current=null,X(null)}window.removeEventListener("mousemove",L),window.removeEventListener("mouseup",j)};window.addEventListener("mousemove",L),window.addEventListener("mouseup",j)},tt=(e,a)=>{a.stopPropagation();let o=r.floating.find(j=>j.id===e);if(!o||o.maximized)return;w(e);let m=a.clientX,c=a.clientY,x=a.currentTarget.closest(".floating-window"),O=x?x.offsetWidth:400,D=x?x.offsetHeight:300,k=j=>{let J=j.clientX-m,Q=j.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,Ht=typeof o.x=="string"?parseFloat(o.x):o.x,Bt=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(Ht+$t-Ee)<4,mt=Math.abs(Bt+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]=we("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()},[]),K("div",{"data-workspace-skin":i,"data-bs-theme":s,className:"d-flex flex-column w-100 h-100 overflow-hidden",style:{userSelect:"none"},dir:r.dir,children:[K("div",{ref:Le,className:`flex-grow-1 w-100 position-relative ${r.draggedPanelId?"dragging-active":""}`,style:{overflow:"hidden"},children:[r.draggedPanelId!==null&&K(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",{className:"w-100 h-100",style:{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:"w-100 h-100 d-flex align-items-center justify-content-center text-muted font-monospace small",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,x=_.get(a.component)?.defaultOptions;return K("div",{"data-window-id":e.id,dir:r.dir,onMouseDownCapture:()=>{T(e.id),w(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:[K("div",{onDoubleClick:()=>W(e.id),onMouseDown:O=>{x?.canDrag!==!1&&et(e.id,O)},className:"floating-window-titlebar d-flex flex-row justify-content-between align-items-center cursor-move",style:{cursor:o||x?.canDrag===!1?"default":"move"},children:[K("span",{className:"floating-window-title text-truncate me-2 d-flex align-items-center",children:[g("span",{className:"window-title-icon",children:x?.icon||l||ct}),K("span",{children:[G(a.title,h),a.dirty?" *":""]})]}),K("div",{className:"d-flex align-items-center",style:{gap:"var(--header-button-gap, 4px)"},onMouseDown:O=>O.stopPropagation(),children:[x?.renderHeaderActions&&g("div",{className:"window-header-actions d-flex align-items-center me-1",style:{gap:"var(--header-button-gap, 4px)"},children:x.renderHeaderActions(e.id)}),x?.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,j=typeof e.width=="string"?parseFloat(e.width):e.width;D?E(e.id,{stickyRight:!1}):E(e.id,{x:L-j-10,stickyRight:!0})}},{label:G(u.anchorToBottomEdge,h),checkbox:{active:!0,enabled:!0,value:k},action:()=>{let L=ue.height,j=typeof e.height=="string"?parseFloat(e.height):e.height;k?E(e.id,{stickyBottom:!1}):E(e.id,{y:L-j-10,stickyBottom:!0})}}]}})},className:"custom-tab-btn btn-anchor-tab",children:K("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"})})}),x?.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"})})}),x?.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:`flex-grow-1 w-100 overflow-hidden ${H??""}`,style:{position:"relative"},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&&K("div",{className:"flex-shrink-0 w-100 d-flex flex-row align-items-center taskbar-footer-container px-3 py-1.5 justify-content-center",style:{height:"48px",zIndex:100},children:[g("button",{type:"button",onClick:()=>t("left"),className:"btn btn-sm btn-link taskbar-nav-btn text-decoration-none py-0 font-monospace",style:{display:r.minimized.length>4?"block":"none"},children:"\u25C0"}),g("div",{ref:f,className:"d-flex flex-row gap-2 overflow-x-auto align-items-center mx-2 px-1 py-0.5 scrollbar-hidden",style:{maxWidth:"800px",scrollbarWidth:"none",scrollSnapType:"x mandatory"},children:r.minimized.map(e=>{let o=_.get(e.component)?.defaultOptions?.icon||l||ct;return g("div",{onClick:()=>{B(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&&B({id:e.id,rect:c,title:e.title,component:e.component})},onMouseLeave:()=>{$.current=setTimeout(()=>{B(null)},150)},className:"taskbar-glassmorphic-item rounded d-flex align-items-center justify-content-center cursor-pointer hover-elevate",style:{backdropFilter:"blur(6px)",transition:"all 0.2s",cursor:"pointer",scrollSnapAlign:"start",width:"38px",height:"38px",position:"relative",padding:0},children:g("span",{className:"taskbar-item-icon d-flex align-items-center justify-content-center",children:o})},e.id)})}),z&&Tt(K("div",{className:"taskbar-item-tooltip d-flex flex-column gap-1",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:()=>{B(null)},onClick:()=>{y(z.id),B(null)},children:[K("div",{className:"d-flex flex-row align-items-center justify-content-between w-100 gap-3 px-1 py-0.5",children:[K("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),B(null)},title:G(u.closePanel,h),className:"tooltip-close-x d-flex align-items-center justify-content-center",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:"btn btn-sm btn-link taskbar-nav-btn text-decoration-none py-0 font-monospace",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 Tt(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)&&K("div",{className:"position-fixed bg-black bg-opacity-80 border border-info rounded text-info font-monospace px-3 py-1.5 shadow-lg d-flex align-items-center gap-2",style:{left:ee.x+12,top:ee.y+12,zIndex:1e5,pointerEvents:"none",fontSize:"0.75rem",boxShadow:"0 8px 24px rgba(0,0,0,0.5)",borderLeft:"3px solid var(--accent-color)",whiteSpace:"nowrap"},children:["\u{1F4C4} ",G(r.panels[r.draggedPanelId]?.title,h)||"Tab"]})]})},pn=gn;import{useCallback as Be,useRef as Ft,useEffect as mn,useState as hn,useMemo as yn}from"react";import{Fragment as xn,jsx as de,jsxs as gt}from"react/jsx-runtime";var bn=({modal:i,index:l,isTopmost:r})=>{let{close:y,openModal:N,updateInstance:C,setDirty:W}=Se(),E=oe(),w=ae(),{dir:M}=pe(),{modalClass:S,modalBodyClass:d}=Pe(),P=Ft(null),{id:b,Component:T,props:F,options:p,dirty:h,dirtyOptions:u}=i,R=p,[A,H]=hn(R.icon||null),f=Ft(R);f.current=R;let I=G(R.title,E),z=Be(async U=>{if(U?.force){y(b);return}if(P.current){if(!await P.current())return;y(b);return}if(h){N(ze,{title:u?.title||w.unsavedChangesTitle,message:u?.message||{id:w.unsavedChangesMessage.id,defaultMessage:w.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,w]),B=Be((U,te)=>W(b,U,te),[W,b]),$=Be(U=>C(b,{options:{...f.current,title:U}}),[C,b]),Z=Be(U=>H(U),[]),ne=Be(U=>(P.current=U,()=>{P.current=null}),[]),ce=yn(()=>({requestClose:z,setDirty:B,setTitle:$,setIcon:Z,onCloseRequested:ne,containerType:"modal",instanceId:b}),[z,B,$,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 U=te=>{te.key==="Escape"&&(te.stopPropagation(),z())};return document.addEventListener("keydown",U),()=>document.removeEventListener("keydown",U)},[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} ${S??""}`,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(w.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(T,{...F,panelId:b})})})]})]})},vn=()=>{let{modals:i}=xe();return i.length===0?null:de(xn,{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 wn,useMemo as Cn}from"react";import{Fragment as Sn,jsx as se,jsxs as pt}from"react/jsx-runtime";var Ze=({panel:i,position:l,defaultWidth:r})=>{let{close:y,openModal:N,updateInstance:C,setDirty:W,registerCloseHandler:E,unregisterCloseHandler:w}=Se(),{modals:M}=xe(),S=oe(),d=ae(),{dir:P}=pe(),{sidePanelClass:b,sidePanelBodyClass:T}=Pe(),F=Ot(null),{id:p,Component:h,props:u,options:R,dirty:A,dirtyOptions:H}=i,f=R,[I,z]=wn(f.icon||null),B=Ot(f);B.current=f;let $=G(f.title,S),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:H?.title||d.unsavedChangesTitle,message:H?.message||{id:d.unsavedChangesMessage.id,defaultMessage:d.unsavedChangesMessage.defaultMessage,values:{title:$}},alert:H?.alert,alertType:H?.alertType||"danger",useYesNoTitles:!0,onOK:()=>y(p)},{size:"small"});return}y(p)},[y,N,p,A,H,$,d]),ne=Fe(async()=>F.current?await F.current():!A,[A]);Wt(()=>(E(p,ne),()=>w(p)),[p,ne,E,w]);let ce=Fe((X,ye)=>W(p,X,ye),[W,p]),q=Fe(X=>C(p,{options:{...B.current,title:X}}),[C,p]),V=Fe(X=>z(X),[]),ee=Fe(X=>(F.current=X,()=>{F.current=null}),[]),me=Cn(()=>({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 U=f.width||r||400,te=typeof U=="number"?`${U}px`:U;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:S(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 ${T??""}`,children:se(Ie,{value:me,children:se(h,{...u,panelId:p})})})]})})},Mn=({defaultWidth:i})=>{let{leftPanel:l,rightPanel:r}=xe();return pt(Sn,{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}=xe();return l?se(Ze,{panel:l,position:"left",defaultWidth:i},l.id):null},kn=({defaultWidth:i})=>{let{rightPanel:l}=xe();return l?se(Ze,{panel:l,position:"right",defaultWidth:i},l.id):null},In=Mn;import{useState as Dt,useEffect as Qe,useRef as Tn,useCallback as At,useImperativeHandle as zn,forwardRef as Ln}from"react";import{Fragment as Nn,jsx as Ce,jsxs as Ve}from"react/jsx-runtime";var En=Ln(function({position:l="right",tabs:r,drawerWidth:y="220px",activeTabId:N,onActiveTabChange:C,children:W},E){let w=N!==void 0,M=oe(),S=ae(),[d,P]=Dt(null),b=w?N:d,[T,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&&!T.has(I.id));f.length>0&&F(I=>{let z=new Set(I);for(let B of f)z.add(B.id);return z})},[r]);let p=Tn(b??null);Qe(()=>{p.current=b??null},[b]);let h=At(f=>{w||P(f),C?.(f)},[w,C]);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&&!T.has(b)&&F(f=>{let I=new Set(f);return I.add(b),I})},[b,T]),Qe(()=>{b===null&&F(f=>{let I=!1,z=new Set(f);for(let B of f){let $=r.find(Z=>Z.id===B);$&&!$.eagerMount&&!$.preserveState&&(z.delete(B),I=!0)}return I?z:f})},[b,r]);let A=Ce("div",{className:`sidebar-tabs-strip ${l}`,style:{width:"56px",height:"100%"},children:r.map(f=>{let I=b===f.id;return Ce("button",{type:"button",onClick:()=>u(f.id),className:`sidebar-tab-btn ${I?"active":""}`,title:f.label,"aria-pressed":I,children:f.icon},f.id)})}),H=Ce("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(!T.has(f.id))return null;let z=b===f.id,B=()=>h(f.id);return Ve("div",{style:{display:z?"flex":"none",flexDirection:"column",height:"100%",width:"100%"},children:[Ve("div",{className:"d-flex align-items-center justify-content-between border-bottom border-secondary-subtle px-3 py-2 flex-shrink-0",style:{background:"rgba(0,0,0,0.08)",minHeight:"38px"},children:[Ce("span",{className:"sidebar-header-title",children:f.label}),Ce("button",{type:"button",onClick:R,className:"btn btn-link p-0 text-secondary d-flex align-items-center",style:{textDecoration:"none"},title:M(S.closePanelTooltip),"aria-label":M(S.closePanelTooltip),children:Ve("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[Ce("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),Ce("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),Ce("div",{className:"flex-grow-1 overflow-auto",children:f.renderContent(f.id,R,B)})]},f.id)})});return Ve(Nn,{children:[l==="left"&&A,l==="left"&&H,W,l==="right"&&H,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,Ut as WindowManagerProvider,Oe as defaultPredefinedMessages,G as formatLabel,rt as useFormContainer,oe as useFormatMessage,Se as usePanelActions,Jt as usePanelContext,xe 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
|