@tylertech/forge 3.0.0-next.6 → 3.0.0-next.7
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/custom-elements.json +620 -1108
- package/dist/esm/accordion/index.js +1 -1
- package/dist/esm/app-bar/help-button/index.js +1 -1
- package/dist/esm/app-bar/index.js +1 -1
- package/dist/esm/app-bar/menu-button/index.js +1 -1
- package/dist/esm/app-bar/notification-button/index.js +1 -1
- package/dist/esm/app-bar/profile-button/index.js +1 -1
- package/dist/esm/app-bar/search/index.js +1 -1
- package/dist/esm/autocomplete/index.js +1 -1
- package/dist/esm/banner/index.js +1 -1
- package/dist/esm/bottom-sheet/index.js +1 -1
- package/dist/esm/busy-indicator/index.js +1 -1
- package/dist/esm/button/index.js +1 -1
- package/dist/esm/button-toggle/button-toggle/index.js +1 -1
- package/dist/esm/button-toggle/button-toggle-group/index.js +1 -1
- package/dist/esm/button-toggle/index.js +1 -1
- package/dist/esm/calendar/index.js +1 -1
- package/dist/esm/checkbox/index.js +1 -1
- package/dist/esm/chip-field/index.js +1 -1
- package/dist/esm/chips/chip/index.js +1 -1
- package/dist/esm/chips/chip-set/index.js +1 -1
- package/dist/esm/chips/index.js +1 -1
- package/dist/esm/chunks/{chunk.Q6IP5GJ6.js → chunk.246JM2YT.js} +2 -2
- package/dist/esm/chunks/{chunk.DHTAH23Y.js → chunk.24L5GDD2.js} +2 -2
- package/dist/esm/chunks/{chunk.ZWTZJJ6H.js → chunk.2IQGDFQS.js} +2 -2
- package/dist/esm/chunks/{chunk.DAGXGSX7.js → chunk.2LRDPTHK.js} +2 -2
- package/dist/esm/chunks/{chunk.Q47M2LB5.js → chunk.2QFIMTVP.js} +2 -2
- package/dist/esm/chunks/{chunk.IVB6XTHQ.js → chunk.2TQONIPK.js} +2 -2
- package/dist/esm/chunks/{chunk.DXHKS7XO.js → chunk.2XFVFZ3P.js} +2 -2
- package/dist/esm/chunks/{chunk.3ICROIFD.js → chunk.2YAU7AXH.js} +2 -2
- package/dist/esm/chunks/{chunk.5B2CGITX.js → chunk.2YX7ASSX.js} +2 -2
- package/dist/esm/chunks/{chunk.QLNGQCJX.js → chunk.2ZTERGYF.js} +2 -2
- package/dist/esm/chunks/{chunk.Y2ANYRZH.js → chunk.4EB5NVCK.js} +2 -2
- package/dist/esm/chunks/{chunk.SACZLJPQ.js → chunk.4LVS2EYJ.js} +2 -2
- package/dist/esm/chunks/{chunk.E3VXLUEY.js → chunk.5IVB5L5Z.js} +2 -2
- package/dist/esm/chunks/{chunk.QO37K76P.js → chunk.6SBTLXLH.js} +2 -2
- package/dist/esm/chunks/{chunk.BTZF6QGA.js → chunk.7JQHQKXN.js} +2 -2
- package/dist/esm/chunks/{chunk.TWV4OTF7.js → chunk.A5MBSCSQ.js} +2 -2
- package/dist/esm/chunks/{chunk.4EF7UJDK.js → chunk.A5R7KUIP.js} +2 -2
- package/dist/esm/chunks/{chunk.NQH4ZCXJ.js → chunk.AGMPIMJV.js} +2 -2
- package/dist/esm/chunks/{chunk.PMY4KVCF.js → chunk.BKCEVPKW.js} +2 -2
- package/dist/esm/chunks/{chunk.I5MLIFN5.js → chunk.BSTIDYQJ.js} +2 -2
- package/dist/esm/chunks/{chunk.MZNL36GJ.js → chunk.CNQESSA3.js} +2 -2
- package/dist/esm/chunks/{chunk.6FISJTFJ.js → chunk.E6KWYFZG.js} +2 -2
- package/dist/esm/chunks/{chunk.H3SBIXK5.js → chunk.ECRL6O3V.js} +2 -2
- package/dist/esm/chunks/{chunk.SBDWCXK3.js → chunk.ER52NFXX.js} +2 -2
- package/dist/esm/chunks/{chunk.GSQF3ACL.js → chunk.EUE3OVC7.js} +2 -2
- package/dist/esm/chunks/{chunk.DGNS4JNN.js → chunk.FAANPQES.js} +2 -2
- package/dist/esm/chunks/{chunk.MZLPUI6R.js → chunk.FYWPZFLJ.js} +2 -2
- package/dist/esm/chunks/{chunk.MZLPUI6R.js.map → chunk.FYWPZFLJ.js.map} +2 -2
- package/dist/esm/chunks/{chunk.LMSXJOPL.js → chunk.GF2GUVYS.js} +2 -2
- package/dist/esm/chunks/{chunk.QKRB6AIQ.js → chunk.GHSAKRYH.js} +2 -2
- package/dist/esm/chunks/{chunk.JHTGKXXX.js → chunk.GJW4WS4I.js} +2 -2
- package/dist/esm/chunks/{chunk.IW37LUQJ.js → chunk.GUYPITGA.js} +2 -2
- package/dist/esm/chunks/chunk.GWIVOPRO.js +7 -0
- package/dist/esm/chunks/chunk.GWIVOPRO.js.map +7 -0
- package/dist/esm/chunks/{chunk.G75X57KY.js → chunk.HKJEGD6C.js} +2 -2
- package/dist/esm/chunks/{chunk.3ARIVYGG.js → chunk.IGK3VYZG.js} +2 -2
- package/dist/esm/chunks/chunk.JHXNEHWR.js +12 -0
- package/dist/esm/chunks/{chunk.7MDHI4PT.js → chunk.JVW6JGV3.js} +2 -2
- package/dist/esm/chunks/{chunk.LQ4RD7WW.js → chunk.MXNLCQRB.js} +2 -2
- package/dist/esm/chunks/chunk.OHNPVHPF.js +7 -0
- package/dist/esm/chunks/chunk.OHNPVHPF.js.map +7 -0
- package/dist/esm/chunks/{chunk.GZZ6GFKT.js → chunk.OT6H5NHX.js} +2 -2
- package/dist/esm/chunks/{chunk.PG4HEEX2.js → chunk.OTVT3XM2.js} +2 -2
- package/dist/esm/chunks/{chunk.VSO5QDBV.js → chunk.P5QIB6OY.js} +2 -2
- package/dist/esm/chunks/{chunk.XUV63FEH.js → chunk.PPPTT3SM.js} +2 -2
- package/dist/esm/chunks/{chunk.GZRMHYID.js → chunk.QA3NU7EN.js} +2 -2
- package/dist/esm/chunks/{chunk.MVYTV6WX.js → chunk.QYKO543K.js} +2 -2
- package/dist/esm/chunks/{chunk.XI4RWFCG.js → chunk.RHYRMQS7.js} +2 -2
- package/dist/esm/chunks/{chunk.Q4SCW4FN.js → chunk.RUSHOL23.js} +2 -2
- package/dist/esm/chunks/{chunk.AD4CP4UK.js → chunk.SIJGKRYS.js} +2 -2
- package/dist/esm/chunks/{chunk.BIJJCDHE.js → chunk.STGRPD2L.js} +2 -2
- package/dist/esm/chunks/{chunk.BIJJCDHE.js.map → chunk.STGRPD2L.js.map} +1 -1
- package/dist/esm/chunks/{chunk.RTMDWDS4.js → chunk.SYZB7B4F.js} +2 -2
- package/dist/esm/chunks/{chunk.GYPPM2D2.js → chunk.SZIM4KFZ.js} +2 -2
- package/dist/esm/chunks/{chunk.UXQZFI55.js → chunk.THPU5KBV.js} +2 -2
- package/dist/esm/chunks/{chunk.K6VWRQWY.js → chunk.TXFYS6EU.js} +2 -2
- package/dist/esm/chunks/{chunk.ZLFH7VOM.js → chunk.V4RBOYNH.js} +2 -2
- package/dist/esm/chunks/{chunk.4B22UXEH.js → chunk.WFDIA7R6.js} +2 -2
- package/dist/esm/chunks/{chunk.DCCJTW7C.js → chunk.XMFQFFKR.js} +2 -2
- package/dist/esm/chunks/{chunk.JRV5FYMW.js → chunk.YUAU5IWT.js} +2 -2
- package/dist/esm/chunks/{chunk.YSFUL5AD.js → chunk.YZLASVCK.js} +2 -2
- package/dist/esm/chunks/{chunk.R7MQKCHR.js → chunk.Z5TWWM7I.js} +2 -2
- package/dist/esm/color-picker/index.js +1 -1
- package/dist/esm/date-picker/index.js +1 -1
- package/dist/esm/date-range-picker/index.js +1 -1
- package/dist/esm/expansion-panel/index.js +1 -1
- package/dist/esm/file-picker/index.js +1 -1
- package/dist/esm/floating-action-button/index.js +1 -1
- package/dist/esm/icon-button/index.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/list/index.js +1 -1
- package/dist/esm/list/list/index.js +1 -1
- package/dist/esm/list/list-item/index.js +1 -1
- package/dist/esm/list-dropdown/index.js +1 -1
- package/dist/esm/menu/index.js +1 -1
- package/dist/esm/open-icon/index.js +1 -1
- package/dist/esm/paginator/index.js +1 -1
- package/dist/esm/profile-card/index.js +1 -1
- package/dist/esm/quantity-field/index.js +1 -1
- package/dist/esm/radio/index.js +1 -1
- package/dist/esm/ripple/index.js +1 -1
- package/dist/esm/select/core/index.js +1 -1
- package/dist/esm/select/index.js +1 -1
- package/dist/esm/select/select/index.js +1 -1
- package/dist/esm/select/select-dropdown/index.js +1 -1
- package/dist/esm/slider/index.js +1 -1
- package/dist/esm/split-view/index.js +1 -1
- package/dist/esm/split-view/split-view/index.js +1 -1
- package/dist/esm/split-view/split-view-panel/index.js +1 -1
- package/dist/esm/stepper/index.js +1 -1
- package/dist/esm/stepper/step/index.js +1 -1
- package/dist/esm/stepper/stepper/index.js +1 -1
- package/dist/esm/switch/index.js +1 -1
- package/dist/esm/table/index.js +1 -1
- package/dist/esm/tabs/index.js +1 -1
- package/dist/esm/tabs/tab/index.js +1 -1
- package/dist/esm/tabs/tab-bar/index.js +1 -1
- package/dist/esm/time-picker/index.js +1 -1
- package/dist/esm/toast/index.js +1 -1
- package/esm/split-view/split-view-panel/split-view-panel.js +1 -1
- package/esm/tabs/tab/tab-adapter.d.ts +14 -38
- package/esm/tabs/tab/tab-adapter.js +65 -78
- package/esm/tabs/tab/tab-constants.d.ts +13 -13
- package/esm/tabs/tab/tab-constants.js +18 -10
- package/esm/tabs/tab/tab-foundation.d.ts +24 -23
- package/esm/tabs/tab/tab-foundation.js +68 -62
- package/esm/tabs/tab/tab-ripple.d.ts +17 -0
- package/esm/tabs/tab/tab-ripple.js +33 -0
- package/esm/tabs/tab/tab.d.ts +56 -19
- package/esm/tabs/tab/tab.js +77 -31
- package/esm/tabs/tab-bar/tab-bar-adapter.d.ts +49 -87
- package/esm/tabs/tab-bar/tab-bar-adapter.js +114 -188
- package/esm/tabs/tab-bar/tab-bar-constants.d.ts +15 -45
- package/esm/tabs/tab-bar/tab-bar-constants.js +22 -56
- package/esm/tabs/tab-bar/tab-bar-foundation.d.ts +56 -65
- package/esm/tabs/tab-bar/tab-bar-foundation.js +241 -302
- package/esm/tabs/tab-bar/tab-bar.d.ts +51 -36
- package/esm/tabs/tab-bar/tab-bar.js +84 -52
- package/package.json +1 -1
- package/styles/core/style-layer/tabs/tab/_core.scss +419 -0
- package/styles/core/style-layer/tabs/tab/_variables.scss +20 -0
- package/styles/core/style-layer/tabs/tab/index.scss +13 -0
- package/styles/core/style-layer/tabs/tab-bar/_core.scss +110 -0
- package/styles/core/style-layer/tabs/tab-bar/_variables.scss +9 -0
- package/styles/core/style-layer/tabs/tab-bar/index.scss +13 -0
- package/styles/tabs/tab/_mixins.scss +46 -128
- package/styles/tabs/tab/_variables.scss +26 -4
- package/styles/tabs/tab/tab.scss +50 -11
- package/styles/tabs/tab-bar/_mixins.scss +20 -60
- package/styles/tabs/tab-bar/_variables.scss +11 -0
- package/styles/tabs/tab-bar/tab-bar.scss +29 -2
- package/dist/esm/chunks/chunk.4QPMNWJ3.js +0 -129
- package/dist/esm/chunks/chunk.4QPMNWJ3.js.map +0 -7
- package/dist/esm/chunks/chunk.D3IAEEPM.js +0 -201
- package/dist/esm/chunks/chunk.D3IAEEPM.js.map +0 -7
- package/dist/esm/chunks/chunk.NV4U4DE6.js +0 -12
- /package/dist/esm/chunks/{chunk.Q6IP5GJ6.js.map → chunk.246JM2YT.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.DHTAH23Y.js.map → chunk.24L5GDD2.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.ZWTZJJ6H.js.map → chunk.2IQGDFQS.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.DAGXGSX7.js.map → chunk.2LRDPTHK.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.Q47M2LB5.js.map → chunk.2QFIMTVP.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.IVB6XTHQ.js.map → chunk.2TQONIPK.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.DXHKS7XO.js.map → chunk.2XFVFZ3P.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.3ICROIFD.js.map → chunk.2YAU7AXH.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.5B2CGITX.js.map → chunk.2YX7ASSX.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.QLNGQCJX.js.map → chunk.2ZTERGYF.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.Y2ANYRZH.js.map → chunk.4EB5NVCK.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.SACZLJPQ.js.map → chunk.4LVS2EYJ.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.E3VXLUEY.js.map → chunk.5IVB5L5Z.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.QO37K76P.js.map → chunk.6SBTLXLH.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.BTZF6QGA.js.map → chunk.7JQHQKXN.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.TWV4OTF7.js.map → chunk.A5MBSCSQ.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.4EF7UJDK.js.map → chunk.A5R7KUIP.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.NQH4ZCXJ.js.map → chunk.AGMPIMJV.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.PMY4KVCF.js.map → chunk.BKCEVPKW.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.I5MLIFN5.js.map → chunk.BSTIDYQJ.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.MZNL36GJ.js.map → chunk.CNQESSA3.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.6FISJTFJ.js.map → chunk.E6KWYFZG.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.H3SBIXK5.js.map → chunk.ECRL6O3V.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.SBDWCXK3.js.map → chunk.ER52NFXX.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.GSQF3ACL.js.map → chunk.EUE3OVC7.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.DGNS4JNN.js.map → chunk.FAANPQES.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.LMSXJOPL.js.map → chunk.GF2GUVYS.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.QKRB6AIQ.js.map → chunk.GHSAKRYH.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.JHTGKXXX.js.map → chunk.GJW4WS4I.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.IW37LUQJ.js.map → chunk.GUYPITGA.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.G75X57KY.js.map → chunk.HKJEGD6C.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.3ARIVYGG.js.map → chunk.IGK3VYZG.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.NV4U4DE6.js.map → chunk.JHXNEHWR.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.7MDHI4PT.js.map → chunk.JVW6JGV3.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.LQ4RD7WW.js.map → chunk.MXNLCQRB.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.GZZ6GFKT.js.map → chunk.OT6H5NHX.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.PG4HEEX2.js.map → chunk.OTVT3XM2.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.VSO5QDBV.js.map → chunk.P5QIB6OY.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.XUV63FEH.js.map → chunk.PPPTT3SM.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.GZRMHYID.js.map → chunk.QA3NU7EN.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.MVYTV6WX.js.map → chunk.QYKO543K.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.XI4RWFCG.js.map → chunk.RHYRMQS7.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.Q4SCW4FN.js.map → chunk.RUSHOL23.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.AD4CP4UK.js.map → chunk.SIJGKRYS.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.RTMDWDS4.js.map → chunk.SYZB7B4F.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.GYPPM2D2.js.map → chunk.SZIM4KFZ.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.UXQZFI55.js.map → chunk.THPU5KBV.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.K6VWRQWY.js.map → chunk.TXFYS6EU.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.ZLFH7VOM.js.map → chunk.V4RBOYNH.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.4B22UXEH.js.map → chunk.WFDIA7R6.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.DCCJTW7C.js.map → chunk.XMFQFFKR.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.JRV5FYMW.js.map → chunk.YUAU5IWT.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.YSFUL5AD.js.map → chunk.YZLASVCK.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.R7MQKCHR.js.map → chunk.Z5TWWM7I.js.map} +0 -0
|
@@ -3,221 +3,147 @@
|
|
|
3
3
|
* Copyright 2023 Tyler Technologies, Inc.
|
|
4
4
|
* License: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { getShadowElement, toggleAttribute } from '@tylertech/forge-core';
|
|
7
|
+
import { tylIconKeyboardArrowLeft, tylIconKeyboardArrowRight, tylIconKeyboardArrowUp, tylIconKeyboardArrowDown } from '@tylertech/tyler-icons/standard';
|
|
8
8
|
import { BaseAdapter } from '../../core/base/base-adapter';
|
|
9
|
-
import { TAB_BAR_CONSTANTS } from './tab-bar-constants';
|
|
10
9
|
import { TAB_CONSTANTS } from '../tab/tab-constants';
|
|
10
|
+
import { TAB_BAR_CONSTANTS } from './tab-bar-constants';
|
|
11
11
|
export class TabBarAdapter extends BaseAdapter {
|
|
12
12
|
constructor(component) {
|
|
13
13
|
super(component);
|
|
14
|
-
this.
|
|
15
|
-
this.
|
|
16
|
-
this.
|
|
17
|
-
this._tabScrollAreaElement = getShadowElement(this._component, TAB_BAR_CONSTANTS.selectors.TAB_SCROLLER_AREA);
|
|
18
|
-
this._tabScrollContentElement = getShadowElement(this._component, TAB_BAR_CONSTANTS.selectors.TAB_SCROLLER_CONTENT);
|
|
19
|
-
this._defaultSlotElement = getShadowElement(this._component, TAB_CONSTANTS.selectors.DEFAULT_SLOT);
|
|
20
|
-
this._prevButtonContainerElement = getShadowElement(this._component, TAB_BAR_CONSTANTS.selectors.PREV_BUTTON_CONTAINER);
|
|
21
|
-
this._prevButtonElement = getShadowElement(this._component, TAB_BAR_CONSTANTS.selectors.PREV_BUTTON);
|
|
22
|
-
this._nextButtonContainerElement = getShadowElement(this._component, TAB_BAR_CONSTANTS.selectors.NEXT_BUTTON_CONTAINER);
|
|
23
|
-
this._nextButtonElement = getShadowElement(this._component, TAB_BAR_CONSTANTS.selectors.NEXT_BUTTON);
|
|
24
|
-
}
|
|
25
|
-
initializeTabs(activeTabIndex, stretch) {
|
|
26
|
-
this._tabs = this._getTabs();
|
|
27
|
-
if (!this._tabs.length) {
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
this._tabs.forEach(tab => {
|
|
31
|
-
tab.active = false;
|
|
32
|
-
tab.stretch = stretch;
|
|
33
|
-
});
|
|
34
|
-
// Set the initial active tab
|
|
35
|
-
if (activeTabIndex >= 0 && activeTabIndex < this._tabs.length) {
|
|
36
|
-
this._tabs[activeTabIndex].active = true;
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
this.ensureFocusableTab();
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
initializeTabScroller() {
|
|
43
|
-
this._tabScroller = new MDCTabScroller(this._tabScrollElement);
|
|
44
|
-
}
|
|
45
|
-
initializeAccessibility() {
|
|
46
|
-
if (!this._component.hasAttribute('role')) {
|
|
47
|
-
this._component.setAttribute('role', 'tablist');
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
destroyTabScroller() {
|
|
51
|
-
if (this._tabScroller) {
|
|
52
|
-
this._tabScroller.destroy();
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
addTabChangeListener(listener) {
|
|
56
|
-
this._defaultSlotElement.addEventListener('slotchange', listener);
|
|
57
|
-
}
|
|
58
|
-
removeTabChangeListener(listener) {
|
|
59
|
-
this._defaultSlotElement.removeEventListener('slotchange', listener);
|
|
60
|
-
}
|
|
61
|
-
addScrollListener(listener) {
|
|
62
|
-
this._tabScrollAreaElement.addEventListener('scroll', listener);
|
|
63
|
-
}
|
|
64
|
-
getTabIndex(tab) {
|
|
65
|
-
return this._tabs.indexOf(tab);
|
|
14
|
+
this._defaultSlotElement = getShadowElement(this._component, TAB_BAR_CONSTANTS.selectors.DEFAULT_SLOT);
|
|
15
|
+
this._container = getShadowElement(this._component, TAB_BAR_CONSTANTS.selectors.CONTAINER);
|
|
16
|
+
this._scrollContainer = getShadowElement(this._component, TAB_BAR_CONSTANTS.selectors.SCROLL_CONTAINER);
|
|
66
17
|
}
|
|
67
|
-
|
|
68
|
-
|
|
18
|
+
initializeContainerSizeObserver(listener) {
|
|
19
|
+
this._resizeObserver = new ResizeObserver(() => listener());
|
|
20
|
+
this._resizeObserver.observe(this._component);
|
|
69
21
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
if (tab) {
|
|
73
|
-
tab.activate(previousTabBounds);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
deactivateTab(index) {
|
|
77
|
-
const tab = this._getTabByIndex(index);
|
|
78
|
-
if (tab) {
|
|
79
|
-
tab.deactivate();
|
|
80
|
-
}
|
|
22
|
+
initializeScrollObserver(listener) {
|
|
23
|
+
this._scrollContainer.addEventListener('scroll', listener, { passive: true });
|
|
81
24
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
.forEach(t => t.setTabIndex(-1));
|
|
25
|
+
destroyContainerSizeObserver() {
|
|
26
|
+
var _a;
|
|
27
|
+
(_a = this._resizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
|
|
28
|
+
this._resizeObserver = undefined;
|
|
87
29
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
if (tab) {
|
|
91
|
-
return tab.computeIndicatorBounds();
|
|
92
|
-
}
|
|
93
|
-
return undefined;
|
|
94
|
-
}
|
|
95
|
-
setUnderline(value) {
|
|
96
|
-
toggleClass(this._rootElement, value, TAB_BAR_CONSTANTS.classes.UNDERLINED);
|
|
30
|
+
destroyScrollObserver(listener) {
|
|
31
|
+
this._scrollContainer.removeEventListener('scroll', listener, { passive: true });
|
|
97
32
|
}
|
|
98
|
-
|
|
99
|
-
|
|
33
|
+
setVertical(value) {
|
|
34
|
+
toggleAttribute(this._scrollContainer, !!value, 'aria-orientation', 'vertical');
|
|
100
35
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
36
|
+
setScrollBackwardButtonListener(listener) {
|
|
37
|
+
var _a, _b;
|
|
38
|
+
(_b = (_a = this._backwardScrollButton) === null || _a === void 0 ? void 0 : _a.querySelector('button')) === null || _b === void 0 ? void 0 : _b.addEventListener('click', listener);
|
|
105
39
|
}
|
|
106
|
-
|
|
107
|
-
|
|
40
|
+
setScrollForwardButtonListener(listener) {
|
|
41
|
+
var _a, _b;
|
|
42
|
+
(_b = (_a = this._forwardScrollButton) === null || _a === void 0 ? void 0 : _a.querySelector('button')) === null || _b === void 0 ? void 0 : _b.addEventListener('click', listener);
|
|
108
43
|
}
|
|
109
|
-
|
|
110
|
-
|
|
44
|
+
addSlotListener(listener) {
|
|
45
|
+
this._defaultSlotElement.addEventListener('slotchange', listener);
|
|
111
46
|
}
|
|
112
|
-
|
|
113
|
-
return this.
|
|
47
|
+
getTabs() {
|
|
48
|
+
return Array.from(this._component.querySelectorAll(TAB_CONSTANTS.elementName));
|
|
114
49
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
return {
|
|
121
|
-
rootLeft: 0,
|
|
122
|
-
rootRight: 0,
|
|
123
|
-
contentLeft: 0,
|
|
124
|
-
contentRight: 0
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
incrementScroll(scrollXIncrement) {
|
|
128
|
-
if (this._tabScroller) {
|
|
129
|
-
this._tabScroller.incrementScroll(scrollXIncrement);
|
|
50
|
+
async tryScrollTabIntoView(tab) {
|
|
51
|
+
await new Promise(requestAnimationFrame);
|
|
52
|
+
// Due to the async nature of this method, make sure we still need to scroll this tab into view...
|
|
53
|
+
if (!tab.isConnected || (!tab.selected && !tab.matches(':focus'))) {
|
|
54
|
+
return;
|
|
130
55
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
const
|
|
138
|
-
const
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
return true;
|
|
146
|
-
}
|
|
147
|
-
return !!tab.shadowRoot.contains(activeElement);
|
|
56
|
+
const isVertical = this._component.vertical;
|
|
57
|
+
const scrollContainerOffset = isVertical ? this._scrollContainer.offsetTop : this._scrollContainer.offsetLeft;
|
|
58
|
+
const offset = isVertical ? tab.offsetTop : tab.offsetLeft;
|
|
59
|
+
const extent = isVertical ? tab.offsetHeight : tab.offsetWidth;
|
|
60
|
+
const scroll = isVertical ? this._scrollContainer.scrollTop : this._scrollContainer.scrollLeft;
|
|
61
|
+
const hostExtent = isVertical ? this._scrollContainer.offsetHeight : this._scrollContainer.offsetWidth;
|
|
62
|
+
const min = offset - (TAB_BAR_CONSTANTS.numbers.SCROLL_MARGIN + scrollContainerOffset);
|
|
63
|
+
const max = offset + extent - hostExtent + (TAB_BAR_CONSTANTS.numbers.SCROLL_MARGIN - scrollContainerOffset);
|
|
64
|
+
const to = Math.min(min, Math.max(max, scroll));
|
|
65
|
+
const behavior = tab.matches(':focus') ? 'smooth' : 'instant';
|
|
66
|
+
this._scrollContainer.scrollTo({
|
|
67
|
+
behavior,
|
|
68
|
+
[isVertical ? 'left' : 'top']: 0,
|
|
69
|
+
[isVertical ? 'top' : 'left']: to
|
|
148
70
|
});
|
|
149
71
|
}
|
|
150
|
-
|
|
151
|
-
const
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
const isFixed = value === 'fixed';
|
|
158
|
-
toggleClass(this._rootElement, isFixed, TAB_BAR_CONSTANTS.classes.FIXED);
|
|
159
|
-
this._tabs.forEach(tab => tab.stretch = isFixed);
|
|
160
|
-
}
|
|
161
|
-
setLayoutAlign(value) {
|
|
162
|
-
removeClass([
|
|
163
|
-
TAB_BAR_CONSTANTS.classes.ALIGN_CENTER,
|
|
164
|
-
TAB_BAR_CONSTANTS.classes.ALIGN_END
|
|
165
|
-
], this._rootElement);
|
|
166
|
-
switch (value) {
|
|
167
|
-
case 'center':
|
|
168
|
-
this._rootElement.classList.add(TAB_BAR_CONSTANTS.classes.ALIGN_CENTER);
|
|
169
|
-
break;
|
|
170
|
-
case 'end':
|
|
171
|
-
this._rootElement.classList.add(TAB_BAR_CONSTANTS.classes.ALIGN_END);
|
|
172
|
-
break;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
setPreviousButtonVisibility(value) {
|
|
176
|
-
if (value) {
|
|
177
|
-
this._prevButtonContainerElement.style.removeProperty('display');
|
|
178
|
-
}
|
|
179
|
-
else {
|
|
180
|
-
this._prevButtonContainerElement.style.display = 'none';
|
|
181
|
-
}
|
|
72
|
+
getScrollState() {
|
|
73
|
+
const { scrollHeight, scrollWidth, scrollLeft, scrollTop, clientHeight, clientWidth } = this._scrollContainer;
|
|
74
|
+
const scrollPosition = this._component.vertical ? clientHeight + scrollTop : clientWidth + scrollLeft;
|
|
75
|
+
const scrollSize = this._component.vertical ? scrollHeight : scrollWidth;
|
|
76
|
+
const isScrolledEnd = scrollPosition === scrollSize;
|
|
77
|
+
const isScrolledStart = (this._component.vertical ? scrollPosition - clientHeight : scrollPosition - clientWidth) === 0;
|
|
78
|
+
return { isScrolledStart, isScrolledEnd };
|
|
182
79
|
}
|
|
183
|
-
|
|
184
|
-
|
|
80
|
+
isScrollable() {
|
|
81
|
+
const { scrollHeight, scrollWidth, clientHeight, clientWidth } = this._scrollContainer;
|
|
82
|
+
return this._component.vertical ? scrollHeight > clientHeight : scrollWidth > clientWidth;
|
|
185
83
|
}
|
|
186
|
-
|
|
84
|
+
setScrollButtons(value) {
|
|
85
|
+
var _a, _b;
|
|
187
86
|
if (value) {
|
|
188
|
-
this.
|
|
87
|
+
this._backwardScrollButton = this._createScrollButton(this._component.vertical ? tylIconKeyboardArrowUp.name : tylIconKeyboardArrowLeft.name);
|
|
88
|
+
this._container.insertAdjacentElement('afterbegin', this._backwardScrollButton);
|
|
89
|
+
this._forwardScrollButton = this._createScrollButton(this._component.vertical ? tylIconKeyboardArrowDown.name : tylIconKeyboardArrowRight.name);
|
|
90
|
+
this._container.insertAdjacentElement('beforeend', this._forwardScrollButton);
|
|
189
91
|
}
|
|
190
92
|
else {
|
|
191
|
-
this.
|
|
93
|
+
(_a = this._backwardScrollButton) === null || _a === void 0 ? void 0 : _a.remove();
|
|
94
|
+
this._backwardScrollButton = undefined;
|
|
95
|
+
(_b = this._forwardScrollButton) === null || _b === void 0 ? void 0 : _b.remove();
|
|
96
|
+
this._forwardScrollButton = undefined;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
syncScrollButtons({ backwardEnabled, forwardEnabled }) {
|
|
100
|
+
var _a, _b;
|
|
101
|
+
const backButton = (_a = this._backwardScrollButton) === null || _a === void 0 ? void 0 : _a.querySelector('button');
|
|
102
|
+
const forwardButton = (_b = this._forwardScrollButton) === null || _b === void 0 ? void 0 : _b.querySelector('button');
|
|
103
|
+
if (backButton) {
|
|
104
|
+
const disabled = !backwardEnabled;
|
|
105
|
+
if (disabled && backButton.matches(':focus')) {
|
|
106
|
+
forwardButton === null || forwardButton === void 0 ? void 0 : forwardButton.focus();
|
|
107
|
+
}
|
|
108
|
+
backButton.disabled = disabled;
|
|
192
109
|
}
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
addScrollPreviousListener(type, listener) {
|
|
198
|
-
this._prevButtonElement.addEventListener(type, listener);
|
|
199
|
-
}
|
|
200
|
-
addScrollNextListener(type, listener) {
|
|
201
|
-
this._nextButtonElement.addEventListener(type, listener);
|
|
202
|
-
}
|
|
203
|
-
isTabDisabled(index) {
|
|
204
|
-
const tab = this._getTabByIndex(index);
|
|
205
|
-
return tab ? tab.disabled : true;
|
|
206
|
-
}
|
|
207
|
-
ensureFocusableTab() {
|
|
208
|
-
const tabs = this._getTabs();
|
|
209
|
-
const hasActiveTab = tabs.some(tab => tab.active);
|
|
210
|
-
if (!hasActiveTab && tabs.length) {
|
|
211
|
-
const firstTab = tabs[0];
|
|
212
|
-
if (isFunction(firstTab.setTabIndex)) {
|
|
213
|
-
tabs[0].setTabIndex(0);
|
|
110
|
+
if (forwardButton) {
|
|
111
|
+
const disabled = !forwardEnabled;
|
|
112
|
+
if (disabled && forwardButton.matches(':focus')) {
|
|
113
|
+
backButton === null || backButton === void 0 ? void 0 : backButton.focus();
|
|
214
114
|
}
|
|
115
|
+
forwardButton.disabled = disabled;
|
|
215
116
|
}
|
|
216
117
|
}
|
|
217
|
-
|
|
218
|
-
|
|
118
|
+
scroll(which) {
|
|
119
|
+
const amount = this._component.vertical ? this._scrollContainer.offsetHeight : this._scrollContainer.offsetWidth;
|
|
120
|
+
this._scrollContainer.scrollBy({
|
|
121
|
+
behavior: 'smooth',
|
|
122
|
+
[this._component.vertical ? 'top' : 'left']: amount * (which === 'forward' ? 1 : -1)
|
|
123
|
+
});
|
|
219
124
|
}
|
|
220
|
-
|
|
221
|
-
|
|
125
|
+
updateScrollButtonIcons(vertical) {
|
|
126
|
+
var _a, _b;
|
|
127
|
+
const backButtonIcon = (_a = this._backwardScrollButton) === null || _a === void 0 ? void 0 : _a.querySelector('forge-icon');
|
|
128
|
+
if (backButtonIcon) {
|
|
129
|
+
backButtonIcon.name = vertical ? tylIconKeyboardArrowUp.name : tylIconKeyboardArrowLeft.name;
|
|
130
|
+
}
|
|
131
|
+
const nextButtonIcon = (_b = this._forwardScrollButton) === null || _b === void 0 ? void 0 : _b.querySelector('forge-icon');
|
|
132
|
+
if (nextButtonIcon) {
|
|
133
|
+
nextButtonIcon.name = vertical ? tylIconKeyboardArrowDown.name : tylIconKeyboardArrowRight.name;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
_createScrollButton(iconName) {
|
|
137
|
+
const iconButton = document.createElement('forge-icon-button');
|
|
138
|
+
iconButton.classList.add(TAB_BAR_CONSTANTS.classes.SCROLL_BUTTON);
|
|
139
|
+
const button = document.createElement('button');
|
|
140
|
+
button.type = 'button';
|
|
141
|
+
button.tabIndex = -1;
|
|
142
|
+
button.setAttribute('aria-hidden', 'true');
|
|
143
|
+
iconButton.appendChild(button);
|
|
144
|
+
const icon = document.createElement('forge-icon');
|
|
145
|
+
icon.name = iconName;
|
|
146
|
+
button.appendChild(icon);
|
|
147
|
+
return iconButton;
|
|
222
148
|
}
|
|
223
149
|
}
|
|
@@ -5,60 +5,30 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export declare const TAB_BAR_CONSTANTS: {
|
|
7
7
|
attributes: {
|
|
8
|
+
DISABLED: string;
|
|
8
9
|
ACTIVE_TAB: string;
|
|
9
|
-
|
|
10
|
-
LAYOUT_ALIGN: string;
|
|
11
|
-
UNDERLINE: string;
|
|
12
|
-
AUTO_ACTIVATE: string;
|
|
10
|
+
VERTICAL: string;
|
|
13
11
|
STACKED: string;
|
|
12
|
+
CLUSTERED: string;
|
|
13
|
+
SECONDARY: string;
|
|
14
|
+
INVERTED: string;
|
|
15
|
+
AUTO_ACTIVATE: string;
|
|
14
16
|
SCROLL_BUTTONS: string;
|
|
15
|
-
FORCE_SCROLL_BUTTONS: string;
|
|
16
17
|
};
|
|
17
18
|
elementName: "forge-tab-bar";
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
ALIGN_CENTER: string;
|
|
21
|
-
ALIGN_END: string;
|
|
22
|
-
FIXED: string;
|
|
23
|
-
STACKED: string;
|
|
19
|
+
events: {
|
|
20
|
+
CHANGE: string;
|
|
24
21
|
};
|
|
25
22
|
selectors: {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
TAB_SCROLLER_CONTENT: string;
|
|
30
|
-
PREV_BUTTON_CONTAINER: string;
|
|
31
|
-
PREV_BUTTON: string;
|
|
32
|
-
NEXT_BUTTON_CONTAINER: string;
|
|
33
|
-
NEXT_BUTTON: string;
|
|
23
|
+
CONTAINER: string;
|
|
24
|
+
SCROLL_CONTAINER: string;
|
|
25
|
+
DEFAULT_SLOT: string;
|
|
34
26
|
};
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
};
|
|
38
|
-
strings: {
|
|
39
|
-
ARROW_LEFT_KEY: string;
|
|
40
|
-
ARROW_RIGHT_KEY: string;
|
|
41
|
-
END_KEY: string;
|
|
42
|
-
ENTER_KEY: string;
|
|
43
|
-
HOME_KEY: string;
|
|
44
|
-
SPACE_KEY: string;
|
|
27
|
+
classes: {
|
|
28
|
+
SCROLL_BUTTON: string;
|
|
45
29
|
};
|
|
46
30
|
numbers: {
|
|
47
|
-
|
|
48
|
-
ARROW_RIGHT_KEYCODE: number;
|
|
49
|
-
END_KEYCODE: number;
|
|
50
|
-
ENTER_KEYCODE: number;
|
|
51
|
-
EXTRA_SCROLL_AMOUNT: number;
|
|
52
|
-
HOME_KEYCODE: number;
|
|
53
|
-
SPACE_KEYCODE: number;
|
|
31
|
+
SCROLL_MARGIN: number;
|
|
54
32
|
};
|
|
55
33
|
};
|
|
56
|
-
export
|
|
57
|
-
index: number;
|
|
58
|
-
}
|
|
59
|
-
export declare type TabBarLayoutMode = 'fixed' | 'clustered';
|
|
60
|
-
export declare type TabBarLayoutAlign = 'start' | 'center' | 'end';
|
|
61
|
-
export declare const ACCEPTABLE_KEYS: string[];
|
|
62
|
-
export declare const KEYCODE_MAP: {
|
|
63
|
-
[x: number]: string;
|
|
64
|
-
};
|
|
34
|
+
export declare const NAVIGATION_KEYS: Map<string, Set<string>>;
|
|
@@ -6,74 +6,40 @@
|
|
|
6
6
|
import { COMPONENT_NAME_PREFIX } from '../../constants';
|
|
7
7
|
const elementName = `${COMPONENT_NAME_PREFIX}tab-bar`;
|
|
8
8
|
const attributes = {
|
|
9
|
+
DISABLED: 'disabled',
|
|
9
10
|
ACTIVE_TAB: 'active-tab',
|
|
10
|
-
|
|
11
|
-
LAYOUT_ALIGN: 'layout-align',
|
|
12
|
-
UNDERLINE: 'underline',
|
|
13
|
-
AUTO_ACTIVATE: 'auto-activate',
|
|
11
|
+
VERTICAL: 'vertical',
|
|
14
12
|
STACKED: 'stacked',
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
ALIGN_CENTER: 'forge-tab-bar--align-center',
|
|
21
|
-
ALIGN_END: 'forge-tab-bar--align-end',
|
|
22
|
-
FIXED: 'forge-tab-bar--fixed',
|
|
23
|
-
STACKED: 'forge-tab-bar--stacked'
|
|
13
|
+
CLUSTERED: 'clustered',
|
|
14
|
+
SECONDARY: 'secondary',
|
|
15
|
+
INVERTED: 'inverted',
|
|
16
|
+
AUTO_ACTIVATE: 'auto-activate',
|
|
17
|
+
SCROLL_BUTTONS: 'scroll-buttons'
|
|
24
18
|
};
|
|
25
19
|
const selectors = {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
TAB_SCROLLER_CONTENT: '.mdc-tab-scroller__scroll-content',
|
|
30
|
-
PREV_BUTTON_CONTAINER: '.forge-tab-bar__scroll-prev-container',
|
|
31
|
-
PREV_BUTTON: '#scroll-prev-btn',
|
|
32
|
-
NEXT_BUTTON_CONTAINER: '.forge-tab-bar__scroll-next-container',
|
|
33
|
-
NEXT_BUTTON: '#scroll-next-btn'
|
|
20
|
+
CONTAINER: '.container',
|
|
21
|
+
SCROLL_CONTAINER: '.scroll-container',
|
|
22
|
+
DEFAULT_SLOT: 'slot:not([name])'
|
|
34
23
|
};
|
|
35
|
-
const
|
|
36
|
-
|
|
24
|
+
const classes = {
|
|
25
|
+
SCROLL_BUTTON: 'scroll-button'
|
|
37
26
|
};
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
ARROW_RIGHT_KEY: 'ArrowRight',
|
|
41
|
-
END_KEY: 'End',
|
|
42
|
-
ENTER_KEY: 'Enter',
|
|
43
|
-
HOME_KEY: 'Home',
|
|
44
|
-
SPACE_KEY: 'Space'
|
|
27
|
+
const events = {
|
|
28
|
+
CHANGE: `${elementName}-change`
|
|
45
29
|
};
|
|
46
30
|
const numbers = {
|
|
47
|
-
|
|
48
|
-
ARROW_RIGHT_KEYCODE: 39,
|
|
49
|
-
END_KEYCODE: 35,
|
|
50
|
-
ENTER_KEYCODE: 13,
|
|
51
|
-
EXTRA_SCROLL_AMOUNT: 20,
|
|
52
|
-
HOME_KEYCODE: 36,
|
|
53
|
-
SPACE_KEYCODE: 32
|
|
31
|
+
SCROLL_MARGIN: 48
|
|
54
32
|
};
|
|
55
33
|
export const TAB_BAR_CONSTANTS = {
|
|
56
34
|
attributes,
|
|
57
35
|
elementName,
|
|
58
|
-
classes,
|
|
59
|
-
selectors,
|
|
60
36
|
events,
|
|
61
|
-
|
|
37
|
+
selectors,
|
|
38
|
+
classes,
|
|
62
39
|
numbers
|
|
63
40
|
};
|
|
64
|
-
export const
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
strings.ENTER_KEY,
|
|
70
|
-
strings.SPACE_KEY
|
|
71
|
-
];
|
|
72
|
-
export const KEYCODE_MAP = {
|
|
73
|
-
[numbers.ARROW_LEFT_KEYCODE]: strings.ARROW_LEFT_KEY,
|
|
74
|
-
[numbers.ARROW_RIGHT_KEYCODE]: strings.ARROW_RIGHT_KEY,
|
|
75
|
-
[numbers.END_KEYCODE]: strings.END_KEY,
|
|
76
|
-
[numbers.HOME_KEYCODE]: strings.HOME_KEY,
|
|
77
|
-
[numbers.ENTER_KEYCODE]: strings.ENTER_KEY,
|
|
78
|
-
[numbers.SPACE_KEYCODE]: strings.SPACE_KEY
|
|
79
|
-
};
|
|
41
|
+
export const NAVIGATION_KEYS = new Map([
|
|
42
|
+
['default', new Set(['Home', 'End'])],
|
|
43
|
+
['horizontal', new Set(['ArrowLeft', 'ArrowRight'])],
|
|
44
|
+
['vertical', new Set(['ArrowUp', 'ArrowDown'])]
|
|
45
|
+
]);
|
|
@@ -5,92 +5,83 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { ICustomElementFoundation } from '@tylertech/forge-core';
|
|
7
7
|
import { ITabBarAdapter } from './tab-bar-adapter';
|
|
8
|
-
import { TabBarLayoutMode, TabBarLayoutAlign } from './tab-bar-constants';
|
|
9
8
|
export interface ITabBarFoundation extends ICustomElementFoundation {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
autoActivate: boolean;
|
|
9
|
+
disabled: boolean;
|
|
10
|
+
activeTab: number | null | undefined;
|
|
11
|
+
vertical: boolean;
|
|
12
|
+
clustered: boolean;
|
|
15
13
|
stacked: boolean;
|
|
14
|
+
secondary: boolean;
|
|
15
|
+
inverted: boolean;
|
|
16
|
+
autoActivate: boolean;
|
|
16
17
|
scrollButtons: boolean;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
scrollIntoView(index: number): void;
|
|
18
|
+
initialize(): void;
|
|
19
|
+
destroy(): void;
|
|
20
20
|
}
|
|
21
21
|
export declare class TabBarFoundation implements ITabBarFoundation {
|
|
22
22
|
private _adapter;
|
|
23
23
|
private _isInitialized;
|
|
24
24
|
private _activeTab;
|
|
25
|
-
private
|
|
26
|
-
private
|
|
27
|
-
private
|
|
28
|
-
private _autoActivate;
|
|
25
|
+
private _disabled;
|
|
26
|
+
private _vertical;
|
|
27
|
+
private _clustered;
|
|
29
28
|
private _stacked;
|
|
29
|
+
private _secondary;
|
|
30
|
+
private _inverted;
|
|
31
|
+
private _autoActivate;
|
|
30
32
|
private _scrollButtons;
|
|
31
|
-
private
|
|
33
|
+
private _tabs;
|
|
34
|
+
private _scrollButtonsVisible;
|
|
35
|
+
private _tabScrollAnimationFrame;
|
|
32
36
|
private _tabsChangedListener;
|
|
33
|
-
private
|
|
37
|
+
private _tabSelectedListener;
|
|
34
38
|
private _keydownListener;
|
|
35
|
-
private
|
|
36
|
-
private _scrollPrevMousedownListener;
|
|
37
|
-
private _scrollNextClickListener;
|
|
38
|
-
private _scrollNextMousedownListener;
|
|
39
|
+
private _resizeListener;
|
|
39
40
|
private _scrollListener;
|
|
41
|
+
private _scrollBackwardButtonListener;
|
|
42
|
+
private _scrollForwardButtonListener;
|
|
40
43
|
constructor(_adapter: ITabBarAdapter);
|
|
41
44
|
initialize(): void;
|
|
42
|
-
|
|
45
|
+
destroy(): void;
|
|
43
46
|
private _onTabsChanged;
|
|
44
|
-
private
|
|
47
|
+
private _onTabSelected;
|
|
45
48
|
private _onKeydown;
|
|
46
|
-
private
|
|
47
|
-
private _onScrollNext;
|
|
48
|
-
private _onScroll;
|
|
49
|
-
private _syncScrollButtons;
|
|
50
|
-
/**
|
|
51
|
-
* Determines the index of the adjacent tab closest to either edge of the Tab Bar
|
|
52
|
-
* @param index The index of the tab
|
|
53
|
-
* @param tabDimensions The dimensions of the tab
|
|
54
|
-
* @param scrollPosition The current scroll position
|
|
55
|
-
* @param barWidth The width of the tab bar
|
|
56
|
-
*/
|
|
57
|
-
private _findAdjacentTabIndexClosestToEdge;
|
|
49
|
+
private _selectTab;
|
|
58
50
|
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
* @param scrollPosition The current scroll position
|
|
63
|
-
* @param barWidth The width of the tab-bar
|
|
51
|
+
* Ensures that all tabs have the correct state based on the tab bar state.
|
|
52
|
+
*
|
|
53
|
+
* This is called whenever a child tab is added to the DOM.
|
|
64
54
|
*/
|
|
65
|
-
private
|
|
66
|
-
/**
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
private
|
|
72
|
-
|
|
73
|
-
private
|
|
74
|
-
|
|
75
|
-
private
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
get
|
|
80
|
-
set
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
set underline(value: boolean);
|
|
55
|
+
private _syncTabState;
|
|
56
|
+
/** Called when the container size changes, but only if scroll buttons are enabled. */
|
|
57
|
+
private _onResize;
|
|
58
|
+
/** Called when the scroll container scrolls, but only if scroll buttons are enabled. */
|
|
59
|
+
private _onScroll;
|
|
60
|
+
/** Handles clicking the scroll backward button. */
|
|
61
|
+
private _onScrollBackward;
|
|
62
|
+
/** Handles clicking the scroll forward button. */
|
|
63
|
+
private _onScrollForward;
|
|
64
|
+
/** Determines whether scroll buttons should be displayed based on the size of the container. */
|
|
65
|
+
private _detectScrollableStatus;
|
|
66
|
+
/** Updates the enabled/disabled state of the scroll buttons. */
|
|
67
|
+
private _updateScrollState;
|
|
68
|
+
private _tryScrollActiveTabIntoView;
|
|
69
|
+
get disabled(): boolean;
|
|
70
|
+
set disabled(value: boolean);
|
|
71
|
+
get activeTab(): number | null | undefined;
|
|
72
|
+
set activeTab(value: number | null | undefined);
|
|
73
|
+
get vertical(): boolean;
|
|
74
|
+
set vertical(value: boolean);
|
|
75
|
+
get clustered(): boolean;
|
|
76
|
+
set clustered(value: boolean);
|
|
88
77
|
get stacked(): boolean;
|
|
89
78
|
set stacked(value: boolean);
|
|
90
|
-
get
|
|
91
|
-
set
|
|
92
|
-
get
|
|
93
|
-
set
|
|
79
|
+
get secondary(): boolean;
|
|
80
|
+
set secondary(value: boolean);
|
|
81
|
+
get inverted(): boolean;
|
|
82
|
+
set inverted(value: boolean);
|
|
94
83
|
get autoActivate(): boolean;
|
|
95
84
|
set autoActivate(value: boolean);
|
|
85
|
+
get scrollButtons(): boolean;
|
|
86
|
+
set scrollButtons(value: boolean);
|
|
96
87
|
}
|