@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.
- package/dist/LayoutManager.d.ts +313 -0
- package/dist/LayoutManager.d.ts.map +1 -0
- package/dist/LayoutManager.js +468 -450
- package/dist/LayoutManager.js.map +1 -1
- package/dist/base.d.ts +16 -0
- package/dist/base.d.ts.map +1 -0
- package/dist/base.js +6 -6
- package/dist/base.js.map +1 -1
- package/dist/config/Config.d.ts +146 -0
- package/dist/config/Config.d.ts.map +1 -0
- package/dist/config/{defaultConfig.js → Config.js} +6 -6
- package/dist/config/Config.js.map +1 -0
- package/dist/config/ItemConfig.d.ts +66 -0
- package/dist/config/ItemConfig.d.ts.map +1 -0
- package/dist/config/ItemConfig.js +14 -0
- package/dist/config/ItemConfig.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +2 -6
- package/dist/config/index.js.map +1 -1
- package/dist/container/ItemContainer.d.ts +91 -0
- package/dist/container/ItemContainer.d.ts.map +1 -0
- package/dist/container/ItemContainer.js +110 -85
- package/dist/container/ItemContainer.js.map +1 -1
- package/dist/container/index.d.ts +3 -0
- package/dist/container/index.d.ts.map +1 -0
- package/dist/container/index.js +2 -4
- package/dist/container/index.js.map +1 -1
- package/dist/controls/BrowserPopout.d.ts +83 -0
- package/dist/controls/BrowserPopout.d.ts.map +1 -0
- package/dist/controls/BrowserPopout.js +135 -101
- package/dist/controls/BrowserPopout.js.map +1 -1
- package/dist/controls/DragProxy.d.ts +67 -0
- package/dist/controls/DragProxy.d.ts.map +1 -0
- package/dist/controls/DragProxy.js +135 -110
- package/dist/controls/DragProxy.js.map +1 -1
- package/dist/controls/DragSource.d.ts +30 -0
- package/dist/controls/DragSource.d.ts.map +1 -0
- package/dist/controls/DragSource.js +37 -29
- package/dist/controls/DragSource.js.map +1 -1
- package/dist/controls/DragSourceFromEvent.d.ts +30 -0
- package/dist/controls/DragSourceFromEvent.d.ts.map +1 -0
- package/dist/controls/DragSourceFromEvent.js +49 -36
- package/dist/controls/DragSourceFromEvent.js.map +1 -1
- package/dist/controls/DropTargetIndicator.d.ts +14 -0
- package/dist/controls/DropTargetIndicator.d.ts.map +1 -0
- package/dist/controls/DropTargetIndicator.js +18 -14
- package/dist/controls/DropTargetIndicator.js.map +1 -1
- package/dist/controls/Header.d.ts +145 -0
- package/dist/controls/Header.d.ts.map +1 -0
- package/dist/controls/Header.js +414 -271
- package/dist/controls/Header.js.map +1 -1
- package/dist/controls/HeaderButton.d.ts +9 -0
- package/dist/controls/HeaderButton.d.ts.map +1 -0
- package/dist/controls/HeaderButton.js +19 -13
- package/dist/controls/HeaderButton.js.map +1 -1
- package/dist/controls/Splitter.d.ts +12 -0
- package/dist/controls/Splitter.d.ts.map +1 -0
- package/dist/controls/Splitter.js +36 -20
- package/dist/controls/Splitter.js.map +1 -1
- package/dist/controls/Tab.d.ts +91 -0
- package/dist/controls/Tab.d.ts.map +1 -0
- package/dist/controls/Tab.js +131 -119
- package/dist/controls/Tab.js.map +1 -1
- package/dist/controls/TransitionIndicator.d.ts +25 -0
- package/dist/controls/TransitionIndicator.d.ts.map +1 -0
- package/dist/controls/TransitionIndicator.js +53 -39
- package/dist/controls/TransitionIndicator.js.map +1 -1
- package/dist/controls/index.d.ts +11 -0
- package/dist/controls/index.d.ts.map +1 -0
- package/dist/controls/index.js +10 -22
- package/dist/controls/index.js.map +1 -1
- package/dist/errors/ConfigurationError.d.ts +6 -0
- package/dist/errors/ConfigurationError.d.ts.map +1 -0
- package/dist/errors/ConfigurationError.js +15 -8
- package/dist/errors/ConfigurationError.js.map +1 -1
- package/dist/errors/index.d.ts +2 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +1 -4
- package/dist/errors/index.js.map +1 -1
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/items/AbstractContentItem.d.ts +233 -0
- package/dist/items/AbstractContentItem.d.ts.map +1 -0
- package/dist/items/AbstractContentItem.js +284 -242
- package/dist/items/AbstractContentItem.js.map +1 -1
- package/dist/items/Component.d.ts +30 -0
- package/dist/items/Component.d.ts.map +1 -0
- package/dist/items/Component.js +61 -42
- package/dist/items/Component.js.map +1 -1
- package/dist/items/Root.d.ts +18 -0
- package/dist/items/Root.d.ts.map +1 -0
- package/dist/items/Root.js +68 -38
- package/dist/items/Root.js.map +1 -1
- package/dist/items/RowOrColumn.d.ts +157 -0
- package/dist/items/RowOrColumn.d.ts.map +1 -0
- package/dist/items/RowOrColumn.js +219 -187
- package/dist/items/RowOrColumn.js.map +1 -1
- package/dist/items/Stack.d.ts +108 -0
- package/dist/items/Stack.d.ts.map +1 -0
- package/dist/items/Stack.js +218 -151
- package/dist/items/Stack.js.map +1 -1
- package/dist/items/index.d.ts +8 -0
- package/dist/items/index.d.ts.map +1 -0
- package/dist/items/index.js +7 -12
- package/dist/items/index.js.map +1 -1
- package/dist/utils/BubblingEvent.d.ts +8 -0
- package/dist/utils/BubblingEvent.d.ts.map +1 -0
- package/dist/utils/BubblingEvent.js +18 -9
- package/dist/utils/BubblingEvent.js.map +1 -1
- package/dist/utils/ConfigMinifier.d.ts +21 -0
- package/dist/utils/ConfigMinifier.d.ts.map +1 -0
- package/dist/utils/ConfigMinifier.js +121 -121
- package/dist/utils/ConfigMinifier.js.map +1 -1
- package/dist/utils/DragListener.d.ts +34 -0
- package/dist/utils/DragListener.d.ts.map +1 -0
- package/dist/utils/DragListener.js +103 -70
- package/dist/utils/DragListener.js.map +1 -1
- package/dist/utils/EventEmitter.d.ts +59 -0
- package/dist/utils/EventEmitter.d.ts.map +1 -0
- package/dist/utils/EventEmitter.js +64 -70
- package/dist/utils/EventEmitter.js.map +1 -1
- package/dist/utils/EventHub.d.ts +55 -0
- package/dist/utils/EventHub.d.ts.map +1 -0
- package/dist/utils/EventHub.js +83 -105
- package/dist/utils/EventHub.js.map +1 -1
- package/dist/utils/ReactComponentHandler.d.ts +54 -0
- package/dist/utils/ReactComponentHandler.d.ts.map +1 -0
- package/dist/utils/ReactComponentHandler.js +58 -56
- package/dist/utils/ReactComponentHandler.js.map +1 -1
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +7 -21
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/utils.d.ts +25 -0
- package/dist/utils/utils.d.ts.map +1 -0
- package/dist/utils/utils.js +21 -145
- package/dist/utils/utils.js.map +1 -1
- package/package.json +9 -5
- package/dist/config/ItemDefaultConfig.js +0 -8
- package/dist/config/ItemDefaultConfig.js.map +0 -1
- 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":"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"}
|
|
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
|
-
|
|
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
|
-
|
|
5
|
-
this._header = header;
|
|
6
|
-
this.element = $('<li class="' + cssClass + '" title="' + label + '"></li>');
|
|
10
|
+
_defineProperty(this, "_action", void 0);
|
|
7
11
|
|
|
8
|
-
|
|
12
|
+
this._header = header;
|
|
13
|
+
this.element = $('<li class="' + cssClass + '" title="' + label + '"></li>');
|
|
9
14
|
|
|
10
|
-
|
|
11
|
-
this.element.on('click', this._action);
|
|
15
|
+
this._header.on('destroy', this._$destroy, this);
|
|
12
16
|
|
|
13
|
-
|
|
14
|
-
|
|
17
|
+
this._action = action;
|
|
18
|
+
this.element.on('click', this._action);
|
|
15
19
|
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
|
|
27
|
+
|
|
28
|
+
}
|
|
23
29
|
//# sourceMappingURL=HeaderButton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeaderButton.js","names":["$","
|
|
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
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
this.
|
|
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
|
-
|
|
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
|
-
|
|
59
|
+
|
|
60
|
+
}
|
|
45
61
|
//# sourceMappingURL=Splitter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Splitter.js","names":["$","
|
|
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"}
|