dock-spawn-ts 3.20.0 → 3.22.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/lib/js/Dialog.js +6 -4
- package/lib/js/Dialog.js.map +1 -1
- package/lib/js/SplitterPanel.d.ts +5 -0
- package/lib/js/SplitterPanel.js +65 -2
- package/lib/js/SplitterPanel.js.map +1 -1
- package/lib/js/index-min.js +3 -3
- package/lib/js/index-webcomponent-min.js +4 -4
- package/package.json +1 -1
- package/src/Dialog.ts +11 -9
- package/src/ResizableContainer.ts +14 -14
- package/src/SplitterPanel.ts +94 -21
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var M;(function(
|
|
1
|
+
var M;(function(r){r.document="document",r.panel="panel"})(M||(M={}));var w;(function(r){r[r.None=0]="None",r[r.North=1]="North",r[r.NorthEast=2]="NorthEast",r[r.East=4]="East",r[r.SouthEast=8]="SouthEast",r[r.South=16]="South",r[r.SouthWest=32]="SouthWest",r[r.West=64]="West",r[r.NorthWest=128]="NorthWest",r[r.Sides=85]="Sides",r[r.Angles=170]="Angles",r[r.All=255]="All"})(w||(w={}));var x;(function(r){r[r.TOP=0]="TOP",r[r.BOTTOM=1]="BOTTOM",r[r.LEFT=2]="LEFT",r[r.RIGHT=3]="RIGHT"})(x||(x={}));var f;(function(r){r.left="left",r.right="right",r.top="top",r.down="down",r.fill="fill",r["left-s"]="left-s",r["right-s"]="right-s",r["top-s"]="top-s",r["down-s"]="down-s"})(f||(f={}));var ie={CloseDialog:"Close dialog",CloseAll:"Close all documents",CloseAllButThis:"Close all documents but this",DefaultPanelName:"Panel",NewBrowserWindow:"Open in new window"};function oe(r,...e){return r.replace(/{(\d+)}/g,(t,i)=>{let n=Number.parseInt(i);return e[n].toString()})}var y=class r{static configure(e){r._getTemplateString=e}static getString(e,...t){return oe(r._getTemplateString?.(e)??ie[e],...t)}static _getTemplateString};function ne(r,e){let t=r.resolvedElementContent,i=t,n=i.getBoundingClientRect(),o={x:n.x+24,y:n.y+60,width:n.width,height:n.height},s=window.open("about:blank",void 0,`popup=yes,left=${o.x},top=${o.y},width=${o.width},height=${o.height}`);r.dockManager.prepareElementForNewWindow&&(i=r.dockManager.prepareElementForNewWindow(t,e,s)),s.onfocus=u=>e.focused(u),s.onblur=u=>e.blured(u);let l=[...document.head.querySelectorAll("link")].map(u=>u.cloneNode());for(let u of l)s.document.head.appendChild(s.document.adoptNode(u));let a=s.document.createElement("style");if(a.innerText=`
|
|
2
2
|
html {
|
|
3
3
|
overflow: hidden;
|
|
4
4
|
position: fixed;
|
|
@@ -10,8 +10,8 @@ var M;(function(a){a.document="document",a.panel="panel"})(M||(M={}));var C;(fun
|
|
|
10
10
|
width: 100%;
|
|
11
11
|
margin: 0;
|
|
12
12
|
}
|
|
13
|
-
`,s.document.head.appendChild(
|
|
14
|
-
`;let l=new a.CSSStyleSheet;return t.set(e,l),l.replaceSync(n),l}var w;(function(a){a.horizontal="horizontal",a.vertical="vertical",a.fill="fill",a.panel="panel"})(w||(w={}));var m=class{target;eventName;source;constructor(e,t,i,n){this.target=i,this.eventName=t,this.source=e,this.source.addEventListener(t,this.target,n)}cancel(){this.source.removeEventListener(this.eventName,this.target)}};var v=class{x;y;constructor(e,t){this.x=e,this.y=t}};var d=class a{static _counter=0;static getPixels(e){return e===null?0:parseInt(e.replace("px",""))}static disableGlobalTextSelection(e){e.classList.add("disable-selection")}static enableGlobalTextSelection(e){e.classList.remove("disable-selection")}static isPointInsideNode(e,t,i){let o=i.container.containerElement.getBoundingClientRect();return e>=o.left&&e<=o.left+o.width&&t>=o.top&&t<=o.top+o.height}static getNextId(e){return e+a._counter++}static removeNode(e){return e.parentNode===null?!1:(e.parentNode.removeChild(e),!0)}static orderByIndexes(e,t){let i=[];for(let n=0;n<t.length;n++)i.push(e[t[n]]);return i}static arrayRemove(e,t){let i=e.indexOf(t);return i!==-1?e.splice(i,1):!1}static arrayContains(e,t){let i=e.length;for(;i--;)if(e[i]===t)return!0;return!1}static arrayEqual(e,t){if(e===t)return!0;if(e==null||t==null||e.length!=t.length)return!1;for(let i=0;i<e.length;++i)if(e[i]!==t[i])return!1;return!0}};var U=class{dialog;delegate;containerElement;dockManager;topLevelElement;containerType;mouseDownHandler;touchDownHandler;minimumAllowedChildNodes;previousMousePosition;dragOffset;mouseMoveHandler;mouseUpHandler;iframeEventHandlers;constructor(e,t,i,n){this.dialog=e,this.delegate=t,this.containerElement=t.containerElement,this.dockManager=t.dockManager,this.topLevelElement=i,this.containerType=t.containerType,this.mouseDownHandler=new m(n,"mousedown",this.onMouseDown.bind(this)),this.touchDownHandler=new m(n,"touchstart",this.onMouseDown.bind(this)),this.topLevelElement.style.left=i.offsetLeft+"px",this.topLevelElement.style.top=i.offsetTop+"px",this.minimumAllowedChildNodes=t.minimumAllowedChildNodes,this.iframeEventHandlers=[]}destroy(){this.removeDecorator(),this.delegate.destroy()}saveState(e){this.delegate.saveState(e)}loadState(e){this.delegate.loadState(e)}setActiveChild(){}get width(){return this.delegate.width}get height(){return this.delegate.height}get name(){return this.delegate.name}set name(e){e&&(this.delegate.name=e)}resize(e,t){this.delegate.resize(e,t)}performLayout(e){this.delegate.performLayout(e,!1)}removeDecorator(){this.mouseDownHandler&&(this.mouseDownHandler.cancel(),delete this.mouseDownHandler),this.touchDownHandler&&(this.touchDownHandler.cancel(),delete this.touchDownHandler)}onMouseDown(e){if(e.button!=2&&(e.preventDefault&&e.preventDefault(),this._startDragging(e),this.previousMousePosition={x:e.clientX,y:e.clientY},this.setDragOffset(e.clientX,e.clientY),this.mouseMoveHandler&&(this.mouseMoveHandler.cancel(),delete this.mouseMoveHandler),this.mouseUpHandler&&(this.mouseUpHandler.cancel(),delete this.mouseUpHandler),this.mouseMoveHandler=new m(window,"pointermove",this.onMouseMove.bind(this)),this.mouseUpHandler=new m(window,"pointerup",this.onMouseUp.bind(this)),this.dockManager.iframes))for(let t of this.dockManager.iframes){let i=this.onMouseMovedIframe.bind(this);this.iframeEventHandlers.push(new m(t.contentWindow,"pointermove",n=>i(n,t))),this.iframeEventHandlers.push(new m(t.contentWindow,"pointerup",this.onMouseUp.bind(this)))}}onMouseUp(e){this._stopDragging(e),this.mouseMoveHandler.cancel(),delete this.mouseMoveHandler,this.mouseUpHandler.cancel(),delete this.mouseUpHandler;for(let t of this.iframeEventHandlers)t.cancel();this.iframeEventHandlers=[]}_startDragging(e){this.containerElement.classList.add("draggable-dragging-active"),this.delegate.elementContentContainer.classList.add("draggable-dragging-active"),this.dialog.eventListener&&this.dialog.eventListener._onDialogDragStarted(this.dialog,e),d.disableGlobalTextSelection(this.dockManager.config.dialogRootElement)}_stopDragging(e){this.containerElement.classList.remove("draggable-dragging-active"),this.delegate.elementContentContainer.classList.remove("draggable-dragging-active"),this.dialog.eventListener&&this.dialog.eventListener._onDialogDragEnded(this.dialog,e),d.enableGlobalTextSelection(this.dockManager.config.dialogRootElement)}onMouseMovedIframe(e,t){let i=t.getBoundingClientRect();this.onMouseMove(e,{x:i.x,y:i.y})}onMouseMove(e,t){e.preventDefault&&e.preventDefault();let i=new v(e.clientX,e.clientY);t&&(i=new v(e.clientX+t.x,e.clientY+t.y)),this._performDragToMouse(i),this.previousMousePosition=i}setDragOffset(e,t){let i=this.topLevelElement.getBoundingClientRect();this.dragOffset=new v(e-i.left,t-i.top)}_performDragToMouse(e){let t=this.dockManager.config.dialogRootElement.getBoundingClientRect(),i=e.x-t.left-this.dragOffset.x,n=e.y-t.top-this.dragOffset.y,o=this.constrainDragPosition(i,n);this._setPosition(o.x,o.y)}constrainDragPosition(e,t){if(this.dockManager.config.moveOnlyWithinDockConatiner){let r=this.dockManager.config.dialogRootElement.getBoundingClientRect();return e=Math.min(Math.max(e,0),Math.max(0,r.width-this.topLevelElement.offsetWidth)),t=Math.min(Math.max(t,0),Math.max(0,r.height-this.topLevelElement.offsetHeight)),new v(e,t)}let i=this.dockManager.config.dialogRootElement.getBoundingClientRect(),n=40-this.topLevelElement.offsetWidth-i.left,o=window.innerWidth-40-i.left,s=-i.top,l=window.innerHeight-16-i.top;return e=Math.min(Math.max(e,n),o),t=Math.min(Math.max(t,s),l),new v(e,t)}_performDrag(e,t){let i=e+d.getPixels(this.topLevelElement.style.left),n=t+d.getPixels(this.topLevelElement.style.top);this._setPosition(i,n)}_setPosition(e,t){this.topLevelElement.style.left=e+"px",this.topLevelElement.style.top=t+"px",this.dialog.panel.setDialogPosition(e,t)}};var L=class{mouseUpHandler;touchUpHandler;mouseMoveHandler;touchMoveHandler;dragStartPosition;thresholdPixels;_enabled;mouseDownHandler;touchDownHandler;element;_undockededCallback;touchDownUndockedHandler;constructor(e,t,i){i||(i=7),this.element=e,this._undockededCallback=t,this.thresholdPixels=i,this._enabled=!1}get enabled(){return this._enabled}set enabled(e){this._enabled=e,this._enabled?(this.mouseDownHandler&&(this.mouseDownHandler.cancel(),delete this.mouseDownHandler),this.touchDownHandler&&(this.touchDownHandler.cancel(),delete this.touchDownHandler),this.mouseDownHandler=new m(this.element,"mousedown",this.onMouseDown.bind(this)),this.touchDownHandler=new m(this.element,"touchstart",this.onMouseDown.bind(this),{passive:!1})):(this.mouseDownHandler&&(this.mouseDownHandler.cancel(),delete this.mouseDownHandler),this.touchDownHandler&&(this.touchDownHandler.cancel(),delete this.touchDownHandler),this.mouseUpHandler&&(this.mouseUpHandler.cancel(),delete this.mouseUpHandler),this.touchUpHandler&&(this.touchUpHandler.cancel(),delete this.touchUpHandler),this.mouseMoveHandler&&(this.mouseMoveHandler.cancel(),delete this.mouseMoveHandler),this.touchMoveHandler&&(this.touchMoveHandler.cancel(),delete this.touchMoveHandler))}onMouseDown(e){if(e.preventDefault(),this.enabled){if(e.touches){if(e.touches.length>1)return;e=e.touches[0]}this.mouseUpHandler&&(this.mouseUpHandler.cancel(),delete this.mouseUpHandler),this.touchUpHandler&&(this.touchUpHandler.cancel(),delete this.touchUpHandler),this.mouseMoveHandler&&(this.mouseMoveHandler.cancel(),delete this.mouseMoveHandler),this.touchMoveHandler&&(this.touchMoveHandler.cancel(),delete this.touchMoveHandler),this.mouseUpHandler=new m(window,"mouseup",this.onMouseUp.bind(this)),this.touchUpHandler=new m(window,"touchend",this.onMouseUp.bind(this)),this.mouseMoveHandler=new m(window,"mousemove",this.onMouseMove.bind(this)),this.touchMoveHandler=new m(window,"touchmove",this.onMouseMove.bind(this)),this.dragStartPosition=new v(e.clientX,e.clientY)}}onMouseUp(){this.mouseUpHandler&&(this.mouseUpHandler.cancel(),delete this.mouseUpHandler),this.touchUpHandler&&(this.touchUpHandler.cancel(),delete this.touchUpHandler),this.mouseMoveHandler&&(this.mouseMoveHandler.cancel(),delete this.mouseMoveHandler),this.touchMoveHandler&&(this.touchMoveHandler.cancel(),delete this.touchMoveHandler)}onMouseMove(e){if(e.touches){if(e.touches.length>1)return;e=e.touches[0]}if(e.buttons==0){this.onMouseUp();return}let i=new v(e.clientX,e.clientY).y-this.dragStartPosition.y;(i>this.thresholdPixels||i<-this.thresholdPixels)&&(this.enabled=!1,this._requestUndock(e))}_requestUndock(e){let t=0,i=0,n=this.element;do t+=n.offsetTop||0,i+=n.offsetLeft||0,n=n.offsetParent;while(n);let o=this.dragStartPosition.x-i,s=this.dragStartPosition.y-t,l=new v(o,s);this._undockededCallback(e,l)}};var g=class a{closePanelContainerCallback;onTitleChanged;elementPanel;elementTitle;elementTitleText;elementContentHost;name;state;elementContent;_resolvedElementContent;elementContentContainer;elementContentWrapper;dockManager;title;containerType;icon;hasChanges;minimumAllowedChildNodes;isDialog;eventListeners;undockInitiator;elementButtonClose;closeButtonClickedHandler;closeButtonTouchedHandler;mouseDownHandler;touchDownHandler;panelType;tabPage;undockedToNewBrowserWindow=!1;contextMenuHandler;lastDialogSize;_floatingDialog;_canUndock;_cachedWidth;_cachedHeight;_hideCloseButton;_grayOut;_ctxMenu;_contextMenuProvider;constructor(e,t,i,n,o){i||(i=y.getString("DefaultPanelName")),n||(n=M.panel),this.panelType=n,e._dockSpawnPanelContainer=this,this.elementContent=e,e.style.position="absolute",e.style.width="100%",e.style.height="100%",e.style.top="0",e.style.bottom="0",this.elementContentContainer=document.createElement("div"),this.elementContentContainer.className="panel-element-content-container",this.elementContentContainer.style.position="absolute",this.elementContentContainer._panel=this,this.elementContentContainer.addEventListener("pointerdown",s=>{try{this.isDialog?this._floatingDialog.bringToFront():this.tabPage&&this.tabPage.setSelected(!0,!0),this.dockManager.activePanel=this}catch{}},{passive:!0}),this.elementContentContainer.appendChild(e),t.config.dialogRootElement.appendChild(this.elementContentContainer),this.dockManager=t,this.title=i,this.containerType=w.panel,this.icon=null,this.minimumAllowedChildNodes=0,this._floatingDialog=void 0,this.isDialog=!1,this._canUndock=t._undockEnabled,this.eventListeners=[],this._hideCloseButton=o,this._contextMenuProvider=this,this.windowsContextMenuClose=this.windowsContextMenuClose.bind(this),this._initialize()}_initialize(){this.name=d.getNextId("panel_"),this.elementPanel=document.createElement("div"),this.elementPanel.tabIndex=0,this.elementTitle=document.createElement("div"),this.contextMenuHandler=new m(this.elementTitle,"contextmenu",this.oncontextMenuClicked.bind(this)),this.elementTitleText=document.createElement("div"),this.elementContentHost=document.createElement("div"),this.elementButtonClose=document.createElement("div"),this.elementPanel.appendChild(this.elementTitle),this.elementTitle.appendChild(this.elementTitleText),this.elementTitle.appendChild(this.elementButtonClose),this.elementButtonClose.classList.add("panel-titlebar-button-close"),this.elementButtonClose.style.display=this._hideCloseButton?"none":"block",this.elementPanel.appendChild(this.elementContentHost),this.elementPanel.classList.add("panel-base"),this.elementTitle.classList.add("panel-titlebar"),this.elementTitle.classList.add("disable-selection"),this.elementTitleText.classList.add("panel-titlebar-text"),this.elementContentHost.classList.add("panel-content");let e=this.elementContentContainer.clientWidth,t=this.elementContentContainer.clientHeight,i=this.elementTitle.clientHeight;this.elementContentWrapper=document.createElement("div"),this.elementContentWrapper.classList.add("panel-content-wrapper"),this._setPanelDimensions(e,t+i),this._hideCloseButton||(this.closeButtonClickedHandler=new m(this.elementButtonClose,"mousedown",this.onCloseButtonClicked.bind(this)),this.closeButtonTouchedHandler=new m(this.elementButtonClose,"touchstart",this.onCloseButtonClicked.bind(this))),d.removeNode(this.elementContentWrapper),this.elementContentHost.appendChild(this.elementContentWrapper);let n=this.elementContent.dataset.panelCaption,o=this.elementContent.dataset.panelIcon;n&&(this.title=n),o&&(this.icon=o),this._updateTitle(),this.undockInitiator=new L(this.elementTitle,this.performUndockToDialog.bind(this)),this.floatingDialog=void 0,this.mouseDownHandler=new m(this.elementPanel,"mousedown",this.onMouseDown.bind(this)),this.touchDownHandler=new m(this.elementPanel,"touchstart",this.onMouseDown.bind(this),{passive:!0}),this._resolvedElementContent=this.elementContent,this.elementContent instanceof HTMLSlotElement&&(this._resolvedElementContent=this.elementContent.assignedElements()?.[0])}static createContextMenuContentCallback=e=>{let t=[];if(e.dockManager.config.enableBrowserWindows){let i=document.createElement("div");i.innerText=y.getString("NewBrowserWindow"),t.push(i),i.onclick=()=>{e.undockToBrowserDialog(),e.closeContextMenu()}}return t};createContextMenuItems(){return a.createContextMenuContentCallback(this)}oncontextMenuClicked(e){if(e.preventDefault(),this._ctxMenu)this.closeContextMenu();else{let t=this._contextMenuProvider.createContextMenuItems();if(t.length==0)return;this._ctxMenu=document.createElement("div"),this._ctxMenu.className="dockspab-tab-handle-context-menu",this._ctxMenu.append(...t),this._ctxMenu.style.left=e.pageX+"px",this._ctxMenu.style.top=e.pageY+"px",document.body.appendChild(this._ctxMenu),window.addEventListener("mouseup",this.windowsContextMenuClose)}}closeContextMenu(){this._ctxMenu&&(document.body.removeChild(this._ctxMenu),delete this._ctxMenu,window.removeEventListener("mouseup",this.windowsContextMenuClose))}windowsContextMenuClose(e){let t=e.composedPath();for(let i in t)if(t[i]==this._ctxMenu)return;this.closeContextMenu()}canUndock(e){this._canUndock=e,this.undockInitiator.enabled=e,this.eventListeners.forEach(t=>{t.onDockEnabled&&t.onDockEnabled({self:this,state:e})})}addListener(e){this.eventListeners.push(e)}removeListener(e){this.eventListeners.splice(this.eventListeners.indexOf(e),1)}get floatingDialog(){return this._floatingDialog}set floatingDialog(e){this._floatingDialog=e;let t=this._floatingDialog===void 0;this.undockInitiator.enabled=t,this._contextMenuProvider=e??this}static async loadFromState(e,t){let i,n;if(t.getElementCallback){let s=await t.getElementCallback(e);i=s.element,n=s.title}else{let s=e.element;i=document.getElementById(s)}if(i===null)return null;let o=new a(i,t,n);return o.loadState(e),o}saveState(e){e.element=this.elementContent.id,e.width=this.width,e.height=this.height,e.canUndock=this._canUndock,e.hideCloseButton=this._hideCloseButton,e.panelType=this.panelType}loadState(e){this.width=e.width,this.height=e.height,this.state={width:e.width,height:e.height},this.canUndock(e.canUndock),this.hideCloseButton(e.hideCloseButton),this.panelType=e.panelType}setActiveChild(){}get containerElement(){return this.elementPanel}grayOut(e){!e&&this._grayOut?(this.elementContentWrapper.removeChild(this._grayOut),this.elementButtonClose.style.display=this._hideCloseButton?"none":"block",this._grayOut=null,this._hideCloseButton||this.eventListeners.forEach(t=>{t.onHideCloseButton&&t.onHideCloseButton({self:this,state:this._hideCloseButton})})):e&&!this._grayOut&&(this._grayOut=document.createElement("div"),this._grayOut.className="panel-grayout",this.elementButtonClose.style.display="none",this.elementContentWrapper.appendChild(this._grayOut),this.eventListeners.forEach(t=>{t.onHideCloseButton&&t.onHideCloseButton({self:this,state:!0})}))}onMouseDown(){this.dockManager.activePanel=this}hideCloseButton(e){this._hideCloseButton=e,this.elementButtonClose.style.display=e?"none":"block",this.eventListeners.forEach(t=>{t.onHideCloseButton&&t.onHideCloseButton({self:this,state:e})})}destroy(){this.mouseDownHandler&&(this.mouseDownHandler.cancel(),delete this.mouseDownHandler),this.touchDownHandler&&(this.touchDownHandler.cancel(),delete this.touchDownHandler),this.contextMenuHandler&&this.contextMenuHandler.cancel(),d.removeNode(this.elementPanel),this.closeButtonClickedHandler&&(this.closeButtonClickedHandler.cancel(),delete this.closeButtonClickedHandler),this.closeButtonTouchedHandler&&(this.closeButtonTouchedHandler.cancel(),delete this.closeButtonTouchedHandler)}performUndockToDialog(e,t){return this.isDialog=!0,this.undockInitiator.enabled=!1,this.elementContentWrapper.style.display="block",this.elementPanel.style.position="",this.dockManager.requestUndockToDialog(this,e,t)}performClose(){this.isDialog=!0,this.undockInitiator.enabled=!1,this.elementContentWrapper.style.display="block",this.elementContentContainer.style.display="none",this.elementPanel.style.position="",this.dockManager.requestClose(this)}performUndock(){this.undockInitiator.enabled=!1,this.dockManager.requestUndock(this)}prepareForDocking(){this.isDialog=!1,this.undockInitiator.enabled=this._canUndock,this.elementContentContainer.parentElement!=this.dockManager.config.dialogRootElement&&this.dockManager.config.dialogRootElement.appendChild(this.elementContentContainer)}get width(){return this._cachedWidth}set width(e){e!==this._cachedWidth&&(this._cachedWidth=e,this.elementPanel.style.width=e+"px")}get height(){return this._cachedHeight}set height(e){e!==this._cachedHeight&&(this._cachedHeight=e,this.elementPanel.style.height=e+"px")}get resolvedElementContent(){return this._resolvedElementContent?this._resolvedElementContent:(this._resolvedElementContent=this.elementContent,this.elementContent instanceof HTMLSlotElement&&(this._resolvedElementContent=this.elementContent.assignedElements()?.[0]),this._resolvedElementContent)}panelDocked(){this.elementContent.hidden&&(this.elementContent.hidden=!1),this.elementContentContainer.parentElement!==this.dockManager.config.dialogRootElement&&this.dockManager.config.dialogRootElement.appendChild(this.elementContentContainer)}resize(e,t){this.panelDocked(),this.setVisible(!0),this._setPanelDimensions(e,t),this._cachedWidth=e,this._cachedHeight=t;try{this.elementContent!=null&&typeof this.elementContent.resizeHandler=="function"&&this.elementContent.resizeHandler(e,t-this.elementTitle.clientHeight)}catch(i){console.log("error calling resizeHandler:",i," elt:",this.elementContent)}}_setPanelDimensions(e,t){this.elementTitle.style.width=e+"px",this.elementContentHost.style.width=e+"px",this.elementContentContainer.style.width=e+"px",this.elementPanel.style.width=e+"px";let i=this.elementTitle.clientHeight,n=t-i;this.elementContentHost.style.height=n+"px",this.elementContentContainer.style.height=n+"px",this.elementPanel.style.height=t+"px",requestAnimationFrame(()=>{let o=this.elementContentWrapper.getBoundingClientRect(),s=this.dockManager.config.dialogRootElement.getBoundingClientRect();this.elementContentContainer.style.left=o.x-s.x+"px",this.elementContentContainer.style.top=o.y-s.y+"px",this.elementContentContainer.style.width=o.width+"px",this.elementContentContainer.style.height=o.height+"px"})}setDialogPosition(e,t){this.elementContentContainer.style.left=e+"px",this.elementContentContainer.style.top=t+this.elementTitle.clientHeight+"px"}setVisible(e){this.elementContentContainer.style.display=e?"":"none"}setTitle(e){this.title=e,this._updateTitle(),this.onTitleChanged&&this.onTitleChanged(this,e)}setTitleIcon(e){this.icon=e,this._updateTitle(),this.onTitleChanged&&this.onTitleChanged(this,this.title)}setHasChanges(e){this.hasChanges=e,this._updateTitle(),e?this.elementTitleText.classList.add("panel-has-changes"):this.elementTitleText.classList.remove("panel-has-changes"),this.onTitleChanged&&this.onTitleChanged(this,this.title)}setCloseIconTemplate(e){this.elementButtonClose.innerHTML=e}_updateTitle(){if(this.icon!==null){this.elementTitleText.innerHTML='<img class="panel-titlebar-icon" src="'+this.icon+'"><span>'+this.title+"</span>";return}this.elementTitleText.innerHTML=this.title}getRawTitle(){return this.elementTitleText.innerHTML}performLayout(e,t){}onCloseButtonClicked(e){e.preventDefault(),e.stopPropagation(),this.close()}undockToBrowserDialog(){ne(this,{title:this.elementTitleText.textContent,closeCallback:()=>{this.undockedToNewBrowserWindow=!0,this.closeInternal(!1)},newWindowClosedCallback:()=>{this.undockedToNewBrowserWindow=!1,this.dockManager.notifyOnClosePanel(this)},focused:e=>{this.dockManager.activePanel=this},blured:e=>{this.dockManager.activePanel=null}})}async close(){this.closeInternal(!0)}async closeInternal(e){let t=!0;if(this.elementContentContainer.parentElement===this.dockManager.config.dialogRootElement&&(e?this.closePanelContainerCallback?t=await this.closePanelContainerCallback(this):this.dockManager.closePanelContainerCallback&&(t=await this.dockManager.closePanelContainerCallback(this)):t=!0,t))if(this.dockManager.config.dialogRootElement.removeChild(this.elementContentContainer),this.isDialog)this.floatingDialog&&this.floatingDialog.close();else{try{this.dockManager.notifyOnClosePanel(this)}catch(i){console.error(i)}this.performClose()}}};var I=class{element;handleSize;cornerSize;east;west;north;south;corner;mouseDownHandler;touchDownHandler;constructor(){this.element=void 0,this.handleSize=6,this.cornerSize=12,this.east=!1,this.west=!1,this.north=!1,this.south=!1,this.corner=!1}adjustSize(e,t){this.corner?(this.west&&(this.element.style.left="0px"),this.east&&(this.element.style.left=e-this.cornerSize+"px"),this.north&&(this.element.style.top="0px"),this.south&&(this.element.style.top=t-this.cornerSize+"px")):(this.west&&(this.element.style.left="0px",this.element.style.top=this.cornerSize+"px"),this.east&&(this.element.style.left=e-this.handleSize+"px",this.element.style.top=this.cornerSize+"px"),this.north&&(this.element.style.left=this.cornerSize+"px",this.element.style.top="0px"),this.south&&(this.element.style.left=this.cornerSize+"px",this.element.style.top=t-this.handleSize+"px"),this.west||this.east?this.element.style.height=t-this.cornerSize*2+"px":this.element.style.width=e-this.cornerSize*2+"px")}};var O=class{topLevelElement;dialog;delegate;dockManager;containerElement;containerType;minimumAllowedChildNodes;readyToProcessNextResize;dockSpawnResizedEvent;resizeHandles;previousMousePosition;iframeEventHandlers;resizeDirection;constructor(e,t,i,n){this.dialog=e,this.resizeDirection=n,this.delegate=t,this.containerElement=t.containerElement,this.dockManager=t.dockManager,this.topLevelElement=i,this.containerType=t.containerType,this.topLevelElement.style.left=this.topLevelElement.offsetLeft+"px",this.topLevelElement.style.top=this.topLevelElement.offsetTop+"px",this.minimumAllowedChildNodes=t.minimumAllowedChildNodes,this._buildResizeHandles(),this.readyToProcessNextResize=!0,this.dockSpawnResizedEvent=new CustomEvent("DockSpawnResizedEvent",{composed:!0,bubbles:!0}),this.iframeEventHandlers=[]}setActiveChild(){}_buildResizeHandles(){this.resizeHandles=[],this.resizeDirection&C.North&&this._buildResizeHandle(!1,!1,!0,!1),this.resizeDirection&C.East&&this._buildResizeHandle(!0,!1,!1,!1),this.resizeDirection&C.South&&this._buildResizeHandle(!1,!1,!1,!0),this.resizeDirection&C.West&&this._buildResizeHandle(!1,!0,!1,!1),this.resizeDirection&C.NorthWest&&this._buildResizeHandle(!1,!0,!0,!1),this.resizeDirection&C.NorthEast&&this._buildResizeHandle(!0,!1,!0,!1),this.resizeDirection&C.SouthEast&&this._buildResizeHandle(!0,!1,!1,!0),this.resizeDirection&C.SouthWest&&this._buildResizeHandle(!1,!0,!1,!0)}_buildResizeHandle(e,t,i,n){let o=new I;o.east=e,o.west=t,o.north=i,o.south=n,o.element=document.createElement("div"),this.topLevelElement.appendChild(o.element);let s="",l="";i&&(s="n"),n&&(s="s"),e&&(l="e"),t&&(l="w");let r="resize-handle-"+s+l;s.length>0&&l.length>0&&(o.corner=!0),o.element.classList.add(o.corner?"resize-handle-corner":"resize-handle"),o.element.classList.add(r),this.resizeHandles.push(o),o.mouseDownHandler=new m(o.element,"mousedown",h=>{this.onMouseDown(o,h)}),o.touchDownHandler=new m(o.element,"touchstart",h=>{this.onMouseDown(o,h)})}saveState(e){this.delegate.saveState(e)}loadState(e){this.delegate.loadState(e)}get width(){return this.delegate.width}get height(){return this.delegate.height}get name(){return this.delegate.name}set name(e){e&&(this.delegate.name=e)}resize(e,t){this.delegate.resize(e,t),this._adjustResizeHandles(e,t),document.dispatchEvent(this.dockSpawnResizedEvent)}_adjustResizeHandles(e,t){this.resizeHandles.forEach(i=>{i.adjustSize(e,t)})}performLayout(e){this.delegate.performLayout(e,!1)}destroy(){this.removeDecorator(),this.delegate.destroy()}removeDecorator(){}onMouseMovedIframe(e,t,i){let n=i.getBoundingClientRect();this.onMouseMoved(e,t,{x:n.x,y:n.y})}onMouseMoved(e,t,i){let n=null;if(t.changedTouches){if(t.changedTouches.length>1)return;n=t.changedTouches[0]}else n=t;if(!this.readyToProcessNextResize)return;this.readyToProcessNextResize=!1,this.dialog.panel&&this.dockManager.suspendLayout(this.dialog.panel);let o=new v(n.clientX,n.clientY);i&&(o=new v(n.clientX+i.x,n.clientY+i.y));let s=this.dockManager.checkXBounds(this.topLevelElement,o,this.previousMousePosition,e.west,e.east),l=this.dockManager.checkYBounds(this.topLevelElement,o,this.previousMousePosition,e.north,e.south);this._performDrag(e,s,l),this.previousMousePosition=o,this.readyToProcessNextResize=!0,this.dialog.panel&&this.dockManager.resumeLayout(this.dialog.panel),this.dockManager.notifyOnContainerResized(this)}onMouseDown(e,t){let i=null;if(t.touches){if(t.touches.length>1)return;i=t.touches[0]}else i=t;this.previousMousePosition=new v(i.clientX,i.clientY),e.mouseMoveHandler&&(e.mouseMoveHandler.cancel(),delete e.mouseMoveHandler),e.touchMoveHandler&&(e.touchMoveHandler.cancel(),delete e.touchMoveHandler),e.mouseUpHandler&&(e.mouseUpHandler.cancel(),delete e.mouseUpHandler),e.touchUpHandler&&(e.touchUpHandler.cancel(),delete e.touchUpHandler);for(let n of this.iframeEventHandlers)n.cancel();if(this.iframeEventHandlers=[],e.mouseMoveHandler=new m(window,"mousemove",n=>{this.onMouseMoved(e,n)}),e.touchMoveHandler=new m(window,"touchmove",n=>{this.onMouseMoved(e,n)}),e.mouseUpHandler=new m(window,"mouseup",n=>{this.onMouseUp(e)}),e.touchUpHandler=new m(window,"touchend",n=>{this.onMouseUp(e)}),this.dockManager.iframes)for(let n of this.dockManager.iframes){let o=this.onMouseMovedIframe.bind(this);this.iframeEventHandlers.push(new m(n.contentWindow,"mousemove",s=>o(e,s,n))),this.iframeEventHandlers.push(new m(n.contentWindow,"mouseup",s=>this.onMouseUp(e))),this.iframeEventHandlers.push(new m(n.contentWindow,"touchmove",s=>o(e,s,n))),this.iframeEventHandlers.push(new m(n.contentWindow,"touchend",s=>this.onMouseUp(e)))}d.disableGlobalTextSelection(this.dockManager.config.dialogRootElement)}onMouseUp(e){e.mouseMoveHandler.cancel(),e.touchMoveHandler.cancel(),e.mouseUpHandler.cancel(),e.touchUpHandler.cancel(),delete e.mouseMoveHandler,delete e.touchMoveHandler,delete e.mouseUpHandler,delete e.touchUpHandler;for(let t of this.iframeEventHandlers)t.cancel();this.iframeEventHandlers=[],d.enableGlobalTextSelection(this.dockManager.config.dialogRootElement)}_performDrag(e,t,i){let n={};n.left=d.getPixels(this.topLevelElement.style.left),n.top=d.getPixels(this.topLevelElement.style.top),n.width=this.topLevelElement.clientWidth,n.height=this.topLevelElement.clientHeight,e.east&&this._resizeEast(t,n),e.west&&this._resizeWest(t,n),e.north&&this._resizeNorth(i,n),e.south&&this._resizeSouth(i,n)}_resizeWest(e,t){this._resizeContainer(e,0,-e,0,t)}_resizeEast(e,t){this._resizeContainer(0,0,e,0,t)}_resizeNorth(e,t){this._resizeContainer(0,e,0,-e,t)}_resizeSouth(e,t){this._resizeContainer(0,0,0,e,t)}_resizeContainer(e,t,i,n,o){o.left+=e,o.top+=t,o.width+=i,o.height+=n;let s=50,l=50;o.width=Math.max(o.width,s),o.height=Math.max(o.height,l),this.topLevelElement.style.left=o.left+"px",this.topLevelElement.style.top=o.top+"px",this.resize(o.width,o.height)}};var H=class a{elementDialog;draggable;panel;dockManager;eventListener;position;resizable;disableResize;mouseDownHandler;onKeyPressBound;noDocking;isHidden;keyPressHandler;focusHandler;grayoutParent;constructor(e,t,i,n){this.panel=e,this.dockManager=t,this.eventListener=t,this.grayoutParent=i,this.disableResize=n,this._initialize(),this.dockManager.context.model.dialogs.push(this),this.position=t.defaultDialogPosition,this.dockManager.notifyOnCreateDialog(this),e.isDialog=!0}saveState(e,t){this.position=new v(e,t),this.dockManager.notifyOnChangeDialogPosition(this,e,t)}static fromElement(e,t){return new a(new g(document.getElementById(e),t),t,null)}_initialize(){this.panel.floatingDialog=this,this.elementDialog=Object.assign(document.createElement("div"),{floatingDialog:this}),this.elementDialog.tabIndex=0,this.elementDialog.appendChild(this.panel.elementPanel),this.draggable=new U(this,this.panel,this.elementDialog,this.panel.elementTitle);let e=this.disableResize?C.None:C.All&~C.NorthEast;this.resizable=new O(this,this.draggable,this.draggable.topLevelElement,e),this.dockManager.config.dialogRootElement.appendChild(this.elementDialog),this.elementDialog.classList.add("dialog-floating"),this.focusHandler=new m(this.elementDialog,"focus",this.onFocus.bind(this),!0),this.mouseDownHandler=new m(this.elementDialog,"pointerdown",this.onMouseDown.bind(this),!0),this.keyPressHandler=new m(this.elementDialog,"keypress",this.dockManager.onKeyPressBound,!0),this.resize(this.panel.elementPanel.clientWidth,this.panel.elementPanel.clientHeight),this.isHidden=!1,this.grayoutParent!=null&&this.grayoutParent.grayOut(!0),this.bringToFront()}setPosition(e,t){let i=this.dockManager.config.dialogRootElement.getBoundingClientRect();this.position=new v(e-i.left,t-i.top),this.elementDialog.style.left=e-i.left+"px",this.elementDialog.style.top=t-i.top+"px",this.panel.setDialogPosition(e,t),this.dockManager.notifyOnChangeDialogPosition(this,e,t)}getPosition(){return new v(this.position?this.position.x:0,this.position?this.position.y:0)}onFocus(){this.dockManager.activePanel!=this.panel&&(this.dockManager.activePanel=this.panel)}onMouseDown(e){e.button!=2&&this.bringToFront()}destroy(){this.panel.lastDialogSize={width:this.resizable.width,height:this.resizable.height},this.focusHandler&&(this.focusHandler.cancel(),delete this.focusHandler),this.mouseDownHandler&&(this.mouseDownHandler.cancel(),delete this.mouseDownHandler),this.keyPressHandler&&(this.keyPressHandler.cancel(),delete this.keyPressHandler),d.removeNode(this.elementDialog),this.draggable.removeDecorator(),d.removeNode(this.panel.elementPanel),d.arrayRemove(this.dockManager.context.model.dialogs,this),this.panel.floatingDialog=void 0,this.grayoutParent&&this.grayoutParent.grayOut(!1)}resize(e,t){this.resizable.resize(e,t)}setTitle(e){this.panel.setTitle(e)}setTitleIcon(e){this.panel.setTitleIcon(e)}bringToFront(){this.panel.elementContentContainer.style.zIndex=this.dockManager.zIndexDialogCounter++,this.elementDialog.style.zIndex=this.dockManager.zIndexDialogCounter++,this.dockManager.activePanel=this.panel}hide(){this.elementDialog.style.zIndex="0",this.panel.elementContentContainer.style.zIndex="",this.elementDialog.style.display="none",this.isHidden||(this.isHidden=!0,this.dockManager.notifyOnHideDialog(this)),this.grayoutParent&&this.grayoutParent.grayOut(!1)}close(){this.hide(),this.remove(),this.dockManager.notifyOnClosePanel(this.panel),this.destroy()}remove(){this.elementDialog.parentNode.removeChild(this.elementDialog)}show(){this.panel.elementContentContainer.style.zIndex=this.dockManager.zIndexDialogCounter++,this.elementDialog.style.zIndex=this.dockManager.zIndexDialogCounter++,this.elementDialog.style.display="block",this.isHidden&&(this.isHidden=!1,this.dockManager.notifyOnShowDialog(this))}static createContextMenuContentCallback=(e,t)=>{if(!e.panel._hideCloseButton)return[];let i=[],n=document.createElement("div");if(n.innerText=y.getString("CloseDialog"),i.push(n),n.onclick=()=>{e.panel.closeContextMenu(),e.panel.close()},e.dockManager.config.enableBrowserWindows){let o=document.createElement("div");o.innerText=y.getString("NewBrowserWindow"),i.push(o),o.onclick=()=>{e.panel.closeContextMenu(),e.panel.undockToBrowserDialog()}}return i};createContextMenuItems(){return a.createContextMenuContentCallback(this,this.dockManager.context.model.documentManagerNode.children)}};var A=class{constructor(){this.escClosesWindow=!0,this.escClosesDialog=!0,this.dialogRootElement=document.body,this.moveOnlyWithinDockConatiner=!1,this.enableBrowserWindows=!0}escClosesWindow;escClosesDialog;dialogRootElement;moveOnlyWithinDockConatiner;enableBrowserWindows};var B=class{rootNode;documentManagerNode;dialogs;constructor(){this.rootNode=this.documentManagerNode=void 0}};var E=class{parent;container;children;constructor(e){this.container=e,this.children=[]}detachFromParent(){this.parent&&(this.parent.removeChild(this),delete this.parent)}removeChild(e){let t=this.children.indexOf(e);t>=0&&this.children.splice(t,1)}addChild(e){e.detachFromParent(),e.parent=this,this.children.push(e)}addChildBefore(e,t){this._addChildWithDirection(e,t,!0)}addChildAfter(e,t){this._addChildWithDirection(e,t,!1)}_addChildWithDirection(e,t,i){t.detachFromParent(),t.parent=this;let n=this.children.indexOf(e),o=this.children.slice(0,n),s=this.children.slice(n+1,this.children.length);this.children=o.slice(0),i?(this.children.push(t),this.children.push(e)):(this.children.push(e),this.children.push(t)),Array.prototype.push.apply(this.children,s)}performLayout(e){let t=this.children.map(i=>i.container);this.container.performLayout(t,e)}debugDumpTree(e){e===void 0&&(e=0);let t=this.container.name;for(let n=0;n<e;n++)t=" "+t;let i=this.parent===void 0?"null":this.parent.container.containerType;console.log(">>"+t+" ["+i+"]"),this.children.forEach(n=>{n.debugDumpTree(e+1)})}};var F=class{previousContainer;nextContainer;stackedVertical;barElement;pointerDownHandler;minPanelSize;readyToProcessNextDrag;dockSpawnResizedEvent;previousMouseEvent;pointerMovedHandler;pointerUpHandler;iframeEventHandlers;constructor(e,t,i){this.previousContainer=e,this.nextContainer=t,this.stackedVertical=i,this.barElement=document.createElement("div"),this.barElement.classList.add(i?"splitbar-horizontal":"splitbar-vertical"),this.pointerDownHandler=new m(this.barElement,"pointerdown",this.onPointerDown.bind(this)),this.minPanelSize=50,this.readyToProcessNextDrag=!0,this.dockSpawnResizedEvent=new CustomEvent("DockSpawnResizedEvent",{composed:!0,bubbles:!0}),this.iframeEventHandlers=[]}onPointerDown(e){e.preventDefault(),this.barElement.setPointerCapture(e.pointerId),this._startDragging(e)}onPointerUp(e){this.barElement.releasePointerCapture(e.pointerId),this._stopDragging()}onPointerMovedIframe(e,t){e.changedTouches!=null&&(e=e.changedTouches[0]);let i=t.getBoundingClientRect();this.handleMoveEvent({x:parseInt(""+e.clientX+i.x),y:parseInt(""+e.clientY+i.y)})}onPointerMoved(e){e.changedTouches!=null&&(e=e.changedTouches[0]),this.handleMoveEvent({x:parseInt(""+e.clientX),y:parseInt(""+e.clientY)})}handleMoveEvent(e){if(!this.readyToProcessNextDrag)return;this.readyToProcessNextDrag=!1;let t=this.previousContainer.dockManager;t.suspendLayout(this.previousContainer),t.suspendLayout(this.nextContainer);let i=e.x-this.previousMouseEvent.x,n=e.y-this.previousMouseEvent.y;this._performDrag(i,n),this.previousMouseEvent=e,this.readyToProcessNextDrag=!0,t.resumeLayout(this.previousContainer),t.resumeLayout(this.nextContainer)}_performDrag(e,t){let i=this.getContainerWidth(this.previousContainer),n=this.getContainerHeight(this.previousContainer),o=this.getContainerWidth(this.nextContainer),s=this.getContainerHeight(this.nextContainer),l=this.stackedVertical?n:i,r=this.stackedVertical?s:o,h=this.stackedVertical?t:e,c=l+h,p=r-h;(c<this.minPanelSize||p<this.minPanelSize)&&!(c<this.minPanelSize&&c>l||p<this.minPanelSize&&p>r)||(this.stackedVertical?(this.previousContainer.resize(i,c),this.nextContainer.resize(o,p)):h<0?(this.previousContainer.resize(c,n),this.nextContainer.resize(p,s)):(this.nextContainer.resize(p,s),this.previousContainer.resize(c,n),this.nextContainer.resize(p,s)),document.dispatchEvent(this.dockSpawnResizedEvent))}getContainerWidth(e){return e.width||e.containerElement.getBoundingClientRect().width}getContainerHeight(e){return e.height||e.containerElement.getBoundingClientRect().height}_startDragging(e){if(d.disableGlobalTextSelection(this.previousContainer.dockManager.config.dialogRootElement),this.pointerMovedHandler&&(this.pointerMovedHandler.cancel(),delete this.pointerMovedHandler),this.pointerUpHandler&&(this.pointerUpHandler.cancel(),delete this.pointerUpHandler),this.pointerMovedHandler=new m(window,"pointermove",this.onPointerMoved.bind(this)),this.pointerUpHandler=new m(window,"pointerup",this.onPointerUp.bind(this)),this.previousContainer.dockManager.iframes)for(let t of this.previousContainer.dockManager.iframes){let i=this.onPointerMovedIframe.bind(this);this.iframeEventHandlers.push(new m(t.contentWindow,"pointermove",n=>i(n,t))),this.iframeEventHandlers.push(new m(t.contentWindow,"pointerup",this.onPointerUp.bind(this)))}this.previousMouseEvent={x:parseInt(""+e.clientX),y:parseInt(""+e.clientY)}}_stopDragging(){d.enableGlobalTextSelection(this.previousContainer.dockManager.config.dialogRootElement),this.pointerMovedHandler&&(this.pointerMovedHandler.cancel(),delete this.pointerMovedHandler),this.pointerUpHandler&&(this.pointerUpHandler.cancel(),delete this.pointerUpHandler);for(let e of this.iframeEventHandlers)e.cancel();this.iframeEventHandlers=[]}};var V=class{panelElement;spiltterBars;stackedVertical;childContainers;constructor(e,t){this.childContainers=e,this.stackedVertical=t,this.panelElement=document.createElement("div"),this.spiltterBars=[],this._buildSplitterDOMAndAddElements()}_buildSplitterDOMAndAddElements(){if(this.childContainers.length<=1)throw new Error("Splitter panel should contain atleast 2 panels");this.spiltterBars=[];let e=null;for(let i=0;i<this.childContainers.length-1;i++){let n=this.childContainers[i],o=this.childContainers[i+1],s=new F(n,o,this.stackedVertical);this.spiltterBars.push(s),Array.from(this.panelElement.children).includes(n.containerElement)||this._insertContainerIntoPanel(n,e),this.panelElement.insertBefore(s.barElement,n.containerElement.nextSibling),e=s.barElement}let t=this.childContainers.slice(-1)[0];Array.from(this.panelElement.children).includes(t.containerElement)||this._insertContainerIntoPanel(t,e)}performLayout(e,t){(!d.arrayEqual(this.childContainers,e)||t)&&(this.childContainers.forEach(n=>{e.some(o=>o==n)||n.containerElement&&(n.containerElement.classList.remove("splitter-container-vertical"),n.containerElement.classList.remove("splitter-container-horizontal"),d.removeNode(n.containerElement))}),this.spiltterBars.forEach(n=>{d.removeNode(n.barElement)}),this.childContainers=e,this._buildSplitterDOMAndAddElements())}removeFromDOM(){this.childContainers.forEach(e=>{e.containerElement&&(e.containerElement.classList.remove("splitter-container-vertical"),e.containerElement.classList.remove("splitter-container-horizontal"),d.removeNode(e.containerElement))}),this.spiltterBars.forEach(e=>{d.removeNode(e.barElement)})}destroy(){this.removeFromDOM(),this.panelElement.parentNode.removeChild(this.panelElement)}_insertContainerIntoPanel(e,t){if(!e){console.error("container is undefined");return}e.containerElement.parentNode!=this.panelElement&&(d.removeNode(e.containerElement),t?this.panelElement.insertBefore(e.containerElement,t.nextSibling):this.panelElement.children.length>0?this.panelElement.insertBefore(e.containerElement,this.panelElement.children[0]):this.panelElement.appendChild(e.containerElement)),e.containerElement.classList.add(this.stackedVertical?"splitter-container-vertical":"splitter-container-horizontal")}setContainerRatio(e,t){let i=this.stackedVertical?this.panelElement.clientHeight:this.panelElement.clientWidth,n=i*t,o=this.stackedVertical?this.spiltterBars[0].barElement.clientHeight:this.spiltterBars[0].barElement.clientWidth,l=(i-n-o*this.spiltterBars.length)/i;for(let r=0;r<this.childContainers.length;r++){let h=this.childContainers[r],c;h!==e?(c=this.stackedVertical?h.containerElement.parentElement.clientHeight:h.containerElement.parentElement.clientWidth,c*=l):c=n,this.stackedVertical?h.resize(h.width,Math.floor(c)):h.resize(Math.floor(c),h.height)}}getRatios(){let e=this.stackedVertical?this.spiltterBars[0].barElement.clientHeight:this.spiltterBars[0].barElement.clientWidth,t=(this.stackedVertical?this.panelElement.clientHeight:this.panelElement.clientWidth)-e*this.spiltterBars.length,i=[];for(let n=0;n<this.childContainers.length;n++){let o=this.childContainers[n],s=this.stackedVertical?o.containerElement.clientHeight:o.containerElement.clientWidth;i.push(s/t)}return i}setRatios(e){let t=this.stackedVertical?this.spiltterBars[0].barElement.clientHeight:this.spiltterBars[0].barElement.clientWidth,i=(this.stackedVertical?this.panelElement.clientHeight:this.panelElement.clientWidth)-t*this.spiltterBars.length,n=0;for(let o=0;o<this.childContainers.length;o++){let s=this.childContainers[o],l=Math.floor(i*e[o]);n+=l,o===this.childContainers.length-1&&(l+=i-n),this.stackedVertical?s.resize(s.width,l):s.resize(l,s.height)}}resize(e,t){if(this.childContainers.length<=1)return;this.panelElement.style.width=e+"px",this.panelElement.style.height=t+"px";for(let h=0;h<this.childContainers.length;h++)if(h<this.spiltterBars.length){let c=this.spiltterBars[h];this.stackedVertical?c.barElement.style.width=e+"px":c.barElement.style.height=t+"px"}let i=this.stackedVertical?this.spiltterBars[0].barElement.clientHeight:this.spiltterBars[0].barElement.clientWidth,n=this.stackedVertical?t:e;n-=i*this.spiltterBars.length;let o=this.childContainers.map(h=>this.stackedVertical?h.height:h.width),s=o.reduce((h,c)=>h+c,0);if(s<=0){let h=n/this.childContainers.length;o=this.childContainers.map(()=>h),s=n}let l=this.getElasticChildIndex(),r=n-s;if(o[l]+=r,o[l]<0){let h=-o[l];o[l]=0;for(let c=this.childContainers.length-1;c>=0&&h>0;c--){if(c===l)continue;let p=Math.min(o[c],h);o[c]-=p,h-=p}}o=o.map(h=>Math.floor(h)),o[l]+=n-o.reduce((h,c)=>h+c,0);for(let h=0;h<this.childContainers.length;h++){let c=this.childContainers[h];c.containerElement.style.display=="none"&&(c.containerElement.style.display="block");let p=o[h];this.stackedVertical?c.resize(e,p):c.resize(p,t)}}getElasticChildIndex(){let e=this.childContainers.findIndex(i=>i.containerType===w.fill);if(e>=0)return e;let t=this.childContainers.findIndex(i=>i.containerType===w.horizontal||i.containerType===w.vertical);return t>=0?t:this.childContainers.length-1}};var z=class{name;dockManager;minimumAllowedChildNodes;splitterPanel;stackedVertical;containerElement;_cachedWidth;_cachedHeight;state;containerType;constructor(e,t,i,n){arguments.length!==0&&(this.name=e,this.dockManager=t,this.stackedVertical=n,this.splitterPanel=new V(i,this.stackedVertical),this.containerElement=this.splitterPanel.panelElement,this.minimumAllowedChildNodes=2)}resize(e,t){this.splitterPanel.resize(e,t),this._cachedWidth=e,this._cachedHeight=t}performLayout(e,t=!1){this.splitterPanel.performLayout(e,t)}setActiveChild(){}destroy(){this.splitterPanel.destroy()}setContainerRatio(e,t){this.splitterPanel.setContainerRatio(e,t),this.resize(this.width,this.height)}getRatios(){return this.splitterPanel.getRatios()}setRatios(e){this.splitterPanel.setRatios(e),this.resize(this.width,this.height)}saveState(e){e.width=this.width,e.height=this.height}loadState(e){this.state={width:e.width,height:e.height}}get width(){return this._cachedWidth===void 0&&(this._cachedWidth=this.splitterPanel.panelElement.clientWidth),this._cachedWidth}get height(){return this._cachedHeight===void 0&&(this._cachedHeight=this.splitterPanel.panelElement.clientHeight),this._cachedHeight}};var S=class extends z{constructor(e,t){super(d.getNextId("horizontal_splitter_"),e,t,!1),this.containerType=w.horizontal}};var N=class extends z{constructor(e,t){super(d.getNextId("vertical_splitter_"),e,t,!0),this.containerType=w.vertical}};var q=class a{parent;elementBase;elementText;elementCloseButton;undockInitiator;mouseDownHandler;touchDownHandler;closeButtonHandler;closeButtonTouchHandler;auxClickHandler;contextMenuHandler;mouseMoveHandler;touchMoveHandler;mouseUpHandler;touchUpHandler;stargDragPosition;dragged;eventListeners;undockListener;prev;current;direction;_ctxMenu;_windowsContextMenuCloseBound;constructor(e){this.parent=e;let t=this._performUndock.bind(this);this.elementBase=document.createElement("div"),this.elementText=document.createElement("div"),this.elementCloseButton=document.createElement("div"),this.elementBase.classList.add("dockspan-tab-handle"),this.elementBase.classList.add("disable-selection"),this.elementText.classList.add("dockspan-tab-handle-text"),this.elementCloseButton.classList.add("dockspan-tab-handle-close-button"),this.elementBase.appendChild(this.elementText),this.parent.host.displayCloseButton&&this.elementBase.appendChild(this.elementCloseButton),(this.parent.container._hideCloseButton||this.parent.container._grayOut)&&(this.elementCloseButton.style.display="none"),this.parent.host.tabListElement.appendChild(this.elementBase);let i=e.container,n=i.getRawTitle();this.undockListener={onDockEnabled:o=>{this.undockEnabled(o.state)},onHideCloseButton:o=>{this.hideCloseButton(o.state)}},this.eventListeners=[],i.addListener(this.undockListener),this.elementText.innerHTML=n,this.elementText.title=this.elementText.innerText,this.undockInitiator=new L(this.elementBase,t),this.undockInitiator.enabled=!0,this.mouseDownHandler=new m(this.elementBase,"mousedown",this.onMouseDown.bind(this)),this.touchDownHandler=new m(this.elementBase,"touchstart",this.onMouseDown.bind(this),{passive:!1}),this.closeButtonHandler=new m(this.elementCloseButton,"click",this.onCloseButtonClicked.bind(this)),this.closeButtonTouchHandler=new m(this.elementCloseButton,"touchstart",this.onCloseButtonClicked.bind(this)),this.auxClickHandler=new m(this.elementBase,"auxclick",this.onCloseButtonClicked.bind(this)),i.panelType==M.document&&(this.contextMenuHandler=new m(this.elementBase,"contextmenu",this.oncontextMenuClicked.bind(this))),this.windowsContextMenuClose=this.windowsContextMenuClose.bind(this)}addListener(e){this.eventListeners.push(e)}removeListener(e){this.eventListeners.splice(this.eventListeners.indexOf(e),1)}undockEnabled(e){this.undockInitiator.enabled=e}static createContextMenuContentCallback=(e,t)=>{let i=[],n=document.createElement("div");n.innerText=y.getString("CloseAll"),i.push(n),n.onclick=()=>{let s=t.length;for(let l=s-1;l>=0;l--){let r=t[l].container;r.panelType==M.document&&r.close()}e.closeContextMenu()};let o=document.createElement("div");if(o.innerText=y.getString("CloseAllButThis"),i.push(o),o.onclick=()=>{let s=t.length;for(let l=s-1;l>=0;l--){let r=t[l].container;e.parent.container!=r&&r.panelType==M.document&&r.close()}e.closeContextMenu()},e.parent.container.dockManager.config.enableBrowserWindows){let s=document.createElement("div");s.innerText=y.getString("NewBrowserWindow"),i.push(s),s.onclick=()=>{e.parent.container.undockToBrowserDialog(),e.closeContextMenu()}}return i};oncontextMenuClicked(e){if(e.preventDefault(),!this._ctxMenu&&a.createContextMenuContentCallback){let t=a.createContextMenuContentCallback(this,this.parent.container.dockManager.context.model.documentManagerNode.children);if(t.length==0)return;this._ctxMenu=document.createElement("div"),this._ctxMenu.className="dockspab-tab-handle-context-menu",this._ctxMenu.append(...t),this._ctxMenu.style.left=e.pageX+"px",this._ctxMenu.style.top=e.pageY+"px",document.body.appendChild(this._ctxMenu),window.addEventListener("mouseup",this.windowsContextMenuClose)}else this.closeContextMenu()}closeContextMenu(){this._ctxMenu&&(document.body.removeChild(this._ctxMenu),delete this._ctxMenu,window.removeEventListener("mouseup",this.windowsContextMenuClose))}windowsContextMenuClose(e){let t=e.composedPath();for(let i in t)if(t[i]==this._ctxMenu)return;this.closeContextMenu()}onMouseDown(e){e.preventDefault(),this.parent.onSelected(),this.mouseMoveHandler&&(this.mouseMoveHandler.cancel(),delete this.mouseMoveHandler),this.touchMoveHandler&&(this.touchMoveHandler.cancel(),delete this.touchMoveHandler),this.mouseUpHandler&&(this.mouseUpHandler.cancel(),delete this.mouseUpHandler),this.touchUpHandler&&(this.touchUpHandler.cancel(),delete this.touchUpHandler),this.stargDragPosition=e.clientX,this.mouseMoveHandler=new m(window,"mousemove",this.onMouseMove.bind(this)),this.touchMoveHandler=new m(window,"touchmove",this.onMouseMove.bind(this),{passive:!1}),this.mouseUpHandler=new m(window,"mouseup",this.onMouseUp.bind(this)),this.touchUpHandler=new m(window,"touchend",this.onMouseUp.bind(this))}onMouseUp(){this.cancelTabDrag()}cancelTabDrag(){this.elementBase&&this.elementBase.classList.remove("dockspan-tab-handle-dragged"),this.dragged=!1,this.mouseMoveHandler&&this.mouseMoveHandler.cancel(),this.touchMoveHandler&&this.touchMoveHandler.cancel(),this.mouseUpHandler&&this.mouseUpHandler.cancel(),this.touchUpHandler&&this.touchUpHandler.cancel(),delete this.mouseMoveHandler,delete this.touchMoveHandler,delete this.mouseUpHandler,delete this.touchUpHandler}moveTabEvent(e,t){e.eventListeners.forEach(i=>{i.onMoveTab&&i.onMoveTab({self:e,state:t})})}onMouseMove(e){if(e.preventDefault(),e.buttons==0){this.onMouseUp();return}if(!(Math.abs(this.stargDragPosition-e.clientX)<10)&&this.elementBase!=null){this.elementBase.classList.add("dockspan-tab-handle-dragged"),this.dragged=!0,this.prev=this.current,this.current=e.clientX,this.direction=this.current-this.prev;let t=this.elementBase.getBoundingClientRect(),i=this.direction<0?{state:"left",bound:t.left,rect:t}:{state:"right",bound:t.right,rect:t};(e.clientX<t.left&&this.direction<0||e.clientX>t.left+t.width&&this.direction>0)&&this.moveTabEvent(this,i.state)}}hideCloseButton(e){this.elementCloseButton.style.display=e?"none":"block"}updateTitle(){if(this.parent.container instanceof g){let t=this.parent.container.getRawTitle();this.elementText.innerHTML=t}}destroy(){this.parent.container.removeListener(this.undockListener),this.mouseDownHandler.cancel(),this.touchDownHandler.cancel(),this.closeButtonHandler.cancel(),this.closeButtonTouchHandler.cancel(),this.auxClickHandler.cancel(),this.mouseMoveHandler&&this.mouseMoveHandler.cancel(),this.touchMoveHandler&&this.touchMoveHandler.cancel(),this.mouseUpHandler&&this.mouseUpHandler.cancel(),this.touchUpHandler&&this.touchUpHandler.cancel(),this.contextMenuHandler&&this.contextMenuHandler.cancel(),this.elementBase&&(d.removeNode(this.elementBase),delete this.elementBase),this.elementCloseButton&&(d.removeNode(this.elementCloseButton),delete this.elementCloseButton)}_performUndock(e,t){return this.parent.container.containerType==="panel"?(this.undockInitiator.enabled=!1,this.cancelTabDrag(),this.parent.container.performUndockToDialog(e,t)):null}onCloseButtonClicked(e){this.elementCloseButton.style.display!=="none"&&e.button!==2&&this.parent.container.containerType==="panel"&&this.parent.container.close()}setSelected(e){e?this.elementBase.classList.add("dockspan-tab-handle-selected"):(this.elementBase.classList.remove("dockspan-tab-handle-selected"),this.elementBase.classList.remove("dockspan-tab-handle-active"))}setActive(e){this.elementBase&&(e?this.elementBase.classList.add("dockspan-tab-handle-active"):this.elementBase.classList.remove("dockspan-tab-handle-active"))}};var W=class{selected;host;container;panel;handle;containerElement;_initContent;constructor(e,t){arguments.length!==0&&(this.selected=!1,this.host=e,this.container=t,this.handle=new q(this),this.containerElement=t.containerElement,t instanceof g&&(this.panel=t,this.panel.onTitleChanged=this.onTitleChanged.bind(this),this.onTitleChanged()),t.tabPage=this)}onTitleChanged(){this.handle.updateTitle(),this.panel&&(this.panel.hasChanges?this.handle.elementText.classList.add("panel-has-changes"):this.handle.elementText.classList.remove("panel-has-changes"))}destroy(){if(this.handle.destroy(),this.container instanceof g){this.container.elementContentContainer.style.zIndex="";let e=this.container;delete e.onTitleChanged}this.host.dockManager.activePanel==this.panel&&(this.host.dockManager.activePanel=null),this.container.tabPage=null,d.removeNode(this.containerElement)}onSelected(){this.host.onTabPageSelected(this,!0),this.container instanceof g&&this.container.dockManager.notifyOnTabChange(this)}setSelected(e,t){if(this.selected=e,this.handle.setSelected(e),this._initContent||this.host.contentElement.appendChild(this.containerElement),this._initContent=!0,this.selected){this.containerElement.style.display="block",this.panel.setVisible(!0);let i=this.host.contentElement.clientWidth,n=this.host.contentElement.clientHeight;this.container.resize(i,n),t&&(this.host.dockManager.activePanel=this.container)}else this.containerElement.style.display="none",this.panel.setVisible(!1)}resize(e,t){this.container.resize(e,t)}};var X=class{displayCloseButton;dockManager;tabStripDirection;hostElement;tabListElement;separatorElement;contentElement;createTabPage;tabHandleListener;eventListeners;pages;activeTab;_resizeRequested;mouseDownHandler;focusHandler;constructor(e,t,i){if(t===void 0&&(t=x.BOTTOM),i===void 0&&(i=!1),this.dockManager=e,this.tabStripDirection=t,this.displayCloseButton=i,this.pages=[],this.eventListeners=[],this.tabHandleListener={onMoveTab:n=>{this.onMoveTab(n)}},this.hostElement=document.createElement("div"),this.tabListElement=document.createElement("div"),this.separatorElement=document.createElement("div"),this.contentElement=document.createElement("div"),this.contentElement.tabIndex=0,this.createTabPage=this._createDefaultTabPage,this.tabStripDirection===x.BOTTOM)this.hostElement.appendChild(this.contentElement),this.hostElement.appendChild(this.separatorElement),this.hostElement.appendChild(this.tabListElement);else if(this.tabStripDirection===x.TOP)this.hostElement.appendChild(this.tabListElement),this.hostElement.appendChild(this.separatorElement),this.hostElement.appendChild(this.contentElement);else throw new Error("Only top and bottom tab strip orientations are supported");this.hostElement.classList.add("dockspan-tab-host"),this.tabListElement.classList.add("dockspan-tab-handle-list-container"),this.separatorElement.classList.add("dockspan-tab-handle-content-seperator"),this.contentElement.classList.add("dockspan-tab-content"),this.contentElement.tabIndex=0,this.focusHandler=new m(this.contentElement,"focus",this.onFocus.bind(this),!0),this.mouseDownHandler=new m(this.contentElement,"mousedown",this.onMousedown.bind(this),!0)}onFocus(){this.activeTab&&this.dockManager.activePanel!=this.activeTab.panel&&(this.dockManager.activePanel=this.activeTab.panel)}setActive(e){e?this.separatorElement.classList.add("dockspan-tab-handle-content-seperator-active"):this.separatorElement.classList.remove("dockspan-tab-handle-content-seperator-active"),this.activeTab&&this.activeTab.handle.setActive(e)}onMousedown(){this.activeTab&&this.dockManager.activePanel!=this.activeTab.panel&&(this.dockManager.activePanel=this.activeTab.panel)}onMoveTab(e){let t=Array.prototype.slice.call(this.tabListElement.childNodes).indexOf(e.self.elementBase);this.change(this,e.self,e.state,t)}performTabsLayout(e){this.pages=d.orderByIndexes(this.pages,e);let t=this.tabListElement.childNodes,i=[];for(let n in t)t[n].nodeType===1&&i.push(t[n]);i=d.orderByIndexes(i,e);for(let n=0;n<i.length;++n)this.tabListElement.appendChild(i[n]);this.activeTab&&this.onTabPageSelected(this.activeTab,!1)}getActiveTab(){return this.activeTab}addListener(e){this.eventListeners.push(e)}removeListener(e){this.eventListeners.splice(this.eventListeners.indexOf(e),1)}change(e,t,i,n){this.eventListeners.forEach(o=>{o.onChange&&o.onChange({host:e,handle:t,state:i,index:n})})}_createDefaultTabPage(e,t){return new W(e,t)}setActiveTab(e){let t;this.pages.forEach(i=>{i.container===e&&(t=i)}),this.pages.length>0&&t&&(this.onTabPageSelected(t,!0),this.dockManager.activePanel=e)}resize(e,t){this.hostElement.style.width=e+"px",this.hostElement.style.height=t+"px";let i=this.tabListElement.clientHeight;this._resizeRequested||requestAnimationFrame(()=>this.resizeTabListElement(e,t)),this._resizeRequested=!0;let n=this.separatorElement.clientHeight,o=t-i-n;this.contentElement.style.height=o+"px",this.activeTab&&this.activeTab.resize(e,o)}resizeTabListElement(e,t){if(this._resizeRequested=!1,this.pages.length===0)return;let i=0;this.pages.forEach(o=>{let s=o.handle;s.elementBase!=null&&(s.elementBase.style.width="",i+=s.elementBase.clientWidth)});let n=e/i;n>1.2||this.pages.forEach((o,s)=>{let l=o.handle,r=n*l.elementBase.clientWidth;s===this.pages.length-1&&(r=r-5),l.elementBase.style.width=r+"px"})}performLayout(e){this.pages.forEach(n=>{if(!e.some(o=>o==n.container)){n.handle.removeListener(this.tabHandleListener),n.destroy();let o=this.pages.indexOf(n);o>-1&&this.pages.splice(o,1)}});let t=this.activeTab;delete this.activeTab;let i=e.filter(n=>n.containerType==="panel");i.length>0?(i.forEach(n=>{let o=null;this.pages.some(s=>s.container==n?(o=s,!0):!1)||(o=this.createTabPage(this,n),o.handle.addListener(this.tabHandleListener),this.pages.push(o)),t&&o.container===t.container&&(this.activeTab=o)}),this._setTabHandlesVisible(!0)):this._setTabHandlesVisible(!1),this.activeTab&&this.onTabPageSelected(this.activeTab,!1)}_setTabHandlesVisible(e){e?(this.tabListElement.classList.add("dockspan-tab-handle-list-container-visible"),this.separatorElement.classList.add("dockspan-tab-handle-content-seperator-visible")):(this.tabListElement.classList.remove("dockspan-tab-handle-list-container-visible"),this.separatorElement.classList.remove("dockspan-tab-handle-content-seperator-visible"))}onTabPageSelected(e,t){this.activeTab=e,this.pages.forEach(i=>{let n=i===e;i.setSelected(n,t)})}};var D=class{dockManager;tabOrientation;name;element;containerElement;containerType;minimumAllowedChildNodes;tabHost;tabHostListener;state;constructor(e,t){t===void 0&&(t=x.BOTTOM),this.dockManager=e,this.tabOrientation=t,this.name=d.getNextId("fill_"),this.element=document.createElement("div"),this.containerElement=this.element,this.containerType=w.fill,this.minimumAllowedChildNodes=2,this.element.classList.add("dock-container"),this.element.classList.add("dock-container-fill"),this.tabHost=new X(e,this.tabOrientation),this.tabHostListener={onChange:i=>{this.dockManager._requestTabReorder(this,i)}},this.tabHost.addListener(this.tabHostListener),this.element.appendChild(this.tabHost.hostElement)}setActiveChild(e){this.tabHost.setActiveTab(e)}resize(e,t){this.element.style.width=e+"px",this.element.style.height=t+"px",this.tabHost.resize(e,t)}performLayout(e){this.tabHost.performLayout(e)}destroy(){this.tabHost.pages.forEach(e=>e.destroy()),d.removeNode(this.element)&&delete this.element}saveState(e){e.width=this.width,e.height=this.height}loadState(e){this.state={width:e.width,height:e.height}}get width(){return this.element.clientWidth}set width(e){this.element.style.width=e+"px"}get height(){return this.element.clientHeight}set height(e){this.element.style.height=e+"px"}};var Y=class extends W{constructor(e,t){super(e,t),this.container.containerType==="panel"&&(this.panel=t,this.containerElement=this.panel.elementContentWrapper,d.removeNode(this.containerElement))}destroy(){super.destroy(),this.panel.elementContentHost.appendChild(this.containerElement)}};var P=class extends D{constructor(e){super(e,x.TOP),this.minimumAllowedChildNodes=0,this.element.classList.add("document-manager"),this.tabHost.createTabPage=this._createDocumentTabPage,this.tabHost.displayCloseButton=!0}_createDocumentTabPage(e,t){return new Y(e,t)}saveState(e){super.saveState(e),e.documentManager=!0}selectedTab(){return this.tabHost.activeTab}};var G=class{dockManager;documentManagerNode;constructor(e){this.dockManager=e}async deserialize(e){let t=JSON.parse(e),i=new B;return i.rootNode=await this._buildGraph(t.graphInfo),i.dialogs=await this._buildDialogs(t.dialogsInfo),i.documentManagerNode=this.documentManagerNode,i}async _buildGraph(e){let t=e.children,i=[];for(let s of t){let l=await this._buildGraph(s);l!==null&&i.push(l)}let n=await this._createContainer(e,i);if(n===null)return null;let o=new E(n);n instanceof P&&(this.documentManagerNode=o),o.children=i;for(let s of o.children.reverse())s.parent=o;return o.children.reverse(),o}async _createContainer(e,t){let i=e.containerType,n=e.state,o,s=[];for(let l of t)s.push(l.container);if(i==="panel"){if(o=await g.loadFromState(n,this.dockManager),!o.prepareForDocking)return null;o.prepareForDocking(),d.removeNode(o.elementPanel)}else if(i==="horizontal")o=new S(this.dockManager,s);else if(i==="vertical")o=new N(this.dockManager,s);else if(i==="fill")n.documentManager?o=new P(this.dockManager):o=new D(this.dockManager);else throw new Error("Cannot create dock container of unknown type: "+i);return o.loadState(n),o}async _buildDialogs(e){let t=[];for(let i of e){let n=i.containerType,o=i.state,s;if(n==="panel"&&(s=await g.loadFromState(o,this.dockManager),s.prepareForDocking)){d.removeNode(s.elementPanel),s.isDialog=!0;let l=new H(s,this.dockManager);(i.position.x>document.body.clientWidth||i.position.y>document.body.clientHeight-70)&&(i.position.x=20,i.position.y=70),l.setPosition(i.position.x,i.position.y),l.isHidden=i.isHidden,l.isHidden&&l.hide(),t.push(l)}}return t}};var K=class{serialize(e){let t=this._buildGraphInfo(e.rootNode),i=this._buildDialogsInfo(e.dialogs.sort((n,o)=>n.elementDialog.style.zIndex-o.elementDialog.style.zIndex));return JSON.stringify({graphInfo:t,dialogsInfo:i})}_buildGraphInfo(e){let t={};e.container.saveState(t);let i=[];return e.children.forEach(o=>{i.push(this._buildGraphInfo(o))}),{containerType:e.container.containerType,state:t,children:i}}_buildDialogsInfo(e){let t=[];return e.forEach(i=>{let n={},o=i.panel;o.saveState(n);let s={containerType:o.containerType,state:n,position:i.getPosition(),isHidden:i.isHidden};t.push(s)}),t}};var j=class{dockManager;constructor(e){this.dockManager=e}dockLeft(e,t){this._performDock(e,t,"horizontal",!0)}dockRight(e,t){this._performDock(e,t,"horizontal",!1)}dockUp(e,t){this._performDock(e,t,"vertical",!0)}dockDown(e,t){this._performDock(e,t,"vertical",!1)}dockFill(e,t){this._performDock(e,t,"fill",!1)}undock(e){let t=e.parent;if(!t)throw new Error("Cannot undock. panel is not a leaf node");let i=t.children.indexOf(e);if(e.detachFromParent(),t.children.length<t.container.minimumAllowedChildNodes){let n=t.parent;for(let o=0;o<t.children.length;o++){let s=t.children[o];if(n){n.addChildAfter(t,s),t.detachFromParent();let l=t.container.containerElement.clientWidth,r=t.container.containerElement.clientHeight;t.container.destroy(),s.container.resize(l,r),n.performLayout(!1)}else t.detachFromParent(),t.container.destroy(),this.dockManager.setRootNode(s)}}else if(t.performLayout(!1),t.children.length>0){let n=t.children[Math.max(0,i-1)];t.container.setActiveChild(n.container)}this.dockManager.invalidate(),this.dockManager.notifyOnUnDock(e)}close(e){let t=e?.parent;if(!t)throw new Error("Cannot undock. panel is not a leaf node");let i=!1;t.children.length>0&&t.container.tabHost!=null&&(i=t.container.tabHost.getActiveTab().container==e.container);let n=t.children.indexOf(e);if(e.detachFromParent(),t.children.length<t.container.minimumAllowedChildNodes){let o=t.parent;for(let s=0;s<t.children.length;s++){let l=t.children[s];if(o){o.addChildAfter(t,l),t.detachFromParent();let r=t.container.containerElement.clientWidth,h=t.container.containerElement.clientHeight;l.container.resize(r,h),t.container.destroy(),o.performLayout(!1)}else t.detachFromParent(),t.container.destroy(),this.dockManager.setRootNode(l)}}else if(t.performLayout(!1),i){let o=t.children[Math.max(0,n-1)];o!=null&&t.container.setActiveChild(o.container)}this.dockManager.invalidate(),this.dockManager.notifyOnUnDock(e)}reorderTabs(e,t,i,n){let o=e.children.length,s=i==="left"?n:n+1;if(i=="right"&&s>=e.children.length||i=="left"&&s==0)return;let l=Array.apply(null,{length:o}).map(Number.call,Number),r=l.splice(s,1)[0];l.splice(i==="left"?n-1:n,0,r),e.children=d.orderByIndexes(e.children,l),e.container.tabHost.performTabsLayout(l),this.dockManager.notifyOnTabsReorder(e)}_performDock(e,t,i,n){if(e.parent&&e.parent.container.containerType==="fill"&&(e=e.parent),i==="fill"&&e.container.containerType==="fill"){e.addChild(t),e.performLayout(!1),e.container.setActiveChild(t.container),this.dockManager.invalidate(),this.dockManager.notifyOnDock(t);return}let o=this.dockManager.context.model,s,l,r;if(e===o.rootNode){n?(s=this._createDockContainer(i,t,e),l=new E(s),l.addChild(t),l.addChild(e)):(s=this._createDockContainer(i,e,t),l=new E(s),l.addChild(e),l.addChild(t)),this.dockManager.setRootNode(l),this.dockManager.rebuildLayout(this.dockManager.context.model.rootNode),l.container.setActiveChild(t.container),this.dockManager.invalidate(),this.dockManager.notifyOnDock(t);return}if(e.parent.container.containerType!==i){r=e.parent;let p=e.container.containerElement.clientWidth,u=e.container.containerElement.clientHeight,k=r.container.containerElement.clientWidth,b=r.container.containerElement.clientHeight;s=this._createDockContainer(i,t,e),l=new E(s),r.addChildAfter(e,l),e.detachFromParent(),d.removeNode(e.container.containerElement),n?(l.addChild(t),l.addChild(e)):(l.addChild(e),l.addChild(t)),r.performLayout(!1),l.performLayout(!0),l.container.setActiveChild(t.container),l.container.resize(p,u),r.container.resize(k,b)}else r=e.parent,n?r.addChildBefore(e,t):r.addChildAfter(e,t),r.performLayout(!1),r.container.setActiveChild(t.container);let h=t.container.containerElement.clientWidth,c=t.container.containerElement.clientHeight;t.container.resize(h,c),this.dockManager.invalidate(),this.dockManager.notifyOnDock(t)}_forceResizeCompositeContainer=e=>{let t=e.containerElement.clientWidth,i=e.containerElement.clientHeight;e.resize(t,i)};_createDockContainer(e,t,i){if(e==="horizontal")return new S(this.dockManager,[t.container,i.container]);if(e==="vertical")return new N(this.dockManager,[t.container,i.container]);if(e==="fill")return new D(this.dockManager);throw new Error("Failed to create dock container of type: "+e)}getDockBounds(e,t,i,n){let o,s,l,r;if(i==="fill"){let T=e.container.containerElement,R=this.dockManager.element.getBoundingClientRect(),_=T.getBoundingClientRect();return{x:_.left-R.left,y:_.top-R.top,width:T.clientWidth,height:T.clientHeight}}e.parent&&e.parent.container.containerType==="fill"&&(e=e.parent);let h=!1;e.parent&&e.parent.container.containerType===i?(o=e.parent,s=o.children.length,l=o.children.indexOf(e)+(n?0:1)):(o=e,s=1,l=n?0:1,h=!0);let c=5,p=0,u=0;if(i==="vertical"||i==="horizontal"){let T=this._getVaringDimension(o.container,i)-(s-1)*c,R=this._getVaringDimension(t,i),_=T/(T+R);if(p=R*_,h)u=n?0:T*_;else{for(let ee=0;ee<l;ee++)u+=this._getVaringDimension(o.children[ee].container,i);u*=_}}r={};let k=this.dockManager.element.getBoundingClientRect(),b=o.container.containerElement.getBoundingClientRect();return i==="vertical"?(r.x=b.left-k.left,r.y=b.top-k.top+u,r.width=o.container.width,r.height=p):i==="horizontal"&&(r.x=b.left-k.left+u,r.y=b.top-k.top,r.width=p,r.height=o.container.height),r}_getVaringDimension(e,t){return t==="vertical"?e.height:t==="horizontal"?e.width:0}};var $=class{dockManager;model;documentManagerView;constructor(e){this.dockManager=e,this.model=new B,this.documentManagerView=new P(this.dockManager)}};var J=class{wheel;id;element;hoverIconClass;mouseOverHandler;mouseOutHandler;active;constructor(e,t){this.wheel=e,this.id=t;let i=t.replace("-s","");this.element=document.createElement("div"),this.element.classList.add("dock-wheel-item"),this.element.classList.add("disable-selection"),this.element.classList.add("dock-wheel-"+i),this.element.classList.add("dock-wheel-"+i+"-icon"),this.hoverIconClass="dock-wheel-"+i+"-icon-hover",this.mouseOverHandler=new m(this.element,"pointerover",this.onMouseMoved.bind(this)),this.mouseOutHandler=new m(this.element,"pointerout",this.onMouseOut.bind(this)),this.active=!1}onMouseMoved(){this.active=!0,this.element.classList.add(this.hoverIconClass),this.wheel.onMouseOver(this)}onMouseOut(){this.active=!1,this.element.classList.remove(this.hoverIconClass),this.wheel.onMouseOut()}};var Q=class{dockManager;elementMainWheel;elementSideWheel;wheelItems;elementPanelPreview;activeDialog;_activeNode;_visible;constructor(e){this.dockManager=e,this.elementMainWheel=document.createElement("div"),this.elementSideWheel=document.createElement("div"),this.wheelItems={};for(let i in f)this.wheelItems[i]=new J(this,i),i.substr(-2,2)==="-s"?this.elementSideWheel.appendChild(this.wheelItems[i].element):this.elementMainWheel.appendChild(this.wheelItems[i].element);let t=9e6;this.elementMainWheel.classList.add("dock-wheel-base"),this.elementSideWheel.classList.add("dock-wheel-base"),this.elementMainWheel.style.zIndex=String(t+1),this.elementSideWheel.style.zIndex=String(t),this.elementPanelPreview=document.createElement("div"),this.elementPanelPreview.classList.add("dock-wheel-panel-preview"),this.elementPanelPreview.style.zIndex=String(t-1),this.activeDialog=void 0,this._activeNode=void 0,this._visible=!1}get activeNode(){return this._activeNode}set activeNode(e){let t=this._activeNode;this._activeNode=e,t!==this._activeNode&&this._visible&&this.showWheel()}showWheel(){if(this._visible=!0,!this.activeNode){d.removeNode(this.elementMainWheel),d.removeNode(this.elementSideWheel);return}let e=this.activeNode.container.containerElement,t=e.clientWidth,i=e.clientHeight,n=Math.floor(t/2),o=Math.floor(i/2),s=e.getBoundingClientRect(),l=this.dockManager.element.getBoundingClientRect();this.elementMainWheel.style.left=s.left-l.left+n+"px",this.elementMainWheel.style.top=s.top-l.top+o+"px";let r=20,h=this.dockManager.element.clientWidth,c=this.dockManager.element.clientHeight;d.removeNode(this.elementMainWheel),d.removeNode(this.elementSideWheel),this.dockManager.element.appendChild(this.elementMainWheel),this.dockManager.element.appendChild(this.elementSideWheel),this._setWheelButtonPosition(f["left-s"],r,-c/2),this._setWheelButtonPosition(f["right-s"],h-r*2,-c/2),this._setWheelButtonPosition(f["top-s"],h/2,-c+r),this._setWheelButtonPosition(f["down-s"],h/2,-r)}_setWheelButtonPosition(e,t,i){let n=this.wheelItems[e],o=n.element.clientWidth/2,s=n.element.clientHeight/2,l=Math.floor(t-o),r=Math.floor(i-s);n.element.style.marginLeft=l+"px",n.element.style.marginTop=r+"px"}hideWheel(){this._visible=!1,this.activeNode=void 0,d.removeNode(this.elementMainWheel),d.removeNode(this.elementSideWheel),d.removeNode(this.elementPanelPreview);for(let e in this.wheelItems)this.wheelItems[e].active=!1}onMouseOver(e){if(!this.activeDialog)return;let t=this.dockManager.context.model.rootNode,i;e.id===f.top?i=this.dockManager.layoutEngine.getDockBounds(this.activeNode,this.activeDialog.panel,"vertical",!0):e.id===f.down?i=this.dockManager.layoutEngine.getDockBounds(this.activeNode,this.activeDialog.panel,"vertical",!1):e.id===f.left?i=this.dockManager.layoutEngine.getDockBounds(this.activeNode,this.activeDialog.panel,"horizontal",!0):e.id===f.right?i=this.dockManager.layoutEngine.getDockBounds(this.activeNode,this.activeDialog.panel,"horizontal",!1):e.id===f.fill?i=this.dockManager.layoutEngine.getDockBounds(this.activeNode,this.activeDialog.panel,"fill",!1):e.id===f["top-s"]?i=this.dockManager.layoutEngine.getDockBounds(t,this.activeDialog.panel,"vertical",!0):e.id===f["down-s"]?i=this.dockManager.layoutEngine.getDockBounds(t,this.activeDialog.panel,"vertical",!1):e.id===f["left-s"]?i=this.dockManager.layoutEngine.getDockBounds(t,this.activeDialog.panel,"horizontal",!0):e.id===f["right-s"]&&(i=this.dockManager.layoutEngine.getDockBounds(t,this.activeDialog.panel,"horizontal",!1)),i&&(this.dockManager.element.appendChild(this.elementPanelPreview),this.elementPanelPreview.style.left=Math.round(i.x)+"px",this.elementPanelPreview.style.top=Math.round(i.y)+"px",this.elementPanelPreview.style.width=Math.round(i.width)+"px",this.elementPanelPreview.style.height=Math.round(i.height)+"px")}onMouseOut(){d.removeNode(this.elementPanelPreview)}onDialogDropped(e){let t=this._getActiveWheelItem();t&&this._handleDockRequest(t,e)}_getActiveWheelItem(){for(let e in this.wheelItems){let t=this.wheelItems[e];if(t.active)return t}}_handleDockRequest(e,t){e.active=!1,e.element.classList.remove(e.hoverIconClass),this.activeNode&&(e.id===f.left?this.dockManager.dockDialogLeft(this.activeNode,t):e.id===f.right?this.dockManager.dockDialogRight(this.activeNode,t):e.id===f.top?this.dockManager.dockDialogUp(this.activeNode,t):e.id===f.down?this.dockManager.dockDialogDown(this.activeNode,t):e.id===f.fill?this.dockManager.dockDialogFill(this.activeNode,t):e.id===f["left-s"]?this.dockManager.dockDialogLeft(this.dockManager.context.model.rootNode,t):e.id===f["right-s"]?this.dockManager.dockDialogRight(this.dockManager.context.model.rootNode,t):e.id===f["top-s"]?this.dockManager.dockDialogUp(this.dockManager.context.model.rootNode,t):e.id===f["down-s"]&&this.dockManager.dockDialogDown(this.dockManager.context.model.rootNode,t))}};var Z=class{element;context;dockWheel;layoutEngine;mouseMoveHandler;touchMoveHandler;layoutEventListeners;closePanelContainerCallback;defaultDialogPosition;backgroundContext;zIndexCounter;zIndexTabHost;zIndexTabHandle;zIndexDialogCounter;onKeyPressBound;iframes;_undockEnabled;getElementCallback;_config;_activePanel;_lastPanelNotADialog;_activeDocument;constructor(e,t){if(e===void 0)throw new Error("Invalid Dock Manager element provided");this._config=Object.assign(new A,t),this.element=e,this.context=this.dockWheel=this.layoutEngine=this.mouseMoveHandler=this.touchMoveHandler=void 0,this.layoutEventListeners=[],this.defaultDialogPosition=new v(0,0)}get config(){return this._config}initialize(){this.backgroundContext=this.element.children[0],this.context=new $(this);let e=new E(this.context.documentManagerView);this.context.model.rootNode=e,this.context.model.documentManagerNode=e,this.context.model.dialogs=[],this.setRootNode(this.context.model.rootNode),this.resize(this.element.clientWidth,this.element.clientHeight),this.dockWheel=new Q(this),this.layoutEngine=new j(this),this._undockEnabled=!0,this.rebuildLayout(this.context.model.rootNode),this.zIndexCounter=1001,this.zIndexTabHost=1e3,this.zIndexTabHandle=100,this.zIndexDialogCounter=10001,this.backgroundContext!=null&&this.context.model.rootNode.container.tabHost.hostElement.insertBefore(this.backgroundContext,this.context.model.rootNode.container.tabHost.hostElement.firstChild),this.onKeyPressBound=this.onKeyPress.bind(this),this.element.addEventListener("keydown",this.onKeyPressBound)}onKeyPress(e){if(e.key=="Escape"&&this.activePanel&&!this.activePanel._hideCloseButton&&(this.activePanel.isDialog&&this._config.escClosesDialog||!this.activePanel.isDialog&&this._config.escClosesWindow)){let t=this.activePanel;this.activePanel=null,t.close()}}checkXBounds(e,t,i,n,o){if(this._config.moveOnlyWithinDockConatiner)return this.checkXBoundsWithinDockContainer(e,t,i,n,o);let s=this.element.getBoundingClientRect(),l=Math.floor(t.x-i.x),r=l<0&&e.offsetLeft+e.offsetWidth+l+s.left<40,h=l>0&&e.offsetLeft+l+s.left>window.innerWidth-40;if(r){i.x=t.x,l=0;let c=40-(e.offsetWidth+e.offsetLeft+s.left);c>0&&(l=c)}else if(h){i.x=t.x,l=0;let c=window.innerWidth-40-e.offsetLeft-s.left;c>0&&(l=c)}return l}checkXBoundsWithinDockContainer(e,t,i,n,o){let s=t.x-i.x,l=this.element.getBoundingClientRect(),r=e.getBoundingClientRect(),h=s<0&&r.left+s<l.left&&!o,c=s>0&&r.right+s>l.right&&!n;return h?(t.x-=s,s=l.left-r.left,t.x-=s):c&&(t.x-=s,s=l.right-r.right,t.x-=s),s}checkYBounds(e,t,i,n,o){if(this._config.moveOnlyWithinDockConatiner)return this.checkYBoundsWithinDockContainer(e,t,i,n,o);let s=this.element.getBoundingClientRect(),l=Math.floor(t.y-i.y),r=l<0&&e.offsetTop+l<0,h=l>0&&e.offsetTop+l+s.top>window.innerHeight-16;if(r)i.y=t.y,l=0;else if(h){i.y=t.y,l=0;let c=window.innerHeight-16-e.offsetTop-s.top;c>0&&(l=c)}return l}checkYBoundsWithinDockContainer(e,t,i,n,o){let s=t.y-i.y,l=this.element.getBoundingClientRect(),r=e.getBoundingClientRect(),h=s<0&&r.top+s<l.top&&!o,c=s>0&&r.bottom+s>l.bottom&&!n;return h?(t.y-=s,s=l.top-r.top,t.y-=s):c&&(t.y-=s,s=l.bottom-r.bottom,t.y-=s),s}rebuildLayout(e){e.children.forEach(t=>{this.rebuildLayout(t)}),e.performLayout(!1)}invalidate(){this.resize(this.element.clientWidth,this.element.clientHeight)}resize(e,t){this.context.model.rootNode.container.resize(e,t);let i=0,n=0;for(let o of this.context.model.dialogs)(o.position.x>this.element.clientWidth||o.position.y>this.element.clientHeight)&&((i>this.element.clientWidth||n>this.element.clientHeight)&&(i=0,n=0),o.setPosition(100+i,100+n),i+=100,n+=100)}setModel(e){d.removeNode(this.context.documentManagerView.containerElement),this.context.model=e,this.setRootNode(e.rootNode),this.rebuildLayout(e.rootNode),this.loadResize(e.rootNode)}loadResize(e){e.children.reverse().forEach(i=>{this.loadResize(i),e.container.setActiveChild(i.container)}),e.children.reverse();let t=e.container;e.container.resize(t.state.width,t.state.height)}setRootNode(e){e.detachFromParent(),this.context.model.rootNode=e,this.element.appendChild(e.container.containerElement)}_onDialogDragStarted(e,t){this.dockWheel.activeNode=this._findNodeOnPoint(t.clientX,t.clientY),this.dockWheel.activeDialog=e,(e.noDocking==null||e.noDocking!==!0)&&this.dockWheel.showWheel(),this.mouseMoveHandler&&(this.mouseMoveHandler.cancel(),delete this.mouseMoveHandler),this.touchMoveHandler&&(this.touchMoveHandler.cancel(),delete this.touchMoveHandler),this.mouseMoveHandler=new m(window,"mousemove",this._onMouseMoved.bind(this)),this.touchMoveHandler=new m(window,"touchmove",this._onMouseMoved.bind(this))}_onDialogDragEnded(e,t){this.mouseMoveHandler&&(this.mouseMoveHandler.cancel(),delete this.mouseMoveHandler),this.touchMoveHandler&&(this.touchMoveHandler.cancel(),delete this.touchMoveHandler),this.dockWheel.onDialogDropped(e),this.dockWheel.hideWheel(),delete this.dockWheel.activeDialog,e.saveState(e.elementDialog.offsetLeft,e.elementDialog.offsetTop)}_onMouseMoved(e){e.changedTouches!=null&&(e=e.changedTouches[0]),this.dockWheel.activeNode=this._findNodeOnPoint(e.clientX,e.clientY)}_findNodeOnPoint(e,t){let i=[];i.push(this.context.model.rootNode);let n;for(;i.length>0;){let o=i.pop();d.isPointInsideNode(e,t,o)&&(n=o,[].push.apply(i,o.children))}return n}dockDialogLeft(e,t){return this._requestDockDialog(e,t,this.layoutEngine.dockLeft.bind(this.layoutEngine))}dockDialogRight(e,t){return this._requestDockDialog(e,t,this.layoutEngine.dockRight.bind(this.layoutEngine))}dockDialogUp(e,t){return this._requestDockDialog(e,t,this.layoutEngine.dockUp.bind(this.layoutEngine))}dockDialogDown(e,t){return this._requestDockDialog(e,t,this.layoutEngine.dockDown.bind(this.layoutEngine))}dockDialogFill(e,t){return this._requestDockDialog(e,t,this.layoutEngine.dockFill.bind(this.layoutEngine))}dockLeft(e,t,i){return this._requestDockContainer(e,t,this.layoutEngine.dockLeft.bind(this.layoutEngine),!1,i)}dockRight(e,t,i){return this._requestDockContainer(e,t,this.layoutEngine.dockRight.bind(this.layoutEngine),!0,i)}dockUp(e,t,i){return this._requestDockContainer(e,t,this.layoutEngine.dockUp.bind(this.layoutEngine),!1,i)}dockDown(e,t,i){return this._requestDockContainer(e,t,this.layoutEngine.dockDown.bind(this.layoutEngine),!0,i)}dockFill(e,t){return this._requestDockContainer(e,t,this.layoutEngine.dockFill.bind(this.layoutEngine),!1)}floatDialog(e,t,i,n,o){let s;if(this.context.model.dialogs.forEach(h=>{e==h.panel&&(h.show(),h.setPosition(t,i),s=h)}),s)return s;try{let h=this._findNodeFromContainer(e);this.layoutEngine.undock(h)}catch{}let l=e;d.removeNode(l.elementPanel),l.isDialog=!0;let r=new H(l,this,n,o);return r.setPosition(t,i),r}_requestDockDialog(e,t,i){let n=t.panel,o=new E(n);return n.prepareForDocking(),n.elementContentContainer.style.zIndex="",t.destroy(),i(e,o),o}_checkShowBackgroundContext(){this.backgroundContext!=null&&(this.context.model.documentManagerNode.children.length>0?this.backgroundContext.style.display="none":this.backgroundContext.style.display="block")}_requestDockContainer(e,t,i,n,o){let s=new E(t);if(t.containerType==="panel"){let h=t;h.prepareForDocking(),d.removeNode(h.elementPanel)}let l=null,r;if(e.parent&&e.parent.container&&(r=e.parent.container,r.getRatios&&(l=r.getRatios())),i(e,s),o&&s.parent&&(s.parent.container.containerType==="vertical"||s.parent.container.containerType==="horizontal")){let h=s.parent.container;if(l&&r==h){if(n){for(let c=0;c<l.length;c++)l[c]=l[c]-l[c]*o;l.push(o)}else l[0]=l[0]-o,l.unshift(o);h.setRatios(l)}else h.setContainerRatio(t,o)}return this.rebuildLayout(this.context.model.rootNode),this.invalidate(),this._checkShowBackgroundContext(),s}_requestTabReorder(e,t){let i=this._findNodeFromContainer(e);this.layoutEngine.reorderTabs(i,t.handle,t.state,t.index)}requestUndockToDialog(e,t,i){let n=this._findNodeFromContainer(e);this.layoutEngine.undock(n);let o=n.container;o.elementPanel.style.display="block";let s=new H(o,this,null);if(o.lastDialogSize&&s.resize(o.lastDialogSize.width,o.lastDialogSize.height),t!==void 0){let l=s.elementDialog.clientWidth;i.x>l&&(i.x=.75*l),s.setPosition(t.clientX-i.x,t.clientY-i.y),s.draggable.onMouseDown(t)}return s}requestClose(e){let t=this._findNodeFromContainer(e);if(this.layoutEngine.close(t),this.activePanel==e&&(this.activePanel=null),this._activeDocument==e){let i=this._activeDocument;this._activeDocument=null,this.notifyOnActiveDocumentChange(null,i)}}openInDialog(e,t,i,n){let o=new H(e,this,null,n);if(t!=null){let s=o.elementDialog.clientWidth;i.x>s&&(i.x=.75*s),o.setPosition(t.clientX-i.x,t.clientY-i.y),o.draggable.onMouseDown(t)}return o}requestUndock(e){let t=this._findNodeFromContainer(e);this.layoutEngine.undock(t)}requestRemove(e){let t=this._findNodeFromContainer(e),i=t.parent;return t.detachFromParent(),i&&this.rebuildLayout(i),t}getNodeByElementId(e){let t=[];for(t.push(this.context.model.rootNode);t.length>0;){let i=t.pop();if(i.container instanceof g&&(i.container.elementContent.id===e||i.container.elementContent instanceof HTMLSlotElement&&i.container.elementContent.assignedElements()?.[0]?.id===e))return i;[].push.apply(t,i.children)}return null}getNodeByElement(e){let t=[];for(t.push(this.context.model.rootNode);t.length>0;){let i=t.pop();if(i.container instanceof g&&(i.container.elementContent===e||i.container.elementContent instanceof HTMLSlotElement&&i.container.elementContent.assignedElements()?.[0]===e))return i;[].push.apply(t,i.children)}return null}_findNodeFromContainer(e){let t=[];for(t.push(this.context.model.rootNode);t.length>0;){let i=t.pop();if(i.container===e)return i;[].push.apply(t,i.children)}return null}findNodeFromContainerElement(e){let t=[];for(t.push(this.context.model.rootNode);t.length>0;){let i=t.pop();if(i.container.containerElement===e)return i;[].push.apply(t,i.children)}return null}addLayoutListener(e){this.layoutEventListeners.push(e)}removeLayoutListener(e){this.layoutEventListeners.splice(this.layoutEventListeners.indexOf(e),1)}suspendLayout(e){this.layoutEventListeners.forEach(t=>{t.onSuspendLayout&&t.onSuspendLayout(this,e)})}resumeLayout(e){this.layoutEventListeners.forEach(t=>{t.onResumeLayout&&t.onResumeLayout(this,e)})}notifyOnDock(e){this._checkShowBackgroundContext(),this.layoutEventListeners.forEach(t=>{t.onDock&&(t.onDock(this,e),e.container.resize(e.container.width,e.container.height))})}notifyOnTabsReorder(e){this.layoutEventListeners.forEach(t=>{t.onTabsReorder&&t.onTabsReorder(this,e)})}notifyOnUnDock(e){this._checkShowBackgroundContext(),this.layoutEventListeners.forEach(t=>{t.onUndock&&t.onUndock(this,e)})}notifyOnClosePanel(e){if(this._checkShowBackgroundContext(),this.activePanel==e&&(this.activePanel=null),this._activeDocument==e){let t=this._activeDocument;this._activeDocument=null,this.notifyOnActiveDocumentChange(null,t)}this.layoutEventListeners.forEach(t=>{t.onClosePanel&&t.onClosePanel(this,e)})}notifyOnCreateDialog(e){this.layoutEventListeners.forEach(t=>{t.onCreateDialog&&t.onCreateDialog(this,e)})}notifyOnHideDialog(e){this.layoutEventListeners.forEach(t=>{t.onHideDialog&&t.onHideDialog(this,e)})}notifyOnShowDialog(e){this.layoutEventListeners.forEach(t=>{t.onShowDialog&&t.onShowDialog(this,e)})}notifyOnChangeDialogPosition(e,t,i){this.layoutEventListeners.forEach(n=>{n.onChangeDialogPosition&&n.onChangeDialogPosition(this,e,t,i)})}notifyOnContainerResized(e){this.layoutEventListeners.forEach(t=>{t.onContainerResized&&t.onContainerResized(this,e)})}notifyOnTabChange(e){this.layoutEventListeners.forEach(t=>{t.onTabChanged&&t.onTabChanged(this,e)})}notifyOnActivePanelChange(e,t){this.layoutEventListeners.forEach(i=>{i.onActivePanelChange&&i.onActivePanelChange(this,e,t)})}async notifyOnActiveDocumentChange(e,t){for(let i of this.layoutEventListeners)i.onActiveDocumentChange&&await i.onActiveDocumentChange(this,e,t)}prepareElementForNewWindow=null;notifyOnNewWindow(e,t){this._checkShowBackgroundContext(),this.layoutEventListeners.forEach(i=>{i.onNewWindow&&i.onNewWindow(this,e,t)})}saveState(){return new K().serialize(this.context.model)}async loadState(e){let t=new G(this);this.context.model=await t.deserialize(e),this.setModel(this.context.model)}getPanels(){let e=[];return this._allPanels(this.context.model.rootNode,e),this.context.model.dialogs.forEach(t=>{e.push(t.panel)}),e}undockEnabled(e){this._undockEnabled=e,this.getPanels().forEach(t=>{t.canUndock(e)})}lockDockState(e){this.undockEnabled(!e),this.hideCloseButton(e)}hideCloseButton(e){this.getPanels().forEach(t=>{t.hideCloseButton(e)})}updatePanels(e){let t=[];return this._allPanels(this.context.model.rootNode,t),t.forEach(i=>{d.arrayContains(e,i.elementContent.id)||i.close()}),this.context.model.dialogs.forEach(i=>{d.arrayContains(e,i.panel.elementContent.id)?i.show():i.hide()}),t}getVisiblePanels(){let e=[];return this._allPanels(this.context.model.rootNode,e),this.context.model.dialogs.forEach(t=>{t.isHidden||e.push(t.panel)}),e}_allPanels(e,t){e.children.forEach(i=>{this._allPanels(i,t)}),e.container.containerType==="panel"&&t.push(e.container)}get activeDocument(){return this._activeDocument}get activePanel(){return this._activePanel}set activePanel(e){if(e!==this._activePanel){e&&!e.isDialog&&(this._lastPanelNotADialog=e),this._lastPanelNotADialog&&this.getPanels().indexOf(this._lastPanelNotADialog)<0&&(this._lastPanelNotADialog=null);let t=this.activePanel;this.activePanel&&(this.activePanel.elementTitle.classList.remove("dockspan-panel-active"),this.activePanel.elementTitleText.classList.remove("dockspan-panel-titlebar-text-active"),this.activePanel.tabPage&&this.activePanel.tabPage.host.setActive(!1)),this._activePanel=e;let i=this._activeDocument;e&&e.panelType==M.document&&(this._activeDocument=e),!e&&t&&t.isDialog&&e==null&&this._lastPanelNotADialog&&this.activePanel!=this._lastPanelNotADialog&&(e=this._lastPanelNotADialog,this._lastPanelNotADialog=void 0),this.notifyOnActivePanelChange(e,t),i!=this._activeDocument&&this.notifyOnActiveDocumentChange(this._activeDocument,i),e&&(e.elementTitle.classList.add("dockspan-panel-active"),e.elementTitleText.classList.add("dockspan-panel-titlebar-text-active"),e.tabPage&&e.tabPage.host.setActive(!0))}else e&&e.tabPage&&e.tabPage.host.setActive(!0)}};import le from"./dock-manager-style-722M54DP.css"with{type:"css"};import ae from"./dock-manager-OTE5HAR7.css"with{type:"css"};function re(a,e){if(a.length===1)return a.raw[0];{let t="";for(let i=0;i<a.length;i++)t+=a[i]+(e[i]??"");return t}}var he=function(a,...e){let t=new CSSStyleSheet;return t.replaceSync(re(a,e)),t},te=class a extends HTMLElement{dockManager;slotId=0;windowResizedBound;slotElementMap;observer;initialized=!1;elementContainerMap=new Map;static style=he`
|
|
13
|
+
`,s.document.head.appendChild(a),e.title){let u=s.document.createElement("title");u.innerText=e.title,s.document.head.appendChild(u)}e.newWindowClosedCallback&&(s.onunload=()=>e.newWindowClosedCallback());let h=new Map,d=new Map;function p(u){if(u.shadowRoot){u.shadowRoot.adoptedStyleSheets.length>0&&d.set(u,[...u.shadowRoot.adoptedStyleSheets.map(k=>se(s,k,h))]);for(let k of u.shadowRoot.querySelectorAll("*"))p(k)}}p(i);for(let u of i.querySelectorAll("*"))p(u);s.document.body.appendChild(s.document.adoptNode(i));for(let u of d)u[0].shadowRoot.adoptedStyleSheets=u[1];return e.closeCallback&&e.closeCallback(),r.dockManager.notifyOnNewWindow(r,s),s}function se(r,e,t){let i=t.get(e);if(i)return i;let n="",o=e.cssRules;for(var s=0;s<o.length;s++)n+=o[s].cssText+`
|
|
14
|
+
`;let l=new r.CSSStyleSheet;return t.set(e,l),l.replaceSync(n),l}var C;(function(r){r.horizontal="horizontal",r.vertical="vertical",r.fill="fill",r.panel="panel"})(C||(C={}));var m=class{target;eventName;source;constructor(e,t,i,n){this.target=i,this.eventName=t,this.source=e,this.source.addEventListener(t,this.target,n)}cancel(){this.source.removeEventListener(this.eventName,this.target)}};var v=class{x;y;constructor(e,t){this.x=e,this.y=t}};var c=class r{static _counter=0;static getPixels(e){return e===null?0:parseInt(e.replace("px",""))}static disableGlobalTextSelection(e){e.classList.add("disable-selection")}static enableGlobalTextSelection(e){e.classList.remove("disable-selection")}static isPointInsideNode(e,t,i){let o=i.container.containerElement.getBoundingClientRect();return e>=o.left&&e<=o.left+o.width&&t>=o.top&&t<=o.top+o.height}static getNextId(e){return e+r._counter++}static removeNode(e){return e.parentNode===null?!1:(e.parentNode.removeChild(e),!0)}static orderByIndexes(e,t){let i=[];for(let n=0;n<t.length;n++)i.push(e[t[n]]);return i}static arrayRemove(e,t){let i=e.indexOf(t);return i!==-1?e.splice(i,1):!1}static arrayContains(e,t){let i=e.length;for(;i--;)if(e[i]===t)return!0;return!1}static arrayEqual(e,t){if(e===t)return!0;if(e==null||t==null||e.length!=t.length)return!1;for(let i=0;i<e.length;++i)if(e[i]!==t[i])return!1;return!0}};var U=class{dialog;delegate;containerElement;dockManager;topLevelElement;containerType;mouseDownHandler;touchDownHandler;minimumAllowedChildNodes;previousMousePosition;dragOffset;mouseMoveHandler;mouseUpHandler;iframeEventHandlers;constructor(e,t,i,n){this.dialog=e,this.delegate=t,this.containerElement=t.containerElement,this.dockManager=t.dockManager,this.topLevelElement=i,this.containerType=t.containerType,this.mouseDownHandler=new m(n,"mousedown",this.onMouseDown.bind(this)),this.touchDownHandler=new m(n,"touchstart",this.onMouseDown.bind(this)),this.topLevelElement.style.left=i.offsetLeft+"px",this.topLevelElement.style.top=i.offsetTop+"px",this.minimumAllowedChildNodes=t.minimumAllowedChildNodes,this.iframeEventHandlers=[]}destroy(){this.removeDecorator(),this.delegate.destroy()}saveState(e){this.delegate.saveState(e)}loadState(e){this.delegate.loadState(e)}setActiveChild(){}get width(){return this.delegate.width}get height(){return this.delegate.height}get name(){return this.delegate.name}set name(e){e&&(this.delegate.name=e)}resize(e,t){this.delegate.resize(e,t)}performLayout(e){this.delegate.performLayout(e,!1)}removeDecorator(){this.mouseDownHandler&&(this.mouseDownHandler.cancel(),delete this.mouseDownHandler),this.touchDownHandler&&(this.touchDownHandler.cancel(),delete this.touchDownHandler)}onMouseDown(e){if(e.button!=2&&(e.preventDefault&&e.preventDefault(),this._startDragging(e),this.previousMousePosition={x:e.clientX,y:e.clientY},this.setDragOffset(e.clientX,e.clientY),this.mouseMoveHandler&&(this.mouseMoveHandler.cancel(),delete this.mouseMoveHandler),this.mouseUpHandler&&(this.mouseUpHandler.cancel(),delete this.mouseUpHandler),this.mouseMoveHandler=new m(window,"pointermove",this.onMouseMove.bind(this)),this.mouseUpHandler=new m(window,"pointerup",this.onMouseUp.bind(this)),this.dockManager.iframes))for(let t of this.dockManager.iframes){let i=this.onMouseMovedIframe.bind(this);this.iframeEventHandlers.push(new m(t.contentWindow,"pointermove",n=>i(n,t))),this.iframeEventHandlers.push(new m(t.contentWindow,"pointerup",this.onMouseUp.bind(this)))}}onMouseUp(e){this._stopDragging(e),this.mouseMoveHandler.cancel(),delete this.mouseMoveHandler,this.mouseUpHandler.cancel(),delete this.mouseUpHandler;for(let t of this.iframeEventHandlers)t.cancel();this.iframeEventHandlers=[]}_startDragging(e){this.containerElement.classList.add("draggable-dragging-active"),this.delegate.elementContentContainer.classList.add("draggable-dragging-active"),this.dialog.eventListener&&this.dialog.eventListener._onDialogDragStarted(this.dialog,e),c.disableGlobalTextSelection(this.dockManager.config.dialogRootElement)}_stopDragging(e){this.containerElement.classList.remove("draggable-dragging-active"),this.delegate.elementContentContainer.classList.remove("draggable-dragging-active"),this.dialog.eventListener&&this.dialog.eventListener._onDialogDragEnded(this.dialog,e),c.enableGlobalTextSelection(this.dockManager.config.dialogRootElement)}onMouseMovedIframe(e,t){let i=t.getBoundingClientRect();this.onMouseMove(e,{x:i.x,y:i.y})}onMouseMove(e,t){e.preventDefault&&e.preventDefault();let i=new v(e.clientX,e.clientY);t&&(i=new v(e.clientX+t.x,e.clientY+t.y)),this._performDragToMouse(i),this.previousMousePosition=i}setDragOffset(e,t){let i=this.topLevelElement.getBoundingClientRect();this.dragOffset=new v(e-i.left,t-i.top)}_performDragToMouse(e){let t=this.dockManager.config.dialogRootElement.getBoundingClientRect(),i=e.x-t.left-this.dragOffset.x,n=e.y-t.top-this.dragOffset.y,o=this.constrainDragPosition(i,n);this._setPosition(o.x,o.y)}constrainDragPosition(e,t){if(this.dockManager.config.moveOnlyWithinDockConatiner){let a=this.dockManager.config.dialogRootElement.getBoundingClientRect();return e=Math.min(Math.max(e,0),Math.max(0,a.width-this.topLevelElement.offsetWidth)),t=Math.min(Math.max(t,0),Math.max(0,a.height-this.topLevelElement.offsetHeight)),new v(e,t)}let i=this.dockManager.config.dialogRootElement.getBoundingClientRect(),n=40-this.topLevelElement.offsetWidth-i.left,o=window.innerWidth-40-i.left,s=-i.top,l=window.innerHeight-16-i.top;return e=Math.min(Math.max(e,n),o),t=Math.min(Math.max(t,s),l),new v(e,t)}_performDrag(e,t){let i=e+c.getPixels(this.topLevelElement.style.left),n=t+c.getPixels(this.topLevelElement.style.top);this._setPosition(i,n)}_setPosition(e,t){this.topLevelElement.style.left=e+"px",this.topLevelElement.style.top=t+"px",this.dialog.panel.setDialogPosition(e,t)}};var z=class{mouseUpHandler;touchUpHandler;mouseMoveHandler;touchMoveHandler;dragStartPosition;thresholdPixels;_enabled;mouseDownHandler;touchDownHandler;element;_undockededCallback;touchDownUndockedHandler;constructor(e,t,i){i||(i=7),this.element=e,this._undockededCallback=t,this.thresholdPixels=i,this._enabled=!1}get enabled(){return this._enabled}set enabled(e){this._enabled=e,this._enabled?(this.mouseDownHandler&&(this.mouseDownHandler.cancel(),delete this.mouseDownHandler),this.touchDownHandler&&(this.touchDownHandler.cancel(),delete this.touchDownHandler),this.mouseDownHandler=new m(this.element,"mousedown",this.onMouseDown.bind(this)),this.touchDownHandler=new m(this.element,"touchstart",this.onMouseDown.bind(this),{passive:!1})):(this.mouseDownHandler&&(this.mouseDownHandler.cancel(),delete this.mouseDownHandler),this.touchDownHandler&&(this.touchDownHandler.cancel(),delete this.touchDownHandler),this.mouseUpHandler&&(this.mouseUpHandler.cancel(),delete this.mouseUpHandler),this.touchUpHandler&&(this.touchUpHandler.cancel(),delete this.touchUpHandler),this.mouseMoveHandler&&(this.mouseMoveHandler.cancel(),delete this.mouseMoveHandler),this.touchMoveHandler&&(this.touchMoveHandler.cancel(),delete this.touchMoveHandler))}onMouseDown(e){if(e.preventDefault(),this.enabled){if(e.touches){if(e.touches.length>1)return;e=e.touches[0]}this.mouseUpHandler&&(this.mouseUpHandler.cancel(),delete this.mouseUpHandler),this.touchUpHandler&&(this.touchUpHandler.cancel(),delete this.touchUpHandler),this.mouseMoveHandler&&(this.mouseMoveHandler.cancel(),delete this.mouseMoveHandler),this.touchMoveHandler&&(this.touchMoveHandler.cancel(),delete this.touchMoveHandler),this.mouseUpHandler=new m(window,"mouseup",this.onMouseUp.bind(this)),this.touchUpHandler=new m(window,"touchend",this.onMouseUp.bind(this)),this.mouseMoveHandler=new m(window,"mousemove",this.onMouseMove.bind(this)),this.touchMoveHandler=new m(window,"touchmove",this.onMouseMove.bind(this)),this.dragStartPosition=new v(e.clientX,e.clientY)}}onMouseUp(){this.mouseUpHandler&&(this.mouseUpHandler.cancel(),delete this.mouseUpHandler),this.touchUpHandler&&(this.touchUpHandler.cancel(),delete this.touchUpHandler),this.mouseMoveHandler&&(this.mouseMoveHandler.cancel(),delete this.mouseMoveHandler),this.touchMoveHandler&&(this.touchMoveHandler.cancel(),delete this.touchMoveHandler)}onMouseMove(e){if(e.touches){if(e.touches.length>1)return;e=e.touches[0]}if(e.buttons==0){this.onMouseUp();return}let i=new v(e.clientX,e.clientY).y-this.dragStartPosition.y;(i>this.thresholdPixels||i<-this.thresholdPixels)&&(this.enabled=!1,this._requestUndock(e))}_requestUndock(e){let t=0,i=0,n=this.element;do t+=n.offsetTop||0,i+=n.offsetLeft||0,n=n.offsetParent;while(n);let o=this.dragStartPosition.x-i,s=this.dragStartPosition.y-t,l=new v(o,s);this._undockededCallback(e,l)}};var g=class r{closePanelContainerCallback;onTitleChanged;elementPanel;elementTitle;elementTitleText;elementContentHost;name;state;elementContent;_resolvedElementContent;elementContentContainer;elementContentWrapper;dockManager;title;containerType;icon;hasChanges;minimumAllowedChildNodes;isDialog;eventListeners;undockInitiator;elementButtonClose;closeButtonClickedHandler;closeButtonTouchedHandler;mouseDownHandler;touchDownHandler;panelType;tabPage;undockedToNewBrowserWindow=!1;contextMenuHandler;lastDialogSize;_floatingDialog;_canUndock;_cachedWidth;_cachedHeight;_hideCloseButton;_grayOut;_ctxMenu;_contextMenuProvider;constructor(e,t,i,n,o){i||(i=y.getString("DefaultPanelName")),n||(n=M.panel),this.panelType=n,e._dockSpawnPanelContainer=this,this.elementContent=e,e.style.position="absolute",e.style.width="100%",e.style.height="100%",e.style.top="0",e.style.bottom="0",this.elementContentContainer=document.createElement("div"),this.elementContentContainer.className="panel-element-content-container",this.elementContentContainer.style.position="absolute",this.elementContentContainer._panel=this,this.elementContentContainer.addEventListener("pointerdown",s=>{try{this.isDialog?this._floatingDialog.bringToFront():this.tabPage&&this.tabPage.setSelected(!0,!0),this.dockManager.activePanel=this}catch{}},{passive:!0}),this.elementContentContainer.appendChild(e),t.config.dialogRootElement.appendChild(this.elementContentContainer),this.dockManager=t,this.title=i,this.containerType=C.panel,this.icon=null,this.minimumAllowedChildNodes=0,this._floatingDialog=void 0,this.isDialog=!1,this._canUndock=t._undockEnabled,this.eventListeners=[],this._hideCloseButton=o,this._contextMenuProvider=this,this.windowsContextMenuClose=this.windowsContextMenuClose.bind(this),this._initialize()}_initialize(){this.name=c.getNextId("panel_"),this.elementPanel=document.createElement("div"),this.elementPanel.tabIndex=0,this.elementTitle=document.createElement("div"),this.contextMenuHandler=new m(this.elementTitle,"contextmenu",this.oncontextMenuClicked.bind(this)),this.elementTitleText=document.createElement("div"),this.elementContentHost=document.createElement("div"),this.elementButtonClose=document.createElement("div"),this.elementPanel.appendChild(this.elementTitle),this.elementTitle.appendChild(this.elementTitleText),this.elementTitle.appendChild(this.elementButtonClose),this.elementButtonClose.classList.add("panel-titlebar-button-close"),this.elementButtonClose.style.display=this._hideCloseButton?"none":"block",this.elementPanel.appendChild(this.elementContentHost),this.elementPanel.classList.add("panel-base"),this.elementTitle.classList.add("panel-titlebar"),this.elementTitle.classList.add("disable-selection"),this.elementTitleText.classList.add("panel-titlebar-text"),this.elementContentHost.classList.add("panel-content");let e=this.elementContentContainer.clientWidth,t=this.elementContentContainer.clientHeight,i=this.elementTitle.clientHeight;this.elementContentWrapper=document.createElement("div"),this.elementContentWrapper.classList.add("panel-content-wrapper"),this._setPanelDimensions(e,t+i),this._hideCloseButton||(this.closeButtonClickedHandler=new m(this.elementButtonClose,"mousedown",this.onCloseButtonClicked.bind(this)),this.closeButtonTouchedHandler=new m(this.elementButtonClose,"touchstart",this.onCloseButtonClicked.bind(this))),c.removeNode(this.elementContentWrapper),this.elementContentHost.appendChild(this.elementContentWrapper);let n=this.elementContent.dataset.panelCaption,o=this.elementContent.dataset.panelIcon;n&&(this.title=n),o&&(this.icon=o),this._updateTitle(),this.undockInitiator=new z(this.elementTitle,this.performUndockToDialog.bind(this)),this.floatingDialog=void 0,this.mouseDownHandler=new m(this.elementPanel,"mousedown",this.onMouseDown.bind(this)),this.touchDownHandler=new m(this.elementPanel,"touchstart",this.onMouseDown.bind(this),{passive:!0}),this._resolvedElementContent=this.elementContent,this.elementContent instanceof HTMLSlotElement&&(this._resolvedElementContent=this.elementContent.assignedElements()?.[0])}static createContextMenuContentCallback=e=>{let t=[];if(e.dockManager.config.enableBrowserWindows){let i=document.createElement("div");i.innerText=y.getString("NewBrowserWindow"),t.push(i),i.onclick=()=>{e.undockToBrowserDialog(),e.closeContextMenu()}}return t};createContextMenuItems(){return r.createContextMenuContentCallback(this)}oncontextMenuClicked(e){if(e.preventDefault(),this._ctxMenu)this.closeContextMenu();else{let t=this._contextMenuProvider.createContextMenuItems();if(t.length==0)return;this._ctxMenu=document.createElement("div"),this._ctxMenu.className="dockspab-tab-handle-context-menu",this._ctxMenu.append(...t),this._ctxMenu.style.left=e.pageX+"px",this._ctxMenu.style.top=e.pageY+"px",document.body.appendChild(this._ctxMenu),window.addEventListener("mouseup",this.windowsContextMenuClose)}}closeContextMenu(){this._ctxMenu&&(document.body.removeChild(this._ctxMenu),delete this._ctxMenu,window.removeEventListener("mouseup",this.windowsContextMenuClose))}windowsContextMenuClose(e){let t=e.composedPath();for(let i in t)if(t[i]==this._ctxMenu)return;this.closeContextMenu()}canUndock(e){this._canUndock=e,this.undockInitiator.enabled=e,this.eventListeners.forEach(t=>{t.onDockEnabled&&t.onDockEnabled({self:this,state:e})})}addListener(e){this.eventListeners.push(e)}removeListener(e){this.eventListeners.splice(this.eventListeners.indexOf(e),1)}get floatingDialog(){return this._floatingDialog}set floatingDialog(e){this._floatingDialog=e;let t=this._floatingDialog===void 0;this.undockInitiator.enabled=t,this._contextMenuProvider=e??this}static async loadFromState(e,t){let i,n;if(t.getElementCallback){let s=await t.getElementCallback(e);i=s.element,n=s.title}else{let s=e.element;i=document.getElementById(s)}if(i===null)return null;let o=new r(i,t,n);return o.loadState(e),o}saveState(e){e.element=this.elementContent.id,e.width=this.width,e.height=this.height,e.canUndock=this._canUndock,e.hideCloseButton=this._hideCloseButton,e.panelType=this.panelType}loadState(e){this.width=e.width,this.height=e.height,this.state={width:e.width,height:e.height},this.canUndock(e.canUndock),this.hideCloseButton(e.hideCloseButton),this.panelType=e.panelType}setActiveChild(){}get containerElement(){return this.elementPanel}grayOut(e){!e&&this._grayOut?(this.elementContentWrapper.removeChild(this._grayOut),this.elementButtonClose.style.display=this._hideCloseButton?"none":"block",this._grayOut=null,this._hideCloseButton||this.eventListeners.forEach(t=>{t.onHideCloseButton&&t.onHideCloseButton({self:this,state:this._hideCloseButton})})):e&&!this._grayOut&&(this._grayOut=document.createElement("div"),this._grayOut.className="panel-grayout",this.elementButtonClose.style.display="none",this.elementContentWrapper.appendChild(this._grayOut),this.eventListeners.forEach(t=>{t.onHideCloseButton&&t.onHideCloseButton({self:this,state:!0})}))}onMouseDown(){this.dockManager.activePanel=this}hideCloseButton(e){this._hideCloseButton=e,this.elementButtonClose.style.display=e?"none":"block",this.eventListeners.forEach(t=>{t.onHideCloseButton&&t.onHideCloseButton({self:this,state:e})})}destroy(){this.mouseDownHandler&&(this.mouseDownHandler.cancel(),delete this.mouseDownHandler),this.touchDownHandler&&(this.touchDownHandler.cancel(),delete this.touchDownHandler),this.contextMenuHandler&&this.contextMenuHandler.cancel(),c.removeNode(this.elementPanel),this.closeButtonClickedHandler&&(this.closeButtonClickedHandler.cancel(),delete this.closeButtonClickedHandler),this.closeButtonTouchedHandler&&(this.closeButtonTouchedHandler.cancel(),delete this.closeButtonTouchedHandler)}performUndockToDialog(e,t){return this.isDialog=!0,this.undockInitiator.enabled=!1,this.elementContentWrapper.style.display="block",this.elementPanel.style.position="",this.dockManager.requestUndockToDialog(this,e,t)}performClose(){this.isDialog=!0,this.undockInitiator.enabled=!1,this.elementContentWrapper.style.display="block",this.elementContentContainer.style.display="none",this.elementPanel.style.position="",this.dockManager.requestClose(this)}performUndock(){this.undockInitiator.enabled=!1,this.dockManager.requestUndock(this)}prepareForDocking(){this.isDialog=!1,this.undockInitiator.enabled=this._canUndock,this.elementContentContainer.parentElement!=this.dockManager.config.dialogRootElement&&this.dockManager.config.dialogRootElement.appendChild(this.elementContentContainer)}get width(){return this._cachedWidth}set width(e){e!==this._cachedWidth&&(this._cachedWidth=e,this.elementPanel.style.width=e+"px")}get height(){return this._cachedHeight}set height(e){e!==this._cachedHeight&&(this._cachedHeight=e,this.elementPanel.style.height=e+"px")}get resolvedElementContent(){return this._resolvedElementContent?this._resolvedElementContent:(this._resolvedElementContent=this.elementContent,this.elementContent instanceof HTMLSlotElement&&(this._resolvedElementContent=this.elementContent.assignedElements()?.[0]),this._resolvedElementContent)}panelDocked(){this.elementContent.hidden&&(this.elementContent.hidden=!1),this.elementContentContainer.parentElement!==this.dockManager.config.dialogRootElement&&this.dockManager.config.dialogRootElement.appendChild(this.elementContentContainer)}resize(e,t){this.panelDocked(),this.setVisible(!0),this._setPanelDimensions(e,t),this._cachedWidth=e,this._cachedHeight=t;try{this.elementContent!=null&&typeof this.elementContent.resizeHandler=="function"&&this.elementContent.resizeHandler(e,t-this.elementTitle.clientHeight)}catch(i){console.log("error calling resizeHandler:",i," elt:",this.elementContent)}}_setPanelDimensions(e,t){this.elementTitle.style.width=e+"px",this.elementContentHost.style.width=e+"px",this.elementContentContainer.style.width=e+"px",this.elementPanel.style.width=e+"px";let i=this.elementTitle.clientHeight,n=t-i;this.elementContentHost.style.height=n+"px",this.elementContentContainer.style.height=n+"px",this.elementPanel.style.height=t+"px",requestAnimationFrame(()=>{let o=this.elementContentWrapper.getBoundingClientRect(),s=this.dockManager.config.dialogRootElement.getBoundingClientRect();this.elementContentContainer.style.left=o.x-s.x+"px",this.elementContentContainer.style.top=o.y-s.y+"px",this.elementContentContainer.style.width=o.width+"px",this.elementContentContainer.style.height=o.height+"px"})}setDialogPosition(e,t){this.elementContentContainer.style.left=e+"px",this.elementContentContainer.style.top=t+this.elementTitle.clientHeight+"px"}setVisible(e){this.elementContentContainer.style.display=e?"":"none"}setTitle(e){this.title=e,this._updateTitle(),this.onTitleChanged&&this.onTitleChanged(this,e)}setTitleIcon(e){this.icon=e,this._updateTitle(),this.onTitleChanged&&this.onTitleChanged(this,this.title)}setHasChanges(e){this.hasChanges=e,this._updateTitle(),e?this.elementTitleText.classList.add("panel-has-changes"):this.elementTitleText.classList.remove("panel-has-changes"),this.onTitleChanged&&this.onTitleChanged(this,this.title)}setCloseIconTemplate(e){this.elementButtonClose.innerHTML=e}_updateTitle(){if(this.icon!==null){this.elementTitleText.innerHTML='<img class="panel-titlebar-icon" src="'+this.icon+'"><span>'+this.title+"</span>";return}this.elementTitleText.innerHTML=this.title}getRawTitle(){return this.elementTitleText.innerHTML}performLayout(e,t){}onCloseButtonClicked(e){e.preventDefault(),e.stopPropagation(),this.close()}undockToBrowserDialog(){ne(this,{title:this.elementTitleText.textContent,closeCallback:()=>{this.undockedToNewBrowserWindow=!0,this.closeInternal(!1)},newWindowClosedCallback:()=>{this.undockedToNewBrowserWindow=!1,this.dockManager.notifyOnClosePanel(this)},focused:e=>{this.dockManager.activePanel=this},blured:e=>{this.dockManager.activePanel=null}})}async close(){this.closeInternal(!0)}async closeInternal(e){let t=!0;if(this.elementContentContainer.parentElement===this.dockManager.config.dialogRootElement&&(e?this.closePanelContainerCallback?t=await this.closePanelContainerCallback(this):this.dockManager.closePanelContainerCallback&&(t=await this.dockManager.closePanelContainerCallback(this)):t=!0,t))if(this.dockManager.config.dialogRootElement.removeChild(this.elementContentContainer),this.isDialog)this.floatingDialog&&this.floatingDialog.close();else{try{this.dockManager.notifyOnClosePanel(this)}catch(i){console.error(i)}this.performClose()}}};var I=class{element;handleSize;cornerSize;east;west;north;south;corner;mouseDownHandler;touchDownHandler;constructor(){this.element=void 0,this.handleSize=6,this.cornerSize=12,this.east=!1,this.west=!1,this.north=!1,this.south=!1,this.corner=!1}adjustSize(e,t){this.corner?(this.west&&(this.element.style.left="0px"),this.east&&(this.element.style.left=e-this.cornerSize+"px"),this.north&&(this.element.style.top="0px"),this.south&&(this.element.style.top=t-this.cornerSize+"px")):(this.west&&(this.element.style.left="0px",this.element.style.top=this.cornerSize+"px"),this.east&&(this.element.style.left=e-this.handleSize+"px",this.element.style.top=this.cornerSize+"px"),this.north&&(this.element.style.left=this.cornerSize+"px",this.element.style.top="0px"),this.south&&(this.element.style.left=this.cornerSize+"px",this.element.style.top=t-this.handleSize+"px"),this.west||this.east?this.element.style.height=t-this.cornerSize*2+"px":this.element.style.width=e-this.cornerSize*2+"px")}};var O=class{topLevelElement;dialog;delegate;dockManager;containerElement;containerType;minimumAllowedChildNodes;readyToProcessNextResize;dockSpawnResizedEvent;resizeHandles;previousMousePosition;iframeEventHandlers;resizeDirection;constructor(e,t,i,n){this.dialog=e,this.resizeDirection=n,this.delegate=t,this.containerElement=t.containerElement,this.dockManager=t.dockManager,this.topLevelElement=i,this.containerType=t.containerType,this.topLevelElement.style.left=this.topLevelElement.offsetLeft+"px",this.topLevelElement.style.top=this.topLevelElement.offsetTop+"px",this.minimumAllowedChildNodes=t.minimumAllowedChildNodes,this._buildResizeHandles(),this.readyToProcessNextResize=!0,this.dockSpawnResizedEvent=new CustomEvent("DockSpawnResizedEvent",{composed:!0,bubbles:!0}),this.iframeEventHandlers=[]}setActiveChild(){}_buildResizeHandles(){this.resizeHandles=[],this.resizeDirection&w.North&&this._buildResizeHandle(!1,!1,!0,!1),this.resizeDirection&w.East&&this._buildResizeHandle(!0,!1,!1,!1),this.resizeDirection&w.South&&this._buildResizeHandle(!1,!1,!1,!0),this.resizeDirection&w.West&&this._buildResizeHandle(!1,!0,!1,!1),this.resizeDirection&w.NorthWest&&this._buildResizeHandle(!1,!0,!0,!1),this.resizeDirection&w.NorthEast&&this._buildResizeHandle(!0,!1,!0,!1),this.resizeDirection&w.SouthEast&&this._buildResizeHandle(!0,!1,!1,!0),this.resizeDirection&w.SouthWest&&this._buildResizeHandle(!1,!0,!1,!0)}_buildResizeHandle(e,t,i,n){let o=new I;o.east=e,o.west=t,o.north=i,o.south=n,o.element=document.createElement("div"),this.topLevelElement.appendChild(o.element);let s="",l="";i&&(s="n"),n&&(s="s"),e&&(l="e"),t&&(l="w");let a="resize-handle-"+s+l;s.length>0&&l.length>0&&(o.corner=!0),o.element.classList.add(o.corner?"resize-handle-corner":"resize-handle"),o.element.classList.add(a),this.resizeHandles.push(o),o.mouseDownHandler=new m(o.element,"mousedown",h=>{this.onMouseDown(o,h)}),o.touchDownHandler=new m(o.element,"touchstart",h=>{this.onMouseDown(o,h)})}saveState(e){this.delegate.saveState(e)}loadState(e){this.delegate.loadState(e)}get width(){return this.delegate.width}get height(){return this.delegate.height}get name(){return this.delegate.name}set name(e){e&&(this.delegate.name=e)}resize(e,t){this.delegate.resize(e,t),this._adjustResizeHandles(e,t),document.dispatchEvent(this.dockSpawnResizedEvent)}_adjustResizeHandles(e,t){this.resizeHandles.forEach(i=>{i.adjustSize(e,t)})}performLayout(e){this.delegate.performLayout(e,!1)}destroy(){this.removeDecorator(),this.delegate.destroy()}removeDecorator(){}onMouseMovedIframe(e,t,i){let n=i.getBoundingClientRect();this.onMouseMoved(e,t,{x:n.x,y:n.y})}onMouseMoved(e,t,i){let n=null;if(t.changedTouches){if(t.changedTouches.length>1)return;n=t.changedTouches[0]}else n=t;if(!this.readyToProcessNextResize)return;this.readyToProcessNextResize=!1,this.dialog.panel&&this.dockManager.suspendLayout(this.dialog.panel);let o=new v(n.clientX,n.clientY);i&&(o=new v(n.clientX+i.x,n.clientY+i.y));let s=this.dockManager.checkXBounds(this.topLevelElement,o,this.previousMousePosition,e.west,e.east),l=this.dockManager.checkYBounds(this.topLevelElement,o,this.previousMousePosition,e.north,e.south);this._performDrag(e,s,l),this.previousMousePosition=o,this.readyToProcessNextResize=!0,this.dialog.panel&&this.dockManager.resumeLayout(this.dialog.panel),this.dockManager.notifyOnContainerResized(this)}onMouseDown(e,t){let i=null;if(t.touches){if(t.touches.length>1)return;i=t.touches[0]}else i=t;this.previousMousePosition=new v(i.clientX,i.clientY),e.mouseMoveHandler&&(e.mouseMoveHandler.cancel(),delete e.mouseMoveHandler),e.touchMoveHandler&&(e.touchMoveHandler.cancel(),delete e.touchMoveHandler),e.mouseUpHandler&&(e.mouseUpHandler.cancel(),delete e.mouseUpHandler),e.touchUpHandler&&(e.touchUpHandler.cancel(),delete e.touchUpHandler);for(let n of this.iframeEventHandlers)n.cancel();if(this.iframeEventHandlers=[],e.mouseMoveHandler=new m(window,"mousemove",n=>{this.onMouseMoved(e,n)}),e.touchMoveHandler=new m(window,"touchmove",n=>{this.onMouseMoved(e,n)}),e.mouseUpHandler=new m(window,"mouseup",n=>{this.onMouseUp(e)}),e.touchUpHandler=new m(window,"touchend",n=>{this.onMouseUp(e)}),this.dockManager.iframes)for(let n of this.dockManager.iframes){let o=this.onMouseMovedIframe.bind(this);this.iframeEventHandlers.push(new m(n.contentWindow,"mousemove",s=>o(e,s,n))),this.iframeEventHandlers.push(new m(n.contentWindow,"mouseup",s=>this.onMouseUp(e))),this.iframeEventHandlers.push(new m(n.contentWindow,"touchmove",s=>o(e,s,n))),this.iframeEventHandlers.push(new m(n.contentWindow,"touchend",s=>this.onMouseUp(e)))}c.disableGlobalTextSelection(this.dockManager.config.dialogRootElement)}onMouseUp(e){e.mouseMoveHandler.cancel(),e.touchMoveHandler.cancel(),e.mouseUpHandler.cancel(),e.touchUpHandler.cancel(),delete e.mouseMoveHandler,delete e.touchMoveHandler,delete e.mouseUpHandler,delete e.touchUpHandler;for(let t of this.iframeEventHandlers)t.cancel();this.iframeEventHandlers=[],c.enableGlobalTextSelection(this.dockManager.config.dialogRootElement)}_performDrag(e,t,i){let n={};n.left=c.getPixels(this.topLevelElement.style.left),n.top=c.getPixels(this.topLevelElement.style.top),n.width=this.topLevelElement.clientWidth,n.height=this.topLevelElement.clientHeight,e.east&&this._resizeEast(t,n),e.west&&this._resizeWest(t,n),e.north&&this._resizeNorth(i,n),e.south&&this._resizeSouth(i,n)}_resizeWest(e,t){this._resizeContainer(e,0,-e,0,t)}_resizeEast(e,t){this._resizeContainer(0,0,e,0,t)}_resizeNorth(e,t){this._resizeContainer(0,e,0,-e,t)}_resizeSouth(e,t){this._resizeContainer(0,0,0,e,t)}_resizeContainer(e,t,i,n,o){o.left+=e,o.top+=t,o.width+=i,o.height+=n;let s=50,l=50;o.width=Math.max(o.width,s),o.height=Math.max(o.height,l),this.topLevelElement.style.left=o.left+"px",this.topLevelElement.style.top=o.top+"px",this.resize(o.width,o.height)}};var H=class r{elementDialog;draggable;panel;dockManager;eventListener;position;resizable;disableResize;mouseDownHandler;onKeyPressBound;noDocking;isHidden;keyPressHandler;focusHandler;grayoutParent;constructor(e,t,i,n){this.panel=e,this.dockManager=t,this.eventListener=t,this.grayoutParent=i,this.disableResize=n,this._initialize(),this.dockManager.context.model.dialogs.push(this),this.position=t.defaultDialogPosition,this.dockManager.notifyOnCreateDialog(this),e.isDialog=!0}saveState(e,t){this.position=new v(e,t),this.dockManager.notifyOnChangeDialogPosition(this,e,t)}static fromElement(e,t){return new r(new g(document.getElementById(e),t),t,null)}_initialize(){this.panel.floatingDialog=this,this.elementDialog=Object.assign(document.createElement("div"),{floatingDialog:this}),this.elementDialog.tabIndex=0,this.elementDialog.appendChild(this.panel.elementPanel),this.draggable=new U(this,this.panel,this.elementDialog,this.panel.elementTitle);let e=this.disableResize?w.None:w.All&~w.NorthEast;this.resizable=new O(this,this.draggable,this.draggable.topLevelElement,e),this.dockManager.config.dialogRootElement.appendChild(this.elementDialog),this.elementDialog.classList.add("dialog-floating"),this.focusHandler=new m(this.elementDialog,"focus",this.onFocus.bind(this),!0),this.mouseDownHandler=new m(this.elementDialog,"pointerdown",this.onMouseDown.bind(this),!0),this.keyPressHandler=new m(this.elementDialog,"keypress",this.dockManager.onKeyPressBound,!0),this.resize(this.panel.elementPanel.clientWidth,this.panel.elementPanel.clientHeight),this.isHidden=!1,this.grayoutParent!=null&&this.grayoutParent.grayOut(!0),this.bringToFront()}setPosition(e,t){let i=this.dockManager.config.dialogRootElement.getBoundingClientRect(),n=e-i.left,o=t-i.top;this.position=new v(n,o),this.elementDialog.style.left=n+"px",this.elementDialog.style.top=o+"px",this.panel.setDialogPosition(n,o),this.dockManager.notifyOnChangeDialogPosition(this,e,t)}getPosition(){return new v(this.position?this.position.x:0,this.position?this.position.y:0)}onFocus(){this.dockManager.activePanel!=this.panel&&(this.dockManager.activePanel=this.panel)}onMouseDown(e){e.button!=2&&this.bringToFront()}destroy(){this.panel.lastDialogSize={width:this.resizable.width,height:this.resizable.height},this.focusHandler&&(this.focusHandler.cancel(),delete this.focusHandler),this.mouseDownHandler&&(this.mouseDownHandler.cancel(),delete this.mouseDownHandler),this.keyPressHandler&&(this.keyPressHandler.cancel(),delete this.keyPressHandler),c.removeNode(this.elementDialog),this.draggable.removeDecorator(),c.removeNode(this.panel.elementPanel),c.arrayRemove(this.dockManager.context.model.dialogs,this),this.panel.floatingDialog=void 0,this.grayoutParent&&this.grayoutParent.grayOut(!1)}resize(e,t){this.resizable.resize(e,t)}setTitle(e){this.panel.setTitle(e)}setTitleIcon(e){this.panel.setTitleIcon(e)}bringToFront(){this.panel.elementContentContainer.style.zIndex=this.dockManager.zIndexDialogCounter++,this.elementDialog.style.zIndex=this.dockManager.zIndexDialogCounter++,this.dockManager.activePanel=this.panel}hide(){this.elementDialog.style.zIndex="0",this.panel.elementContentContainer.style.zIndex="",this.elementDialog.style.display="none",this.isHidden||(this.isHidden=!0,this.dockManager.notifyOnHideDialog(this)),this.grayoutParent&&this.grayoutParent.grayOut(!1)}close(){this.hide(),this.remove(),this.dockManager.notifyOnClosePanel(this.panel),this.destroy()}remove(){this.elementDialog.parentNode.removeChild(this.elementDialog)}show(){this.panel.elementContentContainer.style.zIndex=this.dockManager.zIndexDialogCounter++,this.elementDialog.style.zIndex=this.dockManager.zIndexDialogCounter++,this.elementDialog.style.display="block",this.isHidden&&(this.isHidden=!1,this.dockManager.notifyOnShowDialog(this))}static createContextMenuContentCallback=(e,t)=>{if(!e.panel._hideCloseButton)return[];let i=[],n=document.createElement("div");if(n.innerText=y.getString("CloseDialog"),i.push(n),n.onclick=()=>{e.panel.closeContextMenu(),e.panel.close()},e.dockManager.config.enableBrowserWindows){let o=document.createElement("div");o.innerText=y.getString("NewBrowserWindow"),i.push(o),o.onclick=()=>{e.panel.closeContextMenu(),e.panel.undockToBrowserDialog()}}return i};createContextMenuItems(){return r.createContextMenuContentCallback(this,this.dockManager.context.model.documentManagerNode.children)}};var A=class{constructor(){this.escClosesWindow=!0,this.escClosesDialog=!0,this.dialogRootElement=document.body,this.moveOnlyWithinDockConatiner=!1,this.enableBrowserWindows=!0}escClosesWindow;escClosesDialog;dialogRootElement;moveOnlyWithinDockConatiner;enableBrowserWindows};var L=class{rootNode;documentManagerNode;dialogs;constructor(){this.rootNode=this.documentManagerNode=void 0}};var E=class{parent;container;children;constructor(e){this.container=e,this.children=[]}detachFromParent(){this.parent&&(this.parent.removeChild(this),delete this.parent)}removeChild(e){let t=this.children.indexOf(e);t>=0&&this.children.splice(t,1)}addChild(e){e.detachFromParent(),e.parent=this,this.children.push(e)}addChildBefore(e,t){this._addChildWithDirection(e,t,!0)}addChildAfter(e,t){this._addChildWithDirection(e,t,!1)}_addChildWithDirection(e,t,i){t.detachFromParent(),t.parent=this;let n=this.children.indexOf(e),o=this.children.slice(0,n),s=this.children.slice(n+1,this.children.length);this.children=o.slice(0),i?(this.children.push(t),this.children.push(e)):(this.children.push(e),this.children.push(t)),Array.prototype.push.apply(this.children,s)}performLayout(e){let t=this.children.map(i=>i.container);this.container.performLayout(t,e)}debugDumpTree(e){e===void 0&&(e=0);let t=this.container.name;for(let n=0;n<e;n++)t=" "+t;let i=this.parent===void 0?"null":this.parent.container.containerType;console.log(">>"+t+" ["+i+"]"),this.children.forEach(n=>{n.debugDumpTree(e+1)})}};var F=class{previousContainer;nextContainer;stackedVertical;barElement;pointerDownHandler;minPanelSize;readyToProcessNextDrag;dockSpawnResizedEvent;previousMouseEvent;pointerMovedHandler;pointerUpHandler;iframeEventHandlers;constructor(e,t,i){this.previousContainer=e,this.nextContainer=t,this.stackedVertical=i,this.barElement=document.createElement("div"),this.barElement.classList.add(i?"splitbar-horizontal":"splitbar-vertical"),this.pointerDownHandler=new m(this.barElement,"pointerdown",this.onPointerDown.bind(this)),this.minPanelSize=50,this.readyToProcessNextDrag=!0,this.dockSpawnResizedEvent=new CustomEvent("DockSpawnResizedEvent",{composed:!0,bubbles:!0}),this.iframeEventHandlers=[]}onPointerDown(e){e.preventDefault(),this.barElement.setPointerCapture(e.pointerId),this._startDragging(e)}onPointerUp(e){this.barElement.releasePointerCapture(e.pointerId),this._stopDragging()}onPointerMovedIframe(e,t){e.changedTouches!=null&&(e=e.changedTouches[0]);let i=t.getBoundingClientRect();this.handleMoveEvent({x:parseInt(""+e.clientX+i.x),y:parseInt(""+e.clientY+i.y)})}onPointerMoved(e){e.changedTouches!=null&&(e=e.changedTouches[0]),this.handleMoveEvent({x:parseInt(""+e.clientX),y:parseInt(""+e.clientY)})}handleMoveEvent(e){if(!this.readyToProcessNextDrag)return;this.readyToProcessNextDrag=!1;let t=this.previousContainer.dockManager;t.suspendLayout(this.previousContainer),t.suspendLayout(this.nextContainer);let i=e.x-this.previousMouseEvent.x,n=e.y-this.previousMouseEvent.y;this._performDrag(i,n),this.previousMouseEvent=e,this.readyToProcessNextDrag=!0,t.resumeLayout(this.previousContainer),t.resumeLayout(this.nextContainer)}_performDrag(e,t){let i=this.getContainerWidth(this.previousContainer),n=this.getContainerHeight(this.previousContainer),o=this.getContainerWidth(this.nextContainer),s=this.getContainerHeight(this.nextContainer),l=this.stackedVertical?n:i,a=this.stackedVertical?s:o,h=this.stackedVertical?t:e,d=l+h,p=a-h;(d<this.minPanelSize||p<this.minPanelSize)&&!(d<this.minPanelSize&&d>l||p<this.minPanelSize&&p>a)||(this.stackedVertical?(this.previousContainer.resize(i,d),this.nextContainer.resize(o,p)):h<0?(this.previousContainer.resize(d,n),this.nextContainer.resize(p,s)):(this.nextContainer.resize(p,s),this.previousContainer.resize(d,n),this.nextContainer.resize(p,s)),document.dispatchEvent(this.dockSpawnResizedEvent))}getContainerWidth(e){return e.width||e.containerElement.getBoundingClientRect().width}getContainerHeight(e){return e.height||e.containerElement.getBoundingClientRect().height}_startDragging(e){if(c.disableGlobalTextSelection(this.previousContainer.dockManager.config.dialogRootElement),this.pointerMovedHandler&&(this.pointerMovedHandler.cancel(),delete this.pointerMovedHandler),this.pointerUpHandler&&(this.pointerUpHandler.cancel(),delete this.pointerUpHandler),this.pointerMovedHandler=new m(window,"pointermove",this.onPointerMoved.bind(this)),this.pointerUpHandler=new m(window,"pointerup",this.onPointerUp.bind(this)),this.previousContainer.dockManager.iframes)for(let t of this.previousContainer.dockManager.iframes){let i=this.onPointerMovedIframe.bind(this);this.iframeEventHandlers.push(new m(t.contentWindow,"pointermove",n=>i(n,t))),this.iframeEventHandlers.push(new m(t.contentWindow,"pointerup",this.onPointerUp.bind(this)))}this.previousMouseEvent={x:parseInt(""+e.clientX),y:parseInt(""+e.clientY)}}_stopDragging(){c.enableGlobalTextSelection(this.previousContainer.dockManager.config.dialogRootElement),this.pointerMovedHandler&&(this.pointerMovedHandler.cancel(),delete this.pointerMovedHandler),this.pointerUpHandler&&(this.pointerUpHandler.cancel(),delete this.pointerUpHandler);for(let e of this.iframeEventHandlers)e.cancel();this.iframeEventHandlers=[]}};var V=class{panelElement;spiltterBars;stackedVertical;childContainers;preferredChildSizes=new WeakMap;preserveNonElasticSizes=!1;constructor(e,t){this.childContainers=e,this.stackedVertical=t,this.panelElement=document.createElement("div"),this.spiltterBars=[],this._buildSplitterDOMAndAddElements()}_buildSplitterDOMAndAddElements(){if(this.childContainers.length<=1)throw new Error("Splitter panel should contain atleast 2 panels");this.spiltterBars=[];let e=null;for(let i=0;i<this.childContainers.length-1;i++){let n=this.childContainers[i],o=this.childContainers[i+1],s=new F(n,o,this.stackedVertical);this.spiltterBars.push(s),Array.from(this.panelElement.children).includes(n.containerElement)||this._insertContainerIntoPanel(n,e),this.panelElement.insertBefore(s.barElement,n.containerElement.nextSibling),e=s.barElement}let t=this.childContainers.slice(-1)[0];Array.from(this.panelElement.children).includes(t.containerElement)||this._insertContainerIntoPanel(t,e)}performLayout(e,t){(!c.arrayEqual(this.childContainers,e)||t)&&(t||(this.preferredChildSizes=new WeakMap,this.preserveNonElasticSizes=!1),this.childContainers.forEach(n=>{e.some(o=>o==n)||n.containerElement&&(n.containerElement.classList.remove("splitter-container-vertical"),n.containerElement.classList.remove("splitter-container-horizontal"),c.removeNode(n.containerElement))}),this.spiltterBars.forEach(n=>{c.removeNode(n.barElement)}),this.childContainers=e,this._buildSplitterDOMAndAddElements())}removeFromDOM(){this.childContainers.forEach(e=>{e.containerElement&&(e.containerElement.classList.remove("splitter-container-vertical"),e.containerElement.classList.remove("splitter-container-horizontal"),c.removeNode(e.containerElement))}),this.spiltterBars.forEach(e=>{c.removeNode(e.barElement)})}destroy(){this.removeFromDOM(),this.panelElement.parentNode.removeChild(this.panelElement)}_insertContainerIntoPanel(e,t){if(!e){console.error("container is undefined");return}e.containerElement.parentNode!=this.panelElement&&(c.removeNode(e.containerElement),t?this.panelElement.insertBefore(e.containerElement,t.nextSibling):this.panelElement.children.length>0?this.panelElement.insertBefore(e.containerElement,this.panelElement.children[0]):this.panelElement.appendChild(e.containerElement)),e.containerElement.classList.add(this.stackedVertical?"splitter-container-vertical":"splitter-container-horizontal")}setContainerRatio(e,t){let i=this.stackedVertical?this.panelElement.clientHeight:this.panelElement.clientWidth,n=i*t,o=this.stackedVertical?this.spiltterBars[0].barElement.clientHeight:this.spiltterBars[0].barElement.clientWidth,l=(i-n-o*this.spiltterBars.length)/i;for(let a=0;a<this.childContainers.length;a++){let h=this.childContainers[a],d;h!==e?(d=this.stackedVertical?h.containerElement.parentElement.clientHeight:h.containerElement.parentElement.clientWidth,d*=l):d=n,this.stackedVertical?h.resize(h.width,Math.floor(d)):h.resize(Math.floor(d),h.height),this.preferredChildSizes.set(h,Math.floor(d))}this.preserveNonElasticSizes=this.hasElasticChild()}getRatios(){let e=this.stackedVertical?this.spiltterBars[0].barElement.clientHeight:this.spiltterBars[0].barElement.clientWidth,t=(this.stackedVertical?this.panelElement.clientHeight:this.panelElement.clientWidth)-e*this.spiltterBars.length,i=[];for(let n=0;n<this.childContainers.length;n++){let o=this.childContainers[n],s=this.stackedVertical?o.containerElement.clientHeight:o.containerElement.clientWidth;i.push(s/t)}return i}setRatios(e){let t=this.stackedVertical?this.spiltterBars[0].barElement.clientHeight:this.spiltterBars[0].barElement.clientWidth,i=(this.stackedVertical?this.panelElement.clientHeight:this.panelElement.clientWidth)-t*this.spiltterBars.length,n=0;for(let o=0;o<this.childContainers.length;o++){let s=this.childContainers[o],l=Math.floor(i*e[o]);n+=l,o===this.childContainers.length-1&&(l+=i-n),this.stackedVertical?s.resize(s.width,l):s.resize(l,s.height),this.preferredChildSizes.set(s,l)}this.preserveNonElasticSizes=this.hasElasticChild()}resize(e,t){if(this.childContainers.length<=1)return;this.panelElement.style.width=e+"px",this.panelElement.style.height=t+"px";for(let h=0;h<this.childContainers.length;h++)if(h<this.spiltterBars.length){let d=this.spiltterBars[h];this.stackedVertical?d.barElement.style.width=e+"px":d.barElement.style.height=t+"px"}let i=this.stackedVertical?this.spiltterBars[0].barElement.clientHeight:this.spiltterBars[0].barElement.clientWidth,n=this.stackedVertical?t:e;if(n-=i*this.spiltterBars.length,!this.preserveNonElasticSizes||!this.hasElasticChild()){this.resizeProportionally(e,t,n);return}let o=this.getElasticChildIndex(),s=this.childContainers.map((h,d)=>{let p=this.getChildSize(h);if(d===o)return p;let u=this.preferredChildSizes.get(h);return(u===void 0||p>u)&&(u=p),this.preferredChildSizes.set(h,u),u}),l=s.reduce((h,d)=>h+d,0);if(l<=0){let h=n/this.childContainers.length;s=this.childContainers.map(()=>h),l=n}let a=n-l;if(s[o]+=a,s[o]<0){let h=-s[o];s[o]=0;for(let d=this.childContainers.length-1;d>=0&&h>0;d--){if(d===o)continue;let p=Math.min(s[d],h);s[d]-=p,h-=p}}s=s.map(h=>Math.floor(h)),s[o]+=n-s.reduce((h,d)=>h+d,0);for(let h=0;h<this.childContainers.length;h++){let d=this.childContainers[h];d.containerElement.style.display=="none"&&(d.containerElement.style.display="block");let p=s[h];this.stackedVertical?d.resize(e,p):d.resize(p,t)}}resizeProportionally(e,t,i){for(let l=0;l<this.childContainers.length;l++){let a=this.childContainers[l];this.stackedVertical?a.resize(e,a.height?a.height:t):a.resize(a.width?a.width:e,t)}let n=0;this.childContainers.forEach(l=>{let a=this.stackedVertical?l.height:l.width;n+=a}),n=Math.max(n,1);let o=i/n,s=0;for(let l=0;l<this.childContainers.length;l++){let a=this.childContainers[l];a.containerElement.style.display=="none"&&(a.containerElement.style.display="block");let h=this.stackedVertical?a.containerElement.clientHeight:a.containerElement.clientWidth,d=Math.floor(h*o);s+=d,l===this.childContainers.length-1&&(d+=i-s),this.stackedVertical?a.resize(a.width,d):a.resize(d,a.height),this.preferredChildSizes.set(a,d)}}hasElasticChild(){return this.childContainers.some(e=>e.containerType===C.fill||e.containerType===C.horizontal||e.containerType===C.vertical)}getElasticChildIndex(){let e=this.childContainers.findIndex(i=>i.containerType===C.fill);if(e>=0)return e;let t=this.childContainers.findIndex(i=>i.containerType===C.horizontal||i.containerType===C.vertical);return t>=0?t:this.childContainers.length-1}getChildSize(e){return this.stackedVertical?e.height:e.width}};var B=class{name;dockManager;minimumAllowedChildNodes;splitterPanel;stackedVertical;containerElement;_cachedWidth;_cachedHeight;state;containerType;constructor(e,t,i,n){arguments.length!==0&&(this.name=e,this.dockManager=t,this.stackedVertical=n,this.splitterPanel=new V(i,this.stackedVertical),this.containerElement=this.splitterPanel.panelElement,this.minimumAllowedChildNodes=2)}resize(e,t){this.splitterPanel.resize(e,t),this._cachedWidth=e,this._cachedHeight=t}performLayout(e,t=!1){this.splitterPanel.performLayout(e,t)}setActiveChild(){}destroy(){this.splitterPanel.destroy()}setContainerRatio(e,t){this.splitterPanel.setContainerRatio(e,t),this.resize(this.width,this.height)}getRatios(){return this.splitterPanel.getRatios()}setRatios(e){this.splitterPanel.setRatios(e),this.resize(this.width,this.height)}saveState(e){e.width=this.width,e.height=this.height}loadState(e){this.state={width:e.width,height:e.height}}get width(){return this._cachedWidth===void 0&&(this._cachedWidth=this.splitterPanel.panelElement.clientWidth),this._cachedWidth}get height(){return this._cachedHeight===void 0&&(this._cachedHeight=this.splitterPanel.panelElement.clientHeight),this._cachedHeight}};var S=class extends B{constructor(e,t){super(c.getNextId("horizontal_splitter_"),e,t,!1),this.containerType=C.horizontal}};var N=class extends B{constructor(e,t){super(c.getNextId("vertical_splitter_"),e,t,!0),this.containerType=C.vertical}};var q=class r{parent;elementBase;elementText;elementCloseButton;undockInitiator;mouseDownHandler;touchDownHandler;closeButtonHandler;closeButtonTouchHandler;auxClickHandler;contextMenuHandler;mouseMoveHandler;touchMoveHandler;mouseUpHandler;touchUpHandler;stargDragPosition;dragged;eventListeners;undockListener;prev;current;direction;_ctxMenu;_windowsContextMenuCloseBound;constructor(e){this.parent=e;let t=this._performUndock.bind(this);this.elementBase=document.createElement("div"),this.elementText=document.createElement("div"),this.elementCloseButton=document.createElement("div"),this.elementBase.classList.add("dockspan-tab-handle"),this.elementBase.classList.add("disable-selection"),this.elementText.classList.add("dockspan-tab-handle-text"),this.elementCloseButton.classList.add("dockspan-tab-handle-close-button"),this.elementBase.appendChild(this.elementText),this.parent.host.displayCloseButton&&this.elementBase.appendChild(this.elementCloseButton),(this.parent.container._hideCloseButton||this.parent.container._grayOut)&&(this.elementCloseButton.style.display="none"),this.parent.host.tabListElement.appendChild(this.elementBase);let i=e.container,n=i.getRawTitle();this.undockListener={onDockEnabled:o=>{this.undockEnabled(o.state)},onHideCloseButton:o=>{this.hideCloseButton(o.state)}},this.eventListeners=[],i.addListener(this.undockListener),this.elementText.innerHTML=n,this.elementText.title=this.elementText.innerText,this.undockInitiator=new z(this.elementBase,t),this.undockInitiator.enabled=!0,this.mouseDownHandler=new m(this.elementBase,"mousedown",this.onMouseDown.bind(this)),this.touchDownHandler=new m(this.elementBase,"touchstart",this.onMouseDown.bind(this),{passive:!1}),this.closeButtonHandler=new m(this.elementCloseButton,"click",this.onCloseButtonClicked.bind(this)),this.closeButtonTouchHandler=new m(this.elementCloseButton,"touchstart",this.onCloseButtonClicked.bind(this)),this.auxClickHandler=new m(this.elementBase,"auxclick",this.onCloseButtonClicked.bind(this)),i.panelType==M.document&&(this.contextMenuHandler=new m(this.elementBase,"contextmenu",this.oncontextMenuClicked.bind(this))),this.windowsContextMenuClose=this.windowsContextMenuClose.bind(this)}addListener(e){this.eventListeners.push(e)}removeListener(e){this.eventListeners.splice(this.eventListeners.indexOf(e),1)}undockEnabled(e){this.undockInitiator.enabled=e}static createContextMenuContentCallback=(e,t)=>{let i=[],n=document.createElement("div");n.innerText=y.getString("CloseAll"),i.push(n),n.onclick=()=>{let s=t.length;for(let l=s-1;l>=0;l--){let a=t[l].container;a.panelType==M.document&&a.close()}e.closeContextMenu()};let o=document.createElement("div");if(o.innerText=y.getString("CloseAllButThis"),i.push(o),o.onclick=()=>{let s=t.length;for(let l=s-1;l>=0;l--){let a=t[l].container;e.parent.container!=a&&a.panelType==M.document&&a.close()}e.closeContextMenu()},e.parent.container.dockManager.config.enableBrowserWindows){let s=document.createElement("div");s.innerText=y.getString("NewBrowserWindow"),i.push(s),s.onclick=()=>{e.parent.container.undockToBrowserDialog(),e.closeContextMenu()}}return i};oncontextMenuClicked(e){if(e.preventDefault(),!this._ctxMenu&&r.createContextMenuContentCallback){let t=r.createContextMenuContentCallback(this,this.parent.container.dockManager.context.model.documentManagerNode.children);if(t.length==0)return;this._ctxMenu=document.createElement("div"),this._ctxMenu.className="dockspab-tab-handle-context-menu",this._ctxMenu.append(...t),this._ctxMenu.style.left=e.pageX+"px",this._ctxMenu.style.top=e.pageY+"px",document.body.appendChild(this._ctxMenu),window.addEventListener("mouseup",this.windowsContextMenuClose)}else this.closeContextMenu()}closeContextMenu(){this._ctxMenu&&(document.body.removeChild(this._ctxMenu),delete this._ctxMenu,window.removeEventListener("mouseup",this.windowsContextMenuClose))}windowsContextMenuClose(e){let t=e.composedPath();for(let i in t)if(t[i]==this._ctxMenu)return;this.closeContextMenu()}onMouseDown(e){e.preventDefault(),this.parent.onSelected(),this.mouseMoveHandler&&(this.mouseMoveHandler.cancel(),delete this.mouseMoveHandler),this.touchMoveHandler&&(this.touchMoveHandler.cancel(),delete this.touchMoveHandler),this.mouseUpHandler&&(this.mouseUpHandler.cancel(),delete this.mouseUpHandler),this.touchUpHandler&&(this.touchUpHandler.cancel(),delete this.touchUpHandler),this.stargDragPosition=e.clientX,this.mouseMoveHandler=new m(window,"mousemove",this.onMouseMove.bind(this)),this.touchMoveHandler=new m(window,"touchmove",this.onMouseMove.bind(this),{passive:!1}),this.mouseUpHandler=new m(window,"mouseup",this.onMouseUp.bind(this)),this.touchUpHandler=new m(window,"touchend",this.onMouseUp.bind(this))}onMouseUp(){this.cancelTabDrag()}cancelTabDrag(){this.elementBase&&this.elementBase.classList.remove("dockspan-tab-handle-dragged"),this.dragged=!1,this.mouseMoveHandler&&this.mouseMoveHandler.cancel(),this.touchMoveHandler&&this.touchMoveHandler.cancel(),this.mouseUpHandler&&this.mouseUpHandler.cancel(),this.touchUpHandler&&this.touchUpHandler.cancel(),delete this.mouseMoveHandler,delete this.touchMoveHandler,delete this.mouseUpHandler,delete this.touchUpHandler}moveTabEvent(e,t){e.eventListeners.forEach(i=>{i.onMoveTab&&i.onMoveTab({self:e,state:t})})}onMouseMove(e){if(e.preventDefault(),e.buttons==0){this.onMouseUp();return}if(!(Math.abs(this.stargDragPosition-e.clientX)<10)&&this.elementBase!=null){this.elementBase.classList.add("dockspan-tab-handle-dragged"),this.dragged=!0,this.prev=this.current,this.current=e.clientX,this.direction=this.current-this.prev;let t=this.elementBase.getBoundingClientRect(),i=this.direction<0?{state:"left",bound:t.left,rect:t}:{state:"right",bound:t.right,rect:t};(e.clientX<t.left&&this.direction<0||e.clientX>t.left+t.width&&this.direction>0)&&this.moveTabEvent(this,i.state)}}hideCloseButton(e){this.elementCloseButton.style.display=e?"none":"block"}updateTitle(){if(this.parent.container instanceof g){let t=this.parent.container.getRawTitle();this.elementText.innerHTML=t}}destroy(){this.parent.container.removeListener(this.undockListener),this.mouseDownHandler.cancel(),this.touchDownHandler.cancel(),this.closeButtonHandler.cancel(),this.closeButtonTouchHandler.cancel(),this.auxClickHandler.cancel(),this.mouseMoveHandler&&this.mouseMoveHandler.cancel(),this.touchMoveHandler&&this.touchMoveHandler.cancel(),this.mouseUpHandler&&this.mouseUpHandler.cancel(),this.touchUpHandler&&this.touchUpHandler.cancel(),this.contextMenuHandler&&this.contextMenuHandler.cancel(),this.elementBase&&(c.removeNode(this.elementBase),delete this.elementBase),this.elementCloseButton&&(c.removeNode(this.elementCloseButton),delete this.elementCloseButton)}_performUndock(e,t){return this.parent.container.containerType==="panel"?(this.undockInitiator.enabled=!1,this.cancelTabDrag(),this.parent.container.performUndockToDialog(e,t)):null}onCloseButtonClicked(e){this.elementCloseButton.style.display!=="none"&&e.button!==2&&this.parent.container.containerType==="panel"&&this.parent.container.close()}setSelected(e){e?this.elementBase.classList.add("dockspan-tab-handle-selected"):(this.elementBase.classList.remove("dockspan-tab-handle-selected"),this.elementBase.classList.remove("dockspan-tab-handle-active"))}setActive(e){this.elementBase&&(e?this.elementBase.classList.add("dockspan-tab-handle-active"):this.elementBase.classList.remove("dockspan-tab-handle-active"))}};var W=class{selected;host;container;panel;handle;containerElement;_initContent;constructor(e,t){arguments.length!==0&&(this.selected=!1,this.host=e,this.container=t,this.handle=new q(this),this.containerElement=t.containerElement,t instanceof g&&(this.panel=t,this.panel.onTitleChanged=this.onTitleChanged.bind(this),this.onTitleChanged()),t.tabPage=this)}onTitleChanged(){this.handle.updateTitle(),this.panel&&(this.panel.hasChanges?this.handle.elementText.classList.add("panel-has-changes"):this.handle.elementText.classList.remove("panel-has-changes"))}destroy(){if(this.handle.destroy(),this.container instanceof g){this.container.elementContentContainer.style.zIndex="";let e=this.container;delete e.onTitleChanged}this.host.dockManager.activePanel==this.panel&&(this.host.dockManager.activePanel=null),this.container.tabPage=null,c.removeNode(this.containerElement)}onSelected(){this.host.onTabPageSelected(this,!0),this.container instanceof g&&this.container.dockManager.notifyOnTabChange(this)}setSelected(e,t){if(this.selected=e,this.handle.setSelected(e),this._initContent||this.host.contentElement.appendChild(this.containerElement),this._initContent=!0,this.selected){this.containerElement.style.display="block",this.panel.setVisible(!0);let i=this.host.contentElement.clientWidth,n=this.host.contentElement.clientHeight;this.container.resize(i,n),t&&(this.host.dockManager.activePanel=this.container)}else this.containerElement.style.display="none",this.panel.setVisible(!1)}resize(e,t){this.container.resize(e,t)}};var X=class{displayCloseButton;dockManager;tabStripDirection;hostElement;tabListElement;separatorElement;contentElement;createTabPage;tabHandleListener;eventListeners;pages;activeTab;_resizeRequested;mouseDownHandler;focusHandler;constructor(e,t,i){if(t===void 0&&(t=x.BOTTOM),i===void 0&&(i=!1),this.dockManager=e,this.tabStripDirection=t,this.displayCloseButton=i,this.pages=[],this.eventListeners=[],this.tabHandleListener={onMoveTab:n=>{this.onMoveTab(n)}},this.hostElement=document.createElement("div"),this.tabListElement=document.createElement("div"),this.separatorElement=document.createElement("div"),this.contentElement=document.createElement("div"),this.contentElement.tabIndex=0,this.createTabPage=this._createDefaultTabPage,this.tabStripDirection===x.BOTTOM)this.hostElement.appendChild(this.contentElement),this.hostElement.appendChild(this.separatorElement),this.hostElement.appendChild(this.tabListElement);else if(this.tabStripDirection===x.TOP)this.hostElement.appendChild(this.tabListElement),this.hostElement.appendChild(this.separatorElement),this.hostElement.appendChild(this.contentElement);else throw new Error("Only top and bottom tab strip orientations are supported");this.hostElement.classList.add("dockspan-tab-host"),this.tabListElement.classList.add("dockspan-tab-handle-list-container"),this.separatorElement.classList.add("dockspan-tab-handle-content-seperator"),this.contentElement.classList.add("dockspan-tab-content"),this.contentElement.tabIndex=0,this.focusHandler=new m(this.contentElement,"focus",this.onFocus.bind(this),!0),this.mouseDownHandler=new m(this.contentElement,"mousedown",this.onMousedown.bind(this),!0)}onFocus(){this.activeTab&&this.dockManager.activePanel!=this.activeTab.panel&&(this.dockManager.activePanel=this.activeTab.panel)}setActive(e){e?this.separatorElement.classList.add("dockspan-tab-handle-content-seperator-active"):this.separatorElement.classList.remove("dockspan-tab-handle-content-seperator-active"),this.activeTab&&this.activeTab.handle.setActive(e)}onMousedown(){this.activeTab&&this.dockManager.activePanel!=this.activeTab.panel&&(this.dockManager.activePanel=this.activeTab.panel)}onMoveTab(e){let t=Array.prototype.slice.call(this.tabListElement.childNodes).indexOf(e.self.elementBase);this.change(this,e.self,e.state,t)}performTabsLayout(e){this.pages=c.orderByIndexes(this.pages,e);let t=this.tabListElement.childNodes,i=[];for(let n in t)t[n].nodeType===1&&i.push(t[n]);i=c.orderByIndexes(i,e);for(let n=0;n<i.length;++n)this.tabListElement.appendChild(i[n]);this.activeTab&&this.onTabPageSelected(this.activeTab,!1)}getActiveTab(){return this.activeTab}addListener(e){this.eventListeners.push(e)}removeListener(e){this.eventListeners.splice(this.eventListeners.indexOf(e),1)}change(e,t,i,n){this.eventListeners.forEach(o=>{o.onChange&&o.onChange({host:e,handle:t,state:i,index:n})})}_createDefaultTabPage(e,t){return new W(e,t)}setActiveTab(e){let t;this.pages.forEach(i=>{i.container===e&&(t=i)}),this.pages.length>0&&t&&(this.onTabPageSelected(t,!0),this.dockManager.activePanel=e)}resize(e,t){this.hostElement.style.width=e+"px",this.hostElement.style.height=t+"px";let i=this.tabListElement.clientHeight;this._resizeRequested||requestAnimationFrame(()=>this.resizeTabListElement(e,t)),this._resizeRequested=!0;let n=this.separatorElement.clientHeight,o=t-i-n;this.contentElement.style.height=o+"px",this.activeTab&&this.activeTab.resize(e,o)}resizeTabListElement(e,t){if(this._resizeRequested=!1,this.pages.length===0)return;let i=0;this.pages.forEach(o=>{let s=o.handle;s.elementBase!=null&&(s.elementBase.style.width="",i+=s.elementBase.clientWidth)});let n=e/i;n>1.2||this.pages.forEach((o,s)=>{let l=o.handle,a=n*l.elementBase.clientWidth;s===this.pages.length-1&&(a=a-5),l.elementBase.style.width=a+"px"})}performLayout(e){this.pages.forEach(n=>{if(!e.some(o=>o==n.container)){n.handle.removeListener(this.tabHandleListener),n.destroy();let o=this.pages.indexOf(n);o>-1&&this.pages.splice(o,1)}});let t=this.activeTab;delete this.activeTab;let i=e.filter(n=>n.containerType==="panel");i.length>0?(i.forEach(n=>{let o=null;this.pages.some(s=>s.container==n?(o=s,!0):!1)||(o=this.createTabPage(this,n),o.handle.addListener(this.tabHandleListener),this.pages.push(o)),t&&o.container===t.container&&(this.activeTab=o)}),this._setTabHandlesVisible(!0)):this._setTabHandlesVisible(!1),this.activeTab&&this.onTabPageSelected(this.activeTab,!1)}_setTabHandlesVisible(e){e?(this.tabListElement.classList.add("dockspan-tab-handle-list-container-visible"),this.separatorElement.classList.add("dockspan-tab-handle-content-seperator-visible")):(this.tabListElement.classList.remove("dockspan-tab-handle-list-container-visible"),this.separatorElement.classList.remove("dockspan-tab-handle-content-seperator-visible"))}onTabPageSelected(e,t){this.activeTab=e,this.pages.forEach(i=>{let n=i===e;i.setSelected(n,t)})}};var D=class{dockManager;tabOrientation;name;element;containerElement;containerType;minimumAllowedChildNodes;tabHost;tabHostListener;state;constructor(e,t){t===void 0&&(t=x.BOTTOM),this.dockManager=e,this.tabOrientation=t,this.name=c.getNextId("fill_"),this.element=document.createElement("div"),this.containerElement=this.element,this.containerType=C.fill,this.minimumAllowedChildNodes=2,this.element.classList.add("dock-container"),this.element.classList.add("dock-container-fill"),this.tabHost=new X(e,this.tabOrientation),this.tabHostListener={onChange:i=>{this.dockManager._requestTabReorder(this,i)}},this.tabHost.addListener(this.tabHostListener),this.element.appendChild(this.tabHost.hostElement)}setActiveChild(e){this.tabHost.setActiveTab(e)}resize(e,t){this.element.style.width=e+"px",this.element.style.height=t+"px",this.tabHost.resize(e,t)}performLayout(e){this.tabHost.performLayout(e)}destroy(){this.tabHost.pages.forEach(e=>e.destroy()),c.removeNode(this.element)&&delete this.element}saveState(e){e.width=this.width,e.height=this.height}loadState(e){this.state={width:e.width,height:e.height}}get width(){return this.element.clientWidth}set width(e){this.element.style.width=e+"px"}get height(){return this.element.clientHeight}set height(e){this.element.style.height=e+"px"}};var Y=class extends W{constructor(e,t){super(e,t),this.container.containerType==="panel"&&(this.panel=t,this.containerElement=this.panel.elementContentWrapper,c.removeNode(this.containerElement))}destroy(){super.destroy(),this.panel.elementContentHost.appendChild(this.containerElement)}};var P=class extends D{constructor(e){super(e,x.TOP),this.minimumAllowedChildNodes=0,this.element.classList.add("document-manager"),this.tabHost.createTabPage=this._createDocumentTabPage,this.tabHost.displayCloseButton=!0}_createDocumentTabPage(e,t){return new Y(e,t)}saveState(e){super.saveState(e),e.documentManager=!0}selectedTab(){return this.tabHost.activeTab}};var G=class{dockManager;documentManagerNode;constructor(e){this.dockManager=e}async deserialize(e){let t=JSON.parse(e),i=new L;return i.rootNode=await this._buildGraph(t.graphInfo),i.dialogs=await this._buildDialogs(t.dialogsInfo),i.documentManagerNode=this.documentManagerNode,i}async _buildGraph(e){let t=e.children,i=[];for(let s of t){let l=await this._buildGraph(s);l!==null&&i.push(l)}let n=await this._createContainer(e,i);if(n===null)return null;let o=new E(n);n instanceof P&&(this.documentManagerNode=o),o.children=i;for(let s of o.children.reverse())s.parent=o;return o.children.reverse(),o}async _createContainer(e,t){let i=e.containerType,n=e.state,o,s=[];for(let l of t)s.push(l.container);if(i==="panel"){if(o=await g.loadFromState(n,this.dockManager),!o.prepareForDocking)return null;o.prepareForDocking(),c.removeNode(o.elementPanel)}else if(i==="horizontal")o=new S(this.dockManager,s);else if(i==="vertical")o=new N(this.dockManager,s);else if(i==="fill")n.documentManager?o=new P(this.dockManager):o=new D(this.dockManager);else throw new Error("Cannot create dock container of unknown type: "+i);return o.loadState(n),o}async _buildDialogs(e){let t=[];for(let i of e){let n=i.containerType,o=i.state,s;if(n==="panel"&&(s=await g.loadFromState(o,this.dockManager),s.prepareForDocking)){c.removeNode(s.elementPanel),s.isDialog=!0;let l=new H(s,this.dockManager);(i.position.x>document.body.clientWidth||i.position.y>document.body.clientHeight-70)&&(i.position.x=20,i.position.y=70),l.setPosition(i.position.x,i.position.y),l.isHidden=i.isHidden,l.isHidden&&l.hide(),t.push(l)}}return t}};var K=class{serialize(e){let t=this._buildGraphInfo(e.rootNode),i=this._buildDialogsInfo(e.dialogs.sort((n,o)=>n.elementDialog.style.zIndex-o.elementDialog.style.zIndex));return JSON.stringify({graphInfo:t,dialogsInfo:i})}_buildGraphInfo(e){let t={};e.container.saveState(t);let i=[];return e.children.forEach(o=>{i.push(this._buildGraphInfo(o))}),{containerType:e.container.containerType,state:t,children:i}}_buildDialogsInfo(e){let t=[];return e.forEach(i=>{let n={},o=i.panel;o.saveState(n);let s={containerType:o.containerType,state:n,position:i.getPosition(),isHidden:i.isHidden};t.push(s)}),t}};var j=class{dockManager;constructor(e){this.dockManager=e}dockLeft(e,t){this._performDock(e,t,"horizontal",!0)}dockRight(e,t){this._performDock(e,t,"horizontal",!1)}dockUp(e,t){this._performDock(e,t,"vertical",!0)}dockDown(e,t){this._performDock(e,t,"vertical",!1)}dockFill(e,t){this._performDock(e,t,"fill",!1)}undock(e){let t=e.parent;if(!t)throw new Error("Cannot undock. panel is not a leaf node");let i=t.children.indexOf(e);if(e.detachFromParent(),t.children.length<t.container.minimumAllowedChildNodes){let n=t.parent;for(let o=0;o<t.children.length;o++){let s=t.children[o];if(n){n.addChildAfter(t,s),t.detachFromParent();let l=t.container.containerElement.clientWidth,a=t.container.containerElement.clientHeight;t.container.destroy(),s.container.resize(l,a),n.performLayout(!1)}else t.detachFromParent(),t.container.destroy(),this.dockManager.setRootNode(s)}}else if(t.performLayout(!1),t.children.length>0){let n=t.children[Math.max(0,i-1)];t.container.setActiveChild(n.container)}this.dockManager.invalidate(),this.dockManager.notifyOnUnDock(e)}close(e){let t=e?.parent;if(!t)throw new Error("Cannot undock. panel is not a leaf node");let i=!1;t.children.length>0&&t.container.tabHost!=null&&(i=t.container.tabHost.getActiveTab().container==e.container);let n=t.children.indexOf(e);if(e.detachFromParent(),t.children.length<t.container.minimumAllowedChildNodes){let o=t.parent;for(let s=0;s<t.children.length;s++){let l=t.children[s];if(o){o.addChildAfter(t,l),t.detachFromParent();let a=t.container.containerElement.clientWidth,h=t.container.containerElement.clientHeight;l.container.resize(a,h),t.container.destroy(),o.performLayout(!1)}else t.detachFromParent(),t.container.destroy(),this.dockManager.setRootNode(l)}}else if(t.performLayout(!1),i){let o=t.children[Math.max(0,n-1)];o!=null&&t.container.setActiveChild(o.container)}this.dockManager.invalidate(),this.dockManager.notifyOnUnDock(e)}reorderTabs(e,t,i,n){let o=e.children.length,s=i==="left"?n:n+1;if(i=="right"&&s>=e.children.length||i=="left"&&s==0)return;let l=Array.apply(null,{length:o}).map(Number.call,Number),a=l.splice(s,1)[0];l.splice(i==="left"?n-1:n,0,a),e.children=c.orderByIndexes(e.children,l),e.container.tabHost.performTabsLayout(l),this.dockManager.notifyOnTabsReorder(e)}_performDock(e,t,i,n){if(e.parent&&e.parent.container.containerType==="fill"&&(e=e.parent),i==="fill"&&e.container.containerType==="fill"){e.addChild(t),e.performLayout(!1),e.container.setActiveChild(t.container),this.dockManager.invalidate(),this.dockManager.notifyOnDock(t);return}let o=this.dockManager.context.model,s,l,a;if(e===o.rootNode){n?(s=this._createDockContainer(i,t,e),l=new E(s),l.addChild(t),l.addChild(e)):(s=this._createDockContainer(i,e,t),l=new E(s),l.addChild(e),l.addChild(t)),this.dockManager.setRootNode(l),this.dockManager.rebuildLayout(this.dockManager.context.model.rootNode),l.container.setActiveChild(t.container),this.dockManager.invalidate(),this.dockManager.notifyOnDock(t);return}if(e.parent.container.containerType!==i){a=e.parent;let p=e.container.containerElement.clientWidth,u=e.container.containerElement.clientHeight,k=a.container.containerElement.clientWidth,b=a.container.containerElement.clientHeight;s=this._createDockContainer(i,t,e),l=new E(s),a.addChildAfter(e,l),e.detachFromParent(),c.removeNode(e.container.containerElement),n?(l.addChild(t),l.addChild(e)):(l.addChild(e),l.addChild(t)),a.performLayout(!1),l.performLayout(!0),l.container.setActiveChild(t.container),l.container.resize(p,u),a.container.resize(k,b)}else a=e.parent,n?a.addChildBefore(e,t):a.addChildAfter(e,t),a.performLayout(!1),a.container.setActiveChild(t.container);let h=t.container.containerElement.clientWidth,d=t.container.containerElement.clientHeight;t.container.resize(h,d),this.dockManager.invalidate(),this.dockManager.notifyOnDock(t)}_forceResizeCompositeContainer=e=>{let t=e.containerElement.clientWidth,i=e.containerElement.clientHeight;e.resize(t,i)};_createDockContainer(e,t,i){if(e==="horizontal")return new S(this.dockManager,[t.container,i.container]);if(e==="vertical")return new N(this.dockManager,[t.container,i.container]);if(e==="fill")return new D(this.dockManager);throw new Error("Failed to create dock container of type: "+e)}getDockBounds(e,t,i,n){let o,s,l,a;if(i==="fill"){let T=e.container.containerElement,R=this.dockManager.element.getBoundingClientRect(),_=T.getBoundingClientRect();return{x:_.left-R.left,y:_.top-R.top,width:T.clientWidth,height:T.clientHeight}}e.parent&&e.parent.container.containerType==="fill"&&(e=e.parent);let h=!1;e.parent&&e.parent.container.containerType===i?(o=e.parent,s=o.children.length,l=o.children.indexOf(e)+(n?0:1)):(o=e,s=1,l=n?0:1,h=!0);let d=5,p=0,u=0;if(i==="vertical"||i==="horizontal"){let T=this._getVaringDimension(o.container,i)-(s-1)*d,R=this._getVaringDimension(t,i),_=T/(T+R);if(p=R*_,h)u=n?0:T*_;else{for(let ee=0;ee<l;ee++)u+=this._getVaringDimension(o.children[ee].container,i);u*=_}}a={};let k=this.dockManager.element.getBoundingClientRect(),b=o.container.containerElement.getBoundingClientRect();return i==="vertical"?(a.x=b.left-k.left,a.y=b.top-k.top+u,a.width=o.container.width,a.height=p):i==="horizontal"&&(a.x=b.left-k.left+u,a.y=b.top-k.top,a.width=p,a.height=o.container.height),a}_getVaringDimension(e,t){return t==="vertical"?e.height:t==="horizontal"?e.width:0}};var $=class{dockManager;model;documentManagerView;constructor(e){this.dockManager=e,this.model=new L,this.documentManagerView=new P(this.dockManager)}};var J=class{wheel;id;element;hoverIconClass;mouseOverHandler;mouseOutHandler;active;constructor(e,t){this.wheel=e,this.id=t;let i=t.replace("-s","");this.element=document.createElement("div"),this.element.classList.add("dock-wheel-item"),this.element.classList.add("disable-selection"),this.element.classList.add("dock-wheel-"+i),this.element.classList.add("dock-wheel-"+i+"-icon"),this.hoverIconClass="dock-wheel-"+i+"-icon-hover",this.mouseOverHandler=new m(this.element,"pointerover",this.onMouseMoved.bind(this)),this.mouseOutHandler=new m(this.element,"pointerout",this.onMouseOut.bind(this)),this.active=!1}onMouseMoved(){this.active=!0,this.element.classList.add(this.hoverIconClass),this.wheel.onMouseOver(this)}onMouseOut(){this.active=!1,this.element.classList.remove(this.hoverIconClass),this.wheel.onMouseOut()}};var Q=class{dockManager;elementMainWheel;elementSideWheel;wheelItems;elementPanelPreview;activeDialog;_activeNode;_visible;constructor(e){this.dockManager=e,this.elementMainWheel=document.createElement("div"),this.elementSideWheel=document.createElement("div"),this.wheelItems={};for(let i in f)this.wheelItems[i]=new J(this,i),i.substr(-2,2)==="-s"?this.elementSideWheel.appendChild(this.wheelItems[i].element):this.elementMainWheel.appendChild(this.wheelItems[i].element);let t=9e6;this.elementMainWheel.classList.add("dock-wheel-base"),this.elementSideWheel.classList.add("dock-wheel-base"),this.elementMainWheel.style.zIndex=String(t+1),this.elementSideWheel.style.zIndex=String(t),this.elementPanelPreview=document.createElement("div"),this.elementPanelPreview.classList.add("dock-wheel-panel-preview"),this.elementPanelPreview.style.zIndex=String(t-1),this.activeDialog=void 0,this._activeNode=void 0,this._visible=!1}get activeNode(){return this._activeNode}set activeNode(e){let t=this._activeNode;this._activeNode=e,t!==this._activeNode&&this._visible&&this.showWheel()}showWheel(){if(this._visible=!0,!this.activeNode){c.removeNode(this.elementMainWheel),c.removeNode(this.elementSideWheel);return}let e=this.activeNode.container.containerElement,t=e.clientWidth,i=e.clientHeight,n=Math.floor(t/2),o=Math.floor(i/2),s=e.getBoundingClientRect(),l=this.dockManager.element.getBoundingClientRect();this.elementMainWheel.style.left=s.left-l.left+n+"px",this.elementMainWheel.style.top=s.top-l.top+o+"px";let a=20,h=this.dockManager.element.clientWidth,d=this.dockManager.element.clientHeight;c.removeNode(this.elementMainWheel),c.removeNode(this.elementSideWheel),this.dockManager.element.appendChild(this.elementMainWheel),this.dockManager.element.appendChild(this.elementSideWheel),this._setWheelButtonPosition(f["left-s"],a,-d/2),this._setWheelButtonPosition(f["right-s"],h-a*2,-d/2),this._setWheelButtonPosition(f["top-s"],h/2,-d+a),this._setWheelButtonPosition(f["down-s"],h/2,-a)}_setWheelButtonPosition(e,t,i){let n=this.wheelItems[e],o=n.element.clientWidth/2,s=n.element.clientHeight/2,l=Math.floor(t-o),a=Math.floor(i-s);n.element.style.marginLeft=l+"px",n.element.style.marginTop=a+"px"}hideWheel(){this._visible=!1,this.activeNode=void 0,c.removeNode(this.elementMainWheel),c.removeNode(this.elementSideWheel),c.removeNode(this.elementPanelPreview);for(let e in this.wheelItems)this.wheelItems[e].active=!1}onMouseOver(e){if(!this.activeDialog)return;let t=this.dockManager.context.model.rootNode,i;e.id===f.top?i=this.dockManager.layoutEngine.getDockBounds(this.activeNode,this.activeDialog.panel,"vertical",!0):e.id===f.down?i=this.dockManager.layoutEngine.getDockBounds(this.activeNode,this.activeDialog.panel,"vertical",!1):e.id===f.left?i=this.dockManager.layoutEngine.getDockBounds(this.activeNode,this.activeDialog.panel,"horizontal",!0):e.id===f.right?i=this.dockManager.layoutEngine.getDockBounds(this.activeNode,this.activeDialog.panel,"horizontal",!1):e.id===f.fill?i=this.dockManager.layoutEngine.getDockBounds(this.activeNode,this.activeDialog.panel,"fill",!1):e.id===f["top-s"]?i=this.dockManager.layoutEngine.getDockBounds(t,this.activeDialog.panel,"vertical",!0):e.id===f["down-s"]?i=this.dockManager.layoutEngine.getDockBounds(t,this.activeDialog.panel,"vertical",!1):e.id===f["left-s"]?i=this.dockManager.layoutEngine.getDockBounds(t,this.activeDialog.panel,"horizontal",!0):e.id===f["right-s"]&&(i=this.dockManager.layoutEngine.getDockBounds(t,this.activeDialog.panel,"horizontal",!1)),i&&(this.dockManager.element.appendChild(this.elementPanelPreview),this.elementPanelPreview.style.left=Math.round(i.x)+"px",this.elementPanelPreview.style.top=Math.round(i.y)+"px",this.elementPanelPreview.style.width=Math.round(i.width)+"px",this.elementPanelPreview.style.height=Math.round(i.height)+"px")}onMouseOut(){c.removeNode(this.elementPanelPreview)}onDialogDropped(e){let t=this._getActiveWheelItem();t&&this._handleDockRequest(t,e)}_getActiveWheelItem(){for(let e in this.wheelItems){let t=this.wheelItems[e];if(t.active)return t}}_handleDockRequest(e,t){e.active=!1,e.element.classList.remove(e.hoverIconClass),this.activeNode&&(e.id===f.left?this.dockManager.dockDialogLeft(this.activeNode,t):e.id===f.right?this.dockManager.dockDialogRight(this.activeNode,t):e.id===f.top?this.dockManager.dockDialogUp(this.activeNode,t):e.id===f.down?this.dockManager.dockDialogDown(this.activeNode,t):e.id===f.fill?this.dockManager.dockDialogFill(this.activeNode,t):e.id===f["left-s"]?this.dockManager.dockDialogLeft(this.dockManager.context.model.rootNode,t):e.id===f["right-s"]?this.dockManager.dockDialogRight(this.dockManager.context.model.rootNode,t):e.id===f["top-s"]?this.dockManager.dockDialogUp(this.dockManager.context.model.rootNode,t):e.id===f["down-s"]&&this.dockManager.dockDialogDown(this.dockManager.context.model.rootNode,t))}};var Z=class{element;context;dockWheel;layoutEngine;mouseMoveHandler;touchMoveHandler;layoutEventListeners;closePanelContainerCallback;defaultDialogPosition;backgroundContext;zIndexCounter;zIndexTabHost;zIndexTabHandle;zIndexDialogCounter;onKeyPressBound;iframes;_undockEnabled;getElementCallback;_config;_activePanel;_lastPanelNotADialog;_activeDocument;constructor(e,t){if(e===void 0)throw new Error("Invalid Dock Manager element provided");this._config=Object.assign(new A,t),this.element=e,this.context=this.dockWheel=this.layoutEngine=this.mouseMoveHandler=this.touchMoveHandler=void 0,this.layoutEventListeners=[],this.defaultDialogPosition=new v(0,0)}get config(){return this._config}initialize(){this.backgroundContext=this.element.children[0],this.context=new $(this);let e=new E(this.context.documentManagerView);this.context.model.rootNode=e,this.context.model.documentManagerNode=e,this.context.model.dialogs=[],this.setRootNode(this.context.model.rootNode),this.resize(this.element.clientWidth,this.element.clientHeight),this.dockWheel=new Q(this),this.layoutEngine=new j(this),this._undockEnabled=!0,this.rebuildLayout(this.context.model.rootNode),this.zIndexCounter=1001,this.zIndexTabHost=1e3,this.zIndexTabHandle=100,this.zIndexDialogCounter=10001,this.backgroundContext!=null&&this.context.model.rootNode.container.tabHost.hostElement.insertBefore(this.backgroundContext,this.context.model.rootNode.container.tabHost.hostElement.firstChild),this.onKeyPressBound=this.onKeyPress.bind(this),this.element.addEventListener("keydown",this.onKeyPressBound)}onKeyPress(e){if(e.key=="Escape"&&this.activePanel&&!this.activePanel._hideCloseButton&&(this.activePanel.isDialog&&this._config.escClosesDialog||!this.activePanel.isDialog&&this._config.escClosesWindow)){let t=this.activePanel;this.activePanel=null,t.close()}}checkXBounds(e,t,i,n,o){if(this._config.moveOnlyWithinDockConatiner)return this.checkXBoundsWithinDockContainer(e,t,i,n,o);let s=this.element.getBoundingClientRect(),l=Math.floor(t.x-i.x),a=l<0&&e.offsetLeft+e.offsetWidth+l+s.left<40,h=l>0&&e.offsetLeft+l+s.left>window.innerWidth-40;if(a){i.x=t.x,l=0;let d=40-(e.offsetWidth+e.offsetLeft+s.left);d>0&&(l=d)}else if(h){i.x=t.x,l=0;let d=window.innerWidth-40-e.offsetLeft-s.left;d>0&&(l=d)}return l}checkXBoundsWithinDockContainer(e,t,i,n,o){let s=t.x-i.x,l=this.element.getBoundingClientRect(),a=e.getBoundingClientRect(),h=s<0&&a.left+s<l.left&&!o,d=s>0&&a.right+s>l.right&&!n;return h?(t.x-=s,s=l.left-a.left,t.x-=s):d&&(t.x-=s,s=l.right-a.right,t.x-=s),s}checkYBounds(e,t,i,n,o){if(this._config.moveOnlyWithinDockConatiner)return this.checkYBoundsWithinDockContainer(e,t,i,n,o);let s=this.element.getBoundingClientRect(),l=Math.floor(t.y-i.y),a=l<0&&e.offsetTop+l<0,h=l>0&&e.offsetTop+l+s.top>window.innerHeight-16;if(a)i.y=t.y,l=0;else if(h){i.y=t.y,l=0;let d=window.innerHeight-16-e.offsetTop-s.top;d>0&&(l=d)}return l}checkYBoundsWithinDockContainer(e,t,i,n,o){let s=t.y-i.y,l=this.element.getBoundingClientRect(),a=e.getBoundingClientRect(),h=s<0&&a.top+s<l.top&&!o,d=s>0&&a.bottom+s>l.bottom&&!n;return h?(t.y-=s,s=l.top-a.top,t.y-=s):d&&(t.y-=s,s=l.bottom-a.bottom,t.y-=s),s}rebuildLayout(e){e.children.forEach(t=>{this.rebuildLayout(t)}),e.performLayout(!1)}invalidate(){this.resize(this.element.clientWidth,this.element.clientHeight)}resize(e,t){this.context.model.rootNode.container.resize(e,t);let i=0,n=0;for(let o of this.context.model.dialogs)(o.position.x>this.element.clientWidth||o.position.y>this.element.clientHeight)&&((i>this.element.clientWidth||n>this.element.clientHeight)&&(i=0,n=0),o.setPosition(100+i,100+n),i+=100,n+=100)}setModel(e){c.removeNode(this.context.documentManagerView.containerElement),this.context.model=e,this.setRootNode(e.rootNode),this.rebuildLayout(e.rootNode),this.loadResize(e.rootNode)}loadResize(e){e.children.reverse().forEach(i=>{this.loadResize(i),e.container.setActiveChild(i.container)}),e.children.reverse();let t=e.container;e.container.resize(t.state.width,t.state.height)}setRootNode(e){e.detachFromParent(),this.context.model.rootNode=e,this.element.appendChild(e.container.containerElement)}_onDialogDragStarted(e,t){this.dockWheel.activeNode=this._findNodeOnPoint(t.clientX,t.clientY),this.dockWheel.activeDialog=e,(e.noDocking==null||e.noDocking!==!0)&&this.dockWheel.showWheel(),this.mouseMoveHandler&&(this.mouseMoveHandler.cancel(),delete this.mouseMoveHandler),this.touchMoveHandler&&(this.touchMoveHandler.cancel(),delete this.touchMoveHandler),this.mouseMoveHandler=new m(window,"mousemove",this._onMouseMoved.bind(this)),this.touchMoveHandler=new m(window,"touchmove",this._onMouseMoved.bind(this))}_onDialogDragEnded(e,t){this.mouseMoveHandler&&(this.mouseMoveHandler.cancel(),delete this.mouseMoveHandler),this.touchMoveHandler&&(this.touchMoveHandler.cancel(),delete this.touchMoveHandler),this.dockWheel.onDialogDropped(e),this.dockWheel.hideWheel(),delete this.dockWheel.activeDialog,e.saveState(e.elementDialog.offsetLeft,e.elementDialog.offsetTop)}_onMouseMoved(e){e.changedTouches!=null&&(e=e.changedTouches[0]),this.dockWheel.activeNode=this._findNodeOnPoint(e.clientX,e.clientY)}_findNodeOnPoint(e,t){let i=[];i.push(this.context.model.rootNode);let n;for(;i.length>0;){let o=i.pop();c.isPointInsideNode(e,t,o)&&(n=o,[].push.apply(i,o.children))}return n}dockDialogLeft(e,t){return this._requestDockDialog(e,t,this.layoutEngine.dockLeft.bind(this.layoutEngine))}dockDialogRight(e,t){return this._requestDockDialog(e,t,this.layoutEngine.dockRight.bind(this.layoutEngine))}dockDialogUp(e,t){return this._requestDockDialog(e,t,this.layoutEngine.dockUp.bind(this.layoutEngine))}dockDialogDown(e,t){return this._requestDockDialog(e,t,this.layoutEngine.dockDown.bind(this.layoutEngine))}dockDialogFill(e,t){return this._requestDockDialog(e,t,this.layoutEngine.dockFill.bind(this.layoutEngine))}dockLeft(e,t,i){return this._requestDockContainer(e,t,this.layoutEngine.dockLeft.bind(this.layoutEngine),!1,i)}dockRight(e,t,i){return this._requestDockContainer(e,t,this.layoutEngine.dockRight.bind(this.layoutEngine),!0,i)}dockUp(e,t,i){return this._requestDockContainer(e,t,this.layoutEngine.dockUp.bind(this.layoutEngine),!1,i)}dockDown(e,t,i){return this._requestDockContainer(e,t,this.layoutEngine.dockDown.bind(this.layoutEngine),!0,i)}dockFill(e,t){return this._requestDockContainer(e,t,this.layoutEngine.dockFill.bind(this.layoutEngine),!1)}floatDialog(e,t,i,n,o){let s;if(this.context.model.dialogs.forEach(h=>{e==h.panel&&(h.show(),h.setPosition(t,i),s=h)}),s)return s;try{let h=this._findNodeFromContainer(e);this.layoutEngine.undock(h)}catch{}let l=e;c.removeNode(l.elementPanel),l.isDialog=!0;let a=new H(l,this,n,o);return a.setPosition(t,i),a}_requestDockDialog(e,t,i){let n=t.panel,o=new E(n);return n.prepareForDocking(),n.elementContentContainer.style.zIndex="",t.destroy(),i(e,o),o}_checkShowBackgroundContext(){this.backgroundContext!=null&&(this.context.model.documentManagerNode.children.length>0?this.backgroundContext.style.display="none":this.backgroundContext.style.display="block")}_requestDockContainer(e,t,i,n,o){let s=new E(t);if(t.containerType==="panel"){let h=t;h.prepareForDocking(),c.removeNode(h.elementPanel)}let l=null,a;if(e.parent&&e.parent.container&&(a=e.parent.container,a.getRatios&&(l=a.getRatios())),i(e,s),o&&s.parent&&(s.parent.container.containerType==="vertical"||s.parent.container.containerType==="horizontal")){let h=s.parent.container;if(l&&a==h){if(n){for(let d=0;d<l.length;d++)l[d]=l[d]-l[d]*o;l.push(o)}else l[0]=l[0]-o,l.unshift(o);h.setRatios(l)}else h.setContainerRatio(t,o)}return this.rebuildLayout(this.context.model.rootNode),this.invalidate(),this._checkShowBackgroundContext(),s}_requestTabReorder(e,t){let i=this._findNodeFromContainer(e);this.layoutEngine.reorderTabs(i,t.handle,t.state,t.index)}requestUndockToDialog(e,t,i){let n=this._findNodeFromContainer(e);this.layoutEngine.undock(n);let o=n.container;o.elementPanel.style.display="block";let s=new H(o,this,null);if(o.lastDialogSize&&s.resize(o.lastDialogSize.width,o.lastDialogSize.height),t!==void 0){let l=s.elementDialog.clientWidth;i.x>l&&(i.x=.75*l),s.setPosition(t.clientX-i.x,t.clientY-i.y),s.draggable.onMouseDown(t)}return s}requestClose(e){let t=this._findNodeFromContainer(e);if(this.layoutEngine.close(t),this.activePanel==e&&(this.activePanel=null),this._activeDocument==e){let i=this._activeDocument;this._activeDocument=null,this.notifyOnActiveDocumentChange(null,i)}}openInDialog(e,t,i,n){let o=new H(e,this,null,n);if(t!=null){let s=o.elementDialog.clientWidth;i.x>s&&(i.x=.75*s),o.setPosition(t.clientX-i.x,t.clientY-i.y),o.draggable.onMouseDown(t)}return o}requestUndock(e){let t=this._findNodeFromContainer(e);this.layoutEngine.undock(t)}requestRemove(e){let t=this._findNodeFromContainer(e),i=t.parent;return t.detachFromParent(),i&&this.rebuildLayout(i),t}getNodeByElementId(e){let t=[];for(t.push(this.context.model.rootNode);t.length>0;){let i=t.pop();if(i.container instanceof g&&(i.container.elementContent.id===e||i.container.elementContent instanceof HTMLSlotElement&&i.container.elementContent.assignedElements()?.[0]?.id===e))return i;[].push.apply(t,i.children)}return null}getNodeByElement(e){let t=[];for(t.push(this.context.model.rootNode);t.length>0;){let i=t.pop();if(i.container instanceof g&&(i.container.elementContent===e||i.container.elementContent instanceof HTMLSlotElement&&i.container.elementContent.assignedElements()?.[0]===e))return i;[].push.apply(t,i.children)}return null}_findNodeFromContainer(e){let t=[];for(t.push(this.context.model.rootNode);t.length>0;){let i=t.pop();if(i.container===e)return i;[].push.apply(t,i.children)}return null}findNodeFromContainerElement(e){let t=[];for(t.push(this.context.model.rootNode);t.length>0;){let i=t.pop();if(i.container.containerElement===e)return i;[].push.apply(t,i.children)}return null}addLayoutListener(e){this.layoutEventListeners.push(e)}removeLayoutListener(e){this.layoutEventListeners.splice(this.layoutEventListeners.indexOf(e),1)}suspendLayout(e){this.layoutEventListeners.forEach(t=>{t.onSuspendLayout&&t.onSuspendLayout(this,e)})}resumeLayout(e){this.layoutEventListeners.forEach(t=>{t.onResumeLayout&&t.onResumeLayout(this,e)})}notifyOnDock(e){this._checkShowBackgroundContext(),this.layoutEventListeners.forEach(t=>{t.onDock&&(t.onDock(this,e),e.container.resize(e.container.width,e.container.height))})}notifyOnTabsReorder(e){this.layoutEventListeners.forEach(t=>{t.onTabsReorder&&t.onTabsReorder(this,e)})}notifyOnUnDock(e){this._checkShowBackgroundContext(),this.layoutEventListeners.forEach(t=>{t.onUndock&&t.onUndock(this,e)})}notifyOnClosePanel(e){if(this._checkShowBackgroundContext(),this.activePanel==e&&(this.activePanel=null),this._activeDocument==e){let t=this._activeDocument;this._activeDocument=null,this.notifyOnActiveDocumentChange(null,t)}this.layoutEventListeners.forEach(t=>{t.onClosePanel&&t.onClosePanel(this,e)})}notifyOnCreateDialog(e){this.layoutEventListeners.forEach(t=>{t.onCreateDialog&&t.onCreateDialog(this,e)})}notifyOnHideDialog(e){this.layoutEventListeners.forEach(t=>{t.onHideDialog&&t.onHideDialog(this,e)})}notifyOnShowDialog(e){this.layoutEventListeners.forEach(t=>{t.onShowDialog&&t.onShowDialog(this,e)})}notifyOnChangeDialogPosition(e,t,i){this.layoutEventListeners.forEach(n=>{n.onChangeDialogPosition&&n.onChangeDialogPosition(this,e,t,i)})}notifyOnContainerResized(e){this.layoutEventListeners.forEach(t=>{t.onContainerResized&&t.onContainerResized(this,e)})}notifyOnTabChange(e){this.layoutEventListeners.forEach(t=>{t.onTabChanged&&t.onTabChanged(this,e)})}notifyOnActivePanelChange(e,t){this.layoutEventListeners.forEach(i=>{i.onActivePanelChange&&i.onActivePanelChange(this,e,t)})}async notifyOnActiveDocumentChange(e,t){for(let i of this.layoutEventListeners)i.onActiveDocumentChange&&await i.onActiveDocumentChange(this,e,t)}prepareElementForNewWindow=null;notifyOnNewWindow(e,t){this._checkShowBackgroundContext(),this.layoutEventListeners.forEach(i=>{i.onNewWindow&&i.onNewWindow(this,e,t)})}saveState(){return new K().serialize(this.context.model)}async loadState(e){let t=new G(this);this.context.model=await t.deserialize(e),this.setModel(this.context.model)}getPanels(){let e=[];return this._allPanels(this.context.model.rootNode,e),this.context.model.dialogs.forEach(t=>{e.push(t.panel)}),e}undockEnabled(e){this._undockEnabled=e,this.getPanels().forEach(t=>{t.canUndock(e)})}lockDockState(e){this.undockEnabled(!e),this.hideCloseButton(e)}hideCloseButton(e){this.getPanels().forEach(t=>{t.hideCloseButton(e)})}updatePanels(e){let t=[];return this._allPanels(this.context.model.rootNode,t),t.forEach(i=>{c.arrayContains(e,i.elementContent.id)||i.close()}),this.context.model.dialogs.forEach(i=>{c.arrayContains(e,i.panel.elementContent.id)?i.show():i.hide()}),t}getVisiblePanels(){let e=[];return this._allPanels(this.context.model.rootNode,e),this.context.model.dialogs.forEach(t=>{t.isHidden||e.push(t.panel)}),e}_allPanels(e,t){e.children.forEach(i=>{this._allPanels(i,t)}),e.container.containerType==="panel"&&t.push(e.container)}get activeDocument(){return this._activeDocument}get activePanel(){return this._activePanel}set activePanel(e){if(e!==this._activePanel){e&&!e.isDialog&&(this._lastPanelNotADialog=e),this._lastPanelNotADialog&&this.getPanels().indexOf(this._lastPanelNotADialog)<0&&(this._lastPanelNotADialog=null);let t=this.activePanel;this.activePanel&&(this.activePanel.elementTitle.classList.remove("dockspan-panel-active"),this.activePanel.elementTitleText.classList.remove("dockspan-panel-titlebar-text-active"),this.activePanel.tabPage&&this.activePanel.tabPage.host.setActive(!1)),this._activePanel=e;let i=this._activeDocument;e&&e.panelType==M.document&&(this._activeDocument=e),!e&&t&&t.isDialog&&e==null&&this._lastPanelNotADialog&&this.activePanel!=this._lastPanelNotADialog&&(e=this._lastPanelNotADialog,this._lastPanelNotADialog=void 0),this.notifyOnActivePanelChange(e,t),i!=this._activeDocument&&this.notifyOnActiveDocumentChange(this._activeDocument,i),e&&(e.elementTitle.classList.add("dockspan-panel-active"),e.elementTitleText.classList.add("dockspan-panel-titlebar-text-active"),e.tabPage&&e.tabPage.host.setActive(!0))}else e&&e.tabPage&&e.tabPage.host.setActive(!0)}};import le from"./dock-manager-style-722M54DP.css"with{type:"css"};import ae from"./dock-manager-OTE5HAR7.css"with{type:"css"};function re(r,e){if(r.length===1)return r.raw[0];{let t="";for(let i=0;i<r.length;i++)t+=r[i]+(e[i]??"");return t}}var he=function(r,...e){let t=new CSSStyleSheet;return t.replaceSync(re(r,e)),t},te=class r extends HTMLElement{dockManager;slotId=0;windowResizedBound;slotElementMap;observer;initialized=!1;elementContainerMap=new Map;static style=he`
|
|
15
15
|
:host {
|
|
16
16
|
display: block;
|
|
17
17
|
}
|
|
@@ -20,4 +20,4 @@ var M;(function(a){a.document="document",a.panel="panel"})(M||(M={}));var C;(fun
|
|
|
20
20
|
}
|
|
21
21
|
#dialogDiv{
|
|
22
22
|
pointer-events: none;
|
|
23
|
-
}`;constructor(){super();let e=this.attachShadow({mode:"open"});e.adoptedStyleSheets=[
|
|
23
|
+
}`;constructor(){super();let e=this.attachShadow({mode:"open"});e.adoptedStyleSheets=[r.style,le,ae],this.windowResizedBound=this.windowResized.bind(this),this.slotElementMap=new WeakMap}initDockspawn(){let e=document.createElement("div");e.id="dockSpawnDiv",e.style.width="100%",e.style.height="100%",e.style.position="absolute",e.style.top="0",e.style.left="0",this.shadowRoot.appendChild(e),this.dockManager=new Z(e);let t=document.createElement("div");t.id="dialogDiv",t.style.width="100%",t.style.height="100%",t.style.position="absolute",t.style.top="0",t.style.left="0",this.dockManager.config.dialogRootElement=t,this.shadowRoot.appendChild(t),setTimeout(()=>{this.dockManager.initialize(),this.dockManager.addLayoutListener({onClosePanel:(i,n)=>{let o=n.elementContent,s=this.slotElementMap.get(o);s&&s.parentElement===this&&this.removeChild(s)}}),this.dockManager.resize(this.clientWidth,this.clientHeight);for(let i of this.children)this.handleAddedChildNode(i);this.observer=new MutationObserver(i=>{i.forEach(n=>{n.removedNodes.forEach(o=>{this.handleRemovedChildNode(o)}),n.addedNodes.forEach(o=>{this.handleAddedChildNode(o)})})}),this.observer.observe(this,{childList:!0})},50)}getElementInSlot(e){return this.slotElementMap.get(e)}handleAddedChildNode(e){let t=document.createElement("slot"),i="slot_"+this.slotId++;t.name=i;let n=M.panel,o=e.getAttribute("dock-spawn-panel-type");o&&(n=o);let s=e.hasAttribute("dock-spawn-hide-close-button"),l=e.getAttribute("dock-spawn-title"),a=new g(t,this.dockManager,l??e.title,n,s);e.slot=i,this.slotElementMap.set(t,e),this.elementContainerMap.set(e,a);let h=.5,d=e.getAttribute("dock-spawn-dock-ratio");d&&(h=d);let p=e.getAttribute("dock-spawn-dock-type"),u=this.dockManager.context.model.documentManagerNode,k=e.getAttribute("dock-spawn-dock-to");if(k){let b=this.getRootNode().getElementById(k);b&&(u=this.dockManager.findNodeFromContainerElement(this.elementContainerMap.get(b).containerElement))}p=="left"?this.dockManager.dockLeft(u,a,h):p=="right"?this.dockManager.dockRight(u,a,h):p=="up"?this.dockManager.dockUp(u,a,h):p=="down"?this.dockManager.dockDown(u,a,h):this.dockManager.dockFill(u,a),e.style.display=="none"&&(e.style.display="block")}handleRemovedChildNode(e){let t=this.getDockNodeForElement(e);t&&t.container.close(),this.elementContainerMap.delete(e)}connectedCallback(){this.initialized||(this.initDockspawn(),this.initialized=!0),window.addEventListener("resize",this.windowResizedBound),window.addEventListener("orientationchange",this.windowResizedBound)}disconnectedCallback(){window.removeEventListener("resize",this.windowResizedBound),window.removeEventListener("orientationchange",this.windowResizedBound)}windowResized(){this.resize()}resize(){this.dockManager.resize(this.clientWidth,this.clientHeight)}getDockNodeForElement(e){let t=e;return t.containerElement&&(t=e.containerElement),this.dockManager.findNodeFromContainerElement(t)}dockFill(e,t,i,n,o){let s=new g(e,this.dockManager,n,t,o);return this.dockManager.dockFill(i??this.dockManager.context.model.documentManagerNode,s)}dockLeft(e,t,i,n,o,s){let l=new g(e,this.dockManager,o,t,s);return this.dockManager.dockLeft(i??this.dockManager.context.model.documentManagerNode,l,n)}dockRight(e,t,i,n,o,s){let l=new g(e,this.dockManager,o,t,s);return this.dockManager.dockRight(i??this.dockManager.context.model.documentManagerNode,l,n)}dockUp(e,t,i,n,o,s){let l=new g(e,this.dockManager,o,t,s);return this.dockManager.dockUp(i??this.dockManager.context.model.documentManagerNode,l,n)}dockDown(e,t,i,n,o,s){let l=new g(e,this.dockManager,o,t,s);return this.dockManager.dockDown(i??this.dockManager.context.model.documentManagerNode,l,n)}floatDialog(e,t,i,n,o,s,l,a){let h=new g(e,this.dockManager,l,s,a),d=this.dockManager.floatDialog(h,t,i,null);return d.resize(n,o),d}};window.customElements.define("dock-spawn-ts",te);export{C as ContainerType,ie as Defaults,H as Dialog,A as DockConfig,G as DockGraphDeserializer,K as DockGraphSerializer,j as DockLayoutEngine,Z as DockManager,$ as DockManagerContext,L as DockModel,E as DockNode,te as DockSpawnTsWebcomponent,Q as DockWheel,J as DockWheelItem,P as DocumentManagerContainer,Y as DocumentTabPage,U as DraggableContainer,m as EventHandler,D as FillDockContainer,S as HorizontalDockContainer,y as Localizer,g as PanelContainer,M as PanelType,v as Point,O as ResizableContainer,w as ResizeDirection,I as ResizeHandle,F as SplitterBar,B as SplitterDockContainer,V as SplitterPanel,q as TabHandle,X as TabHost,x as TabHostDirection,W as TabPage,z as UndockInitiator,c as Utils,N as VerticalDockContainer,f as WheelTypes,ne as moveElementToNewBrowserWindow};
|
package/package.json
CHANGED
package/src/Dialog.ts
CHANGED
|
@@ -78,14 +78,16 @@ export class Dialog implements IContextMenuProvider {
|
|
|
78
78
|
this.bringToFront();
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
setPosition(x: number, y: number) {
|
|
82
|
-
let rect = this.dockManager.config.dialogRootElement.getBoundingClientRect();
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
this.
|
|
86
|
-
this.
|
|
87
|
-
this.
|
|
88
|
-
|
|
81
|
+
setPosition(x: number, y: number) {
|
|
82
|
+
let rect = this.dockManager.config.dialogRootElement.getBoundingClientRect();
|
|
83
|
+
let left = x - rect.left;
|
|
84
|
+
let top = y - rect.top;
|
|
85
|
+
this.position = new Point(left, top);
|
|
86
|
+
this.elementDialog.style.left = left + 'px';
|
|
87
|
+
this.elementDialog.style.top = top + 'px';
|
|
88
|
+
this.panel.setDialogPosition(left, top);
|
|
89
|
+
this.dockManager.notifyOnChangeDialogPosition(this, x, y);
|
|
90
|
+
}
|
|
89
91
|
|
|
90
92
|
getPosition(): Point {
|
|
91
93
|
return new Point(this.position ? this.position.x : 0, this.position ? this.position.y : 0);
|
|
@@ -215,4 +217,4 @@ export class Dialog implements IContextMenuProvider {
|
|
|
215
217
|
this,
|
|
216
218
|
this.dockManager.context.model.documentManagerNode.children);
|
|
217
219
|
}
|
|
218
|
-
}
|
|
220
|
+
}
|
|
@@ -296,20 +296,20 @@ export class ResizableContainer implements IDockContainer {
|
|
|
296
296
|
this._resizeContainer(0, 0, 0, dy, bounds);
|
|
297
297
|
}
|
|
298
298
|
|
|
299
|
-
_resizeContainer(leftDelta: number, topDelta: number, widthDelta: number, heightDelta: number, bounds: IThickness) {
|
|
300
|
-
bounds.left += leftDelta;
|
|
301
|
-
bounds.top += topDelta;
|
|
302
|
-
bounds.width += widthDelta;
|
|
303
|
-
bounds.height += heightDelta;
|
|
304
|
-
|
|
305
|
-
let minWidth = 50; // TODO: Move to external configuration
|
|
306
|
-
let minHeight = 50; // TODO: Move to external configuration
|
|
307
|
-
bounds.width = Math.max(bounds.width, minWidth);
|
|
308
|
-
bounds.height = Math.max(bounds.height, minHeight);
|
|
309
|
-
|
|
310
|
-
this.topLevelElement.style.left = bounds.left + 'px';
|
|
311
|
-
this.topLevelElement.style.top = bounds.top + 'px';
|
|
299
|
+
_resizeContainer(leftDelta: number, topDelta: number, widthDelta: number, heightDelta: number, bounds: IThickness) {
|
|
300
|
+
bounds.left += leftDelta;
|
|
301
|
+
bounds.top += topDelta;
|
|
302
|
+
bounds.width += widthDelta;
|
|
303
|
+
bounds.height += heightDelta;
|
|
304
|
+
|
|
305
|
+
let minWidth = 50; // TODO: Move to external configuration
|
|
306
|
+
let minHeight = 50; // TODO: Move to external configuration
|
|
307
|
+
bounds.width = Math.max(bounds.width, minWidth);
|
|
308
|
+
bounds.height = Math.max(bounds.height, minHeight);
|
|
309
|
+
|
|
310
|
+
this.topLevelElement.style.left = bounds.left + 'px';
|
|
311
|
+
this.topLevelElement.style.top = bounds.top + 'px';
|
|
312
312
|
|
|
313
313
|
this.resize(bounds.width, bounds.height);
|
|
314
314
|
}
|
|
315
|
-
}
|
|
315
|
+
}
|