{"version":3,"sources":["components/button/button-component.scss?tag=igc-button-component&encapsulation=shadow","components/button/button-component.tsx","utils/utils.ts","components/dockmanager/dockmanager.interfaces.ts","components/dockmanager/panes/content-pane-component.scss?tag=igc-content-pane-component&encapsulation=shadow","components/dockmanager/panes/content-pane-component.tsx","components/context-menu/context-menu-component.scss?tag=igc-context-menu-component&encapsulation=shadow","components/context-menu/context-menu-component.tsx","utils/two-way-map.ts","components/dockmanager/dockmanager.service.ts","components/dockmanager/keyboard/keyboard.service.ts","components/dockmanager/dockmanager-component.tsx","components/dockmanager/dockmanager-component.scss?tag=igc-dockmanager&encapsulation=shadow","components/dockmanager/panes/document-host-component.css?tag=igc-document-host-component&encapsulation=scoped","components/dockmanager/panes/document-host-component.tsx","components/dockmanager/panes/floating-pane-component.scss?tag=igc-floating-pane-component&encapsulation=shadow","components/dockmanager/panes/floating-pane-component.tsx","components/icon/icons.ts","components/icon/icon-component.tsx","components/icon/icon-component.scss?tag=igc-icon-component&encapsulation=scoped","components/dockmanager/docking/joystick-icon-component.scss?tag=igc-joystick-icon-component&encapsulation=scoped","components/dockmanager/docking/joystick-icon-component.tsx","components/dockmanager/docking/joystick-indicator-component.scss?tag=igc-joystick-indicator-component&encapsulation=scoped","components/dockmanager/docking/joystick-indicator-component.tsx","components/drag-drop/drag.service.ts","components/dockmanager/panes/pane-header-component.scss?tag=igc-pane-header-component&encapsulation=shadow","components/dockmanager/panes/pane-header-component.tsx","components/dockmanager/pane-navigator/pane-navigator-component.scss?tag=igc-pane-navigator-component&encapsulation=shadow","components/dockmanager/pane-navigator/pane-navigator-component.tsx","components/dockmanager/panes/resizer-component.scss?tag=igc-resizer-component&encapsulation=scoped","components/dockmanager/panes/resizer-component.tsx","components/dockmanager/docking/root-docking-indicator-component.scss?tag=igc-root-docking-indicator-component&encapsulation=scoped","components/dockmanager/docking/root-docking-indicator-component.tsx","components/dockmanager/panes/split-pane-component.scss?tag=igc-split-pane-component&encapsulation=scoped","components/dockmanager/panes/split-pane-component.tsx","components/dockmanager/panes/splitter-component.scss?tag=igc-splitter-component&encapsulation=shadow","components/dockmanager/panes/splitter-component.tsx","components/tabs/tab-header-component.scss?tag=igc-tab-header-component&encapsulation=shadow","components/tabs/tab-header-component.tsx","components/tabs/tab-panel-component.scss?tag=igc-tab-panel-component&encapsulation=shadow","components/tabs/tab-panel-component.tsx","components/tabs/tabs-component.tsx","components/tabs/tabs-component.scss?tag=igc-tabs-component&encapsulation=shadow","components/dockmanager/panes/unpinned-pane-header-component.scss?tag=igc-unpinned-pane-header-component&encapsulation=shadow","components/dockmanager/panes/unpinned-pane-header-component.tsx","components/sample-component/sample-component.tsx","components/sample-component/sample-component.css?tag=sample-component&encapsulation=scoped"],"names":["IgcButtonComponent","render","h","Host","disabled","this","name","type","value","Utils","isDockingIndicatorVertical","position","IgcDockingIndicatorPosition","top","bottom","outerTop","outerBottom","isDockingIndicatorBefore","left","outerLeft","isDockingIndicatorBeforeRTL","right","outerRight","isDockingIndicatorOuter","isSplitPaneVertical","splitPane","orientation","IgcSplitPaneOrientation","vertical","isAltPressed","event","altKey","getModifierState","isControlOrMetaPressed","ctrlKey","metaKey","partNameMap","partNameInfo","delimiter","arguments","length","undefined","Object","keys","filter","key","join","getDirection","element","direction","dir","parent","parentElement","IGC_DEFAULT_PANE_SIZE","IGC_RESIZING_MIN_SIZE","IgcTabHeadersPosition","IgcContextMenuOrientation","IgcPinBehavior","IgcContentPaneComponent","componentDidRender","rendered","emit","size","unpinnedSize","parts","contentId","isSingleFloating","role","header","tabindex","style","flex","isFlyout","concat","part","IgcContextMenuComponent","handleDocumentResize","menuClosed","handleDocumentMouseDown","ev","composedPath","every","el","elem","emitMenuClosed","connectedCallback","document","defaultView","addEventListener","disconnectedCallback","removeEventListener","componentDidLoad","isTabsMoreButton","target","querySelector","menuItemsDivRect","menuItemsDiv","getBoundingClientRect","hostRect","rootNodeShadowHost","getRootNode","isFloating","host","rootHostRect","isTabs","tagName","toLowerCase","tabsContentHost","shadowRoot","tabRect","tabsContentRect","isRTL","menuToBottom","window","innerHeight","height","menuToTop","menuToStart","width","menuToEnd","menuToCenter","menuLeft","menuTop","menuBottom","visibility","focusItemAndSetActiveIndex","firstMenuItem","focus","parentNode","handleKeyboardEvents","item","menuItemChildren","querySelectorAll","activeIndex","clickHandler","handleMenuItemClick","renderItemIcon","Fragment","iconName","renderCloseButton","renderUnpinButton","exportparts","ref","onMouseDown","preventDefault","items","map","onKeyDown","bind","onClick","flexGrow","userSelect","displayText","TwoWayMap","constructor","Map","reversedMap","set","get","getByValue","delete","has","hasValue","IgcDockManagerService","dockManager","unpinnedLocationMap","keyboardDockPane","getContent","clientContentPanesMap","generateUuid","replace","c","r","Math","random","toString","populatePaneParents","isRoot","isInDocHost","id","pane","panes","paneParentMap","IgcDockManagerPaneType","contentPane","hidden","tabGroupPane","cp","visibleDocuments","push","visibleContentPanes","documentHost","documentHosts","rootPane","populatePinLocations","addContentPanePinLocation","resolvePaneUnpinLocation","unpinnedLocation","findClosestDocumentHost","findPaneUnpinLocation","IgcUnpinnedLocation","isPinned","panePath","getPanePath","closestDocHost","maxCommonParents","docHost","docHostPath","i","commonParentIndex","commonParent","paneIndex","indexOf","docHostIndex","horizontal","removePane","maximizedPane","index","splice","allowEmpty","rootParent","getRootParent","isFloatingPane","removeFloatingPaneIfEmpty","layout","floatingPanes","floatingIndex","getChildContentPanes","addFloatingPane","content","location","floatingPane","floatingLocation","floatingWidth","floatingHeight","draggedPane","initialFloatingPaneLocation","forceDragPane","getChildContentPanesRecursive","children","child","getChildDocHostRecursive","result","getVisibleContentPanes","t","isContentPaneVisible","getPaneToDock","removeDocumentHost","getParent","dockToCenter","targetPane","targetContainer","targetParent","panesToDock","paneToDock","documentOnlyDrag","childPanes","dockToEdge","isIndicatorVertical","proximityDock","dockingIndicator","dropTargetPaneInfo","floatingPaneWithoutDocHost","activePane","insertIndex","newSplitPane","updateLayout","assign","hasMaximizedProp","getLastMaximizedPane","Array","from","isMaximized","processLayout","indicesToDelete","floatingPaneZIndicesMap","flyoutPane","path","currentPane","getDocHostParent","resizeFlyoutPane","delta","paneSize","newSize","resizePane","deltaPercentage","parentPane","getSplitPaneVisibleChildren","paneSizes","p","calcDelta","reduce","togglePin","pinBehavior","allPanes","newValue","getActualIsPinned","args","sourcePane","allowPinning","panePinnedToggle","defaultPrevented","targetPanes","closePane","paneToRemove","removeAllowedPanes","emitPaneClose","closeFloatingPane","paneRemoved","paneClose","getActualAllowClose","maximizePane","moveFloatingPane","resizeFloatingPaneStart","resizerLocation","resizeArgs","floatingPaneResizeStart","_a","x","y","initialFloatingPaneWidth","_b","initialFloatingPaneHeight","_c","resizeFloatingPane","currX","currY","currW","currH","minW","minH","initialWidth","initialHeight","initialLocation","totalOffsetY","dragMoveArgs","totalOffsetX","newX","newY","newWidth","newHeight","maxHeight","documentElement","clientHeight","maxWidth","clientWidth","IgcResizerLocation","topLeft","topRight","bottomLeft","bottomRight","resizingArgs","oldWidth","oldHeight","oldLocation","newLocation","floatingPaneResizeMove","cancel","resizeFloatingPaneEnd","floatingPaneResizeEnd","layoutChange","floatPane","panesToRemove","paneToAdd","selectedIndex","forEach","floatTab","documentOnly","hasFloatingPaneHeader","childPane","rootDockPane","newRootPane","dockPane","draggedFloatingPane","center","allowClose","some","closeTabPane","bringFloatingPaneOnTop","oldZIndex","zIndex","createContextMenuItems","resourceStrings","close","unpin","selectedPane","dragPaneStart","rect","clientX","clientY","disableDockingAndFloating","allowDocking","allowFloating","paneDragStart","draggedPanes","initialDragClientPoint","action","IgcPaneDragActionType","dragOverEvent","paneDragOver","isValid","detail","pointInBoundaries","minDragPosition","dockManagerRect","maxDragPosition","dragPaneMove","containedInBoundaries","isValidDrop","dragOver","dragPaneEnd","draggedTab","docked","paneDragEnd","dropShadowRect","proximityDockPosition","emitDragOverEvent","getDropShadowRectRoot","getDropShadowRect","disableDocking","dragTabStart","shiftLeftThreshold","Number","MAX_VALUE","shiftRightThreshold","initialTabHeaderClickOffset","dragTabMove","rects","offsetX","headerRect","prevHeaderRect","nextHeaderRect","lastVisibleHeaderRect","tabsRect","clickOffsetX","clickOffsetY","moveTab","oldIndex","newIndex","shiftTabLeft","shiftTabRight","abs","floatTabHeader","DOMRect","resolveChildPanesAllowMaximize","allowMaximize","normalizeMaximizedPane","resolveAllowMaximize","dockingPosition","dockingDirection","shadowRect","parentRect","dropTargetParentRect","targetRect","draggedPaneSize","isOuter","baseRect","draggedPaneIndex","dropTargetIndex","isSameSplitPane","panesTotalSize","a","b","beforePanesTotalSize","slice","afterPanesTotalSize","rootRect","isEmptyDockManager","selectHiddenTab","tabGroup","draggedIndex","forceDragTabHeader","cacheDocumentsOrder","documentsCache","cacheContentPanesOrder","contentPanesCache","focusPrevContentPane","activePaneIndex","prevPane","focusNextContentPane","nextPane","IgcDockManagerKeyboardService","service","handleKeydown","disableKeyboardNavigation","ctrlOrMetaKey","shiftKey","startsWith","handleFocusPane","stopPropagation","focusElement","handleDockPane","setPaneNavigatorMeta","f6","arrowLeft","arrowRight","handleRootDockPane","activePaneParent","handleInnerDockPane","initIndex","allItems","metadata","activePanes","activeDocuments","initialIndex","previousActivePaneIndex","navigationPaneMeta","ActionReason","IgcDockManager","_tabHeaderIconClicked","keyboardService","activePaneInternalSet","domObserver","MutationObserver","mutationCallback","shouldMovePane","scheduledCallbacks","shouldClearActivePane","isDragging","splitterOffset","loaded","resizeObserver","ResizeObserver","restrictFloatingPaneSize","proximityDockThreshold","proximityOuterDockThreshold","templatableComponents","slot","targetName","targetSlot","targetPart","updateTemplates","templates","slotted","slottedArray","usedTemplates","comp","matchedSlots","s","assignedElements","handleCustomContentFocusIn","eventArgs","currentTarget","setActivePane","_isValidDrop","handleShadowRootFocusOut","paneToFocus","rootNode","requestAnimationFrame","activeElement","reason","maximizeOrMinimize","clearActivePane","flyoutPaneChanged","scheduleAfterRender","setFocus","containedInBoundariesChanged","layoutChanged","draggedPaneChanged","showDockingIndicators","dropPositionChanged","paneDragMoved","dropPosition","activePaneChange","oldValue","newPane","oldPane","activePaneChanged","contentPaneId","visibleTabs","tabHeaderElement","tabHeadersMap","firstTabRect","visibleIndex","handleFocusOut","_event","contains","handleKeyDown","handlePointerDown","e","HTMLElement","attributes","getNamedItem","handlePointerUp","dropPane","handlePaneDragEnd","Promise","resolve","focusPane","isUnpinned","handlePaneFlyout","observe","subtree","childList","dockManagerChildren","htmlElem","componentWillLoad","contextMenuMeta","closestElement","closest","lang","resourceStringsMap","componentWillRender","lastMaximizedPane","handleMaximize","shift","callback","processTemplates","removeCustomContentEventListeners","disconnect","handleTabsRendered","drop","focusablePane","findFocusablePane","handleSplitPaneRendered","candidate","splitPanes","tabGroupPanes","docHostPane","find","component","template","setAttribute","match","appendChild","cloneNode","handleTabHeaderFocus","handleContentPaneFocus","handleUnpinnedHeaderFocus","elemToFocus","contentPanesElementMap","unpinnedHeadersMap","Error","records","rec","addedNodes","removedNodes","body","cursor","paneElement","panesElementMap","isPaneSizeWithinConstraints","offset","minSize","maxSize","parseFloat","getComputedStyle","minWidth","minHeight","isNaN","handleFlyoutSplitterResizeEnd","splitter","previousPane","previousElementSibling","paneWidth","paneHeight","splitterResizeEnd","handleSplitterResizeStart","splitPaneOrientation","splitterEl","nextElementSibling","splitterResizeStart","showDragGhost","handleSplitterResizeEnd","paneComponents","sizeProperty","sizeSum","offsetPercentage","rtl","handlePinToggle","handlePaneClose","handleFloatingPaneClose","handleUnpinnedTabMouseDown","handleUnpinnedTabKeyDown","handlePaneDragStart","dragStarted","handlePaneDragMove","handleDropPositionChange","cursorLocation","getProximityDockPosition","getInnerDropTargetParentRect","dragMoved","targetDocHostParent","targetPaneParent","allowOuterProximityDock","dropTarget","targetPaneRect","centerX","centerY","acceptsInnerDock","allowInnerDock","isOverSplitter","splitterRect","allowOuterTopDock","allowOuterBottomDock","allowOuterLeftDock","allowOuterRightDock","handleTabHeaderDragStart","handleTabHeaderDragMove","tabs","tabHeaders","headerIndex","th","tabRectsInfo","tabMoved","handleTabHeaderDragEnd","handleFloatingPaneResizeStart","handleFloatingPaneResizeMove","handleFloatingPaneResizeEnd","elements","elementsFromPoint","splitterIndex","adjacentElement","floatingId","topElement","indicatorTarget","dockingIndicatorElement","joystickIcon","empty","lastIndexOf","dropPaneRoot","getDropTargetParentRect","dockedPanesContainer","outerParent","handlePaneContentMouseDown","handlePaneContentScroll","contentElement","paneScroll","handlePaneHeaderMouseDown","handleTabHeaderMouseDown","pathHTMLElements","et","showHeaderIconOnHover","click","handleFloatingPaneMouseDown","nodeName","handleTabIconClick","tabHeader","moreOptionsContainer","menuItems","contextMenuPosition","handleContextMenuClosed","handleTabSelectedIndexChanged","handleHiddenTabSelected","handleSelectedTabOutOfView","handleTabIconKeyDown","targetElem","handleTabSelectedChanged","emitPaneHeaderConnected","paneHeaderConnected","emitPaneHeaderDisconnected","paneHeaderDisconnected","emitTabHeaderConnected","tabHeaderConnected","emitTabHeaderDisconnected","tabHeaderDisconnected","removeHoveredPane","hoveredPane","togglePaneHeaderVisibility","paneRect","renderButtonsTemplates","onSlotchange","renderContentPane","forceDrag","isSingleFloatingContentPane","maximized","onMouseMove","onMouseLeave","class","onFocusin","isActive","pinned","forcedDrag","onPinToggle","onMaximize","onDragMoved","onDragStarted","onDragEnded","onClose","onElementConnected","onElementDisconnected","showPaneHeaders","floatingHeaderId","headerId","onScroll","renderSplitter","onResizeStart","onResizeEnd","renderDocumentHost","renderSplitPane","renderTabGroup","isInDocumentHost","isSingleTab","contentIds","hasHeaders","onMaximizeMinimizeFocus","onSelectedIndexChanged","onHiddenTabSelected","onSelectedTabOutOfView","onRendered","tabHeadersPosition","renderTabPanel","renderTabHeader","onSelectedChanged","onIconKeyDown","onIconClicked","tabHeaderId","title","paneComponent","renderUnpinnedTabArea","isHorizontal","isLeft","isRight","isBottom","l","tabAreaClasses","onFocus","unpinnedHeaderId","renderFlyoutPane","flyoutClasses","flyoutLocation","renderFloatingPanes","hasHeader","containsMaximizedPane","onWndResizeStart","onWndResizeMove","onWndResizeEnd","allowResize","floatingResizable","allowFloatingPanesResize","isFloatingPaneHeader","renderRootDockingIndicator","renderDockingIndicators","startPosition","endPosition","display","flexDirection","justifyContent","allowCenterDock","renderContextMenu","onMenuClosed","renderDropShadow","_d","handlePaneNavigatorClosed","renderPaneNavigator","onClosed","IgcDocumentHostComponent","IgcFloatingPaneComponent","handleResizerMove","wndResizeMove","handleResizeStart","offsetY","wndResizeStart","handleResizeEnd","wndResizeEnd","styles","floatingMinWidth","floatingMinHeight","onResizerDragStart","onResizerMoved","onResizerDragEnd","icons","pin","first_page","chevron_left","flip","crop_square","arrow_drop_down","maximize","minimize","more","IgcIconComponent","innerHTML","IgcJoystickIconComponent","resolveIconDivClass","positionClass","classes","resolveMargin","resolveGridRow","isDocHost","resolveGridColumn","renderIcon","transform","gridRow","gridColumn","margin","IgcJoystickIndicatorComponent","isEmptyCenter","isEmptyEdge","selector","shouldAllowCenterDock","renderBlankIndicator","renderIndicator","IGNORE_DRAG","IgcDragService","captureTarget","_capturedElement","val","dragTolerance","dragEdgeTolerance","handleWheel","targets","Element","hasAttribute","startX","startY","lastX","lastY","setPointerCapture","pointerId","subscribeDragEvents","handlePointerMove","currentX","currentY","triggerDragStart","dragMove","unsubscribeDragEvents","releasePointerCapture","dragEnd","dragStart","passive","destroy","forceDragging","IgcPaneHeaderComponent","pinButtonClick","pinToggle","maximizeButtonClick","closeButtonClick","dragService","dragEnded","elementConnected","elementDisconnected","forcedDragChanged","renderMaximizeButton","renderMinimizeButton","renderPinButton","commonParts","active","floating","paneHeaderParts","paneHeaderContentParts","paneHeaderActionsParts","exportParts","IgcPaneNavigatorComponent","scrollItemToView","selectedItem","allItemsElement","selectedItemRect","itemsContainerRect","scrollTop","handleKeyUp","code","closed","isShiftPressed","decreaseSelectedIndex","increaseSelectedIndex","navigateToIndex","counter","amount","paneNav","resolveItemPart","selected","selectItem","renderItems","onMouseUp","tabIndex","documents","IgcResizerComponent","resizerDragStart","resizerDragEnd","resizerMoved","isCornerResizer","pointerEvents","IgcRootDockingIndicatorComponent","IgcSplitPaneComponent","IgcSplitterComponent","handleMouseUp","dragStartHelper","dragEndHelper","ghostElement","clientCoordinate","startCoordinate","endCoordinate","dragOffset","constrainFlyoutResize","constrainSplitPaneResize","calculateOffset","isArrowUp","isArrowLeft","isArrowDown","isArrowRight","handleKeydownEvent","handleMouseDown","resizeStart","offsetWidth","offsetHeight","flyoutMaxSize","resizeEnd","isStartLocation","minOffset","maxOffset","dockmanager","isVertical","referencePaneSize","handleSlotChange","handleSlot","hasCustomSplitterHandle","handle","splitterClasses","ghostClasses","IgcTabHeaderComponent","iconClick","iconClicked","keyDown","iconKeyDown","iconSlot","isIconClicked","tabMouseDown","handleMouseEnter","hovered","handleMouseLeave","activeChanged","queryButton","button","shouldShowButton","renderMoreOptionsButton","moreOptions","showCloseOnHover","showMoreOptionsOnHover","tabParts","IgcTabPanelComponent","emitSelectedChanged","selectedPropChange","componentDidUpdate","selectedChanged","NEXT_TAB_ID","IgcTabsComponent","forcedUpdate","selectionOrder","tabHeadersDivResized","slotChanged","setTabsAttributes","updateSelection","handleSelectedIndexChanged","forceUpdate","onTabKeyDown","hiddenTabHeaders","handleMaximizeMinimizeFocus","maximizeMinimizeFocus","selectedIndexPropertyChanged","selectedIndexChanged","hiddenTabsMenuMeta","checkForActivePane","componentWillUpdate","headers","missingMatchIndex","findIndex","newSelectedIndex","currentSelectionId","existingMatchIndex","tabHeadersDiv","setHasHiddenTabs","tabPanels","getAttribute","tabPanelId","containerTop","offsetTop","handleTabMouseDown","selectedTabHeader","selectedTabOutOfView","hasHiddenTabs","activeTabHeader","hiddenActiveTabIndex","activeTabIndex","handleHiddenTabsMenuClick","hiddenTabSelected","renderHiddenTabsMenu","renderTabHeaders","commontParts","tabStripParts","tabStripActionsParts","showHiddenTabsMenu","renderMoreTabsButton","moreTabs","tabsContentParts","IgcUnpinnedPaneHeaderComponent","isTop","start","end","addResourceStrings","SampleComponent","teamExplorerPane","unpinnedToolboxPane","unpinnedTeamExplorerPane","layout1","layout2","logEnabled","foundElem","saveLayout","savedLayout","JSON","stringify","loadLayout","parse","addPane","newId","newDiv","createElement","addTab","findElement","disableContentPane","toggleProximityDock","showPane","hiddenPanesSelect","hiddenPanes","showAllPanes","toggleInBoundaries","typeOfElement","someContent","createTextNode","divContent","log","hideOnCloseCheckbox","checked","handlePaneScroll","handlePinnedToggle","handleActivePaneChanged","handleDragStart","handleDragOver","handleDragEnd","handleLayoutChange","message","_len","optionalParams","_key","console","marginLeft","htmlFor","onPaneClose","onPaneScroll","onPanePinnedToggle","onActivePaneChanged","onPaneDragStart","onPaneDragOver","onPaneDragEnd","onSplitterResizeStart","onSplitterResizeEnd","onFloatingPaneResizeStart","onFloatingPaneResizeMove","onFloatingPaneResizeEnd","onLayoutChange","color","background"],"mappings":"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","file":"static/js/0.e9cf7c90.chunk.js","sourcesContent":["%button-display {\r\n position: static;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: auto;\r\n height: 100%;\r\n min-width: 10px;\r\n padding: 2px 4px;\r\n border-radius: 2px;\r\n color: $button-text;\r\n cursor: pointer;\r\n outline-style: none;\r\n font-size: 14px;\r\n font-family: inherit;\r\n background: transparent;\r\n border: none;\r\n -webkit-tap-highlight-color: transparent;\r\n opacity: .7;\r\n transition: background .25s ease-out,\r\n opacity .25s ease-out,\r\n box-shadow .25s ease-out;\r\n}\r\n\r\n:host([disabled]) {\r\n pointer-events: none;\r\n}\r\n\r\n:host {\r\n display: flex;\r\n}\r\n\r\nbutton {\r\n @include ellipsis();\r\n @extend %button-display;\r\n\r\n &:hover {\r\n opacity: 1;\r\n }\r\n\r\n &:focus {\r\n background: $accent-color;\r\n box-shadow: inset 0 0 0 1px $active-color;\r\n opacity: 1;\r\n }\r\n\r\n &[disabled] {\r\n opacity: .54;\r\n }\r\n}\r\n\r\n","import { Component, Host, Prop, h } from '@stencil/core';\r\n\r\n/**\r\n * @hidden\r\n */\r\n@Component({\r\n tag: 'igc-button-component',\r\n styleUrl: 'button-component.scss',\r\n shadow: true,\r\n})\r\nexport class IgcButtonComponent {\r\n @Prop() disabled: boolean;\r\n @Prop({ reflect: true }) name: string;\r\n @Prop({ reflect: true }) type: string;\r\n @Prop({ reflect: true }) value: string;\r\n\r\n render() {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","import { IgcSplitPane, IgcSplitPaneOrientation } from '..';\r\nimport { PartNameInfo } from '../components/dockmanager/dockmanager.interfaces';\r\nimport { IgcDockingIndicatorPosition } from '../components/dockmanager/dockmanager.public-interfaces';\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class Utils {\r\n static isDockingIndicatorVertical(position: IgcDockingIndicatorPosition): boolean {\r\n return position === IgcDockingIndicatorPosition.top ||\r\n position === IgcDockingIndicatorPosition.bottom ||\r\n position === IgcDockingIndicatorPosition.outerTop ||\r\n position === IgcDockingIndicatorPosition.outerBottom;\r\n }\r\n\r\n static isDockingIndicatorBefore(position: IgcDockingIndicatorPosition): boolean {\r\n return position === IgcDockingIndicatorPosition.top ||\r\n position === IgcDockingIndicatorPosition.left ||\r\n position === IgcDockingIndicatorPosition.outerTop ||\r\n position === IgcDockingIndicatorPosition.outerLeft;\r\n }\r\n\r\n static isDockingIndicatorBeforeRTL(position: IgcDockingIndicatorPosition): boolean {\r\n return position === IgcDockingIndicatorPosition.top ||\r\n position === IgcDockingIndicatorPosition.right ||\r\n position === IgcDockingIndicatorPosition.outerTop ||\r\n position === IgcDockingIndicatorPosition.outerRight;\r\n }\r\n\r\n static isDockingIndicatorOuter(position: IgcDockingIndicatorPosition): boolean {\r\n return position === IgcDockingIndicatorPosition.outerLeft ||\r\n position === IgcDockingIndicatorPosition.outerRight ||\r\n position === IgcDockingIndicatorPosition.outerTop ||\r\n position === IgcDockingIndicatorPosition.outerBottom;\r\n }\r\n\r\n static isSplitPaneVertical(splitPane: IgcSplitPane): boolean {\r\n return splitPane.orientation === IgcSplitPaneOrientation.vertical;\r\n }\r\n\r\n static isAltPressed(event: KeyboardEvent): boolean {\r\n return event.altKey || event.getModifierState('Alt') || event.getModifierState('AltGraph');\r\n }\r\n\r\n static isControlOrMetaPressed(event: KeyboardEvent): boolean {\r\n return event.ctrlKey || event.metaKey || event.getModifierState('Meta') || event.getModifierState('OS');\r\n }\r\n\r\n static partNameMap(partNameInfo: PartNameInfo, delimiter = ' ') {\r\n return Object.keys(partNameInfo).filter(key => partNameInfo[key]).join(delimiter);\r\n }\r\n\r\n static getDirection(element: any): string {\r\n let direction = '';\r\n if (element.dir !== '') {\r\n direction = element.dir;\r\n } else {\r\n let parent = element.parentElement;\r\n while (parent) {\r\n if (parent.dir !== '') {\r\n direction = parent.dir;\r\n break;\r\n }\r\n parent = parent.parentElement;\r\n }\r\n }\r\n return direction;\r\n }\r\n}\r\n","import { EventEmitter } from '@stencil/core';\r\n\r\nimport {\r\n IgcContentPane, IgcDockManagerLayout, IgcDockManagerPane, IgcDockManagerResourceStrings, IgcDocumentHost,\r\n IgcFloatingPaneResizeEventArgs,\r\n IgcFloatingPaneResizeMoveEventArgs,\r\n IgcPaneCloseEventArgs, IgcPaneDragEndEventArgs, IgcPaneDragOverEventArgs, IgcPaneDragStartEventArgs, IgcPanePinnedEventArgs, IgcPaneScrollEventArgs, IgcSplitPane, IgcTabGroupPane\r\n} from './dockmanager.public-interfaces';\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport const IGC_DEFAULT_PANE_SIZE = 100;\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport const IGC_DEFAULT_UNPIN_PANE_SIZE = 200;\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport const IGC_RESIZING_MIN_SIZE = 42;\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport const IGC_DEFAULT_RESIZE = 10;\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport const IGC_DRAG_FLYOUT_THRESHOLD = 50;\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport enum IgcTabHeadersPosition {\r\n top = 'top',\r\n bottom = 'bottom'\r\n}\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport enum IgcContextMenuOrientation {\r\n top = 'top',\r\n bottom = 'bottom'\r\n}\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport type IgcContextMenuPosition = 'start' | 'center' | 'end' | 'stretch';\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport enum IgcPinBehavior {\r\n allPanes = 'allPanes',\r\n selectedPane = 'selectedPane'\r\n}\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport interface IgcDropTargetPaneInfo {\r\n pane: IgcDockManagerPane;\r\n docHost: IgcDocumentHost;\r\n targetRect: DOMRect;\r\n floatingPaneWithoutDocHost?: boolean;\r\n}\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport interface IgcDockManagerComponentBase {\r\n activePane: IgcContentPane;\r\n draggedPane: IgcContentPane | IgcSplitPane | IgcTabGroupPane;\r\n dropTargetPaneInfo: IgcDropTargetPaneInfo;\r\n documentOnlyDrag: boolean;\r\n dropShadowRect: DOMRect;\r\n isValidDrop: boolean;\r\n allowMaximize: boolean;\r\n proximityDock: boolean;\r\n containedInBoundaries: boolean;\r\n flyoutPane: IgcContentPane;\r\n maximizedPane: IgcContentPane | IgcSplitPane | IgcTabGroupPane;\r\n layout: IgcDockManagerLayout;\r\n disableKeyboardNavigation: boolean;\r\n floatingPaneZIndicesMap: Map;\r\n paneClose: EventEmitter;\r\n paneScroll: EventEmitter;\r\n panePinnedToggle: EventEmitter;\r\n paneDragStart: EventEmitter;\r\n paneDragOver: EventEmitter;\r\n paneDragEnd: EventEmitter;\r\n resourceStrings: IgcDockManagerResourceStrings;\r\n focusElement: () => void;\r\n navigationPaneMeta?: IgcPaneNavigatorMetadata;\r\n floatingPaneResizeStart: EventEmitter;\r\n floatingPaneResizeMove: EventEmitter;\r\n floatingPaneResizeEnd: EventEmitter;\r\n layoutChange: EventEmitter;\r\n direction: string;\r\n allowInnerDock: boolean;\r\n}\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport interface IgcContextMenuMetadata {\r\n menuItems: IgcContextMenuItem[];\r\n target: HTMLElement;\r\n position: IgcContextMenuPosition;\r\n}\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport interface IgcContextMenuItem {\r\n iconName: string;\r\n displayText: string;\r\n disabled?: boolean;\r\n clickHandler: () => void;\r\n}\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport interface IgcTabRectsInfo {\r\n headerRect: DOMRect;\r\n prevHeaderRect: DOMRect;\r\n nextHeaderRect: DOMRect;\r\n lastVisibleHeaderRect: DOMRect;\r\n tabsRect: DOMRect;\r\n}\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport interface IgcPaneNavigatorMetadata {\r\n activePanes: IgcContentPane[];\r\n activeDocuments: IgcContentPane[];\r\n initialIndex: number;\r\n previousActivePaneIndex: number;\r\n}\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport interface PartNameInfo {\r\n readonly [name: string]: string | boolean | number;\r\n}\r\n",":host {\r\n --min-pane-size: 0px;\r\n\r\n position: relative;\r\n display: flex;\r\n flex-direction: column;\r\n overflow: hidden;\r\n width: 100%;\r\n height: 100%;\r\n min-width: var(--min-pane-size);\r\n min-height: var(--min-pane-size);\r\n box-sizing: border-box;\r\n pointer-events: all;\r\n}\r\n\r\n:host(:focus) {\r\n outline-style: none;\r\n}\r\n\r\n:host([part~='disabled']:not([part~='single-floating'])),\r\n:host([part~='disabled']) > slot:not([name]) {\r\n pointer-events: none;\r\n}\r\n","import { Component, Event, EventEmitter, Host, Prop, h } from '@stencil/core';\r\n\r\nimport { Utils } from '../../../utils/utils';\r\nimport { IGC_DEFAULT_PANE_SIZE, IGC_DEFAULT_UNPIN_PANE_SIZE } from '../dockmanager.interfaces';\r\n\r\n/**\r\n * @hidden\r\n */\r\n@Component({\r\n tag: 'igc-content-pane-component',\r\n styleUrl: 'content-pane-component.scss',\r\n shadow: true,\r\n scoped: false\r\n})\r\nexport class IgcContentPaneComponent {\r\n @Prop() size: number;\r\n @Prop() isFlyout: boolean;\r\n @Prop() unpinnedSize: number;\r\n @Prop() header: string;\r\n @Prop() disabled = false;\r\n @Prop() isSingleFloating = false;\r\n @Prop() contentId: string;\r\n\r\n @Event() rendered: EventEmitter;\r\n\r\n componentDidRender() {\r\n this.rendered.emit();\r\n }\r\n\r\n render() {\r\n const size = this.size || this.size === 0 ? this.size : IGC_DEFAULT_PANE_SIZE;\r\n const unpinnedSize = this.unpinnedSize ? this.unpinnedSize : IGC_DEFAULT_UNPIN_PANE_SIZE;\r\n\r\n const parts = Utils.partNameMap({\r\n 'content-pane': true,\r\n [this.contentId]: true,\r\n disabled: this.disabled,\r\n 'single-floating': this.isSingleFloating\r\n });\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n",":host {\r\n position: absolute;\r\n display: block;\r\n box-sizing: border-box;\r\n top: 0;\r\n left: 0;\r\n bottom: 0;\r\n right: 0;\r\n z-index: 10002;\r\n pointer-events: none;\r\n\r\n igc-icon-component svg {\r\n width: 17px;\r\n height: 17px;\r\n }\r\n\r\n igc-icon-component {\r\n margin-left: 8px;\r\n }\r\n}\r\n\r\n[part='menu-content'] {\r\n position: absolute;\r\n visibility: hidden;\r\n color: $context-menu-color;\r\n background: $context-menu-background;\r\n border: 1px solid $context-menu-background;\r\n pointer-events: all;\r\n box-shadow: 0 5px 22px rgba(0, 0, 0, .08),\r\n 0 12px 17px 2px rgba(0, 0, 0, .12),\r\n 0 7px 8px -4px rgba(0, 0, 0, .26);\r\n box-sizing: border-box;\r\n}\r\n\r\n[part~='menu-item'] {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 6px 8px;\r\n font-size: em(12px);\r\n line-height: 1.7;\r\n cursor: pointer;\r\n transition: background .25s ease-out, color .25s ease-out;\r\n outline-style: none;\r\n\r\n &:hover {\r\n background: $context-menu-background-active;\r\n color: $context-menu-color-active;\r\n }\r\n\r\n &:focus {\r\n background: $context-menu-background-active;\r\n color: $context-menu-color-active;\r\n }\r\n}\r\n\r\n[part~='disabled'] {\r\n pointer-events: none;\r\n color: $disabled-color;\r\n}\r\n","import { Component, Element, Event, EventEmitter, Fragment, Host, Listen, Prop, h } from '@stencil/core';\r\n\r\nimport { Utils } from '../../utils/utils';\r\nimport { IgcContextMenuItem, IgcContextMenuOrientation, IgcContextMenuPosition } from '../dockmanager/dockmanager.interfaces';\r\n\r\n/**\r\n * @hidden\r\n */\r\n@Component({\r\n tag: 'igc-context-menu-component',\r\n styleUrl: 'context-menu-component.scss',\r\n shadow: true\r\n})\r\nexport class IgcContextMenuComponent {\r\n private menuItemsDiv: HTMLElement;\r\n\r\n @Element() elem: HTMLElement;\r\n\r\n @Prop() orientation: IgcContextMenuOrientation;\r\n @Prop() position: IgcContextMenuPosition;\r\n @Prop() target: HTMLElement;\r\n @Prop() items: IgcContextMenuItem[];\r\n\r\n @Event() menuClosed: EventEmitter;\r\n\r\n @Prop({ mutable: true }) activeIndex = 0;\r\n\r\n @Listen('focusout')\r\n emitMenuClosed() {\r\n this.menuClosed.emit();\r\n }\r\n\r\n connectedCallback() {\r\n document.defaultView.addEventListener('resize', this.handleDocumentResize, false);\r\n document.defaultView.addEventListener('mousedown', this.handleDocumentMouseDown, false);\r\n }\r\n\r\n disconnectedCallback() {\r\n document.defaultView.removeEventListener('resize', this.handleDocumentResize, false);\r\n document.defaultView.removeEventListener('mousedown', this.handleDocumentMouseDown, false);\r\n }\r\n\r\n handleDocumentResize = () => {\r\n this.menuClosed.emit();\r\n }\r\n\r\n handleDocumentMouseDown = (ev: MouseEvent) => {\r\n if (ev.composedPath().every(el => el !== this.elem)) {\r\n // mousedown outside of context menu\r\n this.menuClosed.emit();\r\n }\r\n }\r\n\r\n componentDidLoad() {\r\n const isTabsMoreButton = this.target.querySelector('slot[name=\"tabsMoreButton\"]') !== null;\r\n const menuItemsDivRect = this.menuItemsDiv.getBoundingClientRect();\r\n const hostRect = this.elem.getBoundingClientRect();\r\n const rootNodeShadowHost = (this.target.getRootNode() as ShadowRoot);\r\n const isFloating = this.isFloating(rootNodeShadowHost.host);\r\n const rootHostRect = rootNodeShadowHost.host.getBoundingClientRect();\r\n const isTabs = rootNodeShadowHost.host.tagName.toLowerCase() === 'igc-tab-header-component';\r\n const tabsContentHost = isTabs ? rootNodeShadowHost.host.parentElement.shadowRoot : rootNodeShadowHost;\r\n const tabRect = tabsContentHost.host.getBoundingClientRect();\r\n const tabsContentRect = tabsContentHost.querySelector('div[part~=\"tabs-content\"]').getBoundingClientRect();\r\n const isRTL = rootHostRect.right - menuItemsDivRect.right < 1;\r\n const shouldChangeOpenOrientation = tabRect.bottom + menuItemsDivRect.bottom >= window.innerHeight\r\n || tabRect.height + menuItemsDivRect.bottom >= window.innerHeight\r\n || (isTabsMoreButton && tabsContentRect.height- menuItemsDivRect.height > 0);\r\n const menuToBottom = shouldChangeOpenOrientation\r\n ? tabsContentRect.top + (tabsContentRect.height - menuItemsDivRect.bottom)\r\n : rootHostRect.top - menuItemsDivRect.top + rootHostRect.height;\r\n\r\n const menuToTop = tabsContentRect.top - menuItemsDivRect.top;\r\n const menuToStart = isRTL ? rootHostRect.right - menuItemsDivRect.width : rootHostRect.left;\r\n const menuToEnd = isRTL && !isFloating ? rootHostRect.left : rootHostRect.right - menuItemsDivRect.right;\r\n const menuToCenter = rootHostRect.left + (rootHostRect.width - menuItemsDivRect.width) / 2;\r\n\r\n let menuLeft = !isRTL ? menuToStart : menuToEnd;\r\n let menuTop = this.orientation === IgcContextMenuOrientation.bottom\r\n ? isTabs\r\n ? menuToBottom\r\n : menuToTop\r\n : menuToBottom;\r\n\r\n const menuBottom = menuTop + menuItemsDivRect.height;\r\n\r\n menuTop = menuTop >= 0 ? menuTop : menuToBottom;\r\n\r\n switch (this.position) {\r\n case 'start':\r\n menuLeft = menuToStart;\r\n break;\r\n case 'center':\r\n menuLeft = rootHostRect.width > menuItemsDivRect.width && menuToCenter;\r\n break;\r\n case 'stretch':\r\n this.menuItemsDiv.style.width = rootHostRect.width > menuItemsDivRect.width && `${rootHostRect.width}px`;\r\n break;\r\n case 'end':\r\n default:\r\n menuLeft = menuToEnd;\r\n }\r\n\r\n if (this.orientation === IgcContextMenuOrientation.bottom && menuBottom > hostRect.height) {\r\n menuTop = menuToTop;\r\n }\r\n\r\n this.menuItemsDiv.style.left = `${menuLeft}px`;\r\n this.menuItemsDiv.style.top = `${menuTop}px`;\r\n this.menuItemsDiv.style.visibility = 'visible';\r\n\r\n this.focusItemAndSetActiveIndex();\r\n }\r\n\r\n private focusItemAndSetActiveIndex() {\r\n const firstMenuItem = this.menuItemsDiv.querySelector('div[part=\"menu-item\"]');\r\n\r\n (firstMenuItem as HTMLElement)?.focus();\r\n }\r\n\r\n private isFloating(host: Element): boolean {\r\n while (host) {\r\n if (host.tagName && host.tagName.toLowerCase() === 'igc-floating-pane-component') {\r\n return true;\r\n }\r\n\r\n host = host.parentNode as Element;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private handleKeyboardEvents(item: IgcContextMenuItem, ev: KeyboardEvent) {\r\n const menuItemChildren = this.menuItemsDiv.querySelectorAll('div[part=\"menu-item\"]');\r\n\r\n if (ev.key === 'ArrowDown') {\r\n if (this.activeIndex < menuItemChildren.length - 1) {\r\n this.activeIndex++;\r\n (menuItemChildren[this.activeIndex] as HTMLElement).focus();\r\n }\r\n } else if (ev.key === 'ArrowUp') {\r\n if (this.activeIndex > 0) {\r\n this.activeIndex--;\r\n (menuItemChildren[this.activeIndex] as HTMLElement).focus();\r\n }\r\n } else if (ev.key === 'Enter' || ev.key === ' ') {\r\n item.clickHandler();\r\n this.emitMenuClosed();\r\n } else if (ev.key === 'Escape') {\r\n this.emitMenuClosed();\r\n }\r\n }\r\n\r\n private handleMenuItemClick(item: IgcContextMenuItem) {\r\n item.clickHandler();\r\n this.emitMenuClosed();\r\n }\r\n\r\n private renderItemIcon(item: IgcContextMenuItem) {\r\n return (\r\n \r\n {item.iconName === 'close' && this.renderCloseButton()}\r\n {item.iconName === 'unpin' && this.renderUnpinButton()}\r\n {item.iconName !== null && item.iconName !== 'close' && item.iconName !== 'unpin' &&\r\n \r\n }\r\n \r\n );\r\n }\r\n\r\n private renderCloseButton() {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n private renderUnpinButton() {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n this.menuItemsDiv = el as HTMLElement}\r\n onMouseDown={ev => {\r\n ev.preventDefault();\r\n }}\r\n >\r\n {this.items.map(item => {\r\n const parts = Utils.partNameMap({\r\n 'menu-item': true,\r\n disabled: item.disabled\r\n });\r\n\r\n return (\r\n \r\n \r\n {item.displayText}\r\n \r\n\r\n {this.renderItemIcon(item)}\r\n \r\n );\r\n })\r\n }\r\n \r\n \r\n );\r\n }\r\n}\r\n","/**\r\n * @hidden\r\n */\r\nexport class TwoWayMap {\r\n private map = new Map();\r\n private reversedMap = new Map();\r\n\r\n set(key: K, value: V) {\r\n this.map.set(key, value);\r\n this.reversedMap.set(value, key);\r\n }\r\n\r\n get(key: K): V | undefined {\r\n return this.map.get(key);\r\n }\r\n\r\n getByValue(value: V): K | undefined {\r\n return this.reversedMap.get(value);\r\n }\r\n\r\n delete(key: K) {\r\n const value = this.map.get(key);\r\n\r\n this.map.delete(key);\r\n this.reversedMap.delete(value);\r\n }\r\n\r\n has(key: K): boolean {\r\n return this.map.has(key);\r\n }\r\n\r\n hasValue(value: V): boolean {\r\n return this.reversedMap.has(value);\r\n }\r\n}\r\n","import { Utils } from '../../utils/utils';\r\nimport { IgcDragMoveEventArguments, IgcDragResizeEventArguments } from '../drag-drop/drag.service';\r\n\r\nimport {\r\n IGC_DEFAULT_PANE_SIZE, IGC_DEFAULT_UNPIN_PANE_SIZE, IGC_DRAG_FLYOUT_THRESHOLD, IgcContextMenuItem, IgcDockManagerComponentBase,\r\n IgcPinBehavior, IgcTabRectsInfo\r\n} from './dockmanager.interfaces';\r\nimport {\r\n IgcContentPane, IgcDockManagerPane, IgcDockManagerPaneType, IgcDockManagerPoint, IgcDockingIndicator, IgcDockingIndicatorPosition,\r\n IgcDocumentHost, IgcFloatPaneAction, IgcFloatingPaneResizeEventArgs, IgcFloatingPaneResizeMoveEventArgs, IgcMoveTabAction, IgcPaneCloseEventArgs, IgcPaneDragActionType,\r\n IgcPanePinnedEventArgs, IgcResizerLocation, IgcSplitPane, IgcSplitPaneOrientation, IgcTabGroupPane, IgcUnpinnedLocation\r\n} from './dockmanager.public-interfaces';\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class IgcDockManagerService {\r\n private paneParentMap: Map;\r\n private initialFloatingPaneLocation: IgcDockManagerPoint;\r\n private initialFloatingPaneWidth: number;\r\n private initialFloatingPaneHeight: number;\r\n private initialTabHeaderClickOffset: IgcDockManagerPoint;\r\n private initialDragClientPoint: IgcDockManagerPoint;\r\n private draggedPanes: IgcContentPane[];\r\n private draggedTab: IgcContentPane;\r\n private shiftLeftThreshold: number;\r\n private shiftRightThreshold: number;\r\n private documentsCache: IgcContentPane[];\r\n private contentPanesCache: IgcContentPane[];\r\n\r\n visibleDocuments: IgcContentPane[];\r\n visibleContentPanes: IgcContentPane[];\r\n documentHosts: IgcDocumentHost[];\r\n clientContentPanesMap: Map;\r\n dropTargetParentRect: DOMRect;\r\n dockManagerRect: DOMRect;\r\n dockingIndicator: IgcDockingIndicator;\r\n forceDragPane: IgcSplitPane;\r\n forceDragTabHeader: IgcContentPane;\r\n unpinnedLocationMap = new Map();\r\n keyboardDockPane: IgcContentPane = null;\r\n proximityDockPosition: IgcDockingIndicatorPosition;\r\n\r\n constructor(public dockManager: IgcDockManagerComponentBase) {\r\n\r\n }\r\n\r\n getContent(contentId: string): IgcDockManagerPane {\r\n return this.clientContentPanesMap.get(contentId);\r\n }\r\n\r\n private generateUuid(): string {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\r\n const r = Math.random() * 16 | 0;\r\n const v = c === 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n }\r\n\r\n private populatePaneParents(splitPane: IgcSplitPane, isRoot: boolean, isInDocHost: boolean) {\r\n if (!splitPane) {\r\n return;\r\n }\r\n\r\n if (!splitPane.id) {\r\n splitPane.id = this.generateUuid();\r\n }\r\n\r\n for (const pane of splitPane.panes) {\r\n this.paneParentMap.set(pane, splitPane);\r\n\r\n if (!pane.id) {\r\n pane.id = this.generateUuid();\r\n }\r\n\r\n if (pane.type === IgcDockManagerPaneType.contentPane && !pane.hidden) {\r\n this.clientContentPanesMap.set(pane.contentId, pane);\r\n if (isInDocHost) {\r\n this.visibleDocuments.push(pane);\r\n } else {\r\n this.visibleContentPanes.push(pane);\r\n }\r\n } else if (pane.type === IgcDockManagerPaneType.splitPane) {\r\n this.populatePaneParents(pane, isRoot, isInDocHost);\r\n } else if (pane.type === IgcDockManagerPaneType.tabGroupPane) {\r\n for (const cp of pane.panes) {\r\n if (!cp.id) {\r\n cp.id = this.generateUuid();\r\n }\r\n this.paneParentMap.set(cp, pane);\r\n\r\n if (!cp.hidden) {\r\n this.clientContentPanesMap.set(cp.contentId, cp);\r\n if (isInDocHost) {\r\n this.visibleDocuments.push(cp);\r\n } else {\r\n this.visibleContentPanes.push(cp);\r\n }\r\n }\r\n }\r\n } else if (pane.type === IgcDockManagerPaneType.documentHost) {\r\n if (isRoot) {\r\n this.documentHosts.push(pane);\r\n }\r\n this.paneParentMap.set(pane.rootPane, pane);\r\n this.populatePaneParents(pane.rootPane, isRoot, true);\r\n }\r\n }\r\n }\r\n\r\n private populatePinLocations(splitPane: IgcSplitPane) {\r\n if (!splitPane) {\r\n return;\r\n }\r\n\r\n for (const pane of splitPane.panes) {\r\n if (pane.type === IgcDockManagerPaneType.splitPane) {\r\n this.populatePinLocations(pane);\r\n } else if (pane.type === IgcDockManagerPaneType.tabGroupPane) {\r\n for (const cp of pane.panes) {\r\n this.addContentPanePinLocation(cp);\r\n this.paneParentMap.set(cp, pane);\r\n }\r\n } else if (pane.type === IgcDockManagerPaneType.contentPane) {\r\n this.addContentPanePinLocation(pane);\r\n }\r\n }\r\n }\r\n\r\n private resolvePaneUnpinLocation(pane: IgcContentPane): IgcUnpinnedLocation {\r\n let unpinnedLocation: IgcUnpinnedLocation;\r\n\r\n if (pane.unpinnedLocation) {\r\n unpinnedLocation = pane.unpinnedLocation;\r\n } else {\r\n const documentHost = this.findClosestDocumentHost(pane);\r\n // TODO Implement an auto-detect algorithm for unpinned location when there is no document host\r\n unpinnedLocation = documentHost ? this.findPaneUnpinLocation(pane, documentHost) : IgcUnpinnedLocation.left;\r\n }\r\n\r\n return unpinnedLocation;\r\n }\r\n\r\n private addContentPanePinLocation(pane: IgcContentPane) {\r\n if (pane.isPinned === false) {\r\n const unpinnedLocation = this.resolvePaneUnpinLocation(pane);\r\n this.unpinnedLocationMap.set(pane, unpinnedLocation);\r\n }\r\n }\r\n\r\n private findClosestDocumentHost(pane: IgcContentPane): IgcDocumentHost {\r\n const panePath = this.getPanePath(pane);\r\n let maxCommonParents = -1;\r\n let closestDocHost: IgcDocumentHost;\r\n\r\n for (const docHost of this.documentHosts) {\r\n const docHostPath = this.getPanePath(docHost);\r\n let i: number;\r\n\r\n for (i = 0; i < panePath.length; i++) {\r\n const paneParent = panePath[i];\r\n const docHostParent = docHostPath[i];\r\n\r\n if (paneParent !== docHostParent) {\r\n break;\r\n }\r\n }\r\n\r\n if (i > maxCommonParents) {\r\n maxCommonParents = i;\r\n closestDocHost = docHost;\r\n }\r\n }\r\n\r\n return closestDocHost;\r\n }\r\n\r\n private findPaneUnpinLocation(pane: IgcContentPane, docHost: IgcDocumentHost): IgcUnpinnedLocation {\r\n const panePath = this.getPanePath(pane);\r\n const docHostPath = this.getPanePath(docHost);\r\n let commonParentIndex = -1;\r\n\r\n for (let i = 0; i < panePath.length; i++) {\r\n const paneParent = panePath[i];\r\n const docHostParent = docHostPath[i];\r\n\r\n if (paneParent === docHostParent) {\r\n commonParentIndex = i;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n if (commonParentIndex >= 0) {\r\n const commonParent = panePath[commonParentIndex] as IgcSplitPane;\r\n const paneIndex = commonParent.panes.indexOf(panePath[commonParentIndex + 1]);\r\n const docHostIndex = commonParent.panes.indexOf(docHostPath[commonParentIndex + 1]);\r\n\r\n return commonParent.orientation === IgcSplitPaneOrientation.horizontal ?\r\n paneIndex < docHostIndex ? IgcUnpinnedLocation.left : IgcUnpinnedLocation.right :\r\n paneIndex < docHostIndex ? IgcUnpinnedLocation.top : IgcUnpinnedLocation.bottom;\r\n }\r\n\r\n return IgcUnpinnedLocation.left;\r\n }\r\n\r\n removePane(pane: IgcDockManagerPane) {\r\n if (pane === this.dockManager.maximizedPane) {\r\n this.dockManager.maximizedPane = null;\r\n }\r\n\r\n const parent = this.paneParentMap.get(pane);\r\n\r\n if (!parent) {\r\n if (this.dockManager.layout.floatingPanes) {\r\n const floatingIndex = this.dockManager.layout.floatingPanes.indexOf(pane as IgcSplitPane);\r\n if (floatingIndex > -1) {\r\n this.dockManager.layout.floatingPanes.splice(floatingIndex, 1);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (parent.type === IgcDockManagerPaneType.splitPane ||\r\n parent.type === IgcDockManagerPaneType.tabGroupPane) {\r\n const index = parent.panes.indexOf(pane as IgcContentPane);\r\n parent.panes.splice(index, 1);\r\n\r\n if (parent.panes.length === 0) {\r\n if (parent.allowEmpty) {\r\n const rootParent = this.getRootParent(pane);\r\n\r\n if (this.isFloatingPane(rootParent)) {\r\n this.removeFloatingPaneIfEmpty(rootParent);\r\n }\r\n } else {\r\n this.removePane(parent);\r\n }\r\n } else if (parent.type === IgcDockManagerPaneType.splitPane) {\r\n const rootParent = this.getRootParent(parent);\r\n if (this.isFloatingPane(rootParent)) {\r\n this.removeFloatingPaneIfEmpty(parent);\r\n }\r\n }\r\n } else if (parent.type === IgcDockManagerPaneType.documentHost) {\r\n parent.rootPane = null;\r\n this.removePane(parent);\r\n }\r\n }\r\n\r\n private removeFloatingPaneIfEmpty(pane: IgcSplitPane) {\r\n const childPanes = this.getChildContentPanes(pane);\r\n\r\n if (childPanes.length === 0) {\r\n this.removePane(pane);\r\n }\r\n }\r\n\r\n isFloatingPane(pane: IgcSplitPane) {\r\n if (!this.dockManager.layout.floatingPanes) {\r\n return false;\r\n }\r\n return this.dockManager.layout.floatingPanes.indexOf(pane) > -1;\r\n }\r\n\r\n private addFloatingPane(content: IgcDockManagerPane, location: IgcDockManagerPoint, width: number, height: number) {\r\n const floatingPane: IgcSplitPane = {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n panes: [content]\r\n };\r\n\r\n floatingPane.floatingLocation = location;\r\n floatingPane.floatingWidth = width;\r\n floatingPane.floatingHeight = height;\r\n\r\n if (!this.dockManager.layout.floatingPanes) {\r\n this.dockManager.layout.floatingPanes = [];\r\n }\r\n this.dockManager.layout.floatingPanes.push(floatingPane);\r\n this.dockManager.draggedPane = floatingPane;\r\n this.initialFloatingPaneLocation = floatingPane.floatingLocation;\r\n this.forceDragPane = floatingPane;\r\n }\r\n\r\n getChildContentPanes(pane: IgcSplitPane | IgcTabGroupPane): IgcContentPane[] {\r\n const panes: IgcContentPane[] = [];\r\n this.getChildContentPanesRecursive(pane, panes);\r\n\r\n return panes;\r\n }\r\n\r\n private getChildContentPanesRecursive(pane: IgcSplitPane | IgcTabGroupPane, children: IgcContentPane[]) {\r\n for (const child of pane.panes) {\r\n if (child.type === IgcDockManagerPaneType.contentPane) {\r\n children.push(child);\r\n } else if (child.type === IgcDockManagerPaneType.tabGroupPane ||\r\n child.type === IgcDockManagerPaneType.splitPane) {\r\n this.getChildContentPanesRecursive(child, children);\r\n } else if (child.type === IgcDockManagerPaneType.documentHost) {\r\n this.getChildContentPanesRecursive(child.rootPane, children);\r\n }\r\n }\r\n }\r\n\r\n getChildDocHostRecursive(pane: IgcSplitPane): IgcDocumentHost {\r\n for (const child of pane.panes) {\r\n if (child.type === IgcDockManagerPaneType.documentHost) {\r\n return child;\r\n } else if (child.type === IgcDockManagerPaneType.splitPane) {\r\n const result = this.getChildDocHostRecursive(child);\r\n if (result) {\r\n return result;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n getVisibleContentPanes(parent: IgcTabGroupPane) {\r\n return parent.panes.filter(t => this.isContentPaneVisible(t));\r\n }\r\n\r\n private getPaneToDock(draggedPane: IgcDockManagerPane) {\r\n return draggedPane.type === IgcDockManagerPaneType.contentPane ? draggedPane :\r\n draggedPane.type === IgcDockManagerPaneType.tabGroupPane || draggedPane.type === IgcDockManagerPaneType.splitPane ?\r\n draggedPane.panes.length === 1 ?\r\n draggedPane.panes[0] :\r\n draggedPane :\r\n draggedPane;\r\n }\r\n\r\n private removeDocumentHost(pane: IgcSplitPane) {\r\n const docHost = this.getChildDocHostRecursive(pane);\r\n if (docHost) {\r\n const parent = this.getParent(docHost) as IgcSplitPane;\r\n const index = parent.panes.indexOf(docHost);\r\n\r\n parent.panes[index] = docHost.rootPane.panes.length === 1 ?\r\n docHost.rootPane.panes[0] :\r\n docHost.rootPane;\r\n }\r\n }\r\n\r\n private dockToCenter(targetPane: IgcDockManagerPane, draggedPane: IgcSplitPane | IgcTabGroupPane | IgcContentPane) {\r\n let targetContainer: IgcTabGroupPane | IgcSplitPane;\r\n\r\n if (targetPane.type === IgcDockManagerPaneType.tabGroupPane) {\r\n targetContainer = targetPane;\r\n } else if (targetPane.type === IgcDockManagerPaneType.contentPane) {\r\n targetContainer = {\r\n type: IgcDockManagerPaneType.tabGroupPane,\r\n size: targetPane.size,\r\n panes: [targetPane]\r\n };\r\n const targetParent = this.paneParentMap.get(targetPane) as IgcSplitPane;\r\n const index = targetParent.panes.indexOf(targetPane);\r\n targetParent.panes[index] = targetContainer;\r\n } else if (targetPane.type === IgcDockManagerPaneType.splitPane) {\r\n targetContainer = targetPane;\r\n } else if (targetPane.type === IgcDockManagerPaneType.documentHost) {\r\n targetContainer = targetPane.rootPane;\r\n }\r\n\r\n if (targetContainer.type === IgcDockManagerPaneType.tabGroupPane) {\r\n const panesToDock = (draggedPane.type === IgcDockManagerPaneType.contentPane) ?\r\n [draggedPane] :\r\n this.getChildContentPanes(draggedPane);\r\n targetContainer.panes.push(...panesToDock);\r\n } else if (targetContainer.type === IgcDockManagerPaneType.splitPane) {\r\n let paneToDock = draggedPane;\r\n\r\n if (draggedPane?.type === IgcDockManagerPaneType.splitPane && this.dockManager.documentOnlyDrag) {\r\n this.removeDocumentHost(draggedPane);\r\n const childPanes = this.getChildContentPanes(draggedPane);\r\n paneToDock = childPanes.length === 1 ? childPanes[0] : paneToDock;\r\n }\r\n\r\n targetContainer.panes.push(paneToDock);\r\n }\r\n }\r\n\r\n private dockToEdge(targetPane: IgcDockManagerPane, position: IgcDockingIndicatorPosition) {\r\n const targetParent = this.getParent(targetPane) as IgcSplitPane;\r\n if (!targetParent) {\r\n return this.dockToCenter(targetPane, this.dockManager.draggedPane);\r\n }\r\n\r\n const paneIndex = targetParent.panes.indexOf(targetPane);\r\n const isIndicatorVertical = Utils.isDockingIndicatorVertical(position);\r\n const isSplitPaneVertical = Utils.isSplitPaneVertical(targetParent);\r\n const isRTL = this.dockManager.proximityDock\r\n ? this.dockManager.direction === 'rtl'\r\n : this.dockingIndicator && this.dockingIndicator.direction === 'rtl';\r\n let draggedPane: IgcDockManagerPane = this.dockManager.draggedPane;\r\n\r\n if (draggedPane?.type === IgcDockManagerPaneType.splitPane &&\r\n this.dockManager.documentOnlyDrag &&\r\n !this.dockManager.dropTargetPaneInfo.floatingPaneWithoutDocHost) {\r\n this.removeDocumentHost(draggedPane);\r\n } else if (draggedPane?.type === IgcDockManagerPaneType.contentPane &&\r\n this.dockManager.documentOnlyDrag &&\r\n this.dockManager.dropTargetPaneInfo.floatingPaneWithoutDocHost) {\r\n draggedPane = {\r\n type: IgcDockManagerPaneType.documentHost,\r\n rootPane: {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n panes: [draggedPane]\r\n }\r\n };\r\n }\r\n\r\n const paneToDock = draggedPane ? this.getPaneToDock(draggedPane) : this.dockManager.activePane;\r\n\r\n if ((isIndicatorVertical && isSplitPaneVertical) || (!isIndicatorVertical && !isSplitPaneVertical)) {\r\n const insertIndex = Utils.isDockingIndicatorBefore(position) && !isRTL ||\r\n Utils.isDockingIndicatorBeforeRTL(position) && isRTL ?\r\n paneIndex :\r\n paneIndex + 1;\r\n targetParent.panes.splice(insertIndex, 0, paneToDock);\r\n } else {\r\n const newSplitPane: IgcSplitPane = {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: isSplitPaneVertical ? IgcSplitPaneOrientation.horizontal : IgcSplitPaneOrientation.vertical,\r\n panes: Utils.isDockingIndicatorBefore(position) && !isRTL ||\r\n Utils.isDockingIndicatorBeforeRTL(position) && isRTL ?\r\n [paneToDock, targetPane] :\r\n [targetPane, paneToDock],\r\n size: targetPane.size\r\n };\r\n\r\n targetPane.size = undefined;\r\n paneToDock.size = undefined;\r\n targetParent.panes[paneIndex] = newSplitPane;\r\n }\r\n }\r\n\r\n private updateLayout() {\r\n this.dockManager.layout = { ...this.dockManager.layout };\r\n }\r\n\r\n private hasMaximizedProp(pane: IgcDockManagerPane): pane is IgcContentPane | IgcSplitPane | IgcTabGroupPane {\r\n return 'isMaximized' in pane;\r\n }\r\n\r\n getLastMaximizedPane(): IgcContentPane | IgcSplitPane | IgcTabGroupPane {\r\n const keys = Array.from(this.paneParentMap.keys());\r\n const maximizedPane = keys.filter(this.hasMaximizedProp).filter(i => i.isMaximized)[0];\r\n return maximizedPane;\r\n }\r\n\r\n processLayout() {\r\n this.paneParentMap = new Map();\r\n this.unpinnedLocationMap = new Map();\r\n this.clientContentPanesMap = new Map();\r\n this.documentHosts = [];\r\n this.visibleContentPanes = [];\r\n this.visibleDocuments = [];\r\n\r\n const layout = this.dockManager.layout;\r\n\r\n if (layout) {\r\n this.populatePaneParents(layout.rootPane, true, false);\r\n if (layout.floatingPanes) {\r\n const indicesToDelete = new Map(this.dockManager.floatingPaneZIndicesMap);\r\n\r\n for (let i = 0; i < layout.floatingPanes.length; i++) {\r\n const pane = layout.floatingPanes[i];\r\n this.populatePaneParents(pane, false, false);\r\n\r\n if (this.dockManager.floatingPaneZIndicesMap.has(pane)) {\r\n indicesToDelete.delete(pane);\r\n } else {\r\n this.dockManager.floatingPaneZIndicesMap.set(pane, i);\r\n }\r\n }\r\n\r\n for (const key of indicesToDelete.keys()) {\r\n this.dockManager.floatingPaneZIndicesMap.delete(key);\r\n }\r\n }\r\n this.populatePinLocations(layout.rootPane);\r\n\r\n if (this.dockManager.flyoutPane && !this.unpinnedLocationMap.has(this.dockManager.flyoutPane)) {\r\n this.dockManager.flyoutPane = null;\r\n }\r\n }\r\n }\r\n\r\n getParent(pane: IgcDockManagerPane): IgcDockManagerPane {\r\n return this.paneParentMap.get(pane);\r\n }\r\n\r\n getRootParent(pane: IgcDockManagerPane): IgcSplitPane {\r\n return this.getPanePath(pane)[0] as IgcSplitPane;\r\n }\r\n\r\n getPanePath(pane: IgcDockManagerPane): IgcDockManagerPane[] {\r\n const path: IgcDockManagerPane[] = [];\r\n let currentPane = pane;\r\n\r\n while (currentPane) {\r\n path.splice(0, 0, currentPane);\r\n currentPane = this.paneParentMap.get(currentPane);\r\n }\r\n\r\n return path;\r\n }\r\n\r\n getDocHostParent(pane: IgcDockManagerPane): IgcDocumentHost {\r\n let parent = pane;\r\n\r\n do {\r\n parent = this.paneParentMap.get(parent);\r\n } while (parent && parent.type !== IgcDockManagerPaneType.documentHost);\r\n\r\n return parent as IgcDocumentHost;\r\n }\r\n\r\n resizeFlyoutPane(delta: number) {\r\n const pane = this.dockManager.flyoutPane;\r\n const location = this.unpinnedLocationMap.get(pane);\r\n const paneSize = pane.unpinnedSize ? pane.unpinnedSize : IGC_DEFAULT_UNPIN_PANE_SIZE;\r\n\r\n const newSize = location === IgcUnpinnedLocation.left || location === IgcUnpinnedLocation.top ?\r\n paneSize + delta :\r\n paneSize - delta;\r\n pane.unpinnedSize = newSize;\r\n\r\n this.updateLayout();\r\n }\r\n\r\n resizePane(pane: IgcDockManagerPane, deltaPercentage: number) {\r\n const parentPane = this.getParent(pane) as IgcSplitPane;\r\n const childPanes = this.getSplitPaneVisibleChildren(parentPane);\r\n const paneIndex = childPanes.indexOf(pane);\r\n\r\n const paneSizes = childPanes.map(p => p.size || p.size === 0 ? p.size : IGC_DEFAULT_PANE_SIZE);\r\n const sizeSum = paneSizes.reduce((p, c) => c + p, 0);\r\n const calcDelta = deltaPercentage * sizeSum;\r\n\r\n childPanes[paneIndex - 1].size = paneSizes[paneIndex - 1] + calcDelta;\r\n childPanes[paneIndex].size = paneSizes[paneIndex] - calcDelta;\r\n\r\n this.updateLayout();\r\n }\r\n\r\n togglePin(pane: IgcContentPane, pinBehavior = IgcPinBehavior.allPanes) {\r\n const newValue = !this.getActualIsPinned(pane);\r\n const parent = this.paneParentMap.get(pane);\r\n const panes = parent.type === IgcDockManagerPaneType.tabGroupPane && pinBehavior === IgcPinBehavior.allPanes ?\r\n parent.panes.filter(p => p.allowPinning !== false) :\r\n [pane];\r\n const location = this.resolvePaneUnpinLocation(pane);\r\n\r\n const args: IgcPanePinnedEventArgs = {\r\n sourcePane: pane,\r\n panes,\r\n newValue,\r\n location\r\n };\r\n const event = this.dockManager.panePinnedToggle.emit(args);\r\n\r\n if (!event.defaultPrevented) {\r\n for (const cp of args.panes) {\r\n cp.isPinned = newValue;\r\n }\r\n\r\n if (this.dockManager.maximizedPane) {\r\n const targetPanes: (IgcContentPane | IgcTabGroupPane)[] = parent && parent.type === IgcDockManagerPaneType.tabGroupPane && this.dockManager.maximizedPane === parent\r\n ? [parent]\r\n : args.panes;\r\n\r\n this.dockManager.maximizedPane = null;\r\n\r\n for (const cp of targetPanes.filter(this.hasMaximizedProp)) {\r\n cp.isMaximized = false;\r\n }\r\n\r\n newValue ?\r\n this.dockManager.flyoutPane = null :\r\n this.flyoutPane(pane);\r\n } else if (newValue) {\r\n this.dockManager.flyoutPane = null;\r\n }\r\n\r\n this.updateLayout();\r\n }\r\n }\r\n\r\n closePane(pane: IgcContentPane) {\r\n let paneToRemove: IgcDockManagerPane = pane;\r\n\r\n if (pane.type === IgcDockManagerPaneType.contentPane && pane !== this.dockManager.flyoutPane) {\r\n const parent = this.paneParentMap.get(pane);\r\n\r\n if (parent.type === IgcDockManagerPaneType.tabGroupPane) {\r\n paneToRemove = parent;\r\n }\r\n }\r\n\r\n const paneRemoved = paneToRemove.type === IgcDockManagerPaneType.tabGroupPane ?\r\n this.removeAllowedPanes(pane, paneToRemove) :\r\n this.emitPaneClose(pane, [paneToRemove]);\r\n\r\n if ((paneRemoved || pane.hidden) && pane === this.dockManager.flyoutPane) {\r\n this.dockManager.flyoutPane = null;\r\n }\r\n\r\n this.updateLayout();\r\n }\r\n\r\n closeFloatingPane(pane: IgcSplitPane) {\r\n this.removeAllowedPanes(pane, pane);\r\n this.updateLayout();\r\n }\r\n\r\n private emitPaneClose(sourcePane: IgcDockManagerPane, panes: IgcContentPane[]): boolean {\r\n let paneRemoved = false;\r\n const args: IgcPaneCloseEventArgs = { sourcePane, panes };\r\n const event = this.dockManager.paneClose.emit(args);\r\n\r\n if (!event.defaultPrevented) {\r\n for (const pane of args.panes) {\r\n this.removePane(pane);\r\n paneRemoved = true;\r\n }\r\n }\r\n\r\n return paneRemoved;\r\n }\r\n\r\n private removeAllowedPanes(sourcePane: IgcDockManagerPane, pane: IgcSplitPane | IgcTabGroupPane): boolean {\r\n let paneRemoved = false;\r\n\r\n const panes = this.getChildContentPanes(pane)\r\n .filter(p => this.getActualAllowClose(p))\r\n .filter(p => pane.type === IgcDockManagerPaneType.tabGroupPane && sourcePane.type === IgcDockManagerPaneType.contentPane\r\n ? p.isPinned !== false\r\n : true);\r\n\r\n paneRemoved = this.emitPaneClose(sourcePane, panes);\r\n\r\n return paneRemoved;\r\n }\r\n\r\n flyoutPane(pane: IgcContentPane) {\r\n this.dockManager.flyoutPane = this.dockManager.flyoutPane === pane ? null : pane;\r\n }\r\n\r\n maximizePane(pane: any) {\r\n const parent = this.getParent(pane);\r\n const targetPane = parent && parent.type === IgcDockManagerPaneType.tabGroupPane && pane !== this.dockManager.flyoutPane ? parent : pane;\r\n this.dockManager.maximizedPane = this.dockManager.maximizedPane === targetPane ? null : targetPane;\r\n\r\n if (this.dockManager.maximizedPane) {\r\n targetPane.isMaximized = true;\r\n } else {\r\n targetPane.isMaximized = false;\r\n }\r\n }\r\n\r\n moveFloatingPane(pane: IgcSplitPane, location: IgcDockManagerPoint) {\r\n pane.floatingLocation = location;\r\n this.updateLayout();\r\n }\r\n\r\n resizeFloatingPaneStart(pane: IgcSplitPane, resizerLocation: IgcResizerLocation): boolean {\r\n const resizeArgs: IgcFloatingPaneResizeEventArgs = {\r\n sourcePane: pane,\r\n resizerLocation\r\n };\r\n\r\n const resizeStartEvent = this.dockManager.floatingPaneResizeStart.emit(resizeArgs);\r\n if (resizeStartEvent.defaultPrevented) {\r\n return false;\r\n }\r\n\r\n this.initialFloatingPaneLocation = pane.floatingLocation ?? { x: 0, y: 0 };\r\n this.initialFloatingPaneWidth = pane.floatingWidth ?? IGC_DEFAULT_PANE_SIZE;\r\n this.initialFloatingPaneHeight = pane.floatingHeight ?? IGC_DEFAULT_PANE_SIZE;\r\n\r\n return true;\r\n }\r\n\r\n resizeFloatingPane(pane: IgcSplitPane, args: IgcDragResizeEventArguments) {\r\n const currX = pane.floatingLocation ? pane.floatingLocation.x : 0;\r\n const currY = pane.floatingLocation ? pane.floatingLocation.y : 0;\r\n const currW = pane.floatingWidth ? pane.floatingWidth : IGC_DEFAULT_PANE_SIZE;\r\n const currH = pane.floatingHeight ? pane.floatingHeight : IGC_DEFAULT_PANE_SIZE;\r\n const minW = IGC_DEFAULT_PANE_SIZE;\r\n const minH = IGC_DEFAULT_PANE_SIZE;\r\n const initialWidth = this.initialFloatingPaneWidth;\r\n const initialHeight = this.initialFloatingPaneHeight;\r\n const initialLocation = this.initialFloatingPaneLocation;\r\n\r\n let totalOffsetY = args.dragMoveArgs.totalOffsetY;\r\n let totalOffsetX = args.dragMoveArgs.totalOffsetX;\r\n let newX = currX;\r\n let newY = currY;\r\n let newWidth = currW;\r\n let newHeight = currH;\r\n const maxHeight = document.documentElement.clientHeight;\r\n const maxWidth = document.documentElement.clientWidth;\r\n\r\n switch (args.resizerLocation) {\r\n case (IgcResizerLocation.top):\r\n case (IgcResizerLocation.topLeft):\r\n case (IgcResizerLocation.topRight):\r\n newHeight = initialHeight - totalOffsetY;\r\n if (newHeight < minH) {\r\n totalOffsetY = initialHeight - minH;\r\n newHeight = minH;\r\n }\r\n newY = initialLocation.y + totalOffsetY;\r\n if (newY < 0) {\r\n newHeight += newY;\r\n newY = 0;\r\n } else if (newY >= maxHeight - 1) {\r\n newY = maxHeight - 1;\r\n }\r\n break;\r\n case (IgcResizerLocation.bottom):\r\n case (IgcResizerLocation.bottomLeft):\r\n case (IgcResizerLocation.bottomRight):\r\n newHeight = initialHeight + totalOffsetY;\r\n if (newHeight < minH) {\r\n newHeight = minH;\r\n }\r\n if (newY + newHeight > maxHeight) {\r\n newHeight = maxHeight - newY;\r\n }\r\n break;\r\n }\r\n\r\n switch (args.resizerLocation) {\r\n case (IgcResizerLocation.left):\r\n case (IgcResizerLocation.topLeft):\r\n case (IgcResizerLocation.bottomLeft):\r\n newWidth = initialWidth - totalOffsetX;\r\n if (newWidth < minW) {\r\n totalOffsetX = initialWidth - minW;\r\n newWidth = minW;\r\n }\r\n newX = initialLocation.x + totalOffsetX;\r\n if (newX < 0) {\r\n newWidth += newX;\r\n newX = 0;\r\n } else if (newX >= maxWidth) {\r\n newX = maxWidth;\r\n }\r\n break;\r\n case (IgcResizerLocation.right):\r\n case (IgcResizerLocation.topRight):\r\n case (IgcResizerLocation.bottomRight):\r\n newWidth = initialWidth + totalOffsetX;\r\n if (newWidth < minW) {\r\n newWidth = minW;\r\n }\r\n if (newX + newWidth > maxWidth) {\r\n newWidth = maxWidth - newX;\r\n }\r\n break;\r\n }\r\n\r\n if (currX === newX && currY === newY && currW === newWidth && currH === newHeight) {\r\n return;\r\n }\r\n\r\n const resizingArgs: IgcFloatingPaneResizeMoveEventArgs = {\r\n sourcePane: pane,\r\n oldWidth: currW,\r\n newWidth,\r\n oldHeight: currH,\r\n newHeight,\r\n oldLocation: { x: currX, y: currY },\r\n newLocation: { x: newX, y: newY },\r\n resizerLocation: args.resizerLocation\r\n };\r\n\r\n const resizingEvent = this.dockManager.floatingPaneResizeMove.emit(resizingArgs);\r\n if (resizingEvent.defaultPrevented) {\r\n args.dragMoveArgs.cancel = true;\r\n return;\r\n } else {\r\n pane.floatingLocation = resizingArgs.newLocation;\r\n pane.floatingWidth = resizingArgs.newWidth;\r\n pane.floatingHeight = resizingArgs.newHeight;\r\n this.updateLayout();\r\n }\r\n }\r\n\r\n resizeFloatingPaneEnd(pane: IgcSplitPane, resizerLocation: IgcResizerLocation) {\r\n this.dockManager.floatingPaneResizeEnd.emit({\r\n sourcePane: pane,\r\n resizerLocation });\r\n\r\n this.dockManager.layoutChange.emit();\r\n }\r\n\r\n floatPane(pane: IgcContentPane, x: number, y: number, width: number, height: number) {\r\n let panesToRemove: IgcDockManagerPane[] = [pane];\r\n let paneToAdd: IgcDockManagerPane = pane;\r\n const parent = this.paneParentMap.get(pane);\r\n\r\n if (pane !== this.dockManager.flyoutPane && parent.type === IgcDockManagerPaneType.tabGroupPane) {\r\n if (parent.allowEmpty) {\r\n const panes = [...parent.panes];\r\n panesToRemove = panes;\r\n paneToAdd = parent.panes.length === 1 ?\r\n pane :\r\n {\r\n type: IgcDockManagerPaneType.tabGroupPane,\r\n panes,\r\n selectedIndex: parent.selectedIndex\r\n };\r\n } else {\r\n panesToRemove = [parent];\r\n paneToAdd = parent;\r\n }\r\n }\r\n\r\n panesToRemove.forEach(p => this.removePane(p));\r\n this.addFloatingPane(paneToAdd,\r\n { x, y },\r\n width,\r\n height);\r\n\r\n if (pane === this.dockManager.flyoutPane) {\r\n pane.isPinned = true;\r\n this.dockManager.flyoutPane = null;\r\n }\r\n\r\n this.updateLayout();\r\n }\r\n\r\n floatTab(pane: IgcContentPane, x: number, y: number, width: number, height: number) {\r\n this.removePane(pane);\r\n\r\n const isInDocHost = !!this.getDocHostParent(pane);\r\n let content: IgcDockManagerPane;\r\n\r\n if (isInDocHost && pane.documentOnly) {\r\n const docHost: IgcDocumentHost = {\r\n type: IgcDockManagerPaneType.documentHost,\r\n rootPane: {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n panes: [pane]\r\n }\r\n };\r\n\r\n content = docHost;\r\n } else {\r\n content = pane;\r\n }\r\n\r\n this.addFloatingPane(content, { x, y }, width, height);\r\n\r\n this.updateLayout();\r\n }\r\n\r\n hasFloatingPaneHeader(pane: IgcSplitPane): boolean {\r\n const panes = this.getSplitPaneVisibleChildren(pane);\r\n\r\n if (panes && panes.length) {\r\n if (panes.length > 1) {\r\n return true;\r\n }\r\n\r\n const childPane = panes[0];\r\n\r\n if (childPane.type === IgcDockManagerPaneType.splitPane) {\r\n return this.hasFloatingPaneHeader(childPane);\r\n } else if (childPane.type === IgcDockManagerPaneType.documentHost) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n rootDockPane(position: IgcDockingIndicatorPosition) {\r\n const layout = this.dockManager.layout;\r\n const rootPane = layout.rootPane;\r\n const paneToDock = this.dockManager.draggedPane ? this.getPaneToDock(this.dockManager.draggedPane) : this.dockManager.activePane;\r\n\r\n this.removePane(paneToDock);\r\n\r\n const isIndicatorVertical = position === IgcDockingIndicatorPosition.top || position === IgcDockingIndicatorPosition.bottom;\r\n const isSplitPaneVertical = Utils.isSplitPaneVertical(rootPane);\r\n const isRTL = this.dockingIndicator && this.dockingIndicator.direction === 'rtl';\r\n\r\n if ((isIndicatorVertical && isSplitPaneVertical) || (!isIndicatorVertical && !isSplitPaneVertical)) {\r\n const insertIndex = position === IgcDockingIndicatorPosition.left && !isRTL ||\r\n position === IgcDockingIndicatorPosition.right && isRTL ||\r\n position === IgcDockingIndicatorPosition.top ?\r\n 0 :\r\n rootPane.panes.length;\r\n rootPane.panes.splice(insertIndex, 0, paneToDock);\r\n } else {\r\n const newRootPane: IgcSplitPane = {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: isSplitPaneVertical ? IgcSplitPaneOrientation.horizontal : IgcSplitPaneOrientation.vertical,\r\n panes: position === IgcDockingIndicatorPosition.left && !isRTL ||\r\n position === IgcDockingIndicatorPosition.right && isRTL ||\r\n position === IgcDockingIndicatorPosition.top ?\r\n [paneToDock, rootPane] :\r\n [rootPane, paneToDock],\r\n };\r\n rootPane.size = undefined;\r\n paneToDock.size = undefined;\r\n\r\n layout.rootPane = newRootPane;\r\n }\r\n\r\n this.updateLayout();\r\n }\r\n\r\n dockPane(position: IgcDockingIndicatorPosition) {\r\n const draggedFloatingPane = this.dockManager.draggedPane ?? this.dockManager.activePane;\r\n const dropTargetPaneInfo = this.dockManager.dropTargetPaneInfo;\r\n\r\n this.removePane(draggedFloatingPane);\r\n\r\n const targetPane = this.dockManager.draggedPane ? dropTargetPaneInfo.pane : this.getParent(this.dockManager.activePane);\r\n\r\n switch (position) {\r\n case IgcDockingIndicatorPosition.center:\r\n this.dockToCenter(targetPane, draggedFloatingPane);\r\n break;\r\n case IgcDockingIndicatorPosition.left:\r\n case IgcDockingIndicatorPosition.top:\r\n case IgcDockingIndicatorPosition.right:\r\n case IgcDockingIndicatorPosition.bottom:\r\n this.dockToEdge(targetPane, position);\r\n break;\r\n case IgcDockingIndicatorPosition.outerLeft:\r\n case IgcDockingIndicatorPosition.outerTop:\r\n case IgcDockingIndicatorPosition.outerRight:\r\n case IgcDockingIndicatorPosition.outerBottom:\r\n const docHost = this.dockManager.dropTargetPaneInfo.docHost;\r\n this.dockToEdge(docHost, position);\r\n break;\r\n }\r\n\r\n this.updateLayout();\r\n }\r\n\r\n getActualIsPinned(pane: IgcContentPane): boolean {\r\n return pane.isPinned !== false;\r\n }\r\n\r\n getActualAllowClose(pane: IgcContentPane): boolean {\r\n return pane.allowClose !== false;\r\n }\r\n\r\n isContentPaneVisible(pane: IgcContentPane) {\r\n return pane.isPinned !== false && pane.hidden !== true;\r\n }\r\n\r\n getSplitPaneVisibleChildren(pane: IgcSplitPane): IgcDockManagerPane[] {\r\n return pane.panes.filter(p => {\r\n if (p.type === IgcDockManagerPaneType.contentPane) {\r\n return this.isContentPaneVisible(p);\r\n } else if (p.type === IgcDockManagerPaneType.splitPane) {\r\n return p.allowEmpty || this.getSplitPaneVisibleChildren(p).length;\r\n } else if (p.type === IgcDockManagerPaneType.tabGroupPane) {\r\n return p.allowEmpty || p.panes.some(cp => this.isContentPaneVisible(cp));\r\n } else if (p.type === IgcDockManagerPaneType.documentHost) {\r\n return p.rootPane.allowEmpty || this.getSplitPaneVisibleChildren(p.rootPane).length;\r\n }\r\n });\r\n }\r\n\r\n closeTabPane(pane: IgcContentPane) {\r\n this.emitPaneClose(pane, [pane]);\r\n this.updateLayout();\r\n }\r\n\r\n bringFloatingPaneOnTop(pane: IgcSplitPane) {\r\n const floatingPanes = this.dockManager.layout.floatingPanes;\r\n const floatingPaneZIndicesMap = this.dockManager.floatingPaneZIndicesMap;\r\n const oldZIndex = floatingPaneZIndicesMap.get(pane);\r\n\r\n for (const p of floatingPanes) {\r\n const zIndex = floatingPaneZIndicesMap.get(p);\r\n\r\n if (zIndex < oldZIndex) {\r\n continue;\r\n } else if (zIndex > oldZIndex) {\r\n floatingPaneZIndicesMap.set(p, zIndex - 1);\r\n } else {\r\n floatingPaneZIndicesMap.set(p, floatingPanes.length - 1);\r\n }\r\n }\r\n\r\n this.dockManager.floatingPaneZIndicesMap = new Map(floatingPaneZIndicesMap);\r\n }\r\n\r\n createContextMenuItems(pane: IgcContentPane): IgcContextMenuItem[] {\r\n const items: IgcContextMenuItem[] = [];\r\n\r\n if (this.getActualAllowClose(pane)) {\r\n items.push({ displayText: this.dockManager.resourceStrings.close, iconName: 'close', clickHandler: () => this.closeTabPane(pane) });\r\n }\r\n\r\n if (pane.allowPinning !== false) {\r\n items.push({ displayText: this.dockManager.resourceStrings.unpin, iconName: 'unpin', clickHandler: () => this.togglePin(pane, IgcPinBehavior.selectedPane) });\r\n }\r\n\r\n return items;\r\n }\r\n\r\n dragPaneStart(pane: IgcSplitPane | IgcContentPane, rect: DOMRect, clientX: number, clientY: number): boolean {\r\n if (this.dockManager.maximizedPane) {\r\n return false;\r\n }\r\n\r\n let panes: IgcContentPane[];\r\n let parent: IgcDockManagerPane;\r\n\r\n if (pane.type === IgcDockManagerPaneType.contentPane) {\r\n parent = this.getParent(pane);\r\n panes = parent.type === IgcDockManagerPaneType.tabGroupPane && pane !== this.dockManager.flyoutPane ?\r\n parent.panes :\r\n [pane];\r\n } else {\r\n if (this.dockManager.draggedPane === pane) {\r\n return true;\r\n }\r\n panes = this.getChildContentPanes(pane);\r\n }\r\n\r\n const disableDockingAndFloating = panes.some(p => p.allowDocking === false) && panes.some(p => p.allowFloating === false);\r\n\r\n if (pane.type === IgcDockManagerPaneType.contentPane && disableDockingAndFloating) {\r\n return false;\r\n }\r\n\r\n const dragStartEvent = this.dockManager.paneDragStart.emit({ sourcePane: pane, panes });\r\n\r\n if (dragStartEvent.defaultPrevented) {\r\n return false;\r\n }\r\n\r\n this.draggedPanes = panes;\r\n this.initialDragClientPoint = {\r\n x: clientX,\r\n y: clientY\r\n };\r\n\r\n if (pane.type === IgcDockManagerPaneType.splitPane) {\r\n this.dockManager.draggedPane = pane;\r\n this.initialFloatingPaneLocation = pane.floatingLocation ?? { x: 0, y: 0 };\r\n } else {\r\n if (this.draggedPanes.some(p => p.allowFloating === false)) {\r\n this.dockManager.draggedPane = panes.length > 1 ? parent as IgcTabGroupPane : pane;\r\n return true;\r\n }\r\n\r\n const action: IgcFloatPaneAction = {\r\n type: IgcPaneDragActionType.floatPane,\r\n location: { x: rect.x, y: rect.y },\r\n width: rect.width,\r\n height: rect.height\r\n };\r\n const dragOverEvent = this.dockManager.paneDragOver.emit({\r\n sourcePane: pane,\r\n panes,\r\n action,\r\n isValid: true\r\n });\r\n\r\n if (dragOverEvent.defaultPrevented) {\r\n return false;\r\n }\r\n\r\n if (!dragOverEvent.detail.isValid) {\r\n this.dockManager.draggedPane = panes.length > 1 ? parent as IgcTabGroupPane : pane;\r\n return true;\r\n }\r\n\r\n this.floatPane(pane,\r\n rect.x,\r\n rect.y,\r\n action.width,\r\n action.height);\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private pointInBoundaries(clientX: number, clientY: number, location: IgcDockManagerPoint, pane: IgcSplitPane): IgcDockManagerPoint {\r\n const minDragPosition = {\r\n x: this.dockManagerRect.x,\r\n y: this.dockManagerRect.y\r\n };\r\n const maxDragPosition = {\r\n x: this.dockManagerRect.right - pane.floatingWidth,\r\n y: this.dockManagerRect.bottom - pane.floatingHeight\r\n };\r\n\r\n if (this.initialFloatingPaneLocation.x + clientX - this.initialDragClientPoint.x <= this.dockManagerRect.x) {\r\n location.x = minDragPosition.x;\r\n } else if (this.initialFloatingPaneLocation.x + clientX + pane.floatingWidth - this.initialDragClientPoint.x >= this.dockManagerRect.right) {\r\n location.x = maxDragPosition.x;\r\n }\r\n\r\n if (this.initialFloatingPaneLocation.y + clientY - this.initialDragClientPoint.y <= this.dockManagerRect.y) {\r\n location.y = minDragPosition.y;\r\n } else if (this.initialFloatingPaneLocation.y + clientY + pane.floatingHeight - this.initialDragClientPoint.y >= this.dockManagerRect.bottom) {\r\n location.y = maxDragPosition.y;\r\n }\r\n\r\n return location;\r\n }\r\n\r\n dragPaneMove(clientX: number, clientY: number): boolean {\r\n const draggedPane = this.dockManager.draggedPane;\r\n\r\n if (draggedPane.type === IgcDockManagerPaneType.splitPane) {\r\n const oldLocation = draggedPane.floatingLocation ? draggedPane.floatingLocation : { x: 0, y: 0 };\r\n\r\n let newLocation: IgcDockManagerPoint;\r\n \r\n newLocation = {\r\n x: this.initialFloatingPaneLocation.x + clientX - this.initialDragClientPoint.x,\r\n y: this.initialFloatingPaneLocation.y + clientY - this.initialDragClientPoint.y,\r\n };\r\n \r\n if (this.dockManager.containedInBoundaries) {\r\n newLocation = this.pointInBoundaries(clientX, clientY, newLocation, draggedPane);\r\n }\r\n\r\n const dragOverEvent = this.dockManager.paneDragOver.emit({\r\n sourcePane: draggedPane,\r\n panes: this.draggedPanes,\r\n action: {\r\n type: IgcPaneDragActionType.moveFloatingPane,\r\n oldLocation,\r\n newLocation\r\n },\r\n isValid: true\r\n });\r\n\r\n if (dragOverEvent.defaultPrevented) {\r\n return false;\r\n } else {\r\n if (dragOverEvent.detail.isValid) {\r\n this.moveFloatingPane(draggedPane, newLocation);\r\n }\r\n this.dockManager.isValidDrop = dragOverEvent.detail.isValid;\r\n }\r\n }\r\n\r\n return this.dragOver();\r\n }\r\n\r\n dragPaneEnd(): boolean {\r\n const dockingIndicator = this.dockingIndicator;\r\n const draggedPane = this.dockManager.draggedPane ?? this.draggedTab;\r\n let docked = false;\r\n\r\n this.dockManager.paneDragEnd.emit({\r\n sourcePane: draggedPane,\r\n panes: this.draggedPanes\r\n });\r\n\r\n if (dockingIndicator && this.dockManager.isValidDrop) {\r\n if (draggedPane.type === IgcDockManagerPaneType.contentPane) {\r\n if (draggedPane.isPinned === false) {\r\n draggedPane.isPinned = true;\r\n\r\n if (draggedPane === this.dockManager.flyoutPane) {\r\n this.dockManager.flyoutPane = null;\r\n }\r\n }\r\n }\r\n\r\n if (dockingIndicator.isRoot) {\r\n this.rootDockPane(dockingIndicator.position);\r\n } else {\r\n this.dockPane(dockingIndicator.position);\r\n }\r\n\r\n docked = true;\r\n } else if (this.dockManager.proximityDock && this.dockManager.dropShadowRect) {\r\n this.dockPane(this.proximityDockPosition);\r\n docked = true;\r\n }\r\n\r\n this.draggedPanes = null;\r\n this.draggedTab = null;\r\n this.dockManager.draggedPane = null;\r\n this.dockManager.dropTargetPaneInfo = null;\r\n this.dockManager.dropShadowRect = null;\r\n this.dockManager.isValidDrop = true;\r\n\r\n this.dockManager.layoutChange.emit();\r\n\r\n return docked;\r\n }\r\n\r\n private emitDragOverEvent(dockingIndicator: any) {\r\n return this.dockManager.paneDragOver.emit({\r\n sourcePane: this.dockManager.draggedPane,\r\n panes: this.draggedPanes,\r\n action: {\r\n type: IgcPaneDragActionType.dockPane,\r\n dockingIndicator: dockingIndicator,\r\n targetPane: this.dockManager.dropTargetPaneInfo?.pane\r\n },\r\n isValid: true\r\n });\r\n }\r\n\r\n private dragOver(): boolean {\r\n let dragOverEvent;\r\n\r\n if (this.dockingIndicator) {\r\n dragOverEvent = this.emitDragOverEvent(this.dockingIndicator);\r\n\r\n if (dragOverEvent.defaultPrevented) {\r\n return false;\r\n } else {\r\n this.dockManager.isValidDrop = dragOverEvent.detail.isValid;\r\n\r\n this.dockManager.dropShadowRect = this.dockManager.isValidDrop ?\r\n this.dockingIndicator.isRoot ? this.getDropShadowRectRoot() : this.getDropShadowRect() :\r\n null;\r\n }\r\n } else if (this.dockManager.proximityDock) {\r\n const disableDocking = this.draggedPanes.some(p => p.allowDocking !== undefined && !p.allowDocking);\r\n\r\n const dockingIndicator = {\r\n position: this.proximityDockPosition,\r\n isRoot: false,\r\n direction: this.dockManager.direction\r\n };\r\n\r\n dragOverEvent = this.emitDragOverEvent(dockingIndicator);\r\n\r\n if (dragOverEvent.defaultPrevented) {\r\n return false;\r\n } else {\r\n this.dockManager.isValidDrop = dragOverEvent.detail.isValid;\r\n\r\n this.dockManager.dropShadowRect = this.proximityDockPosition && this.dockManager.isValidDrop && !disableDocking\r\n ? this.getDropShadowRect(this.proximityDockPosition, this.dockManager.direction)\r\n : null;\r\n }\r\n } else {\r\n this.dockManager.dropShadowRect = null;\r\n\r\n if (this.dockManager.draggedPane.type !== IgcDockManagerPaneType.splitPane) {\r\n this.dockManager.isValidDrop = false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n dragTabStart(pane: IgcContentPane): boolean {\r\n this.shiftLeftThreshold = Number.MAX_VALUE;\r\n this.shiftRightThreshold = 0;\r\n\r\n if (this.dockManager.draggedPane === pane) {\r\n return true;\r\n }\r\n\r\n const dragStartEvent = this.dockManager.paneDragStart.emit({\r\n sourcePane: pane,\r\n panes: [pane]\r\n });\r\n\r\n if (dragStartEvent.defaultPrevented) {\r\n return false;\r\n }\r\n\r\n this.initialTabHeaderClickOffset = null;\r\n this.draggedTab = pane;\r\n this.draggedPanes = [pane];\r\n\r\n return true;\r\n }\r\n\r\n dragTabMove(pane: IgcContentPane, args: IgcDragMoveEventArguments, rects: IgcTabRectsInfo): boolean {\r\n const clientX = args.clientX;\r\n const clientY = args.clientY;\r\n const offsetX = args.offsetX;\r\n const totalOffsetX = args.totalOffsetX;\r\n const totalOffsetY = args.totalOffsetY;\r\n\r\n const headerRect = rects.headerRect;\r\n const prevHeaderRect = rects.prevHeaderRect;\r\n const nextHeaderRect = rects.nextHeaderRect;\r\n const lastVisibleHeaderRect = rects.lastVisibleHeaderRect;\r\n const tabsRect = rects.tabsRect;\r\n\r\n if (!this.initialTabHeaderClickOffset) {\r\n const clickOffsetX = clientX - totalOffsetX - headerRect.left;\r\n const clickOffsetY = clientY - totalOffsetY - headerRect.top;\r\n this.initialTabHeaderClickOffset = { x: clickOffsetX, y: clickOffsetY };\r\n }\r\n\r\n if (pane.allowFloating === false\r\n && (clientX < tabsRect.left || clientX > tabsRect.right || clientY < headerRect.top || clientY > headerRect.bottom)) {\r\n this.dockManager.draggedPane = pane;\r\n return this.dragOver();\r\n }\r\n\r\n this.dockManager.draggedPane = null;\r\n this.dockManager.isValidDrop = true;\r\n\r\n const paneIndex = (this.getParent(pane) as IgcTabGroupPane).panes.indexOf(pane);\r\n\r\n if (prevHeaderRect\r\n && clientX < headerRect.left\r\n && clientX < this.shiftLeftThreshold\r\n && offsetX < 0) {\r\n this.shiftLeftThreshold = prevHeaderRect.left;\r\n const action: IgcMoveTabAction = {\r\n type: IgcPaneDragActionType.moveTab,\r\n oldIndex: paneIndex,\r\n newIndex: paneIndex - 1\r\n };\r\n const dragOverEvent = this.dockManager.paneDragOver.emit({\r\n sourcePane: pane,\r\n panes: [pane],\r\n action,\r\n isValid: true\r\n });\r\n\r\n if (dragOverEvent.defaultPrevented) {\r\n return false;\r\n } else if (!dragOverEvent.detail.isValid) {\r\n return true;\r\n }\r\n this.shiftTabLeft(pane);\r\n } else if (nextHeaderRect\r\n && clientX > headerRect.right\r\n && clientX > this.shiftRightThreshold\r\n && offsetX > 0) {\r\n this.shiftRightThreshold = nextHeaderRect.right;\r\n if (headerRect.top === nextHeaderRect.top) {\r\n const action: IgcMoveTabAction = {\r\n type: IgcPaneDragActionType.moveTab,\r\n oldIndex: paneIndex,\r\n newIndex: paneIndex + 1\r\n };\r\n const dragOverEvent = this.dockManager.paneDragOver.emit({\r\n sourcePane: pane,\r\n panes: [pane],\r\n action,\r\n isValid: true\r\n });\r\n\r\n if (dragOverEvent.defaultPrevented) {\r\n return false;\r\n } else if (!dragOverEvent.detail.isValid) {\r\n return true;\r\n }\r\n this.shiftTabRight(pane);\r\n }\r\n }\r\n\r\n if (Math.abs(totalOffsetY) > IGC_DRAG_FLYOUT_THRESHOLD\r\n || tabsRect.left - clientX > IGC_DRAG_FLYOUT_THRESHOLD\r\n || clientX - lastVisibleHeaderRect.right > IGC_DRAG_FLYOUT_THRESHOLD) {\r\n if (pane.allowFloating !== false && !this.dockManager.maximizedPane) {\r\n return this.floatTabHeader(pane, clientX , clientY , tabsRect);\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private floatTabHeader(pane: IgcContentPane, clientX: number, clientY: number, tabsRect: DOMRect): boolean {\r\n const rect = new DOMRect(\r\n clientX - this.initialTabHeaderClickOffset.x,\r\n clientY - this.initialTabHeaderClickOffset.y,\r\n tabsRect.width,\r\n tabsRect.height);\r\n\r\n let panes: IgcContentPane[];\r\n let parent: IgcDockManagerPane;\r\n if (pane.type === IgcDockManagerPaneType.contentPane) {\r\n parent = this.getParent(pane);\r\n panes = parent.type === IgcDockManagerPaneType.tabGroupPane && pane !== this.dockManager.flyoutPane ?\r\n parent.panes :\r\n [pane];\r\n }\r\n\r\n this.draggedTab = null;\r\n\r\n const action: IgcFloatPaneAction = {\r\n type: IgcPaneDragActionType.floatPane,\r\n location: { x: rect.x, y: rect.y },\r\n width: rect.width,\r\n height: rect.height\r\n };\r\n const dragOverEvent = this.dockManager.paneDragOver.emit({\r\n sourcePane: pane,\r\n panes,\r\n action,\r\n isValid: true\r\n });\r\n\r\n if (dragOverEvent.defaultPrevented) {\r\n return false;\r\n } else if (!dragOverEvent.detail.isValid) {\r\n return true;\r\n }\r\n\r\n this.initialDragClientPoint = {\r\n x: clientX,\r\n y: clientY\r\n };\r\n\r\n this.floatTab(pane,\r\n rect.x,\r\n rect.y,\r\n action.width,\r\n action.height);\r\n\r\n return false;\r\n }\r\n\r\n private resolveChildPanesAllowMaximize(pane: IgcSplitPane | IgcTabGroupPane) {\r\n const panes = this.getChildContentPanes(pane);\r\n const visiblePanes = panes.filter(p => this.isContentPaneVisible(p));\r\n\r\n return visiblePanes.every(p => p.allowMaximize ?? this.dockManager.allowMaximize);\r\n }\r\n\r\n normalizeMaximizedPane(pane: IgcContentPane) {\r\n if (this.dockManager.maximizedPane) {\r\n const panes =\r\n this.dockManager.maximizedPane.type === IgcDockManagerPaneType.splitPane || this.dockManager.maximizedPane.type === IgcDockManagerPaneType.tabGroupPane\r\n ? this.getChildContentPanes(this.dockManager.maximizedPane)\r\n : [this.dockManager.maximizedPane];\r\n\r\n if (panes.every(p => p !== pane)) {\r\n this.maximizePane(this.dockManager.maximizedPane);\r\n }\r\n }\r\n }\r\n\r\n resolveAllowMaximize(pane: IgcDockManagerPane) {\r\n if (pane.type === IgcDockManagerPaneType.splitPane || pane.type === IgcDockManagerPaneType.tabGroupPane) {\r\n return this.resolveChildPanesAllowMaximize(pane);\r\n } else if (pane.type === IgcDockManagerPaneType.contentPane) {\r\n if (!this.getActualIsPinned(pane)) {\r\n return pane.allowMaximize ?? this.dockManager.allowMaximize;\r\n }\r\n\r\n const parent = this.getParent(pane);\r\n return parent.type === IgcDockManagerPaneType.tabGroupPane\r\n ? this.resolveChildPanesAllowMaximize(parent)\r\n : pane.allowMaximize ?? this.dockManager.allowMaximize;\r\n }\r\n }\r\n\r\n getDropShadowRect(dockingPosition?: IgcDockingIndicatorPosition, dockingDirection?: string) {\r\n const shadowRect = new DOMRect();\r\n dockingPosition = dockingPosition ?? this.dockingIndicator.position;\r\n dockingDirection = dockingDirection ?? this.dockingIndicator.direction;\r\n\r\n const parentRect = this.dropTargetParentRect;\r\n const dropTargetPaneInfo = this.dockManager.dropTargetPaneInfo;\r\n if (dropTargetPaneInfo && !parentRect) {\r\n const targetRect = dropTargetPaneInfo.targetRect;\r\n shadowRect.x = targetRect.x;\r\n shadowRect.y = targetRect.y;\r\n shadowRect.width = targetRect.width;\r\n shadowRect.height = targetRect.height;\r\n return shadowRect;\r\n } else if (!dropTargetPaneInfo || !parentRect) {\r\n return;\r\n }\r\n\r\n const draggedPaneSize = this.getPaneToDock(this.dockManager.draggedPane).size ?? IGC_DEFAULT_PANE_SIZE;\r\n const isOuter = Utils.isDockingIndicatorOuter(dockingPosition);\r\n const baseRect = isOuter ? parentRect : dropTargetPaneInfo.targetRect;\r\n\r\n if (dockingPosition === IgcDockingIndicatorPosition.center) {\r\n shadowRect.x = baseRect.x;\r\n shadowRect.y = baseRect.y;\r\n shadowRect.width = baseRect.width;\r\n shadowRect.height = baseRect.height;\r\n return shadowRect;\r\n }\r\n\r\n const targetPane = isOuter ? dropTargetPaneInfo.docHost : dropTargetPaneInfo.pane;\r\n const targetParent = this.getParent(targetPane) as IgcSplitPane;\r\n const panes = this.getSplitPaneVisibleChildren(targetParent);\r\n const draggedPaneIndex = panes.indexOf(this.dockManager.draggedPane);\r\n\r\n if (draggedPaneIndex > -1) {\r\n panes.splice(draggedPaneIndex, 1);\r\n }\r\n const dropTargetIndex = panes.indexOf(targetPane);\r\n\r\n const isIndicatorVertical = Utils.isDockingIndicatorVertical(dockingPosition);\r\n const isSplitPaneVertical = Utils.isSplitPaneVertical(targetParent);\r\n const isSameSplitPane = ((isIndicatorVertical && isSplitPaneVertical) || (!isIndicatorVertical && !isSplitPaneVertical));\r\n const isRTL = dockingDirection === 'rtl';\r\n\r\n const panesTotalSize = panes.reduce((a, b) => a + (b.size || IGC_DEFAULT_PANE_SIZE), 0);\r\n const beforePanesTotalSize = !isRTL || isIndicatorVertical\r\n ? panes.slice(0, dropTargetIndex).reduce((a, b) => a + (b.size || IGC_DEFAULT_PANE_SIZE), 0)\r\n : panes.slice(dropTargetIndex, panes.length).reduce((a, b) => a + (b.size || IGC_DEFAULT_PANE_SIZE), 0);\r\n const afterPanesTotalSize = !isRTL || isIndicatorVertical\r\n ? panes.slice(0, dropTargetIndex + 1).reduce((a, b) => a + (b.size || IGC_DEFAULT_PANE_SIZE), 0)\r\n : panes.slice(dropTargetIndex + 1, panes.length).reduce((a, b) => a + (b.size || IGC_DEFAULT_PANE_SIZE), 0);\r\n\r\n switch (dockingPosition) {\r\n case IgcDockingIndicatorPosition.left:\r\n case IgcDockingIndicatorPosition.outerLeft:\r\n shadowRect.x = baseRect.x;\r\n shadowRect.y = baseRect.y;\r\n shadowRect.height = baseRect.height;\r\n if (isSameSplitPane) {\r\n shadowRect.width = (draggedPaneSize / (draggedPaneSize + panesTotalSize)) * parentRect.width;\r\n !isRTL\r\n ? shadowRect.x = parentRect.left + beforePanesTotalSize / (draggedPaneSize + panesTotalSize) * parentRect.width\r\n : shadowRect.x = parentRect.left + afterPanesTotalSize / (draggedPaneSize + panesTotalSize) * parentRect.width;\r\n } else {\r\n shadowRect.width = parentRect.width / 2;\r\n }\r\n break;\r\n case IgcDockingIndicatorPosition.right:\r\n case IgcDockingIndicatorPosition.outerRight:\r\n shadowRect.y = baseRect.y;\r\n shadowRect.height = baseRect.height;\r\n if (isSameSplitPane) {\r\n shadowRect.width = (draggedPaneSize / (draggedPaneSize + panesTotalSize)) * parentRect.width;\r\n !isRTL\r\n ? shadowRect.x = parentRect.left + afterPanesTotalSize / (draggedPaneSize + panesTotalSize) * parentRect.width\r\n : shadowRect.x = parentRect.left + beforePanesTotalSize / (draggedPaneSize + panesTotalSize) * parentRect.width;\r\n } else {\r\n shadowRect.width = parentRect.width / 2;\r\n shadowRect.x = parentRect.right - shadowRect.width;\r\n }\r\n break;\r\n case IgcDockingIndicatorPosition.top:\r\n case IgcDockingIndicatorPosition.outerTop:\r\n shadowRect.x = baseRect.x;\r\n shadowRect.y = baseRect.y;\r\n shadowRect.width = baseRect.width;\r\n if (isSameSplitPane) {\r\n shadowRect.height = (draggedPaneSize / (draggedPaneSize + panesTotalSize)) * parentRect.height;\r\n shadowRect.y = parentRect.top + beforePanesTotalSize / (draggedPaneSize + panesTotalSize) * parentRect.height;\r\n } else {\r\n shadowRect.height = parentRect.height / 2;\r\n }\r\n break;\r\n case IgcDockingIndicatorPosition.bottom:\r\n case IgcDockingIndicatorPosition.outerBottom:\r\n shadowRect.x = baseRect.x;\r\n shadowRect.width = baseRect.width;\r\n if (isSameSplitPane) {\r\n shadowRect.height = (draggedPaneSize / (draggedPaneSize + panesTotalSize)) * parentRect.height;\r\n shadowRect.y = parentRect.top + afterPanesTotalSize / (draggedPaneSize + panesTotalSize) * parentRect.height;\r\n } else {\r\n shadowRect.height = parentRect.height / 2;\r\n shadowRect.y = parentRect.bottom - shadowRect.height;\r\n }\r\n break;\r\n }\r\n\r\n return shadowRect;\r\n }\r\n\r\n getDropShadowRectRoot() {\r\n const rootRect = this.dropTargetParentRect;\r\n const shadowRect = new DOMRect();\r\n const draggedPaneSize = this.getPaneToDock(this.dockManager.draggedPane).size ?? IGC_DEFAULT_PANE_SIZE;\r\n const panes = this.getSplitPaneVisibleChildren(this.dockManager.layout.rootPane);\r\n\r\n const draggedPaneIndex = panes.indexOf(this.dockManager.draggedPane);\r\n\r\n if (draggedPaneIndex > -1) {\r\n panes.splice(draggedPaneIndex, 1);\r\n }\r\n\r\n const panesTotalSize = panes.reduce((a, b) => a + (b.size || IGC_DEFAULT_PANE_SIZE), 0);\r\n\r\n const isIndicatorVertical = Utils.isDockingIndicatorVertical(this.dockingIndicator.position);\r\n const isSplitPaneVertical = Utils.isSplitPaneVertical(this.dockManager.layout.rootPane);\r\n const isSameSplitPane = (isIndicatorVertical && isSplitPaneVertical) || (!isIndicatorVertical && !isSplitPaneVertical);\r\n const isEmptyDockManager = panes.length === 0;\r\n\r\n switch (this.dockingIndicator.position) {\r\n case IgcDockingIndicatorPosition.left:\r\n shadowRect.x = rootRect.x;\r\n shadowRect.y = rootRect.y;\r\n shadowRect.height = rootRect.height;\r\n shadowRect.width = isSameSplitPane || isEmptyDockManager ? (draggedPaneSize / (draggedPaneSize + panesTotalSize) * rootRect.width) : (rootRect.width / 2);\r\n break;\r\n case IgcDockingIndicatorPosition.right:\r\n shadowRect.y = rootRect.y;\r\n shadowRect.height = rootRect.height;\r\n shadowRect.width = isSameSplitPane || isEmptyDockManager ? (shadowRect.width = draggedPaneSize / (draggedPaneSize + panesTotalSize) * rootRect.width) : (rootRect.width / 2);\r\n shadowRect.x = rootRect.right - shadowRect.width;\r\n break;\r\n case IgcDockingIndicatorPosition.top:\r\n shadowRect.x = rootRect.x;\r\n shadowRect.y = rootRect.y;\r\n shadowRect.width = rootRect.width;\r\n shadowRect.height = isSameSplitPane || isEmptyDockManager ? (draggedPaneSize / (draggedPaneSize + panesTotalSize) * rootRect.height) : (rootRect.height / 2);\r\n break;\r\n case IgcDockingIndicatorPosition.bottom:\r\n shadowRect.x = rootRect.x;\r\n shadowRect.width = rootRect.width;\r\n shadowRect.height = isSameSplitPane || isEmptyDockManager ? (draggedPaneSize / (draggedPaneSize + panesTotalSize) * rootRect.height) : (rootRect.height / 2);\r\n shadowRect.y = rootRect.bottom - shadowRect.height;\r\n break;\r\n }\r\n\r\n return shadowRect;\r\n }\r\n\r\n selectHiddenTab(tabGroup: IgcTabGroupPane, pane: IgcContentPane) {\r\n const index = tabGroup.panes.indexOf(pane);\r\n tabGroup.panes.splice(index, 1);\r\n tabGroup.panes.splice(0, 0, pane);\r\n tabGroup.selectedIndex = 0;\r\n this.updateLayout();\r\n }\r\n\r\n shiftTabLeft(pane: IgcContentPane) {\r\n const tabGroup = this.getParent(pane) as IgcTabGroupPane;\r\n const draggedIndex = tabGroup.panes.indexOf(pane);\r\n\r\n if (draggedIndex > 0) {\r\n tabGroup.panes.splice(draggedIndex, 1);\r\n tabGroup.panes.splice(draggedIndex - 1, 0, pane);\r\n tabGroup.selectedIndex = draggedIndex - 1;\r\n this.updateLayout();\r\n }\r\n\r\n this.forceDragTabHeader = pane;\r\n }\r\n\r\n shiftTabRight(pane: IgcContentPane) {\r\n const tabGroup = this.getParent(pane) as IgcTabGroupPane;\r\n const draggedIndex = tabGroup.panes.indexOf(pane);\r\n\r\n if (draggedIndex < tabGroup.panes.length - 1) {\r\n tabGroup.panes.splice(draggedIndex, 1);\r\n tabGroup.panes.splice(draggedIndex + 1, 0, pane);\r\n tabGroup.selectedIndex = draggedIndex + 1;\r\n this.updateLayout();\r\n }\r\n\r\n this.forceDragTabHeader = pane;\r\n }\r\n\r\n cacheDocumentsOrder() {\r\n this.documentsCache = this.visibleDocuments.filter(c => !c.disabled);\r\n }\r\n\r\n cacheContentPanesOrder() {\r\n this.contentPanesCache = this.visibleContentPanes.filter(c => !c.disabled);\r\n }\r\n\r\n focusPrevContentPane(isInDocHost: boolean) {\r\n const contentPanesCache = isInDocHost ? this.documentsCache : this.contentPanesCache;\r\n const activePaneIndex = contentPanesCache.indexOf(this.dockManager.activePane);\r\n const prevPane = activePaneIndex > 0 ?\r\n contentPanesCache[activePaneIndex - 1] :\r\n contentPanesCache[contentPanesCache.length - 1];\r\n\r\n this.normalizeMaximizedPane(prevPane);\r\n this.dockManager.activePane = prevPane;\r\n }\r\n\r\n focusNextContentPane(isInDocHost: boolean) {\r\n const contentPanesCache = isInDocHost ? this.documentsCache : this.contentPanesCache;\r\n const activePaneIndex = contentPanesCache.indexOf(this.dockManager.activePane);\r\n const nextPane = (activePaneIndex >= 0 && activePaneIndex < contentPanesCache.length - 1) ?\r\n contentPanesCache[activePaneIndex + 1] :\r\n contentPanesCache[0];\r\n\r\n this.normalizeMaximizedPane(nextPane);\r\n this.dockManager.activePane = nextPane;\r\n }\r\n}\r\n","import { Utils } from '../../../utils/utils';\r\n\r\nimport { IgcDockManagerPaneType, IgcDockingIndicatorPosition } from './../dockmanager.public-interfaces';\r\nimport { IgcDockManagerService } from './../dockmanager.service';\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class IgcDockManagerKeyboardService {\r\n constructor(private service: IgcDockManagerService) {\r\n }\r\n\r\n handleKeydown(event: KeyboardEvent) {\r\n if (this.service.dockManager.disableKeyboardNavigation) {\r\n return;\r\n }\r\n\r\n const activePane = this.service.dockManager.activePane;\r\n const ctrlOrMetaKey = Utils.isControlOrMetaPressed(event);\r\n const altKey = Utils.isAltPressed(event);\r\n const shiftKey = event.shiftKey;\r\n\r\n if (event.key === 'Control' || event.key === 'Meta' || event.key === 'OS') {\r\n this.service.cacheDocumentsOrder();\r\n } else if (event.key === 'Alt' || event.key === 'AltGraph') {\r\n this.service.cacheContentPanesOrder();\r\n } else if (event.key === 'F6' || (event.key.startsWith('Arrow') && !shiftKey && ctrlOrMetaKey)) {\r\n this.handleFocusPane(event);\r\n event.stopPropagation();\r\n } else if (event.key === 'F3' && altKey && activePane) {\r\n this.service.dockManager.focusElement();\r\n this.service.closePane(activePane);\r\n event.stopPropagation();\r\n } else if (event.key.startsWith('Arrow') && shiftKey && activePane) {\r\n this.service.dockManager.focusElement();\r\n this.handleDockPane(event);\r\n event.stopPropagation();\r\n } else if ((event.key === 'F7' || event.key === 'F8') && (altKey || ctrlOrMetaKey)) {\r\n this.setPaneNavigatorMeta(altKey, ctrlOrMetaKey, shiftKey);\r\n event.stopPropagation();\r\n } else {\r\n return;\r\n }\r\n }\r\n\r\n private handleFocusPane(event: KeyboardEvent) {\r\n const altKey = Utils.isAltPressed(event);\r\n const ctrlOrMetaKey = Utils.isControlOrMetaPressed(event);\r\n const shiftKey = event.shiftKey;\r\n const f6 = event.key === 'F6';\r\n const arrowLeft = event.key === 'ArrowLeft';\r\n const arrowRight = event.key === 'ArrowRight';\r\n\r\n if (altKey && shiftKey && f6) {\r\n this.service.focusPrevContentPane(false);\r\n } else if (altKey && f6) {\r\n this.service.focusNextContentPane(false);\r\n } else if ((ctrlOrMetaKey && shiftKey && f6) || (ctrlOrMetaKey && arrowLeft)) {\r\n this.service.focusPrevContentPane(true);\r\n } else if ((ctrlOrMetaKey && f6) || (ctrlOrMetaKey && arrowRight)) {\r\n this.service.focusNextContentPane(true);\r\n }\r\n }\r\n\r\n private handleDockPane(event: KeyboardEvent) {\r\n const key = event.key;\r\n const ctrlOrMetaKey = Utils.isControlOrMetaPressed(event);\r\n const shiftKey = event.shiftKey;\r\n\r\n if (ctrlOrMetaKey && shiftKey) {\r\n this.handleRootDockPane(key);\r\n } else if (shiftKey) {\r\n const activePane = this.service.dockManager.activePane;\r\n const activePaneParent = this.service.getParent(activePane);\r\n if (activePaneParent.type === IgcDockManagerPaneType.tabGroupPane && activePaneParent.panes.length > 1) {\r\n this.handleInnerDockPane(key);\r\n }\r\n }\r\n }\r\n\r\n private handleRootDockPane(key: string) {\r\n let position: IgcDockingIndicatorPosition;\r\n switch (key) {\r\n case 'ArrowUp':\r\n position = IgcDockingIndicatorPosition.top;\r\n break;\r\n case 'ArrowDown':\r\n position = IgcDockingIndicatorPosition.bottom;\r\n break;\r\n case 'ArrowLeft':\r\n position = IgcDockingIndicatorPosition.left;\r\n break;\r\n case 'ArrowRight':\r\n position = IgcDockingIndicatorPosition.right;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n if (position) {\r\n this.service.keyboardDockPane = this.service.dockManager.activePane;\r\n this.service.rootDockPane(position);\r\n }\r\n }\r\n\r\n private handleInnerDockPane(key: string) {\r\n let position: IgcDockingIndicatorPosition;\r\n switch (key) {\r\n case 'ArrowUp':\r\n position = IgcDockingIndicatorPosition.top;\r\n break;\r\n case 'ArrowDown':\r\n position = IgcDockingIndicatorPosition.bottom;\r\n break;\r\n case 'ArrowLeft':\r\n position = IgcDockingIndicatorPosition.left;\r\n break;\r\n case 'ArrowRight':\r\n position = IgcDockingIndicatorPosition.right;\r\n break;\r\n default:\r\n break;\r\n }\r\n \r\n if (position) {\r\n this.service.keyboardDockPane = this.service.dockManager.activePane;\r\n this.service.dockPane(position);\r\n }\r\n }\r\n\r\n private setPaneNavigatorMeta(altKey: boolean, ctrlOrMetaKey: boolean, shiftKey: boolean) {\r\n let initIndex = 0;\r\n const allItems = this.service.visibleContentPanes.concat(this.service.visibleDocuments);\r\n if (allItems.length > 0) {\r\n if (ctrlOrMetaKey) {\r\n if (this.service.visibleDocuments.length > 0) {\r\n initIndex = shiftKey ?\r\n this.service.visibleContentPanes.length + this.service.visibleDocuments.length - 1 :\r\n this.service.visibleContentPanes.length;\r\n } else {\r\n initIndex = shiftKey ? this.service.visibleContentPanes.length - 1 : 0;\r\n }\r\n } else if (altKey) {\r\n initIndex = shiftKey ?\r\n this.service.visibleContentPanes.length > 0 ?\r\n this.service.visibleContentPanes.length - 1 :\r\n this.service.visibleDocuments.length - 1 :\r\n 0;\r\n }\r\n\r\n const metadata = {\r\n activePanes: this.service.visibleContentPanes,\r\n activeDocuments: this.service.visibleDocuments,\r\n initialIndex: initIndex,\r\n previousActivePaneIndex: allItems.indexOf(this.service.dockManager.activePane)\r\n };\r\n\r\n this.service.dockManager.activePane = null;\r\n this.service.dockManager.navigationPaneMeta = metadata;\r\n }\r\n }\r\n}\r\n","import { Component, Element, Event, EventEmitter, Host, Listen, Method, Prop, State, Watch, h } from '@stencil/core';\r\n\r\nimport { resourceStringsMap } from '../../utils/locale';\r\nimport { TwoWayMap } from '../../utils/two-way-map';\r\nimport { Utils } from '../../utils/utils';\r\nimport { IgcDragMoveEventArguments, IgcDragResizeEventArguments, IgcDragStartEventArguments } from '../drag-drop/drag.service';\r\n\r\nimport {\r\n IGC_DEFAULT_PANE_SIZE, IGC_DEFAULT_UNPIN_PANE_SIZE, IgcContextMenuMetadata, IgcContextMenuOrientation, IgcContextMenuPosition, IgcDockManagerComponentBase, IgcDropTargetPaneInfo, IgcPaneNavigatorMetadata, IgcPinBehavior, IgcTabHeadersPosition\r\n} from './dockmanager.interfaces';\r\nimport {\r\n IgcActivePaneEventArgs,\r\n IgcContentPane, IgcDockManagerLayout, IgcDockManagerPane, IgcDockManagerPaneType, IgcDockManagerPoint, IgcDockManagerResourceStrings, IgcDockingIndicatorPosition, IgcDocumentHost, IgcFloatingPaneResizeEventArgs,\r\n IgcFloatingPaneResizeMoveEventArgs, IgcPaneCloseEventArgs, IgcPaneDragEndEventArgs, IgcPaneDragOverEventArgs,\r\n IgcPaneDragStartEventArgs, IgcPaneHeaderConnectionEventArgs, IgcPaneHeaderElement, IgcPanePinnedEventArgs, IgcSplitPane,\r\n IgcSplitPaneOrientation, IgcTabGroupPane, IgcTabHeaderConnectionEventArgs, IgcTabHeaderElement, IgcUnpinnedLocation, IgcSplitterResizeEventArgs, IgcPaneScrollEventArgs\r\n} from './dockmanager.public-interfaces';\r\nimport { IgcDockManagerService } from './dockmanager.service';\r\nimport { IgcDockManagerKeyboardService } from './keyboard/keyboard.service';\r\nimport { IgcSplitterComponent } from './panes/splitter-component';\r\n\r\nenum ActionReason {\r\n click = 'click',\r\n drop = 'drop',\r\n maximizeOrMinimize = 'maximizeOrMinimize'\r\n}\r\n\r\nconst PANE_HEADER_HEIGHT = 40;\r\n\r\n/**\r\n * @hidden\r\n */\r\n@Component({\r\n tag: 'igc-dockmanager',\r\n styleUrl: 'dockmanager-component.scss',\r\n shadow: true,\r\n scoped: false,\r\n})\r\nexport class IgcDockManager implements IgcDockManagerComponentBase {\r\n private _tabHeaderIconClicked = false;\r\n private service = new IgcDockManagerService(this);\r\n private keyboardService = new IgcDockManagerKeyboardService(this.service);\r\n private panesElementMap: TwoWayMap;\r\n private contentPanesElementMap: Map;\r\n private tabHeadersMap: Map;\r\n private unpinnedHeadersMap: Map;\r\n private activePaneInternalSet = false;\r\n private domObserver = new MutationObserver(this.mutationCallback.bind(this));\r\n private showDockingIndicators: boolean;\r\n private shouldMovePane = false;\r\n private scheduledCallbacks: (() => void)[] = [];\r\n private paneToFocus: IgcContentPane;\r\n private shouldClearActivePane = true;\r\n private dockedPanesContainer: HTMLElement;\r\n private isDragging = false;\r\n private contentPaneId: string;\r\n private reason: ActionReason;\r\n private splitterOffset = 1;\r\n private loaded = false;\r\n private resizeObserver = new ResizeObserver(this.restrictFloatingPaneSize.bind(this));\r\n private proximityDockThreshold = 50;\r\n private proximityOuterDockThreshold = 25;\r\n private cursorLocation: IgcDockManagerPoint;\r\n private splitterRect: any\r\n private allowOuterProximityDock: boolean\r\n private templatableComponents = [\r\n {\r\n slot: 'paneHeaderCloseButton',\r\n targetName: 'igc-pane-header-component',\r\n targetSlot: 'paneHeaderCloseButton',\r\n targetPart: 'pane-header-close-button'\r\n },\r\n {\r\n slot: 'tabHeaderCloseButton',\r\n targetName: 'igc-tab-header-component',\r\n targetSlot: 'tabHeaderCloseButton',\r\n targetPart: 'tab-header-close-button'\r\n },\r\n {\r\n slot: 'tabHeaderCloseButton',\r\n targetName: 'igc-context-menu-component',\r\n targetSlot: 'contextMenuCloseButton',\r\n targetPart: 'context-menu-close-button'\r\n },\r\n {\r\n slot: 'closeButton',\r\n targetName: 'igc-pane-header-component',\r\n targetSlot: 'paneHeaderCloseButton',\r\n targetPart: 'pane-header-close-button'\r\n },\r\n {\r\n slot: 'closeButton',\r\n targetName: 'igc-tab-header-component',\r\n targetSlot: 'tabHeaderCloseButton',\r\n targetPart: 'tab-header-close-button'\r\n },\r\n {\r\n slot: 'closeButton',\r\n targetName: 'igc-context-menu-component',\r\n targetSlot: 'contextMenuCloseButton',\r\n targetPart: 'context-menu-close-button'\r\n },\r\n {\r\n slot: 'moreTabsButton',\r\n targetName: 'igc-tabs-component',\r\n targetSlot: 'tabsMoreButton',\r\n targetPart: 'tabs-more-button'\r\n },\r\n {\r\n slot: 'maximizeButton',\r\n targetName: 'igc-pane-header-component',\r\n targetSlot: 'paneHeaderMaximizeButton',\r\n targetPart: 'pane-header-maximize-button'\r\n },\r\n {\r\n slot: 'maximizeButton',\r\n targetName: 'igc-tabs-component',\r\n targetSlot: 'tabsMaximizeButton',\r\n targetPart: 'tabs-maximize-button'\r\n },\r\n {\r\n slot: 'minimizeButton',\r\n targetName: 'igc-pane-header-component',\r\n targetSlot: 'paneHeaderMinimizeButton',\r\n targetPart: 'pane-header-minimize-button'\r\n },\r\n {\r\n slot: 'minimizeButton',\r\n targetName: 'igc-tabs-component',\r\n targetSlot: 'tabsMinimizeButton',\r\n targetPart: 'tabs-minimize-button'\r\n },\r\n {\r\n slot: 'pinButton',\r\n targetName: 'igc-pane-header-component',\r\n targetSlot: 'paneHeaderPinButton',\r\n targetPart: 'pane-header-pin-button'\r\n },\r\n {\r\n slot: 'unpinButton',\r\n targetName: 'igc-pane-header-component',\r\n targetSlot: 'paneHeaderUnpinButton',\r\n targetPart: 'pane-header-unpin-button'\r\n },\r\n {\r\n slot: 'unpinButton',\r\n targetName: 'igc-context-menu-component',\r\n targetSlot: 'contextMenuUnpinButton',\r\n targetPart: 'context-menu-unpin-button'\r\n },\r\n {\r\n slot: 'moreOptionsButton',\r\n targetName: 'igc-tab-header-component',\r\n targetSlot: 'tabHeaderMoreOptionsButton',\r\n targetPart: 'tab-header-more-options-button'\r\n },\r\n {\r\n slot: 'splitterHandle',\r\n targetName: 'igc-splitter-component',\r\n targetSlot: 'splitterHandle',\r\n targetPart: 'splitter-handle'\r\n },\r\n\r\n ];\r\n\r\n documentOnlyDrag: boolean;\r\n\r\n @Element() element: HTMLElement;\r\n\r\n @State() dropTargetPaneInfo: IgcDropTargetPaneInfo;\r\n @State() flyoutPane: IgcContentPane;\r\n\r\n @Watch('flyoutPane')\r\n flyoutPaneChanged(newValue: IgcContentPane) {\r\n if (newValue) {\r\n this.scheduleAfterRender(() => {\r\n this.setFocus(newValue);\r\n });\r\n }\r\n }\r\n\r\n @State() floatingPaneZIndicesMap = new Map();\r\n @State() contextMenuMeta: IgcContextMenuMetadata;\r\n @State() dropShadowRect: DOMRect;\r\n @State() templates: Map = new Map();\r\n @State() hasCustomMaximizeButton: boolean;\r\n @State() hasCustomMinimizeButton: boolean;\r\n @State() hoveredPane: IgcContentPane;\r\n\r\n @Prop({ mutable: true }) navigationPaneMeta: IgcPaneNavigatorMetadata;\r\n @Prop() allowMaximize = true;\r\n @Prop() showPaneHeaders: 'onHoverOnly' | 'always' = 'always';\r\n @Prop() showHeaderIconOnHover: 'closeOnly' | 'moreOptionsOnly' | 'all';\r\n @Prop({ mutable: true }) maximizedPane: IgcContentPane | IgcSplitPane | IgcTabGroupPane;\r\n @Prop({ mutable: true }) resourceStrings: IgcDockManagerResourceStrings;\r\n @Prop() allowFloatingPanesResize = true;\r\n @Prop() disableKeyboardNavigation = false;\r\n @Prop() contextMenuPosition: IgcContextMenuPosition;\r\n @Prop() containedInBoundaries = false;\r\n @Prop() allowInnerDock = true;\r\n @Prop() proximityDock = false;\r\n\r\n @Watch('containedInBoundaries')\r\n containedInBoundariesChanged() {\r\n if (this.loaded) {\r\n this.restrictFloatingPaneSize();\r\n }\r\n }\r\n /**\r\n * The layout configuration of the Dock Manager.\r\n */\r\n @Prop({ mutable: true }) layout: IgcDockManagerLayout;\r\n\r\n /**\r\n * Gets the direction of the Dock Manager.\r\n */\r\n get direction(): string {\r\n return Utils.getDirection(this.element);\r\n }\r\n\r\n @Watch('layout')\r\n layoutChanged() {\r\n this.service.processLayout();\r\n if (!this.isDragging) {\r\n this.layoutChange.emit();\r\n }\r\n }\r\n\r\n @Prop({ mutable: true })\r\n draggedPane: IgcContentPane | IgcSplitPane | IgcTabGroupPane;\r\n\r\n @Watch('draggedPane')\r\n draggedPaneChanged() {\r\n if (this.draggedPane) {\r\n const panes = this.draggedPane.type === IgcDockManagerPaneType.contentPane ?\r\n [this.draggedPane] :\r\n this.service.getChildContentPanes(this.draggedPane);\r\n\r\n this.showDockingIndicators = panes.every(p => p.allowDocking !== false);\r\n this.documentOnlyDrag = panes.some(p => p.documentOnly);\r\n } else {\r\n this.showDockingIndicators = false;\r\n this.documentOnlyDrag = false;\r\n }\r\n }\r\n\r\n @Prop() dropPosition: IgcDockManagerPoint;\r\n\r\n @Watch('dropPosition')\r\n dropPositionChanged() {\r\n this.paneDragMoved(this.dropPosition?.x, this.dropPosition?.y);\r\n }\r\n\r\n @Prop({ mutable: true })\r\n activePane: IgcContentPane = null;\r\n\r\n @Watch('activePane')\r\n activePaneChange(newValue: IgcContentPane, oldValue: IgcContentPane) {\r\n const args: IgcActivePaneEventArgs = { newPane: newValue, oldPane: oldValue };\r\n\r\n if (this.flyoutPane && newValue && newValue !== this.flyoutPane) {\r\n this.service.flyoutPane(this.flyoutPane);\r\n }\r\n\r\n this.activePaneChanged.emit(args);\r\n this.contentPaneId = newValue?.contentId || this.contentPaneId;\r\n\r\n if (this.activePaneInternalSet) {\r\n this.activePaneInternalSet = false;\r\n return;\r\n }\r\n\r\n if (newValue) {\r\n if (newValue.isPinned === false) {\r\n requestAnimationFrame(() => {\r\n this.service.flyoutPane(newValue);\r\n });\r\n // return because setFocus will be called in flyoutPaneChanged\r\n this.paneToFocus = newValue;\r\n return;\r\n } else {\r\n const parent = this.service.getParent(newValue);\r\n\r\n if (parent.type === IgcDockManagerPaneType.tabGroupPane && parent.panes.length > 1) {\r\n const visibleTabs = this.service.getVisibleContentPanes(parent);\r\n const tabHeaderElement = this.tabHeadersMap.get(newValue);\r\n const firstTabRect = this.tabHeadersMap\r\n .get(visibleTabs[0])\r\n .getBoundingClientRect();\r\n const headerRect = tabHeaderElement.getBoundingClientRect();\r\n\r\n // return if the selected index is changed because setFocus will be called in handleTabSelectedChanged\r\n if (headerRect.top !== firstTabRect.top) { // header is hidden\r\n this.service.selectHiddenTab(parent, newValue);\r\n this.paneToFocus = newValue;\r\n return;\r\n } else {\r\n const visibleIndex = visibleTabs.indexOf(newValue);\r\n const selectedIndex = parent.selectedIndex ?? 0;\r\n\r\n if (selectedIndex !== visibleIndex) {\r\n parent.selectedIndex = visibleIndex;\r\n this.paneToFocus = newValue;\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.scheduleAfterRender(() => {\r\n this.setFocus(newValue);\r\n });\r\n }\r\n\r\n @Event()\r\n paneHeaderConnected: EventEmitter;\r\n\r\n @Event()\r\n paneHeaderDisconnected: EventEmitter;\r\n\r\n @Event()\r\n tabHeaderConnected: EventEmitter;\r\n\r\n @Event()\r\n tabHeaderDisconnected: EventEmitter;\r\n\r\n @Event()\r\n splitterResizeStart: EventEmitter;\r\n\r\n @Event()\r\n splitterResizeEnd: EventEmitter;\r\n\r\n @Event()\r\n paneClose: EventEmitter;\r\n\r\n @Event()\r\n paneScroll: EventEmitter;\r\n\r\n @Event()\r\n panePinnedToggle: EventEmitter;\r\n\r\n @Event()\r\n activePaneChanged: EventEmitter;\r\n\r\n @Event()\r\n paneDragStart: EventEmitter;\r\n\r\n @Event()\r\n paneDragOver: EventEmitter;\r\n\r\n @Event()\r\n paneDragEnd: EventEmitter;\r\n\r\n @Event()\r\n floatingPaneResizeMove: EventEmitter;\r\n\r\n @Event()\r\n floatingPaneResizeEnd: EventEmitter;\r\n\r\n @Event()\r\n floatingPaneResizeStart: EventEmitter;\r\n\r\n @Event()\r\n layoutChange: EventEmitter;\r\n\r\n @Listen('focusout')\r\n handleFocusOut(_event: Event) {\r\n if (this.paneToFocus) {\r\n return;\r\n }\r\n const rootNode = this.getRootNode();\r\n\r\n if (!this._tabHeaderIconClicked && !this.isDragging) {\r\n requestAnimationFrame(() => {\r\n if (!this.element.contains(rootNode.activeElement)) {\r\n this.clearActivePane();\r\n }\r\n });\r\n }\r\n\r\n this._tabHeaderIconClicked = false;\r\n }\r\n\r\n @Listen('keydown')\r\n handleKeyDown(event: KeyboardEvent) {\r\n this.keyboardService.handleKeydown(event);\r\n }\r\n\r\n @Listen('pointerdown')\r\n handlePointerDown(event: PointerEvent) {\r\n const pathHTMLElements = event.composedPath().filter(e => e instanceof HTMLElement).map(e => e as HTMLElement);\r\n const isMaximizeOrMinimize = pathHTMLElements.filter(e => e.attributes.getNamedItem('part') &&\r\n (e.attributes.getNamedItem('part').value === 'tabs-minimize-button' || e.attributes.getNamedItem('part').value === 'tabs-maximize-button')).length > 0;\r\n if (isMaximizeOrMinimize) {\r\n this.reason = ActionReason.maximizeOrMinimize;\r\n }\r\n }\r\n\r\n @Listen('pointerup')\r\n handlePointerUp() {\r\n this.reason = null;\r\n }\r\n\r\n @Method()\r\n async dropPane(): Promise {\r\n const docked = this.handlePaneDragEnd();\r\n return Promise.resolve(docked);\r\n }\r\n\r\n @Method()\r\n async removePane(pane: IgcDockManagerPane) {\r\n this.service.removePane(pane);\r\n }\r\n\r\n @Method()\r\n async focusPane(contentId: string) {\r\n const contentPane = this.service.getContent(contentId) as IgcContentPane;\r\n const parentPane = this.service.getRootParent(contentPane);\r\n const isFloating = this.service.isFloatingPane(parentPane);\r\n const isUnpinned = contentPane.isPinned !== undefined && !contentPane.isPinned;\r\n\r\n if (isFloating) {\r\n this.service.bringFloatingPaneOnTop(parentPane);\r\n this.activePane = contentPane;\r\n } else if (isUnpinned) {\r\n this.handlePaneFlyout(contentPane);\r\n } else {\r\n this.activePane = contentPane;\r\n }\r\n }\r\n\r\n connectedCallback() {\r\n this.element.shadowRoot.addEventListener('focusout', this.handleShadowRootFocusOut);\r\n this.domObserver.observe(this.element, { attributes: true, subtree: true, childList: true });\r\n\r\n const dockManagerChildren = Array.from(this.element.children);\r\n for (const htmlElem of dockManagerChildren) {\r\n const elem = htmlElem as HTMLElement;\r\n elem?.addEventListener('focusin', this.handleCustomContentFocusIn);\r\n }\r\n }\r\n\r\n componentWillLoad() {\r\n this.contextMenuMeta = null;\r\n this.navigationPaneMeta = null;\r\n\r\n if (this.layout) {\r\n this.layoutChanged();\r\n }\r\n\r\n if (!this.resourceStrings) {\r\n const closestElement = this.element.closest('[lang]') as HTMLElement;\r\n const lang = closestElement ? closestElement.lang.toLowerCase() : 'en';\r\n this.resourceStrings = resourceStringsMap.has(lang) ? resourceStringsMap.get(lang) : resourceStringsMap.get('en');\r\n }\r\n }\r\n\r\n componentWillRender() {\r\n const lastMaximizedPane = this.service.getLastMaximizedPane();\r\n\r\n if (lastMaximizedPane && this.maximizedPane !== lastMaximizedPane) {\r\n const shouldFlyout = 'isPinned' in lastMaximizedPane && !(lastMaximizedPane as IgcContentPane).isPinned;\r\n\r\n if (shouldFlyout) {\r\n this.handlePaneFlyout(lastMaximizedPane as IgcContentPane);\r\n }\r\n\r\n this.handleMaximize(lastMaximizedPane);\r\n }\r\n }\r\n\r\n componentDidRender() {\r\n while (this.scheduledCallbacks.length) {\r\n const callback = this.scheduledCallbacks.shift();\r\n callback();\r\n }\r\n\r\n if (this.service.keyboardDockPane) {\r\n this.setActivePane(this.service.keyboardDockPane);\r\n this.setFocus(this.service.keyboardDockPane);\r\n this.service.keyboardDockPane = null;\r\n }\r\n\r\n this.processTemplates();\r\n }\r\n\r\n componentDidLoad() {\r\n this.loaded = true;\r\n this.resizeObserver.observe(this.element);\r\n }\r\n\r\n disconnectedCallback() {\r\n this.element.shadowRoot.removeEventListener('focusout', this.handleShadowRootFocusOut);\r\n this.removeCustomContentEventListeners();\r\n this.domObserver.disconnect();\r\n this.resizeObserver.disconnect();\r\n }\r\n\r\n focusElement() {\r\n this.element.focus();\r\n }\r\n\r\n private handleTabsRendered(pane: IgcTabGroupPane) {\r\n if (this.reason !== ActionReason.drop) { return; }\r\n if (pane.panes?.length > 0) {\r\n const focusablePane = this.findFocusablePane(pane.panes);\r\n if (focusablePane?.contentId === this.contentPaneId) {\r\n pane.selectedIndex = pane.panes.indexOf(focusablePane);\r\n this.setActivePane(focusablePane);\r\n this.setFocus(focusablePane);\r\n }\r\n }\r\n }\r\n\r\n private handleSplitPaneRendered(panes: IgcDockManagerPane[]) {\r\n if (this.reason !== ActionReason.drop) { return; }\r\n const focusablePane = this.findFocusablePane(panes);\r\n if (focusablePane?.contentId === this.contentPaneId) {\r\n this.setActivePane(focusablePane);\r\n this.setFocus(focusablePane);\r\n }\r\n }\r\n\r\n private findFocusablePane(panes: IgcDockManagerPane[], candidate?: IgcContentPane): IgcContentPane | undefined {\r\n const splitPanes = panes.filter(p => p.type === IgcDockManagerPaneType.splitPane);\r\n for (const pane of splitPanes) {\r\n if (candidate) {\r\n return candidate;\r\n }\r\n const splitPane = pane as IgcSplitPane;\r\n candidate = this.findFocusablePane(splitPane.panes);\r\n }\r\n\r\n const tabGroupPanes = panes.filter(p => p.type === IgcDockManagerPaneType.tabGroupPane);\r\n for (const pane of tabGroupPanes) {\r\n if (candidate) {\r\n return candidate;\r\n }\r\n const tabGroupPane = pane as IgcTabGroupPane;\r\n candidate = tabGroupPane.selectedIndex ? tabGroupPane.panes[tabGroupPane.selectedIndex] : this.findFocusablePane(tabGroupPane.panes);\r\n }\r\n\r\n const docHost = panes.filter(p => p.type === IgcDockManagerPaneType.documentHost);\r\n for (const pane of docHost) {\r\n if (candidate) {\r\n return candidate;\r\n }\r\n const docHostPane = pane as IgcDocumentHost;\r\n candidate = this.findFocusablePane([docHostPane.rootPane]);\r\n }\r\n\r\n candidate = panes.find(p => p.type === IgcDockManagerPaneType.contentPane\r\n && p.contentId === this.contentPaneId) as IgcContentPane || candidate;\r\n if (candidate) {\r\n return candidate;\r\n }\r\n\r\n return panes.find(p => p.type === IgcDockManagerPaneType.contentPane) as IgcContentPane;\r\n }\r\n\r\n private processTemplates() {\r\n if (this.templates.size === 0) {\r\n return;\r\n }\r\n\r\n this.templatableComponents.forEach(component => {\r\n const template = this.templates.get(component.slot);\r\n if (template) {\r\n template.setAttribute('slot', component.targetSlot);\r\n template.setAttribute('part', component.targetPart);\r\n\r\n const componentMatches = this.element.shadowRoot.querySelectorAll(component.targetName);\r\n componentMatches.forEach(match => {\r\n const slottedClose = match.querySelectorAll('[slot=\"' + component.targetSlot + '\"]');\r\n\r\n if (slottedClose.length === 0) {\r\n match.appendChild(template.cloneNode(true));\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n private updateTemplates = () => {\r\n if (this.templates.size > 0) {\r\n return;\r\n }\r\n\r\n const slotted = this.element.shadowRoot.querySelectorAll('slot');\r\n const slottedArray = Array.from(slotted);\r\n const usedTemplates: Map = new Map();\r\n const templatableSlots = this.templatableComponents.map(comp => comp.slot);\r\n templatableSlots.forEach(slot => {\r\n const matchedSlots = slottedArray.filter((s: any) => s.name === slot);\r\n if (!this.templates.get(slot) && matchedSlots.length > 0 && matchedSlots[0].assignedElements().length > 0) {\r\n usedTemplates.set(slot, matchedSlots[0].assignedElements()[0]);\r\n }\r\n });\r\n\r\n this.templates = usedTemplates;\r\n }\r\n\r\n private getRootNode(): DocumentOrShadowRoot {\r\n return this.element.getRootNode() as unknown as DocumentOrShadowRoot;\r\n }\r\n\r\n private scheduleAfterRender(callback: () => void) {\r\n this.scheduledCallbacks.push(callback);\r\n }\r\n\r\n private handleTabHeaderFocus(pane: IgcContentPane) {\r\n if (!this._tabHeaderIconClicked) {\r\n this.setActivePane(pane);\r\n }\r\n }\r\n\r\n private handleContentPaneFocus(pane: IgcContentPane) {\r\n this.setActivePane(pane);\r\n }\r\n\r\n private handleUnpinnedHeaderFocus(pane: IgcContentPane) {\r\n // delay the setting of the active pane, in case the unpinned tab is clicked it should focus the content pane first\r\n requestAnimationFrame(() => {\r\n this.setActivePane(pane);\r\n });\r\n }\r\n\r\n private setFocus(pane: IgcContentPane) {\r\n if (!pane) { return; }\r\n this.paneToFocus = null;\r\n\r\n let elemToFocus = this.contentPanesElementMap.get(pane);\r\n\r\n if (!elemToFocus) {\r\n elemToFocus = this.tabHeadersMap.get(pane);\r\n }\r\n\r\n if (!elemToFocus) {\r\n elemToFocus = this.unpinnedHeadersMap.get(pane);\r\n }\r\n\r\n if (!elemToFocus) {\r\n throw new Error('No matching pane!');\r\n }\r\n\r\n elemToFocus.focus();\r\n }\r\n\r\n private setActivePane(pane: IgcContentPane) {\r\n if (this.activePane !== pane) {\r\n this.activePaneInternalSet = true;\r\n this.activePane = pane;\r\n }\r\n }\r\n\r\n private removeCustomContentEventListeners() {\r\n const dockManagerChildren = Array.from(this.element.children);\r\n dockManagerChildren.forEach(child => {\r\n child.removeEventListener('focusin', this.handleCustomContentFocusIn);\r\n });\r\n }\r\n\r\n private handleCustomContentFocusIn = (eventArgs: FocusEvent) => {\r\n const parent = eventArgs.currentTarget as HTMLElement;\r\n if (parent) {\r\n const contentPane = this.service.clientContentPanesMap.get(parent.slot);\r\n if (!contentPane) { return; }\r\n\r\n this.setActivePane(contentPane);\r\n }\r\n }\r\n\r\n private mutationCallback(records: MutationRecord[]) {\r\n records.filter(rec => rec.type === 'childList').forEach(child => {\r\n child.addedNodes.forEach(c => {\r\n c.addEventListener('focusin', this.handleCustomContentFocusIn);\r\n });\r\n\r\n child.removedNodes.forEach(r => {\r\n r.removeEventListener('focusin', this.handleCustomContentFocusIn);\r\n });\r\n });\r\n }\r\n\r\n private _isValidDrop = true;\r\n\r\n get isValidDrop() {\r\n return this._isValidDrop;\r\n }\r\n\r\n set isValidDrop(value: boolean) {\r\n if (this._isValidDrop !== value) {\r\n this._isValidDrop = value;\r\n document.body.style.cursor = this._isValidDrop ? 'default' : 'not-allowed';\r\n }\r\n }\r\n\r\n private handleShadowRootFocusOut = () => {\r\n if (this.paneToFocus) {\r\n return;\r\n }\r\n const rootNode = this.getRootNode();\r\n\r\n requestAnimationFrame(() => {\r\n if (!this.element.shadowRoot.activeElement && rootNode.activeElement === this.element && this.reason !== ActionReason.maximizeOrMinimize) {\r\n this.clearActivePane();\r\n }\r\n });\r\n }\r\n\r\n private restrictFloatingPaneSize() {\r\n if (this.containedInBoundaries) {\r\n const dockManagerRect = this.element.getBoundingClientRect();\r\n const floatingPanes = Array.from(this.element.shadowRoot.querySelectorAll('igc-floating-pane-component'));\r\n\r\n floatingPanes.forEach(floatingPane => {\r\n const paneElement = floatingPane.querySelector('igc-split-pane-component');\r\n const pane = this.panesElementMap.getByValue(paneElement) as IgcSplitPane;\r\n\r\n if (floatingPane.getBoundingClientRect().height > dockManagerRect.height) {\r\n floatingPane.floatingHeight = pane.floatingHeight = dockManagerRect.height;\r\n floatingPane.style.height = floatingPane.floatingHeight + 'px';\r\n }\r\n\r\n if (floatingPane.getBoundingClientRect().bottom > dockManagerRect.bottom) {\r\n floatingPane.floatingLocation.y = pane.floatingLocation.y = dockManagerRect.bottom - floatingPane.getBoundingClientRect().height;\r\n floatingPane.style.top = floatingPane.floatingLocation.y + 'px';\r\n }\r\n\r\n if (floatingPane.getBoundingClientRect().y < dockManagerRect.y) {\r\n floatingPane.floatingLocation.y = dockManagerRect.y;\r\n floatingPane.style.top = floatingPane.floatingLocation.y + 'px';\r\n }\r\n\r\n if (floatingPane.getBoundingClientRect().width > dockManagerRect.width) {\r\n floatingPane.floatingWidth = dockManagerRect.width;\r\n floatingPane.style.width = floatingPane.floatingWidth + 'px';\r\n }\r\n\r\n if (floatingPane.getBoundingClientRect().right > dockManagerRect.right) {\r\n floatingPane.floatingLocation.x = pane.floatingLocation.x = dockManagerRect.right - floatingPane.getBoundingClientRect().width;\r\n floatingPane.style.left = floatingPane.floatingLocation.x + 'px';\r\n }\r\n\r\n if (floatingPane.getBoundingClientRect().left < dockManagerRect.left) {\r\n floatingPane.floatingLocation.x = dockManagerRect.x;\r\n floatingPane.style.left = floatingPane.floatingLocation.x + 'px';\r\n }\r\n });\r\n }\r\n }\r\n\r\n private isPaneSizeWithinConstraints(pane: HTMLElement, offset: number, orientation: IgcSplitPaneOrientation, position: 'previous' | 'next' = 'next'): boolean {\r\n let size, minSize, maxSize: number;\r\n\r\n if (orientation === IgcSplitPaneOrientation.horizontal) {\r\n size = pane.getBoundingClientRect().width;\r\n minSize = parseFloat(getComputedStyle(pane).minWidth);\r\n maxSize = parseFloat(getComputedStyle(pane).maxWidth);\r\n } else {\r\n size = pane.getBoundingClientRect().height;\r\n minSize = parseFloat(getComputedStyle(pane).minHeight);\r\n maxSize = parseFloat(getComputedStyle(pane).maxHeight);\r\n }\r\n\r\n if (position === 'previous') {\r\n return offset < 0 ? ((size + offset) >= minSize || isNaN(minSize)) : ((size + offset) <= maxSize || isNaN(maxSize))\r\n }\r\n\r\n return offset > 0 ? ((size - offset) >= minSize || isNaN(minSize)) : ((size - offset) <= maxSize || isNaN(maxSize));\r\n }\r\n\r\n private handleFlyoutSplitterResizeEnd(pane: IgcContentPane, orientation: IgcSplitPaneOrientation, event: CustomEvent) {\r\n const splitter = event.target as HTMLElement;\r\n const previousPane = splitter.previousElementSibling as HTMLElement;\r\n const minSize = orientation === IgcSplitPaneOrientation.horizontal\r\n ? parseFloat(getComputedStyle(previousPane).minWidth)\r\n : parseFloat(getComputedStyle(previousPane).minHeight);\r\n\r\n if (!isNaN(minSize) && (minSize > pane.unpinnedSize || minSize > IGC_DEFAULT_UNPIN_PANE_SIZE)) {\r\n pane.unpinnedSize = minSize;\r\n }\r\n\r\n // If new pane size does not meet the size constraints, do not resize\r\n let offset = this.isPaneSizeWithinConstraints(previousPane, event.detail, orientation, 'previous') ? this.splitterOffset * event.detail : 0;\r\n\r\n this.service.resizeFlyoutPane(offset);\r\n\r\n let rect: DOMRect; \r\n rect = splitter.previousElementSibling.getBoundingClientRect();\r\n const paneWidth = orientation === IgcSplitPaneOrientation.horizontal ? rect.width + offset : rect.width;\r\n const paneHeight = orientation === IgcSplitPaneOrientation.vertical ? rect.height + offset : rect.height;\r\n this.splitterResizeEnd.emit({ pane, orientation, paneWidth, paneHeight });\r\n }\r\n\r\n private handleSplitterResizeStart(pane: IgcDockManagerPane, event: { target: IgcSplitterComponent }) {\r\n const splitter = event.target;\r\n const orientation = splitter.splitPaneOrientation;\r\n let rect: DOMRect;\r\n const splitterEl = event.target as unknown as HTMLElement;\r\n rect = pane === this.flyoutPane ? splitterEl.previousElementSibling.getBoundingClientRect() : splitterEl.nextElementSibling.getBoundingClientRect();\r\n const paneWidth = rect.width;\r\n const paneHeight = rect.height;\r\n const resizeStartEvent = this.splitterResizeStart.emit({ pane, orientation, paneWidth, paneHeight });\r\n\r\n if (resizeStartEvent.defaultPrevented) {\r\n this.splitterOffset = 0;\r\n splitter.showDragGhost = false;\r\n } else {\r\n this.splitterOffset = 1;\r\n splitter.showDragGhost = true;\r\n }\r\n }\r\n\r\n private handleSplitterResizeEnd(parentPane: IgcSplitPane, pane: IgcDockManagerPane, event: CustomEvent) {\r\n const splitter = event.target as HTMLElement;\r\n const previousPane = splitter.previousElementSibling as HTMLElement;\r\n const nextPane = splitter.nextElementSibling as HTMLElement;\r\n const splitPane = splitter.parentElement;\r\n const splitPaneChildren = Array.from(splitPane.children);\r\n const paneComponents = splitPaneChildren.filter(c => c.tagName.toLowerCase() !== 'igc-splitter-component');\r\n\r\n const sizeProperty = parentPane.orientation === IgcSplitPaneOrientation.horizontal ? 'offsetWidth' : 'offsetHeight';\r\n const sizeSum = paneComponents.reduce((s, p: HTMLElement) => p[sizeProperty] + s, 0);\r\n\r\n // If the new size is smaller or bigger that the size constraints, do not resize\r\n const offset = this.isPaneSizeWithinConstraints(previousPane, event.detail, parentPane.orientation, 'previous') && this.isPaneSizeWithinConstraints(nextPane, event.detail, parentPane.orientation) ? event.detail : 0;\r\n let offsetPercentage = this.splitterOffset * offset / sizeSum;\r\n\r\n let rtl = false;\r\n if (this.element.dir !== '') {\r\n rtl = this.element.dir === 'rtl';\r\n } else {\r\n let parent = this.element.parentElement;\r\n while (parent) {\r\n if (parent.dir !== '') {\r\n rtl = parent.dir === 'rtl';\r\n break;\r\n }\r\n\r\n parent = parent.parentElement;\r\n }\r\n }\r\n\r\n if (rtl && parentPane.orientation === IgcSplitPaneOrientation.horizontal) {\r\n offsetPercentage *= -1;\r\n }\r\n\r\n this.service.resizePane(pane, offsetPercentage);\r\n const orientation = parentPane.orientation;\r\n let rect: DOMRect;\r\n rect = splitter.nextElementSibling.getBoundingClientRect();\r\n const paneWidth = orientation === IgcSplitPaneOrientation.horizontal ? rect.width - offsetPercentage*sizeSum : rect.width;\r\n const paneHeight = orientation === IgcSplitPaneOrientation.vertical ? rect.height - offsetPercentage*sizeSum : rect.height;\r\n this.splitterResizeEnd.emit({ pane, orientation, paneWidth, paneHeight });\r\n }\r\n\r\n private clearActivePane() {\r\n if (this.activePane && this.shouldClearActivePane && this.reason !== ActionReason.drop) {\r\n this.setActivePane(null);\r\n }\r\n }\r\n\r\n private handlePinToggle(pane: IgcContentPane) {\r\n const isPinned = this.service.getActualIsPinned(pane);\r\n const pinBehavior = !isPinned ? IgcPinBehavior.selectedPane : IgcPinBehavior.allPanes;\r\n\r\n this.shouldClearActivePane = false;\r\n this.service.togglePin(pane, pinBehavior);\r\n this.scheduleAfterRender(() => {\r\n this.shouldClearActivePane = true;\r\n this.setFocus(pane);\r\n });\r\n }\r\n\r\n private handlePaneClose(pane: IgcContentPane) {\r\n this.focusElement();\r\n this.service.closePane(pane);\r\n }\r\n\r\n private handleFloatingPaneClose(pane: IgcSplitPane) {\r\n this.focusElement();\r\n this.service.closeFloatingPane(pane);\r\n }\r\n\r\n private handleMaximize(pane: any) {\r\n this.service.maximizePane(pane);\r\n this.scheduleAfterRender(() => {\r\n const paneToFocus = this.findFocusablePane([pane]);\r\n this.setFocus(paneToFocus);\r\n });\r\n }\r\n\r\n private handleUnpinnedTabMouseDown(pane: IgcContentPane, event: MouseEvent) {\r\n const target = event.currentTarget as HTMLElement;\r\n const rootNode = this.getRootNode();\r\n this.contentPaneId = pane.id;\r\n requestAnimationFrame(() => {\r\n if (this.element === rootNode.activeElement || !this.element.contains(rootNode.activeElement)) {\r\n target.focus();\r\n }\r\n\r\n this.handlePaneFlyout(pane);\r\n });\r\n }\r\n\r\n private handlePaneFlyout(pane: IgcContentPane) {\r\n this.service.flyoutPane(pane);\r\n }\r\n\r\n private handleUnpinnedTabKeyDown(pane: IgcContentPane, event: KeyboardEvent) {\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n this.handlePaneFlyout(pane);\r\n }\r\n }\r\n\r\n private handlePaneDragStart(pane: IgcSplitPane | IgcContentPane, event: CustomEvent) {\r\n let rect: DOMRect;\r\n\r\n if (pane.type === IgcDockManagerPaneType.contentPane) {\r\n const header = event.target as HTMLElement;\r\n const parent = this.service.getParent(pane);\r\n\r\n rect = (pane !== this.flyoutPane && parent.type === IgcDockManagerPaneType.tabGroupPane) ?\r\n header.closest('igc-tabs-component').getBoundingClientRect() :\r\n header.parentElement.getBoundingClientRect();\r\n this.contentPaneId = pane.contentId;\r\n }\r\n\r\n this.shouldClearActivePane = false;\r\n this.focusElement();\r\n const dragStarted = this.service.dragPaneStart(pane, rect, event.detail.clientX, event.detail.clientY);\r\n this.isDragging = true;\r\n this.scheduleAfterRender(() => {\r\n this.shouldClearActivePane = true;\r\n if (pane.type === IgcDockManagerPaneType.contentPane) {\r\n this.contentPaneId = pane.contentId;\r\n return;\r\n }\r\n if (pane.type === IgcDockManagerPaneType.splitPane) {\r\n const targetPane = this.findFocusablePane(pane.panes);\r\n if (targetPane) {\r\n this.contentPaneId = targetPane.contentId;\r\n this.setActivePane(targetPane);\r\n }\r\n }\r\n });\r\n\r\n if (!dragStarted) {\r\n this.isDragging = false;\r\n event.detail.cancel = true;\r\n } else {\r\n this.service.dockManagerRect = this.element.getBoundingClientRect();\r\n }\r\n }\r\n\r\n private handlePaneDragMove(event: CustomEvent) {\r\n this.paneDragMoved(event.detail.clientX, event.detail.clientY, event);\r\n }\r\n\r\n private paneDragMoved(clientX: number, clientY: number, event?: CustomEvent) {\r\n this.handleDropPositionChange(clientX, clientY, event?.target);\r\n\r\n const x = event?.detail.clientX;\r\n const y = event?.detail.clientY;\r\n\r\n this.cursorLocation = { x, y };\r\n\r\n if (this.proximityDock) {\r\n this.service.proximityDockPosition = this.getProximityDockPosition();\r\n this.service.dropTargetParentRect = this.getInnerDropTargetParentRect();\r\n }\r\n\r\n const dragMoved = this.service.dragPaneMove(x, y);\r\n\r\n if (event && !dragMoved) {\r\n event.detail.cancel = true;\r\n }\r\n }\r\n\r\n private getInnerDropTargetParentRect() {\r\n if (this.dropTargetPaneInfo && this.service.proximityDockPosition) {\r\n const targetDocHostParent = this.service.getParent(this.dropTargetPaneInfo.docHost) as IgcSplitPane;\r\n\r\n // In proximityDock, targetDocHostParent can be undefined when elementsFromPoint returns an empty splitPane meaning the dragged pane is over it.\r\n const isIndicatorVertical = targetDocHostParent && Utils.isDockingIndicatorVertical(this.service.proximityDockPosition as IgcDockingIndicatorPosition);\r\n const isSplitPaneVertical = targetDocHostParent && Utils.isSplitPaneVertical(targetDocHostParent);\r\n const isSameSplitPane = ((isIndicatorVertical && isSplitPaneVertical) || (!isIndicatorVertical && !isSplitPaneVertical));\r\n\r\n // If its over splitter or if docHost without splitter -> outer dock\r\n // For top/bottom outer dock we need the docHost's parent rect\r\n // For left/right outer dock we need the docHost's rootPane rect\r\n // If its not over splitter -> innerDock\r\n const targetPaneParent = this.allowOuterProximityDock && Utils.isDockingIndicatorOuter(this.service.proximityDockPosition as IgcDockingIndicatorPosition)\r\n ? isSameSplitPane\r\n ? targetDocHostParent\r\n : this.dropTargetPaneInfo.docHost.rootPane\r\n : this.service.getParent(this.dropTargetPaneInfo.pane);\r\n\r\n const targetPaneParentRect = this.panesElementMap.has(targetPaneParent) ? this.panesElementMap.get(targetPaneParent).getBoundingClientRect() : null;\r\n return targetPaneParentRect;\r\n }\r\n }\r\n\r\n private getProximityDockPosition() {\r\n const dropTarget = this.dropTargetPaneInfo;\r\n\r\n if (!dropTarget) {\r\n return null;\r\n }\r\n\r\n const pane = dropTarget.pane;\r\n const targetPaneRect = dropTarget.targetRect;\r\n const centerX = (targetPaneRect.left + targetPaneRect.right) / 2;\r\n const centerY = (targetPaneRect.top + targetPaneRect.bottom) / 2;\r\n const isRTL = this.direction === 'rtl';\r\n\r\n const targetPane = pane.type === IgcDockManagerPaneType.tabGroupPane && pane.selectedIndex > -1\r\n ? pane.panes[pane.selectedIndex]\r\n : pane;\r\n\r\n const acceptsInnerDock = targetPane.type === IgcDockManagerPaneType.contentPane && targetPane.acceptsInnerDock !== undefined && this.allowInnerDock\r\n ? targetPane.acceptsInnerDock\r\n : this.allowInnerDock;\r\n\r\n const isOverSplitter = this.splitterRect\r\n ? this.cursorLocation.x >= this.splitterRect.left\r\n && this.cursorLocation.x <= this.splitterRect.right\r\n && this.cursorLocation.y >= this.splitterRect.top\r\n && this.cursorLocation.y <= this.splitterRect.bottom\r\n : false;\r\n\r\n // If outer proximity dock is enabled, check if there is splitter and if mouse is within splitter boundaries.\r\n if (this.allowOuterProximityDock && this.splitterRect) {\r\n if (this.cursorLocation.x >= this.splitterRect.left - this.proximityOuterDockThreshold\r\n && this.cursorLocation.x <= this.splitterRect.left) {\r\n return IgcDockingIndicatorPosition.outerLeft;\r\n } else if (this.cursorLocation.x <= this.splitterRect.right + this.proximityOuterDockThreshold\r\n && this.cursorLocation.x >= this.splitterRect.right) {\r\n return IgcDockingIndicatorPosition.outerRight;\r\n }\r\n }\r\n\r\n const allowOuterTopDock = this.allowOuterProximityDock && this.cursorLocation.y < targetPaneRect.top + this.proximityOuterDockThreshold;\r\n const allowOuterBottomDock = this.allowOuterProximityDock && this.cursorLocation.y > targetPaneRect.bottom - this.proximityOuterDockThreshold;\r\n const allowOuterLeftDock = this.allowOuterProximityDock && this.cursorLocation.x < targetPaneRect.left + this.proximityOuterDockThreshold;\r\n const allowOuterRightDock = this.allowOuterProximityDock && this.cursorLocation.x > targetPaneRect.right - this.proximityOuterDockThreshold;\r\n\r\n if (this.cursorLocation.y > targetPaneRect.bottom - this.proximityDockThreshold\r\n && this.cursorLocation.x - targetPaneRect.left > targetPaneRect.bottom - this.cursorLocation.y\r\n && targetPaneRect.right - this.cursorLocation.x > targetPaneRect.bottom - this.cursorLocation.y\r\n && !isOverSplitter ) {\r\n return allowOuterBottomDock ? IgcDockingIndicatorPosition.outerBottom : IgcDockingIndicatorPosition.bottom;\r\n } else if (this.cursorLocation.y < targetPaneRect.top + this.proximityDockThreshold\r\n && this.cursorLocation.x - targetPaneRect.left > this.cursorLocation.y - targetPaneRect.top\r\n && targetPaneRect.right - this.cursorLocation.x > this.cursorLocation.y - targetPaneRect.top\r\n && !isOverSplitter) {\r\n return allowOuterTopDock ? IgcDockingIndicatorPosition.outerTop : IgcDockingIndicatorPosition.top;\r\n } else if (acceptsInnerDock\r\n && this.cursorLocation.x > centerX - this.proximityDockThreshold\r\n && this.cursorLocation.x < centerX + this.proximityDockThreshold\r\n && this.cursorLocation.y > centerY - this.proximityDockThreshold\r\n && this.cursorLocation.y < centerY + this.proximityDockThreshold\r\n && !isOverSplitter ) {\r\n return IgcDockingIndicatorPosition.center;\r\n } else if (!isRTL && this.cursorLocation.x < targetPaneRect.left + this.proximityDockThreshold\r\n && this.cursorLocation.y - targetPaneRect.top > this.cursorLocation.x - targetPaneRect.left\r\n && targetPaneRect.bottom - this.cursorLocation.y > this.cursorLocation.x - targetPaneRect.left) {\r\n return allowOuterLeftDock ? IgcDockingIndicatorPosition.outerLeft : IgcDockingIndicatorPosition.left;\r\n } else if (!isRTL && this.cursorLocation.x > targetPaneRect.right - this.proximityDockThreshold\r\n && this.cursorLocation.y - targetPaneRect.top > targetPaneRect.right - this.cursorLocation.x\r\n && targetPaneRect.bottom - this.cursorLocation.y > targetPaneRect.right - this.cursorLocation.x) {\r\n return allowOuterRightDock ? IgcDockingIndicatorPosition.outerRight : IgcDockingIndicatorPosition.right;\r\n } else if (isRTL && this.cursorLocation.x > targetPaneRect.right - this.proximityDockThreshold\r\n && targetPaneRect.bottom - this.cursorLocation.y > this.cursorLocation.x - targetPaneRect.right\r\n && this.cursorLocation.y - targetPaneRect.top > this.cursorLocation.x - targetPaneRect.right) {\r\n return allowOuterRightDock ? IgcDockingIndicatorPosition.outerRight : IgcDockingIndicatorPosition.right;\r\n } else if (isRTL && this.cursorLocation.x < targetPaneRect.left + this.proximityDockThreshold\r\n && targetPaneRect.bottom - this.cursorLocation.y > targetPaneRect.left - this.cursorLocation.x\r\n && this.cursorLocation.y - targetPaneRect.top > targetPaneRect.left - this.cursorLocation.x) {\r\n return allowOuterLeftDock ? IgcDockingIndicatorPosition.outerLeft : IgcDockingIndicatorPosition.left;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private handlePaneDragEnd(): boolean {\r\n const docked = this.service.dragPaneEnd();\r\n this.isDragging = false;\r\n\r\n if (docked) {\r\n const activePane = this.activePane;\r\n this.shouldClearActivePane = false;\r\n this.reason = ActionReason.drop;\r\n this.focusElement();\r\n if (activePane) {\r\n this.scheduleAfterRender(() => {\r\n this.setActivePane(activePane);\r\n });\r\n }\r\n\r\n this.scheduleAfterRender(() => {\r\n this.shouldClearActivePane = true;\r\n });\r\n }\r\n\r\n if (this.activePane) {\r\n this.setFocus(this.activePane);\r\n }\r\n\r\n return docked;\r\n }\r\n\r\n private handleTabHeaderDragStart(pane: IgcContentPane, event: CustomEvent) {\r\n this.shouldMovePane = false;\r\n\r\n const path = this.service.getPanePath(pane);\r\n const rootParent = path[0] as IgcSplitPane;\r\n if (rootParent !== this.layout.rootPane &&\r\n path.some(p => p.type === IgcDockManagerPaneType.documentHost)) {\r\n const childPanes = this.service.getChildContentPanes(rootParent);\r\n if (childPanes.length === 1) {\r\n // pane is a single document host tab in a floating pane\r\n this.shouldMovePane = true;\r\n\r\n return this.handlePaneDragStart(rootParent, event);\r\n }\r\n }\r\n\r\n this.shouldClearActivePane = false;\r\n this.focusElement();\r\n const dragStarted = this.service.dragTabStart(pane);\r\n this.isDragging = true;\r\n this.scheduleAfterRender(() => {\r\n this.shouldClearActivePane = true;\r\n });\r\n\r\n if (!dragStarted) {\r\n this.isDragging = false;\r\n event.detail.cancel = true;\r\n }\r\n }\r\n\r\n private handleTabHeaderDragMove(pane: IgcContentPane, event: CustomEvent) {\r\n if (this.shouldMovePane) {\r\n return this.handlePaneDragMove(event);\r\n }\r\n\r\n const header = event.target as HTMLIgcTabHeaderComponentElement;\r\n const headerRect = header.getBoundingClientRect();\r\n const tabs = header.closest('igc-tabs-component');\r\n const tabsRect = tabs.getBoundingClientRect();\r\n const tabHeaders = Array.from(tabs.querySelectorAll('igc-tab-header-component'));\r\n const headerIndex = tabHeaders.indexOf(header);\r\n\r\n const prevHeaderRect = headerIndex > 0 ? tabHeaders[headerIndex - 1].getBoundingClientRect() : null;\r\n const nextHeaderRect = headerIndex < tabHeaders.length - 1 ? tabHeaders[headerIndex + 1].getBoundingClientRect() : null;\r\n const lastVisibleHeaderRect = tabHeaders.filter(th => th.getBoundingClientRect().top === headerRect.top).slice(-1)[0].getBoundingClientRect();\r\n\r\n const tabRectsInfo = {\r\n headerRect,\r\n prevHeaderRect,\r\n nextHeaderRect,\r\n lastVisibleHeaderRect,\r\n tabsRect\r\n };\r\n\r\n this.handleDropPositionChange(event.detail.clientX, event.detail.clientY, event?.target);\r\n const tabMoved = this.service.dragTabMove(pane, event.detail, tabRectsInfo);\r\n\r\n if (event && !tabMoved) {\r\n event.detail.cancel = true;\r\n }\r\n }\r\n\r\n private handleTabHeaderDragEnd(pane: IgcContentPane) {\r\n const docked = this.handlePaneDragEnd();\r\n\r\n if (!docked) {\r\n this.activePane = pane;\r\n }\r\n }\r\n\r\n private handleFloatingPaneResizeStart(pane: IgcSplitPane, event: CustomEvent) {\r\n const args = event.detail;\r\n\r\n this.isDragging = true;\r\n\r\n const resizeStarted = this.service.resizeFloatingPaneStart(pane, args.resizerLocation);\r\n if (!resizeStarted) {\r\n this.isDragging = false;\r\n args.dragMoveArgs.cancel = true;\r\n }\r\n }\r\n\r\n private handleFloatingPaneResizeMove(pane: IgcSplitPane, event: CustomEvent) {\r\n this.service.resizeFloatingPane(pane, event.detail);\r\n }\r\n\r\n private handleFloatingPaneResizeEnd(pane: IgcSplitPane, event: CustomEvent) {\r\n this.isDragging = false;\r\n this.service.resizeFloatingPaneEnd(pane, event.detail.resizerLocation);\r\n }\r\n\r\n private handleDropPositionChange(clientX: number, clientY: number, target?: EventTarget) {\r\n const elements = clientX && clientY ?\r\n this.element.shadowRoot.elementsFromPoint(clientX, clientY) :\r\n null;\r\n\r\n let isOverSplitter = false;\r\n this.splitterRect = null;\r\n\r\n const splitter = elements ? elements.filter(e => e.tagName.toLowerCase() === 'igc-splitter-component') : [];\r\n\r\n if (splitter.length > 0) {\r\n const splitterIndex = elements.indexOf(splitter[0]);\r\n const adjacentElement = elements[splitterIndex - 1];\r\n isOverSplitter = adjacentElement &&\r\n adjacentElement.tagName.toLowerCase() === 'igc-floating-pane-component' &&\r\n (adjacentElement as any).floatingId === this.draggedPane?.id; // if not equal - splitter is below another element, not directly over\r\n }\r\n\r\n if (this.proximityDock) {\r\n const docHost = elements ? elements.filter(e => e.tagName.toLowerCase() === 'igc-document-host-component') : [];\r\n\r\n if (docHost.length > 0) {\r\n const splitter = docHost[0].querySelector('igc-splitter-component');\r\n\r\n if (splitter) {\r\n const splitterRect = splitter.getBoundingClientRect();\r\n this.splitterRect = splitterRect;\r\n }\r\n\r\n this.allowOuterProximityDock = true;\r\n } else {\r\n this.allowOuterProximityDock = false;\r\n }\r\n }\r\n\r\n if (!elements || !elements.length || (isOverSplitter && this.splitterRect === null)) {\r\n this.service.dockingIndicator = null;\r\n this.dropTargetPaneInfo = null;\r\n return;\r\n }\r\n\r\n const topElement = elements[0];\r\n let indicatorTarget = null;\r\n let dockingIndicatorElement: HTMLElement = topElement.closest('igc-root-docking-indicator-component');\r\n\r\n if (dockingIndicatorElement) {\r\n this.service.dockingIndicator = {\r\n position: (dockingIndicatorElement as HTMLIgcRootDockingIndicatorComponentElement).position,\r\n isRoot: true,\r\n direction: this.direction\r\n };\r\n }\r\n\r\n if (!dockingIndicatorElement) {\r\n const joystickIcon = topElement.closest('igc-joystick-icon-component');\r\n\r\n if (joystickIcon && !joystickIcon.empty) {\r\n dockingIndicatorElement = joystickIcon;\r\n this.service.dockingIndicator = {\r\n position: joystickIcon.position,\r\n isRoot: false,\r\n direction: this.direction\r\n };\r\n const joystickIndicator = joystickIcon.closest('igc-joystick-indicator-component');\r\n indicatorTarget = joystickIndicator.dropTargetPaneInfo;\r\n }\r\n }\r\n\r\n if (dockingIndicatorElement &&\r\n (this.service.dockingIndicator.isRoot || this.dropTargetPaneInfo === indicatorTarget)) {\r\n\r\n this.service.dropTargetParentRect = this.getDropTargetParentRect();\r\n return;\r\n }\r\n\r\n this.service.dockingIndicator = null;\r\n\r\n if (target) {\r\n const draggedHeader = target as HTMLElement;\r\n const draggedFloatingPane = draggedHeader.closest('igc-floating-pane-component');\r\n const topFloatingPane = elements.find(e => e.tagName.toLowerCase() === 'igc-floating-pane-component');\r\n\r\n if (topFloatingPane === draggedFloatingPane) {\r\n const index = elements.lastIndexOf(draggedFloatingPane);\r\n elements.splice(0, index + 1);\r\n }\r\n }\r\n\r\n let paneElement: HTMLElement;\r\n\r\n for (const element of elements) {\r\n const tagName = element.tagName.toLowerCase();\r\n\r\n if (tagName === 'igc-content-pane-component' || tagName === 'igc-split-pane-component') {\r\n if (paneElement) {\r\n break;\r\n }\r\n paneElement = element as HTMLElement;\r\n // Not sure why we dont break after finding split-pane first. This works with proximityDock so its temporarily here.\r\n // When we are over splitter and proximityDock is true, break after finding the first suitable splitPane.\r\n if (this.allowOuterProximityDock) {\r\n break;\r\n }\r\n\r\n } else if (tagName === 'igc-tabs-component' || tagName === 'igc-document-host-component') {\r\n paneElement = element as HTMLElement;\r\n break;\r\n } else if (tagName === 'igc-floating-pane-component') {\r\n break;\r\n }\r\n }\r\n\r\n if (paneElement) {\r\n const dropPane = this.panesElementMap.getByValue(paneElement);\r\n\r\n if ((!this.dropTargetPaneInfo || this.dropTargetPaneInfo.pane !== dropPane) && dropPane !== this.draggedPane) {\r\n const docHost = this.service.getDocHostParent(dropPane);\r\n const dropPaneRoot = this.service.getRootParent(dropPane);\r\n const floatingPaneWithoutDocHost = this.layout.floatingPanes\r\n ? this.layout.floatingPanes.indexOf(dropPaneRoot) !== -1 &&\r\n !this.service.getChildDocHostRecursive(dropPaneRoot)\r\n : false;\r\n\r\n if (!this.documentOnlyDrag\r\n || docHost\r\n || floatingPaneWithoutDocHost\r\n || dropPane.type === IgcDockManagerPaneType.documentHost) {\r\n this.dropTargetPaneInfo = {\r\n pane: dropPane,\r\n targetRect: paneElement.getBoundingClientRect(),\r\n docHost,\r\n floatingPaneWithoutDocHost\r\n };\r\n } else {\r\n this.dropTargetPaneInfo = null;\r\n }\r\n }\r\n } else {\r\n this.dropTargetPaneInfo = null;\r\n }\r\n }\r\n\r\n private getDropTargetParentRect() {\r\n const position = this.service.dockingIndicator.position;\r\n let rect;\r\n if (this.service.dockingIndicator.isRoot) {\r\n rect = this.dockedPanesContainer.getBoundingClientRect();\r\n } else {\r\n if (Utils.isDockingIndicatorOuter(position as IgcDockingIndicatorPosition)) {\r\n const targetDocHostParent = this.service.getParent(this.dropTargetPaneInfo.docHost) as IgcSplitPane;\r\n const isIndicatorVertical = Utils.isDockingIndicatorVertical(position as IgcDockingIndicatorPosition);\r\n const isSplitPaneVertical = Utils.isSplitPaneVertical(targetDocHostParent);\r\n const isSameSplitPane = ((isIndicatorVertical && isSplitPaneVertical) || (!isIndicatorVertical && !isSplitPaneVertical));\r\n const outerParent = isSameSplitPane ? targetDocHostParent : this.dropTargetPaneInfo.docHost.rootPane;\r\n const outerParentRect = this.panesElementMap.has(outerParent) ? this.panesElementMap.get(outerParent).getBoundingClientRect() : null;\r\n rect = outerParentRect;\r\n } else {\r\n const targetPaneParent = this.service.getParent(this.dropTargetPaneInfo.pane);\r\n const targetPaneParentRect = this.panesElementMap.has(targetPaneParent) ? this.panesElementMap.get(targetPaneParent).getBoundingClientRect() : null;\r\n rect = targetPaneParentRect;\r\n }\r\n }\r\n\r\n return rect;\r\n }\r\n\r\n private handlePaneContentMouseDown(pane: IgcContentPane) {\r\n requestAnimationFrame(() => {\r\n const rootNode = this.getRootNode();\r\n if (this.element === rootNode.activeElement || !this.element.contains(rootNode.activeElement)) {\r\n this.setFocus(pane);\r\n this.contentPaneId = pane.contentId;\r\n }\r\n });\r\n }\r\n\r\n private handlePaneContentScroll(pane: IgcContentPane, event: CustomEvent) {\r\n const contentElement = event.target as HTMLElement;\r\n const args: IgcPaneScrollEventArgs = {pane, contentElement: contentElement}\r\n\r\n this.paneScroll.emit(args);\r\n }\r\n\r\n private handlePaneHeaderMouseDown(pane: IgcContentPane) {\r\n const rootNode = this.getRootNode();\r\n requestAnimationFrame(() => {\r\n this.contentPaneId = pane.contentId;\r\n if (this.element === rootNode.activeElement || !this.element.contains(rootNode.activeElement)) {\r\n const paneElement = this.contentPanesElementMap.get(pane);\r\n paneElement.focus();\r\n } else {\r\n this.setActivePane(pane);\r\n }\r\n });\r\n }\r\n\r\n private handleTabHeaderMouseDown(pane: IgcContentPane, event: MouseEvent) {\r\n const target = event.currentTarget as HTMLElement;\r\n const rootNode = this.getRootNode();\r\n\r\n const pathHTMLElements = event.composedPath().filter(et => et instanceof HTMLElement).map(et => et as HTMLElement);\r\n this._tabHeaderIconClicked = this.showHeaderIconOnHover &&\r\n pathHTMLElements.filter(el => el.attributes.getNamedItem('part') && el.attributes.getNamedItem('part').value === 'tab-header-more-options floating').length > 0;\r\n\r\n requestAnimationFrame(() => {\r\n this.contentPaneId = pane.contentId;\r\n this.reason = ActionReason.click;\r\n if (this.element === rootNode.activeElement || !this.element.contains(rootNode.activeElement)) {\r\n target.focus();\r\n } else {\r\n this.setActivePane(pane);\r\n }\r\n });\r\n }\r\n\r\n private handleFloatingPaneMouseDown(pane: IgcSplitPane, event: MouseEvent) {\r\n const pathHTMLElements = event.composedPath().filter(e => e instanceof HTMLElement).map(e => e as HTMLElement);\r\n const isContextMenu = pathHTMLElements.filter(e => e.attributes.getNamedItem('part') && e.attributes.getNamedItem('part').value === 'context-menu').length > 0;\r\n if (isContextMenu) {\r\n return;\r\n }\r\n\r\n this.service.bringFloatingPaneOnTop(pane);\r\n\r\n const isTabs = pathHTMLElements.filter(e => e.attributes.getNamedItem('part') && e.attributes.getNamedItem('part').value === 'tabs-container').length > 0;\r\n if (isTabs) {\r\n return;\r\n }\r\n\r\n const isFloatingPaneHeader = pathHTMLElements.filter(e => e.attributes.getNamedItem('part') && e.attributes.getNamedItem('part').value === 'pane-header floating window').length > 0;\r\n if (isFloatingPaneHeader) {\r\n let targetPane: IgcContentPane;\r\n let parent = this.service.getParent(this.activePane);\r\n while (parent) {\r\n if (parent === pane) {\r\n targetPane = this.activePane;\r\n break;\r\n }\r\n\r\n parent = this.service.getParent(parent);\r\n }\r\n\r\n requestAnimationFrame(() => {\r\n if (!targetPane) {\r\n targetPane = this.findFocusablePane(pane.panes);\r\n }\r\n\r\n if (!targetPane) {\r\n targetPane = pane.panes[0] as IgcContentPane;\r\n }\r\n const nodeName = (event.target as HTMLElement).nodeName.toLowerCase();\r\n if (nodeName === 'igc-dockmanager') {\r\n this.setActivePane(targetPane);\r\n this.setFocus(targetPane);\r\n }\r\n\r\n this.contentPaneId = targetPane.contentId;\r\n });\r\n }\r\n }\r\n\r\n private handleTabIconClick(p: IgcContentPane, position: IgcTabHeadersPosition, isFloating: boolean, event: CustomEvent) {\r\n if (!this.showHeaderIconOnHover) {\r\n this.focusElement();\r\n }\r\n\r\n if (!isFloating && position === IgcTabHeadersPosition.bottom) {\r\n const elem = event.detail.target as HTMLElement;\r\n\r\n const tabHeader = elem.closest('igc-tab-header-component');\r\n const moreOptionsContainer: HTMLElement = tabHeader ?\r\n tabHeader.shadowRoot.querySelector('div[part*=\"tab-header-more-options\"]') :\r\n elem.closest('div[part*=\"tab-header-more-options\"]');\r\n\r\n this.contextMenuMeta = { target: moreOptionsContainer, menuItems: this.service.createContextMenuItems(p), position: this.contextMenuPosition };\r\n } else {\r\n this.contextMenuMeta = null;\r\n this.service.closeTabPane(p);\r\n }\r\n }\r\n\r\n private handleContextMenuClosed() {\r\n this.contextMenuMeta = null;\r\n }\r\n\r\n private handleTabSelectedIndexChanged(pane: IgcTabGroupPane, event: CustomEvent) {\r\n pane.selectedIndex = event.detail;\r\n }\r\n\r\n private handleHiddenTabSelected(pane: IgcTabGroupPane, event: CustomEvent) {\r\n this.activePane = this.service.getVisibleContentPanes(pane)[event.detail];\r\n }\r\n\r\n private handleSelectedTabOutOfView(pane: IgcTabGroupPane, event: CustomEvent) {\r\n const cp = this.service.getVisibleContentPanes(pane)[event.detail];\r\n this.service.selectHiddenTab(pane, cp);\r\n }\r\n\r\n private handleTabIconKeyDown(iconName: string, p: IgcContentPane, ev: CustomEvent) {\r\n if (iconName === 'arrow_drop_down' && ev.detail.key === 'ArrowDown') {\r\n const targetElem = ev.detail.target as HTMLElement;\r\n const tabHeader = targetElem.closest('igc-tab-header-component');\r\n const moreOptionsContainer: HTMLElement = tabHeader ?\r\n tabHeader.shadowRoot.querySelector('div[part=\"tab-header-more-options\"]') :\r\n targetElem.closest('div[part=\"tab-header-more-options\"]');\r\n\r\n this.contextMenuMeta = { target: moreOptionsContainer, menuItems: this.service.createContextMenuItems(p), position: this.contextMenuPosition };\r\n }\r\n }\r\n\r\n private handleTabSelectedChanged(pane: IgcContentPane, ev: CustomEvent) {\r\n if (ev.detail && pane === this.paneToFocus) {\r\n this.setFocus(pane);\r\n }\r\n }\r\n\r\n private emitPaneHeaderConnected(pane: IgcContentPane, event: CustomEvent) {\r\n this.paneHeaderConnected.emit({\r\n pane,\r\n element: event.detail\r\n });\r\n }\r\n\r\n private emitPaneHeaderDisconnected(pane: IgcContentPane, event: CustomEvent) {\r\n this.paneHeaderDisconnected.emit({\r\n pane,\r\n element: event.detail\r\n });\r\n }\r\n\r\n private emitTabHeaderConnected(pane: IgcContentPane, event: CustomEvent) {\r\n this.tabHeaderConnected.emit({\r\n pane,\r\n element: event.detail\r\n });\r\n }\r\n\r\n private emitTabHeaderDisconnected(pane: IgcContentPane, event: CustomEvent) {\r\n this.tabHeaderDisconnected.emit({\r\n pane,\r\n element: event.detail\r\n });\r\n }\r\n\r\n private resolveAllowMaximize(pane: IgcDockManagerPane): boolean {\r\n return this.service.resolveAllowMaximize(pane);\r\n }\r\n\r\n private removeHoveredPane() {\r\n this.hoveredPane = null;\r\n }\r\n\r\n private togglePaneHeaderVisibility(pane: IgcContentPane, event: MouseEvent) {\r\n const paneRect = this.contentPanesElementMap.get(pane).getBoundingClientRect();\r\n const withinPane = event.clientY >= paneRect.top && event.clientY < paneRect.top + PANE_HEADER_HEIGHT;\r\n\r\n if (withinPane) {\r\n this.hoveredPane = pane;\r\n } else {\r\n this.removeHoveredPane();\r\n }\r\n }\r\n\r\n private renderButtonsTemplates() {\r\n return (\r\n \r\n );\r\n }\r\n\r\n private renderContentPane(pane: IgcContentPane, isFloating: boolean, isFlyout: boolean) {\r\n const parentPane = this.service.getParent(pane);\r\n\r\n let forceDrag = false;\r\n let isSingleFloatingContentPane = false;\r\n let floatingPane: IgcSplitPane;\r\n\r\n if (isFloating) {\r\n floatingPane = this.service.getRootParent(pane);\r\n const hasHeader = this.service.hasFloatingPaneHeader(floatingPane);\r\n\r\n if (!hasHeader) {\r\n isSingleFloatingContentPane = true;\r\n\r\n if (this.service.forceDragPane === floatingPane) {\r\n this.service.forceDragPane = null;\r\n forceDrag = true;\r\n }\r\n }\r\n }\r\n\r\n const maximized = this.maximizedPane === pane ||\r\n (parentPane.type === IgcDockManagerPaneType.tabGroupPane && this.maximizedPane === parentPane) ||\r\n isFloating && isSingleFloatingContentPane && floatingPane === this.maximizedPane;\r\n\r\n return (\r\n {\r\n if (el) {\r\n this.panesElementMap.set(pane, el);\r\n this.contentPanesElementMap.set(pane, el);\r\n }\r\n }}\r\n class={{\r\n 'maximized': this.maximizedPane === pane\r\n }}\r\n header={pane.header}\r\n onFocusin={this.handleContentPaneFocus.bind(this, pane)}\r\n >\r\n \r\n {(isFloating && pane.floatingHeaderId) ? :\r\n pane.headerId ? :\r\n pane.header}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n private renderSplitter(parentPane: IgcSplitPane, pane: IgcDockManagerPane) {\r\n return (\r\n \r\n \r\n );\r\n }\r\n\r\n private renderDocumentHost(docHost: IgcDocumentHost) {\r\n return (\r\n {\r\n if (el) {\r\n this.panesElementMap.set(docHost, el);\r\n }\r\n }}\r\n >\r\n {this.renderSplitPane(docHost.rootPane, false, true)}\r\n \r\n );\r\n }\r\n\r\n private renderTabGroup(pane: IgcTabGroupPane | IgcContentPane, isFloating: boolean, isInDocumentHost: boolean) {\r\n let tabs = pane.type === IgcDockManagerPaneType.tabGroupPane ? pane.panes : [pane];\r\n tabs = tabs.filter(t => this.service.isContentPaneVisible(t));\r\n const selectedIndex = pane.type === IgcDockManagerPaneType.tabGroupPane && pane.selectedIndex ?\r\n pane.selectedIndex : 0;\r\n const position = isInDocumentHost ? IgcTabHeadersPosition.top : IgcTabHeadersPosition.bottom;\r\n const isSingleTab = tabs.length === 1 && position === IgcTabHeadersPosition.bottom;\r\n const allowEmpty = pane.type === IgcDockManagerPaneType.tabGroupPane ? pane.allowEmpty : false;\r\n const allowMaximize = this.resolveAllowMaximize(pane);\r\n\r\n let contentIds = [];\r\n if (pane.type === IgcDockManagerPaneType.tabGroupPane) {\r\n pane.panes.forEach(element => {\r\n contentIds.push(element.contentId);\r\n });\r\n } else {\r\n contentIds.push(pane.contentId);\r\n }\r\n\r\n return (allowEmpty || tabs.length > 0) && (\r\n {\r\n if (el) {\r\n this.panesElementMap.set(pane, el);\r\n }\r\n }}\r\n class={{\r\n 'maximized': this.maximizedPane === pane,\r\n }}\r\n >\r\n {isSingleTab ?\r\n this.renderTabPanel(tabs[0], false, isFloating) :\r\n tabs.map(p => {\r\n return [\r\n this.renderTabHeader(p, position, isFloating),\r\n this.renderTabPanel(p, isInDocumentHost, isFloating)\r\n ];\r\n })}\r\n \r\n );\r\n }\r\n\r\n private renderTabPanel(pane: IgcContentPane, isInDocumentHost: boolean, isFloating: boolean) {\r\n return (\r\n \r\n {isInDocumentHost ?\r\n :\r\n this.renderContentPane(pane, isFloating, false)}\r\n );\r\n }\r\n\r\n private renderTabHeader(pane: IgcContentPane, position: IgcTabHeadersPosition, isFloating: boolean) {\r\n let forceDrag = false;\r\n const allowClose = this.service.getActualAllowClose(pane);\r\n const allowPinning = pane.allowPinning !== false;\r\n const iconName = isFloating ?\r\n allowClose ? 'close' : null :\r\n position === IgcTabHeadersPosition.bottom ?\r\n allowClose || allowPinning ? 'arrow_drop_down' : null :\r\n allowClose ? 'close' : null;\r\n\r\n if (this.service.forceDragTabHeader === pane) {\r\n this.service.forceDragTabHeader = null;\r\n forceDrag = true;\r\n }\r\n\r\n return (\r\n {\r\n if (el) {\r\n this.tabHeadersMap.set(pane, el);\r\n }\r\n }}\r\n onFocusin={this.handleTabHeaderFocus.bind(this, pane)}\r\n >\r\n {\r\n pane.tabHeaderId ?\r\n :\r\n {pane.header}\r\n }\r\n );\r\n }\r\n\r\n private renderSplitPane(splitPane: IgcSplitPane, isFloating: boolean, isInDocumentHost: boolean) {\r\n const panes = this.service.getSplitPaneVisibleChildren(splitPane);\r\n\r\n return (splitPane.allowEmpty || panes.length > 0) && (\r\n {\r\n if (el) {\r\n this.panesElementMap.set(splitPane, el);\r\n }\r\n }}\r\n >\r\n {panes.map((p, i) => {\r\n let paneComponent;\r\n\r\n if (p.type === IgcDockManagerPaneType.splitPane) {\r\n paneComponent = this.renderSplitPane(p, isFloating, isInDocumentHost);\r\n } else if (p.type === IgcDockManagerPaneType.contentPane) {\r\n paneComponent = isInDocumentHost ?\r\n this.renderTabGroup(p, isFloating, true) :\r\n this.renderContentPane(p, isFloating, false);\r\n } else if (p.type === IgcDockManagerPaneType.documentHost) {\r\n paneComponent = this.renderDocumentHost(p);\r\n } else if (p.type === IgcDockManagerPaneType.tabGroupPane) {\r\n paneComponent = this.renderTabGroup(p, isFloating, isInDocumentHost);\r\n }\r\n\r\n return i > 0 ?\r\n [this.renderSplitter(splitPane, p), paneComponent] :\r\n paneComponent;\r\n })}\r\n \r\n );\r\n }\r\n\r\n private renderUnpinnedTabArea(location: IgcUnpinnedLocation) {\r\n const panes: IgcContentPane[] = [];\r\n const isHorizontal = location === IgcUnpinnedLocation.top || location === IgcUnpinnedLocation.bottom;\r\n const isLeft = location === IgcUnpinnedLocation.left;\r\n const isRight = location === IgcUnpinnedLocation.right;\r\n const isBottom = location === IgcUnpinnedLocation.bottom;\r\n\r\n this.service.unpinnedLocationMap.forEach((l, p) => {\r\n if (l === location && p.hidden !== true) {\r\n panes.push(p);\r\n }\r\n });\r\n\r\n const tabAreaClasses = {\r\n 'unpinned-tab-area': true,\r\n 'unpinned-tab-area--left': isLeft,\r\n 'unpinned-tab-area--right': isRight,\r\n 'unpinned-tab-area--bottom': isBottom,\r\n 'unpinned-tab-area--horizontal': isHorizontal,\r\n 'unpinned-tab-area--hidden': panes.length === 0\r\n };\r\n\r\n return (\r\n \r\n {panes.map(p => (\r\n {\r\n if (el) {\r\n const slot = el.querySelector('slot');\r\n if (slot && p.unpinnedHeaderId) {\r\n slot.name = p.unpinnedHeaderId;\r\n }\r\n this.unpinnedHeadersMap.set(p, el);\r\n }\r\n }}\r\n >\r\n {p.unpinnedHeaderId ? : p.header}\r\n \r\n ))}\r\n \r\n );\r\n }\r\n\r\n private renderFlyoutPane() {\r\n const location = this.service.unpinnedLocationMap.get(this.flyoutPane);\r\n const flyoutClasses = {\r\n 'flyout-pane': true,\r\n 'flyout-pane--right': location === IgcUnpinnedLocation.right,\r\n 'flyout-pane--bottom': location === IgcUnpinnedLocation.bottom,\r\n 'flyout-pane--left': location === IgcUnpinnedLocation.left,\r\n };\r\n\r\n let splitPaneOrientation = IgcSplitPaneOrientation.vertical;\r\n\r\n if (location === IgcUnpinnedLocation.left || location === IgcUnpinnedLocation.right) {\r\n splitPaneOrientation = IgcSplitPaneOrientation.horizontal;\r\n }\r\n\r\n const maximized = this.maximizedPane === this.flyoutPane;\r\n\r\n return this.flyoutPane && (\r\n
\r\n {this.renderContentPane(this.flyoutPane, false, true)}\r\n \r\n
\r\n );\r\n }\r\n\r\n private renderFloatingPanes() {\r\n return (\r\n
\r\n {this.layout?.floatingPanes?.map(p => {\r\n const panes = this.service.getSplitPaneVisibleChildren(p);\r\n\r\n if (panes.length === 0) {\r\n return null;\r\n }\r\n\r\n const hasHeader = this.service.hasFloatingPaneHeader(p);\r\n let forceDrag = false;\r\n if (p === this.service.forceDragPane && hasHeader) {\r\n this.service.forceDragPane = null;\r\n forceDrag = true;\r\n }\r\n\r\n const containsMaximizedPane = this.maximizedPane && this.service.getRootParent(this.maximizedPane) === p;\r\n\r\n return (\r\n \r\n {hasHeader ?\r\n \r\n : null\r\n }\r\n {this.renderSplitPane(p, true, false)}\r\n \r\n );\r\n })\r\n }\r\n
\r\n );\r\n }\r\n\r\n private renderRootDockingIndicator(position: IgcDockingIndicatorPosition) {\r\n return (\r\n \r\n \r\n );\r\n }\r\n\r\n private renderDockingIndicators() {\r\n const startPosition = this.direction !== 'rtl' ? IgcDockingIndicatorPosition.left : IgcDockingIndicatorPosition.right;\r\n const endPosition = this.direction !== 'rtl' ? IgcDockingIndicatorPosition.right : IgcDockingIndicatorPosition.left;\r\n\r\n return (\r\n \r\n {!this.documentOnlyDrag && !this.proximityDock && this.renderRootDockingIndicator(IgcDockingIndicatorPosition.top)}\r\n \r\n {!this.documentOnlyDrag && !this.proximityDock && this.renderRootDockingIndicator(startPosition)}\r\n {!this.documentOnlyDrag && !this.proximityDock && this.renderRootDockingIndicator(endPosition)}\r\n \r\n {!this.documentOnlyDrag && !this.proximityDock && this.renderRootDockingIndicator(IgcDockingIndicatorPosition.bottom)}\r\n\r\n {this.dropTargetPaneInfo && !this.proximityDock &&\r\n }\r\n );\r\n }\r\n\r\n private renderContextMenu() {\r\n return this.contextMenuMeta && (\r\n \r\n );\r\n }\r\n\r\n private renderDropShadow() {\r\n return this.dropShadowRect && (\r\n \r\n );\r\n }\r\n\r\n handlePaneNavigatorClosed(ev: CustomEvent) {\r\n this.service.normalizeMaximizedPane(ev.detail);\r\n\r\n const parent = this.service.getRootParent(ev.detail);\r\n const isParentFloating = this.service.isFloatingPane(parent);\r\n\r\n if (isParentFloating) {\r\n this.service.bringFloatingPaneOnTop(parent);\r\n }\r\n\r\n if (ev.detail && this.activePane !== ev.detail) {\r\n this.activePane = ev.detail;\r\n }\r\n this.navigationPaneMeta = null;\r\n }\r\n\r\n renderPaneNavigator() {\r\n return this.navigationPaneMeta &&\r\n \r\n ;\r\n }\r\n\r\n render() {\r\n this.panesElementMap = new TwoWayMap();\r\n this.tabHeadersMap = new Map();\r\n this.unpinnedHeadersMap = new Map();\r\n this.contentPanesElementMap = new Map();\r\n\r\n return (\r\n \r\n {this.renderButtonsTemplates()}\r\n {this.renderUnpinnedTabArea(IgcUnpinnedLocation.left)}\r\n
\r\n {this.renderUnpinnedTabArea(IgcUnpinnedLocation.top)}\r\n this.dockedPanesContainer = el}\r\n class=\"pane-container--horizontal\"\r\n style={{ position: this.maximizedPane ? 'absolute' : 'relative' }}\r\n >\r\n {this.layout?.rootPane && this.renderSplitPane(this.layout.rootPane, false, false)}\r\n {this.renderFlyoutPane()}\r\n {this.renderDockingIndicators()}\r\n
\r\n {this.renderUnpinnedTabArea(IgcUnpinnedLocation.bottom)}\r\n \r\n {this.renderUnpinnedTabArea(IgcUnpinnedLocation.right)}\r\n {this.renderFloatingPanes()}\r\n {this.renderContextMenu()}\r\n {this.renderPaneNavigator()}\r\n {this.renderDropShadow()}\r\n \r\n );\r\n }\r\n}\r\n",":host {\r\n position: relative;\r\n display: flex;\r\n overflow: hidden;\r\n box-sizing: border-box;\r\n height: 100%;\r\n background: $dock-background;\r\n color: $dock-text;\r\n font-family: $font-family;\r\n outline-style: none;\r\n --unpinned-tab-area-size: 30px;\r\n\r\n igc-icon-component svg {\r\n width: 17px;\r\n height: 17px;\r\n }\r\n}\r\n\r\n%pane-container {\r\n display: flex;\r\n flex-grow: 1;\r\n height: 100%;\r\n width: 100%;\r\n overflow: hidden;\r\n}\r\n\r\n.pane-container {\r\n @extend %pane-container;\r\n\r\n &--horizontal {\r\n @extend %pane-container;\r\n }\r\n\r\n &--vertical {\r\n @extend %pane-container;\r\n flex-direction: column;\r\n }\r\n}\r\n\r\n.unpinned-tab-area {\r\n display: flex;\r\n flex-direction: column;\r\n width: var(--unpinned-tab-area-size);\r\n height: auto;\r\n\r\n &--left {\r\n padding: 8px 8px 8px 0;\r\n }\r\n\r\n &--right {\r\n padding: 8px 0 8px 8px;\r\n }\r\n\r\n &--bottom {\r\n padding-top: 8px;\r\n }\r\n\r\n &--horizontal {\r\n flex-direction: row;\r\n width: auto;\r\n height: var(--unpinned-tab-area-size);\r\n }\r\n\r\n &--hidden {\r\n display: none;\r\n }\r\n\r\n}\r\n\r\n.flyout-pane {\r\n display: flex;\r\n flex-direction: column;\r\n position: absolute;\r\n width: 100%;\r\n height: 100%;\r\n pointer-events: none;\r\n z-index: 2;\r\n\r\n igc-content-pane-component {\r\n box-shadow: 0 12px 8px $flyout-shadow-color;\r\n }\r\n\r\n &--right {\r\n flex-direction: row-reverse;\r\n\r\n igc-content-pane-component {\r\n box-shadow: -12px 0px 8px $flyout-shadow-color;\r\n }\r\n }\r\n\r\n &--bottom {\r\n flex-direction: column-reverse;\r\n\r\n igc-content-pane-component {\r\n box-shadow: 0 -12px 8px $flyout-shadow-color;\r\n }\r\n }\r\n\r\n &--left {\r\n flex-direction: row;\r\n\r\n igc-content-pane-component {\r\n box-shadow: 12px 0px 8px $flyout-shadow-color;\r\n }\r\n }\r\n}\r\n\r\n.floating-panes {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n bottom: 0;\r\n right: 0;\r\n pointer-events: none;\r\n z-index: 10000;\r\n}\r\n\r\n.docking-indicators-container {\r\n position: absolute;\r\n display: flex;\r\n flex-direction: column;\r\n width: 100%;\r\n height: 100%;\r\n pointer-events: none;\r\n z-index: 10004\r\n}\r\n\r\n.content {\r\n overflow: auto;\r\n height: 100%;\r\n flex-grow: 1;\r\n color: $pane-content-text;\r\n background: $pane-content-background;\r\n position: relative;\r\n}\r\n\r\n.maximized {\r\n position: absolute;\r\n top: 0;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n z-index: 10002;\r\n}\r\n\r\n.drop-shadow {\r\n background-color: $drop-shadow-background;\r\n position: fixed;\r\n z-index: 10003;\r\n display: block;\r\n pointer-events: none;\r\n}\r\n\r\n.hidden {\r\n height: 0;\r\n opacity: 0;\r\n padding: 0;\r\n pointer-events: none;\r\n min-height: 0 !important;\r\n transition: opacity 0.5s ease;\r\n position: absolute;\r\n}\r\n\r\n.transitioned {\r\n overflow: hidden;\r\n transition: opacity 0.5s ease;\r\n position: absolute;\r\n z-index: 999;\r\n width: 100%;\r\n}\r\n",":host {\r\n display: flex;\r\n box-sizing: border-box;\r\n min-width: 0px;\r\n min-height: 0px;\r\n}\r\n","import { Component, Host, Prop, h } from '@stencil/core';\r\n\r\nimport { IGC_DEFAULT_PANE_SIZE } from '../dockmanager.interfaces';\r\n\r\n/**\r\n * @hidden\r\n */\r\n@Component({\r\n tag: 'igc-document-host-component',\r\n styleUrl: 'document-host-component.css',\r\n shadow: false,\r\n scoped: true\r\n})\r\nexport class IgcDocumentHostComponent {\r\n @Prop() size: number;\r\n\r\n render() {\r\n const size = this.size || this.size === 0 ? this.size : IGC_DEFAULT_PANE_SIZE;\r\n\r\n return (\r\n \r\n \r\n );\r\n }\r\n\r\n}\r\n",":host {\r\n --min-pane-size: 30px;\r\n\r\n display: flex;\r\n flex-direction: column;\r\n overflow: visible;\r\n min-width: var(--min-pane-size);\r\n min-height: var(--min-pane-size);\r\n box-sizing: border-box;\r\n color: $dock-text;\r\n background: $dock-background;\r\n pointer-events: all;\r\n border: 1px solid $floating-pane-border-color;\r\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.24);\r\n z-index: 0;\r\n}\r\n","import { Component, Element, Event, EventEmitter, Fragment, Host, Prop, h } from '@stencil/core';\r\n\r\nimport { IgcDragEventArguments, IgcDragMoveEventArguments, IgcDragResizeEventArguments, IgcDragStartEventArguments } from '../../drag-drop/drag.service';\r\nimport { IGC_DEFAULT_PANE_SIZE } from '../dockmanager.interfaces';\r\nimport { IgcDockManagerPoint, IgcResizerLocation } from '../dockmanager.public-interfaces';\r\n\r\n/**\r\n * @hidden\r\n */\r\n@Component({\r\n tag: 'igc-floating-pane-component',\r\n styleUrl: 'floating-pane-component.scss',\r\n shadow: true\r\n})\r\nexport class IgcFloatingPaneComponent {\r\n @Prop() allowResize = true;\r\n @Prop() floatingLocation: IgcDockManagerPoint;\r\n @Prop() floatingWidth: number;\r\n @Prop() floatingHeight: number;\r\n @Prop() hasHeader: boolean;\r\n @Prop() maximized: boolean;\r\n @Prop() floatingMinHeight = IGC_DEFAULT_PANE_SIZE;\r\n @Prop() floatingMinWidth = IGC_DEFAULT_PANE_SIZE;\r\n @Prop() floatingId: string;\r\n\r\n @Event() wndResizeStart: EventEmitter;\r\n @Event() wndResizeMove: EventEmitter;\r\n @Event() wndResizeEnd: EventEmitter;\r\n @Element() elem: HTMLElement;\r\n\r\n private handleResizerMove(event: CustomEvent) {\r\n const el = event.target as HTMLIgcResizerComponentElement;\r\n this.wndResizeMove.emit({\r\n dragMoveArgs: event.detail,\r\n resizerLocation: el.orientation\r\n });\r\n\r\n }\r\n private handleResizeStart(event: CustomEvent) {\r\n const el = event.target as HTMLIgcResizerComponentElement;\r\n const args = {\r\n dragMoveArgs: { ...event.detail, offsetX: 0, offsetY: 0 },\r\n resizerLocation: el.orientation\r\n };\r\n this.wndResizeStart.emit(args);\r\n\r\n if (args.dragMoveArgs.cancel) {\r\n event.detail.cancel = true;\r\n }\r\n }\r\n private handleResizeEnd(event: CustomEvent) {\r\n const el = event.target as HTMLIgcResizerComponentElement;\r\n this.wndResizeEnd.emit({\r\n dragMoveArgs: event.detail,\r\n resizerLocation: el.orientation\r\n });\r\n }\r\n\r\n render() {\r\n const styles = {\r\n position: 'absolute',\r\n left: this.floatingLocation.x + 'px',\r\n top: this.floatingLocation.y + 'px',\r\n minWidth: this.floatingMinWidth + 'px',\r\n minHeight: this.floatingMinHeight + 'px',\r\n width: this.floatingWidth + 'px',\r\n height: this.floatingHeight + 'px'\r\n };\r\n\r\n return (\r\n \r\n {this.allowResize &&\r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n {this.allowResize &&\r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n );\r\n }\r\n}\r\n","/**\r\n * @hidden\r\n */\r\nexport const icons: any = {\r\n close:\r\n `\r\n \r\n \r\n `,\r\n pin:\r\n `\r\n \r\n `,\r\n unpin:\r\n `\r\n \r\n \r\n `,\r\n first_page:\r\n `\r\n \r\n \r\n `,\r\n chevron_left:\r\n `\r\n \r\n \r\n `,\r\n flip:\r\n `\r\n \r\n \r\n `,\r\n crop_square:\r\n `\r\n \r\n \r\n \r\n `,\r\n arrow_drop_down:\r\n `\r\n \r\n `,\r\n maximize:\r\n `\r\n \r\n \r\n `,\r\n minimize:\r\n `\r\n \r\n \r\n `,\r\n more:\r\n `\r\n \r\n \r\n `\r\n};\r\n","import { Component, Host, Prop, h } from '@stencil/core';\r\n\r\nimport { icons } from './icons';\r\n\r\n/**\r\n * @hidden\r\n */\r\n@Component({\r\n tag: 'igc-icon-component',\r\n styleUrl: 'icon-component.scss',\r\n shadow: false,\r\n scoped: true\r\n})\r\nexport class IgcIconComponent {\r\n\r\n @Prop() name: string;\r\n\r\n render() {\r\n return (\r\n \r\n \r\n );\r\n }\r\n}\r\n",":host {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 17px;\r\n height: 17px;\r\n fill: currentColor;\r\n}\r\n",":host {\r\n display: flex;\r\n width: 30px;\r\n height: 30px;\r\n align-items: center;\r\n justify-content: center;\r\n color: $joystick-icon-color;\r\n background: $joystick-background;\r\n // TODO try fixing the animation to not apply initially\r\n // transition: color .25s ease-out, background .25s ease-out;\r\n border: 1px solid $joystick-border-color;\r\n\r\n &.inner-top {\r\n border-bottom: none;\r\n }\r\n\r\n &.inner-start {\r\n border-right: none;\r\n }\r\n\r\n &.inner-end {\r\n border-left: none;\r\n }\r\n\r\n &.inner-bottom {\r\n border-top: none;\r\n }\r\n\r\n &.inner-center {\r\n border: 1px solid $joystick-background;\r\n }\r\n\r\n &:hover {\r\n background: $joystick-background-active;\r\n color: $joystick-icon-color-active;\r\n }\r\n}\r\n","import { Component, Host, Prop, h } from '@stencil/core';\r\n\r\nimport { IgcDockingIndicatorPosition } from '../dockmanager.public-interfaces';\r\n\r\n/**\r\n * @hidden\r\n */\r\n@Component({\r\n tag: 'igc-joystick-icon-component',\r\n styleUrl: 'joystick-icon-component.scss',\r\n shadow: false,\r\n scoped: true\r\n})\r\nexport class IgcJoystickIconComponent {\r\n @Prop() isDocHost: boolean;\r\n @Prop() position: IgcDockingIndicatorPosition;\r\n @Prop() direction: string;\r\n @Prop() empty: boolean;\r\n\r\n private resolveIconDivClass(): any {\r\n let positionClass: string;\r\n\r\n switch (this.position) {\r\n case IgcDockingIndicatorPosition.outerTop:\r\n positionClass = 'outer-top';\r\n break;\r\n case IgcDockingIndicatorPosition.outerBottom:\r\n positionClass = 'outer-bottom';\r\n break;\r\n case IgcDockingIndicatorPosition.outerLeft:\r\n positionClass = 'outer-start';\r\n break;\r\n case IgcDockingIndicatorPosition.outerRight:\r\n positionClass = 'outer-end';\r\n break;\r\n case IgcDockingIndicatorPosition.top:\r\n positionClass = 'inner-top';\r\n break;\r\n case IgcDockingIndicatorPosition.bottom:\r\n positionClass = 'inner-bottom';\r\n break;\r\n case IgcDockingIndicatorPosition.left:\r\n positionClass = 'inner-start';\r\n break;\r\n case IgcDockingIndicatorPosition.right:\r\n positionClass = 'inner-end';\r\n break;\r\n case IgcDockingIndicatorPosition.center:\r\n positionClass = 'inner-center';\r\n break;\r\n }\r\n\r\n const classes: any = {};\r\n if (positionClass) {\r\n classes[positionClass] = true;\r\n }\r\n\r\n return classes;\r\n }\r\n\r\n private resolveMargin(): string {\r\n switch (this.position) {\r\n case IgcDockingIndicatorPosition.outerTop:\r\n return '0px 0px 10px 0px';\r\n case IgcDockingIndicatorPosition.outerRight:\r\n return '0px 0px 0px 10px';\r\n case IgcDockingIndicatorPosition.outerLeft:\r\n return '0px 10px 0px 0px';\r\n case IgcDockingIndicatorPosition.outerBottom:\r\n return '10px 0px 0px 0px';\r\n default:\r\n return '0px';\r\n }\r\n }\r\n\r\n private resolveGridRow(): string {\r\n switch (this.position) {\r\n case IgcDockingIndicatorPosition.outerTop:\r\n return '1';\r\n case IgcDockingIndicatorPosition.top:\r\n return this.isDocHost ? '2' : '1';\r\n case IgcDockingIndicatorPosition.center:\r\n return this.isDocHost ? '3' : '2';\r\n case IgcDockingIndicatorPosition.outerRight:\r\n case IgcDockingIndicatorPosition.outerLeft:\r\n return '3';\r\n case IgcDockingIndicatorPosition.right:\r\n case IgcDockingIndicatorPosition.left:\r\n return this.isDocHost ? '3' : '2';\r\n case IgcDockingIndicatorPosition.outerBottom:\r\n return '5';\r\n case IgcDockingIndicatorPosition.bottom:\r\n return this.isDocHost ? '4' : '3';\r\n }\r\n }\r\n\r\n private resolveGridColumn(): string {\r\n switch (this.position) {\r\n case IgcDockingIndicatorPosition.outerLeft:\r\n return this.direction !== 'rtl' ? '1' : '5';\r\n case IgcDockingIndicatorPosition.left:\r\n if (this.direction !== 'rtl') {\r\n return this.isDocHost ? '2' : '1';\r\n } else {\r\n return this.isDocHost ? '4' : '3';\r\n }\r\n case IgcDockingIndicatorPosition.center:\r\n return this.isDocHost ? '3' : '2';\r\n case IgcDockingIndicatorPosition.outerTop:\r\n case IgcDockingIndicatorPosition.outerBottom:\r\n return '3';\r\n case IgcDockingIndicatorPosition.top:\r\n case IgcDockingIndicatorPosition.bottom:\r\n return this.isDocHost ? '3' : '2';\r\n case IgcDockingIndicatorPosition.outerRight:\r\n return this.direction !== 'rtl' ? '5' : '1';\r\n case IgcDockingIndicatorPosition.right:\r\n if (this.direction !== 'rtl') {\r\n return this.isDocHost ? '4' : '3';\r\n } else {\r\n return this.isDocHost ? '2' : '1';\r\n }\r\n }\r\n }\r\n\r\n private renderIcon() {\r\n const position = this.position;\r\n if (position === IgcDockingIndicatorPosition.outerLeft ||\r\n (position === IgcDockingIndicatorPosition.left && !this.isDocHost)) {\r\n return ;\r\n } else if (position === IgcDockingIndicatorPosition.left) {\r\n return (\r\n );\r\n } else if (position === IgcDockingIndicatorPosition.outerTop ||\r\n (position === IgcDockingIndicatorPosition.top && !this.isDocHost)) {\r\n return (\r\n );\r\n } else if (position === IgcDockingIndicatorPosition.top) {\r\n return (\r\n );\r\n } else if (position === IgcDockingIndicatorPosition.center) {\r\n return ;\r\n } else if (position === IgcDockingIndicatorPosition.outerRight ||\r\n (position === IgcDockingIndicatorPosition.right && !this.isDocHost)) {\r\n return (\r\n );\r\n } else if (position === IgcDockingIndicatorPosition.right) {\r\n return ;\r\n } else if (position === IgcDockingIndicatorPosition.outerBottom ||\r\n (position === IgcDockingIndicatorPosition.bottom && !this.isDocHost)) {\r\n return (\r\n );\r\n } else if (position === IgcDockingIndicatorPosition.bottom) {\r\n return (\r\n );\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n {!this.empty && this.renderIcon()}\r\n );\r\n }\r\n}\r\n",":host {\r\n position: fixed;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.indicators-container {\r\n display: grid;\r\n grid-template-columns: repeat(3, auto);\r\n grid-template-rows: repeat(3, auto);\r\n box-sizing: border-box;\r\n pointer-events: all;\r\n\r\n &--doc-host {\r\n grid-template-columns: repeat(5, auto);\r\n grid-template-rows: repeat(5, auto);\r\n }\r\n}\r\n","import { Component, Element, Host, Prop, h } from '@stencil/core';\r\nimport { Utils } from '../../../utils/utils';\r\n\r\nimport { IgcDropTargetPaneInfo } from '../dockmanager.interfaces';\r\nimport { IgcDockManagerPaneType, IgcDockingIndicatorPosition } from '../dockmanager.public-interfaces';\r\n\r\n/**\r\n * @hidden\r\n */\r\n@Component({\r\n tag: 'igc-joystick-indicator-component',\r\n styleUrl: 'joystick-indicator-component.scss',\r\n shadow: false,\r\n scoped: true\r\n})\r\nexport class IgcJoystickIndicatorComponent {\r\n private isDocHost: boolean;\r\n\r\n @Element() element: HTMLElement;\r\n\r\n @Prop() dropTargetPaneInfo: IgcDropTargetPaneInfo;\r\n\r\n @Prop() documentOnlyDrag: boolean;\r\n\r\n @Prop() allowCenterDock: boolean;\r\n\r\n private isEmptyCenter(position: IgcDockingIndicatorPosition) {\r\n return this.documentOnlyDrag\r\n && position === IgcDockingIndicatorPosition.center\r\n && this.dropTargetPaneInfo.floatingPaneWithoutDocHost;\r\n }\r\n\r\n private isEmptyEdge(position: IgcDockingIndicatorPosition) {\r\n return this.documentOnlyDrag\r\n && position !== IgcDockingIndicatorPosition.center\r\n && this.dropTargetPaneInfo.pane.type === IgcDockManagerPaneType.documentHost;\r\n }\r\n\r\n private closestElement(selector: string, el: any): HTMLElement {\r\n return (\r\n (el && el.closest(selector)) ||\r\n this.closestElement(selector, el.getRootNode().host)\r\n );\r\n }\r\n \r\n private shouldAllowCenterDock() {\r\n let targetPane = this.dropTargetPaneInfo.pane;\r\n targetPane = targetPane.type === IgcDockManagerPaneType.tabGroupPane && targetPane.selectedIndex > -1 ? targetPane.panes[targetPane.selectedIndex] : targetPane;\r\n return targetPane.type === IgcDockManagerPaneType.contentPane && targetPane.acceptsInnerDock !== undefined && this.allowCenterDock\r\n ? targetPane.acceptsInnerDock\r\n : this.allowCenterDock;\r\n }\r\n\r\n\r\n private renderBlankIndicator(position: IgcDockingIndicatorPosition) {\r\n return (\r\n );\r\n }\r\n\r\n private renderIndicator(position: IgcDockingIndicatorPosition) {\r\n return (\r\n );\r\n }\r\n\r\n render() {\r\n this.isDocHost = !!this.dropTargetPaneInfo.docHost;\r\n\r\n return (\r\n \r\n \r\n {this.isDocHost && !this.documentOnlyDrag && this.renderIndicator(IgcDockingIndicatorPosition.outerLeft)}\r\n\r\n {this.renderIndicator(IgcDockingIndicatorPosition.left)}\r\n\r\n {this.isDocHost && !this.documentOnlyDrag && this.renderIndicator(IgcDockingIndicatorPosition.outerTop)}\r\n\r\n {this.renderIndicator(IgcDockingIndicatorPosition.top)}\r\n\r\n {!this.shouldAllowCenterDock() && this.renderBlankIndicator(IgcDockingIndicatorPosition.center)}\r\n\r\n {this.shouldAllowCenterDock() && this.renderIndicator(IgcDockingIndicatorPosition.center)}\r\n\r\n {this.renderIndicator(IgcDockingIndicatorPosition.right)}\r\n\r\n {this.isDocHost && !this.documentOnlyDrag && this.renderIndicator(IgcDockingIndicatorPosition.outerRight)}\r\n\r\n {this.renderIndicator(IgcDockingIndicatorPosition.bottom)}\r\n\r\n {this.isDocHost && !this.documentOnlyDrag && this.renderIndicator(IgcDockingIndicatorPosition.outerBottom)}\r\n \r\n \r\n );\r\n }\r\n}\r\n","import { IgcResizerLocation } from '../dockmanager/dockmanager.public-interfaces';\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport interface IgcDragStartEventArguments {\r\n cancel?: boolean;\r\n clientX: number;\r\n clientY: number;\r\n}\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport interface IgcDragEventArguments {\r\n offsetX: number;\r\n offsetY: number;\r\n clientX: number;\r\n clientY: number;\r\n}\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport interface IgcDragResizeEventArguments {\r\n dragMoveArgs: IgcDragMoveEventArguments;\r\n resizerLocation: IgcResizerLocation;\r\n}\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport interface IgcDragMoveEventArguments extends IgcDragEventArguments {\r\n totalOffsetX?: number;\r\n totalOffsetY?: number;\r\n cancel?: boolean;\r\n}\r\n\r\nexport const IGNORE_DRAG = 'data-ignore-drag';\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class IgcDragService {\r\n private startX: number;\r\n private startY: number;\r\n private lastX: number;\r\n private lastY: number;\r\n private currentX: number;\r\n private currentY: number;\r\n private dragStarted: boolean;\r\n private forcedDrag: boolean;\r\n private _capturedElement: HTMLElement;\r\n\r\n private get captureTarget(): HTMLElement {\r\n return this._capturedElement || this.element;\r\n }\r\n private set captureTarget(val: HTMLElement) {\r\n this._capturedElement = val;\r\n }\r\n\r\n dragTolerance = 5;\r\n dragEdgeTolerance = 0;\r\n dragStart: (eventArgs: IgcDragStartEventArguments) => void;\r\n dragEnd: (eventArgs: IgcDragEventArguments) => void;\r\n dragMove: (eventArgs: IgcDragMoveEventArguments) => void;\r\n\r\n constructor(private element: HTMLElement) {\r\n this.element.addEventListener('pointerdown', this.handlePointerDown, false);\r\n }\r\n\r\n private triggerDragStart() {\r\n if (this.dragStart) {\r\n const args: IgcDragStartEventArguments = {\r\n clientX: this.startX,\r\n clientY: this.startY\r\n };\r\n\r\n this.dragStart(args);\r\n\r\n if (args.cancel) {\r\n this.unsubscribeDragEvents();\r\n return;\r\n }\r\n }\r\n\r\n this.dragStarted = true;\r\n }\r\n\r\n private subscribeDragEvents() {\r\n this.dragStarted = false;\r\n document.addEventListener('pointermove', this.handlePointerMove, false);\r\n document.addEventListener('pointerup', this.handlePointerUp, false);\r\n document.addEventListener('wheel', this.handleWheel, { passive: false });\r\n }\r\n\r\n private unsubscribeDragEvents() {\r\n document.removeEventListener('pointermove', this.handlePointerMove);\r\n document.removeEventListener('pointerup', this.handlePointerUp);\r\n document.removeEventListener('wheel', this.handleWheel);\r\n }\r\n\r\n private handleWheel = (event: WheelEvent) => {\r\n event.preventDefault();\r\n }\r\n\r\n private handlePointerDown = (event: PointerEvent) => {\r\n let targets = event.composedPath();\r\n targets = targets.slice(0, targets.indexOf(event.currentTarget));\r\n for (const target of targets) {\r\n if (target instanceof Element\r\n && target.hasAttribute(IGNORE_DRAG)) {\r\n return;\r\n }\r\n }\r\n // TODO Not sure if we need this\r\n // this.element.focus();\r\n // event.preventDefault();\r\n this.startX = event.clientX;\r\n this.startY = event.clientY;\r\n this.lastX = this.startX;\r\n this.lastY = this.startY;\r\n\r\n this.captureTarget = event.target as HTMLElement;\r\n this.captureTarget.setPointerCapture(event.pointerId);\r\n this.subscribeDragEvents();\r\n }\r\n\r\n private handlePointerMove = (event: PointerEvent) => {\r\n event.preventDefault();\r\n\r\n const maxHeight = document.documentElement.clientHeight;\r\n const maxWidth = document.documentElement.clientWidth;\r\n\r\n if (event.clientX < this.dragEdgeTolerance) {\r\n this.currentX = this.dragEdgeTolerance;\r\n } else if (event.clientX > maxWidth - this.dragEdgeTolerance) {\r\n this.currentX = maxWidth - this.dragEdgeTolerance;\r\n } else {\r\n this.currentX = event.clientX;\r\n }\r\n\r\n if (event.clientY < this.dragEdgeTolerance) {\r\n this.currentY = this.dragEdgeTolerance;\r\n } else if (event.clientY > maxHeight - this.dragEdgeTolerance) {\r\n this.currentY = maxHeight - this.dragEdgeTolerance;\r\n } else {\r\n this.currentY = event.clientY;\r\n }\r\n\r\n if (!this.dragStarted) {\r\n if (this.forcedDrag) {\r\n this.forcedDrag = false;\r\n this.startX = this.currentX;\r\n this.startY = this.currentY;\r\n this.lastX = this.startX;\r\n this.lastY = this.startY;\r\n this.captureTarget.setPointerCapture(event.pointerId);\r\n this.triggerDragStart();\r\n } else {\r\n const offsetX = this.currentX - this.lastX;\r\n const offsetY = this.currentY - this.lastY;\r\n\r\n if (Math.abs(offsetX) > this.dragTolerance || Math.abs(offsetY) > this.dragTolerance) {\r\n this.triggerDragStart();\r\n }\r\n }\r\n }\r\n\r\n if (!this.dragStarted) {\r\n return;\r\n }\r\n\r\n if (this.dragMove) {\r\n const args: IgcDragMoveEventArguments = {\r\n offsetX: this.currentX - this.lastX,\r\n offsetY: this.currentY - this.lastY,\r\n totalOffsetX: this.currentX - this.startX,\r\n totalOffsetY: this.currentY - this.startY,\r\n clientX: this.currentX,\r\n clientY: this.currentY\r\n };\r\n this.dragMove(args);\r\n\r\n if (args.cancel) {\r\n this.unsubscribeDragEvents();\r\n }\r\n }\r\n\r\n this.lastX = this.currentX;\r\n this.lastY = this.currentY;\r\n }\r\n\r\n private handlePointerUp = (event: PointerEvent) => {\r\n this.unsubscribeDragEvents();\r\n this.captureTarget.releasePointerCapture(event.pointerId);\r\n if (this.dragStarted && this.dragEnd) {\r\n this.dragEnd({\r\n offsetX: this.currentX - this.startX,\r\n offsetY: this.currentY - this.startY,\r\n clientX: event.clientX,\r\n clientY: event.clientY\r\n });\r\n }\r\n }\r\n\r\n destroy() {\r\n this.element.removeEventListener('pointerdown', this.handlePointerDown);\r\n this.unsubscribeDragEvents();\r\n this.element = null;\r\n this.dragStart = null;\r\n this.dragEnd = null;\r\n this.dragMove = null;\r\n }\r\n\r\n forceDragging() {\r\n this.forcedDrag = true;\r\n this.subscribeDragEvents();\r\n }\r\n}\r\n",":host {\r\n display: flex;\r\n align-items: center;\r\n box-sizing: border-box;\r\n user-select: none;\r\n padding: 4px 8px;\r\n font-size: 14px;\r\n font-weight: 400;\r\n color: $pane-header-text;\r\n background: $pane-header-background;\r\n min-height: $pane-header-height;\r\n\r\n igc-icon-component svg {\r\n width: 17px;\r\n height: 17px;\r\n }\r\n}\r\n\r\n:host([part~='window']) {\r\n border-bottom: 1px solid $border-color;\r\n min-height: auto;\r\n}\r\n\r\n.header-text {\r\n @include ellipsis();\r\n flex: 1 1 100%;\r\n line-height: 2.3;\r\n}\r\n\r\n.header-actions {\r\n display: flex;\r\n\r\n igc-button-component + igc-button-component {\r\n margin-left: 4px;\r\n }\r\n}\r\n\r\n:host([part~='active']) {\r\n box-shadow: inset 0 -2px 0 0 $active-color;\r\n color: $active-color;\r\n}\r\n\r\n:host([part~='disabled']) {\r\n\tpointer-events: none;\r\n\tcolor: $disabled-color;\r\n}\r\n\r\n","import { Component, Element, Event, EventEmitter, Fragment, Host, Prop, Watch, h } from '@stencil/core';\r\n\r\nimport { Utils } from '../../../utils/utils';\r\nimport { IGNORE_DRAG, IgcDragEventArguments, IgcDragMoveEventArguments, IgcDragService, IgcDragStartEventArguments } from '../../drag-drop/drag.service';\r\nimport { IgcContentPane, IgcDockManagerResourceStrings } from '../dockmanager.public-interfaces';\r\n\r\n/**\r\n * @hidden\r\n */\r\n@Component({\r\n tag: 'igc-pane-header-component',\r\n styleUrl: 'pane-header-component.scss',\r\n shadow: true,\r\n scoped: false\r\n})\r\nexport class IgcPaneHeaderComponent {\r\n @Prop({ mutable: true }) dragService: IgcDragService;\r\n\r\n @Element() element: HTMLIgcPaneHeaderComponentElement;\r\n\r\n @Prop() pinned: boolean;\r\n @Prop() maximized: boolean;\r\n @Prop() isFloating: boolean;\r\n @Prop() forcedDrag: boolean;\r\n @Prop() isFloatingPaneHeader: boolean;\r\n @Prop() allowClose = true;\r\n @Prop() allowMaximize = true;\r\n @Prop() allowPinning = true;\r\n @Prop() pane: IgcContentPane;\r\n @Prop() isActive: boolean;\r\n @Prop() disabled = false;\r\n @Prop() resourceStrings: IgcDockManagerResourceStrings;\r\n\r\n @Event() pinToggle: EventEmitter;\r\n @Event({ bubbles: false }) maximize: EventEmitter;\r\n @Event() close: EventEmitter;\r\n @Event() dragStarted: EventEmitter;\r\n @Event() dragEnded: EventEmitter;\r\n @Event() dragMoved: EventEmitter;\r\n @Event() elementConnected: EventEmitter;\r\n @Event() elementDisconnected: EventEmitter;\r\n\r\n connectedCallback() {\r\n this.dragService = new IgcDragService(this.element);\r\n this.dragService.dragEdgeTolerance = 3;\r\n this.dragService.dragStart = args => {\r\n this.dragStarted.emit(args);\r\n };\r\n\r\n this.dragService.dragEnd = args => {\r\n this.dragEnded.emit(args);\r\n };\r\n\r\n this.dragService.dragMove = args => {\r\n this.dragMoved.emit(args);\r\n };\r\n\r\n this.forceDragging();\r\n this.elementConnected.emit(this.element);\r\n }\r\n\r\n disconnectedCallback() {\r\n if (this.dragService) {\r\n this.dragService.destroy();\r\n }\r\n this.elementDisconnected.emit(this.element);\r\n }\r\n\r\n @Watch('forcedDrag')\r\n forcedDragChanged() {\r\n this.forceDragging();\r\n }\r\n\r\n private forceDragging() {\r\n if (this.forcedDrag) {\r\n this.dragService.forceDragging();\r\n }\r\n }\r\n\r\n private pinButtonClick = () => {\r\n this.pinToggle.emit();\r\n }\r\n\r\n private maximizeButtonClick = () => {\r\n this.maximize.emit();\r\n }\r\n\r\n private closeButtonClick = () => {\r\n this.close.emit();\r\n }\r\n\r\n private renderCloseButton() {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n private renderMaximizeButton() {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n private renderMinimizeButton() {\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n private renderPinButton() {\r\n return (\r\n \r\n {!this.isFloating && \r\n \r\n \r\n }\r\n \r\n );\r\n }\r\n\r\n private renderUnpinButton() {\r\n return (\r\n \r\n {!this.isFloating && \r\n \r\n \r\n \r\n }\r\n \r\n );\r\n }\r\n\r\n render() {\r\n const commonParts = {\r\n active: this.isActive,\r\n disabled: this.disabled,\r\n floating: this.isFloating,\r\n window: this.isFloatingPaneHeader,\r\n };\r\n\r\n const paneHeaderParts = Utils.partNameMap({ 'pane-header': true, ...commonParts });\r\n const paneHeaderContentParts = Utils.partNameMap({ 'pane-header-content': true, ...commonParts });\r\n const paneHeaderActionsParts = Utils.partNameMap({ 'pane-header-actions': true, ...commonParts });\r\n\r\n const exportParts = Utils.partNameMap({\r\n 'pane-header': true,\r\n 'pane-header-actions': true,\r\n 'pane-header-content': true,\r\n 'pane-header-close-button': true,\r\n 'pane-header-maximize-button': true,\r\n 'pane-header-minimize-button': true,\r\n 'pane-header-pin-button': true,\r\n 'pane-header-unpin-button': true,\r\n ...commonParts\r\n }, ',');\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n
\r\n {this.allowPinning &&\r\n
\r\n {this.pinned ? this.renderUnpinButton() : this.renderPinButton()}\r\n
\r\n }\r\n {this.allowMaximize &&\r\n
\r\n {this.maximized ? this.renderMinimizeButton() : this.renderMaximizeButton()}\r\n
\r\n }\r\n {this.allowClose &&\r\n
\r\n {this.renderCloseButton()}\r\n
\r\n }\r\n
\r\n \r\n );\r\n }\r\n}\r\n",":host,\r\n:host * {\r\n box-sizing: border-box;\r\n}\r\n\r\n:host {\r\n position: absolute;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n width: 100%;\r\n height: 100%;\r\n z-index: 10002;\r\n}\r\n\r\n.pane-navigator {\r\n display: flex;\r\n flex-direction: column;\r\n background: $pane-content-background;\r\n width: 350px;\r\n height: auto;\r\n max-height: 336px;\r\n overflow: hidden;\r\n line-height: 24px;\r\n z-index: 10002;\r\n box-shadow: 0 9px 46px 8px rgba(0, 0, 0, 0.08),\r\n 0 24px 38px 3px rgba(0, 0, 0, 0.12),\r\n 0 11px 15px -7px rgba(0, 0, 0, 0.26);\r\n\r\n &:focus {\r\n outline-style: none;\r\n }\r\n}\r\n\r\nheader {\r\n background: $background-color;\r\n min-height: 40px;\r\n height: 40px;\r\n\r\n h3 {\r\n @include ellipsis();\r\n margin: unset;\r\n font-size: em(14px);\r\n padding: 8px;\r\n }\r\n}\r\n\r\n.body {\r\n display: flex;\r\n overflow: auto;\r\n}\r\n\r\n.group {\r\n display: flex;\r\n flex: 1 0 50%;\r\n flex-direction: column;\r\n overflow: hidden;\r\n padding: 16px;\r\n}\r\n\r\n.title {\r\n @include ellipsis();\r\n position: sticky;\r\n top: 0;\r\n background: $pane-content-background;\r\n font-size: em(14px);\r\n margin: unset;\r\n flex-shrink: 0;\r\n}\r\n\r\n.items {\r\n overflow: auto;\r\n scrollbar-width: none;\r\n\r\n // This will not work in Firefox\r\n &::-webkit-scrollbar {\r\n display: none;\r\n }\r\n}\r\n\r\n[part~='item'] {\r\n @include ellipsis();\r\n user-select: none;\r\n cursor: pointer;\r\n font-size: 16px;\r\n padding: 8px 0;\r\n\r\n &[part~='selected'] {\r\n color: $active-color;\r\n }\r\n\r\n &[part~='disabled'] {\r\n pointer-events: none;\r\n color: $disabled-color;\r\n }\r\n}\r\n","import { Component, Event, EventEmitter, Host, Listen, Prop, h } from '@stencil/core';\r\n\r\nimport { Utils } from '../../../utils/utils';\r\nimport { IgcContentPane, IgcDockManagerResourceStrings } from '../dockmanager.public-interfaces';\r\n\r\n/**\r\n * @hidden\r\n */\r\n@Component({\r\n tag: 'igc-pane-navigator-component',\r\n styleUrl: 'pane-navigator-component.scss',\r\n shadow: true\r\n})\r\nexport class IgcPaneNavigatorComponent {\r\n\r\n @Prop() activeDocuments: IgcContentPane[];\r\n @Prop() activePanes: IgcContentPane[];\r\n @Prop({ mutable: true }) selectedIndex: number;\r\n @Prop() previousActivePaneIndex: number;\r\n @Prop() resourceStrings: IgcDockManagerResourceStrings;\r\n\r\n @Event() closed: EventEmitter;\r\n\r\n private allItems: IgcContentPane[];\r\n private allItemsElement: HTMLElement[];\r\n private paneNav: HTMLElement;\r\n\r\n scrollItemToView() {\r\n const selectedItem = this.allItemsElement[this.selectedIndex];\r\n const selectedItemRect = selectedItem.getBoundingClientRect();\r\n const itemsContainerRect = selectedItem.parentElement.getBoundingClientRect();\r\n\r\n if (selectedItemRect.top < itemsContainerRect.top) {\r\n this.allItemsElement[this.selectedIndex].parentElement.scrollTop -= itemsContainerRect.top - selectedItemRect.top;\r\n }\r\n if (selectedItemRect.bottom > itemsContainerRect.bottom) {\r\n this.allItemsElement[this.selectedIndex].parentElement.scrollTop += selectedItemRect.bottom - itemsContainerRect.bottom;\r\n }\r\n }\r\n\r\n @Listen('keyup')\r\n handleKeyUp(event: KeyboardEvent) {\r\n if (event.code === 'AltLeft' || event.code === 'AltRight' || event.key === 'Control' || event.key === 'OS' || event.key === 'Meta') {\r\n this.closed.emit(this.allItems[this.selectedIndex]);\r\n }\r\n }\r\n\r\n @Listen('keydown')\r\n handleKeydown(event: KeyboardEvent) {\r\n event.stopPropagation();\r\n const isShiftPressed = event.shiftKey;\r\n let index;\r\n\r\n if (Utils.isControlOrMetaPressed(event) && !event.altKey) {\r\n switch (event.key) {\r\n case 'ArrowUp':\r\n this.decreaseSelectedIndex();\r\n break;\r\n case 'ArrowDown':\r\n this.increaseSelectedIndex();\r\n break;\r\n case 'ArrowRight':\r\n case 'ArrowLeft': {\r\n if (this.activePanes.length === 0 || this.activeDocuments.length === 0) {\r\n return;\r\n }\r\n if (this.selectedIndex >= 0 && this.selectedIndex < this.activePanes.length) {\r\n index = this.selectedIndex + this.activePanes.length;\r\n this.navigateToIndex(index >= this.allItems.length ? this.allItems.length - 1 : index, 'next');\r\n } else if (this.selectedIndex >= this.activePanes.length && this.selectedIndex < this.allItems.length) {\r\n index = this.selectedIndex - this.activePanes.length;\r\n this.navigateToIndex(index > this.activePanes.length - 1 ? this.activePanes.length - 1 : index, 'previous');\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (event.key === 'F7' || event.key === 'F8') {\r\n if (isShiftPressed) {\r\n this.decreaseSelectedIndex();\r\n } else {\r\n this.increaseSelectedIndex();\r\n }\r\n }\r\n\r\n this.scrollItemToView();\r\n }\r\n\r\n private navigateToIndex(index: number, direction: 'next' | 'previous') {\r\n if (index === -1) {\r\n index = this.allItems.length - 1;\r\n } else if (index === this.allItems.length) {\r\n index = 0;\r\n }\r\n\r\n let counter = 0;\r\n\r\n while (this.allItems[index].disabled && counter <= this.allItems.length) {\r\n counter++;\r\n index = index + (direction === 'next' ? 1 : -1);\r\n\r\n if (index === -1) {\r\n index = this.allItems.length - 1;\r\n } else if (index === this.allItems.length) {\r\n index = 0;\r\n }\r\n }\r\n\r\n this.selectedIndex = index;\r\n }\r\n\r\n private increaseSelectedIndex(amount = 1) {\r\n const newValue = this.selectedIndex + amount;\r\n this.navigateToIndex(newValue, 'next');\r\n }\r\n\r\n private decreaseSelectedIndex(amount = 1) {\r\n const newValue = this.selectedIndex - amount;\r\n this.navigateToIndex(newValue, 'previous');\r\n }\r\n\r\n connectedCallback() {\r\n this.allItems = [...this.activePanes, ...this.activeDocuments];\r\n }\r\n\r\n componentDidLoad() {\r\n this.paneNav.focus();\r\n this.allItemsElement = Array.from(this.paneNav.querySelectorAll('[part~=item]'));\r\n this.navigateToIndex(this.selectedIndex, 'next');\r\n this.scrollItemToView();\r\n }\r\n\r\n resolveItemPart(item: IgcContentPane, index: number, isDocHost: boolean) {\r\n const part = Utils.partNameMap({\r\n item: true,\r\n selected: isDocHost ? index === this.selectedIndex - this.activePanes.length : index === this.selectedIndex,\r\n disabled: item.disabled\r\n });\r\n\r\n return part;\r\n }\r\n\r\n selectItem(index: number, isDocHost: boolean): void {\r\n this.selectedIndex = !isDocHost ? index : this.activePanes.length + index;\r\n }\r\n\r\n renderItems(title: string, items: IgcContentPane[], isDocHost: boolean) {\r\n return (\r\n
\r\n

{title}

\r\n
\r\n {items?.map((item: any, index) => {\r\n return (\r\n this.selectItem(index, isDocHost)}\r\n onMouseUp={() => this.closed.emit(this.allItems[this.selectedIndex])}\r\n >\r\n {item.header}\r\n \r\n );\r\n })}\r\n
\r\n
\r\n );\r\n }\r\n\r\n render() {\r\n return (\r\n this.closed.emit(this.allItems[this.previousActivePaneIndex])}\r\n exportparts=\"base: pane-navigator, header: pane-navigator-header, body: pane-navigator-body,\r\n group: pane-navigator-items-group, title: pane-navigator-items-group-title, item: pane-navigator-item, selected, disabled\"\r\n >\r\n this.paneNav = el}\r\n tabIndex={0}\r\n onClick={ev => ev.stopPropagation()}\r\n >\r\n
\r\n

{this.allItems[this.selectedIndex]?.header}

\r\n
\r\n
\r\n {this.renderItems(this.resourceStrings.panes, this.activePanes, false)}\r\n {this.renderItems(this.resourceStrings.documents, this.activeDocuments, true)}\r\n
\r\n \r\n \r\n );\r\n }\r\n}\r\n","\r\n","import { Component, Element, Event, EventEmitter, Host, Prop, State, h } from '@stencil/core';\r\n\r\nimport { IgcDragEventArguments, IgcDragMoveEventArguments, IgcDragService, IgcDragStartEventArguments } from '../../drag-drop/drag.service';\r\nimport { IgcResizerLocation } from '../dockmanager.public-interfaces';\r\n\r\n/**\r\n * @hidden\r\n */\r\n@Component({\r\n tag: 'igc-resizer-component',\r\n styleUrl: 'resizer-component.scss',\r\n scoped: true\r\n})\r\nexport class IgcResizerComponent {\r\n private dragService: IgcDragService;\r\n\r\n @Element() element: HTMLElement;\r\n\r\n @State() dragOffsetX: number;\r\n @State() dragOffsetY: number;\r\n\r\n @Prop() orientation: IgcResizerLocation;\r\n\r\n @Event() resizerMoved: EventEmitter;\r\n @Event() resizerDragStart: EventEmitter;\r\n @Event() resizerDragEnd: EventEmitter;\r\n\r\n private get isCornerResizer(): boolean {\r\n return this.orientation === IgcResizerLocation.bottomLeft || this.orientation === IgcResizerLocation.bottomRight ||\r\n this.orientation === IgcResizerLocation.topLeft || this.orientation === IgcResizerLocation.topRight;\r\n }\r\n\r\n connectedCallback() {\r\n this.dragService = new IgcDragService(this.element);\r\n this.dragService.dragStart = this.dragStart;\r\n this.dragService.dragEnd = this.dragEnd;\r\n this.dragService.dragMove = this.dragMove;\r\n }\r\n\r\n disconnectedCallback() {\r\n this.dragService.destroy();\r\n }\r\n\r\n private dragStart = (args: IgcDragStartEventArguments) => {\r\n this.resizerDragStart.emit(args);\r\n }\r\n\r\n private dragEnd = (args: IgcDragEventArguments) => {\r\n this.resizerDragEnd.emit(args);\r\n }\r\n\r\n private dragMove = (args: IgcDragMoveEventArguments) => {\r\n this.resizerMoved.emit(args);\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n \r\n );\r\n }\r\n}\r\n",":host {\r\n display: flex;\r\n box-sizing: border-box;\r\n align-self: center;\r\n pointer-events: all;\r\n justify-content: center;\r\n align-items: center;\r\n margin: 10px;\r\n width: 30px;\r\n height: 30px;\r\n color: $joystick-icon-color;\r\n background: $joystick-background;\r\n transition: color .25s ease-out, background .25s ease-out;\r\n border: 1px solid $joystick-border-color;\r\n\r\n &:hover {\r\n color: $joystick-icon-color-active;\r\n background: $joystick-background-active;\r\n }\r\n}\r\n","import { Component, Host, Prop, h } from '@stencil/core';\r\n\r\nimport { IgcDockingIndicatorPosition } from '../dockmanager.public-interfaces';\r\n\r\n/**\r\n * @hidden\r\n */\r\n@Component({\r\n tag: 'igc-root-docking-indicator-component',\r\n styleUrl: 'root-docking-indicator-component.scss',\r\n shadow: false,\r\n scoped: true\r\n})\r\nexport class IgcRootDockingIndicatorComponent {\r\n @Prop() position: IgcDockingIndicatorPosition;\r\n\r\n render() {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n",":host {\r\n height: 100%;\r\n display: flex;\r\n align-items: stretch;\r\n box-sizing: border-box;\r\n min-width: 0;\r\n min-height: 0;\r\n border: none;\r\n overflow: auto;\r\n}\r\n\r\n","import { Component, Event, EventEmitter, Host, Prop, h } from '@stencil/core';\r\n\r\nimport { IGC_DEFAULT_PANE_SIZE } from '../dockmanager.interfaces';\r\nimport { IgcSplitPaneOrientation } from '../dockmanager.public-interfaces';\r\n\r\n/**\r\n * @hidden\r\n */\r\n@Component({\r\n tag: 'igc-split-pane-component',\r\n styleUrl: 'split-pane-component.scss',\r\n shadow: false,\r\n scoped: true\r\n})\r\nexport class IgcSplitPaneComponent {\r\n @Prop() orientation: IgcSplitPaneOrientation;\r\n @Prop() size: number;\r\n @Event() rendered: EventEmitter;\r\n\r\n componentDidRender() {\r\n this.rendered.emit();\r\n }\r\n\r\n render() {\r\n const size = this.size || this.size === 0 ? this.size : IGC_DEFAULT_PANE_SIZE;\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n}\r\n",":host {\r\n position: relative;\r\n display: flex;\r\n flex: 0 0 4px;\r\n box-sizing: border-box;\r\n pointer-events: all;\r\n}\r\n\r\n.splitter {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n width: 100%;\r\n height: 100%;\r\n cursor: ew-resize;\r\n background: $splitter-background;\r\n --resize-handle-width: 2px;\r\n --resize-handle-height: 80px;\r\n outline-style: none;\r\n\r\n &:not(.splitter--custom-handle)::after {\r\n position: absolute;\r\n content: '';\r\n background: $splitter-handle;\r\n top: 50%;\r\n left: 50%;\r\n width: var(--resize-handle-width);\r\n height: var(--resize-handle-height);\r\n max-height: 100%;\r\n max-width: 100%;\r\n border-radius: 1px;\r\n transform: translateX(-50%) translateY(-50%);\r\n }\r\n\r\n &:focus-within {\r\n background-color: $active-color;\r\n }\r\n\r\n &--vertical {\r\n cursor: ns-resize;\r\n\r\n &:not(.splitter--custom-handle)::after {\r\n width: var(--resize-handle-height);\r\n height: var(--resize-handle-width);\r\n }\r\n }\r\n}\r\n\r\n.splitter-ghost {\r\n position: absolute;\r\n cursor: ew-resize;\r\n opacity: 0.3;\r\n background: black;\r\n width: 100%;\r\n height: 100%;\r\n z-index: 5;\r\n\r\n &--vertical {\r\n cursor: ns-resize;\r\n }\r\n}\r\n","import { Component, Element, Event, EventEmitter, Host, Listen, Prop, State, h } from '@stencil/core';\r\n\r\nimport { Utils } from '../../../utils/utils';\r\nimport { IgcDragMoveEventArguments, IgcDragService } from '../../drag-drop/drag.service';\r\nimport { IGC_DEFAULT_RESIZE, IGC_RESIZING_MIN_SIZE } from '../dockmanager.interfaces';\r\nimport { IgcSplitPaneOrientation, IgcUnpinnedLocation } from '../dockmanager.public-interfaces';\r\n\r\n/**\r\n * @hidden\r\n */\r\n@Component({\r\n tag: 'igc-splitter-component',\r\n styleUrl: 'splitter-component.scss',\r\n shadow: true,\r\n scoped: false\r\n})\r\nexport class IgcSplitterComponent {\r\n private dragService: IgcDragService;\r\n private paneSizes: number[];\r\n private ghostElement: HTMLElement;\r\n private flyoutMaxSize: number;\r\n\r\n @Element() element: HTMLElement;\r\n\r\n @State() dragOffset: number;\r\n @State() hasCustomSplitterHandle: boolean;\r\n\r\n @Prop() showDragGhost: boolean;\r\n @Prop() splitPaneOrientation: IgcSplitPaneOrientation;\r\n @Prop() flyoutLocation: IgcUnpinnedLocation;\r\n\r\n @Event() resizeStart: EventEmitter;\r\n @Event() resizeEnd: EventEmitter;\r\n\r\n connectedCallback() {\r\n this.dragService = new IgcDragService(this.element);\r\n this.dragService.dragStart = this.dragStart;\r\n this.dragService.dragEnd = this.dragEnd;\r\n this.dragService.dragMove = this.dragMove;\r\n }\r\n\r\n disconnectedCallback() {\r\n this.dragService.destroy();\r\n document.documentElement.removeEventListener('mouseup', this.handleMouseUp, false);\r\n }\r\n\r\n calculateOffset(event: KeyboardEvent): number {\r\n if (this.isArrowUp(event) || this.isArrowLeft(event)) {\r\n return -IGC_DEFAULT_RESIZE;\r\n } else if (this.isArrowDown(event) || this.isArrowRight(event)) {\r\n return IGC_DEFAULT_RESIZE;\r\n }\r\n }\r\n\r\n isArrowUp(event: KeyboardEvent): boolean {\r\n return event.key === 'ArrowUp';\r\n }\r\n\r\n isArrowDown(event: KeyboardEvent): boolean {\r\n return event.key === 'ArrowDown';\r\n }\r\n\r\n isArrowLeft(event: KeyboardEvent): boolean {\r\n return event.key === 'ArrowLeft';\r\n }\r\n\r\n isArrowRight(event: KeyboardEvent): boolean {\r\n return event.key === 'ArrowRight';\r\n }\r\n\r\n @Listen('keydown')\r\n handleKeydownEvent(event: KeyboardEvent) {\r\n if (this.splitPaneOrientation === IgcSplitPaneOrientation.horizontal &&\r\n (!this.isArrowLeft(event) && !this.isArrowRight(event))) {\r\n return;\r\n }\r\n if (this.splitPaneOrientation === IgcSplitPaneOrientation.vertical &&\r\n (!this.isArrowUp(event) && !this.isArrowDown(event))) {\r\n return;\r\n }\r\n\r\n this.showDragGhost = false;\r\n this.dragStartHelper(this.calculateOffset(event));\r\n\r\n if (this.flyoutLocation) {\r\n this.constrainFlyoutResize();\r\n } else {\r\n this.constrainSplitPaneResize();\r\n }\r\n\r\n this.dragEndHelper();\r\n }\r\n\r\n @Listen('mousedown')\r\n handleMouseDown() {\r\n this.showDragGhost = true;\r\n document.documentElement.addEventListener('mouseup', this.handleMouseUp, false);\r\n this.resizeStart.emit();\r\n }\r\n\r\n private handleMouseUp = () => {\r\n document.documentElement.removeEventListener('mouseup', this.handleMouseUp, false);\r\n this.showDragGhost = false;\r\n }\r\n\r\n private dragStartHelper(dragOffset: number) {\r\n this.dragOffset = dragOffset;\r\n\r\n const parent = this.element.parentElement;\r\n const children = Array.from(parent.children) as HTMLElement[];\r\n\r\n if (this.flyoutLocation) {\r\n const pane = children[0];\r\n this.paneSizes = [this.splitPaneOrientation === IgcSplitPaneOrientation.horizontal ?\r\n pane.offsetWidth : pane.offsetHeight];\r\n this.flyoutMaxSize = this.splitPaneOrientation === IgcSplitPaneOrientation.horizontal ?\r\n parent.offsetWidth - IGC_RESIZING_MIN_SIZE :\r\n parent.offsetHeight - IGC_RESIZING_MIN_SIZE;\r\n } else {\r\n const index = children.indexOf(this.element);\r\n const panes = [children[index - 1], children[index + 1]];\r\n this.paneSizes = panes.map(p => this.splitPaneOrientation === IgcSplitPaneOrientation.horizontal ?\r\n p.offsetWidth : p.offsetHeight);\r\n }\r\n }\r\n\r\n private dragStart = () => {\r\n this.dragStartHelper(0);\r\n }\r\n\r\n private dragEndHelper() {\r\n const dragOffset = this.dragOffset;\r\n this.showDragGhost = false;\r\n this.dragOffset = 0;\r\n this.paneSizes = null;\r\n this.resizeEnd.emit(dragOffset);\r\n }\r\n\r\n private dragEnd = () => {\r\n this.dragEndHelper();\r\n }\r\n\r\n private dragMove = (args: IgcDragMoveEventArguments) => {\r\n if (!this.ghostElement) {\r\n return;\r\n }\r\n\r\n const rect = this.ghostElement.getBoundingClientRect();\r\n const isHorizontal = this.splitPaneOrientation === IgcSplitPaneOrientation.horizontal;\r\n const clientCoordinate = isHorizontal ? args.clientX : args.clientY;\r\n const offset = isHorizontal ? args.offsetX : args.offsetY;\r\n const startCoordinate = isHorizontal ? rect.left : rect.top;\r\n const endCoordinate = isHorizontal ? rect.right : rect.bottom;\r\n\r\n if (offset <= 0 && startCoordinate < clientCoordinate) {\r\n return;\r\n }\r\n\r\n if (offset >= 0 && endCoordinate > clientCoordinate) {\r\n return;\r\n }\r\n\r\n this.dragOffset += offset;\r\n\r\n if (this.flyoutLocation) {\r\n this.constrainFlyoutResize();\r\n } else {\r\n this.constrainSplitPaneResize();\r\n }\r\n }\r\n\r\n private constrainFlyoutResize() {\r\n const paneSize = this.paneSizes[0];\r\n const isStartLocation = this.flyoutLocation === IgcUnpinnedLocation.left || this.flyoutLocation === IgcUnpinnedLocation.top;\r\n const offset = isStartLocation ?\r\n this.dragOffset :\r\n -this.dragOffset;\r\n\r\n if (paneSize + offset < IGC_RESIZING_MIN_SIZE) {\r\n const minOffset = paneSize - IGC_RESIZING_MIN_SIZE;\r\n this.dragOffset = isStartLocation ? -minOffset : minOffset;\r\n } else if (paneSize + offset > this.flyoutMaxSize) {\r\n const maxOffset = this.flyoutMaxSize - paneSize;\r\n this.dragOffset = isStartLocation ? maxOffset : -maxOffset;\r\n }\r\n }\r\n\r\n private constrainSplitPaneResize() {\r\n let rtl = false;\r\n const dockmanager = this.closestElement('igc-dockmanager', this.element);\r\n if (dockmanager.dir !== '') {\r\n rtl = dockmanager.dir === 'rtl';\r\n } else {\r\n let parent = dockmanager.parentElement;\r\n while (parent) {\r\n if (parent.dir !== '') {\r\n rtl = parent.dir === 'rtl';\r\n break;\r\n }\r\n\r\n parent = parent.parentElement;\r\n }\r\n }\r\n\r\n const isVertical = this.splitPaneOrientation === IgcSplitPaneOrientation.vertical;\r\n if (this.dragOffset < 0) {\r\n const referencePaneSize = !rtl || isVertical ? this.paneSizes[0] : this.paneSizes[1];\r\n if (referencePaneSize > IGC_RESIZING_MIN_SIZE) {\r\n if (referencePaneSize + this.dragOffset < IGC_RESIZING_MIN_SIZE) {\r\n this.dragOffset = -(referencePaneSize - IGC_RESIZING_MIN_SIZE);\r\n }\r\n } else {\r\n this.dragOffset = 0;\r\n }\r\n } else {\r\n const referencePaneSize = !rtl || isVertical ? this.paneSizes[1] : this.paneSizes[0];\r\n if (referencePaneSize > IGC_RESIZING_MIN_SIZE) {\r\n if (referencePaneSize - this.dragOffset < IGC_RESIZING_MIN_SIZE) {\r\n this.dragOffset = referencePaneSize - IGC_RESIZING_MIN_SIZE;\r\n }\r\n } else {\r\n this.dragOffset = 0;\r\n }\r\n }\r\n }\r\n\r\n private closestElement(selector: string, el: any): HTMLIgcDockmanagerElement {\r\n return (\r\n (el && el.closest(selector)) ||\r\n this.closestElement(selector, el.getRootNode().host)\r\n );\r\n }\r\n\r\n handleSlotChange() {\r\n const handleSlot = this.element.shadowRoot.querySelector('slot[name=\"splitterHandle\"]') as HTMLSlotElement;\r\n const isVertical = this.splitPaneOrientation === IgcSplitPaneOrientation.vertical;\r\n this.hasCustomSplitterHandle = handleSlot.assignedElements().length > 0;\r\n\r\n if (this.hasCustomSplitterHandle) {\r\n const handle = this.element.querySelector('[part=\"splitter-handle\"]');\r\n const parts = Utils.partNameMap({\r\n 'splitter-handle': true,\r\n 'vertical': isVertical,\r\n 'horizontal': !isVertical\r\n });\r\n handle.setAttribute('part', parts);\r\n }\r\n }\r\n\r\n render() {\r\n const isVertical = this.splitPaneOrientation === IgcSplitPaneOrientation.vertical;\r\n const splitterClasses = {\r\n 'splitter': true,\r\n 'splitter--vertical': isVertical,\r\n 'splitter--custom-handle': this.hasCustomSplitterHandle\r\n };\r\n\r\n const ghostClasses = {\r\n 'splitter-ghost': true,\r\n 'splitter-ghost--vertical': isVertical\r\n };\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n {this.showDragGhost &&\r\n this.ghostElement = el}\r\n />}\r\n );\r\n }\r\n}\r\n","%truncate-text {\r\n ::slotted(span) {\r\n max-width: calc(100% - 18px);\r\n @include ellipsis();\r\n }\r\n}\r\n\r\n:host {\r\n @include ellipsis();\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n box-sizing: border-box;\r\n height: 100%;\r\n padding: em(8px);\r\n user-select: none;\r\n color: $tab-text;\r\n background: $tab-background;\r\n border: {\r\n style: solid;\r\n color: $tab-border-color;\r\n top-width: 1px;\r\n left-width: 1px;\r\n bottom-width: 0;\r\n right-width: 1px;\r\n };\r\n font-size: em(12px);\r\n line-height: 2;\r\n outline-style: none;\r\n\r\n igc-icon-component svg {\r\n width: 17px;\r\n height: 17px;\r\n }\r\n\r\n * + igc-button-component {\r\n margin-left: em(8px);\r\n }\r\n}\r\n\r\n:host([part~='selected']) {\r\n color: $tab-text-active;\r\n background: $tab-background-active;\r\n border-color: $tab-border-color-active;\r\n}\r\n\r\n:host([part~='bottom']) {\r\n border: {\r\n top-width: 0;\r\n bottom-width: 1px;\r\n }\r\n\r\n &:first-of-type {\r\n border-left: none;\r\n }\r\n}\r\n\r\n:host([part~='active']) {\r\n box-shadow: inset 0 -2px 0 0 $active-color;\r\n color: $active-color;\r\n\r\n igc-icon-component {\r\n color: var(--igc-icon-active-color, $active-color);\r\n }\r\n}\r\n\r\n:host([part~='hover-preview-close']:hover) {\r\n @extend %truncate-text;\r\n}\r\n\r\n:host([part~='hover-preview-close'][part~='selected']) {\r\n @extend %truncate-text;\r\n}\r\n\r\n:host([part~='disabled']) {\r\n pointer-events: none;\r\n color: $disabled-color;\r\n}\r\n\r\n:host(:hover) {\r\n [part*='floating'] {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n[part*='floating'] {\r\n position: absolute;\r\n inset-inline-end: 0;\r\n background: inherit;\r\n opacity: 0;\r\n transition: opacity .1s ease-out;\r\n}\r\n\r\n[part*='selected'] {\r\n opacity: 1;\r\n}\r\n","import { Component, Element, Event, EventEmitter, Host, Listen, Prop, Watch, h } from '@stencil/core';\r\n\r\nimport { Utils } from '../../utils/utils';\r\nimport { IgcTabHeadersPosition } from '../dockmanager/dockmanager.interfaces';\r\nimport { IgcDockManagerResourceStrings } from '../dockmanager/dockmanager.public-interfaces';\r\nimport { IGNORE_DRAG, IgcDragEventArguments, IgcDragMoveEventArguments, IgcDragService, IgcDragStartEventArguments } from '../drag-drop/drag.service';\r\n\r\n/**\r\n * @hidden\r\n */\r\n@Component({\r\n tag: 'igc-tab-header-component',\r\n styleUrl: 'tab-header-component.scss',\r\n shadow: true,\r\n scoped: false\r\n})\r\nexport class IgcTabHeaderComponent {\r\n @Prop({ mutable: true }) dragService: IgcDragService;\r\n\r\n @Element() element: HTMLIgcTabHeaderComponentElement;\r\n\r\n @Prop() selected = false;\r\n @Prop() hovered = false;\r\n @Prop() position = IgcTabHeadersPosition.top;\r\n @Prop() iconName: string;\r\n @Prop() header: string;\r\n @Prop() isActive: boolean;\r\n @Prop() resourceStrings: IgcDockManagerResourceStrings;\r\n @Prop() forcedDrag: boolean;\r\n @Prop() disabled = false;\r\n @Prop() showHeaderIconOnHover: 'closeOnly' | 'moreOptionsOnly' | 'all';\r\n\r\n @Event() dragStarted: EventEmitter;\r\n @Event() dragMoved: EventEmitter;\r\n @Event() dragEnded: EventEmitter;\r\n @Event() tabMouseDown: EventEmitter;\r\n @Event() iconClicked: EventEmitter;\r\n @Event() iconKeyDown: EventEmitter;\r\n @Event() elementConnected: EventEmitter;\r\n @Event() elementDisconnected: EventEmitter;\r\n\r\n connectedCallback() {\r\n this.dragService = new IgcDragService(this.element);\r\n\r\n this.dragService.dragStart = args => {\r\n this.dragStarted.emit(args);\r\n };\r\n this.dragService.dragMove = args => {\r\n this.dragMoved.emit(args);\r\n };\r\n this.dragService.dragEnd = args => {\r\n this.dragEnded.emit(args);\r\n };\r\n\r\n this.forceDragging();\r\n this.elementConnected.emit(this.element);\r\n }\r\n\r\n disconnectedCallback() {\r\n if (this.dragService) {\r\n this.dragService.destroy();\r\n }\r\n this.elementDisconnected.emit(this.element);\r\n }\r\n\r\n @Listen('mousedown')\r\n handleMouseDown(ev: MouseEvent) {\r\n const iconSlot = this.element.shadowRoot.querySelector('div[part*=\"tab-header-more-options\"]');\r\n const isIconClicked = ev.composedPath().filter(p => p === iconSlot).length > 0;\r\n this.tabMouseDown.emit({ showHeaderIconOnHover: this.showHeaderIconOnHover, isIconClicked });\r\n }\r\n\r\n @Listen('mouseenter')\r\n handleMouseEnter() {\r\n this.hovered = true;\r\n }\r\n\r\n @Listen('mouseleave')\r\n handleMouseLeave() {\r\n this.hovered = false;\r\n }\r\n\r\n @Watch('forcedDrag')\r\n forcedDragChanged() {\r\n this.forceDragging();\r\n }\r\n\r\n private forceDragging() {\r\n if (this.forcedDrag) {\r\n this.dragService.forceDragging();\r\n }\r\n }\r\n\r\n @Watch('isActive')\r\n @Watch('selected')\r\n @Watch('hovered')\r\n activeChanged() {\r\n const queryButton = 'tab-header-close-button';\r\n const button = this.element.querySelector(`[part^=${queryButton}]`);\r\n const parts = Utils.partNameMap({\r\n [queryButton]: true,\r\n active: this.isActive,\r\n selected: this.selected,\r\n hovered: this.hovered\r\n });\r\n\r\n button?.setAttribute('part', parts);\r\n }\r\n\r\n private iconClick = (ev: MouseEvent) => {\r\n this.iconClicked.emit(ev);\r\n }\r\n\r\n private keyDown = (ev: KeyboardEvent) => {\r\n this.iconKeyDown.emit(ev);\r\n }\r\n\r\n private renderCloseButton() {\r\n const showHeaderIconOnHover = this.showHeaderIconOnHover && (this.showHeaderIconOnHover === 'closeOnly' || this.showHeaderIconOnHover === 'all');\r\n const shouldShowButton = this.selected || showHeaderIconOnHover;\r\n const pointerEvents = (this.selected && !this.disabled) || this.showHeaderIconOnHover ? 'all' : 'none';\r\n\r\n return (\r\n shouldShowButton && \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n private renderMoreOptionsButton() {\r\n const showHeaderIconOnHover = this.showHeaderIconOnHover && (this.showHeaderIconOnHover === 'moreOptionsOnly' || this.showHeaderIconOnHover === 'all');\r\n const shouldShowButton = this.selected || showHeaderIconOnHover;\r\n const pointerEvents = (this.selected && !this.disabled) || this.showHeaderIconOnHover ? 'all' : 'none';\r\n\r\n return (\r\n shouldShowButton && \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n render() {\r\n const showCloseOnHover = this.iconName === 'close' && this.showHeaderIconOnHover && (this.showHeaderIconOnHover === 'closeOnly' || this.showHeaderIconOnHover === 'all');\r\n const showMoreOptionsOnHover = this.iconName !== 'close' && this.showHeaderIconOnHover && (this.showHeaderIconOnHover === 'moreOptionsOnly' || this.showHeaderIconOnHover === 'all');\r\n\r\n const parts = Utils.partNameMap({\r\n 'tab-header': true,\r\n top: this.position === IgcTabHeadersPosition.top,\r\n active: this.isActive,\r\n selected: this.selected,\r\n disabled: this.disabled,\r\n 'hover-preview-close': showCloseOnHover,\r\n 'hover-preview-options': showMoreOptionsOnHover,\r\n bottom: this.position === IgcTabHeadersPosition.bottom,\r\n });\r\n\r\n const tabParts = Utils.partNameMap({\r\n 'tab-header-more-options': true,\r\n 'floating': !this.selected && (showCloseOnHover || showMoreOptionsOnHover),\r\n 'selected': this.selected\r\n });\r\n\r\n const exportparts = Utils.partNameMap({\r\n 'tab-header-close-button': true,\r\n 'tab-header-more-options': true,\r\n 'tab-header-more-options-button': true,\r\n 'floating': true,\r\n 'selected': true,\r\n 'active': true\r\n }, ',');\r\n\r\n return (\r\n \r\n \r\n {\r\n this.iconName &&\r\n
\r\n {this.iconName === 'close' ? this.renderCloseButton() : this.renderMoreOptionsButton()}\r\n
\r\n }\r\n );\r\n }\r\n}\r\n",":host {\r\n display: block;\r\n box-sizing: border-box;\r\n overflow: auto;\r\n flex-grow: 1;\r\n height: 100%;\r\n color: $pane-content-text;\r\n background-color: $pane-content-background;\r\n}\r\n\r\n:host([part~='disabled']) {\r\n pointer-events: none;\r\n color: $disabled-color;\r\n}\r\n","import { Component, Element, Event, EventEmitter, Host, Prop, Watch, h } from '@stencil/core';\r\n\r\nimport { Utils } from '../../utils/utils';\r\n\r\n/**\r\n * @hidden\r\n */\r\n@Component({\r\n tag: 'igc-tab-panel-component',\r\n styleUrl: 'tab-panel-component.scss',\r\n shadow: true,\r\n scoped: false\r\n})\r\nexport class IgcTabPanelComponent {\r\n private emitSelectedChanged = false;\r\n\r\n @Element() element: HTMLElement;\r\n\r\n @Prop() selected = false;\r\n @Prop() disabled = false;\r\n\r\n @Watch('selected')\r\n selectedPropChange() {\r\n this.emitSelectedChanged = true;\r\n }\r\n\r\n @Event()\r\n selectedChanged: EventEmitter;\r\n\r\n componentDidUpdate() {\r\n if (this.emitSelectedChanged) {\r\n this.emitSelectedChanged = false;\r\n this.selectedChanged.emit(this.selected);\r\n }\r\n }\r\n\r\n render() {\r\n const parts = Utils.partNameMap({\r\n 'tab-panel': true,\r\n selected: this.selected,\r\n disabled: this.disabled\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n}\r\n","import { Component, Element, Event, EventEmitter, Host, Listen, Prop, State, Watch, forceUpdate, h } from '@stencil/core';\r\n\r\nimport { Utils } from '../../utils/utils';\r\nimport { IGC_DEFAULT_PANE_SIZE, IgcContextMenuMetadata, IgcContextMenuOrientation, IgcTabHeadersPosition } from '../dockmanager/dockmanager.interfaces';\r\nimport { IgcDockManagerResourceStrings } from '../dockmanager/dockmanager.public-interfaces';\r\n\r\n/**\r\n * @hidden\r\n */\r\nlet NEXT_TAB_ID = 0;\r\n\r\n/**\r\n * @hidden\r\n */\r\n@Component({\r\n tag: 'igc-tabs-component',\r\n styleUrl: 'tabs-component.scss',\r\n shadow: true,\r\n scoped: false\r\n})\r\nexport class IgcTabsComponent {\r\n private forcedUpdate = false;\r\n private selectionOrder: string[] = [];\r\n\r\n @Element() el!: HTMLIgcTabsComponentElement;\r\n\r\n @State() hiddenTabsMenuMeta: IgcContextMenuMetadata;\r\n @State() hasHiddenTabs = false;\r\n\r\n @Prop() size: number;\r\n @Prop() maximized: boolean;\r\n @Prop() allowMaximize = true;\r\n @Prop() tabHeadersPosition: IgcTabHeadersPosition = IgcTabHeadersPosition.top;\r\n @Prop({ mutable: true }) selectedIndex: number;\r\n @Prop() hasHeaders = true;\r\n @Prop() showHiddenTabsMenu = true;\r\n @Prop() resourceStrings: IgcDockManagerResourceStrings;\r\n @Prop() contentIds: string[] = [];\r\n\r\n @Event() maximize: EventEmitter;\r\n @Event() maximizeMinimizeFocus: EventEmitter;\r\n\r\n @Watch('selectedIndex')\r\n selectedIndexPropertyChanged(newValue: number) {\r\n this.handleSelectedIndexChanged(newValue);\r\n this.selectedIndexChanged.emit(newValue);\r\n }\r\n\r\n @Event({ bubbles: false }) selectedIndexChanged: EventEmitter;\r\n @Event({ bubbles: false }) hiddenTabSelected: EventEmitter;\r\n @Event({ bubbles: false }) selectedTabOutOfView: EventEmitter;\r\n @Event() rendered: EventEmitter;\r\n\r\n componentWillLoad() {\r\n this.hiddenTabsMenuMeta = null;\r\n this.handleSelectedIndexChanged(this.selectedIndex);\r\n this.checkForActivePane();\r\n }\r\n\r\n componentWillUpdate() {\r\n this.updateSelection();\r\n }\r\n\r\n updateSelection() {\r\n const headers = this.tabHeaders;\r\n\r\n // if any header is removed - delete its id from selection order & update selected index\r\n const missingMatchIndex = this.selectionOrder.findIndex(s => headers.findIndex(h => h.id === s) < 0);\r\n if (missingMatchIndex > -1) {\r\n this.selectionOrder.splice(missingMatchIndex, 1);\r\n const newSelectedIndex = headers.findIndex(h => h.id === this.selectionOrder[this.selectionOrder.length - 1]);\r\n this.selectedIndex = newSelectedIndex > -1 ? newSelectedIndex : 0;\r\n }\r\n\r\n const currentSelectionId = headers[this.selectedIndex]?.id;\r\n const existingMatchIndex = this.selectionOrder.indexOf(currentSelectionId);\r\n if (existingMatchIndex > -1) {\r\n this.selectionOrder.splice(existingMatchIndex, 1);\r\n }\r\n\r\n if (currentSelectionId) {\r\n this.selectionOrder.push(currentSelectionId);\r\n }\r\n }\r\n\r\n componentDidRender() {\r\n this.rendered.emit();\r\n }\r\n\r\n componentDidLoad() {\r\n this.setTabsAttributes();\r\n\r\n this.tabHeadersDiv = this.el.shadowRoot.querySelector('div.tabs');\r\n\r\n if (this.tabHeadersDiv) {\r\n this.resizeObserver.observe(this.tabHeadersDiv);\r\n }\r\n }\r\n\r\n componentDidUpdate() {\r\n if (this.forcedUpdate) {\r\n this.forcedUpdate = false;\r\n this.checkForActivePane();\r\n }\r\n\r\n this.setHasHiddenTabs();\r\n }\r\n\r\n private setTabsAttributes() {\r\n const tabHeaders = this.tabHeaders;\r\n const tabPanels = this.tabPanels;\r\n\r\n for (let i = 0; i < tabHeaders.length; i++) {\r\n if (!tabHeaders[i].getAttribute('id')) {\r\n const tabHeaderId = `tab-item-${NEXT_TAB_ID}`;\r\n const tabPanelId = `tab-panel-${NEXT_TAB_ID++}`;\r\n\r\n tabPanels[i].setAttribute('id', tabPanelId);\r\n tabHeaders[i].setAttribute('id', tabHeaderId);\r\n\r\n tabPanels[i].setAttribute('aria-labelledby', tabHeaderId);\r\n tabHeaders[i].setAttribute('aria-controls', tabPanelId);\r\n }\r\n }\r\n }\r\n\r\n disconnectedCallback() {\r\n this.resizeObserver.disconnect();\r\n }\r\n\r\n private tabHeadersDiv: HTMLElement;\r\n private resizeObserver = new ResizeObserver(this.tabHeadersDivResized.bind(this));\r\n\r\n private slotChanged = () => {\r\n this.setTabsAttributes();\r\n this.updateSelection();\r\n this.handleSelectedIndexChanged(this.selectedIndex);\r\n this.forceUpdate();\r\n }\r\n\r\n private forceUpdate() {\r\n this.forcedUpdate = true;\r\n forceUpdate(this);\r\n }\r\n\r\n\r\n private get tabPanels() {\r\n return Array.from(this.el.querySelectorAll('igc-tab-panel-component'));\r\n }\r\n\r\n private get tabHeaders() {\r\n return Array.from(this.el.querySelectorAll('igc-tab-header-component'));\r\n }\r\n\r\n private get hiddenTabHeaders() {\r\n const containerTop = this.tabHeaders[0]?.offsetTop;\r\n return this.tabHeaders.filter(t => t.offsetTop !== containerTop);\r\n }\r\n\r\n private handleSelectedIndexChanged(newValue: number) {\r\n const tabHeaders = this.tabHeaders;\r\n const tabPanels = this.tabPanels;\r\n\r\n tabHeaders.forEach((t, i) => {\r\n t.selected = i === newValue;\r\n });\r\n\r\n tabPanels.forEach((t, i) => {\r\n t.selected = i === newValue;\r\n });\r\n }\r\n\r\n @Listen('tabMouseDown')\r\n handleTabMouseDown(ev: CustomEvent) {\r\n const tabHeader = ev.target as HTMLIgcTabHeaderComponentElement;\r\n const tabHeaders = this.tabHeaders;\r\n const headerIndex = tabHeaders.indexOf(tabHeader);\r\n if (headerIndex >= 0 && (!ev.detail.showHeaderIconOnHover || !ev.detail.isIconClicked)) {\r\n this.selectedIndex = headerIndex;\r\n }\r\n }\r\n\r\n private onTabKeyDown = (ev: KeyboardEvent) => {\r\n const tabHeaders = this.tabHeaders;\r\n if (Utils.isAltPressed(ev) || Utils.isControlOrMetaPressed(ev) || ev.shiftKey) {\r\n return;\r\n }\r\n\r\n if (ev.key === 'ArrowRight') {\r\n for (let i = this.selectedIndex; i < tabHeaders.length - this.hiddenTabHeaders.length - 1; i++) {\r\n if (!tabHeaders[i + 1].disabled) {\r\n this.selectedIndex = i + 1;\r\n tabHeaders[i + 1].focus();\r\n return;\r\n }\r\n }\r\n } else if (ev.key === 'ArrowLeft') {\r\n for (let i = this.selectedIndex; i > 0; i--) {\r\n if (!tabHeaders[i - 1].disabled) {\r\n this.selectedIndex = i - 1;\r\n tabHeaders[i - 1].focus();\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n\r\n private tabHeadersDivResized() {\r\n const containerTop = this.tabHeaders[0]?.offsetTop;\r\n const selectedTabHeader = this.tabHeaders.filter(t => t.selected)[0];\r\n if (selectedTabHeader?.offsetTop !== containerTop) {\r\n const index = this.selectedIndex;\r\n this.selectedTabOutOfView.emit(index);\r\n }\r\n\r\n this.setHasHiddenTabs();\r\n }\r\n\r\n private setHasHiddenTabs() {\r\n this.hasHiddenTabs = this.hiddenTabHeaders.length > 0;\r\n }\r\n\r\n private checkForActivePane() {\r\n const activeTabHeader = this.tabHeaders.filter(t => t.isActive);\r\n if (activeTabHeader.length > 0) {\r\n const hiddenActiveTabIndex = this.hiddenTabHeaders.indexOf(activeTabHeader[0]);\r\n const activeTabIndex = this.tabHeaders.indexOf(activeTabHeader[0]);\r\n if (hiddenActiveTabIndex >= 0) {\r\n this.selectedTabOutOfView.emit(activeTabIndex);\r\n } else if (activeTabIndex >= 0) {\r\n this.selectedIndex = activeTabIndex;\r\n }\r\n }\r\n }\r\n\r\n private handleHiddenTabsMenuClick(ev: CustomEvent) {\r\n const button = ev.currentTarget as HTMLElement;\r\n\r\n const items = this.hiddenTabHeaders.map(header => ({\r\n displayText: header.header,\r\n disabled: header.disabled,\r\n iconName: null,\r\n clickHandler: () => {\r\n const index = this.tabHeaders.indexOf(header);\r\n this.hiddenTabSelected.emit(index);\r\n }\r\n }));\r\n\r\n this.hiddenTabsMenuMeta = { target: button, menuItems: items, position: 'end' };\r\n }\r\n\r\n private handleContextMenuClosed() {\r\n this.hiddenTabsMenuMeta = null;\r\n }\r\n\r\n private maximizeButtonClick = () => {\r\n this.maximize.emit();\r\n }\r\n\r\n private handleMaximizeMinimizeFocus = () => {\r\n this.maximizeMinimizeFocus.emit();\r\n }\r\n\r\n private renderHiddenTabsMenu() {\r\n return this.hiddenTabsMenuMeta && (\r\n \r\n );\r\n }\r\n\r\n private renderTabHeaders(top: boolean) {\r\n const classes = {\r\n 'tabs': true,\r\n 'tabs--top': top,\r\n 'tabs--bottom': !top\r\n };\r\n\r\n const commontParts = { top, bottom: !top };\r\n\r\n const tabStripParts = Utils.partNameMap({ 'tab-strip-area': true, ...commontParts });\r\n const tabStripActionsParts = Utils.partNameMap({\r\n 'tab-strip-actions': true,\r\n ...commontParts\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n
\r\n {this.showHiddenTabsMenu && this.hasHiddenTabs &&\r\n
\r\n {this.renderMoreTabsButton()}\r\n
}\r\n { !(this.showHiddenTabsMenu && this.hasHiddenTabs) &&\r\n \r\n }\r\n {this.allowMaximize &&\r\n
\r\n {this.maximized ? this.renderMinimizeButton() : this.renderMaximizeButton()}\r\n
\r\n }\r\n
\r\n \r\n );\r\n }\r\n\r\n private renderMoreTabsButton() {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n private renderMaximizeButton() {\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n private renderMinimizeButton() {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n render() {\r\n const size = this.size || this.size === 0 ? this.size : IGC_DEFAULT_PANE_SIZE;\r\n const top = this.tabHeadersPosition === IgcTabHeadersPosition.top;\r\n const bottom = this.tabHeadersPosition === IgcTabHeadersPosition.bottom;\r\n const contentIds = this.contentIds.join(' ');\r\n const parts = \"tabs-container \" + contentIds;\r\n\r\n const tabsContentParts = Utils.partNameMap({ 'tabs-content': true, document: top });\r\n const exportParts = Utils.partNameMap({\r\n 'tab-strip-area': true,\r\n 'tab-strip-actions': true,\r\n 'tabs-content': true,\r\n 'tabs-more-button': true,\r\n 'tabs-maximize-button': true,\r\n 'tabs-minimize-button': true,\r\n 'context-menu-content: tabs-more-menu-content': true,\r\n 'context-menu-item: tabs-more-menu-item': true,\r\n document: top,\r\n top,\r\n bottom\r\n }, ',');\r\n\r\n return (\r\n \r\n {top && this.renderTabHeaders(top)}\r\n
\r\n \r\n
\r\n {bottom && this.renderTabHeaders(top)}\r\n {this.renderHiddenTabsMenu()}\r\n \r\n );\r\n }\r\n}\r\n",":host {\r\n display: flex;\r\n flex-direction: column;\r\n box-sizing: border-box;\r\n min-width: 0px;\r\n min-height: 0px;\r\n}\r\n\r\n.tabs {\r\n display: flex;\r\n overflow: hidden;\r\n min-height: $tab-header-height;\r\n max-height: $tab-header-height;\r\n background: $dock-background;\r\n\r\n &--top {\r\n padding-top: $tab-header-padding;\r\n\r\n .tab-headers-container--wrapped {\r\n flex-wrap: wrap;\r\n }\r\n }\r\n\r\n &--bottom {\r\n padding-bottom: $tab-header-padding;\r\n\r\n .tab-headers-container--wrapped {\r\n flex-wrap: wrap-reverse;\r\n }\r\n }\r\n}\r\n\r\n.content {\r\n flex-grow: 1;\r\n height: 100%;\r\n overflow: auto;\r\n}\r\n\r\n.tab-headers-container {\r\n width: 100%;\r\n display: flex;\r\n overflow: hidden;\r\n}\r\n\r\n\r\n.tab-header-icon-container {\r\n display: flex;\r\n flex-grow: 1;\r\n justify-content: flex-end;\r\n padding-left: 8px;\r\n padding-right: 8px;\r\n}\r\n",":host {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n flex-direction: column;\r\n box-sizing: border-box;\r\n user-select: none;\r\n font-size: 12px;\r\n padding: 4px;\r\n margin-right: 4px;\r\n color: $pinned-header-text;\r\n background: $pinned-header-background;\r\n cursor: pointer;\r\n outline-style: none;\r\n}\r\n\r\n:host([part~='vertical']) {\r\n writing-mode: tb-rl;\r\n margin-right: unset;\r\n margin-bottom: 4px;\r\n}\r\n\r\n:host([part~='active']) {\r\n color: $active-color;\r\n box-shadow: inset 0 -2px 0 0 $active-color;\r\n}\r\n\r\n:host([part~='vertical'][part~='active']) {\r\n box-shadow: inset 2px 0 0 0 $active-color;\r\n}\r\n\r\n:host([part~='disabled']) {\r\n pointer-events: none;\r\n color: $disabled-color;\r\n}\r\n","import { Component, Host, Prop, h } from '@stencil/core';\r\n\r\nimport { Utils } from '../../../utils/utils';\r\nimport { IgcUnpinnedLocation } from '../dockmanager.public-interfaces';\r\n\r\n/**\r\n * @hidden\r\n */\r\n@Component({\r\n tag: 'igc-unpinned-pane-header-component',\r\n styleUrl: 'unpinned-pane-header-component.scss',\r\n shadow: true,\r\n scoped: false\r\n})\r\nexport class IgcUnpinnedPaneHeaderComponent {\r\n @Prop() location: IgcUnpinnedLocation;\r\n @Prop() isActive: boolean;\r\n @Prop() disabled = false;\r\n\r\n render() {\r\n const isHorizontal = this.location === IgcUnpinnedLocation.top || this.location === IgcUnpinnedLocation.bottom;\r\n const isLeft = this.location === IgcUnpinnedLocation.left;\r\n const isRight = this.location === IgcUnpinnedLocation.right;\r\n const isTop = this.location === IgcUnpinnedLocation.top;\r\n const isBottom = this.location === IgcUnpinnedLocation.bottom;\r\n\r\n const parts = Utils.partNameMap({\r\n 'unpinned-pane-header': true,\r\n horizontal: isHorizontal,\r\n vertical: !isHorizontal,\r\n start: isLeft || isTop,\r\n end: isRight || isBottom,\r\n active: this.isActive,\r\n disabled: this.disabled,\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","import { Component, Host, Prop, h } from '@stencil/core';\r\n\r\nimport { addResourceStrings } from '../..';\r\nimport {\r\n IgcActivePaneEventArgs, IgcContentPane, IgcDockManagerComponent, IgcDockManagerLayout, IgcDockManagerPane, IgcDockManagerPaneType, IgcDockManagerResourceStrings, IgcDockingIndicatorPosition, IgcFloatingPaneResizeEventArgs, IgcFloatingPaneResizeMoveEventArgs, IgcPaneCloseEventArgs, IgcPaneDragActionType,\r\n IgcPaneDragOverEventArgs, IgcPanePinnedEventArgs, IgcPaneScrollEventArgs, IgcSplitPaneOrientation, IgcTabGroupPane, IgcUnpinnedLocation\r\n} from '../dockmanager/dockmanager.public-interfaces';\r\n\r\n/**\r\n * @hidden\r\n */\r\nconst customResourceStrings: IgcDockManagerResourceStrings = {\r\n close: '[Custom]Close',\r\n pin: '[Custom]Pin',\r\n unpin: '[Custom]Unpin',\r\n maximize: '[Custom]Maximize',\r\n minimize: '[Custom]Minimize',\r\n moreOptions: '[Custom]More options'\r\n};\r\naddResourceStrings('custom', customResourceStrings);\r\n\r\n/**\r\n * @hidden\r\n */\r\n@Component({\r\n tag: 'sample-component',\r\n styleUrl: 'sample-component.css',\r\n shadow: false,\r\n scoped: true\r\n})\r\nexport class SampleComponent {\r\n @Prop({ mutable: true })\r\n hiddenPanes: IgcContentPane[] = [];\r\n\r\n dockManager: IgcDockManagerComponent;\r\n\r\n private teamExplorerPane: IgcContentPane = {\r\n type: IgcDockManagerPaneType.contentPane,\r\n header: 'Team Explorer',\r\n contentId: 'content7',\r\n allowMaximize: true\r\n };\r\n\r\n private unpinnedToolboxPane: IgcContentPane = {\r\n type: IgcDockManagerPaneType.contentPane,\r\n header: 'Toolbox',\r\n contentId: 'content1',\r\n isPinned: false,\r\n unpinnedHeaderId: \"toolboxHeader\"\r\n };\r\n\r\n private unpinnedTeamExplorerPane: IgcContentPane = {\r\n type: IgcDockManagerPaneType.contentPane,\r\n header: 'Team Explorer',\r\n contentId: 'content14',\r\n isPinned: false,\r\n unpinnedHeaderId: \"teamExplorerHeader\"\r\n };\r\n\r\n layout1: IgcDockManagerLayout = {\r\n rootPane: {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n panes: [\r\n this.unpinnedToolboxPane,\r\n this.unpinnedTeamExplorerPane,\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n size: 300,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.documentHost,\r\n size: 300,\r\n rootPane: {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n allowEmpty: true,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.tabGroupPane,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n header: 'MainWindow.xaml',\r\n contentId: 'content2',\r\n documentOnly: true,\r\n // allowMaximize: false,\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n header: 'MainWindow.xaml.cs',\r\n contentId: 'content6',\r\n documentOnly: true,\r\n allowFloating: false\r\n }\r\n ]\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n header: 'App.xaml',\r\n contentId: 'content8',\r\n allowMaximize: true,\r\n acceptsInnerDock: false\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n allowEmpty: true,\r\n panes: []\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n header: 'Error List',\r\n contentId: 'content3',\r\n allowDocking: false,\r\n allowFloating: false,\r\n allowMaximize: false\r\n }]\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.tabGroupPane,\r\n size: 200,\r\n allowEmpty: true,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n header: 'Solution Explorer',\r\n headerId: 'header1',\r\n tabHeaderId: 'tabHeader1',\r\n unpinnedHeaderId: 'unpinnedHeader1',\r\n contentId: 'content4',\r\n allowMaximize: false\r\n },\r\n this.teamExplorerPane\r\n ]\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n header: 'Properties',\r\n contentId: 'content5',\r\n unpinnedLocation: IgcUnpinnedLocation.top,\r\n allowFloating: false,\r\n allowMaximize: false\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n floatingPanes: [\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n floatingLocation: { x: 50, y: 100 },\r\n floatingWidth: 200,\r\n floatingHeight: 100,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n header: 'Notifications',\r\n contentId: 'content9',\r\n allowDocking: false\r\n }\r\n ],\r\n // floatingResizable: true\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n allowEmpty: true,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n floatingLocation: { x: 250, y: 350 },\r\n floatingWidth: 300,\r\n floatingHeight: 200,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n header: 'Floating 1',\r\n contentId: 'content10',\r\n acceptsInnerDock: false\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n header: 'Floating 2',\r\n contentId: 'content11',\r\n allowMaximize: false\r\n }\r\n ]\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n floatingLocation: { x: 750, y: 200 },\r\n floatingWidth: 300,\r\n floatingHeight: 200,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.tabGroupPane,\r\n allowEmpty: true,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n header: 'Floating Tab 1',\r\n contentId: 'content12'\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n header: 'Floating Tab 2',\r\n contentId: 'content13'\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n };\r\n\r\n layout2: IgcDockManagerLayout = {\r\n rootPane: {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content1',\r\n header: 'Content Pane 1'\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content2',\r\n header: 'Unpinned Pane 1',\r\n isPinned: false\r\n }\r\n ]\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n size: 200,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.documentHost,\r\n size: 200,\r\n rootPane: {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.tabGroupPane,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n header: 'Document 1',\r\n contentId: 'content3'\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n header: 'Document 2',\r\n contentId: 'content4'\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content5',\r\n header: 'Unpinned Pane 2',\r\n isPinned: false\r\n }\r\n ]\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.tabGroupPane,\r\n size: 200,\r\n // selectedIndex: 1,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content6',\r\n header: 'Tab 1'\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content7',\r\n header: 'Tab 2'\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content8',\r\n header: 'Tab 3'\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content9',\r\n header: 'Tab 4'\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content10',\r\n header: 'Tab 5'\r\n }\r\n\r\n ]\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content11',\r\n header: 'Content Pane 2'\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n floatingPanes: [\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n floatingHeight: 150,\r\n floatingWidth: 250,\r\n floatingLocation: { x: 300, y: 200 },\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content12',\r\n header: 'Floating Pane'\r\n }\r\n ]\r\n }\r\n ]\r\n };\r\n\r\n layout: IgcDockManagerLayout = this.layout1;\r\n\r\n private hiddenPanesSelect: HTMLSelectElement;\r\n private hideOnCloseCheckbox: HTMLInputElement;\r\n private savedLayout: string;\r\n private logEnabled = false;\r\n\r\n private saveLayout() {\r\n this.savedLayout = JSON.stringify(this.dockManager.layout);\r\n }\r\n\r\n private loadLayout() {\r\n this.dockManager.layout = JSON.parse(this.savedLayout);\r\n }\r\n\r\n private setActivePane() {\r\n // this.dockManager.activePane = this.teamExplorerPane;\r\n this.dockManager.activePane = this.unpinnedToolboxPane;\r\n }\r\n\r\n private id = 100;\r\n private newId: string;\r\n\r\n private addPane() {\r\n this.newId = `content${this.id++}`;\r\n const newDiv = this.createElement(this.newId, 'input');\r\n this.dockManager.appendChild(newDiv);\r\n\r\n this.layout.floatingPanes[1].panes.push({\r\n type: IgcDockManagerPaneType.contentPane,\r\n header: 'NewPane',\r\n contentId: this.newId\r\n });\r\n\r\n this.dockManager.layout = { ...this.layout };\r\n }\r\n\r\n private addTab() {\r\n this.findElement(this.layout.rootPane, IgcDockManagerPaneType.tabGroupPane);\r\n\r\n this.newId = `content${this.id++}`;\r\n const newDiv = this.createElement(this.newId, 'button');\r\n this.dockManager.appendChild(newDiv);\r\n\r\n const tabGroupPane = this.foundElem[0] as IgcTabGroupPane;\r\n tabGroupPane.panes.push({\r\n type: IgcDockManagerPaneType.contentPane,\r\n header: 'NewTab',\r\n contentId: this.newId\r\n });\r\n\r\n this.dockManager.layout = { ...this.layout };\r\n }\r\n\r\n private disableContentPane() {\r\n this.findElement(this.layout.rootPane, IgcDockManagerPaneType.tabGroupPane);\r\n\r\n const tabGroupPane = this.foundElem[0] as IgcTabGroupPane;\r\n tabGroupPane.panes[0].disabled = true;\r\n this.dockManager.layout = { ...this.layout };\r\n }\r\n\r\n private toggleProximityDock() {\r\n this.dockManager.proximityDock = !this.dockManager.proximityDock;\r\n }\r\n\r\n private focusPane() {\r\n this.dockManager.focusPane('content12');\r\n }\r\n\r\n private foundElem: IgcDockManagerPane[] = [];\r\n private findElement(pane: IgcDockManagerPane, type: IgcDockManagerPaneType) {\r\n if (!pane) { return; }\r\n\r\n if (pane.type === type) {\r\n this.foundElem.push(pane);\r\n }\r\n\r\n if (pane.type === IgcDockManagerPaneType.tabGroupPane || pane.type === IgcDockManagerPaneType.splitPane) {\r\n for (const c of pane.panes) {\r\n this.findElement(c, type);\r\n }\r\n }\r\n\r\n if (pane.type === IgcDockManagerPaneType.documentHost) {\r\n this.findElement(pane.rootPane, type);\r\n }\r\n }\r\n\r\n private showPane() {\r\n const index = this.hiddenPanesSelect.selectedIndex;\r\n\r\n if (index >= 0) {\r\n this.hiddenPanes[index].hidden = false;\r\n this.hiddenPanes.splice(index, 1);\r\n this.hiddenPanes = [...this.hiddenPanes];\r\n this.dockManager.layout = { ...this.dockManager.layout };\r\n }\r\n }\r\n\r\n private showAllPanes() {\r\n if (this.hiddenPanes.length > 0) {\r\n for (const pane of this.hiddenPanes) {\r\n pane.hidden = false;\r\n }\r\n this.hiddenPanes = [];\r\n this.dockManager.layout = { ...this.dockManager.layout };\r\n }\r\n }\r\n\r\n private toggleInBoundaries() {\r\n this.dockManager.containedInBoundaries = !this.dockManager.containedInBoundaries;\r\n }\r\n\r\n private createElement(content: string, typeOfElement: string): HTMLElement {\r\n const someContent = document.createTextNode(content);\r\n let elem: HTMLElement;\r\n switch (typeOfElement) {\r\n case ('button'):\r\n elem = document.createElement('button');\r\n elem.appendChild(someContent);\r\n break;\r\n case ('input'):\r\n elem = document.createElement('input');\r\n break;\r\n }\r\n\r\n const divContent = document.createElement('div');\r\n divContent.appendChild(elem ? elem : someContent);\r\n divContent.setAttribute('slot', content);\r\n divContent.setAttribute('style', 'width: 100%; height: 100%;');\r\n\r\n return divContent;\r\n }\r\n\r\n private handlePaneClose(event: CustomEvent) {\r\n this.log(event);\r\n\r\n if (this.hideOnCloseCheckbox.checked) {\r\n for (const pane of event.detail.panes) {\r\n pane.hidden = true;\r\n this.hiddenPanes.splice(0, 0, pane);\r\n this.hiddenPanes = [...this.hiddenPanes];\r\n }\r\n event.preventDefault();\r\n }\r\n\r\n // const panes = event.detail.panes;\r\n // const confirmed = confirm(`Are you sure you want to close panes '${panes.map(p => p.header).join(', ')}'?`);\r\n // // event.detail.panes = [panes[0]];\r\n // if (confirmed) {\r\n // for (const pane of panes) {\r\n // const contentChild = this.dockManager.querySelector(`[slot=${pane.contentId}]`);\r\n // this.dockManager.removeChild(contentChild);\r\n // }\r\n // } else {\r\n // event.preventDefault();\r\n // }\r\n }\r\n\r\n private handlePaneScroll(event: CustomEvent) {\r\n this.log(event);\r\n\r\n // // check if the pane content is scrolled to bottom\r\n // let scrolledToBottom = false;\r\n // const contentEl = event.detail.contentElement;\r\n // if (contentEl.scrollHeight - contentEl.scrollTop - contentEl.clientHeight < 1)\r\n // {\r\n // scrolledToBottom = true;\r\n // }\r\n // this.log(\"Scrolled to bottom: \" + scrolledToBottom);\r\n }\r\n\r\n private handlePinnedToggle(event: CustomEvent) {\r\n this.log(event);\r\n // if (event.detail.sourcePane.type === IgcDockManagerPaneType.contentPane) {\r\n // event.detail.panes = [event.detail.sourcePane];\r\n // }\r\n // event.preventDefault();\r\n }\r\n\r\n private handleActivePaneChanged(event: CustomEvent) {\r\n this.log(event);\r\n }\r\n\r\n private handleDragStart(event: CustomEvent) {\r\n this.log(event);\r\n\r\n // event.preventDefault();\r\n }\r\n\r\n private handleDragOver(event: CustomEvent) {\r\n const args = event.detail;\r\n this.log(args.action);\r\n\r\n if (args.action.type === IgcPaneDragActionType.dockPane) {\r\n if (args.action.dockingIndicator.position === IgcDockingIndicatorPosition.left) {\r\n // args.isValid = false;\r\n }\r\n } else if (args.action.type === IgcPaneDragActionType.floatPane) {\r\n // args.action.height = Math.min(args.action.height, 500);\r\n // args.isValid = false;\r\n } else if (args.action.type === IgcPaneDragActionType.moveFloatingPane) {\r\n // if (args.action.newLocation.y < 0) {\r\n // args.isValid = false;\r\n // }\r\n }\r\n }\r\n\r\n private handleDragEnd(event: CustomEvent) {\r\n this.log(event);\r\n }\r\n\r\n private handleSplitterResizeStart(event: CustomEvent) {\r\n this.log(event, { ...event.detail });\r\n // event.preventDefault();\r\n }\r\n\r\n private handleSplitterResizeEnd(event: CustomEvent) {\r\n this.log(event, { ...event.detail });\r\n }\r\n\r\n private handleFloatingPaneResizeStart(event: CustomEvent) {\r\n this.log(event, { ...event.detail });\r\n // event.preventDefault();\r\n }\r\n\r\n private handleFloatingPaneResizeMove(event: CustomEvent) {\r\n this.log(event, { ...event.detail });\r\n }\r\n\r\n private handleFloatingPaneResizeEnd(event: CustomEvent) {\r\n this.log(event, { ...event.detail });\r\n }\r\n\r\n private handleLayoutChange(event: CustomEvent) {\r\n this.log(event);\r\n }\r\n\r\n // private getCustomResourceStrings(): IgcDockManagerResourceStrings {\r\n // const customResourceStrings: IgcDockManagerResourceStrings = {\r\n // close: '[Custom]Close',\r\n // pin: '[Custom]Pin',\r\n // unpin: '[Custom]Unpin',\r\n // maximize: '[Custom]Maximize',\r\n // minimize: '[Custom]Minimize',\r\n // moreOptions: '[Custom]More options'\r\n // };\r\n\r\n // return customResourceStrings;\r\n // }\r\n\r\n private log(message?: any, ...optionalParams: any[]) {\r\n if (this.logEnabled) {\r\n console.log(message, optionalParams);\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n this.hideOnCloseCheckbox = el}\r\n />\r\n \r\n Hidden Panes:\r\n this.hiddenPanesSelect = el}\r\n >\r\n {this.hiddenPanes.map(p => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n
\r\n this.dockManager = el}\r\n // allowFloatingPanesResize={false}\r\n showHeaderIconOnHover={'closeOnly'}\r\n // contextMenuPosition='start'\r\n // allowInnerDock={false}\r\n // proximityDock={true}\r\n // showPaneHeaders='onHoverOnly'\r\n >\r\n
\r\n Solution Explorer\r\n \r\n
\r\n
\r\n Solution Explorer\r\n \r\n
\r\n
\r\n Solution Explorer\r\n \r\n
\r\n\r\n \r\n {/* \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n */}\r\n\r\n
Content 1
\r\n
\r\n \r\n
\r\n
Content 3
\r\n
Content 4
\r\n
Content 5
\r\n
Content 6
\r\n
Content 7
\r\n
Content 8
\r\n
Content 9
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n

Content 12

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

\r\n
\r\n
Content 13
\r\n
Content 14
\r\n\r\n
\r\n [U] Toolbox\r\n
\r\n
\r\n [U] Team Explorer\r\n
\r\n\r\n \r\n
);\r\n }\r\n}\r\n",":host {\r\n display: flex;\r\n flex-direction: column;\r\n height: 100%;\r\n}\r\n\r\n/* igc-dockmanager {\r\n background-color: gray;\r\n}\r\n\r\nigc-dockmanager::part(pane-header) {\r\n background-color: white;\r\n}\r\n\r\nigc-dockmanager::part(splitter) {\r\n flex: 0 0 15px;\r\n pointer-events: none;\r\n visibility: hidden;\r\n}\r\n\r\nigc-dockmanager::part(splitter-base) {\r\n background: transparent;\r\n pointer-events: none;\r\n}\r\n\r\nigc-dockmanager::part(splitter-base)::after {\r\n content: none;\r\n}\r\n\r\nigc-dockmanager::part(content-pane) {\r\n border-radius: 10px;\r\n}\r\n\r\nigc-dockmanager::part(context-menu) {\r\n background-color: wheat;\r\n}\r\n\r\nigc-dockmanager::part(floating-window) {\r\n border-color: red;\r\n}\r\n\r\nigc-dockmanager::part(pane-header) {\r\n display: none;\r\n}\r\n\r\nigc-dockmanager::part(document-tab-header) {\r\n display: none;\r\n}\r\n\r\nigc-dockmanager::part(tab-strip-area) {\r\n display: none;\r\n}\r\n\r\nigc-dockmanager::part(document-panel) {\r\n padding: 10px;\r\n}\r\n\r\nigc-dockmanager::part(root-docking-indicator) {\r\n background-color: red;\r\n}\r\n\r\nigc-dockmanager::part(docking-indicator) {\r\n background-color: chocolate;\r\n}\r\n\r\nigc-dockmanager::part(docking-preview) {\r\n background-color: chocolate;\r\n}\r\n\r\nigc-dockmanager::part(unpinned-pane-header) {\r\n background-color: lightgreen;\r\n}\r\n\r\nigc-dockmanager::part(pane-header-actions) {\r\n background-color: lightgreen;\r\n}\r\n\r\nigc-dockmanager::part(floating-pane-header-actions) {\r\n background-color: lightpink;\r\n}\r\n\r\nigc-dockmanager::part(floating-window-header-actions) {\r\n visibility: collapse;\r\n pointer-events: none;\r\n}\r\n\r\nigc-dockmanager::part(tab-strip-actions) {\r\n visibility: collapse;\r\n pointer-events: none;\r\n} \r\n\r\nigc-dockmanager::part(tabs-more-button) {\r\n color: red;\r\n}\r\n\r\nigc-dockmanager::part(context-menu-item) {\r\n background-color: greenyellow;\r\n}\r\n\r\nigc-dockmanager::part(context-menu-content) {\r\n background-color: coral;\r\n padding: 5px;\r\n}\r\n\r\nigc-dockmanager::part(tabs-more-menu-content) {\r\n background-color: plum;\r\n padding: 5px;\r\n}\r\n\r\nigc-dockmanager::part(tabs-more-menu-item) {\r\n background-color: cyan;\r\n} \r\n\r\nigc-dockmanager::part(content2) {\r\n min-width: 350px;\r\n max-height: 550px;\r\n} \r\n\r\nigc-dockmanager::part(content10) {\r\n min-width: 350px;\r\n max-width: 500px;\r\n min-height: 350px;\r\n}\r\n\r\nigc-dockmanager::part(content11) {\r\n min-width: 350px;\r\n max-width: 500px;\r\n min-height: 350px;\r\n}\r\n*/"],"sourceRoot":""}