@deephaven/golden-layout 0.22.3-beta.15 → 0.22.3-beta.21
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.js +60 -260
- package/dist/LayoutManager.js.map +1 -1
- package/dist/base.js.map +1 -1
- package/dist/config/Config.js.map +1 -1
- package/dist/config/ItemConfig.js.map +1 -1
- package/dist/container/ItemContainer.js +14 -50
- package/dist/container/ItemContainer.js.map +1 -1
- package/dist/container/index.js.map +1 -1
- package/dist/controls/BrowserPopout.js +17 -63
- package/dist/controls/BrowserPopout.js.map +1 -1
- package/dist/controls/DragProxy.js +13 -73
- package/dist/controls/DragProxy.js.map +1 -1
- package/dist/controls/DragSource.js +3 -19
- package/dist/controls/DragSource.js.map +1 -1
- package/dist/controls/DragSourceFromEvent.js +5 -24
- package/dist/controls/DragSourceFromEvent.js.map +1 -1
- package/dist/controls/DropTargetIndicator.js +0 -7
- package/dist/controls/DropTargetIndicator.js.map +1 -1
- package/dist/controls/Header.js +89 -233
- package/dist/controls/Header.js.map +1 -1
- package/dist/controls/HeaderButton.js +0 -9
- package/dist/controls/HeaderButton.js.map +1 -1
- package/dist/controls/Splitter.js +0 -14
- package/dist/controls/Splitter.js.map +1 -1
- package/dist/controls/Tab.js +21 -62
- package/dist/controls/Tab.js.map +1 -1
- package/dist/controls/TransitionIndicator.js +2 -21
- package/dist/controls/TransitionIndicator.js.map +1 -1
- package/dist/controls/index.js.map +1 -1
- package/dist/errors/ConfigurationError.js +0 -5
- package/dist/errors/ConfigurationError.js.map +1 -1
- package/dist/errors/index.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/items/AbstractContentItem.js +37 -133
- package/dist/items/AbstractContentItem.js.map +1 -1
- package/dist/items/Component.js +2 -27
- package/dist/items/Component.js.map +1 -1
- package/dist/items/Root.js +1 -26
- package/dist/items/Root.js.map +1 -1
- package/dist/items/RowOrColumn.js +32 -128
- package/dist/items/RowOrColumn.js.map +1 -1
- package/dist/items/Stack.js +27 -115
- package/dist/items/Stack.js.map +1 -1
- package/dist/items/index.js.map +1 -1
- package/dist/utils/BubblingEvent.js +0 -6
- package/dist/utils/BubblingEvent.js.map +1 -1
- package/dist/utils/ConfigMinifier.js +13 -26
- package/dist/utils/ConfigMinifier.js.map +1 -1
- package/dist/utils/DragListener.js +8 -47
- package/dist/utils/DragListener.js.map +1 -1
- package/dist/utils/EventEmitter.js +5 -25
- package/dist/utils/EventEmitter.js.map +1 -1
- package/dist/utils/EventHub.js +8 -27
- package/dist/utils/EventHub.js.map +1 -1
- package/dist/utils/ReactComponentHandler.js +6 -35
- package/dist/utils/ReactComponentHandler.js.map +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/utils.js +5 -11
- package/dist/utils/utils.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
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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"}
|
|
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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"}
|
|
@@ -1,29 +1,20 @@
|
|
|
1
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
|
-
|
|
3
2
|
import $ from 'jquery';
|
|
4
3
|
export default class HeaderButton {
|
|
5
4
|
constructor(header, label, cssClass, action) {
|
|
6
5
|
_defineProperty(this, "element", void 0);
|
|
7
|
-
|
|
8
6
|
_defineProperty(this, "_header", void 0);
|
|
9
|
-
|
|
10
7
|
_defineProperty(this, "_action", void 0);
|
|
11
|
-
|
|
12
8
|
this._header = header;
|
|
13
9
|
this.element = $('<li class="' + cssClass + '" title="' + label + '"></li>');
|
|
14
|
-
|
|
15
10
|
this._header.on('destroy', this._$destroy, this);
|
|
16
|
-
|
|
17
11
|
this._action = action;
|
|
18
12
|
this.element.on('click', this._action);
|
|
19
|
-
|
|
20
13
|
this._header.controlsContainer.append(this.element);
|
|
21
14
|
}
|
|
22
|
-
|
|
23
15
|
_$destroy() {
|
|
24
16
|
this.element.off();
|
|
25
17
|
this.element.remove();
|
|
26
18
|
}
|
|
27
|
-
|
|
28
19
|
}
|
|
29
20
|
//# sourceMappingURL=HeaderButton.js.map
|
|
@@ -1 +1 @@
|
|
|
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":"
|
|
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,CAAC,MAAM,QAAQ;AAGtB,eAAe,MAAMC,YAAY,CAAC;EAOhCC,WAAW,CACTC,MAAc,EACdC,KAAyB,EACzBC,QAAgB,EAChBC,MAA0B,EAC1B;IAAA;IAAA;IAAA;IACA,IAAI,CAACC,OAAO,GAAGJ,MAAM;IACrB,IAAI,CAACK,OAAO,GAAGR,CAAC,CACd,aAAa,GAAGK,QAAQ,GAAG,WAAW,GAAGD,KAAK,GAAG,SAAS,CAC3D;IACD,IAAI,CAACG,OAAO,CAACE,EAAE,CAAC,SAAS,EAAE,IAAI,CAACC,SAAS,EAAE,IAAI,CAAC;IAChD,IAAI,CAACC,OAAO,GAAGL,MAAM;IACrB,IAAI,CAACE,OAAO,CAACC,EAAE,CAAC,OAAO,EAAE,IAAI,CAACE,OAAO,CAAC;IACtC,IAAI,CAACJ,OAAO,CAACK,iBAAiB,CAACC,MAAM,CAAC,IAAI,CAACL,OAAO,CAAC;EACrD;EAEAE,SAAS,GAAG;IACV,IAAI,CAACF,OAAO,CAACM,GAAG,EAAE;IAClB,IAAI,CAACN,OAAO,CAACO,MAAM,EAAE;EACvB;AACF"}
|
|
@@ -1,47 +1,35 @@
|
|
|
1
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
|
-
|
|
3
2
|
import $ from 'jquery';
|
|
4
3
|
import { DragListener } from "../utils/index.js";
|
|
5
4
|
export default class Splitter {
|
|
6
5
|
constructor(isVertical, size, grabSize) {
|
|
7
6
|
_defineProperty(this, "_isVertical", void 0);
|
|
8
|
-
|
|
9
7
|
_defineProperty(this, "_size", void 0);
|
|
10
|
-
|
|
11
8
|
_defineProperty(this, "_grabSize", void 0);
|
|
12
|
-
|
|
13
9
|
_defineProperty(this, "_dragListener", void 0);
|
|
14
|
-
|
|
15
10
|
_defineProperty(this, "element", void 0);
|
|
16
|
-
|
|
17
11
|
this._isVertical = isVertical;
|
|
18
12
|
this._size = size;
|
|
19
13
|
this._grabSize = grabSize < size ? size : grabSize;
|
|
20
14
|
this.element = this._createElement();
|
|
21
15
|
this._dragListener = new DragListener(this.element);
|
|
22
16
|
}
|
|
23
|
-
|
|
24
17
|
on(event, callback, context) {
|
|
25
18
|
var _this$_dragListener;
|
|
26
|
-
|
|
27
19
|
(_this$_dragListener = this._dragListener) === null || _this$_dragListener === void 0 ? void 0 : _this$_dragListener.on(event, callback, context);
|
|
28
20
|
}
|
|
29
|
-
|
|
30
21
|
_$destroy() {
|
|
31
22
|
var _this$_dragListener2;
|
|
32
|
-
|
|
33
23
|
(_this$_dragListener2 = this._dragListener) === null || _this$_dragListener2 === void 0 ? void 0 : _this$_dragListener2.destroy();
|
|
34
24
|
this._dragListener = null;
|
|
35
25
|
this.element.remove();
|
|
36
26
|
}
|
|
37
|
-
|
|
38
27
|
_createElement() {
|
|
39
28
|
var dragHandle = $('<div class="lm_drag_handle"></div>');
|
|
40
29
|
var element = $('<div class="lm_splitter"></div>');
|
|
41
30
|
element.append(dragHandle);
|
|
42
31
|
var handleExcessSize = this._grabSize - this._size;
|
|
43
32
|
var handleExcessPos = handleExcessSize / 2;
|
|
44
|
-
|
|
45
33
|
if (this._isVertical) {
|
|
46
34
|
dragHandle.css('top', -handleExcessPos);
|
|
47
35
|
dragHandle.css('height', this._size + handleExcessSize);
|
|
@@ -53,9 +41,7 @@ export default class Splitter {
|
|
|
53
41
|
element.addClass('lm_horizontal');
|
|
54
42
|
element['width'](this._size);
|
|
55
43
|
}
|
|
56
|
-
|
|
57
44
|
return element;
|
|
58
45
|
}
|
|
59
|
-
|
|
60
46
|
}
|
|
61
47
|
//# sourceMappingURL=Splitter.js.map
|
|
@@ -1 +1 @@
|
|
|
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":"
|
|
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,CAAC,MAAM,QAAQ;AAAC,SACdC,YAAY;AAErB,eAAe,MAAMC,QAAQ,CAAC;EAW5BC,WAAW,CAACC,UAAmB,EAAEC,IAAY,EAAEC,QAAgB,EAAE;IAAA;IAAA;IAAA;IAAA;IAAA;IAC/D,IAAI,CAACC,WAAW,GAAGH,UAAU;IAC7B,IAAI,CAACI,KAAK,GAAGH,IAAI;IACjB,IAAI,CAACI,SAAS,GAAGH,QAAQ,GAAGD,IAAI,GAAGA,IAAI,GAAGC,QAAQ;IAElD,IAAI,CAACI,OAAO,GAAG,IAAI,CAACC,cAAc,EAAE;IACpC,IAAI,CAACC,aAAa,GAAG,IAAIX,YAAY,CAAC,IAAI,CAACS,OAAO,CAAC;EACrD;EAEAG,EAAE,CAACC,KAAa,EAAEC,QAAkB,EAAEC,OAAiB,EAAE;IAAA;IACvD,2BAAI,CAACJ,aAAa,wDAAlB,oBAAoBC,EAAE,CAACC,KAAK,EAAEC,QAAQ,EAAEC,OAAO,CAAC;EAClD;EAEAC,SAAS,GAAG;IAAA;IACV,4BAAI,CAACL,aAAa,yDAAlB,qBAAoBM,OAAO,EAAE;IAC7B,IAAI,CAACN,aAAa,GAAG,IAAI;IACzB,IAAI,CAACF,OAAO,CAACS,MAAM,EAAE;EACvB;EAEAR,cAAc,GAAG;IACf,IAAIS,UAAU,GAAGpB,CAAC,CAAC,oCAAoC,CAAC;IACxD,IAAIU,OAAO,GAAGV,CAAC,CAAC,iCAAiC,CAAC;IAClDU,OAAO,CAACW,MAAM,CAACD,UAAU,CAAC;IAE1B,IAAIE,gBAAgB,GAAG,IAAI,CAACb,SAAS,GAAG,IAAI,CAACD,KAAK;IAClD,IAAIe,eAAe,GAAGD,gBAAgB,GAAG,CAAC;IAE1C,IAAI,IAAI,CAACf,WAAW,EAAE;MACpBa,UAAU,CAACI,GAAG,CAAC,KAAK,EAAE,CAACD,eAAe,CAAC;MACvCH,UAAU,CAACI,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAChB,KAAK,GAAGc,gBAAgB,CAAC;MACvDZ,OAAO,CAACe,QAAQ,CAAC,aAAa,CAAC;MAC/Bf,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAACF,KAAK,CAAC;IAC/B,CAAC,MAAM;MACLY,UAAU,CAACI,GAAG,CAAC,MAAM,EAAE,CAACD,eAAe,CAAC;MACxCH,UAAU,CAACI,GAAG,CAAC,OAAO,EAAE,IAAI,CAAChB,KAAK,GAAGc,gBAAgB,CAAC;MACtDZ,OAAO,CAACe,QAAQ,CAAC,eAAe,CAAC;MACjCf,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAACF,KAAK,CAAC;IAC9B;IAEA,OAAOE,OAAO;EAChB;AACF"}
|