@genesislcap/foundation-layout 9.0.1-alpha-b5c5eb7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +916 -0
- package/dist/1.0.0.remoteEntry.js +1 -0
- package/dist/191.191.106ece7a41ded6731029.js +2 -0
- package/dist/191.9a61143c2afb6057ad1bae886d5d1a6e.js.map +1 -0
- package/dist/259.09c601e5288d875caab4df1e2354c0ea.js.map +1 -0
- package/dist/259.259.216fcad43e9a38888e08.js +2 -0
- package/dist/415.415.094780a1a1162c7e5f1c.js +3 -0
- package/dist/415.415.094780a1a1162c7e5f1c.js.LICENSE.txt +4 -0
- package/dist/415.fcfb4f02eaecbfa31fc322639f244245.js.map +1 -0
- package/dist/459.459.c9f0bb440eb1f041c99e.js +515 -0
- package/dist/459.cb5f5b49b4e8881992c420f3b1ca863d.js.map +1 -0
- package/dist/623.623.0e7e8f23454ee96ed9c8.js +3 -0
- package/dist/623.623.0e7e8f23454ee96ed9c8.js.LICENSE.txt +4 -0
- package/dist/623.e8f211473f9034c4157d362efb017821.js.map +1 -0
- package/dist/755.718e14af7194fb741f98580b24b2bb8f.js.map +1 -0
- package/dist/755.755.f93ee58c2b836a669ec4.js +2 -0
- package/dist/dashboard.json +1 -0
- package/dist/dts/index.d.ts +3 -0
- package/dist/dts/index.d.ts.map +1 -0
- package/dist/dts/index.federated.d.ts +1 -0
- package/dist/dts/index.federated.d.ts.map +1 -0
- package/dist/dts/main/index.d.ts +6 -0
- package/dist/dts/main/index.d.ts.map +1 -0
- package/dist/dts/main/layout-components.d.ts +42 -0
- package/dist/dts/main/layout-components.d.ts.map +1 -0
- package/dist/dts/main/layout-item.d.ts +70 -0
- package/dist/dts/main/layout-item.d.ts.map +1 -0
- package/dist/dts/main/layout-main.d.ts +186 -0
- package/dist/dts/main/layout-main.d.ts.map +1 -0
- package/dist/dts/main/layout-region.d.ts +70 -0
- package/dist/dts/main/layout-region.d.ts.map +1 -0
- package/dist/dts/styles/constants.d.ts +7 -0
- package/dist/dts/styles/constants.d.ts.map +1 -0
- package/dist/dts/styles/dragging.styles.d.ts +7 -0
- package/dist/dts/styles/dragging.styles.d.ts.map +1 -0
- package/dist/dts/styles/index.d.ts +4 -0
- package/dist/dts/styles/index.d.ts.map +1 -0
- package/dist/dts/styles/layout.styles.d.ts +8 -0
- package/dist/dts/styles/layout.styles.d.ts.map +1 -0
- package/dist/dts/utils/constants.d.ts +14 -0
- package/dist/dts/utils/constants.d.ts.map +1 -0
- package/dist/dts/utils/error.d.ts +13 -0
- package/dist/dts/utils/error.d.ts.map +1 -0
- package/dist/dts/utils/events.d.ts +38 -0
- package/dist/dts/utils/events.d.ts.map +1 -0
- package/dist/dts/utils/index.d.ts +7 -0
- package/dist/dts/utils/index.d.ts.map +1 -0
- package/dist/dts/utils/logger.d.ts +2 -0
- package/dist/dts/utils/logger.d.ts.map +1 -0
- package/dist/dts/utils/misc.d.ts +10 -0
- package/dist/dts/utils/misc.d.ts.map +1 -0
- package/dist/dts/utils/templates.d.ts +6 -0
- package/dist/dts/utils/templates.d.ts.map +1 -0
- package/dist/dts/utils/types.d.ts +63 -0
- package/dist/dts/utils/types.d.ts.map +1 -0
- package/dist/esm/index.federated.js +2 -0
- package/dist/esm/index.federated.js.map +1 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/main/index.js +6 -0
- package/dist/esm/main/index.js.map +1 -0
- package/dist/esm/main/layout-components.js +36 -0
- package/dist/esm/main/layout-components.js.map +1 -0
- package/dist/esm/main/layout-item.js +86 -0
- package/dist/esm/main/layout-item.js.map +1 -0
- package/dist/esm/main/layout-main.js +391 -0
- package/dist/esm/main/layout-main.js.map +1 -0
- package/dist/esm/main/layout-region.js +98 -0
- package/dist/esm/main/layout-region.js.map +1 -0
- package/dist/esm/main/main.css +17 -0
- package/dist/esm/styles/constants.js +16 -0
- package/dist/esm/styles/constants.js.map +1 -0
- package/dist/esm/styles/dragging.styles.js +116 -0
- package/dist/esm/styles/dragging.styles.js.map +1 -0
- package/dist/esm/styles/index.js +4 -0
- package/dist/esm/styles/index.js.map +1 -0
- package/dist/esm/styles/layout.styles.js +530 -0
- package/dist/esm/styles/layout.styles.js.map +1 -0
- package/dist/esm/utils/constants.js +14 -0
- package/dist/esm/utils/constants.js.map +1 -0
- package/dist/esm/utils/error.js +17 -0
- package/dist/esm/utils/error.js.map +1 -0
- package/dist/esm/utils/events.js +26 -0
- package/dist/esm/utils/events.js.map +1 -0
- package/dist/esm/utils/index.js +7 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/logger.js +3 -0
- package/dist/esm/utils/logger.js.map +1 -0
- package/dist/esm/utils/misc.js +24 -0
- package/dist/esm/utils/misc.js.map +1 -0
- package/dist/esm/utils/templates.js +11 -0
- package/dist/esm/utils/templates.js.map +1 -0
- package/dist/esm/utils/types.js +4 -0
- package/dist/esm/utils/types.js.map +1 -0
- package/dist/favicon.ico +0 -0
- package/dist/foundation-layout.api.json +1574 -0
- package/dist/foundation-layout.d.ts +478 -0
- package/dist/foundationLayout.8b94161c9f0d0d475d026a05513893c1.js.map +1 -0
- package/dist/index.ejs +23 -0
- package/dist/index.html +15 -0
- package/dist/info.ejs +13 -0
- package/dist/main.40c13c1585eb6fa5761a17ab29a7851e.js.map +1 -0
- package/dist/main.94f8a6853d484ec34632.js +2 -0
- package/dist/npm.consola.713.b1e4073e73c71572987a.js +2 -0
- package/dist/npm.consola.a0d3324d3e61dcc430c3029da5f4dcc7.js.map +1 -0
- package/dist/npm.genesis-community.248.9c9900001dbc5ba9c3ed.js +2 -0
- package/dist/npm.genesis-community.2e0cc159dabe113d6fb29bb505c1a0d4.js.map +1 -0
- package/dist/npm.microsoft.127.00f16f24d8da8fd89263.js +1469 -0
- package/dist/npm.microsoft.127.00f16f24d8da8fd89263.js.LICENSE.txt +14 -0
- package/dist/npm.microsoft.be43958facd28231e770c1307660f64d.js.map +1 -0
- package/dist/remoteEntry.js +2 -0
- package/dist/serve.json +3 -0
- package/dist/tsdoc-metadata.json +11 -0
- package/docs/.gitattributes +2 -0
- package/docs/api/foundation-layout.default_reload_buffer.md +18 -0
- package/docs/api/foundation-layout.foundationlayout.additem.md +38 -0
- package/docs/api/foundation-layout.foundationlayout.dragging.md +16 -0
- package/docs/api/foundation-layout.foundationlayout.getlayout.md +22 -0
- package/docs/api/foundation-layout.foundationlayout.layoutrequiredregistrations.md +37 -0
- package/docs/api/foundation-layout.foundationlayout.loadlayout.md +37 -0
- package/docs/api/foundation-layout.foundationlayout.md +44 -0
- package/docs/api/foundation-layout.foundationlayout.registereditems.md +26 -0
- package/docs/api/foundation-layout.foundationlayout.registeritem.md +42 -0
- package/docs/api/foundation-layout.foundationlayout.reloadbuffer.md +16 -0
- package/docs/api/foundation-layout.foundationlayoutcomponents.md +50 -0
- package/docs/api/foundation-layout.foundationlayoutitem.closable.md +16 -0
- package/docs/api/foundation-layout.foundationlayoutitem.md +35 -0
- package/docs/api/foundation-layout.foundationlayoutitem.registration.md +21 -0
- package/docs/api/foundation-layout.foundationlayoutitem.size.md +16 -0
- package/docs/api/foundation-layout.foundationlayoutitem.title.md +21 -0
- package/docs/api/foundation-layout.foundationlayoutregion.md +33 -0
- package/docs/api/foundation-layout.foundationlayoutregion.size.md +16 -0
- package/docs/api/foundation-layout.foundationlayoutregion.type.md +16 -0
- package/docs/api/foundation-layout.layoutemitevents.md +22 -0
- package/docs/api/foundation-layout.layoutreceiveevents.md +20 -0
- package/docs/api/foundation-layout.layoutreceiveeventsdetail.md +23 -0
- package/docs/api/foundation-layout.layoutregiontype.md +16 -0
- package/docs/api/foundation-layout.layoutregistrationerror._constructor_.md +23 -0
- package/docs/api/foundation-layout.layoutregistrationerror.md +23 -0
- package/docs/api/foundation-layout.layoutstyles.md +21 -0
- package/docs/api/foundation-layout.layouttemplate.md +21 -0
- package/docs/api/foundation-layout.layoutusageerror._constructor_.md +23 -0
- package/docs/api/foundation-layout.layoutusageerror.md +23 -0
- package/docs/api/foundation-layout.md +42 -0
- package/docs/api/foundation-layout.placement.md +18 -0
- package/docs/api/foundation-layout.registeredelementconfig.closable.md +14 -0
- package/docs/api/foundation-layout.registeredelementconfig.md +30 -0
- package/docs/api/foundation-layout.registeredelementconfig.registration.md +14 -0
- package/docs/api/foundation-layout.registeredelementconfig.size.md +14 -0
- package/docs/api/foundation-layout.registeredelementconfig.title.md +14 -0
- package/docs/api/foundation-layout.serialisedlayout.md +26 -0
- package/docs/api/index.md +12 -0
- package/docs/api-report.md +235 -0
- package/docs/img/foundation-layout-example.png +0 -0
- package/license.txt +46 -0
- package/package.json +80 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/errors/external-error.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/errors/internal-error.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/utils/i18n-strings.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/utils/style-constants.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/utils/types.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/utils/config-minifier.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/config/resolved-config.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/config/config.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/utils/utils.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/utils/event-emitter.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/container/component-container.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/controls/browser-popout.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/items/content-item.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/items/component-item.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/items/component-parentable-item.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/utils/drag-listener.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/controls/splitter.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/items/row-or-column.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/items/ground-item.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/controls/header-button.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/controls/tab.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/controls/tabs-container.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/controls/header.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/items/stack.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/controls/drag-proxy.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/controls/drag-source.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/controls/drop-target-indicator.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/controls/transition-indicator.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/utils/event-hub.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/layout-manager.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/virtual-layout.js","webpack://@genesislcap/foundation-layout/../node_modules/@genesis-community/golden-layout/dist/esm/ts/golden-layout.js"],"names":["ExternalError","Error","constructor","type","message","super","this","ConfigurationError","node","PopoutBlockedError","ApiError","BindError","InternalError","code","undefined","AssertError","UnreachableCaseError","variableValue","UnexpectedNullError","UnexpectedUndefinedError","I18nStrings","initialised","infosObject","PopoutCannotBeCreatedWithGroundItemConfig","id","default","PleaseRegisterAConstructorFunction","ComponentTypeNotRegisteredAndBindComponentEventHandlerNotAssigned","ComponentIsAlreadyRegistered","ComponentIsNotVirtuable","VirtualComponentDoesNotHaveRootHtmlElement","ItemConfigIsNotTypeComponent","InvalidNumberPartInSizeString","UnknownUnitInSizeString","UnsupportedUnitInSizeString","idCount","Object","keys","length","infos","values","checkInitialise","i","info","i18nStrings","Array","StyleConstants","WidthOrHeightPropertyName","Side","LogicalZIndex","defaultComponentBaseZIndex","defaultComponentDragZIndex","defaultComponentStackMaximisedZIndex","width","height","top","left","right","bottom","base","drag","stackMaximised","LogicalZIndexToDefaultMap","JsonValue","ItemType","ResponsiveMode","SizeUnitEnum","ConfigMinifier","ResolvedItemConfig","ResolvedHeaderedItemConfig","ResolvedStackItemConfig","ResolvedComponentItemConfig","ResolvedRowOrColumnItemConfig","ResolvedRootItemConfig","ResolvedGroundItemConfig","ResolvedLayoutConfig","ResolvedPopoutLayoutConfig","ItemConfig","HeaderedItemConfig","StackItemConfig","ComponentItemConfig","RowOrColumnItemConfig","RootItemConfig","LayoutConfig","PopoutLayoutConfig","numberToPixels","value","toString","pixelsToNumber","numberStr","replace","parseFloat","isDigit","char","setElementWidth","element","widthAsPixels","style","setElementHeight","heightAsPixels","getElementWidthAndHeight","offsetWidth","offsetHeight","setElementDisplayVisibility","visible","display","deepExtend","target","obj","key","hasOwnProperty","existingTarget","deepExtendValue","isArray","targetArray","valueObj","getUniqueId","Math","random","parseSize","sizeString","allowableSizeUnits","numericPart","digitsPart","firstNonNumericCharPart","firstNonDigitPart","trimStart","firstNonDigitPartIndex","gotDecimalPoint","substring","trim","splitStringAtFirstNonNumericChar","size","Number","parseInt","isNaN","sizeUnit","tryParse","includes","formatSize","format","formatUndefinableSize","isJsonObject","isJson","ground","row","column","stack","component","none","always","onload","Pixel","Percent","Fractional","Em","translateObject","from","minify","to","translatedKey","minifyKey","unminifyKey","fromValue","translateValue","translateArray","index","indexOfValue","minifyValue","substr","unminifyValue","indexOfKey","defaults","content","minSize","minSizeUnit","isClosable","createCopy","original","createDefault","isComponentItem","itemConfig","isStackItem","isGroundItem","Header","defaultMaximised","show","popout","close","maximise","minimise","tabDropdown","copyContent","count","result","defaultActiveItemIndex","maximised","activeItemIndex","header","defaultReorderEnabled","resolveComponentTypeName","componentType","reorderEnabled","title","componentState","copyComponentType","isChildItemConfig","config","isRootItemConfig","create","rootItemConfig","Settings","Dimensions","isPopout","constrainDragToContainer","popoutWholeStack","blockedPopoutsThrowError","closePopoutsOnUnload","responsiveMode","tabOverlapAllowance","reorderOnTabMenuClick","tabControlOffset","popInOnClose","borderWidth","borderGrabWidth","defaultMinItemHeight","defaultMinItemHeightUnit","defaultMinItemWidth","defaultMinItemWidthUnit","headerHeight","dragProxyWidth","dragProxyHeight","dock","root","openPopouts","dimensions","settings","resolved","copyOpenPopouts","minifyConfig","layoutConfig","unminifyConfig","minifiedConfig","Window","parentId","indexInParent","window","resolve","rowAndColumnChildLegacySizeDefault","JSON","stringify","resolveContent","resolveId","resolveSize","resolveMinSize","minWidth","minHeight","minWidthDefined","calculateSizeWidthHeightSpecificationType","isGround","isRow","isColumn","isStack","isComponent","legacyMaximisedId","hasHeaders","_a","resolveIdAndMaximised","legacyId","legacyMaximised","idx","findIndex","splice","childItemConfig","fromResolvedContent","resolvedContent","resolvedContentConfig","fromResolved","_b","resolvedConfig","_c","componentName","componentTypeToTitle","contentConfig","childItemConfigs","legacySizeDefault","widthOrHeightSpecifiedAtLeastOnce","sizeSpecifiedAtLeastOnce","sizeWidthHeightSpecificationType","resolvedChildItemConfig","fromResolvedOrUndefined","resolvedItemConfig","_d","_e","_f","_g","_h","_j","_k","resolveDefaultMinItemHeight","resolveDefaultMinItemWidth","resolvedDimensions","labels","_l","_m","showPopoutIcon","popin","showMaximiseIcon","showCloseIcon","resolveOpenPopouts","fromResolvedArray","isResolved","configOrResolvedConfig","popoutConfigs","resolvedArray","resolvedOpenPopoutCount","resolvedOpenPopout","resolvedWindow","popoutConfig","EventEmitter","_allEventSubscriptions","_subscriptionsMap","Map","unbind","removeEventListener","trigger","emit","tryBubbleEvent","name","args","eventName","subcriptions","get","slice","subscription","emitAllEvent","emitUnknown","subs","emitBaseBubblingEvent","event","BubblingEvent","emitUnknownBubblingEvent","callback","unknownCallback","removeUnknownEventListener","off","addEventListener","addUnknownEventListener","on","ALL_EVENT","push","subscriptions","set","removeSubscription","indexOf","allEventSubscriptionsCount","unknownArgs","unshift","allEventSubcriptions","headerClickEventName","headerTouchStartEventName","_name","_target","_isPropagationStopped","origin","isPropagationStopped","stopPropagation","ClickBubblingEvent","_mouseEvent","mouseEvent","TouchStartBubblingEvent","_touchEvent","touchEvent","ComponentContainer","_config","_parent","_layoutManager","_element","_updateItemConfigEvent","_showEvent","_hideEvent","_focusEvent","_blurEvent","_stackMaximised","_width","_height","_visible","_isShownWithZeroDimensions","_componentType","_isClosable","_initialState","_state","_boundComponent","layoutManager","bindComponent","updateElementPositionPropertyFromBoundComponent","parent","virtual","tab","_tab","isHidden","state","initialState","destroy","releaseComponent","stateRequestEvent","getElement","hide","focus","suppressEvent","blur","setSize","ancestorItem","ancestorChildItem","direction","currentSize","percentage","delta","contentItems","ancestorItemContentItem","updateSize","replaceComponent","virtualVisibilityChangeRequiredEvent","virtualRectingRequiredEvent","fireBeforeVirtualRectingEvent","fireAfterVirtualRectingEvent","setBaseLogicalZIndex","getState","extendState","extendedState","setState","setTitle","setTab","setVisibility","setSizeToNodeSize","emitShow","emitHide","setLogicalZIndex","logicalZIndex","_logicalZIndex","notifyVirtualZIndexChangeRequired","enterDragMode","exitDragMode","enterStackMaximised","exitStackMaximised","force","addVirtualSizedContainerToLayoutManager","checkShownFromZeroDimensions","notifyVirtualRectingRequired","virtualZIndexChangeRequiredEvent","defaultZIndex","position","beginVirtualSizedContainerAdding","addVirtualSizedContainer","endVirtualSizedContainerAdding","unbindComponent","BrowserPopout","_initialWindowSize","_isInitialised","_popoutWindow","createWindow","toConfig","glInstanceConfig","getGlInstance","saveLayout","screenX","screenLeft","screenY","screenTop","__glInstance","getWindow","closeWindow","e","popIn","parentItem","copiedRoot","groundItem","getItemsByPopInParentId","newContentItem","createAndInitContentItem","addChild","_onClose","url","createUrl","floor","features","serializeWindowFeatures","innerWidth","innerHeight","menubar","toolbar","location","personalbar","resizable","scrollbars","status","globalThis","open","positionWindow","passive","_checkReadyInterval","setInterval","checkReady","isInitialised","onInitialised","clearInterval","windowOptions","windowOptionsString","join","storageKey","localStorage","setItem","getErrorMessage","URL","href","searchParams","moveTo","setTimeout","ContentItem","_popInParentIds","_isDragged","_type","_id","_pendingEventPropagations","_throttledEvents","_contentItems","createContentItems","isDragged","b","popInParentIds","static","item","removeChild","contentItem","keepChild","suspendResize","setParent","init","replaceChild","oldChild","newChild","destroyOldChild","parentNode","remove","browserPopout","createPopoutFromContentItem","calculateConfigContent","highlightDropZone","x","y","area","dropTargetIndicator","highlightArea","onDrop","beginSizeInvalidation","endSizeInvalidation","getElementArea","rect","getBoundingClientRect","document","body","scrollTop","scrollLeft","x1","y1","x2","y2","surface","addPopInParentId","initContentItems","updateContentItemsSize","createContentItem","propagateEvent","scheduleEventPropagationToLayoutManager","requestAnimationFrame","propagateEventToLayoutManager","ComponentItem","_parentItem","createElement","_focused","_reorderEnabled","applyUpdatableConfig","_initialWantMaximise","containerElement","classList","add","appendChild","_container","handleUpdateItemConfigEvent","initialWantMaximise","container","headerConfig","_headerConfig","_title","focused","updateNodeSize","setActiveComponentItem","setFocused","setFocusedComponentItem","setBlurred","ComponentParentableItem","arguments","setFocusedValue","DragListener","_eElement","extraAllowableChildTargets","_pointerTracking","_pointerDownEventListener","ev","onPointerDown","_pointerMoveEventListener","onPointerMove","_pointerUpEventListener","onPointerUp","_timeout","_allowableTargets","_oDocument","_eBody","_nDelay","_nDistance","_nX","_nY","_nOriginalX","_nOriginalY","_dragging","checkRemovePointerTrackingEventListeners","cancelDrag","processDragStop","oEvent","isPrimary","coordinates","getPointerCoordinates","processPointerDown","startDrag","err","console","error","processDragMove","preventDefault","dragEvent","pageX","pageY","abs","clearTimeout","querySelector","setProperty","Splitter","_isVertical","_size","grabSize","_grabSize","dragHandleElement","handleExcessSize","handleExcessPos","_dragListener","RowOrColumn","_rowOrColumnParent","_splitter","_childElementContainer","_splitterSize","_splitterGrabSize","_isColumn","_dimension","_splitterPosition","_splitterMinPosition","_splitterMaxPosition","_configType","newComponent","newItem","addComponent","addItem","createdItem","checkMinimiseMaximisedStack","splitterElement","createSplitter","max","insertAdjacentElement","newItemSize","indexedContentItem","itemSize","splitterIndex","childItem","calculateRelativeSizes","setAbsoluteSizes","absoluteSizes","calculateAbsoluteSizes","additionalPixel","itemSizes","crossAxisSize","totalSplitterSize","elementWidth","elementHeight","totalSize","totalAssigned","total","itemsWithFractionalSize","totalFractionalSize","round","fractionalAllocatedSize","respectMinItemSize","minItemSize","calculateContentItemMinSize","totalOverMin","totalUnderMin","entriesOverMin","allEntries","entry","reducePercent","remainingSize","reducedSize","splitter","offsetX","offsetY","onSplitterDrag","onSplitterDragStop","onSplitterDragStart","getSplitItems","before","after","calculateContentItemsTotalMinSize","totalMinSize","items","beforeWidth","afterSize","beforeMinSize","afterMinSize","offset","min","offsetPixels","sizeBefore","sizeAfter","splitterPositionInRange","totalRelativeSize","getElementDimensionSize","dimension","getElementWidth","getElementHeight","setElementDimensionSize","GroundItem","_containerElement","prev","previousSibling","lastChild","Element","contains","insertBefore","loadRoot","clearRoot","rootContentItem","loadComponentAsRoot","createSideAreas","oppositeSides","Area","side","tabDropPlaceholder","sibling","rowOrColumn","validateDocking","getAllContentItems","deepGetAllContentItems","getConfigMaximisedItems","deepFilterContentItems","popInParentId","suppressFocusEvent","checkAcceptFtn","HeaderButton","_header","label","cssClass","_pushEvent","_clickEventListener","onClick","_touchStartEventListener","onTouchStart","controlsContainerElement","Tab","_componentItem","_closeEvent","_dragStartEvent","_isActive","_tabClickListener","onTabClickDown","_tabTouchStartListener","onTabTouchStart","_closeClickListener","onCloseClick","_closeTouchStartListener","onCloseTouchStart","_dragStartListener","onDragStart","_contentItemDestroyListener","onContentItemDestroy","_tabTitleChangedListener","_titleElement","_closeElement","enableReorder","isActive","componentItem","titleElement","closeElement","disableReorder","innerText","setActive","button","notifyFocus","notifyClose","TabsContainer","_componentRemoveEvent","_componentFocusEvent","_componentDragStartEvent","_dropdownActiveChangedEvent","_tabs","_lastVisibleTabIndex","_dropdownActive","_dropdownElement","tabs","tabCount","lastVisibleTabIndex","dropdownElement","dropdownActive","createTab","handleTabCloseEvent","handleTabFocusEvent","dragListener","handleTabDragStartEvent","childNodes","removeTab","processActiveComponentChanged","newActiveComponentItem","activeIndex","activeTab","j","updateTabSizes","availableWidth","activeComponentItem","dropDownActive","tryUpdateTabSizes","cumulativeTabWidth","tabOverlapAllowanceExceeded","tabElement","parentElement","tabMarginRight","getComputedStyle","marginRight","visibleTabWidth","activeTabMarginRight","zIndex","marginLeft","overlap","showAdditionalTabsDropdown","hideAdditionalTabsDropdown","_configClosable","_getActiveComponentItemEvent","closeEvent","_popoutEvent","_maximiseToggleEvent","_clickEvent","_touchStartEvent","_clickListener","_touchStartListener","_rowColumnClosable","_closeButton","_popoutButton","_tabsContainer","handleTabInitiatedComponentRemoveEvent","handleTabInitiatedComponentFocusEvent","handleTabInitiatedDragStartEvent","processTabDropdownActiveChanged","_show","_popoutEnabled","popoutEnabled","_popoutLabel","popoutLabel","_maximiseEnabled","maximiseEnabled","_maximiseLabel","maximiseLabel","_minimiseEnabled","minimiseEnabled","_minimiseLabel","minimiseLabel","_closeEnabled","closeEnabled","_closeLabel","closeLabel","_tabDropdownEnabled","tabDropdownEnabled","_tabDropdownLabel","tabDropdownLabel","setSide","_canRemoveComponent","_controlsContainerElement","_documentMouseUpListener","_tabControlOffset","_tabDropdownButton","handleButtonPopoutEvent","_maximiseButton","handleButtonMaximiseToggleEvent","tryDispatchEventToParent","_side","leftRightSided","_leftRightSided","tabsContainerElement","setRowColumnClosable","updateClosability","len","applyFocusedValue","processMaximised","setAttribute","processMinimised","notifyClick","notifyTouchStart","Stack","_o","_p","_q","_r","_s","_t","_u","_headerSideChanged","_resizeListener","handleResize","_maximisedListener","handleMaximised","_minimisedListener","handleMinimised","layoutHeaderConfig","configContent","componentHeaderConfig","_initialActiveItemIndex","_maximisedEnabled","headerSettings","getActiveComponentItem","handlePopoutEvent","toggleMaximise","handleHeaderClickEvent","handleHeaderTouchStartEvent","handleHeaderComponentRemoveEvent","handleHeaderComponentFocusEvent","handleHeaderComponentStartDragEvent","setupHeaderPosition","childElementContainer","headerShow","headerSide","headerLeftRightSided","contentAreaDimensions","_contentAreaDimensions","isMaximised","maximisedStack","stackParent","contentItemCount","setActiveContentItem","_activeComponentItem","emitStateChangedEvent","getActiveContentItem","focusActiveContentItem","stackWillBeDeleted","newActiveComponentIdx","setMaximisedStack","createHeaderConfig","_dropSegment","resetHeaderDropZone","_dropIndex","isVertical","isHorizontal","hasCorrectParent","segment","hoverArea","highlightHeaderDropZone","highlightBodyDropZone","getArea","headerArea","contentArea","contentWidth","contentHeight","positionHeader","visibleTabsLength","tabsContainerElementChildNodes","visibleTabElements","tabIndex","visibleTabElement","headerRect","headerTop","headerLeft","tabTop","tabLeft","tabWidth","isAboveTab","tabRect","tabRectTop","tabRectLeft","tabDropPlaceholderRect","tabDropPlaceholderRectTop","tabDropPlaceholderRectLeft","tabDropPlaceholderRectWidth","placeHolderTop","clientHeight","bubblingEvent","startComponentDrag","DragProxy","_originalParent","_area","_lastValidArea","onDrag","dispatchEventToParent","createDragProxyElements","_componentItemFocused","setDimensions","determineMinMaxXY","calculateItemAreas","setDropPosition","dispatchEvent","Event","initialX","initialY","headerElement","tabsElement","_proxyContainerElement","_sided","insertAdjacentText","_minX","_minY","_maxX","_maxY","ceil","droppedComponentItem","DragSource","_extraAllowableChildTargets","_componentTypeOrFtn","_componentState","_dummyGroundContainer","dummyRootItemConfig","_dummyGroundContentItem","createDragListener","removeDragListener","onDragStop","dragSourceItemConfig","ftnDragSourceItemConfig","isDragSourceComponentItemConfig","dragProxy","transitionIndicator","transitionElements","DropTargetIndicator","innerElement","margin","TransitionIndicator","_toElement","_fromDimensions","_totalAnimationDuration","_animationStartTime","fromElement","toElement","nextAnimationFrame","measure","EventHub","_childEventListener","childEvent","onEventFromChild","ChildEventName","emitUserBroadcast","handleUserBroadcastEvent","isSubWindow","propagateToParent","propagateToThisAndSubtree","detail","eventInit","bubbles","cancelable","CustomEvent","opener","childGl","eventHub","LayoutManager","parameters","resizeWithContainerAutomatically","resizeDebounceInterval","resizeDebounceExtendedWhenPossible","_groundItem","_openPopouts","_dropTargetIndicator","_transitionIndicator","_itemAreas","_maximisePlaceholder","createMaximisePlaceElement","_tabDropPlaceholder","createTabDropPlaceholderElement","_dragSources","_updatingColumnsResponsive","_firstLoad","_eventHub","_virtualSizedContainers","_virtualSizedContainerAddingBeginCount","_sizeInvalidationBeginCount","_resizeObserver","ResizeObserver","handleContainerResize","_windowBeforeUnloadListener","onBeforeUnload","_windowBeforeUnloadListening","_maximisedStackBeforeDestroyedListener","cleanupBeforeMaximisedStackDestroyed","_constructorOrSubWindowLayoutConfig","constructorOrSubWindowLayoutConfig","rootItem","focusedComponentItem","_focusedComponentItem","_maximisedStack","deprecatedConstructor","closeAllOpenPopouts","disconnect","checkClearResizeTimeout","dragSource","subWindowRootConfig","setContainer","updateSizeFromContainer","resolvedLayoutConfig","assign","checkLoadedLayoutMaximiseItem","observe","adjustColumnsResponsive","loadLayout","createSubWindows","groundContent","reconcilePopoutWindows","clear","newComponentAtLocation","locationSelectors","addComponentAtLocation","addItemAtLocation","newItemAtLocation","defaultLocationSelectors","findFirstLocation","addIdx","updateRootSize","createContentItemFromConfig","findFirstComponentItemById","findFirstContentItemTypeByIdRecursive","createPopout","itemConfigOrContentItem","positionAndSize","createPopoutFromItemConfig","child","windowLeft","windowTop","offsetLeft","offsetTop","beforeVirtualRectingEvent","afterVirtualRectingEvent","popoutLayoutConfig","createPopoutFromPopoutLayoutConfig","configWindow","initialWindow","newDragSource","componentTypeOrItemConfigCallback","removeDragSource","array","removeFromArray","focusComponent","clearComponentFocus","suppressEvents","newFocusedParentItem","oldFocusedItem","oldFocusedParentItem","processMinimiseMaximisedStack","processMaximiseStack","matchingArea","smallestSurface","Infinity","allContentItems","stackContentAreaDimensions","groundArea","configMaximisedItems","prepend","closed","processResizeWithDebounce","_resizeTimeoutId","bodyElement","documentElement","padding","overflow","useResponsiveLayout","columnCount","minItemWidth","stackColumnCount","allStacks","getAllStacks","firstStackContainer","addChildContentItemsToContainer","alwaysResponsiveMode","onLoadResponsiveModeAndFirst","stacks","findAllStacksRecursive","findFirstContentItemType","findFirstContentItemTypeRecursive","foundContentItem","selectors","selector","findLocation","selectorIndex","typeId","parentContentItems","parentContentItemCount","tryCreateLocationFromParentItem","groundContentItems","afterFocusedItemIfPossibleLocationSelectors","VirtualLayout","configOrOptionalContainer","containerOrBindComponentEventHandler","unbindComponentEventHandler","skipInit","createLayoutManagerConstructorParameters","_bindComponentEventHanlderPassedInConstructor","_creationTimeoutPassed","bindComponentEvent","unbindComponentEvent","readyState","clearHtmlAndAdjustStylesForSubWindow","headElement","head","appendNodeLists","querySelectorAll","listIdx","appendNodeList","nodeIdx","innerHTML","visibility","checkAddDefaultPopinButton","popInButtonElement","iconElement","bgElement","getComponentEvent","releaseComponentEvent","subWindowChecked","windowConfigKey","windowConfigStr","getItem","removeItem","minifiedWindowConfig","parse","HTMLElement","GoldenLayout","_componentTypesMap","_registeredComponentMap","_virtuableComponentMap","_containerVirtualRectingRequiredEventListener","handleContainerVirtualRectingRequiredEvent","_containerVirtualVisibilityChangeRequiredEventListener","handleContainerVirtualVisibilityChangeRequiredEvent","_containerVirtualZIndexChangeRequiredEventListener","handleContainerVirtualZIndexChangeRequiredEvent","registerComponent","componentConstructorOrFactoryFtn","componentConstructor","registerComponentConstructor","componentFactoryFtn","registerComponentFactoryFunction","typeName","factoryFunction","componentFactoryFunction","registerComponentFunction","registerGetComponentConstructorCallback","_getComponentConstructorFtn","warn","getRegisteredComponentTypeNames","typeNamesIterableIterator","getComponentInstantiator","instantiator","virtuableComponent","componentRootElement","rootHtmlElement","absolutePosition","ensureElementPositionAbsolute","delete","_goldenLayoutBoundingClientRect","rootElement","containerBoundingClientRect"],"mappings":"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","file":"npm.genesis-community.248.xxxxxxxxxxxxxxxxxxxx.js","sourcesContent":["/** @public */\nexport class ExternalError extends Error {\n /** @internal */\n constructor(type, message) {\n super(message);\n this.type = type;\n }\n}\n/** @public */\nexport class ConfigurationError extends ExternalError {\n /** @internal */\n constructor(message, node) {\n super('Configuration', message);\n this.node = node;\n }\n}\n/** @public */\nexport class PopoutBlockedError extends ExternalError {\n /** @internal */\n constructor(message) {\n super('PopoutBlocked', message);\n }\n}\n/** @public */\nexport class ApiError extends ExternalError {\n /** @internal */\n constructor(message) {\n super('API', message);\n }\n}\n/** @public */\nexport class BindError extends ExternalError {\n /** @internal */\n constructor(message) {\n super('Bind', message);\n }\n}\n//# sourceMappingURL=external-error.js.map","/** @internal */\nclass InternalError extends Error {\n constructor(type, code, message) {\n super(`${type}: ${code}${message === undefined ? '' : ': ' + message}`);\n }\n}\n/** @internal */\nexport class AssertError extends InternalError {\n constructor(code, message) {\n super('Assert', code, message);\n }\n}\n/** @internal */\nexport class UnreachableCaseError extends InternalError {\n constructor(code, variableValue, message) {\n super('UnreachableCase', code, `${variableValue}${message === undefined ? '' : ': ' + message}`);\n }\n}\n/** @internal */\nexport class UnexpectedNullError extends InternalError {\n constructor(code, message) {\n super('UnexpectedNull', code, message);\n }\n}\n/** @internal */\nexport class UnexpectedUndefinedError extends InternalError {\n constructor(code, message) {\n super('UnexpectedUndefined', code, message);\n }\n}\n//# sourceMappingURL=internal-error.js.map","import { AssertError } from '../errors/internal-error';\n/** @public */\nexport var I18nStrings;\n(function (I18nStrings) {\n /** @internal */\n let initialised = false;\n /** @internal */\n const infosObject = {\n PopoutCannotBeCreatedWithGroundItemConfig: {\n id: 0 /* I18nStringId.PopoutCannotBeCreatedWithGroundItemConfig */,\n default: 'Popout cannot be created with ground ItemConfig'\n },\n PleaseRegisterAConstructorFunction: {\n id: 1 /* I18nStringId.PleaseRegisterAConstructorFunction */,\n default: 'Please register a constructor function'\n },\n ComponentTypeNotRegisteredAndBindComponentEventHandlerNotAssigned: {\n id: 2 /* I18nStringId.ComponentTypeNotRegisteredAndBindComponentEventHandlerNotAssigned */,\n default: 'Component type not registered and BindComponentEvent handler not assigned',\n },\n ComponentIsAlreadyRegistered: {\n id: 3 /* I18nStringId.ComponentIsAlreadyRegistered */,\n default: 'Component is already registered',\n },\n ComponentIsNotVirtuable: {\n id: 4 /* I18nStringId.ComponentIsNotVirtuable */,\n default: 'Component is not virtuable. Requires rootHtmlElement field/getter',\n },\n VirtualComponentDoesNotHaveRootHtmlElement: {\n id: 5 /* I18nStringId.VirtualComponentDoesNotHaveRootHtmlElement */,\n default: 'Virtual component does not have getter \"rootHtmlElement\"',\n },\n ItemConfigIsNotTypeComponent: {\n id: 6 /* I18nStringId.ItemConfigIsNotTypeComponent */,\n default: 'ItemConfig is not of type component',\n },\n InvalidNumberPartInSizeString: {\n id: 7 /* I18nStringId.InvalidNumberPartInSizeString */,\n default: 'Invalid number part in size string',\n },\n UnknownUnitInSizeString: {\n id: 8 /* I18nStringId.UnknownUnitInSizeString */,\n default: 'Unknown unit in size string',\n },\n UnsupportedUnitInSizeString: {\n id: 9 /* I18nStringId.UnsupportedUnitInSizeString */,\n default: 'Unsupported unit in size string',\n },\n };\n I18nStrings.idCount = Object.keys(infosObject).length;\n /** @internal */\n const infos = Object.values(infosObject);\n function checkInitialise() {\n if (!initialised) {\n for (let i = 0; i < I18nStrings.idCount; i++) {\n const info = infos[i];\n if (info.id !== i) {\n throw new AssertError('INSI00110', `${i}: ${info.id}`);\n }\n else {\n i18nStrings[i] = info.default;\n }\n }\n }\n initialised = true;\n }\n I18nStrings.checkInitialise = checkInitialise;\n})(I18nStrings || (I18nStrings = {}));\n/** @public */\nexport const i18nStrings = new Array(I18nStrings.idCount);\n//# sourceMappingURL=i18n-strings.js.map","/** @public */\nexport var StyleConstants;\n(function (StyleConstants) {\n StyleConstants.defaultComponentBaseZIndex = 'auto';\n StyleConstants.defaultComponentDragZIndex = '32';\n StyleConstants.defaultComponentStackMaximisedZIndex = '41';\n})(StyleConstants || (StyleConstants = {}));\n//# sourceMappingURL=style-constants.js.map","import { UnreachableCaseError } from '../errors/internal-error';\nimport { StyleConstants } from './style-constants';\n/** @internal */\nexport var WidthOrHeightPropertyName;\n(function (WidthOrHeightPropertyName) {\n WidthOrHeightPropertyName.width = 'width';\n WidthOrHeightPropertyName.height = 'height';\n})(WidthOrHeightPropertyName || (WidthOrHeightPropertyName = {}));\n/** @public */\nexport var Side;\n(function (Side) {\n Side.top = 'top';\n Side.left = 'left';\n Side.right = 'right';\n Side.bottom = 'bottom';\n})(Side || (Side = {}));\n/** @public */\nexport var LogicalZIndex;\n(function (LogicalZIndex) {\n LogicalZIndex.base = 'base';\n LogicalZIndex.drag = 'drag';\n LogicalZIndex.stackMaximised = 'stackMaximised';\n})(LogicalZIndex || (LogicalZIndex = {}));\n/** @public */\nexport const LogicalZIndexToDefaultMap = {\n base: StyleConstants.defaultComponentBaseZIndex,\n drag: StyleConstants.defaultComponentDragZIndex,\n stackMaximised: StyleConstants.defaultComponentStackMaximisedZIndex,\n};\n/** @public */\nexport var JsonValue;\n(function (JsonValue) {\n function isJson(value) {\n return isJsonObject(value);\n }\n JsonValue.isJson = isJson;\n // eslint-disable-next-line @typescript-eslint/ban-types\n function isJsonObject(value) {\n return !Array.isArray(value) && value !== null && typeof value === 'object';\n }\n JsonValue.isJsonObject = isJsonObject;\n})(JsonValue || (JsonValue = {}));\n/** @public */\nexport var ItemType;\n(function (ItemType) {\n ItemType.ground = 'ground';\n ItemType.row = 'row';\n ItemType.column = 'column';\n ItemType.stack = 'stack';\n ItemType.component = 'component';\n})(ItemType || (ItemType = {}));\n/** @public */\nexport var ResponsiveMode;\n(function (ResponsiveMode) {\n ResponsiveMode.none = 'none';\n ResponsiveMode.always = 'always';\n ResponsiveMode.onload = 'onload';\n})(ResponsiveMode || (ResponsiveMode = {}));\n/** @public */\nexport var SizeUnitEnum;\n(function (SizeUnitEnum) {\n SizeUnitEnum[\"Pixel\"] = \"px\";\n SizeUnitEnum[\"Percent\"] = \"%\";\n SizeUnitEnum[\"Fractional\"] = \"fr\";\n SizeUnitEnum[\"Em\"] = \"em\";\n})(SizeUnitEnum || (SizeUnitEnum = {}));\n/** @public */\n(function (SizeUnitEnum) {\n function tryParse(value) {\n switch (value) {\n case SizeUnitEnum.Pixel: return SizeUnitEnum.Pixel;\n case SizeUnitEnum.Percent: return SizeUnitEnum.Percent;\n case SizeUnitEnum.Fractional: return SizeUnitEnum.Fractional;\n case SizeUnitEnum.Em: return SizeUnitEnum.Em;\n default: return undefined;\n }\n }\n SizeUnitEnum.tryParse = tryParse;\n function format(value) {\n switch (value) {\n case SizeUnitEnum.Pixel: return SizeUnitEnum.Pixel;\n case SizeUnitEnum.Percent: return SizeUnitEnum.Percent;\n case SizeUnitEnum.Fractional: return SizeUnitEnum.Fractional;\n case SizeUnitEnum.Em: return SizeUnitEnum.Em;\n default:\n throw new UnreachableCaseError('SUEF44998', value);\n }\n }\n SizeUnitEnum.format = format;\n})(SizeUnitEnum || (SizeUnitEnum = {}));\n//# sourceMappingURL=types.js.map","/**\n * Minifies and unminifies configs by replacing frequent keys\n * and values with one letter substitutes. Config options must\n * retain array position/index, add new options at the end.\n * @internal\n*/\nexport var ConfigMinifier;\n(function (ConfigMinifier) {\n const keys = [\n 'settings',\n 'hasHeaders',\n 'constrainDragToContainer',\n 'selectionEnabled',\n 'dimensions',\n 'borderWidth',\n 'minItemHeight',\n 'minItemWidth',\n 'headerHeight',\n 'dragProxyWidth',\n 'dragProxyHeight',\n 'labels',\n 'close',\n 'maximise',\n 'minimise',\n 'popout',\n 'content',\n 'componentType',\n 'componentState',\n 'id',\n 'width',\n 'type',\n 'height',\n 'isClosable',\n 'title',\n 'popoutWholeStack',\n 'openPopouts',\n 'parentId',\n 'activeItemIndex',\n 'reorderEnabled',\n 'borderGrabWidth',\n //Maximum 36 entries, do not cross this line!\n ];\n const values = [\n true,\n false,\n 'row',\n 'column',\n 'stack',\n 'component',\n 'close',\n 'maximise',\n 'minimise',\n 'open in new window'\n ];\n function checkInitialise() {\n if (keys.length > 36) {\n throw new Error('Too many keys in config minifier map');\n }\n }\n ConfigMinifier.checkInitialise = checkInitialise;\n function translateObject(from, minify) {\n const to = {};\n for (const key in from) {\n if (from.hasOwnProperty(key)) { // In case something has extended Object prototypes\n let translatedKey;\n if (minify) {\n translatedKey = minifyKey(key);\n }\n else {\n translatedKey = unminifyKey(key);\n }\n const fromValue = from[key];\n to[translatedKey] = translateValue(fromValue, minify);\n }\n }\n return to;\n }\n ConfigMinifier.translateObject = translateObject;\n function translateArray(from, minify) {\n const length = from.length;\n const to = new Array(length);\n for (let i = 0; i < length; i++) {\n // In original code, array indices were numbers and not translated\n const fromValue = from[i];\n to[i] = translateValue(fromValue, minify);\n }\n return to;\n }\n function translateValue(from, minify) {\n if (typeof from === 'object') {\n if (from === null) {\n return null;\n }\n else {\n if (Array.isArray(from)) {\n return translateArray(from, minify);\n }\n else {\n return translateObject(from, minify);\n }\n }\n }\n else {\n if (minify) {\n return minifyValue(from);\n }\n else {\n return unminifyValue(from);\n }\n }\n }\n function minifyKey(value) {\n /**\n * If a value actually is a single character, prefix it\n * with ___ to avoid mistaking it for a minification code\n */\n if (typeof value === 'string' && value.length === 1) {\n return '___' + value;\n }\n const index = indexOfKey(value);\n /**\n * value not found in the dictionary, return it unmodified\n */\n if (index === -1) {\n return value;\n /**\n * value found in dictionary, return its base36 counterpart\n */\n }\n else {\n return index.toString(36);\n }\n }\n function unminifyKey(key) {\n /**\n * value is a single character. Assume that it's a translation\n * and return the original value from the dictionary\n */\n if (key.length === 1) {\n return keys[parseInt(key, 36)];\n }\n /**\n * value originally was a single character and was prefixed with ___\n * to avoid mistaking it for a translation. Remove the prefix\n * and return the original character\n */\n if (key.substr(0, 3) === '___') {\n return key[3];\n }\n /**\n * value was not minified\n */\n return key;\n }\n function minifyValue(value) {\n /**\n * If a value actually is a single character, prefix it\n * with ___ to avoid mistaking it for a minification code\n */\n if (typeof value === 'string' && value.length === 1) {\n return '___' + value;\n }\n const index = indexOfValue(value);\n /**\n * value not found in the dictionary, return it unmodified\n */\n if (index === -1) {\n return value;\n /**\n * value found in dictionary, return its base36 counterpart\n */\n }\n else {\n return index.toString(36);\n }\n }\n function unminifyValue(value) {\n /**\n * value is a single character. Assume that it's a translation\n * and return the original value from the dictionary\n */\n if (typeof value === 'string' && value.length === 1) {\n return values[parseInt(value, 36)];\n }\n /**\n * value originally was a single character and was prefixed with ___\n * to avoid mistaking it for a translation. Remove the prefix\n * and return the original character\n */\n if (typeof value === 'string' && value.substr(0, 3) === '___') {\n return value[3];\n }\n /**\n * value was not minified\n */\n return value;\n }\n function indexOfKey(key) {\n for (let i = 0; i < keys.length; i++) {\n if (keys[i] === key) {\n return i;\n }\n }\n return -1;\n }\n function indexOfValue(value) {\n for (let i = 0; i < values.length; i++) {\n if (values[i] === value) {\n return i;\n }\n }\n return -1;\n }\n})(ConfigMinifier || (ConfigMinifier = {}));\n//# sourceMappingURL=config-minifier.js.map","import { AssertError, UnreachableCaseError } from '../errors/internal-error';\nimport { ConfigMinifier } from '../utils/config-minifier';\nimport { ItemType, ResponsiveMode, Side, SizeUnitEnum } from '../utils/types';\nimport { deepExtendValue } from '../utils/utils';\n/** @public */\nexport var ResolvedItemConfig;\n(function (ResolvedItemConfig) {\n ResolvedItemConfig.defaults = {\n type: ItemType.ground,\n content: [],\n size: 1,\n sizeUnit: SizeUnitEnum.Fractional,\n minSize: undefined,\n minSizeUnit: SizeUnitEnum.Pixel,\n id: '',\n isClosable: true,\n };\n /** Creates a copy of the original ResolvedItemConfig using an alternative content if specified */\n function createCopy(original, content) {\n switch (original.type) {\n case ItemType.ground:\n case ItemType.row:\n case ItemType.column:\n return ResolvedRowOrColumnItemConfig.createCopy(original, content);\n case ItemType.stack:\n return ResolvedStackItemConfig.createCopy(original, content);\n case ItemType.component:\n return ResolvedComponentItemConfig.createCopy(original);\n default:\n throw new UnreachableCaseError('CICC91354', original.type, 'Invalid Config Item type specified');\n }\n }\n ResolvedItemConfig.createCopy = createCopy;\n function createDefault(type) {\n switch (type) {\n case ItemType.ground:\n throw new AssertError('CICCDR91562'); // Get default root from LayoutConfig\n case ItemType.row:\n case ItemType.column:\n return ResolvedRowOrColumnItemConfig.createDefault(type);\n case ItemType.stack:\n return ResolvedStackItemConfig.createDefault();\n case ItemType.component:\n return ResolvedComponentItemConfig.createDefault();\n default:\n throw new UnreachableCaseError('CICCDD91563', type, 'Invalid Config Item type specified');\n }\n }\n ResolvedItemConfig.createDefault = createDefault;\n function isComponentItem(itemConfig) {\n return itemConfig.type === ItemType.component;\n }\n ResolvedItemConfig.isComponentItem = isComponentItem;\n function isStackItem(itemConfig) {\n return itemConfig.type === ItemType.stack;\n }\n ResolvedItemConfig.isStackItem = isStackItem;\n /** @internal */\n function isGroundItem(itemConfig) {\n return itemConfig.type === ItemType.ground;\n }\n ResolvedItemConfig.isGroundItem = isGroundItem;\n})(ResolvedItemConfig || (ResolvedItemConfig = {}));\n/** @public */\nexport var ResolvedHeaderedItemConfig;\n(function (ResolvedHeaderedItemConfig) {\n ResolvedHeaderedItemConfig.defaultMaximised = false;\n let Header;\n (function (Header) {\n function createCopy(original, show) {\n if (original === undefined) {\n return undefined;\n }\n else {\n return {\n show: show !== null && show !== void 0 ? show : original.show,\n popout: original.popout,\n close: original.close,\n maximise: original.maximise,\n minimise: original.minimise,\n tabDropdown: original.tabDropdown,\n };\n }\n }\n Header.createCopy = createCopy;\n })(Header = ResolvedHeaderedItemConfig.Header || (ResolvedHeaderedItemConfig.Header = {}));\n})(ResolvedHeaderedItemConfig || (ResolvedHeaderedItemConfig = {}));\n/** @public */\nexport var ResolvedStackItemConfig;\n(function (ResolvedStackItemConfig) {\n ResolvedStackItemConfig.defaultActiveItemIndex = 0;\n function createCopy(original, content) {\n const result = {\n type: original.type,\n content: content !== undefined ? copyContent(content) : copyContent(original.content),\n size: original.size,\n sizeUnit: original.sizeUnit,\n minSize: original.minSize,\n minSizeUnit: original.minSizeUnit,\n id: original.id,\n maximised: original.maximised,\n isClosable: original.isClosable,\n activeItemIndex: original.activeItemIndex,\n header: ResolvedHeaderedItemConfig.Header.createCopy(original.header),\n };\n return result;\n }\n ResolvedStackItemConfig.createCopy = createCopy;\n function copyContent(original) {\n const count = original.length;\n const result = new Array(count);\n for (let i = 0; i < count; i++) {\n result[i] = ResolvedItemConfig.createCopy(original[i]);\n }\n return result;\n }\n ResolvedStackItemConfig.copyContent = copyContent;\n function createDefault() {\n const result = {\n type: ItemType.stack,\n content: [],\n size: ResolvedItemConfig.defaults.size,\n sizeUnit: ResolvedItemConfig.defaults.sizeUnit,\n minSize: ResolvedItemConfig.defaults.minSize,\n minSizeUnit: ResolvedItemConfig.defaults.minSizeUnit,\n id: ResolvedItemConfig.defaults.id,\n maximised: ResolvedHeaderedItemConfig.defaultMaximised,\n isClosable: ResolvedItemConfig.defaults.isClosable,\n activeItemIndex: ResolvedStackItemConfig.defaultActiveItemIndex,\n header: undefined,\n };\n return result;\n }\n ResolvedStackItemConfig.createDefault = createDefault;\n})(ResolvedStackItemConfig || (ResolvedStackItemConfig = {}));\n/** @public */\nexport var ResolvedComponentItemConfig;\n(function (ResolvedComponentItemConfig) {\n ResolvedComponentItemConfig.defaultReorderEnabled = true;\n function resolveComponentTypeName(itemConfig) {\n const componentType = itemConfig.componentType;\n if (typeof componentType === 'string') {\n return componentType;\n }\n else {\n return undefined;\n }\n }\n ResolvedComponentItemConfig.resolveComponentTypeName = resolveComponentTypeName;\n function createCopy(original) {\n const result = {\n type: original.type,\n content: [],\n size: original.size,\n sizeUnit: original.sizeUnit,\n minSize: original.minSize,\n minSizeUnit: original.minSizeUnit,\n id: original.id,\n maximised: original.maximised,\n isClosable: original.isClosable,\n reorderEnabled: original.reorderEnabled,\n title: original.title,\n header: ResolvedHeaderedItemConfig.Header.createCopy(original.header),\n componentType: original.componentType,\n componentState: deepExtendValue(undefined, original.componentState),\n };\n return result;\n }\n ResolvedComponentItemConfig.createCopy = createCopy;\n function createDefault(componentType = '', componentState, title = '') {\n const result = {\n type: ItemType.component,\n content: [],\n size: ResolvedItemConfig.defaults.size,\n sizeUnit: ResolvedItemConfig.defaults.sizeUnit,\n minSize: ResolvedItemConfig.defaults.minSize,\n minSizeUnit: ResolvedItemConfig.defaults.minSizeUnit,\n id: ResolvedItemConfig.defaults.id,\n maximised: ResolvedHeaderedItemConfig.defaultMaximised,\n isClosable: ResolvedItemConfig.defaults.isClosable,\n reorderEnabled: ResolvedComponentItemConfig.defaultReorderEnabled,\n title,\n header: undefined,\n componentType,\n componentState,\n };\n return result;\n }\n ResolvedComponentItemConfig.createDefault = createDefault;\n function copyComponentType(componentType) {\n return deepExtendValue({}, componentType);\n }\n ResolvedComponentItemConfig.copyComponentType = copyComponentType;\n})(ResolvedComponentItemConfig || (ResolvedComponentItemConfig = {}));\n/** @public */\nexport var ResolvedRowOrColumnItemConfig;\n(function (ResolvedRowOrColumnItemConfig) {\n function isChildItemConfig(itemConfig) {\n switch (itemConfig.type) {\n case ItemType.row:\n case ItemType.column:\n case ItemType.stack:\n case ItemType.component:\n return true;\n case ItemType.ground:\n return false;\n default:\n throw new UnreachableCaseError('CROCOSPCICIC13687', itemConfig.type);\n }\n }\n ResolvedRowOrColumnItemConfig.isChildItemConfig = isChildItemConfig;\n function createCopy(original, content) {\n const result = {\n type: original.type,\n content: content !== undefined ? copyContent(content) : copyContent(original.content),\n size: original.size,\n sizeUnit: original.sizeUnit,\n minSize: original.minSize,\n minSizeUnit: original.minSizeUnit,\n id: original.id,\n isClosable: original.isClosable,\n };\n return result;\n }\n ResolvedRowOrColumnItemConfig.createCopy = createCopy;\n function copyContent(original) {\n const count = original.length;\n const result = new Array(count);\n for (let i = 0; i < count; i++) {\n result[i] = ResolvedItemConfig.createCopy(original[i]);\n }\n return result;\n }\n ResolvedRowOrColumnItemConfig.copyContent = copyContent;\n function createDefault(type) {\n const result = {\n type,\n content: [],\n size: ResolvedItemConfig.defaults.size,\n sizeUnit: ResolvedItemConfig.defaults.sizeUnit,\n minSize: ResolvedItemConfig.defaults.minSize,\n minSizeUnit: ResolvedItemConfig.defaults.minSizeUnit,\n id: ResolvedItemConfig.defaults.id,\n isClosable: ResolvedItemConfig.defaults.isClosable,\n };\n return result;\n }\n ResolvedRowOrColumnItemConfig.createDefault = createDefault;\n})(ResolvedRowOrColumnItemConfig || (ResolvedRowOrColumnItemConfig = {}));\n/** @public */\nexport var ResolvedRootItemConfig;\n(function (ResolvedRootItemConfig) {\n function createCopy(config) {\n return ResolvedItemConfig.createCopy(config);\n }\n ResolvedRootItemConfig.createCopy = createCopy;\n function isRootItemConfig(itemConfig) {\n switch (itemConfig.type) {\n case ItemType.row:\n case ItemType.column:\n case ItemType.stack:\n case ItemType.component:\n return true;\n case ItemType.ground:\n return false;\n default:\n throw new UnreachableCaseError('CROCOSPCICIC13687', itemConfig.type);\n }\n }\n ResolvedRootItemConfig.isRootItemConfig = isRootItemConfig;\n})(ResolvedRootItemConfig || (ResolvedRootItemConfig = {}));\n/** @internal */\nexport var ResolvedGroundItemConfig;\n(function (ResolvedGroundItemConfig) {\n function create(rootItemConfig) {\n const content = rootItemConfig === undefined ? [] : [rootItemConfig];\n return {\n type: ItemType.ground,\n content,\n size: 100,\n sizeUnit: SizeUnitEnum.Percent,\n minSize: 0,\n minSizeUnit: SizeUnitEnum.Pixel,\n id: '',\n isClosable: false,\n title: '',\n reorderEnabled: false,\n };\n }\n ResolvedGroundItemConfig.create = create;\n})(ResolvedGroundItemConfig || (ResolvedGroundItemConfig = {}));\n/** @public */\nexport var ResolvedLayoutConfig;\n(function (ResolvedLayoutConfig) {\n let Settings;\n (function (Settings) {\n Settings.defaults = {\n constrainDragToContainer: true,\n reorderEnabled: true,\n popoutWholeStack: false,\n blockedPopoutsThrowError: true,\n closePopoutsOnUnload: true,\n responsiveMode: ResponsiveMode.none,\n tabOverlapAllowance: 0,\n reorderOnTabMenuClick: true,\n tabControlOffset: 10,\n popInOnClose: false,\n };\n function createCopy(original) {\n return {\n constrainDragToContainer: original.constrainDragToContainer,\n reorderEnabled: original.reorderEnabled,\n popoutWholeStack: original.popoutWholeStack,\n blockedPopoutsThrowError: original.blockedPopoutsThrowError,\n closePopoutsOnUnload: original.closePopoutsOnUnload,\n responsiveMode: original.responsiveMode,\n tabOverlapAllowance: original.tabOverlapAllowance,\n reorderOnTabMenuClick: original.reorderOnTabMenuClick,\n tabControlOffset: original.tabControlOffset,\n popInOnClose: original.popInOnClose,\n };\n }\n Settings.createCopy = createCopy;\n })(Settings = ResolvedLayoutConfig.Settings || (ResolvedLayoutConfig.Settings = {}));\n let Dimensions;\n (function (Dimensions) {\n function createCopy(original) {\n return {\n borderWidth: original.borderWidth,\n borderGrabWidth: original.borderGrabWidth,\n defaultMinItemHeight: original.defaultMinItemHeight,\n defaultMinItemHeightUnit: original.defaultMinItemHeightUnit,\n defaultMinItemWidth: original.defaultMinItemWidth,\n defaultMinItemWidthUnit: original.defaultMinItemWidthUnit,\n headerHeight: original.headerHeight,\n dragProxyWidth: original.dragProxyWidth,\n dragProxyHeight: original.dragProxyHeight,\n };\n }\n Dimensions.createCopy = createCopy;\n Dimensions.defaults = {\n borderWidth: 5,\n borderGrabWidth: 5,\n defaultMinItemHeight: 0,\n defaultMinItemHeightUnit: SizeUnitEnum.Pixel,\n defaultMinItemWidth: 10,\n defaultMinItemWidthUnit: SizeUnitEnum.Pixel,\n headerHeight: 20,\n dragProxyWidth: 300,\n dragProxyHeight: 200\n };\n })(Dimensions = ResolvedLayoutConfig.Dimensions || (ResolvedLayoutConfig.Dimensions = {}));\n let Header;\n (function (Header) {\n function createCopy(original) {\n return {\n show: original.show,\n popout: original.popout,\n dock: original.dock,\n close: original.close,\n maximise: original.maximise,\n minimise: original.minimise,\n tabDropdown: original.tabDropdown,\n };\n }\n Header.createCopy = createCopy;\n Header.defaults = {\n show: Side.top,\n popout: 'open in new window',\n dock: 'dock',\n maximise: 'maximise',\n minimise: 'minimise',\n close: 'close',\n tabDropdown: 'additional tabs'\n };\n })(Header = ResolvedLayoutConfig.Header || (ResolvedLayoutConfig.Header = {}));\n function isPopout(config) {\n return 'parentId' in config;\n }\n ResolvedLayoutConfig.isPopout = isPopout;\n function createDefault() {\n const result = {\n root: undefined,\n openPopouts: [],\n dimensions: ResolvedLayoutConfig.Dimensions.defaults,\n settings: ResolvedLayoutConfig.Settings.defaults,\n header: ResolvedLayoutConfig.Header.defaults,\n resolved: true,\n };\n return result;\n }\n ResolvedLayoutConfig.createDefault = createDefault;\n function createCopy(config) {\n if (isPopout(config)) {\n return ResolvedPopoutLayoutConfig.createCopy(config);\n }\n else {\n const result = {\n root: config.root === undefined ? undefined : ResolvedRootItemConfig.createCopy(config.root),\n openPopouts: ResolvedLayoutConfig.copyOpenPopouts(config.openPopouts),\n settings: ResolvedLayoutConfig.Settings.createCopy(config.settings),\n dimensions: ResolvedLayoutConfig.Dimensions.createCopy(config.dimensions),\n header: ResolvedLayoutConfig.Header.createCopy(config.header),\n resolved: config.resolved,\n };\n return result;\n }\n }\n ResolvedLayoutConfig.createCopy = createCopy;\n function copyOpenPopouts(original) {\n const count = original.length;\n const result = new Array(count);\n for (let i = 0; i < count; i++) {\n result[i] = ResolvedPopoutLayoutConfig.createCopy(original[i]);\n }\n return result;\n }\n ResolvedLayoutConfig.copyOpenPopouts = copyOpenPopouts;\n /**\n * Takes a GoldenLayout configuration object and\n * replaces its keys and values recursively with\n * one letter counterparts\n */\n function minifyConfig(layoutConfig) {\n return ConfigMinifier.translateObject(layoutConfig, true);\n }\n ResolvedLayoutConfig.minifyConfig = minifyConfig;\n /**\n * Takes a configuration Object that was previously minified\n * using minifyConfig and returns its original version\n */\n function unminifyConfig(minifiedConfig) {\n return ConfigMinifier.translateObject(minifiedConfig, false);\n }\n ResolvedLayoutConfig.unminifyConfig = unminifyConfig;\n})(ResolvedLayoutConfig || (ResolvedLayoutConfig = {}));\n/** @public */\nexport var ResolvedPopoutLayoutConfig;\n(function (ResolvedPopoutLayoutConfig) {\n let Window;\n (function (Window) {\n function createCopy(original) {\n return {\n width: original.width,\n height: original.height,\n left: original.left,\n top: original.top,\n };\n }\n Window.createCopy = createCopy;\n Window.defaults = {\n width: null,\n height: null,\n left: null,\n top: null,\n };\n })(Window = ResolvedPopoutLayoutConfig.Window || (ResolvedPopoutLayoutConfig.Window = {}));\n function createCopy(original) {\n const result = {\n root: original.root === undefined ? undefined : ResolvedRootItemConfig.createCopy(original.root),\n openPopouts: ResolvedLayoutConfig.copyOpenPopouts(original.openPopouts),\n settings: ResolvedLayoutConfig.Settings.createCopy(original.settings),\n dimensions: ResolvedLayoutConfig.Dimensions.createCopy(original.dimensions),\n header: ResolvedLayoutConfig.Header.createCopy(original.header),\n parentId: original.parentId,\n indexInParent: original.indexInParent,\n window: ResolvedPopoutLayoutConfig.Window.createCopy(original.window),\n resolved: original.resolved,\n };\n return result;\n }\n ResolvedPopoutLayoutConfig.createCopy = createCopy;\n})(ResolvedPopoutLayoutConfig || (ResolvedPopoutLayoutConfig = {}));\n//# sourceMappingURL=resolved-config.js.map","import { ConfigurationError } from '../errors/external-error';\nimport { AssertError, UnexpectedUndefinedError, UnreachableCaseError } from '../errors/internal-error';\nimport { i18nStrings } from '../utils/i18n-strings';\nimport { ItemType, SizeUnitEnum } from '../utils/types';\nimport { deepExtendValue, splitStringAtFirstNonNumericChar } from '../utils/utils';\nimport { ResolvedComponentItemConfig, ResolvedHeaderedItemConfig, ResolvedItemConfig, ResolvedLayoutConfig, ResolvedPopoutLayoutConfig, ResolvedRootItemConfig, ResolvedRowOrColumnItemConfig, ResolvedStackItemConfig } from \"./resolved-config\";\n/** @public */\nexport var ItemConfig;\n(function (ItemConfig) {\n /** @internal */\n function resolve(itemConfig, rowAndColumnChildLegacySizeDefault) {\n switch (itemConfig.type) {\n case ItemType.ground:\n throw new ConfigurationError('ItemConfig cannot specify type ground', JSON.stringify(itemConfig));\n case ItemType.row:\n case ItemType.column:\n return RowOrColumnItemConfig.resolve(itemConfig, rowAndColumnChildLegacySizeDefault);\n case ItemType.stack:\n return StackItemConfig.resolve(itemConfig, rowAndColumnChildLegacySizeDefault);\n case ItemType.component:\n return ComponentItemConfig.resolve(itemConfig, rowAndColumnChildLegacySizeDefault);\n default:\n throw new UnreachableCaseError('UCUICR55499', itemConfig.type);\n }\n }\n ItemConfig.resolve = resolve;\n /** @internal */\n function resolveContent(content) {\n if (content === undefined) {\n return [];\n }\n else {\n const count = content.length;\n const result = new Array(count);\n for (let i = 0; i < count; i++) {\n result[i] = ItemConfig.resolve(content[i], false);\n }\n return result;\n }\n }\n ItemConfig.resolveContent = resolveContent;\n /** @internal */\n function resolveId(id) {\n if (id === undefined) {\n return ResolvedItemConfig.defaults.id;\n }\n else {\n if (Array.isArray(id)) {\n if (id.length === 0) {\n return ResolvedItemConfig.defaults.id;\n }\n else {\n return id[0];\n }\n }\n else {\n return id;\n }\n }\n }\n ItemConfig.resolveId = resolveId;\n /** @internal */\n function resolveSize(size, width, height, rowAndColumnChildLegacySizeDefault) {\n // Remove support for rowAndColumnChildLegacySizeDefault in a major version release\n if (size !== undefined) {\n return parseSize(size, [SizeUnitEnum.Percent, SizeUnitEnum.Fractional]);\n }\n else {\n if (width !== undefined || height !== undefined) {\n if (width !== undefined) {\n return { size: width, sizeUnit: SizeUnitEnum.Percent };\n }\n else {\n if (height !== undefined) {\n return { size: height, sizeUnit: SizeUnitEnum.Percent };\n }\n else {\n throw new UnexpectedUndefinedError('CRS33390');\n }\n }\n }\n else {\n if (rowAndColumnChildLegacySizeDefault) {\n return { size: 50, sizeUnit: SizeUnitEnum.Percent };\n }\n else {\n return { size: ResolvedItemConfig.defaults.size, sizeUnit: ResolvedItemConfig.defaults.sizeUnit };\n }\n }\n }\n }\n ItemConfig.resolveSize = resolveSize;\n /** @internal */\n function resolveMinSize(minSize, minWidth, minHeight) {\n if (minSize !== undefined) {\n return parseSize(minSize, [SizeUnitEnum.Pixel]);\n }\n else {\n const minWidthDefined = minWidth !== undefined;\n const minHeightDefined = minHeight !== undefined;\n if (minWidthDefined || minHeightDefined) {\n if (minWidthDefined) {\n return { size: minWidth, sizeUnit: SizeUnitEnum.Pixel };\n }\n else {\n return { size: minHeight, sizeUnit: SizeUnitEnum.Pixel };\n }\n }\n else {\n return { size: ResolvedItemConfig.defaults.minSize, sizeUnit: ResolvedItemConfig.defaults.minSizeUnit };\n }\n }\n }\n ItemConfig.resolveMinSize = resolveMinSize;\n /** @internal */\n function calculateSizeWidthHeightSpecificationType(config) {\n if (config.size !== undefined) {\n return 1 /* SizeWidthHeightSpecificationType.Size */;\n }\n else {\n if (config.width !== undefined || config.height !== undefined) {\n return 2 /* SizeWidthHeightSpecificationType.WidthOrHeight */;\n }\n else {\n return 0 /* SizeWidthHeightSpecificationType.None */;\n }\n }\n }\n ItemConfig.calculateSizeWidthHeightSpecificationType = calculateSizeWidthHeightSpecificationType;\n function isGround(config) {\n return config.type === ItemType.ground;\n }\n ItemConfig.isGround = isGround;\n function isRow(config) {\n return config.type === ItemType.row;\n }\n ItemConfig.isRow = isRow;\n function isColumn(config) {\n return config.type === ItemType.column;\n }\n ItemConfig.isColumn = isColumn;\n function isStack(config) {\n return config.type === ItemType.stack;\n }\n ItemConfig.isStack = isStack;\n function isComponent(config) {\n return config.type === ItemType.component;\n }\n ItemConfig.isComponent = isComponent;\n})(ItemConfig || (ItemConfig = {}));\n/** @public */\nexport var HeaderedItemConfig;\n(function (HeaderedItemConfig) {\n const legacyMaximisedId = '__glMaximised';\n let Header;\n (function (Header) {\n function resolve(header, hasHeaders) {\n var _a;\n if (header === undefined && hasHeaders === undefined) {\n return undefined;\n }\n else {\n const result = {\n show: (_a = header === null || header === void 0 ? void 0 : header.show) !== null && _a !== void 0 ? _a : (hasHeaders === undefined ? undefined : hasHeaders ? ResolvedLayoutConfig.Header.defaults.show : false),\n popout: header === null || header === void 0 ? void 0 : header.popout,\n maximise: header === null || header === void 0 ? void 0 : header.maximise,\n close: header === null || header === void 0 ? void 0 : header.close,\n minimise: header === null || header === void 0 ? void 0 : header.minimise,\n tabDropdown: header === null || header === void 0 ? void 0 : header.tabDropdown,\n };\n return result;\n }\n }\n Header.resolve = resolve;\n })(Header = HeaderedItemConfig.Header || (HeaderedItemConfig.Header = {}));\n /** @internal */\n function resolveIdAndMaximised(config) {\n let id;\n // To support legacy configs with Id saved as an array of string, assign config.id to a type which includes string array\n let legacyId = config.id;\n let legacyMaximised = false;\n if (legacyId === undefined) {\n id = ResolvedItemConfig.defaults.id;\n }\n else {\n if (Array.isArray(legacyId)) {\n const idx = legacyId.findIndex((id) => id === legacyMaximisedId);\n if (idx > 0) {\n legacyMaximised = true;\n legacyId = legacyId.splice(idx, 1);\n }\n if (legacyId.length > 0) {\n id = legacyId[0];\n }\n else {\n id = ResolvedItemConfig.defaults.id;\n }\n }\n else {\n id = legacyId;\n }\n }\n let maximised;\n if (config.maximised !== undefined) {\n maximised = config.maximised;\n }\n else {\n maximised = legacyMaximised;\n }\n return { id, maximised };\n }\n HeaderedItemConfig.resolveIdAndMaximised = resolveIdAndMaximised;\n})(HeaderedItemConfig || (HeaderedItemConfig = {}));\n/** @public */\nexport var StackItemConfig;\n(function (StackItemConfig) {\n /** @internal */\n function resolve(itemConfig, rowAndColumnChildLegacySizeDefault) {\n var _a, _b;\n const { id, maximised } = HeaderedItemConfig.resolveIdAndMaximised(itemConfig);\n const { size, sizeUnit } = ItemConfig.resolveSize(itemConfig.size, itemConfig.width, itemConfig.height, rowAndColumnChildLegacySizeDefault);\n const { size: minSize, sizeUnit: minSizeUnit } = ItemConfig.resolveMinSize(itemConfig.minSize, itemConfig.minWidth, itemConfig.minHeight);\n const result = {\n type: ItemType.stack,\n content: resolveContent(itemConfig.content),\n size,\n sizeUnit,\n minSize,\n minSizeUnit,\n id,\n maximised,\n isClosable: (_a = itemConfig.isClosable) !== null && _a !== void 0 ? _a : ResolvedItemConfig.defaults.isClosable,\n activeItemIndex: (_b = itemConfig.activeItemIndex) !== null && _b !== void 0 ? _b : ResolvedStackItemConfig.defaultActiveItemIndex,\n header: HeaderedItemConfig.Header.resolve(itemConfig.header, itemConfig.hasHeaders),\n };\n return result;\n }\n StackItemConfig.resolve = resolve;\n /** @internal */\n function fromResolved(resolvedConfig) {\n const result = {\n type: ItemType.stack,\n content: fromResolvedContent(resolvedConfig.content),\n size: formatSize(resolvedConfig.size, resolvedConfig.sizeUnit),\n minSize: formatUndefinableSize(resolvedConfig.minSize, resolvedConfig.minSizeUnit),\n id: resolvedConfig.id,\n maximised: resolvedConfig.maximised,\n isClosable: resolvedConfig.isClosable,\n activeItemIndex: resolvedConfig.activeItemIndex,\n header: ResolvedHeaderedItemConfig.Header.createCopy(resolvedConfig.header),\n };\n return result;\n }\n StackItemConfig.fromResolved = fromResolved;\n /** @internal */\n function resolveContent(content) {\n if (content === undefined) {\n return [];\n }\n else {\n const count = content.length;\n const result = new Array(count);\n for (let i = 0; i < count; i++) {\n const childItemConfig = content[i];\n const itemConfig = ItemConfig.resolve(childItemConfig, false);\n if (!ResolvedItemConfig.isComponentItem(itemConfig)) {\n throw new AssertError('UCUSICRC91114', JSON.stringify(itemConfig));\n }\n else {\n result[i] = itemConfig;\n }\n }\n return result;\n }\n }\n /** @internal */\n function fromResolvedContent(resolvedContent) {\n const count = resolvedContent.length;\n const result = new Array(count);\n for (let i = 0; i < count; i++) {\n const resolvedContentConfig = resolvedContent[i];\n result[i] = ComponentItemConfig.fromResolved(resolvedContentConfig);\n }\n return result;\n }\n})(StackItemConfig || (StackItemConfig = {}));\n/** @public */\nexport var ComponentItemConfig;\n(function (ComponentItemConfig) {\n /** @internal */\n function resolve(itemConfig, rowAndColumnChildLegacySizeDefault) {\n var _a, _b, _c;\n let componentType = itemConfig.componentType;\n if (componentType === undefined) {\n componentType = itemConfig.componentName;\n }\n if (componentType === undefined) {\n throw new Error('ComponentItemConfig.componentType is undefined');\n }\n else {\n const { id, maximised } = HeaderedItemConfig.resolveIdAndMaximised(itemConfig);\n let title;\n if (itemConfig.title === undefined || itemConfig.title === '') {\n title = ComponentItemConfig.componentTypeToTitle(componentType);\n }\n else {\n title = itemConfig.title;\n }\n const { size, sizeUnit } = ItemConfig.resolveSize(itemConfig.size, itemConfig.width, itemConfig.height, rowAndColumnChildLegacySizeDefault);\n const { size: minSize, sizeUnit: minSizeUnit } = ItemConfig.resolveMinSize(itemConfig.minSize, itemConfig.minWidth, itemConfig.minHeight);\n const result = {\n type: itemConfig.type,\n content: [],\n size,\n sizeUnit,\n minSize,\n minSizeUnit,\n id,\n maximised,\n isClosable: (_a = itemConfig.isClosable) !== null && _a !== void 0 ? _a : ResolvedItemConfig.defaults.isClosable,\n reorderEnabled: (_b = itemConfig.reorderEnabled) !== null && _b !== void 0 ? _b : ResolvedComponentItemConfig.defaultReorderEnabled,\n title,\n header: HeaderedItemConfig.Header.resolve(itemConfig.header, itemConfig.hasHeaders),\n componentType,\n componentState: (_c = itemConfig.componentState) !== null && _c !== void 0 ? _c : {},\n };\n return result;\n }\n }\n ComponentItemConfig.resolve = resolve;\n /** @internal */\n function fromResolved(resolvedConfig) {\n const result = {\n type: ItemType.component,\n size: formatSize(resolvedConfig.size, resolvedConfig.sizeUnit),\n minSize: formatUndefinableSize(resolvedConfig.minSize, resolvedConfig.minSizeUnit),\n id: resolvedConfig.id,\n maximised: resolvedConfig.maximised,\n isClosable: resolvedConfig.isClosable,\n reorderEnabled: resolvedConfig.reorderEnabled,\n title: resolvedConfig.title,\n header: ResolvedHeaderedItemConfig.Header.createCopy(resolvedConfig.header),\n componentType: resolvedConfig.componentType,\n componentState: deepExtendValue(undefined, resolvedConfig.componentState),\n };\n return result;\n }\n ComponentItemConfig.fromResolved = fromResolved;\n function componentTypeToTitle(componentType) {\n const componentTypeType = typeof componentType;\n switch (componentTypeType) {\n case 'string': return componentType;\n case 'number': return componentType.toString();\n case 'boolean': return componentType.toString();\n default: return '';\n }\n }\n ComponentItemConfig.componentTypeToTitle = componentTypeToTitle;\n})(ComponentItemConfig || (ComponentItemConfig = {}));\n/** @public */\nexport var RowOrColumnItemConfig;\n(function (RowOrColumnItemConfig) {\n function isChildItemConfig(itemConfig) {\n switch (itemConfig.type) {\n case ItemType.row:\n case ItemType.column:\n case ItemType.stack:\n case ItemType.component:\n return true;\n case ItemType.ground:\n return false;\n default:\n throw new UnreachableCaseError('UROCOSPCICIC13687', itemConfig.type);\n }\n }\n RowOrColumnItemConfig.isChildItemConfig = isChildItemConfig;\n /** @internal */\n function resolve(itemConfig, rowAndColumnChildLegacySizeDefault) {\n var _a;\n const { size, sizeUnit } = ItemConfig.resolveSize(itemConfig.size, itemConfig.width, itemConfig.height, rowAndColumnChildLegacySizeDefault);\n const { size: minSize, sizeUnit: minSizeUnit } = ItemConfig.resolveMinSize(itemConfig.minSize, itemConfig.minWidth, itemConfig.minHeight);\n const result = {\n type: itemConfig.type,\n content: RowOrColumnItemConfig.resolveContent(itemConfig.content),\n size,\n sizeUnit,\n minSize,\n minSizeUnit,\n id: ItemConfig.resolveId(itemConfig.id),\n isClosable: (_a = itemConfig.isClosable) !== null && _a !== void 0 ? _a : ResolvedItemConfig.defaults.isClosable,\n };\n return result;\n }\n RowOrColumnItemConfig.resolve = resolve;\n /** @internal */\n function fromResolved(resolvedConfig) {\n const result = {\n type: resolvedConfig.type,\n content: fromResolvedContent(resolvedConfig.content),\n size: formatSize(resolvedConfig.size, resolvedConfig.sizeUnit),\n minSize: formatUndefinableSize(resolvedConfig.minSize, resolvedConfig.minSizeUnit),\n id: resolvedConfig.id,\n isClosable: resolvedConfig.isClosable,\n };\n return result;\n }\n RowOrColumnItemConfig.fromResolved = fromResolved;\n /** @internal */\n function resolveContent(content) {\n if (content === undefined) {\n return [];\n }\n else {\n const count = content.length;\n const childItemConfigs = new Array(count);\n let widthOrHeightSpecifiedAtLeastOnce = false;\n let sizeSpecifiedAtLeastOnce = false;\n for (let i = 0; i < count; i++) {\n const childItemConfig = content[i];\n if (!RowOrColumnItemConfig.isChildItemConfig(childItemConfig)) {\n throw new ConfigurationError('ItemConfig is not Row, Column or Stack', childItemConfig);\n }\n else {\n if (!sizeSpecifiedAtLeastOnce) {\n const sizeWidthHeightSpecificationType = ItemConfig.calculateSizeWidthHeightSpecificationType(childItemConfig);\n switch (sizeWidthHeightSpecificationType) {\n case 0 /* ItemConfig.SizeWidthHeightSpecificationType.None */:\n break;\n case 2 /* ItemConfig.SizeWidthHeightSpecificationType.WidthOrHeight */:\n widthOrHeightSpecifiedAtLeastOnce = true;\n break;\n case 1 /* ItemConfig.SizeWidthHeightSpecificationType.Size */:\n sizeSpecifiedAtLeastOnce = true;\n break;\n default:\n throw new UnreachableCaseError('ROCICRC87556', sizeWidthHeightSpecificationType);\n }\n }\n childItemConfigs[i] = childItemConfig;\n }\n }\n let legacySizeDefault;\n if (sizeSpecifiedAtLeastOnce) {\n legacySizeDefault = false;\n }\n else {\n if (widthOrHeightSpecifiedAtLeastOnce) {\n legacySizeDefault = true;\n }\n else {\n legacySizeDefault = false;\n }\n }\n const result = new Array(count);\n for (let i = 0; i < count; i++) {\n const childItemConfig = childItemConfigs[i];\n const resolvedChildItemConfig = ItemConfig.resolve(childItemConfig, legacySizeDefault);\n if (!ResolvedRowOrColumnItemConfig.isChildItemConfig(resolvedChildItemConfig)) {\n throw new AssertError('UROCOSPIC99512', JSON.stringify(resolvedChildItemConfig));\n }\n else {\n result[i] = resolvedChildItemConfig;\n }\n }\n return result;\n }\n }\n RowOrColumnItemConfig.resolveContent = resolveContent;\n /** @internal */\n function fromResolvedContent(resolvedContent) {\n const count = resolvedContent.length;\n const result = new Array(count);\n for (let i = 0; i < count; i++) {\n const resolvedContentConfig = resolvedContent[i];\n const type = resolvedContentConfig.type;\n let contentConfig;\n switch (type) {\n case ItemType.row:\n case ItemType.column:\n contentConfig = RowOrColumnItemConfig.fromResolved(resolvedContentConfig);\n break;\n case ItemType.stack:\n contentConfig = StackItemConfig.fromResolved(resolvedContentConfig);\n break;\n case ItemType.component:\n contentConfig = ComponentItemConfig.fromResolved(resolvedContentConfig);\n break;\n default:\n throw new UnreachableCaseError('ROCICFRC44797', type);\n }\n result[i] = contentConfig;\n }\n return result;\n }\n})(RowOrColumnItemConfig || (RowOrColumnItemConfig = {}));\n/** @public */\nexport var RootItemConfig;\n(function (RootItemConfig) {\n function isRootItemConfig(itemConfig) {\n switch (itemConfig.type) {\n case ItemType.row:\n case ItemType.column:\n case ItemType.stack:\n case ItemType.component:\n return true;\n case ItemType.ground:\n return false;\n default:\n throw new UnreachableCaseError('URICIR23687', itemConfig.type);\n }\n }\n RootItemConfig.isRootItemConfig = isRootItemConfig;\n /** @internal */\n function resolve(itemConfig) {\n if (itemConfig === undefined) {\n return undefined;\n }\n else {\n const result = ItemConfig.resolve(itemConfig, false);\n if (!ResolvedRootItemConfig.isRootItemConfig(result)) {\n throw new ConfigurationError('ItemConfig is not Row, Column or Stack', JSON.stringify(itemConfig));\n }\n else {\n return result;\n }\n }\n }\n RootItemConfig.resolve = resolve;\n /** @internal */\n function fromResolvedOrUndefined(resolvedItemConfig) {\n if (resolvedItemConfig === undefined) {\n return undefined;\n }\n else {\n const type = resolvedItemConfig.type;\n switch (type) {\n case ItemType.row:\n case ItemType.column:\n return RowOrColumnItemConfig.fromResolved(resolvedItemConfig);\n case ItemType.stack:\n return StackItemConfig.fromResolved(resolvedItemConfig);\n case ItemType.component:\n return ComponentItemConfig.fromResolved(resolvedItemConfig);\n default:\n throw new UnreachableCaseError('RICFROU89921', type);\n }\n }\n }\n RootItemConfig.fromResolvedOrUndefined = fromResolvedOrUndefined;\n})(RootItemConfig || (RootItemConfig = {}));\n/** Use to specify LayoutConfig with defaults or deserialise a LayoutConfig.\n * Deserialisation will handle backwards compatibility.\n * Note that LayoutConfig should be used for serialisation (not LayoutConfig)\n * @public\n */\nexport var LayoutConfig;\n(function (LayoutConfig) {\n let Settings;\n (function (Settings) {\n function resolve(settings) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n const result = {\n constrainDragToContainer: (_a = settings === null || settings === void 0 ? void 0 : settings.constrainDragToContainer) !== null && _a !== void 0 ? _a : ResolvedLayoutConfig.Settings.defaults.constrainDragToContainer,\n reorderEnabled: (_b = settings === null || settings === void 0 ? void 0 : settings.reorderEnabled) !== null && _b !== void 0 ? _b : ResolvedLayoutConfig.Settings.defaults.reorderEnabled,\n popoutWholeStack: (_c = settings === null || settings === void 0 ? void 0 : settings.popoutWholeStack) !== null && _c !== void 0 ? _c : ResolvedLayoutConfig.Settings.defaults.popoutWholeStack,\n blockedPopoutsThrowError: (_d = settings === null || settings === void 0 ? void 0 : settings.blockedPopoutsThrowError) !== null && _d !== void 0 ? _d : ResolvedLayoutConfig.Settings.defaults.blockedPopoutsThrowError,\n closePopoutsOnUnload: (_e = settings === null || settings === void 0 ? void 0 : settings.closePopoutsOnUnload) !== null && _e !== void 0 ? _e : ResolvedLayoutConfig.Settings.defaults.closePopoutsOnUnload,\n responsiveMode: (_f = settings === null || settings === void 0 ? void 0 : settings.responsiveMode) !== null && _f !== void 0 ? _f : ResolvedLayoutConfig.Settings.defaults.responsiveMode,\n tabOverlapAllowance: (_g = settings === null || settings === void 0 ? void 0 : settings.tabOverlapAllowance) !== null && _g !== void 0 ? _g : ResolvedLayoutConfig.Settings.defaults.tabOverlapAllowance,\n reorderOnTabMenuClick: (_h = settings === null || settings === void 0 ? void 0 : settings.reorderOnTabMenuClick) !== null && _h !== void 0 ? _h : ResolvedLayoutConfig.Settings.defaults.reorderOnTabMenuClick,\n tabControlOffset: (_j = settings === null || settings === void 0 ? void 0 : settings.tabControlOffset) !== null && _j !== void 0 ? _j : ResolvedLayoutConfig.Settings.defaults.tabControlOffset,\n popInOnClose: (_k = settings === null || settings === void 0 ? void 0 : settings.popInOnClose) !== null && _k !== void 0 ? _k : ResolvedLayoutConfig.Settings.defaults.popInOnClose,\n };\n return result;\n }\n Settings.resolve = resolve;\n })(Settings = LayoutConfig.Settings || (LayoutConfig.Settings = {}));\n let Dimensions;\n (function (Dimensions) {\n /** @internal */\n function resolve(dimensions) {\n var _a, _b, _c, _d, _e;\n const { size: defaultMinItemHeight, sizeUnit: defaultMinItemHeightUnit } = Dimensions.resolveDefaultMinItemHeight(dimensions);\n const { size: defaultMinItemWidth, sizeUnit: defaultMinItemWidthUnit } = Dimensions.resolveDefaultMinItemWidth(dimensions);\n const result = {\n borderWidth: (_a = dimensions === null || dimensions === void 0 ? void 0 : dimensions.borderWidth) !== null && _a !== void 0 ? _a : ResolvedLayoutConfig.Dimensions.defaults.borderWidth,\n borderGrabWidth: (_b = dimensions === null || dimensions === void 0 ? void 0 : dimensions.borderGrabWidth) !== null && _b !== void 0 ? _b : ResolvedLayoutConfig.Dimensions.defaults.borderGrabWidth,\n defaultMinItemHeight,\n defaultMinItemHeightUnit,\n defaultMinItemWidth,\n defaultMinItemWidthUnit,\n headerHeight: (_c = dimensions === null || dimensions === void 0 ? void 0 : dimensions.headerHeight) !== null && _c !== void 0 ? _c : ResolvedLayoutConfig.Dimensions.defaults.headerHeight,\n dragProxyWidth: (_d = dimensions === null || dimensions === void 0 ? void 0 : dimensions.dragProxyWidth) !== null && _d !== void 0 ? _d : ResolvedLayoutConfig.Dimensions.defaults.dragProxyWidth,\n dragProxyHeight: (_e = dimensions === null || dimensions === void 0 ? void 0 : dimensions.dragProxyHeight) !== null && _e !== void 0 ? _e : ResolvedLayoutConfig.Dimensions.defaults.dragProxyHeight,\n };\n return result;\n }\n Dimensions.resolve = resolve;\n /** @internal */\n function fromResolved(resolvedDimensions) {\n const result = {\n borderWidth: resolvedDimensions.borderWidth,\n borderGrabWidth: resolvedDimensions.borderGrabWidth,\n defaultMinItemHeight: formatSize(resolvedDimensions.defaultMinItemHeight, resolvedDimensions.defaultMinItemHeightUnit),\n defaultMinItemWidth: formatSize(resolvedDimensions.defaultMinItemWidth, resolvedDimensions.defaultMinItemWidthUnit),\n headerHeight: resolvedDimensions.headerHeight,\n dragProxyWidth: resolvedDimensions.dragProxyWidth,\n dragProxyHeight: resolvedDimensions.dragProxyHeight,\n };\n return result;\n }\n Dimensions.fromResolved = fromResolved;\n /** @internal */\n function resolveDefaultMinItemHeight(dimensions) {\n const height = dimensions === null || dimensions === void 0 ? void 0 : dimensions.defaultMinItemHeight;\n if (height === undefined) {\n return { size: ResolvedLayoutConfig.Dimensions.defaults.defaultMinItemHeight, sizeUnit: ResolvedLayoutConfig.Dimensions.defaults.defaultMinItemHeightUnit };\n }\n else {\n return parseSize(height, [SizeUnitEnum.Pixel]);\n }\n }\n Dimensions.resolveDefaultMinItemHeight = resolveDefaultMinItemHeight;\n /** @internal */\n function resolveDefaultMinItemWidth(dimensions) {\n const width = dimensions === null || dimensions === void 0 ? void 0 : dimensions.defaultMinItemWidth;\n if (width === undefined) {\n return { size: ResolvedLayoutConfig.Dimensions.defaults.defaultMinItemWidth, sizeUnit: ResolvedLayoutConfig.Dimensions.defaults.defaultMinItemWidthUnit };\n }\n else {\n return parseSize(width, [SizeUnitEnum.Pixel]);\n }\n }\n Dimensions.resolveDefaultMinItemWidth = resolveDefaultMinItemWidth;\n })(Dimensions = LayoutConfig.Dimensions || (LayoutConfig.Dimensions = {}));\n let Header;\n (function (Header) {\n /** @internal */\n function resolve(header, settings, labels) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;\n let show;\n if ((header === null || header === void 0 ? void 0 : header.show) !== undefined) {\n show = header.show;\n }\n else {\n if (settings !== undefined && settings.hasHeaders !== undefined) {\n show = settings.hasHeaders ? ResolvedLayoutConfig.Header.defaults.show : false;\n }\n else {\n show = ResolvedLayoutConfig.Header.defaults.show;\n }\n }\n const result = {\n show,\n popout: (_b = (_a = header === null || header === void 0 ? void 0 : header.popout) !== null && _a !== void 0 ? _a : labels === null || labels === void 0 ? void 0 : labels.popout) !== null && _b !== void 0 ? _b : ((settings === null || settings === void 0 ? void 0 : settings.showPopoutIcon) === false ? false : ResolvedLayoutConfig.Header.defaults.popout),\n dock: (_d = (_c = header === null || header === void 0 ? void 0 : header.popin) !== null && _c !== void 0 ? _c : labels === null || labels === void 0 ? void 0 : labels.popin) !== null && _d !== void 0 ? _d : ResolvedLayoutConfig.Header.defaults.dock,\n maximise: (_f = (_e = header === null || header === void 0 ? void 0 : header.maximise) !== null && _e !== void 0 ? _e : labels === null || labels === void 0 ? void 0 : labels.maximise) !== null && _f !== void 0 ? _f : ((settings === null || settings === void 0 ? void 0 : settings.showMaximiseIcon) === false ? false : ResolvedLayoutConfig.Header.defaults.maximise),\n close: (_h = (_g = header === null || header === void 0 ? void 0 : header.close) !== null && _g !== void 0 ? _g : labels === null || labels === void 0 ? void 0 : labels.close) !== null && _h !== void 0 ? _h : ((settings === null || settings === void 0 ? void 0 : settings.showCloseIcon) === false ? false : ResolvedLayoutConfig.Header.defaults.close),\n minimise: (_k = (_j = header === null || header === void 0 ? void 0 : header.minimise) !== null && _j !== void 0 ? _j : labels === null || labels === void 0 ? void 0 : labels.minimise) !== null && _k !== void 0 ? _k : ResolvedLayoutConfig.Header.defaults.minimise,\n tabDropdown: (_m = (_l = header === null || header === void 0 ? void 0 : header.tabDropdown) !== null && _l !== void 0 ? _l : labels === null || labels === void 0 ? void 0 : labels.tabDropdown) !== null && _m !== void 0 ? _m : ResolvedLayoutConfig.Header.defaults.tabDropdown,\n };\n return result;\n }\n Header.resolve = resolve;\n })(Header = LayoutConfig.Header || (LayoutConfig.Header = {}));\n function isPopout(config) {\n return 'parentId' in config || 'indexInParent' in config || 'window' in config;\n }\n LayoutConfig.isPopout = isPopout;\n /** @internal */\n function resolve(layoutConfig) {\n if (isPopout(layoutConfig)) {\n return PopoutLayoutConfig.resolve(layoutConfig);\n }\n else {\n let root;\n if (layoutConfig.root !== undefined) {\n root = layoutConfig.root;\n }\n else {\n if (layoutConfig.content !== undefined && layoutConfig.content.length > 0) {\n root = layoutConfig.content[0];\n }\n else {\n root = undefined;\n }\n }\n const config = {\n resolved: true,\n root: RootItemConfig.resolve(root),\n openPopouts: LayoutConfig.resolveOpenPopouts(layoutConfig.openPopouts),\n dimensions: LayoutConfig.Dimensions.resolve(layoutConfig.dimensions),\n settings: LayoutConfig.Settings.resolve(layoutConfig.settings),\n header: LayoutConfig.Header.resolve(layoutConfig.header, layoutConfig.settings, layoutConfig.labels),\n };\n return config;\n }\n }\n LayoutConfig.resolve = resolve;\n function fromResolved(config) {\n const result = {\n root: RootItemConfig.fromResolvedOrUndefined(config.root),\n openPopouts: PopoutLayoutConfig.fromResolvedArray(config.openPopouts),\n settings: ResolvedLayoutConfig.Settings.createCopy(config.settings),\n dimensions: LayoutConfig.Dimensions.fromResolved(config.dimensions),\n header: ResolvedLayoutConfig.Header.createCopy(config.header),\n };\n return result;\n }\n LayoutConfig.fromResolved = fromResolved;\n function isResolved(configOrResolvedConfig) {\n const config = configOrResolvedConfig;\n return config.resolved !== undefined && (config.resolved === true);\n }\n LayoutConfig.isResolved = isResolved;\n /** @internal */\n function resolveOpenPopouts(popoutConfigs) {\n if (popoutConfigs === undefined) {\n return [];\n }\n else {\n const count = popoutConfigs.length;\n const result = new Array(count);\n for (let i = 0; i < count; i++) {\n result[i] = PopoutLayoutConfig.resolve(popoutConfigs[i]);\n }\n return result;\n }\n }\n LayoutConfig.resolveOpenPopouts = resolveOpenPopouts;\n})(LayoutConfig || (LayoutConfig = {}));\n/** @public */\nexport var PopoutLayoutConfig;\n(function (PopoutLayoutConfig) {\n let Window;\n (function (Window) {\n /** @internal */\n function resolve(window, dimensions) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n let result;\n const defaults = ResolvedPopoutLayoutConfig.Window.defaults;\n if (window !== undefined) {\n result = {\n width: (_a = window.width) !== null && _a !== void 0 ? _a : defaults.width,\n height: (_b = window.height) !== null && _b !== void 0 ? _b : defaults.height,\n left: (_c = window.left) !== null && _c !== void 0 ? _c : defaults.left,\n top: (_d = window.top) !== null && _d !== void 0 ? _d : defaults.top,\n };\n }\n else {\n result = {\n width: (_e = dimensions === null || dimensions === void 0 ? void 0 : dimensions.width) !== null && _e !== void 0 ? _e : defaults.width,\n height: (_f = dimensions === null || dimensions === void 0 ? void 0 : dimensions.height) !== null && _f !== void 0 ? _f : defaults.height,\n left: (_g = dimensions === null || dimensions === void 0 ? void 0 : dimensions.left) !== null && _g !== void 0 ? _g : defaults.left,\n top: (_h = dimensions === null || dimensions === void 0 ? void 0 : dimensions.top) !== null && _h !== void 0 ? _h : defaults.top,\n };\n }\n return result;\n }\n Window.resolve = resolve;\n /** @internal */\n function fromResolved(resolvedWindow) {\n const result = {\n width: resolvedWindow.width === null ? undefined : resolvedWindow.width,\n height: resolvedWindow.height === null ? undefined : resolvedWindow.height,\n left: resolvedWindow.left === null ? undefined : resolvedWindow.left,\n top: resolvedWindow.top === null ? undefined : resolvedWindow.top,\n };\n return result;\n }\n Window.fromResolved = fromResolved;\n })(Window = PopoutLayoutConfig.Window || (PopoutLayoutConfig.Window = {}));\n /** @internal */\n function resolve(popoutConfig) {\n var _a, _b;\n let root;\n if (popoutConfig.root !== undefined) {\n root = popoutConfig.root;\n }\n else {\n if (popoutConfig.content !== undefined && popoutConfig.content.length > 0) {\n root = popoutConfig.content[0];\n }\n else {\n root = undefined;\n }\n }\n const config = {\n root: RootItemConfig.resolve(root),\n openPopouts: LayoutConfig.resolveOpenPopouts(popoutConfig.openPopouts),\n dimensions: LayoutConfig.Dimensions.resolve(popoutConfig.dimensions),\n settings: LayoutConfig.Settings.resolve(popoutConfig.settings),\n header: LayoutConfig.Header.resolve(popoutConfig.header, popoutConfig.settings, popoutConfig.labels),\n parentId: (_a = popoutConfig.parentId) !== null && _a !== void 0 ? _a : null,\n indexInParent: (_b = popoutConfig.indexInParent) !== null && _b !== void 0 ? _b : null,\n window: PopoutLayoutConfig.Window.resolve(popoutConfig.window, popoutConfig.dimensions),\n resolved: true,\n };\n return config;\n }\n PopoutLayoutConfig.resolve = resolve;\n /** @internal */\n function fromResolved(resolvedConfig) {\n const result = {\n root: RootItemConfig.fromResolvedOrUndefined(resolvedConfig.root),\n openPopouts: fromResolvedArray(resolvedConfig.openPopouts),\n dimensions: LayoutConfig.Dimensions.fromResolved(resolvedConfig.dimensions),\n settings: ResolvedLayoutConfig.Settings.createCopy(resolvedConfig.settings),\n header: ResolvedLayoutConfig.Header.createCopy(resolvedConfig.header),\n parentId: resolvedConfig.parentId,\n indexInParent: resolvedConfig.indexInParent,\n window: PopoutLayoutConfig.Window.fromResolved(resolvedConfig.window),\n };\n return result;\n }\n PopoutLayoutConfig.fromResolved = fromResolved;\n /** @internal */\n function fromResolvedArray(resolvedArray) {\n const resolvedOpenPopoutCount = resolvedArray.length;\n const result = new Array(resolvedOpenPopoutCount);\n for (let i = 0; i < resolvedOpenPopoutCount; i++) {\n const resolvedOpenPopout = resolvedArray[i];\n result[i] = PopoutLayoutConfig.fromResolved(resolvedOpenPopout);\n }\n return result;\n }\n PopoutLayoutConfig.fromResolvedArray = fromResolvedArray;\n})(PopoutLayoutConfig || (PopoutLayoutConfig = {}));\n/** @internal */\nexport function parseSize(sizeString, allowableSizeUnits) {\n const { numericPart: digitsPart, firstNonNumericCharPart: firstNonDigitPart } = splitStringAtFirstNonNumericChar(sizeString);\n const size = Number.parseInt(digitsPart, 10);\n if (isNaN(size)) {\n throw new ConfigurationError(`${i18nStrings[7 /* I18nStringId.InvalidNumberPartInSizeString */]}: ${sizeString}`);\n }\n else {\n const sizeUnit = SizeUnitEnum.tryParse(firstNonDigitPart);\n if (sizeUnit === undefined) {\n throw new ConfigurationError(`${i18nStrings[8 /* I18nStringId.UnknownUnitInSizeString */]}: ${sizeString}`);\n }\n else {\n if (!allowableSizeUnits.includes(sizeUnit)) {\n throw new ConfigurationError(`${i18nStrings[9 /* I18nStringId.UnsupportedUnitInSizeString */]}: ${sizeString}`);\n }\n else {\n return { size, sizeUnit };\n }\n }\n }\n}\n/** @internal */\nexport function formatSize(size, sizeUnit) {\n return size.toString(10) + SizeUnitEnum.format(sizeUnit);\n}\n/** @internal */\nexport function formatUndefinableSize(size, sizeUnit) {\n if (size === undefined) {\n return undefined;\n }\n else {\n return size.toString(10) + SizeUnitEnum.format(sizeUnit);\n }\n}\n//# sourceMappingURL=config.js.map","/** @internal */\nexport function numberToPixels(value) {\n return value.toString(10) + 'px';\n}\n/** @internal */\nexport function pixelsToNumber(value) {\n const numberStr = value.replace(\"px\", \"\");\n return parseFloat(numberStr);\n}\n/** @internal */\nexport function splitStringAtFirstNonNumericChar(value) {\n value = value.trimStart();\n const length = value.length;\n if (length === 0) {\n return { numericPart: '', firstNonNumericCharPart: '' };\n }\n else {\n let firstNonDigitPartIndex = length;\n let gotDecimalPoint = false;\n for (let i = 0; i < length; i++) {\n const char = value[i];\n if (!isDigit(char)) {\n if (char !== '.') {\n firstNonDigitPartIndex = i;\n break;\n }\n else {\n if (gotDecimalPoint) {\n firstNonDigitPartIndex = i;\n break;\n }\n else {\n gotDecimalPoint = true;\n }\n }\n }\n }\n const digitsPart = value.substring(0, firstNonDigitPartIndex);\n const firstNonDigitPart = value.substring(firstNonDigitPartIndex).trim();\n return { numericPart: digitsPart, firstNonNumericCharPart: firstNonDigitPart };\n }\n}\n/** @internal */\nexport function isDigit(char) {\n return char >= '0' && char <= '9';\n}\n/** @internal */\nexport function getElementWidth(element) {\n return element.offsetWidth;\n}\n/** @internal */\nexport function setElementWidth(element, width) {\n const widthAsPixels = numberToPixels(width);\n element.style.width = widthAsPixels;\n}\n/** @internal */\nexport function getElementHeight(element) {\n return element.offsetHeight;\n}\n/** @internal */\nexport function setElementHeight(element, height) {\n const heightAsPixels = numberToPixels(height);\n element.style.height = heightAsPixels;\n}\n/** @internal */\nexport function getElementWidthAndHeight(element) {\n return {\n width: element.offsetWidth,\n height: element.offsetHeight,\n };\n}\n/** @internal */\nexport function setElementDisplayVisibility(element, visible) {\n if (visible) {\n element.style.display = '';\n }\n else {\n element.style.display = 'none';\n }\n}\n/** @internal */\nexport function ensureElementPositionAbsolute(element) {\n const absolutePosition = 'absolute';\n if (element.style.position !== absolutePosition) {\n element.style.position = absolutePosition;\n }\n}\n/**\n * Replacement for JQuery $.extend(target, obj)\n * @internal\n*/\nexport function extend(target, obj) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n target[key] = obj[key];\n }\n }\n return target;\n}\n/**\n * Replacement for JQuery $.extend(true, target, obj)\n * @internal\n*/\nexport function deepExtend(target, obj) {\n if (obj !== undefined) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n const value = obj[key];\n const existingTarget = target[key];\n target[key] = deepExtendValue(existingTarget, value);\n }\n }\n }\n return target;\n}\n/** @internal */\nexport function deepExtendValue(existingTarget, value) {\n if (typeof value !== 'object') {\n return value;\n }\n else {\n if (Array.isArray(value)) {\n const length = value.length;\n const targetArray = new Array(length);\n for (let i = 0; i < length; i++) {\n const element = value[i];\n targetArray[i] = deepExtendValue({}, element);\n }\n return targetArray;\n }\n else {\n if (value === null) {\n return null;\n }\n else {\n const valueObj = value;\n if (existingTarget === undefined) {\n return deepExtend({}, valueObj); // overwrite\n }\n else {\n if (typeof existingTarget !== \"object\") {\n return deepExtend({}, valueObj); // overwrite\n }\n else {\n if (Array.isArray(existingTarget)) {\n return deepExtend({}, valueObj); // overwrite\n }\n else {\n if (existingTarget === null) {\n return deepExtend({}, valueObj); // overwrite\n }\n else {\n const existingTargetObj = existingTarget;\n return deepExtend(existingTargetObj, valueObj); // merge\n }\n }\n }\n }\n }\n }\n }\n}\n/** @internal */\nexport function removeFromArray(item, array) {\n const index = array.indexOf(item);\n if (index === -1) {\n throw new Error('Can\\'t remove item from array. Item is not in the array');\n }\n array.splice(index, 1);\n}\n/** @internal */\nexport function getUniqueId() {\n return (Math.random() * 1000000000000000)\n .toString(36)\n .replace('.', '');\n}\n/** @internal */\nexport function getErrorMessage(e) {\n if (e instanceof Error) {\n return e.message;\n }\n else {\n if (typeof e === 'string') {\n return e;\n }\n else {\n return 'Unknown Error';\n }\n }\n}\n//# sourceMappingURL=utils.js.map","/**\n * A generic and very fast EventEmitter implementation. On top of emitting the actual event it emits an\n * {@link (EventEmitter:namespace).ALL_EVENT} event for every event triggered. This allows to hook into it and proxy events forwards\n * @public\n */\nexport class EventEmitter {\n constructor() {\n /** @internal */\n this._allEventSubscriptions = [];\n /** @internal */\n this._subscriptionsMap = new Map();\n /**\n * Alias for off\n */\n this.unbind = this.removeEventListener;\n /**\n * Alias for emit\n */\n this.trigger = this.emit;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n tryBubbleEvent(name, args) {\n // overridden by ContentItem\n }\n /**\n * Emit an event and notify listeners\n *\n * @param eventName - The name of the event\n * @param args - Additional arguments that will be passed to the listener\n */\n emit(eventName, ...args) {\n let subcriptions = this._subscriptionsMap.get(eventName);\n if (subcriptions !== undefined) {\n subcriptions = subcriptions.slice();\n for (let i = 0; i < subcriptions.length; i++) {\n const subscription = subcriptions[i];\n subscription(...args);\n }\n }\n this.emitAllEvent(eventName, args);\n this.tryBubbleEvent(eventName, args);\n }\n /** @internal */\n emitUnknown(eventName, ...args) {\n let subs = this._subscriptionsMap.get(eventName);\n if (subs !== undefined) {\n subs = subs.slice();\n for (let i = 0; i < subs.length; i++) {\n subs[i](...args);\n }\n }\n this.emitAllEvent(eventName, args);\n this.tryBubbleEvent(eventName, args);\n }\n /* @internal **/\n emitBaseBubblingEvent(eventName) {\n const event = new EventEmitter.BubblingEvent(eventName, this);\n this.emitUnknown(eventName, event);\n }\n /** @internal */\n emitUnknownBubblingEvent(eventName) {\n const event = new EventEmitter.BubblingEvent(eventName, this);\n this.emitUnknown(eventName, event);\n }\n /**\n * Removes a listener for an event.\n * @param eventName - The name of the event\n * @param callback - The previously registered callback method (optional)\n */\n removeEventListener(eventName, callback) {\n const unknownCallback = callback;\n this.removeUnknownEventListener(eventName, unknownCallback);\n }\n off(eventName, callback) {\n this.removeEventListener(eventName, callback);\n }\n /**\n * Listen for events\n *\n * @param eventName - The name of the event to listen to\n * @param callback - The callback to execute when the event occurs\n */\n addEventListener(eventName, callback) {\n const unknownCallback = callback;\n this.addUnknownEventListener(eventName, unknownCallback);\n }\n on(eventName, callback) {\n this.addEventListener(eventName, callback);\n }\n /** @internal */\n addUnknownEventListener(eventName, callback) {\n if (eventName === EventEmitter.ALL_EVENT) {\n this._allEventSubscriptions.push(callback);\n }\n else {\n let subscriptions = this._subscriptionsMap.get(eventName);\n if (subscriptions !== undefined) {\n subscriptions.push(callback);\n }\n else {\n subscriptions = [callback];\n this._subscriptionsMap.set(eventName, subscriptions);\n }\n }\n }\n /** @internal */\n removeUnknownEventListener(eventName, callback) {\n if (eventName === EventEmitter.ALL_EVENT) {\n this.removeSubscription(eventName, this._allEventSubscriptions, callback);\n }\n else {\n const subscriptions = this._subscriptionsMap.get(eventName);\n if (subscriptions === undefined) {\n throw new Error('No subscribtions to unsubscribe for event ' + eventName);\n }\n else {\n this.removeSubscription(eventName, subscriptions, callback);\n }\n }\n }\n /** @internal */\n removeSubscription(eventName, subscriptions, callback) {\n const idx = subscriptions.indexOf(callback);\n if (idx < 0) {\n throw new Error('Nothing to unbind for ' + eventName);\n }\n else {\n subscriptions.splice(idx, 1);\n }\n }\n /** @internal */\n emitAllEvent(eventName, args) {\n const allEventSubscriptionsCount = this._allEventSubscriptions.length;\n if (allEventSubscriptionsCount > 0) {\n const unknownArgs = args.slice();\n unknownArgs.unshift(eventName);\n const allEventSubcriptions = this._allEventSubscriptions.slice();\n for (let i = 0; i < allEventSubscriptionsCount; i++) {\n allEventSubcriptions[i](...unknownArgs);\n }\n }\n }\n}\n/** @public */\n(function (EventEmitter) {\n /**\n * The name of the event that's triggered for every event\n */\n EventEmitter.ALL_EVENT = '__all';\n EventEmitter.headerClickEventName = 'stackHeaderClick';\n EventEmitter.headerTouchStartEventName = 'stackHeaderTouchStart';\n class BubblingEvent {\n /** @internal */\n constructor(\n /** @internal */\n _name, \n /** @internal */\n _target) {\n this._name = _name;\n this._target = _target;\n /** @internal */\n this._isPropagationStopped = false;\n }\n get name() { return this._name; }\n get target() { return this._target; }\n /** @deprecated Use {@link (EventEmitter:namespace).(BubblingEvent:class).target} instead */\n get origin() { return this._target; }\n get isPropagationStopped() { return this._isPropagationStopped; }\n stopPropagation() {\n this._isPropagationStopped = true;\n }\n }\n EventEmitter.BubblingEvent = BubblingEvent;\n class ClickBubblingEvent extends BubblingEvent {\n /** @internal */\n constructor(name, target, \n /** @internal */\n _mouseEvent) {\n super(name, target);\n this._mouseEvent = _mouseEvent;\n }\n get mouseEvent() { return this._mouseEvent; }\n }\n EventEmitter.ClickBubblingEvent = ClickBubblingEvent;\n class TouchStartBubblingEvent extends BubblingEvent {\n /** @internal */\n constructor(name, target, \n /** @internal */\n _touchEvent) {\n super(name, target);\n this._touchEvent = _touchEvent;\n }\n get touchEvent() { return this._touchEvent; }\n }\n EventEmitter.TouchStartBubblingEvent = TouchStartBubblingEvent;\n})(EventEmitter || (EventEmitter = {}));\n//# sourceMappingURL=event-emitter.js.map","import { ComponentItemConfig, ItemConfig } from '../config/config';\nimport { AssertError, UnexpectedNullError } from '../errors/internal-error';\nimport { EventEmitter } from '../utils/event-emitter';\nimport { LogicalZIndex, LogicalZIndexToDefaultMap } from '../utils/types';\nimport { deepExtend, setElementHeight, setElementWidth } from '../utils/utils';\n/** @public */\nexport class ComponentContainer extends EventEmitter {\n /** @internal */\n constructor(\n /** @internal */\n _config, \n /** @internal */\n _parent, \n /** @internal */\n _layoutManager, \n /** @internal */\n _element, \n /** @internal */\n _updateItemConfigEvent, \n /** @internal */\n _showEvent, \n /** @internal */\n _hideEvent, \n /** @internal */\n _focusEvent, \n /** @internal */\n _blurEvent) {\n super();\n this._config = _config;\n this._parent = _parent;\n this._layoutManager = _layoutManager;\n this._element = _element;\n this._updateItemConfigEvent = _updateItemConfigEvent;\n this._showEvent = _showEvent;\n this._hideEvent = _hideEvent;\n this._focusEvent = _focusEvent;\n this._blurEvent = _blurEvent;\n /** @internal */\n this._stackMaximised = false;\n this._width = 0;\n this._height = 0;\n this._visible = true;\n this._isShownWithZeroDimensions = true;\n this._componentType = _config.componentType;\n this._isClosable = _config.isClosable;\n this._initialState = _config.componentState;\n this._state = this._initialState;\n this._boundComponent = this.layoutManager.bindComponent(this, _config);\n this.updateElementPositionPropertyFromBoundComponent();\n }\n get width() { return this._width; }\n get height() { return this._height; }\n get parent() { return this._parent; }\n /** @internal @deprecated use {@link (ComponentContainer:class).componentType} */\n get componentName() { return this._componentType; }\n get componentType() { return this._componentType; }\n get virtual() { return this._boundComponent.virtual; }\n get component() { return this._boundComponent.component; }\n get tab() { return this._tab; }\n get title() { return this._parent.title; }\n get layoutManager() { return this._layoutManager; }\n get isHidden() { return !this._visible; }\n get visible() { return this._visible; }\n get state() { return this._state; }\n /** Return the initial component state */\n get initialState() { return this._initialState; }\n /** The inner DOM element where the container's content is intended to live in */\n get element() { return this._element; }\n /** @internal */\n destroy() {\n this.releaseComponent();\n this.stateRequestEvent = undefined;\n this.emit('destroy');\n }\n /** @deprecated use {@link (ComponentContainer:class).element } */\n getElement() {\n return this._element;\n }\n /**\n * Hides the container's component item (and hence, the container) if not already hidden.\n * Emits hide event prior to hiding the container.\n */\n hide() {\n this._hideEvent();\n }\n /**\n * Shows the container's component item (and hence, the container) if not visible.\n * Emits show event prior to hiding the container.\n */\n show() {\n this._showEvent();\n }\n /**\n * Focus this component in Layout.\n */\n focus(suppressEvent = false) {\n this._focusEvent(suppressEvent);\n }\n /**\n * Remove focus from this component in Layout.\n */\n blur(suppressEvent = false) {\n this._blurEvent(suppressEvent);\n }\n /**\n * Set the size from within the container. Traverses up\n * the item tree until it finds a row or column element\n * and resizes its items accordingly.\n *\n * If this container isn't a descendant of a row or column\n * it returns false\n * @param width - The new width in pixel\n * @param height - The new height in pixel\n *\n * @returns resizeSuccesful\n *\n * @internal\n */\n setSize(width, height) {\n let ancestorItem = this._parent;\n if (ancestorItem.isColumn || ancestorItem.isRow || ancestorItem.parent === null) {\n throw new AssertError('ICSSPRC', 'ComponentContainer cannot have RowColumn Parent');\n }\n else {\n let ancestorChildItem;\n do {\n ancestorChildItem = ancestorItem;\n ancestorItem = ancestorItem.parent;\n } while (ancestorItem !== null && !ancestorItem.isColumn && !ancestorItem.isRow);\n if (ancestorItem === null) {\n // no Row or Column found\n return false;\n }\n else {\n // ancestorItem is Row or Column\n const direction = ancestorItem.isColumn ? 'height' : 'width';\n const currentSize = this[direction];\n if (currentSize === null) {\n throw new UnexpectedNullError('ICSSCS11194');\n }\n else {\n const newSize = direction === 'height' ? height : width;\n const totalPixel = currentSize * (1 / (ancestorChildItem.size / 100));\n const percentage = (newSize / totalPixel) * 100;\n const delta = (ancestorChildItem.size - percentage) / (ancestorItem.contentItems.length - 1);\n for (let i = 0; i < ancestorItem.contentItems.length; i++) {\n const ancestorItemContentItem = ancestorItem.contentItems[i];\n if (ancestorItemContentItem === ancestorChildItem) {\n ancestorItemContentItem.size = percentage;\n }\n else {\n ancestorItemContentItem.size += delta;\n }\n }\n ancestorItem.updateSize(false);\n return true;\n }\n }\n }\n }\n /**\n * Closes the container if it is closable. Can be called by\n * both the component within at as well as the contentItem containing\n * it. Emits a close event before the container itself is closed.\n */\n close() {\n if (this._isClosable) {\n this.emit('close');\n this._parent.close();\n }\n }\n /** Replaces component without affecting layout */\n replaceComponent(itemConfig) {\n this.releaseComponent();\n if (!ItemConfig.isComponent(itemConfig)) {\n throw new Error('ReplaceComponent not passed a component ItemConfig');\n }\n else {\n const config = ComponentItemConfig.resolve(itemConfig, false);\n this._initialState = config.componentState;\n this._state = this._initialState;\n this._componentType = config.componentType;\n this._updateItemConfigEvent(config);\n this._boundComponent = this.layoutManager.bindComponent(this, config);\n this.updateElementPositionPropertyFromBoundComponent();\n if (this._boundComponent.virtual) {\n if (this.virtualVisibilityChangeRequiredEvent !== undefined) {\n this.virtualVisibilityChangeRequiredEvent(this, this._visible);\n }\n if (this.virtualRectingRequiredEvent !== undefined) {\n this._layoutManager.fireBeforeVirtualRectingEvent(1);\n try {\n this.virtualRectingRequiredEvent(this, this._width, this._height);\n }\n finally {\n this._layoutManager.fireAfterVirtualRectingEvent();\n }\n }\n this.setBaseLogicalZIndex();\n }\n this.emit('stateChanged');\n }\n }\n /**\n * Returns the initial component state or the latest passed in setState()\n * @returns state\n * @deprecated Use {@link (ComponentContainer:class).initialState}\n */\n getState() {\n return this._state;\n }\n /**\n * Merges the provided state into the current one\n * @deprecated Use {@link (ComponentContainer:class).stateRequestEvent}\n */\n extendState(state) {\n const extendedState = deepExtend(this._state, state);\n this.setState(extendedState);\n }\n /**\n * Sets the component state\n * @deprecated Use {@link (ComponentContainer:class).stateRequestEvent}\n */\n setState(state) {\n this._state = state;\n this._parent.emitBaseBubblingEvent('stateChanged');\n }\n /**\n * Set's the components title\n */\n setTitle(title) {\n this._parent.setTitle(title);\n }\n /** @internal */\n setTab(tab) {\n this._tab = tab;\n this.emit('tab', tab);\n }\n /** @internal */\n setVisibility(value) {\n if (this._boundComponent.virtual) {\n if (this.virtualVisibilityChangeRequiredEvent !== undefined) {\n this.virtualVisibilityChangeRequiredEvent(this, value);\n }\n }\n if (value) {\n if (!this._visible) {\n this._visible = true;\n if (this._height === 0 && this._width === 0) {\n this._isShownWithZeroDimensions = true;\n }\n else {\n this._isShownWithZeroDimensions = false;\n this.setSizeToNodeSize(this._width, this._height, true);\n this.emitShow();\n }\n }\n else {\n if (this._isShownWithZeroDimensions && (this._height !== 0 || this._width !== 0)) {\n this._isShownWithZeroDimensions = false;\n this.setSizeToNodeSize(this._width, this._height, true);\n this.emitShow();\n }\n }\n }\n else {\n if (this._visible) {\n this._visible = false;\n this._isShownWithZeroDimensions = false;\n this.emitHide();\n }\n }\n }\n setBaseLogicalZIndex() {\n this.setLogicalZIndex(LogicalZIndex.base);\n }\n setLogicalZIndex(logicalZIndex) {\n if (logicalZIndex !== this._logicalZIndex) {\n this._logicalZIndex = logicalZIndex;\n this.notifyVirtualZIndexChangeRequired();\n }\n }\n /**\n * Set the container's size, but considered temporary (for dragging)\n * so don't emit any events.\n * @internal\n */\n enterDragMode(width, height) {\n this._width = width;\n this._height = height;\n setElementWidth(this._element, width);\n setElementHeight(this._element, height);\n this.setLogicalZIndex(LogicalZIndex.drag);\n this.drag();\n }\n /** @internal */\n exitDragMode() {\n this.setBaseLogicalZIndex();\n }\n /** @internal */\n enterStackMaximised() {\n this._stackMaximised = true;\n this.setLogicalZIndex(LogicalZIndex.stackMaximised);\n }\n /** @internal */\n exitStackMaximised() {\n this.setBaseLogicalZIndex();\n this._stackMaximised = false;\n }\n /** @internal */\n drag() {\n if (this._boundComponent.virtual) {\n if (this.virtualRectingRequiredEvent !== undefined) {\n this._layoutManager.fireBeforeVirtualRectingEvent(1);\n try {\n this.virtualRectingRequiredEvent(this, this._width, this._height);\n }\n finally {\n this._layoutManager.fireAfterVirtualRectingEvent();\n }\n }\n }\n }\n /**\n * Sets the container's size. Called by the container's component item.\n * To instead set the size programmatically from within the component itself,\n * use the public setSize method\n * @param width - in px\n * @param height - in px\n * @param force - set even if no change\n * @internal\n */\n setSizeToNodeSize(width, height, force) {\n if (width !== this._width || height !== this._height || force) {\n this._width = width;\n this._height = height;\n setElementWidth(this._element, width);\n setElementHeight(this._element, height);\n if (this._boundComponent.virtual) {\n this.addVirtualSizedContainerToLayoutManager();\n }\n else {\n this.emit('resize');\n this.checkShownFromZeroDimensions();\n }\n }\n }\n /** @internal */\n notifyVirtualRectingRequired() {\n if (this.virtualRectingRequiredEvent !== undefined) {\n this.virtualRectingRequiredEvent(this, this._width, this._height);\n this.emit('resize');\n this.checkShownFromZeroDimensions();\n }\n }\n /** @internal */\n notifyVirtualZIndexChangeRequired() {\n if (this.virtualZIndexChangeRequiredEvent !== undefined) {\n const logicalZIndex = this._logicalZIndex;\n const defaultZIndex = LogicalZIndexToDefaultMap[logicalZIndex];\n this.virtualZIndexChangeRequiredEvent(this, logicalZIndex, defaultZIndex);\n }\n }\n /** @internal */\n updateElementPositionPropertyFromBoundComponent() {\n if (this._boundComponent.virtual) {\n this._element.style.position = 'static';\n }\n else {\n this._element.style.position = ''; // set it back to attribute value\n }\n }\n /** @internal */\n addVirtualSizedContainerToLayoutManager() {\n this._layoutManager.beginVirtualSizedContainerAdding();\n try {\n this._layoutManager.addVirtualSizedContainer(this);\n }\n finally {\n this._layoutManager.endVirtualSizedContainerAdding();\n }\n }\n /** @internal */\n checkShownFromZeroDimensions() {\n if (this._isShownWithZeroDimensions && (this._height !== 0 || this._width !== 0)) {\n this._isShownWithZeroDimensions = false;\n this.emitShow();\n }\n }\n /** @internal */\n emitShow() {\n this.emit('shown');\n this.emit('show');\n }\n /** @internal */\n emitHide() {\n this.emit('hide');\n }\n /** @internal */\n releaseComponent() {\n if (this._stackMaximised) {\n this.exitStackMaximised();\n }\n this.emit('beforeComponentRelease', this._boundComponent.component);\n this.layoutManager.unbindComponent(this, this._boundComponent.virtual, this._boundComponent.component);\n }\n}\n//# sourceMappingURL=component-container.js.map","import { ResolvedLayoutConfig } from '../config/resolved-config';\nimport { PopoutBlockedError } from '../errors/external-error';\nimport { UnexpectedNullError, UnexpectedUndefinedError } from '../errors/internal-error';\nimport { EventEmitter } from '../utils/event-emitter';\nimport { deepExtend, getErrorMessage, getUniqueId } from '../utils/utils';\n/**\n * Pops a content item out into a new browser window.\n * This is achieved by\n *\n * - Creating a new configuration with the content item as root element\n * - Serializing and minifying the configuration\n * - Opening the current window's URL with the configuration as a GET parameter\n * - GoldenLayout when opened in the new window will look for the GET parameter\n * and use it instead of the provided configuration\n * @public\n */\nexport class BrowserPopout extends EventEmitter {\n /**\n * @param _config - GoldenLayout item config\n * @param _initialWindowSize - A map with width, height, top and left\n * @internal\n */\n constructor(\n /** @internal */\n _config, \n /** @internal */\n _initialWindowSize, \n /** @internal */\n _layoutManager) {\n super();\n this._config = _config;\n this._initialWindowSize = _initialWindowSize;\n this._layoutManager = _layoutManager;\n this._isInitialised = false;\n this._popoutWindow = null;\n this.createWindow();\n }\n toConfig() {\n var _a, _b;\n if (this._isInitialised === false) {\n throw new Error('Can\\'t create config, layout not yet initialised');\n }\n const glInstance = this.getGlInstance();\n const glInstanceConfig = glInstance.saveLayout();\n let left;\n let top;\n if (this._popoutWindow === null) {\n left = null;\n top = null;\n }\n else {\n left = (_a = this._popoutWindow.screenX) !== null && _a !== void 0 ? _a : this._popoutWindow.screenLeft;\n top = (_b = this._popoutWindow.screenY) !== null && _b !== void 0 ? _b : this._popoutWindow.screenTop;\n }\n const window = {\n width: this.getGlInstance().width,\n height: this.getGlInstance().height,\n left,\n top,\n };\n const config = {\n root: glInstanceConfig.root,\n openPopouts: glInstanceConfig.openPopouts,\n settings: glInstanceConfig.settings,\n dimensions: glInstanceConfig.dimensions,\n header: glInstanceConfig.header,\n window,\n parentId: this._config.parentId,\n indexInParent: this._config.indexInParent,\n resolved: true,\n };\n return config;\n }\n getGlInstance() {\n if (this._popoutWindow === null) {\n throw new UnexpectedNullError('BPGGI24693');\n }\n return this._popoutWindow.__glInstance;\n }\n /**\n * Retrieves the native BrowserWindow backing this popout.\n * Might throw an UnexpectedNullError exception when the window is not initialized yet.\n * @public\n */\n getWindow() {\n if (this._popoutWindow === null) {\n throw new UnexpectedNullError('BPGW087215');\n }\n return this._popoutWindow;\n }\n close() {\n if (this.getGlInstance()) {\n this.getGlInstance().closeWindow();\n }\n else {\n try {\n this.getWindow().close();\n }\n catch (e) {\n //\n }\n }\n }\n /**\n * Returns the popped out item to its original position. If the original\n * parent isn't available anymore it falls back to the layout's topmost element\n */\n popIn() {\n let parentItem;\n let index = this._config.indexInParent;\n if (!this._config.parentId) {\n return;\n }\n /*\n * The deepExtend call seems a bit pointless, but it's crucial to\n * copy the config returned by this.getGlInstance().toConfig()\n * onto a new object. Internet Explorer keeps the references\n * to objects on the child window, resulting in the following error\n * once the child window is closed:\n *\n * The callee (server [not server application]) is not available and disappeared\n */\n const glInstanceLayoutConfig = this.getGlInstance().saveLayout();\n const copiedGlInstanceLayoutConfig = deepExtend({}, glInstanceLayoutConfig);\n const copiedRoot = copiedGlInstanceLayoutConfig.root;\n if (copiedRoot === undefined) {\n throw new UnexpectedUndefinedError('BPPIR19998');\n }\n const groundItem = this._layoutManager.groundItem;\n if (groundItem === undefined) {\n throw new UnexpectedUndefinedError('BPPIG34972');\n }\n parentItem = groundItem.getItemsByPopInParentId(this._config.parentId)[0];\n /*\n * Fallback if parentItem is not available. Either add it to the topmost\n * item or make it the topmost item if the layout is empty\n */\n if (!parentItem) {\n if (groundItem.contentItems.length > 0) {\n parentItem = groundItem.contentItems[0];\n }\n else {\n parentItem = groundItem;\n }\n index = 0;\n }\n const newContentItem = this._layoutManager.createAndInitContentItem(copiedRoot, parentItem);\n parentItem.addChild(newContentItem, index);\n if (this._layoutManager.layoutConfig.settings.popInOnClose) {\n this._onClose();\n }\n else {\n this.close();\n }\n }\n /**\n * Creates the URL and window parameter\n * and opens a new window\n * @internal\n */\n createWindow() {\n const url = this.createUrl();\n /**\n * Bogus title to prevent re-usage of existing window with the\n * same title. The actual title will be set by the new window's\n * GoldenLayout instance if it detects that it is in subWindowMode\n */\n const target = Math.floor(Math.random() * 1000000).toString(36);\n /**\n * The options as used in the window.open string\n */\n const features = this.serializeWindowFeatures({\n width: this._initialWindowSize.width,\n height: this._initialWindowSize.height,\n innerWidth: this._initialWindowSize.width,\n innerHeight: this._initialWindowSize.height,\n menubar: 'no',\n toolbar: 'no',\n location: 'no',\n personalbar: 'no',\n resizable: 'yes',\n scrollbars: 'no',\n status: 'no'\n });\n this._popoutWindow = globalThis.open(url, target, features);\n if (!this._popoutWindow) {\n if (this._layoutManager.layoutConfig.settings.blockedPopoutsThrowError === true) {\n const error = new PopoutBlockedError('Popout blocked');\n throw error;\n }\n else {\n return;\n }\n }\n this._popoutWindow.addEventListener('load', () => this.positionWindow(), { passive: true });\n this._popoutWindow.addEventListener('beforeunload', () => {\n if (this._layoutManager.layoutConfig.settings.popInOnClose) {\n this.popIn();\n }\n else {\n this._onClose();\n }\n }, { passive: true });\n /**\n * Polling the childwindow to find out if GoldenLayout has been initialised\n * doesn't seem optimal, but the alternatives - adding a callback to the parent\n * window or raising an event on the window object - both would introduce knowledge\n * about the parent to the child window which we'd rather avoid\n */\n this._checkReadyInterval = setInterval(() => this.checkReady(), 10);\n }\n /** @internal */\n checkReady() {\n if (this._popoutWindow === null) {\n throw new UnexpectedNullError('BPCR01844');\n }\n else {\n if (this._popoutWindow.__glInstance && this._popoutWindow.__glInstance.isInitialised) {\n this.onInitialised();\n if (this._checkReadyInterval !== undefined) {\n clearInterval(this._checkReadyInterval);\n this._checkReadyInterval = undefined;\n }\n }\n }\n }\n /**\n * Serialises a map of key:values to a window options string\n *\n * @param windowOptions -\n *\n * @returns serialised window options\n * @internal\n */\n serializeWindowFeatures(windowOptions) {\n const windowOptionsString = [];\n for (const key in windowOptions) {\n windowOptionsString.push(key + '=' + windowOptions[key].toString());\n }\n return windowOptionsString.join(',');\n }\n /**\n * Creates the URL for the new window, including the\n * config GET parameter\n *\n * @returns URL\n * @internal\n */\n createUrl() {\n const storageKey = 'gl-window-config-' + getUniqueId();\n const config = ResolvedLayoutConfig.minifyConfig(this._config);\n try {\n localStorage.setItem(storageKey, JSON.stringify(config));\n }\n catch (e) {\n throw new Error('Error while writing to localStorage ' + getErrorMessage(e));\n }\n const url = new URL(location.href);\n url.searchParams.set('gl-window', storageKey);\n return url.toString();\n }\n /**\n * Move the newly created window roughly to\n * where the component used to be.\n * @internal\n */\n positionWindow() {\n if (this._popoutWindow === null) {\n throw new Error('BrowserPopout.positionWindow: null popoutWindow');\n }\n else {\n this._popoutWindow.moveTo(this._initialWindowSize.left, this._initialWindowSize.top);\n this._popoutWindow.focus();\n }\n }\n /**\n * Callback when the new window is opened and the GoldenLayout instance\n * within it is initialised\n * @internal\n */\n onInitialised() {\n this._isInitialised = true;\n this.getGlInstance().on('popIn', () => this.popIn());\n this.emit('initialised');\n }\n /**\n * Invoked 50ms after the window unload event\n * @internal\n */\n _onClose() {\n setTimeout(() => this.emit('closed'), 50);\n }\n}\n//# sourceMappingURL=browser-popout.js.map","import { AssertError, UnexpectedNullError } from '../errors/internal-error';\nimport { EventEmitter } from '../utils/event-emitter';\nimport { getUniqueId, setElementDisplayVisibility } from '../utils/utils';\n/**\n * This is the baseclass that all content items inherit from.\n * Most methods provide a subset of what the sub-classes do.\n *\n * It also provides a number of functions for tree traversal\n * @public\n */\nexport class ContentItem extends EventEmitter {\n /** @internal */\n constructor(layoutManager, config, \n /** @internal */\n _parent, \n /** @internal */\n _element) {\n super();\n this.layoutManager = layoutManager;\n this._parent = _parent;\n this._element = _element;\n /** @internal */\n this._popInParentIds = [];\n /** @internal */\n this._isDragged = false;\n this._type = config.type;\n this._id = config.id;\n this._isInitialised = false;\n this.isGround = false;\n this.isRow = false;\n this.isColumn = false;\n this.isStack = false;\n this.isComponent = false;\n this.size = config.size;\n this.sizeUnit = config.sizeUnit;\n this.minSize = config.minSize;\n this.minSizeUnit = config.minSizeUnit;\n this._isClosable = config.isClosable;\n this._pendingEventPropagations = {};\n this._throttledEvents = ['stateChanged'];\n this._contentItems = this.createContentItems(config.content);\n }\n get type() { return this._type; }\n get id() { return this._id; }\n set id(value) { this._id = value; }\n set isDragged(b) {\n this._isDragged = b;\n if (this.isComponent) {\n this.parent.isDragged = b;\n }\n }\n /** @internal */\n get popInParentIds() { return this._popInParentIds; }\n get parent() { return this._parent; }\n get contentItems() { return this._contentItems; }\n get isClosable() { return this._isClosable; }\n get element() { return this._element; }\n get isInitialised() { return this._isInitialised; }\n static isStack(item) {\n return item.isStack;\n }\n static isComponentItem(item) {\n return item.isComponent;\n }\n static isComponentParentableItem(item) {\n return item.isStack || item.isGround;\n }\n /**\n * Removes a child node (and its children) from the tree\n * @param contentItem - The child item to remove\n * @param keepChild - Whether to destroy the removed item\n */\n removeChild(contentItem, keepChild = false) {\n /*\n * Get the position of the item that's to be removed within all content items this node contains\n */\n const index = this._contentItems.indexOf(contentItem);\n /*\n * Make sure the content item to be removed is actually a child of this item\n */\n if (index === -1) {\n throw new Error('Can\\'t remove child item. Unknown content item');\n }\n /**\n * Call destroy on the content item.\n * All children are destroyed as well\n */\n if (!keepChild) {\n this._contentItems[index].destroy();\n }\n /**\n * Remove the content item from this nodes array of children\n */\n this._contentItems.splice(index, 1);\n /**\n * If this node still contains other content items, adjust their size\n */\n if (this._contentItems.length > 0) {\n this.updateSize(false);\n }\n else {\n /**\n * If this was the last content item, remove this node as well\n */\n if (!this.isGround && (this._isClosable === true\n /* Temporarily remove this so we can drag it to a different location */\n || this._isDragged)) {\n if (this._parent === null) {\n throw new UnexpectedNullError('CIUC00874');\n }\n else {\n this._parent.removeChild(this);\n }\n }\n }\n }\n /**\n * Sets up the tree structure for the newly added child\n * The responsibility for the actual DOM manipulations lies\n * with the concrete item\n *\n * @param contentItem -\n * @param index - If omitted item will be appended\n * @param suspendResize - Used by descendent implementations\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addChild(contentItem, index, suspendResize) {\n index !== null && index !== void 0 ? index : (index = this._contentItems.length);\n this._contentItems.splice(index, 0, contentItem);\n contentItem.setParent(this);\n if (this._isInitialised === true && contentItem._isInitialised === false) {\n contentItem.init();\n }\n return index;\n }\n /**\n * Replaces oldChild with newChild\n * @param oldChild -\n * @param newChild -\n * @internal\n */\n replaceChild(oldChild, newChild, destroyOldChild = false) {\n // Do not try to replace ComponentItem - will not work\n const index = this._contentItems.indexOf(oldChild);\n const parentNode = oldChild._element.parentNode;\n if (index === -1) {\n throw new AssertError('CIRCI23232', 'Can\\'t replace child. oldChild is not child of this');\n }\n if (parentNode === null) {\n throw new UnexpectedNullError('CIRCP23232');\n }\n else {\n parentNode.replaceChild(newChild._element, oldChild._element);\n /*\n * Optionally destroy the old content item\n */\n if (destroyOldChild === true) {\n oldChild._parent = null;\n oldChild.destroy(); // will now also destroy all children of oldChild\n }\n /*\n * Wire the new contentItem into the tree\n */\n this._contentItems[index] = newChild;\n newChild.setParent(this);\n // newChild inherits the sizes from the old child:\n newChild.size = oldChild.size;\n newChild.sizeUnit = oldChild.sizeUnit;\n newChild.minSize = oldChild.minSize;\n newChild.minSizeUnit = oldChild.minSizeUnit;\n //TODO This doesn't update the config... refactor to leave item nodes untouched after creation\n if (newChild._parent === null) {\n throw new UnexpectedNullError('CIRCNC45699');\n }\n else {\n if (newChild._parent._isInitialised === true && newChild._isInitialised === false) {\n newChild.init();\n }\n this.updateSize(false);\n }\n }\n }\n /**\n * Convenience method.\n * Shorthand for this.parent.removeChild( this )\n */\n remove() {\n if (this._parent === null) {\n throw new UnexpectedNullError('CIR11110');\n }\n else {\n this._parent.removeChild(this);\n }\n }\n /**\n * Removes the component from the layout and creates a new\n * browser window with the component and its children inside\n */\n popout() {\n const parentId = getUniqueId();\n const browserPopout = this.layoutManager.createPopoutFromContentItem(this, undefined, parentId, undefined);\n this.emitBaseBubblingEvent('stateChanged');\n return browserPopout;\n }\n /** @internal */\n calculateConfigContent() {\n const contentItems = this._contentItems;\n const count = contentItems.length;\n const result = new Array(count);\n for (let i = 0; i < count; i++) {\n const item = contentItems[i];\n result[i] = item.toConfig();\n }\n return result;\n }\n /** @internal */\n highlightDropZone(x, y, area) {\n const dropTargetIndicator = this.layoutManager.dropTargetIndicator;\n if (dropTargetIndicator === null) {\n throw new UnexpectedNullError('ACIHDZ5593');\n }\n else {\n dropTargetIndicator.highlightArea(area, 1);\n }\n }\n /** @internal */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onDrop(contentItem, area) {\n this.addChild(contentItem);\n }\n /** @internal */\n show() {\n this.layoutManager.beginSizeInvalidation();\n try {\n // Not sure why showAllActiveContentItems() was called. GoldenLayout seems to work fine without it. Left commented code\n // in source in case a reason for it becomes apparent.\n // this.layoutManager.showAllActiveContentItems();\n setElementDisplayVisibility(this._element, true);\n // this.layoutManager.updateSizeFromContainer();\n for (let i = 0; i < this._contentItems.length; i++) {\n this._contentItems[i].show();\n }\n }\n finally {\n this.layoutManager.endSizeInvalidation();\n }\n }\n /**\n * Destroys this item ands its children\n * @internal\n */\n destroy() {\n for (let i = 0; i < this._contentItems.length; i++) {\n this._contentItems[i].destroy();\n }\n this._contentItems = [];\n this.emitBaseBubblingEvent('beforeItemDestroyed');\n this._element.remove();\n this.emitBaseBubblingEvent('itemDestroyed');\n }\n /**\n * Returns the area the component currently occupies\n * @internal\n */\n getElementArea(element) {\n element = element !== null && element !== void 0 ? element : this._element;\n const rect = element.getBoundingClientRect();\n const top = rect.top + document.body.scrollTop;\n const left = rect.left + document.body.scrollLeft;\n const width = rect.width;\n const height = rect.height;\n return {\n x1: left,\n y1: top,\n x2: left + width,\n y2: top + height,\n surface: width * height,\n contentItem: this\n };\n }\n /**\n * The tree of content items is created in two steps: First all content items are instantiated,\n * then init is called recursively from top to bottem. This is the basic init function,\n * it can be used, extended or overwritten by the content items\n *\n * Its behaviour depends on the content item\n * @internal\n */\n init() {\n this._isInitialised = true;\n this.emitBaseBubblingEvent('itemCreated');\n this.emitUnknownBubblingEvent(this.type + 'Created');\n }\n /** @internal */\n setParent(parent) {\n this._parent = parent;\n }\n /** @internal */\n addPopInParentId(id) {\n if (!this.popInParentIds.includes(id)) {\n this.popInParentIds.push(id);\n }\n }\n /** @internal */\n initContentItems() {\n for (let i = 0; i < this._contentItems.length; i++) {\n this._contentItems[i].init();\n }\n }\n /** @internal */\n hide() {\n this.layoutManager.beginSizeInvalidation();\n try {\n setElementDisplayVisibility(this._element, false);\n // this.layoutManager.updateSizeFromContainer();\n }\n finally {\n this.layoutManager.endSizeInvalidation();\n }\n }\n /** @internal */\n updateContentItemsSize(force) {\n for (let i = 0; i < this._contentItems.length; i++) {\n this._contentItems[i].updateSize(force);\n }\n }\n /**\n * creates all content items for this node at initialisation time\n * PLEASE NOTE, please see addChild for adding contentItems at runtime\n * @internal\n */\n createContentItems(content) {\n const count = content.length;\n const result = new Array(count);\n for (let i = 0; i < content.length; i++) {\n result[i] = this.layoutManager.createContentItem(content[i], this);\n }\n return result;\n }\n /**\n * Called for every event on the item tree. Decides whether the event is a bubbling\n * event and propagates it to its parent\n *\n * @param name - The name of the event\n * @param event -\n * @internal\n */\n propagateEvent(name, args) {\n if (args.length === 1) {\n const event = args[0];\n if (event instanceof EventEmitter.BubblingEvent &&\n event.isPropagationStopped === false &&\n this._isInitialised === true) {\n /**\n * In some cases (e.g. if an element is created from a DragSource) it\n * doesn't have a parent and is not a child of GroundItem. If that's the case\n * propagate the bubbling event from the top level of the substree directly\n * to the layoutManager\n */\n if (this.isGround === false && this._parent) {\n this._parent.emitUnknown(name, event);\n }\n else {\n this.scheduleEventPropagationToLayoutManager(name, event);\n }\n }\n }\n }\n tryBubbleEvent(name, args) {\n if (args.length === 1) {\n const event = args[0];\n if (event instanceof EventEmitter.BubblingEvent &&\n event.isPropagationStopped === false &&\n this._isInitialised === true) {\n /**\n * In some cases (e.g. if an element is created from a DragSource) it\n * doesn't have a parent and is not a child of GroundItem. If that's the case\n * propagate the bubbling event from the top level of the substree directly\n * to the layoutManager\n */\n if (this.isGround === false && this._parent) {\n this._parent.emitUnknown(name, event);\n }\n else {\n this.scheduleEventPropagationToLayoutManager(name, event);\n }\n }\n }\n }\n /**\n * All raw events bubble up to the Ground element. Some events that\n * are propagated to - and emitted by - the layoutManager however are\n * only string-based, batched and sanitized to make them more usable\n *\n * @param name - The name of the event\n * @internal\n */\n scheduleEventPropagationToLayoutManager(name, event) {\n if (this._throttledEvents.indexOf(name) === -1) {\n this.layoutManager.emitUnknown(name, event);\n }\n else {\n if (this._pendingEventPropagations[name] !== true) {\n this._pendingEventPropagations[name] = true;\n globalThis.requestAnimationFrame(() => this.propagateEventToLayoutManager(name, event));\n }\n }\n }\n /**\n * Callback for events scheduled by _scheduleEventPropagationToLayoutManager\n *\n * @param name - The name of the event\n * @internal\n */\n propagateEventToLayoutManager(name, event) {\n this._pendingEventPropagations[name] = false;\n this.layoutManager.emitUnknown(name, event);\n }\n}\n//# sourceMappingURL=content-item.js.map","import { ResolvedComponentItemConfig, ResolvedHeaderedItemConfig } from '../config/resolved-config';\nimport { ComponentContainer } from '../container/component-container';\nimport { UnexpectedNullError } from '../errors/internal-error';\nimport { ItemType } from '../utils/types';\nimport { getElementWidthAndHeight, setElementHeight, setElementWidth } from '../utils/utils';\nimport { ContentItem } from './content-item';\n/** @public */\nexport class ComponentItem extends ContentItem {\n /** @internal */\n constructor(layoutManager, config, \n /** @internal */\n _parentItem) {\n super(layoutManager, config, _parentItem, document.createElement('div'));\n this._parentItem = _parentItem;\n /** @internal */\n this._focused = false;\n this.isComponent = true;\n this._reorderEnabled = config.reorderEnabled;\n this.applyUpdatableConfig(config);\n this._initialWantMaximise = config.maximised;\n const containerElement = document.createElement('div');\n containerElement.classList.add(\"lm_content\" /* DomConstants.ClassName.Content */);\n this.element.appendChild(containerElement);\n this._container = new ComponentContainer(config, this, layoutManager, containerElement, (itemConfig) => this.handleUpdateItemConfigEvent(itemConfig), () => this.show(), () => this.hide(), (suppressEvent) => this.focus(suppressEvent), (suppressEvent) => this.blur(suppressEvent));\n }\n /** @internal @deprecated use {@link (ComponentItem:class).componentType} */\n get componentName() { return this._container.componentType; }\n get componentType() { return this._container.componentType; }\n get reorderEnabled() { return this._reorderEnabled; }\n /** @internal */\n get initialWantMaximise() { return this._initialWantMaximise; }\n get component() { return this._container.component; }\n get container() { return this._container; }\n get parentItem() { return this._parentItem; }\n get headerConfig() { return this._headerConfig; }\n get title() { return this._title; }\n get tab() { return this._tab; }\n get focused() { return this._focused; }\n /** @internal */\n destroy() {\n this._container.destroy();\n super.destroy();\n }\n applyUpdatableConfig(config) {\n this.setTitle(config.title);\n this._headerConfig = config.header;\n }\n toConfig() {\n const stateRequestEvent = this._container.stateRequestEvent;\n const state = stateRequestEvent === undefined ? this._container.state : stateRequestEvent();\n const result = {\n type: ItemType.component,\n content: [],\n size: this.size,\n sizeUnit: this.sizeUnit,\n minSize: this.minSize,\n minSizeUnit: this.minSizeUnit,\n id: this.id,\n maximised: false,\n isClosable: this.isClosable,\n reorderEnabled: this._reorderEnabled,\n title: this._title,\n header: ResolvedHeaderedItemConfig.Header.createCopy(this._headerConfig),\n componentType: ResolvedComponentItemConfig.copyComponentType(this.componentType),\n componentState: state,\n };\n return result;\n }\n close() {\n if (this.parent === null) {\n throw new UnexpectedNullError('CIC68883');\n }\n else {\n this.parent.removeChild(this, false);\n }\n }\n // Used by Drag Proxy\n /** @internal */\n enterDragMode(width, height) {\n setElementWidth(this.element, width);\n setElementHeight(this.element, height);\n this._container.enterDragMode(width, height);\n }\n /** @internal */\n exitDragMode() {\n this._container.exitDragMode();\n }\n /** @internal */\n enterStackMaximised() {\n this._container.enterStackMaximised();\n }\n /** @internal */\n exitStackMaximised() {\n this._container.exitStackMaximised();\n }\n // Used by Drag Proxy\n /** @internal */\n drag() {\n this._container.drag();\n }\n /** @internal */\n updateSize(force) {\n this.updateNodeSize(force);\n }\n /** @internal */\n init() {\n this.updateNodeSize(false);\n super.init();\n this._container.emit('open');\n this.initContentItems();\n }\n /**\n * Set this component's title\n *\n * @public\n * @param title -\n */\n setTitle(title) {\n this._title = title;\n this.emit('titleChanged', title);\n this.emit('stateChanged');\n }\n setTab(tab) {\n this._tab = tab;\n this.emit('tab', tab);\n this._container.setTab(tab);\n }\n /** @internal */\n hide() {\n super.hide();\n this._container.setVisibility(false);\n }\n /** @internal */\n show() {\n super.show();\n this._container.setVisibility(true);\n }\n /**\n * Focuses the item if it is not already focused\n */\n focus(suppressEvent = false) {\n this.parentItem.setActiveComponentItem(this, true, suppressEvent);\n }\n /** @internal */\n setFocused(suppressEvent) {\n this._focused = true;\n this.tab.setFocused();\n if (!suppressEvent) {\n this.emitBaseBubblingEvent('focus');\n }\n }\n /**\n * Blurs (defocuses) the item if it is focused\n */\n blur(suppressEvent = false) {\n if (this._focused) {\n this.layoutManager.setFocusedComponentItem(undefined, suppressEvent);\n }\n }\n /** @internal */\n setBlurred(suppressEvent) {\n this._focused = false;\n this.tab.setBlurred();\n if (!suppressEvent) {\n this.emitBaseBubblingEvent('blur');\n }\n }\n /** @internal */\n setParent(parent) {\n this._parentItem = parent;\n super.setParent(parent);\n }\n /** @internal */\n handleUpdateItemConfigEvent(itemConfig) {\n this.applyUpdatableConfig(itemConfig);\n }\n /** @internal */\n updateNodeSize(force) {\n if (this.element.style.display !== 'none') {\n // Do not update size of hidden components to prevent unwanted reflows\n const { width, height } = getElementWidthAndHeight(this.element);\n this._container.setSizeToNodeSize(width, height, force);\n }\n }\n}\n//# sourceMappingURL=component-item.js.map","import { ContentItem } from './content-item';\nexport class ComponentParentableItem extends ContentItem {\n constructor() {\n super(...arguments);\n /** @internal */\n this._focused = false;\n }\n get focused() { return this._focused; }\n /** @internal */\n setFocusedValue(value) {\n this._focused = value;\n }\n}\n//# sourceMappingURL=component-parentable-item.js.map","import { EventEmitter } from './event-emitter';\n/** @internal */\nexport class DragListener extends EventEmitter {\n constructor(_eElement, extraAllowableChildTargets) {\n super();\n this._eElement = _eElement;\n this._pointerTracking = false;\n this._pointerDownEventListener = (ev) => this.onPointerDown(ev);\n this._pointerMoveEventListener = (ev) => this.onPointerMove(ev);\n this._pointerUpEventListener = (ev) => this.onPointerUp(ev);\n this._timeout = undefined;\n this._allowableTargets = [_eElement, ...extraAllowableChildTargets];\n this._oDocument = document;\n this._eBody = document.body;\n /**\n * The delay after which to start the drag in milliseconds\n * Do NOT make too short (previous value of 200 was not long enough for my touchpad)\n * Should generally rely on the mouse move to start drag. Not this delay.\n */\n this._nDelay = 1800;\n /**\n * The distance the mouse needs to be moved to qualify as a drag\n * Previous comment: works better with delay only\n * ???\n * Probably somehow needs tuning for different devices\n */\n this._nDistance = 10;\n this._nX = 0;\n this._nY = 0;\n this._nOriginalX = 0;\n this._nOriginalY = 0;\n this._dragging = false;\n this._eElement.addEventListener('pointerdown', this._pointerDownEventListener, { passive: true });\n }\n destroy() {\n this.checkRemovePointerTrackingEventListeners();\n this._eElement.removeEventListener('pointerdown', this._pointerDownEventListener);\n }\n cancelDrag() {\n this.processDragStop(undefined);\n }\n onPointerDown(oEvent) {\n if (this._allowableTargets.includes(oEvent.target) && oEvent.isPrimary) {\n const coordinates = this.getPointerCoordinates(oEvent);\n this.processPointerDown(coordinates);\n }\n }\n processPointerDown(coordinates) {\n this._nOriginalX = coordinates.x;\n this._nOriginalY = coordinates.y;\n this._oDocument.addEventListener('pointermove', this._pointerMoveEventListener);\n this._oDocument.addEventListener('pointerup', this._pointerUpEventListener, { passive: true });\n this._pointerTracking = true;\n this._timeout = setTimeout(() => {\n try {\n this.startDrag();\n }\n catch (err) {\n console.error(err);\n throw err;\n }\n }, this._nDelay);\n }\n onPointerMove(oEvent) {\n if (this._pointerTracking) {\n this.processDragMove(oEvent);\n oEvent.preventDefault();\n }\n }\n processDragMove(dragEvent) {\n this._nX = dragEvent.pageX - this._nOriginalX;\n this._nY = dragEvent.pageY - this._nOriginalY;\n if (this._dragging === false) {\n if (Math.abs(this._nX) > this._nDistance ||\n Math.abs(this._nY) > this._nDistance) {\n this.startDrag();\n }\n }\n if (this._dragging) {\n this.emit('drag', this._nX, this._nY, dragEvent);\n }\n }\n onPointerUp(oEvent) {\n this.processDragStop(oEvent);\n }\n processDragStop(dragEvent) {\n var _a;\n if (this._timeout !== undefined) {\n clearTimeout(this._timeout);\n this._timeout = undefined;\n }\n this.checkRemovePointerTrackingEventListeners();\n if (this._dragging === true) {\n this._eBody.classList.remove(\"lm_dragging\" /* DomConstants.ClassName.Dragging */);\n this._eElement.classList.remove(\"lm_dragging\" /* DomConstants.ClassName.Dragging */);\n (_a = this._oDocument.querySelector('iframe')) === null || _a === void 0 ? void 0 : _a.style.setProperty('pointer-events', '');\n this._dragging = false;\n this.emit('dragStop', dragEvent);\n }\n }\n checkRemovePointerTrackingEventListeners() {\n if (this._pointerTracking) {\n this._oDocument.removeEventListener('pointermove', this._pointerMoveEventListener);\n this._oDocument.removeEventListener('pointerup', this._pointerUpEventListener);\n this._pointerTracking = false;\n }\n }\n startDrag() {\n var _a;\n if (this._timeout !== undefined) {\n clearTimeout(this._timeout);\n this._timeout = undefined;\n }\n this._dragging = true;\n this._eBody.classList.add(\"lm_dragging\" /* DomConstants.ClassName.Dragging */);\n this._eElement.classList.add(\"lm_dragging\" /* DomConstants.ClassName.Dragging */);\n (_a = this._oDocument.querySelector('iframe')) === null || _a === void 0 ? void 0 : _a.style.setProperty('pointer-events', 'none');\n this.emit('dragStart', this._nOriginalX, this._nOriginalY);\n }\n getPointerCoordinates(event) {\n const result = {\n x: event.pageX,\n y: event.pageY\n };\n return result;\n }\n}\n//# sourceMappingURL=drag-listener.js.map","import { DragListener } from '../utils/drag-listener';\nimport { numberToPixels } from '../utils/utils';\n/** @internal */\nexport class Splitter {\n constructor(_isVertical, _size, grabSize) {\n this._isVertical = _isVertical;\n this._size = _size;\n this._grabSize = grabSize < this._size ? this._size : grabSize;\n this._element = document.createElement('div');\n this._element.classList.add(\"lm_splitter\" /* DomConstants.ClassName.Splitter */);\n const dragHandleElement = document.createElement('div');\n dragHandleElement.classList.add(\"lm_drag_handle\" /* DomConstants.ClassName.DragHandle */);\n const handleExcessSize = this._grabSize - this._size;\n const handleExcessPos = handleExcessSize / 2;\n if (this._isVertical) {\n dragHandleElement.style.top = numberToPixels(-handleExcessPos);\n dragHandleElement.style.height = numberToPixels(this._size + handleExcessSize);\n this._element.classList.add(\"lm_vertical\" /* DomConstants.ClassName.Vertical */);\n this._element.style.height = numberToPixels(this._size);\n }\n else {\n dragHandleElement.style.left = numberToPixels(-handleExcessPos);\n dragHandleElement.style.width = numberToPixels(this._size + handleExcessSize);\n this._element.classList.add(\"lm_horizontal\" /* DomConstants.ClassName.Horizontal */);\n this._element.style.width = numberToPixels(this._size);\n }\n this._element.appendChild(dragHandleElement);\n this._dragListener = new DragListener(this._element, [dragHandleElement]);\n }\n get element() { return this._element; }\n destroy() {\n this._element.remove();\n }\n on(eventName, callback) {\n this._dragListener.on(eventName, callback);\n }\n}\n//# sourceMappingURL=splitter.js.map","import { ItemConfig } from '../config/config';\nimport { Splitter } from '../controls/splitter';\nimport { AssertError, UnexpectedNullError } from '../errors/internal-error';\nimport { ItemType, SizeUnitEnum } from '../utils/types';\nimport { getElementHeight, getElementWidth, getElementWidthAndHeight, numberToPixels, pixelsToNumber, setElementHeight, setElementWidth } from \"../utils/utils\";\nimport { ContentItem } from './content-item';\n/** @public */\nexport class RowOrColumn extends ContentItem {\n /** @internal */\n constructor(isColumn, layoutManager, config, \n /** @internal */\n _rowOrColumnParent) {\n super(layoutManager, config, _rowOrColumnParent, RowOrColumn.createElement(document, isColumn));\n this._rowOrColumnParent = _rowOrColumnParent;\n /** @internal */\n this._splitter = [];\n this.isRow = !isColumn;\n this.isColumn = isColumn;\n this._childElementContainer = this.element;\n this._splitterSize = layoutManager.layoutConfig.dimensions.borderWidth;\n this._splitterGrabSize = layoutManager.layoutConfig.dimensions.borderGrabWidth;\n this._isColumn = isColumn;\n this._dimension = isColumn ? 'height' : 'width';\n this._splitterPosition = null;\n this._splitterMinPosition = null;\n this._splitterMaxPosition = null;\n switch (config.type) {\n case ItemType.row:\n case ItemType.column:\n this._configType = config.type;\n break;\n default:\n throw new AssertError('ROCCCT00925');\n }\n }\n newComponent(componentType, componentState, title, index) {\n const itemConfig = {\n type: 'component',\n componentType,\n componentState,\n title,\n };\n return this.newItem(itemConfig, index);\n }\n addComponent(componentType, componentState, title, index) {\n const itemConfig = {\n type: 'component',\n componentType,\n componentState,\n title,\n };\n return this.addItem(itemConfig, index);\n }\n newItem(itemConfig, index) {\n index = this.addItem(itemConfig, index);\n const createdItem = this.contentItems[index];\n if (ContentItem.isStack(createdItem) && (ItemConfig.isComponent(itemConfig))) {\n // createdItem is a Stack which was created to hold wanted component. Return component\n return createdItem.contentItems[0];\n }\n else {\n return createdItem;\n }\n }\n addItem(itemConfig, index) {\n this.layoutManager.checkMinimiseMaximisedStack();\n const resolvedItemConfig = ItemConfig.resolve(itemConfig, false);\n const contentItem = this.layoutManager.createAndInitContentItem(resolvedItemConfig, this);\n return this.addChild(contentItem, index, false);\n }\n /**\n * Add a new contentItem to the Row or Column\n *\n * @param contentItem -\n * @param index - The position of the new item within the Row or Column.\n * If no index is provided the item will be added to the end\n * @param suspendResize - If true the items won't be resized. This will leave the item in\n * an inconsistent state and is only intended to be used if multiple\n * children need to be added in one go and resize is called afterwards\n *\n * @returns\n */\n addChild(contentItem, index, suspendResize) {\n // contentItem = this.layoutManager._$normalizeContentItem(contentItem, this);\n if (index === undefined) {\n index = this.contentItems.length;\n }\n if (this.contentItems.length > 0) {\n const splitterElement = this.createSplitter(Math.max(0, index - 1)).element;\n if (index > 0) {\n this.contentItems[index - 1].element.insertAdjacentElement('afterend', splitterElement);\n splitterElement.insertAdjacentElement('afterend', contentItem.element);\n }\n else {\n this.contentItems[0].element.insertAdjacentElement('beforebegin', splitterElement);\n splitterElement.insertAdjacentElement('beforebegin', contentItem.element);\n }\n }\n else {\n this._childElementContainer.appendChild(contentItem.element);\n }\n super.addChild(contentItem, index);\n const newItemSize = (1 / this.contentItems.length) * 100;\n if (suspendResize === true) {\n this.emitBaseBubblingEvent('stateChanged');\n return index;\n }\n for (let i = 0; i < this.contentItems.length; i++) {\n const indexedContentItem = this.contentItems[i];\n if (indexedContentItem === contentItem) {\n contentItem.size = newItemSize;\n }\n else {\n const itemSize = indexedContentItem.size *= (100 - newItemSize) / 100;\n indexedContentItem.size = itemSize;\n }\n }\n this.updateSize(false);\n this.emitBaseBubblingEvent('stateChanged');\n return index;\n }\n /**\n * Removes a child of this element\n *\n * @param contentItem -\n * @param keepChild - If true the child will be removed, but not destroyed\n *\n */\n removeChild(contentItem, keepChild) {\n const index = this.contentItems.indexOf(contentItem);\n const splitterIndex = Math.max(index - 1, 0);\n if (index === -1) {\n throw new Error('Can\\'t remove child. ContentItem is not child of this Row or Column');\n }\n /**\n * Remove the splitter before the item or after if the item happens\n * to be the first in the row/column\n */\n if (this._splitter[splitterIndex]) {\n this._splitter[splitterIndex].destroy();\n this._splitter.splice(splitterIndex, 1);\n }\n super.removeChild(contentItem, keepChild);\n if (this.contentItems.length === 1 && this.isClosable === true) {\n const childItem = this.contentItems[0];\n this.contentItems.length = 0;\n this._rowOrColumnParent.replaceChild(this, childItem, true);\n }\n else {\n this.updateSize(false);\n this.emitBaseBubblingEvent('stateChanged');\n }\n }\n /**\n * Replaces a child of this Row or Column with another contentItem\n */\n replaceChild(oldChild, newChild) {\n const size = oldChild.size;\n super.replaceChild(oldChild, newChild);\n newChild.size = size;\n this.updateSize(false);\n this.emitBaseBubblingEvent('stateChanged');\n }\n /**\n * Called whenever the dimensions of this item or one of its parents change\n */\n updateSize(force) {\n this.layoutManager.beginVirtualSizedContainerAdding();\n try {\n this.updateNodeSize();\n this.updateContentItemsSize(force);\n }\n finally {\n this.layoutManager.endVirtualSizedContainerAdding();\n }\n }\n /**\n * Invoked recursively by the layout manager. ContentItem.init appends\n * the contentItem's DOM elements to the container, RowOrColumn init adds splitters\n * in between them\n * @internal\n */\n init() {\n if (this.isInitialised === true)\n return;\n this.updateNodeSize();\n for (let i = 0; i < this.contentItems.length; i++) {\n this._childElementContainer.appendChild(this.contentItems[i].element);\n }\n super.init();\n for (let i = 0; i < this.contentItems.length - 1; i++) {\n this.contentItems[i].element.insertAdjacentElement('afterend', this.createSplitter(i).element);\n }\n this.initContentItems();\n }\n toConfig() {\n const result = {\n type: this.type,\n content: this.calculateConfigContent(),\n size: this.size,\n sizeUnit: this.sizeUnit,\n minSize: this.minSize,\n minSizeUnit: this.minSizeUnit,\n id: this.id,\n isClosable: this.isClosable,\n };\n return result;\n }\n /** @internal */\n setParent(parent) {\n this._rowOrColumnParent = parent;\n super.setParent(parent);\n }\n /** @internal */\n updateNodeSize() {\n if (this.contentItems.length > 0) {\n this.calculateRelativeSizes();\n this.setAbsoluteSizes();\n }\n this.emitBaseBubblingEvent('stateChanged');\n this.emit('resize');\n }\n /**\n * Turns the relative sizes calculated by calculateRelativeSizes into\n * absolute pixel values and applies them to the children's DOM elements\n *\n * Assigns additional pixels to counteract Math.floor\n * @internal\n */\n setAbsoluteSizes() {\n const absoluteSizes = this.calculateAbsoluteSizes();\n for (let i = 0; i < this.contentItems.length; i++) {\n if (absoluteSizes.additionalPixel - i > 0) {\n absoluteSizes.itemSizes[i]++;\n }\n if (this._isColumn) {\n setElementWidth(this.contentItems[i].element, absoluteSizes.crossAxisSize);\n setElementHeight(this.contentItems[i].element, absoluteSizes.itemSizes[i]);\n }\n else {\n setElementWidth(this.contentItems[i].element, absoluteSizes.itemSizes[i]);\n setElementHeight(this.contentItems[i].element, absoluteSizes.crossAxisSize);\n }\n }\n }\n /**\n * Calculates the absolute sizes of all of the children of this Item.\n * @returns Set with absolute sizes and additional pixels.\n * @internal\n */\n calculateAbsoluteSizes() {\n const totalSplitterSize = (this.contentItems.length - 1) * this._splitterSize;\n const { width: elementWidth, height: elementHeight } = getElementWidthAndHeight(this.element);\n let totalSize;\n let crossAxisSize;\n if (this._isColumn) {\n totalSize = elementHeight - totalSplitterSize;\n crossAxisSize = elementWidth;\n }\n else {\n totalSize = elementWidth - totalSplitterSize;\n crossAxisSize = elementHeight;\n }\n let totalAssigned = 0;\n const itemSizes = [];\n for (let i = 0; i < this.contentItems.length; i++) {\n const contentItem = this.contentItems[i];\n let itemSize;\n if (contentItem.sizeUnit === SizeUnitEnum.Percent) {\n itemSize = Math.floor(totalSize * (contentItem.size / 100));\n }\n else {\n throw new AssertError('ROCCAS6692');\n }\n totalAssigned += itemSize;\n itemSizes.push(itemSize);\n }\n const additionalPixel = Math.floor(totalSize - totalAssigned);\n return {\n itemSizes,\n additionalPixel,\n totalSize,\n crossAxisSize,\n };\n }\n /**\n * Calculates the relative sizes of all children of this Item. The logic\n * is as follows:\n *\n * - Add up the total size of all items that have a configured size\n *\n * - If the total == 100 (check for floating point errors)\n * Excellent, job done\n *\n * - If the total is \\> 100,\n * set the size of items without set dimensions to 1/3 and add this to the total\n * set the size off all items so that the total is hundred relative to their original size\n *\n * - If the total is \\< 100\n * If there are items without set dimensions, distribute the remainder to 100 evenly between them\n * If there are no items without set dimensions, increase all items sizes relative to\n * their original size so that they add up to 100\n *\n * @internal\n */\n calculateRelativeSizes() {\n let total = 0;\n const itemsWithFractionalSize = [];\n let totalFractionalSize = 0;\n for (let i = 0; i < this.contentItems.length; i++) {\n const contentItem = this.contentItems[i];\n const sizeUnit = contentItem.sizeUnit;\n switch (sizeUnit) {\n case SizeUnitEnum.Percent: {\n total += contentItem.size;\n break;\n }\n case SizeUnitEnum.Fractional: {\n itemsWithFractionalSize.push(contentItem);\n totalFractionalSize += contentItem.size;\n break;\n }\n default:\n throw new AssertError('ROCCRS49110', JSON.stringify(contentItem));\n }\n }\n /**\n * Everything adds up to hundred, all good :-)\n */\n if (Math.round(total) === 100) {\n this.respectMinItemSize();\n return;\n }\n else {\n /**\n * Allocate the remaining size to the items with a fractional size\n */\n if (Math.round(total) < 100 && itemsWithFractionalSize.length > 0) {\n const fractionalAllocatedSize = 100 - total;\n for (let i = 0; i < itemsWithFractionalSize.length; i++) {\n const contentItem = itemsWithFractionalSize[i];\n contentItem.size = fractionalAllocatedSize * (contentItem.size / totalFractionalSize);\n contentItem.sizeUnit = SizeUnitEnum.Percent;\n }\n this.respectMinItemSize();\n return;\n }\n else {\n /**\n * If the total is > 100, but there are also items with a fractional size, assign another 50%\n * to the fractional items\n *\n * This will be reset in the next step\n */\n if (Math.round(total) > 100 && itemsWithFractionalSize.length > 0) {\n for (let i = 0; i < itemsWithFractionalSize.length; i++) {\n const contentItem = itemsWithFractionalSize[i];\n contentItem.size = 50 * (contentItem.size / totalFractionalSize);\n contentItem.sizeUnit = SizeUnitEnum.Percent;\n }\n total += 50;\n }\n /**\n * Set every items size relative to 100 relative to its size to total\n */\n for (let i = 0; i < this.contentItems.length; i++) {\n const contentItem = this.contentItems[i];\n contentItem.size = (contentItem.size / total) * 100;\n }\n this.respectMinItemSize();\n }\n }\n }\n /**\n * Adjusts the column widths to respect the dimensions minItemWidth if set.\n * @internal\n */\n respectMinItemSize() {\n const minItemSize = this.calculateContentItemMinSize(this);\n if (minItemSize <= 0 || this.contentItems.length <= 1) {\n return;\n }\n else {\n let totalOverMin = 0;\n let totalUnderMin = 0;\n const entriesOverMin = [];\n const allEntries = [];\n const absoluteSizes = this.calculateAbsoluteSizes();\n /**\n * Figure out how much we are under the min item size total and how much room we have to use.\n */\n for (let i = 0; i < absoluteSizes.itemSizes.length; i++) {\n const itemSize = absoluteSizes.itemSizes[i];\n let entry;\n if (itemSize < minItemSize) {\n totalUnderMin += minItemSize - itemSize;\n entry = {\n size: minItemSize\n };\n }\n else {\n totalOverMin += itemSize - minItemSize;\n entry = {\n size: itemSize\n };\n entriesOverMin.push(entry);\n }\n allEntries.push(entry);\n }\n /**\n * If there is nothing under min, or there is not enough over to make up the difference, do nothing.\n */\n if (totalUnderMin === 0 || totalUnderMin > totalOverMin) {\n return;\n }\n else {\n /**\n * Evenly reduce all columns that are over the min item width to make up the difference.\n */\n const reducePercent = totalUnderMin / totalOverMin;\n let remainingSize = totalUnderMin;\n for (let i = 0; i < entriesOverMin.length; i++) {\n const entry = entriesOverMin[i];\n const reducedSize = Math.round((entry.size - minItemSize) * reducePercent);\n remainingSize -= reducedSize;\n entry.size -= reducedSize;\n }\n /**\n * Take anything remaining from the last item.\n */\n if (remainingSize !== 0) {\n allEntries[allEntries.length - 1].size -= remainingSize;\n }\n /**\n * Set every items size relative to 100 relative to its size to total\n */\n for (let i = 0; i < this.contentItems.length; i++) {\n const contentItem = this.contentItems[i];\n contentItem.size = (allEntries[i].size / absoluteSizes.totalSize) * 100;\n }\n }\n }\n }\n /**\n * Instantiates a new Splitter, binds events to it and adds\n * it to the array of splitters at the position specified as the index argument\n *\n * What it doesn't do though is append the splitter to the DOM\n *\n * @param index - The position of the splitter\n *\n * @returns\n * @internal\n */\n createSplitter(index) {\n const splitter = new Splitter(this._isColumn, this._splitterSize, this._splitterGrabSize);\n splitter.on('drag', (offsetX, offsetY) => this.onSplitterDrag(splitter, offsetX, offsetY));\n splitter.on('dragStop', () => this.onSplitterDragStop(splitter));\n splitter.on('dragStart', () => this.onSplitterDragStart(splitter));\n this._splitter.splice(index, 0, splitter);\n return splitter;\n }\n /**\n * Locates the instance of Splitter in the array of\n * registered splitters and returns a map containing the contentItem\n * before and after the splitters, both of which are affected if the\n * splitter is moved\n *\n * @returns A map of contentItems that the splitter affects\n * @internal\n */\n getSplitItems(splitter) {\n const index = this._splitter.indexOf(splitter);\n return {\n before: this.contentItems[index],\n after: this.contentItems[index + 1]\n };\n }\n calculateContentItemMinSize(contentItem) {\n const minSize = contentItem.minSize;\n if (minSize !== undefined) {\n if (contentItem.minSizeUnit === SizeUnitEnum.Pixel) {\n return minSize;\n }\n else {\n throw new AssertError('ROCGMD98831', JSON.stringify(contentItem));\n }\n }\n else {\n const dimensions = this.layoutManager.layoutConfig.dimensions;\n return this._isColumn ? dimensions.defaultMinItemHeight : dimensions.defaultMinItemWidth;\n }\n }\n /**\n * Gets the minimum dimensions for the given item configuration array\n * @internal\n */\n calculateContentItemsTotalMinSize(contentItems) {\n let totalMinSize = 0;\n for (const contentItem of contentItems) {\n totalMinSize += this.calculateContentItemMinSize(contentItem);\n }\n return totalMinSize;\n }\n /**\n * Invoked when a splitter's dragListener fires dragStart. Calculates the splitters\n * movement area once (so that it doesn't need calculating on every mousemove event)\n * @internal\n */\n onSplitterDragStart(splitter) {\n const items = this.getSplitItems(splitter);\n const beforeWidth = pixelsToNumber(items.before.element.style[this._dimension]);\n const afterSize = pixelsToNumber(items.after.element.style[this._dimension]);\n const beforeMinSize = this.calculateContentItemsTotalMinSize(items.before.contentItems);\n const afterMinSize = this.calculateContentItemsTotalMinSize(items.after.contentItems);\n this._splitterPosition = 0;\n this._splitterMinPosition = -1 * (beforeWidth - beforeMinSize);\n this._splitterMaxPosition = afterSize - afterMinSize;\n }\n /**\n * Invoked when a splitter's DragListener fires drag. Updates the splitter's DOM position,\n * but not the sizes of the elements the splitter controls in order to minimize resize events\n *\n * @param splitter -\n * @param offsetX - Relative pixel values to the splitter's original position. Can be negative\n * @param offsetY - Relative pixel values to the splitter's original position. Can be negative\n * @internal\n */\n onSplitterDrag(splitter, offsetX, offsetY) {\n let offset = this._isColumn ? offsetY : offsetX;\n if (this._splitterMinPosition === null || this._splitterMaxPosition === null) {\n throw new UnexpectedNullError('ROCOSD59226');\n }\n offset = Math.max(offset, this._splitterMinPosition);\n offset = Math.min(offset, this._splitterMaxPosition);\n this._splitterPosition = offset;\n const offsetPixels = numberToPixels(offset);\n if (this._isColumn) {\n splitter.element.style.top = offsetPixels;\n }\n else {\n splitter.element.style.left = offsetPixels;\n }\n }\n /**\n * Invoked when a splitter's DragListener fires dragStop. Resets the splitters DOM position,\n * and applies the new sizes to the elements before and after the splitter and their children\n * on the next animation frame\n * @internal\n */\n onSplitterDragStop(splitter) {\n if (this._splitterPosition === null) {\n throw new UnexpectedNullError('ROCOSDS66932');\n }\n else {\n const items = this.getSplitItems(splitter);\n const sizeBefore = pixelsToNumber(items.before.element.style[this._dimension]);\n const sizeAfter = pixelsToNumber(items.after.element.style[this._dimension]);\n const splitterPositionInRange = (this._splitterPosition + sizeBefore) / (sizeBefore + sizeAfter);\n const totalRelativeSize = items.before.size + items.after.size;\n items.before.size = splitterPositionInRange * totalRelativeSize;\n items.after.size = (1 - splitterPositionInRange) * totalRelativeSize;\n splitter.element.style.top = numberToPixels(0);\n splitter.element.style.left = numberToPixels(0);\n globalThis.requestAnimationFrame(() => this.updateSize(false));\n }\n }\n}\n/** @public */\n(function (RowOrColumn) {\n /** @internal */\n function getElementDimensionSize(element, dimension) {\n if (dimension === 'width') {\n return getElementWidth(element);\n }\n else {\n return getElementHeight(element);\n }\n }\n RowOrColumn.getElementDimensionSize = getElementDimensionSize;\n /** @internal */\n function setElementDimensionSize(element, dimension, value) {\n if (dimension === 'width') {\n return setElementWidth(element, value);\n }\n else {\n return setElementHeight(element, value);\n }\n }\n RowOrColumn.setElementDimensionSize = setElementDimensionSize;\n /** @internal */\n function createElement(document, isColumn) {\n const element = document.createElement('div');\n element.classList.add(\"lm_item\" /* DomConstants.ClassName.Item */);\n if (isColumn) {\n element.classList.add(\"lm_column\" /* DomConstants.ClassName.Column */);\n }\n else {\n element.classList.add(\"lm_row\" /* DomConstants.ClassName.Row */);\n }\n return element;\n }\n RowOrColumn.createElement = createElement;\n})(RowOrColumn || (RowOrColumn = {}));\n//# sourceMappingURL=row-or-column.js.map","import { ItemConfig } from '../config/config';\nimport { ResolvedGroundItemConfig, ResolvedHeaderedItemConfig, ResolvedItemConfig, ResolvedRootItemConfig, ResolvedStackItemConfig } from '../config/resolved-config';\nimport { AssertError, UnexpectedNullError } from '../errors/internal-error';\nimport { ItemType, SizeUnitEnum } from '../utils/types';\nimport { getElementWidthAndHeight, setElementHeight, setElementWidth } from '../utils/utils';\nimport { ComponentItem } from './component-item';\nimport { ComponentParentableItem } from './component-parentable-item';\nimport { ContentItem } from './content-item';\nimport { RowOrColumn } from './row-or-column';\n/**\n * GroundItem is the ContentItem whose one child is the root ContentItem (Root is planted in Ground).\n * (Previously it was called root however this was incorrect as its child is the root item)\n * There is only one instance of GroundItem and it is automatically created by the Layout Manager\n * @internal\n */\nexport class GroundItem extends ComponentParentableItem {\n constructor(layoutManager, rootItemConfig, containerElement) {\n super(layoutManager, ResolvedGroundItemConfig.create(rootItemConfig), null, GroundItem.createElement(document));\n this.isGround = true;\n this._childElementContainer = this.element;\n this._containerElement = containerElement;\n // insert before any pre-existing content elements\n let before = null;\n while (true) {\n const prev = before ? before.previousSibling : this._containerElement.lastChild;\n if (prev instanceof Element\n && prev.classList.contains(\"lm_content\" /* DomConstants.ClassName.Content */)) {\n before = prev;\n }\n else {\n break;\n }\n }\n this._containerElement.insertBefore(this.element, before);\n }\n init() {\n if (this.isInitialised === true)\n return;\n this.updateNodeSize();\n for (let i = 0; i < this.contentItems.length; i++) {\n this._childElementContainer.appendChild(this.contentItems[i].element);\n }\n super.init();\n this.initContentItems();\n }\n /**\n * Loads a new Layout\n * Internal only. To load a new layout with API, use {@link (LayoutManager:class).loadLayout}\n */\n loadRoot(rootItemConfig) {\n // Remove existing root if it exists\n this.clearRoot();\n if (rootItemConfig !== undefined) {\n const rootContentItem = this.layoutManager.createAndInitContentItem(rootItemConfig, this);\n this.addChild(rootContentItem, 0);\n }\n }\n clearRoot() {\n // Remove existing root if it exists\n const contentItems = this.contentItems;\n switch (contentItems.length) {\n case 0: {\n return;\n }\n case 1: {\n const existingRootContentItem = contentItems[0];\n existingRootContentItem.remove();\n return;\n }\n default: {\n throw new AssertError('GILR07721');\n }\n }\n }\n /**\n * Adds a ContentItem child to root ContentItem.\n * Internal only. To load a add with API, use {@link (LayoutManager:class).addItem}\n * @returns -1 if added as root otherwise index in root ContentItem's content\n */\n addItem(itemConfig, index) {\n this.layoutManager.checkMinimiseMaximisedStack();\n const resolvedItemConfig = ItemConfig.resolve(itemConfig, false);\n let parent;\n if (this.contentItems.length > 0) {\n parent = this.contentItems[0];\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n parent = this;\n }\n if (parent.isComponent) {\n throw new Error('Cannot add item as child to ComponentItem');\n }\n else {\n const contentItem = this.layoutManager.createAndInitContentItem(resolvedItemConfig, parent);\n index = parent.addChild(contentItem, index);\n return (parent === this) ? -1 : index;\n }\n }\n loadComponentAsRoot(itemConfig) {\n // Remove existing root if it exists\n this.clearRoot();\n const resolvedItemConfig = ItemConfig.resolve(itemConfig, false);\n if (resolvedItemConfig.maximised) {\n throw new Error('Root Component cannot be maximised');\n }\n else {\n const rootContentItem = new ComponentItem(this.layoutManager, resolvedItemConfig, this);\n rootContentItem.init();\n this.addChild(rootContentItem, 0);\n }\n }\n /**\n * Adds a Root ContentItem.\n * Internal only. To replace Root ContentItem with API, use {@link (LayoutManager:class).loadLayout}\n */\n addChild(contentItem, index) {\n if (this.contentItems.length > 0) {\n throw new Error('Ground node can only have a single child');\n }\n else {\n // contentItem = this.layoutManager._$normalizeContentItem(contentItem, this);\n this._childElementContainer.appendChild(contentItem.element);\n index = super.addChild(contentItem, index);\n this.updateSize(false);\n this.emitBaseBubblingEvent('stateChanged');\n return index;\n }\n }\n /** @internal */\n calculateConfigContent() {\n const contentItems = this.contentItems;\n const count = contentItems.length;\n const result = new Array(count);\n for (let i = 0; i < count; i++) {\n const item = contentItems[i];\n const itemConfig = item.toConfig();\n if (ResolvedRootItemConfig.isRootItemConfig(itemConfig)) {\n result[i] = itemConfig;\n }\n else {\n throw new AssertError('RCCC66832');\n }\n }\n return result;\n }\n /** @internal */\n setSize(width, height) {\n if (width === undefined || height === undefined) {\n this.updateSize(false); // For backwards compatibility with v1.x API\n }\n else {\n setElementWidth(this.element, width);\n setElementHeight(this.element, height);\n // GroundItem can be empty\n if (this.contentItems.length > 0) {\n setElementWidth(this.contentItems[0].element, width);\n setElementHeight(this.contentItems[0].element, height);\n }\n this.updateContentItemsSize(false);\n }\n }\n /**\n * Adds a Root ContentItem.\n * Internal only. To replace Root ContentItem with API, use {@link (LayoutManager:class).updateRootSize}\n */\n updateSize(force) {\n this.layoutManager.beginVirtualSizedContainerAdding();\n try {\n this.updateNodeSize();\n this.updateContentItemsSize(force);\n }\n finally {\n this.layoutManager.endVirtualSizedContainerAdding();\n }\n }\n createSideAreas() {\n const areaSize = 50;\n const oppositeSides = GroundItem.Area.oppositeSides;\n const result = new Array(Object.keys(oppositeSides).length);\n let idx = 0;\n for (const key in oppositeSides) {\n const side = key;\n const area = this.getElementArea();\n if (area === null) {\n throw new UnexpectedNullError('RCSA77553');\n }\n else {\n area.side = side;\n if (oppositeSides[side][1] === '2')\n area[side] = area[oppositeSides[side]] - areaSize;\n else\n area[side] = area[oppositeSides[side]] + areaSize;\n area.surface = (area.x2 - area.x1) * (area.y2 - area.y1);\n result[idx++] = area;\n }\n }\n return result;\n }\n highlightDropZone(x, y, area) {\n this.layoutManager.tabDropPlaceholder.remove();\n super.highlightDropZone(x, y, area);\n }\n onDrop(contentItem, area) {\n if (contentItem.isComponent) {\n const itemConfig = ResolvedStackItemConfig.createDefault();\n // since ResolvedItemConfig.contentItems not set up, we need to add header from Component\n const component = contentItem;\n itemConfig.header = ResolvedHeaderedItemConfig.Header.createCopy(component.headerConfig);\n const stack = this.layoutManager.createAndInitContentItem(itemConfig, this);\n stack.addChild(contentItem);\n contentItem = stack;\n }\n if (this.contentItems.length === 0) {\n this.addChild(contentItem);\n }\n else {\n /*\n * If the contentItem that's being dropped is not dropped on a Stack (cases which just passed above and\n * which would wrap the contentItem in a Stack) we need to check whether contentItem is a RowOrColumn.\n * If it is, we need to re-wrap it in a Stack like it was when it was dragged by its Tab (it was dragged!).\n */\n if (contentItem.type === ItemType.row || contentItem.type === ItemType.column) {\n const itemConfig = ResolvedStackItemConfig.createDefault();\n const stack = this.layoutManager.createContentItem(itemConfig, this);\n stack.addChild(contentItem);\n contentItem = stack;\n }\n const type = area.side[0] == 'x' ? ItemType.row : ItemType.column;\n const insertBefore = area.side[1] == '2';\n const column = this.contentItems[0];\n if (!(column instanceof RowOrColumn) || column.type !== type) {\n const itemConfig = ResolvedItemConfig.createDefault(type);\n const rowOrColumn = this.layoutManager.createContentItem(itemConfig, this);\n this.replaceChild(column, rowOrColumn);\n rowOrColumn.addChild(contentItem, insertBefore ? 0 : undefined, true);\n rowOrColumn.addChild(column, insertBefore ? undefined : 0, true);\n column.size = 50;\n contentItem.size = 50;\n contentItem.sizeUnit = SizeUnitEnum.Percent;\n rowOrColumn.updateSize(false);\n }\n else {\n const sibling = column.contentItems[insertBefore ? 0 : column.contentItems.length - 1];\n column.addChild(contentItem, insertBefore ? 0 : undefined, true);\n sibling.size *= 0.5;\n contentItem.size = sibling.size;\n contentItem.sizeUnit = SizeUnitEnum.Percent;\n column.updateSize(false);\n }\n }\n }\n // No ContentItem can dock with groundItem. However Stack can have a GroundItem parent and Stack requires that\n // its parent implement dock() function. Accordingly this function is implemented but throws an exception as it should\n // never be called\n dock() {\n throw new AssertError('GID87731');\n }\n // No ContentItem can dock with groundItem. However Stack can have a GroundItem parent and Stack requires that\n // its parent implement validateDocking() function. Accordingly this function is implemented but throws an exception as it should\n // never be called\n validateDocking() {\n throw new AssertError('GIVD87732');\n }\n getAllContentItems() {\n const result = [this];\n this.deepGetAllContentItems(this.contentItems, result);\n return result;\n }\n getConfigMaximisedItems() {\n const result = [];\n this.deepFilterContentItems(this.contentItems, result, (item) => {\n if (ContentItem.isStack(item) && item.initialWantMaximise) {\n return true;\n }\n else {\n if (ContentItem.isComponentItem(item) && item.initialWantMaximise) {\n return true;\n }\n else {\n return false;\n }\n }\n });\n return result;\n }\n getItemsByPopInParentId(popInParentId) {\n const result = [];\n this.deepFilterContentItems(this.contentItems, result, (item) => item.popInParentIds.includes(popInParentId));\n return result;\n }\n toConfig() {\n throw new Error('Cannot generate GroundItem config');\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n setActiveComponentItem(item, focus, suppressFocusEvent) {\n // only applicable if ComponentItem is root and then it always has focus\n }\n updateNodeSize() {\n const { width, height } = getElementWidthAndHeight(this._containerElement);\n setElementWidth(this.element, width);\n setElementHeight(this.element, height);\n /*\n * GroundItem can be empty\n */\n if (this.contentItems.length > 0) {\n setElementWidth(this.contentItems[0].element, width);\n setElementHeight(this.contentItems[0].element, height);\n }\n }\n deepGetAllContentItems(content, result) {\n for (let i = 0; i < content.length; i++) {\n const contentItem = content[i];\n result.push(contentItem);\n this.deepGetAllContentItems(contentItem.contentItems, result);\n }\n }\n deepFilterContentItems(content, result, checkAcceptFtn) {\n for (let i = 0; i < content.length; i++) {\n const contentItem = content[i];\n if (checkAcceptFtn(contentItem)) {\n result.push(contentItem);\n }\n this.deepFilterContentItems(contentItem.contentItems, result, checkAcceptFtn);\n }\n }\n}\n/** @internal */\n(function (GroundItem) {\n let Area;\n (function (Area) {\n Area.oppositeSides = {\n y2: 'y1',\n x2: 'x1',\n y1: 'y2',\n x1: 'x2',\n };\n })(Area = GroundItem.Area || (GroundItem.Area = {}));\n function createElement(document) {\n const element = document.createElement('div');\n element.classList.add(\"lm_goldenlayout\" /* DomConstants.ClassName.GoldenLayout */);\n element.classList.add(\"lm_item\" /* DomConstants.ClassName.Item */);\n element.classList.add(\"lm_root\" /* DomConstants.ClassName.Root */);\n return element;\n }\n GroundItem.createElement = createElement;\n})(GroundItem || (GroundItem = {}));\n//# sourceMappingURL=ground-item.js.map","/** @internal */\nexport class HeaderButton {\n constructor(_header, label, cssClass, _pushEvent) {\n this._header = _header;\n this._pushEvent = _pushEvent;\n this._clickEventListener = (ev) => this.onClick(ev);\n this._touchStartEventListener = (ev) => this.onTouchStart(ev);\n this._element = document.createElement('div');\n this._element.classList.add(cssClass);\n this._element.title = label;\n this._header.on('destroy', () => this.destroy());\n this._element.addEventListener('click', this._clickEventListener, { passive: true });\n this._element.addEventListener('touchstart', this._touchStartEventListener, { passive: true });\n this._header.controlsContainerElement.appendChild(this._element);\n }\n get element() { return this._element; }\n destroy() {\n var _a;\n this._element.removeEventListener('click', this._clickEventListener);\n this._element.removeEventListener('touchstart', this._touchStartEventListener);\n (_a = this._element.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(this._element);\n }\n onClick(ev) {\n this._pushEvent(ev);\n }\n onTouchStart(ev) {\n this._pushEvent(ev);\n }\n}\n//# sourceMappingURL=header-button.js.map","import { UnexpectedUndefinedError } from '../errors/internal-error';\nimport { DragListener } from '../utils/drag-listener';\n/**\n * Represents an individual tab within a Stack's header\n * @public\n */\nexport class Tab {\n /** @internal */\n constructor(\n /** @internal */\n _layoutManager, \n /** @internal */\n _componentItem, \n /** @internal */\n _closeEvent, \n /** @internal */\n _focusEvent, \n /** @internal */\n _dragStartEvent) {\n var _a;\n this._layoutManager = _layoutManager;\n this._componentItem = _componentItem;\n this._closeEvent = _closeEvent;\n this._focusEvent = _focusEvent;\n this._dragStartEvent = _dragStartEvent;\n /** @internal */\n this._isActive = false;\n /** @internal */\n this._tabClickListener = (ev) => this.onTabClickDown(ev);\n /** @internal */\n this._tabTouchStartListener = (ev) => this.onTabTouchStart(ev);\n /** @internal */\n this._closeClickListener = () => this.onCloseClick();\n /** @internal */\n this._closeTouchStartListener = () => this.onCloseTouchStart();\n // /** @internal */\n // private readonly _closeMouseDownListener = () => this.onCloseMousedown();\n /** @internal */\n this._dragStartListener = (x, y) => this.onDragStart(x, y);\n /** @internal */\n this._contentItemDestroyListener = () => this.onContentItemDestroy();\n /** @internal */\n this._tabTitleChangedListener = (title) => this.setTitle(title);\n this._element = document.createElement('div');\n this._element.classList.add(\"lm_tab\" /* DomConstants.ClassName.Tab */);\n this._titleElement = document.createElement('span');\n this._titleElement.classList.add(\"lm_title\" /* DomConstants.ClassName.Title */);\n this._closeElement = document.createElement('div');\n this._closeElement.classList.add(\"lm_close_tab\" /* DomConstants.ClassName.CloseTab */);\n this._element.appendChild(this._titleElement);\n this._element.appendChild(this._closeElement);\n if (_componentItem.isClosable) {\n this._closeElement.style.display = '';\n }\n else {\n this._closeElement.style.display = 'none';\n }\n this.setTitle(_componentItem.title);\n this._componentItem.on('titleChanged', this._tabTitleChangedListener);\n const reorderEnabled = (_a = _componentItem.reorderEnabled) !== null && _a !== void 0 ? _a : this._layoutManager.layoutConfig.settings.reorderEnabled;\n if (reorderEnabled) {\n this.enableReorder();\n }\n this._element.addEventListener('click', this._tabClickListener, { passive: true });\n this._element.addEventListener('touchstart', this._tabTouchStartListener, { passive: true });\n if (this._componentItem.isClosable) {\n this._closeElement.addEventListener('click', this._closeClickListener, { passive: true });\n this._closeElement.addEventListener('touchstart', this._closeTouchStartListener, { passive: true });\n // this._closeElement.addEventListener('mousedown', this._closeMouseDownListener, { passive: true });\n }\n else {\n this._closeElement.remove();\n this._closeElement = undefined;\n }\n this._componentItem.setTab(this);\n this._layoutManager.emit('tabCreated', this);\n }\n get isActive() { return this._isActive; }\n // get header(): Header { return this._header; }\n get componentItem() { return this._componentItem; }\n /** @deprecated use {@link (Tab:class).componentItem} */\n get contentItem() { return this._componentItem; }\n get element() { return this._element; }\n get titleElement() { return this._titleElement; }\n get closeElement() { return this._closeElement; }\n get reorderEnabled() { return this._dragListener !== undefined; }\n set reorderEnabled(value) {\n if (value !== this.reorderEnabled) {\n if (value) {\n this.enableReorder();\n }\n else {\n this.disableReorder();\n }\n }\n }\n /**\n * Sets the tab's title to the provided string and sets\n * its title attribute to a pure text representation (without\n * html tags) of the same string.\n */\n setTitle(title) {\n this._titleElement.innerText = title;\n this._element.title = title;\n }\n /**\n * Sets this tab's active state. To programmatically\n * switch tabs, use Stack.setActiveComponentItem( item ) instead.\n */\n setActive(isActive) {\n if (isActive === this._isActive) {\n return;\n }\n this._isActive = isActive;\n if (isActive) {\n this._element.classList.add(\"lm_active\" /* DomConstants.ClassName.Active */);\n }\n else {\n this._element.classList.remove(\"lm_active\" /* DomConstants.ClassName.Active */);\n }\n }\n /**\n * Destroys the tab\n * @internal\n */\n destroy() {\n var _a, _b;\n this._closeEvent = undefined;\n this._focusEvent = undefined;\n this._dragStartEvent = undefined;\n this._element.removeEventListener('click', this._tabClickListener);\n this._element.removeEventListener('touchstart', this._tabTouchStartListener);\n (_a = this._closeElement) === null || _a === void 0 ? void 0 : _a.removeEventListener('click', this._closeClickListener);\n (_b = this._closeElement) === null || _b === void 0 ? void 0 : _b.removeEventListener('touchstart', this._closeTouchStartListener);\n // this._closeElement?.removeEventListener('mousedown', this._closeMouseDownListener);\n this._componentItem.off('titleChanged', this._tabTitleChangedListener);\n if (this.reorderEnabled) {\n this.disableReorder();\n }\n this._element.remove();\n }\n /** @internal */\n setBlurred() {\n this._element.classList.remove(\"lm_focused\" /* DomConstants.ClassName.Focused */);\n this._titleElement.classList.remove(\"lm_focused\" /* DomConstants.ClassName.Focused */);\n }\n /** @internal */\n setFocused() {\n this._element.classList.add(\"lm_focused\" /* DomConstants.ClassName.Focused */);\n this._titleElement.classList.add(\"lm_focused\" /* DomConstants.ClassName.Focused */);\n }\n /**\n * Callback for the DragListener\n * @param x - The tabs absolute x position\n * @param y - The tabs absolute y position\n * @internal\n */\n onDragStart(x, y) {\n if (this._dragListener === undefined) {\n throw new UnexpectedUndefinedError('TODSDLU10093');\n }\n else {\n if (this._dragStartEvent === undefined) {\n throw new UnexpectedUndefinedError('TODS23309');\n }\n else {\n this._dragStartEvent(x, y, this._dragListener, this.componentItem);\n }\n }\n }\n /** @internal */\n onContentItemDestroy() {\n if (this._dragListener !== undefined) {\n this._dragListener.destroy();\n this._dragListener = undefined;\n }\n }\n /**\n * Callback when the tab is clicked\n * @internal\n */\n onTabClickDown(event) {\n const target = event.target;\n if (target === this._element || target === this._titleElement) {\n // left mouse button\n if (event.button === 0) {\n // event.stopPropagation();\n this.notifyFocus();\n // middle mouse button\n }\n else if (event.button === 1 && this._componentItem.isClosable) {\n // event.stopPropagation();\n this.notifyClose();\n }\n }\n }\n /** @internal */\n onTabTouchStart(event) {\n if (event.target === this._element) {\n this.notifyFocus();\n }\n }\n /**\n * Callback when the tab's close button is clicked\n * @internal\n */\n onCloseClick() {\n this.notifyClose();\n }\n /** @internal */\n onCloseTouchStart() {\n this.notifyClose();\n }\n /**\n * Callback to capture tab close button mousedown\n * to prevent tab from activating.\n * @internal\n */\n // private onCloseMousedown(): void {\n // // event.stopPropagation();\n // }\n /** @internal */\n notifyClose() {\n if (this._closeEvent === undefined) {\n throw new UnexpectedUndefinedError('TNC15007');\n }\n else {\n this._closeEvent(this._componentItem);\n }\n }\n /** @internal */\n notifyFocus() {\n if (this._focusEvent === undefined) {\n throw new UnexpectedUndefinedError('TNA15007');\n }\n else {\n this._focusEvent(this._componentItem);\n }\n }\n /** @internal */\n enableReorder() {\n this._dragListener = new DragListener(this._element, [this._titleElement]);\n this._dragListener.on('dragStart', this._dragStartListener);\n this._componentItem.on('destroy', this._contentItemDestroyListener);\n }\n /** @internal */\n disableReorder() {\n if (this._dragListener === undefined) {\n throw new UnexpectedUndefinedError('TDR87745');\n }\n else {\n this._componentItem.off('destroy', this._contentItemDestroyListener);\n this._dragListener.off('dragStart', this._dragStartListener);\n this._dragListener = undefined;\n }\n }\n}\n//# sourceMappingURL=tab.js.map","import { AssertError } from '../errors/internal-error';\nimport { numberToPixels, pixelsToNumber } from '../utils/utils';\nimport { Tab } from './tab';\n/** @internal */\nexport class TabsContainer {\n constructor(_layoutManager, _componentRemoveEvent, _componentFocusEvent, _componentDragStartEvent, _dropdownActiveChangedEvent) {\n this._layoutManager = _layoutManager;\n this._componentRemoveEvent = _componentRemoveEvent;\n this._componentFocusEvent = _componentFocusEvent;\n this._componentDragStartEvent = _componentDragStartEvent;\n this._dropdownActiveChangedEvent = _dropdownActiveChangedEvent;\n // There is one tab per ComponentItem in stack. However they may not be ordered the same\n this._tabs = [];\n this._lastVisibleTabIndex = -1;\n this._dropdownActive = false;\n this._element = document.createElement('section');\n this._element.classList.add(\"lm_tabs\" /* DomConstants.ClassName.Tabs */);\n this._dropdownElement = document.createElement('section');\n this._dropdownElement.classList.add(\"lm_tabdropdown_list\" /* DomConstants.ClassName.TabDropdownList */);\n this._dropdownElement.style.display = 'none';\n }\n get tabs() { return this._tabs; }\n get tabCount() { return this._tabs.length; }\n get lastVisibleTabIndex() { return this._lastVisibleTabIndex; }\n get element() { return this._element; }\n get dropdownElement() { return this._dropdownElement; }\n get dropdownActive() { return this._dropdownActive; }\n destroy() {\n for (let i = 0; i < this._tabs.length; i++) {\n this._tabs[i].destroy();\n }\n }\n /**\n * Creates a new tab and associates it with a contentItem\n * @param index - The position of the tab\n */\n createTab(componentItem, index) {\n //If there's already a tab relating to the\n //content item, don't do anything\n for (let i = 0; i < this._tabs.length; i++) {\n if (this._tabs[i].componentItem === componentItem) {\n return;\n }\n }\n const tab = new Tab(this._layoutManager, componentItem, (item) => this.handleTabCloseEvent(item), (item) => this.handleTabFocusEvent(item), (x, y, dragListener, item) => this.handleTabDragStartEvent(x, y, dragListener, item));\n if (index === undefined) {\n index = this._tabs.length;\n }\n this._tabs.splice(index, 0, tab);\n if (index < this._element.childNodes.length) {\n this._element.insertBefore(tab.element, this._element.childNodes[index]);\n }\n else {\n this._element.appendChild(tab.element);\n }\n }\n removeTab(componentItem) {\n // componentItem cannot be ActiveComponentItem\n for (let i = 0; i < this._tabs.length; i++) {\n if (this._tabs[i].componentItem === componentItem) {\n const tab = this._tabs[i];\n tab.destroy();\n this._tabs.splice(i, 1);\n return;\n }\n }\n throw new Error('contentItem is not controlled by this header');\n }\n processActiveComponentChanged(newActiveComponentItem) {\n let activeIndex = -1;\n for (let i = 0; i < this._tabs.length; i++) {\n const isActive = this._tabs[i].componentItem === newActiveComponentItem;\n this._tabs[i].setActive(isActive);\n if (isActive) {\n activeIndex = i;\n }\n }\n if (activeIndex < 0) {\n throw new AssertError('HSACI56632');\n }\n else {\n if (this._layoutManager.layoutConfig.settings.reorderOnTabMenuClick) {\n /**\n * If the tab selected was in the dropdown, move everything down one to make way for this one to be the first.\n * This will make sure the most used tabs stay visible.\n */\n if (this._lastVisibleTabIndex !== -1 && activeIndex > this._lastVisibleTabIndex) {\n const activeTab = this._tabs[activeIndex];\n for (let j = activeIndex; j > 0; j--) {\n this._tabs[j] = this._tabs[j - 1];\n }\n this._tabs[0] = activeTab;\n // updateTabSizes will always be called after this and it will reposition tab elements\n }\n }\n }\n }\n /**\n * Pushes the tabs to the tab dropdown if the available space is not sufficient\n */\n updateTabSizes(availableWidth, activeComponentItem) {\n let dropDownActive = false;\n const success = this.tryUpdateTabSizes(dropDownActive, availableWidth, activeComponentItem);\n if (!success) {\n dropDownActive = true;\n // this will always succeed\n this.tryUpdateTabSizes(dropDownActive, availableWidth, activeComponentItem);\n }\n if (dropDownActive !== this._dropdownActive) {\n this._dropdownActive = dropDownActive;\n this._dropdownActiveChangedEvent();\n }\n }\n tryUpdateTabSizes(dropdownActive, availableWidth, activeComponentItem) {\n if (this._tabs.length > 0) {\n if (activeComponentItem === undefined) {\n throw new Error('non-empty tabs must have active component item');\n }\n let cumulativeTabWidth = 0;\n let tabOverlapAllowanceExceeded = false;\n const tabOverlapAllowance = this._layoutManager.layoutConfig.settings.tabOverlapAllowance;\n const activeIndex = this._tabs.indexOf(activeComponentItem.tab);\n const activeTab = this._tabs[activeIndex];\n this._lastVisibleTabIndex = -1;\n for (let i = 0; i < this._tabs.length; i++) {\n const tabElement = this._tabs[i].element;\n //Put the tab in the tabContainer so its true width can be checked\n if (tabElement.parentElement !== this._element) {\n this._element.appendChild(tabElement);\n }\n const tabMarginRightPixels = getComputedStyle(activeTab.element).marginRight;\n const tabMarginRight = pixelsToNumber(tabMarginRightPixels);\n const tabWidth = tabElement.offsetWidth + tabMarginRight;\n cumulativeTabWidth += tabWidth;\n //Include the active tab's width if it isn't already\n //This is to ensure there is room to show the active tab\n let visibleTabWidth = 0;\n if (activeIndex <= i) {\n visibleTabWidth = cumulativeTabWidth;\n }\n else {\n const activeTabMarginRightPixels = getComputedStyle(activeTab.element).marginRight;\n const activeTabMarginRight = pixelsToNumber(activeTabMarginRightPixels);\n visibleTabWidth = cumulativeTabWidth + activeTab.element.offsetWidth + activeTabMarginRight;\n }\n // If the tabs won't fit, check the overlap allowance.\n if (visibleTabWidth > availableWidth) {\n //Once allowance is exceeded, all remaining tabs go to menu.\n if (!tabOverlapAllowanceExceeded) {\n //No overlap for first tab or active tab\n //Overlap spreads among non-active, non-first tabs\n let overlap;\n if (activeIndex > 0 && activeIndex <= i) {\n overlap = (visibleTabWidth - availableWidth) / (i - 1);\n }\n else {\n overlap = (visibleTabWidth - availableWidth) / i;\n }\n //Check overlap against allowance.\n if (overlap < tabOverlapAllowance) {\n for (let j = 0; j <= i; j++) {\n const marginLeft = (j !== activeIndex && j !== 0) ? '-' + numberToPixels(overlap) : '';\n this._tabs[j].element.style.zIndex = numberToPixels(i - j);\n this._tabs[j].element.style.marginLeft = marginLeft;\n }\n this._lastVisibleTabIndex = i;\n if (tabElement.parentElement !== this._element) {\n this._element.appendChild(tabElement);\n }\n }\n else {\n tabOverlapAllowanceExceeded = true;\n }\n }\n else if (i === activeIndex) {\n //Active tab should show even if allowance exceeded. (We left room.)\n tabElement.style.zIndex = 'auto';\n tabElement.style.marginLeft = '';\n if (tabElement.parentElement !== this._element) {\n this._element.appendChild(tabElement);\n }\n }\n if (tabOverlapAllowanceExceeded && i !== activeIndex) {\n if (dropdownActive) {\n //Tab menu already shown, so we just add to it.\n tabElement.style.zIndex = 'auto';\n tabElement.style.marginLeft = '';\n if (tabElement.parentElement !== this._dropdownElement) {\n this._dropdownElement.appendChild(tabElement);\n }\n }\n else {\n //We now know the tab menu must be shown, so we have to recalculate everything.\n return false;\n }\n }\n }\n else {\n this._lastVisibleTabIndex = i;\n tabElement.style.zIndex = 'auto';\n tabElement.style.marginLeft = '';\n if (tabElement.parentElement !== this._element) {\n this._element.appendChild(tabElement);\n }\n }\n }\n }\n return true;\n }\n /**\n * Shows drop down for additional tabs when there are too many to display.\n */\n showAdditionalTabsDropdown() {\n this._dropdownElement.style.display = '';\n }\n /**\n * Hides drop down for additional tabs when there are too many to display.\n */\n hideAdditionalTabsDropdown() {\n this._dropdownElement.style.display = 'none';\n }\n handleTabCloseEvent(componentItem) {\n this._componentRemoveEvent(componentItem);\n }\n handleTabFocusEvent(componentItem) {\n this._componentFocusEvent(componentItem);\n }\n handleTabDragStartEvent(x, y, dragListener, componentItem) {\n this._componentDragStartEvent(x, y, dragListener, componentItem);\n }\n}\n//# sourceMappingURL=tabs-container.js.map","import { UnexpectedUndefinedError } from '../errors/internal-error';\nimport { EventEmitter } from '../utils/event-emitter';\nimport { Side } from '../utils/types';\nimport { numberToPixels, setElementDisplayVisibility } from '../utils/utils';\nimport { HeaderButton } from './header-button';\nimport { TabsContainer } from './tabs-container';\n/**\n * This class represents a header above a Stack ContentItem.\n * @public\n */\nexport class Header extends EventEmitter {\n /** @internal */\n constructor(\n /** @internal */\n _layoutManager, \n /** @internal */\n _parent, settings, \n /** @internal */\n _configClosable, \n /** @internal */\n _getActiveComponentItemEvent, closeEvent, \n /** @internal */\n _popoutEvent, \n /** @internal */\n _maximiseToggleEvent, \n /** @internal */\n _clickEvent, \n /** @internal */\n _touchStartEvent, \n /** @internal */\n _componentRemoveEvent, \n /** @internal */\n _componentFocusEvent, \n /** @internal */\n _componentDragStartEvent) {\n super();\n this._layoutManager = _layoutManager;\n this._parent = _parent;\n this._configClosable = _configClosable;\n this._getActiveComponentItemEvent = _getActiveComponentItemEvent;\n this._popoutEvent = _popoutEvent;\n this._maximiseToggleEvent = _maximiseToggleEvent;\n this._clickEvent = _clickEvent;\n this._touchStartEvent = _touchStartEvent;\n this._componentRemoveEvent = _componentRemoveEvent;\n this._componentFocusEvent = _componentFocusEvent;\n this._componentDragStartEvent = _componentDragStartEvent;\n /** @internal */\n this._clickListener = (ev) => this.onClick(ev);\n /** @internal */\n this._touchStartListener = (ev) => this.onTouchStart(ev);\n /** @internal */\n this._rowColumnClosable = true;\n /** @internal */\n this._closeButton = null;\n /** @internal */\n this._popoutButton = null;\n this._tabsContainer = new TabsContainer(this._layoutManager, (item) => this.handleTabInitiatedComponentRemoveEvent(item), (item) => this.handleTabInitiatedComponentFocusEvent(item), (x, y, dragListener, item) => this.handleTabInitiatedDragStartEvent(x, y, dragListener, item), () => this.processTabDropdownActiveChanged());\n this._show = settings.show;\n this._popoutEnabled = settings.popoutEnabled;\n this._popoutLabel = settings.popoutLabel;\n this._maximiseEnabled = settings.maximiseEnabled;\n this._maximiseLabel = settings.maximiseLabel;\n this._minimiseEnabled = settings.minimiseEnabled;\n this._minimiseLabel = settings.minimiseLabel;\n this._closeEnabled = settings.closeEnabled;\n this._closeLabel = settings.closeLabel;\n this._tabDropdownEnabled = settings.tabDropdownEnabled;\n this._tabDropdownLabel = settings.tabDropdownLabel;\n this.setSide(settings.side);\n this._canRemoveComponent = this._configClosable;\n this._element = document.createElement('section');\n this._element.classList.add(\"lm_header\" /* DomConstants.ClassName.Header */);\n this._controlsContainerElement = document.createElement('section');\n this._controlsContainerElement.classList.add(\"lm_controls\" /* DomConstants.ClassName.Controls */);\n this._element.appendChild(this._tabsContainer.element);\n this._element.appendChild(this._controlsContainerElement);\n this._element.appendChild(this._tabsContainer.dropdownElement);\n this._element.addEventListener('click', this._clickListener, { passive: true });\n this._element.addEventListener('touchstart', this._touchStartListener, { passive: true });\n this._documentMouseUpListener = () => this._tabsContainer.hideAdditionalTabsDropdown();\n globalThis.document.addEventListener('mouseup', this._documentMouseUpListener, { passive: true });\n this._tabControlOffset = this._layoutManager.layoutConfig.settings.tabControlOffset;\n if (this._tabDropdownEnabled) {\n this._tabDropdownButton = new HeaderButton(this, this._tabDropdownLabel, \"lm_tabdropdown\" /* DomConstants.ClassName.TabDropdown */, () => this._tabsContainer.showAdditionalTabsDropdown());\n }\n if (this._popoutEnabled) {\n this._popoutButton = new HeaderButton(this, this._popoutLabel, \"lm_popout\" /* DomConstants.ClassName.Popout */, () => this.handleButtonPopoutEvent());\n }\n /**\n * Maximise control - set the component to the full size of the layout\n */\n if (this._maximiseEnabled) {\n this._maximiseButton = new HeaderButton(this, this._maximiseLabel, \"lm_maximise\" /* DomConstants.ClassName.Maximise */, (ev) => this.handleButtonMaximiseToggleEvent(ev));\n }\n /**\n * Close button\n */\n if (this._configClosable) {\n this._closeButton = new HeaderButton(this, this._closeLabel, \"lm_close\" /* DomConstants.ClassName.Close */, () => {\n closeEvent();\n this.layoutManager.tryDispatchEventToParent('closeButtonPressed');\n });\n }\n this.processTabDropdownActiveChanged();\n }\n // /** @internal */\n // private _activeComponentItem: ComponentItem | null = null; // only used to identify active tab\n get show() { return this._show; }\n get side() { return this._side; }\n get leftRightSided() { return this._leftRightSided; }\n get layoutManager() { return this._layoutManager; }\n get parent() { return this._parent; }\n get tabs() { return this._tabsContainer.tabs; }\n get lastVisibleTabIndex() { return this._tabsContainer.lastVisibleTabIndex; }\n get element() { return this._element; }\n get tabsContainerElement() { return this._tabsContainer.element; }\n get controlsContainerElement() { return this._controlsContainerElement; }\n /**\n * Destroys the entire header\n * @internal\n */\n destroy() {\n this.emit('destroy');\n this._popoutEvent = undefined;\n this._maximiseToggleEvent = undefined;\n this._clickEvent = undefined;\n this._touchStartEvent = undefined;\n this._componentRemoveEvent = undefined;\n this._componentFocusEvent = undefined;\n this._componentDragStartEvent = undefined;\n this._tabsContainer.destroy();\n globalThis.document.removeEventListener('mouseup', this._documentMouseUpListener);\n this._element.remove();\n }\n /**\n * Creates a new tab and associates it with a contentItem\n * @param index - The position of the tab\n * @internal\n */\n createTab(componentItem, index) {\n this._tabsContainer.createTab(componentItem, index);\n }\n /**\n * Finds a tab based on the contentItem its associated with and removes it.\n * Cannot remove tab if it has the active ComponentItem\n * @internal\n */\n removeTab(componentItem) {\n this._tabsContainer.removeTab(componentItem);\n }\n /** @internal */\n processActiveComponentChanged(newActiveComponentItem) {\n this._tabsContainer.processActiveComponentChanged(newActiveComponentItem);\n this.updateTabSizes();\n }\n /** @internal */\n setSide(value) {\n this._side = value;\n this._leftRightSided = [Side.right, Side.left].includes(this._side);\n }\n /**\n * Programmatically set closability.\n * @param value - Whether to enable/disable closability.\n * @returns Whether the action was successful\n * @internal\n */\n setRowColumnClosable(value) {\n this._rowColumnClosable = value;\n this.updateClosability();\n }\n /**\n * Updates the header's closability. If a stack/header is able\n * to close, but has a non closable component added to it, the stack is no\n * longer closable until all components are closable.\n * @internal\n */\n updateClosability() {\n let isClosable;\n if (!this._configClosable) {\n isClosable = false;\n }\n else {\n if (!this._rowColumnClosable) {\n isClosable = false;\n }\n else {\n isClosable = true;\n const len = this.tabs.length;\n for (let i = 0; i < len; i++) {\n const tab = this._tabsContainer.tabs[i];\n const item = tab.componentItem;\n if (!item.isClosable) {\n isClosable = false;\n break;\n }\n }\n }\n }\n if (this._closeButton !== null) {\n setElementDisplayVisibility(this._closeButton.element, isClosable);\n }\n if (this._popoutButton !== null) {\n setElementDisplayVisibility(this._popoutButton.element, isClosable);\n }\n this._canRemoveComponent = isClosable || this._tabsContainer.tabCount > 1;\n }\n /** @internal */\n applyFocusedValue(value) {\n if (value) {\n this._element.classList.add(\"lm_focused\" /* DomConstants.ClassName.Focused */);\n }\n else {\n this._element.classList.remove(\"lm_focused\" /* DomConstants.ClassName.Focused */);\n }\n }\n /** @internal */\n processMaximised() {\n if (this._maximiseButton === undefined) {\n throw new UnexpectedUndefinedError('HPMAX16997');\n }\n else {\n this._maximiseButton.element.setAttribute('title', this._minimiseLabel);\n }\n }\n /** @internal */\n processMinimised() {\n if (this._maximiseButton === undefined) {\n throw new UnexpectedUndefinedError('HPMIN16997');\n }\n else {\n this._maximiseButton.element.setAttribute('title', this._maximiseLabel);\n }\n }\n /**\n * Pushes the tabs to the tab dropdown if the available space is not sufficient\n * @internal\n */\n updateTabSizes() {\n if (this._tabsContainer.tabCount > 0) {\n const headerHeight = this._show ? this._layoutManager.layoutConfig.dimensions.headerHeight : 0;\n if (this._leftRightSided) {\n this._element.style.height = '';\n this._element.style.width = numberToPixels(headerHeight);\n }\n else {\n this._element.style.width = '';\n this._element.style.height = numberToPixels(headerHeight);\n }\n let availableWidth;\n if (this._leftRightSided) {\n availableWidth = this._element.offsetHeight - this._controlsContainerElement.offsetHeight - this._tabControlOffset;\n }\n else {\n availableWidth = this._element.offsetWidth - this._controlsContainerElement.offsetWidth - this._tabControlOffset;\n }\n this._tabsContainer.updateTabSizes(availableWidth, this._getActiveComponentItemEvent());\n }\n }\n /** @internal */\n handleTabInitiatedComponentRemoveEvent(componentItem) {\n if (this._canRemoveComponent) {\n if (this._componentRemoveEvent === undefined) {\n throw new UnexpectedUndefinedError('HHTCE22294');\n }\n else {\n this._componentRemoveEvent(componentItem);\n this.layoutManager.tryDispatchEventToParent('closeButtonPressed');\n }\n }\n }\n /** @internal */\n handleTabInitiatedComponentFocusEvent(componentItem) {\n if (this._componentFocusEvent === undefined) {\n throw new UnexpectedUndefinedError('HHTAE22294');\n }\n else {\n this._componentFocusEvent(componentItem);\n }\n }\n /** @internal */\n handleTabInitiatedDragStartEvent(x, y, dragListener, componentItem) {\n componentItem.isDragged = true;\n if (this._componentDragStartEvent === undefined) {\n throw new UnexpectedUndefinedError('HHTDSE22294');\n }\n else {\n this._componentDragStartEvent(x, y, dragListener, componentItem);\n }\n componentItem.isDragged = false;\n }\n /** @internal */\n processTabDropdownActiveChanged() {\n if (this._tabDropdownButton !== undefined) {\n setElementDisplayVisibility(this._tabDropdownButton.element, this._tabsContainer.dropdownActive);\n }\n }\n /** @internal */\n handleButtonPopoutEvent() {\n if (this._layoutManager.layoutConfig.settings.popoutWholeStack) {\n if (this._popoutEvent === undefined) {\n throw new UnexpectedUndefinedError('HHBPOE17834');\n }\n else {\n this._popoutEvent();\n }\n }\n else {\n const activeComponentItem = this._getActiveComponentItemEvent();\n if (activeComponentItem) {\n activeComponentItem.popout();\n }\n // else: if the stack is empty there won't be an active item (and nothing to popout)\n }\n }\n /** @internal */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n handleButtonMaximiseToggleEvent(ev) {\n if (this._maximiseToggleEvent === undefined) {\n throw new UnexpectedUndefinedError('HHBMTE16834');\n }\n else {\n this._maximiseToggleEvent();\n }\n }\n /**\n * Invoked when the header's background is clicked (not it's tabs or controls)\n * @internal\n */\n onClick(event) {\n if (event.target === this._element) {\n this.notifyClick(event);\n }\n }\n /**\n * Invoked when the header's background is touched (not it's tabs or controls)\n * @internal\n */\n onTouchStart(event) {\n if (event.target === this._element) {\n this.notifyTouchStart(event);\n }\n }\n /** @internal */\n notifyClick(ev) {\n if (this._clickEvent === undefined) {\n throw new UnexpectedUndefinedError('HNHC46834');\n }\n else {\n this._clickEvent(ev);\n }\n }\n /** @internal */\n notifyTouchStart(ev) {\n if (this._touchStartEvent === undefined) {\n throw new UnexpectedUndefinedError('HNHTS46834');\n }\n else {\n this._touchStartEvent(ev);\n }\n }\n}\n//# sourceMappingURL=header.js.map","import { ItemConfig } from '../config/config';\nimport { ResolvedHeaderedItemConfig, ResolvedItemConfig, ResolvedStackItemConfig } from '../config/resolved-config';\nimport { Header } from '../controls/header';\nimport { AssertError, UnexpectedNullError, UnexpectedUndefinedError } from '../errors/internal-error';\nimport { EventEmitter } from '../utils/event-emitter';\nimport { ItemType, Side, SizeUnitEnum, WidthOrHeightPropertyName } from '../utils/types';\nimport { getElementWidthAndHeight, numberToPixels, setElementDisplayVisibility } from '../utils/utils';\nimport { ComponentItem } from './component-item';\nimport { ComponentParentableItem } from './component-parentable-item';\nimport { ContentItem } from './content-item';\n/** @public */\nexport class Stack extends ComponentParentableItem {\n /** @internal */\n constructor(layoutManager, config, parent) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;\n super(layoutManager, config, parent, Stack.createElement(document));\n /** @internal */\n this._headerSideChanged = false;\n /** @internal */\n this._resizeListener = () => this.handleResize();\n /** @internal */\n this._maximisedListener = () => this.handleMaximised();\n /** @internal */\n this._minimisedListener = () => this.handleMinimised();\n this._headerConfig = config.header;\n const layoutHeaderConfig = layoutManager.layoutConfig.header;\n const configContent = config.content;\n // If stack has only one component, then we can also check this for header settings\n let componentHeaderConfig;\n if (configContent.length !== 1) {\n componentHeaderConfig = undefined;\n }\n else {\n const firstChildItemConfig = configContent[0];\n componentHeaderConfig = firstChildItemConfig.header; // will be undefined if not component (and wont be stack)\n }\n this._initialWantMaximise = config.maximised;\n this._initialActiveItemIndex = (_a = config.activeItemIndex) !== null && _a !== void 0 ? _a : 0; // make sure defined\n // check for defined value for each item in order of Stack (this Item), Component (first child), Manager.\n const show = (_d = (_c = (_b = this._headerConfig) === null || _b === void 0 ? void 0 : _b.show) !== null && _c !== void 0 ? _c : componentHeaderConfig === null || componentHeaderConfig === void 0 ? void 0 : componentHeaderConfig.show) !== null && _d !== void 0 ? _d : layoutHeaderConfig.show;\n const popout = (_g = (_f = (_e = this._headerConfig) === null || _e === void 0 ? void 0 : _e.popout) !== null && _f !== void 0 ? _f : componentHeaderConfig === null || componentHeaderConfig === void 0 ? void 0 : componentHeaderConfig.popout) !== null && _g !== void 0 ? _g : layoutHeaderConfig.popout;\n const maximise = (_k = (_j = (_h = this._headerConfig) === null || _h === void 0 ? void 0 : _h.maximise) !== null && _j !== void 0 ? _j : componentHeaderConfig === null || componentHeaderConfig === void 0 ? void 0 : componentHeaderConfig.maximise) !== null && _k !== void 0 ? _k : layoutHeaderConfig.maximise;\n const close = (_o = (_m = (_l = this._headerConfig) === null || _l === void 0 ? void 0 : _l.close) !== null && _m !== void 0 ? _m : componentHeaderConfig === null || componentHeaderConfig === void 0 ? void 0 : componentHeaderConfig.close) !== null && _o !== void 0 ? _o : layoutHeaderConfig.close;\n const minimise = (_r = (_q = (_p = this._headerConfig) === null || _p === void 0 ? void 0 : _p.minimise) !== null && _q !== void 0 ? _q : componentHeaderConfig === null || componentHeaderConfig === void 0 ? void 0 : componentHeaderConfig.minimise) !== null && _r !== void 0 ? _r : layoutHeaderConfig.minimise;\n const tabDropdown = (_u = (_t = (_s = this._headerConfig) === null || _s === void 0 ? void 0 : _s.tabDropdown) !== null && _t !== void 0 ? _t : componentHeaderConfig === null || componentHeaderConfig === void 0 ? void 0 : componentHeaderConfig.tabDropdown) !== null && _u !== void 0 ? _u : layoutHeaderConfig.tabDropdown;\n this._maximisedEnabled = maximise !== false;\n const headerSettings = {\n show: show !== false,\n side: show === false ? Side.top : show,\n popoutEnabled: popout !== false,\n popoutLabel: popout === false ? '' : popout,\n maximiseEnabled: this._maximisedEnabled,\n maximiseLabel: maximise === false ? '' : maximise,\n closeEnabled: close !== false,\n closeLabel: close === false ? '' : close,\n minimiseEnabled: true,\n minimiseLabel: minimise,\n tabDropdownEnabled: tabDropdown !== false,\n tabDropdownLabel: tabDropdown === false ? '' : tabDropdown,\n };\n this._header = new Header(layoutManager, this, headerSettings, config.isClosable && close !== false, () => this.getActiveComponentItem(), () => this.remove(), () => this.handlePopoutEvent(), () => this.toggleMaximise(), (ev) => this.handleHeaderClickEvent(ev), (ev) => this.handleHeaderTouchStartEvent(ev), (item) => this.handleHeaderComponentRemoveEvent(item), (item) => this.handleHeaderComponentFocusEvent(item), (x, y, dragListener, item) => this.handleHeaderComponentStartDragEvent(x, y, dragListener, item));\n // this._dropZones = {};\n this.isStack = true;\n this._childElementContainer = document.createElement('section');\n this._childElementContainer.classList.add(\"lm_items\" /* DomConstants.ClassName.Items */);\n this.on('resize', this._resizeListener);\n if (this._maximisedEnabled) {\n this.on('maximised', this._maximisedListener);\n this.on('minimised', this._minimisedListener);\n }\n this.element.appendChild(this._header.element);\n this.element.appendChild(this._childElementContainer);\n this.setupHeaderPosition();\n this._header.updateClosability();\n }\n get childElementContainer() { return this._childElementContainer; }\n get header() { return this._header; }\n get headerShow() { return this._header.show; }\n get headerSide() { return this._header.side; }\n get headerLeftRightSided() { return this._header.leftRightSided; }\n /** @internal */\n get contentAreaDimensions() { return this._contentAreaDimensions; }\n /** @internal */\n get initialWantMaximise() { return this._initialWantMaximise; }\n get isMaximised() { return this === this.layoutManager.maximisedStack; }\n get stackParent() {\n if (!this.parent) {\n throw new Error('Stack should always have a parent');\n }\n return this.parent;\n }\n /** @internal */\n updateSize(force) {\n this.layoutManager.beginVirtualSizedContainerAdding();\n try {\n this.updateNodeSize();\n this.updateContentItemsSize(force);\n }\n finally {\n this.layoutManager.endVirtualSizedContainerAdding();\n }\n }\n /** @internal */\n init() {\n if (this.isInitialised === true)\n return;\n this.updateNodeSize();\n for (let i = 0; i < this.contentItems.length; i++) {\n this._childElementContainer.appendChild(this.contentItems[i].element);\n }\n super.init();\n const contentItems = this.contentItems;\n const contentItemCount = contentItems.length;\n if (contentItemCount > 0) { // contentItemCount will be 0 on drag drop\n if (this._initialActiveItemIndex < 0 || this._initialActiveItemIndex >= contentItemCount) {\n throw new Error(`ActiveItemIndex out of range: ${this._initialActiveItemIndex} id: ${this.id}`);\n }\n else {\n for (let i = 0; i < contentItemCount; i++) {\n const contentItem = contentItems[i];\n if (!(contentItem instanceof ComponentItem)) {\n throw new Error(`Stack Content Item is not of type ComponentItem: ${i} id: ${this.id}`);\n }\n else {\n this._header.createTab(contentItem, i);\n contentItem.hide();\n contentItem.container.setBaseLogicalZIndex();\n }\n }\n this.setActiveComponentItem(contentItems[this._initialActiveItemIndex], false);\n this._header.updateTabSizes();\n }\n }\n this._header.updateClosability();\n this.initContentItems();\n }\n /** @deprecated Use {@link (Stack:class).setActiveComponentItem} */\n setActiveContentItem(item) {\n if (!ContentItem.isComponentItem(item)) {\n throw new Error('Stack.setActiveContentItem: item is not a ComponentItem');\n }\n else {\n this.setActiveComponentItem(item, false);\n }\n }\n setActiveComponentItem(componentItem, focus, suppressFocusEvent = false) {\n if (this._activeComponentItem !== componentItem) {\n if (this.contentItems.indexOf(componentItem) === -1) {\n throw new Error('componentItem is not a child of this stack');\n }\n else {\n this.layoutManager.beginSizeInvalidation();\n try {\n if (this._activeComponentItem !== undefined) {\n this._activeComponentItem.hide();\n }\n this._activeComponentItem = componentItem;\n this._header.processActiveComponentChanged(componentItem);\n componentItem.show();\n }\n finally {\n this.layoutManager.endSizeInvalidation();\n }\n this.emit('activeContentItemChanged', componentItem);\n this.layoutManager.emit('activeContentItemChanged', componentItem);\n this.emitStateChangedEvent();\n }\n }\n if (this.focused || focus) {\n this.layoutManager.setFocusedComponentItem(componentItem, suppressFocusEvent);\n }\n }\n /** @deprecated Use {@link (Stack:class).getActiveComponentItem} */\n getActiveContentItem() {\n var _a;\n return (_a = this.getActiveComponentItem()) !== null && _a !== void 0 ? _a : null;\n }\n getActiveComponentItem() {\n return this._activeComponentItem;\n }\n /** @internal */\n focusActiveContentItem() {\n var _a;\n (_a = this._activeComponentItem) === null || _a === void 0 ? void 0 : _a.focus();\n }\n /** @internal */\n setFocusedValue(value) {\n this._header.applyFocusedValue(value);\n super.setFocusedValue(value);\n }\n /** @internal */\n setRowColumnClosable(value) {\n this._header.setRowColumnClosable(value);\n }\n newComponent(componentType, componentState, title, index) {\n const itemConfig = {\n type: 'component',\n componentType,\n componentState,\n title,\n };\n return this.newItem(itemConfig, index);\n }\n addComponent(componentType, componentState, title, index) {\n const itemConfig = {\n type: 'component',\n componentType,\n componentState,\n title,\n };\n return this.addItem(itemConfig, index);\n }\n newItem(itemConfig, index) {\n index = this.addItem(itemConfig, index);\n return this.contentItems[index];\n }\n addItem(itemConfig, index) {\n this.layoutManager.checkMinimiseMaximisedStack();\n const resolvedItemConfig = ItemConfig.resolve(itemConfig, false);\n const contentItem = this.layoutManager.createAndInitContentItem(resolvedItemConfig, this);\n return this.addChild(contentItem, index);\n }\n addChild(contentItem, index, focus = false) {\n if (index !== undefined && index > this.contentItems.length) {\n index -= 1;\n throw new AssertError('SAC99728'); // undisplayChild() removed so this condition should no longer occur\n }\n if (!(contentItem instanceof ComponentItem)) {\n throw new AssertError('SACC88532'); // Stacks can only have Component children\n }\n else {\n index = super.addChild(contentItem, index);\n this._childElementContainer.appendChild(contentItem.element);\n this._header.createTab(contentItem, index);\n this.setActiveComponentItem(contentItem, focus);\n this._header.updateTabSizes();\n this.updateSize(false);\n contentItem.container.setBaseLogicalZIndex();\n this._header.updateClosability();\n this.emitStateChangedEvent();\n return index;\n }\n }\n removeChild(contentItem, keepChild) {\n const componentItem = contentItem;\n const index = this.contentItems.indexOf(componentItem);\n const stackWillBeDeleted = this.contentItems.length === 1;\n if (this._activeComponentItem === componentItem) {\n if (componentItem.focused) {\n componentItem.blur();\n }\n if (!stackWillBeDeleted) {\n // At this point we're already sure we have at least one content item left *after*\n // removing contentItem, so we can safely assume index 1 is a valid one if\n // the index of contentItem is 0, otherwise we just use the previous content item.\n const newActiveComponentIdx = index === 0 ? 1 : index - 1;\n this.setActiveComponentItem(this.contentItems[newActiveComponentIdx], false);\n }\n }\n this._header.removeTab(componentItem);\n super.removeChild(componentItem, keepChild);\n if (!stackWillBeDeleted) {\n this._header.updateClosability();\n }\n this.layoutManager.tryDispatchEventToParent('itemDestroyed');\n this.emitStateChangedEvent();\n }\n /**\n * Maximises the Item or minimises it if it is already maximised\n */\n toggleMaximise() {\n if (this.isMaximised) {\n this.minimise();\n }\n else {\n this.maximise();\n }\n }\n maximise() {\n if (!this.isMaximised) {\n this.layoutManager.setMaximisedStack(this);\n const contentItems = this.contentItems;\n const contentItemCount = contentItems.length;\n for (let i = 0; i < contentItemCount; i++) {\n const contentItem = contentItems[i];\n if (contentItem instanceof ComponentItem) {\n contentItem.enterStackMaximised();\n }\n else {\n throw new AssertError('SMAXI87773');\n }\n }\n this.emitStateChangedEvent();\n }\n }\n minimise() {\n if (this.isMaximised) {\n this.layoutManager.setMaximisedStack(undefined);\n const contentItems = this.contentItems;\n const contentItemCount = contentItems.length;\n for (let i = 0; i < contentItemCount; i++) {\n const contentItem = contentItems[i];\n if (contentItem instanceof ComponentItem) {\n contentItem.exitStackMaximised();\n }\n else {\n throw new AssertError('SMINI87773');\n }\n }\n this.emitStateChangedEvent();\n }\n }\n /** @internal */\n destroy() {\n var _a;\n if ((_a = this._activeComponentItem) === null || _a === void 0 ? void 0 : _a.focused) {\n this._activeComponentItem.blur();\n }\n super.destroy();\n this.off('resize', this._resizeListener);\n if (this._maximisedEnabled) {\n this.off('maximised', this._maximisedListener);\n this.off('minimised', this._minimisedListener);\n }\n this._header.destroy();\n }\n toConfig() {\n let activeItemIndex;\n if (this._activeComponentItem) {\n activeItemIndex = this.contentItems.indexOf(this._activeComponentItem);\n if (activeItemIndex < 0) {\n throw new Error('active component item not found in stack');\n }\n }\n if (this.contentItems.length > 0 && activeItemIndex === undefined) {\n throw new Error('expected non-empty stack to have an active component item');\n }\n else {\n const result = {\n type: 'stack',\n content: this.calculateConfigContent(),\n size: this.size,\n sizeUnit: this.sizeUnit,\n minSize: this.minSize,\n minSizeUnit: this.minSizeUnit,\n id: this.id,\n isClosable: this.isClosable,\n maximised: this.isMaximised,\n header: this.createHeaderConfig(),\n activeItemIndex,\n };\n return result;\n }\n }\n /**\n * Ok, this one is going to be the tricky one: The user has dropped a {@link (ContentItem:class)} onto this stack.\n *\n * It was dropped on either the stacks header or the top, right, bottom or left bit of the content area\n * (which one of those is stored in this._dropSegment). Now, if the user has dropped on the header the case\n * is relatively clear: We add the item to the existing stack... job done (might be good to have\n * tab reordering at some point, but lets not sweat it right now)\n *\n * If the item was dropped on the content part things are a bit more complicated. If it was dropped on either the\n * top or bottom region we need to create a new column and place the items accordingly.\n * Unless, of course if the stack is already within a column... in which case we want\n * to add the newly created item to the existing column...\n * either prepend or append it, depending on wether its top or bottom.\n *\n * Same thing for rows and left / right drop segments... so in total there are 9 things that can potentially happen\n * (left, top, right, bottom) * is child of the right parent (row, column) + header drop\n *\n * @internal\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onDrop(contentItem, area) {\n /*\n * The item was dropped on the header area. Just add it as a child of this stack and\n * get the hell out of this logic\n */\n if (this._dropSegment === \"header\" /* Stack.Segment.Header */) {\n this.resetHeaderDropZone();\n if (this._dropIndex === undefined) {\n throw new UnexpectedUndefinedError('SODDI68990');\n }\n else {\n this.addChild(contentItem, this._dropIndex);\n return;\n }\n }\n /*\n * The stack is empty. Let's just add the element.\n */\n if (this._dropSegment === \"body\" /* Stack.Segment.Body */) {\n this.addChild(contentItem, 0, true);\n return;\n }\n /*\n * The item was dropped on the top-, left-, bottom- or right- part of the content. Let's\n * aggregate some conditions to make the if statements later on more readable\n */\n const isVertical = this._dropSegment === \"top\" /* Stack.Segment.Top */ || this._dropSegment === \"bottom\" /* Stack.Segment.Bottom */;\n const isHorizontal = this._dropSegment === \"left\" /* Stack.Segment.Left */ || this._dropSegment === \"right\" /* Stack.Segment.Right */;\n const insertBefore = this._dropSegment === \"top\" /* Stack.Segment.Top */ || this._dropSegment === \"left\" /* Stack.Segment.Left */;\n const hasCorrectParent = (isVertical && this.stackParent.isColumn) || (isHorizontal && this.stackParent.isRow);\n /*\n * The content item can be either a component or a stack. If it is a component, wrap it into a stack\n */\n if (contentItem.isComponent) {\n const itemConfig = ResolvedStackItemConfig.createDefault();\n itemConfig.header = this.createHeaderConfig();\n const stack = this.layoutManager.createAndInitContentItem(itemConfig, this);\n stack.addChild(contentItem);\n contentItem = stack;\n }\n /*\n * If the contentItem that's being dropped is not dropped on a Stack (cases which just passed above and\n * which would wrap the contentItem in a Stack) we need to check whether contentItem is a RowOrColumn.\n * If it is, we need to re-wrap it in a Stack like it was when it was dragged by its Tab (it was dragged!).\n */\n if (contentItem.type === ItemType.row || contentItem.type === ItemType.column) {\n const itemConfig = ResolvedStackItemConfig.createDefault();\n itemConfig.header = this.createHeaderConfig();\n const stack = this.layoutManager.createContentItem(itemConfig, this);\n stack.addChild(contentItem);\n contentItem = stack;\n }\n /*\n * If the item is dropped on top or bottom of a column or left and right of a row, it's already\n * layd out in the correct way. Just add it as a child\n */\n if (hasCorrectParent) {\n const index = this.stackParent.contentItems.indexOf(this);\n this.stackParent.addChild(contentItem, insertBefore ? index : index + 1, true);\n this.size *= 0.5;\n contentItem.size = this.size;\n contentItem.sizeUnit = this.sizeUnit;\n this.stackParent.updateSize(false);\n /*\n * This handles items that are dropped on top or bottom of a row or left / right of a column. We need\n * to create the appropriate contentItem for them to live in\n */\n }\n else {\n const type = isVertical ? ItemType.column : ItemType.row;\n const itemConfig = ResolvedItemConfig.createDefault(type);\n const rowOrColumn = this.layoutManager.createContentItem(itemConfig, this);\n this.stackParent.replaceChild(this, rowOrColumn);\n rowOrColumn.addChild(contentItem, insertBefore ? 0 : undefined, true);\n rowOrColumn.addChild(this, insertBefore ? undefined : 0, true);\n this.size = 50;\n contentItem.size = 50;\n contentItem.sizeUnit = SizeUnitEnum.Percent;\n rowOrColumn.updateSize(false);\n }\n }\n /**\n * If the user hovers above the header part of the stack, indicate drop positions for tabs.\n * otherwise indicate which segment of the body the dragged item would be dropped on\n *\n * @param x - Absolute Screen X\n * @param y - Absolute Screen Y\n * @internal\n */\n highlightDropZone(x, y) {\n for (const key in this._contentAreaDimensions) {\n const segment = key;\n const area = this._contentAreaDimensions[segment].hoverArea;\n if (area.x1 < x && area.x2 > x && area.y1 < y && area.y2 > y) {\n if (segment === \"header\" /* Stack.Segment.Header */) {\n this._dropSegment = \"header\" /* Stack.Segment.Header */;\n this.highlightHeaderDropZone(this._header.leftRightSided ? y : x);\n }\n else {\n this.resetHeaderDropZone();\n this.highlightBodyDropZone(segment);\n }\n return;\n }\n }\n }\n /** @internal */\n getArea() {\n if (this.element.style.display === 'none') {\n return null;\n }\n const headerArea = super.getElementArea(this._header.element);\n const contentArea = super.getElementArea(this._childElementContainer);\n if (headerArea === null || contentArea === null) {\n throw new UnexpectedNullError('SGAHC13086');\n }\n const contentWidth = contentArea.x2 - contentArea.x1;\n const contentHeight = contentArea.y2 - contentArea.y1;\n this._contentAreaDimensions = {\n header: {\n hoverArea: {\n x1: headerArea.x1,\n y1: headerArea.y1,\n x2: headerArea.x2,\n y2: headerArea.y2\n },\n highlightArea: {\n x1: headerArea.x1,\n y1: headerArea.y1,\n x2: headerArea.x2,\n y2: headerArea.y2\n }\n }\n };\n /**\n * Highlight the entire body if the stack is empty\n */\n if (this.contentItems.length === 0) {\n this._contentAreaDimensions.body = {\n hoverArea: {\n x1: contentArea.x1,\n y1: contentArea.y1,\n x2: contentArea.x2,\n y2: contentArea.y2\n },\n highlightArea: {\n x1: contentArea.x1,\n y1: contentArea.y1,\n x2: contentArea.x2,\n y2: contentArea.y2\n }\n };\n return super.getElementArea(this.element);\n }\n else {\n this._contentAreaDimensions.left = {\n hoverArea: {\n x1: contentArea.x1,\n y1: contentArea.y1,\n x2: contentArea.x1 + contentWidth * 0.25,\n y2: contentArea.y2\n },\n highlightArea: {\n x1: contentArea.x1,\n y1: contentArea.y1,\n x2: contentArea.x1 + contentWidth * 0.5,\n y2: contentArea.y2\n }\n };\n this._contentAreaDimensions.top = {\n hoverArea: {\n x1: contentArea.x1 + contentWidth * 0.25,\n y1: contentArea.y1,\n x2: contentArea.x1 + contentWidth * 0.75,\n y2: contentArea.y1 + contentHeight * 0.5\n },\n highlightArea: {\n x1: contentArea.x1,\n y1: contentArea.y1,\n x2: contentArea.x2,\n y2: contentArea.y1 + contentHeight * 0.5\n }\n };\n this._contentAreaDimensions.right = {\n hoverArea: {\n x1: contentArea.x1 + contentWidth * 0.75,\n y1: contentArea.y1,\n x2: contentArea.x2,\n y2: contentArea.y2\n },\n highlightArea: {\n x1: contentArea.x1 + contentWidth * 0.5,\n y1: contentArea.y1,\n x2: contentArea.x2,\n y2: contentArea.y2\n }\n };\n this._contentAreaDimensions.bottom = {\n hoverArea: {\n x1: contentArea.x1 + contentWidth * 0.25,\n y1: contentArea.y1 + contentHeight * 0.5,\n x2: contentArea.x1 + contentWidth * 0.75,\n y2: contentArea.y2\n },\n highlightArea: {\n x1: contentArea.x1,\n y1: contentArea.y1 + contentHeight * 0.5,\n x2: contentArea.x2,\n y2: contentArea.y2\n }\n };\n return super.getElementArea(this.element);\n }\n }\n /**\n * Programmatically operate with header position.\n *\n * @param position -\n *\n * @returns previous header position\n * @internal\n */\n positionHeader(position) {\n if (this._header.side !== position) {\n this._header.setSide(position);\n this._headerSideChanged = true;\n this.setupHeaderPosition();\n }\n }\n /** @internal */\n updateNodeSize() {\n if (this.element.style.display !== 'none') {\n const content = getElementWidthAndHeight(this.element);\n if (this._header.show) {\n const dimension = this._header.leftRightSided ? WidthOrHeightPropertyName.width : WidthOrHeightPropertyName.height;\n content[dimension] -= this.layoutManager.layoutConfig.dimensions.headerHeight;\n }\n this._childElementContainer.style.width = numberToPixels(content.width);\n this._childElementContainer.style.height = numberToPixels(content.height);\n for (let i = 0; i < this.contentItems.length; i++) {\n this.contentItems[i].element.style.width = numberToPixels(content.width);\n this.contentItems[i].element.style.height = numberToPixels(content.height);\n }\n this.emit('resize');\n this.emitStateChangedEvent();\n }\n }\n /** @internal */\n highlightHeaderDropZone(x) {\n const visibleTabsLength = this._header.lastVisibleTabIndex + 1;\n const tabsContainerElement = this._header.tabsContainerElement;\n const tabsContainerElementChildNodes = tabsContainerElement.childNodes;\n // Create shallow copy of childNodes list, excluding DropPlaceHolder, as we will be modifying the childNodes list\n const visibleTabElements = new Array(visibleTabsLength);\n let tabIndex = 0;\n let tabCount = 0;\n while (tabCount < visibleTabsLength) {\n const visibleTabElement = tabsContainerElementChildNodes[tabIndex++];\n if (visibleTabElement !== this.layoutManager.tabDropPlaceholder) {\n visibleTabElements[tabCount++] = visibleTabElement;\n }\n }\n const dropTargetIndicator = this.layoutManager.dropTargetIndicator;\n if (dropTargetIndicator === null) {\n throw new UnexpectedNullError('SHHDZDTI97110');\n }\n let area;\n // Empty stack\n if (visibleTabsLength === 0) {\n const headerRect = this._header.element.getBoundingClientRect();\n const headerTop = headerRect.top + document.body.scrollTop;\n const headerLeft = headerRect.left + document.body.scrollLeft;\n area = {\n x1: headerLeft,\n x2: headerLeft + 100,\n y1: headerTop + headerRect.height - 20,\n y2: headerTop + headerRect.height,\n };\n this._dropIndex = 0;\n }\n else {\n let tabIndex = 0;\n // This indicates whether our cursor is exactly over a tab\n let isAboveTab = false;\n let tabTop;\n let tabLeft;\n let tabWidth;\n let tabElement;\n do {\n tabElement = visibleTabElements[tabIndex];\n const tabRect = tabElement.getBoundingClientRect();\n const tabRectTop = tabRect.top + document.body.scrollTop;\n const tabRectLeft = tabRect.left + document.body.scrollLeft;\n if (this._header.leftRightSided) {\n tabLeft = tabRectTop;\n tabTop = tabRectLeft;\n tabWidth = tabRect.height;\n }\n else {\n tabLeft = tabRectLeft;\n tabTop = tabRectTop;\n tabWidth = tabRect.width;\n }\n if (x >= tabLeft && x < tabLeft + tabWidth) {\n isAboveTab = true;\n }\n else {\n tabIndex++;\n }\n } while (tabIndex < visibleTabsLength && !isAboveTab);\n // If we're not above any tabs, or to the right of any tab, we are out of the area, so give up\n if (isAboveTab === false && x < tabLeft) {\n return;\n }\n const halfX = tabLeft + tabWidth / 2;\n if (x < halfX) {\n this._dropIndex = tabIndex;\n tabElement.insertAdjacentElement('beforebegin', this.layoutManager.tabDropPlaceholder);\n }\n else {\n this._dropIndex = Math.min(tabIndex + 1, visibleTabsLength);\n tabElement.insertAdjacentElement('afterend', this.layoutManager.tabDropPlaceholder);\n }\n const tabDropPlaceholderRect = this.layoutManager.tabDropPlaceholder.getBoundingClientRect();\n const tabDropPlaceholderRectTop = tabDropPlaceholderRect.top + document.body.scrollTop;\n const tabDropPlaceholderRectLeft = tabDropPlaceholderRect.left + document.body.scrollLeft;\n const tabDropPlaceholderRectWidth = tabDropPlaceholderRect.width;\n if (this._header.leftRightSided) {\n const placeHolderTop = tabDropPlaceholderRectTop;\n area = {\n x1: tabTop,\n x2: tabTop + tabElement.clientHeight,\n y1: placeHolderTop,\n y2: placeHolderTop + tabDropPlaceholderRectWidth,\n };\n }\n else {\n const placeHolderLeft = tabDropPlaceholderRectLeft;\n area = {\n x1: placeHolderLeft,\n x2: placeHolderLeft + tabDropPlaceholderRectWidth,\n y1: tabTop,\n y2: tabTop + tabElement.clientHeight,\n };\n }\n }\n dropTargetIndicator.highlightArea(area, 0);\n return;\n }\n /** @internal */\n resetHeaderDropZone() {\n this.layoutManager.tabDropPlaceholder.remove();\n }\n /** @internal */\n setupHeaderPosition() {\n setElementDisplayVisibility(this._header.element, this._header.show);\n this.element.classList.remove(\"lm_left\" /* DomConstants.ClassName.Left */, \"lm_right\" /* DomConstants.ClassName.Right */, \"lm_bottom\" /* DomConstants.ClassName.Bottom */);\n if (this._header.leftRightSided) {\n this.element.classList.add('lm_' + this._header.side);\n }\n //if ([Side.right, Side.bottom].includes(this._header.side)) {\n // // move the header behind the content.\n // this.element.appendChild(this._header.element);\n //}\n this.updateSize(false);\n }\n /** @internal */\n highlightBodyDropZone(segment) {\n if (this._contentAreaDimensions === undefined) {\n throw new UnexpectedUndefinedError('SHBDZC82265');\n }\n else {\n const highlightArea = this._contentAreaDimensions[segment].highlightArea;\n const dropTargetIndicator = this.layoutManager.dropTargetIndicator;\n if (dropTargetIndicator === null) {\n throw new UnexpectedNullError('SHBDZD96110');\n }\n else {\n dropTargetIndicator.highlightArea(highlightArea, 1);\n this._dropSegment = segment;\n }\n }\n }\n /** @internal */\n handleResize() {\n this._header.updateTabSizes();\n }\n /** @internal */\n handleMaximised() {\n this._header.processMaximised();\n }\n /** @internal */\n handleMinimised() {\n this._header.processMinimised();\n }\n /** @internal */\n handlePopoutEvent() {\n this.popout();\n }\n /** @internal */\n handleHeaderClickEvent(ev) {\n const eventName = EventEmitter.headerClickEventName;\n const bubblingEvent = new EventEmitter.ClickBubblingEvent(eventName, this, ev);\n this.emit(eventName, bubblingEvent);\n }\n /** @internal */\n handleHeaderTouchStartEvent(ev) {\n const eventName = EventEmitter.headerTouchStartEventName;\n const bubblingEvent = new EventEmitter.TouchStartBubblingEvent(eventName, this, ev);\n this.emit(eventName, bubblingEvent);\n }\n /** @internal */\n handleHeaderComponentRemoveEvent(item) {\n this.removeChild(item, false);\n }\n /** @internal */\n handleHeaderComponentFocusEvent(item) {\n this.setActiveComponentItem(item, true);\n }\n /** @internal */\n handleHeaderComponentStartDragEvent(x, y, dragListener, componentItem) {\n if (this.isMaximised === true) {\n this.toggleMaximise();\n }\n this.layoutManager.startComponentDrag(x, y, dragListener, componentItem, this);\n }\n /** @internal */\n createHeaderConfig() {\n if (!this._headerSideChanged) {\n return ResolvedHeaderedItemConfig.Header.createCopy(this._headerConfig);\n }\n else {\n const show = this._header.show ? this._header.side : false;\n let result = ResolvedHeaderedItemConfig.Header.createCopy(this._headerConfig, show);\n if (result === undefined) {\n result = {\n show,\n popout: undefined,\n maximise: undefined,\n close: undefined,\n minimise: undefined,\n tabDropdown: undefined,\n };\n }\n return result;\n }\n }\n /** @internal */\n emitStateChangedEvent() {\n this.emitBaseBubblingEvent('stateChanged');\n }\n}\n/** @public */\n(function (Stack) {\n /** @internal */\n function createElement(document) {\n const element = document.createElement('div');\n element.classList.add(\"lm_item\" /* DomConstants.ClassName.Item */);\n element.classList.add(\"lm_stack\" /* DomConstants.ClassName.Stack */);\n return element;\n }\n Stack.createElement = createElement;\n})(Stack || (Stack = {}));\n//# sourceMappingURL=stack.js.map","import { UnexpectedNullError, UnexpectedUndefinedError } from '../errors/internal-error';\nimport { Stack } from '../items/stack';\nimport { EventEmitter } from '../utils/event-emitter';\nimport { Side } from '../utils/types';\nimport { numberToPixels } from '../utils/utils';\n/**\n * This class creates a temporary container\n * for the component whilst it is being dragged\n * and handles drag events\n * @internal\n */\nexport class DragProxy extends EventEmitter {\n /**\n * @param x - The initial x position\n * @param y - The initial y position\n * @internal\n */\n constructor(x, y, _dragListener, _layoutManager, _componentItem, _originalParent) {\n super();\n this._dragListener = _dragListener;\n this._layoutManager = _layoutManager;\n this._componentItem = _componentItem;\n this._originalParent = _originalParent;\n this._area = null;\n this._lastValidArea = null;\n this._dragListener.on('drag', (offsetX, offsetY, event) => this.onDrag(offsetX, offsetY, event));\n this._dragListener.on('dragStop', () => this.onDrop());\n this.dispatchEventToParent('dragStart');\n this.createDragProxyElements(x, y);\n if (this._componentItem.parent === null) {\n // Note that _contentItem will have dummy GroundItem as parent if initiated by a external drag source\n throw new UnexpectedNullError('DPC10097');\n }\n this._componentItemFocused = this._componentItem.focused;\n if (this._componentItemFocused) {\n this._componentItem.blur();\n }\n this._componentItem.parent.removeChild(this._componentItem, true);\n this.setDimensions();\n document.body.appendChild(this._element);\n this.determineMinMaxXY();\n this._layoutManager.calculateItemAreas();\n this.setDropPosition(x, y);\n }\n get element() { return this._element; }\n dispatchEventToParent(e) {\n this._componentItem.element.dispatchEvent(new Event(e));\n }\n /** Create Stack-like structure to contain the dragged component */\n createDragProxyElements(initialX, initialY) {\n this._element = document.createElement('div');\n this._element.classList.add(\"lm_dragProxy\" /* DomConstants.ClassName.DragProxy */);\n const headerElement = document.createElement('div');\n headerElement.classList.add(\"lm_header\" /* DomConstants.ClassName.Header */);\n const tabsElement = document.createElement('div');\n tabsElement.classList.add(\"lm_tabs\" /* DomConstants.ClassName.Tabs */);\n const tabElement = document.createElement('div');\n tabElement.classList.add(\"lm_tab\" /* DomConstants.ClassName.Tab */);\n const titleElement = document.createElement('span');\n titleElement.classList.add(\"lm_title\" /* DomConstants.ClassName.Title */);\n tabElement.appendChild(titleElement);\n tabsElement.appendChild(tabElement);\n headerElement.appendChild(tabsElement);\n this._proxyContainerElement = document.createElement('div');\n this._proxyContainerElement.classList.add(\"lm_content\" /* DomConstants.ClassName.Content */);\n this._element.appendChild(headerElement);\n this._element.appendChild(this._proxyContainerElement);\n if (this._originalParent instanceof Stack && this._originalParent.headerShow) {\n this._sided = this._originalParent.headerLeftRightSided;\n this._element.classList.add('lm_' + this._originalParent.headerSide);\n if ([Side.right, Side.bottom].indexOf(this._originalParent.headerSide) >= 0) {\n this._proxyContainerElement.insertAdjacentElement('afterend', headerElement);\n }\n }\n this._element.style.left = numberToPixels(initialX);\n this._element.style.top = numberToPixels(initialY);\n tabElement.setAttribute('title', this._componentItem.title);\n titleElement.insertAdjacentText('afterbegin', this._componentItem.title);\n this._proxyContainerElement.appendChild(this._componentItem.element);\n }\n determineMinMaxXY() {\n const groundItem = this._layoutManager.groundItem;\n if (groundItem === undefined) {\n throw new UnexpectedUndefinedError('DPDMMXY73109');\n }\n else {\n const groundElement = groundItem.element;\n const rect = groundElement.getBoundingClientRect();\n this._minX = rect.left + document.body.scrollLeft;\n this._minY = rect.top + document.body.scrollTop;\n this._maxX = this._minX + rect.width;\n this._maxY = this._minY + rect.height;\n }\n }\n /**\n * Callback on every mouseMove event during a drag. Determines if the drag is\n * still within the valid drag area and calls the layoutManager to highlight the\n * current drop area\n *\n * @param offsetX - The difference from the original x position in px\n * @param offsetY - The difference from the original y position in px\n * @param event -\n * @internal\n */\n onDrag(offsetX, offsetY, event) {\n const x = event.pageX;\n const y = event.pageY;\n this.setDropPosition(x, y);\n this._componentItem.drag();\n }\n /**\n * Sets the target position, highlighting the appropriate area\n *\n * @param x - The x position in px\n * @param y - The y position in px\n *\n * @internal\n */\n setDropPosition(x, y) {\n if (this._layoutManager.layoutConfig.settings.constrainDragToContainer) {\n if (x <= this._minX) {\n x = Math.ceil(this._minX);\n }\n else if (x >= this._maxX) {\n x = Math.floor(this._maxX);\n }\n if (y <= this._minY) {\n y = Math.ceil(this._minY);\n }\n else if (y >= this._maxY) {\n y = Math.floor(this._maxY);\n }\n }\n this._element.style.left = numberToPixels(x);\n this._element.style.top = numberToPixels(y);\n this._area = this._layoutManager.getArea(x, y);\n if (this._area !== null) {\n this._lastValidArea = this._area;\n this._area.contentItem.highlightDropZone(x, y, this._area);\n }\n }\n /**\n * Callback when the drag has finished. Determines the drop area\n * and adds the child to it\n * @internal\n */\n onDrop() {\n const dropTargetIndicator = this._layoutManager.dropTargetIndicator;\n if (dropTargetIndicator === null) {\n throw new UnexpectedNullError('DPOD30011');\n }\n else {\n dropTargetIndicator.hide();\n }\n this._componentItem.exitDragMode();\n /*\n * Valid drop area found\n */\n let droppedComponentItem;\n if (this._area !== null) {\n droppedComponentItem = this._componentItem;\n this._area.contentItem.onDrop(droppedComponentItem, this._area);\n /**\n * No valid drop area available at present, but one has been found before.\n * Use it\n */\n }\n else if (this._lastValidArea !== null) {\n droppedComponentItem = this._componentItem;\n const newParentContentItem = this._lastValidArea.contentItem;\n newParentContentItem.onDrop(droppedComponentItem, this._lastValidArea);\n /**\n * No valid drop area found during the duration of the drag. Return\n * content item to its original position if a original parent is provided.\n * (Which is not the case if the drag had been initiated by createDragSource)\n */\n }\n else if (this._originalParent) {\n droppedComponentItem = this._componentItem;\n this._originalParent.addChild(droppedComponentItem);\n /**\n * The drag didn't ultimately end up with adding the content item to\n * any container. In order to ensure clean up happens, destroy the\n * content item.\n */\n }\n else {\n this._componentItem.destroy(); // contentItem children are now destroyed as well\n }\n this._element.remove();\n this._layoutManager.emit('itemDropped', this._componentItem);\n this.dispatchEventToParent('dragStop');\n if (this._componentItemFocused && droppedComponentItem !== undefined) {\n droppedComponentItem.focus();\n }\n }\n /**\n * Updates the Drag Proxy's dimensions\n * @internal\n */\n setDimensions() {\n const dimensions = this._layoutManager.layoutConfig.dimensions;\n if (dimensions === undefined) {\n throw new Error('DragProxy.setDimensions: dimensions undefined');\n }\n let width = dimensions.dragProxyWidth;\n let height = dimensions.dragProxyHeight;\n if (width === undefined || height === undefined) {\n throw new Error('DragProxy.setDimensions: width and/or height undefined');\n }\n const headerHeight = this._layoutManager.layoutConfig.header.show === false ? 0 : dimensions.headerHeight;\n this._element.style.width = numberToPixels(width);\n this._element.style.height = numberToPixels(height);\n width -= (this._sided ? headerHeight : 0);\n height -= (!this._sided ? headerHeight : 0);\n this._proxyContainerElement.style.width = numberToPixels(width);\n this._proxyContainerElement.style.height = numberToPixels(height);\n this._componentItem.enterDragMode(width, height);\n this._componentItem.show();\n }\n}\n//# sourceMappingURL=drag-proxy.js.map","import { ComponentItemConfig as ConfigComponentItemConfig } from '../config/config'; // remove alias in version 3\nimport { ResolvedRowOrColumnItemConfig } from \"../config/resolved-config\";\nimport { UnexpectedNullError } from '../errors/internal-error';\nimport { ComponentItem } from '../items/component-item';\nimport { GroundItem } from '../items/ground-item';\nimport { DragListener } from '../utils/drag-listener';\nimport { DragProxy } from './drag-proxy';\n/**\n * Allows for any DOM item to create a component on drag\n * start to be dragged into the Layout\n * @public\n */\nexport class DragSource {\n /** @internal */\n constructor(\n /** @internal */\n _layoutManager, \n /** @internal */\n _element, \n /** @internal */\n _extraAllowableChildTargets, \n /** @internal @deprecated replace with componentItemConfigOrFtn in version 3 */\n _componentTypeOrFtn, \n /** @internal @deprecated remove in version 3 */\n _componentState, \n /** @internal @deprecated remove in version 3 */\n _title, \n /** @internal @deprecated remove in version 3 */\n _id) {\n this._layoutManager = _layoutManager;\n this._element = _element;\n this._extraAllowableChildTargets = _extraAllowableChildTargets;\n this._componentTypeOrFtn = _componentTypeOrFtn;\n this._componentState = _componentState;\n this._title = _title;\n this._id = _id;\n this._dragListener = null;\n this._dummyGroundContainer = document.createElement('div');\n const dummyRootItemConfig = ResolvedRowOrColumnItemConfig.createDefault('row');\n this._dummyGroundContentItem = new GroundItem(this._layoutManager, dummyRootItemConfig, this._dummyGroundContainer);\n this.createDragListener();\n }\n /**\n * Disposes of the drag listeners so the drag source is not usable any more.\n * @internal\n */\n destroy() {\n this.removeDragListener();\n }\n /**\n * Called initially and after every drag\n * @internal\n */\n createDragListener() {\n this.removeDragListener();\n this._dragListener = new DragListener(this._element, this._extraAllowableChildTargets);\n this._dragListener.on('dragStart', (x, y) => this.onDragStart(x, y));\n this._dragListener.on('dragStop', () => this.onDragStop());\n }\n /**\n * Callback for the DragListener's dragStart event\n *\n * @param x - The x position of the mouse on dragStart\n * @param y - The x position of the mouse on dragStart\n * @internal\n */\n onDragStart(x, y) {\n var _a;\n const type = 'component';\n let dragSourceItemConfig;\n if (typeof this._componentTypeOrFtn === \"function\") {\n const ftnDragSourceItemConfig = this._componentTypeOrFtn();\n // If the componentType property exists, then it is already a ComponentItemConfig so nothing to do\n if (DragSource.isDragSourceComponentItemConfig(ftnDragSourceItemConfig)) {\n dragSourceItemConfig = {\n type,\n componentState: ftnDragSourceItemConfig.state,\n componentType: ftnDragSourceItemConfig.type,\n title: (_a = ftnDragSourceItemConfig.title) !== null && _a !== void 0 ? _a : this._title,\n };\n }\n else {\n dragSourceItemConfig = ftnDragSourceItemConfig;\n }\n }\n else {\n dragSourceItemConfig = {\n type,\n componentState: this._componentState,\n componentType: this._componentTypeOrFtn,\n title: this._title,\n id: this._id,\n };\n }\n // Create a dummy ContentItem only for drag purposes\n // All ContentItems (except for GroundItem) need a parent. When dragging, the parent is not used.\n // Instead of allowing null parents (as Javascript version did), use a temporary dummy GroundItem parent and add ContentItem to that\n // If this does not work, need to create alternative GroundItem class\n const resolvedItemConfig = ConfigComponentItemConfig.resolve(dragSourceItemConfig, false);\n const componentItem = new ComponentItem(this._layoutManager, resolvedItemConfig, this._dummyGroundContentItem);\n this._dummyGroundContentItem.contentItems.push(componentItem);\n if (this._dragListener === null) {\n throw new UnexpectedNullError('DSODSD66746');\n }\n else {\n const dragProxy = new DragProxy(x, y, this._dragListener, this._layoutManager, componentItem, this._dummyGroundContentItem);\n const transitionIndicator = this._layoutManager.transitionIndicator;\n if (transitionIndicator === null) {\n throw new UnexpectedNullError('DSODST66746');\n }\n else {\n transitionIndicator.transitionElements(this._element, dragProxy.element);\n }\n }\n }\n /** @internal */\n onDragStop() {\n // if (this._dummyGroundContentItem === undefined) {\n // throw new UnexpectedUndefinedError('DSODSDRU08116');\n // } else {\n // this._dummyGroundContentItem._$destroy\n // this._dummyGroundContentItem = undefined;\n // }\n this.createDragListener();\n }\n /**\n * Called after every drag and when the drag source is being disposed of.\n * @internal\n */\n removeDragListener() {\n if (this._dragListener !== null) {\n this._dragListener.destroy();\n this._dragListener = null;\n }\n }\n}\n/** @public */\n(function (DragSource) {\n /** @deprecated remove in version 3 */\n function isDragSourceComponentItemConfig(config) {\n return !(\"componentType\" in config);\n }\n DragSource.isDragSourceComponentItemConfig = isDragSourceComponentItemConfig;\n})(DragSource || (DragSource = {}));\n//# sourceMappingURL=drag-source.js.map","import { numberToPixels, setElementDisplayVisibility } from '../utils/utils';\n/** @internal */\nexport class DropTargetIndicator {\n constructor() {\n // Maybe use container instead of Document Body?\n this._element = document.createElement('div');\n this._element.classList.add(\"lm_dropTargetIndicator\" /* DomConstants.ClassName.DropTargetIndicator */);\n const innerElement = document.createElement('div');\n innerElement.classList.add(\"lm_inner\" /* DomConstants.ClassName.Inner */);\n this._element.appendChild(innerElement);\n document.body.appendChild(this._element);\n }\n destroy() {\n this._element.remove();\n }\n highlightArea(area, margin) {\n this._element.style.left = numberToPixels(area.x1 + margin);\n this._element.style.top = numberToPixels(area.y1 + margin);\n this._element.style.width = numberToPixels(area.x2 - area.x1 - margin);\n this._element.style.height = numberToPixels(area.y2 - area.y1 - margin);\n this._element.style.display = 'block';\n }\n hide() {\n setElementDisplayVisibility(this._element, false);\n }\n}\n//# sourceMappingURL=drop-target-indicator.js.map","/** @internal @deprecated To be removed */\nexport class TransitionIndicator {\n constructor() {\n this._element = document.createElement('div');\n this._element.classList.add(\"lm_transition_indicator\" /* DomConstants.ClassName.TransitionIndicator */);\n document.body.appendChild(this._element);\n this._toElement = null;\n this._fromDimensions = null;\n this._totalAnimationDuration = 200;\n this._animationStartTime = null;\n }\n destroy() {\n this._element.remove();\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n transitionElements(fromElement, toElement) {\n /**\n * TODO - This is not quite as cool as expected. Review.\n */\n return;\n // this._toElement = toElement;\n // this._animationStartTime = now();\n // this._fromDimensions = this._measure(fromElement);\n // this._fromDimensions.opacity = 0.8;\n // this._element.show().css(this._fromDimensions);\n // animFrame(fnBind(this._nextAnimationFrame, this));\n }\n nextAnimationFrame() {\n // if (this._toElement === null || this._fromDimensions === null || this._animationStartTime === null) {\n // throw new UnexpectedNullError('TINAFTD97115');\n // } else {\n // const toDimensions = this.measure(this._toElement);\n // const animationProgress = (now() - this._animationStartTime) / this._totalAnimationDuration;\n // const currentFrameStyles = {};\n // const cssProperty;\n // if (animationProgress >= 1) {\n // this._element.style.display = 'none';\n // return;\n // }\n // toDimensions.opacity = 0;\n // for (const cssProperty in this._fromDimensions) {\n // currentFrameStyles[cssProperty] = this._fromDimensions[cssProperty] +\n // (toDimensions[cssProperty] - this._fromDimensions[cssProperty]) *\n // animationProgress;\n // }\n // this._element.css(currentFrameStyles);\n // animFrame(fnBind(this._nextAnimationFrame, this));\n // }\n }\n measure(element) {\n const rect = element.getBoundingClientRect();\n return {\n left: rect.left,\n top: rect.top,\n width: element.offsetWidth,\n height: element.offsetHeight,\n };\n }\n}\n//# sourceMappingURL=transition-indicator.js.map","import { UnexpectedNullError } from '../errors/internal-error';\nimport { EventEmitter } from './event-emitter';\n/**\n * An EventEmitter singleton that propagates events\n * across multiple windows. This is a little bit trickier since\n * windows are allowed to open childWindows in their own right.\n *\n * This means that we deal with a tree of windows. Therefore, we do the event propagation in two phases:\n *\n * - Propagate events from this layout to the parent layout\n * - Repeat until the event arrived at the root layout\n * - Propagate events to this layout and to all children\n * - Repeat until all layouts got the event\n *\n * **WARNING**: Only userBroadcast events are propagated between windows.\n * This means the you have to take care of propagating state changes between windows yourself.\n *\n * @public\n */\nexport class EventHub extends EventEmitter {\n /**\n * Creates a new EventHub instance\n * @param _layoutManager - the layout manager to synchronize between the windows\n * @internal\n */\n constructor(\n /** @internal */\n _layoutManager) {\n super();\n this._layoutManager = _layoutManager;\n /** @internal */\n this._childEventListener = (childEvent) => this.onEventFromChild(childEvent);\n globalThis.addEventListener(EventHub.ChildEventName, this._childEventListener, { passive: true });\n }\n /**\n * Emit an event and notify listeners\n *\n * @param eventName - The name of the event\n * @param args - Additional arguments that will be passed to the listener\n * @public\n */\n emit(eventName, ...args) {\n if (eventName === 'userBroadcast') {\n // Explicitly redirect the user broadcast to our overridden method.\n this.emitUserBroadcast(...args);\n }\n else {\n super.emit(eventName, ...args);\n }\n }\n /**\n * Broadcasts a message to all other currently opened windows.\n * @public\n */\n emitUserBroadcast(...args) {\n // Step 1: Bubble up the event\n this.handleUserBroadcastEvent('userBroadcast', args);\n }\n /**\n * Destroys the EventHub\n * @internal\n */\n destroy() {\n globalThis.removeEventListener(EventHub.ChildEventName, this._childEventListener);\n }\n /**\n * Internal processor to process local events.\n * @internal\n */\n handleUserBroadcastEvent(eventName, args) {\n if (this._layoutManager.isSubWindow) {\n // We are a sub window and received an event from one of our children.\n // So propagate it to the Root.\n this.propagateToParent(eventName, args);\n }\n else {\n // We are the root window, propagate it to the subtree below us.\n this.propagateToThisAndSubtree(eventName, args);\n }\n }\n /**\n * Callback for child events raised on the window\n * @internal\n */\n onEventFromChild(event) {\n const detail = event.detail;\n this.handleUserBroadcastEvent(detail.eventName, detail.args);\n }\n /**\n * Propagates the event to the parent by emitting\n * it on the parent's DOM window\n * @internal\n */\n propagateToParent(eventName, args) {\n const detail = {\n layoutManager: this._layoutManager,\n eventName,\n args: args,\n };\n const eventInit = {\n bubbles: true,\n cancelable: true,\n detail,\n };\n const event = new CustomEvent(EventHub.ChildEventName, eventInit);\n const opener = globalThis.opener;\n if (opener === null) {\n throw new UnexpectedNullError('EHPTP15778');\n }\n opener.dispatchEvent(event);\n }\n /**\n * Propagate events to the whole subtree under this event hub.\n * @internal\n */\n propagateToThisAndSubtree(eventName, args) {\n this.emitUnknown(eventName, ...args);\n for (let i = 0; i < this._layoutManager.openPopouts.length; i++) {\n const childGl = this._layoutManager.openPopouts[i].getGlInstance();\n if (childGl) {\n childGl.eventHub.propagateToThisAndSubtree(eventName, args);\n }\n }\n }\n}\n/** @public */\n(function (EventHub) {\n /** @internal */\n EventHub.ChildEventName = 'gl_child_event';\n})(EventHub || (EventHub = {}));\n//# sourceMappingURL=event-hub.js.map","import { ItemConfig, LayoutConfig } from './config/config';\nimport { ResolvedItemConfig, ResolvedLayoutConfig, ResolvedRootItemConfig } from \"./config/resolved-config\";\nimport { BrowserPopout } from './controls/browser-popout';\nimport { DragProxy } from './controls/drag-proxy';\nimport { DragSource } from './controls/drag-source';\nimport { DropTargetIndicator } from './controls/drop-target-indicator';\nimport { TransitionIndicator } from './controls/transition-indicator';\nimport { ConfigurationError } from './errors/external-error';\nimport { AssertError, UnexpectedNullError, UnexpectedUndefinedError, UnreachableCaseError } from './errors/internal-error';\nimport { ComponentItem } from './items/component-item';\nimport { ContentItem } from './items/content-item';\nimport { GroundItem } from './items/ground-item';\nimport { RowOrColumn } from './items/row-or-column';\nimport { Stack } from './items/stack';\nimport { ConfigMinifier } from './utils/config-minifier';\nimport { EventEmitter } from './utils/event-emitter';\nimport { EventHub } from './utils/event-hub';\nimport { I18nStrings, i18nStrings } from './utils/i18n-strings';\nimport { ItemType, ResponsiveMode } from './utils/types';\nimport { getElementWidthAndHeight, removeFromArray, setElementHeight, setElementWidth } from './utils/utils';\n/**\n * The main class that will be exposed as GoldenLayout.\n */\n/** @public */\nexport class LayoutManager extends EventEmitter {\n /**\n * @param container - A Dom HTML element. Defaults to body\n * @internal\n */\n constructor(parameters) {\n super();\n /** Whether the layout will be automatically be resized to container whenever the container's size is changed\n * Default is true if <body> is the container otherwise false\n * Default will be changed to true for any container in the future\n */\n this.resizeWithContainerAutomatically = false;\n /** The debounce interval (in milliseconds) used whenever a layout is automatically resized. 0 means next tick */\n this.resizeDebounceInterval = 100;\n /** Extend the current debounce delay time period if it is triggered during the delay.\n * If this is true, the layout will only resize when its container has stopped being resized.\n * If it is false, the layout will resize at intervals while its container is being resized.\n */\n this.resizeDebounceExtendedWhenPossible = true;\n /** @internal */\n this._isInitialised = false;\n /** @internal */\n this._groundItem = undefined;\n /** @internal */\n this._openPopouts = [];\n /** @internal */\n this._dropTargetIndicator = null;\n /** @internal */\n this._transitionIndicator = null;\n /** @internal */\n this._itemAreas = [];\n /** @internal */\n this._maximisePlaceholder = LayoutManager.createMaximisePlaceElement(document);\n /** @internal */\n this._tabDropPlaceholder = LayoutManager.createTabDropPlaceholderElement(document);\n /** @internal */\n this._dragSources = [];\n /** @internal */\n this._updatingColumnsResponsive = false;\n /** @internal */\n this._firstLoad = true;\n /** @internal */\n this._eventHub = new EventHub(this);\n /** @internal */\n this._width = null;\n /** @internal */\n this._height = null;\n /** @internal */\n this._virtualSizedContainers = [];\n /** @internal */\n this._virtualSizedContainerAddingBeginCount = 0;\n /** @internal */\n this._sizeInvalidationBeginCount = 0;\n /** @internal */\n this._resizeObserver = new ResizeObserver(() => this.handleContainerResize());\n /** @internal @deprecated to be removed in version 3 */\n this._windowBeforeUnloadListener = () => this.onBeforeUnload();\n /** @internal @deprecated to be removed in version 3 */\n this._windowBeforeUnloadListening = false;\n /** @internal */\n this._maximisedStackBeforeDestroyedListener = (ev) => this.cleanupBeforeMaximisedStackDestroyed(ev);\n this.isSubWindow = parameters.isSubWindow;\n this._constructorOrSubWindowLayoutConfig = parameters.constructorOrSubWindowLayoutConfig;\n I18nStrings.checkInitialise();\n ConfigMinifier.checkInitialise();\n if (parameters.containerElement !== undefined) {\n this._containerElement = parameters.containerElement;\n }\n }\n get container() { return this._containerElement; }\n get isInitialised() { return this._isInitialised; }\n /** @internal */\n get groundItem() { return this._groundItem; }\n /** @internal @deprecated use {@link (LayoutManager:class).groundItem} instead */\n get root() { return this._groundItem; }\n get openPopouts() { return this._openPopouts; }\n /** @internal */\n get dropTargetIndicator() { return this._dropTargetIndicator; }\n /** @internal @deprecated To be removed */\n get transitionIndicator() { return this._transitionIndicator; }\n get width() { return this._width; }\n get height() { return this._height; }\n /**\n * Retrieves the {@link (EventHub:class)} instance associated with this layout manager.\n * This can be used to propagate events between the windows\n * @public\n */\n get eventHub() { return this._eventHub; }\n get rootItem() {\n if (this._groundItem === undefined) {\n throw new Error('Cannot access rootItem before init');\n }\n else {\n const groundContentItems = this._groundItem.contentItems;\n if (groundContentItems.length === 0) {\n return undefined;\n }\n else {\n return this._groundItem.contentItems[0];\n }\n }\n }\n get focusedComponentItem() { return this._focusedComponentItem; }\n /** @internal */\n get tabDropPlaceholder() { return this._tabDropPlaceholder; }\n get maximisedStack() { return this._maximisedStack; }\n /** @deprecated indicates deprecated constructor use */\n get deprecatedConstructor() { return !this.isSubWindow && this._constructorOrSubWindowLayoutConfig !== undefined; }\n /**\n * Destroys the LayoutManager instance itself as well as every ContentItem\n * within it. After this is called nothing should be left of the LayoutManager.\n *\n * This function only needs to be called if an application wishes to destroy the Golden Layout object while\n * a page remains loaded. When a page is unloaded, all resources claimed by Golden Layout will automatically\n * be released.\n */\n destroy() {\n if (this._isInitialised) {\n if (this._windowBeforeUnloadListening) {\n globalThis.removeEventListener('beforeunload', this._windowBeforeUnloadListener);\n this._windowBeforeUnloadListening = false;\n }\n if (this.layoutConfig.settings.closePopoutsOnUnload === true) {\n this.closeAllOpenPopouts();\n }\n this._resizeObserver.disconnect();\n this.checkClearResizeTimeout();\n if (this._groundItem !== undefined) {\n this._groundItem.destroy();\n }\n this._tabDropPlaceholder.remove();\n if (this._dropTargetIndicator !== null) {\n this._dropTargetIndicator.destroy();\n }\n if (this._transitionIndicator !== null) {\n this._transitionIndicator.destroy();\n }\n this._eventHub.destroy();\n for (const dragSource of this._dragSources) {\n dragSource.destroy();\n }\n this._dragSources = [];\n this._isInitialised = false;\n }\n }\n /**\n * Takes a GoldenLayout configuration object and\n * replaces its keys and values recursively with\n * one letter codes\n * @deprecated use {@link (ResolvedLayoutConfig:namespace).minifyConfig} instead\n */\n minifyConfig(config) {\n return ResolvedLayoutConfig.minifyConfig(config);\n }\n /**\n * Takes a configuration Object that was previously minified\n * using minifyConfig and returns its original version\n * @deprecated use {@link (ResolvedLayoutConfig:namespace).unminifyConfig} instead\n */\n unminifyConfig(config) {\n return ResolvedLayoutConfig.unminifyConfig(config);\n }\n /**\n * Called from GoldenLayout class. Finishes of init\n * @internal\n */\n init() {\n this.setContainer();\n this._dropTargetIndicator = new DropTargetIndicator( /*this.container*/);\n this._transitionIndicator = new TransitionIndicator();\n this.updateSizeFromContainer();\n let subWindowRootConfig;\n if (this.isSubWindow) {\n if (this._constructorOrSubWindowLayoutConfig === undefined) {\n // SubWindow LayoutConfig should have been generated by constructor\n throw new UnexpectedUndefinedError('LMIU07155');\n }\n else {\n const root = this._constructorOrSubWindowLayoutConfig.root;\n if (root === undefined) {\n // SubWindow LayoutConfig must not be empty\n throw new AssertError('LMIC07156');\n }\n else {\n if (ItemConfig.isComponent(root)) {\n subWindowRootConfig = root;\n }\n else {\n // SubWindow LayoutConfig must have Component as Root\n throw new AssertError('LMIC07157');\n }\n }\n const resolvedLayoutConfig = LayoutConfig.resolve(this._constructorOrSubWindowLayoutConfig);\n // remove root from layoutConfig\n this.layoutConfig = Object.assign(Object.assign({}, resolvedLayoutConfig), { root: undefined });\n }\n }\n else {\n if (this._constructorOrSubWindowLayoutConfig === undefined) {\n this.layoutConfig = ResolvedLayoutConfig.createDefault(); // will overwritten be loaded via loadLayout\n }\n else {\n // backwards compatibility\n this.layoutConfig = LayoutConfig.resolve(this._constructorOrSubWindowLayoutConfig);\n }\n }\n const layoutConfig = this.layoutConfig;\n this._groundItem = new GroundItem(this, layoutConfig.root, this._containerElement);\n this._groundItem.init();\n this.checkLoadedLayoutMaximiseItem();\n this._resizeObserver.observe(this._containerElement);\n this._isInitialised = true;\n this.adjustColumnsResponsive();\n this.emit('initialised');\n if (subWindowRootConfig !== undefined) {\n // must be SubWindow\n this.loadComponentAsRoot(subWindowRootConfig);\n }\n }\n /**\n * Loads a new layout\n * @param layoutConfig - New layout to be loaded\n */\n loadLayout(layoutConfig) {\n if (!this.isInitialised) {\n // In case application not correctly using legacy constructor\n throw new Error('GoldenLayout: Need to call init() if LayoutConfig with defined root passed to constructor');\n }\n else {\n if (this._groundItem === undefined) {\n throw new UnexpectedUndefinedError('LMLL11119');\n }\n else {\n this.createSubWindows(); // still needs to be tested\n this.layoutConfig = LayoutConfig.resolve(layoutConfig);\n this._groundItem.loadRoot(this.layoutConfig.root);\n this.checkLoadedLayoutMaximiseItem();\n this.adjustColumnsResponsive();\n }\n }\n }\n /**\n * Creates a layout configuration object based on the the current state\n *\n * @public\n * @returns GoldenLayout configuration\n */\n saveLayout() {\n if (this._isInitialised === false) {\n throw new Error('Can\\'t create config, layout not yet initialised');\n }\n else {\n // if (root !== undefined && !(root instanceof ContentItem)) {\n // throw new Error('Root must be a ContentItem');\n // }\n /*\n * Content\n */\n if (this._groundItem === undefined) {\n throw new UnexpectedUndefinedError('LMTC18244');\n }\n else {\n const groundContent = this._groundItem.calculateConfigContent();\n let rootItemConfig;\n if (groundContent.length !== 1) {\n rootItemConfig = undefined;\n }\n else {\n rootItemConfig = groundContent[0];\n }\n /*\n * Retrieve config for subwindows\n */\n this.reconcilePopoutWindows();\n const openPopouts = [];\n for (let i = 0; i < this._openPopouts.length; i++) {\n openPopouts.push(this._openPopouts[i].toConfig());\n }\n const config = {\n root: rootItemConfig,\n openPopouts,\n settings: ResolvedLayoutConfig.Settings.createCopy(this.layoutConfig.settings),\n dimensions: ResolvedLayoutConfig.Dimensions.createCopy(this.layoutConfig.dimensions),\n header: ResolvedLayoutConfig.Header.createCopy(this.layoutConfig.header),\n resolved: true,\n };\n return config;\n }\n }\n }\n /**\n * Removes any existing layout. Effectively, an empty layout will be loaded.\n */\n clear() {\n if (this._groundItem === undefined) {\n throw new UnexpectedUndefinedError('LMCL11129');\n }\n else {\n this._groundItem.clearRoot();\n }\n }\n /**\n * @deprecated Use {@link (LayoutManager:class).saveLayout}\n */\n toConfig() {\n return this.saveLayout();\n }\n /**\n * Adds a new ComponentItem. Will use default location selectors to ensure a location is found and\n * component is successfully added\n * @param componentTypeName - Name of component type to be created.\n * @param state - Optional initial state to be assigned to component\n * @returns New ComponentItem created.\n */\n newComponent(componentType, componentState, title) {\n const componentItem = this.newComponentAtLocation(componentType, componentState, title);\n if (componentItem === undefined) {\n throw new AssertError('LMNC65588');\n }\n else {\n return componentItem;\n }\n }\n /**\n * Adds a ComponentItem at the first valid selector location.\n * @param componentTypeName - Name of component type to be created.\n * @param state - Optional initial state to be assigned to component\n * @param locationSelectors - Array of location selectors used to find location in layout where component\n * will be added. First location in array which is valid will be used. If locationSelectors is undefined,\n * {@link (LayoutManager:namespace).defaultLocationSelectors} will be used\n * @returns New ComponentItem created or undefined if no valid location selector was in array.\n */\n newComponentAtLocation(componentType, componentState, title, locationSelectors) {\n if (this._groundItem === undefined) {\n throw new Error('Cannot add component before init');\n }\n else {\n const location = this.addComponentAtLocation(componentType, componentState, title, locationSelectors);\n if (location === undefined) {\n return undefined;\n }\n else {\n const createdItem = location.parentItem.contentItems[location.index];\n if (!ContentItem.isComponentItem(createdItem)) {\n throw new AssertError('LMNC992877533');\n }\n else {\n return createdItem;\n }\n }\n }\n }\n /**\n * Adds a new ComponentItem. Will use default location selectors to ensure a location is found and\n * component is successfully added\n * @param componentType - Type of component to be created.\n * @param state - Optional initial state to be assigned to component\n * @returns Location of new ComponentItem created.\n */\n addComponent(componentType, componentState, title) {\n const location = this.addComponentAtLocation(componentType, componentState, title);\n if (location === undefined) {\n throw new AssertError('LMAC99943');\n }\n else {\n return location;\n }\n }\n /**\n * Adds a ComponentItem at the first valid selector location.\n * @param componentType - Type of component to be created.\n * @param state - Optional initial state to be assigned to component\n * @param locationSelectors - Array of location selectors used to find determine location in layout where component\n * will be added. First location in array which is valid will be used. If undefined,\n * {@link (LayoutManager:namespace).defaultLocationSelectors} will be used.\n * @returns Location of new ComponentItem created or undefined if no valid location selector was in array.\n */\n addComponentAtLocation(componentType, componentState, title, locationSelectors) {\n const itemConfig = {\n type: 'component',\n componentType,\n componentState,\n title,\n };\n return this.addItemAtLocation(itemConfig, locationSelectors);\n }\n /**\n * Adds a new ContentItem. Will use default location selectors to ensure a location is found and\n * component is successfully added\n * @param itemConfig - ResolvedItemConfig of child to be added.\n * @returns New ContentItem created.\n */\n newItem(itemConfig) {\n const contentItem = this.newItemAtLocation(itemConfig);\n if (contentItem === undefined) {\n throw new AssertError('LMNC65588');\n }\n else {\n return contentItem;\n }\n }\n /**\n * Adds a new child ContentItem under the root ContentItem. If a root does not exist, then create root ContentItem instead\n * @param itemConfig - ResolvedItemConfig of child to be added.\n * @param locationSelectors - Array of location selectors used to find determine location in layout where ContentItem\n * will be added. First location in array which is valid will be used. If undefined,\n * {@link (LayoutManager:namespace).defaultLocationSelectors} will be used.\n * @returns New ContentItem created or undefined if no valid location selector was in array. */\n newItemAtLocation(itemConfig, locationSelectors) {\n if (this._groundItem === undefined) {\n throw new Error('Cannot add component before init');\n }\n else {\n const location = this.addItemAtLocation(itemConfig, locationSelectors);\n if (location === undefined) {\n return undefined;\n }\n else {\n const createdItem = location.parentItem.contentItems[location.index];\n return createdItem;\n }\n }\n }\n /**\n * Adds a new ContentItem. Will use default location selectors to ensure a location is found and\n * component is successfully added.\n * @param itemConfig - ResolvedItemConfig of child to be added.\n * @returns Location of new ContentItem created. */\n addItem(itemConfig) {\n const location = this.addItemAtLocation(itemConfig);\n if (location === undefined) {\n throw new AssertError('LMAI99943');\n }\n else {\n return location;\n }\n }\n /**\n * Adds a ContentItem at the first valid selector location.\n * @param itemConfig - ResolvedItemConfig of child to be added.\n * @param locationSelectors - Array of location selectors used to find determine location in layout where ContentItem\n * will be added. First location in array which is valid will be used. If undefined,\n * {@link (LayoutManager:namespace).defaultLocationSelectors} will be used.\n * @returns Location of new ContentItem created or undefined if no valid location selector was in array. */\n addItemAtLocation(itemConfig, locationSelectors) {\n if (this._groundItem === undefined) {\n throw new Error('Cannot add component before init');\n }\n else {\n if (locationSelectors === undefined) {\n // defaultLocationSelectors should always find a location\n locationSelectors = LayoutManager.defaultLocationSelectors;\n }\n const location = this.findFirstLocation(locationSelectors);\n if (location === undefined) {\n return undefined;\n }\n else {\n let parentItem = location.parentItem;\n let addIdx;\n switch (parentItem.type) {\n case ItemType.ground: {\n const groundItem = parentItem;\n addIdx = groundItem.addItem(itemConfig, location.index);\n if (addIdx >= 0) {\n parentItem = this._groundItem.contentItems[0]; // was added to rootItem\n }\n else {\n addIdx = 0; // was added as rootItem (which is the first and only ContentItem in GroundItem)\n }\n break;\n }\n case ItemType.row:\n case ItemType.column: {\n const rowOrColumn = parentItem;\n addIdx = rowOrColumn.addItem(itemConfig, location.index);\n break;\n }\n case ItemType.stack: {\n if (!ItemConfig.isComponent(itemConfig)) {\n throw Error(i18nStrings[6 /* I18nStringId.ItemConfigIsNotTypeComponent */]);\n }\n else {\n const stack = parentItem;\n addIdx = stack.addItem(itemConfig, location.index);\n break;\n }\n }\n case ItemType.component: {\n throw new AssertError('LMAIALC87444602');\n }\n default:\n throw new UnreachableCaseError('LMAIALU98881733', parentItem.type);\n }\n if (ItemConfig.isComponent(itemConfig)) {\n // see if stack was inserted\n const item = parentItem.contentItems[addIdx];\n if (ContentItem.isStack(item)) {\n parentItem = item;\n addIdx = 0;\n }\n }\n location.parentItem = parentItem;\n location.index = addIdx;\n return location;\n }\n }\n }\n /** Loads the specified component ResolvedItemConfig as root.\n * This can be used to display a Component all by itself. The layout cannot be changed other than having another new layout loaded.\n * Note that, if this layout is saved and reloaded, it will reload with the Component as a child of a Stack.\n */\n loadComponentAsRoot(itemConfig) {\n if (this._groundItem === undefined) {\n throw new Error('Cannot add item before init');\n }\n else {\n this._groundItem.loadComponentAsRoot(itemConfig);\n }\n }\n /** @deprecated Use {@link (LayoutManager:class).setSize} */\n updateSize(width, height) {\n this.setSize(width, height);\n }\n /**\n * Updates the layout managers size\n *\n * @param width - Width in pixels\n * @param height - Height in pixels\n */\n setSize(width, height) {\n this._width = width;\n this._height = height;\n if (this._isInitialised === true) {\n if (this._groundItem === undefined) {\n throw new UnexpectedUndefinedError('LMUS18881');\n }\n else {\n this._groundItem.setSize(this._width, this._height);\n if (this._maximisedStack) {\n const { width, height } = getElementWidthAndHeight(this._containerElement);\n setElementWidth(this._maximisedStack.element, width);\n setElementHeight(this._maximisedStack.element, height);\n this._maximisedStack.updateSize(false);\n }\n this.adjustColumnsResponsive();\n }\n }\n }\n /** @internal */\n beginSizeInvalidation() {\n this._sizeInvalidationBeginCount++;\n }\n /** @internal */\n endSizeInvalidation() {\n if (--this._sizeInvalidationBeginCount === 0) {\n this.updateSizeFromContainer();\n }\n }\n /** @internal */\n updateSizeFromContainer() {\n const { width, height } = getElementWidthAndHeight(this._containerElement);\n this.setSize(width, height);\n }\n /**\n * Update the size of the root ContentItem. This will update the size of all contentItems in the tree\n * @param force - In some cases the size is not updated if it has not changed. In this case, events\n * (such as ComponentContainer.virtualRectingRequiredEvent) are not fired. Setting force to true, ensures the size is updated regardless, and\n * the respective events are fired. This is sometimes necessary when a component's size has not changed but it has become visible, and the\n * relevant events need to be fired.\n */\n updateRootSize(force = false) {\n if (this._groundItem === undefined) {\n throw new UnexpectedUndefinedError('LMURS28881');\n }\n else {\n this._groundItem.updateSize(force);\n }\n }\n /** @public */\n createAndInitContentItem(config, parent) {\n const newItem = this.createContentItem(config, parent);\n newItem.init();\n return newItem;\n }\n /**\n * Recursively creates new item tree structures based on a provided\n * ItemConfiguration object\n *\n * @param config - ResolvedItemConfig\n * @param parent - The item the newly created item should be a child of\n * @internal\n */\n createContentItem(config, parent) {\n if (typeof config.type !== 'string') {\n throw new ConfigurationError('Missing parameter \\'type\\'', JSON.stringify(config));\n }\n /**\n * We add an additional stack around every component that's not within a stack anyways.\n */\n if (\n // If this is a component\n ResolvedItemConfig.isComponentItem(config) &&\n // and it's not already within a stack\n !(parent instanceof Stack) &&\n // and we have a parent\n !!parent &&\n // and it's not the topmost item in a new window\n !(this.isSubWindow === true && parent instanceof GroundItem)) {\n const stackConfig = {\n type: ItemType.stack,\n content: [config],\n size: config.size,\n sizeUnit: config.sizeUnit,\n minSize: config.minSize,\n minSizeUnit: config.minSizeUnit,\n id: config.id,\n maximised: config.maximised,\n isClosable: config.isClosable,\n activeItemIndex: 0,\n header: undefined,\n };\n config = stackConfig;\n }\n const contentItem = this.createContentItemFromConfig(config, parent);\n return contentItem;\n }\n findFirstComponentItemById(id) {\n if (this._groundItem === undefined) {\n throw new UnexpectedUndefinedError('LMFFCIBI82446');\n }\n else {\n return this.findFirstContentItemTypeByIdRecursive(ItemType.component, id, this._groundItem);\n }\n }\n /**\n * Creates a popout window with the specified content at the specified position\n *\n * @param itemConfigOrContentItem - The content of the popout window's layout manager derived from either\n * a {@link (ContentItem:class)} or {@link (ItemConfig:interface)} or ResolvedItemConfig content (array of {@link (ItemConfig:interface)})\n * @param positionAndSize - The width, height, left and top of Popout window\n * @param parentId -The id of the element this item will be appended to when popIn is called\n * @param indexInParent - The position of this item within its parent element\n */\n createPopout(itemConfigOrContentItem, positionAndSize, parentId, indexInParent) {\n if (itemConfigOrContentItem instanceof ContentItem) {\n return this.createPopoutFromContentItem(itemConfigOrContentItem, positionAndSize, parentId, indexInParent);\n }\n else {\n return this.createPopoutFromItemConfig(itemConfigOrContentItem, positionAndSize, parentId, indexInParent);\n }\n }\n /** @internal */\n createPopoutFromContentItem(item, window, parentId, indexInParent) {\n /**\n * If the item is the only component within a stack or for some\n * other reason the only child of its parent the parent will be destroyed\n * when the child is removed.\n *\n * In order to support this we move up the tree until we find something\n * that will remain after the item is being popped out\n */\n let parent = item.parent;\n let child = item;\n while (parent !== null && parent.contentItems.length === 1 && !parent.isGround) {\n child = parent;\n parent = parent.parent;\n }\n if (parent === null) {\n throw new UnexpectedNullError('LMCPFCI00834');\n }\n else {\n if (indexInParent === undefined) {\n indexInParent = parent.contentItems.indexOf(child);\n }\n if (parentId !== null) {\n parent.addPopInParentId(parentId);\n }\n if (window === undefined) {\n const windowLeft = globalThis.screenX || globalThis.screenLeft;\n const windowTop = globalThis.screenY || globalThis.screenTop;\n const offsetLeft = item.element.offsetLeft;\n const offsetTop = item.element.offsetTop;\n // const { left: offsetLeft, top: offsetTop } = getJQueryLeftAndTop(item.element);\n const { width, height } = getElementWidthAndHeight(item.element);\n window = {\n left: windowLeft + offsetLeft,\n top: windowTop + offsetTop,\n width,\n height,\n };\n }\n const itemConfig = item.toConfig();\n item.remove();\n if (!ResolvedRootItemConfig.isRootItemConfig(itemConfig)) {\n throw new Error(`${i18nStrings[0 /* I18nStringId.PopoutCannotBeCreatedWithGroundItemConfig */]}`);\n }\n else {\n return this.createPopoutFromItemConfig(itemConfig, window, parentId, indexInParent);\n }\n }\n }\n /** @internal */\n beginVirtualSizedContainerAdding() {\n if (++this._virtualSizedContainerAddingBeginCount === 0) {\n this._virtualSizedContainers.length = 0;\n }\n }\n /** @internal */\n addVirtualSizedContainer(container) {\n this._virtualSizedContainers.push(container);\n }\n /** @internal */\n endVirtualSizedContainerAdding() {\n if (--this._virtualSizedContainerAddingBeginCount === 0) {\n const count = this._virtualSizedContainers.length;\n if (count > 0) {\n this.fireBeforeVirtualRectingEvent(count);\n for (let i = 0; i < count; i++) {\n const container = this._virtualSizedContainers[i];\n container.notifyVirtualRectingRequired();\n }\n this.fireAfterVirtualRectingEvent();\n this._virtualSizedContainers.length = 0;\n }\n }\n }\n /** @internal */\n fireBeforeVirtualRectingEvent(count) {\n if (this.beforeVirtualRectingEvent !== undefined) {\n this.beforeVirtualRectingEvent(count);\n }\n }\n /** @internal */\n fireAfterVirtualRectingEvent() {\n if (this.afterVirtualRectingEvent !== undefined) {\n this.afterVirtualRectingEvent();\n }\n }\n /** @internal */\n createPopoutFromItemConfig(rootItemConfig, window, parentId, indexInParent) {\n const layoutConfig = this.toConfig();\n const popoutLayoutConfig = {\n root: rootItemConfig,\n openPopouts: [],\n settings: layoutConfig.settings,\n dimensions: layoutConfig.dimensions,\n header: layoutConfig.header,\n window,\n parentId,\n indexInParent,\n resolved: true,\n };\n return this.createPopoutFromPopoutLayoutConfig(popoutLayoutConfig);\n }\n /** @internal */\n createPopoutFromPopoutLayoutConfig(config) {\n var _a, _b, _c, _d;\n const configWindow = config.window;\n const initialWindow = {\n left: (_a = configWindow.left) !== null && _a !== void 0 ? _a : (globalThis.screenX || globalThis.screenLeft + 20),\n top: (_b = configWindow.top) !== null && _b !== void 0 ? _b : (globalThis.screenY || globalThis.screenTop + 20),\n width: (_c = configWindow.width) !== null && _c !== void 0 ? _c : 500,\n height: (_d = configWindow.height) !== null && _d !== void 0 ? _d : 309,\n };\n const browserPopout = new BrowserPopout(config, initialWindow, this);\n browserPopout.on('initialised', () => this.emit('windowOpened', browserPopout));\n browserPopout.on('closed', () => this.reconcilePopoutWindows());\n this._openPopouts.push(browserPopout);\n if (this.layoutConfig.settings.closePopoutsOnUnload && !this._windowBeforeUnloadListening) {\n globalThis.addEventListener('beforeunload', this._windowBeforeUnloadListener, { passive: true });\n this._windowBeforeUnloadListening = true;\n }\n return browserPopout;\n }\n /**\n * Closes all Open Popouts\n * Applications can call this method when a page is unloaded to remove its open popouts\n */\n closeAllOpenPopouts() {\n for (let i = 0; i < this._openPopouts.length; i++) {\n this._openPopouts[i].close();\n }\n this._openPopouts.length = 0;\n if (this._windowBeforeUnloadListening) {\n globalThis.removeEventListener('beforeunload', this._windowBeforeUnloadListener);\n this._windowBeforeUnloadListening = false;\n }\n }\n newDragSource(element, componentTypeOrItemConfigCallback, componentState, title, id) {\n const dragSource = new DragSource(this, element, [], componentTypeOrItemConfigCallback, componentState, title, id);\n this._dragSources.push(dragSource);\n return dragSource;\n }\n /**\n * Removes a DragListener added by createDragSource() so the corresponding\n * DOM element is not a drag source any more.\n */\n removeDragSource(dragSource) {\n removeFromArray(dragSource, this._dragSources);\n dragSource.destroy();\n }\n /** @internal */\n startComponentDrag(x, y, dragListener, componentItem, stack) {\n new DragProxy(x, y, dragListener, this, componentItem, stack);\n }\n /**\n * Programmatically focuses an item. This focuses the specified component item\n * and the item emits a focus event\n *\n * @param item - The component item to be focused\n * @param suppressEvent - Whether to emit focus event\n */\n focusComponent(item, suppressEvent = false) {\n item.focus(suppressEvent);\n }\n /**\n * Programmatically blurs (defocuses) the currently focused component.\n * If a component item is focused, then it is blurred and and the item emits a blur event\n *\n * @param item - The component item to be blurred\n * @param suppressEvent - Whether to emit blur event\n */\n clearComponentFocus(suppressEvent = false) {\n this.setFocusedComponentItem(undefined, suppressEvent);\n }\n /**\n * Programmatically focuses a component item or removes focus (blurs) from an existing focused component item.\n *\n * @param item - If defined, specifies the component item to be given focus. If undefined, clear component focus.\n * @param suppressEvents - Whether to emit focus and blur events\n * @internal\n */\n setFocusedComponentItem(item, suppressEvents = false) {\n if (item !== this._focusedComponentItem) {\n let newFocusedParentItem;\n if (item === undefined) {\n newFocusedParentItem === undefined;\n }\n else {\n newFocusedParentItem = item.parentItem;\n }\n if (this._focusedComponentItem !== undefined) {\n const oldFocusedItem = this._focusedComponentItem;\n this._focusedComponentItem = undefined;\n oldFocusedItem.setBlurred(suppressEvents);\n const oldFocusedParentItem = oldFocusedItem.parentItem;\n if (newFocusedParentItem === oldFocusedParentItem) {\n newFocusedParentItem = undefined;\n }\n else {\n oldFocusedParentItem.setFocusedValue(false);\n }\n }\n if (item !== undefined) {\n this._focusedComponentItem = item;\n item.setFocused(suppressEvents);\n if (newFocusedParentItem !== undefined) {\n newFocusedParentItem.setFocusedValue(true);\n }\n }\n }\n }\n /** @internal */\n tryDispatchEventToParent(e) {\n this.container.dispatchEvent(new Event(e));\n }\n /** @internal */\n createContentItemFromConfig(config, parent) {\n switch (config.type) {\n case ItemType.ground: throw new AssertError('LMCCIFC68871');\n case ItemType.row: return new RowOrColumn(false, this, config, parent);\n case ItemType.column: return new RowOrColumn(true, this, config, parent);\n case ItemType.stack: return new Stack(this, config, parent);\n case ItemType.component:\n return new ComponentItem(this, config, parent);\n default:\n throw new UnreachableCaseError('CCC913564', config.type, 'Invalid Config Item type specified');\n }\n }\n /**\n * This should only be called from stack component.\n * Stack will look after docking processing associated with maximise/minimise\n * @internal\n **/\n setMaximisedStack(stack) {\n if (stack === undefined) {\n if (this._maximisedStack !== undefined) {\n this.processMinimiseMaximisedStack();\n }\n }\n else {\n if (stack !== this._maximisedStack) {\n if (this._maximisedStack !== undefined) {\n this.processMinimiseMaximisedStack();\n }\n this.processMaximiseStack(stack);\n }\n }\n }\n checkMinimiseMaximisedStack() {\n if (this._maximisedStack !== undefined) {\n this._maximisedStack.minimise();\n }\n }\n // showAllActiveContentItems() was called from ContentItem.show(). Not sure what its purpose was so have commented out\n // Everything seems to work ok without this. Have left commented code just in case there was a reason for it becomes\n // apparent\n // /** @internal */\n // showAllActiveContentItems(): void {\n // const allStacks = this.getAllStacks();\n // for (let i = 0; i < allStacks.length; i++) {\n // const stack = allStacks[i];\n // const activeContentItem = stack.getActiveComponentItem();\n // if (activeContentItem !== undefined) {\n // if (!(activeContentItem instanceof ComponentItem)) {\n // throw new AssertError('LMSAACIS22298');\n // } else {\n // activeContentItem.container.show();\n // }\n // }\n // }\n // }\n // hideAllActiveContentItems() was called from ContentItem.hide(). Not sure what its purpose was so have commented out\n // Everything seems to work ok without this. Have left commented code just in case there was a reason for it becomes\n // apparent\n // /** @internal */\n // hideAllActiveContentItems(): void {\n // const allStacks = this.getAllStacks();\n // for (let i = 0; i < allStacks.length; i++) {\n // const stack = allStacks[i];\n // const activeContentItem = stack.getActiveComponentItem();\n // if (activeContentItem !== undefined) {\n // if (!(activeContentItem instanceof ComponentItem)) {\n // throw new AssertError('LMSAACIH22298');\n // } else {\n // activeContentItem.container.hide();\n // }\n // }\n // }\n // }\n /** @internal */\n cleanupBeforeMaximisedStackDestroyed(event) {\n if (this._maximisedStack !== null && this._maximisedStack === event.target) {\n this._maximisedStack.off('beforeItemDestroyed', this._maximisedStackBeforeDestroyedListener);\n this._maximisedStack = undefined;\n }\n }\n /**\n * This method is used to get around sandboxed iframe restrictions.\n * If 'allow-top-navigation' is not specified in the iframe's 'sandbox' attribute\n * (as is the case with codepens) the parent window is forbidden from calling certain\n * methods on the child, such as window.close() or setting document.location.href.\n *\n * This prevented GoldenLayout popouts from popping in in codepens. The fix is to call\n * _$closeWindow on the child window's gl instance which (after a timeout to disconnect\n * the invoking method from the close call) closes itself.\n *\n * @internal\n */\n closeWindow() {\n globalThis.setTimeout(() => globalThis.close(), 1);\n }\n /** @internal */\n getArea(x, y) {\n let matchingArea = null;\n let smallestSurface = Infinity;\n for (let i = 0; i < this._itemAreas.length; i++) {\n const area = this._itemAreas[i];\n if (x >= area.x1 &&\n x < area.x2 && // x2 is not included in area\n y >= area.y1 &&\n y < area.y2 && // y2 is not included in area\n smallestSurface > area.surface) {\n smallestSurface = area.surface;\n matchingArea = area;\n }\n }\n return matchingArea;\n }\n /** @internal */\n calculateItemAreas() {\n const allContentItems = this.getAllContentItems();\n /**\n * If the last item is dragged out, highlight the entire container size to\n * allow to re-drop it. this.ground.contentiItems.length === 0 at this point\n *\n * Don't include ground into the possible drop areas though otherwise since it\n * will used for every gap in the layout, e.g. splitters\n */\n const groundItem = this._groundItem;\n if (groundItem === undefined) {\n throw new UnexpectedUndefinedError('LMCIAR44365');\n }\n else {\n if (allContentItems.length === 1) {\n // No root ContentItem (just Ground ContentItem)\n const groundArea = groundItem.getElementArea();\n if (groundArea === null) {\n throw new UnexpectedNullError('LMCIARA44365');\n }\n else {\n this._itemAreas = [groundArea];\n }\n return;\n }\n else {\n if (groundItem.contentItems[0].isStack) {\n // if root is Stack, then split stack and sides of Layout are same, so skip sides\n this._itemAreas = [];\n }\n else {\n // sides of layout\n this._itemAreas = groundItem.createSideAreas();\n }\n for (let i = 0; i < allContentItems.length; i++) {\n const stack = allContentItems[i];\n if (ContentItem.isStack(stack)) {\n const area = stack.getArea();\n if (area === null) {\n continue;\n }\n else {\n this._itemAreas.push(area);\n const stackContentAreaDimensions = stack.contentAreaDimensions;\n if (stackContentAreaDimensions === undefined) {\n throw new UnexpectedUndefinedError('LMCIASC45599');\n }\n else {\n const highlightArea = stackContentAreaDimensions.header.highlightArea;\n const surface = (highlightArea.x2 - highlightArea.x1) * (highlightArea.y2 - highlightArea.y1);\n const header = {\n x1: highlightArea.x1,\n x2: highlightArea.x2,\n y1: highlightArea.y1,\n y2: highlightArea.y2,\n contentItem: stack,\n surface,\n };\n this._itemAreas.push(header);\n }\n }\n }\n }\n }\n }\n }\n /**\n * Called as part of loading a new layout (including initial init()).\n * Checks to see layout has a maximised item. If so, it maximises that item.\n * @internal\n */\n checkLoadedLayoutMaximiseItem() {\n if (this._groundItem === undefined) {\n throw new UnexpectedUndefinedError('LMCLLMI43432');\n }\n else {\n const configMaximisedItems = this._groundItem.getConfigMaximisedItems();\n if (configMaximisedItems.length > 0) {\n let item = configMaximisedItems[0];\n if (ContentItem.isComponentItem(item)) {\n const stack = item.parent;\n if (stack === null) {\n throw new UnexpectedNullError('LMXLLMI69999');\n }\n else {\n item = stack;\n }\n }\n if (!ContentItem.isStack(item)) {\n throw new AssertError('LMCLLMI19993');\n }\n else {\n item.maximise();\n }\n }\n }\n }\n /** @internal */\n processMaximiseStack(stack) {\n this._maximisedStack = stack;\n stack.on('beforeItemDestroyed', this._maximisedStackBeforeDestroyedListener);\n stack.element.classList.add(\"lm_maximised\" /* DomConstants.ClassName.Maximised */);\n stack.element.insertAdjacentElement('afterend', this._maximisePlaceholder);\n if (this._groundItem === undefined) {\n throw new UnexpectedUndefinedError('LMMXI19993');\n }\n else {\n this._groundItem.element.prepend(stack.element);\n const { width, height } = getElementWidthAndHeight(this._containerElement);\n setElementWidth(stack.element, width);\n setElementHeight(stack.element, height);\n stack.updateSize(true);\n stack.focusActiveContentItem();\n this._maximisedStack.emit('maximised');\n this.emit('stateChanged');\n }\n }\n /** @internal */\n processMinimiseMaximisedStack() {\n if (this._maximisedStack === undefined) {\n throw new AssertError('LMMMS74422');\n }\n else {\n const stack = this._maximisedStack;\n if (stack.parent === null) {\n throw new UnexpectedNullError('LMMI13668');\n }\n else {\n stack.element.classList.remove(\"lm_maximised\" /* DomConstants.ClassName.Maximised */);\n this._maximisePlaceholder.insertAdjacentElement('afterend', stack.element);\n this._maximisePlaceholder.remove();\n this.updateRootSize(true);\n this._maximisedStack = undefined;\n stack.off('beforeItemDestroyed', this._maximisedStackBeforeDestroyedListener);\n stack.emit('minimised');\n this.emit('stateChanged');\n }\n }\n }\n /**\n * Iterates through the array of open popout windows and removes the ones\n * that are effectively closed. This is necessary due to the lack of reliably\n * listening for window.close / unload events in a cross browser compatible fashion.\n * @internal\n */\n reconcilePopoutWindows() {\n const openPopouts = [];\n for (let i = 0; i < this._openPopouts.length; i++) {\n if (this._openPopouts[i].getWindow().closed === false) {\n openPopouts.push(this._openPopouts[i]);\n }\n else {\n this.emit('windowClosed', this._openPopouts[i]);\n }\n }\n if (this._openPopouts.length !== openPopouts.length) {\n this._openPopouts = openPopouts;\n this.emit('stateChanged');\n }\n }\n /**\n * Returns a flattened array of all content items,\n * regardles of level or type\n * @internal\n */\n getAllContentItems() {\n if (this._groundItem === undefined) {\n throw new UnexpectedUndefinedError('LMGACI13130');\n }\n else {\n return this._groundItem.getAllContentItems();\n }\n }\n /**\n * Creates Subwindows (if there are any). Throws an error\n * if popouts are blocked.\n * @internal\n */\n createSubWindows() {\n for (let i = 0; i < this.layoutConfig.openPopouts.length; i++) {\n const popoutConfig = this.layoutConfig.openPopouts[i];\n this.createPopoutFromPopoutLayoutConfig(popoutConfig);\n }\n }\n /**\n * Debounces resize events\n * @internal\n */\n handleContainerResize() {\n if (this.resizeWithContainerAutomatically) {\n this.processResizeWithDebounce();\n }\n }\n /**\n * Debounces resize events\n * @internal\n */\n processResizeWithDebounce() {\n if (this.resizeDebounceExtendedWhenPossible) {\n this.checkClearResizeTimeout();\n }\n if (this._resizeTimeoutId === undefined) {\n this._resizeTimeoutId = setTimeout(() => {\n this._resizeTimeoutId = undefined;\n this.beginSizeInvalidation();\n this.endSizeInvalidation();\n }, this.resizeDebounceInterval);\n }\n }\n checkClearResizeTimeout() {\n if (this._resizeTimeoutId !== undefined) {\n clearTimeout(this._resizeTimeoutId);\n this._resizeTimeoutId = undefined;\n }\n }\n /**\n * Determines what element the layout will be created in\n * @internal\n */\n setContainer() {\n var _a;\n const bodyElement = document.body;\n const containerElement = (_a = this._containerElement) !== null && _a !== void 0 ? _a : bodyElement;\n if (containerElement === bodyElement) {\n this.resizeWithContainerAutomatically = true;\n const documentElement = document.documentElement;\n documentElement.style.height = '100%';\n documentElement.style.margin = '0';\n documentElement.style.padding = '0';\n documentElement.style.overflow = 'clip';\n bodyElement.style.height = '100%';\n bodyElement.style.margin = '0';\n bodyElement.style.padding = '0';\n bodyElement.style.overflow = 'clip';\n }\n this._containerElement = containerElement;\n }\n /**\n * Called when the window is closed or the user navigates away\n * from the page\n * @internal\n * @deprecated to be removed in version 3\n */\n onBeforeUnload() {\n this.destroy();\n }\n /**\n * Adjusts the number of columns to be lower to fit the screen and still maintain minItemWidth.\n * @internal\n */\n adjustColumnsResponsive() {\n if (this._groundItem === undefined) {\n throw new UnexpectedUndefinedError('LMACR20883');\n }\n else {\n this._firstLoad = false;\n // If there is no min width set, or not content items, do nothing.\n if (this.useResponsiveLayout() &&\n !this._updatingColumnsResponsive &&\n this._groundItem.contentItems.length > 0 &&\n this._groundItem.contentItems[0].isRow) {\n if (this._groundItem === undefined || this._width === null) {\n throw new UnexpectedUndefinedError('LMACR77412');\n }\n else {\n // If there is only one column, do nothing.\n const columnCount = this._groundItem.contentItems[0].contentItems.length;\n if (columnCount <= 1) {\n return;\n }\n else {\n // If they all still fit, do nothing.\n const minItemWidth = this.layoutConfig.dimensions.defaultMinItemWidth;\n const totalMinWidth = columnCount * minItemWidth;\n if (totalMinWidth <= this._width) {\n return;\n }\n else {\n // Prevent updates while it is already happening.\n this._updatingColumnsResponsive = true;\n // Figure out how many columns to stack, and put them all in the first stack container.\n const finalColumnCount = Math.max(Math.floor(this._width / minItemWidth), 1);\n const stackColumnCount = columnCount - finalColumnCount;\n const rootContentItem = this._groundItem.contentItems[0];\n const allStacks = this.getAllStacks();\n if (allStacks.length === 0) {\n throw new AssertError('LMACRS77413');\n }\n else {\n const firstStackContainer = allStacks[0];\n for (let i = 0; i < stackColumnCount; i++) {\n // Stack from right.\n const column = rootContentItem.contentItems[rootContentItem.contentItems.length - 1];\n this.addChildContentItemsToContainer(firstStackContainer, column);\n }\n this._updatingColumnsResponsive = false;\n }\n }\n }\n }\n }\n }\n }\n /**\n * Determines if responsive layout should be used.\n *\n * @returns True if responsive layout should be used; otherwise false.\n * @internal\n */\n useResponsiveLayout() {\n const settings = this.layoutConfig.settings;\n const alwaysResponsiveMode = settings.responsiveMode === ResponsiveMode.always;\n const onLoadResponsiveModeAndFirst = settings.responsiveMode === ResponsiveMode.onload && this._firstLoad;\n return alwaysResponsiveMode || onLoadResponsiveModeAndFirst;\n }\n /**\n * Adds all children of a node to another container recursively.\n * @param container - Container to add child content items to.\n * @param node - Node to search for content items.\n * @internal\n */\n addChildContentItemsToContainer(container, node) {\n const contentItems = node.contentItems;\n if (node instanceof Stack) {\n for (let i = 0; i < contentItems.length; i++) {\n const item = contentItems[i];\n node.removeChild(item, true);\n container.addChild(item);\n }\n }\n else {\n for (let i = 0; i < contentItems.length; i++) {\n const item = contentItems[i];\n this.addChildContentItemsToContainer(container, item);\n }\n }\n }\n /**\n * Finds all the stacks.\n * @returns The found stack containers.\n * @internal\n */\n getAllStacks() {\n if (this._groundItem === undefined) {\n throw new UnexpectedUndefinedError('LMFASC52778');\n }\n else {\n const stacks = [];\n this.findAllStacksRecursive(stacks, this._groundItem);\n return stacks;\n }\n }\n /** @internal */\n findFirstContentItemType(type) {\n if (this._groundItem === undefined) {\n throw new UnexpectedUndefinedError('LMFFCIT82446');\n }\n else {\n return this.findFirstContentItemTypeRecursive(type, this._groundItem);\n }\n }\n /** @internal */\n findFirstContentItemTypeRecursive(type, node) {\n const contentItems = node.contentItems;\n const contentItemCount = contentItems.length;\n if (contentItemCount === 0) {\n return undefined;\n }\n else {\n for (let i = 0; i < contentItemCount; i++) {\n const contentItem = contentItems[i];\n if (contentItem.type === type) {\n return contentItem;\n }\n }\n for (let i = 0; i < contentItemCount; i++) {\n const contentItem = contentItems[i];\n const foundContentItem = this.findFirstContentItemTypeRecursive(type, contentItem);\n if (foundContentItem !== undefined) {\n return foundContentItem;\n }\n }\n return undefined;\n }\n }\n /** @internal */\n findFirstContentItemTypeByIdRecursive(type, id, node) {\n const contentItems = node.contentItems;\n const contentItemCount = contentItems.length;\n if (contentItemCount === 0) {\n return undefined;\n }\n else {\n for (let i = 0; i < contentItemCount; i++) {\n const contentItem = contentItems[i];\n if (contentItem.type === type && contentItem.id === id) {\n return contentItem;\n }\n }\n for (let i = 0; i < contentItemCount; i++) {\n const contentItem = contentItems[i];\n const foundContentItem = this.findFirstContentItemTypeByIdRecursive(type, id, contentItem);\n if (foundContentItem !== undefined) {\n return foundContentItem;\n }\n }\n return undefined;\n }\n }\n /**\n * Finds all the stack containers.\n *\n * @param stacks - Set of containers to populate.\n * @param node - Current node to process.\n * @internal\n */\n findAllStacksRecursive(stacks, node) {\n const contentItems = node.contentItems;\n for (let i = 0; i < contentItems.length; i++) {\n const item = contentItems[i];\n if (item instanceof Stack) {\n stacks.push(item);\n }\n else {\n if (!item.isComponent) {\n this.findAllStacksRecursive(stacks, item);\n }\n }\n }\n }\n /** @internal */\n findFirstLocation(selectors) {\n const count = selectors.length;\n for (let i = 0; i < count; i++) {\n const selector = selectors[i];\n const location = this.findLocation(selector);\n if (location !== undefined) {\n return location;\n }\n }\n return undefined;\n }\n /** @internal */\n findLocation(selector) {\n const selectorIndex = selector.index;\n switch (selector.typeId) {\n case 0 /* LayoutManager.LocationSelector.TypeId.FocusedItem */: {\n if (this._focusedComponentItem === undefined) {\n return undefined;\n }\n else {\n const parentItem = this._focusedComponentItem.parentItem;\n const parentContentItems = parentItem.contentItems;\n const parentContentItemCount = parentContentItems.length;\n if (selectorIndex === undefined) {\n return { parentItem, index: parentContentItemCount };\n }\n else {\n const focusedIndex = parentContentItems.indexOf(this._focusedComponentItem);\n const index = focusedIndex + selectorIndex;\n if (index < 0 || index > parentContentItemCount) {\n return undefined;\n }\n else {\n return { parentItem, index };\n }\n }\n }\n }\n case 1 /* LayoutManager.LocationSelector.TypeId.FocusedStack */: {\n if (this._focusedComponentItem === undefined) {\n return undefined;\n }\n else {\n const parentItem = this._focusedComponentItem.parentItem;\n return this.tryCreateLocationFromParentItem(parentItem, selectorIndex);\n }\n }\n case 2 /* LayoutManager.LocationSelector.TypeId.FirstStack */: {\n const parentItem = this.findFirstContentItemType(ItemType.stack);\n if (parentItem === undefined) {\n return undefined;\n }\n else {\n return this.tryCreateLocationFromParentItem(parentItem, selectorIndex);\n }\n }\n case 3 /* LayoutManager.LocationSelector.TypeId.FirstRowOrColumn */: {\n let parentItem = this.findFirstContentItemType(ItemType.row);\n if (parentItem !== undefined) {\n return this.tryCreateLocationFromParentItem(parentItem, selectorIndex);\n }\n else {\n parentItem = this.findFirstContentItemType(ItemType.column);\n if (parentItem !== undefined) {\n return this.tryCreateLocationFromParentItem(parentItem, selectorIndex);\n }\n else {\n return undefined;\n }\n }\n }\n case 4 /* LayoutManager.LocationSelector.TypeId.FirstRow */: {\n const parentItem = this.findFirstContentItemType(ItemType.row);\n if (parentItem === undefined) {\n return undefined;\n }\n else {\n return this.tryCreateLocationFromParentItem(parentItem, selectorIndex);\n }\n }\n case 5 /* LayoutManager.LocationSelector.TypeId.FirstColumn */: {\n const parentItem = this.findFirstContentItemType(ItemType.column);\n if (parentItem === undefined) {\n return undefined;\n }\n else {\n return this.tryCreateLocationFromParentItem(parentItem, selectorIndex);\n }\n }\n case 6 /* LayoutManager.LocationSelector.TypeId.Empty */: {\n if (this._groundItem === undefined) {\n throw new UnexpectedUndefinedError('LMFLRIF18244');\n }\n else {\n if (this.rootItem !== undefined) {\n return undefined;\n }\n else {\n if (selectorIndex === undefined || selectorIndex === 0)\n return { parentItem: this._groundItem, index: 0 };\n else {\n return undefined;\n }\n }\n }\n }\n case 7 /* LayoutManager.LocationSelector.TypeId.Root */: {\n if (this._groundItem === undefined) {\n throw new UnexpectedUndefinedError('LMFLF18244');\n }\n else {\n const groundContentItems = this._groundItem.contentItems;\n if (groundContentItems.length === 0) {\n if (selectorIndex === undefined || selectorIndex === 0)\n return { parentItem: this._groundItem, index: 0 };\n else {\n return undefined;\n }\n }\n else {\n const parentItem = groundContentItems[0];\n return this.tryCreateLocationFromParentItem(parentItem, selectorIndex);\n }\n }\n }\n }\n }\n /** @internal */\n tryCreateLocationFromParentItem(parentItem, selectorIndex) {\n const parentContentItems = parentItem.contentItems;\n const parentContentItemCount = parentContentItems.length;\n if (selectorIndex === undefined) {\n return { parentItem, index: parentContentItemCount };\n }\n else {\n if (selectorIndex < 0 || selectorIndex > parentContentItemCount) {\n return undefined;\n }\n else {\n return { parentItem, index: selectorIndex };\n }\n }\n }\n}\n/** @public */\n(function (LayoutManager) {\n /** @internal */\n function createMaximisePlaceElement(document) {\n const element = document.createElement('div');\n element.classList.add(\"lm_maximise_place\" /* DomConstants.ClassName.MaximisePlace */);\n return element;\n }\n LayoutManager.createMaximisePlaceElement = createMaximisePlaceElement;\n /** @internal */\n function createTabDropPlaceholderElement(document) {\n const element = document.createElement('div');\n element.classList.add(\"lm_drop_tab_placeholder\" /* DomConstants.ClassName.DropTabPlaceholder */);\n return element;\n }\n LayoutManager.createTabDropPlaceholderElement = createTabDropPlaceholderElement;\n /**\n * Default LocationSelectors array used if none is specified. Will always find a location.\n * @public\n */\n LayoutManager.defaultLocationSelectors = [\n { typeId: 1 /* LocationSelector.TypeId.FocusedStack */, index: undefined },\n { typeId: 2 /* LocationSelector.TypeId.FirstStack */, index: undefined },\n { typeId: 3 /* LocationSelector.TypeId.FirstRowOrColumn */, index: undefined },\n { typeId: 7 /* LocationSelector.TypeId.Root */, index: undefined },\n ];\n /**\n * LocationSelectors to try to get location next to existing focused item\n * @public\n */\n LayoutManager.afterFocusedItemIfPossibleLocationSelectors = [\n { typeId: 0 /* LocationSelector.TypeId.FocusedItem */, index: 1 },\n { typeId: 2 /* LocationSelector.TypeId.FirstStack */, index: undefined },\n { typeId: 3 /* LocationSelector.TypeId.FirstRowOrColumn */, index: undefined },\n { typeId: 7 /* LocationSelector.TypeId.Root */, index: undefined },\n ];\n})(LayoutManager || (LayoutManager = {}));\n//# sourceMappingURL=layout-manager.js.map","import { LayoutConfig } from './config/config';\nimport { ResolvedLayoutConfig } from './config/resolved-config';\nimport { BindError } from './errors/external-error';\nimport { UnexpectedUndefinedError } from './errors/internal-error';\nimport { LayoutManager } from './layout-manager';\nimport { i18nStrings } from './utils/i18n-strings';\n/** @public */\nexport class VirtualLayout extends LayoutManager {\n /** @internal */\n constructor(configOrOptionalContainer, containerOrBindComponentEventHandler, unbindComponentEventHandler, skipInit) {\n super(VirtualLayout.createLayoutManagerConstructorParameters(configOrOptionalContainer, containerOrBindComponentEventHandler));\n /** @internal @deprecated use while constructor is not determinate */\n this._bindComponentEventHanlderPassedInConstructor = false; // remove when constructor is determinate\n /** @internal @deprecated use while constructor is not determinate */\n this._creationTimeoutPassed = false; // remove when constructor is determinate\n if (containerOrBindComponentEventHandler !== undefined) {\n if (typeof containerOrBindComponentEventHandler === 'function') {\n this.bindComponentEvent = containerOrBindComponentEventHandler;\n this._bindComponentEventHanlderPassedInConstructor = true;\n if (unbindComponentEventHandler !== undefined) {\n this.unbindComponentEvent = unbindComponentEventHandler;\n }\n }\n }\n if (!this._bindComponentEventHanlderPassedInConstructor) {\n // backward compatibility\n if (this.isSubWindow) {\n // document.body.style.visibility = 'hidden';\n // Set up layoutConfig since constructor is not determinate and may exit early. Other functions may need\n // this.layoutConfig. this.layoutConfig is again calculated in the same way when init() completes.\n // Remove this when constructor is determinate.\n if (this._constructorOrSubWindowLayoutConfig === undefined) {\n throw new UnexpectedUndefinedError('VLC98823');\n }\n else {\n const resolvedLayoutConfig = LayoutConfig.resolve(this._constructorOrSubWindowLayoutConfig);\n // remove root from layoutConfig\n this.layoutConfig = Object.assign(Object.assign({}, resolvedLayoutConfig), { root: undefined });\n }\n }\n }\n if (skipInit !== true) {\n if (!this.deprecatedConstructor) {\n this.init();\n }\n }\n }\n destroy() {\n this.bindComponentEvent = undefined;\n this.unbindComponentEvent = undefined;\n super.destroy();\n }\n /**\n * Creates the actual layout. Must be called after all initial components\n * are registered. Recurses through the configuration and sets up\n * the item tree.\n *\n * If called before the document is ready it adds itself as a listener\n * to the document.ready event\n * @deprecated LayoutConfig should not be loaded in {@link (LayoutManager:class)} constructor, but rather in a\n * {@link (LayoutManager:class).loadLayout} call. If LayoutConfig is not specified in {@link (LayoutManager:class)} constructor,\n * then init() will be automatically called internally and should not be called externally.\n */\n init() {\n /**\n * If the document isn't ready yet, wait for it.\n */\n if (!this._bindComponentEventHanlderPassedInConstructor && (document.readyState === 'loading' || document.body === null)) {\n document.addEventListener('DOMContentLoaded', () => this.init(), { passive: true });\n return;\n }\n /**\n * If this is a subwindow, wait a few milliseconds for the original\n * page's js calls to be executed, then replace the bodies content\n * with GoldenLayout\n */\n if (!this._bindComponentEventHanlderPassedInConstructor && this.isSubWindow === true && !this._creationTimeoutPassed) {\n setTimeout(() => this.init(), 7);\n this._creationTimeoutPassed = true;\n return;\n }\n if (this.isSubWindow === true) {\n if (!this._bindComponentEventHanlderPassedInConstructor) {\n this.clearHtmlAndAdjustStylesForSubWindow();\n }\n // Expose this instance on the window object to allow the opening window to interact with it\n window.__glInstance = this;\n }\n super.init();\n }\n /**\n * Clears existing HTML and adjusts style to make window suitable to be a popout sub window\n * Curently is automatically called when window is a subWindow and bindComponentEvent is not passed in the constructor\n * If bindComponentEvent is not passed in the constructor, the application must either call this function explicitly or\n * (preferably) make the window suitable as a subwindow.\n * In the future, it is planned that this function is NOT automatically called in any circumstances. Applications will\n * need to determine whether a window is a Golden Layout popout window and either call this function explicitly or\n * hide HTML not relevant to the popout.\n * See apitest for an example of how HTML is hidden when popout windows are displayed\n */\n clearHtmlAndAdjustStylesForSubWindow() {\n const headElement = document.head;\n const appendNodeLists = new Array(4);\n appendNodeLists[0] = document.querySelectorAll('body link');\n appendNodeLists[1] = document.querySelectorAll('body style');\n appendNodeLists[2] = document.querySelectorAll('template');\n appendNodeLists[3] = document.querySelectorAll('.gl_keep');\n for (let listIdx = 0; listIdx < appendNodeLists.length; listIdx++) {\n const appendNodeList = appendNodeLists[listIdx];\n for (let nodeIdx = 0; nodeIdx < appendNodeList.length; nodeIdx++) {\n const node = appendNodeList[nodeIdx];\n headElement.appendChild(node);\n }\n }\n const bodyElement = document.body;\n bodyElement.innerHTML = '';\n bodyElement.style.visibility = 'visible';\n this.checkAddDefaultPopinButton();\n /*\n * This seems a bit pointless, but actually causes a reflow/re-evaluation getting around\n * slickgrid's \"Cannot find stylesheet.\" bug in chrome\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const x = document.body.offsetHeight;\n }\n /**\n * Will add button if not popinOnClose specified in settings\n * @returns true if added otherwise false\n */\n checkAddDefaultPopinButton() {\n if (this.layoutConfig.settings.popInOnClose) {\n return false;\n }\n else {\n const popInButtonElement = document.createElement('div');\n popInButtonElement.classList.add(\"lm_popin\" /* DomConstants.ClassName.Popin */);\n popInButtonElement.setAttribute('title', this.layoutConfig.header.dock);\n const iconElement = document.createElement('div');\n iconElement.classList.add(\"lm_icon\" /* DomConstants.ClassName.Icon */);\n const bgElement = document.createElement('div');\n bgElement.classList.add(\"lm_bg\" /* DomConstants.ClassName.Bg */);\n popInButtonElement.appendChild(iconElement);\n popInButtonElement.appendChild(bgElement);\n popInButtonElement.addEventListener('click', () => this.emit('popIn'));\n document.body.appendChild(popInButtonElement);\n return true;\n }\n }\n /** @internal */\n bindComponent(container, itemConfig) {\n if (this.bindComponentEvent !== undefined) {\n const bindableComponent = this.bindComponentEvent(container, itemConfig);\n return bindableComponent;\n }\n else {\n if (this.getComponentEvent !== undefined) {\n return {\n virtual: false,\n component: this.getComponentEvent(container, itemConfig),\n };\n }\n else {\n // There is no component registered for this type, and we don't have a getComponentEvent defined.\n // This might happen when the user pops out a dialog and the component types are not registered upfront.\n const text = i18nStrings[2 /* I18nStringId.ComponentTypeNotRegisteredAndBindComponentEventHandlerNotAssigned */];\n const message = `${text}: ${JSON.stringify(itemConfig)}`;\n throw new BindError(message);\n }\n }\n }\n /** @internal */\n unbindComponent(container, virtual, component) {\n if (this.unbindComponentEvent !== undefined) {\n this.unbindComponentEvent(container);\n }\n else {\n if (!virtual && this.releaseComponentEvent !== undefined) {\n if (component === undefined) {\n throw new UnexpectedUndefinedError('VCUCRCU333998');\n }\n else {\n this.releaseComponentEvent(container, component);\n }\n }\n }\n }\n}\n/** @public */\n(function (VirtualLayout) {\n /** @internal\n * Veriable to hold the state whether we already checked if we are running in a sub window.\n * Fixes popout and creation of nested golden-layouts.\n */\n let subWindowChecked = false;\n /** @internal */\n function createLayoutManagerConstructorParameters(configOrOptionalContainer, containerOrBindComponentEventHandler) {\n const windowConfigKey = subWindowChecked ? null : new URL(document.location.href).searchParams.get('gl-window');\n subWindowChecked = true;\n const isSubWindow = windowConfigKey !== null;\n let containerElement;\n let config;\n if (windowConfigKey !== null) {\n const windowConfigStr = localStorage.getItem(windowConfigKey);\n if (windowConfigStr === null) {\n throw new Error('Null gl-window Config');\n }\n localStorage.removeItem(windowConfigKey);\n const minifiedWindowConfig = JSON.parse(windowConfigStr);\n const resolvedConfig = ResolvedLayoutConfig.unminifyConfig(minifiedWindowConfig);\n config = LayoutConfig.fromResolved(resolvedConfig);\n if (configOrOptionalContainer instanceof HTMLElement) {\n containerElement = configOrOptionalContainer;\n }\n }\n else {\n if (configOrOptionalContainer === undefined) {\n config = undefined;\n }\n else {\n if (configOrOptionalContainer instanceof HTMLElement) {\n config = undefined;\n containerElement = configOrOptionalContainer;\n }\n else {\n // backwards compatibility\n config = configOrOptionalContainer;\n }\n }\n if (containerElement === undefined) {\n if (containerOrBindComponentEventHandler instanceof HTMLElement) {\n containerElement = containerOrBindComponentEventHandler;\n }\n }\n }\n return {\n constructorOrSubWindowLayoutConfig: config,\n isSubWindow,\n containerElement,\n };\n }\n VirtualLayout.createLayoutManagerConstructorParameters = createLayoutManagerConstructorParameters;\n})(VirtualLayout || (VirtualLayout = {}));\n//# sourceMappingURL=virtual-layout.js.map","import { ResolvedComponentItemConfig } from './config/resolved-config';\nimport { ApiError, BindError } from './errors/external-error';\nimport { AssertError, UnexpectedUndefinedError } from './errors/internal-error';\nimport { i18nStrings } from './utils/i18n-strings';\nimport { deepExtendValue, ensureElementPositionAbsolute, numberToPixels, setElementDisplayVisibility, setElementHeight, setElementWidth } from './utils/utils';\nimport { VirtualLayout } from './virtual-layout';\n/** @public */\nexport class GoldenLayout extends VirtualLayout {\n /** @internal */\n constructor(configOrOptionalContainer, containerOrBindComponentEventHandler, unbindComponentEventHandler) {\n super(configOrOptionalContainer, containerOrBindComponentEventHandler, unbindComponentEventHandler, true);\n /** @internal */\n this._componentTypesMap = new Map();\n /** @internal */\n this._registeredComponentMap = new Map();\n /** @internal */\n this._virtuableComponentMap = new Map();\n /** @internal */\n this._containerVirtualRectingRequiredEventListener = (container, width, height) => this.handleContainerVirtualRectingRequiredEvent(container, width, height);\n /** @internal */\n this._containerVirtualVisibilityChangeRequiredEventListener = (container, visible) => this.handleContainerVirtualVisibilityChangeRequiredEvent(container, visible);\n /** @internal */\n this._containerVirtualZIndexChangeRequiredEventListener = (container, logicalZIndex, defaultZIndex) => this.handleContainerVirtualZIndexChangeRequiredEvent(container, logicalZIndex, defaultZIndex);\n // we told VirtualLayout to not call init() (skipInit set to true) so that Golden Layout can initialise its properties before init is called\n if (!this.deprecatedConstructor) {\n this.init();\n }\n }\n /**\n * Register a new component type with the layout manager.\n *\n * @deprecated See {@link https://stackoverflow.com/questions/40922531/how-to-check-if-a-javascript-function-is-a-constructor}\n * instead use {@link (GoldenLayout:class).registerComponentConstructor}\n * or {@link (GoldenLayout:class).registerComponentFactoryFunction}\n */\n registerComponent(name, componentConstructorOrFactoryFtn, virtual = false) {\n if (typeof componentConstructorOrFactoryFtn !== 'function') {\n throw new ApiError('registerComponent() componentConstructorOrFactoryFtn parameter is not a function');\n }\n else {\n if (componentConstructorOrFactoryFtn.hasOwnProperty('prototype')) {\n const componentConstructor = componentConstructorOrFactoryFtn;\n this.registerComponentConstructor(name, componentConstructor, virtual);\n }\n else {\n const componentFactoryFtn = componentConstructorOrFactoryFtn;\n this.registerComponentFactoryFunction(name, componentFactoryFtn, virtual);\n }\n }\n }\n /**\n * Register a new component type with the layout manager.\n */\n registerComponentConstructor(typeName, componentConstructor, virtual = false) {\n if (typeof componentConstructor !== 'function') {\n throw new Error(i18nStrings[1 /* I18nStringId.PleaseRegisterAConstructorFunction */]);\n }\n const existingComponentType = this._componentTypesMap.get(typeName);\n if (existingComponentType !== undefined) {\n throw new BindError(`${i18nStrings[3 /* I18nStringId.ComponentIsAlreadyRegistered */]}: ${typeName}`);\n }\n this._componentTypesMap.set(typeName, {\n constructor: componentConstructor,\n factoryFunction: undefined,\n virtual,\n });\n }\n /**\n * Register a new component with the layout manager.\n */\n registerComponentFactoryFunction(typeName, componentFactoryFunction, virtual = false) {\n if (typeof componentFactoryFunction !== 'function') {\n throw new BindError('Please register a constructor function');\n }\n const existingComponentType = this._componentTypesMap.get(typeName);\n if (existingComponentType !== undefined) {\n throw new BindError(`${i18nStrings[3 /* I18nStringId.ComponentIsAlreadyRegistered */]}: ${typeName}`);\n }\n this._componentTypesMap.set(typeName, {\n constructor: undefined,\n factoryFunction: componentFactoryFunction,\n virtual,\n });\n }\n /**\n * Register a component function with the layout manager. This function should\n * return a constructor for a component based on a config.\n * This function will be called if a component type with the required name is not already registered.\n * It is recommended that applications use the {@link (VirtualLayout:class).getComponentEvent} and\n * {@link (VirtualLayout:class).releaseComponentEvent} instead of registering a constructor callback\n * @deprecated use {@link (GoldenLayout:class).registerGetComponentConstructorCallback}\n */\n registerComponentFunction(callback) {\n this.registerGetComponentConstructorCallback(callback);\n }\n /**\n * Register a callback closure with the layout manager which supplies a Component Constructor.\n * This callback should return a constructor for a component based on a config.\n * This function will be called if a component type with the required name is not already registered.\n * It is recommended that applications use the {@link (VirtualLayout:class).getComponentEvent} and\n * {@link (VirtualLayout:class).releaseComponentEvent} instead of registering a constructor callback\n */\n registerGetComponentConstructorCallback(callback) {\n if (typeof callback !== 'function') {\n throw new Error('Please register a callback function');\n }\n if (this._getComponentConstructorFtn !== undefined) {\n console.warn('Multiple component functions are being registered. Only the final registered function will be used.');\n }\n this._getComponentConstructorFtn = callback;\n }\n getRegisteredComponentTypeNames() {\n const typeNamesIterableIterator = this._componentTypesMap.keys();\n return Array.from(typeNamesIterableIterator);\n }\n /**\n * Returns a previously registered component instantiator. Attempts to utilize registered\n * component type by first, then falls back to the component constructor callback function (if registered).\n * If neither gets an instantiator, then returns `undefined`.\n * Note that `undefined` will return if config.componentType is not a string\n *\n * @param config - The item config\n * @public\n */\n getComponentInstantiator(config) {\n let instantiator;\n const typeName = ResolvedComponentItemConfig.resolveComponentTypeName(config);\n if (typeName !== undefined) {\n instantiator = this._componentTypesMap.get(typeName);\n }\n if (instantiator === undefined) {\n if (this._getComponentConstructorFtn !== undefined) {\n instantiator = {\n constructor: this._getComponentConstructorFtn(config),\n factoryFunction: undefined,\n virtual: false,\n };\n }\n }\n return instantiator;\n }\n /** @internal */\n bindComponent(container, itemConfig) {\n let instantiator;\n const typeName = ResolvedComponentItemConfig.resolveComponentTypeName(itemConfig);\n if (typeName !== undefined) {\n instantiator = this._componentTypesMap.get(typeName);\n }\n if (instantiator === undefined) {\n if (this._getComponentConstructorFtn !== undefined) {\n instantiator = {\n constructor: this._getComponentConstructorFtn(itemConfig),\n factoryFunction: undefined,\n virtual: false,\n };\n }\n }\n let result;\n if (instantiator !== undefined) {\n const virtual = instantiator.virtual;\n // handle case where component is obtained by name or component constructor callback\n let componentState;\n if (itemConfig.componentState === undefined) {\n componentState = undefined;\n }\n else {\n // make copy\n componentState = deepExtendValue({}, itemConfig.componentState);\n }\n let component;\n const componentConstructor = instantiator.constructor;\n if (componentConstructor !== undefined) {\n component = new componentConstructor(container, componentState, virtual);\n }\n else {\n const factoryFunction = instantiator.factoryFunction;\n if (factoryFunction !== undefined) {\n component = factoryFunction(container, componentState, virtual);\n }\n else {\n throw new AssertError('LMBCFFU10008');\n }\n }\n if (virtual) {\n if (component === undefined) {\n throw new UnexpectedUndefinedError('GLBCVCU988774');\n }\n else {\n const virtuableComponent = component;\n const componentRootElement = virtuableComponent.rootHtmlElement;\n if (componentRootElement === undefined) {\n throw new BindError(`${i18nStrings[5 /* I18nStringId.VirtualComponentDoesNotHaveRootHtmlElement */]}: ${typeName}`);\n }\n else {\n ensureElementPositionAbsolute(componentRootElement);\n this.container.appendChild(componentRootElement);\n this._virtuableComponentMap.set(container, virtuableComponent);\n container.virtualRectingRequiredEvent = this._containerVirtualRectingRequiredEventListener;\n container.virtualVisibilityChangeRequiredEvent = this._containerVirtualVisibilityChangeRequiredEventListener;\n container.virtualZIndexChangeRequiredEvent = this._containerVirtualZIndexChangeRequiredEventListener;\n }\n }\n }\n this._registeredComponentMap.set(container, component);\n result = {\n virtual: instantiator.virtual,\n component,\n };\n }\n else {\n // Use getComponentEvent\n result = super.bindComponent(container, itemConfig);\n }\n return result;\n }\n /** @internal */\n unbindComponent(container, virtual, component) {\n const registeredComponent = this._registeredComponentMap.get(container);\n if (registeredComponent === undefined) {\n super.unbindComponent(container, virtual, component); // was not created from registration so use virtual unbind events\n }\n else {\n const virtuableComponent = this._virtuableComponentMap.get(container);\n if (virtuableComponent !== undefined) {\n const componentRootElement = virtuableComponent.rootHtmlElement;\n if (componentRootElement === undefined) {\n throw new AssertError('GLUC77743', container.title);\n }\n else {\n this.container.removeChild(componentRootElement);\n this._virtuableComponentMap.delete(container);\n }\n }\n }\n }\n fireBeforeVirtualRectingEvent(count) {\n this._goldenLayoutBoundingClientRect = this.container.getBoundingClientRect();\n super.fireBeforeVirtualRectingEvent(count);\n }\n /** @internal */\n handleContainerVirtualRectingRequiredEvent(container, width, height) {\n const virtuableComponent = this._virtuableComponentMap.get(container);\n if (virtuableComponent === undefined) {\n throw new UnexpectedUndefinedError('GLHCSCE55933');\n }\n else {\n const rootElement = virtuableComponent.rootHtmlElement;\n if (rootElement === undefined) {\n throw new BindError(i18nStrings[4 /* I18nStringId.ComponentIsNotVirtuable */] + ' ' + container.title);\n }\n else {\n const containerBoundingClientRect = container.element.getBoundingClientRect();\n const left = containerBoundingClientRect.left - this._goldenLayoutBoundingClientRect.left;\n rootElement.style.left = numberToPixels(left);\n const top = containerBoundingClientRect.top - this._goldenLayoutBoundingClientRect.top;\n rootElement.style.top = numberToPixels(top);\n setElementWidth(rootElement, width);\n setElementHeight(rootElement, height);\n }\n }\n }\n /** @internal */\n handleContainerVirtualVisibilityChangeRequiredEvent(container, visible) {\n const virtuableComponent = this._virtuableComponentMap.get(container);\n if (virtuableComponent === undefined) {\n throw new UnexpectedUndefinedError('GLHCVVCRE55934');\n }\n else {\n const rootElement = virtuableComponent.rootHtmlElement;\n if (rootElement === undefined) {\n throw new BindError(i18nStrings[4 /* I18nStringId.ComponentIsNotVirtuable */] + ' ' + container.title);\n }\n else {\n setElementDisplayVisibility(rootElement, visible);\n }\n }\n }\n /** @internal */\n handleContainerVirtualZIndexChangeRequiredEvent(container, logicalZIndex, defaultZIndex) {\n const virtuableComponent = this._virtuableComponentMap.get(container);\n if (virtuableComponent === undefined) {\n throw new UnexpectedUndefinedError('GLHCVZICRE55935');\n }\n else {\n const rootElement = virtuableComponent.rootHtmlElement;\n if (rootElement === undefined) {\n throw new BindError(i18nStrings[4 /* I18nStringId.ComponentIsNotVirtuable */] + ' ' + container.title);\n }\n else {\n rootElement.style.zIndex = defaultZIndex;\n }\n }\n }\n}\n//# sourceMappingURL=golden-layout.js.map"],"sourceRoot":""}
|