@deephaven/golden-layout 0.40.2-beta.2 → 0.40.2-beta.6
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/controls/Tab.js +1 -1
- package/dist/controls/Tab.js.map +1 -1
- package/package.json +2 -2
package/dist/controls/Tab.js
CHANGED
|
@@ -221,5 +221,5 @@ export default class Tab {
|
|
|
221
221
|
event.stopPropagation();
|
|
222
222
|
}
|
|
223
223
|
}
|
|
224
|
-
_defineProperty(Tab, "_template", ['<li class="lm_tab">', '<span class="lm_title_before"></span>', '<span class="lm_title"></span>', '<div class="lm_close_tab"></div>', '</li>'].join(''));
|
|
224
|
+
_defineProperty(Tab, "_template", ['<li class="lm_tab">', '<span class="lm_title_before"></span>', '<span class="lm_title"></span>', '<div class="lm_close_tab" aria-label="Close tab"></div>', '</li>'].join(''));
|
|
225
225
|
//# sourceMappingURL=Tab.js.map
|
package/dist/controls/Tab.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tab.js","names":["$","isComponent","DragListener","DragProxy","Tab","constructor","header","contentItem","_template","titleElement","element","find","closeElement","config","isClosable","setTitle","title","on","_layoutManager","layoutManager","settings","reorderEnabled","_dragListener","_onDragStart","destroy","_onTabClick","bind","_onCloseClick","_onTabContentFocusIn","_onTabContentFocusOut","_onCloseMousedown","remove","tab","emit","container","_contentElement","html","setActive","isActive","addClass","removeClass","_$destroy","off","removeEventListener","undefined","x","y","parent","isMaximised","toggleMaximise","root","contains","document","activeElement","event","button","activeContentItem","getActiveContentItem","setActiveContentItem","focus","_hideAdditionalTabsDropdown","get","scrollIntoView","inline","stopPropagation","close","removeChild","join"],"sources":["../../src/controls/Tab.ts"],"sourcesContent":["import $ from 'jquery';\nimport type { AbstractContentItem } from '../items';\nimport { isComponent } from '../items';\nimport type LayoutManager from '../LayoutManager';\nimport { DragListener } from '../utils';\nimport DragProxy from './DragProxy';\nimport type Header from './Header';\n\n/**\n * Represents an individual tab within a Stack's header\n *\n * @param header\n * @param contentItem\n */\nexport default class Tab {\n /**\n * The tab's html template\n */\n private static _template = [\n '<li class=\"lm_tab\">',\n '<span class=\"lm_title_before\"></span>',\n '<span class=\"lm_title\"></span>',\n '<div class=\"lm_close_tab\"></div>',\n '</li>',\n ].join('');\n\n header: Header;\n contentItem: AbstractContentItem;\n element = $(Tab._template);\n titleElement: JQuery<HTMLElement>;\n closeElement: JQuery<HTMLElement>;\n isActive = false;\n\n private _layoutManager: LayoutManager;\n private _dragListener?: DragListener;\n\n constructor(header: Header, contentItem: AbstractContentItem) {\n this.header = header;\n this.contentItem = contentItem;\n this.titleElement = this.element.find('.lm_title');\n this.closeElement = this.element.find('.lm_close_tab');\n this.closeElement[contentItem.config.isClosable ? 'show' : 'hide']();\n\n this.setTitle(contentItem.config.title);\n this.contentItem.on('titleChanged', this.setTitle, this);\n\n this._layoutManager = this.contentItem.layoutManager;\n\n if (\n this._layoutManager.config.settings?.reorderEnabled &&\n contentItem.config.reorderEnabled\n ) {\n this._dragListener = new DragListener(this.element);\n this._dragListener.on('dragStart', this._onDragStart, this);\n this.contentItem.on(\n 'destroy',\n this._dragListener.destroy,\n this._dragListener\n );\n }\n\n this._onTabClick = this._onTabClick.bind(this);\n this._onCloseClick = this._onCloseClick.bind(this);\n this._onTabContentFocusIn = this._onTabContentFocusIn.bind(this);\n this._onTabContentFocusOut = this._onTabContentFocusOut.bind(this);\n\n this.element.on('click', this._onTabClick);\n this.element.on('auxclick', this._onTabClick);\n\n if (this.contentItem.config.isClosable) {\n this.closeElement.on('click', this._onCloseClick);\n this.closeElement.on('mousedown', this._onCloseMousedown);\n } else {\n this.closeElement.remove();\n }\n\n this.contentItem.tab = this;\n this.contentItem.emit('tab', this);\n this.contentItem.layoutManager.emit('tabCreated', this);\n\n if (isComponent(this.contentItem)) {\n // add focus class to tab when content\n this.contentItem.container._contentElement\n .on('focusin', this._onTabContentFocusIn)\n .on('focusout', this._onTabContentFocusOut);\n\n this.contentItem.container.tab = this;\n this.contentItem.container.emit('tab', this);\n }\n }\n\n /**\n * Sets the tab's title to the provided string and sets\n * its title attribute to a pure text representation (without\n * html tags) of the same string.\n * @param title can contain html\n */\n setTitle(title = '') {\n // Disabling for illumon project, we want to manage our own tooltips\n // this.element.attr( 'title', lm.utils.stripTags( title ) );\n this.titleElement.html(title);\n }\n\n /**\n * Sets this tab's active state. To programmatically\n * switch tabs, use header.setActiveContentItem( item ) instead.\n * @param isActive\n */\n setActive(isActive: boolean) {\n if (isActive === this.isActive) {\n return;\n }\n this.isActive = isActive;\n\n if (isActive) {\n this.element.addClass('lm_active');\n } else {\n this.element.removeClass('lm_active');\n }\n }\n\n /**\n * Destroys the tab\n *\n * @private\n * @returns {void}\n */\n _$destroy() {\n this.element.off('click', this._onTabClick);\n this.element.off('auxclick', this._onTabClick);\n this.closeElement.off('click', this._onCloseClick);\n if (isComponent(this.contentItem)) {\n this.contentItem.container._contentElement.off();\n this.contentItem.container._contentElement[0].removeEventListener(\n 'click',\n this._onTabContentFocusIn,\n true\n );\n }\n if (this._dragListener) {\n this.contentItem.off(\n 'destroy',\n this._dragListener.destroy,\n this._dragListener\n );\n this._dragListener.off('dragStart', this._onDragStart);\n this._dragListener = undefined;\n }\n this.element.remove();\n }\n\n /**\n * Callback for the DragListener\n *\n * @param x The tabs absolute x position\n * @param y The tabs absolute y position\n */\n _onDragStart(x: number, y: number) {\n if (this.contentItem.parent?.isMaximised) {\n this.contentItem.parent.toggleMaximise();\n }\n\n if (!this._dragListener) {\n return;\n }\n\n new DragProxy(\n x,\n y,\n this._dragListener,\n this._layoutManager,\n this.contentItem,\n this.header.parent\n );\n }\n\n /**\n * Callback when the contentItem is focused in\n */\n _onTabContentFocusIn() {\n // Ensure only one tab is marked as having focus at a time.\n // In Firefox, if the focused element is removed from the DOM,\n // the focusout event won't trigger. This can result in two tabs\n // being erroneously marked as focused if the user's DOM element\n // is removed and they click another tab. To prevent this, we\n // remove existing \"lm_focusin\" classes first.\n $('.lm_focusin', this._layoutManager.root.element).removeClass(\n 'lm_focusin'\n );\n\n this.element.addClass('lm_focusin');\n }\n\n /**\n * Callback when the contentItem is focused out\n *\n * @param {jQuery DOM event} event\n *\n * @private\n * @returns {void}\n */\n _onTabContentFocusOut() {\n if (\n isComponent(this.contentItem) &&\n !this.contentItem.container._contentElement[0].contains(\n document.activeElement\n )\n ) {\n this.element.removeClass('lm_focusin');\n }\n }\n\n /**\n * Callback when the tab is clicked\n *\n * @param event\n */\n _onTabClick(event?: JQuery.TriggeredEvent) {\n // left mouse button or tap\n if (!event || event.button === 0) {\n var activeContentItem = this.header.parent.getActiveContentItem();\n if (\n this.contentItem !== activeContentItem &&\n isComponent(this.contentItem)\n ) {\n this.header.parent.setActiveContentItem(this.contentItem);\n } else if (\n isComponent(this.contentItem) &&\n !this.contentItem.container._contentElement[0].contains(\n document.activeElement\n )\n ) {\n // if no focus inside put focus onto the container\n // so focusin always fires for tabclicks\n this.contentItem.container._contentElement.focus();\n }\n\n if (isComponent(this.contentItem)) {\n this.contentItem.container.emit('tabClicked', event);\n }\n\n // might have been called from the dropdown\n this.header._hideAdditionalTabsDropdown();\n\n // makes sure clicked tabs scrollintoview (either those partially offscreen or in dropdown)\n this.element.get(0)?.scrollIntoView({\n inline: 'nearest',\n // behaviour smooth is not possible here, as when a tab becomes active it may attempt to take focus\n // which interupts any scroll behaviour from completeting\n });\n\n // middle mouse button\n } else if (event.button === 1 && this.contentItem.config.isClosable) {\n this._onCloseClick(event);\n }\n }\n\n /**\n * Callback when the tab's close button is\n * clicked\n *\n * @param event\n */\n _onCloseClick(event: JQuery.TriggeredEvent) {\n event.stopPropagation();\n if (isComponent(this.contentItem)) {\n this.contentItem.container.close();\n } else {\n this.header.parent.removeChild(this.contentItem);\n }\n }\n\n /**\n * Callback to capture tab close button mousedown\n * to prevent tab from activating.\n *\n * @param event\n */\n _onCloseMousedown(event: Event) {\n event.stopPropagation();\n }\n}\n"],"mappings":";;;AAAA,OAAOA,CAAC,MAAM,QAAQ;AAAC,SAEdC,WAAW;AAAA,SAEXC,YAAY;AAAA,OACdC,SAAS;AAGhB;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAMC,GAAG,CAAC;EACvB;AACF;AACA;;EAmBEC,WAAW,CAACC,MAAc,EAAEC,WAAgC,EAAE;IAAA;IAAA;IAAA;IAAA,iCARpDP,CAAC,CAACI,GAAG,CAACI,SAAS,CAAC;IAAA;IAAA;IAAA,kCAGf,KAAK;IAAA;IAAA;IAMd,IAAI,CAACF,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACC,WAAW,GAAGA,WAAW;IAC9B,IAAI,CAACE,YAAY,GAAG,IAAI,CAACC,OAAO,CAACC,IAAI,CAAC,WAAW,CAAC;IAClD,IAAI,CAACC,YAAY,GAAG,IAAI,CAACF,OAAO,CAACC,IAAI,CAAC,eAAe,CAAC;IACtD,IAAI,CAACC,YAAY,CAACL,WAAW,CAACM,MAAM,CAACC,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE;IAEpE,IAAI,CAACC,QAAQ,CAACR,WAAW,CAACM,MAAM,CAACG,KAAK,CAAC;IACvC,IAAI,CAACT,WAAW,CAACU,EAAE,CAAC,cAAc,EAAE,IAAI,CAACF,QAAQ,EAAE,IAAI,CAAC;IAExD,IAAI,CAACG,cAAc,GAAG,IAAI,CAACX,WAAW,CAACY,aAAa;IAEpD,IACE,6BAAI,CAACD,cAAc,CAACL,MAAM,CAACO,QAAQ,kDAAnC,sBAAqCC,cAAc,IACnDd,WAAW,CAACM,MAAM,CAACQ,cAAc,EACjC;MACA,IAAI,CAACC,aAAa,GAAG,IAAIpB,YAAY,CAAC,IAAI,CAACQ,OAAO,CAAC;MACnD,IAAI,CAACY,aAAa,CAACL,EAAE,CAAC,WAAW,EAAE,IAAI,CAACM,YAAY,EAAE,IAAI,CAAC;MAC3D,IAAI,CAAChB,WAAW,CAACU,EAAE,CACjB,SAAS,EACT,IAAI,CAACK,aAAa,CAACE,OAAO,EAC1B,IAAI,CAACF,aAAa,CACnB;IACH;IAEA,IAAI,CAACG,WAAW,GAAG,IAAI,CAACA,WAAW,CAACC,IAAI,CAAC,IAAI,CAAC;IAC9C,IAAI,CAACC,aAAa,GAAG,IAAI,CAACA,aAAa,CAACD,IAAI,CAAC,IAAI,CAAC;IAClD,IAAI,CAACE,oBAAoB,GAAG,IAAI,CAACA,oBAAoB,CAACF,IAAI,CAAC,IAAI,CAAC;IAChE,IAAI,CAACG,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACH,IAAI,CAAC,IAAI,CAAC;IAElE,IAAI,CAAChB,OAAO,CAACO,EAAE,CAAC,OAAO,EAAE,IAAI,CAACQ,WAAW,CAAC;IAC1C,IAAI,CAACf,OAAO,CAACO,EAAE,CAAC,UAAU,EAAE,IAAI,CAACQ,WAAW,CAAC;IAE7C,IAAI,IAAI,CAAClB,WAAW,CAACM,MAAM,CAACC,UAAU,EAAE;MACtC,IAAI,CAACF,YAAY,CAACK,EAAE,CAAC,OAAO,EAAE,IAAI,CAACU,aAAa,CAAC;MACjD,IAAI,CAACf,YAAY,CAACK,EAAE,CAAC,WAAW,EAAE,IAAI,CAACa,iBAAiB,CAAC;IAC3D,CAAC,MAAM;MACL,IAAI,CAAClB,YAAY,CAACmB,MAAM,EAAE;IAC5B;IAEA,IAAI,CAACxB,WAAW,CAACyB,GAAG,GAAG,IAAI;IAC3B,IAAI,CAACzB,WAAW,CAAC0B,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;IAClC,IAAI,CAAC1B,WAAW,CAACY,aAAa,CAACc,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC;IAEvD,IAAIhC,WAAW,CAAC,IAAI,CAACM,WAAW,CAAC,EAAE;MACjC;MACA,IAAI,CAACA,WAAW,CAAC2B,SAAS,CAACC,eAAe,CACvClB,EAAE,CAAC,SAAS,EAAE,IAAI,CAACW,oBAAoB,CAAC,CACxCX,EAAE,CAAC,UAAU,EAAE,IAAI,CAACY,qBAAqB,CAAC;MAE7C,IAAI,CAACtB,WAAW,CAAC2B,SAAS,CAACF,GAAG,GAAG,IAAI;MACrC,IAAI,CAACzB,WAAW,CAAC2B,SAAS,CAACD,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;IAC9C;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;EACElB,QAAQ,GAAa;IAAA,IAAZC,KAAK,uEAAG,EAAE;IACjB;IACA;IACA,IAAI,CAACP,YAAY,CAAC2B,IAAI,CAACpB,KAAK,CAAC;EAC/B;;EAEA;AACF;AACA;AACA;AACA;EACEqB,SAAS,CAACC,QAAiB,EAAE;IAC3B,IAAIA,QAAQ,KAAK,IAAI,CAACA,QAAQ,EAAE;MAC9B;IACF;IACA,IAAI,CAACA,QAAQ,GAAGA,QAAQ;IAExB,IAAIA,QAAQ,EAAE;MACZ,IAAI,CAAC5B,OAAO,CAAC6B,QAAQ,CAAC,WAAW,CAAC;IACpC,CAAC,MAAM;MACL,IAAI,CAAC7B,OAAO,CAAC8B,WAAW,CAAC,WAAW,CAAC;IACvC;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEC,SAAS,GAAG;IACV,IAAI,CAAC/B,OAAO,CAACgC,GAAG,CAAC,OAAO,EAAE,IAAI,CAACjB,WAAW,CAAC;IAC3C,IAAI,CAACf,OAAO,CAACgC,GAAG,CAAC,UAAU,EAAE,IAAI,CAACjB,WAAW,CAAC;IAC9C,IAAI,CAACb,YAAY,CAAC8B,GAAG,CAAC,OAAO,EAAE,IAAI,CAACf,aAAa,CAAC;IAClD,IAAI1B,WAAW,CAAC,IAAI,CAACM,WAAW,CAAC,EAAE;MACjC,IAAI,CAACA,WAAW,CAAC2B,SAAS,CAACC,eAAe,CAACO,GAAG,EAAE;MAChD,IAAI,CAACnC,WAAW,CAAC2B,SAAS,CAACC,eAAe,CAAC,CAAC,CAAC,CAACQ,mBAAmB,CAC/D,OAAO,EACP,IAAI,CAACf,oBAAoB,EACzB,IAAI,CACL;IACH;IACA,IAAI,IAAI,CAACN,aAAa,EAAE;MACtB,IAAI,CAACf,WAAW,CAACmC,GAAG,CAClB,SAAS,EACT,IAAI,CAACpB,aAAa,CAACE,OAAO,EAC1B,IAAI,CAACF,aAAa,CACnB;MACD,IAAI,CAACA,aAAa,CAACoB,GAAG,CAAC,WAAW,EAAE,IAAI,CAACnB,YAAY,CAAC;MACtD,IAAI,CAACD,aAAa,GAAGsB,SAAS;IAChC;IACA,IAAI,CAAClC,OAAO,CAACqB,MAAM,EAAE;EACvB;;EAEA;AACF;AACA;AACA;AACA;AACA;EACER,YAAY,CAACsB,CAAS,EAAEC,CAAS,EAAE;IAAA;IACjC,6BAAI,IAAI,CAACvC,WAAW,CAACwC,MAAM,kDAAvB,sBAAyBC,WAAW,EAAE;MACxC,IAAI,CAACzC,WAAW,CAACwC,MAAM,CAACE,cAAc,EAAE;IAC1C;IAEA,IAAI,CAAC,IAAI,CAAC3B,aAAa,EAAE;MACvB;IACF;IAEA,IAAInB,SAAS,CACX0C,CAAC,EACDC,CAAC,EACD,IAAI,CAACxB,aAAa,EAClB,IAAI,CAACJ,cAAc,EACnB,IAAI,CAACX,WAAW,EAChB,IAAI,CAACD,MAAM,CAACyC,MAAM,CACnB;EACH;;EAEA;AACF;AACA;EACEnB,oBAAoB,GAAG;IACrB;IACA;IACA;IACA;IACA;IACA;IACA5B,CAAC,CAAC,aAAa,EAAE,IAAI,CAACkB,cAAc,CAACgC,IAAI,CAACxC,OAAO,CAAC,CAAC8B,WAAW,CAC5D,YAAY,CACb;IAED,IAAI,CAAC9B,OAAO,CAAC6B,QAAQ,CAAC,YAAY,CAAC;EACrC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEV,qBAAqB,GAAG;IACtB,IACE5B,WAAW,CAAC,IAAI,CAACM,WAAW,CAAC,IAC7B,CAAC,IAAI,CAACA,WAAW,CAAC2B,SAAS,CAACC,eAAe,CAAC,CAAC,CAAC,CAACgB,QAAQ,CACrDC,QAAQ,CAACC,aAAa,CACvB,EACD;MACA,IAAI,CAAC3C,OAAO,CAAC8B,WAAW,CAAC,YAAY,CAAC;IACxC;EACF;;EAEA;AACF;AACA;AACA;AACA;EACEf,WAAW,CAAC6B,KAA6B,EAAE;IACzC;IACA,IAAI,CAACA,KAAK,IAAIA,KAAK,CAACC,MAAM,KAAK,CAAC,EAAE;MAAA;MAChC,IAAIC,iBAAiB,GAAG,IAAI,CAAClD,MAAM,CAACyC,MAAM,CAACU,oBAAoB,EAAE;MACjE,IACE,IAAI,CAAClD,WAAW,KAAKiD,iBAAiB,IACtCvD,WAAW,CAAC,IAAI,CAACM,WAAW,CAAC,EAC7B;QACA,IAAI,CAACD,MAAM,CAACyC,MAAM,CAACW,oBAAoB,CAAC,IAAI,CAACnD,WAAW,CAAC;MAC3D,CAAC,MAAM,IACLN,WAAW,CAAC,IAAI,CAACM,WAAW,CAAC,IAC7B,CAAC,IAAI,CAACA,WAAW,CAAC2B,SAAS,CAACC,eAAe,CAAC,CAAC,CAAC,CAACgB,QAAQ,CACrDC,QAAQ,CAACC,aAAa,CACvB,EACD;QACA;QACA;QACA,IAAI,CAAC9C,WAAW,CAAC2B,SAAS,CAACC,eAAe,CAACwB,KAAK,EAAE;MACpD;MAEA,IAAI1D,WAAW,CAAC,IAAI,CAACM,WAAW,CAAC,EAAE;QACjC,IAAI,CAACA,WAAW,CAAC2B,SAAS,CAACD,IAAI,CAAC,YAAY,EAAEqB,KAAK,CAAC;MACtD;;MAEA;MACA,IAAI,CAAChD,MAAM,CAACsD,2BAA2B,EAAE;;MAEzC;MACA,yBAAI,CAAClD,OAAO,CAACmD,GAAG,CAAC,CAAC,CAAC,sDAAnB,kBAAqBC,cAAc,CAAC;QAClCC,MAAM,EAAE;QACR;QACA;MACF,CAAC,CAAC;;MAEF;IACF,CAAC,MAAM,IAAIT,KAAK,CAACC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAChD,WAAW,CAACM,MAAM,CAACC,UAAU,EAAE;MACnE,IAAI,CAACa,aAAa,CAAC2B,KAAK,CAAC;IAC3B;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE3B,aAAa,CAAC2B,KAA4B,EAAE;IAC1CA,KAAK,CAACU,eAAe,EAAE;IACvB,IAAI/D,WAAW,CAAC,IAAI,CAACM,WAAW,CAAC,EAAE;MACjC,IAAI,CAACA,WAAW,CAAC2B,SAAS,CAAC+B,KAAK,EAAE;IACpC,CAAC,MAAM;MACL,IAAI,CAAC3D,MAAM,CAACyC,MAAM,CAACmB,WAAW,CAAC,IAAI,CAAC3D,WAAW,CAAC;IAClD;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEuB,iBAAiB,CAACwB,KAAY,EAAE;IAC9BA,KAAK,CAACU,eAAe,EAAE;EACzB;AACF;AAAC,gBA3QoB5D,GAAG,eAIK,CACzB,qBAAqB,EACrB,uCAAuC,EACvC,gCAAgC,EAChC,kCAAkC,EAClC,OAAO,CACR,CAAC+D,IAAI,CAAC,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"Tab.js","names":["$","isComponent","DragListener","DragProxy","Tab","constructor","header","contentItem","_template","titleElement","element","find","closeElement","config","isClosable","setTitle","title","on","_layoutManager","layoutManager","settings","reorderEnabled","_dragListener","_onDragStart","destroy","_onTabClick","bind","_onCloseClick","_onTabContentFocusIn","_onTabContentFocusOut","_onCloseMousedown","remove","tab","emit","container","_contentElement","html","setActive","isActive","addClass","removeClass","_$destroy","off","removeEventListener","undefined","x","y","parent","isMaximised","toggleMaximise","root","contains","document","activeElement","event","button","activeContentItem","getActiveContentItem","setActiveContentItem","focus","_hideAdditionalTabsDropdown","get","scrollIntoView","inline","stopPropagation","close","removeChild","join"],"sources":["../../src/controls/Tab.ts"],"sourcesContent":["import $ from 'jquery';\nimport type { AbstractContentItem } from '../items';\nimport { isComponent } from '../items';\nimport type LayoutManager from '../LayoutManager';\nimport { DragListener } from '../utils';\nimport DragProxy from './DragProxy';\nimport type Header from './Header';\n\n/**\n * Represents an individual tab within a Stack's header\n *\n * @param header\n * @param contentItem\n */\nexport default class Tab {\n /**\n * The tab's html template\n */\n private static _template = [\n '<li class=\"lm_tab\">',\n '<span class=\"lm_title_before\"></span>',\n '<span class=\"lm_title\"></span>',\n '<div class=\"lm_close_tab\" aria-label=\"Close tab\"></div>',\n '</li>',\n ].join('');\n\n header: Header;\n contentItem: AbstractContentItem;\n element = $(Tab._template);\n titleElement: JQuery<HTMLElement>;\n closeElement: JQuery<HTMLElement>;\n isActive = false;\n\n private _layoutManager: LayoutManager;\n private _dragListener?: DragListener;\n\n constructor(header: Header, contentItem: AbstractContentItem) {\n this.header = header;\n this.contentItem = contentItem;\n this.titleElement = this.element.find('.lm_title');\n this.closeElement = this.element.find('.lm_close_tab');\n this.closeElement[contentItem.config.isClosable ? 'show' : 'hide']();\n\n this.setTitle(contentItem.config.title);\n this.contentItem.on('titleChanged', this.setTitle, this);\n\n this._layoutManager = this.contentItem.layoutManager;\n\n if (\n this._layoutManager.config.settings?.reorderEnabled &&\n contentItem.config.reorderEnabled\n ) {\n this._dragListener = new DragListener(this.element);\n this._dragListener.on('dragStart', this._onDragStart, this);\n this.contentItem.on(\n 'destroy',\n this._dragListener.destroy,\n this._dragListener\n );\n }\n\n this._onTabClick = this._onTabClick.bind(this);\n this._onCloseClick = this._onCloseClick.bind(this);\n this._onTabContentFocusIn = this._onTabContentFocusIn.bind(this);\n this._onTabContentFocusOut = this._onTabContentFocusOut.bind(this);\n\n this.element.on('click', this._onTabClick);\n this.element.on('auxclick', this._onTabClick);\n\n if (this.contentItem.config.isClosable) {\n this.closeElement.on('click', this._onCloseClick);\n this.closeElement.on('mousedown', this._onCloseMousedown);\n } else {\n this.closeElement.remove();\n }\n\n this.contentItem.tab = this;\n this.contentItem.emit('tab', this);\n this.contentItem.layoutManager.emit('tabCreated', this);\n\n if (isComponent(this.contentItem)) {\n // add focus class to tab when content\n this.contentItem.container._contentElement\n .on('focusin', this._onTabContentFocusIn)\n .on('focusout', this._onTabContentFocusOut);\n\n this.contentItem.container.tab = this;\n this.contentItem.container.emit('tab', this);\n }\n }\n\n /**\n * Sets the tab's title to the provided string and sets\n * its title attribute to a pure text representation (without\n * html tags) of the same string.\n * @param title can contain html\n */\n setTitle(title = '') {\n // Disabling for illumon project, we want to manage our own tooltips\n // this.element.attr( 'title', lm.utils.stripTags( title ) );\n this.titleElement.html(title);\n }\n\n /**\n * Sets this tab's active state. To programmatically\n * switch tabs, use header.setActiveContentItem( item ) instead.\n * @param isActive\n */\n setActive(isActive: boolean) {\n if (isActive === this.isActive) {\n return;\n }\n this.isActive = isActive;\n\n if (isActive) {\n this.element.addClass('lm_active');\n } else {\n this.element.removeClass('lm_active');\n }\n }\n\n /**\n * Destroys the tab\n *\n * @private\n * @returns {void}\n */\n _$destroy() {\n this.element.off('click', this._onTabClick);\n this.element.off('auxclick', this._onTabClick);\n this.closeElement.off('click', this._onCloseClick);\n if (isComponent(this.contentItem)) {\n this.contentItem.container._contentElement.off();\n this.contentItem.container._contentElement[0].removeEventListener(\n 'click',\n this._onTabContentFocusIn,\n true\n );\n }\n if (this._dragListener) {\n this.contentItem.off(\n 'destroy',\n this._dragListener.destroy,\n this._dragListener\n );\n this._dragListener.off('dragStart', this._onDragStart);\n this._dragListener = undefined;\n }\n this.element.remove();\n }\n\n /**\n * Callback for the DragListener\n *\n * @param x The tabs absolute x position\n * @param y The tabs absolute y position\n */\n _onDragStart(x: number, y: number) {\n if (this.contentItem.parent?.isMaximised) {\n this.contentItem.parent.toggleMaximise();\n }\n\n if (!this._dragListener) {\n return;\n }\n\n new DragProxy(\n x,\n y,\n this._dragListener,\n this._layoutManager,\n this.contentItem,\n this.header.parent\n );\n }\n\n /**\n * Callback when the contentItem is focused in\n */\n _onTabContentFocusIn() {\n // Ensure only one tab is marked as having focus at a time.\n // In Firefox, if the focused element is removed from the DOM,\n // the focusout event won't trigger. This can result in two tabs\n // being erroneously marked as focused if the user's DOM element\n // is removed and they click another tab. To prevent this, we\n // remove existing \"lm_focusin\" classes first.\n $('.lm_focusin', this._layoutManager.root.element).removeClass(\n 'lm_focusin'\n );\n\n this.element.addClass('lm_focusin');\n }\n\n /**\n * Callback when the contentItem is focused out\n *\n * @param {jQuery DOM event} event\n *\n * @private\n * @returns {void}\n */\n _onTabContentFocusOut() {\n if (\n isComponent(this.contentItem) &&\n !this.contentItem.container._contentElement[0].contains(\n document.activeElement\n )\n ) {\n this.element.removeClass('lm_focusin');\n }\n }\n\n /**\n * Callback when the tab is clicked\n *\n * @param event\n */\n _onTabClick(event?: JQuery.TriggeredEvent) {\n // left mouse button or tap\n if (!event || event.button === 0) {\n var activeContentItem = this.header.parent.getActiveContentItem();\n if (\n this.contentItem !== activeContentItem &&\n isComponent(this.contentItem)\n ) {\n this.header.parent.setActiveContentItem(this.contentItem);\n } else if (\n isComponent(this.contentItem) &&\n !this.contentItem.container._contentElement[0].contains(\n document.activeElement\n )\n ) {\n // if no focus inside put focus onto the container\n // so focusin always fires for tabclicks\n this.contentItem.container._contentElement.focus();\n }\n\n if (isComponent(this.contentItem)) {\n this.contentItem.container.emit('tabClicked', event);\n }\n\n // might have been called from the dropdown\n this.header._hideAdditionalTabsDropdown();\n\n // makes sure clicked tabs scrollintoview (either those partially offscreen or in dropdown)\n this.element.get(0)?.scrollIntoView({\n inline: 'nearest',\n // behaviour smooth is not possible here, as when a tab becomes active it may attempt to take focus\n // which interupts any scroll behaviour from completeting\n });\n\n // middle mouse button\n } else if (event.button === 1 && this.contentItem.config.isClosable) {\n this._onCloseClick(event);\n }\n }\n\n /**\n * Callback when the tab's close button is\n * clicked\n *\n * @param event\n */\n _onCloseClick(event: JQuery.TriggeredEvent) {\n event.stopPropagation();\n if (isComponent(this.contentItem)) {\n this.contentItem.container.close();\n } else {\n this.header.parent.removeChild(this.contentItem);\n }\n }\n\n /**\n * Callback to capture tab close button mousedown\n * to prevent tab from activating.\n *\n * @param event\n */\n _onCloseMousedown(event: Event) {\n event.stopPropagation();\n }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/golden-layout",
|
|
3
|
-
"version": "0.40.2-beta.
|
|
3
|
+
"version": "0.40.2-beta.6+99818a8e",
|
|
4
4
|
"author": "Deephaven Data Labs LLC",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"description": "A multi-screen javascript Layout manager",
|
|
@@ -54,5 +54,5 @@
|
|
|
54
54
|
"karma-browserify": "^8.1.0",
|
|
55
55
|
"watchify": "^4.0.0"
|
|
56
56
|
},
|
|
57
|
-
"gitHead": "
|
|
57
|
+
"gitHead": "99818a8ee4b505da7708914105a4197abdc502d8"
|
|
58
58
|
}
|