@deephaven/golden-layout 0.19.2-beta.5 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/dist/LayoutManager.d.ts +313 -0
  2. package/dist/LayoutManager.d.ts.map +1 -0
  3. package/dist/LayoutManager.js +468 -450
  4. package/dist/LayoutManager.js.map +1 -1
  5. package/dist/base.d.ts +16 -0
  6. package/dist/base.d.ts.map +1 -0
  7. package/dist/base.js +6 -6
  8. package/dist/base.js.map +1 -1
  9. package/dist/config/Config.d.ts +146 -0
  10. package/dist/config/Config.d.ts.map +1 -0
  11. package/dist/config/{defaultConfig.js → Config.js} +6 -6
  12. package/dist/config/Config.js.map +1 -0
  13. package/dist/config/ItemConfig.d.ts +66 -0
  14. package/dist/config/ItemConfig.d.ts.map +1 -0
  15. package/dist/config/ItemConfig.js +14 -0
  16. package/dist/config/ItemConfig.js.map +1 -0
  17. package/dist/config/index.d.ts +3 -0
  18. package/dist/config/index.d.ts.map +1 -0
  19. package/dist/config/index.js +2 -6
  20. package/dist/config/index.js.map +1 -1
  21. package/dist/container/ItemContainer.d.ts +91 -0
  22. package/dist/container/ItemContainer.d.ts.map +1 -0
  23. package/dist/container/ItemContainer.js +110 -85
  24. package/dist/container/ItemContainer.js.map +1 -1
  25. package/dist/container/index.d.ts +3 -0
  26. package/dist/container/index.d.ts.map +1 -0
  27. package/dist/container/index.js +2 -4
  28. package/dist/container/index.js.map +1 -1
  29. package/dist/controls/BrowserPopout.d.ts +83 -0
  30. package/dist/controls/BrowserPopout.d.ts.map +1 -0
  31. package/dist/controls/BrowserPopout.js +135 -101
  32. package/dist/controls/BrowserPopout.js.map +1 -1
  33. package/dist/controls/DragProxy.d.ts +67 -0
  34. package/dist/controls/DragProxy.d.ts.map +1 -0
  35. package/dist/controls/DragProxy.js +135 -110
  36. package/dist/controls/DragProxy.js.map +1 -1
  37. package/dist/controls/DragSource.d.ts +30 -0
  38. package/dist/controls/DragSource.d.ts.map +1 -0
  39. package/dist/controls/DragSource.js +37 -29
  40. package/dist/controls/DragSource.js.map +1 -1
  41. package/dist/controls/DragSourceFromEvent.d.ts +30 -0
  42. package/dist/controls/DragSourceFromEvent.d.ts.map +1 -0
  43. package/dist/controls/DragSourceFromEvent.js +49 -36
  44. package/dist/controls/DragSourceFromEvent.js.map +1 -1
  45. package/dist/controls/DropTargetIndicator.d.ts +14 -0
  46. package/dist/controls/DropTargetIndicator.d.ts.map +1 -0
  47. package/dist/controls/DropTargetIndicator.js +18 -14
  48. package/dist/controls/DropTargetIndicator.js.map +1 -1
  49. package/dist/controls/Header.d.ts +145 -0
  50. package/dist/controls/Header.d.ts.map +1 -0
  51. package/dist/controls/Header.js +414 -271
  52. package/dist/controls/Header.js.map +1 -1
  53. package/dist/controls/HeaderButton.d.ts +9 -0
  54. package/dist/controls/HeaderButton.d.ts.map +1 -0
  55. package/dist/controls/HeaderButton.js +19 -13
  56. package/dist/controls/HeaderButton.js.map +1 -1
  57. package/dist/controls/Splitter.d.ts +12 -0
  58. package/dist/controls/Splitter.d.ts.map +1 -0
  59. package/dist/controls/Splitter.js +36 -20
  60. package/dist/controls/Splitter.js.map +1 -1
  61. package/dist/controls/Tab.d.ts +91 -0
  62. package/dist/controls/Tab.d.ts.map +1 -0
  63. package/dist/controls/Tab.js +131 -119
  64. package/dist/controls/Tab.js.map +1 -1
  65. package/dist/controls/TransitionIndicator.d.ts +25 -0
  66. package/dist/controls/TransitionIndicator.d.ts.map +1 -0
  67. package/dist/controls/TransitionIndicator.js +53 -39
  68. package/dist/controls/TransitionIndicator.js.map +1 -1
  69. package/dist/controls/index.d.ts +11 -0
  70. package/dist/controls/index.d.ts.map +1 -0
  71. package/dist/controls/index.js +10 -22
  72. package/dist/controls/index.js.map +1 -1
  73. package/dist/errors/ConfigurationError.d.ts +6 -0
  74. package/dist/errors/ConfigurationError.d.ts.map +1 -0
  75. package/dist/errors/ConfigurationError.js +15 -8
  76. package/dist/errors/ConfigurationError.js.map +1 -1
  77. package/dist/errors/index.d.ts +2 -0
  78. package/dist/errors/index.d.ts.map +1 -0
  79. package/dist/errors/index.js +1 -4
  80. package/dist/errors/index.js.map +1 -1
  81. package/dist/index.d.ts +9 -0
  82. package/dist/index.d.ts.map +1 -0
  83. package/dist/index.js +7 -1
  84. package/dist/index.js.map +1 -1
  85. package/dist/items/AbstractContentItem.d.ts +233 -0
  86. package/dist/items/AbstractContentItem.d.ts.map +1 -0
  87. package/dist/items/AbstractContentItem.js +284 -242
  88. package/dist/items/AbstractContentItem.js.map +1 -1
  89. package/dist/items/Component.d.ts +30 -0
  90. package/dist/items/Component.d.ts.map +1 -0
  91. package/dist/items/Component.js +61 -42
  92. package/dist/items/Component.js.map +1 -1
  93. package/dist/items/Root.d.ts +18 -0
  94. package/dist/items/Root.d.ts.map +1 -0
  95. package/dist/items/Root.js +68 -38
  96. package/dist/items/Root.js.map +1 -1
  97. package/dist/items/RowOrColumn.d.ts +157 -0
  98. package/dist/items/RowOrColumn.d.ts.map +1 -0
  99. package/dist/items/RowOrColumn.js +219 -187
  100. package/dist/items/RowOrColumn.js.map +1 -1
  101. package/dist/items/Stack.d.ts +108 -0
  102. package/dist/items/Stack.d.ts.map +1 -0
  103. package/dist/items/Stack.js +218 -151
  104. package/dist/items/Stack.js.map +1 -1
  105. package/dist/items/index.d.ts +8 -0
  106. package/dist/items/index.d.ts.map +1 -0
  107. package/dist/items/index.js +7 -12
  108. package/dist/items/index.js.map +1 -1
  109. package/dist/utils/BubblingEvent.d.ts +8 -0
  110. package/dist/utils/BubblingEvent.d.ts.map +1 -0
  111. package/dist/utils/BubblingEvent.js +18 -9
  112. package/dist/utils/BubblingEvent.js.map +1 -1
  113. package/dist/utils/ConfigMinifier.d.ts +21 -0
  114. package/dist/utils/ConfigMinifier.d.ts.map +1 -0
  115. package/dist/utils/ConfigMinifier.js +121 -121
  116. package/dist/utils/ConfigMinifier.js.map +1 -1
  117. package/dist/utils/DragListener.d.ts +34 -0
  118. package/dist/utils/DragListener.d.ts.map +1 -0
  119. package/dist/utils/DragListener.js +103 -70
  120. package/dist/utils/DragListener.js.map +1 -1
  121. package/dist/utils/EventEmitter.d.ts +59 -0
  122. package/dist/utils/EventEmitter.d.ts.map +1 -0
  123. package/dist/utils/EventEmitter.js +64 -70
  124. package/dist/utils/EventEmitter.js.map +1 -1
  125. package/dist/utils/EventHub.d.ts +55 -0
  126. package/dist/utils/EventHub.d.ts.map +1 -0
  127. package/dist/utils/EventHub.js +83 -105
  128. package/dist/utils/EventHub.js.map +1 -1
  129. package/dist/utils/ReactComponentHandler.d.ts +54 -0
  130. package/dist/utils/ReactComponentHandler.d.ts.map +1 -0
  131. package/dist/utils/ReactComponentHandler.js +58 -56
  132. package/dist/utils/ReactComponentHandler.js.map +1 -1
  133. package/dist/utils/index.d.ts +8 -0
  134. package/dist/utils/index.d.ts.map +1 -0
  135. package/dist/utils/index.js +7 -21
  136. package/dist/utils/index.js.map +1 -1
  137. package/dist/utils/utils.d.ts +25 -0
  138. package/dist/utils/utils.d.ts.map +1 -0
  139. package/dist/utils/utils.js +21 -145
  140. package/dist/utils/utils.js.map +1 -1
  141. package/package.json +9 -5
  142. package/dist/config/ItemDefaultConfig.js +0 -8
  143. package/dist/config/ItemDefaultConfig.js.map +0 -1
  144. package/dist/config/defaultConfig.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Header.js","names":["$","utils","HeaderButton","Tab","Header","layoutManager","parent","EventEmitter","call","element","_template","config","settings","selectionEnabled","addClass","on","fnBind","_onHeaderClick","tabsContainer","find","tabDropdownContainer","hide","tabDropdownSearch","tabDropdownList","_handleFilterInput","bind","_handleFilterKeydown","controlsContainer","_updateTabSizes","tabs","activeContentItem","closeButton","tabDropdownButton","tabNextButton","_nextButtonTemplate","tabPreviousButton","_previousButtonTemplate","_handleItemPickedUp","_handleItemDropped","_handleNextMouseEnter","_handleNextMouseLeave","_handlePreviousMouseEnter","_handlePreviousMouseLeave","_handleScrollRepeat","_handleNextButtonMouseDown","_handlePreviousButtonMouseDown","_handleScrollButtonMouseDown","_handleScrollButtonMouseUp","_handleScrollEvent","holdTimer","rAF","CLICK_TIMEOUT","START_SPEED","ACCELERATION","SCROLL_LEFT","SCROLL_RIGHT","isDraggingTab","isOverflowing","isDropdownShown","dropdownKeyIndex","before","_showAdditionalTabsDropdown","_hideAdditionalTabsDropdown","_lastVisibleTabIndex","_tabControlOffset","tabControlOffset","_createControls","join","copy","prototype","createTab","contentItem","index","tab","i","length","push","append","undefined","after","splice","removeTab","_$destroy","Error","setActiveContentItem","isActive","setActive","activeItemIndex","get","scrollIntoView","inline","emitBubblingEvent","position","previous","_header","show","_side","_setupHeaderPosition","_attachWheelListener","addEventListener","_handleWheelEvent","passive","_detachWheelListener","removeEventListener","event","target","currentTarget","delta","Math","abs","deltaY","deltaX","deltaMode","WheelEvent","DOM_DELTA_PAGE","innerWidhth","DOM_DELTA_LINE","scrollLeft","round","_checkScrollArrows","window","cancelAnimationFrame","off","rightOffscreenChild","offsetLeft","offsetWidth","behavior","scrollWidth","leftOffscreenChild","direction","setTimeout","clearTimeout","first","attr","innerWidth","startX","prevTimestamp","tabContainerRect","getBoundingClientRect","_highlightHeaderDropZone","left","right","requestAnimationFrame","timestamp","startTime","deltaTime","newDeltaX","min","_$setClosable","isClosable","_isClosable","emit","document","remove","_getHeaderSetting","name","closeStack","popout","label","maximiseLabel","minimiseLabel","maximise","maximiseButton","tabDropdownLabel","tabOverflowNextLabel","tabOverflowPreviousLabel","labels","tabDropdown","tabNextLabel","tabPreviousLabel","prepend","_onPopoutClick","toggleMaximise","clone","appendTo","children","removeClass","val","focus","eq","_updateAdditionalTabsDropdown","e","key","_onTabClick","getNextDropdownIndex","startIndex","css","shiftKey","preventDefault","title","toLowerCase","indexOf","value","contains","h","scrollHeight","y","offset","top","scrollTop","height","showCloseIcon","popoutWholeStack","select","clientWidth"],"sources":["../../src/controls/Header.js"],"sourcesContent":["import $ from 'jquery';\nimport utils from '../utils/index.js';\nimport HeaderButton from './HeaderButton.js';\nimport Tab from './Tab.js';\n\n/**\n * This class represents a header above a Stack ContentItem.\n *\n * @param {lm.LayoutManager} layoutManager\n * @param {lm.item.AbstractContentItem} parent\n */\nconst Header = function (layoutManager, parent) {\n utils.EventEmitter.call(this);\n\n this.layoutManager = layoutManager;\n this.element = $(Header._template);\n\n if (this.layoutManager.config.settings.selectionEnabled === true) {\n this.element.addClass('lm_selectable');\n this.element.on('click', utils.fnBind(this._onHeaderClick, this));\n }\n\n this.tabsContainer = this.element.find('.lm_tabs');\n\n this.tabDropdownContainer = this.element.find('.lm_tabdropdown_list');\n this.tabDropdownContainer.hide();\n this.tabDropdownSearch = this.element.find('.lm_tabdropdown_search input');\n this.tabDropdownList = null;\n\n this._handleFilterInput = this._handleFilterInput.bind(this);\n this._handleFilterKeydown = this._handleFilterKeydown.bind(this);\n this.tabDropdownSearch.on('input', this._handleFilterInput);\n this.tabDropdownSearch.on('keydown', this._handleFilterKeydown);\n\n this.controlsContainer = this.element.find('.lm_controls');\n this.parent = parent;\n this.parent.on('resize', this._updateTabSizes, this);\n this.tabs = [];\n this.activeContentItem = null;\n this.closeButton = null;\n\n this.tabDropdownButton = null;\n this.tabNextButton = $(Header._nextButtonTemplate);\n this.tabPreviousButton = $(Header._previousButtonTemplate);\n\n this._handleItemPickedUp = this._handleItemPickedUp.bind(this);\n this._handleItemDropped = this._handleItemDropped.bind(this);\n\n this._handleNextMouseEnter = this._handleNextMouseEnter.bind(this);\n this._handleNextMouseLeave = this._handleNextMouseLeave.bind(this);\n this._handlePreviousMouseEnter = this._handlePreviousMouseEnter.bind(this);\n this._handlePreviousMouseLeave = this._handlePreviousMouseLeave.bind(this);\n this._handleScrollRepeat = this._handleScrollRepeat.bind(this);\n this._handleNextButtonMouseDown = this._handleNextButtonMouseDown.bind(this);\n this._handlePreviousButtonMouseDown = this._handlePreviousButtonMouseDown.bind(\n this\n );\n this._handleScrollButtonMouseDown = this._handleScrollButtonMouseDown.bind(\n this\n );\n this._handleScrollButtonMouseUp = this._handleScrollButtonMouseUp.bind(this);\n this._handleScrollEvent = this._handleScrollEvent.bind(this);\n\n this.tabNextButton.on('mousedown', this._handleNextButtonMouseDown);\n this.tabPreviousButton.on('mousedown', this._handlePreviousButtonMouseDown);\n this.tabsContainer.on('scroll', this._handleScrollEvent);\n\n // use for scroll repeat\n this.holdTimer = null;\n this.rAF = null;\n\n // mouse hold timeout to act as hold instead of click\n this.CLICK_TIMEOUT = 500;\n // mouse hold acceleration\n this.START_SPEED = 0.01;\n this.ACCELERATION = 0.0005;\n this.SCROLL_LEFT = 'left';\n this.SCROLL_RIGHT = 'right';\n\n this.layoutManager.on('itemPickedUp', this._handleItemPickedUp);\n this.layoutManager.on('itemDropped', this._handleItemDropped);\n\n this.isDraggingTab = false;\n this.isOverflowing = false;\n this.isDropdownShown = false;\n this.dropdownKeyIndex = 0;\n\n // append previous button template\n this.tabsContainer.before(this.tabPreviousButton);\n // change reference to just the li, not the wrapping ul\n this.tabPreviousButton = this.tabPreviousButton.find('>:first-child');\n this.tabPreviousButton.hide();\n\n this._showAdditionalTabsDropdown = this._showAdditionalTabsDropdown.bind(\n this\n );\n this._hideAdditionalTabsDropdown = this._hideAdditionalTabsDropdown.bind(\n this\n );\n\n this._lastVisibleTabIndex = -1;\n this._tabControlOffset = this.layoutManager.config.settings.tabControlOffset;\n this._createControls();\n};\n\nHeader._template = [\n '<div class=\"lm_header\">',\n '<ul class=\"lm_tabs\"></ul>',\n '<ul class=\"lm_controls\"></ul>',\n '<ul class=\"lm_tabdropdown_list\">',\n '<li class=\"lm_tabdropdown_search\"><input type=\"text\" placeholder=\"Find tab...\"></li>',\n '</ul>',\n '</div>',\n].join('');\n\nHeader._previousButtonTemplate = [\n '<ul class=\"lm_controls\">',\n '<li class=\"lm_tabpreviousbutton\"></li>',\n '</ul>',\n].join('');\n\nHeader._nextButtonTemplate = ['<li class=\"lm_tabnextbutton\"></li>'].join('');\n\nutils.copy(Header.prototype, {\n /**\n * Creates a new tab and associates it with a contentItem\n *\n * @param {lm.item.AbstractContentItem} contentItem\n * @param {Integer} index The position of the tab\n *\n * @returns {void}\n */\n createTab: function (contentItem, index) {\n var tab, i;\n\n //If there's already a tab relating to the\n //content item, don't do anything\n for (i = 0; i < this.tabs.length; i++) {\n if (this.tabs[i].contentItem === contentItem) {\n return;\n }\n }\n\n tab = new Tab(this, contentItem);\n\n if (this.tabs.length === 0) {\n this.tabs.push(tab);\n this.tabsContainer.append(tab.element);\n return;\n }\n\n if (index === undefined) {\n index = this.tabs.length;\n }\n\n if (index > 0) {\n this.tabs[index - 1].element.after(tab.element);\n } else {\n this.tabs[0].element.before(tab.element);\n }\n\n this.tabs.splice(index, 0, tab);\n this._updateTabSizes();\n },\n\n /**\n * Finds a tab based on the contentItem its associated with and removes it.\n *\n * @param {lm.item.AbstractContentItem} contentItem\n *\n * @returns {void}\n */\n removeTab: function (contentItem) {\n for (var i = 0; i < this.tabs.length; i++) {\n if (this.tabs[i].contentItem === contentItem) {\n this.tabs[i]._$destroy();\n this.tabs.splice(i, 1);\n return;\n }\n }\n\n throw new Error('contentItem is not controlled by this header');\n },\n\n /**\n * The programmatical equivalent of clicking a Tab.\n *\n * @param {lm.item.AbstractContentItem} contentItem\n */\n setActiveContentItem: function (contentItem) {\n var isActive;\n\n for (var i = 0; i < this.tabs.length; i++) {\n isActive = this.tabs[i].contentItem === contentItem;\n this.tabs[i].setActive(isActive);\n if (isActive === true) {\n this.activeContentItem = contentItem;\n this.parent.config.activeItemIndex = i;\n }\n }\n\n // makes sure dropped tabs are scrollintoview, removed any re-ordering\n this.tabs[this.parent.config.activeItemIndex].element\n .get(0)\n .scrollIntoView({\n inline: 'nearest',\n });\n\n this._hideAdditionalTabsDropdown();\n this._updateTabSizes();\n this.parent.emitBubblingEvent('stateChanged');\n },\n\n /**\n * Programmatically operate with header position.\n *\n * @param {string} position one of ('top','left','right','bottom') to set or empty to get it.\n *\n * @returns {string} previous header position\n */\n position: function (position) {\n var previous = this.parent._header.show;\n if (previous && !this.parent._side) previous = 'top';\n if (position !== undefined && this.parent._header.show !== position) {\n this.parent._header.show = position;\n this.parent._setupHeaderPosition();\n }\n return previous;\n },\n\n // Manually attaching so wheel can be passive instead of jquery .on\n // _attachWheelListener is called by parent init\n _attachWheelListener: function () {\n this.tabsContainer\n .get(0)\n .addEventListener('wheel', this._handleWheelEvent, { passive: true });\n },\n\n // detach called by this.destroy\n _detachWheelListener: function () {\n this.tabsContainer\n .get(0)\n .removeEventListener('wheel', this._handleWheelEvent, { passive: true });\n },\n\n _handleWheelEvent: function (event) {\n var target = event.currentTarget;\n\n // we only care about the larger of the two deltas\n var delta =\n Math.abs(event.deltaY) > Math.abs(event.deltaX)\n ? event.deltaY\n : event.deltaX;\n\n // jshint\n /* globals WheelEvent */\n if (event.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n // Users can set OS to be in deltaMode page\n // scrolly by page units as pixels\n delta *= this.tabsContainer.innerWidhth();\n } else if (event.deltaMode === WheelEvent.DOM_DELTA_LINE) {\n // chrome goes 100px per 3 lines, and firefox would go 102 per 3 (17 lineheight * 3 lines * 2)\n delta *= 100 / 3;\n }\n target.scrollLeft += Math.round(delta);\n },\n\n // on scroll we need to check if side error might need to be disabled\n _handleScrollEvent: function () {\n this._checkScrollArrows();\n },\n\n // when and item is picked up, attach mouse enter listeners to next/previous buttons\n _handleItemPickedUp: function () {\n this.isDraggingTab = true;\n this.controlsContainer.on('mouseenter', this._handleNextMouseEnter);\n this.tabPreviousButton.on('mouseenter', this._handlePreviousMouseEnter);\n },\n\n // when an item is dropped remove listeners and cancel animation\n _handleItemDropped: function () {\n this.isDraggingTab = false;\n this.rAF = window.cancelAnimationFrame(this.rAF);\n this.controlsContainer.off('mouseenter', this._handleNextMouseEnter);\n this.controlsContainer.off('mouseleave', this._handleNextMouseLeave);\n this.tabPreviousButton.off('mouseenter', this._handlePreviousMouseEnter);\n this.tabPreviousButton.off('mouseleave', this._handlePreviousMouseLeave);\n },\n\n // on next/previous enter start scroll repeat animation loop\n // and attach a listener looking for mouseleave\n // cancel animation on mouse leave, and remove leave listener\n _handleNextMouseEnter: function () {\n this.controlsContainer.on('mouseleave', this._handleNextMouseLeave);\n this._handleScrollRepeat(\n this.SCROLL_RIGHT,\n this.tabsContainer.scrollLeft()\n );\n },\n\n _handlePreviousMouseEnter: function () {\n this.tabPreviousButton.on('mouseleave', this._handlePreviousMouseLeave);\n this._handleScrollRepeat(this.SCROLL_LEFT, this.tabsContainer.scrollLeft());\n },\n\n _handleNextMouseLeave: function () {\n this.rAF = window.cancelAnimationFrame(this.rAF);\n this.controlsContainer.off('mouseleave', this._handleNextMouseLeave);\n },\n\n _handlePreviousMouseLeave: function () {\n this.rAF = window.cancelAnimationFrame(this.rAF);\n this.tabPreviousButton.off('mouseleave', this._handlePreviousMouseLeave);\n },\n\n // scroll one tab to the right on mouse down\n // start scrollRepeat if mouse is held down\n _handleNextButtonMouseDown: function () {\n var rightOffscreenChild;\n for (var i = 0; i < this.tabs.length; i += 1) {\n if (\n this.tabs[i].element.get(0).offsetLeft >\n this.tabsContainer.get(0).offsetWidth + this.tabsContainer.scrollLeft()\n ) {\n rightOffscreenChild = this.tabs[i].element.get(0);\n break;\n }\n }\n\n if (rightOffscreenChild) {\n rightOffscreenChild.scrollIntoView({\n behavior: 'smooth',\n inline: 'nearest',\n });\n this._handleScrollButtonMouseDown(this.SCROLL_RIGHT);\n } else {\n this.tabsContainer.get(0).scrollLeft = this.tabsContainer.get(\n 0\n ).scrollWidth;\n }\n },\n\n // scroll left by one tab\n // start scrollRepeat if mouse is held down\n _handlePreviousButtonMouseDown: function () {\n var leftOffscreenChild;\n for (var i = this.tabs.length - 1; i >= 0; i -= 1) {\n if (\n this.tabs[i].element.get(0).offsetLeft < this.tabsContainer.scrollLeft()\n ) {\n leftOffscreenChild = this.tabs[i].element.get(0);\n break;\n }\n }\n if (leftOffscreenChild) {\n leftOffscreenChild.scrollIntoView({\n behavior: 'smooth',\n inline: 'start',\n });\n this._handleScrollButtonMouseDown(this.SCROLL_LEFT);\n } else {\n this.tabsContainer.get(0).scrollLeft = 0;\n }\n },\n\n // when hold timer is reached start scroll repeat anim loop\n // cancel it when mouse up happens anywhere\n _handleScrollButtonMouseDown: function (direction) {\n // closure so that scrollLeft is value at end of timer, and not start of timer\n this.holdTimer = setTimeout(\n function () {\n this._handleScrollRepeat(\n direction,\n this.tabsContainer.scrollLeft(),\n 100\n ); // kickstart deltaX to be faster\n }.bind(this),\n this.CLICK_TIMEOUT\n );\n window.addEventListener('mouseup', this._handleScrollButtonMouseUp);\n },\n\n // cancel scroll repeat\n _handleScrollButtonMouseUp: function () {\n this.holdTimer = clearTimeout(this.holdTimer);\n this.rAF = cancelAnimationFrame(this.rAF);\n window.removeEventListener('mouseup', this._handleScrollButtonMouseUp);\n },\n\n // disables scroll arrow if at edge of scroll area\n _checkScrollArrows: function () {\n if (this.tabsContainer.scrollLeft() === 0) {\n this.tabPreviousButton.first().attr('disabled', true);\n } else if (\n this.tabsContainer.scrollLeft() + this.tabsContainer.innerWidth() ===\n this.tabsContainer.get(0).scrollWidth\n ) {\n this.tabNextButton.attr('disabled', true);\n } else {\n this.tabNextButton.attr('disabled', false);\n this.tabPreviousButton.first().attr('disabled', false);\n }\n },\n\n // scrolls the tab header container on drag tab over control buttons\n // or on press and hold of scroll arrows at either end\n // called recurisevly in an animation loop until cancelled\n // or directional end is reached\n _handleScrollRepeat: function (direction, startX, deltaX, prevTimestamp) {\n if (!deltaX) deltaX = 0;\n\n var tabContainerRect = this.tabsContainer.get(0).getBoundingClientRect();\n if (direction === this.SCROLL_LEFT) {\n this.tabsContainer.scrollLeft(startX - deltaX);\n if (this.isDraggingTab) {\n // update drag placeholder\n this.parent._highlightHeaderDropZone(tabContainerRect.left - 1);\n }\n // stop loop at left edge\n if (this.tabsContainer.scrollLeft() === 0) {\n this._checkScrollArrows();\n return;\n }\n } else if (direction === this.SCROLL_RIGHT) {\n this.tabsContainer.scrollLeft(startX + deltaX);\n if (this.isDraggingTab) {\n // update drag placeholder\n this.parent._highlightHeaderDropZone(tabContainerRect.right + 1);\n }\n // stop loop at right edge\n if (\n this.tabsContainer.scrollLeft() + this.tabsContainer.innerWidth() ===\n this.tabsContainer.get(0).scrollWidth\n ) {\n this._checkScrollArrows();\n return;\n }\n }\n\n // setup animation loop, scroll with acceleration\n window.cancelAnimationFrame(this.rAF);\n this.rAF = window.requestAnimationFrame(\n function (timestamp) {\n var startTime = prevTimestamp || timestamp;\n var deltaTime = timestamp - startTime;\n var newDeltaX =\n this.START_SPEED * deltaTime +\n 0.5 * this.ACCELERATION * (deltaTime * deltaTime);\n newDeltaX = Math.min(newDeltaX, this.tabsContainer.get(0).scrollWidth);\n this._handleScrollRepeat(direction, startX, newDeltaX, startTime);\n }.bind(this)\n );\n },\n\n /**\n * Programmatically set closability.\n *\n * @package private\n * @param {Boolean} isClosable Whether to enable/disable closability.\n *\n * @returns {Boolean} Whether the action was successful\n */\n _$setClosable: function (isClosable) {\n if (this.closeButton && this._isClosable()) {\n this.closeButton.element[isClosable ? 'show' : 'hide']();\n return true;\n }\n\n return false;\n },\n\n /**\n * Destroys the entire header\n *\n * @package private\n *\n * @returns {void}\n */\n _$destroy: function () {\n this.emit('destroy', this);\n\n for (var i = 0; i < this.tabs.length; i++) {\n this.tabs[i]._$destroy();\n }\n\n this._detachWheelListener();\n this._handleItemDropped();\n\n $(document).off('mouseup', this._hideAdditionalTabsDropdown);\n this.tabDropdownSearch.off('input', this._handleFilterInput);\n this.tabDropdownSearch.off('keydown', this._handleFilterKeydown);\n\n this.element.remove();\n },\n\n /**\n * get settings from header\n *\n * @returns {string} when exists\n */\n _getHeaderSetting: function (name) {\n if (name in this.parent._header) return this.parent._header[name];\n },\n\n /**\n * Creates the popout, maximise and close buttons in the header's top right corner\n *\n * @returns {void}\n */\n _createControls: function () {\n var closeStack,\n popout,\n label,\n maximiseLabel,\n minimiseLabel,\n maximise,\n maximiseButton,\n tabDropdownLabel,\n tabOverflowNextLabel,\n tabOverflowPreviousLabel;\n\n /**\n * Dropdown to show additional tabs.\n */\n\n tabDropdownLabel = this.layoutManager.config.labels.tabDropdown;\n tabOverflowNextLabel = this.layoutManager.config.labels.tabNextLabel;\n tabOverflowPreviousLabel = this.layoutManager.config.labels\n .tabPreviousLabel;\n\n this.tabDropdownButton = new HeaderButton(\n this,\n tabDropdownLabel,\n 'lm_tabdropdown',\n this._showAdditionalTabsDropdown\n );\n this.tabDropdownButton.element.hide();\n\n this.controlsContainer.prepend(this.tabNextButton);\n this.tabNextButton.hide();\n\n /**\n * Popout control to launch component in new window.\n */\n if (this._getHeaderSetting('popout')) {\n popout = utils.fnBind(this._onPopoutClick, this);\n label = this._getHeaderSetting('popout');\n new HeaderButton(this, label, 'lm_popout', popout);\n }\n\n /**\n * Maximise control - set the component to the full size of the layout\n */\n if (this._getHeaderSetting('maximise')) {\n maximise = utils.fnBind(this.parent.toggleMaximise, this.parent);\n maximiseLabel = this._getHeaderSetting('maximise');\n minimiseLabel = this._getHeaderSetting('minimise');\n maximiseButton = new HeaderButton(\n this,\n maximiseLabel,\n 'lm_maximise',\n maximise\n );\n\n this.parent.on('maximised', function () {\n maximiseButton.element.attr('title', minimiseLabel);\n });\n\n this.parent.on('minimised', function () {\n maximiseButton.element.attr('title', maximiseLabel);\n });\n }\n\n /**\n * Close button\n */\n if (this._isClosable()) {\n closeStack = utils.fnBind(this.parent.remove, this.parent);\n label = this._getHeaderSetting('close');\n this.closeButton = new HeaderButton(this, label, 'lm_close', closeStack);\n }\n },\n\n /**\n * Shows drop down for additional tabs when there are too many to display.\n *\n * @returns {void}\n */\n _showAdditionalTabsDropdown: function () {\n if (this.isDropdownShown) {\n this._hideAdditionalTabsDropdown();\n return;\n }\n\n // clone tabs in the current list, with event listeners\n // and add them to the drop down\n this.tabDropdownList = this.tabsContainer\n .clone(true)\n .appendTo(this.tabDropdownContainer)\n .children()\n .removeClass('lm_active');\n\n // show the dropdown\n this.tabDropdownContainer.show();\n this.isDropdownShown = true;\n\n // dropdown is a part of the header z-index context\n // add class to header when dropdown is open\n // so we can bump the z-index of the lists parent\n this.element.addClass('lm_dropdown_open');\n\n // focus the dropdown filter list input\n this.tabDropdownSearch.val('').focus();\n this.dropdownKeyIndex = 0;\n this.tabDropdownList\n .eq(this.dropdownKeyIndex)\n .addClass('lm_keyboard_active');\n\n $(document).on('mousedown', this._hideAdditionalTabsDropdown);\n this._updateAdditionalTabsDropdown();\n },\n\n // enables synthetic keyboard navigation of the list\n _handleFilterKeydown: function (e) {\n if (this.dropdownKeyIndex === -1) return;\n\n if (e.key === 'Escape') {\n this._hideAdditionalTabsDropdown();\n return;\n }\n\n if (e.key === 'Enter' || e.key === ' ') {\n // simulate \"click\"\n this._hideAdditionalTabsDropdown();\n this.tabs[this.dropdownKeyIndex]._onTabClick();\n return;\n }\n\n function getNextDropdownIndex(startIndex, delta, tabDropdownList) {\n if (tabDropdownList.length < 2) {\n return -1;\n }\n var i =\n (startIndex + delta + tabDropdownList.length) % tabDropdownList.length;\n while (i !== startIndex) {\n if (tabDropdownList.eq(i).css('display') !== 'none') {\n return i;\n }\n i = (i + delta + tabDropdownList.length) % tabDropdownList.length;\n }\n\n return startIndex;\n }\n\n // allow tab or arrow key navigation of list, prevent tabs default behaviour\n if (e.key === 'ArrowDown' || (e.key === 'Tab' && e.shiftKey === false)) {\n e.preventDefault();\n this.tabDropdownList\n .eq(this.dropdownKeyIndex)\n .removeClass('lm_keyboard_active');\n this.dropdownKeyIndex = getNextDropdownIndex(\n this.dropdownKeyIndex,\n 1,\n this.tabDropdownList\n );\n this.tabDropdownList\n .eq(this.dropdownKeyIndex)\n .addClass('lm_keyboard_active');\n } else if (e.key === 'ArrowUp' || e.key === 'Tab') {\n e.preventDefault();\n this.tabDropdownList\n .eq(this.dropdownKeyIndex)\n .removeClass('lm_keyboard_active');\n this.dropdownKeyIndex = getNextDropdownIndex(\n this.dropdownKeyIndex,\n -1,\n this.tabDropdownList\n );\n this.tabDropdownList\n .eq(this.dropdownKeyIndex)\n .addClass('lm_keyboard_active');\n }\n },\n\n // filters the list\n _handleFilterInput: function (event) {\n // reset keyboard index\n this.tabDropdownList\n .eq(this.dropdownKeyIndex)\n .removeClass('lm_keyboard_active');\n this.dropdownKeyIndex = -1;\n\n for (var i = 0; i < this.tabDropdownList.length; i++) {\n if (\n this.tabs[i].contentItem.config.title\n .toLowerCase()\n .indexOf(event.target.value.toLowerCase()) !== -1\n ) {\n this.tabDropdownList.eq(i).css('display', '');\n if (this.dropdownKeyIndex === -1) this.dropdownKeyIndex = i;\n } else {\n this.tabDropdownList.eq(i).css('display', 'none');\n }\n }\n\n if (this.dropdownKeyIndex !== -1) {\n this.tabDropdownList\n .eq(this.dropdownKeyIndex)\n .addClass('lm_keyboard_active');\n }\n },\n\n /**\n * Hides drop down for additional tabs when needed. It is called via mousedown\n * event on document when list is open, or programmatically when drag starts,\n * or active tab changes etc.\n *\n * @returns {void}\n */\n _hideAdditionalTabsDropdown: function (event) {\n // dropdown already closed, do nothing\n if (!this.isDropdownShown) return;\n\n if (event && this.tabDropdownContainer.get(0).contains(event.target)) {\n // prevent events occuring inside the list from causing a close\n return;\n } else if (\n event &&\n this.tabDropdownButton.element.get(0) === event.target\n ) {\n // do nothing on the mouse down so that the click event can close, rather then re-open\n return;\n }\n\n this.element.removeClass('lm_dropdown_open');\n this.tabDropdownContainer.hide();\n this.isDropdownShown = false;\n\n // remove the current tab list\n this.tabDropdownContainer.find('.lm_tabs').remove();\n\n $(document).off('mousedown', this._hideAdditionalTabsDropdown);\n },\n\n /**\n * Ensures additional tab drop down doesn't overflow screen, and instead becomes scrollable.\n *\n * @returns {void}\n */\n _updateAdditionalTabsDropdown: function () {\n this.tabDropdownContainer.css('max-height', '');\n var h = this.tabDropdownContainer[0].scrollHeight;\n if (h === 0) return; // height can be zero if called on a hidden or empty list\n\n var y = this.tabDropdownContainer.offset().top - $(window).scrollTop();\n\n // set max height of tab dropdown to be less then the viewport height - dropdown offset\n if (y + h > $(window).height()) {\n this.tabDropdownContainer.css('max-height', $(window).height() - y - 10); // 10 being a padding value\n }\n },\n\n /**\n * Checks whether the header is closable based on the parent config and\n * the global config.\n *\n * @returns {Boolean} Whether the header is closable.\n */\n _isClosable: function () {\n return (\n this.parent.config.isClosable &&\n this.layoutManager.config.settings.showCloseIcon\n );\n },\n\n _onPopoutClick: function () {\n if (this.layoutManager.config.settings.popoutWholeStack === true) {\n this.parent.popout();\n } else {\n this.activeContentItem.popout();\n }\n },\n\n /**\n * Invoked when the header's background is clicked (not it's tabs or controls)\n *\n * @param {jQuery DOM event} event\n *\n * @returns {void}\n */\n _onHeaderClick: function (event) {\n if (event.target === this.element[0]) {\n this.parent.select();\n }\n },\n\n /**\n * Pushes the tabs to the tab dropdown if the available space is not sufficient\n *\n * @returns {void}\n */\n _updateTabSizes: function () {\n if (this.tabs.length === 0) {\n return;\n }\n\n if (\n !this.isOverflowing &&\n this.tabsContainer.get(0).scrollWidth >\n this.tabsContainer.get(0).clientWidth\n ) {\n this.tabDropdownButton.element.show();\n this.tabNextButton.show();\n this.tabPreviousButton.show();\n this.isOverflowing = true;\n } else if (\n this.isOverflowing &&\n this.tabsContainer.get(0).scrollWidth <=\n this.tabsContainer.get(0).clientWidth\n ) {\n this.tabDropdownButton.element.hide();\n this.tabNextButton.hide();\n this.tabPreviousButton.hide();\n this.isOverflowing = false;\n }\n\n if (this.isOverflowing) this._checkScrollArrows();\n },\n});\n\nexport default Header;\n"],"mappings":"AAAA,OAAOA,CAAP,MAAc,QAAd;AACA,OAAOC,KAAP,MAAkB,mBAAlB;AACA,OAAOC,YAAP,MAAyB,mBAAzB;AACA,OAAOC,GAAP,MAAgB,UAAhB;AAEA;AACA;AACA;AACA;AACA;AACA;;AACA,IAAMC,MAAM,GAAG,SAATA,MAAS,CAAUC,aAAV,EAAyBC,MAAzB,EAAiC;EAC9CL,KAAK,CAACM,YAAN,CAAmBC,IAAnB,CAAwB,IAAxB;EAEA,KAAKH,aAAL,GAAqBA,aAArB;EACA,KAAKI,OAAL,GAAeT,CAAC,CAACI,MAAM,CAACM,SAAR,CAAhB;;EAEA,IAAI,KAAKL,aAAL,CAAmBM,MAAnB,CAA0BC,QAA1B,CAAmCC,gBAAnC,KAAwD,IAA5D,EAAkE;IAChE,KAAKJ,OAAL,CAAaK,QAAb,CAAsB,eAAtB;IACA,KAAKL,OAAL,CAAaM,EAAb,CAAgB,OAAhB,EAAyBd,KAAK,CAACe,MAAN,CAAa,KAAKC,cAAlB,EAAkC,IAAlC,CAAzB;EACD;;EAED,KAAKC,aAAL,GAAqB,KAAKT,OAAL,CAAaU,IAAb,CAAkB,UAAlB,CAArB;EAEA,KAAKC,oBAAL,GAA4B,KAAKX,OAAL,CAAaU,IAAb,CAAkB,sBAAlB,CAA5B;EACA,KAAKC,oBAAL,CAA0BC,IAA1B;EACA,KAAKC,iBAAL,GAAyB,KAAKb,OAAL,CAAaU,IAAb,CAAkB,8BAAlB,CAAzB;EACA,KAAKI,eAAL,GAAuB,IAAvB;EAEA,KAAKC,kBAAL,GAA0B,KAAKA,kBAAL,CAAwBC,IAAxB,CAA6B,IAA7B,CAA1B;EACA,KAAKC,oBAAL,GAA4B,KAAKA,oBAAL,CAA0BD,IAA1B,CAA+B,IAA/B,CAA5B;EACA,KAAKH,iBAAL,CAAuBP,EAAvB,CAA0B,OAA1B,EAAmC,KAAKS,kBAAxC;EACA,KAAKF,iBAAL,CAAuBP,EAAvB,CAA0B,SAA1B,EAAqC,KAAKW,oBAA1C;EAEA,KAAKC,iBAAL,GAAyB,KAAKlB,OAAL,CAAaU,IAAb,CAAkB,cAAlB,CAAzB;EACA,KAAKb,MAAL,GAAcA,MAAd;EACA,KAAKA,MAAL,CAAYS,EAAZ,CAAe,QAAf,EAAyB,KAAKa,eAA9B,EAA+C,IAA/C;EACA,KAAKC,IAAL,GAAY,EAAZ;EACA,KAAKC,iBAAL,GAAyB,IAAzB;EACA,KAAKC,WAAL,GAAmB,IAAnB;EAEA,KAAKC,iBAAL,GAAyB,IAAzB;EACA,KAAKC,aAAL,GAAqBjC,CAAC,CAACI,MAAM,CAAC8B,mBAAR,CAAtB;EACA,KAAKC,iBAAL,GAAyBnC,CAAC,CAACI,MAAM,CAACgC,uBAAR,CAA1B;EAEA,KAAKC,mBAAL,GAA2B,KAAKA,mBAAL,CAAyBZ,IAAzB,CAA8B,IAA9B,CAA3B;EACA,KAAKa,kBAAL,GAA0B,KAAKA,kBAAL,CAAwBb,IAAxB,CAA6B,IAA7B,CAA1B;EAEA,KAAKc,qBAAL,GAA6B,KAAKA,qBAAL,CAA2Bd,IAA3B,CAAgC,IAAhC,CAA7B;EACA,KAAKe,qBAAL,GAA6B,KAAKA,qBAAL,CAA2Bf,IAA3B,CAAgC,IAAhC,CAA7B;EACA,KAAKgB,yBAAL,GAAiC,KAAKA,yBAAL,CAA+BhB,IAA/B,CAAoC,IAApC,CAAjC;EACA,KAAKiB,yBAAL,GAAiC,KAAKA,yBAAL,CAA+BjB,IAA/B,CAAoC,IAApC,CAAjC;EACA,KAAKkB,mBAAL,GAA2B,KAAKA,mBAAL,CAAyBlB,IAAzB,CAA8B,IAA9B,CAA3B;EACA,KAAKmB,0BAAL,GAAkC,KAAKA,0BAAL,CAAgCnB,IAAhC,CAAqC,IAArC,CAAlC;EACA,KAAKoB,8BAAL,GAAsC,KAAKA,8BAAL,CAAoCpB,IAApC,CACpC,IADoC,CAAtC;EAGA,KAAKqB,4BAAL,GAAoC,KAAKA,4BAAL,CAAkCrB,IAAlC,CAClC,IADkC,CAApC;EAGA,KAAKsB,0BAAL,GAAkC,KAAKA,0BAAL,CAAgCtB,IAAhC,CAAqC,IAArC,CAAlC;EACA,KAAKuB,kBAAL,GAA0B,KAAKA,kBAAL,CAAwBvB,IAAxB,CAA6B,IAA7B,CAA1B;EAEA,KAAKQ,aAAL,CAAmBlB,EAAnB,CAAsB,WAAtB,EAAmC,KAAK6B,0BAAxC;EACA,KAAKT,iBAAL,CAAuBpB,EAAvB,CAA0B,WAA1B,EAAuC,KAAK8B,8BAA5C;EACA,KAAK3B,aAAL,CAAmBH,EAAnB,CAAsB,QAAtB,EAAgC,KAAKiC,kBAArC,EAtD8C,CAwD9C;;EACA,KAAKC,SAAL,GAAiB,IAAjB;EACA,KAAKC,GAAL,GAAW,IAAX,CA1D8C,CA4D9C;;EACA,KAAKC,aAAL,GAAqB,GAArB,CA7D8C,CA8D9C;;EACA,KAAKC,WAAL,GAAmB,IAAnB;EACA,KAAKC,YAAL,GAAoB,MAApB;EACA,KAAKC,WAAL,GAAmB,MAAnB;EACA,KAAKC,YAAL,GAAoB,OAApB;EAEA,KAAKlD,aAAL,CAAmBU,EAAnB,CAAsB,cAAtB,EAAsC,KAAKsB,mBAA3C;EACA,KAAKhC,aAAL,CAAmBU,EAAnB,CAAsB,aAAtB,EAAqC,KAAKuB,kBAA1C;EAEA,KAAKkB,aAAL,GAAqB,KAArB;EACA,KAAKC,aAAL,GAAqB,KAArB;EACA,KAAKC,eAAL,GAAuB,KAAvB;EACA,KAAKC,gBAAL,GAAwB,CAAxB,CA1E8C,CA4E9C;;EACA,KAAKzC,aAAL,CAAmB0C,MAAnB,CAA0B,KAAKzB,iBAA/B,EA7E8C,CA8E9C;;EACA,KAAKA,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBhB,IAAvB,CAA4B,eAA5B,CAAzB;EACA,KAAKgB,iBAAL,CAAuBd,IAAvB;EAEA,KAAKwC,2BAAL,GAAmC,KAAKA,2BAAL,CAAiCpC,IAAjC,CACjC,IADiC,CAAnC;EAGA,KAAKqC,2BAAL,GAAmC,KAAKA,2BAAL,CAAiCrC,IAAjC,CACjC,IADiC,CAAnC;EAIA,KAAKsC,oBAAL,GAA4B,CAAC,CAA7B;EACA,KAAKC,iBAAL,GAAyB,KAAK3D,aAAL,CAAmBM,MAAnB,CAA0BC,QAA1B,CAAmCqD,gBAA5D;;EACA,KAAKC,eAAL;AACD,CA5FD;;AA8FA9D,MAAM,CAACM,SAAP,GAAmB,CACjB,yBADiB,EAEjB,2BAFiB,EAGjB,+BAHiB,EAIjB,kCAJiB,EAKjB,sFALiB,EAMjB,OANiB,EAOjB,QAPiB,EAQjByD,IARiB,CAQZ,EARY,CAAnB;AAUA/D,MAAM,CAACgC,uBAAP,GAAiC,CAC/B,0BAD+B,EAE/B,wCAF+B,EAG/B,OAH+B,EAI/B+B,IAJ+B,CAI1B,EAJ0B,CAAjC;AAMA/D,MAAM,CAAC8B,mBAAP,GAA6B,CAAC,oCAAD,EAAuCiC,IAAvC,CAA4C,EAA5C,CAA7B;AAEAlE,KAAK,CAACmE,IAAN,CAAWhE,MAAM,CAACiE,SAAlB,EAA6B;EAC3B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,SAAS,EAAE,mBAAUC,WAAV,EAAuBC,KAAvB,EAA8B;IACvC,IAAIC,GAAJ,EAASC,CAAT,CADuC,CAGvC;IACA;;IACA,KAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG,KAAK7C,IAAL,CAAU8C,MAA1B,EAAkCD,CAAC,EAAnC,EAAuC;MACrC,IAAI,KAAK7C,IAAL,CAAU6C,CAAV,EAAaH,WAAb,KAA6BA,WAAjC,EAA8C;QAC5C;MACD;IACF;;IAEDE,GAAG,GAAG,IAAItE,GAAJ,CAAQ,IAAR,EAAcoE,WAAd,CAAN;;IAEA,IAAI,KAAK1C,IAAL,CAAU8C,MAAV,KAAqB,CAAzB,EAA4B;MAC1B,KAAK9C,IAAL,CAAU+C,IAAV,CAAeH,GAAf;MACA,KAAKvD,aAAL,CAAmB2D,MAAnB,CAA0BJ,GAAG,CAAChE,OAA9B;MACA;IACD;;IAED,IAAI+D,KAAK,KAAKM,SAAd,EAAyB;MACvBN,KAAK,GAAG,KAAK3C,IAAL,CAAU8C,MAAlB;IACD;;IAED,IAAIH,KAAK,GAAG,CAAZ,EAAe;MACb,KAAK3C,IAAL,CAAU2C,KAAK,GAAG,CAAlB,EAAqB/D,OAArB,CAA6BsE,KAA7B,CAAmCN,GAAG,CAAChE,OAAvC;IACD,CAFD,MAEO;MACL,KAAKoB,IAAL,CAAU,CAAV,EAAapB,OAAb,CAAqBmD,MAArB,CAA4Ba,GAAG,CAAChE,OAAhC;IACD;;IAED,KAAKoB,IAAL,CAAUmD,MAAV,CAAiBR,KAAjB,EAAwB,CAAxB,EAA2BC,GAA3B;;IACA,KAAK7C,eAAL;EACD,CAxC0B;;EA0C3B;AACF;AACA;AACA;AACA;AACA;AACA;EACEqD,SAAS,EAAE,mBAAUV,WAAV,EAAuB;IAChC,KAAK,IAAIG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK7C,IAAL,CAAU8C,MAA9B,EAAsCD,CAAC,EAAvC,EAA2C;MACzC,IAAI,KAAK7C,IAAL,CAAU6C,CAAV,EAAaH,WAAb,KAA6BA,WAAjC,EAA8C;QAC5C,KAAK1C,IAAL,CAAU6C,CAAV,EAAaQ,SAAb;;QACA,KAAKrD,IAAL,CAAUmD,MAAV,CAAiBN,CAAjB,EAAoB,CAApB;QACA;MACD;IACF;;IAED,MAAM,IAAIS,KAAJ,CAAU,8CAAV,CAAN;EACD,CA3D0B;;EA6D3B;AACF;AACA;AACA;AACA;EACEC,oBAAoB,EAAE,8BAAUb,WAAV,EAAuB;IAC3C,IAAIc,QAAJ;;IAEA,KAAK,IAAIX,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK7C,IAAL,CAAU8C,MAA9B,EAAsCD,CAAC,EAAvC,EAA2C;MACzCW,QAAQ,GAAG,KAAKxD,IAAL,CAAU6C,CAAV,EAAaH,WAAb,KAA6BA,WAAxC;MACA,KAAK1C,IAAL,CAAU6C,CAAV,EAAaY,SAAb,CAAuBD,QAAvB;;MACA,IAAIA,QAAQ,KAAK,IAAjB,EAAuB;QACrB,KAAKvD,iBAAL,GAAyByC,WAAzB;QACA,KAAKjE,MAAL,CAAYK,MAAZ,CAAmB4E,eAAnB,GAAqCb,CAArC;MACD;IACF,CAV0C,CAY3C;;;IACA,KAAK7C,IAAL,CAAU,KAAKvB,MAAL,CAAYK,MAAZ,CAAmB4E,eAA7B,EAA8C9E,OAA9C,CACG+E,GADH,CACO,CADP,EAEGC,cAFH,CAEkB;MACdC,MAAM,EAAE;IADM,CAFlB;;IAMA,KAAK5B,2BAAL;;IACA,KAAKlC,eAAL;;IACA,KAAKtB,MAAL,CAAYqF,iBAAZ,CAA8B,cAA9B;EACD,CAxF0B;;EA0F3B;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,QAAQ,EAAE,kBAAUA,SAAV,EAAoB;IAC5B,IAAIC,QAAQ,GAAG,KAAKvF,MAAL,CAAYwF,OAAZ,CAAoBC,IAAnC;IACA,IAAIF,QAAQ,IAAI,CAAC,KAAKvF,MAAL,CAAY0F,KAA7B,EAAoCH,QAAQ,GAAG,KAAX;;IACpC,IAAID,SAAQ,KAAKd,SAAb,IAA0B,KAAKxE,MAAL,CAAYwF,OAAZ,CAAoBC,IAApB,KAA6BH,SAA3D,EAAqE;MACnE,KAAKtF,MAAL,CAAYwF,OAAZ,CAAoBC,IAApB,GAA2BH,SAA3B;;MACA,KAAKtF,MAAL,CAAY2F,oBAAZ;IACD;;IACD,OAAOJ,QAAP;EACD,CAzG0B;EA2G3B;EACA;EACAK,oBAAoB,EAAE,gCAAY;IAChC,KAAKhF,aAAL,CACGsE,GADH,CACO,CADP,EAEGW,gBAFH,CAEoB,OAFpB,EAE6B,KAAKC,iBAFlC,EAEqD;MAAEC,OAAO,EAAE;IAAX,CAFrD;EAGD,CAjH0B;EAmH3B;EACAC,oBAAoB,EAAE,gCAAY;IAChC,KAAKpF,aAAL,CACGsE,GADH,CACO,CADP,EAEGe,mBAFH,CAEuB,OAFvB,EAEgC,KAAKH,iBAFrC,EAEwD;MAAEC,OAAO,EAAE;IAAX,CAFxD;EAGD,CAxH0B;EA0H3BD,iBAAiB,EAAE,2BAAUI,KAAV,EAAiB;IAClC,IAAIC,MAAM,GAAGD,KAAK,CAACE,aAAnB,CADkC,CAGlC;;IACA,IAAIC,KAAK,GACPC,IAAI,CAACC,GAAL,CAASL,KAAK,CAACM,MAAf,IAAyBF,IAAI,CAACC,GAAL,CAASL,KAAK,CAACO,MAAf,CAAzB,GACIP,KAAK,CAACM,MADV,GAEIN,KAAK,CAACO,MAHZ,CAJkC,CASlC;;IACA;;IACA,IAAIP,KAAK,CAACQ,SAAN,KAAoBC,UAAU,CAACC,cAAnC,EAAmD;MACjD;MACA;MACAP,KAAK,IAAI,KAAKzF,aAAL,CAAmBiG,WAAnB,EAAT;IACD,CAJD,MAIO,IAAIX,KAAK,CAACQ,SAAN,KAAoBC,UAAU,CAACG,cAAnC,EAAmD;MACxD;MACAT,KAAK,IAAI,MAAM,CAAf;IACD;;IACDF,MAAM,CAACY,UAAP,IAAqBT,IAAI,CAACU,KAAL,CAAWX,KAAX,CAArB;EACD,CA9I0B;EAgJ3B;EACA3D,kBAAkB,EAAE,8BAAY;IAC9B,KAAKuE,kBAAL;EACD,CAnJ0B;EAqJ3B;EACAlF,mBAAmB,EAAE,+BAAY;IAC/B,KAAKmB,aAAL,GAAqB,IAArB;IACA,KAAK7B,iBAAL,CAAuBZ,EAAvB,CAA0B,YAA1B,EAAwC,KAAKwB,qBAA7C;IACA,KAAKJ,iBAAL,CAAuBpB,EAAvB,CAA0B,YAA1B,EAAwC,KAAK0B,yBAA7C;EACD,CA1J0B;EA4J3B;EACAH,kBAAkB,EAAE,8BAAY;IAC9B,KAAKkB,aAAL,GAAqB,KAArB;IACA,KAAKN,GAAL,GAAWsE,MAAM,CAACC,oBAAP,CAA4B,KAAKvE,GAAjC,CAAX;IACA,KAAKvB,iBAAL,CAAuB+F,GAAvB,CAA2B,YAA3B,EAAyC,KAAKnF,qBAA9C;IACA,KAAKZ,iBAAL,CAAuB+F,GAAvB,CAA2B,YAA3B,EAAyC,KAAKlF,qBAA9C;IACA,KAAKL,iBAAL,CAAuBuF,GAAvB,CAA2B,YAA3B,EAAyC,KAAKjF,yBAA9C;IACA,KAAKN,iBAAL,CAAuBuF,GAAvB,CAA2B,YAA3B,EAAyC,KAAKhF,yBAA9C;EACD,CApK0B;EAsK3B;EACA;EACA;EACAH,qBAAqB,EAAE,iCAAY;IACjC,KAAKZ,iBAAL,CAAuBZ,EAAvB,CAA0B,YAA1B,EAAwC,KAAKyB,qBAA7C;;IACA,KAAKG,mBAAL,CACE,KAAKY,YADP,EAEE,KAAKrC,aAAL,CAAmBmG,UAAnB,EAFF;EAID,CA/K0B;EAiL3B5E,yBAAyB,EAAE,qCAAY;IACrC,KAAKN,iBAAL,CAAuBpB,EAAvB,CAA0B,YAA1B,EAAwC,KAAK2B,yBAA7C;;IACA,KAAKC,mBAAL,CAAyB,KAAKW,WAA9B,EAA2C,KAAKpC,aAAL,CAAmBmG,UAAnB,EAA3C;EACD,CApL0B;EAsL3B7E,qBAAqB,EAAE,iCAAY;IACjC,KAAKU,GAAL,GAAWsE,MAAM,CAACC,oBAAP,CAA4B,KAAKvE,GAAjC,CAAX;IACA,KAAKvB,iBAAL,CAAuB+F,GAAvB,CAA2B,YAA3B,EAAyC,KAAKlF,qBAA9C;EACD,CAzL0B;EA2L3BE,yBAAyB,EAAE,qCAAY;IACrC,KAAKQ,GAAL,GAAWsE,MAAM,CAACC,oBAAP,CAA4B,KAAKvE,GAAjC,CAAX;IACA,KAAKf,iBAAL,CAAuBuF,GAAvB,CAA2B,YAA3B,EAAyC,KAAKhF,yBAA9C;EACD,CA9L0B;EAgM3B;EACA;EACAE,0BAA0B,EAAE,sCAAY;IACtC,IAAI+E,mBAAJ;;IACA,KAAK,IAAIjD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK7C,IAAL,CAAU8C,MAA9B,EAAsCD,CAAC,IAAI,CAA3C,EAA8C;MAC5C,IACE,KAAK7C,IAAL,CAAU6C,CAAV,EAAajE,OAAb,CAAqB+E,GAArB,CAAyB,CAAzB,EAA4BoC,UAA5B,GACA,KAAK1G,aAAL,CAAmBsE,GAAnB,CAAuB,CAAvB,EAA0BqC,WAA1B,GAAwC,KAAK3G,aAAL,CAAmBmG,UAAnB,EAF1C,EAGE;QACAM,mBAAmB,GAAG,KAAK9F,IAAL,CAAU6C,CAAV,EAAajE,OAAb,CAAqB+E,GAArB,CAAyB,CAAzB,CAAtB;QACA;MACD;IACF;;IAED,IAAImC,mBAAJ,EAAyB;MACvBA,mBAAmB,CAAClC,cAApB,CAAmC;QACjCqC,QAAQ,EAAE,QADuB;QAEjCpC,MAAM,EAAE;MAFyB,CAAnC;;MAIA,KAAK5C,4BAAL,CAAkC,KAAKS,YAAvC;IACD,CAND,MAMO;MACL,KAAKrC,aAAL,CAAmBsE,GAAnB,CAAuB,CAAvB,EAA0B6B,UAA1B,GAAuC,KAAKnG,aAAL,CAAmBsE,GAAnB,CACrC,CADqC,EAErCuC,WAFF;IAGD;EACF,CAzN0B;EA2N3B;EACA;EACAlF,8BAA8B,EAAE,0CAAY;IAC1C,IAAImF,kBAAJ;;IACA,KAAK,IAAItD,CAAC,GAAG,KAAK7C,IAAL,CAAU8C,MAAV,GAAmB,CAAhC,EAAmCD,CAAC,IAAI,CAAxC,EAA2CA,CAAC,IAAI,CAAhD,EAAmD;MACjD,IACE,KAAK7C,IAAL,CAAU6C,CAAV,EAAajE,OAAb,CAAqB+E,GAArB,CAAyB,CAAzB,EAA4BoC,UAA5B,GAAyC,KAAK1G,aAAL,CAAmBmG,UAAnB,EAD3C,EAEE;QACAW,kBAAkB,GAAG,KAAKnG,IAAL,CAAU6C,CAAV,EAAajE,OAAb,CAAqB+E,GAArB,CAAyB,CAAzB,CAArB;QACA;MACD;IACF;;IACD,IAAIwC,kBAAJ,EAAwB;MACtBA,kBAAkB,CAACvC,cAAnB,CAAkC;QAChCqC,QAAQ,EAAE,QADsB;QAEhCpC,MAAM,EAAE;MAFwB,CAAlC;;MAIA,KAAK5C,4BAAL,CAAkC,KAAKQ,WAAvC;IACD,CAND,MAMO;MACL,KAAKpC,aAAL,CAAmBsE,GAAnB,CAAuB,CAAvB,EAA0B6B,UAA1B,GAAuC,CAAvC;IACD;EACF,CAhP0B;EAkP3B;EACA;EACAvE,4BAA4B,EAAE,sCAAUmF,SAAV,EAAqB;IACjD;IACA,KAAKhF,SAAL,GAAiBiF,UAAU,CACzB,YAAY;MACV,KAAKvF,mBAAL,CACEsF,SADF,EAEE,KAAK/G,aAAL,CAAmBmG,UAAnB,EAFF,EAGE,GAHF,EADU,CAKP;;IACJ,CAND,CAME5F,IANF,CAMO,IANP,CADyB,EAQzB,KAAK0B,aARoB,CAA3B;IAUAqE,MAAM,CAACrB,gBAAP,CAAwB,SAAxB,EAAmC,KAAKpD,0BAAxC;EACD,CAjQ0B;EAmQ3B;EACAA,0BAA0B,EAAE,sCAAY;IACtC,KAAKE,SAAL,GAAiBkF,YAAY,CAAC,KAAKlF,SAAN,CAA7B;IACA,KAAKC,GAAL,GAAWuE,oBAAoB,CAAC,KAAKvE,GAAN,CAA/B;IACAsE,MAAM,CAACjB,mBAAP,CAA2B,SAA3B,EAAsC,KAAKxD,0BAA3C;EACD,CAxQ0B;EA0Q3B;EACAwE,kBAAkB,EAAE,8BAAY;IAC9B,IAAI,KAAKrG,aAAL,CAAmBmG,UAAnB,OAAoC,CAAxC,EAA2C;MACzC,KAAKlF,iBAAL,CAAuBiG,KAAvB,GAA+BC,IAA/B,CAAoC,UAApC,EAAgD,IAAhD;IACD,CAFD,MAEO,IACL,KAAKnH,aAAL,CAAmBmG,UAAnB,KAAkC,KAAKnG,aAAL,CAAmBoH,UAAnB,EAAlC,KACA,KAAKpH,aAAL,CAAmBsE,GAAnB,CAAuB,CAAvB,EAA0BuC,WAFrB,EAGL;MACA,KAAK9F,aAAL,CAAmBoG,IAAnB,CAAwB,UAAxB,EAAoC,IAApC;IACD,CALM,MAKA;MACL,KAAKpG,aAAL,CAAmBoG,IAAnB,CAAwB,UAAxB,EAAoC,KAApC;MACA,KAAKlG,iBAAL,CAAuBiG,KAAvB,GAA+BC,IAA/B,CAAoC,UAApC,EAAgD,KAAhD;IACD;EACF,CAvR0B;EAyR3B;EACA;EACA;EACA;EACA1F,mBAAmB,EAAE,6BAAUsF,SAAV,EAAqBM,MAArB,EAA6BxB,MAA7B,EAAqCyB,aAArC,EAAoD;IACvE,IAAI,CAACzB,MAAL,EAAaA,MAAM,GAAG,CAAT;IAEb,IAAI0B,gBAAgB,GAAG,KAAKvH,aAAL,CAAmBsE,GAAnB,CAAuB,CAAvB,EAA0BkD,qBAA1B,EAAvB;;IACA,IAAIT,SAAS,KAAK,KAAK3E,WAAvB,EAAoC;MAClC,KAAKpC,aAAL,CAAmBmG,UAAnB,CAA8BkB,MAAM,GAAGxB,MAAvC;;MACA,IAAI,KAAKvD,aAAT,EAAwB;QACtB;QACA,KAAKlD,MAAL,CAAYqI,wBAAZ,CAAqCF,gBAAgB,CAACG,IAAjB,GAAwB,CAA7D;MACD,CALiC,CAMlC;;;MACA,IAAI,KAAK1H,aAAL,CAAmBmG,UAAnB,OAAoC,CAAxC,EAA2C;QACzC,KAAKE,kBAAL;;QACA;MACD;IACF,CAXD,MAWO,IAAIU,SAAS,KAAK,KAAK1E,YAAvB,EAAqC;MAC1C,KAAKrC,aAAL,CAAmBmG,UAAnB,CAA8BkB,MAAM,GAAGxB,MAAvC;;MACA,IAAI,KAAKvD,aAAT,EAAwB;QACtB;QACA,KAAKlD,MAAL,CAAYqI,wBAAZ,CAAqCF,gBAAgB,CAACI,KAAjB,GAAyB,CAA9D;MACD,CALyC,CAM1C;;;MACA,IACE,KAAK3H,aAAL,CAAmBmG,UAAnB,KAAkC,KAAKnG,aAAL,CAAmBoH,UAAnB,EAAlC,KACA,KAAKpH,aAAL,CAAmBsE,GAAnB,CAAuB,CAAvB,EAA0BuC,WAF5B,EAGE;QACA,KAAKR,kBAAL;;QACA;MACD;IACF,CA7BsE,CA+BvE;;;IACAC,MAAM,CAACC,oBAAP,CAA4B,KAAKvE,GAAjC;IACA,KAAKA,GAAL,GAAWsE,MAAM,CAACsB,qBAAP,CACT,UAAUC,SAAV,EAAqB;MACnB,IAAIC,SAAS,GAAGR,aAAa,IAAIO,SAAjC;MACA,IAAIE,SAAS,GAAGF,SAAS,GAAGC,SAA5B;MACA,IAAIE,SAAS,GACX,KAAK9F,WAAL,GAAmB6F,SAAnB,GACA,MAAM,KAAK5F,YAAX,IAA2B4F,SAAS,GAAGA,SAAvC,CAFF;MAGAC,SAAS,GAAGtC,IAAI,CAACuC,GAAL,CAASD,SAAT,EAAoB,KAAKhI,aAAL,CAAmBsE,GAAnB,CAAuB,CAAvB,EAA0BuC,WAA9C,CAAZ;;MACA,KAAKpF,mBAAL,CAAyBsF,SAAzB,EAAoCM,MAApC,EAA4CW,SAA5C,EAAuDF,SAAvD;IACD,CARD,CAQEvH,IARF,CAQO,IARP,CADS,CAAX;EAWD,CAzU0B;;EA2U3B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE2H,aAAa,EAAE,uBAAUC,UAAV,EAAsB;IACnC,IAAI,KAAKtH,WAAL,IAAoB,KAAKuH,WAAL,EAAxB,EAA4C;MAC1C,KAAKvH,WAAL,CAAiBtB,OAAjB,CAAyB4I,UAAU,GAAG,MAAH,GAAY,MAA/C;MACA,OAAO,IAAP;IACD;;IAED,OAAO,KAAP;EACD,CA1V0B;;EA4V3B;AACF;AACA;AACA;AACA;AACA;AACA;EACEnE,SAAS,EAAE,qBAAY;IACrB,KAAKqE,IAAL,CAAU,SAAV,EAAqB,IAArB;;IAEA,KAAK,IAAI7E,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK7C,IAAL,CAAU8C,MAA9B,EAAsCD,CAAC,EAAvC,EAA2C;MACzC,KAAK7C,IAAL,CAAU6C,CAAV,EAAaQ,SAAb;IACD;;IAED,KAAKoB,oBAAL;;IACA,KAAKhE,kBAAL;;IAEAtC,CAAC,CAACwJ,QAAD,CAAD,CAAY9B,GAAZ,CAAgB,SAAhB,EAA2B,KAAK5D,2BAAhC;IACA,KAAKxC,iBAAL,CAAuBoG,GAAvB,CAA2B,OAA3B,EAAoC,KAAKlG,kBAAzC;IACA,KAAKF,iBAAL,CAAuBoG,GAAvB,CAA2B,SAA3B,EAAsC,KAAKhG,oBAA3C;IAEA,KAAKjB,OAAL,CAAagJ,MAAb;EACD,CAlX0B;;EAoX3B;AACF;AACA;AACA;AACA;EACEC,iBAAiB,EAAE,2BAAUC,IAAV,EAAgB;IACjC,IAAIA,IAAI,IAAI,KAAKrJ,MAAL,CAAYwF,OAAxB,EAAiC,OAAO,KAAKxF,MAAL,CAAYwF,OAAZ,CAAoB6D,IAApB,CAAP;EAClC,CA3X0B;;EA6X3B;AACF;AACA;AACA;AACA;EACEzF,eAAe,EAAE,2BAAY;IAC3B,IAAI0F,UAAJ,EACEC,MADF,EAEEC,KAFF,EAGEC,aAHF,EAIEC,aAJF,EAKEC,QALF,EAMEC,cANF,EAOEC,gBAPF,EAQEC,oBARF,EASEC,wBATF;IAWA;AACJ;AACA;;IAEIF,gBAAgB,GAAG,KAAK9J,aAAL,CAAmBM,MAAnB,CAA0B2J,MAA1B,CAAiCC,WAApD;IACAH,oBAAoB,GAAG,KAAK/J,aAAL,CAAmBM,MAAnB,CAA0B2J,MAA1B,CAAiCE,YAAxD;IACAH,wBAAwB,GAAG,KAAKhK,aAAL,CAAmBM,MAAnB,CAA0B2J,MAA1B,CACxBG,gBADH;IAGA,KAAKzI,iBAAL,GAAyB,IAAI9B,YAAJ,CACvB,IADuB,EAEvBiK,gBAFuB,EAGvB,gBAHuB,EAIvB,KAAKtG,2BAJkB,CAAzB;IAMA,KAAK7B,iBAAL,CAAuBvB,OAAvB,CAA+BY,IAA/B;IAEA,KAAKM,iBAAL,CAAuB+I,OAAvB,CAA+B,KAAKzI,aAApC;IACA,KAAKA,aAAL,CAAmBZ,IAAnB;IAEA;AACJ;AACA;;IACI,IAAI,KAAKqI,iBAAL,CAAuB,QAAvB,CAAJ,EAAsC;MACpCG,MAAM,GAAG5J,KAAK,CAACe,MAAN,CAAa,KAAK2J,cAAlB,EAAkC,IAAlC,CAAT;MACAb,KAAK,GAAG,KAAKJ,iBAAL,CAAuB,QAAvB,CAAR;MACA,IAAIxJ,YAAJ,CAAiB,IAAjB,EAAuB4J,KAAvB,EAA8B,WAA9B,EAA2CD,MAA3C;IACD;IAED;AACJ;AACA;;;IACI,IAAI,KAAKH,iBAAL,CAAuB,UAAvB,CAAJ,EAAwC;MACtCO,QAAQ,GAAGhK,KAAK,CAACe,MAAN,CAAa,KAAKV,MAAL,CAAYsK,cAAzB,EAAyC,KAAKtK,MAA9C,CAAX;MACAyJ,aAAa,GAAG,KAAKL,iBAAL,CAAuB,UAAvB,CAAhB;MACAM,aAAa,GAAG,KAAKN,iBAAL,CAAuB,UAAvB,CAAhB;MACAQ,cAAc,GAAG,IAAIhK,YAAJ,CACf,IADe,EAEf6J,aAFe,EAGf,aAHe,EAIfE,QAJe,CAAjB;MAOA,KAAK3J,MAAL,CAAYS,EAAZ,CAAe,WAAf,EAA4B,YAAY;QACtCmJ,cAAc,CAACzJ,OAAf,CAAuB4H,IAAvB,CAA4B,OAA5B,EAAqC2B,aAArC;MACD,CAFD;MAIA,KAAK1J,MAAL,CAAYS,EAAZ,CAAe,WAAf,EAA4B,YAAY;QACtCmJ,cAAc,CAACzJ,OAAf,CAAuB4H,IAAvB,CAA4B,OAA5B,EAAqC0B,aAArC;MACD,CAFD;IAGD;IAED;AACJ;AACA;;;IACI,IAAI,KAAKT,WAAL,EAAJ,EAAwB;MACtBM,UAAU,GAAG3J,KAAK,CAACe,MAAN,CAAa,KAAKV,MAAL,CAAYmJ,MAAzB,EAAiC,KAAKnJ,MAAtC,CAAb;MACAwJ,KAAK,GAAG,KAAKJ,iBAAL,CAAuB,OAAvB,CAAR;MACA,KAAK3H,WAAL,GAAmB,IAAI7B,YAAJ,CAAiB,IAAjB,EAAuB4J,KAAvB,EAA8B,UAA9B,EAA0CF,UAA1C,CAAnB;IACD;EACF,CA1c0B;;EA4c3B;AACF;AACA;AACA;AACA;EACE/F,2BAA2B,EAAE,uCAAY;IACvC,IAAI,KAAKH,eAAT,EAA0B;MACxB,KAAKI,2BAAL;;MACA;IACD,CAJsC,CAMvC;IACA;;;IACA,KAAKvC,eAAL,GAAuB,KAAKL,aAAL,CACpB2J,KADoB,CACd,IADc,EAEpBC,QAFoB,CAEX,KAAK1J,oBAFM,EAGpB2J,QAHoB,GAIpBC,WAJoB,CAIR,WAJQ,CAAvB,CARuC,CAcvC;;IACA,KAAK5J,oBAAL,CAA0B2E,IAA1B;IACA,KAAKrC,eAAL,GAAuB,IAAvB,CAhBuC,CAkBvC;IACA;IACA;;IACA,KAAKjD,OAAL,CAAaK,QAAb,CAAsB,kBAAtB,EArBuC,CAuBvC;;IACA,KAAKQ,iBAAL,CAAuB2J,GAAvB,CAA2B,EAA3B,EAA+BC,KAA/B;IACA,KAAKvH,gBAAL,GAAwB,CAAxB;IACA,KAAKpC,eAAL,CACG4J,EADH,CACM,KAAKxH,gBADX,EAEG7C,QAFH,CAEY,oBAFZ;IAIAd,CAAC,CAACwJ,QAAD,CAAD,CAAYzI,EAAZ,CAAe,WAAf,EAA4B,KAAK+C,2BAAjC;;IACA,KAAKsH,6BAAL;EACD,CAjf0B;EAmf3B;EACA1J,oBAAoB,EAAE,8BAAU2J,CAAV,EAAa;IACjC,IAAI,KAAK1H,gBAAL,KAA0B,CAAC,CAA/B,EAAkC;;IAElC,IAAI0H,CAAC,CAACC,GAAF,KAAU,QAAd,EAAwB;MACtB,KAAKxH,2BAAL;;MACA;IACD;;IAED,IAAIuH,CAAC,CAACC,GAAF,KAAU,OAAV,IAAqBD,CAAC,CAACC,GAAF,KAAU,GAAnC,EAAwC;MACtC;MACA,KAAKxH,2BAAL;;MACA,KAAKjC,IAAL,CAAU,KAAK8B,gBAAf,EAAiC4H,WAAjC;;MACA;IACD;;IAED,SAASC,oBAAT,CAA8BC,UAA9B,EAA0C9E,KAA1C,EAAiDpF,eAAjD,EAAkE;MAChE,IAAIA,eAAe,CAACoD,MAAhB,GAAyB,CAA7B,EAAgC;QAC9B,OAAO,CAAC,CAAR;MACD;;MACD,IAAID,CAAC,GACH,CAAC+G,UAAU,GAAG9E,KAAb,GAAqBpF,eAAe,CAACoD,MAAtC,IAAgDpD,eAAe,CAACoD,MADlE;;MAEA,OAAOD,CAAC,KAAK+G,UAAb,EAAyB;QACvB,IAAIlK,eAAe,CAAC4J,EAAhB,CAAmBzG,CAAnB,EAAsBgH,GAAtB,CAA0B,SAA1B,MAAyC,MAA7C,EAAqD;UACnD,OAAOhH,CAAP;QACD;;QACDA,CAAC,GAAG,CAACA,CAAC,GAAGiC,KAAJ,GAAYpF,eAAe,CAACoD,MAA7B,IAAuCpD,eAAe,CAACoD,MAA3D;MACD;;MAED,OAAO8G,UAAP;IACD,CA7BgC,CA+BjC;;;IACA,IAAIJ,CAAC,CAACC,GAAF,KAAU,WAAV,IAA0BD,CAAC,CAACC,GAAF,KAAU,KAAV,IAAmBD,CAAC,CAACM,QAAF,KAAe,KAAhE,EAAwE;MACtEN,CAAC,CAACO,cAAF;MACA,KAAKrK,eAAL,CACG4J,EADH,CACM,KAAKxH,gBADX,EAEGqH,WAFH,CAEe,oBAFf;MAGA,KAAKrH,gBAAL,GAAwB6H,oBAAoB,CAC1C,KAAK7H,gBADqC,EAE1C,CAF0C,EAG1C,KAAKpC,eAHqC,CAA5C;MAKA,KAAKA,eAAL,CACG4J,EADH,CACM,KAAKxH,gBADX,EAEG7C,QAFH,CAEY,oBAFZ;IAGD,CAbD,MAaO,IAAIuK,CAAC,CAACC,GAAF,KAAU,SAAV,IAAuBD,CAAC,CAACC,GAAF,KAAU,KAArC,EAA4C;MACjDD,CAAC,CAACO,cAAF;MACA,KAAKrK,eAAL,CACG4J,EADH,CACM,KAAKxH,gBADX,EAEGqH,WAFH,CAEe,oBAFf;MAGA,KAAKrH,gBAAL,GAAwB6H,oBAAoB,CAC1C,KAAK7H,gBADqC,EAE1C,CAAC,CAFyC,EAG1C,KAAKpC,eAHqC,CAA5C;MAKA,KAAKA,eAAL,CACG4J,EADH,CACM,KAAKxH,gBADX,EAEG7C,QAFH,CAEY,oBAFZ;IAGD;EACF,CA/iB0B;EAijB3B;EACAU,kBAAkB,EAAE,4BAAUgF,KAAV,EAAiB;IACnC;IACA,KAAKjF,eAAL,CACG4J,EADH,CACM,KAAKxH,gBADX,EAEGqH,WAFH,CAEe,oBAFf;IAGA,KAAKrH,gBAAL,GAAwB,CAAC,CAAzB;;IAEA,KAAK,IAAIe,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKnD,eAAL,CAAqBoD,MAAzC,EAAiDD,CAAC,EAAlD,EAAsD;MACpD,IACE,KAAK7C,IAAL,CAAU6C,CAAV,EAAaH,WAAb,CAAyB5D,MAAzB,CAAgCkL,KAAhC,CACGC,WADH,GAEGC,OAFH,CAEWvF,KAAK,CAACC,MAAN,CAAauF,KAAb,CAAmBF,WAAnB,EAFX,MAEiD,CAAC,CAHpD,EAIE;QACA,KAAKvK,eAAL,CAAqB4J,EAArB,CAAwBzG,CAAxB,EAA2BgH,GAA3B,CAA+B,SAA/B,EAA0C,EAA1C;QACA,IAAI,KAAK/H,gBAAL,KAA0B,CAAC,CAA/B,EAAkC,KAAKA,gBAAL,GAAwBe,CAAxB;MACnC,CAPD,MAOO;QACL,KAAKnD,eAAL,CAAqB4J,EAArB,CAAwBzG,CAAxB,EAA2BgH,GAA3B,CAA+B,SAA/B,EAA0C,MAA1C;MACD;IACF;;IAED,IAAI,KAAK/H,gBAAL,KAA0B,CAAC,CAA/B,EAAkC;MAChC,KAAKpC,eAAL,CACG4J,EADH,CACM,KAAKxH,gBADX,EAEG7C,QAFH,CAEY,oBAFZ;IAGD;EACF,CA3kB0B;;EA6kB3B;AACF;AACA;AACA;AACA;AACA;AACA;EACEgD,2BAA2B,EAAE,qCAAU0C,KAAV,EAAiB;IAC5C;IACA,IAAI,CAAC,KAAK9C,eAAV,EAA2B;;IAE3B,IAAI8C,KAAK,IAAI,KAAKpF,oBAAL,CAA0BoE,GAA1B,CAA8B,CAA9B,EAAiCyG,QAAjC,CAA0CzF,KAAK,CAACC,MAAhD,CAAb,EAAsE;MACpE;MACA;IACD,CAHD,MAGO,IACLD,KAAK,IACL,KAAKxE,iBAAL,CAAuBvB,OAAvB,CAA+B+E,GAA/B,CAAmC,CAAnC,MAA0CgB,KAAK,CAACC,MAF3C,EAGL;MACA;MACA;IACD;;IAED,KAAKhG,OAAL,CAAauK,WAAb,CAAyB,kBAAzB;IACA,KAAK5J,oBAAL,CAA0BC,IAA1B;IACA,KAAKqC,eAAL,GAAuB,KAAvB,CAjB4C,CAmB5C;;IACA,KAAKtC,oBAAL,CAA0BD,IAA1B,CAA+B,UAA/B,EAA2CsI,MAA3C;IAEAzJ,CAAC,CAACwJ,QAAD,CAAD,CAAY9B,GAAZ,CAAgB,WAAhB,EAA6B,KAAK5D,2BAAlC;EACD,CA3mB0B;;EA6mB3B;AACF;AACA;AACA;AACA;EACEsH,6BAA6B,EAAE,yCAAY;IACzC,KAAKhK,oBAAL,CAA0BsK,GAA1B,CAA8B,YAA9B,EAA4C,EAA5C;IACA,IAAIQ,CAAC,GAAG,KAAK9K,oBAAL,CAA0B,CAA1B,EAA6B+K,YAArC;IACA,IAAID,CAAC,KAAK,CAAV,EAAa,OAH4B,CAGpB;;IAErB,IAAIE,CAAC,GAAG,KAAKhL,oBAAL,CAA0BiL,MAA1B,GAAmCC,GAAnC,GAAyCtM,CAAC,CAACwH,MAAD,CAAD,CAAU+E,SAAV,EAAjD,CALyC,CAOzC;;IACA,IAAIH,CAAC,GAAGF,CAAJ,GAAQlM,CAAC,CAACwH,MAAD,CAAD,CAAUgF,MAAV,EAAZ,EAAgC;MAC9B,KAAKpL,oBAAL,CAA0BsK,GAA1B,CAA8B,YAA9B,EAA4C1L,CAAC,CAACwH,MAAD,CAAD,CAAUgF,MAAV,KAAqBJ,CAArB,GAAyB,EAArE,EAD8B,CAC4C;IAC3E;EACF,CA7nB0B;;EA+nB3B;AACF;AACA;AACA;AACA;AACA;EACE9C,WAAW,EAAE,uBAAY;IACvB,OACE,KAAKhJ,MAAL,CAAYK,MAAZ,CAAmB0I,UAAnB,IACA,KAAKhJ,aAAL,CAAmBM,MAAnB,CAA0BC,QAA1B,CAAmC6L,aAFrC;EAID,CA1oB0B;EA4oB3B9B,cAAc,EAAE,0BAAY;IAC1B,IAAI,KAAKtK,aAAL,CAAmBM,MAAnB,CAA0BC,QAA1B,CAAmC8L,gBAAnC,KAAwD,IAA5D,EAAkE;MAChE,KAAKpM,MAAL,CAAYuJ,MAAZ;IACD,CAFD,MAEO;MACL,KAAK/H,iBAAL,CAAuB+H,MAAvB;IACD;EACF,CAlpB0B;;EAopB3B;AACF;AACA;AACA;AACA;AACA;AACA;EACE5I,cAAc,EAAE,wBAAUuF,KAAV,EAAiB;IAC/B,IAAIA,KAAK,CAACC,MAAN,KAAiB,KAAKhG,OAAL,CAAa,CAAb,CAArB,EAAsC;MACpC,KAAKH,MAAL,CAAYqM,MAAZ;IACD;EACF,CA/pB0B;;EAiqB3B;AACF;AACA;AACA;AACA;EACE/K,eAAe,EAAE,2BAAY;IAC3B,IAAI,KAAKC,IAAL,CAAU8C,MAAV,KAAqB,CAAzB,EAA4B;MAC1B;IACD;;IAED,IACE,CAAC,KAAKlB,aAAN,IACA,KAAKvC,aAAL,CAAmBsE,GAAnB,CAAuB,CAAvB,EAA0BuC,WAA1B,GACE,KAAK7G,aAAL,CAAmBsE,GAAnB,CAAuB,CAAvB,EAA0BoH,WAH9B,EAIE;MACA,KAAK5K,iBAAL,CAAuBvB,OAAvB,CAA+BsF,IAA/B;MACA,KAAK9D,aAAL,CAAmB8D,IAAnB;MACA,KAAK5D,iBAAL,CAAuB4D,IAAvB;MACA,KAAKtC,aAAL,GAAqB,IAArB;IACD,CATD,MASO,IACL,KAAKA,aAAL,IACA,KAAKvC,aAAL,CAAmBsE,GAAnB,CAAuB,CAAvB,EAA0BuC,WAA1B,IACE,KAAK7G,aAAL,CAAmBsE,GAAnB,CAAuB,CAAvB,EAA0BoH,WAHvB,EAIL;MACA,KAAK5K,iBAAL,CAAuBvB,OAAvB,CAA+BY,IAA/B;MACA,KAAKY,aAAL,CAAmBZ,IAAnB;MACA,KAAKc,iBAAL,CAAuBd,IAAvB;MACA,KAAKoC,aAAL,GAAqB,KAArB;IACD;;IAED,IAAI,KAAKA,aAAT,EAAwB,KAAK8D,kBAAL;EACzB;AAhsB0B,CAA7B;AAmsBA,eAAenH,MAAf"}
1
+ {"version":3,"file":"Header.js","names":["$","EventEmitter","HeaderButton","Tab","Header","constructor","layoutManager","parent","_template","_nextButtonTemplate","_previousButtonTemplate","config","settings","selectionEnabled","element","addClass","on","_onHeaderClick","bind","tabsContainer","find","tabDropdownContainer","hide","tabDropdownSearch","_handleFilterInput","_handleFilterKeydown","controlsContainer","_updateTabSizes","_handleItemPickedUp","_handleItemDropped","_handleNextMouseEnter","_handleNextMouseLeave","_handlePreviousMouseEnter","_handlePreviousMouseLeave","_handleScrollRepeat","_handleNextButtonMouseDown","_handlePreviousButtonMouseDown","_handleScrollButtonMouseDown","_handleScrollButtonMouseUp","_handleScrollEvent","tabNextButton","tabPreviousButton","before","_showAdditionalTabsDropdown","_hideAdditionalTabsDropdown","_tabControlOffset","tabControlOffset","_createControls","createTab","contentItem","index","i","tabs","length","tab","push","append","undefined","after","splice","removeTab","_$destroy","Error","setActiveContentItem","isActive","setActive","activeContentItem","activeItemIndex","get","scrollIntoView","inline","emitBubblingEvent","position","previous","_header","show","_side","_setupHeaderPosition","_attachWheelListener","addEventListener","_handleWheelEvent","passive","_detachWheelListener","removeEventListener","event","target","currentTarget","HTMLElement","delta","Math","abs","deltaY","deltaX","deltaMode","WheelEvent","DOM_DELTA_PAGE","innerWidth","DOM_DELTA_LINE","scrollLeft","round","_checkScrollArrows","isDraggingTab","window","cancelAnimationFrame","rAF","off","SCROLL_RIGHT","SCROLL_LEFT","rightOffscreenChild","offsetLeft","offsetWidth","behavior","scrollWidth","leftOffscreenChild","direction","holdTimer","setTimeout","CLICK_TIMEOUT","clearTimeout","first","prop","startX","prevTimestamp","tabContainer","tabContainerRect","getBoundingClientRect","_highlightHeaderDropZone","left","right","requestAnimationFrame","timestamp","startTime","deltaTime","newDeltaX","START_SPEED","ACCELERATION","min","Infinity","_$setClosable","isClosable","closeButton","_isClosable","emit","document","remove","_getHeaderSetting","name","closeStack","popout","label","maximise","tabDropdownLabel","tabOverflowNextLabel","tabOverflowPreviousLabel","labels","tabDropdown","tabNextLabel","tabPreviousLabel","tabDropdownButton","prepend","_onPopoutClick","toggleMaximise","maximiseLabel","minimiseLabel","maximiseButton","attr","isDropdownShown","tabDropdownList","clone","appendTo","children","removeClass","val","focus","dropdownKeyIndex","eq","_updateAdditionalTabsDropdown","e","key","_onTabClick","getNextDropdownIndex","startIndex","css","shiftKey","preventDefault","title","toLowerCase","indexOf","value","contains","h","scrollHeight","y","offset","top","scrollTop","height","Boolean","showCloseIcon","popoutWholeStack","select","isOverflowing","clientWidth","join"],"sources":["../../src/controls/Header.ts"],"sourcesContent":["import $ from 'jquery';\nimport type { AbstractContentItem, Stack } from '../items';\nimport type { StackHeaderConfig } from '../items/Stack';\nimport type LayoutManager from '../LayoutManager';\nimport { EventEmitter } from '../utils';\nimport HeaderButton from './HeaderButton';\nimport Tab from './Tab';\n\n/**\n * This class represents a header above a Stack ContentItem.\n *\n * @param layoutManager\n * @param parent\n */\nexport default class Header extends EventEmitter {\n private static _template = [\n '<div class=\"lm_header\">',\n '<ul class=\"lm_tabs\"></ul>',\n '<ul class=\"lm_controls\"></ul>',\n '<ul class=\"lm_tabdropdown_list\">',\n '<li class=\"lm_tabdropdown_search\"><input type=\"text\" placeholder=\"Find tab...\"></li>',\n '</ul>',\n '</div>',\n ].join('');\n\n private static _previousButtonTemplate = [\n '<ul class=\"lm_controls\">',\n '<li class=\"lm_tabpreviousbutton\"></li>',\n '</ul>',\n ].join('');\n\n private static _nextButtonTemplate = [\n '<li class=\"lm_tabnextbutton\"></li>',\n ].join('');\n\n layoutManager: LayoutManager;\n element = $(Header._template);\n\n tabsContainer: JQuery<HTMLElement>;\n tabDropdownContainer: JQuery<HTMLElement>;\n tabDropdownSearch: JQuery<HTMLElement>;\n tabDropdownList: JQuery<HTMLElement> | null = null;\n\n controlsContainer: JQuery<HTMLElement>;\n\n parent: Stack;\n\n tabs: Tab[] = [];\n activeContentItem: AbstractContentItem | null = null;\n closeButton: HeaderButton | null = null;\n\n tabDropdownButton: HeaderButton | null = null;\n tabNextButton = $(Header._nextButtonTemplate);\n tabPreviousButton = $(Header._previousButtonTemplate);\n\n // use for scroll repeat\n holdTimer: number | null = null;\n rAF: number | null = null;\n\n // mouse hold timeout to act as hold instead of click\n CLICK_TIMEOUT = 500;\n // mouse hold acceleration\n START_SPEED = 0.01;\n ACCELERATION = 0.0005;\n SCROLL_LEFT = 'left' as const;\n SCROLL_RIGHT = 'right' as const;\n\n isDraggingTab = false;\n isOverflowing = false;\n isDropdownShown = false;\n dropdownKeyIndex = 0;\n\n private _lastVisibleTabIndex = -1;\n private _tabControlOffset?: number;\n\n constructor(layoutManager: LayoutManager, parent: Stack) {\n super();\n\n this.layoutManager = layoutManager;\n\n if (this.layoutManager.config.settings?.selectionEnabled) {\n this.element.addClass('lm_selectable');\n this.element.on('click', this._onHeaderClick.bind(this));\n }\n\n this.tabsContainer = this.element.find('.lm_tabs');\n\n this.tabDropdownContainer = this.element.find('.lm_tabdropdown_list');\n this.tabDropdownContainer.hide();\n this.tabDropdownSearch = this.element.find('.lm_tabdropdown_search input');\n\n this._handleFilterInput = this._handleFilterInput.bind(this);\n this._handleFilterKeydown = this._handleFilterKeydown.bind(this);\n this.tabDropdownSearch.on('input', this._handleFilterInput);\n this.tabDropdownSearch.on('keydown', this._handleFilterKeydown);\n\n this.controlsContainer = this.element.find('.lm_controls');\n this.parent = parent;\n this.parent.on('resize', this._updateTabSizes, this);\n\n this._handleItemPickedUp = this._handleItemPickedUp.bind(this);\n this._handleItemDropped = this._handleItemDropped.bind(this);\n\n this._handleNextMouseEnter = this._handleNextMouseEnter.bind(this);\n this._handleNextMouseLeave = this._handleNextMouseLeave.bind(this);\n this._handlePreviousMouseEnter = this._handlePreviousMouseEnter.bind(this);\n this._handlePreviousMouseLeave = this._handlePreviousMouseLeave.bind(this);\n this._handleScrollRepeat = this._handleScrollRepeat.bind(this);\n this._handleNextButtonMouseDown = this._handleNextButtonMouseDown.bind(\n this\n );\n this._handlePreviousButtonMouseDown = this._handlePreviousButtonMouseDown.bind(\n this\n );\n this._handleScrollButtonMouseDown = this._handleScrollButtonMouseDown.bind(\n this\n );\n this._handleScrollButtonMouseUp = this._handleScrollButtonMouseUp.bind(\n this\n );\n this._handleScrollEvent = this._handleScrollEvent.bind(this);\n\n this.tabNextButton.on('mousedown', this._handleNextButtonMouseDown);\n this.tabPreviousButton.on('mousedown', this._handlePreviousButtonMouseDown);\n this.tabsContainer.on('scroll', this._handleScrollEvent);\n\n this.layoutManager.on('itemPickedUp', this._handleItemPickedUp);\n this.layoutManager.on('itemDropped', this._handleItemDropped);\n\n // append previous button template\n this.tabsContainer.before(this.tabPreviousButton);\n // change reference to just the li, not the wrapping ul\n this.tabPreviousButton = this.tabPreviousButton.find('>:first-child');\n this.tabPreviousButton.hide();\n\n this._showAdditionalTabsDropdown = this._showAdditionalTabsDropdown.bind(\n this\n );\n this._hideAdditionalTabsDropdown = this._hideAdditionalTabsDropdown.bind(\n this\n );\n\n this._tabControlOffset = this.layoutManager.config.settings?.tabControlOffset;\n this._createControls();\n }\n\n /**\n * Creates a new tab and associates it with a contentItem\n *\n * @param contentItem\n * @param index The position of the tab\n */\n createTab(contentItem: AbstractContentItem, index?: number) {\n //If there's already a tab relating to the\n //content item, don't do anything\n for (let i = 0; i < this.tabs.length; i++) {\n if (this.tabs[i].contentItem === contentItem) {\n return;\n }\n }\n\n const tab = new Tab(this, contentItem);\n\n if (this.tabs.length === 0) {\n this.tabs.push(tab);\n this.tabsContainer.append(tab.element);\n return;\n }\n\n if (index === undefined) {\n index = this.tabs.length;\n }\n\n if (index > 0) {\n this.tabs[index - 1].element.after(tab.element);\n } else {\n this.tabs[0].element.before(tab.element);\n }\n\n this.tabs.splice(index, 0, tab);\n this._updateTabSizes();\n }\n\n /**\n * Finds a tab based on the contentItem its associated with and removes it.\n *\n * @param contentItem\n */\n removeTab(contentItem: AbstractContentItem) {\n for (var i = 0; i < this.tabs.length; i++) {\n if (this.tabs[i].contentItem === contentItem) {\n this.tabs[i]._$destroy();\n this.tabs.splice(i, 1);\n return;\n }\n }\n\n throw new Error('contentItem is not controlled by this header');\n }\n\n /**\n * The programmatical equivalent of clicking a Tab.\n *\n * @param contentItem\n */\n setActiveContentItem(contentItem: AbstractContentItem) {\n var isActive;\n\n for (var i = 0; i < this.tabs.length; i++) {\n isActive = this.tabs[i].contentItem === contentItem;\n this.tabs[i].setActive(isActive);\n if (isActive === true) {\n this.activeContentItem = contentItem;\n this.parent.config.activeItemIndex = i;\n }\n }\n\n // makes sure dropped tabs are scrollintoview, removed any re-ordering\n this.tabs[this.parent.config.activeItemIndex ?? 0].element\n .get(0)\n ?.scrollIntoView({\n inline: 'nearest',\n });\n\n this._hideAdditionalTabsDropdown();\n this._updateTabSizes();\n this.parent.emitBubblingEvent('stateChanged');\n }\n\n /**\n * Programmatically operate with header position.\n *\n * @param position one of ('top','left','right','bottom') to set or empty to get it.\n *\n * @returns previous header position\n */\n position(position?: 'top' | 'left' | 'right' | 'bottom') {\n let previous = this.parent._header.show;\n if (previous && !this.parent._side) previous = 'top';\n if (position !== undefined && this.parent._header.show !== position) {\n this.parent._header.show = position;\n this.parent._setupHeaderPosition();\n }\n return previous;\n }\n\n // Manually attaching so wheel can be passive instead of jquery .on\n // _attachWheelListener is called by parent init\n _attachWheelListener() {\n this.tabsContainer\n .get(0)\n ?.addEventListener('wheel', this._handleWheelEvent, { passive: true });\n }\n\n // detach called by this.destroy\n _detachWheelListener() {\n this.tabsContainer\n .get(0)\n ?.removeEventListener('wheel', this._handleWheelEvent);\n }\n\n _handleWheelEvent(event: WheelEvent) {\n const target = event.currentTarget;\n\n if (!(target instanceof HTMLElement)) {\n return;\n }\n\n // we only care about the larger of the two deltas\n let delta =\n Math.abs(event.deltaY) > Math.abs(event.deltaX)\n ? event.deltaY\n : event.deltaX;\n\n // jshint\n /* globals WheelEvent */\n if (event.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n // Users can set OS to be in deltaMode page\n // scrolly by page units as pixels\n delta *= this.tabsContainer.innerWidth() ?? 1;\n } else if (event.deltaMode === WheelEvent.DOM_DELTA_LINE) {\n // chrome goes 100px per 3 lines, and firefox would go 102 per 3 (17 lineheight * 3 lines * 2)\n delta *= 100 / 3;\n }\n target.scrollLeft += Math.round(delta);\n }\n\n // on scroll we need to check if side error might need to be disabled\n _handleScrollEvent() {\n this._checkScrollArrows();\n }\n\n // when and item is picked up, attach mouse enter listeners to next/previous buttons\n _handleItemPickedUp() {\n this.isDraggingTab = true;\n this.controlsContainer.on('mouseenter', this._handleNextMouseEnter);\n this.tabPreviousButton.on('mouseenter', this._handlePreviousMouseEnter);\n }\n\n // when an item is dropped remove listeners and cancel animation\n _handleItemDropped() {\n this.isDraggingTab = false;\n window.cancelAnimationFrame(this.rAF ?? -1);\n this.rAF = null;\n this.controlsContainer.off('mouseenter', this._handleNextMouseEnter);\n this.controlsContainer.off('mouseleave', this._handleNextMouseLeave);\n this.tabPreviousButton.off('mouseenter', this._handlePreviousMouseEnter);\n this.tabPreviousButton.off('mouseleave', this._handlePreviousMouseLeave);\n }\n\n // on next/previous enter start scroll repeat animation loop\n // and attach a listener looking for mouseleave\n // cancel animation on mouse leave, and remove leave listener\n _handleNextMouseEnter() {\n this.controlsContainer.on('mouseleave', this._handleNextMouseLeave);\n this._handleScrollRepeat(\n this.SCROLL_RIGHT,\n this.tabsContainer.scrollLeft() ?? 0\n );\n }\n\n _handlePreviousMouseEnter() {\n this.tabPreviousButton.on('mouseleave', this._handlePreviousMouseLeave);\n this._handleScrollRepeat(\n this.SCROLL_LEFT,\n this.tabsContainer.scrollLeft() ?? 0\n );\n }\n\n _handleNextMouseLeave() {\n window.cancelAnimationFrame(this.rAF ?? -1);\n this.rAF = null;\n this.controlsContainer.off('mouseleave', this._handleNextMouseLeave);\n }\n\n _handlePreviousMouseLeave() {\n window.cancelAnimationFrame(this.rAF ?? -1);\n this.rAF = null;\n this.tabPreviousButton.off('mouseleave', this._handlePreviousMouseLeave);\n }\n\n // scroll one tab to the right on mouse down\n // start scrollRepeat if mouse is held down\n _handleNextButtonMouseDown() {\n var rightOffscreenChild;\n for (let i = 0; i < this.tabs.length; i += 1) {\n if (\n (this.tabs[i].element.get(0)?.offsetLeft ?? 0) >\n (this.tabsContainer.get(0)?.offsetWidth ?? 0) +\n (this.tabsContainer.scrollLeft() ?? 0)\n ) {\n rightOffscreenChild = this.tabs[i].element.get(0);\n break;\n }\n }\n\n if (rightOffscreenChild) {\n rightOffscreenChild.scrollIntoView({\n behavior: 'smooth',\n inline: 'nearest',\n });\n this._handleScrollButtonMouseDown(this.SCROLL_RIGHT);\n } else {\n const tabsContainer = this.tabsContainer.get(0);\n if (tabsContainer) {\n tabsContainer.scrollLeft = this.tabsContainer.get(0)?.scrollWidth ?? 0;\n }\n }\n }\n\n // scroll left by one tab\n // start scrollRepeat if mouse is held down\n _handlePreviousButtonMouseDown() {\n var leftOffscreenChild;\n for (var i = this.tabs.length - 1; i >= 0; i -= 1) {\n if (\n (this.tabs[i].element.get(0)?.offsetLeft ?? 0) <\n (this.tabsContainer.scrollLeft() ?? 0)\n ) {\n leftOffscreenChild = this.tabs[i].element.get(0);\n break;\n }\n }\n if (leftOffscreenChild) {\n leftOffscreenChild.scrollIntoView({\n behavior: 'smooth',\n inline: 'start',\n });\n this._handleScrollButtonMouseDown(this.SCROLL_LEFT);\n } else {\n const tabsContainer = this.tabsContainer.get(0);\n if (tabsContainer) {\n tabsContainer.scrollLeft = 0;\n }\n }\n }\n\n // when hold timer is reached start scroll repeat anim loop\n // cancel it when mouse up happens anywhere\n _handleScrollButtonMouseDown(direction: 'right' | 'left') {\n // closure so that scrollLeft is value at end of timer, and not start of timer\n this.holdTimer = window.setTimeout(() => {\n this._handleScrollRepeat(\n direction,\n this.tabsContainer.scrollLeft() ?? 0,\n 100\n ); // kickstart deltaX to be faster\n }, this.CLICK_TIMEOUT);\n window.addEventListener('mouseup', this._handleScrollButtonMouseUp);\n }\n\n // cancel scroll repeat\n _handleScrollButtonMouseUp() {\n clearTimeout(this.holdTimer ?? -1);\n this.holdTimer = null;\n cancelAnimationFrame(this.rAF ?? -1);\n this.rAF = null;\n window.removeEventListener('mouseup', this._handleScrollButtonMouseUp);\n }\n\n // disables scroll arrow if at edge of scroll area\n _checkScrollArrows() {\n if (this.tabsContainer.scrollLeft() === 0) {\n this.tabPreviousButton.first().prop('disabled', true);\n } else if (\n (this.tabsContainer.scrollLeft() ?? 0) +\n (this.tabsContainer.innerWidth() ?? 0) ===\n this.tabsContainer.get(0)?.scrollWidth\n ) {\n this.tabNextButton.prop('disabled', true);\n } else {\n this.tabNextButton.prop('disabled', false);\n this.tabPreviousButton.first().prop('disabled', false);\n }\n }\n\n // scrolls the tab header container on drag tab over control buttons\n // or on press and hold of scroll arrows at either end\n // called recurisevly in an animation loop until cancelled\n // or directional end is reached\n _handleScrollRepeat(\n direction: 'left' | 'right',\n startX: number,\n deltaX = 0,\n prevTimestamp?: number\n ) {\n const tabContainer = this.tabsContainer.get(0);\n if (!tabContainer) {\n return;\n }\n\n const tabContainerRect = tabContainer.getBoundingClientRect();\n if (direction === this.SCROLL_LEFT) {\n this.tabsContainer.scrollLeft(startX - deltaX);\n if (this.isDraggingTab) {\n // update drag placeholder\n this.parent._highlightHeaderDropZone(tabContainerRect.left - 1);\n }\n // stop loop at left edge\n if (this.tabsContainer.scrollLeft() === 0) {\n this._checkScrollArrows();\n return;\n }\n } else if (direction === this.SCROLL_RIGHT) {\n this.tabsContainer.scrollLeft(startX + deltaX);\n if (this.isDraggingTab) {\n // update drag placeholder\n this.parent._highlightHeaderDropZone(tabContainerRect.right + 1);\n }\n // stop loop at right edge\n if (\n (this.tabsContainer.scrollLeft() ?? 0) +\n (this.tabsContainer.innerWidth() ?? 0) ===\n tabContainer.scrollWidth\n ) {\n this._checkScrollArrows();\n return;\n }\n }\n\n // setup animation loop, scroll with acceleration\n window.cancelAnimationFrame(this.rAF ?? -1);\n this.rAF = window.requestAnimationFrame((timestamp: number) => {\n var startTime = prevTimestamp || timestamp;\n var deltaTime = timestamp - startTime;\n var newDeltaX =\n this.START_SPEED * deltaTime +\n 0.5 * this.ACCELERATION * (deltaTime * deltaTime);\n newDeltaX = Math.min(\n newDeltaX,\n this.tabsContainer.get(0)?.scrollWidth ?? Infinity\n );\n this._handleScrollRepeat(direction, startX, newDeltaX, startTime);\n });\n }\n\n /**\n * Programmatically set closability.\n * @param isClosable Whether to enable/disable closability.\n * @returns Whether the action was successful\n */\n _$setClosable(isClosable: boolean) {\n if (this.closeButton && this._isClosable()) {\n this.closeButton.element[isClosable ? 'show' : 'hide']();\n return true;\n }\n\n return false;\n }\n\n /**\n * Destroys the entire header\n */\n _$destroy() {\n this.emit('destroy', this);\n\n for (var i = 0; i < this.tabs.length; i++) {\n this.tabs[i]._$destroy();\n }\n\n this._detachWheelListener();\n this._handleItemDropped();\n\n $(document).off('mouseup', this._hideAdditionalTabsDropdown);\n this.tabDropdownSearch.off('input', this._handleFilterInput);\n this.tabDropdownSearch.off('keydown', this._handleFilterKeydown);\n\n this.element.remove();\n }\n\n /**\n * get settings from header\n *\n * @returns when exists\n */\n _getHeaderSetting<\n N extends 'show' | 'popout' | 'maximise' | 'close' | 'minimise'\n >(name: N): StackHeaderConfig[N] {\n if (name in this.parent._header) return this.parent._header[name];\n }\n\n /**\n * Creates the popout, maximise and close buttons in the header's top right corner\n */\n _createControls() {\n var closeStack,\n popout,\n label,\n maximise,\n tabDropdownLabel,\n tabOverflowNextLabel,\n tabOverflowPreviousLabel;\n\n /**\n * Dropdown to show additional tabs.\n */\n\n tabDropdownLabel = this.layoutManager.config.labels.tabDropdown;\n tabOverflowNextLabel = this.layoutManager.config.labels.tabNextLabel;\n tabOverflowPreviousLabel = this.layoutManager.config.labels\n .tabPreviousLabel;\n\n this.tabDropdownButton = new HeaderButton(\n this,\n tabDropdownLabel,\n 'lm_tabdropdown',\n this._showAdditionalTabsDropdown\n );\n this.tabDropdownButton.element.hide();\n\n this.controlsContainer.prepend(this.tabNextButton);\n this.tabNextButton.hide();\n\n /**\n * Popout control to launch component in new window.\n */\n if (this._getHeaderSetting('popout')) {\n popout = this._onPopoutClick.bind(this);\n label = this._getHeaderSetting('popout');\n new HeaderButton(this, label, 'lm_popout', popout);\n }\n\n /**\n * Maximise control - set the component to the full size of the layout\n */\n if (this._getHeaderSetting('maximise')) {\n maximise = this.parent.toggleMaximise.bind(this.parent);\n const maximiseLabel = this._getHeaderSetting('maximise');\n const minimiseLabel = this._getHeaderSetting('minimise');\n const maximiseButton = new HeaderButton(\n this,\n maximiseLabel,\n 'lm_maximise',\n maximise\n );\n\n this.parent.on('maximised', function () {\n maximiseButton.element.attr('title', minimiseLabel ?? '');\n });\n\n this.parent.on('minimised', function () {\n maximiseButton.element.attr('title', maximiseLabel ?? '');\n });\n }\n\n /**\n * Close button\n */\n if (this._isClosable()) {\n closeStack = this.parent.remove.bind(this.parent);\n label = this._getHeaderSetting('close');\n this.closeButton = new HeaderButton(this, label, 'lm_close', closeStack);\n }\n }\n\n /**\n * Shows drop down for additional tabs when there are too many to display.\n *\n * @returns {void}\n */\n _showAdditionalTabsDropdown() {\n if (this.isDropdownShown) {\n this._hideAdditionalTabsDropdown();\n return;\n }\n\n // clone tabs in the current list, with event listeners\n // and add them to the drop down\n this.tabDropdownList = this.tabsContainer\n .clone(true)\n .appendTo(this.tabDropdownContainer)\n .children()\n .removeClass('lm_active');\n\n // show the dropdown\n this.tabDropdownContainer.show();\n this.isDropdownShown = true;\n\n // dropdown is a part of the header z-index context\n // add class to header when dropdown is open\n // so we can bump the z-index of the lists parent\n this.element.addClass('lm_dropdown_open');\n\n // focus the dropdown filter list input\n this.tabDropdownSearch.val('').focus();\n this.dropdownKeyIndex = 0;\n this.tabDropdownList\n .eq(this.dropdownKeyIndex)\n .addClass('lm_keyboard_active');\n\n $(document).on('mousedown', this._hideAdditionalTabsDropdown);\n this._updateAdditionalTabsDropdown();\n }\n\n // enables synthetic keyboard navigation of the list\n _handleFilterKeydown(e: JQuery.TriggeredEvent) {\n if (this.dropdownKeyIndex === -1) return;\n\n if (e.key === 'Escape') {\n this._hideAdditionalTabsDropdown();\n return;\n }\n\n if (e.key === 'Enter' || e.key === ' ') {\n // simulate \"click\"\n this._hideAdditionalTabsDropdown();\n this.tabs[this.dropdownKeyIndex]._onTabClick();\n return;\n }\n\n function getNextDropdownIndex(\n startIndex: number,\n delta: number,\n tabDropdownList: JQuery<HTMLElement> | null\n ) {\n if (tabDropdownList == null || tabDropdownList.length < 2) {\n return -1;\n }\n var i =\n (startIndex + delta + tabDropdownList.length) % tabDropdownList.length;\n while (i !== startIndex) {\n if (tabDropdownList.eq(i).css('display') !== 'none') {\n return i;\n }\n i = (i + delta + tabDropdownList.length) % tabDropdownList.length;\n }\n\n return startIndex;\n }\n\n // allow tab or arrow key navigation of list, prevent tabs default behaviour\n if (e.key === 'ArrowDown' || (e.key === 'Tab' && e.shiftKey === false)) {\n e.preventDefault();\n this.tabDropdownList\n ?.eq(this.dropdownKeyIndex)\n .removeClass('lm_keyboard_active');\n this.dropdownKeyIndex = getNextDropdownIndex(\n this.dropdownKeyIndex,\n 1,\n this.tabDropdownList\n );\n this.tabDropdownList\n ?.eq(this.dropdownKeyIndex)\n .addClass('lm_keyboard_active');\n } else if (e.key === 'ArrowUp' || e.key === 'Tab') {\n e.preventDefault();\n this.tabDropdownList\n ?.eq(this.dropdownKeyIndex)\n .removeClass('lm_keyboard_active');\n this.dropdownKeyIndex = getNextDropdownIndex(\n this.dropdownKeyIndex,\n -1,\n this.tabDropdownList\n );\n this.tabDropdownList\n ?.eq(this.dropdownKeyIndex)\n .addClass('lm_keyboard_active');\n }\n }\n\n // filters the list\n _handleFilterInput(event: JQuery.TriggeredEvent) {\n if (this.tabDropdownList == null) {\n return;\n }\n // reset keyboard index\n this.tabDropdownList\n .eq(this.dropdownKeyIndex)\n .removeClass('lm_keyboard_active');\n this.dropdownKeyIndex = -1;\n\n for (var i = 0; i < this.tabDropdownList.length; i++) {\n if (\n (this.tabs[i].contentItem.config.title\n ?.toLowerCase()\n .indexOf(event.target.value.toLowerCase()) ?? -1) !== -1\n ) {\n this.tabDropdownList.eq(i).css('display', '');\n if (this.dropdownKeyIndex === -1) this.dropdownKeyIndex = i;\n } else {\n this.tabDropdownList.eq(i).css('display', 'none');\n }\n }\n\n if (this.dropdownKeyIndex !== -1) {\n this.tabDropdownList\n .eq(this.dropdownKeyIndex)\n .addClass('lm_keyboard_active');\n }\n }\n\n /**\n * Hides drop down for additional tabs when needed. It is called via mousedown\n * event on document when list is open, or programmatically when drag starts,\n * or active tab changes etc.\n */\n _hideAdditionalTabsDropdown(event?: JQuery.UIEventBase) {\n // dropdown already closed, do nothing\n if (!this.isDropdownShown) return;\n\n if (event && this.tabDropdownContainer.get(0)?.contains(event.target)) {\n // prevent events occuring inside the list from causing a close\n return;\n } else if (\n event &&\n this.tabDropdownButton?.element.get(0) === event.target\n ) {\n // do nothing on the mouse down so that the click event can close, rather then re-open\n return;\n }\n\n this.element.removeClass('lm_dropdown_open');\n this.tabDropdownContainer.hide();\n this.isDropdownShown = false;\n\n // remove the current tab list\n this.tabDropdownContainer.find('.lm_tabs').remove();\n\n $(document).off('mousedown', this._hideAdditionalTabsDropdown);\n }\n\n /**\n * Ensures additional tab drop down doesn't overflow screen, and instead becomes scrollable.\n */\n _updateAdditionalTabsDropdown() {\n this.tabDropdownContainer.css('max-height', '');\n const h = this.tabDropdownContainer[0].scrollHeight;\n if (h === 0) return; // height can be zero if called on a hidden or empty list\n\n const y =\n (this.tabDropdownContainer.offset()?.top ?? 0) -\n ($(window).scrollTop() ?? 0);\n\n // set max height of tab dropdown to be less then the viewport height - dropdown offset\n if (y + h > ($(window).height() ?? 0)) {\n this.tabDropdownContainer.css(\n 'max-height',\n ($(window).height() ?? 0) - y - 10\n ); // 10 being a padding value\n }\n }\n\n /**\n * Checks whether the header is closable based on the parent config and\n * the global config.\n *\n * @returns Whether the header is closable.\n */\n _isClosable() {\n return Boolean(\n this.parent.config.isClosable &&\n this.layoutManager.config.settings.showCloseIcon\n );\n }\n\n _onPopoutClick() {\n if (this.layoutManager.config.settings.popoutWholeStack === true) {\n this.parent.popout();\n } else {\n this.activeContentItem?.popout();\n }\n }\n\n /**\n * Invoked when the header's background is clicked (not it's tabs or controls)\n *\n * @param event\n */\n _onHeaderClick(event: JQuery.UIEventBase) {\n if (event.target === this.element[0]) {\n this.parent.select();\n }\n }\n\n /**\n * Pushes the tabs to the tab dropdown if the available space is not sufficient\n */\n _updateTabSizes() {\n if (this.tabs.length === 0) {\n return;\n }\n\n const tabsContainer = this.tabsContainer.get(0);\n\n if (!tabsContainer) {\n return;\n }\n\n if (\n !this.isOverflowing &&\n tabsContainer.scrollWidth > tabsContainer.clientWidth\n ) {\n this.tabDropdownButton?.element.show();\n this.tabNextButton.show();\n this.tabPreviousButton.show();\n this.isOverflowing = true;\n } else if (\n this.isOverflowing &&\n tabsContainer.scrollWidth <= tabsContainer.clientWidth\n ) {\n this.tabDropdownButton?.element.hide();\n this.tabNextButton.hide();\n this.tabPreviousButton.hide();\n this.isOverflowing = false;\n }\n\n if (this.isOverflowing) this._checkScrollArrows();\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type Header from './Header';
2
+ export default class HeaderButton {
3
+ element: JQuery<HTMLLIElement>;
4
+ private _header;
5
+ private _action;
6
+ constructor(header: Header, label: string | undefined, cssClass: string, action: (e: Event) => void);
7
+ _$destroy(): void;
8
+ }
9
+ //# sourceMappingURL=HeaderButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeaderButton.d.ts","sourceRoot":"","sources":["../../src/controls/HeaderButton.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AAEnC,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAE/B,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,OAAO,CAAqB;gBAGlC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI;IAY5B,SAAS;CAIV"}
@@ -1,23 +1,29 @@
1
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+
1
3
  import $ from 'jquery';
2
- import utils from '../utils/index.js';
4
+ export default class HeaderButton {
5
+ constructor(header, label, cssClass, action) {
6
+ _defineProperty(this, "element", void 0);
7
+
8
+ _defineProperty(this, "_header", void 0);
3
9
 
4
- var HeaderButton = function HeaderButton(header, label, cssClass, action) {
5
- this._header = header;
6
- this.element = $('<li class="' + cssClass + '" title="' + label + '"></li>');
10
+ _defineProperty(this, "_action", void 0);
7
11
 
8
- this._header.on('destroy', this._$destroy, this);
12
+ this._header = header;
13
+ this.element = $('<li class="' + cssClass + '" title="' + label + '"></li>');
9
14
 
10
- this._action = action;
11
- this.element.on('click', this._action);
15
+ this._header.on('destroy', this._$destroy, this);
12
16
 
13
- this._header.controlsContainer.append(this.element);
14
- };
17
+ this._action = action;
18
+ this.element.on('click', this._action);
15
19
 
16
- utils.copy(HeaderButton.prototype, {
17
- _$destroy: function _$destroy() {
20
+ this._header.controlsContainer.append(this.element);
21
+ }
22
+
23
+ _$destroy() {
18
24
  this.element.off();
19
25
  this.element.remove();
20
26
  }
21
- });
22
- export default HeaderButton;
27
+
28
+ }
23
29
  //# sourceMappingURL=HeaderButton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HeaderButton.js","names":["$","utils","HeaderButton","header","label","cssClass","action","_header","element","on","_$destroy","_action","controlsContainer","append","copy","prototype","off","remove"],"sources":["../../src/controls/HeaderButton.js"],"sourcesContent":["import $ from 'jquery';\nimport utils from '../utils/index.js';\n\nconst HeaderButton = function (header, label, cssClass, action) {\n this._header = header;\n this.element = $('<li class=\"' + cssClass + '\" title=\"' + label + '\"></li>');\n this._header.on('destroy', this._$destroy, this);\n this._action = action;\n this.element.on('click', this._action);\n this._header.controlsContainer.append(this.element);\n};\n\nutils.copy(HeaderButton.prototype, {\n _$destroy: function () {\n this.element.off();\n this.element.remove();\n },\n});\n\nexport default HeaderButton;\n"],"mappings":"AAAA,OAAOA,CAAP,MAAc,QAAd;AACA,OAAOC,KAAP,MAAkB,mBAAlB;;AAEA,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAAUC,MAAV,EAAkBC,KAAlB,EAAyBC,QAAzB,EAAmCC,MAAnC,EAA2C;EAC9D,KAAKC,OAAL,GAAeJ,MAAf;EACA,KAAKK,OAAL,GAAeR,CAAC,CAAC,gBAAgBK,QAAhB,GAA2B,WAA3B,GAAyCD,KAAzC,GAAiD,SAAlD,CAAhB;;EACA,KAAKG,OAAL,CAAaE,EAAb,CAAgB,SAAhB,EAA2B,KAAKC,SAAhC,EAA2C,IAA3C;;EACA,KAAKC,OAAL,GAAeL,MAAf;EACA,KAAKE,OAAL,CAAaC,EAAb,CAAgB,OAAhB,EAAyB,KAAKE,OAA9B;;EACA,KAAKJ,OAAL,CAAaK,iBAAb,CAA+BC,MAA/B,CAAsC,KAAKL,OAA3C;AACD,CAPD;;AASAP,KAAK,CAACa,IAAN,CAAWZ,YAAY,CAACa,SAAxB,EAAmC;EACjCL,SAAS,EAAE,qBAAY;IACrB,KAAKF,OAAL,CAAaQ,GAAb;IACA,KAAKR,OAAL,CAAaS,MAAb;EACD;AAJgC,CAAnC;AAOA,eAAef,YAAf"}
1
+ {"version":3,"file":"HeaderButton.js","names":["$","HeaderButton","constructor","header","label","cssClass","action","_header","element","on","_$destroy","_action","controlsContainer","append","off","remove"],"sources":["../../src/controls/HeaderButton.ts"],"sourcesContent":["import $ from 'jquery';\nimport type Header from './Header';\n\nexport default class HeaderButton {\n element: JQuery<HTMLLIElement>;\n\n private _header: Header;\n\n private _action: (e: Event) => void;\n\n constructor(\n header: Header,\n label: string | undefined,\n cssClass: string,\n action: (e: Event) => void\n ) {\n this._header = header;\n this.element = $(\n '<li class=\"' + cssClass + '\" title=\"' + label + '\"></li>'\n );\n this._header.on('destroy', this._$destroy, this);\n this._action = action;\n this.element.on('click', this._action);\n this._header.controlsContainer.append(this.element);\n }\n\n _$destroy() {\n this.element.off();\n this.element.remove();\n }\n}\n"],"mappings":";;AAAA,OAAOA,CAAP,MAAc,QAAd;AAGA,eAAe,MAAMC,YAAN,CAAmB;EAOhCC,WAAW,CACTC,MADS,EAETC,KAFS,EAGTC,QAHS,EAITC,MAJS,EAKT;IAAA;;IAAA;;IAAA;;IACA,KAAKC,OAAL,GAAeJ,MAAf;IACA,KAAKK,OAAL,GAAeR,CAAC,CACd,gBAAgBK,QAAhB,GAA2B,WAA3B,GAAyCD,KAAzC,GAAiD,SADnC,CAAhB;;IAGA,KAAKG,OAAL,CAAaE,EAAb,CAAgB,SAAhB,EAA2B,KAAKC,SAAhC,EAA2C,IAA3C;;IACA,KAAKC,OAAL,GAAeL,MAAf;IACA,KAAKE,OAAL,CAAaC,EAAb,CAAgB,OAAhB,EAAyB,KAAKE,OAA9B;;IACA,KAAKJ,OAAL,CAAaK,iBAAb,CAA+BC,MAA/B,CAAsC,KAAKL,OAA3C;EACD;;EAEDE,SAAS,GAAG;IACV,KAAKF,OAAL,CAAaM,GAAb;IACA,KAAKN,OAAL,CAAaO,MAAb;EACD;;AA1B+B"}
@@ -0,0 +1,12 @@
1
+ export default class Splitter {
2
+ private _isVertical;
3
+ private _size;
4
+ private _grabSize;
5
+ private _dragListener;
6
+ element: JQuery<HTMLElement>;
7
+ constructor(isVertical: boolean, size: number, grabSize: number);
8
+ on(event: string, callback: Function, context?: unknown): void;
9
+ _$destroy(): void;
10
+ _createElement(): JQuery<HTMLElement>;
11
+ }
12
+ //# sourceMappingURL=Splitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Splitter.d.ts","sourceRoot":"","sources":["../../src/controls/Splitter.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,OAAO,QAAQ;IAC3B,OAAO,CAAC,WAAW,CAAU;IAE7B,OAAO,CAAC,KAAK,CAAS;IAEtB,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO,CAAC,aAAa,CAAsB;IAE3C,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;gBAEjB,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAS/D,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,OAAO;IAIvD,SAAS;IAMT,cAAc;CAsBf"}
@@ -1,25 +1,41 @@
1
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+
1
3
  import $ from 'jquery';
2
- import utils from '../utils/index.js';
3
-
4
- var Splitter = function Splitter(isVertical, size, grabSize) {
5
- this._isVertical = isVertical;
6
- this._size = size;
7
- this._grabSize = grabSize < size ? size : grabSize;
8
- this.element = this._createElement();
9
- this._dragListener = new utils.DragListener(this.element);
10
- };
11
-
12
- utils.copy(Splitter.prototype, {
13
- on: function on(event, callback, context) {
14
- this._dragListener.on(event, callback, context);
15
- },
16
- _$destroy: function _$destroy() {
17
- this._dragListener.destroy();
4
+ import { DragListener } from "../utils/index.js";
5
+ export default class Splitter {
6
+ constructor(isVertical, size, grabSize) {
7
+ _defineProperty(this, "_isVertical", void 0);
8
+
9
+ _defineProperty(this, "_size", void 0);
10
+
11
+ _defineProperty(this, "_grabSize", void 0);
12
+
13
+ _defineProperty(this, "_dragListener", void 0);
14
+
15
+ _defineProperty(this, "element", void 0);
16
+
17
+ this._isVertical = isVertical;
18
+ this._size = size;
19
+ this._grabSize = grabSize < size ? size : grabSize;
20
+ this.element = this._createElement();
21
+ this._dragListener = new DragListener(this.element);
22
+ }
18
23
 
24
+ on(event, callback, context) {
25
+ var _this$_dragListener;
26
+
27
+ (_this$_dragListener = this._dragListener) === null || _this$_dragListener === void 0 ? void 0 : _this$_dragListener.on(event, callback, context);
28
+ }
29
+
30
+ _$destroy() {
31
+ var _this$_dragListener2;
32
+
33
+ (_this$_dragListener2 = this._dragListener) === null || _this$_dragListener2 === void 0 ? void 0 : _this$_dragListener2.destroy();
19
34
  this._dragListener = null;
20
35
  this.element.remove();
21
- },
22
- _createElement: function _createElement() {
36
+ }
37
+
38
+ _createElement() {
23
39
  var dragHandle = $('<div class="lm_drag_handle"></div>');
24
40
  var element = $('<div class="lm_splitter"></div>');
25
41
  element.append(dragHandle);
@@ -40,6 +56,6 @@ utils.copy(Splitter.prototype, {
40
56
 
41
57
  return element;
42
58
  }
43
- });
44
- export default Splitter;
59
+
60
+ }
45
61
  //# sourceMappingURL=Splitter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Splitter.js","names":["$","utils","Splitter","isVertical","size","grabSize","_isVertical","_size","_grabSize","element","_createElement","_dragListener","DragListener","copy","prototype","on","event","callback","context","_$destroy","destroy","remove","dragHandle","append","handleExcessSize","handleExcessPos","css","addClass"],"sources":["../../src/controls/Splitter.js"],"sourcesContent":["import $ from 'jquery';\nimport utils from '../utils/index.js';\n\nconst Splitter = function (isVertical, size, grabSize) {\n this._isVertical = isVertical;\n this._size = size;\n this._grabSize = grabSize < size ? size : grabSize;\n\n this.element = this._createElement();\n this._dragListener = new utils.DragListener(this.element);\n};\n\nutils.copy(Splitter.prototype, {\n on: function (event, callback, context) {\n this._dragListener.on(event, callback, context);\n },\n\n _$destroy: function () {\n this._dragListener.destroy();\n this._dragListener = null;\n this.element.remove();\n },\n\n _createElement: function () {\n var dragHandle = $('<div class=\"lm_drag_handle\"></div>');\n var element = $('<div class=\"lm_splitter\"></div>');\n element.append(dragHandle);\n\n var handleExcessSize = this._grabSize - this._size;\n var handleExcessPos = handleExcessSize / 2;\n\n if (this._isVertical) {\n dragHandle.css('top', -handleExcessPos);\n dragHandle.css('height', this._size + handleExcessSize);\n element.addClass('lm_vertical');\n element['height'](this._size);\n } else {\n dragHandle.css('left', -handleExcessPos);\n dragHandle.css('width', this._size + handleExcessSize);\n element.addClass('lm_horizontal');\n element['width'](this._size);\n }\n\n return element;\n },\n});\n\nexport default Splitter;\n"],"mappings":"AAAA,OAAOA,CAAP,MAAc,QAAd;AACA,OAAOC,KAAP,MAAkB,mBAAlB;;AAEA,IAAMC,QAAQ,GAAG,SAAXA,QAAW,CAAUC,UAAV,EAAsBC,IAAtB,EAA4BC,QAA5B,EAAsC;EACrD,KAAKC,WAAL,GAAmBH,UAAnB;EACA,KAAKI,KAAL,GAAaH,IAAb;EACA,KAAKI,SAAL,GAAiBH,QAAQ,GAAGD,IAAX,GAAkBA,IAAlB,GAAyBC,QAA1C;EAEA,KAAKI,OAAL,GAAe,KAAKC,cAAL,EAAf;EACA,KAAKC,aAAL,GAAqB,IAAIV,KAAK,CAACW,YAAV,CAAuB,KAAKH,OAA5B,CAArB;AACD,CAPD;;AASAR,KAAK,CAACY,IAAN,CAAWX,QAAQ,CAACY,SAApB,EAA+B;EAC7BC,EAAE,EAAE,YAAUC,KAAV,EAAiBC,QAAjB,EAA2BC,OAA3B,EAAoC;IACtC,KAAKP,aAAL,CAAmBI,EAAnB,CAAsBC,KAAtB,EAA6BC,QAA7B,EAAuCC,OAAvC;EACD,CAH4B;EAK7BC,SAAS,EAAE,qBAAY;IACrB,KAAKR,aAAL,CAAmBS,OAAnB;;IACA,KAAKT,aAAL,GAAqB,IAArB;IACA,KAAKF,OAAL,CAAaY,MAAb;EACD,CAT4B;EAW7BX,cAAc,EAAE,0BAAY;IAC1B,IAAIY,UAAU,GAAGtB,CAAC,CAAC,oCAAD,CAAlB;IACA,IAAIS,OAAO,GAAGT,CAAC,CAAC,iCAAD,CAAf;IACAS,OAAO,CAACc,MAAR,CAAeD,UAAf;IAEA,IAAIE,gBAAgB,GAAG,KAAKhB,SAAL,GAAiB,KAAKD,KAA7C;IACA,IAAIkB,eAAe,GAAGD,gBAAgB,GAAG,CAAzC;;IAEA,IAAI,KAAKlB,WAAT,EAAsB;MACpBgB,UAAU,CAACI,GAAX,CAAe,KAAf,EAAsB,CAACD,eAAvB;MACAH,UAAU,CAACI,GAAX,CAAe,QAAf,EAAyB,KAAKnB,KAAL,GAAaiB,gBAAtC;MACAf,OAAO,CAACkB,QAAR,CAAiB,aAAjB;MACAlB,OAAO,CAAC,QAAD,CAAP,CAAkB,KAAKF,KAAvB;IACD,CALD,MAKO;MACLe,UAAU,CAACI,GAAX,CAAe,MAAf,EAAuB,CAACD,eAAxB;MACAH,UAAU,CAACI,GAAX,CAAe,OAAf,EAAwB,KAAKnB,KAAL,GAAaiB,gBAArC;MACAf,OAAO,CAACkB,QAAR,CAAiB,eAAjB;MACAlB,OAAO,CAAC,OAAD,CAAP,CAAiB,KAAKF,KAAtB;IACD;;IAED,OAAOE,OAAP;EACD;AAhC4B,CAA/B;AAmCA,eAAeP,QAAf"}
1
+ {"version":3,"file":"Splitter.js","names":["$","DragListener","Splitter","constructor","isVertical","size","grabSize","_isVertical","_size","_grabSize","element","_createElement","_dragListener","on","event","callback","context","_$destroy","destroy","remove","dragHandle","append","handleExcessSize","handleExcessPos","css","addClass"],"sources":["../../src/controls/Splitter.ts"],"sourcesContent":["import $ from 'jquery';\nimport { DragListener } from '../utils';\n\nexport default class Splitter {\n private _isVertical: boolean;\n\n private _size: number;\n\n private _grabSize: number;\n\n private _dragListener: DragListener | null;\n\n element: JQuery<HTMLElement>;\n\n constructor(isVertical: boolean, size: number, grabSize: number) {\n this._isVertical = isVertical;\n this._size = size;\n this._grabSize = grabSize < size ? size : grabSize;\n\n this.element = this._createElement();\n this._dragListener = new DragListener(this.element);\n }\n\n on(event: string, callback: Function, context?: unknown) {\n this._dragListener?.on(event, callback, context);\n }\n\n _$destroy() {\n this._dragListener?.destroy();\n this._dragListener = null;\n this.element.remove();\n }\n\n _createElement() {\n var dragHandle = $('<div class=\"lm_drag_handle\"></div>');\n var element = $('<div class=\"lm_splitter\"></div>');\n element.append(dragHandle);\n\n var handleExcessSize = this._grabSize - this._size;\n var handleExcessPos = handleExcessSize / 2;\n\n if (this._isVertical) {\n dragHandle.css('top', -handleExcessPos);\n dragHandle.css('height', this._size + handleExcessSize);\n element.addClass('lm_vertical');\n element['height'](this._size);\n } else {\n dragHandle.css('left', -handleExcessPos);\n dragHandle.css('width', this._size + handleExcessSize);\n element.addClass('lm_horizontal');\n element['width'](this._size);\n }\n\n return element;\n }\n}\n"],"mappings":";;AAAA,OAAOA,CAAP,MAAc,QAAd;SACSC,Y;AAET,eAAe,MAAMC,QAAN,CAAe;EAW5BC,WAAW,CAACC,UAAD,EAAsBC,IAAtB,EAAoCC,QAApC,EAAsD;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAC/D,KAAKC,WAAL,GAAmBH,UAAnB;IACA,KAAKI,KAAL,GAAaH,IAAb;IACA,KAAKI,SAAL,GAAiBH,QAAQ,GAAGD,IAAX,GAAkBA,IAAlB,GAAyBC,QAA1C;IAEA,KAAKI,OAAL,GAAe,KAAKC,cAAL,EAAf;IACA,KAAKC,aAAL,GAAqB,IAAIX,YAAJ,CAAiB,KAAKS,OAAtB,CAArB;EACD;;EAEDG,EAAE,CAACC,KAAD,EAAgBC,QAAhB,EAAoCC,OAApC,EAAuD;IAAA;;IACvD,4BAAKJ,aAAL,4EAAoBC,EAApB,CAAuBC,KAAvB,EAA8BC,QAA9B,EAAwCC,OAAxC;EACD;;EAEDC,SAAS,GAAG;IAAA;;IACV,6BAAKL,aAAL,8EAAoBM,OAApB;IACA,KAAKN,aAAL,GAAqB,IAArB;IACA,KAAKF,OAAL,CAAaS,MAAb;EACD;;EAEDR,cAAc,GAAG;IACf,IAAIS,UAAU,GAAGpB,CAAC,CAAC,oCAAD,CAAlB;IACA,IAAIU,OAAO,GAAGV,CAAC,CAAC,iCAAD,CAAf;IACAU,OAAO,CAACW,MAAR,CAAeD,UAAf;IAEA,IAAIE,gBAAgB,GAAG,KAAKb,SAAL,GAAiB,KAAKD,KAA7C;IACA,IAAIe,eAAe,GAAGD,gBAAgB,GAAG,CAAzC;;IAEA,IAAI,KAAKf,WAAT,EAAsB;MACpBa,UAAU,CAACI,GAAX,CAAe,KAAf,EAAsB,CAACD,eAAvB;MACAH,UAAU,CAACI,GAAX,CAAe,QAAf,EAAyB,KAAKhB,KAAL,GAAac,gBAAtC;MACAZ,OAAO,CAACe,QAAR,CAAiB,aAAjB;MACAf,OAAO,CAAC,QAAD,CAAP,CAAkB,KAAKF,KAAvB;IACD,CALD,MAKO;MACLY,UAAU,CAACI,GAAX,CAAe,MAAf,EAAuB,CAACD,eAAxB;MACAH,UAAU,CAACI,GAAX,CAAe,OAAf,EAAwB,KAAKhB,KAAL,GAAac,gBAArC;MACAZ,OAAO,CAACe,QAAR,CAAiB,eAAjB;MACAf,OAAO,CAAC,OAAD,CAAP,CAAiB,KAAKF,KAAtB;IACD;;IAED,OAAOE,OAAP;EACD;;AAnD2B"}
@@ -0,0 +1,91 @@
1
+ import type { AbstractContentItem } from '../items';
2
+ import type Header from './Header';
3
+ /**
4
+ * Represents an individual tab within a Stack's header
5
+ *
6
+ * @param header
7
+ * @param contentItem
8
+ */
9
+ export default class Tab {
10
+ /**
11
+ * The tab's html template
12
+ */
13
+ private static _template;
14
+ header: Header;
15
+ contentItem: AbstractContentItem;
16
+ element: JQuery<HTMLElement>;
17
+ titleElement: JQuery<HTMLElement>;
18
+ closeElement: JQuery<HTMLElement>;
19
+ isActive: boolean;
20
+ private _layoutManager;
21
+ private _dragListener?;
22
+ constructor(header: Header, contentItem: AbstractContentItem);
23
+ /**
24
+ * Sets the tab's title to the provided string and sets
25
+ * its title attribute to a pure text representation (without
26
+ * html tags) of the same string.
27
+ * @param title can contain html
28
+ */
29
+ setTitle(title?: string): void;
30
+ /**
31
+ * Sets this tab's active state. To programmatically
32
+ * switch tabs, use header.setActiveContentItem( item ) instead.
33
+ * @param isActive
34
+ */
35
+ setActive(isActive: boolean): void;
36
+ /**
37
+ * Destroys the tab
38
+ *
39
+ * @private
40
+ * @returns {void}
41
+ */
42
+ _$destroy(): void;
43
+ /**
44
+ * Callback for the DragListener
45
+ *
46
+ * @param x The tabs absolute x position
47
+ * @param y The tabs absolute y position
48
+ */
49
+ _onDragStart(x: number, y: number): void;
50
+ /**
51
+ * Callback when the contentItem is focused in
52
+ *
53
+ * Why [0].focus():
54
+ * https://github.com/jquery/jquery/commit/fe5f04de8fde9c69ed48283b99280aa6df3795c7
55
+ * From jquery source: "If this is an inner synthetic event for an event with a bubbling surrogate (focus or blur),
56
+ * assume that the surrogate already propagated from triggering the native event and prevent that from happening
57
+ * again here. This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the bubbling surrogate
58
+ * propagates *after* the non-bubbling base), but that seems less bad than duplication."
59
+ */
60
+ _onTabContentFocusIn(): void;
61
+ /**
62
+ * Callback when the contentItem is focused out
63
+ *
64
+ * @param {jQuery DOM event} event
65
+ *
66
+ * @private
67
+ * @returns {void}
68
+ */
69
+ _onTabContentFocusOut(): void;
70
+ /**
71
+ * Callback when the tab is clicked
72
+ *
73
+ * @param event
74
+ */
75
+ _onTabClick(event?: JQuery.TriggeredEvent): void;
76
+ /**
77
+ * Callback when the tab's close button is
78
+ * clicked
79
+ *
80
+ * @param event
81
+ */
82
+ _onCloseClick(event: JQuery.TriggeredEvent): void;
83
+ /**
84
+ * Callback to capture tab close button mousedown
85
+ * to prevent tab from activating.
86
+ *
87
+ * @param event
88
+ */
89
+ _onCloseMousedown(event: Event): void;
90
+ }
91
+ //# sourceMappingURL=Tab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tab.d.ts","sourceRoot":"","sources":["../../src/controls/Tab.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAKpD,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AAEnC;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,GAAG;IACtB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS,CAMb;IAEX,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,mBAAmB,CAAC;IACjC,OAAO,sBAAoB;IAC3B,YAAY,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAClC,QAAQ,UAAS;IAEjB,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,aAAa,CAAC,CAAe;gBAEzB,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,mBAAmB;IAuD5D;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,SAAK;IAMnB;;;;OAIG;IACH,SAAS,CAAC,QAAQ,EAAE,OAAO;IAa3B;;;;;OAKG;IACH,SAAS;IAmBT;;;;;OAKG;IACH,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAmBjC;;;;;;;;;OASG;IACH,oBAAoB;IAcpB;;;;;;;OAOG;IACH,qBAAqB;IAWrB;;;;OAIG;IACH,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc;IAyCzC;;;;;OAKG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,cAAc;IAS1C;;;;;OAKG;IACH,iBAAiB,CAAC,KAAK,EAAE,KAAK;CAG/B"}