igniteui-dockmanager 1.18.0-beta.2 → 1.18.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/custom-elements.json +27 -43
  2. package/dist/cjs/igc-button-component_22.cjs.entry.js +114 -125
  3. package/dist/cjs/igc-button-component_22.cjs.entry.js.map +1 -1
  4. package/dist/cjs/igniteui-dockmanager.cjs.js +1 -1
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/collection/components/dockmanager/dockmanager-component.js +71 -40
  7. package/dist/collection/components/dockmanager/dockmanager-component.js.map +1 -1
  8. package/dist/collection/components/dockmanager/dockmanager.service.js +7 -39
  9. package/dist/collection/components/dockmanager/dockmanager.service.js.map +1 -1
  10. package/dist/collection/components/dockmanager/panes/splitter-component.css +5 -9
  11. package/dist/collection/components/dockmanager/panes/splitter-component.js +34 -67
  12. package/dist/collection/components/dockmanager/panes/splitter-component.js.map +1 -1
  13. package/dist/collection/components/sample-component/sample-component.css +3 -3
  14. package/dist/collection/styles/igc.themes.css +6 -6
  15. package/dist/esm/igc-button-component_22.entry.js +114 -125
  16. package/dist/esm/igc-button-component_22.entry.js.map +1 -1
  17. package/dist/esm/igniteui-dockmanager.js +1 -1
  18. package/dist/esm/loader.js +1 -1
  19. package/dist/igniteui-dockmanager/igniteui-dockmanager.esm.js +1 -1
  20. package/dist/igniteui-dockmanager/igniteui-dockmanager.esm.js.map +1 -1
  21. package/dist/igniteui-dockmanager/p-74fc4de0.entry.js +2 -0
  22. package/dist/igniteui-dockmanager/p-74fc4de0.entry.js.map +1 -0
  23. package/dist/igniteui-dockmanager/styles/igc.themes.css +6 -6
  24. package/dist/types/components/dockmanager/dockmanager.service.d.ts +1 -2
  25. package/dist/types/components/dockmanager/panes/splitter-component.d.ts +4 -8
  26. package/dist/types/components.d.ts +0 -10
  27. package/loader/cdn.js +2 -2
  28. package/loader/index.cjs.js +2 -2
  29. package/package.json +1 -1
  30. package/dist/igniteui-dockmanager/p-bc8791fb.entry.js +0 -2
  31. package/dist/igniteui-dockmanager/p-bc8791fb.entry.js.map +0 -1
@@ -1 +1 @@
1
- {"file":"igc-button-component.igc-content-pane-component.igc-context-menu-component.igc-dockmanager.igc-document-host-component.igc-edge-docking-indicator-component.igc-floating-pane-component.igc-icon-component.igc-joystick-icon-component.igc-joystick-indicator-component.igc-pane-header-component.igc-pane-navigator-component.igc-resizer-component.igc-root-docking-indicator-component.igc-split-pane-component.igc-splitter-component.igc-splitter-docking-indicator-component.igc-tab-header-component.igc-tab-panel-component.igc-tabs-component.igc-unpinned-pane-header-component.sample-component.entry.cjs.js","mappings":"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","names":["h","Host","IgcDockingIndicatorPosition","IgcSplitPaneOrientation","Fragment","IgcDockManagerPaneType","IgcUnpinnedLocation","IgcPaneActionBehavior","IgcResizerLocation","IgcPaneDragActionType","resourceStringsMap","forceUpdate","index","addResourceStrings"],"sources":["src/components/button/button-component.scss?tag=igc-button-component&encapsulation=shadow","src/components/button/button-component.tsx","src/utils/utils.ts","src/components/dockmanager/dockmanager.interfaces.ts","src/components/dockmanager/panes/content-pane-component.scss?tag=igc-content-pane-component&encapsulation=shadow","src/components/dockmanager/panes/content-pane-component.tsx","src/components/context-menu/context-menu-component.scss?tag=igc-context-menu-component&encapsulation=shadow","src/components/context-menu/context-menu-component.tsx","node_modules/igniteui-trial-watermark/index.js","src/utils/two-way-map.ts","src/components/dockmanager/dockmanager.service.ts","src/components/dockmanager/keyboard/keyboard.service.ts","src/components/dockmanager/dockmanager-component.scss?tag=igc-dockmanager&encapsulation=shadow","src/components/dockmanager/dockmanager-component.tsx","src/components/dockmanager/panes/document-host-component.css?tag=igc-document-host-component&encapsulation=scoped","src/components/dockmanager/panes/document-host-component.tsx","src/components/dockmanager/docking/edge-docking-indicator-component.scss?tag=igc-edge-docking-indicator-component&encapsulation=scoped","src/components/dockmanager/docking/edge-docking-indicator-component.tsx","src/components/dockmanager/panes/floating-pane-component.scss?tag=igc-floating-pane-component&encapsulation=shadow","src/components/dockmanager/panes/floating-pane-component.tsx","src/components/icon/icons.ts","src/components/icon/icon-component.scss?tag=igc-icon-component&encapsulation=scoped","src/components/icon/icon-component.tsx","src/components/dockmanager/docking/joystick-icon-component.scss?tag=igc-joystick-icon-component&encapsulation=scoped","src/components/dockmanager/docking/joystick-icon-component.tsx","src/components/dockmanager/docking/joystick-indicator-component.scss?tag=igc-joystick-indicator-component&encapsulation=scoped","src/components/dockmanager/docking/joystick-indicator-component.tsx","src/components/drag-drop/drag.service.ts","src/components/dockmanager/panes/pane-header-component.scss?tag=igc-pane-header-component&encapsulation=shadow","src/components/dockmanager/panes/pane-header-component.tsx","src/components/dockmanager/pane-navigator/pane-navigator-component.scss?tag=igc-pane-navigator-component&encapsulation=shadow","src/components/dockmanager/pane-navigator/pane-navigator-component.tsx","src/components/dockmanager/panes/resizer-component.scss?tag=igc-resizer-component&encapsulation=scoped","src/components/dockmanager/panes/resizer-component.tsx","src/components/dockmanager/docking/root-docking-indicator-component.scss?tag=igc-root-docking-indicator-component&encapsulation=scoped","src/components/dockmanager/docking/root-docking-indicator-component.tsx","src/components/dockmanager/panes/split-pane-component.scss?tag=igc-split-pane-component&encapsulation=scoped","src/components/dockmanager/panes/split-pane-component.tsx","src/components/dockmanager/panes/splitter-component.scss?tag=igc-splitter-component&encapsulation=shadow","src/components/dockmanager/panes/splitter-component.tsx","src/components/dockmanager/docking/splitter-docking-indicator-component.scss?tag=igc-splitter-docking-indicator-component&encapsulation=scoped","src/components/dockmanager/docking/splitter-docking-indicator-component.tsx","src/components/tabs/tab-header-component.scss?tag=igc-tab-header-component&encapsulation=shadow","src/components/tabs/tab-header-component.tsx","src/components/tabs/tab-panel-component.scss?tag=igc-tab-panel-component&encapsulation=shadow","src/components/tabs/tab-panel-component.tsx","src/components/tabs/tabs-component.scss?tag=igc-tabs-component&encapsulation=shadow","src/components/tabs/tabs-component.tsx","src/components/dockmanager/panes/unpinned-pane-header-component.scss?tag=igc-unpinned-pane-header-component&encapsulation=shadow","src/components/dockmanager/panes/unpinned-pane-header-component.tsx","src/components/sample-component/sample-component.css?tag=sample-component&encapsulation=scoped","src/components/sample-component/sample-component.tsx"],"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 <Host\r\n disabled={this.disabled}\r\n >\r\n <button\r\n name={this.name}\r\n type={this.type}\r\n value={this.value}\r\n aria-disabled={this.disabled ? 'true' : null}\r\n >\r\n <slot />\r\n </button>\r\n </Host>\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 isDockingIndicatorMost(position: IgcDockingIndicatorPosition): boolean {\r\n return position === IgcDockingIndicatorPosition.leftMost ||\r\n position === IgcDockingIndicatorPosition.rightMost ||\r\n position === IgcDockingIndicatorPosition.topMost ||\r\n position === IgcDockingIndicatorPosition.bottomMost;\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 IgcPaneActionBehavior,\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_PANE_SIZE_IN_PIXELS = 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/**\r\n * @hidden\r\n */\r\nexport interface IgcDropTargetPaneInfo {\r\n pane: IgcDockManagerPane;\r\n docHost: IgcDocumentHost;\r\n targetRect: DOMRect;\r\n visibleTargetRect?: 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<IgcSplitPane, number>;\r\n paneClose: EventEmitter<IgcPaneCloseEventArgs>;\r\n paneScroll: EventEmitter<IgcPaneScrollEventArgs>;\r\n panePinnedToggle: EventEmitter<IgcPanePinnedEventArgs>;\r\n paneDragStart: EventEmitter<IgcPaneDragStartEventArgs>;\r\n paneDragOver: EventEmitter<IgcPaneDragOverEventArgs>;\r\n paneDragEnd: EventEmitter<IgcPaneDragEndEventArgs>;\r\n resourceStrings: IgcDockManagerResourceStrings;\r\n focusElement: () => void;\r\n navigationPaneMeta?: IgcPaneNavigatorMetadata;\r\n floatingPaneResizeStart: EventEmitter<IgcFloatingPaneResizeEventArgs>;\r\n floatingPaneResizeMove: EventEmitter<IgcFloatingPaneResizeMoveEventArgs>;\r\n floatingPaneResizeEnd: EventEmitter<IgcFloatingPaneResizeEventArgs>;\r\n layoutChange: EventEmitter;\r\n direction: string;\r\n allowInnerDock: boolean;\r\n closeBehavior: IgcPaneActionBehavior;\r\n unpinBehavior: IgcPaneActionBehavior;\r\n allowSplitterDock: boolean;\r\n allowRootDock: boolean;\r\n useFixedSizeOnDock: 'none' | 'vertical' | 'horizontal' | 'both';\r\n autoScrollConfig: { edgeThreshold: number, scrollSpeed: number };\r\n enableDragCursor: 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 @Prop() parentUseFixedSize: boolean = false;\r\n\r\n @Event() rendered: EventEmitter<HTMLIgcContentPaneComponentElement>;\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 >= 0 ? 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 <Host\r\n role=\"group\"\r\n aria-label={this.header}\r\n aria-disabled={this.disabled ? 'true' : 'false'}\r\n tabindex={this.disabled ? -1 : 0}\r\n style={{\r\n flex: this.isFlyout ? `0 1 ${unpinnedSize}px` : this.parentUseFixedSize ? `0 0 ${size}px` : `${size} 1 ${size}px`\r\n }}\r\n part={parts}\r\n >\r\n <slot name=\"header\">\r\n </slot>\r\n <slot></slot>\r\n </Host>\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 <Fragment>\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 <igc-icon-component name={item.iconName} />\r\n }\r\n </Fragment>\r\n );\r\n }\r\n\r\n private renderCloseButton() {\r\n return (\r\n <slot name=\"contextMenuCloseButton\">\r\n <igc-icon-component part=\"context-menu-close-button\" name=\"close\" />\r\n </slot>\r\n );\r\n }\r\n\r\n private renderUnpinButton() {\r\n return (\r\n <slot name=\"contextMenuUnpinButton\">\r\n <igc-icon-component part=\"context-menu-unpin-button\" name=\"unpin\" />\r\n </slot>\r\n );\r\n }\r\n\r\n render() {\r\n return (\r\n <Host\r\n part=\"context-menu\"\r\n exportparts=\"context-menu,\r\n menu-item: context-menu-item,\r\n menu-content: context-menu-content,\r\n context-menu-close-button,\r\n context-menu-unpin-button\"\r\n >\r\n <div\r\n role=\"menu\"\r\n part=\"menu-content\"\r\n ref={el => 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 <div\r\n role=\"menuitem\"\r\n part={parts}\r\n tabindex=\"-1\"\r\n onKeyDown={this.handleKeyboardEvents.bind(this, item)}\r\n onClick={this.handleMenuItemClick.bind(this, item)}\r\n >\r\n <span\r\n style={{\r\n flexGrow: '1',\r\n userSelect: 'none',\r\n }}\r\n >\r\n {item.displayText}\r\n </span>\r\n\r\n {this.renderItemIcon(item)}\r\n </div>\r\n );\r\n })\r\n }\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}\r\n","\"use strict\";function _typeof(obj){\"@babel/helpers - typeof\";if(typeof Symbol===\"function\"&&typeof Symbol.iterator===\"symbol\"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol===\"function\"&&obj.constructor===Symbol&&obj!==Symbol.prototype?\"symbol\":typeof obj}}return _typeof(obj)}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if(\"value\"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!==\"function\"&&superClass!==null){throw new TypeError(\"Super expression must either be null or a function\")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)===\"object\"||typeof call===\"function\")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\")}return self}function _wrapNativeSuper(Class){var _cache=typeof Map===\"function\"?new Map:undefined;_wrapNativeSuper=function _wrapNativeSuper(Class){if(Class===null||!_isNativeFunction(Class))return Class;if(typeof Class!==\"function\"){throw new TypeError(\"Super expression must either be null or a function\")}if(typeof _cache!==\"undefined\"){if(_cache.has(Class))return _cache.get(Class);_cache.set(Class,Wrapper)}function Wrapper(){return _construct(Class,arguments,_getPrototypeOf(this).constructor)}Wrapper.prototype=Object.create(Class.prototype,{constructor:{value:Wrapper,enumerable:false,writable:true,configurable:true}});return _setPrototypeOf(Wrapper,Class)};return _wrapNativeSuper(Class)}function _construct(Parent,args,Class){if(_isNativeReflectConstruct()){_construct=Reflect.construct}else{_construct=function _construct(Parent,args,Class){var a=[null];a.push.apply(a,args);var Constructor=Function.bind.apply(Parent,a);var instance=new Constructor;if(Class)_setPrototypeOf(instance,Class.prototype);return instance}}return _construct.apply(null,arguments)}function _isNativeReflectConstruct(){if(typeof Reflect===\"undefined\"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy===\"function\")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true}catch(e){return false}}function _isNativeFunction(fn){return Function.toString.call(fn).indexOf(\"[native code]\")!==-1}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}if(typeof customElements!==\"undefined\"){var watermarkRegistered=customElements.get(\"igc-trial-watermark\");if(!watermarkRegistered){(function(){var TrialWatermark=/*#__PURE__*/function(_HTMLElement){_inherits(TrialWatermark,_HTMLElement);var _super=_createSuper(TrialWatermark);function TrialWatermark(){var _this;_classCallCheck(this,TrialWatermark);_this=_super.call(this);var shadow=_this.attachShadow({mode:\"closed\"});_this.__anchor=document.createElement(\"a\");_this.__anchor.setAttribute(\"class\",\"watermark__link\");_this.__anchor.setAttribute(\"href\",\"https://www.infragistics.com/how-to-buy/renewal\");_this.__anchor.setAttribute(\"target\",\"_blank\");var img=document.createElement(\"span\");img.setAttribute(\"class\",\"watermark__background-img\");var style=document.createElement(\"style\");style.textContent=\":host{display:block;position:absolute;bottom:0;right:0;width:100%;height:100%;z-index:10000;pointer-events:none}:host .watermark__link{display:inline-flex;align-items:center;position:absolute;bottom:0;right:0;font-family:'Titillium Web', sans-serif;font-size:.875rem;padding:.125rem .25rem;line-height:normal;border:1px solid var(--igx-watermark-border-color, #09f);color:var(--igx-watermark-color, #fff);z-index:10002;background-color:var(--igx-watermark-link-background, #09f);pointer-events:all;text-decoration:none}:host .watermark__link img{margin-right:4px}:host .watermark__background-img{width:100%;height:100%;position:absolute;top:0;left:0;z-index:10001;pointer-events:none;background-image:var(--igx-watermark-background-image, url(\\\"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgNDYgMjYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cgkuc3Qwe29wYWNpdHk6MC4xMjtmaWxsOiMwMDk5RkY7fQo8L3N0eWxlPgo8cGF0aCBjbGFzcz0ic3QwIiBkPSJtNC4yIDIuNS0xLjctMC41IDAuNS0xLjctMS4zLTAuMy0wLjUgMS43LTAuNy0wLjItMC4zIDEuMSAwLjggMC4yLTAuOCAyLjhjLTAuMiAwLjgtMC4yIDEuNC0wLjEgMS44IDAuMiAwLjQgMC42IDAuNyAxLjIgMC44IDAuNCAwLjEgMC44IDAuMiAxLjIgMC4ybDAuMi0xLTEtMC4yYy0wLjItMC4xLTAuNC0wLjItMC40LTAuNCAwLTAuMyAwLjEtMC43IDAuMi0xbDAuNy0yLjYgMS43IDAuNCAwLjMtMS4xem0wLjcgNi42IDEuMS00LjFoMC4zYzAuNi0wLjEgMS4yLTAuMiAxLjktMC4xbDAuMy0xLjNjLTAuOC0wLjEtMS41IDAtMi4yIDAuM2wwLjItMC43LTEuNC0wLjMtMS41IDUuOCAxLjMgMC40em00LjMgMS4xIDEuNi01LjktMS4zLTAuNC0xLjYgNS45IDEuMyAwLjR6bTEuOS02LjkgMC40LTEuMy0xLjMtMC40LTAuNCAxLjMgMS4zIDAuNHptNS4xIDIuOGMtMC4yLTAuNC0wLjctMC43LTEuNC0wLjktMC44LTAuMi0xLjYtMC4zLTIuNS0wLjNsLTAuMyAwLjkgMC40IDAuMWMwLjggMC4xIDEuNCAwLjMgMS45IDAuNCAwLjIgMCAwLjQgMC4xIDAuNiAwLjMgMC4xIDAuMiAwLjEgMC41IDAgMC43bC0wLjEgMC40LTEuNS0wLjNjLTAuNS0wLjEtMS4xLTAuMS0xLjYgMC4xLTAuNCAwLjItMC43IDAuNi0wLjggMS4yLTAuMyAxLjIgMC4xIDIgMS4yIDIuNCAwLjcgMC4yIDEuMyAwLjIgMiAwLjEgMC40IDAuNCAwLjkgMC43IDEuNCAwLjlsMC4zLTFjLTAuMS0wLjEtMC4zLTAuMS0wLjMtMC4zLTAuMS0wLjEtMC4xLTAuMyAwLTAuNGwwLjctMi43YzAuMy0wLjcgMC4yLTEuMiAwLTEuNnptLTEuNiAyLjYtMC40IDEuNWgtMC4yYy0wLjQgMC0wLjkgMC0xLjMtMC4yLTAuNS0wLjEtMC42LTAuNS0wLjUtMXMwLjUtMC44IDAuOS0wLjdoMC4xYzAgMC4yIDEuNCAwLjQgMS40IDAuNHptMy41IDMuOSAyLjMtOC40LTEuMy0wLjQtMi4zIDguNCAxLjMgMC40eiIvPgo8L3N2Zz4K\\\"));background-size:200px 150px;background-position:top left}@media all and (-ms-high-contrast: none){:host .watermark__background-img{background-image:none}}\\n\";shadow.appendChild(style);shadow.appendChild(_this.__anchor);shadow.appendChild(img);if(!document.getElementById(\"igniteui-watermark-themes\")){_this.__themes=document.createElement(\"style\");_this.__themes.setAttribute(\"id\",\"igniteui-watermark-themes\");_this.__themes.textContent=\".dark-theme {\\n --igx-watermark-border-color: #72da67;\\n --igx-watermark-color: #fff;\\n --igx-watermark-link-background: #72da67;\\n --igx-watermark-background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxODQiIGhlaWdodD0iMTA0IiB2aWV3Qm94PSIwIDAgMTg0IDEwNCI+CiAgPGRlZnM+CiAgICA8c3R5bGU+CiAgICAgIC5jbHMtMSB7CiAgICAgICAgZmlsbDogI2ZmZjsKICAgICAgICBmaWxsLXJ1bGU6IGV2ZW5vZGQ7CiAgICAgICAgb3BhY2l0eTogMC4wNTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L2RlZnM+CiAgPHBhdGggaWQ9InRyaWFsIiBjbGFzcz0iY2xzLTEiIGQ9Ik0xNi43MiwxMC4xNDhMMTAuMyw4LjQzNGwxLjgwNi02LjcyM0w3LjA5LDAuMzY5LDUuMjgzLDcuMDkyLDIuMzA4LDYuMywxLjE1LDEwLjYwOWwyLjk3NSwwLjhMMS4yMzUsMjIuMTYxcS0xLjM0NSw1LjAwNy0uMzY3LDcuMjA3VDUuOCwzMi42MjNhMjguMTYzLDI4LjE2MywwLDAsMCw0LjkuNjY0bDAuODUxLTQuMS0zLjg1LS44OHEtMS43MjEtLjQ2LTEuODg5LTEuNWExMS4xODgsMTEuMTg4LDAsMCwxLC41OTEtMy44NjdsMi43NDEtMTAuMiw2LjQxNiwxLjcxNFpNMTkuNywzNS43OWw0LjM0OC0xNi4xODEsMS4xMzUtLjE0NGEzMy44NzEsMzMuODcxLDAsMCwxLDcuMzgyLS4yMTRMMzMuOTE5LDE0LjJhMjIuOTQxLDIyLjk0MSwwLDAsMC04Ljc4OCwxLjE4TDI1Ljg3OCwxMi42bC01LjAyMS0xLjM0MkwxNC42MjksMzQuNDM2Wm0xNi43ODMsNC40ODUsNi4yMjktMjMuMTgyTDM3LjY0LDE1LjczOCwzMS40MTIsMzguOTIxWm03LjI4Ny0yNy4xMjNMNDUuMiw3LjgyLDQwLjEzMiw2LjQ2NiwzOC43LDExLjhabTIwLjA0MiwxMXEtMS4zOTEtMi4zMzQtNS42NDUtMy40NzFhNDEuOTUxLDQxLjk1MSwwLDAsMC05LjY0NS0xLjI4NWwtMC43NzMsMy42MiwxLjUxMywwLjNxNC41NjMsMC44MjIsNy41MzgsMS42MTdhMy41NjIsMy41NjIsMCwwLDEsMi4yLDEuMzgyLDMuNTI4LDMuNTI4LDAsMCwxLC4xMTYsMi44MTRMNTguNjU4LDMwLjgsNTIuNTI0LDI5LjdhMTAuNjQ1LDEwLjY0NSwwLDAsMC02LjMuMzU0cS0yLjMwNiwxLjA3NC0zLjI1Myw0LjYtMS45ODEsNy4zNzIsNC45NDYsOS4yMjNhMTguMzU3LDE4LjM1NywwLDAsMCw3Ljk0Ni4yODUsMTAuMTM0LDEwLjEzNCwwLDAsMCw1LjcyMiwzLjM2OEw2Mi43Niw0My43MmEyLjY2NSwyLjY2NSwwLDAsMS0xLjM0My0xLjAzLDIuMjczLDIuMjczLDAsMCwxLS4xMy0xLjY1bDIuODQtMTAuNTcxUTY1LjIsMjYuNDgyLDYzLjgwOCwyNC4xNDdaTTU3LjcsMzQuMzY3bC0xLjY1Nyw2LjE2Ni0wLjkxMi4wNTVBMTguNjM1LDE4LjYzNSwwLDAsMSw1MCw0MC4wMTNxLTIuODM2LS43NTgtMS45NzYtMy45NTdhMy4yMzcsMy4yMzcsMCwwLDEsNC4xNDItMi42MlpNNzEuNTMyLDQ5LjY0Mmw4LjgyLTMyLjgyNi01LjA2OC0xLjM1NC04LjgyLDMyLjgyNloiLz4KPC9zdmc+Cg==');\\n}\\n\\n.light-theme {\\n --igx-watermark-border-color: #e41c77;\\n --igx-watermark-color: #fff;\\n --igx-watermark-link-background: #e41c77;\\n --igx-watermark-background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzNjYiIGhlaWdodD0iMjA5IiB2aWV3Qm94PSIwIDAgMzY2IDIwOSI+CiAgPGRlZnM+CiAgICA8c3R5bGU+CiAgICAgIC5jbHMtMSB7CiAgICAgICAgZmlsbC1ydWxlOiBldmVub2RkOwogICAgICAgIG9wYWNpdHk6IDAuMDU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC9kZWZzPgogIDxwYXRoIGlkPSJ0cmlhbCIgY2xhc3M9ImNscy0xIiBkPSJNMzMuMzUsMjAuM2wtMTIuOC0zLjQyOSwzLjYtMTMuNDQ2TDE0LjE0MSwwLjczOGwtMy42LDEzLjQ0Nkw0LjYsMTIuNTk0LDIuMjkzLDIxLjIxOGw1LjkzNSwxLjU5TDIuNDYzLDQ0LjMyMVEtMC4yMiw1NC4zMzYsMS43MzIsNTguNzM1dDkuODM0LDYuNTExYTU2LjA2MSw1Ni4wNjEsMCwwLDAsOS43ODEsMS4zMjlsMS43LTguMTkyLTcuNjc4LTEuNzU5cS0zLjQzMi0uOTE5LTMuNzY5LTN0MS4xNzgtNy43MzVsNS40NjYtMjAuNCwxMi44LDMuNDI5Wk0zOS4yODUsNzEuNThsOC42NzEtMzIuMzYyLDIuMjY0LS4yODhBNjcuMzg4LDY3LjM4OCwwLDAsMSw2NC45NDUsMzguNWwyLjcwOC0xMC4xMDdhNDUuNjQyLDQ1LjY0MiwwLDAsMC0xNy41MjgsMi4zNmwxLjQ5MS01LjU2NEw0MS42LDIyLjUwNywyOS4xNzgsNjguODcyWk03Mi43Niw4MC41NUw4NS4xODMsMzQuMTg1LDc1LjA3NiwzMS40NzcsNjIuNjUyLDc3Ljg0MVpNODcuMjk1LDI2LjNsMi44NTctMTAuNjY0TDgwLjA0NSwxMi45MzEsNzcuMTg4LDIzLjU5NVptMzkuOTc0LDIxLjk5MXEtMi43NzUtNC42NjgtMTEuMjU5LTYuOTQzYTgzLjQ1OCw4My40NTgsMCwwLDAtMTkuMjM4LTIuNTcxbC0xLjU0Miw3LjI0LDMuMDE3LDAuNjFxOS4xLDEuNjQ0LDE1LjAzNSwzLjIzNGE3LjEsNy4xLDAsMCwxLDQuMzc4LDIuNzYzcTEuMjI0LDEuOTE5LjIzMiw1LjYyOEwxMTcsNjEuNTkzbC0xMi4yMzUtMi4xODVROTYuOCw1Ny45NzEsOTIuMiw2MC4xMTZUODUuNzEsNjkuMzFxLTMuOTUxLDE0Ljc0NCw5Ljg2NiwxOC40NDZhMzYuNTEzLDM2LjUxMywwLDAsMCwxNS44NDguNTY5cTMuNDM4LDQuNiwxMS40MTQsNi43MzZsMi4zNC03LjYyMkE1LjMxOSw1LjMxOSwwLDAsMSwxMjIuNSw4NS4zOGE0LjU2LDQuNTYsMCwwLDEtLjI1OS0zLjNsNS42NjUtMjEuMTQyUTEzMC4wNDQsNTIuOTY0LDEyNy4yNjksNDguMjk1Wk0xMTUuMDg0LDY4LjczM2wtMy4zMDUsMTIuMzMzLTEuODE4LjEwOWEzNy4wNywzNy4wNywwLDAsMS0xMC4yMjctMS4xNXEtNS42NTctMS41MTYtMy45NDItNy45MTR0OC4yNjItNS4yNFptMjcuNTkyLDMwLjU1LDE3LjU5MS02NS42NTJMMTUwLjE2LDMwLjkyMywxMzIuNTY4LDk2LjU3NVoiLz4KPC9zdmc+Cg==');\\n}\"}return _this}_createClass(TrialWatermark,[{key:\"connectedCallback\",value:function connectedCallback(){this.__anchor.textContent=this.hasAttribute(\"text\")?this.getAttribute(\"text\"):\"Trial version of Ignite UI for Angular\";var anchorImg=document.createElement(\"img\");anchorImg.setAttribute(\"src\",\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0id2hpdGUiIHdpZHRoPSIxOHB4IiBoZWlnaHQ9IjE4cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMFYweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xNyA3aC00djJoNGMxLjY1IDAgMyAxLjM1IDMgM3MtMS4zNSAzLTMgM2gtNHYyaDRjMi43NiAwIDUtMi4yNCA1LTVzLTIuMjQtNS01LTV6bS02IDhIN2MtMS42NSAwLTMtMS4zNS0zLTNzMS4zNS0zIDMtM2g0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0yem0tMy00aDh2Mkg4eiIvPjwvc3ZnPg==\");this.__anchor.prepend(anchorImg);if(this.__themes&&this.hasAttribute(\"theming\")&&this.getAttribute(\"theming\")){document.head.appendChild(this.__themes)}}}]);return TrialWatermark}(/*#__PURE__*/_wrapNativeSuper(HTMLElement));customElements.define(\"igc-trial-watermark\",TrialWatermark)})()}}","/**\r\n * @hidden\r\n */\r\nexport class TwoWayMap<K, V> {\r\n private map = new Map<K, V>();\r\n private reversedMap = new Map<V, K>();\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\nimport { IgcDockManager } from './dockmanager-component';\r\n\r\nimport {\r\n IGC_DEFAULT_PANE_SIZE, IGC_DEFAULT_PANE_SIZE_IN_PIXELS, IGC_DEFAULT_UNPIN_PANE_SIZE, IGC_DRAG_FLYOUT_THRESHOLD, IgcContextMenuItem, IgcDockManagerComponentBase,\r\n IgcTabRectsInfo\r\n} from './dockmanager.interfaces';\r\nimport {\r\n IgcContentPane, IgcDockManagerPane, IgcDockManagerPaneType, IgcDockManagerPoint, IgcDockingIndicator, IgcDockingIndicatorPosition,\r\n IgcDocumentHost, IgcFloatPaneAction, IgcFloatingPaneResizeEventArgs, IgcFloatingPaneResizeMoveEventArgs, IgcMoveTabAction, IgcPaneActionBehavior, IgcPaneCloseEventArgs, IgcPaneDragActionType,\r\n IgcPanePinnedEventArgs, IgcResizerLocation, IgcSplitPane, IgcSplitPaneOrientation, IgcTabGroupPane, IgcUnpinnedLocation\r\n} from './dockmanager.public-interfaces';\r\nimport { IgcFloatingPaneComponent } from './panes/floating-pane-component';\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class IgcDockManagerService {\r\n private paneParentMap: Map<IgcDockManagerPane, IgcDockManagerPane>;\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 draggedPaneParent: IgcSplitPane;\r\n private shiftLeftThreshold: number;\r\n private shiftRightThreshold: number;\r\n private documentsCache: IgcContentPane[];\r\n private contentPanesCache: IgcContentPane[];\r\n private defaultSplitterSize = 4;\r\n\r\n visibleDocuments: IgcContentPane[];\r\n visibleContentPanes: IgcContentPane[];\r\n documentHosts: IgcDocumentHost[];\r\n clientContentPanesMap: Map<string, IgcContentPane>;\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<IgcContentPane, IgcUnpinnedLocation>();\r\n keyboardDockPane: IgcContentPane = null;\r\n proximityDockPosition: IgcDockingIndicatorPosition;\r\n splitterDockTarget: { pane: any; index: number };\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 === 1 && parent.panes[0].type === IgcDockManagerPaneType.contentPane && parent.panes[0].contentId.startsWith('placeholder')) {\r\n parent.panes = [];\r\n }\r\n\r\n if (parent.panes.length === 0) {\r\n if (parent.allowEmpty) {\r\n if (parent === this.dockManager.maximizedPane) {\r\n this.dockManager.maximizedPane = null;\r\n parent.isMaximized = false;\r\n }\r\n\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 size: content.size\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 if (!pane.panes) return;\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 const willCreateNewParent = isIndicatorVertical !== isSplitPaneVertical;\r\n let useFixedSize = this.shouldUseFixedSize(targetParent);\r\n let orientation = targetParent.orientation;\r\n\r\n if (willCreateNewParent) {\r\n\r\n useFixedSize = isIndicatorVertical ?\r\n this.dockManager.useFixedSizeOnDock === 'vertical' || this.dockManager.useFixedSizeOnDock === 'both' :\r\n this.dockManager.useFixedSizeOnDock === 'horizontal' || this.dockManager.useFixedSizeOnDock === 'both';\r\n orientation = isIndicatorVertical ? IgcSplitPaneOrientation.vertical : IgcSplitPaneOrientation.horizontal;\r\n }\r\n\r\n if (this.draggedPaneParent?.useFixedSize === true && useFixedSize !== true) {\r\n paneToDock.size = IGC_DEFAULT_PANE_SIZE_IN_PIXELS;\r\n } else if (useFixedSize === true && (this.draggedPaneParent?.useFixedSize !== true || this.draggedPaneParent?.orientation !== orientation)) {\r\n const newSize = this.getDraggedPanePostDockingSizeInPixels(isIndicatorVertical);\r\n if (newSize) paneToDock.size = newSize;\r\n }\r\n\r\n let newSplitPane: IgcSplitPane;\r\n var isDockingBefore = Utils.isDockingIndicatorBefore(position) && !isRTL || Utils.isDockingIndicatorBeforeRTL(position) && isRTL;\r\n const insertIndex = isDockingBefore ?\r\n paneIndex :\r\n paneIndex + 1;\r\n if (!willCreateNewParent) {\r\n targetParent.panes.splice(insertIndex, 0, paneToDock);\r\n } else {\r\n if (targetParent.panes.length === 1) {\r\n targetParent.orientation = orientation;\r\n targetParent.panes.splice(insertIndex, 0, paneToDock);\r\n } else {\r\n newSplitPane = {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation,\r\n useFixedSize,\r\n panes: isDockingBefore ?\r\n [paneToDock, targetPane] :\r\n [targetPane, paneToDock],\r\n size: targetPane.size\r\n };\r\n targetParent.panes[paneIndex] = newSplitPane;\r\n }\r\n\r\n if (!useFixedSize) {\r\n targetPane.size = undefined;\r\n paneToDock.size = undefined;\r\n } else if (newSplitPane) {\r\n this.checkAndAddPlaceholderPane(newSplitPane, true);\r\n }\r\n\r\n // simplifying nested split panes\r\n const parentSplitPane = this.getParent(targetParent) as IgcSplitPane;\r\n if (parentSplitPane &&\r\n parentSplitPane.type === IgcDockManagerPaneType.splitPane &&\r\n parentSplitPane.panes.length === 1 &&\r\n parentSplitPane.allowEmpty === targetParent.allowEmpty &&\r\n parentSplitPane.size === targetParent.size &&\r\n parentSplitPane.useFixedSize === useFixedSize) {\r\n parentSplitPane.orientation = orientation;\r\n parentSplitPane.panes = targetParent.panes;\r\n }\r\n }\r\n }\r\n\r\n private dockToSplitter() {\r\n const splitterDockPane = this.splitterDockTarget.pane;\r\n const parent = this.getParent(splitterDockPane) as IgcSplitPane;\r\n let insertIndex = parent?.panes.indexOf(splitterDockPane);\r\n\r\n insertIndex =\r\n insertIndex !== -1 ? insertIndex + 1 : this.splitterDockTarget?.index\r\n\r\n if (this.draggedPaneParent?.useFixedSize === true && parent.useFixedSize !== true) {\r\n this.dockManager.draggedPane.size = IGC_DEFAULT_PANE_SIZE_IN_PIXELS;\r\n } else if (parent.useFixedSize === true && (this.draggedPaneParent?.useFixedSize !== true || this.draggedPaneParent?.orientation !== parent.orientation)) {\r\n const newSize = this.getDraggedPanePostDockingSizeInPixels(parent.orientation === IgcSplitPaneOrientation.vertical);\r\n if (newSize) this.dockManager.draggedPane.size = newSize;\r\n }\r\n\r\n parent.panes.splice(insertIndex, 0, this.dockManager.draggedPane);\r\n }\r\n\r\n /**\r\n * Calculates the pixel size that the dragged (floating) pane should have\r\n * after it is docked into the specified parent split pane.\r\n *\r\n * The method determines the appropriate dimension (width or height)\r\n * based on the parent pane's orientation:\r\n * - For a vertical split pane, it returns the height.\r\n * - For a horizontal split pane, it returns the width.\r\n *\r\n * The size is derived from the floating pane's stored floating dimensions\r\n * (`floatingWidth` / `floatingHeight`) if available. Otherwise, it falls back\r\n * to the current DOM bounding rectangle of the dragged pane element.\r\n *\r\n * @private\r\n * @param {boolean} isVertical - Indicates whether the target orientation is vertical.\r\n * @returns {number | undefined} The computed size in pixels to apply after docking,\r\n * or `undefined` if the size cannot be determined.\r\n */\r\n private getDraggedPanePostDockingSizeInPixels(isVertical: boolean) {\r\n const floatingPane = this.dockManager.draggedPane as unknown as IgcFloatingPaneComponent;\r\n if (floatingPane && floatingPane.floatingWidth) {\r\n return isVertical\r\n ? floatingPane.floatingHeight\r\n : floatingPane.floatingWidth;\r\n } else {\r\n const paneRect = (this.dockManager as IgcDockManager).draggedPaneElement?.getBoundingClientRect();\r\n if (paneRect) {\r\n return isVertical\r\n ? paneRect.height\r\n : paneRect.width;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n\r\n public shouldUseFixedSize(pane: IgcDockManagerPane): boolean {\r\n if (pane.type === IgcDockManagerPaneType.splitPane) {\r\n if (pane.useFixedSize) {\r\n return true;\r\n }\r\n\r\n for (let i = 0; i < pane.panes.length; i++) {\r\n if (this.shouldUseFixedSize(pane.panes[i])) {\r\n return true;\r\n }\r\n }\r\n } else if (pane.type === IgcDockManagerPaneType.documentHost) {\r\n this.shouldUseFixedSize(pane.rootPane);\r\n }\r\n\r\n return false;\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 && i.type !== IgcDockManagerPaneType.splitPane)[0];\r\n return maximizedPane;\r\n }\r\n\r\n processLayout() {\r\n this.paneParentMap = new Map<IgcDockManagerPane, IgcDockManagerPane>();\r\n this.unpinnedLocationMap = new Map<IgcContentPane, IgcUnpinnedLocation>();\r\n this.clientContentPanesMap = new Map<string, IgcContentPane>();\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<IgcSplitPane, number>(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 >= 0 ? 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 if (!parentPane.useFixedSize){\r\n childPanes[paneIndex].size = paneSizes[paneIndex] - calcDelta;\r\n }\r\n\r\n this.updateLayout();\r\n }\r\n\r\n togglePin(pane: IgcContentPane, unpinBehavior = IgcPaneActionBehavior.allPanes) {\r\n const newValue = !this.getActualIsPinned(pane);\r\n const parent = this.paneParentMap.get(pane);\r\n const isTabGroup = parent.type === IgcDockManagerPaneType.tabGroupPane;\r\n const panes = isTabGroup && unpinBehavior === IgcPaneActionBehavior.allPanes ?\r\n parent.panes.filter(p => p.allowPinning !== false) :\r\n [pane];\r\n\r\n const isTabGroupPinning = isTabGroup && unpinBehavior === IgcPaneActionBehavior.selectedPane;\r\n\r\n if (isTabGroupPinning && parent.selectedIndex >= parent.panes.filter(p => p.isPinned).length) {\r\n parent.selectedIndex = 0;\r\n }\r\n\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 private checkUseFixedSizeParent(pane: IgcDockManagerPane): IgcDockManagerPane {\r\n const parent = this.getParent(pane);\r\n\r\n if (!parent) {\r\n return null;\r\n }\r\n\r\n // If the pane to close is the last non-placeholder pane of a split pane, close the whole split pane.\r\n // Also check if the pane to close is inside a split pane and close the top split pane that holds the placeholder.\r\n if (parent.type === IgcDockManagerPaneType.splitPane) {\r\n const hasPlaceholderStart = parent.panes.some(p => p.type === IgcDockManagerPaneType.contentPane && p.contentId === \"placeholderStart\");\r\n const hasPlaceholderEnd = parent.panes.some(p => p.type === IgcDockManagerPaneType.contentPane && p.contentId === \"placeholderEnd\");\r\n const expectedLength = hasPlaceholderStart && hasPlaceholderEnd ? 3 : 2;\r\n\r\n if (parent.panes.length === expectedLength) {\r\n const isValidContentPane = parent.panes.every(p =>\r\n p.type === IgcDockManagerPaneType.contentPane ||\r\n p.type === IgcDockManagerPaneType.tabGroupPane ||\r\n (p.type === IgcDockManagerPaneType.splitPane && p.panes.length === 1 && p.panes[0].type === IgcDockManagerPaneType.contentPane)\r\n );\r\n\r\n if ((hasPlaceholderStart || hasPlaceholderEnd) && isValidContentPane) {\r\n return parent;\r\n }\r\n }\r\n }\r\n\r\n return this.checkUseFixedSizeParent(parent);\r\n }\r\n\r\n closePane(pane: IgcContentPane) {\r\n let paneToRemove: IgcDockManagerPane = pane;\r\n let closeAll = this.dockManager.closeBehavior !== IgcPaneActionBehavior.selectedPane;\r\n\r\n if (pane.type === IgcDockManagerPaneType.contentPane && pane !== this.dockManager.flyoutPane) {\r\n const parent = this.getParent(pane);\r\n const ignoreResizeConstraintPaneTargetParent = this.checkUseFixedSizeParent(pane);\r\n\r\n if (ignoreResizeConstraintPaneTargetParent !== null) {\r\n paneToRemove = ignoreResizeConstraintPaneTargetParent as IgcSplitPane;\r\n } else if (parent.type === IgcDockManagerPaneType.tabGroupPane && closeAll) {\r\n paneToRemove = parent;\r\n }\r\n }\r\n\r\n const paneRemoved = paneToRemove.type === IgcDockManagerPaneType.tabGroupPane || paneToRemove.type === IgcDockManagerPaneType.splitPane ?\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 if (targetPane.type !== IgcDockManagerPaneType.tabGroupPane || targetPane.type !== IgcDockManagerPaneType.splitPane) return;\r\n\r\n for (const cp of this.getChildContentPanes(targetPane).filter(this.hasMaximizedProp)) {\r\n cp.isMaximized = targetPane.isMaximized;\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 (parent.type === IgcDockManagerPaneType.splitPane) {\r\n this.draggedPaneParent = parent;\r\n }\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.topMost ||\r\n position === IgcDockingIndicatorPosition.bottom || position === IgcDockingIndicatorPosition.bottomMost;\r\n const isSplitPaneVertical = Utils.isSplitPaneVertical(rootPane);\r\n const isRTL = this.dockingIndicator && this.dockingIndicator.direction === 'rtl';\r\n\r\n var isDockingBefore = (position === IgcDockingIndicatorPosition.left || position === IgcDockingIndicatorPosition.leftMost) && !isRTL ||\r\n (position === IgcDockingIndicatorPosition.right || position === IgcDockingIndicatorPosition.rightMost) && isRTL ||\r\n position === IgcDockingIndicatorPosition.top || position === IgcDockingIndicatorPosition.topMost;\r\n let insertIndex = isDockingBefore ? 0 : rootPane.panes.length;\r\n\r\n const isEdgeDocking = position === IgcDockingIndicatorPosition.leftMost ||\r\n position === IgcDockingIndicatorPosition.rightMost ||\r\n position === IgcDockingIndicatorPosition.topMost||\r\n position === IgcDockingIndicatorPosition.bottomMost;\r\n\r\n if (isEdgeDocking) {\r\n if (rootPane.useFixedSize === true) {\r\n insertIndex = isDockingBefore ? 1 : rootPane.panes.length - 1;\r\n const isVertical = rootPane.orientation === IgcSplitPaneOrientation.vertical;\r\n const newSize = this.getDraggedPanePostDockingSizeInPixels(isVertical);\r\n if (newSize) paneToDock.size = newSize;\r\n }\r\n\r\n rootPane.panes.splice(insertIndex, 0, paneToDock);\r\n this.updateLayout();\r\n this.processLayout();\r\n return;\r\n }\r\n\r\n if (rootPane.useFixedSize !== true && ((isIndicatorVertical && isSplitPaneVertical) || (!isIndicatorVertical && !isSplitPaneVertical))) {\r\n rootPane.panes.splice(insertIndex, 0, paneToDock);\r\n } else {\r\n if (rootPane.useFixedSize !== true && rootPane.panes.length === 1 && rootPane.panes[0].type === IgcDockManagerPaneType.splitPane) {\r\n rootPane.panes[0].size = undefined;\r\n rootPane.orientation =\r\n rootPane.orientation === IgcSplitPaneOrientation.horizontal ?\r\n IgcSplitPaneOrientation.vertical :\r\n IgcSplitPaneOrientation.horizontal;\r\n rootPane.panes.splice(insertIndex, 0, paneToDock);\r\n } else {\r\n const newRootPane: IgcSplitPane = {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: rootPane.useFixedSize !== true ?\r\n (isSplitPaneVertical ? IgcSplitPaneOrientation.horizontal : IgcSplitPaneOrientation.vertical) :\r\n isIndicatorVertical ? IgcSplitPaneOrientation.vertical : IgcSplitPaneOrientation.horizontal,\r\n useFixedSize: rootPane.useFixedSize,\r\n panes: isDockingBefore ?\r\n [paneToDock, rootPane] :\r\n [rootPane, paneToDock],\r\n };\r\n\r\n if (rootPane.useFixedSize) {\r\n this.shiftPlaceholderStartToNewRoot(rootPane, newRootPane, isDockingBefore);\r\n }\r\n\r\n layout.rootPane = newRootPane;\r\n }\r\n\r\n if (!rootPane.useFixedSize) {\r\n rootPane.size = undefined;\r\n paneToDock.size = undefined;\r\n }\r\n else {\r\n const isHorizontal = layout.rootPane.orientation === IgcSplitPaneOrientation.horizontal;\r\n const paneContainerRect = (this.dockManager as any).getDockedPanesContainerRect();\r\n paneToDock.size = (isHorizontal ? paneContainerRect?.width / 2 : paneContainerRect?.height / 2) - 2 * this.defaultSplitterSize;\r\n rootPane.size = (isHorizontal ? paneContainerRect.width - paneToDock.size : paneContainerRect.height - paneToDock.size) - 2 * this.defaultSplitterSize;\r\n this.checkAndAddPlaceholderPane(layout.rootPane, true);\r\n }\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 case IgcDockingIndicatorPosition.splitterHorizontal:\r\n case IgcDockingIndicatorPosition.splitterVertical:\r\n this.dockToSplitter();\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 if (!floatingPanes) return;\r\n\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<IgcSplitPane, number>(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, IgcPaneActionBehavior.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, anyPaneIgnoringResizeConstraints: boolean = false): boolean {\r\n if (this.dockManager.maximizedPane ||\r\n (anyPaneIgnoringResizeConstraints && !this.isFloatingPane(this.getRootParent(pane)))) {\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 if (!draggedPane) return false;\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 if (!docked && this.draggedPaneParent && this.dockManager.draggedPane.type === IgcDockManagerPaneType.splitPane && this.dockManager.draggedPane.panes.length === 1) {\r\n this.dockManager.draggedPane.panes[0].size = IGC_DEFAULT_PANE_SIZE_IN_PIXELS;\r\n }\r\n\r\n this.draggedPanes = null;\r\n this.draggedTab = null;\r\n this.draggedPaneParent = 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, anyPaneIgnoringResizeConstraints: boolean = false): boolean {\r\n if (anyPaneIgnoringResizeConstraints && !this.isFloatingPane(this.getRootParent(pane))) {\r\n return false;\r\n }\r\n\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 let parentRect = this.dropTargetParentRect;\r\n\r\n if (parentRect && (dockingPosition === IgcDockingIndicatorPosition.splitterHorizontal || dockingPosition === IgcDockingIndicatorPosition.splitterVertical)) {\r\n if (dockingPosition === IgcDockingIndicatorPosition.splitterHorizontal) {\r\n shadowRect.x = parentRect.x;\r\n shadowRect.y = parentRect.y - 20;\r\n shadowRect.width = parentRect.width;\r\n shadowRect.height = parentRect.height + 40;\r\n } else {\r\n shadowRect.x = parentRect.x - 20;\r\n shadowRect.y = parentRect.y;\r\n shadowRect.width = parentRect.width + 40;\r\n shadowRect.height = parentRect.height;\r\n }\r\n return shadowRect;\r\n }\r\n\r\n const dropTargetPaneInfo = this.dockManager.dropTargetPaneInfo;\r\n const targetRect = dropTargetPaneInfo.targetRect;\r\n if (dropTargetPaneInfo && !parentRect) {\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 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 // reset dragged pane size for preview\r\n let draggedPaneSize = this.getPaneToDock(this.dockManager.draggedPane).size;\r\n if (this.draggedPaneParent?.useFixedSize === true && targetParent.useFixedSize !== true) {\r\n draggedPaneSize = IGC_DEFAULT_PANE_SIZE_IN_PIXELS;\r\n }\r\n\r\n if (targetParent.useFixedSize === true && this.draggedPaneParent?.orientation !== targetParent.orientation) {\r\n const newSize = this.getDraggedPanePostDockingSizeInPixels(targetParent.orientation === IgcSplitPaneOrientation.vertical);\r\n if (newSize) draggedPaneSize = newSize;\r\n }\r\n\r\n draggedPaneSize = draggedPaneSize >= 0 ? draggedPaneSize : IGC_DEFAULT_PANE_SIZE;\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 // take splitter size into account only when split pane has useFixedSize=true\r\n const splitterSize = targetParent.useFixedSize ? this.defaultSplitterSize : 0;\r\n const panesTotalSize = panes.reduce((a, b) => a + (b.size >= 0 ? b.size : IGC_DEFAULT_PANE_SIZE), 0) + (panes.length - 1) * splitterSize;\r\n const beforePanesTotalSize = !isRTL || isIndicatorVertical\r\n ? panes.slice(0, dropTargetIndex).reduce((a, b) => a + (b.size >= 0 ? b.size : IGC_DEFAULT_PANE_SIZE), 0) + dropTargetIndex * splitterSize\r\n : panes.slice(dropTargetIndex, panes.length).reduce((a, b) => a + (b.size >= 0 ? b.size : IGC_DEFAULT_PANE_SIZE), 0) + dropTargetIndex * splitterSize;\r\n const afterPanesTotalSize = !isRTL || isIndicatorVertical\r\n ? panes.slice(0, dropTargetIndex + 1).reduce((a, b) => a + (b.size >= 0 ? b.size : IGC_DEFAULT_PANE_SIZE), 0) + (dropTargetIndex + 1) * splitterSize\r\n : panes.slice(dropTargetIndex + 1, panes.length).reduce((a, b) => a + (b.size >= 0 ? b.size : IGC_DEFAULT_PANE_SIZE), 0) + (dropTargetIndex + 1) * splitterSize;\r\n\r\n // update parent rect for preview when useFixedSize=true\r\n if (targetParent.useFixedSize) {\r\n const rectWithPlaceholder = parentRect;\r\n parentRect = new DOMRect();\r\n parentRect.x = rectWithPlaceholder.x;\r\n parentRect.y = rectWithPlaceholder.y;\r\n parentRect.width = isSplitPaneVertical ? rectWithPlaceholder.width : panesTotalSize + draggedPaneSize;\r\n parentRect.height = isSplitPaneVertical ? panesTotalSize + draggedPaneSize : rectWithPlaceholder.height;\r\n }\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 (targetParent.useFixedSize && targetParent.orientation === IgcSplitPaneOrientation.horizontal) {\r\n shadowRect.width = draggedPaneSize;\r\n } else 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 (targetParent.useFixedSize && targetParent.orientation === IgcSplitPaneOrientation.horizontal) {\r\n shadowRect.width = draggedPaneSize;\r\n shadowRect.x = targetRect.right; // parentRect.right - shadowRect.width;\r\n } else 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 (targetParent.useFixedSize && targetParent.orientation === IgcSplitPaneOrientation.vertical) {\r\n shadowRect.height = draggedPaneSize;\r\n } else 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 (targetParent.useFixedSize && targetParent.orientation === IgcSplitPaneOrientation.vertical) {\r\n shadowRect.height = draggedPaneSize;\r\n shadowRect.y = baseRect.bottom;\r\n } else 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\r\n const panes = this.getSplitPaneVisibleChildren(this.dockManager.layout.rootPane);\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 >= 0 ? b.size : IGC_DEFAULT_PANE_SIZE), 0);\r\n\r\n const useFixedSize = this.dockManager.layout.rootPane.useFixedSize === true;\r\n const isIndicatorVertical = Utils.isDockingIndicatorVertical(this.dockingIndicator.position);\r\n const isSplitPaneVertical = Utils.isSplitPaneVertical(this.dockManager.layout.rootPane);\r\n const isSameSplitPane = !useFixedSize && ((isIndicatorVertical && isSplitPaneVertical) || (!isIndicatorVertical && !isSplitPaneVertical));\r\n const isEmptyDockManager = panes.length === 0;\r\n\r\n let draggedPaneSize = this.getPaneToDock(this.dockManager.draggedPane).size;\r\n draggedPaneSize = !useFixedSize ?\r\n draggedPaneSize >= 0 ? draggedPaneSize : IGC_DEFAULT_PANE_SIZE :\r\n this.getDraggedPanePostDockingSizeInPixels(isSplitPaneVertical);\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 ? (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 case IgcDockingIndicatorPosition.topMost:\r\n shadowRect.x = rootRect.x;\r\n shadowRect.y = rootRect.y;\r\n shadowRect.width = rootRect.width;\r\n shadowRect.height = useFixedSize ? draggedPaneSize : (draggedPaneSize / (draggedPaneSize + panesTotalSize) * rootRect.height);\r\n break;\r\n case IgcDockingIndicatorPosition.bottomMost:\r\n shadowRect.x = rootRect.x;\r\n shadowRect.width = rootRect.width;\r\n shadowRect.height = useFixedSize ? draggedPaneSize : (draggedPaneSize / (draggedPaneSize + panesTotalSize) * rootRect.height);\r\n shadowRect.y = rootRect.bottom - shadowRect.height;\r\n break;\r\n case IgcDockingIndicatorPosition.leftMost:\r\n shadowRect.x = rootRect.x;\r\n shadowRect.y = rootRect.y;\r\n shadowRect.height = rootRect.height;\r\n shadowRect.width = useFixedSize ? draggedPaneSize : (draggedPaneSize / (draggedPaneSize + panesTotalSize) * rootRect.width);\r\n break;\r\n case IgcDockingIndicatorPosition.rightMost:\r\n shadowRect.y = rootRect.y;\r\n shadowRect.height = rootRect.height;\r\n shadowRect.width = useFixedSize ? draggedPaneSize : (draggedPaneSize / (draggedPaneSize + panesTotalSize) * rootRect.width);\r\n shadowRect.x = rootRect.right - shadowRect.width;\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 public isSplitPaneIgnoringResizeConstraints(pane: IgcDockManagerPane): boolean {\r\n return pane && pane.type === IgcDockManagerPaneType.splitPane && pane.useFixedSize;\r\n }\r\n\r\n public isParentUseFixedSize(pane: IgcDockManagerPane): boolean {\r\n const parent = this.getParent(pane);\r\n return this.isSplitPaneIgnoringResizeConstraints(parent);\r\n }\r\n\r\n public checkAndAddPlaceholderPane(pane: IgcDockManagerPane, ignoreNestedPanes = false, isRoot = false): void {\r\n //Add placeholder pane in every splitPane that ignores resize constraints\r\n if (this.isSplitPaneIgnoringResizeConstraints(pane)) {\r\n const firstPane = (pane as IgcSplitPane).panes[0];\r\n const lastPane = (pane as IgcSplitPane).panes.at(-1);\r\n\r\n if (firstPane && isRoot && (firstPane.type !== IgcDockManagerPaneType.contentPane || (firstPane as IgcContentPane).header !== 'Placeholder')) {\r\n const placeholderPaneTop: IgcContentPane = {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"placeholderStart\",\r\n header: 'Placeholder',\r\n allowDocking: false,\r\n allowFloating: false,\r\n allowMaximize: false,\r\n allowPinning: false,\r\n size: 0\r\n };\r\n\r\n (pane as IgcSplitPane).panes.unshift(placeholderPaneTop);\r\n }\r\n\r\n if (lastPane && (lastPane.type !== IgcDockManagerPaneType.contentPane || (lastPane as IgcContentPane).header !== 'Placeholder')) {\r\n const placeholderPaneBottom: IgcContentPane = {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"placeholderEnd\",\r\n header: 'Placeholder',\r\n allowDocking: false,\r\n allowFloating: false,\r\n allowMaximize: false,\r\n allowPinning: false,\r\n size: 0\r\n };\r\n\r\n (pane as IgcSplitPane).panes.push(placeholderPaneBottom);\r\n }\r\n }\r\n\r\n if (!ignoreNestedPanes && pane.type !== IgcDockManagerPaneType.contentPane && pane.type !== IgcDockManagerPaneType.documentHost && pane.panes) {\r\n pane.panes.forEach(p => this.checkAndAddPlaceholderPane(p));\r\n } else if (pane.type === IgcDockManagerPaneType.documentHost) {\r\n this.checkAndAddPlaceholderPane(pane.rootPane);\r\n }\r\n }\r\n\r\n private shiftPlaceholderStartToNewRoot(oldRootPane: IgcSplitPane,newRootPane: IgcSplitPane, isDockingBefore: boolean) {\r\n if (!oldRootPane || oldRootPane.type !== IgcDockManagerPaneType.splitPane) return;\r\n\r\n const firstPane = oldRootPane.panes[0];\r\n const firstIsPlaceholder = firstPane?.type === IgcDockManagerPaneType.contentPane\r\n && (firstPane as IgcContentPane).contentId.startsWith('placeholder');\r\n\r\n if (isDockingBefore && firstIsPlaceholder) {\r\n const [placeholder] = oldRootPane.panes.splice(0, 1);\r\n newRootPane.panes.splice(0, 0, placeholder);\r\n }\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",":host {\r\n position: relative;\r\n z-index: 0;\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 max-height: 100vh;\r\n max-width: 100vw;\r\n height: 100%;\r\n width: 100%;\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 overflow-x: auto;\r\n }\r\n\r\n &--vertical {\r\n @extend %pane-container;\r\n flex-direction: column;\r\n overflow-y: auto;\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\r\n.drag-cursor:hover {\r\n cursor: pointer;\r\n}\r\n\r\n// Scrollbar styles\r\n::-webkit-scrollbar {\r\n\theight: $sb-size;\r\n\twidth: $sb-size;\r\n}\r\n\r\n::-webkit-scrollbar-track {\r\n\tbackground: $sb-track-bg-color;\r\n}\r\n\r\n::-webkit-scrollbar-track:hover,\r\n::-webkit-scrollbar-track:active {\r\n\tbackground: $sb-track-bg-color-hover;\r\n}\r\n\r\n::-webkit-scrollbar-corner {\r\n\tbackground: $sb-corner-bg;\r\n\tborder: $sb-corner-border-size solid $sb-corner-border-color;\r\n}\r\n\r\n::-webkit-scrollbar-track-piece {\r\n\tborder: $sb-track-border-size solid $sb-track-border-color;\r\n}\r\n\r\n::-webkit-scrollbar-button:vertical:start:decrement,\r\n::-webkit-scrollbar-button:vertical:end:increment,\r\n::-webkit-scrollbar-button:horizontal:start:decrement,\r\n::-webkit-scrollbar-button:horizontal:end:increment {\r\n\tdisplay: none;\r\n}\r\n\r\n::-webkit-scrollbar-thumb {\r\n\tmin-height: $sb-thumb-min-height;\r\n\tborder-radius: $sb-thumb-border-radius ;\r\n\tborder: $sb-thumb-border-size solid$sb-thumb-border-color;\r\n\tbackground-clip: content-box;\r\n\tbackground-color: $sb-thumb-bg-color;\r\n}\r\n\r\n::-webkit-scrollbar-thumb:hover {\r\n\tbackground-color: $sb-thumb-bg-color-hover;\r\n}\r\n\r\n.resize-target {\r\n border: $resize-target-border-width $resize-target-border-style $resize-target-border-color;\r\n}\r\n","import { Component, Element, Event, EventEmitter, Fragment, Host, Listen, Method, Prop, State, Watch, forceUpdate, h } from '@stencil/core';\r\nimport 'igniteui-trial-watermark';\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, 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 IgcPaneActionBehavior\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<IgcDockManagerPane, HTMLElement>;\r\n private contentPanesElementMap: Map<IgcContentPane, HTMLElement>;\r\n private tabHeadersMap: Map<IgcContentPane, HTMLElement>;\r\n private unpinnedHeadersMap: Map<IgcContentPane, HTMLElement>;\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 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 anyPaneIgnoringResizeConstraints: boolean = false;\r\n private highlightedJoystick: any;\r\n private paneVisibleRect: any;\r\n private splitterDockingIndicator: HTMLIgcSplitterDockingIndicatorComponentElement;\r\n private dockedPanesContainer: HTMLElement;\r\n private autoScrollDirection: { x: number, y: number } = { x: 0, y: 0 };\r\n private isSplitterResizing = false;\r\n private lastPointerEvent: PointerEvent | null = null;\r\n private splitPaneToResize: IgcSplitPane | null = null;\r\n private splitterResizingContext: {\r\n parentPane?: IgcSplitPane;\r\n parentPaneElement?: HTMLElement;\r\n pane?: IgcDockManagerPane;\r\n paneRect?: DOMRect;\r\n sizeSum?: number;\r\n orientation?: IgcSplitPaneOrientation;\r\n accumulatedDelta?: number;\r\n startX?: number;\r\n startY?: number;\r\n splitter?: IgcSplitterComponent;\r\n } = {};\r\n private rafId: number | null = null;\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 documentOnlyDrag: boolean;\r\n\r\n @Element() element: HTMLElement;\r\n\r\n @State() dropTargetPaneInfo: IgcDropTargetPaneInfo;\r\n @State() flyoutPane: IgcContentPane;\r\n @State() private autoScrollInterval: number = null;\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<IgcSplitPane, number>();\r\n @State() contextMenuMeta: IgcContextMenuMetadata;\r\n @State() dropShadowRect: DOMRect;\r\n @State() templates: Map<string, any> = 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: 'always' | 'onHoverOnly' = 'always';\r\n @Prop() showHeaderIconOnHover: 'none' | 'closeOnly' | 'moreOptionsOnly' | 'all' = 'none';\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 @Prop() closeBehavior: IgcPaneActionBehavior = IgcPaneActionBehavior.allPanes;\r\n @Prop() unpinBehavior: IgcPaneActionBehavior = IgcPaneActionBehavior.allPanes;\r\n @Prop() allowSplitterDock = false;\r\n @Prop() allowRootDock = true;\r\n\r\n/**\r\n * Enables changing the mouse cursor when hovering over a tab or pane header.\r\n *\r\n * When set to `true`, the cursor changes from the default to `pointer`,\r\n * indicating that the header can be dragged (e.g., to dock or float the pane).\r\n *\r\n * @default false\r\n */\r\n @Prop() enableDragCursor = false;\r\n\r\n/**\r\n * Specifies which docking orientations should apply the `FixedSize` sizing mode\r\n * when panes are dynamically created via docking.\r\n *\r\n * Possible values:\r\n * - `\"none\"`: Do not apply `FixedSize` on docking (default behavior).\r\n * - `\"vertical\"`: Apply `FixedSize` only when panes are docked vertically.\r\n * - `\"horizontal\"`: Apply `FixedSize` only when panes are docked horizontally.\r\n * - `\"both\"`: Apply `FixedSize` for both vertical and horizontal orientation.\r\n *\r\n * This setting affects only dynamically created panes via user docking actions.\r\n * It does not apply to programmatically created panes or layout restorations.\r\n *\r\n * @default \"none\"\r\n */\r\n @Prop() useFixedSizeOnDock: 'none' | 'vertical' | 'horizontal' | 'both' = 'none';\r\n\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 if (!this.isDragging) {\r\n this.updateLayout();\r\n }\r\n\r\n this.service.processLayout();\r\n\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 draggedPaneElement: HTMLElement;\r\n\r\n @Watch('draggedPane')\r\n draggedPaneChanged() {\r\n if (this.draggedPane) {\r\n this.draggedPaneElement = this.panesElementMap.get(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\r\n this.showDockingIndicators = panes.every(p => p.allowDocking !== false) && !this.anyPaneIgnoringResizeConstraints;\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 /**\r\n * Configuration for edge auto-scrolling behavior during drag & resize operations.\r\n *\r\n * - `edgeThreshold`: Distance in pixels from the container's edge that triggers scrolling.\r\n * - `scrollSpeed`: Number of pixels to scroll per interval (affects scroll rate).\r\n *\r\n * @type {{ edgeThreshold: number, scrollSpeed: number }}\r\n * @default { edgeThreshold: 20, scrollSpeed: 15 }\r\n */\r\n @Prop()\r\n autoScrollConfig = {\r\n edgeThreshold: 20,\r\n scrollSpeed: 15\r\n };\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<IgcPaneHeaderConnectionEventArgs>;\r\n\r\n @Event()\r\n paneHeaderDisconnected: EventEmitter<IgcPaneHeaderConnectionEventArgs>;\r\n\r\n @Event()\r\n tabHeaderConnected: EventEmitter<IgcTabHeaderConnectionEventArgs>;\r\n\r\n @Event()\r\n tabHeaderDisconnected: EventEmitter<IgcTabHeaderConnectionEventArgs>;\r\n\r\n @Event()\r\n splitterResizeStart: EventEmitter<IgcSplitterResizeEventArgs>;\r\n\r\n @Event()\r\n splitterResizeEnd: EventEmitter<IgcSplitterResizeEventArgs>;\r\n\r\n @Event()\r\n paneClose: EventEmitter<IgcPaneCloseEventArgs>;\r\n\r\n @Event()\r\n paneScroll: EventEmitter<IgcPaneScrollEventArgs>;\r\n\r\n @Event()\r\n panePinnedToggle: EventEmitter<IgcPanePinnedEventArgs>;\r\n\r\n @Event()\r\n activePaneChanged: EventEmitter<IgcActivePaneEventArgs>;\r\n\r\n @Event()\r\n paneDragStart: EventEmitter<IgcPaneDragStartEventArgs>;\r\n\r\n @Event()\r\n paneDragOver: EventEmitter<IgcPaneDragOverEventArgs>;\r\n\r\n @Event()\r\n paneDragEnd: EventEmitter<IgcPaneDragEndEventArgs>;\r\n\r\n @Event()\r\n floatingPaneResizeMove: EventEmitter<IgcFloatingPaneResizeMoveEventArgs>;\r\n\r\n @Event()\r\n floatingPaneResizeEnd: EventEmitter<IgcFloatingPaneResizeEventArgs>;\r\n\r\n @Event()\r\n floatingPaneResizeStart: EventEmitter<IgcFloatingPaneResizeEventArgs>;\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 this.reason = null;\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 const hasSplitter = pathHTMLElements[0].className.includes('splitter'); // Ensures clicked element is splitter\r\n if (hasSplitter) {\r\n const splitPaneEl = pathHTMLElements.filter(p => p.tagName.toLowerCase() === \"igc-split-pane-component\")[0];\r\n const splitPane = this.panesElementMap.getByValue(splitPaneEl);\r\n this.splitPaneToResize = (splitPane as IgcSplitPane);\r\n }\r\n }\r\n\r\n @Listen('pointerup')\r\n handlePointerUp() {\r\n this.reason = null;\r\n this.splitPaneToResize = null;\r\n\r\n // Stop continuous loop\r\n this.isSplitterResizing = false;\r\n if (this.rafId) {\r\n cancelAnimationFrame(this.rafId);\r\n this.rafId = null;\r\n }\r\n }\r\n\r\n private startResizeLoop(): void {\r\n const loop = () => {\r\n if (!this.isSplitterResizing) {\r\n this.rafId = null;\r\n return;\r\n }\r\n\r\n this.splitterResizeAndScroll();\r\n this.rafId = requestAnimationFrame(loop);\r\n };\r\n\r\n this.rafId = requestAnimationFrame(loop);\r\n }\r\n\r\n @Listen('contextmenu')\r\n onContextMenu() {\r\n if (this.draggedPane) {\r\n this.service.dockingIndicator = null;\r\n this.draggedPane = null;\r\n this.isValidDrop = true;\r\n requestAnimationFrame(() =>\r\n this.dropShadowRect = null);\r\n }\r\n }\r\n\r\n @Listen('pointermove')\r\n handlePointerMove(event: PointerEvent) {\r\n this.lastPointerEvent = event;\r\n\r\n // check if resize is in progress\r\n this.splitterRect\r\n if (this.isSplitterResizing && this.splitPaneToResize?.useFixedSize) {\r\n if (!this.rafId) {\r\n this.startResizeLoop();\r\n }\r\n }\r\n }\r\n\r\n @Method()\r\n async dropPane(): Promise<boolean> {\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.splitterDockingIndicator = this.element.shadowRoot.querySelector('igc-splitter-docking-indicator-component') as HTMLIgcSplitterDockingIndicatorComponentElement;\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\r\n getDockedPanesContainerRect() {\r\n return this.dockedPanesContainer?.getBoundingClientRect();\r\n }\r\n\r\n private updateLayout(): void {\r\n //Check for useFixedSize in the layout and create a placeholder pane for resizing.\r\n this.service.checkAndAddPlaceholderPane(this.layout.rootPane, false, true);\r\n if (!this.layout.floatingPanes) return;\r\n\r\n for (const p of this.layout.floatingPanes) {\r\n // Do not add a placeholder pane for floating pane's root splitPane\r\n p.panes.forEach(cp => this.service.checkAndAddPlaceholderPane(cp));\r\n\r\n // Should we add a resolved prop instead of setting useFixedSize to false?\r\n // Used to prevent the root parent splitPane of having flex grow and shrink set to 0 which breaks floating pane resizing.\r\n p.useFixedSize = false;\r\n }\r\n }\r\n\r\n private splitterResizeAndScroll(): void {\r\n if (!this.lastPointerEvent) return;\r\n\r\n const ctx = this.splitterResizingContext;\r\n const parentSplitPane = ctx.parentPaneElement;\r\n if (!parentSplitPane || !ctx.splitter) return;\r\n\r\n const panesSizeSum = ctx.sizeSum;\r\n const rect = parentSplitPane.getBoundingClientRect();\r\n\r\n // Config\r\n const maxDistance = 100; // px threshold for max autoscroll speed\r\n const baseScrollSpeed = this.autoScrollConfig.scrollSpeed;\r\n\r\n // Distances outside container bounds\r\n const outBottom = this.lastPointerEvent.pageY - (rect.bottom);\r\n const outTop = (rect.top) - this.lastPointerEvent.pageY;\r\n const outRight = this.lastPointerEvent.pageX - (rect.right);\r\n const outLeft = (rect.left) - this.lastPointerEvent.pageX;\r\n\r\n // Scale factor 0 → 1 based on distance outside\r\n const scrollFactor = (dist: number) =>\r\n Math.min(Math.max(dist, 0), maxDistance) / maxDistance;\r\n\r\n const verticalSpeed = scrollFactor(Math.max(outBottom, outTop)) * baseScrollSpeed;\r\n const horizontalSpeed = scrollFactor(Math.max(outRight, outLeft)) * baseScrollSpeed;\r\n\r\n // Compute resize percentage based on total drag\r\n let deltaPercentage = 0;\r\n if (ctx.orientation === IgcSplitPaneOrientation.vertical) {\r\n if (outBottom > 0) {\r\n deltaPercentage += outBottom / panesSizeSum;\r\n parentSplitPane.scrollTop = Math.min(\r\n parentSplitPane.scrollHeight - parentSplitPane.clientHeight,\r\n parentSplitPane.scrollTop + verticalSpeed\r\n );\r\n }\r\n if (outTop > 0) {\r\n deltaPercentage -= outTop / panesSizeSum;\r\n parentSplitPane.scrollTop = Math.max(\r\n 0,\r\n parentSplitPane.scrollTop - verticalSpeed\r\n );\r\n }\r\n } else {\r\n if (outRight > 0) {\r\n deltaPercentage += outRight / panesSizeSum;\r\n parentSplitPane.scrollLeft = Math.min(\r\n parentSplitPane.scrollWidth - parentSplitPane.clientWidth,\r\n parentSplitPane.scrollLeft + horizontalSpeed\r\n );\r\n }\r\n if (outLeft > 0) {\r\n deltaPercentage -= outLeft / panesSizeSum;\r\n parentSplitPane.scrollLeft = Math.max(\r\n 0,\r\n parentSplitPane.scrollLeft - horizontalSpeed\r\n );\r\n }\r\n }\r\n\r\n if (deltaPercentage !== 0) {\r\n ctx.splitter.applyAutoDrag();\r\n return;\r\n }\r\n\r\n // Accumulate resize delta (deferred until mouseup or live-applied)\r\n ctx.accumulatedDelta = deltaPercentage;\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<string, any> = 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) || minSize === 0) : ((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<number>) {\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 previousPane?.classList.remove('resize-target');\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 parent = this.service.getParent(pane);\r\n let offset = this.service.isSplitPaneIgnoringResizeConstraints(parent) ||\r\n this.isPaneSizeWithinConstraints(previousPane, event.detail, orientation, 'previous') ?\r\n this.splitterOffset * event.detail :\r\n 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, detail: {splitter: IgcSplitterComponent} }) {\r\n const splitter = event.target;\r\n const splitterEl = splitter as unknown as HTMLElement;\r\n const prevEl = splitterEl.previousElementSibling as HTMLElement;\r\n const prevPane = this.panesElementMap.getByValue(prevEl) as IgcContentPane;\r\n\r\n if (prevPane && prevPane.contentId === \"placeholderStart\") {\r\n this.splitterOffset = 0;\r\n splitter.showDragGhost = false;\r\n return;\r\n }\r\n\r\n const orientation = splitter.splitPaneOrientation;\r\n let rect: DOMRect;\r\n\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 prevEl?.classList.add('resize-target');\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 try {\r\n const splitPaneEl = splitterEl.parentElement;\r\n const splitPaneChildren = Array.from(splitPaneEl.children);\r\n const paneComponents = splitPaneChildren.filter(c => c.tagName.toLowerCase() !== 'igc-splitter-component');\r\n const parentPane = this.service.getParent(pane) as IgcSplitPane;\r\n const parentPaneElement = this.panesElementMap.get(parentPane);\r\n const sizeProperty = parentPane.orientation === IgcSplitPaneOrientation.horizontal ? 'offsetWidth' : 'offsetHeight';\r\n const sizeSum = paneComponents.reduce((s, p: HTMLElement) => s + (p as any)[sizeProperty], 0) || 1;\r\n\r\n this.isSplitterResizing = true;\r\n this.splitterResizingContext = {\r\n parentPane,\r\n parentPaneElement,\r\n pane,\r\n sizeSum,\r\n orientation: parentPane.orientation,\r\n accumulatedDelta: 0,\r\n startX: rect.x,\r\n startY: rect.y,\r\n splitter: event.detail.splitter\r\n\r\n };\r\n } catch (e) {\r\n this.isSplitterResizing = false;\r\n this.splitterResizingContext = {};\r\n }\r\n }\r\n\r\n private handleSplitterResizeEnd(parentPane: IgcSplitPane, pane: IgcDockManagerPane, event: CustomEvent<number>) {\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 previousPane?.classList.remove('resize-target');\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 = parentPane.useFixedSize ||\r\n this.isPaneSizeWithinConstraints(previousPane, event.detail, parentPane.orientation, 'previous') &&\r\n this.isPaneSizeWithinConstraints(nextPane, event.detail, parentPane.orientation) ? event.detail : 0;\r\n let offsetPercentage = (this.splitterOffset + this.splitterResizingContext.accumulatedDelta) * 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 this.isSplitterResizing = false;\r\n this.splitterResizingContext = {};\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 unpinBehavior = !isPinned ? IgcPaneActionBehavior.selectedPane : this.unpinBehavior;\r\n\r\n this.shouldClearActivePane = false;\r\n this.service.togglePin(pane, unpinBehavior);\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<IgcDragStartEventArguments>) {\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, this.anyPaneIgnoringResizeConstraints);\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<IgcDragMoveEventArguments>) {\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<IgcDragMoveEventArguments>) {\r\n this.layout?.rootPane.useFixedSize && this.handleAutoScroll(clientX, clientY);\r\n\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 // After successfull pane drag, check if there is a splitPane with useFixedSize = true\r\n // that is left with a single placeholder pane and remove it.\r\n // This would happen only when the last non placeholder pane of a split pane gets dragged.\r\n if (dragMoved) {\r\n const elements = this.element.shadowRoot.elementsFromPoint(clientX, clientY);\r\n const splitPanes = elements.filter(e => e.tagName.toLowerCase() === 'igc-split-pane-component')\r\n for (const sp of splitPanes) {\r\n const splitPane = this.panesElementMap.getByValue(sp as HTMLElement) as IgcSplitPane;\r\n\r\n if (splitPane.useFixedSize &&\r\n splitPane.panes.length === 1 &&\r\n splitPane.panes[0].type === IgcDockManagerPaneType.contentPane &&\r\n splitPane.panes[0].contentId.startsWith(\"placeholder\")) {\r\n this.service.closePane(splitPane.panes[0]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private handleAutoScroll(clientX: number, clientY: number) {\r\n const SCROLL_ZONE = this.autoScrollConfig.edgeThreshold; // px from edge to start scrolling\r\n const SCROLL_SPEED = this.autoScrollConfig.scrollSpeed; // px per interval\r\n\r\n const rootSplitPane = this.dockedPanesContainer.children[0] as HTMLElement;\r\n if (!rootSplitPane) return;\r\n\r\n const rect = rootSplitPane.getBoundingClientRect();\r\n\r\n let newX = 0, newY = 0; // Use newX, newY to distinguish from this.autoScrollDirection\r\n\r\n if (clientX - rect.left < SCROLL_ZONE) {\r\n newX = -SCROLL_SPEED;\r\n } else if (rect.right - clientX < SCROLL_ZONE) {\r\n newX = SCROLL_SPEED;\r\n }\r\n\r\n if (clientY - rect.top < SCROLL_ZONE) {\r\n newY = -SCROLL_SPEED;\r\n } else if (rect.bottom - clientY < SCROLL_ZONE) {\r\n newY = SCROLL_SPEED;\r\n }\r\n\r\n // Condition to start or change scrolling direction\r\n // Start/Change if:\r\n // 1. The calculated new direction is different from the current active direction, OR\r\n // 2. We've just entered a scroll zone (newX/newY is not 0) AND there's no active interval.\r\n if ((newX !== this.autoScrollDirection.x || newY !== this.autoScrollDirection.y) ||\r\n ((newX !== 0 || newY !== 0) && !this.autoScrollInterval)) {\r\n\r\n this.autoScrollDirection = { x: newX, y: newY }; // Update the stored direction\r\n\r\n // Always clear the existing interval if there is one, before setting a new one\r\n if (this.autoScrollInterval) {\r\n clearInterval(this.autoScrollInterval);\r\n this.autoScrollInterval = null;\r\n }\r\n\r\n // If we are currently in a scroll zone (newX or newY is not 0), start a new interval\r\n if (newX !== 0 || newY !== 0) {\r\n this.autoScrollInterval = window.setInterval(() => {\r\n if (this.autoScrollDirection.x !== 0) rootSplitPane.scrollLeft += this.autoScrollDirection.x;\r\n if (this.autoScrollDirection.y !== 0) rootSplitPane.scrollTop += this.autoScrollDirection.y;\r\n }, 30);\r\n } else {\r\n // If newX and newY are both 0, and we just cleared an interval,\r\n // this means we've moved out of all scroll zones.\r\n // No need to explicitly clear again here, but it's where the logic lands.\r\n }\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 if (this.autoScrollInterval) {\r\n clearInterval(this.autoScrollInterval);\r\n this.autoScrollInterval = null;\r\n this.autoScrollDirection = { x: 0, y: 0 };\r\n }\r\n\r\n\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 this.setSplitterDockingIndicatorVisibility('hidden');\r\n return docked;\r\n }\r\n\r\n public scrollPaneIntoView(pane: IgcDockManagerPane) {\r\n const paneElement = this.panesElementMap.get(pane);\r\n const parentPane = this.service.getRootParent(pane);\r\n const parentElement = this.panesElementMap.get(parentPane);\r\n const containerRect = parentElement.getBoundingClientRect();\r\n const paneRect = paneElement.getBoundingClientRect();\r\n\r\n // Distance of pane top relative to container top\r\n const offsetTop = paneRect.top - containerRect.top;\r\n const offsetLeft = paneRect.left - containerRect.left;\r\n\r\n if (offsetTop < 0 || offsetLeft < 0) {\r\n // Pane is above/left viewport → scroll up/left\r\n this.scheduleAfterRender(() => {\r\n paneElement.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\r\n });\r\n } else if ((offsetTop + paneRect.height > parentElement.clientHeight) || (offsetLeft + paneRect.width > parentElement.clientWidth)) {\r\n // Pane is below/right viewport → scroll down/right\r\n this.scheduleAfterRender(() => {\r\n paneElement.scrollIntoView({ behavior: \"smooth\", block: \"end\" });\r\n });\r\n }\r\n\r\n this.scheduleAfterRender(() => {\r\n this.reason = null;\r\n });\r\n }\r\n\r\n private handleTabHeaderDragStart(pane: IgcContentPane, event: CustomEvent<IgcDragStartEventArguments>) {\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<IgcDragMoveEventArguments>) {\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, this.anyPaneIgnoringResizeConstraints);\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<IgcDragResizeEventArguments>) {\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<IgcDragResizeEventArguments>) {\r\n this.service.resizeFloatingPane(pane, event.detail);\r\n }\r\n\r\n private handleFloatingPaneResizeEnd(pane: IgcSplitPane, event: CustomEvent<IgcDragResizeEventArguments>) {\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 if (this.highlightedJoystick) {\r\n this.highlightedJoystick.style.boxShadow = '';\r\n }\r\n\r\n const elements = clientX && clientY ?\r\n this.element.shadowRoot.elementsFromPoint(clientX, clientY) :\r\n null;\r\n\r\n this.splitterRect = null;\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 // root docking indicator\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 this.highlightedJoystick = dockingIndicatorElement;\r\n this.highlightedJoystick.style.boxShadow = 'inset 0 0 0 3px rgba(0,0,0,0.2), inset 0 0 0 25px rgba(100,149,237,0.2)';\r\n } else {\r\n const edgeIndicatorElement = topElement.closest('igc-edge-docking-indicator-component');\r\n if (edgeIndicatorElement) {\r\n dockingIndicatorElement = edgeIndicatorElement;\r\n this.service.dockingIndicator = {\r\n position: edgeIndicatorElement.position,\r\n isRoot: true,\r\n direction: this.direction\r\n };\r\n\r\n indicatorTarget = edgeIndicatorElement.dropTargetPaneInfo;\r\n\r\n this.highlightedJoystick = edgeIndicatorElement;\r\n this.highlightedJoystick.style.boxShadow = 'inset 0 0 0 3px rgba(0,0,0,0.2), inset 0 0 0 25px rgba(100,149,237,0.2)';\r\n } else {\r\n // regular docking indicator\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 this.highlightedJoystick = joystickIcon;\r\n this.highlightedJoystick.style.boxShadow = 'inset 0 0 0 3px rgba(0,0,0,0.2), inset 0 0 0 25px rgba(100,149,237,0.2)';\r\n }\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 && this.panesElementMap.getByValue(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 const paneRect = paneElement.getBoundingClientRect();\r\n if (dropPane.type === IgcDockManagerPaneType.contentPane) {\r\n this.paneVisibleRect = new DOMRect(\r\n paneRect.x,\r\n paneRect.y,\r\n paneRect.width,\r\n paneRect.height\r\n );\r\n\r\n this.paneVisibleRect = this.reduceRectBasedOnSplitters(this.paneVisibleRect, paneElement);\r\n this.paneVisibleRect = this.reduceRectBasedOnDockManagerBorders(this.paneVisibleRect);\r\n }\r\n\r\n this.dropTargetPaneInfo = {\r\n pane: dropPane,\r\n targetRect: paneRect,\r\n visibleTargetRect: this.paneVisibleRect ?? paneRect,\r\n docHost,\r\n floatingPaneWithoutDocHost,\r\n };\r\n this.paneVisibleRect = null;\r\n } else {\r\n this.dropTargetPaneInfo = null;\r\n }\r\n } else if (this.dropTargetPaneInfo && this.dropTargetPaneInfo.pane === dropPane) {\r\n // If the drop target pane is the same as the previous one, update the targetRect and visibleTargetRect\r\n const paneRect = paneElement.getBoundingClientRect();\r\n this.paneVisibleRect = new DOMRect(\r\n paneRect.x,\r\n paneRect.y,\r\n paneRect.width,\r\n paneRect.height\r\n );\r\n\r\n this.paneVisibleRect = this.reduceRectBasedOnSplitters(this.paneVisibleRect, paneElement);\r\n this.paneVisibleRect = this.reduceRectBasedOnDockManagerBorders(this.paneVisibleRect);\r\n this.dropTargetPaneInfo.targetRect = paneRect;\r\n this.dropTargetPaneInfo.visibleTargetRect = this.paneVisibleRect;\r\n }\r\n } else {\r\n this.dropTargetPaneInfo = null;\r\n }\r\n\r\n if (!this.allowSplitterDock) return;\r\n\r\n // if (clientX, clientY) is less than 20 pixels in either way to the nearest 'igc-splitter-component' element, show the splitterIndicator\r\n const splitters = this.element.shadowRoot.querySelectorAll('igc-splitter-component');\r\n let splitterFound = false;\r\n splitters.forEach(splitter => {\r\n if (splitterFound) { return; }\r\n\r\n let splitterRect = splitter.getBoundingClientRect();\r\n const horizontalDeviation = splitterRect.width < splitterRect.height ? 1 : 0;\r\n const verticalDeviation = splitterRect.width > splitterRect.height ? 1 : 0;\r\n const isOverSplitter = clientX >= splitterRect.left - (horizontalDeviation * 20)\r\n && clientX <= splitterRect.right + (horizontalDeviation * 20)\r\n && clientY >= splitterRect.top - (verticalDeviation * 20)\r\n && clientY <= splitterRect.bottom + (verticalDeviation * 20);\r\n const isSplitterHorizontal = splitterRect.width > splitterRect.height;\r\n\r\n if (isOverSplitter) {\r\n splitterRect = this.reduceRectBasedOnSplitters(splitterRect, splitter);\r\n splitterRect = this.reduceRectBasedOnDockManagerBorders(splitterRect);\r\n\r\n const isOverSplitterVisiblePart = clientX >= splitterRect.left - (horizontalDeviation * 20)\r\n && clientX <= splitterRect.right + (horizontalDeviation * 20)\r\n && clientY >= splitterRect.top - (verticalDeviation * 20)\r\n && clientY <= splitterRect.bottom + (verticalDeviation * 20);\r\n\r\n if (!isOverSplitterVisiblePart) {\r\n this.setSplitterDockingIndicatorVisibility('hidden');\r\n }\r\n\r\n const splitterParent = splitter.parentElement;\r\n const splitterParentIndex = elements.indexOf(splitterParent);\r\n const floatingPane = elements.slice().reverse().find(e => e.tagName.toLowerCase() === 'igc-floating-pane-component');\r\n const floatingPaneIndex = elements.indexOf(floatingPane);\r\n if (floatingPaneIndex > 0 && floatingPaneIndex < splitterParentIndex) {\r\n // there is a floating pane between the splitter area and the cursor\r\n return;\r\n }\r\n\r\n splitterFound = true;\r\n\r\n const splitterCenterX = splitterRect.left + splitterRect.width / 2;\r\n const splitterCenterY = splitterRect.top + splitterRect.height / 2;\r\n\r\n if (!this.splitterDockingIndicator) return;\r\n this.splitterDockingIndicator.style.left = `${splitterCenterX - this.splitterDockingIndicator.clientWidth / 2 - 1}px`;\r\n this.splitterDockingIndicator.style.top = `${splitterCenterY - this.splitterDockingIndicator.clientHeight / 2 - 1}px`;\r\n (this.splitterDockingIndicator as any).position = isSplitterHorizontal ? IgcDockingIndicatorPosition.splitterHorizontal : IgcDockingIndicatorPosition.splitterVertical;\r\n this.setSplitterDockingIndicatorVisibility('visible');\r\n\r\n // check if cursor is over splitterIndicator\r\n if (!dockingIndicatorElement && this.splitterDockingIndicator.style.visibility === 'visible') {\r\n const splitterIndicatorRect = this.splitterDockingIndicator.getBoundingClientRect();\r\n const isOversplitterIndicator = clientX >= splitterIndicatorRect.left && clientX <= splitterIndicatorRect.right &&\r\n clientY >= splitterIndicatorRect.top && clientY <= splitterIndicatorRect.bottom;\r\n if (isOversplitterIndicator) {\r\n dockingIndicatorElement = this.splitterDockingIndicator;\r\n this.service.dockingIndicator = {\r\n position: isSplitterHorizontal ? IgcDockingIndicatorPosition.splitterHorizontal : IgcDockingIndicatorPosition.splitterVertical,\r\n isRoot: false,\r\n direction: this.direction\r\n };\r\n this.highlightedJoystick = this.splitterDockingIndicator;\r\n this.highlightedJoystick.style.boxShadow = 'inset 0 0 0 3px rgba(0,0,0,0.2), inset 0 0 0 25px rgba(100,149,237,0.2)';\r\n\r\n this.service.dropTargetParentRect = splitterRect;\r\n const paneToInsertAfter = this.panesElementMap.getByValue(splitter.previousElementSibling as HTMLElement);\r\n const parent = this.service.getParent(paneToInsertAfter) as IgcSplitPane;\r\n const index = parent?.panes.indexOf(paneToInsertAfter);\r\n this.service.splitterDockTarget = {\r\n pane: paneToInsertAfter,\r\n index: index\r\n };\r\n }\r\n }\r\n } else {\r\n this.setSplitterDockingIndicatorVisibility('hidden');\r\n }\r\n });\r\n }\r\n\r\n private reduceRectBasedOnSplitters(rect: DOMRect, element: HTMLElement): DOMRect {\r\n let reducedRect = rect;\r\n let parentElement = element.parentElement;\r\n while(parentElement) {\r\n if (parentElement.previousElementSibling && parentElement.previousElementSibling?.tagName.toLowerCase() === 'igc-splitter-component') {\r\n const parentPreviousElementSiblingRect = parentElement.previousElementSibling?.getBoundingClientRect();\r\n reducedRect = this.getVisibleRect(reducedRect, parentPreviousElementSiblingRect, parentPreviousElementSiblingRect.width <= 5, true);\r\n }\r\n\r\n if (parentElement.nextElementSibling && parentElement.nextElementSibling?.tagName.toLowerCase() === 'igc-splitter-component') {\r\n const parentNextElementSiblingRect = parentElement.nextElementSibling?.getBoundingClientRect();\r\n reducedRect = this.getVisibleRect(reducedRect, parentNextElementSiblingRect, parentNextElementSiblingRect.width <= 5, false);\r\n }\r\n\r\n parentElement = parentElement.parentElement;\r\n }\r\n\r\n return reducedRect;\r\n }\r\n\r\n private reduceRectBasedOnDockManagerBorders(rect: DOMRect): DOMRect {\r\n let reducedRect = rect;\r\n\r\n const dockManagerRect = this.element.getBoundingClientRect();\r\n const dockManagerLeftRect = new DOMRect(\r\n dockManagerRect.x,\r\n dockManagerRect.y,\r\n 1,\r\n dockManagerRect.height\r\n );\r\n reducedRect = this.getVisibleRect(reducedRect, dockManagerLeftRect, true, true);\r\n const dockManagerRightRect = new DOMRect(\r\n dockManagerRect.right - 1,\r\n dockManagerRect.y,\r\n 1,\r\n dockManagerRect.height\r\n );\r\n reducedRect = this.getVisibleRect(reducedRect, dockManagerRightRect, true, false);\r\n\r\n const dockManagerTopRect = new DOMRect(\r\n dockManagerRect.x,\r\n dockManagerRect.y,\r\n dockManagerRect.width,\r\n 1\r\n );\r\n reducedRect = this.getVisibleRect(reducedRect, dockManagerTopRect, false, true);\r\n const dockManagerBottomRect = new DOMRect(\r\n dockManagerRect.x,\r\n dockManagerRect.bottom - 1,\r\n dockManagerRect.width,\r\n 1\r\n );\r\n reducedRect = this.getVisibleRect(reducedRect, dockManagerBottomRect, false, false);\r\n\r\n return reducedRect;\r\n }\r\n\r\n private setSplitterDockingIndicatorVisibility(value: string) {\r\n if (this.splitterDockingIndicator && this.splitterDockingIndicator.style.visibility !== value) {\r\n this.splitterDockingIndicator.style.visibility = value;\r\n forceUpdate(this);\r\n }\r\n }\r\n\r\n private getVisibleRect(rect: DOMRect, otherRect: DOMRect, isLeftOrRight: boolean, isLeftOrTop: boolean) {\r\n if (!rect || !otherRect || otherRect.width === 0 || otherRect.height === 0) {\r\n return rect;\r\n }\r\n\r\n let visibleRect = rect;\r\n if (isLeftOrRight) {\r\n if (isLeftOrTop && rect.left < otherRect.left && otherRect.right < rect.right) { // right side visible\r\n visibleRect.width = rect.right - otherRect.right;\r\n visibleRect.x = otherRect.right;\r\n }\r\n else if (!isLeftOrTop && rect.left < otherRect.left && otherRect.right < rect.right) { // left side visible\r\n visibleRect.width = otherRect.left - rect.x\r\n }\r\n } else {\r\n if (isLeftOrTop && rect.top < otherRect.top && otherRect.bottom < rect.bottom) { // top side visible\r\n visibleRect.height = rect.bottom - otherRect.bottom;\r\n visibleRect.y = otherRect.bottom;\r\n }\r\n else if (!isLeftOrTop && rect.top < otherRect.top && otherRect.bottom < rect.bottom) { // bottom side visible\r\n visibleRect.height = otherRect.top - rect.y\r\n }\r\n }\r\n\r\n // Ensure the visibleRect is within the bounds of the original rect\r\n if (visibleRect.width < 0 || visibleRect.height < 0) {\r\n return rect; // Element is not visible\r\n }\r\n\r\n return visibleRect;\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.getDockedPanesContainerRect();\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 if(Utils.isDockingIndicatorMost(position as IgcDockingIndicatorPosition)) {\r\n const targetPaneParent = this.layout.rootPane;\r\n\r\n const targetPaneParentRect = this.panesElementMap.has(targetPaneParent) ? this.panesElementMap.get(targetPaneParent).getBoundingClientRect() : null;\r\n rect = targetPaneParentRect;\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<IgcPaneScrollEventArgs>) {\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 !== 'none' &&\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<MouseEvent>) {\r\n if (this.showHeaderIconOnHover === 'none') {\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<number>) {\r\n pane.selectedIndex = event.detail;\r\n }\r\n\r\n private handleHiddenTabSelected(pane: IgcTabGroupPane, event: CustomEvent<number>) {\r\n this.activePane = this.service.getVisibleContentPanes(pane)[event.detail];\r\n }\r\n\r\n private handleSelectedTabOutOfView(pane: IgcTabGroupPane, event: CustomEvent<number>) {\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<KeyboardEvent>) {\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<boolean>) {\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<IgcPaneHeaderElement>) {\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<IgcPaneHeaderElement>) {\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<IgcTabHeaderElement>) {\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<IgcTabHeaderElement>) {\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 <template>\r\n <slot name=\"paneHeaderCloseButton\" onSlotchange={this.updateTemplates}></slot>\r\n <slot name=\"tabHeaderCloseButton\" onSlotchange={this.updateTemplates}></slot>\r\n <slot name=\"closeButton\" onSlotchange={this.updateTemplates}></slot>\r\n <slot name=\"moreTabsButton\" onSlotchange={this.updateTemplates}></slot>\r\n <slot name=\"maximizeButton\" onSlotchange={this.updateTemplates}></slot>\r\n <slot name=\"minimizeButton\" onSlotchange={this.updateTemplates}></slot>\r\n <slot name=\"pinButton\" onSlotchange={this.updateTemplates}></slot>\r\n <slot name=\"unpinButton\" onSlotchange={this.updateTemplates}></slot>\r\n <slot name=\"moreOptionsButton\" onSlotchange={this.updateTemplates}></slot>\r\n <slot name=\"splitterHandle\" onSlotchange={this.updateTemplates}></slot>\r\n </template>\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 <igc-content-pane-component\r\n key={pane.id}\r\n contentId={pane.contentId}\r\n size={pane.size}\r\n isFlyout={isFlyout}\r\n unpinnedSize={pane.unpinnedSize}\r\n disabled={pane.disabled}\r\n isSingleFloating={isSingleFloatingContentPane}\r\n onMouseMove={this.togglePaneHeaderVisibility.bind(this, pane)}\r\n onMouseLeave={this.removeHoveredPane.bind(this)}\r\n parentUseFixedSize={this.service.isParentUseFixedSize(pane)}\r\n ref={el => {\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 <igc-pane-header-component\r\n slot=\"header\"\r\n pane={pane}\r\n isActive={pane === this.activePane}\r\n disabled={pane.disabled && !isSingleFloatingContentPane}\r\n pinned={this.service.getActualIsPinned(pane)}\r\n allowMaximize={this.resolveAllowMaximize(pane)}\r\n maximized={maximized}\r\n allowClose={this.service.getActualAllowClose(pane)}\r\n allowPinning={pane.allowPinning !== false}\r\n isFloating={isFloating}\r\n forcedDrag={forceDrag}\r\n resourceStrings={this.resourceStrings}\r\n onPinToggle={this.handlePinToggle.bind(this, pane)}\r\n onMaximize={this.handleMaximize.bind(this, pane)}\r\n onDragMoved={this.handlePaneDragMove.bind(this)}\r\n onDragStarted={this.handlePaneDragStart.bind(this, isSingleFloatingContentPane ? floatingPane : pane)}\r\n onDragEnded={this.handlePaneDragEnd.bind(this)}\r\n onClose={this.handlePaneClose.bind(this, pane)}\r\n onElementConnected={this.emitPaneHeaderConnected.bind(this, pane)}\r\n onElementDisconnected={this.emitPaneHeaderDisconnected.bind(this, pane)}\r\n onMouseDown={this.handlePaneHeaderMouseDown.bind(this, pane)}\r\n class={{\r\n 'hidden': this.showPaneHeaders === 'onHoverOnly' && this.hoveredPane !== pane,\r\n 'transitioned': this.showPaneHeaders === 'onHoverOnly' && this.hoveredPane === pane,\r\n 'drag-cursor': this.enableDragCursor && !this.isDragging && !(pane.allowDocking === false && pane.allowFloating === false)\r\n }}\r\n >\r\n {(isFloating && pane.floatingHeaderId) ? <slot name={pane.floatingHeaderId}></slot> :\r\n pane.headerId ? <slot name={pane.headerId}></slot> :\r\n pane.header}\r\n </igc-pane-header-component>\r\n <div\r\n class=\"content\"\r\n onMouseDown={this.handlePaneContentMouseDown.bind(this, pane)}\r\n onScroll={this.handlePaneContentScroll.bind(this, pane)}\r\n >\r\n <slot name={pane.contentId}></slot>\r\n </div>\r\n </igc-content-pane-component>\r\n );\r\n }\r\n\r\n private renderSplitter(parentPane: IgcSplitPane, pane: IgcDockManagerPane) {\r\n const index = parentPane.panes.indexOf(pane);\r\n const prevPane = index > 0 ? parentPane.panes[index - 1] : null;\r\n const resizable = !(prevPane && (prevPane as IgcContentPane).contentId === 'placeholderStart');\r\n const scrollSpeed = this.autoScrollConfig?.scrollSpeed;\r\n\r\n return (\r\n <igc-splitter-component\r\n splitPaneOrientation={parentPane.orientation}\r\n onResizeStart={this.handleSplitterResizeStart.bind(this, pane)}\r\n onResizeEnd={this.handleSplitterResizeEnd.bind(this, parentPane, pane)}\r\n onFocusin={this.clearActivePane.bind(this)}\r\n parentUseFixedSize={parentPane.useFixedSize}\r\n resizable={resizable}\r\n scrollSpeed={scrollSpeed}\r\n >\r\n </igc-splitter-component >\r\n );\r\n }\r\n\r\n private renderDocumentHost(docHost: IgcDocumentHost) {\r\n return (\r\n <igc-document-host-component\r\n key={docHost.id}\r\n size={docHost.size}\r\n parentUseFixedSize={this.service.isParentUseFixedSize(docHost)}\r\n ref={el => {\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 </igc-document-host-component>\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 <igc-tabs-component\r\n key={pane.id}\r\n contentIds={contentIds}\r\n size={pane.size}\r\n selectedIndex={selectedIndex}\r\n hasHeaders={!isSingleTab}\r\n parentUseFixedSize={this.service.isParentUseFixedSize(pane)}\r\n maximized={this.maximizedPane === pane}\r\n allowMaximize={position === IgcTabHeadersPosition.top && allowMaximize}\r\n onMaximizeMinimizeFocus={this.clearActivePane.bind(this)}\r\n onMaximize={this.handleMaximize.bind(this, pane)}\r\n onSelectedIndexChanged={this.handleTabSelectedIndexChanged.bind(this, pane)}\r\n onHiddenTabSelected={this.handleHiddenTabSelected.bind(this, pane)}\r\n onSelectedTabOutOfView={this.handleSelectedTabOutOfView.bind(this, pane)}\r\n onRendered={this.handleTabsRendered.bind(this, pane)}\r\n tabHeadersPosition={position}\r\n resourceStrings={this.resourceStrings}\r\n ref={el => {\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 </igc-tabs-component>\r\n );\r\n }\r\n\r\n private renderTabPanel(pane: IgcContentPane, isInDocumentHost: boolean, isFloating: boolean) {\r\n return (\r\n <igc-tab-panel-component\r\n key={pane.id}\r\n disabled={pane.disabled}\r\n onMouseDown={isInDocumentHost ? this.handlePaneContentMouseDown.bind(this, pane) : null}\r\n onSelectedChanged={this.handleTabSelectedChanged.bind(this, pane)}\r\n onScroll={isInDocumentHost ? this.handlePaneContentScroll.bind(this, pane) : null}\r\n >\r\n {isInDocumentHost ?\r\n <slot name={pane.contentId}></slot> :\r\n this.renderContentPane(pane, isFloating, false)}\r\n </igc-tab-panel-component>);\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 <igc-tab-header-component\r\n key={pane.id}\r\n slot=\"tabHeader\"\r\n isActive={pane === this.activePane}\r\n disabled={pane.disabled}\r\n showHeaderIconOnHover={this.showHeaderIconOnHover}\r\n header={pane.header}\r\n resourceStrings={this.resourceStrings}\r\n onDragStarted={this.handleTabHeaderDragStart.bind(this, pane)}\r\n onDragMoved={this.handleTabHeaderDragMove.bind(this, pane)}\r\n onDragEnded={this.handleTabHeaderDragEnd.bind(this, pane)}\r\n onMouseDown={this.handleTabHeaderMouseDown.bind(this, pane)}\r\n onIconKeyDown={this.handleTabIconKeyDown.bind(this, iconName, pane)}\r\n position={position}\r\n onIconClicked={this.handleTabIconClick.bind(this, pane, position, isFloating)}\r\n iconName={iconName}\r\n forcedDrag={forceDrag}\r\n onElementConnected={this.emitTabHeaderConnected.bind(this, pane)}\r\n onElementDisconnected={this.emitTabHeaderDisconnected.bind(this, pane)}\r\n ref={el => {\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 class={{\r\n 'drag-cursor': this.enableDragCursor && !this.isDragging\r\n }}\r\n >\r\n {\r\n pane.tabHeaderId ?\r\n <slot name={pane.tabHeaderId}></slot> :\r\n <span part=\"header-title\" title={pane.header}>{pane.header}</span>\r\n }\r\n </igc-tab-header-component>);\r\n }\r\n\r\n private renderSplitPane(splitPane: IgcSplitPane, isFloating: boolean, isInDocumentHost: boolean) {\r\n if (this.reason === ActionReason.drop && this.activePane && splitPane.useFixedSize && splitPane === this.layout.rootPane) {\r\n requestAnimationFrame(() => {\r\n this.scrollPaneIntoView(this.activePane);\r\n forceUpdate(this);\r\n });\r\n }\r\n\r\n const panes = this.service.getSplitPaneVisibleChildren(splitPane);\r\n return (splitPane.allowEmpty || panes.length > 0) && (\r\n <igc-split-pane-component\r\n key={splitPane.id}\r\n orientation={splitPane.orientation}\r\n size={splitPane.size}\r\n useFixedSize={splitPane.useFixedSize}\r\n parentUseFixedSize={this.service.isParentUseFixedSize(splitPane)}\r\n onRendered={this.handleSplitPaneRendered.bind(this, panes)}\r\n ref={el => {\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 = p.contentId === \"placeholderEnd\" ?\r\n this.renderPlaceholder(p) :\r\n 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 </igc-split-pane-component>\r\n );\r\n }\r\n\r\n private renderPlaceholder(pane: IgcContentPane) {\r\n return (\r\n <igc-content-pane-component\r\n key={pane.id}\r\n contentId={pane.contentId}\r\n size={pane.size}\r\n >\r\n </igc-content-pane-component>\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 <div\r\n class={tabAreaClasses}\r\n part={Utils.partNameMap(tabAreaClasses)}\r\n role=\"tablist\"\r\n aria-orientation={isHorizontal ? 'horizontal' : 'vertical'}\r\n >\r\n {panes.map(p => (\r\n <igc-unpinned-pane-header-component\r\n location={location}\r\n isActive={p === this.activePane}\r\n disabled={p.disabled}\r\n onMouseDown={this.handleUnpinnedTabMouseDown.bind(this, p)}\r\n onKeyDown={this.handleUnpinnedTabKeyDown.bind(this, p)}\r\n onFocus={this.handleUnpinnedHeaderFocus.bind(this, p)}\r\n ref={el => {\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 ? <slot name={p.unpinnedHeaderId} /> : p.header}\r\n </igc-unpinned-pane-header-component>\r\n ))}\r\n </div>\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 <div class={flyoutClasses} style={{ 'z-index': maximized ? '10002' : '2' }}>\r\n {this.renderContentPane(this.flyoutPane, false, true)}\r\n <igc-splitter-component\r\n flyoutLocation={location}\r\n splitPaneOrientation={splitPaneOrientation}\r\n onResizeStart={this.handleSplitterResizeStart.bind(this, this.flyoutPane, )}\r\n onResizeEnd={this.handleFlyoutSplitterResizeEnd.bind(this, this.flyoutPane, splitPaneOrientation)}\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n private renderFloatingPanes() {\r\n return (\r\n <div class=\"floating-panes\" style={{ position: this.maximizedPane ? 'absolute' : 'fixed' }}>\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 <igc-floating-pane-component\r\n key={p.id}\r\n floatingId={p.id}\r\n style={{ zIndex: this.floatingPaneZIndicesMap.get(p).toString() }}\r\n floatingLocation={p.floatingLocation ? p.floatingLocation : { x: 0, y: 0 }}\r\n floatingWidth={p.floatingWidth ? p.floatingWidth : IGC_DEFAULT_PANE_SIZE}\r\n floatingHeight={p.floatingHeight ? p.floatingHeight : IGC_DEFAULT_PANE_SIZE}\r\n hasHeader={hasHeader}\r\n onWndResizeStart={this.handleFloatingPaneResizeStart.bind(this, p)}\r\n onWndResizeMove={this.handleFloatingPaneResizeMove.bind(this, p)}\r\n onWndResizeEnd={this.handleFloatingPaneResizeEnd.bind(this, p)}\r\n onMouseDown={this.handleFloatingPaneMouseDown.bind(this, p)}\r\n class={{\r\n 'maximized': this.maximizedPane === p\r\n }}\r\n maximized={this.maximizedPane === p || containsMaximizedPane}\r\n allowResize={p.floatingResizable ?? this.allowFloatingPanesResize}\r\n >\r\n {hasHeader ?\r\n <igc-pane-header-component\r\n slot=\"header\"\r\n isFloating\r\n isFloatingPaneHeader\r\n forcedDrag={forceDrag}\r\n allowMaximize={this.resolveAllowMaximize(p)}\r\n maximized={this.maximizedPane === p}\r\n resourceStrings={this.resourceStrings}\r\n onDragStarted={this.handlePaneDragStart.bind(this, p)}\r\n onDragMoved={this.handlePaneDragMove.bind(this)}\r\n onDragEnded={this.handlePaneDragEnd.bind(this)}\r\n onClose={this.handleFloatingPaneClose.bind(this, p)}\r\n onMaximize={this.handleMaximize.bind(this, p)}\r\n onFocusin={(this.clearActivePane.bind(this))}\r\n class={{\r\n 'drag-cursor': this.enableDragCursor && !this.isDragging\r\n }}\r\n >\r\n </igc-pane-header-component> : null\r\n }\r\n {this.renderSplitPane(p, true, false)}\r\n </igc-floating-pane-component>\r\n );\r\n })\r\n }\r\n </div>\r\n );\r\n }\r\n\r\n private renderRootDockingIndicator(position: IgcDockingIndicatorPosition) {\r\n return (\r\n <igc-root-docking-indicator-component\r\n position={position}\r\n >\r\n </igc-root-docking-indicator-component>\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 // Only show the joystick indicator if the target drop location is an empty split pane\r\n const hideJoystickIndicator = this.dropTargetPaneInfo &&\r\n (this.dropTargetPaneInfo.pane?.type == \"documentHost\" ||\r\n (this.dropTargetPaneInfo.pane?.type == \"splitPane\" && this.service.getSplitPaneVisibleChildren(this.dropTargetPaneInfo.pane as IgcSplitPane).length));\r\n\r\n const isRootPaneVertical = this.layout.rootPane.orientation === IgcSplitPaneOrientation.vertical;\r\n return (\r\n <div\r\n class=\"docking-indicators-container\"\r\n style={{\r\n display: this.showDockingIndicators ? 'flex' : 'none'\r\n }}\r\n >\r\n {this.allowRootDock && !this.documentOnlyDrag && !this.proximityDock &&\r\n <Fragment>\r\n {this.renderRootDockingIndicator(IgcDockingIndicatorPosition.top)}\r\n <div\r\n style={{\r\n flexGrow: '1',\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-between'\r\n }}\r\n >\r\n {this.renderRootDockingIndicator(startPosition)}\r\n {this.renderRootDockingIndicator(endPosition)}\r\n </div>\r\n {this.renderRootDockingIndicator(IgcDockingIndicatorPosition.bottom)}\r\n </Fragment>\r\n }\r\n {this.dropTargetPaneInfo && !this.allowRootDock && !this.documentOnlyDrag && !this.proximityDock &&\r\n <Fragment>\r\n {this.dropTargetPaneInfo && isRootPaneVertical &&\r\n <div\r\n style={{\r\n flexGrow: '1',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between'\r\n }}\r\n >\r\n {this.renderEdgeDockingIndicator(IgcDockingIndicatorPosition.topMost)}\r\n {this.renderEdgeDockingIndicator(IgcDockingIndicatorPosition.bottomMost)}\r\n </div>\r\n }\r\n {this.dropTargetPaneInfo && !isRootPaneVertical &&\r\n <div\r\n style={{\r\n flexGrow: '1',\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-between'\r\n }}\r\n >\r\n {this.renderEdgeDockingIndicator(IgcDockingIndicatorPosition.leftMost)}\r\n {this.renderEdgeDockingIndicator(IgcDockingIndicatorPosition.rightMost)}\r\n </div>\r\n }\r\n </Fragment>\r\n }\r\n {this.dropTargetPaneInfo && !this.proximityDock && !hideJoystickIndicator && this.splitterDockingIndicator?.style.visibility !== 'visible' && !this.autoScrollInterval &&\r\n <igc-joystick-indicator-component\r\n dropTargetPaneInfo={this.dropTargetPaneInfo}\r\n documentOnlyDrag={this.documentOnlyDrag}\r\n allowCenterDock={this.allowInnerDock}\r\n />}\r\n\r\n {this.allowSplitterDock && !this.proximityDock &&\r\n <igc-splitter-docking-indicator-component\r\n style={{\r\n position: 'fixed',\r\n zIndex: '10010',\r\n visibility: 'hidden'\r\n }}\r\n />}\r\n </div>);\r\n }\r\n\r\n private renderContextMenu() {\r\n return this.contextMenuMeta && (\r\n <igc-context-menu-component\r\n onMenuClosed={this.handleContextMenuClosed.bind(this)}\r\n orientation={IgcContextMenuOrientation.bottom}\r\n items={this.contextMenuMeta.menuItems}\r\n target={this.contextMenuMeta.target}\r\n position={this.contextMenuMeta.position}\r\n >\r\n </igc-context-menu-component>);\r\n }\r\n\r\n private renderDropShadow() {\r\n return this.dropShadowRect && (\r\n <div\r\n part=\"docking-preview\"\r\n class=\"drop-shadow\"\r\n style={{\r\n top: `${this.dropShadowRect?.y}px`,\r\n left: `${this.dropShadowRect?.x}px`,\r\n width: `${this.dropShadowRect?.width}px`,\r\n height: `${this.dropShadowRect?.height}px`,\r\n }}\r\n />\r\n );\r\n }\r\n\r\n handlePaneNavigatorClosed(ev: CustomEvent<IgcContentPane>) {\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 <igc-pane-navigator-component\r\n onClosed={this.handlePaneNavigatorClosed.bind(this)}\r\n activePanes={this.navigationPaneMeta.activePanes}\r\n activeDocuments={this.navigationPaneMeta.activeDocuments}\r\n selectedIndex={this.navigationPaneMeta.initialIndex}\r\n previousActivePaneIndex={this.navigationPaneMeta.previousActivePaneIndex}\r\n resourceStrings={this.resourceStrings}\r\n >\r\n </igc-pane-navigator-component>;\r\n }\r\n\r\n private renderEdgeDockingIndicator(position: IgcDockingIndicatorPosition) {\r\n return (\r\n <igc-edge-docking-indicator-component\r\n dropTargetPaneInfo={this.dropTargetPaneInfo}\r\n position={position}\r\n >\r\n </igc-edge-docking-indicator-component>\r\n );\r\n }\r\n\r\n render() {\r\n this.panesElementMap = new TwoWayMap<IgcDockManagerPane, HTMLElement>();\r\n this.tabHeadersMap = new Map<IgcContentPane, HTMLElement>();\r\n this.unpinnedHeadersMap = new Map<IgcContentPane, HTMLElement>();\r\n this.contentPanesElementMap = new Map<IgcContentPane, HTMLElement>();\r\n\r\n return (\r\n <Host\r\n tabindex=\"0\"\r\n role=\"group\"\r\n >\r\n {this.renderButtonsTemplates()}\r\n {this.renderUnpinnedTabArea(IgcUnpinnedLocation.left)}\r\n <div class=\"pane-container--vertical\" style={{ position: this.maximizedPane ? 'absolute' : 'relative' }}>\r\n {this.renderUnpinnedTabArea(IgcUnpinnedLocation.top)}\r\n <div\r\n ref={el => 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 </div>\r\n {this.renderUnpinnedTabArea(IgcUnpinnedLocation.bottom)}\r\n </div>\r\n {this.renderUnpinnedTabArea(IgcUnpinnedLocation.right)}\r\n {this.renderFloatingPanes()}\r\n {this.renderContextMenu()}\r\n {this.renderPaneNavigator()}\r\n <igc-trial-watermark text=\"Trial version of Ignite UI\" style={{ 'z-index': '10005' }}></igc-trial-watermark>\r\n {this.renderDropShadow()}\r\n </Host>\r\n );\r\n }\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 @Prop() parentUseFixedSize: boolean = false;\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 <Host\r\n role=\"group\"\r\n style={{\r\n flex: this.parentUseFixedSize ? `0 0 ${size}px` : `${size} 1 ${size}px`\r\n }}\r\n >\r\n </Host>\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\nimport { IgcDockingIndicatorPosition } from '../dockmanager.public-interfaces';\r\nimport { IgcDropTargetPaneInfo } from '../dockmanager.interfaces';\r\n\r\n/**\r\n * @hidden\r\n */\r\n@Component({\r\n tag: 'igc-edge-docking-indicator-component',\r\n styleUrl: 'edge-docking-indicator-component.scss',\r\n shadow: false,\r\n scoped: true\r\n})\r\nexport class IgcEdgeDockingIndicatorComponent {\r\n @Prop() position: IgcDockingIndicatorPosition;\r\n @Prop() dropTargetPaneInfo: IgcDropTargetPaneInfo;\r\n\r\n render() {\r\n return (\r\n <Host part=\"edge-docking-indicator\"\r\n >\r\n <igc-icon-component\r\n name=\"jump_to_beginning\"\r\n style={{\r\n transform: this.position === IgcDockingIndicatorPosition.topMost ? 'rotate(90deg)' :\r\n this.position === IgcDockingIndicatorPosition.rightMost ? 'rotate(180deg)' :\r\n this.position === IgcDockingIndicatorPosition.bottomMost ? 'rotate(270deg)' : 'rotate(0deg)'\r\n }}\r\n />\r\n </Host>\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<IgcDragResizeEventArguments>;\r\n @Event() wndResizeMove: EventEmitter<IgcDragResizeEventArguments>;\r\n @Event() wndResizeEnd: EventEmitter<IgcDragResizeEventArguments>;\r\n @Element() elem: HTMLElement;\r\n\r\n private handleResizerMove(event: CustomEvent<IgcDragMoveEventArguments>) {\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<IgcDragStartEventArguments>) {\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<IgcDragEventArguments>) {\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 <Host\r\n style={this.maximized ? {} : styles}\r\n role=\"dialog\"\r\n aria-label=\"dialog\"\r\n part=\"floating-window\"\r\n >\r\n {this.allowResize &&\r\n <Fragment>\r\n <igc-resizer-component orientation={IgcResizerLocation.left} onResizerDragStart={this.handleResizeStart.bind(this)} onResizerMoved={this.handleResizerMove.bind(this)} onResizerDragEnd={this.handleResizeEnd.bind(this)}/>\r\n <igc-resizer-component orientation={IgcResizerLocation.top} onResizerDragStart={this.handleResizeStart.bind(this)} onResizerMoved={this.handleResizerMove.bind(this)} onResizerDragEnd={this.handleResizeEnd.bind(this)}/>\r\n <igc-resizer-component orientation={IgcResizerLocation.right} onResizerDragStart={this.handleResizeStart.bind(this)} onResizerMoved={this.handleResizerMove.bind(this)} onResizerDragEnd={this.handleResizeEnd.bind(this)}/>\r\n <igc-resizer-component orientation={IgcResizerLocation.bottom} onResizerDragStart={this.handleResizeStart.bind(this)} onResizerMoved={this.handleResizerMove.bind(this)} onResizerDragEnd={this.handleResizeEnd.bind(this)}/>\r\n </Fragment>}\r\n <slot name=\"header\">\r\n </slot>\r\n <slot></slot>\r\n {this.allowResize &&\r\n <Fragment>\r\n <igc-resizer-component orientation={IgcResizerLocation.topRight} onResizerDragStart={this.handleResizeStart.bind(this)} onResizerMoved={this.handleResizerMove.bind(this)} onResizerDragEnd={this.handleResizeEnd.bind(this)}/>\r\n <igc-resizer-component orientation={IgcResizerLocation.topLeft} onResizerDragStart={this.handleResizeStart.bind(this)} onResizerMoved={this.handleResizerMove.bind(this)} onResizerDragEnd={this.handleResizeEnd.bind(this)}/>\r\n <igc-resizer-component orientation={IgcResizerLocation.bottomRight} onResizerDragStart={this.handleResizeStart.bind(this)} onResizerMoved={this.handleResizerMove.bind(this)} onResizerDragEnd={this.handleResizeEnd.bind(this)}/>\r\n <igc-resizer-component orientation={IgcResizerLocation.bottomLeft} onResizerDragStart={this.handleResizeStart.bind(this)} onResizerMoved={this.handleResizerMove.bind(this)} onResizerDragEnd={this.handleResizeEnd.bind(this)}/>\r\n </Fragment>}\r\n </Host>\r\n );\r\n }\r\n}\r\n","/**\r\n * @hidden\r\n */\r\nexport const icons: any = {\r\n close:\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\r\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\r\n <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n </svg>`,\r\n pin:\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\r\n <path d=\"M15.18 2.25l7.07 7.07-2.83-.01-3.54 3.55.01 4.24-3.53-3.54-5.66 5.66H5.28V17.8l5.66-5.66L7.4 8.61l4.24.01 3.55-3.54-.01-2.83z\"/>\r\n </svg>`,\r\n unpin:\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\r\n <path fill=\"none\" d=\"M0 0h24v25H0V0z\"/>\r\n <path d=\"M11.84 14.08L6.7 19.22H5.28V17.8l5.14-5.14L2 4.26 3.29 3l18 18L20 22.21zm4-.49l-5-5h.73l3.55-3.54v-2.8l7.07 7.07h-2.77l-3.54 3.54z\" />\r\n </svg>`,\r\n first_page:\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\r\n <path d=\"M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z\"/>\r\n <path fill=\"none\" d=\"M24 24H0V0h24v24z\"/>\r\n </svg>`,\r\n chevron_left:\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\r\n <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"/>\r\n <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n </svg>`,\r\n flip:\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\r\n <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n <path d=\"M15 21h2v-2h-2v2zm4-12h2V7h-2v2zM3 5v14c0 1.1.9 2 2 2h4v-2H5V5h4V3H5c-1.1 0-2 .9-2 2zm16-2v2h2c0-1.1-.9-2-2-2zm-8 20h2V1h-2v22zm8-6h2v-2h-2v2zM15 5h2V3h-2v2zm4 8h2v-2h-2v2zm0 8c1.1 0 2-.9 2-2h-2v2z\"/>\r\n </svg>`,\r\n crop_square:\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\r\n <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n <path d=\"M18 4H6c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 14H6V6h12v12z\"/>\r\n </svg>\r\n `,\r\n arrow_drop_down:\r\n `<svg class=\"icon icon-arrow_drop_down\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\r\n <path d=\"M7 10l5 5 5-5z\"></path>\r\n </svg>`,\r\n maximize:\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\r\n <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n <path d=\"M18 4H6c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 14H6V6h12v12z\"/>\r\n </svg>`,\r\n minimize:\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\r\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\r\n <path d=\"M6 19h12v2H6z\"/>\r\n </svg>`,\r\n more:\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\r\n <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n <path d=\"M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"/>\r\n </svg>`,\r\n splitter_docking_indicator:\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"22\" viewBox=\"0 0 20 22\" >\r\n <path d=\"M6 8H9V14H6L10 18L14 14H11V8H14L10 4L6 8Z\" fill=\"#616161\"/>\r\n <path d=\"M20 22V20H0V22H20Z\" fill=\"#616161\"/>\r\n <path d=\"M20 2V0H0V2H20Z\" fill=\"#616161\"/>\r\n </svg>`,\r\n jump_to_beginning:\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\">\r\n <path fill=\"#1f1f1f\" d=\"M760-760v-80h80v80h-80Zm0 640v-80h80v80h-80ZM600-760v-80h80v80h-80Zm0 640v-80h80v80h-80ZM440-760v-80h80v80h-80Zm-160 0v-80h80v80h-80Zm0 640v-80h80v80h-80Zm-160 0v-720h80v720h-80Zm440-200L400-480l160-160 56 56-63 64h287v80H553l63 64-56 56ZM440-120v-80h80v80h-80Z\"/>\r\n </svg>`\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","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 <Host innerHTML={icons[this.name]}>\r\n </Host>\r\n );\r\n }\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 <igc-icon-component name=\"chevron_left\"/>;\r\n } else if (position === IgcDockingIndicatorPosition.left) {\r\n return (\r\n <igc-icon-component\r\n name=\"flip\"\r\n style={{ transform: 'rotate(180deg)' }}\r\n />);\r\n } else if (position === IgcDockingIndicatorPosition.outerTop ||\r\n (position === IgcDockingIndicatorPosition.top && !this.isDocHost)) {\r\n return (\r\n <igc-icon-component\r\n name=\"chevron_left\"\r\n style={{ transform: 'rotate(90deg)' }}\r\n />);\r\n } else if (position === IgcDockingIndicatorPosition.top) {\r\n return (\r\n <igc-icon-component\r\n name=\"flip\"\r\n style={{ transform: 'rotate(270deg)' }}\r\n />);\r\n } else if (position === IgcDockingIndicatorPosition.center) {\r\n return <igc-icon-component name=\"crop_square\"/>;\r\n } else if (position === IgcDockingIndicatorPosition.outerRight ||\r\n (position === IgcDockingIndicatorPosition.right && !this.isDocHost)) {\r\n return (\r\n <igc-icon-component\r\n name=\"chevron_left\"\r\n style={{ transform: 'rotate(180deg)' }}\r\n />);\r\n } else if (position === IgcDockingIndicatorPosition.right) {\r\n return <igc-icon-component name=\"flip\"/>;\r\n } else if (position === IgcDockingIndicatorPosition.outerBottom ||\r\n (position === IgcDockingIndicatorPosition.bottom && !this.isDocHost)) {\r\n return (\r\n <igc-icon-component\r\n name=\"chevron_left\"\r\n style={{ transform: 'rotate(270deg)' }}\r\n />);\r\n } else if (position === IgcDockingIndicatorPosition.bottom) {\r\n return (\r\n <igc-icon-component\r\n name=\"flip\"\r\n style={{ transform: 'rotate(90deg)' }}\r\n />);\r\n } else if (position === IgcDockingIndicatorPosition.splitterHorizontal) {\r\n return <igc-icon-component name=\"splitter_docking_indicator\"/>;\r\n } else if (position === IgcDockingIndicatorPosition.splitterVertical) {\r\n return (\r\n <igc-icon-component\r\n name=\"splitter_docking_indicator\"\r\n style={{ transform: 'rotate(90deg)' }}\r\n />);\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <Host\r\n part=\"docking-indicator\"\r\n class={this.resolveIconDivClass()}\r\n style={{\r\n gridRow: this.resolveGridRow(),\r\n gridColumn: this.resolveGridColumn(),\r\n margin: this.resolveMargin()\r\n }}\r\n >\r\n {!this.empty && this.renderIcon()}\r\n </Host>);\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 <igc-joystick-icon-component\r\n isDocHost={this.isDocHost}\r\n position={position}\r\n direction={Utils.getDirection(this.closestElement('igc-dockmanager', this.element))}\r\n empty\r\n />);\r\n }\r\n\r\n private renderIndicator(position: IgcDockingIndicatorPosition) {\r\n return (\r\n <igc-joystick-icon-component\r\n isDocHost={this.isDocHost}\r\n position={position}\r\n direction={Utils.getDirection(this.closestElement('igc-dockmanager', this.element))}\r\n empty={this.isEmptyCenter(position) || this.isEmptyEdge(position)}\r\n />);\r\n }\r\n\r\n render() {\r\n this.isDocHost = !!this.dropTargetPaneInfo.docHost;\r\n\r\n return (\r\n <Host\r\n style={{\r\n top: `${this.dropTargetPaneInfo.visibleTargetRect.y}px`,\r\n left: `${this.dropTargetPaneInfo.visibleTargetRect.x}px`,\r\n width: `${this.dropTargetPaneInfo.visibleTargetRect.width}px`,\r\n height: `${this.dropTargetPaneInfo.visibleTargetRect.height}px`,\r\n }}\r\n >\r\n <div\r\n class={{\r\n 'indicators-container': true,\r\n 'indicators-container--doc-host': this.isDocHost\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 </div>\r\n </Host>\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, private isInFixedSizeContainer = false) {\r\n this.element.addEventListener('pointerdown', this.handlePointerDown, false);\r\n this.isInFixedSizeContainer = isInFixedSizeContainer;\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 (!this.isInFixedSizeContainer && 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 (!this.isInFixedSizeContainer && 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<IgcDragStartEventArguments>;\r\n @Event() dragEnded: EventEmitter<IgcDragEventArguments>;\r\n @Event() dragMoved: EventEmitter<IgcDragMoveEventArguments>;\r\n @Event() elementConnected: EventEmitter<HTMLIgcPaneHeaderComponentElement>;\r\n @Event() elementDisconnected: EventEmitter<HTMLIgcPaneHeaderComponentElement>;\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 <slot name=\"paneHeaderCloseButton\">\r\n <igc-button-component part=\"pane-header-close-button\">\r\n <igc-icon-component name=\"close\" aria-label={this.resourceStrings.close} title={this.resourceStrings.close} />\r\n </igc-button-component>\r\n </slot>\r\n );\r\n }\r\n\r\n private renderMaximizeButton() {\r\n return (\r\n <slot name=\"paneHeaderMaximizeButton\">\r\n <igc-button-component part=\"pane-header-maximize-button\">\r\n <igc-icon-component\r\n name=\"maximize\"\r\n aria-label={this.resourceStrings.maximize}\r\n title={this.resourceStrings.maximize}\r\n />\r\n </igc-button-component>\r\n </slot>\r\n );\r\n }\r\n\r\n private renderMinimizeButton() {\r\n return (\r\n <div>\r\n <slot name=\"paneHeaderMinimizeButton\">\r\n <igc-button-component part=\"pane-header-minimize-button\">\r\n <igc-icon-component\r\n name=\"minimize\"\r\n aria-label={this.resourceStrings.minimize}\r\n title={this.resourceStrings.minimize}\r\n />\r\n </igc-button-component>\r\n </slot>\r\n </div>\r\n );\r\n }\r\n\r\n private renderPinButton() {\r\n return (\r\n <Fragment>\r\n {!this.isFloating && <slot name=\"paneHeaderPinButton\">\r\n <igc-button-component part=\"pane-header-pin-button\" style={{ display: this.isFloating ? 'none' : 'flex' }}>\r\n <igc-icon-component\r\n name=\"pin\"\r\n aria-label={this.resourceStrings.pin}\r\n title={this.resourceStrings.pin}\r\n />\r\n </igc-button-component> </slot>}\r\n </Fragment>\r\n );\r\n }\r\n\r\n private renderUnpinButton() {\r\n return (\r\n <Fragment>\r\n {!this.isFloating && <slot name=\"paneHeaderUnpinButton\">\r\n <igc-button-component part=\"pane-header-unpin-button\" style={{ display: this.isFloating ? 'none' : 'flex' }}>\r\n <igc-icon-component\r\n name=\"unpin\"\r\n aria-label={this.resourceStrings.unpin}\r\n title={this.resourceStrings.unpin}\r\n />\r\n </igc-button-component>\r\n </slot>}\r\n </Fragment>\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 <Host\r\n part={paneHeaderParts}\r\n exportparts={exportParts}\r\n >\r\n <div part={paneHeaderContentParts} class=\"header-text\">\r\n <slot></slot>\r\n </div>\r\n <div part={paneHeaderActionsParts} class=\"header-actions\" {...{ [IGNORE_DRAG]: true }}>\r\n {this.allowPinning &&\r\n <div onClick={this.pinButtonClick}>\r\n {this.pinned ? this.renderUnpinButton() : this.renderPinButton()}\r\n </div>\r\n }\r\n {this.allowMaximize &&\r\n <div onClick={this.maximizeButtonClick}>\r\n {this.maximized ? this.renderMinimizeButton() : this.renderMaximizeButton()}\r\n </div>\r\n }\r\n {this.allowClose &&\r\n <div onClick={this.closeButtonClick}>\r\n {this.renderCloseButton()}\r\n </div>\r\n }\r\n </div>\r\n </Host>\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<IgcContentPane>;\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.activePanes = this.activePanes.filter(pane => !(pane.contentId.startsWith('placeholder') && pane.size === 0));\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<HTMLElement>(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 <article part=\"group\" class=\"group\">\r\n <h4 part=\"title\" class=\"title\">{title}</h4>\r\n <section class=\"items\">\r\n {items?.map((item: any, index) => {\r\n return (\r\n <div\r\n part={this.resolveItemPart(item, index, isDocHost)}\r\n onMouseDown={() => this.selectItem(index, isDocHost)}\r\n onMouseUp={() => this.closed.emit(this.allItems[this.selectedIndex])}\r\n >\r\n {item.header}\r\n </div>\r\n );\r\n })}\r\n </section>\r\n </article>\r\n );\r\n }\r\n\r\n render() {\r\n return (\r\n <Host\r\n onClick={() => 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 <article\r\n part=\"base\"\r\n class=\"pane-navigator\"\r\n ref={el => this.paneNav = el}\r\n tabIndex={0}\r\n onClick={ev => ev.stopPropagation()}\r\n >\r\n <header part=\"header\">\r\n <h3>{this.allItems[this.selectedIndex]?.header}</h3>\r\n </header>\r\n <section part=\"body\" class=\"body\">\r\n {this.renderItems(this.resourceStrings.panes, this.activePanes, false)}\r\n {this.renderItems(this.resourceStrings.documents, this.activeDocuments, true)}\r\n </section>\r\n </article>\r\n </Host >\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<IgcDragMoveEventArguments>;\r\n @Event() resizerDragStart: EventEmitter<IgcDragStartEventArguments>;\r\n @Event() resizerDragEnd: EventEmitter<IgcDragEventArguments>;\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 <Host\r\n style={{\r\n position: 'absolute',\r\n pointerEvents: 'all',\r\n height: (this.orientation === IgcResizerLocation.left || this.orientation === IgcResizerLocation.right) ?\r\n '100%' : this.isCornerResizer ? '10px' : '5px',\r\n width: (this.orientation === IgcResizerLocation.left || this.orientation === IgcResizerLocation.right) ? '5px' :\r\n this.isCornerResizer ? '10px' : '100%',\r\n cursor: this.orientation === IgcResizerLocation.left || this.orientation === IgcResizerLocation.right ?\r\n 'ew-resize' : (this.orientation === IgcResizerLocation.bottomLeft || this.orientation === IgcResizerLocation.topRight) ?\r\n 'ne-resize' : (this.orientation === IgcResizerLocation.bottomRight || this.orientation === IgcResizerLocation.topLeft) ?\r\n 'nw-resize' : 'ns-resize',\r\n left: this.orientation === IgcResizerLocation.left || this.orientation === IgcResizerLocation.topLeft ||\r\n this.orientation === IgcResizerLocation.bottomLeft ? '-3px' : null,\r\n top: this.orientation === IgcResizerLocation.top || this.orientation === IgcResizerLocation.topLeft ||\r\n this.orientation === IgcResizerLocation.topRight ? '0px' : null,\r\n right: this.orientation === IgcResizerLocation.right || this.orientation === IgcResizerLocation.bottomRight ||\r\n this.orientation === IgcResizerLocation.topRight ? '-3px' : null,\r\n bottom: this.orientation === IgcResizerLocation.bottom || this.orientation === IgcResizerLocation.bottomRight ||\r\n this.orientation === IgcResizerLocation.bottomLeft ? '-3px' : null,\r\n zIndex: '10002'\r\n }}\r\n >\r\n </Host>\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 <Host part=\"root-docking-indicator\">\r\n <igc-icon-component\r\n name=\"first_page\"\r\n style={{\r\n transform: this.position === IgcDockingIndicatorPosition.top ? 'rotate(90deg)' :\r\n this.position === IgcDockingIndicatorPosition.right ? 'rotate(180deg)' :\r\n this.position === IgcDockingIndicatorPosition.bottom ? 'rotate(270deg)' : 'rotate(0deg)'\r\n }}\r\n />\r\n </Host>\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 @Prop() useFixedSize: boolean = false;\r\n @Prop() parentUseFixedSize: boolean = false;\r\n @Event() rendered: EventEmitter<HTMLIgcSplitPaneComponentElement>;\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 <Host\r\n role=\"group\"\r\n style={{\r\n flexDirection: this.orientation === IgcSplitPaneOrientation.horizontal ? 'row' : 'column',\r\n flex: this.parentUseFixedSize ? `0 0 ${size}px` : `${size} 1 ${size}px`\r\n }}\r\n part=\"split-pane\"\r\n />\r\n );\r\n }\r\n}\r\n",":host {\r\n position: relative;\r\n display: flex;\r\n flex: 0 0 $splitter-width;\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 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: $resize-handle-width;\r\n height: $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: $resize-handle-height;\r\n height: $resize-handle-width;\r\n }\r\n }\r\n\r\n &--disabled {\r\n cursor: default;\r\n pointer-events: none;\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\nconst SCROLL_SPEED = 15;\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 private resizeEndEmitted = false;\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 @Prop() parentUseFixedSize: boolean = false;\r\n\r\n /**\r\n * Determines whether the splitter can be used to resize adjacent panes.\r\n *\r\n * @default true\r\n */\r\n @Prop() resizable: boolean = true;\r\n @Prop() scrollSpeed: number;\r\n @Event() resizeStart: EventEmitter;\r\n @Event() resizeEnd: EventEmitter<number>;\r\n\r\n connectedCallback() {\r\n if (!this.resizable) return;\r\n this.dragService = new IgcDragService(this.element, this.parentUseFixedSize);\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.resizeEndEmitted = 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 if (!this.resizable) return;\r\n this.showDragGhost = true;\r\n this.resizeEndEmitted = false;\r\n document.documentElement.addEventListener('mouseup', this.handleMouseUp, false);\r\n this.resizeStart.emit({splitter: this});\r\n }\r\n\r\n private handleMouseUp = () => {\r\n document.documentElement.removeEventListener('mouseup', this.handleMouseUp, false);\r\n this.showDragGhost = false;\r\n if (!this.resizeEndEmitted) {\r\n this.resizeEnd.emit(0);\r\n }\r\n }\r\n\r\n private dragStartHelper(dragOffset: number) {\r\n this.resizeEndEmitted = false;\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 this.resizeEndEmitted = true;\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 let 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 && !this.parentUseFixedSize) {\r\n return;\r\n }\r\n\r\n if (offset >= 0 && endCoordinate > clientCoordinate && !this.parentUseFixedSize) {\r\n return;\r\n }\r\n\r\n if (offset === 0 && this.parentUseFixedSize) {\r\n // Scale factor 0 → 1 based on distance outside\r\n const scrollFactor = (dist: number) =>\r\n Math.min(Math.max(dist, 0), 100) / 100;\r\n const scrollSpeed = this.scrollSpeed ?? SCROLL_SPEED;\r\n if (this.element.parentElement.scrollHeight - this.element.parentElement.clientHeight > 0) {\r\n offset = scrollFactor(args.clientY - rect.bottom) * scrollSpeed;\r\n } else if (this.element.parentElement.scrollWidth - this.element.parentElement.clientWidth > 0) {\r\n offset = scrollFactor(args.clientX - rect.left) * scrollSpeed;\r\n }\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 public applyAutoDrag = () => {\r\n const scrollFactor = (dist: number) =>\r\n Math.min(Math.max(dist, 0), 100) / 100;\r\n const scrollSpeed = (this.scrollSpeed ?? SCROLL_SPEED) / 2;\r\n if (this.element.parentElement.scrollHeight - this.element.parentElement.clientHeight > 0\r\n || this.element.parentElement.scrollWidth - this.element.parentElement.clientWidth > 0\r\n ) {\r\n this.dragOffset += scrollFactor(scrollSpeed) * scrollSpeed * 0.9;\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 if (!this.parentUseFixedSize) {\r\n const referencePaneSize = !rtl || isVertical ? this.paneSizes[1] : this.paneSizes[0];\r\n\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\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--disabled': !this.resizable,\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 <Host\r\n part=\"splitter\"\r\n exportparts=\"splitter,\r\n splitter-base,\r\n splitter-ghost\"\r\n style={{\r\n cursor: this.resizable\r\n ? `${isVertical ? `ns-resize` : `ew-resize`}`\r\n : 'default',\r\n userSelect: 'none',\r\n WebkitUserSelect: 'none',\r\n MozUserSelect: 'none',\r\n msUserSelect: 'none',\r\n }}\r\n >\r\n <div\r\n part=\"splitter-base\"\r\n class={splitterClasses}\r\n tabIndex={this.resizable ? 0 : -1}\r\n role=\"separator\"\r\n aria-orientation={this.splitPaneOrientation.toString()}\r\n draggable={false}\r\n >\r\n <slot name=\"splitterHandle\" onSlotchange={this.handleSlotChange.bind(this)}></slot>\r\n </div>\r\n {this.resizable && this.showDragGhost &&\r\n <div\r\n part=\"splitter-ghost\"\r\n class={ghostClasses}\r\n style={{\r\n left: `${isVertical ? 0 : this.dragOffset}px`,\r\n top: `${isVertical ? this.dragOffset : 0}px`\r\n }}\r\n ref={el => this.ghostElement = el}\r\n draggable={false}\r\n />}\r\n </Host>);\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-splitter-docking-indicator-component',\r\n styleUrl: 'splitter-docking-indicator-component.scss',\r\n shadow: false,\r\n scoped: true\r\n})\r\nexport class IgcSplitterDockingIndicatorComponent {\r\n @Prop() position: IgcDockingIndicatorPosition;\r\n\r\n render() {\r\n return (\r\n <Host part=\"splitter-docking-indicator\">\r\n <igc-icon-component\r\n name=\"splitter_docking_indicator\"\r\n style={{\r\n transform: this.position === IgcDockingIndicatorPosition.splitterVertical ? 'rotate(90deg)' : 'rotate(0deg)'\r\n }}\r\n />\r\n </Host>\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: 'none' | 'closeOnly' | 'moreOptionsOnly' | 'all' = 'none';\r\n\r\n @Event() dragStarted: EventEmitter<IgcDragStartEventArguments>;\r\n @Event() dragMoved: EventEmitter<IgcDragMoveEventArguments>;\r\n @Event() dragEnded: EventEmitter<IgcDragEventArguments>;\r\n @Event() tabMouseDown: EventEmitter;\r\n @Event() iconClicked: EventEmitter<any>;\r\n @Event() iconKeyDown: EventEmitter<KeyboardEvent>;\r\n @Event() elementConnected: EventEmitter<HTMLIgcTabHeaderComponentElement>;\r\n @Event() elementDisconnected: EventEmitter<HTMLIgcTabHeaderComponentElement>;\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 === 'closeOnly' || this.showHeaderIconOnHover === 'all';\r\n const shouldShowButton = this.selected || showHeaderIconOnHover;\r\n const pointerEvents = (this.selected && !this.disabled) || this.showHeaderIconOnHover !== 'none' ? 'all' : 'none';\r\n\r\n return (\r\n shouldShowButton && <slot name=\"tabHeaderCloseButton\" >\r\n <igc-button-component\r\n part=\"tab-header-close-button\"\r\n style={{\r\n pointerEvents\r\n }}\r\n >\r\n <igc-icon-component\r\n name={this.iconName}\r\n aria-label={this.resourceStrings.close}\r\n title={this.resourceStrings.close}\r\n />\r\n </igc-button-component>\r\n </slot>\r\n );\r\n }\r\n\r\n private renderMoreOptionsButton() {\r\n const showHeaderIconOnHover = this.showHeaderIconOnHover === 'moreOptionsOnly' || this.showHeaderIconOnHover === 'all';\r\n const shouldShowButton = this.selected || showHeaderIconOnHover;\r\n const pointerEvents = (this.selected && !this.disabled) || this.showHeaderIconOnHover !== 'none' ? 'all' : 'none';\r\n\r\n return (\r\n shouldShowButton && <slot name=\"tabHeaderMoreOptionsButton\">\r\n <igc-button-component\r\n part=\"tab-header-more-options-button\"\r\n style={{\r\n pointerEvents\r\n }}\r\n >\r\n <igc-icon-component\r\n name={this.iconName}\r\n aria-label={this.resourceStrings.moreOptions}\r\n title={this.resourceStrings.moreOptions}\r\n />\r\n </igc-button-component>\r\n </slot>\r\n );\r\n }\r\n\r\n render() {\r\n const showCloseOnHover = this.iconName === 'close' && (this.showHeaderIconOnHover === 'closeOnly' || this.showHeaderIconOnHover === 'all');\r\n const showMoreOptionsOnHover = this.iconName !== 'close' && (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 <Host\r\n role=\"tab\"\r\n part={parts}\r\n exportparts={exportparts}\r\n aria-label={this.header}\r\n aria-selected={this.selected ? 'true' : 'false'}\r\n aria-disabled={this.disabled ? 'true' : 'false'}\r\n tabIndex={!this.selected || this.disabled ? -1 : 0}\r\n >\r\n <slot></slot>\r\n {\r\n this.iconName &&\r\n <div part={tabParts} onClick={this.iconClick} onKeyDown={this.keyDown} {...{ [IGNORE_DRAG]: true }}>\r\n {this.iconName === 'close' ? this.renderCloseButton() : this.renderMoreOptionsButton()}\r\n </div>\r\n }\r\n </Host>);\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<boolean>;\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 <Host\r\n role=\"tabpanel\"\r\n part={parts}\r\n style={{\r\n display: this.selected ? 'block' : 'none'\r\n }}\r\n >\r\n <slot></slot>\r\n </Host>\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","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 @Prop() parentUseFixedSize: boolean = false;\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<number>;\r\n @Event({ bubbles: false }) hiddenTabSelected: EventEmitter<number>;\r\n @Event({ bubbles: false }) selectedTabOutOfView: EventEmitter<number>;\r\n @Event() rendered: EventEmitter<HTMLIgcTabsComponentElement>;\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 === 'none' || !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 // When a single pane is visible in the tab group pane, the tabHeaders array is empty but we still need to have that one pane selected. #https://github.com/IgniteUI/igniteui-dockmanager/issues/103\r\n else if (this.tabPanels.length === 1) {\r\n this.selectedIndex = 0;\r\n }\r\n }\r\n\r\n private handleHiddenTabsMenuClick(ev: CustomEvent<KeyboardEvent>) {\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 <igc-context-menu-component\r\n onMenuClosed={this.handleContextMenuClosed.bind(this)}\r\n orientation={this.tabHeadersPosition === IgcTabHeadersPosition.top ? IgcContextMenuOrientation.bottom : IgcContextMenuOrientation.top}\r\n items={this.hiddenTabsMenuMeta.menuItems}\r\n target={this.hiddenTabsMenuMeta.target}\r\n position={this.hiddenTabsMenuMeta.position}\r\n >\r\n </igc-context-menu-component>);\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 <div\r\n part={tabStripParts}\r\n style={{\r\n display: this.hasHeaders ? 'flex' : 'none'\r\n }}\r\n class={classes}\r\n onKeyDown={this.onTabKeyDown}\r\n >\r\n <div\r\n class={{\r\n 'tab-headers-container': true,\r\n 'tab-headers-container--wrapped': this.showHiddenTabsMenu\r\n }}\r\n >\r\n <slot name=\"tabHeader\"></slot>\r\n </div>\r\n <div part={tabStripActionsParts} class=\"tab-header-icon-container\">\r\n {this.showHiddenTabsMenu && this.hasHiddenTabs &&\r\n <div onClick={this.handleHiddenTabsMenuClick.bind(this)}>\r\n {this.renderMoreTabsButton()}\r\n </div>}\r\n { !(this.showHiddenTabsMenu && this.hasHiddenTabs) &&\r\n <span style={{ width: '25px' }}></span>\r\n }\r\n {this.allowMaximize &&\r\n <div onClick={this.maximizeButtonClick} onFocusin={this.handleMaximizeMinimizeFocus}>\r\n {this.maximized ? this.renderMinimizeButton() : this.renderMaximizeButton()}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n private renderMoreTabsButton() {\r\n return (\r\n <span>\r\n <slot name=\"tabsMoreButton\">\r\n <igc-button-component part=\"tabs-more-button\">\r\n <igc-icon-component\r\n name=\"more\"\r\n aria-label={this.resourceStrings.moreTabs}\r\n title={this.resourceStrings.moreTabs}\r\n style={{\r\n display: 'block'\r\n }}\r\n />\r\n </igc-button-component>\r\n </slot>\r\n </span>\r\n );\r\n }\r\n\r\n private renderMaximizeButton() {\r\n return (\r\n <div>\r\n <slot name=\"tabsMaximizeButton\">\r\n <igc-button-component part=\"tabs-maximize-button\">\r\n <igc-icon-component\r\n name=\"maximize\"\r\n aria-label={this.resourceStrings.maximize}\r\n title={this.resourceStrings.maximize}\r\n />\r\n </igc-button-component>\r\n </slot>\r\n </div>\r\n );\r\n }\r\n\r\n private renderMinimizeButton() {\r\n return (\r\n <slot name=\"tabsMinimizeButton\">\r\n <igc-button-component part=\"tabs-minimize-button\">\r\n <igc-icon-component\r\n name=\"minimize\"\r\n aria-label={this.resourceStrings.minimize}\r\n title={this.resourceStrings.minimize}\r\n />\r\n </igc-button-component>\r\n </slot>\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 <Host\r\n role=\"tablist\"\r\n style={{\r\n flex: this.parentUseFixedSize ? `0 0 ${size}px` : `${size} 1 ${size}px`\r\n }}\r\n exportparts={exportParts}\r\n part={parts}\r\n >\r\n {top && this.renderTabHeaders(top)}\r\n <div part={tabsContentParts} class=\"content\">\r\n <slot onSlotchange={this.slotChanged.bind(this)}></slot>\r\n </div>\r\n {bottom && this.renderTabHeaders(top)}\r\n {this.renderHiddenTabsMenu()}\r\n </Host>\r\n );\r\n }\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 <Host\r\n part={parts}\r\n role=\"tab\"\r\n aria-disabled={this.disabled ? 'true' : 'false'}\r\n tabindex={this.disabled ? -1 : 0}\r\n >\r\n <slot></slot>\r\n </Host>\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\nigc-dockmanager {\r\n /* --igc-resize-target-border-width: 2px; */\r\n /* --igc-splitter-width: 10px; */\r\n --igc-resize-handle-width: 10px;\r\n --igc-resize-handle-height: 150px;\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*/\r\n\r\n/* igc-dockmanager {\r\n margin: 10px;\r\n border: 1px solid black;\r\n}\r\n\r\nigc-dockmanager::part(split-pane) {\r\n}\r\n\r\nigc-dockmanager::part(content1) {\r\n flex: 1 0 auto;\r\n}\r\n\r\nigc-dockmanager::part(content2) {\r\n flex: 1 0 auto;\r\n} */\r\n\r\n/* PLACEHOLDER */\r\n/* igc-dockmanager::part(content3) {\r\n min-height: 100px;\r\n} */\r\n\r\n/*igc-dockmanager::part(split-pane) {*/\r\n/* !* height: 2500px; *!*/\r\n/* overflow: scroll;*/\r\n/*}*/\r\n\r\nigc-dockmanager {\r\n margin: 10px;\r\n border: 1px solid black;\r\n}\r\n\r\n/* igc-dockmanager::part(content3)::part(pane-header) {\r\n background-color: red;\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, IgcDockManagerPaneType, IgcDockManagerResourceStrings, IgcDockingIndicatorPosition, IgcFloatingPaneResizeEventArgs, IgcFloatingPaneResizeMoveEventArgs, IgcPaneCloseEventArgs, IgcPaneDragActionType,\r\n IgcPaneDragOverEventArgs, IgcPanePinnedEventArgs, IgcPaneScrollEventArgs, IgcSplitPaneOrientation, 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 layout3: IgcDockManagerLayout = {\r\n rootPane: {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n useFixedSize: true,\r\n panes: [\r\n // {\r\n // type: IgcDockManagerPaneType.splitPane,\r\n // useFixedSize: true,\r\n // orientation: IgcSplitPaneOrientation.vertical,\r\n // size: 300, // PIXELS\r\n // panes: [\r\n // {\r\n // type: IgcDockManagerPaneType.contentPane,\r\n // contentId: 'content1',\r\n // header: 'Content Pane 1',\r\n // size: 500 // PIXELS\r\n // },\r\n // {\r\n // type: IgcDockManagerPaneType.contentPane,\r\n // contentId: 'content2',\r\n // header: 'Content Pane 2',\r\n // size: 300 // PIXELS\r\n // }\r\n // ]\r\n // },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n size: 450, // PIXELS\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n useFixedSize: true,\r\n size: 300, // PIXELS\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content4',\r\n header: 'Content Pane 4',\r\n size: 400 // PIXELS\r\n }\r\n ]\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content7',\r\n header: 'Content Pane 7',\r\n size: 450 // PIXELS\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n floatingPanes: [\r\n // {\r\n // type: IgcDockManagerPaneType.splitPane,\r\n // orientation: IgcSplitPaneOrientation.vertical,\r\n // useFixedSize: true,\r\n // // size: 950, // PIXELS\r\n // floatingHeight: 950,\r\n // floatingWidth: 650,\r\n // floatingLocation: { x: 200, y: 50 },\r\n // panes: [\r\n // {\r\n // type: IgcDockManagerPaneType.splitPane,\r\n // orientation: IgcSplitPaneOrientation.horizontal,\r\n // useFixedSize: true,\r\n // size: 400, // PIXELS\r\n // panes: [\r\n // {\r\n // type: IgcDockManagerPaneType.contentPane,\r\n // contentId: 'content12',\r\n // header: 'Content Pane 12',\r\n // size: 400 // PIXELS\r\n // },\r\n // {\r\n // type: IgcDockManagerPaneType.contentPane,\r\n // contentId: 'content13',\r\n // header: 'Content Pane 13',\r\n // size: 200 // PIXELS\r\n // }\r\n // ]\r\n // },\r\n // {\r\n // type: IgcDockManagerPaneType.splitPane,\r\n // orientation: IgcSplitPaneOrientation.vertical,\r\n // useFixedSize: true,\r\n // size: 500, // PIXELS\r\n // panes: [\r\n // {\r\n // type: IgcDockManagerPaneType.contentPane,\r\n // contentId: 'content11',\r\n // header: 'Content Pane 11',\r\n // size: 300 // PIXELS\r\n // },\r\n // ]\r\n // }\r\n // ]\r\n // }\r\n ]\r\n };\r\n\r\n commonProps = {\r\n allowClose: false,\r\n allowMaximize: false,\r\n allowFloating: false,\r\n allowPinning: false,\r\n };\r\n\r\n bodyRect = document.body.getBoundingClientRect();\r\n bodyWidth = this.bodyRect.width - 36;\r\n bodyHeight = this.bodyRect.height - 36;\r\n\r\n layout4: IgcDockManagerLayout = {\r\n rootPane: {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n useFixedSize: true,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content1',\r\n header: 'Content 1 Header',\r\n size: 260, // PIXELS\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n size: 240 + 10,\r\n panes: [\r\n {\r\n // type: IgcDockManagerPaneType.splitPane,\r\n // orientation: IgcSplitPaneOrientation.vertical,\r\n // size: this.bodyWidth / 3,\r\n // panes: [\r\n // {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content2',\r\n header: 'Content 2 Header',\r\n size: 240, // PIXELS\r\n // },\r\n // ],\r\n },\r\n // {\r\n // type: IgcDockManagerPaneType.splitPane,\r\n // orientation: IgcSplitPaneOrientation.vertical,\r\n // useFixedSize: true,\r\n // size: (this.bodyWidth * 2) / 3,\r\n // panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content3',\r\n header: 'Content 3 Header',\r\n size: 240, // PIXELS\r\n ...this.commonProps\r\n },\r\n // ],\r\n // },\r\n // {\r\n // type: IgcDockManagerPaneType.contentPane,\r\n // contentId: 'content_not_used_2',\r\n // header: 'NOT USED',\r\n // // size: 0,\r\n // ...this.commonProps,\r\n // },\r\n ],\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content4',\r\n header: 'Content 4 Header',\r\n size: 290, // PIXELS\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n size: 240 + 10,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n size: this.bodyWidth / 3,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content5',\r\n header: 'Content 5 Header',\r\n size: 240, // PIXELS\r\n },\r\n ],\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n size: (this.bodyWidth * 2) / 3,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content6',\r\n header: 'Content 6 Header',\r\n size: 240, // PIXELS\r\n },\r\n ],\r\n },\r\n // {\r\n // type: IgcDockManagerPaneType.contentPane,\r\n // contentId: 'content_not_used_3',\r\n // header: 'NOT USED',\r\n // ...this.commonProps,\r\n // },\r\n ],\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n size: 240 + 10,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n size: this.bodyWidth / 2,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content7',\r\n header: 'Content 7 Header',\r\n size: 240, // PIXELS\r\n },\r\n ],\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n size: this.bodyWidth / 2,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content8',\r\n header: 'Content 8 Header',\r\n size: 240, // PIXELS\r\n },\r\n ],\r\n },\r\n // {\r\n // type: IgcDockManagerPaneType.contentPane,\r\n // contentId: 'content_not_used_4',\r\n // header: 'NOT USED',\r\n // ...this.commonProps,\r\n // },\r\n ],\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content9',\r\n header: 'Content 9 Header',\r\n size: 290, // PIXELS\r\n },\r\n // {\r\n // type: IgcDockManagerPaneType.contentPane,\r\n // contentId: 'content_not_used_1',\r\n // header: 'NOT USED',\r\n // ...this.commonProps,\r\n // },\r\n ],\r\n },\r\n floatingPanes: [],\r\n };\r\n\r\n layout5: 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 useFixedSize: true,\r\n size: this.bodyWidth,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content1',\r\n header: 'Content 1 Header',\r\n size: 60, // PIXELS\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n size: 240 + 10,\r\n useFixedSize: true,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n size: this.bodyWidth / 3,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content2',\r\n header: 'Content 2 Header',\r\n size: 240, // PIXELS\r\n },\r\n ],\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n size: (this.bodyWidth * 2) / 3,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content3',\r\n header: 'Content 3 Header',\r\n size: 240, // PIXELS\r\n },\r\n ],\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content_not_used_2',\r\n header: 'NOT USED',\r\n // size: 0,\r\n ...this.commonProps,\r\n },\r\n ],\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content4',\r\n header: 'Content 4 Header',\r\n size: 290, // PIXELS\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n size: 240 + 10,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n size: this.bodyWidth / 3,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content5',\r\n header: 'Content 5 Header',\r\n size: 240, // PIXELS\r\n },\r\n ],\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n size: (this.bodyWidth * 2) / 3,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content6',\r\n header: 'Content 6 Header',\r\n size: 240, // PIXELS\r\n },\r\n ],\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content_not_used_3',\r\n header: 'NOT USED',\r\n ...this.commonProps,\r\n },\r\n ],\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n size: 240 + 10,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n size: this.bodyWidth / 2,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content7',\r\n header: 'Content 7 Header',\r\n size: 240, // PIXELS\r\n },\r\n ],\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n size: this.bodyWidth / 2,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content8',\r\n header: 'Content 8 Header',\r\n size: 240, // PIXELS\r\n },\r\n ],\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content_not_used_4',\r\n header: 'NOT USED',\r\n ...this.commonProps,\r\n },\r\n ],\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content9',\r\n header: 'Content 9 Header',\r\n size: 290, // PIXELS\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content_not_used_1',\r\n header: 'NOT USED',\r\n ...this.commonProps,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n floatingPanes: [],\r\n };\r\n\r\n // UseFizedSize with DCH\r\n layout6: IgcDockManagerLayout = {\r\n rootPane: {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n useFixedSize: true,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n useFixedSize: true,\r\n size: 300,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"content1\",\r\n header: \"Content Pane 1\",\r\n size: 300\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"content2\",\r\n header: \"Content Pane 2\",\r\n size: 700\r\n },\r\n ]\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n useFixedSize: true,\r\n size: 500,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.documentHost,\r\n size: 508,\r\n rootPane: {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n useFixedSize: true,\r\n allowEmpty: true,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.tabGroupPane,\r\n size: 300,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n header: 'MainWindow.xaml',\r\n contentId: 'content7',\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: 'content9',\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 size: 200\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"content3\",\r\n header: \"Content Pane 3\",\r\n size: 400\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"content4\",\r\n header: \"Content Pane 4\",\r\n size: 400\r\n }\r\n ]\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n // useFixedSize: true,\r\n size: 300,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"content5\",\r\n header: \"Content Pane 5\",\r\n size: 500\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"content6\",\r\n header: \"Content Pane 6\",\r\n size: 800\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n floatingPanes: [],\r\n };\r\n\r\n // The layout used in 'useFixedSize' unit tests\r\n layout7: IgcDockManagerLayout = {\r\n rootPane: {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n // useFixedSize: true,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n useFixedSize: true,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"content1\",\r\n header: \"Content Pane 1\",\r\n size: 400\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"content2\",\r\n header: \"Content Pane 2\",\r\n size: 600\r\n },\r\n ]\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.tabGroupPane,\r\n size: 400,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"content3\",\r\n header: \"Content Pane 3\"\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"content4\",\r\n header: \"Content Pane 4\",\r\n }]\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"content5\",\r\n header: \"Content Pane 5\",\r\n size: 600\r\n }\r\n ]\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"content6\",\r\n header: \"Content Pane 6\"\r\n }\r\n ]\r\n },\r\n floatingPanes: [{\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n floatingHeight: 200,\r\n floatingWidth:300,\r\n panes: [{\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"content7\",\r\n header: \"Content Pane 7\"\r\n }]\r\n }]\r\n };\r\n\r\n // No floating panes collection\r\n layout8: 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 },\r\n };\r\n\r\n layout: IgcDockManagerLayout = this.layout4;\r\n\r\n private logEnabled = false;\r\n // private hideOnCloseCheckbox: HTMLInputElement;\r\n\r\n /*\r\n private hiddenPanesSelect: HTMLSelectElement;\r\n private savedLayout: string;\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 toggleUseFixedSize() {\r\n // this.dockManager.useFixedSize = !this.dockManager.useFixedSize;\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\r\n private handlePaneClose(event: CustomEvent<IgcPaneCloseEventArgs>) {\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<IgcPaneScrollEventArgs>) {\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<IgcPanePinnedEventArgs>) {\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<IgcActivePaneEventArgs>) {\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<IgcPaneDragOverEventArgs>) {\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<IgcFloatingPaneResizeEventArgs>) {\r\n this.log(event, { ...event.detail });\r\n // event.preventDefault();\r\n }\r\n\r\n private handleFloatingPaneResizeMove(event: CustomEvent<IgcFloatingPaneResizeMoveEventArgs>) {\r\n this.log(event, { ...event.detail });\r\n }\r\n\r\n private handleFloatingPaneResizeEnd(event: CustomEvent<IgcFloatingPaneResizeEventArgs>) {\r\n this.log(event, { ...event.detail });\r\n }\r\n\r\n private handleLayoutChange(event: CustomEvent<any>) {\r\n this.log(event);\r\n }\r\n\r\n private reassignLayout(): void {\r\n console.log('Reassigning layout');\r\n this.dockManager.layout = {...this.layout3};\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 (<Host>\r\n {/*<div>*/}\r\n {/* <button onClick={() => this.saveLayout()}>Save Layout</button>*/}\r\n {/* <button onClick={() => this.loadLayout()}>Load Layout</button>*/}\r\n {/* <button onClick={() => this.setActivePane()}>Set Active Pane</button>*/}\r\n {/* <button onClick={() => this.addPane()}>Add Floating Pane</button>*/}\r\n {/* <button onClick={() => this.addTab()}>Add Tab Pane</button>*/}\r\n {/* <button onClick={() => this.disableContentPane()}>Disable Tab Pane</button>*/}\r\n {/* <button onClick={() => this.focusPane()}>Focus Pane</button>*/}\r\n {/* <button onClick={() => this.toggleProximityDock()}>Toggle Proximity Dock</button>*/}\r\n {/* <input*/}\r\n {/* id=\"hideOnClose\"*/}\r\n {/* type=\"checkbox\"*/}\r\n {/* style={{ marginLeft: '20px' }}*/}\r\n {/* ref={el => this.hideOnCloseCheckbox = el}*/}\r\n {/* />*/}\r\n {/* <label htmlFor=\"hideOnClose\">Hide on close</label>*/}\r\n {/* <span style={{ marginLeft: '20px' }}>Hidden Panes:</span>*/}\r\n {/* <select*/}\r\n {/* style={{ width: '150px' }}*/}\r\n {/* ref={el => this.hiddenPanesSelect = el}*/}\r\n {/* >*/}\r\n {/* {this.hiddenPanes.map(p => {*/}\r\n {/* return (*/}\r\n {/* <option value={p.id}>{p.header}</option>*/}\r\n {/* );*/}\r\n {/* })}*/}\r\n {/* </select>*/}\r\n {/* <button onClick={() => this.showPane()}>Show Pane</button>*/}\r\n {/* <button onClick={() => this.showAllPanes()}>Show All Panes</button>*/}\r\n {/* <button onClick={() => this.toggleInBoundaries()}>Toggle In Boundaries</button>*/}\r\n {/*</div>*/}\r\n {/* <button onClick={() => this.toggleUseFixedSize()}>Toggle useFixedSize</button> */}\r\n <button onClick={() => this.reassignLayout()}>Reassign</button>\r\n <igc-dockmanager\r\n layout={this.layout}\r\n onPaneClose={this.handlePaneClose.bind(this)}\r\n onPaneScroll={this.handlePaneScroll.bind(this)}\r\n onPanePinnedToggle={this.handlePinnedToggle.bind(this)}\r\n onActivePaneChanged={this.handleActivePaneChanged.bind(this)}\r\n onPaneDragStart={this.handleDragStart.bind(this)}\r\n onPaneDragOver={this.handleDragOver.bind(this)}\r\n onPaneDragEnd={this.handleDragEnd.bind(this)}\r\n onSplitterResizeStart={this.handleSplitterResizeStart.bind(this)}\r\n onSplitterResizeEnd={this.handleSplitterResizeEnd.bind(this)}\r\n onFloatingPaneResizeStart={this.handleFloatingPaneResizeStart.bind(this)}\r\n onFloatingPaneResizeMove={this.handleFloatingPaneResizeMove.bind(this)}\r\n onFloatingPaneResizeEnd={this.handleFloatingPaneResizeEnd.bind(this)}\r\n onLayoutChange={this.handleLayoutChange.bind(this)}\r\n // resourceStrings={this.getCustomResourceStrings()}\r\n ref={el => this.dockManager = el}\r\n // allowFloatingPanesResize={false}\r\n showHeaderIconOnHover={'closeOnly'}\r\n useFixedSizeOnDock={'vertical'}\r\n // contextMenuPosition='start'\r\n // allowInnerDock={false}\r\n // proximityDock={true}\r\n // showPaneHeaders='onHoverOnly'\r\n allowSplitterDock={true}\r\n allowRootDock={false}\r\n enableDragCursor={true}\r\n >\r\n <div slot=\"header1\">\r\n <span style={{ color: 'red' }}>Solution Explorer</span>\r\n <button>H</button>\r\n </div>\r\n <div slot=\"tabHeader1\">\r\n <span style={{ color: 'orange' }}>Solution Explorer</span>\r\n <button>T</button>\r\n </div>\r\n <div slot=\"unpinnedHeader1\">\r\n <span style={{ color: 'blue' }}>Solution Explorer</span>\r\n <button>U</button>\r\n </div>\r\n\r\n <div slot=\"toolboxHeader\">\r\n <span>[U] Toolbox</span>\r\n </div>\r\n <div slot=\"teamExplorerHeader\">\r\n <span>[U] Team Explorer</span>\r\n </div>\r\n\r\n <button style={{ background: 'pink' }} slot=\"tabHeaderCloseButton\">Y</button>\r\n {/* <button style={{ background: 'aqua' }} slot=\"paneHeaderCloseButton\">X</button>\r\n <button style={{ background: 'pink' }} slot=\"tabHeaderCloseButton\">Y</button>\r\n <button style={{ background: 'lightblue' }} slot=\"moreTabsButton\">...</button>\r\n <button style={{ background: 'aqua' }} slot=\"maximizeButton\">︿</button>\r\n <button style={{ background: 'mediumvioletred' }} slot=\"minimizeButton\">﹀</button>\r\n <button style={{ background: 'lightgreen' }} slot=\"pinButton\">P</button>\r\n <button style={{ background: 'red' }} slot=\"unpinButton\">U</button>\r\n <button style={{ background: 'blue' }} slot=\"moreOptionsButton\"><div><span>≣</span></div></button>\r\n <button style={{ background: 'green' }} slot=\"splitterHandle\">S</button> */}\r\n<div slot=\"content1\">Content 1</div>\r\n<div slot=\"content2\">Content 2</div>\r\n<div slot=\"content3\">Content 3</div>\r\n<div slot=\"content4\">Content 4</div>\r\n<div slot=\"content5\">Content 5</div>\r\n<div slot=\"content6\">Content 6</div>\r\n<div slot=\"content7\">Content 7</div>\r\n<div slot=\"content8\">Content 8</div>\r\n<div slot=\"content9\">Content 9</div>\r\n\r\n<div slot=\"content_not_used_1\"></div>\r\n<div slot=\"content_not_used_2\"></div>\r\n<div slot=\"content_not_used_3\"></div>\r\n<div slot=\"content_not_used_4\"></div>\r\n\r\n </igc-dockmanager>\r\n </Host>);\r\n }\r\n}\r\n"],"version":3}
1
+ {"file":"igc-button-component.igc-content-pane-component.igc-context-menu-component.igc-dockmanager.igc-document-host-component.igc-edge-docking-indicator-component.igc-floating-pane-component.igc-icon-component.igc-joystick-icon-component.igc-joystick-indicator-component.igc-pane-header-component.igc-pane-navigator-component.igc-resizer-component.igc-root-docking-indicator-component.igc-split-pane-component.igc-splitter-component.igc-splitter-docking-indicator-component.igc-tab-header-component.igc-tab-panel-component.igc-tabs-component.igc-unpinned-pane-header-component.sample-component.entry.cjs.js","mappings":"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","names":["h","Host","IgcDockingIndicatorPosition","IgcSplitPaneOrientation","Fragment","IgcDockManagerPaneType","IgcUnpinnedLocation","IgcPaneActionBehavior","IgcResizerLocation","IgcPaneDragActionType","resourceStringsMap","forceUpdate","index","addResourceStrings"],"sources":["src/components/button/button-component.scss?tag=igc-button-component&encapsulation=shadow","src/components/button/button-component.tsx","src/utils/utils.ts","src/components/dockmanager/dockmanager.interfaces.ts","src/components/dockmanager/panes/content-pane-component.scss?tag=igc-content-pane-component&encapsulation=shadow","src/components/dockmanager/panes/content-pane-component.tsx","src/components/context-menu/context-menu-component.scss?tag=igc-context-menu-component&encapsulation=shadow","src/components/context-menu/context-menu-component.tsx","node_modules/igniteui-trial-watermark/index.js","src/utils/two-way-map.ts","src/components/dockmanager/dockmanager.service.ts","src/components/dockmanager/keyboard/keyboard.service.ts","src/components/dockmanager/dockmanager-component.scss?tag=igc-dockmanager&encapsulation=shadow","src/components/dockmanager/dockmanager-component.tsx","src/components/dockmanager/panes/document-host-component.css?tag=igc-document-host-component&encapsulation=scoped","src/components/dockmanager/panes/document-host-component.tsx","src/components/dockmanager/docking/edge-docking-indicator-component.scss?tag=igc-edge-docking-indicator-component&encapsulation=scoped","src/components/dockmanager/docking/edge-docking-indicator-component.tsx","src/components/dockmanager/panes/floating-pane-component.scss?tag=igc-floating-pane-component&encapsulation=shadow","src/components/dockmanager/panes/floating-pane-component.tsx","src/components/icon/icons.ts","src/components/icon/icon-component.scss?tag=igc-icon-component&encapsulation=scoped","src/components/icon/icon-component.tsx","src/components/dockmanager/docking/joystick-icon-component.scss?tag=igc-joystick-icon-component&encapsulation=scoped","src/components/dockmanager/docking/joystick-icon-component.tsx","src/components/dockmanager/docking/joystick-indicator-component.scss?tag=igc-joystick-indicator-component&encapsulation=scoped","src/components/dockmanager/docking/joystick-indicator-component.tsx","src/components/drag-drop/drag.service.ts","src/components/dockmanager/panes/pane-header-component.scss?tag=igc-pane-header-component&encapsulation=shadow","src/components/dockmanager/panes/pane-header-component.tsx","src/components/dockmanager/pane-navigator/pane-navigator-component.scss?tag=igc-pane-navigator-component&encapsulation=shadow","src/components/dockmanager/pane-navigator/pane-navigator-component.tsx","src/components/dockmanager/panes/resizer-component.scss?tag=igc-resizer-component&encapsulation=scoped","src/components/dockmanager/panes/resizer-component.tsx","src/components/dockmanager/docking/root-docking-indicator-component.scss?tag=igc-root-docking-indicator-component&encapsulation=scoped","src/components/dockmanager/docking/root-docking-indicator-component.tsx","src/components/dockmanager/panes/split-pane-component.scss?tag=igc-split-pane-component&encapsulation=scoped","src/components/dockmanager/panes/split-pane-component.tsx","src/components/dockmanager/panes/splitter-component.scss?tag=igc-splitter-component&encapsulation=shadow","src/components/dockmanager/panes/splitter-component.tsx","src/components/dockmanager/docking/splitter-docking-indicator-component.scss?tag=igc-splitter-docking-indicator-component&encapsulation=scoped","src/components/dockmanager/docking/splitter-docking-indicator-component.tsx","src/components/tabs/tab-header-component.scss?tag=igc-tab-header-component&encapsulation=shadow","src/components/tabs/tab-header-component.tsx","src/components/tabs/tab-panel-component.scss?tag=igc-tab-panel-component&encapsulation=shadow","src/components/tabs/tab-panel-component.tsx","src/components/tabs/tabs-component.scss?tag=igc-tabs-component&encapsulation=shadow","src/components/tabs/tabs-component.tsx","src/components/dockmanager/panes/unpinned-pane-header-component.scss?tag=igc-unpinned-pane-header-component&encapsulation=shadow","src/components/dockmanager/panes/unpinned-pane-header-component.tsx","src/components/sample-component/sample-component.css?tag=sample-component&encapsulation=scoped","src/components/sample-component/sample-component.tsx"],"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 <Host\r\n disabled={this.disabled}\r\n >\r\n <button\r\n name={this.name}\r\n type={this.type}\r\n value={this.value}\r\n aria-disabled={this.disabled ? 'true' : null}\r\n >\r\n <slot />\r\n </button>\r\n </Host>\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 isDockingIndicatorMost(position: IgcDockingIndicatorPosition): boolean {\r\n return position === IgcDockingIndicatorPosition.leftMost ||\r\n position === IgcDockingIndicatorPosition.rightMost ||\r\n position === IgcDockingIndicatorPosition.topMost ||\r\n position === IgcDockingIndicatorPosition.bottomMost;\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 IgcPaneActionBehavior,\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_PANE_SIZE_IN_PIXELS = 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/**\r\n * @hidden\r\n */\r\nexport interface IgcDropTargetPaneInfo {\r\n pane: IgcDockManagerPane;\r\n docHost: IgcDocumentHost;\r\n targetRect: DOMRect;\r\n visibleTargetRect?: 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<IgcSplitPane, number>;\r\n paneClose: EventEmitter<IgcPaneCloseEventArgs>;\r\n paneScroll: EventEmitter<IgcPaneScrollEventArgs>;\r\n panePinnedToggle: EventEmitter<IgcPanePinnedEventArgs>;\r\n paneDragStart: EventEmitter<IgcPaneDragStartEventArgs>;\r\n paneDragOver: EventEmitter<IgcPaneDragOverEventArgs>;\r\n paneDragEnd: EventEmitter<IgcPaneDragEndEventArgs>;\r\n resourceStrings: IgcDockManagerResourceStrings;\r\n focusElement: () => void;\r\n navigationPaneMeta?: IgcPaneNavigatorMetadata;\r\n floatingPaneResizeStart: EventEmitter<IgcFloatingPaneResizeEventArgs>;\r\n floatingPaneResizeMove: EventEmitter<IgcFloatingPaneResizeMoveEventArgs>;\r\n floatingPaneResizeEnd: EventEmitter<IgcFloatingPaneResizeEventArgs>;\r\n layoutChange: EventEmitter;\r\n direction: string;\r\n allowInnerDock: boolean;\r\n closeBehavior: IgcPaneActionBehavior;\r\n unpinBehavior: IgcPaneActionBehavior;\r\n allowSplitterDock: boolean;\r\n allowRootDock: boolean;\r\n useFixedSizeOnDock: 'none' | 'vertical' | 'horizontal' | 'both';\r\n autoScrollConfig: { edgeThreshold: number, scrollSpeed: number };\r\n enableDragCursor: 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 @Prop() parentUseFixedSize: boolean = false;\r\n\r\n @Event() rendered: EventEmitter<HTMLIgcContentPaneComponentElement>;\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 >= 0 ? 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 <Host\r\n role=\"group\"\r\n aria-label={this.header}\r\n aria-disabled={this.disabled ? 'true' : 'false'}\r\n tabindex={this.disabled ? -1 : 0}\r\n style={{\r\n flex: this.isFlyout ? `0 1 ${unpinnedSize}px` : this.parentUseFixedSize ? `0 0 ${size}px` : `${size} 1 ${size}px`\r\n }}\r\n part={parts}\r\n >\r\n <slot name=\"header\">\r\n </slot>\r\n <slot></slot>\r\n </Host>\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 <Fragment>\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 <igc-icon-component name={item.iconName} />\r\n }\r\n </Fragment>\r\n );\r\n }\r\n\r\n private renderCloseButton() {\r\n return (\r\n <slot name=\"contextMenuCloseButton\">\r\n <igc-icon-component part=\"context-menu-close-button\" name=\"close\" />\r\n </slot>\r\n );\r\n }\r\n\r\n private renderUnpinButton() {\r\n return (\r\n <slot name=\"contextMenuUnpinButton\">\r\n <igc-icon-component part=\"context-menu-unpin-button\" name=\"unpin\" />\r\n </slot>\r\n );\r\n }\r\n\r\n render() {\r\n return (\r\n <Host\r\n part=\"context-menu\"\r\n exportparts=\"context-menu,\r\n menu-item: context-menu-item,\r\n menu-content: context-menu-content,\r\n context-menu-close-button,\r\n context-menu-unpin-button\"\r\n >\r\n <div\r\n role=\"menu\"\r\n part=\"menu-content\"\r\n ref={el => 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 <div\r\n role=\"menuitem\"\r\n part={parts}\r\n tabindex=\"-1\"\r\n onKeyDown={this.handleKeyboardEvents.bind(this, item)}\r\n onClick={this.handleMenuItemClick.bind(this, item)}\r\n >\r\n <span\r\n style={{\r\n flexGrow: '1',\r\n userSelect: 'none',\r\n }}\r\n >\r\n {item.displayText}\r\n </span>\r\n\r\n {this.renderItemIcon(item)}\r\n </div>\r\n );\r\n })\r\n }\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}\r\n","\"use strict\";function _typeof(obj){\"@babel/helpers - typeof\";if(typeof Symbol===\"function\"&&typeof Symbol.iterator===\"symbol\"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol===\"function\"&&obj.constructor===Symbol&&obj!==Symbol.prototype?\"symbol\":typeof obj}}return _typeof(obj)}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if(\"value\"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!==\"function\"&&superClass!==null){throw new TypeError(\"Super expression must either be null or a function\")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)===\"object\"||typeof call===\"function\")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\")}return self}function _wrapNativeSuper(Class){var _cache=typeof Map===\"function\"?new Map:undefined;_wrapNativeSuper=function _wrapNativeSuper(Class){if(Class===null||!_isNativeFunction(Class))return Class;if(typeof Class!==\"function\"){throw new TypeError(\"Super expression must either be null or a function\")}if(typeof _cache!==\"undefined\"){if(_cache.has(Class))return _cache.get(Class);_cache.set(Class,Wrapper)}function Wrapper(){return _construct(Class,arguments,_getPrototypeOf(this).constructor)}Wrapper.prototype=Object.create(Class.prototype,{constructor:{value:Wrapper,enumerable:false,writable:true,configurable:true}});return _setPrototypeOf(Wrapper,Class)};return _wrapNativeSuper(Class)}function _construct(Parent,args,Class){if(_isNativeReflectConstruct()){_construct=Reflect.construct}else{_construct=function _construct(Parent,args,Class){var a=[null];a.push.apply(a,args);var Constructor=Function.bind.apply(Parent,a);var instance=new Constructor;if(Class)_setPrototypeOf(instance,Class.prototype);return instance}}return _construct.apply(null,arguments)}function _isNativeReflectConstruct(){if(typeof Reflect===\"undefined\"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy===\"function\")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true}catch(e){return false}}function _isNativeFunction(fn){return Function.toString.call(fn).indexOf(\"[native code]\")!==-1}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}if(typeof customElements!==\"undefined\"){var watermarkRegistered=customElements.get(\"igc-trial-watermark\");if(!watermarkRegistered){(function(){var TrialWatermark=/*#__PURE__*/function(_HTMLElement){_inherits(TrialWatermark,_HTMLElement);var _super=_createSuper(TrialWatermark);function TrialWatermark(){var _this;_classCallCheck(this,TrialWatermark);_this=_super.call(this);var shadow=_this.attachShadow({mode:\"closed\"});_this.__anchor=document.createElement(\"a\");_this.__anchor.setAttribute(\"class\",\"watermark__link\");_this.__anchor.setAttribute(\"href\",\"https://www.infragistics.com/how-to-buy/renewal\");_this.__anchor.setAttribute(\"target\",\"_blank\");var img=document.createElement(\"span\");img.setAttribute(\"class\",\"watermark__background-img\");var style=document.createElement(\"style\");style.textContent=\":host{display:block;position:absolute;bottom:0;right:0;width:100%;height:100%;z-index:10000;pointer-events:none}:host .watermark__link{display:inline-flex;align-items:center;position:absolute;bottom:0;right:0;font-family:'Titillium Web', sans-serif;font-size:.875rem;padding:.125rem .25rem;line-height:normal;border:1px solid var(--igx-watermark-border-color, #09f);color:var(--igx-watermark-color, #fff);z-index:10002;background-color:var(--igx-watermark-link-background, #09f);pointer-events:all;text-decoration:none}:host .watermark__link img{margin-right:4px}:host .watermark__background-img{width:100%;height:100%;position:absolute;top:0;left:0;z-index:10001;pointer-events:none;background-image:var(--igx-watermark-background-image, url(\\\"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgNDYgMjYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cgkuc3Qwe29wYWNpdHk6MC4xMjtmaWxsOiMwMDk5RkY7fQo8L3N0eWxlPgo8cGF0aCBjbGFzcz0ic3QwIiBkPSJtNC4yIDIuNS0xLjctMC41IDAuNS0xLjctMS4zLTAuMy0wLjUgMS43LTAuNy0wLjItMC4zIDEuMSAwLjggMC4yLTAuOCAyLjhjLTAuMiAwLjgtMC4yIDEuNC0wLjEgMS44IDAuMiAwLjQgMC42IDAuNyAxLjIgMC44IDAuNCAwLjEgMC44IDAuMiAxLjIgMC4ybDAuMi0xLTEtMC4yYy0wLjItMC4xLTAuNC0wLjItMC40LTAuNCAwLTAuMyAwLjEtMC43IDAuMi0xbDAuNy0yLjYgMS43IDAuNCAwLjMtMS4xem0wLjcgNi42IDEuMS00LjFoMC4zYzAuNi0wLjEgMS4yLTAuMiAxLjktMC4xbDAuMy0xLjNjLTAuOC0wLjEtMS41IDAtMi4yIDAuM2wwLjItMC43LTEuNC0wLjMtMS41IDUuOCAxLjMgMC40em00LjMgMS4xIDEuNi01LjktMS4zLTAuNC0xLjYgNS45IDEuMyAwLjR6bTEuOS02LjkgMC40LTEuMy0xLjMtMC40LTAuNCAxLjMgMS4zIDAuNHptNS4xIDIuOGMtMC4yLTAuNC0wLjctMC43LTEuNC0wLjktMC44LTAuMi0xLjYtMC4zLTIuNS0wLjNsLTAuMyAwLjkgMC40IDAuMWMwLjggMC4xIDEuNCAwLjMgMS45IDAuNCAwLjIgMCAwLjQgMC4xIDAuNiAwLjMgMC4xIDAuMiAwLjEgMC41IDAgMC43bC0wLjEgMC40LTEuNS0wLjNjLTAuNS0wLjEtMS4xLTAuMS0xLjYgMC4xLTAuNCAwLjItMC43IDAuNi0wLjggMS4yLTAuMyAxLjIgMC4xIDIgMS4yIDIuNCAwLjcgMC4yIDEuMyAwLjIgMiAwLjEgMC40IDAuNCAwLjkgMC43IDEuNCAwLjlsMC4zLTFjLTAuMS0wLjEtMC4zLTAuMS0wLjMtMC4zLTAuMS0wLjEtMC4xLTAuMyAwLTAuNGwwLjctMi43YzAuMy0wLjcgMC4yLTEuMiAwLTEuNnptLTEuNiAyLjYtMC40IDEuNWgtMC4yYy0wLjQgMC0wLjkgMC0xLjMtMC4yLTAuNS0wLjEtMC42LTAuNS0wLjUtMXMwLjUtMC44IDAuOS0wLjdoMC4xYzAgMC4yIDEuNCAwLjQgMS40IDAuNHptMy41IDMuOSAyLjMtOC40LTEuMy0wLjQtMi4zIDguNCAxLjMgMC40eiIvPgo8L3N2Zz4K\\\"));background-size:200px 150px;background-position:top left}@media all and (-ms-high-contrast: none){:host .watermark__background-img{background-image:none}}\\n\";shadow.appendChild(style);shadow.appendChild(_this.__anchor);shadow.appendChild(img);if(!document.getElementById(\"igniteui-watermark-themes\")){_this.__themes=document.createElement(\"style\");_this.__themes.setAttribute(\"id\",\"igniteui-watermark-themes\");_this.__themes.textContent=\".dark-theme {\\n --igx-watermark-border-color: #72da67;\\n --igx-watermark-color: #fff;\\n --igx-watermark-link-background: #72da67;\\n --igx-watermark-background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxODQiIGhlaWdodD0iMTA0IiB2aWV3Qm94PSIwIDAgMTg0IDEwNCI+CiAgPGRlZnM+CiAgICA8c3R5bGU+CiAgICAgIC5jbHMtMSB7CiAgICAgICAgZmlsbDogI2ZmZjsKICAgICAgICBmaWxsLXJ1bGU6IGV2ZW5vZGQ7CiAgICAgICAgb3BhY2l0eTogMC4wNTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L2RlZnM+CiAgPHBhdGggaWQ9InRyaWFsIiBjbGFzcz0iY2xzLTEiIGQ9Ik0xNi43MiwxMC4xNDhMMTAuMyw4LjQzNGwxLjgwNi02LjcyM0w3LjA5LDAuMzY5LDUuMjgzLDcuMDkyLDIuMzA4LDYuMywxLjE1LDEwLjYwOWwyLjk3NSwwLjhMMS4yMzUsMjIuMTYxcS0xLjM0NSw1LjAwNy0uMzY3LDcuMjA3VDUuOCwzMi42MjNhMjguMTYzLDI4LjE2MywwLDAsMCw0LjkuNjY0bDAuODUxLTQuMS0zLjg1LS44OHEtMS43MjEtLjQ2LTEuODg5LTEuNWExMS4xODgsMTEuMTg4LDAsMCwxLC41OTEtMy44NjdsMi43NDEtMTAuMiw2LjQxNiwxLjcxNFpNMTkuNywzNS43OWw0LjM0OC0xNi4xODEsMS4xMzUtLjE0NGEzMy44NzEsMzMuODcxLDAsMCwxLDcuMzgyLS4yMTRMMzMuOTE5LDE0LjJhMjIuOTQxLDIyLjk0MSwwLDAsMC04Ljc4OCwxLjE4TDI1Ljg3OCwxMi42bC01LjAyMS0xLjM0MkwxNC42MjksMzQuNDM2Wm0xNi43ODMsNC40ODUsNi4yMjktMjMuMTgyTDM3LjY0LDE1LjczOCwzMS40MTIsMzguOTIxWm03LjI4Ny0yNy4xMjNMNDUuMiw3LjgyLDQwLjEzMiw2LjQ2NiwzOC43LDExLjhabTIwLjA0MiwxMXEtMS4zOTEtMi4zMzQtNS42NDUtMy40NzFhNDEuOTUxLDQxLjk1MSwwLDAsMC05LjY0NS0xLjI4NWwtMC43NzMsMy42MiwxLjUxMywwLjNxNC41NjMsMC44MjIsNy41MzgsMS42MTdhMy41NjIsMy41NjIsMCwwLDEsMi4yLDEuMzgyLDMuNTI4LDMuNTI4LDAsMCwxLC4xMTYsMi44MTRMNTguNjU4LDMwLjgsNTIuNTI0LDI5LjdhMTAuNjQ1LDEwLjY0NSwwLDAsMC02LjMuMzU0cS0yLjMwNiwxLjA3NC0zLjI1Myw0LjYtMS45ODEsNy4zNzIsNC45NDYsOS4yMjNhMTguMzU3LDE4LjM1NywwLDAsMCw3Ljk0Ni4yODUsMTAuMTM0LDEwLjEzNCwwLDAsMCw1LjcyMiwzLjM2OEw2Mi43Niw0My43MmEyLjY2NSwyLjY2NSwwLDAsMS0xLjM0My0xLjAzLDIuMjczLDIuMjczLDAsMCwxLS4xMy0xLjY1bDIuODQtMTAuNTcxUTY1LjIsMjYuNDgyLDYzLjgwOCwyNC4xNDdaTTU3LjcsMzQuMzY3bC0xLjY1Nyw2LjE2Ni0wLjkxMi4wNTVBMTguNjM1LDE4LjYzNSwwLDAsMSw1MCw0MC4wMTNxLTIuODM2LS43NTgtMS45NzYtMy45NTdhMy4yMzcsMy4yMzcsMCwwLDEsNC4xNDItMi42MlpNNzEuNTMyLDQ5LjY0Mmw4LjgyLTMyLjgyNi01LjA2OC0xLjM1NC04LjgyLDMyLjgyNloiLz4KPC9zdmc+Cg==');\\n}\\n\\n.light-theme {\\n --igx-watermark-border-color: #e41c77;\\n --igx-watermark-color: #fff;\\n --igx-watermark-link-background: #e41c77;\\n --igx-watermark-background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzNjYiIGhlaWdodD0iMjA5IiB2aWV3Qm94PSIwIDAgMzY2IDIwOSI+CiAgPGRlZnM+CiAgICA8c3R5bGU+CiAgICAgIC5jbHMtMSB7CiAgICAgICAgZmlsbC1ydWxlOiBldmVub2RkOwogICAgICAgIG9wYWNpdHk6IDAuMDU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC9kZWZzPgogIDxwYXRoIGlkPSJ0cmlhbCIgY2xhc3M9ImNscy0xIiBkPSJNMzMuMzUsMjAuM2wtMTIuOC0zLjQyOSwzLjYtMTMuNDQ2TDE0LjE0MSwwLjczOGwtMy42LDEzLjQ0Nkw0LjYsMTIuNTk0LDIuMjkzLDIxLjIxOGw1LjkzNSwxLjU5TDIuNDYzLDQ0LjMyMVEtMC4yMiw1NC4zMzYsMS43MzIsNTguNzM1dDkuODM0LDYuNTExYTU2LjA2MSw1Ni4wNjEsMCwwLDAsOS43ODEsMS4zMjlsMS43LTguMTkyLTcuNjc4LTEuNzU5cS0zLjQzMi0uOTE5LTMuNzY5LTN0MS4xNzgtNy43MzVsNS40NjYtMjAuNCwxMi44LDMuNDI5Wk0zOS4yODUsNzEuNThsOC42NzEtMzIuMzYyLDIuMjY0LS4yODhBNjcuMzg4LDY3LjM4OCwwLDAsMSw2NC45NDUsMzguNWwyLjcwOC0xMC4xMDdhNDUuNjQyLDQ1LjY0MiwwLDAsMC0xNy41MjgsMi4zNmwxLjQ5MS01LjU2NEw0MS42LDIyLjUwNywyOS4xNzgsNjguODcyWk03Mi43Niw4MC41NUw4NS4xODMsMzQuMTg1LDc1LjA3NiwzMS40NzcsNjIuNjUyLDc3Ljg0MVpNODcuMjk1LDI2LjNsMi44NTctMTAuNjY0TDgwLjA0NSwxMi45MzEsNzcuMTg4LDIzLjU5NVptMzkuOTc0LDIxLjk5MXEtMi43NzUtNC42NjgtMTEuMjU5LTYuOTQzYTgzLjQ1OCw4My40NTgsMCwwLDAtMTkuMjM4LTIuNTcxbC0xLjU0Miw3LjI0LDMuMDE3LDAuNjFxOS4xLDEuNjQ0LDE1LjAzNSwzLjIzNGE3LjEsNy4xLDAsMCwxLDQuMzc4LDIuNzYzcTEuMjI0LDEuOTE5LjIzMiw1LjYyOEwxMTcsNjEuNTkzbC0xMi4yMzUtMi4xODVROTYuOCw1Ny45NzEsOTIuMiw2MC4xMTZUODUuNzEsNjkuMzFxLTMuOTUxLDE0Ljc0NCw5Ljg2NiwxOC40NDZhMzYuNTEzLDM2LjUxMywwLDAsMCwxNS44NDguNTY5cTMuNDM4LDQuNiwxMS40MTQsNi43MzZsMi4zNC03LjYyMkE1LjMxOSw1LjMxOSwwLDAsMSwxMjIuNSw4NS4zOGE0LjU2LDQuNTYsMCwwLDEtLjI1OS0zLjNsNS42NjUtMjEuMTQyUTEzMC4wNDQsNTIuOTY0LDEyNy4yNjksNDguMjk1Wk0xMTUuMDg0LDY4LjczM2wtMy4zMDUsMTIuMzMzLTEuODE4LjEwOWEzNy4wNywzNy4wNywwLDAsMS0xMC4yMjctMS4xNXEtNS42NTctMS41MTYtMy45NDItNy45MTR0OC4yNjItNS4yNFptMjcuNTkyLDMwLjU1LDE3LjU5MS02NS42NTJMMTUwLjE2LDMwLjkyMywxMzIuNTY4LDk2LjU3NVoiLz4KPC9zdmc+Cg==');\\n}\"}return _this}_createClass(TrialWatermark,[{key:\"connectedCallback\",value:function connectedCallback(){this.__anchor.textContent=this.hasAttribute(\"text\")?this.getAttribute(\"text\"):\"Trial version of Ignite UI for Angular\";var anchorImg=document.createElement(\"img\");anchorImg.setAttribute(\"src\",\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0id2hpdGUiIHdpZHRoPSIxOHB4IiBoZWlnaHQ9IjE4cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMFYweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xNyA3aC00djJoNGMxLjY1IDAgMyAxLjM1IDMgM3MtMS4zNSAzLTMgM2gtNHYyaDRjMi43NiAwIDUtMi4yNCA1LTVzLTIuMjQtNS01LTV6bS02IDhIN2MtMS42NSAwLTMtMS4zNS0zLTNzMS4zNS0zIDMtM2g0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0yem0tMy00aDh2Mkg4eiIvPjwvc3ZnPg==\");this.__anchor.prepend(anchorImg);if(this.__themes&&this.hasAttribute(\"theming\")&&this.getAttribute(\"theming\")){document.head.appendChild(this.__themes)}}}]);return TrialWatermark}(/*#__PURE__*/_wrapNativeSuper(HTMLElement));customElements.define(\"igc-trial-watermark\",TrialWatermark)})()}}","/**\r\n * @hidden\r\n */\r\nexport class TwoWayMap<K, V> {\r\n private map = new Map<K, V>();\r\n private reversedMap = new Map<V, K>();\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\nimport { IgcDockManager } from './dockmanager-component';\r\n\r\nimport {\r\n IGC_DEFAULT_PANE_SIZE, IGC_DEFAULT_PANE_SIZE_IN_PIXELS, IGC_DEFAULT_UNPIN_PANE_SIZE, IGC_DRAG_FLYOUT_THRESHOLD, IgcContextMenuItem, IgcDockManagerComponentBase,\r\n IgcTabRectsInfo\r\n} from './dockmanager.interfaces';\r\nimport {\r\n IgcContentPane, IgcDockManagerPane, IgcDockManagerPaneType, IgcDockManagerPoint, IgcDockingIndicator, IgcDockingIndicatorPosition,\r\n IgcDocumentHost, IgcFloatPaneAction, IgcFloatingPaneResizeEventArgs, IgcFloatingPaneResizeMoveEventArgs, IgcMoveTabAction, IgcPaneActionBehavior, IgcPaneCloseEventArgs, IgcPaneDragActionType,\r\n IgcPanePinnedEventArgs, IgcResizerLocation, IgcSplitPane, IgcSplitPaneOrientation, IgcTabGroupPane, IgcUnpinnedLocation\r\n} from './dockmanager.public-interfaces';\r\nimport { IgcFloatingPaneComponent } from './panes/floating-pane-component';\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class IgcDockManagerService {\r\n private paneParentMap: Map<IgcDockManagerPane, IgcDockManagerPane>;\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 draggedPaneParent: IgcSplitPane;\r\n private shiftLeftThreshold: number;\r\n private shiftRightThreshold: number;\r\n private documentsCache: IgcContentPane[];\r\n private contentPanesCache: IgcContentPane[];\r\n private defaultSplitterSize = 4;\r\n\r\n visibleDocuments: IgcContentPane[];\r\n visibleContentPanes: IgcContentPane[];\r\n documentHosts: IgcDocumentHost[];\r\n clientContentPanesMap: Map<string, IgcContentPane>;\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<IgcContentPane, IgcUnpinnedLocation>();\r\n keyboardDockPane: IgcContentPane = null;\r\n proximityDockPosition: IgcDockingIndicatorPosition;\r\n splitterDockTarget: { pane: any; index: number };\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 === 1 && parent.panes[0].type === IgcDockManagerPaneType.contentPane && parent.panes[0].contentId.startsWith('placeholder')) {\r\n parent.panes = [];\r\n }\r\n\r\n if (parent.panes.length === 0) {\r\n if (parent.allowEmpty) {\r\n if (parent === this.dockManager.maximizedPane) {\r\n this.dockManager.maximizedPane = null;\r\n parent.isMaximized = false;\r\n }\r\n\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 size: content.size\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 if (!pane.panes) return;\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 const willCreateNewParent = isIndicatorVertical !== isSplitPaneVertical;\r\n let useFixedSize = this.shouldUseFixedSize(targetParent);\r\n let orientation = targetParent.orientation;\r\n\r\n if (willCreateNewParent) {\r\n\r\n useFixedSize = isIndicatorVertical ?\r\n this.dockManager.useFixedSizeOnDock === 'vertical' || this.dockManager.useFixedSizeOnDock === 'both' :\r\n this.dockManager.useFixedSizeOnDock === 'horizontal' || this.dockManager.useFixedSizeOnDock === 'both';\r\n orientation = isIndicatorVertical ? IgcSplitPaneOrientation.vertical : IgcSplitPaneOrientation.horizontal;\r\n }\r\n\r\n if (this.draggedPaneParent?.useFixedSize === true && useFixedSize !== true) {\r\n paneToDock.size = IGC_DEFAULT_PANE_SIZE_IN_PIXELS;\r\n } else if (useFixedSize === true && (this.draggedPaneParent?.useFixedSize !== true || this.draggedPaneParent?.orientation !== orientation)) {\r\n const newSize = this.getDraggedPanePostDockingSizeInPixels(isIndicatorVertical);\r\n if (newSize) paneToDock.size = newSize;\r\n }\r\n\r\n let newSplitPane: IgcSplitPane;\r\n var isDockingBefore = Utils.isDockingIndicatorBefore(position) && !isRTL || Utils.isDockingIndicatorBeforeRTL(position) && isRTL;\r\n const insertIndex = isDockingBefore ?\r\n paneIndex :\r\n paneIndex + 1;\r\n if (!willCreateNewParent) {\r\n targetParent.panes.splice(insertIndex, 0, paneToDock);\r\n } else {\r\n if (targetParent.panes.length === 1) {\r\n targetParent.orientation = orientation;\r\n targetParent.panes.splice(insertIndex, 0, paneToDock);\r\n } else {\r\n newSplitPane = {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation,\r\n useFixedSize,\r\n panes: isDockingBefore ?\r\n [paneToDock, targetPane] :\r\n [targetPane, paneToDock],\r\n size: targetPane.size\r\n };\r\n targetParent.panes[paneIndex] = newSplitPane;\r\n }\r\n\r\n if (!useFixedSize) {\r\n targetPane.size = undefined;\r\n paneToDock.size = undefined;\r\n } else if (newSplitPane) {\r\n this.checkAndAddPlaceholderPane(newSplitPane, true);\r\n }\r\n\r\n // simplifying nested split panes\r\n const parentSplitPane = this.getParent(targetParent) as IgcSplitPane;\r\n if (parentSplitPane &&\r\n parentSplitPane.type === IgcDockManagerPaneType.splitPane &&\r\n parentSplitPane.panes.length === 1 &&\r\n parentSplitPane.allowEmpty === targetParent.allowEmpty &&\r\n parentSplitPane.size === targetParent.size &&\r\n parentSplitPane.useFixedSize === useFixedSize) {\r\n parentSplitPane.orientation = orientation;\r\n parentSplitPane.panes = targetParent.panes;\r\n }\r\n }\r\n }\r\n\r\n private dockToSplitter() {\r\n const splitterDockPane = this.splitterDockTarget.pane;\r\n const parent = this.getParent(splitterDockPane) as IgcSplitPane;\r\n let insertIndex = parent?.panes.indexOf(splitterDockPane);\r\n\r\n insertIndex =\r\n insertIndex !== -1 ? insertIndex + 1 : this.splitterDockTarget?.index\r\n\r\n if (this.draggedPaneParent?.useFixedSize === true && parent.useFixedSize !== true) {\r\n this.dockManager.draggedPane.size = IGC_DEFAULT_PANE_SIZE_IN_PIXELS;\r\n } else if (parent.useFixedSize === true && (this.draggedPaneParent?.useFixedSize !== true || this.draggedPaneParent?.orientation !== parent.orientation)) {\r\n const newSize = this.getDraggedPanePostDockingSizeInPixels(parent.orientation === IgcSplitPaneOrientation.vertical);\r\n if (newSize) this.dockManager.draggedPane.size = newSize;\r\n }\r\n\r\n parent.panes.splice(insertIndex, 0, this.dockManager.draggedPane);\r\n }\r\n\r\n /**\r\n * Calculates the pixel size that the dragged (floating) pane should have\r\n * after it is docked into the specified parent split pane.\r\n *\r\n * The method determines the appropriate dimension (width or height)\r\n * based on the parent pane's orientation:\r\n * - For a vertical split pane, it returns the height.\r\n * - For a horizontal split pane, it returns the width.\r\n *\r\n * The size is derived from the floating pane's stored floating dimensions\r\n * (`floatingWidth` / `floatingHeight`) if available. Otherwise, it falls back\r\n * to the current DOM bounding rectangle of the dragged pane element.\r\n *\r\n * @private\r\n * @param {boolean} isVertical - Indicates whether the target orientation is vertical.\r\n * @returns {number | undefined} The computed size in pixels to apply after docking,\r\n * or `undefined` if the size cannot be determined.\r\n */\r\n private getDraggedPanePostDockingSizeInPixels(isVertical: boolean) {\r\n const floatingPane = this.dockManager.draggedPane as unknown as IgcFloatingPaneComponent;\r\n if (floatingPane && floatingPane.floatingWidth) {\r\n return isVertical\r\n ? floatingPane.floatingHeight\r\n : floatingPane.floatingWidth;\r\n } else {\r\n const paneRect = (this.dockManager as IgcDockManager).draggedPaneElement?.getBoundingClientRect();\r\n if (paneRect) {\r\n return isVertical\r\n ? paneRect.height\r\n : paneRect.width;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n\r\n public shouldUseFixedSize(pane: IgcDockManagerPane): boolean {\r\n if (pane.type === IgcDockManagerPaneType.splitPane) {\r\n if (pane.useFixedSize) {\r\n return true;\r\n }\r\n\r\n for (let i = 0; i < pane.panes.length; i++) {\r\n if (this.shouldUseFixedSize(pane.panes[i])) {\r\n return true;\r\n }\r\n }\r\n } else if (pane.type === IgcDockManagerPaneType.documentHost) {\r\n this.shouldUseFixedSize(pane.rootPane);\r\n }\r\n\r\n return false;\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 && i.type !== IgcDockManagerPaneType.splitPane)[0];\r\n return maximizedPane;\r\n }\r\n\r\n processLayout() {\r\n this.paneParentMap = new Map<IgcDockManagerPane, IgcDockManagerPane>();\r\n this.unpinnedLocationMap = new Map<IgcContentPane, IgcUnpinnedLocation>();\r\n this.clientContentPanesMap = new Map<string, IgcContentPane>();\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<IgcSplitPane, number>(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 >= 0 ? 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 if (!parentPane.useFixedSize){\r\n childPanes[paneIndex].size = paneSizes[paneIndex] - calcDelta;\r\n }\r\n\r\n this.updateLayout();\r\n }\r\n\r\n togglePin(pane: IgcContentPane, unpinBehavior = IgcPaneActionBehavior.allPanes) {\r\n const newValue = !this.getActualIsPinned(pane);\r\n const parent = this.paneParentMap.get(pane);\r\n const isTabGroup = parent.type === IgcDockManagerPaneType.tabGroupPane;\r\n const panes = isTabGroup && unpinBehavior === IgcPaneActionBehavior.allPanes ?\r\n parent.panes.filter(p => p.allowPinning !== false) :\r\n [pane];\r\n\r\n const isTabGroupPinning = isTabGroup && unpinBehavior === IgcPaneActionBehavior.selectedPane;\r\n\r\n if (isTabGroupPinning && parent.selectedIndex >= parent.panes.filter(p => p.isPinned).length) {\r\n parent.selectedIndex = 0;\r\n }\r\n\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 private checkUseFixedSizeParent(pane: IgcDockManagerPane): IgcDockManagerPane {\r\n const parent = this.getParent(pane);\r\n\r\n if (!parent) {\r\n return null;\r\n }\r\n\r\n // If the pane to close is the last non-placeholder pane of a split pane, close the whole split pane.\r\n // Also check if the pane to close is inside a split pane and close the top split pane that holds the placeholder.\r\n if (parent.type === IgcDockManagerPaneType.splitPane && parent.panes.length === 2) {\r\n const hasPlaceholderEnd = parent.panes.some(p => p.type === IgcDockManagerPaneType.contentPane && p.contentId === \"placeholderEnd\");\r\n\r\n const isValidContentPane = parent.panes.every(p =>\r\n p.type === IgcDockManagerPaneType.contentPane ||\r\n p.type === IgcDockManagerPaneType.tabGroupPane ||\r\n (p.type === IgcDockManagerPaneType.splitPane && p.panes.length === 1 && p.panes[0].type === IgcDockManagerPaneType.contentPane)\r\n );\r\n\r\n if (hasPlaceholderEnd && isValidContentPane) {\r\n return parent;\r\n }\r\n }\r\n\r\n return this.checkUseFixedSizeParent(parent);\r\n }\r\n\r\n closePane(pane: IgcContentPane) {\r\n let paneToRemove: IgcDockManagerPane = pane;\r\n let closeAll = this.dockManager.closeBehavior !== IgcPaneActionBehavior.selectedPane;\r\n\r\n if (pane.type === IgcDockManagerPaneType.contentPane && pane !== this.dockManager.flyoutPane) {\r\n const parent = this.getParent(pane);\r\n const ignoreResizeConstraintPaneTargetParent = this.checkUseFixedSizeParent(pane);\r\n\r\n if (ignoreResizeConstraintPaneTargetParent !== null) {\r\n paneToRemove = ignoreResizeConstraintPaneTargetParent as IgcSplitPane;\r\n } else if (parent.type === IgcDockManagerPaneType.tabGroupPane && closeAll) {\r\n paneToRemove = parent;\r\n }\r\n }\r\n\r\n const paneRemoved = paneToRemove.type === IgcDockManagerPaneType.tabGroupPane || paneToRemove.type === IgcDockManagerPaneType.splitPane ?\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 if (targetPane.type !== IgcDockManagerPaneType.tabGroupPane || targetPane.type !== IgcDockManagerPaneType.splitPane) return;\r\n\r\n for (const cp of this.getChildContentPanes(targetPane).filter(this.hasMaximizedProp)) {\r\n cp.isMaximized = targetPane.isMaximized;\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 (parent.type === IgcDockManagerPaneType.splitPane) {\r\n this.draggedPaneParent = parent;\r\n }\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.topMost ||\r\n position === IgcDockingIndicatorPosition.bottom || position === IgcDockingIndicatorPosition.bottomMost;\r\n const isSplitPaneVertical = Utils.isSplitPaneVertical(rootPane);\r\n const isRTL = this.dockingIndicator && this.dockingIndicator.direction === 'rtl';\r\n\r\n var isDockingBefore = (position === IgcDockingIndicatorPosition.left || position === IgcDockingIndicatorPosition.leftMost) && !isRTL ||\r\n (position === IgcDockingIndicatorPosition.right || position === IgcDockingIndicatorPosition.rightMost) && isRTL ||\r\n position === IgcDockingIndicatorPosition.top || position === IgcDockingIndicatorPosition.topMost;\r\n let insertIndex = isDockingBefore ? 0 : rootPane.panes.length;\r\n\r\n const isEdgeDocking = position === IgcDockingIndicatorPosition.leftMost ||\r\n position === IgcDockingIndicatorPosition.rightMost ||\r\n position === IgcDockingIndicatorPosition.topMost||\r\n position === IgcDockingIndicatorPosition.bottomMost;\r\n\r\n if (isEdgeDocking) {\r\n if (rootPane.useFixedSize === true) {\r\n insertIndex = isDockingBefore ? 1 : rootPane.panes.length - 1;\r\n const isVertical = rootPane.orientation === IgcSplitPaneOrientation.vertical;\r\n const newSize = this.getDraggedPanePostDockingSizeInPixels(isVertical);\r\n if (newSize) paneToDock.size = newSize;\r\n }\r\n\r\n rootPane.panes.splice(insertIndex, 0, paneToDock);\r\n this.updateLayout();\r\n this.processLayout();\r\n return;\r\n }\r\n\r\n if (rootPane.useFixedSize !== true && ((isIndicatorVertical && isSplitPaneVertical) || (!isIndicatorVertical && !isSplitPaneVertical))) {\r\n rootPane.panes.splice(insertIndex, 0, paneToDock);\r\n } else {\r\n if (rootPane.useFixedSize !== true && rootPane.panes.length === 1 && rootPane.panes[0].type === IgcDockManagerPaneType.splitPane) {\r\n rootPane.panes[0].size = undefined;\r\n rootPane.orientation =\r\n rootPane.orientation === IgcSplitPaneOrientation.horizontal ?\r\n IgcSplitPaneOrientation.vertical :\r\n IgcSplitPaneOrientation.horizontal;\r\n rootPane.panes.splice(insertIndex, 0, paneToDock);\r\n } else {\r\n const newRootPane: IgcSplitPane = {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: rootPane.useFixedSize !== true ?\r\n (isSplitPaneVertical ? IgcSplitPaneOrientation.horizontal : IgcSplitPaneOrientation.vertical) :\r\n isIndicatorVertical ? IgcSplitPaneOrientation.vertical : IgcSplitPaneOrientation.horizontal,\r\n useFixedSize: rootPane.useFixedSize,\r\n panes: isDockingBefore ?\r\n [paneToDock, rootPane] :\r\n [rootPane, paneToDock],\r\n };\r\n\r\n layout.rootPane = newRootPane;\r\n }\r\n\r\n if (!rootPane.useFixedSize) {\r\n rootPane.size = undefined;\r\n paneToDock.size = undefined;\r\n }\r\n else {\r\n const isHorizontal = layout.rootPane.orientation === IgcSplitPaneOrientation.horizontal;\r\n const paneContainerRect = (this.dockManager as any).getDockedPanesContainerRect();\r\n paneToDock.size = (isHorizontal ? paneContainerRect?.width / 2 : paneContainerRect?.height / 2) - 2 * this.defaultSplitterSize;\r\n rootPane.size = (isHorizontal ? paneContainerRect.width - paneToDock.size : paneContainerRect.height - paneToDock.size) - 2 * this.defaultSplitterSize;\r\n this.checkAndAddPlaceholderPane(layout.rootPane, true);\r\n }\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 case IgcDockingIndicatorPosition.splitterHorizontal:\r\n case IgcDockingIndicatorPosition.splitterVertical:\r\n this.dockToSplitter();\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 if (!floatingPanes) return;\r\n\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<IgcSplitPane, number>(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, IgcPaneActionBehavior.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, anyPaneIgnoringResizeConstraints: boolean = false): boolean {\r\n if (this.dockManager.maximizedPane ||\r\n (anyPaneIgnoringResizeConstraints && !this.isFloatingPane(this.getRootParent(pane)))) {\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 if (!draggedPane) return false;\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 if (!docked && this.draggedPaneParent && this.dockManager.draggedPane.type === IgcDockManagerPaneType.splitPane && this.dockManager.draggedPane.panes.length === 1) {\r\n this.dockManager.draggedPane.panes[0].size = IGC_DEFAULT_PANE_SIZE_IN_PIXELS;\r\n }\r\n\r\n this.draggedPanes = null;\r\n this.draggedTab = null;\r\n this.draggedPaneParent = 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, anyPaneIgnoringResizeConstraints: boolean = false): boolean {\r\n if (anyPaneIgnoringResizeConstraints && !this.isFloatingPane(this.getRootParent(pane))) {\r\n return false;\r\n }\r\n\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 let parentRect = this.dropTargetParentRect;\r\n\r\n if (parentRect && (dockingPosition === IgcDockingIndicatorPosition.splitterHorizontal || dockingPosition === IgcDockingIndicatorPosition.splitterVertical)) {\r\n if (dockingPosition === IgcDockingIndicatorPosition.splitterHorizontal) {\r\n shadowRect.x = parentRect.x;\r\n shadowRect.y = parentRect.y - 20;\r\n shadowRect.width = parentRect.width;\r\n shadowRect.height = parentRect.height + 40;\r\n } else {\r\n shadowRect.x = parentRect.x - 20;\r\n shadowRect.y = parentRect.y;\r\n shadowRect.width = parentRect.width + 40;\r\n shadowRect.height = parentRect.height;\r\n }\r\n return shadowRect;\r\n }\r\n\r\n const dropTargetPaneInfo = this.dockManager.dropTargetPaneInfo;\r\n const targetRect = dropTargetPaneInfo.targetRect;\r\n if (dropTargetPaneInfo && !parentRect) {\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 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 // reset dragged pane size for preview\r\n let draggedPaneSize = this.getPaneToDock(this.dockManager.draggedPane).size;\r\n if (this.draggedPaneParent?.useFixedSize === true && targetParent.useFixedSize !== true) {\r\n draggedPaneSize = IGC_DEFAULT_PANE_SIZE_IN_PIXELS;\r\n }\r\n\r\n if (targetParent.useFixedSize === true && this.draggedPaneParent?.orientation !== targetParent.orientation) {\r\n const newSize = this.getDraggedPanePostDockingSizeInPixels(targetParent.orientation === IgcSplitPaneOrientation.vertical);\r\n if (newSize) draggedPaneSize = newSize;\r\n }\r\n\r\n draggedPaneSize = draggedPaneSize >= 0 ? draggedPaneSize : IGC_DEFAULT_PANE_SIZE;\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 // take splitter size into account only when split pane has useFixedSize=true\r\n const splitterSize = targetParent.useFixedSize ? this.defaultSplitterSize : 0;\r\n const panesTotalSize = panes.reduce((a, b) => a + (b.size >= 0 ? b.size : IGC_DEFAULT_PANE_SIZE), 0) + (panes.length - 1) * splitterSize;\r\n const beforePanesTotalSize = !isRTL || isIndicatorVertical\r\n ? panes.slice(0, dropTargetIndex).reduce((a, b) => a + (b.size >= 0 ? b.size : IGC_DEFAULT_PANE_SIZE), 0) + dropTargetIndex * splitterSize\r\n : panes.slice(dropTargetIndex, panes.length).reduce((a, b) => a + (b.size >= 0 ? b.size : IGC_DEFAULT_PANE_SIZE), 0) + dropTargetIndex * splitterSize;\r\n const afterPanesTotalSize = !isRTL || isIndicatorVertical\r\n ? panes.slice(0, dropTargetIndex + 1).reduce((a, b) => a + (b.size >= 0 ? b.size : IGC_DEFAULT_PANE_SIZE), 0) + (dropTargetIndex + 1) * splitterSize\r\n : panes.slice(dropTargetIndex + 1, panes.length).reduce((a, b) => a + (b.size >= 0 ? b.size : IGC_DEFAULT_PANE_SIZE), 0) + (dropTargetIndex + 1) * splitterSize;\r\n\r\n // update parent rect for preview when useFixedSize=true\r\n if (targetParent.useFixedSize) {\r\n const rectWithPlaceholder = parentRect;\r\n parentRect = new DOMRect();\r\n parentRect.x = rectWithPlaceholder.x;\r\n parentRect.y = rectWithPlaceholder.y;\r\n parentRect.width = isSplitPaneVertical ? rectWithPlaceholder.width : panesTotalSize + draggedPaneSize;\r\n parentRect.height = isSplitPaneVertical ? panesTotalSize + draggedPaneSize : rectWithPlaceholder.height;\r\n }\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 (targetParent.useFixedSize && targetParent.orientation === IgcSplitPaneOrientation.horizontal) {\r\n shadowRect.width = draggedPaneSize;\r\n } else 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 (targetParent.useFixedSize && targetParent.orientation === IgcSplitPaneOrientation.horizontal) {\r\n shadowRect.width = draggedPaneSize;\r\n shadowRect.x = targetRect.right; // parentRect.right - shadowRect.width;\r\n } else 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 (targetParent.useFixedSize && targetParent.orientation === IgcSplitPaneOrientation.vertical) {\r\n shadowRect.height = draggedPaneSize;\r\n } else 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 (targetParent.useFixedSize && targetParent.orientation === IgcSplitPaneOrientation.vertical) {\r\n shadowRect.height = draggedPaneSize;\r\n shadowRect.y = baseRect.bottom;\r\n } else 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\r\n const panes = this.getSplitPaneVisibleChildren(this.dockManager.layout.rootPane);\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 >= 0 ? b.size : IGC_DEFAULT_PANE_SIZE), 0);\r\n\r\n const useFixedSize = this.dockManager.layout.rootPane.useFixedSize === true;\r\n const isIndicatorVertical = Utils.isDockingIndicatorVertical(this.dockingIndicator.position);\r\n const isSplitPaneVertical = Utils.isSplitPaneVertical(this.dockManager.layout.rootPane);\r\n const isSameSplitPane = !useFixedSize && ((isIndicatorVertical && isSplitPaneVertical) || (!isIndicatorVertical && !isSplitPaneVertical));\r\n const isEmptyDockManager = panes.length === 0;\r\n\r\n let draggedPaneSize = this.getPaneToDock(this.dockManager.draggedPane).size;\r\n draggedPaneSize = !useFixedSize ?\r\n draggedPaneSize >= 0 ? draggedPaneSize : IGC_DEFAULT_PANE_SIZE :\r\n this.getDraggedPanePostDockingSizeInPixels(isSplitPaneVertical);\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 ? (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 case IgcDockingIndicatorPosition.topMost:\r\n shadowRect.x = rootRect.x;\r\n shadowRect.y = rootRect.y;\r\n shadowRect.width = rootRect.width;\r\n shadowRect.height = useFixedSize ? draggedPaneSize : (draggedPaneSize / (draggedPaneSize + panesTotalSize) * rootRect.height);\r\n break;\r\n case IgcDockingIndicatorPosition.bottomMost:\r\n shadowRect.x = rootRect.x;\r\n shadowRect.width = rootRect.width;\r\n shadowRect.height = useFixedSize ? draggedPaneSize : (draggedPaneSize / (draggedPaneSize + panesTotalSize) * rootRect.height);\r\n shadowRect.y = rootRect.bottom - shadowRect.height;\r\n break;\r\n case IgcDockingIndicatorPosition.leftMost:\r\n shadowRect.x = rootRect.x;\r\n shadowRect.y = rootRect.y;\r\n shadowRect.height = rootRect.height;\r\n shadowRect.width = useFixedSize ? draggedPaneSize : (draggedPaneSize / (draggedPaneSize + panesTotalSize) * rootRect.width);\r\n break;\r\n case IgcDockingIndicatorPosition.rightMost:\r\n shadowRect.y = rootRect.y;\r\n shadowRect.height = rootRect.height;\r\n shadowRect.width = useFixedSize ? draggedPaneSize : (draggedPaneSize / (draggedPaneSize + panesTotalSize) * rootRect.width);\r\n shadowRect.x = rootRect.right - shadowRect.width;\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 public isSplitPaneIgnoringResizeConstraints(pane: IgcDockManagerPane): boolean {\r\n return pane && pane.type === IgcDockManagerPaneType.splitPane && pane.useFixedSize;\r\n }\r\n\r\n public isParentUseFixedSize(pane: IgcDockManagerPane): boolean {\r\n const parent = this.getParent(pane);\r\n return this.isSplitPaneIgnoringResizeConstraints(parent);\r\n }\r\n\r\n public checkAndAddPlaceholderPane(pane: IgcDockManagerPane, ignoreNestedPanes = false, _isRoot = false): void {\r\n //Add placeholder pane in every splitPane that ignores resize constraints\r\n if (this.isSplitPaneIgnoringResizeConstraints(pane)) {\r\n const lastPane = (pane as IgcSplitPane).panes.at(-1);\r\n\r\n if (lastPane && (lastPane.type !== IgcDockManagerPaneType.contentPane || (lastPane as IgcContentPane).header !== 'Placeholder')) {\r\n const placeholderPaneBottom: IgcContentPane = {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"placeholderEnd\",\r\n header: 'Placeholder',\r\n allowDocking: false,\r\n allowFloating: false,\r\n allowMaximize: false,\r\n allowPinning: false,\r\n size: 0\r\n };\r\n\r\n (pane as IgcSplitPane).panes.push(placeholderPaneBottom);\r\n }\r\n }\r\n\r\n if (!ignoreNestedPanes && pane.type !== IgcDockManagerPaneType.contentPane && pane.type !== IgcDockManagerPaneType.documentHost && pane.panes) {\r\n pane.panes.forEach(p => this.checkAndAddPlaceholderPane(p));\r\n } else if (pane.type === IgcDockManagerPaneType.documentHost) {\r\n this.checkAndAddPlaceholderPane(pane.rootPane);\r\n }\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",":host {\r\n position: relative;\r\n z-index: 0;\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 max-height: 100vh;\r\n max-width: 100vw;\r\n height: 100%;\r\n width: 100%;\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 overflow-x: auto;\r\n }\r\n\r\n &--vertical {\r\n @extend %pane-container;\r\n flex-direction: column;\r\n overflow-y: auto;\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\r\n.drag-cursor:hover {\r\n cursor: pointer;\r\n}\r\n\r\n// Scrollbar styles\r\n::-webkit-scrollbar {\r\n\theight: $sb-size;\r\n\twidth: $sb-size;\r\n}\r\n\r\n::-webkit-scrollbar-track {\r\n\tbackground: $sb-track-bg-color;\r\n}\r\n\r\n::-webkit-scrollbar-track:hover,\r\n::-webkit-scrollbar-track:active {\r\n\tbackground: $sb-track-bg-color-hover;\r\n}\r\n\r\n::-webkit-scrollbar-corner {\r\n\tbackground: $sb-corner-bg;\r\n\tborder: $sb-corner-border-size solid $sb-corner-border-color;\r\n}\r\n\r\n::-webkit-scrollbar-track-piece {\r\n\tborder: $sb-track-border-size solid $sb-track-border-color;\r\n}\r\n\r\n::-webkit-scrollbar-button:vertical:start:decrement,\r\n::-webkit-scrollbar-button:vertical:end:increment,\r\n::-webkit-scrollbar-button:horizontal:start:decrement,\r\n::-webkit-scrollbar-button:horizontal:end:increment {\r\n\tdisplay: none;\r\n}\r\n\r\n::-webkit-scrollbar-thumb {\r\n\tmin-height: $sb-thumb-min-height;\r\n\tborder-radius: $sb-thumb-border-radius ;\r\n\tborder: $sb-thumb-border-size solid$sb-thumb-border-color;\r\n\tbackground-clip: content-box;\r\n\tbackground-color: $sb-thumb-bg-color;\r\n}\r\n\r\n::-webkit-scrollbar-thumb:hover {\r\n\tbackground-color: $sb-thumb-bg-color-hover;\r\n}\r\n\r\n.resize-target {\r\n border: $resize-target-border-width $resize-target-border-style $resize-target-border-color;\r\n}\r\n","import { Component, Element, Event, EventEmitter, Fragment, Host, Listen, Method, Prop, State, Watch, forceUpdate, h } from '@stencil/core';\r\nimport 'igniteui-trial-watermark';\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, 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 IgcPaneActionBehavior\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<IgcDockManagerPane, HTMLElement>;\r\n private contentPanesElementMap: Map<IgcContentPane, HTMLElement>;\r\n private tabHeadersMap: Map<IgcContentPane, HTMLElement>;\r\n private unpinnedHeadersMap: Map<IgcContentPane, HTMLElement>;\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 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 anyPaneIgnoringResizeConstraints: boolean = false;\r\n private highlightedJoystick: any;\r\n private paneVisibleRect: any;\r\n private splitterDockingIndicator: HTMLIgcSplitterDockingIndicatorComponentElement;\r\n private dockedPanesContainer: HTMLElement;\r\n private autoScrollDirection: { x: number, y: number } = { x: 0, y: 0 };\r\n private isSplitterResizing = false;\r\n private lastPointerEvent: PointerEvent | null = null;\r\n private splitPaneToResize: IgcSplitPane | null = null;\r\n private splitterResizingContext: {\r\n parentPane?: IgcSplitPane;\r\n parentPaneElement?: HTMLElement;\r\n pane?: IgcDockManagerPane;\r\n paneRect?: DOMRect;\r\n sizeSum?: number;\r\n orientation?: IgcSplitPaneOrientation;\r\n accumulatedDelta?: number;\r\n startX?: number;\r\n startY?: number;\r\n splitter?: IgcSplitterComponent;\r\n } = {};\r\n private rafId: number | null = null;\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 documentOnlyDrag: boolean;\r\n\r\n @Element() element: HTMLElement;\r\n\r\n @State() dropTargetPaneInfo: IgcDropTargetPaneInfo;\r\n @State() flyoutPane: IgcContentPane;\r\n @State() private autoScrollInterval: number = null;\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<IgcSplitPane, number>();\r\n @State() contextMenuMeta: IgcContextMenuMetadata;\r\n @State() dropShadowRect: DOMRect;\r\n @State() templates: Map<string, any> = 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: 'always' | 'onHoverOnly' = 'always';\r\n @Prop() showHeaderIconOnHover: 'none' | 'closeOnly' | 'moreOptionsOnly' | 'all' = 'none';\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 @Prop() closeBehavior: IgcPaneActionBehavior = IgcPaneActionBehavior.allPanes;\r\n @Prop() unpinBehavior: IgcPaneActionBehavior = IgcPaneActionBehavior.allPanes;\r\n @Prop() allowSplitterDock = false;\r\n @Prop() allowRootDock = true;\r\n\r\n/**\r\n * Enables changing the mouse cursor when hovering over a tab or pane header.\r\n *\r\n * When set to `true`, the cursor changes from the default to `pointer`,\r\n * indicating that the header can be dragged (e.g., to dock or float the pane).\r\n *\r\n * @default false\r\n */\r\n @Prop() enableDragCursor = false;\r\n\r\n/**\r\n * Specifies which docking orientations should apply the `FixedSize` sizing mode\r\n * when panes are dynamically created via docking.\r\n *\r\n * Possible values:\r\n * - `\"none\"`: Do not apply `FixedSize` on docking (default behavior).\r\n * - `\"vertical\"`: Apply `FixedSize` only when panes are docked vertically.\r\n * - `\"horizontal\"`: Apply `FixedSize` only when panes are docked horizontally.\r\n * - `\"both\"`: Apply `FixedSize` for both vertical and horizontal orientation.\r\n *\r\n * This setting affects only dynamically created panes via user docking actions.\r\n * It does not apply to programmatically created panes or layout restorations.\r\n *\r\n * @default \"none\"\r\n */\r\n @Prop() useFixedSizeOnDock: 'none' | 'vertical' | 'horizontal' | 'both' = 'none';\r\n\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 if (!this.isDragging) {\r\n this.updateLayout();\r\n }\r\n\r\n this.service.processLayout();\r\n\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 draggedPaneElement: HTMLElement;\r\n\r\n @Watch('draggedPane')\r\n draggedPaneChanged() {\r\n if (this.draggedPane) {\r\n this.draggedPaneElement = this.panesElementMap.get(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\r\n this.showDockingIndicators = panes.every(p => p.allowDocking !== false) && !this.anyPaneIgnoringResizeConstraints;\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 /**\r\n * Configuration for edge auto-scrolling behavior during drag & resize operations.\r\n *\r\n * - `edgeThreshold`: Distance in pixels from the container's edge that triggers scrolling.\r\n * - `scrollSpeed`: Number of pixels to scroll per interval (affects scroll rate).\r\n *\r\n * @type {{ edgeThreshold: number, scrollSpeed: number }}\r\n * @default { edgeThreshold: 20, scrollSpeed: 15 }\r\n */\r\n @Prop()\r\n autoScrollConfig = {\r\n edgeThreshold: 20,\r\n scrollSpeed: 15\r\n };\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<IgcPaneHeaderConnectionEventArgs>;\r\n\r\n @Event()\r\n paneHeaderDisconnected: EventEmitter<IgcPaneHeaderConnectionEventArgs>;\r\n\r\n @Event()\r\n tabHeaderConnected: EventEmitter<IgcTabHeaderConnectionEventArgs>;\r\n\r\n @Event()\r\n tabHeaderDisconnected: EventEmitter<IgcTabHeaderConnectionEventArgs>;\r\n\r\n @Event()\r\n splitterResizeStart: EventEmitter<IgcSplitterResizeEventArgs>;\r\n\r\n @Event()\r\n splitterResizeEnd: EventEmitter<IgcSplitterResizeEventArgs>;\r\n\r\n @Event()\r\n paneClose: EventEmitter<IgcPaneCloseEventArgs>;\r\n\r\n @Event()\r\n paneScroll: EventEmitter<IgcPaneScrollEventArgs>;\r\n\r\n @Event()\r\n panePinnedToggle: EventEmitter<IgcPanePinnedEventArgs>;\r\n\r\n @Event()\r\n activePaneChanged: EventEmitter<IgcActivePaneEventArgs>;\r\n\r\n @Event()\r\n paneDragStart: EventEmitter<IgcPaneDragStartEventArgs>;\r\n\r\n @Event()\r\n paneDragOver: EventEmitter<IgcPaneDragOverEventArgs>;\r\n\r\n @Event()\r\n paneDragEnd: EventEmitter<IgcPaneDragEndEventArgs>;\r\n\r\n @Event()\r\n floatingPaneResizeMove: EventEmitter<IgcFloatingPaneResizeMoveEventArgs>;\r\n\r\n @Event()\r\n floatingPaneResizeEnd: EventEmitter<IgcFloatingPaneResizeEventArgs>;\r\n\r\n @Event()\r\n floatingPaneResizeStart: EventEmitter<IgcFloatingPaneResizeEventArgs>;\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 this.reason = null;\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 const hasSplitter = pathHTMLElements[0].className.includes('splitter'); // Ensures clicked element is splitter\r\n if (hasSplitter) {\r\n const splitPaneEl = pathHTMLElements.filter(p => p.tagName.toLowerCase() === \"igc-split-pane-component\")[0];\r\n const splitPane = this.panesElementMap.getByValue(splitPaneEl);\r\n this.splitPaneToResize = (splitPane as IgcSplitPane);\r\n\r\n if (this.flyoutPane) {\r\n const splitterEl = pathHTMLElements.find(\r\n (p) => p.tagName.toLowerCase() === 'igc-splitter-component'\r\n ) as any;\r\n const isFlyoutSplitter = splitterEl?.flyoutLocation !== undefined;\r\n\r\n if (!isFlyoutSplitter) {\r\n this.service.flyoutPane(this.flyoutPane);\r\n }\r\n }\r\n }\r\n }\r\n\r\n @Listen('pointerup')\r\n handlePointerUp() {\r\n this.reason = null;\r\n this.splitPaneToResize = null;\r\n\r\n // Stop continuous loop\r\n this.isSplitterResizing = false;\r\n if (this.rafId) {\r\n cancelAnimationFrame(this.rafId);\r\n this.rafId = null;\r\n }\r\n }\r\n\r\n private startResizeLoop(): void {\r\n const loop = () => {\r\n if (!this.isSplitterResizing) {\r\n this.rafId = null;\r\n return;\r\n }\r\n\r\n this.splitterResizeAndScroll();\r\n this.rafId = requestAnimationFrame(loop);\r\n };\r\n\r\n this.rafId = requestAnimationFrame(loop);\r\n }\r\n\r\n @Listen('contextmenu')\r\n onContextMenu() {\r\n if (this.draggedPane) {\r\n this.service.dockingIndicator = null;\r\n this.draggedPane = null;\r\n this.isValidDrop = true;\r\n requestAnimationFrame(() =>\r\n this.dropShadowRect = null);\r\n }\r\n }\r\n\r\n @Listen('pointermove')\r\n handlePointerMove(event: PointerEvent) {\r\n this.lastPointerEvent = event;\r\n\r\n // check if resize is in progress\r\n if (this.isSplitterResizing && this.splitPaneToResize?.useFixedSize) {\r\n const rect = this.getDockedPanesContainerRect();\r\n // Check if the pointer is outside the bounds\r\n const isOutsideHorizontal = event.pageX < rect.left || event.pageX > rect.right;\r\n const isOutsideVertical = event.pageY < rect.top || event.pageY > rect.bottom;\r\n\r\n const splitPaneElement = this.panesElementMap.get(this.splitPaneToResize);\r\n const isScrollable = this.splitPaneToResize.orientation === IgcSplitPaneOrientation.horizontal && splitPaneElement?.scrollWidth > splitPaneElement?.clientWidth ||\r\n this.splitPaneToResize.orientation === IgcSplitPaneOrientation.vertical && splitPaneElement?.scrollHeight > splitPaneElement?.clientHeight;\r\n\r\n if ((isOutsideHorizontal || isOutsideVertical) && isScrollable) {\r\n if (!this.rafId) this.startResizeLoop();\r\n } else {\r\n // Stop continuous loop\r\n if (this.rafId) {\r\n cancelAnimationFrame(this.rafId);\r\n this.rafId = null;\r\n }\r\n }\r\n }\r\n }\r\n\r\n @Method()\r\n async dropPane(): Promise<boolean> {\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.splitterDockingIndicator = this.element.shadowRoot.querySelector('igc-splitter-docking-indicator-component') as HTMLIgcSplitterDockingIndicatorComponentElement;\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\r\n getDockedPanesContainerRect() {\r\n return this.dockedPanesContainer?.getBoundingClientRect();\r\n }\r\n\r\n private updateLayout(): void {\r\n //Check for useFixedSize in the layout and create a placeholder pane for resizing.\r\n this.service.checkAndAddPlaceholderPane(this.layout.rootPane, false, true);\r\n if (!this.layout.floatingPanes) return;\r\n\r\n for (const p of this.layout.floatingPanes) {\r\n // Do not add a placeholder pane for floating pane's root splitPane\r\n p.panes.forEach(cp => this.service.checkAndAddPlaceholderPane(cp));\r\n\r\n // Should we add a resolved prop instead of setting useFixedSize to false?\r\n // Used to prevent the root parent splitPane of having flex grow and shrink set to 0 which breaks floating pane resizing.\r\n p.useFixedSize = false;\r\n }\r\n }\r\n\r\n private splitterResizeAndScroll(): void {\r\n if (!this.lastPointerEvent) return;\r\n\r\n const ctx = this.splitterResizingContext;\r\n const parentSplitPane = ctx.parentPaneElement;\r\n if (!parentSplitPane || !ctx.splitter) return;\r\n\r\n const panesSizeSum = ctx.sizeSum;\r\n const rect = parentSplitPane.getBoundingClientRect();\r\n\r\n const maxDistance = 100; // px threshold for max autoscroll speed\r\n const baseScrollSpeed = this.autoScrollConfig.scrollSpeed;\r\n\r\n // Distances outside container bounds\r\n const outBottom = this.lastPointerEvent.pageY - (rect.bottom);\r\n const outTop = (rect.top) - this.lastPointerEvent.pageY;\r\n let outRight = this.lastPointerEvent.pageX - (rect.right);\r\n let outLeft = (rect.left) - this.lastPointerEvent.pageX;\r\n const isRTL = this.direction === 'rtl';\r\n\r\n // Scale factor 0 → 1 based on distance outside\r\n const scrollFactor = (dist: number) =>\r\n Math.min(Math.max(dist, 0), maxDistance) / maxDistance;\r\n\r\n const verticalSpeed = scrollFactor(Math.max(outBottom, outTop)) * baseScrollSpeed;\r\n const horizontalSpeed = scrollFactor(Math.max(outRight, outLeft)) * baseScrollSpeed;\r\n\r\n if (isRTL) {\r\n outRight *= -1;\r\n outLeft *= -1;\r\n }\r\n\r\n // Compute resize percentage based on total drag\r\n let deltaPercentage = 0;\r\n if (ctx.orientation === IgcSplitPaneOrientation.vertical) {\r\n if (outBottom > 0) {\r\n deltaPercentage += outBottom / panesSizeSum;\r\n parentSplitPane.scrollTop = Math.min(\r\n parentSplitPane.scrollHeight - parentSplitPane.clientHeight,\r\n parentSplitPane.scrollTop + verticalSpeed\r\n );\r\n }\r\n if (outTop > 0) {\r\n deltaPercentage -= outTop / panesSizeSum;\r\n parentSplitPane.scrollTop = Math.max(\r\n 0,\r\n parentSplitPane.scrollTop - verticalSpeed\r\n );\r\n }\r\n } else {\r\n const scrollRight = () => {\r\n deltaPercentage += outRight / panesSizeSum;\r\n parentSplitPane.scrollLeft = Math.min(\r\n parentSplitPane.scrollWidth - parentSplitPane.clientWidth,\r\n parentSplitPane.scrollLeft + horizontalSpeed\r\n );\r\n };\r\n\r\n const scrollLeft = () => {\r\n deltaPercentage -= outLeft / panesSizeSum;\r\n parentSplitPane.scrollLeft = isRTL ?\r\n Math.max(parentSplitPane.scrollLeft - horizontalSpeed, -parentSplitPane.scrollWidth) :\r\n Math.max(0, parentSplitPane.scrollLeft - horizontalSpeed);\r\n };\r\n\r\n if (isRTL) {\r\n // - `outRight > 0` (pointer past \"right\" visual edge) means scroll should go \"left\" (decrease scrollLeft)\r\n // - `outLeft > 0` (pointer past \"left\" visual edge) means scroll should go \"right\" (increase scrollLeft)\r\n if (outRight > 0) {\r\n scrollLeft();\r\n }\r\n if (outLeft > 0) {\r\n scrollRight();\r\n }\r\n } else { // LTR\r\n // - `outRight > 0` (pointer past right edge) means scroll should go \"right\" (increase scrollLeft)\r\n // - `outLeft > 0` (pointer past left edge) means scroll should go \"left\" (decrease scrollLeft)\r\n if (outRight > 0) {\r\n scrollRight();\r\n }\r\n if (outLeft > 0) {\r\n scrollLeft();\r\n }\r\n }\r\n }\r\n\r\n if (deltaPercentage >= 0) {\r\n ctx.splitter.applyAutoDrag(isRTL);\r\n return;\r\n }\r\n\r\n ctx.accumulatedDelta = deltaPercentage;\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<string, any> = 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 if (this.direction === 'rtl') {\r\n offset *= -1;\r\n }\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) || minSize === 0) : ((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<number>) {\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 previousPane?.classList.remove('resize-target');\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 parent = this.service.getParent(pane);\r\n let offset = this.service.isSplitPaneIgnoringResizeConstraints(parent) ||\r\n this.isPaneSizeWithinConstraints(previousPane, event.detail, orientation, 'previous') ?\r\n this.splitterOffset * event.detail :\r\n 0;\r\n\r\n if (this.direction === 'rtl' && orientation === IgcSplitPaneOrientation.horizontal) {\r\n offset *= -1;\r\n }\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, detail: {splitter: IgcSplitterComponent} }) {\r\n const splitter = event.target;\r\n const splitterEl = splitter as unknown as HTMLElement;\r\n const prevEl = splitterEl.previousElementSibling as HTMLElement;\r\n const orientation = splitter.splitPaneOrientation;\r\n let rect: DOMRect;\r\n\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 prevEl?.classList.add('resize-target');\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 try {\r\n const splitPaneEl = splitterEl.parentElement;\r\n const splitPaneChildren = Array.from(splitPaneEl.children);\r\n const paneComponents = splitPaneChildren.filter(c => c.tagName.toLowerCase() !== 'igc-splitter-component');\r\n const parentPane = this.service.getParent(pane) as IgcSplitPane;\r\n const parentPaneElement = this.panesElementMap.get(parentPane);\r\n const sizeProperty = parentPane.orientation === IgcSplitPaneOrientation.horizontal ? 'offsetWidth' : 'offsetHeight';\r\n const sizeSum = paneComponents.reduce((s, p: HTMLElement) => s + (p as any)[sizeProperty], 0) || 1;\r\n\r\n this.isSplitterResizing = true;\r\n this.splitterResizingContext = {\r\n parentPane,\r\n parentPaneElement,\r\n pane,\r\n sizeSum,\r\n orientation: parentPane.orientation,\r\n accumulatedDelta: 0,\r\n startX: rect.x,\r\n startY: rect.y,\r\n splitter: event.detail.splitter\r\n\r\n };\r\n } catch (e) {\r\n this.isSplitterResizing = false;\r\n this.splitterResizingContext = {};\r\n }\r\n }\r\n\r\n private handleSplitterResizeEnd(parentPane: IgcSplitPane, pane: IgcDockManagerPane, event: CustomEvent<number>) {\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 previousPane?.classList.remove('resize-target');\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 = parentPane.useFixedSize ||\r\n this.isPaneSizeWithinConstraints(previousPane, event.detail, parentPane.orientation, 'previous') &&\r\n this.isPaneSizeWithinConstraints(nextPane, event.detail, parentPane.orientation) ? event.detail : 0;\r\n const accumulatedDelta = this.splitterResizingContext.accumulatedDelta ?? 0;\r\n let offsetPercentage = (this.splitterOffset + accumulatedDelta) * offset / sizeSum;\r\n\r\n if (this.direction === '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 this.isSplitterResizing = false;\r\n this.splitterResizingContext = {};\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 unpinBehavior = !isPinned ? IgcPaneActionBehavior.selectedPane : this.unpinBehavior;\r\n\r\n this.shouldClearActivePane = false;\r\n this.service.togglePin(pane, unpinBehavior);\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<IgcDragStartEventArguments>) {\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, this.anyPaneIgnoringResizeConstraints);\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<IgcDragMoveEventArguments>) {\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<IgcDragMoveEventArguments>) {\r\n this.layout?.rootPane.useFixedSize && this.handleAutoScroll(clientX, clientY);\r\n\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 // After successfull pane drag, check if there is a splitPane with useFixedSize = true\r\n // that is left with a single placeholder pane and remove it.\r\n // This would happen only when the last non placeholder pane of a split pane gets dragged.\r\n if (dragMoved) {\r\n const elements = this.element.shadowRoot.elementsFromPoint(clientX, clientY);\r\n const splitPanes = elements.filter(e => e.tagName.toLowerCase() === 'igc-split-pane-component')\r\n for (const sp of splitPanes) {\r\n const splitPane = this.panesElementMap.getByValue(sp as HTMLElement) as IgcSplitPane;\r\n\r\n if (splitPane.useFixedSize &&\r\n splitPane.panes.length === 1 &&\r\n splitPane.panes[0].type === IgcDockManagerPaneType.contentPane &&\r\n splitPane.panes[0].contentId.startsWith(\"placeholder\")) {\r\n this.service.closePane(splitPane.panes[0]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private handleAutoScroll(clientX: number, clientY: number) {\r\n const SCROLL_ZONE = this.autoScrollConfig.edgeThreshold; // px from edge to start scrolling\r\n const SCROLL_SPEED = this.autoScrollConfig.scrollSpeed; // px per interval\r\n\r\n const rootSplitPane = this.dockedPanesContainer.children[0] as HTMLElement;\r\n if (!rootSplitPane) return;\r\n\r\n const rect = rootSplitPane.getBoundingClientRect();\r\n\r\n let newX = 0, newY = 0; // Use newX, newY to distinguish from this.autoScrollDirection\r\n\r\n if (clientX - rect.left < SCROLL_ZONE) {\r\n newX = -SCROLL_SPEED;\r\n } else if (rect.right - clientX < SCROLL_ZONE) {\r\n newX = SCROLL_SPEED;\r\n }\r\n\r\n if (clientY - rect.top < SCROLL_ZONE) {\r\n newY = -SCROLL_SPEED;\r\n } else if (rect.bottom - clientY < SCROLL_ZONE) {\r\n newY = SCROLL_SPEED;\r\n }\r\n\r\n // Condition to start or change scrolling direction\r\n // Start/Change if:\r\n // 1. The calculated new direction is different from the current active direction, OR\r\n // 2. We've just entered a scroll zone (newX/newY is not 0) AND there's no active interval.\r\n if ((newX !== this.autoScrollDirection.x || newY !== this.autoScrollDirection.y) ||\r\n ((newX !== 0 || newY !== 0) && !this.autoScrollInterval)) {\r\n\r\n this.autoScrollDirection = { x: newX, y: newY }; // Update the stored direction\r\n\r\n // Always clear the existing interval if there is one, before setting a new one\r\n if (this.autoScrollInterval) {\r\n clearInterval(this.autoScrollInterval);\r\n this.autoScrollInterval = null;\r\n }\r\n\r\n // If we are currently in a scroll zone (newX or newY is not 0), start a new interval\r\n if (newX !== 0 || newY !== 0) {\r\n this.autoScrollInterval = window.setInterval(() => {\r\n if (this.autoScrollDirection.x !== 0) rootSplitPane.scrollLeft += this.autoScrollDirection.x;\r\n if (this.autoScrollDirection.y !== 0) rootSplitPane.scrollTop += this.autoScrollDirection.y;\r\n }, 30);\r\n } else {\r\n // If newX and newY are both 0, and we just cleared an interval,\r\n // this means we've moved out of all scroll zones.\r\n // No need to explicitly clear again here, but it's where the logic lands.\r\n }\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 if (this.autoScrollInterval) {\r\n clearInterval(this.autoScrollInterval);\r\n this.autoScrollInterval = null;\r\n this.autoScrollDirection = { x: 0, y: 0 };\r\n }\r\n\r\n\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 this.setSplitterDockingIndicatorVisibility('hidden');\r\n return docked;\r\n }\r\n\r\n public scrollPaneIntoView(pane: IgcDockManagerPane) {\r\n const paneElement = this.panesElementMap.get(pane);\r\n const parentPane = this.service.getRootParent(pane);\r\n const parentElement = this.panesElementMap.get(parentPane);\r\n const containerRect = parentElement.getBoundingClientRect();\r\n const paneRect = paneElement.getBoundingClientRect();\r\n\r\n // Distance of pane top relative to container top\r\n const offsetTop = paneRect.top - containerRect.top;\r\n const offsetLeft = paneRect.left - containerRect.left;\r\n\r\n if (offsetTop < 0 || offsetLeft < 0) {\r\n // Pane is above/left viewport → scroll up/left\r\n this.scheduleAfterRender(() => {\r\n paneElement.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\r\n });\r\n } else if ((offsetTop + paneRect.height > parentElement.clientHeight) || (offsetLeft + paneRect.width > parentElement.clientWidth)) {\r\n // Pane is below/right viewport → scroll down/right\r\n this.scheduleAfterRender(() => {\r\n paneElement.scrollIntoView({ behavior: \"smooth\", block: \"end\" });\r\n });\r\n }\r\n\r\n this.scheduleAfterRender(() => {\r\n this.reason = null;\r\n });\r\n }\r\n\r\n private handleTabHeaderDragStart(pane: IgcContentPane, event: CustomEvent<IgcDragStartEventArguments>) {\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<IgcDragMoveEventArguments>) {\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, this.anyPaneIgnoringResizeConstraints);\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<IgcDragResizeEventArguments>) {\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<IgcDragResizeEventArguments>) {\r\n this.service.resizeFloatingPane(pane, event.detail);\r\n }\r\n\r\n private handleFloatingPaneResizeEnd(pane: IgcSplitPane, event: CustomEvent<IgcDragResizeEventArguments>) {\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 if (this.highlightedJoystick) {\r\n this.highlightedJoystick.style.boxShadow = '';\r\n }\r\n\r\n const elements = clientX && clientY ?\r\n this.element.shadowRoot.elementsFromPoint(clientX, clientY) :\r\n null;\r\n\r\n this.splitterRect = null;\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 // root docking indicator\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 this.highlightedJoystick = dockingIndicatorElement;\r\n this.highlightedJoystick.style.boxShadow = 'inset 0 0 0 3px rgba(0,0,0,0.2), inset 0 0 0 25px rgba(100,149,237,0.2)';\r\n } else {\r\n const edgeIndicatorElement = topElement.closest('igc-edge-docking-indicator-component');\r\n if (edgeIndicatorElement) {\r\n dockingIndicatorElement = edgeIndicatorElement;\r\n this.service.dockingIndicator = {\r\n position: edgeIndicatorElement.position,\r\n isRoot: true,\r\n direction: this.direction\r\n };\r\n\r\n indicatorTarget = edgeIndicatorElement.dropTargetPaneInfo;\r\n\r\n this.highlightedJoystick = edgeIndicatorElement;\r\n this.highlightedJoystick.style.boxShadow = 'inset 0 0 0 3px rgba(0,0,0,0.2), inset 0 0 0 25px rgba(100,149,237,0.2)';\r\n } else {\r\n // regular docking indicator\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 this.highlightedJoystick = joystickIcon;\r\n this.highlightedJoystick.style.boxShadow = 'inset 0 0 0 3px rgba(0,0,0,0.2), inset 0 0 0 25px rgba(100,149,237,0.2)';\r\n }\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 && this.panesElementMap.getByValue(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 const paneRect = paneElement.getBoundingClientRect();\r\n if (dropPane.type === IgcDockManagerPaneType.contentPane) {\r\n this.paneVisibleRect = new DOMRect(\r\n paneRect.x,\r\n paneRect.y,\r\n paneRect.width,\r\n paneRect.height\r\n );\r\n\r\n this.paneVisibleRect = this.reduceRectBasedOnSplitters(this.paneVisibleRect, paneElement);\r\n this.paneVisibleRect = this.reduceRectBasedOnDockManagerBorders(this.paneVisibleRect);\r\n }\r\n\r\n this.dropTargetPaneInfo = {\r\n pane: dropPane,\r\n targetRect: paneRect,\r\n visibleTargetRect: this.paneVisibleRect ?? paneRect,\r\n docHost,\r\n floatingPaneWithoutDocHost,\r\n };\r\n this.paneVisibleRect = null;\r\n } else {\r\n this.dropTargetPaneInfo = null;\r\n }\r\n } else if (this.dropTargetPaneInfo && this.dropTargetPaneInfo.pane === dropPane) {\r\n // If the drop target pane is the same as the previous one, update the targetRect and visibleTargetRect\r\n const paneRect = paneElement.getBoundingClientRect();\r\n this.paneVisibleRect = new DOMRect(\r\n paneRect.x,\r\n paneRect.y,\r\n paneRect.width,\r\n paneRect.height\r\n );\r\n\r\n this.paneVisibleRect = this.reduceRectBasedOnSplitters(this.paneVisibleRect, paneElement);\r\n this.paneVisibleRect = this.reduceRectBasedOnDockManagerBorders(this.paneVisibleRect);\r\n this.dropTargetPaneInfo.targetRect = paneRect;\r\n this.dropTargetPaneInfo.visibleTargetRect = this.paneVisibleRect;\r\n }\r\n } else {\r\n this.dropTargetPaneInfo = null;\r\n }\r\n\r\n if (!this.allowSplitterDock) return;\r\n\r\n // if (clientX, clientY) is less than 20 pixels in either way to the nearest 'igc-splitter-component' element, show the splitterIndicator\r\n const splitters = this.element.shadowRoot.querySelectorAll('igc-splitter-component');\r\n let splitterFound = false;\r\n splitters.forEach(splitter => {\r\n if (splitterFound) { return; }\r\n\r\n let splitterRect = splitter.getBoundingClientRect();\r\n const horizontalDeviation = splitterRect.width < splitterRect.height ? 1 : 0;\r\n const verticalDeviation = splitterRect.width > splitterRect.height ? 1 : 0;\r\n const isOverSplitter = clientX >= splitterRect.left - (horizontalDeviation * 20)\r\n && clientX <= splitterRect.right + (horizontalDeviation * 20)\r\n && clientY >= splitterRect.top - (verticalDeviation * 20)\r\n && clientY <= splitterRect.bottom + (verticalDeviation * 20);\r\n const isSplitterHorizontal = splitterRect.width > splitterRect.height;\r\n\r\n if (isOverSplitter) {\r\n splitterRect = this.reduceRectBasedOnSplitters(splitterRect, splitter);\r\n splitterRect = this.reduceRectBasedOnDockManagerBorders(splitterRect);\r\n\r\n const isOverSplitterVisiblePart = clientX >= splitterRect.left - (horizontalDeviation * 20)\r\n && clientX <= splitterRect.right + (horizontalDeviation * 20)\r\n && clientY >= splitterRect.top - (verticalDeviation * 20)\r\n && clientY <= splitterRect.bottom + (verticalDeviation * 20);\r\n\r\n if (!isOverSplitterVisiblePart) {\r\n this.setSplitterDockingIndicatorVisibility('hidden');\r\n }\r\n\r\n const splitterParent = splitter.parentElement;\r\n const splitterParentIndex = elements.indexOf(splitterParent);\r\n const floatingPane = elements.slice().reverse().find(e => e.tagName.toLowerCase() === 'igc-floating-pane-component');\r\n const floatingPaneIndex = elements.indexOf(floatingPane);\r\n if (floatingPaneIndex > 0 && floatingPaneIndex < splitterParentIndex) {\r\n // there is a floating pane between the splitter area and the cursor\r\n return;\r\n }\r\n\r\n splitterFound = true;\r\n\r\n const splitterCenterX = splitterRect.left + splitterRect.width / 2;\r\n const splitterCenterY = splitterRect.top + splitterRect.height / 2;\r\n\r\n if (!this.splitterDockingIndicator) return;\r\n this.splitterDockingIndicator.style.left = `${splitterCenterX - this.splitterDockingIndicator.clientWidth / 2 - 1}px`;\r\n this.splitterDockingIndicator.style.top = `${splitterCenterY - this.splitterDockingIndicator.clientHeight / 2 - 1}px`;\r\n (this.splitterDockingIndicator as any).position = isSplitterHorizontal ? IgcDockingIndicatorPosition.splitterHorizontal : IgcDockingIndicatorPosition.splitterVertical;\r\n this.setSplitterDockingIndicatorVisibility('visible');\r\n\r\n // check if cursor is over splitterIndicator\r\n if (!dockingIndicatorElement && this.splitterDockingIndicator.style.visibility === 'visible') {\r\n const splitterIndicatorRect = this.splitterDockingIndicator.getBoundingClientRect();\r\n const isOversplitterIndicator = clientX >= splitterIndicatorRect.left && clientX <= splitterIndicatorRect.right &&\r\n clientY >= splitterIndicatorRect.top && clientY <= splitterIndicatorRect.bottom;\r\n if (isOversplitterIndicator) {\r\n dockingIndicatorElement = this.splitterDockingIndicator;\r\n this.service.dockingIndicator = {\r\n position: isSplitterHorizontal ? IgcDockingIndicatorPosition.splitterHorizontal : IgcDockingIndicatorPosition.splitterVertical,\r\n isRoot: false,\r\n direction: this.direction\r\n };\r\n this.highlightedJoystick = this.splitterDockingIndicator;\r\n this.highlightedJoystick.style.boxShadow = 'inset 0 0 0 3px rgba(0,0,0,0.2), inset 0 0 0 25px rgba(100,149,237,0.2)';\r\n\r\n this.service.dropTargetParentRect = splitterRect;\r\n const paneToInsertAfter = this.panesElementMap.getByValue(splitter.previousElementSibling as HTMLElement);\r\n const parent = this.service.getParent(paneToInsertAfter) as IgcSplitPane;\r\n const index = parent?.panes.indexOf(paneToInsertAfter);\r\n this.service.splitterDockTarget = {\r\n pane: paneToInsertAfter,\r\n index: index\r\n };\r\n }\r\n }\r\n } else {\r\n this.setSplitterDockingIndicatorVisibility('hidden');\r\n }\r\n });\r\n }\r\n\r\n private reduceRectBasedOnSplitters(rect: DOMRect, element: HTMLElement): DOMRect {\r\n let reducedRect = rect;\r\n let parentElement = element.parentElement;\r\n while(parentElement) {\r\n if (parentElement.previousElementSibling && parentElement.previousElementSibling?.tagName.toLowerCase() === 'igc-splitter-component') {\r\n const parentPreviousElementSiblingRect = parentElement.previousElementSibling?.getBoundingClientRect();\r\n reducedRect = this.getVisibleRect(reducedRect, parentPreviousElementSiblingRect, parentPreviousElementSiblingRect.width <= 5, true);\r\n }\r\n\r\n if (parentElement.nextElementSibling && parentElement.nextElementSibling?.tagName.toLowerCase() === 'igc-splitter-component') {\r\n const parentNextElementSiblingRect = parentElement.nextElementSibling?.getBoundingClientRect();\r\n reducedRect = this.getVisibleRect(reducedRect, parentNextElementSiblingRect, parentNextElementSiblingRect.width <= 5, false);\r\n }\r\n\r\n parentElement = parentElement.parentElement;\r\n }\r\n\r\n return reducedRect;\r\n }\r\n\r\n private reduceRectBasedOnDockManagerBorders(rect: DOMRect): DOMRect {\r\n let reducedRect = rect;\r\n\r\n const dockManagerRect = this.element.getBoundingClientRect();\r\n const dockManagerLeftRect = new DOMRect(\r\n dockManagerRect.x,\r\n dockManagerRect.y,\r\n 1,\r\n dockManagerRect.height\r\n );\r\n reducedRect = this.getVisibleRect(reducedRect, dockManagerLeftRect, true, true);\r\n const dockManagerRightRect = new DOMRect(\r\n dockManagerRect.right - 1,\r\n dockManagerRect.y,\r\n 1,\r\n dockManagerRect.height\r\n );\r\n reducedRect = this.getVisibleRect(reducedRect, dockManagerRightRect, true, false);\r\n\r\n const dockManagerTopRect = new DOMRect(\r\n dockManagerRect.x,\r\n dockManagerRect.y,\r\n dockManagerRect.width,\r\n 1\r\n );\r\n reducedRect = this.getVisibleRect(reducedRect, dockManagerTopRect, false, true);\r\n const dockManagerBottomRect = new DOMRect(\r\n dockManagerRect.x,\r\n dockManagerRect.bottom - 1,\r\n dockManagerRect.width,\r\n 1\r\n );\r\n reducedRect = this.getVisibleRect(reducedRect, dockManagerBottomRect, false, false);\r\n\r\n return reducedRect;\r\n }\r\n\r\n private setSplitterDockingIndicatorVisibility(value: string) {\r\n if (this.splitterDockingIndicator && this.splitterDockingIndicator.style.visibility !== value) {\r\n this.splitterDockingIndicator.style.visibility = value;\r\n forceUpdate(this);\r\n }\r\n }\r\n\r\n private getVisibleRect(rect: DOMRect, otherRect: DOMRect, isLeftOrRight: boolean, isLeftOrTop: boolean) {\r\n if (!rect || !otherRect || otherRect.width === 0 || otherRect.height === 0) {\r\n return rect;\r\n }\r\n\r\n let visibleRect = rect;\r\n if (isLeftOrRight) {\r\n if (isLeftOrTop && rect.left < otherRect.left && otherRect.right < rect.right) { // right side visible\r\n visibleRect.width = rect.right - otherRect.right;\r\n visibleRect.x = otherRect.right;\r\n }\r\n else if (!isLeftOrTop && rect.left < otherRect.left && otherRect.right < rect.right) { // left side visible\r\n visibleRect.width = otherRect.left - rect.x\r\n }\r\n } else {\r\n if (isLeftOrTop && rect.top < otherRect.top && otherRect.bottom < rect.bottom) { // top side visible\r\n visibleRect.height = rect.bottom - otherRect.bottom;\r\n visibleRect.y = otherRect.bottom;\r\n }\r\n else if (!isLeftOrTop && rect.top < otherRect.top && otherRect.bottom < rect.bottom) { // bottom side visible\r\n visibleRect.height = otherRect.top - rect.y\r\n }\r\n }\r\n\r\n // Ensure the visibleRect is within the bounds of the original rect\r\n if (visibleRect.width < 0 || visibleRect.height < 0) {\r\n return rect; // Element is not visible\r\n }\r\n\r\n return visibleRect;\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.getDockedPanesContainerRect();\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 if(Utils.isDockingIndicatorMost(position as IgcDockingIndicatorPosition)) {\r\n const targetPaneParent = this.layout.rootPane;\r\n\r\n const targetPaneParentRect = this.panesElementMap.has(targetPaneParent) ? this.panesElementMap.get(targetPaneParent).getBoundingClientRect() : null;\r\n rect = targetPaneParentRect;\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<IgcPaneScrollEventArgs>) {\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 !== 'none' &&\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<MouseEvent>) {\r\n if (this.showHeaderIconOnHover === 'none') {\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<number>) {\r\n pane.selectedIndex = event.detail;\r\n }\r\n\r\n private handleHiddenTabSelected(pane: IgcTabGroupPane, event: CustomEvent<number>) {\r\n this.activePane = this.service.getVisibleContentPanes(pane)[event.detail];\r\n }\r\n\r\n private handleSelectedTabOutOfView(pane: IgcTabGroupPane, event: CustomEvent<number>) {\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<KeyboardEvent>) {\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<boolean>) {\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<IgcPaneHeaderElement>) {\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<IgcPaneHeaderElement>) {\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<IgcTabHeaderElement>) {\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<IgcTabHeaderElement>) {\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 <template>\r\n <slot name=\"paneHeaderCloseButton\" onSlotchange={this.updateTemplates}></slot>\r\n <slot name=\"tabHeaderCloseButton\" onSlotchange={this.updateTemplates}></slot>\r\n <slot name=\"closeButton\" onSlotchange={this.updateTemplates}></slot>\r\n <slot name=\"moreTabsButton\" onSlotchange={this.updateTemplates}></slot>\r\n <slot name=\"maximizeButton\" onSlotchange={this.updateTemplates}></slot>\r\n <slot name=\"minimizeButton\" onSlotchange={this.updateTemplates}></slot>\r\n <slot name=\"pinButton\" onSlotchange={this.updateTemplates}></slot>\r\n <slot name=\"unpinButton\" onSlotchange={this.updateTemplates}></slot>\r\n <slot name=\"moreOptionsButton\" onSlotchange={this.updateTemplates}></slot>\r\n <slot name=\"splitterHandle\" onSlotchange={this.updateTemplates}></slot>\r\n </template>\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 <igc-content-pane-component\r\n key={pane.id}\r\n contentId={pane.contentId}\r\n size={pane.size}\r\n isFlyout={isFlyout}\r\n unpinnedSize={pane.unpinnedSize}\r\n disabled={pane.disabled}\r\n isSingleFloating={isSingleFloatingContentPane}\r\n onMouseMove={this.togglePaneHeaderVisibility.bind(this, pane)}\r\n onMouseLeave={this.removeHoveredPane.bind(this)}\r\n parentUseFixedSize={this.service.isParentUseFixedSize(pane)}\r\n ref={el => {\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 <igc-pane-header-component\r\n slot=\"header\"\r\n pane={pane}\r\n isActive={pane === this.activePane}\r\n disabled={pane.disabled && !isSingleFloatingContentPane}\r\n pinned={this.service.getActualIsPinned(pane)}\r\n allowMaximize={this.resolveAllowMaximize(pane)}\r\n maximized={maximized}\r\n allowClose={this.service.getActualAllowClose(pane)}\r\n allowPinning={pane.allowPinning !== false}\r\n isFloating={isFloating}\r\n forcedDrag={forceDrag}\r\n resourceStrings={this.resourceStrings}\r\n onPinToggle={this.handlePinToggle.bind(this, pane)}\r\n onMaximize={this.handleMaximize.bind(this, pane)}\r\n onDragMoved={this.handlePaneDragMove.bind(this)}\r\n onDragStarted={this.handlePaneDragStart.bind(this, isSingleFloatingContentPane ? floatingPane : pane)}\r\n onDragEnded={this.handlePaneDragEnd.bind(this)}\r\n onClose={this.handlePaneClose.bind(this, pane)}\r\n onElementConnected={this.emitPaneHeaderConnected.bind(this, pane)}\r\n onElementDisconnected={this.emitPaneHeaderDisconnected.bind(this, pane)}\r\n onMouseDown={this.handlePaneHeaderMouseDown.bind(this, pane)}\r\n class={{\r\n 'hidden': this.showPaneHeaders === 'onHoverOnly' && this.hoveredPane !== pane,\r\n 'transitioned': this.showPaneHeaders === 'onHoverOnly' && this.hoveredPane === pane,\r\n 'drag-cursor': this.enableDragCursor && !this.isDragging && !(pane.allowDocking === false && pane.allowFloating === false)\r\n }}\r\n >\r\n {(isFloating && pane.floatingHeaderId) ? <slot name={pane.floatingHeaderId}></slot> :\r\n pane.headerId ? <slot name={pane.headerId}></slot> :\r\n pane.header}\r\n </igc-pane-header-component>\r\n <div\r\n class=\"content\"\r\n onMouseDown={this.handlePaneContentMouseDown.bind(this, pane)}\r\n onScroll={this.handlePaneContentScroll.bind(this, pane)}\r\n >\r\n <slot name={pane.contentId}></slot>\r\n </div>\r\n </igc-content-pane-component>\r\n );\r\n }\r\n\r\n private renderSplitter(parentPane: IgcSplitPane, pane: IgcDockManagerPane) {\r\n const scrollSpeed = this.autoScrollConfig?.scrollSpeed;\r\n\r\n return (\r\n <igc-splitter-component\r\n splitPaneOrientation={parentPane.orientation}\r\n onResizeStart={this.handleSplitterResizeStart.bind(this, pane)}\r\n onResizeEnd={this.handleSplitterResizeEnd.bind(this, parentPane, pane)}\r\n onFocusin={this.clearActivePane.bind(this)}\r\n parentUseFixedSize={parentPane.useFixedSize}\r\n scrollSpeed={scrollSpeed}\r\n >\r\n </igc-splitter-component >\r\n );\r\n }\r\n\r\n private renderDocumentHost(docHost: IgcDocumentHost) {\r\n return (\r\n <igc-document-host-component\r\n key={docHost.id}\r\n size={docHost.size}\r\n parentUseFixedSize={this.service.isParentUseFixedSize(docHost)}\r\n ref={el => {\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 </igc-document-host-component>\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 <igc-tabs-component\r\n key={pane.id}\r\n contentIds={contentIds}\r\n size={pane.size}\r\n selectedIndex={selectedIndex}\r\n hasHeaders={!isSingleTab}\r\n parentUseFixedSize={this.service.isParentUseFixedSize(pane)}\r\n maximized={this.maximizedPane === pane}\r\n allowMaximize={position === IgcTabHeadersPosition.top && allowMaximize}\r\n onMaximizeMinimizeFocus={this.clearActivePane.bind(this)}\r\n onMaximize={this.handleMaximize.bind(this, pane)}\r\n onSelectedIndexChanged={this.handleTabSelectedIndexChanged.bind(this, pane)}\r\n onHiddenTabSelected={this.handleHiddenTabSelected.bind(this, pane)}\r\n onSelectedTabOutOfView={this.handleSelectedTabOutOfView.bind(this, pane)}\r\n onRendered={this.handleTabsRendered.bind(this, pane)}\r\n tabHeadersPosition={position}\r\n resourceStrings={this.resourceStrings}\r\n ref={el => {\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 </igc-tabs-component>\r\n );\r\n }\r\n\r\n private renderTabPanel(pane: IgcContentPane, isInDocumentHost: boolean, isFloating: boolean) {\r\n return (\r\n <igc-tab-panel-component\r\n key={pane.id}\r\n disabled={pane.disabled}\r\n onMouseDown={isInDocumentHost ? this.handlePaneContentMouseDown.bind(this, pane) : null}\r\n onSelectedChanged={this.handleTabSelectedChanged.bind(this, pane)}\r\n onScroll={isInDocumentHost ? this.handlePaneContentScroll.bind(this, pane) : null}\r\n >\r\n {isInDocumentHost ?\r\n <slot name={pane.contentId}></slot> :\r\n this.renderContentPane(pane, isFloating, false)}\r\n </igc-tab-panel-component>);\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 <igc-tab-header-component\r\n key={pane.id}\r\n slot=\"tabHeader\"\r\n isActive={pane === this.activePane}\r\n disabled={pane.disabled}\r\n showHeaderIconOnHover={this.showHeaderIconOnHover}\r\n header={pane.header}\r\n resourceStrings={this.resourceStrings}\r\n onDragStarted={this.handleTabHeaderDragStart.bind(this, pane)}\r\n onDragMoved={this.handleTabHeaderDragMove.bind(this, pane)}\r\n onDragEnded={this.handleTabHeaderDragEnd.bind(this, pane)}\r\n onMouseDown={this.handleTabHeaderMouseDown.bind(this, pane)}\r\n onIconKeyDown={this.handleTabIconKeyDown.bind(this, iconName, pane)}\r\n position={position}\r\n onIconClicked={this.handleTabIconClick.bind(this, pane, position, isFloating)}\r\n iconName={iconName}\r\n forcedDrag={forceDrag}\r\n onElementConnected={this.emitTabHeaderConnected.bind(this, pane)}\r\n onElementDisconnected={this.emitTabHeaderDisconnected.bind(this, pane)}\r\n ref={el => {\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 class={{\r\n 'drag-cursor': this.enableDragCursor && !this.isDragging\r\n }}\r\n >\r\n {\r\n pane.tabHeaderId ?\r\n <slot name={pane.tabHeaderId}></slot> :\r\n <span part=\"header-title\" title={pane.header}>{pane.header}</span>\r\n }\r\n </igc-tab-header-component>);\r\n }\r\n\r\n private renderSplitPane(splitPane: IgcSplitPane, isFloating: boolean, isInDocumentHost: boolean) {\r\n if (this.reason === ActionReason.drop && this.activePane && splitPane.useFixedSize && splitPane === this.layout.rootPane) {\r\n requestAnimationFrame(() => {\r\n this.scrollPaneIntoView(this.activePane);\r\n forceUpdate(this);\r\n });\r\n }\r\n\r\n const panes = this.service.getSplitPaneVisibleChildren(splitPane);\r\n return (splitPane.allowEmpty || panes.length > 0) && (\r\n <igc-split-pane-component\r\n key={splitPane.id}\r\n orientation={splitPane.orientation}\r\n size={splitPane.size}\r\n useFixedSize={splitPane.useFixedSize}\r\n parentUseFixedSize={this.service.isParentUseFixedSize(splitPane)}\r\n onRendered={this.handleSplitPaneRendered.bind(this, panes)}\r\n ref={el => {\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 = p.contentId === \"placeholderEnd\" ?\r\n this.renderPlaceholder(p) :\r\n 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 </igc-split-pane-component>\r\n );\r\n }\r\n\r\n private renderPlaceholder(pane: IgcContentPane) {\r\n return (\r\n <igc-content-pane-component\r\n key={pane.id}\r\n contentId={pane.contentId}\r\n size={pane.size}\r\n >\r\n </igc-content-pane-component>\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 <div\r\n class={tabAreaClasses}\r\n part={Utils.partNameMap(tabAreaClasses)}\r\n role=\"tablist\"\r\n aria-orientation={isHorizontal ? 'horizontal' : 'vertical'}\r\n >\r\n {panes.map(p => (\r\n <igc-unpinned-pane-header-component\r\n location={location}\r\n isActive={p === this.activePane}\r\n disabled={p.disabled}\r\n onMouseDown={this.handleUnpinnedTabMouseDown.bind(this, p)}\r\n onKeyDown={this.handleUnpinnedTabKeyDown.bind(this, p)}\r\n onFocus={this.handleUnpinnedHeaderFocus.bind(this, p)}\r\n ref={el => {\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 ? <slot name={p.unpinnedHeaderId} /> : p.header}\r\n </igc-unpinned-pane-header-component>\r\n ))}\r\n </div>\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 <div class={flyoutClasses} style={{ 'z-index': maximized ? '10002' : '2' }}>\r\n {this.renderContentPane(this.flyoutPane, false, true)}\r\n <igc-splitter-component\r\n flyoutLocation={location}\r\n splitPaneOrientation={splitPaneOrientation}\r\n onResizeStart={this.handleSplitterResizeStart.bind(this, this.flyoutPane, )}\r\n onResizeEnd={this.handleFlyoutSplitterResizeEnd.bind(this, this.flyoutPane, splitPaneOrientation)}\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n private renderFloatingPanes() {\r\n return (\r\n <div class=\"floating-panes\" style={{ position: this.maximizedPane ? 'absolute' : 'fixed' }}>\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 <igc-floating-pane-component\r\n key={p.id}\r\n floatingId={p.id}\r\n style={{ zIndex: this.floatingPaneZIndicesMap.get(p).toString() }}\r\n floatingLocation={p.floatingLocation ? p.floatingLocation : { x: 0, y: 0 }}\r\n floatingWidth={p.floatingWidth ? p.floatingWidth : IGC_DEFAULT_PANE_SIZE}\r\n floatingHeight={p.floatingHeight ? p.floatingHeight : IGC_DEFAULT_PANE_SIZE}\r\n hasHeader={hasHeader}\r\n onWndResizeStart={this.handleFloatingPaneResizeStart.bind(this, p)}\r\n onWndResizeMove={this.handleFloatingPaneResizeMove.bind(this, p)}\r\n onWndResizeEnd={this.handleFloatingPaneResizeEnd.bind(this, p)}\r\n onMouseDown={this.handleFloatingPaneMouseDown.bind(this, p)}\r\n class={{\r\n 'maximized': this.maximizedPane === p\r\n }}\r\n maximized={this.maximizedPane === p || containsMaximizedPane}\r\n allowResize={p.floatingResizable ?? this.allowFloatingPanesResize}\r\n >\r\n {hasHeader ?\r\n <igc-pane-header-component\r\n slot=\"header\"\r\n isFloating\r\n isFloatingPaneHeader\r\n forcedDrag={forceDrag}\r\n allowMaximize={this.resolveAllowMaximize(p)}\r\n maximized={this.maximizedPane === p}\r\n resourceStrings={this.resourceStrings}\r\n onDragStarted={this.handlePaneDragStart.bind(this, p)}\r\n onDragMoved={this.handlePaneDragMove.bind(this)}\r\n onDragEnded={this.handlePaneDragEnd.bind(this)}\r\n onClose={this.handleFloatingPaneClose.bind(this, p)}\r\n onMaximize={this.handleMaximize.bind(this, p)}\r\n onFocusin={(this.clearActivePane.bind(this))}\r\n class={{\r\n 'drag-cursor': this.enableDragCursor && !this.isDragging\r\n }}\r\n >\r\n </igc-pane-header-component> : null\r\n }\r\n {this.renderSplitPane(p, true, false)}\r\n </igc-floating-pane-component>\r\n );\r\n })\r\n }\r\n </div>\r\n );\r\n }\r\n\r\n private renderRootDockingIndicator(position: IgcDockingIndicatorPosition) {\r\n return (\r\n <igc-root-docking-indicator-component\r\n position={position}\r\n >\r\n </igc-root-docking-indicator-component>\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 // Only show the joystick indicator if the target drop location is an empty split pane\r\n const hideJoystickIndicator = this.dropTargetPaneInfo &&\r\n (this.dropTargetPaneInfo.pane?.type == \"documentHost\" ||\r\n (this.dropTargetPaneInfo.pane?.type == \"splitPane\" && this.service.getSplitPaneVisibleChildren(this.dropTargetPaneInfo.pane as IgcSplitPane).length));\r\n\r\n const isRootPaneVertical = this.layout.rootPane.orientation === IgcSplitPaneOrientation.vertical;\r\n return (\r\n <div\r\n class=\"docking-indicators-container\"\r\n style={{\r\n display: this.showDockingIndicators ? 'flex' : 'none'\r\n }}\r\n >\r\n {this.allowRootDock && !this.documentOnlyDrag && !this.proximityDock &&\r\n <Fragment>\r\n {this.renderRootDockingIndicator(IgcDockingIndicatorPosition.top)}\r\n <div\r\n style={{\r\n flexGrow: '1',\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-between'\r\n }}\r\n >\r\n {this.renderRootDockingIndicator(startPosition)}\r\n {this.renderRootDockingIndicator(endPosition)}\r\n </div>\r\n {this.renderRootDockingIndicator(IgcDockingIndicatorPosition.bottom)}\r\n </Fragment>\r\n }\r\n {this.dropTargetPaneInfo && !this.allowRootDock && !this.documentOnlyDrag && !this.proximityDock &&\r\n <Fragment>\r\n {this.dropTargetPaneInfo && isRootPaneVertical &&\r\n <div\r\n style={{\r\n flexGrow: '1',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between'\r\n }}\r\n >\r\n {this.renderEdgeDockingIndicator(IgcDockingIndicatorPosition.topMost)}\r\n {this.renderEdgeDockingIndicator(IgcDockingIndicatorPosition.bottomMost)}\r\n </div>\r\n }\r\n {this.dropTargetPaneInfo && !isRootPaneVertical &&\r\n <div\r\n style={{\r\n flexGrow: '1',\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-between'\r\n }}\r\n >\r\n {this.renderEdgeDockingIndicator(this.direction !== 'rtl' ? IgcDockingIndicatorPosition.leftMost : IgcDockingIndicatorPosition.rightMost)}\r\n {this.renderEdgeDockingIndicator(this.direction !== 'rtl' ? IgcDockingIndicatorPosition.rightMost : IgcDockingIndicatorPosition.leftMost)}\r\n </div>\r\n }\r\n </Fragment>\r\n }\r\n {this.dropTargetPaneInfo && !this.proximityDock && !hideJoystickIndicator && this.splitterDockingIndicator?.style.visibility !== 'visible' && !this.autoScrollInterval &&\r\n <igc-joystick-indicator-component\r\n dropTargetPaneInfo={this.dropTargetPaneInfo}\r\n documentOnlyDrag={this.documentOnlyDrag}\r\n allowCenterDock={this.allowInnerDock}\r\n />}\r\n\r\n {this.allowSplitterDock && !this.proximityDock &&\r\n <igc-splitter-docking-indicator-component\r\n style={{\r\n position: 'fixed',\r\n zIndex: '10010',\r\n visibility: 'hidden'\r\n }}\r\n />}\r\n </div>);\r\n }\r\n\r\n private renderContextMenu() {\r\n return this.contextMenuMeta && (\r\n <igc-context-menu-component\r\n onMenuClosed={this.handleContextMenuClosed.bind(this)}\r\n orientation={IgcContextMenuOrientation.bottom}\r\n items={this.contextMenuMeta.menuItems}\r\n target={this.contextMenuMeta.target}\r\n position={this.contextMenuMeta.position}\r\n >\r\n </igc-context-menu-component>);\r\n }\r\n\r\n private renderDropShadow() {\r\n return this.dropShadowRect && (\r\n <div\r\n part=\"docking-preview\"\r\n class=\"drop-shadow\"\r\n style={{\r\n top: `${this.dropShadowRect?.y}px`,\r\n left: `${this.dropShadowRect?.x}px`,\r\n width: `${this.dropShadowRect?.width}px`,\r\n height: `${this.dropShadowRect?.height}px`,\r\n }}\r\n />\r\n );\r\n }\r\n\r\n handlePaneNavigatorClosed(ev: CustomEvent<IgcContentPane>) {\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 <igc-pane-navigator-component\r\n onClosed={this.handlePaneNavigatorClosed.bind(this)}\r\n activePanes={this.navigationPaneMeta.activePanes}\r\n activeDocuments={this.navigationPaneMeta.activeDocuments}\r\n selectedIndex={this.navigationPaneMeta.initialIndex}\r\n previousActivePaneIndex={this.navigationPaneMeta.previousActivePaneIndex}\r\n resourceStrings={this.resourceStrings}\r\n >\r\n </igc-pane-navigator-component>;\r\n }\r\n\r\n private renderEdgeDockingIndicator(position: IgcDockingIndicatorPosition) {\r\n return (\r\n <igc-edge-docking-indicator-component\r\n dropTargetPaneInfo={this.dropTargetPaneInfo}\r\n position={position}\r\n >\r\n </igc-edge-docking-indicator-component>\r\n );\r\n }\r\n\r\n render() {\r\n this.panesElementMap = new TwoWayMap<IgcDockManagerPane, HTMLElement>();\r\n this.tabHeadersMap = new Map<IgcContentPane, HTMLElement>();\r\n this.unpinnedHeadersMap = new Map<IgcContentPane, HTMLElement>();\r\n this.contentPanesElementMap = new Map<IgcContentPane, HTMLElement>();\r\n\r\n return (\r\n <Host\r\n tabindex=\"0\"\r\n role=\"group\"\r\n >\r\n {this.renderButtonsTemplates()}\r\n {this.renderUnpinnedTabArea(IgcUnpinnedLocation.left)}\r\n <div class=\"pane-container--vertical\" style={{ position: this.maximizedPane ? 'absolute' : 'relative' }}>\r\n {this.renderUnpinnedTabArea(IgcUnpinnedLocation.top)}\r\n <div\r\n ref={el => 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 </div>\r\n {this.renderUnpinnedTabArea(IgcUnpinnedLocation.bottom)}\r\n </div>\r\n {this.renderUnpinnedTabArea(IgcUnpinnedLocation.right)}\r\n {this.renderFloatingPanes()}\r\n {this.renderContextMenu()}\r\n {this.renderPaneNavigator()}\r\n <igc-trial-watermark text=\"Trial version of Ignite UI\" style={{ 'z-index': '10005' }}></igc-trial-watermark>\r\n {this.renderDropShadow()}\r\n </Host>\r\n );\r\n }\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 @Prop() parentUseFixedSize: boolean = false;\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 <Host\r\n role=\"group\"\r\n style={{\r\n flex: this.parentUseFixedSize ? `0 0 ${size}px` : `${size} 1 ${size}px`\r\n }}\r\n >\r\n </Host>\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\nimport { IgcDockingIndicatorPosition } from '../dockmanager.public-interfaces';\r\nimport { IgcDropTargetPaneInfo } from '../dockmanager.interfaces';\r\n\r\n/**\r\n * @hidden\r\n */\r\n@Component({\r\n tag: 'igc-edge-docking-indicator-component',\r\n styleUrl: 'edge-docking-indicator-component.scss',\r\n shadow: false,\r\n scoped: true\r\n})\r\nexport class IgcEdgeDockingIndicatorComponent {\r\n @Prop() position: IgcDockingIndicatorPosition;\r\n @Prop() dropTargetPaneInfo: IgcDropTargetPaneInfo;\r\n\r\n render() {\r\n return (\r\n <Host part=\"edge-docking-indicator\"\r\n >\r\n <igc-icon-component\r\n name=\"jump_to_beginning\"\r\n style={{\r\n transform: this.position === IgcDockingIndicatorPosition.topMost ? 'rotate(90deg)' :\r\n this.position === IgcDockingIndicatorPosition.rightMost ? 'rotate(180deg)' :\r\n this.position === IgcDockingIndicatorPosition.bottomMost ? 'rotate(270deg)' : 'rotate(0deg)'\r\n }}\r\n />\r\n </Host>\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<IgcDragResizeEventArguments>;\r\n @Event() wndResizeMove: EventEmitter<IgcDragResizeEventArguments>;\r\n @Event() wndResizeEnd: EventEmitter<IgcDragResizeEventArguments>;\r\n @Element() elem: HTMLElement;\r\n\r\n private handleResizerMove(event: CustomEvent<IgcDragMoveEventArguments>) {\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<IgcDragStartEventArguments>) {\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<IgcDragEventArguments>) {\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 <Host\r\n style={this.maximized ? {} : styles}\r\n role=\"dialog\"\r\n aria-label=\"dialog\"\r\n part=\"floating-window\"\r\n >\r\n {this.allowResize &&\r\n <Fragment>\r\n <igc-resizer-component orientation={IgcResizerLocation.left} onResizerDragStart={this.handleResizeStart.bind(this)} onResizerMoved={this.handleResizerMove.bind(this)} onResizerDragEnd={this.handleResizeEnd.bind(this)}/>\r\n <igc-resizer-component orientation={IgcResizerLocation.top} onResizerDragStart={this.handleResizeStart.bind(this)} onResizerMoved={this.handleResizerMove.bind(this)} onResizerDragEnd={this.handleResizeEnd.bind(this)}/>\r\n <igc-resizer-component orientation={IgcResizerLocation.right} onResizerDragStart={this.handleResizeStart.bind(this)} onResizerMoved={this.handleResizerMove.bind(this)} onResizerDragEnd={this.handleResizeEnd.bind(this)}/>\r\n <igc-resizer-component orientation={IgcResizerLocation.bottom} onResizerDragStart={this.handleResizeStart.bind(this)} onResizerMoved={this.handleResizerMove.bind(this)} onResizerDragEnd={this.handleResizeEnd.bind(this)}/>\r\n </Fragment>}\r\n <slot name=\"header\">\r\n </slot>\r\n <slot></slot>\r\n {this.allowResize &&\r\n <Fragment>\r\n <igc-resizer-component orientation={IgcResizerLocation.topRight} onResizerDragStart={this.handleResizeStart.bind(this)} onResizerMoved={this.handleResizerMove.bind(this)} onResizerDragEnd={this.handleResizeEnd.bind(this)}/>\r\n <igc-resizer-component orientation={IgcResizerLocation.topLeft} onResizerDragStart={this.handleResizeStart.bind(this)} onResizerMoved={this.handleResizerMove.bind(this)} onResizerDragEnd={this.handleResizeEnd.bind(this)}/>\r\n <igc-resizer-component orientation={IgcResizerLocation.bottomRight} onResizerDragStart={this.handleResizeStart.bind(this)} onResizerMoved={this.handleResizerMove.bind(this)} onResizerDragEnd={this.handleResizeEnd.bind(this)}/>\r\n <igc-resizer-component orientation={IgcResizerLocation.bottomLeft} onResizerDragStart={this.handleResizeStart.bind(this)} onResizerMoved={this.handleResizerMove.bind(this)} onResizerDragEnd={this.handleResizeEnd.bind(this)}/>\r\n </Fragment>}\r\n </Host>\r\n );\r\n }\r\n}\r\n","/**\r\n * @hidden\r\n */\r\nexport const icons: any = {\r\n close:\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\r\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\r\n <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n </svg>`,\r\n pin:\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\r\n <path d=\"M15.18 2.25l7.07 7.07-2.83-.01-3.54 3.55.01 4.24-3.53-3.54-5.66 5.66H5.28V17.8l5.66-5.66L7.4 8.61l4.24.01 3.55-3.54-.01-2.83z\"/>\r\n </svg>`,\r\n unpin:\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\r\n <path fill=\"none\" d=\"M0 0h24v25H0V0z\"/>\r\n <path d=\"M11.84 14.08L6.7 19.22H5.28V17.8l5.14-5.14L2 4.26 3.29 3l18 18L20 22.21zm4-.49l-5-5h.73l3.55-3.54v-2.8l7.07 7.07h-2.77l-3.54 3.54z\" />\r\n </svg>`,\r\n first_page:\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\r\n <path d=\"M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z\"/>\r\n <path fill=\"none\" d=\"M24 24H0V0h24v24z\"/>\r\n </svg>`,\r\n chevron_left:\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\r\n <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"/>\r\n <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n </svg>`,\r\n flip:\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\r\n <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n <path d=\"M15 21h2v-2h-2v2zm4-12h2V7h-2v2zM3 5v14c0 1.1.9 2 2 2h4v-2H5V5h4V3H5c-1.1 0-2 .9-2 2zm16-2v2h2c0-1.1-.9-2-2-2zm-8 20h2V1h-2v22zm8-6h2v-2h-2v2zM15 5h2V3h-2v2zm4 8h2v-2h-2v2zm0 8c1.1 0 2-.9 2-2h-2v2z\"/>\r\n </svg>`,\r\n crop_square:\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\r\n <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n <path d=\"M18 4H6c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 14H6V6h12v12z\"/>\r\n </svg>\r\n `,\r\n arrow_drop_down:\r\n `<svg class=\"icon icon-arrow_drop_down\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\r\n <path d=\"M7 10l5 5 5-5z\"></path>\r\n </svg>`,\r\n maximize:\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\r\n <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n <path d=\"M18 4H6c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 14H6V6h12v12z\"/>\r\n </svg>`,\r\n minimize:\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\r\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\r\n <path d=\"M6 19h12v2H6z\"/>\r\n </svg>`,\r\n more:\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\r\n <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n <path d=\"M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"/>\r\n </svg>`,\r\n splitter_docking_indicator:\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"22\" viewBox=\"0 0 20 22\" >\r\n <path d=\"M6 8H9V14H6L10 18L14 14H11V8H14L10 4L6 8Z\" fill=\"#616161\"/>\r\n <path d=\"M20 22V20H0V22H20Z\" fill=\"#616161\"/>\r\n <path d=\"M20 2V0H0V2H20Z\" fill=\"#616161\"/>\r\n </svg>`,\r\n jump_to_beginning:\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\">\r\n <path fill=\"#1f1f1f\" d=\"M760-760v-80h80v80h-80Zm0 640v-80h80v80h-80ZM600-760v-80h80v80h-80Zm0 640v-80h80v80h-80ZM440-760v-80h80v80h-80Zm-160 0v-80h80v80h-80Zm0 640v-80h80v80h-80Zm-160 0v-720h80v720h-80Zm440-200L400-480l160-160 56 56-63 64h287v80H553l63 64-56 56ZM440-120v-80h80v80h-80Z\"/>\r\n </svg>`\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","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 <Host innerHTML={icons[this.name]}>\r\n </Host>\r\n );\r\n }\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 <igc-icon-component name=\"chevron_left\"/>;\r\n } else if (position === IgcDockingIndicatorPosition.left) {\r\n return (\r\n <igc-icon-component\r\n name=\"flip\"\r\n style={{ transform: 'rotate(180deg)' }}\r\n />);\r\n } else if (position === IgcDockingIndicatorPosition.outerTop ||\r\n (position === IgcDockingIndicatorPosition.top && !this.isDocHost)) {\r\n return (\r\n <igc-icon-component\r\n name=\"chevron_left\"\r\n style={{ transform: 'rotate(90deg)' }}\r\n />);\r\n } else if (position === IgcDockingIndicatorPosition.top) {\r\n return (\r\n <igc-icon-component\r\n name=\"flip\"\r\n style={{ transform: 'rotate(270deg)' }}\r\n />);\r\n } else if (position === IgcDockingIndicatorPosition.center) {\r\n return <igc-icon-component name=\"crop_square\"/>;\r\n } else if (position === IgcDockingIndicatorPosition.outerRight ||\r\n (position === IgcDockingIndicatorPosition.right && !this.isDocHost)) {\r\n return (\r\n <igc-icon-component\r\n name=\"chevron_left\"\r\n style={{ transform: 'rotate(180deg)' }}\r\n />);\r\n } else if (position === IgcDockingIndicatorPosition.right) {\r\n return <igc-icon-component name=\"flip\"/>;\r\n } else if (position === IgcDockingIndicatorPosition.outerBottom ||\r\n (position === IgcDockingIndicatorPosition.bottom && !this.isDocHost)) {\r\n return (\r\n <igc-icon-component\r\n name=\"chevron_left\"\r\n style={{ transform: 'rotate(270deg)' }}\r\n />);\r\n } else if (position === IgcDockingIndicatorPosition.bottom) {\r\n return (\r\n <igc-icon-component\r\n name=\"flip\"\r\n style={{ transform: 'rotate(90deg)' }}\r\n />);\r\n } else if (position === IgcDockingIndicatorPosition.splitterHorizontal) {\r\n return <igc-icon-component name=\"splitter_docking_indicator\"/>;\r\n } else if (position === IgcDockingIndicatorPosition.splitterVertical) {\r\n return (\r\n <igc-icon-component\r\n name=\"splitter_docking_indicator\"\r\n style={{ transform: 'rotate(90deg)' }}\r\n />);\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <Host\r\n part=\"docking-indicator\"\r\n class={this.resolveIconDivClass()}\r\n style={{\r\n gridRow: this.resolveGridRow(),\r\n gridColumn: this.resolveGridColumn(),\r\n margin: this.resolveMargin()\r\n }}\r\n >\r\n {!this.empty && this.renderIcon()}\r\n </Host>);\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 <igc-joystick-icon-component\r\n isDocHost={this.isDocHost}\r\n position={position}\r\n direction={Utils.getDirection(this.closestElement('igc-dockmanager', this.element))}\r\n empty\r\n />);\r\n }\r\n\r\n private renderIndicator(position: IgcDockingIndicatorPosition) {\r\n return (\r\n <igc-joystick-icon-component\r\n isDocHost={this.isDocHost}\r\n position={position}\r\n direction={Utils.getDirection(this.closestElement('igc-dockmanager', this.element))}\r\n empty={this.isEmptyCenter(position) || this.isEmptyEdge(position)}\r\n />);\r\n }\r\n\r\n render() {\r\n this.isDocHost = !!this.dropTargetPaneInfo.docHost;\r\n\r\n return (\r\n <Host\r\n style={{\r\n top: `${this.dropTargetPaneInfo.visibleTargetRect.y}px`,\r\n left: `${this.dropTargetPaneInfo.visibleTargetRect.x}px`,\r\n width: `${this.dropTargetPaneInfo.visibleTargetRect.width}px`,\r\n height: `${this.dropTargetPaneInfo.visibleTargetRect.height}px`,\r\n }}\r\n >\r\n <div\r\n class={{\r\n 'indicators-container': true,\r\n 'indicators-container--doc-host': this.isDocHost\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 </div>\r\n </Host>\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, private isInFixedSizeContainer = false) {\r\n this.element.addEventListener('pointerdown', this.handlePointerDown, false);\r\n this.isInFixedSizeContainer = isInFixedSizeContainer;\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 (!this.isInFixedSizeContainer && 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 (!this.isInFixedSizeContainer && 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<IgcDragStartEventArguments>;\r\n @Event() dragEnded: EventEmitter<IgcDragEventArguments>;\r\n @Event() dragMoved: EventEmitter<IgcDragMoveEventArguments>;\r\n @Event() elementConnected: EventEmitter<HTMLIgcPaneHeaderComponentElement>;\r\n @Event() elementDisconnected: EventEmitter<HTMLIgcPaneHeaderComponentElement>;\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 <slot name=\"paneHeaderCloseButton\">\r\n <igc-button-component part=\"pane-header-close-button\">\r\n <igc-icon-component name=\"close\" aria-label={this.resourceStrings.close} title={this.resourceStrings.close} />\r\n </igc-button-component>\r\n </slot>\r\n );\r\n }\r\n\r\n private renderMaximizeButton() {\r\n return (\r\n <slot name=\"paneHeaderMaximizeButton\">\r\n <igc-button-component part=\"pane-header-maximize-button\">\r\n <igc-icon-component\r\n name=\"maximize\"\r\n aria-label={this.resourceStrings.maximize}\r\n title={this.resourceStrings.maximize}\r\n />\r\n </igc-button-component>\r\n </slot>\r\n );\r\n }\r\n\r\n private renderMinimizeButton() {\r\n return (\r\n <div>\r\n <slot name=\"paneHeaderMinimizeButton\">\r\n <igc-button-component part=\"pane-header-minimize-button\">\r\n <igc-icon-component\r\n name=\"minimize\"\r\n aria-label={this.resourceStrings.minimize}\r\n title={this.resourceStrings.minimize}\r\n />\r\n </igc-button-component>\r\n </slot>\r\n </div>\r\n );\r\n }\r\n\r\n private renderPinButton() {\r\n return (\r\n <Fragment>\r\n {!this.isFloating && <slot name=\"paneHeaderPinButton\">\r\n <igc-button-component part=\"pane-header-pin-button\" style={{ display: this.isFloating ? 'none' : 'flex' }}>\r\n <igc-icon-component\r\n name=\"pin\"\r\n aria-label={this.resourceStrings.pin}\r\n title={this.resourceStrings.pin}\r\n />\r\n </igc-button-component> </slot>}\r\n </Fragment>\r\n );\r\n }\r\n\r\n private renderUnpinButton() {\r\n return (\r\n <Fragment>\r\n {!this.isFloating && <slot name=\"paneHeaderUnpinButton\">\r\n <igc-button-component part=\"pane-header-unpin-button\" style={{ display: this.isFloating ? 'none' : 'flex' }}>\r\n <igc-icon-component\r\n name=\"unpin\"\r\n aria-label={this.resourceStrings.unpin}\r\n title={this.resourceStrings.unpin}\r\n />\r\n </igc-button-component>\r\n </slot>}\r\n </Fragment>\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 <Host\r\n part={paneHeaderParts}\r\n exportparts={exportParts}\r\n >\r\n <div part={paneHeaderContentParts} class=\"header-text\">\r\n <slot></slot>\r\n </div>\r\n <div part={paneHeaderActionsParts} class=\"header-actions\" {...{ [IGNORE_DRAG]: true }}>\r\n {this.allowPinning &&\r\n <div onClick={this.pinButtonClick}>\r\n {this.pinned ? this.renderUnpinButton() : this.renderPinButton()}\r\n </div>\r\n }\r\n {this.allowMaximize &&\r\n <div onClick={this.maximizeButtonClick}>\r\n {this.maximized ? this.renderMinimizeButton() : this.renderMaximizeButton()}\r\n </div>\r\n }\r\n {this.allowClose &&\r\n <div onClick={this.closeButtonClick}>\r\n {this.renderCloseButton()}\r\n </div>\r\n }\r\n </div>\r\n </Host>\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<IgcContentPane>;\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.activePanes = this.activePanes.filter(pane => !(pane.contentId.startsWith('placeholder') && pane.size === 0));\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<HTMLElement>(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 <article part=\"group\" class=\"group\">\r\n <h4 part=\"title\" class=\"title\">{title}</h4>\r\n <section class=\"items\">\r\n {items?.map((item: any, index) => {\r\n return (\r\n <div\r\n part={this.resolveItemPart(item, index, isDocHost)}\r\n onMouseDown={() => this.selectItem(index, isDocHost)}\r\n onMouseUp={() => this.closed.emit(this.allItems[this.selectedIndex])}\r\n >\r\n {item.header}\r\n </div>\r\n );\r\n })}\r\n </section>\r\n </article>\r\n );\r\n }\r\n\r\n render() {\r\n return (\r\n <Host\r\n onClick={() => 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 <article\r\n part=\"base\"\r\n class=\"pane-navigator\"\r\n ref={el => this.paneNav = el}\r\n tabIndex={0}\r\n onClick={ev => ev.stopPropagation()}\r\n >\r\n <header part=\"header\">\r\n <h3>{this.allItems[this.selectedIndex]?.header}</h3>\r\n </header>\r\n <section part=\"body\" class=\"body\">\r\n {this.renderItems(this.resourceStrings.panes, this.activePanes, false)}\r\n {this.renderItems(this.resourceStrings.documents, this.activeDocuments, true)}\r\n </section>\r\n </article>\r\n </Host >\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<IgcDragMoveEventArguments>;\r\n @Event() resizerDragStart: EventEmitter<IgcDragStartEventArguments>;\r\n @Event() resizerDragEnd: EventEmitter<IgcDragEventArguments>;\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 <Host\r\n style={{\r\n position: 'absolute',\r\n pointerEvents: 'all',\r\n height: (this.orientation === IgcResizerLocation.left || this.orientation === IgcResizerLocation.right) ?\r\n '100%' : this.isCornerResizer ? '10px' : '5px',\r\n width: (this.orientation === IgcResizerLocation.left || this.orientation === IgcResizerLocation.right) ? '5px' :\r\n this.isCornerResizer ? '10px' : '100%',\r\n cursor: this.orientation === IgcResizerLocation.left || this.orientation === IgcResizerLocation.right ?\r\n 'ew-resize' : (this.orientation === IgcResizerLocation.bottomLeft || this.orientation === IgcResizerLocation.topRight) ?\r\n 'ne-resize' : (this.orientation === IgcResizerLocation.bottomRight || this.orientation === IgcResizerLocation.topLeft) ?\r\n 'nw-resize' : 'ns-resize',\r\n left: this.orientation === IgcResizerLocation.left || this.orientation === IgcResizerLocation.topLeft ||\r\n this.orientation === IgcResizerLocation.bottomLeft ? '-3px' : null,\r\n top: this.orientation === IgcResizerLocation.top || this.orientation === IgcResizerLocation.topLeft ||\r\n this.orientation === IgcResizerLocation.topRight ? '0px' : null,\r\n right: this.orientation === IgcResizerLocation.right || this.orientation === IgcResizerLocation.bottomRight ||\r\n this.orientation === IgcResizerLocation.topRight ? '-3px' : null,\r\n bottom: this.orientation === IgcResizerLocation.bottom || this.orientation === IgcResizerLocation.bottomRight ||\r\n this.orientation === IgcResizerLocation.bottomLeft ? '-3px' : null,\r\n zIndex: '10002'\r\n }}\r\n >\r\n </Host>\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 <Host part=\"root-docking-indicator\">\r\n <igc-icon-component\r\n name=\"first_page\"\r\n style={{\r\n transform: this.position === IgcDockingIndicatorPosition.top ? 'rotate(90deg)' :\r\n this.position === IgcDockingIndicatorPosition.right ? 'rotate(180deg)' :\r\n this.position === IgcDockingIndicatorPosition.bottom ? 'rotate(270deg)' : 'rotate(0deg)'\r\n }}\r\n />\r\n </Host>\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 @Prop() useFixedSize: boolean = false;\r\n @Prop() parentUseFixedSize: boolean = false;\r\n @Event() rendered: EventEmitter<HTMLIgcSplitPaneComponentElement>;\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 <Host\r\n role=\"group\"\r\n style={{\r\n flexDirection: this.orientation === IgcSplitPaneOrientation.horizontal ? 'row' : 'column',\r\n flex: this.parentUseFixedSize ? `0 0 ${size}px` : `${size} 1 ${size}px`\r\n }}\r\n part=\"split-pane\"\r\n />\r\n );\r\n }\r\n}\r\n",":host {\r\n position: relative;\r\n display: flex;\r\n flex: 0 0 $splitter-thickness;\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 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: $resize-handle-thickness;\r\n height: $resize-handle-size;\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: $resize-handle-size;\r\n height: $resize-handle-thickness;\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\nconst SCROLL_SPEED = 15;\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 splitterBaseElement: HTMLElement;\r\n private flyoutMaxSize: number;\r\n private resizeEndEmitted = false;\r\n\r\n private get isRTL(): boolean {\r\n return Utils.getDirection(this.closestElement('igc-dockmanager', this.element)) === 'rtl';\r\n }\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 @Prop() parentUseFixedSize: boolean = false;\r\n @Prop() scrollSpeed: number;\r\n @Event() resizeStart: EventEmitter;\r\n @Event() resizeEnd: EventEmitter<number>;\r\n\r\n connectedCallback() {\r\n this.dragService = new IgcDragService(this.element, this.parentUseFixedSize);\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 event.preventDefault();\r\n this.showDragGhost = false;\r\n this.resizeEndEmitted = 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', { passive: false })\r\n handleMouseDown(event: MouseEvent) {\r\n event.preventDefault();\r\n if (this.splitterBaseElement) {\r\n this.splitterBaseElement.focus();\r\n }\r\n\r\n this.showDragGhost = true;\r\n this.resizeEndEmitted = false;\r\n document.documentElement.addEventListener('mouseup', this.handleMouseUp, false);\r\n this.resizeStart.emit({splitter: this});\r\n }\r\n\r\n private handleMouseUp = () => {\r\n document.documentElement.removeEventListener('mouseup', this.handleMouseUp, false);\r\n this.showDragGhost = false;\r\n if (!this.resizeEndEmitted) {\r\n this.resizeEnd.emit(0);\r\n }\r\n }\r\n\r\n private dragStartHelper(dragOffset: number) {\r\n this.resizeEndEmitted = false;\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 this.resizeEndEmitted = true;\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 let 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 && !this.parentUseFixedSize) {\r\n return;\r\n }\r\n\r\n if (offset >= 0 && endCoordinate > clientCoordinate && !this.parentUseFixedSize) {\r\n return;\r\n }\r\n\r\n if (offset === 0 && this.parentUseFixedSize) {\r\n // Scale factor 0 → 1 based on distance outside\r\n const scrollFactor = (dist: number) =>\r\n Math.min(Math.max(dist, 0), 100) / 100;\r\n const scrollSpeed = this.scrollSpeed ?? SCROLL_SPEED;\r\n if (this.element.parentElement.scrollHeight - this.element.parentElement.clientHeight > 0) {\r\n offset = scrollFactor(args.clientY - rect.bottom) * scrollSpeed;\r\n } else if (this.element.parentElement.scrollWidth - this.element.parentElement.clientWidth > 0) {\r\n offset = (this.isRTL ? -1 : 1) * scrollFactor(args.clientX - rect.left) * scrollSpeed;\r\n }\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 public applyAutoDrag = (isRTL = false) => {\r\n const scrollFactor = (dist: number) => Math.min(Math.max(dist, 0), 100) / 100;\r\n const scrollSpeed = (this.scrollSpeed ?? SCROLL_SPEED) / 2;\r\n if (this.element.parentElement.scrollHeight - this.element.parentElement.clientHeight > 0) {\r\n this.dragOffset += scrollFactor(scrollSpeed) * scrollSpeed;\r\n } else if (this.element.parentElement.scrollWidth - this.element.parentElement.clientWidth > 0) {\r\n this.dragOffset += (isRTL ? -1 : 1) * scrollFactor(scrollSpeed) * scrollSpeed;\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 = this.isRTL;\r\n\r\n const isVertical = this.splitPaneOrientation === IgcSplitPaneOrientation.vertical;\r\n if (this.dragOffset < 0) {\r\n if (!isVertical && this.parentUseFixedSize && rtl) return;\r\n const referencePaneSize = !rtl || isVertical ? this.paneSizes[0] : this.paneSizes[1];\r\n\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 if (this.parentUseFixedSize && (isVertical || (!isVertical && !rtl))) return;\r\n const referencePaneSize = !rtl || isVertical ? this.paneSizes[1] : this.paneSizes[0];\r\n if (referencePaneSize === 0) return;\r\n\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 <Host\r\n part=\"splitter\"\r\n exportparts=\"splitter,\r\n splitter-base,\r\n splitter-ghost\"\r\n style={{\r\n cursor: `${isVertical ? `ns-resize` : `ew-resize`}`\r\n }}\r\n >\r\n <div\r\n part=\"splitter-base\"\r\n class={splitterClasses}\r\n tabIndex={0}\r\n role=\"separator\"\r\n aria-orientation={this.splitPaneOrientation.toString()}\r\n ref={el => this.splitterBaseElement = el}\r\n >\r\n <slot name=\"splitterHandle\" onSlotchange={this.handleSlotChange.bind(this)}></slot>\r\n </div>\r\n {this.showDragGhost &&\r\n <div\r\n part=\"splitter-ghost\"\r\n class={ghostClasses}\r\n style={{\r\n left: `${isVertical ? 0 : this.dragOffset}px`,\r\n top: `${isVertical ? this.dragOffset : 0}px`\r\n }}\r\n ref={el => this.ghostElement = el}\r\n />}\r\n </Host>);\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-splitter-docking-indicator-component',\r\n styleUrl: 'splitter-docking-indicator-component.scss',\r\n shadow: false,\r\n scoped: true\r\n})\r\nexport class IgcSplitterDockingIndicatorComponent {\r\n @Prop() position: IgcDockingIndicatorPosition;\r\n\r\n render() {\r\n return (\r\n <Host part=\"splitter-docking-indicator\">\r\n <igc-icon-component\r\n name=\"splitter_docking_indicator\"\r\n style={{\r\n transform: this.position === IgcDockingIndicatorPosition.splitterVertical ? 'rotate(90deg)' : 'rotate(0deg)'\r\n }}\r\n />\r\n </Host>\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: 'none' | 'closeOnly' | 'moreOptionsOnly' | 'all' = 'none';\r\n\r\n @Event() dragStarted: EventEmitter<IgcDragStartEventArguments>;\r\n @Event() dragMoved: EventEmitter<IgcDragMoveEventArguments>;\r\n @Event() dragEnded: EventEmitter<IgcDragEventArguments>;\r\n @Event() tabMouseDown: EventEmitter;\r\n @Event() iconClicked: EventEmitter<any>;\r\n @Event() iconKeyDown: EventEmitter<KeyboardEvent>;\r\n @Event() elementConnected: EventEmitter<HTMLIgcTabHeaderComponentElement>;\r\n @Event() elementDisconnected: EventEmitter<HTMLIgcTabHeaderComponentElement>;\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 === 'closeOnly' || this.showHeaderIconOnHover === 'all';\r\n const shouldShowButton = this.selected || showHeaderIconOnHover;\r\n const pointerEvents = (this.selected && !this.disabled) || this.showHeaderIconOnHover !== 'none' ? 'all' : 'none';\r\n\r\n return (\r\n shouldShowButton && <slot name=\"tabHeaderCloseButton\" >\r\n <igc-button-component\r\n part=\"tab-header-close-button\"\r\n style={{\r\n pointerEvents\r\n }}\r\n >\r\n <igc-icon-component\r\n name={this.iconName}\r\n aria-label={this.resourceStrings.close}\r\n title={this.resourceStrings.close}\r\n />\r\n </igc-button-component>\r\n </slot>\r\n );\r\n }\r\n\r\n private renderMoreOptionsButton() {\r\n const showHeaderIconOnHover = this.showHeaderIconOnHover === 'moreOptionsOnly' || this.showHeaderIconOnHover === 'all';\r\n const shouldShowButton = this.selected || showHeaderIconOnHover;\r\n const pointerEvents = (this.selected && !this.disabled) || this.showHeaderIconOnHover !== 'none' ? 'all' : 'none';\r\n\r\n return (\r\n shouldShowButton && <slot name=\"tabHeaderMoreOptionsButton\">\r\n <igc-button-component\r\n part=\"tab-header-more-options-button\"\r\n style={{\r\n pointerEvents\r\n }}\r\n >\r\n <igc-icon-component\r\n name={this.iconName}\r\n aria-label={this.resourceStrings.moreOptions}\r\n title={this.resourceStrings.moreOptions}\r\n />\r\n </igc-button-component>\r\n </slot>\r\n );\r\n }\r\n\r\n render() {\r\n const showCloseOnHover = this.iconName === 'close' && (this.showHeaderIconOnHover === 'closeOnly' || this.showHeaderIconOnHover === 'all');\r\n const showMoreOptionsOnHover = this.iconName !== 'close' && (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 <Host\r\n role=\"tab\"\r\n part={parts}\r\n exportparts={exportparts}\r\n aria-label={this.header}\r\n aria-selected={this.selected ? 'true' : 'false'}\r\n aria-disabled={this.disabled ? 'true' : 'false'}\r\n tabIndex={!this.selected || this.disabled ? -1 : 0}\r\n >\r\n <slot></slot>\r\n {\r\n this.iconName &&\r\n <div part={tabParts} onClick={this.iconClick} onKeyDown={this.keyDown} {...{ [IGNORE_DRAG]: true }}>\r\n {this.iconName === 'close' ? this.renderCloseButton() : this.renderMoreOptionsButton()}\r\n </div>\r\n }\r\n </Host>);\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<boolean>;\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 <Host\r\n role=\"tabpanel\"\r\n part={parts}\r\n style={{\r\n display: this.selected ? 'block' : 'none'\r\n }}\r\n >\r\n <slot></slot>\r\n </Host>\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","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 @Prop() parentUseFixedSize: boolean = false;\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<number>;\r\n @Event({ bubbles: false }) hiddenTabSelected: EventEmitter<number>;\r\n @Event({ bubbles: false }) selectedTabOutOfView: EventEmitter<number>;\r\n @Event() rendered: EventEmitter<HTMLIgcTabsComponentElement>;\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 === 'none' || !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 // When a single pane is visible in the tab group pane, the tabHeaders array is empty but we still need to have that one pane selected. #https://github.com/IgniteUI/igniteui-dockmanager/issues/103\r\n else if (this.tabPanels.length === 1) {\r\n this.selectedIndex = 0;\r\n }\r\n }\r\n\r\n private handleHiddenTabsMenuClick(ev: CustomEvent<KeyboardEvent>) {\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 <igc-context-menu-component\r\n onMenuClosed={this.handleContextMenuClosed.bind(this)}\r\n orientation={this.tabHeadersPosition === IgcTabHeadersPosition.top ? IgcContextMenuOrientation.bottom : IgcContextMenuOrientation.top}\r\n items={this.hiddenTabsMenuMeta.menuItems}\r\n target={this.hiddenTabsMenuMeta.target}\r\n position={this.hiddenTabsMenuMeta.position}\r\n >\r\n </igc-context-menu-component>);\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 <div\r\n part={tabStripParts}\r\n style={{\r\n display: this.hasHeaders ? 'flex' : 'none'\r\n }}\r\n class={classes}\r\n onKeyDown={this.onTabKeyDown}\r\n >\r\n <div\r\n class={{\r\n 'tab-headers-container': true,\r\n 'tab-headers-container--wrapped': this.showHiddenTabsMenu\r\n }}\r\n >\r\n <slot name=\"tabHeader\"></slot>\r\n </div>\r\n <div part={tabStripActionsParts} class=\"tab-header-icon-container\">\r\n {this.showHiddenTabsMenu && this.hasHiddenTabs &&\r\n <div onClick={this.handleHiddenTabsMenuClick.bind(this)}>\r\n {this.renderMoreTabsButton()}\r\n </div>}\r\n { !(this.showHiddenTabsMenu && this.hasHiddenTabs) &&\r\n <span style={{ width: '25px' }}></span>\r\n }\r\n {this.allowMaximize &&\r\n <div onClick={this.maximizeButtonClick} onFocusin={this.handleMaximizeMinimizeFocus}>\r\n {this.maximized ? this.renderMinimizeButton() : this.renderMaximizeButton()}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n private renderMoreTabsButton() {\r\n return (\r\n <span>\r\n <slot name=\"tabsMoreButton\">\r\n <igc-button-component part=\"tabs-more-button\">\r\n <igc-icon-component\r\n name=\"more\"\r\n aria-label={this.resourceStrings.moreTabs}\r\n title={this.resourceStrings.moreTabs}\r\n style={{\r\n display: 'block'\r\n }}\r\n />\r\n </igc-button-component>\r\n </slot>\r\n </span>\r\n );\r\n }\r\n\r\n private renderMaximizeButton() {\r\n return (\r\n <div>\r\n <slot name=\"tabsMaximizeButton\">\r\n <igc-button-component part=\"tabs-maximize-button\">\r\n <igc-icon-component\r\n name=\"maximize\"\r\n aria-label={this.resourceStrings.maximize}\r\n title={this.resourceStrings.maximize}\r\n />\r\n </igc-button-component>\r\n </slot>\r\n </div>\r\n );\r\n }\r\n\r\n private renderMinimizeButton() {\r\n return (\r\n <slot name=\"tabsMinimizeButton\">\r\n <igc-button-component part=\"tabs-minimize-button\">\r\n <igc-icon-component\r\n name=\"minimize\"\r\n aria-label={this.resourceStrings.minimize}\r\n title={this.resourceStrings.minimize}\r\n />\r\n </igc-button-component>\r\n </slot>\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 <Host\r\n role=\"tablist\"\r\n style={{\r\n flex: this.parentUseFixedSize ? `0 0 ${size}px` : `${size} 1 ${size}px`\r\n }}\r\n exportparts={exportParts}\r\n part={parts}\r\n >\r\n {top && this.renderTabHeaders(top)}\r\n <div part={tabsContentParts} class=\"content\">\r\n <slot onSlotchange={this.slotChanged.bind(this)}></slot>\r\n </div>\r\n {bottom && this.renderTabHeaders(top)}\r\n {this.renderHiddenTabsMenu()}\r\n </Host>\r\n );\r\n }\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 <Host\r\n part={parts}\r\n role=\"tab\"\r\n aria-disabled={this.disabled ? 'true' : 'false'}\r\n tabindex={this.disabled ? -1 : 0}\r\n >\r\n <slot></slot>\r\n </Host>\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\nigc-dockmanager {\r\n /* --igc-resize-target-border-width: 2px; */\r\n /* --igc-splitter-thickness: 10px; */\r\n --igc-resize-handle-thickness: 10px;\r\n --igc-resize-handle-size: 150px;\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*/\r\n\r\n/* igc-dockmanager {\r\n margin: 10px;\r\n border: 1px solid black;\r\n}\r\n\r\nigc-dockmanager::part(split-pane) {\r\n}\r\n\r\nigc-dockmanager::part(content1) {\r\n flex: 1 0 auto;\r\n}\r\n\r\nigc-dockmanager::part(content2) {\r\n flex: 1 0 auto;\r\n} */\r\n\r\n/* PLACEHOLDER */\r\n/* igc-dockmanager::part(content3) {\r\n min-height: 100px;\r\n} */\r\n\r\n/*igc-dockmanager::part(split-pane) {*/\r\n/* !* height: 2500px; *!*/\r\n/* overflow: scroll;*/\r\n/*}*/\r\n\r\nigc-dockmanager {\r\n margin: 10px;\r\n border: 1px solid black;\r\n}\r\n\r\n/* igc-dockmanager::part(content3)::part(pane-header) {\r\n background-color: red;\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, IgcDockManagerPaneType, IgcDockManagerResourceStrings, IgcDockingIndicatorPosition, IgcFloatingPaneResizeEventArgs, IgcFloatingPaneResizeMoveEventArgs, IgcPaneCloseEventArgs, IgcPaneDragActionType,\r\n IgcPaneDragOverEventArgs, IgcPanePinnedEventArgs, IgcPaneScrollEventArgs, IgcSplitPaneOrientation, 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 layout3: IgcDockManagerLayout = {\r\n rootPane: {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n useFixedSize: true,\r\n panes: [\r\n // {\r\n // type: IgcDockManagerPaneType.splitPane,\r\n // useFixedSize: true,\r\n // orientation: IgcSplitPaneOrientation.vertical,\r\n // size: 300, // PIXELS\r\n // panes: [\r\n // {\r\n // type: IgcDockManagerPaneType.contentPane,\r\n // contentId: 'content1',\r\n // header: 'Content Pane 1',\r\n // size: 500 // PIXELS\r\n // },\r\n // {\r\n // type: IgcDockManagerPaneType.contentPane,\r\n // contentId: 'content2',\r\n // header: 'Content Pane 2',\r\n // size: 300 // PIXELS\r\n // }\r\n // ]\r\n // },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n size: 450, // PIXELS\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n useFixedSize: true,\r\n size: 300, // PIXELS\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content4',\r\n header: 'Content Pane 4',\r\n size: 400 // PIXELS\r\n }\r\n ]\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content7',\r\n header: 'Content Pane 7',\r\n size: 450 // PIXELS\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n floatingPanes: [\r\n // {\r\n // type: IgcDockManagerPaneType.splitPane,\r\n // orientation: IgcSplitPaneOrientation.vertical,\r\n // useFixedSize: true,\r\n // // size: 950, // PIXELS\r\n // floatingHeight: 950,\r\n // floatingWidth: 650,\r\n // floatingLocation: { x: 200, y: 50 },\r\n // panes: [\r\n // {\r\n // type: IgcDockManagerPaneType.splitPane,\r\n // orientation: IgcSplitPaneOrientation.horizontal,\r\n // useFixedSize: true,\r\n // size: 400, // PIXELS\r\n // panes: [\r\n // {\r\n // type: IgcDockManagerPaneType.contentPane,\r\n // contentId: 'content12',\r\n // header: 'Content Pane 12',\r\n // size: 400 // PIXELS\r\n // },\r\n // {\r\n // type: IgcDockManagerPaneType.contentPane,\r\n // contentId: 'content13',\r\n // header: 'Content Pane 13',\r\n // size: 200 // PIXELS\r\n // }\r\n // ]\r\n // },\r\n // {\r\n // type: IgcDockManagerPaneType.splitPane,\r\n // orientation: IgcSplitPaneOrientation.vertical,\r\n // useFixedSize: true,\r\n // size: 500, // PIXELS\r\n // panes: [\r\n // {\r\n // type: IgcDockManagerPaneType.contentPane,\r\n // contentId: 'content11',\r\n // header: 'Content Pane 11',\r\n // size: 300 // PIXELS\r\n // },\r\n // ]\r\n // }\r\n // ]\r\n // }\r\n ]\r\n };\r\n\r\n commonProps = {\r\n allowClose: false,\r\n allowMaximize: false,\r\n allowFloating: false,\r\n allowPinning: false,\r\n };\r\n\r\n bodyRect = document.body.getBoundingClientRect();\r\n bodyWidth = this.bodyRect.width - 36;\r\n bodyHeight = this.bodyRect.height - 36;\r\n\r\n layout4: IgcDockManagerLayout = {\r\n rootPane: {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n useFixedSize: true,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content1',\r\n header: 'Content 1 Header',\r\n size: 260, // PIXELS\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n size: 240 + 10,\r\n panes: [\r\n {\r\n // type: IgcDockManagerPaneType.splitPane,\r\n // orientation: IgcSplitPaneOrientation.vertical,\r\n // size: this.bodyWidth / 3,\r\n // panes: [\r\n // {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content2',\r\n header: 'Content 2 Header',\r\n size: 240, // PIXELS\r\n // },\r\n // ],\r\n },\r\n // {\r\n // type: IgcDockManagerPaneType.splitPane,\r\n // orientation: IgcSplitPaneOrientation.vertical,\r\n // useFixedSize: true,\r\n // size: (this.bodyWidth * 2) / 3,\r\n // panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content3',\r\n header: 'Content 3 Header',\r\n size: 240, // PIXELS\r\n ...this.commonProps\r\n },\r\n // ],\r\n // },\r\n // {\r\n // type: IgcDockManagerPaneType.contentPane,\r\n // contentId: 'content_not_used_2',\r\n // header: 'NOT USED',\r\n // // size: 0,\r\n // ...this.commonProps,\r\n // },\r\n ],\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content4',\r\n header: 'Content 4 Header',\r\n size: 290, // PIXELS\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n size: 240 + 10,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n size: this.bodyWidth / 3,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content5',\r\n header: 'Content 5 Header',\r\n size: 240, // PIXELS\r\n },\r\n ],\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n size: (this.bodyWidth * 2) / 3,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content6',\r\n header: 'Content 6 Header',\r\n size: 240, // PIXELS\r\n },\r\n ],\r\n },\r\n // {\r\n // type: IgcDockManagerPaneType.contentPane,\r\n // contentId: 'content_not_used_3',\r\n // header: 'NOT USED',\r\n // ...this.commonProps,\r\n // },\r\n ],\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n size: 240 + 10,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n size: this.bodyWidth / 2,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content7',\r\n header: 'Content 7 Header',\r\n size: 240, // PIXELS\r\n },\r\n ],\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n size: this.bodyWidth / 2,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content8',\r\n header: 'Content 8 Header',\r\n size: 240, // PIXELS\r\n },\r\n ],\r\n },\r\n // {\r\n // type: IgcDockManagerPaneType.contentPane,\r\n // contentId: 'content_not_used_4',\r\n // header: 'NOT USED',\r\n // ...this.commonProps,\r\n // },\r\n ],\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content9',\r\n header: 'Content 9 Header',\r\n size: 290, // PIXELS\r\n },\r\n // {\r\n // type: IgcDockManagerPaneType.contentPane,\r\n // contentId: 'content_not_used_1',\r\n // header: 'NOT USED',\r\n // ...this.commonProps,\r\n // },\r\n ],\r\n },\r\n floatingPanes: [],\r\n };\r\n\r\n layout5: 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 useFixedSize: true,\r\n size: this.bodyWidth,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content1',\r\n header: 'Content 1 Header',\r\n size: 60, // PIXELS\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n size: 240 + 10,\r\n useFixedSize: true,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n size: this.bodyWidth / 3,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content2',\r\n header: 'Content 2 Header',\r\n size: 240, // PIXELS\r\n },\r\n ],\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n size: (this.bodyWidth * 2) / 3,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content3',\r\n header: 'Content 3 Header',\r\n size: 240, // PIXELS\r\n },\r\n ],\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content_not_used_2',\r\n header: 'NOT USED',\r\n // size: 0,\r\n ...this.commonProps,\r\n },\r\n ],\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content4',\r\n header: 'Content 4 Header',\r\n size: 290, // PIXELS\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n size: 240 + 10,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n size: this.bodyWidth / 3,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content5',\r\n header: 'Content 5 Header',\r\n size: 240, // PIXELS\r\n },\r\n ],\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n size: (this.bodyWidth * 2) / 3,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content6',\r\n header: 'Content 6 Header',\r\n size: 240, // PIXELS\r\n },\r\n ],\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content_not_used_3',\r\n header: 'NOT USED',\r\n ...this.commonProps,\r\n },\r\n ],\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n size: 240 + 10,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n size: this.bodyWidth / 2,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content7',\r\n header: 'Content 7 Header',\r\n size: 240, // PIXELS\r\n },\r\n ],\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n size: this.bodyWidth / 2,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content8',\r\n header: 'Content 8 Header',\r\n size: 240, // PIXELS\r\n },\r\n ],\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content_not_used_4',\r\n header: 'NOT USED',\r\n ...this.commonProps,\r\n },\r\n ],\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content9',\r\n header: 'Content 9 Header',\r\n size: 290, // PIXELS\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content_not_used_1',\r\n header: 'NOT USED',\r\n ...this.commonProps,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n floatingPanes: [],\r\n };\r\n\r\n // UseFizedSize with DCH\r\n layout6: IgcDockManagerLayout = {\r\n rootPane: {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n useFixedSize: true,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n useFixedSize: true,\r\n size: 300,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"content1\",\r\n header: \"Content Pane 1\",\r\n size: 300\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"content2\",\r\n header: \"Content Pane 2\",\r\n size: 700\r\n },\r\n ]\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n useFixedSize: true,\r\n size: 500,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.documentHost,\r\n size: 508,\r\n rootPane: {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n useFixedSize: true,\r\n allowEmpty: true,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.tabGroupPane,\r\n size: 300,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n header: 'MainWindow.xaml',\r\n contentId: 'content7',\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: 'content9',\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 size: 200\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"content3\",\r\n header: \"Content Pane 3\",\r\n size: 400\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"content4\",\r\n header: \"Content Pane 4\",\r\n size: 400\r\n }\r\n ]\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n // useFixedSize: true,\r\n size: 300,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"content5\",\r\n header: \"Content Pane 5\",\r\n size: 500\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"content6\",\r\n header: \"Content Pane 6\",\r\n size: 800\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n floatingPanes: [],\r\n };\r\n\r\n // The layout used in 'useFixedSize' unit tests\r\n layout7: IgcDockManagerLayout = {\r\n rootPane: {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n // useFixedSize: true,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n useFixedSize: true,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"content1\",\r\n header: \"Content Pane 1\",\r\n size: 400\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"content2\",\r\n header: \"Content Pane 2\",\r\n size: 600\r\n },\r\n ]\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.tabGroupPane,\r\n size: 400,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"content3\",\r\n header: \"Content Pane 3\"\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"content4\",\r\n header: \"Content Pane 4\",\r\n }]\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"content5\",\r\n header: \"Content Pane 5\",\r\n size: 600\r\n }\r\n ]\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"content6\",\r\n header: \"Content Pane 6\"\r\n }\r\n ]\r\n },\r\n floatingPanes: [{\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n floatingHeight: 200,\r\n floatingWidth:300,\r\n panes: [{\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: \"content7\",\r\n header: \"Content Pane 7\"\r\n }]\r\n }]\r\n };\r\n\r\n // No floating panes collection\r\n layout8: 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 },\r\n };\r\n\r\n layout: IgcDockManagerLayout = this.layout4;\r\n\r\n private logEnabled = false;\r\n // private hideOnCloseCheckbox: HTMLInputElement;\r\n\r\n /*\r\n private hiddenPanesSelect: HTMLSelectElement;\r\n private savedLayout: string;\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 toggleUseFixedSize() {\r\n // this.dockManager.useFixedSize = !this.dockManager.useFixedSize;\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\r\n private handlePaneClose(event: CustomEvent<IgcPaneCloseEventArgs>) {\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<IgcPaneScrollEventArgs>) {\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<IgcPanePinnedEventArgs>) {\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<IgcActivePaneEventArgs>) {\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<IgcPaneDragOverEventArgs>) {\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<IgcFloatingPaneResizeEventArgs>) {\r\n this.log(event, { ...event.detail });\r\n // event.preventDefault();\r\n }\r\n\r\n private handleFloatingPaneResizeMove(event: CustomEvent<IgcFloatingPaneResizeMoveEventArgs>) {\r\n this.log(event, { ...event.detail });\r\n }\r\n\r\n private handleFloatingPaneResizeEnd(event: CustomEvent<IgcFloatingPaneResizeEventArgs>) {\r\n this.log(event, { ...event.detail });\r\n }\r\n\r\n private handleLayoutChange(event: CustomEvent<any>) {\r\n this.log(event);\r\n }\r\n\r\n private reassignLayout(): void {\r\n console.log('Reassigning layout');\r\n this.dockManager.layout = {...this.layout3};\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 (<Host>\r\n {/*<div>*/}\r\n {/* <button onClick={() => this.saveLayout()}>Save Layout</button>*/}\r\n {/* <button onClick={() => this.loadLayout()}>Load Layout</button>*/}\r\n {/* <button onClick={() => this.setActivePane()}>Set Active Pane</button>*/}\r\n {/* <button onClick={() => this.addPane()}>Add Floating Pane</button>*/}\r\n {/* <button onClick={() => this.addTab()}>Add Tab Pane</button>*/}\r\n {/* <button onClick={() => this.disableContentPane()}>Disable Tab Pane</button>*/}\r\n {/* <button onClick={() => this.focusPane()}>Focus Pane</button>*/}\r\n {/* <button onClick={() => this.toggleProximityDock()}>Toggle Proximity Dock</button>*/}\r\n {/* <input*/}\r\n {/* id=\"hideOnClose\"*/}\r\n {/* type=\"checkbox\"*/}\r\n {/* style={{ marginLeft: '20px' }}*/}\r\n {/* ref={el => this.hideOnCloseCheckbox = el}*/}\r\n {/* />*/}\r\n {/* <label htmlFor=\"hideOnClose\">Hide on close</label>*/}\r\n {/* <span style={{ marginLeft: '20px' }}>Hidden Panes:</span>*/}\r\n {/* <select*/}\r\n {/* style={{ width: '150px' }}*/}\r\n {/* ref={el => this.hiddenPanesSelect = el}*/}\r\n {/* >*/}\r\n {/* {this.hiddenPanes.map(p => {*/}\r\n {/* return (*/}\r\n {/* <option value={p.id}>{p.header}</option>*/}\r\n {/* );*/}\r\n {/* })}*/}\r\n {/* </select>*/}\r\n {/* <button onClick={() => this.showPane()}>Show Pane</button>*/}\r\n {/* <button onClick={() => this.showAllPanes()}>Show All Panes</button>*/}\r\n {/* <button onClick={() => this.toggleInBoundaries()}>Toggle In Boundaries</button>*/}\r\n {/*</div>*/}\r\n {/* <button onClick={() => this.toggleUseFixedSize()}>Toggle useFixedSize</button> */}\r\n <button onClick={() => this.reassignLayout()}>Reassign</button>\r\n <igc-dockmanager\r\n layout={this.layout}\r\n onPaneClose={this.handlePaneClose.bind(this)}\r\n onPaneScroll={this.handlePaneScroll.bind(this)}\r\n onPanePinnedToggle={this.handlePinnedToggle.bind(this)}\r\n onActivePaneChanged={this.handleActivePaneChanged.bind(this)}\r\n onPaneDragStart={this.handleDragStart.bind(this)}\r\n onPaneDragOver={this.handleDragOver.bind(this)}\r\n onPaneDragEnd={this.handleDragEnd.bind(this)}\r\n onSplitterResizeStart={this.handleSplitterResizeStart.bind(this)}\r\n onSplitterResizeEnd={this.handleSplitterResizeEnd.bind(this)}\r\n onFloatingPaneResizeStart={this.handleFloatingPaneResizeStart.bind(this)}\r\n onFloatingPaneResizeMove={this.handleFloatingPaneResizeMove.bind(this)}\r\n onFloatingPaneResizeEnd={this.handleFloatingPaneResizeEnd.bind(this)}\r\n onLayoutChange={this.handleLayoutChange.bind(this)}\r\n // resourceStrings={this.getCustomResourceStrings()}\r\n ref={el => this.dockManager = el}\r\n // allowFloatingPanesResize={false}\r\n showHeaderIconOnHover={'closeOnly'}\r\n useFixedSizeOnDock={'vertical'}\r\n // contextMenuPosition='start'\r\n // allowInnerDock={false}\r\n // proximityDock={true}\r\n // showPaneHeaders='onHoverOnly'\r\n allowSplitterDock={true}\r\n allowRootDock={false}\r\n enableDragCursor={true}\r\n >\r\n <div slot=\"header1\">\r\n <span style={{ color: 'red' }}>Solution Explorer</span>\r\n <button>H</button>\r\n </div>\r\n <div slot=\"tabHeader1\">\r\n <span style={{ color: 'orange' }}>Solution Explorer</span>\r\n <button>T</button>\r\n </div>\r\n <div slot=\"unpinnedHeader1\">\r\n <span style={{ color: 'blue' }}>Solution Explorer</span>\r\n <button>U</button>\r\n </div>\r\n\r\n <div slot=\"toolboxHeader\">\r\n <span>[U] Toolbox</span>\r\n </div>\r\n <div slot=\"teamExplorerHeader\">\r\n <span>[U] Team Explorer</span>\r\n </div>\r\n\r\n <button style={{ background: 'pink' }} slot=\"tabHeaderCloseButton\">Y</button>\r\n {/* <button style={{ background: 'aqua' }} slot=\"paneHeaderCloseButton\">X</button>\r\n <button style={{ background: 'pink' }} slot=\"tabHeaderCloseButton\">Y</button>\r\n <button style={{ background: 'lightblue' }} slot=\"moreTabsButton\">...</button>\r\n <button style={{ background: 'aqua' }} slot=\"maximizeButton\">︿</button>\r\n <button style={{ background: 'mediumvioletred' }} slot=\"minimizeButton\">﹀</button>\r\n <button style={{ background: 'lightgreen' }} slot=\"pinButton\">P</button>\r\n <button style={{ background: 'red' }} slot=\"unpinButton\">U</button>\r\n <button style={{ background: 'blue' }} slot=\"moreOptionsButton\"><div><span>≣</span></div></button>\r\n <button style={{ background: 'green' }} slot=\"splitterHandle\">S</button> */}\r\n<div slot=\"content1\">Content 1</div>\r\n<div slot=\"content2\">Content 2</div>\r\n<div slot=\"content3\">Content 3</div>\r\n<div slot=\"content4\">Content 4</div>\r\n<div slot=\"content5\">Content 5</div>\r\n<div slot=\"content6\">Content 6</div>\r\n<div slot=\"content7\">Content 7</div>\r\n<div slot=\"content8\">Content 8</div>\r\n<div slot=\"content9\">Content 9</div>\r\n\r\n<div slot=\"content_not_used_1\"></div>\r\n<div slot=\"content_not_used_2\"></div>\r\n<div slot=\"content_not_used_3\"></div>\r\n<div slot=\"content_not_used_4\"></div>\r\n\r\n </igc-dockmanager>\r\n </Host>);\r\n }\r\n}\r\n"],"version":3}