@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.
Files changed (212) hide show
  1. package/custom-elements.json +620 -1108
  2. package/dist/esm/accordion/index.js +1 -1
  3. package/dist/esm/app-bar/help-button/index.js +1 -1
  4. package/dist/esm/app-bar/index.js +1 -1
  5. package/dist/esm/app-bar/menu-button/index.js +1 -1
  6. package/dist/esm/app-bar/notification-button/index.js +1 -1
  7. package/dist/esm/app-bar/profile-button/index.js +1 -1
  8. package/dist/esm/app-bar/search/index.js +1 -1
  9. package/dist/esm/autocomplete/index.js +1 -1
  10. package/dist/esm/banner/index.js +1 -1
  11. package/dist/esm/bottom-sheet/index.js +1 -1
  12. package/dist/esm/busy-indicator/index.js +1 -1
  13. package/dist/esm/button/index.js +1 -1
  14. package/dist/esm/button-toggle/button-toggle/index.js +1 -1
  15. package/dist/esm/button-toggle/button-toggle-group/index.js +1 -1
  16. package/dist/esm/button-toggle/index.js +1 -1
  17. package/dist/esm/calendar/index.js +1 -1
  18. package/dist/esm/checkbox/index.js +1 -1
  19. package/dist/esm/chip-field/index.js +1 -1
  20. package/dist/esm/chips/chip/index.js +1 -1
  21. package/dist/esm/chips/chip-set/index.js +1 -1
  22. package/dist/esm/chips/index.js +1 -1
  23. package/dist/esm/chunks/{chunk.Q6IP5GJ6.js → chunk.246JM2YT.js} +2 -2
  24. package/dist/esm/chunks/{chunk.DHTAH23Y.js → chunk.24L5GDD2.js} +2 -2
  25. package/dist/esm/chunks/{chunk.ZWTZJJ6H.js → chunk.2IQGDFQS.js} +2 -2
  26. package/dist/esm/chunks/{chunk.DAGXGSX7.js → chunk.2LRDPTHK.js} +2 -2
  27. package/dist/esm/chunks/{chunk.Q47M2LB5.js → chunk.2QFIMTVP.js} +2 -2
  28. package/dist/esm/chunks/{chunk.IVB6XTHQ.js → chunk.2TQONIPK.js} +2 -2
  29. package/dist/esm/chunks/{chunk.DXHKS7XO.js → chunk.2XFVFZ3P.js} +2 -2
  30. package/dist/esm/chunks/{chunk.3ICROIFD.js → chunk.2YAU7AXH.js} +2 -2
  31. package/dist/esm/chunks/{chunk.5B2CGITX.js → chunk.2YX7ASSX.js} +2 -2
  32. package/dist/esm/chunks/{chunk.QLNGQCJX.js → chunk.2ZTERGYF.js} +2 -2
  33. package/dist/esm/chunks/{chunk.Y2ANYRZH.js → chunk.4EB5NVCK.js} +2 -2
  34. package/dist/esm/chunks/{chunk.SACZLJPQ.js → chunk.4LVS2EYJ.js} +2 -2
  35. package/dist/esm/chunks/{chunk.E3VXLUEY.js → chunk.5IVB5L5Z.js} +2 -2
  36. package/dist/esm/chunks/{chunk.QO37K76P.js → chunk.6SBTLXLH.js} +2 -2
  37. package/dist/esm/chunks/{chunk.BTZF6QGA.js → chunk.7JQHQKXN.js} +2 -2
  38. package/dist/esm/chunks/{chunk.TWV4OTF7.js → chunk.A5MBSCSQ.js} +2 -2
  39. package/dist/esm/chunks/{chunk.4EF7UJDK.js → chunk.A5R7KUIP.js} +2 -2
  40. package/dist/esm/chunks/{chunk.NQH4ZCXJ.js → chunk.AGMPIMJV.js} +2 -2
  41. package/dist/esm/chunks/{chunk.PMY4KVCF.js → chunk.BKCEVPKW.js} +2 -2
  42. package/dist/esm/chunks/{chunk.I5MLIFN5.js → chunk.BSTIDYQJ.js} +2 -2
  43. package/dist/esm/chunks/{chunk.MZNL36GJ.js → chunk.CNQESSA3.js} +2 -2
  44. package/dist/esm/chunks/{chunk.6FISJTFJ.js → chunk.E6KWYFZG.js} +2 -2
  45. package/dist/esm/chunks/{chunk.H3SBIXK5.js → chunk.ECRL6O3V.js} +2 -2
  46. package/dist/esm/chunks/{chunk.SBDWCXK3.js → chunk.ER52NFXX.js} +2 -2
  47. package/dist/esm/chunks/{chunk.GSQF3ACL.js → chunk.EUE3OVC7.js} +2 -2
  48. package/dist/esm/chunks/{chunk.DGNS4JNN.js → chunk.FAANPQES.js} +2 -2
  49. package/dist/esm/chunks/{chunk.MZLPUI6R.js → chunk.FYWPZFLJ.js} +2 -2
  50. package/dist/esm/chunks/{chunk.MZLPUI6R.js.map → chunk.FYWPZFLJ.js.map} +2 -2
  51. package/dist/esm/chunks/{chunk.LMSXJOPL.js → chunk.GF2GUVYS.js} +2 -2
  52. package/dist/esm/chunks/{chunk.QKRB6AIQ.js → chunk.GHSAKRYH.js} +2 -2
  53. package/dist/esm/chunks/{chunk.JHTGKXXX.js → chunk.GJW4WS4I.js} +2 -2
  54. package/dist/esm/chunks/{chunk.IW37LUQJ.js → chunk.GUYPITGA.js} +2 -2
  55. package/dist/esm/chunks/chunk.GWIVOPRO.js +7 -0
  56. package/dist/esm/chunks/chunk.GWIVOPRO.js.map +7 -0
  57. package/dist/esm/chunks/{chunk.G75X57KY.js → chunk.HKJEGD6C.js} +2 -2
  58. package/dist/esm/chunks/{chunk.3ARIVYGG.js → chunk.IGK3VYZG.js} +2 -2
  59. package/dist/esm/chunks/chunk.JHXNEHWR.js +12 -0
  60. package/dist/esm/chunks/{chunk.7MDHI4PT.js → chunk.JVW6JGV3.js} +2 -2
  61. package/dist/esm/chunks/{chunk.LQ4RD7WW.js → chunk.MXNLCQRB.js} +2 -2
  62. package/dist/esm/chunks/chunk.OHNPVHPF.js +7 -0
  63. package/dist/esm/chunks/chunk.OHNPVHPF.js.map +7 -0
  64. package/dist/esm/chunks/{chunk.GZZ6GFKT.js → chunk.OT6H5NHX.js} +2 -2
  65. package/dist/esm/chunks/{chunk.PG4HEEX2.js → chunk.OTVT3XM2.js} +2 -2
  66. package/dist/esm/chunks/{chunk.VSO5QDBV.js → chunk.P5QIB6OY.js} +2 -2
  67. package/dist/esm/chunks/{chunk.XUV63FEH.js → chunk.PPPTT3SM.js} +2 -2
  68. package/dist/esm/chunks/{chunk.GZRMHYID.js → chunk.QA3NU7EN.js} +2 -2
  69. package/dist/esm/chunks/{chunk.MVYTV6WX.js → chunk.QYKO543K.js} +2 -2
  70. package/dist/esm/chunks/{chunk.XI4RWFCG.js → chunk.RHYRMQS7.js} +2 -2
  71. package/dist/esm/chunks/{chunk.Q4SCW4FN.js → chunk.RUSHOL23.js} +2 -2
  72. package/dist/esm/chunks/{chunk.AD4CP4UK.js → chunk.SIJGKRYS.js} +2 -2
  73. package/dist/esm/chunks/{chunk.BIJJCDHE.js → chunk.STGRPD2L.js} +2 -2
  74. package/dist/esm/chunks/{chunk.BIJJCDHE.js.map → chunk.STGRPD2L.js.map} +1 -1
  75. package/dist/esm/chunks/{chunk.RTMDWDS4.js → chunk.SYZB7B4F.js} +2 -2
  76. package/dist/esm/chunks/{chunk.GYPPM2D2.js → chunk.SZIM4KFZ.js} +2 -2
  77. package/dist/esm/chunks/{chunk.UXQZFI55.js → chunk.THPU5KBV.js} +2 -2
  78. package/dist/esm/chunks/{chunk.K6VWRQWY.js → chunk.TXFYS6EU.js} +2 -2
  79. package/dist/esm/chunks/{chunk.ZLFH7VOM.js → chunk.V4RBOYNH.js} +2 -2
  80. package/dist/esm/chunks/{chunk.4B22UXEH.js → chunk.WFDIA7R6.js} +2 -2
  81. package/dist/esm/chunks/{chunk.DCCJTW7C.js → chunk.XMFQFFKR.js} +2 -2
  82. package/dist/esm/chunks/{chunk.JRV5FYMW.js → chunk.YUAU5IWT.js} +2 -2
  83. package/dist/esm/chunks/{chunk.YSFUL5AD.js → chunk.YZLASVCK.js} +2 -2
  84. package/dist/esm/chunks/{chunk.R7MQKCHR.js → chunk.Z5TWWM7I.js} +2 -2
  85. package/dist/esm/color-picker/index.js +1 -1
  86. package/dist/esm/date-picker/index.js +1 -1
  87. package/dist/esm/date-range-picker/index.js +1 -1
  88. package/dist/esm/expansion-panel/index.js +1 -1
  89. package/dist/esm/file-picker/index.js +1 -1
  90. package/dist/esm/floating-action-button/index.js +1 -1
  91. package/dist/esm/icon-button/index.js +1 -1
  92. package/dist/esm/index.js +1 -1
  93. package/dist/esm/list/index.js +1 -1
  94. package/dist/esm/list/list/index.js +1 -1
  95. package/dist/esm/list/list-item/index.js +1 -1
  96. package/dist/esm/list-dropdown/index.js +1 -1
  97. package/dist/esm/menu/index.js +1 -1
  98. package/dist/esm/open-icon/index.js +1 -1
  99. package/dist/esm/paginator/index.js +1 -1
  100. package/dist/esm/profile-card/index.js +1 -1
  101. package/dist/esm/quantity-field/index.js +1 -1
  102. package/dist/esm/radio/index.js +1 -1
  103. package/dist/esm/ripple/index.js +1 -1
  104. package/dist/esm/select/core/index.js +1 -1
  105. package/dist/esm/select/index.js +1 -1
  106. package/dist/esm/select/select/index.js +1 -1
  107. package/dist/esm/select/select-dropdown/index.js +1 -1
  108. package/dist/esm/slider/index.js +1 -1
  109. package/dist/esm/split-view/index.js +1 -1
  110. package/dist/esm/split-view/split-view/index.js +1 -1
  111. package/dist/esm/split-view/split-view-panel/index.js +1 -1
  112. package/dist/esm/stepper/index.js +1 -1
  113. package/dist/esm/stepper/step/index.js +1 -1
  114. package/dist/esm/stepper/stepper/index.js +1 -1
  115. package/dist/esm/switch/index.js +1 -1
  116. package/dist/esm/table/index.js +1 -1
  117. package/dist/esm/tabs/index.js +1 -1
  118. package/dist/esm/tabs/tab/index.js +1 -1
  119. package/dist/esm/tabs/tab-bar/index.js +1 -1
  120. package/dist/esm/time-picker/index.js +1 -1
  121. package/dist/esm/toast/index.js +1 -1
  122. package/esm/split-view/split-view-panel/split-view-panel.js +1 -1
  123. package/esm/tabs/tab/tab-adapter.d.ts +14 -38
  124. package/esm/tabs/tab/tab-adapter.js +65 -78
  125. package/esm/tabs/tab/tab-constants.d.ts +13 -13
  126. package/esm/tabs/tab/tab-constants.js +18 -10
  127. package/esm/tabs/tab/tab-foundation.d.ts +24 -23
  128. package/esm/tabs/tab/tab-foundation.js +68 -62
  129. package/esm/tabs/tab/tab-ripple.d.ts +17 -0
  130. package/esm/tabs/tab/tab-ripple.js +33 -0
  131. package/esm/tabs/tab/tab.d.ts +56 -19
  132. package/esm/tabs/tab/tab.js +77 -31
  133. package/esm/tabs/tab-bar/tab-bar-adapter.d.ts +49 -87
  134. package/esm/tabs/tab-bar/tab-bar-adapter.js +114 -188
  135. package/esm/tabs/tab-bar/tab-bar-constants.d.ts +15 -45
  136. package/esm/tabs/tab-bar/tab-bar-constants.js +22 -56
  137. package/esm/tabs/tab-bar/tab-bar-foundation.d.ts +56 -65
  138. package/esm/tabs/tab-bar/tab-bar-foundation.js +241 -302
  139. package/esm/tabs/tab-bar/tab-bar.d.ts +51 -36
  140. package/esm/tabs/tab-bar/tab-bar.js +84 -52
  141. package/package.json +1 -1
  142. package/styles/core/style-layer/tabs/tab/_core.scss +419 -0
  143. package/styles/core/style-layer/tabs/tab/_variables.scss +20 -0
  144. package/styles/core/style-layer/tabs/tab/index.scss +13 -0
  145. package/styles/core/style-layer/tabs/tab-bar/_core.scss +110 -0
  146. package/styles/core/style-layer/tabs/tab-bar/_variables.scss +9 -0
  147. package/styles/core/style-layer/tabs/tab-bar/index.scss +13 -0
  148. package/styles/tabs/tab/_mixins.scss +46 -128
  149. package/styles/tabs/tab/_variables.scss +26 -4
  150. package/styles/tabs/tab/tab.scss +50 -11
  151. package/styles/tabs/tab-bar/_mixins.scss +20 -60
  152. package/styles/tabs/tab-bar/_variables.scss +11 -0
  153. package/styles/tabs/tab-bar/tab-bar.scss +29 -2
  154. package/dist/esm/chunks/chunk.4QPMNWJ3.js +0 -129
  155. package/dist/esm/chunks/chunk.4QPMNWJ3.js.map +0 -7
  156. package/dist/esm/chunks/chunk.D3IAEEPM.js +0 -201
  157. package/dist/esm/chunks/chunk.D3IAEEPM.js.map +0 -7
  158. package/dist/esm/chunks/chunk.NV4U4DE6.js +0 -12
  159. /package/dist/esm/chunks/{chunk.Q6IP5GJ6.js.map → chunk.246JM2YT.js.map} +0 -0
  160. /package/dist/esm/chunks/{chunk.DHTAH23Y.js.map → chunk.24L5GDD2.js.map} +0 -0
  161. /package/dist/esm/chunks/{chunk.ZWTZJJ6H.js.map → chunk.2IQGDFQS.js.map} +0 -0
  162. /package/dist/esm/chunks/{chunk.DAGXGSX7.js.map → chunk.2LRDPTHK.js.map} +0 -0
  163. /package/dist/esm/chunks/{chunk.Q47M2LB5.js.map → chunk.2QFIMTVP.js.map} +0 -0
  164. /package/dist/esm/chunks/{chunk.IVB6XTHQ.js.map → chunk.2TQONIPK.js.map} +0 -0
  165. /package/dist/esm/chunks/{chunk.DXHKS7XO.js.map → chunk.2XFVFZ3P.js.map} +0 -0
  166. /package/dist/esm/chunks/{chunk.3ICROIFD.js.map → chunk.2YAU7AXH.js.map} +0 -0
  167. /package/dist/esm/chunks/{chunk.5B2CGITX.js.map → chunk.2YX7ASSX.js.map} +0 -0
  168. /package/dist/esm/chunks/{chunk.QLNGQCJX.js.map → chunk.2ZTERGYF.js.map} +0 -0
  169. /package/dist/esm/chunks/{chunk.Y2ANYRZH.js.map → chunk.4EB5NVCK.js.map} +0 -0
  170. /package/dist/esm/chunks/{chunk.SACZLJPQ.js.map → chunk.4LVS2EYJ.js.map} +0 -0
  171. /package/dist/esm/chunks/{chunk.E3VXLUEY.js.map → chunk.5IVB5L5Z.js.map} +0 -0
  172. /package/dist/esm/chunks/{chunk.QO37K76P.js.map → chunk.6SBTLXLH.js.map} +0 -0
  173. /package/dist/esm/chunks/{chunk.BTZF6QGA.js.map → chunk.7JQHQKXN.js.map} +0 -0
  174. /package/dist/esm/chunks/{chunk.TWV4OTF7.js.map → chunk.A5MBSCSQ.js.map} +0 -0
  175. /package/dist/esm/chunks/{chunk.4EF7UJDK.js.map → chunk.A5R7KUIP.js.map} +0 -0
  176. /package/dist/esm/chunks/{chunk.NQH4ZCXJ.js.map → chunk.AGMPIMJV.js.map} +0 -0
  177. /package/dist/esm/chunks/{chunk.PMY4KVCF.js.map → chunk.BKCEVPKW.js.map} +0 -0
  178. /package/dist/esm/chunks/{chunk.I5MLIFN5.js.map → chunk.BSTIDYQJ.js.map} +0 -0
  179. /package/dist/esm/chunks/{chunk.MZNL36GJ.js.map → chunk.CNQESSA3.js.map} +0 -0
  180. /package/dist/esm/chunks/{chunk.6FISJTFJ.js.map → chunk.E6KWYFZG.js.map} +0 -0
  181. /package/dist/esm/chunks/{chunk.H3SBIXK5.js.map → chunk.ECRL6O3V.js.map} +0 -0
  182. /package/dist/esm/chunks/{chunk.SBDWCXK3.js.map → chunk.ER52NFXX.js.map} +0 -0
  183. /package/dist/esm/chunks/{chunk.GSQF3ACL.js.map → chunk.EUE3OVC7.js.map} +0 -0
  184. /package/dist/esm/chunks/{chunk.DGNS4JNN.js.map → chunk.FAANPQES.js.map} +0 -0
  185. /package/dist/esm/chunks/{chunk.LMSXJOPL.js.map → chunk.GF2GUVYS.js.map} +0 -0
  186. /package/dist/esm/chunks/{chunk.QKRB6AIQ.js.map → chunk.GHSAKRYH.js.map} +0 -0
  187. /package/dist/esm/chunks/{chunk.JHTGKXXX.js.map → chunk.GJW4WS4I.js.map} +0 -0
  188. /package/dist/esm/chunks/{chunk.IW37LUQJ.js.map → chunk.GUYPITGA.js.map} +0 -0
  189. /package/dist/esm/chunks/{chunk.G75X57KY.js.map → chunk.HKJEGD6C.js.map} +0 -0
  190. /package/dist/esm/chunks/{chunk.3ARIVYGG.js.map → chunk.IGK3VYZG.js.map} +0 -0
  191. /package/dist/esm/chunks/{chunk.NV4U4DE6.js.map → chunk.JHXNEHWR.js.map} +0 -0
  192. /package/dist/esm/chunks/{chunk.7MDHI4PT.js.map → chunk.JVW6JGV3.js.map} +0 -0
  193. /package/dist/esm/chunks/{chunk.LQ4RD7WW.js.map → chunk.MXNLCQRB.js.map} +0 -0
  194. /package/dist/esm/chunks/{chunk.GZZ6GFKT.js.map → chunk.OT6H5NHX.js.map} +0 -0
  195. /package/dist/esm/chunks/{chunk.PG4HEEX2.js.map → chunk.OTVT3XM2.js.map} +0 -0
  196. /package/dist/esm/chunks/{chunk.VSO5QDBV.js.map → chunk.P5QIB6OY.js.map} +0 -0
  197. /package/dist/esm/chunks/{chunk.XUV63FEH.js.map → chunk.PPPTT3SM.js.map} +0 -0
  198. /package/dist/esm/chunks/{chunk.GZRMHYID.js.map → chunk.QA3NU7EN.js.map} +0 -0
  199. /package/dist/esm/chunks/{chunk.MVYTV6WX.js.map → chunk.QYKO543K.js.map} +0 -0
  200. /package/dist/esm/chunks/{chunk.XI4RWFCG.js.map → chunk.RHYRMQS7.js.map} +0 -0
  201. /package/dist/esm/chunks/{chunk.Q4SCW4FN.js.map → chunk.RUSHOL23.js.map} +0 -0
  202. /package/dist/esm/chunks/{chunk.AD4CP4UK.js.map → chunk.SIJGKRYS.js.map} +0 -0
  203. /package/dist/esm/chunks/{chunk.RTMDWDS4.js.map → chunk.SYZB7B4F.js.map} +0 -0
  204. /package/dist/esm/chunks/{chunk.GYPPM2D2.js.map → chunk.SZIM4KFZ.js.map} +0 -0
  205. /package/dist/esm/chunks/{chunk.UXQZFI55.js.map → chunk.THPU5KBV.js.map} +0 -0
  206. /package/dist/esm/chunks/{chunk.K6VWRQWY.js.map → chunk.TXFYS6EU.js.map} +0 -0
  207. /package/dist/esm/chunks/{chunk.ZLFH7VOM.js.map → chunk.V4RBOYNH.js.map} +0 -0
  208. /package/dist/esm/chunks/{chunk.4B22UXEH.js.map → chunk.WFDIA7R6.js.map} +0 -0
  209. /package/dist/esm/chunks/{chunk.DCCJTW7C.js.map → chunk.XMFQFFKR.js.map} +0 -0
  210. /package/dist/esm/chunks/{chunk.JRV5FYMW.js.map → chunk.YUAU5IWT.js.map} +0 -0
  211. /package/dist/esm/chunks/{chunk.YSFUL5AD.js.map → chunk.YZLASVCK.js.map} +0 -0
  212. /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 { MDCTabScroller } from '@material/tab-scroller';
7
- import { getShadowElement, removeClass, isFunction, getActiveElement, toggleClass } from '@tylertech/forge-core';
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._tabs = [];
15
- this._rootElement = getShadowElement(this._component, TAB_BAR_CONSTANTS.selectors.ROOT);
16
- this._tabScrollElement = getShadowElement(this._component, TAB_BAR_CONSTANTS.selectors.TAB_SCROLLER);
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
- getTabCount() {
68
- return this._tabs.length;
18
+ initializeContainerSizeObserver(listener) {
19
+ this._resizeObserver = new ResizeObserver(() => listener());
20
+ this._resizeObserver.observe(this._component);
69
21
  }
70
- activateTab(index, previousTabBounds) {
71
- const tab = this._getTabByIndex(index);
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
- syncTabIndex(index) {
83
- const tabs = this._getTabs();
84
- const activeTab = tabs[index];
85
- tabs.filter(t => t !== activeTab)
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
- getTabBounds(index) {
89
- const tab = this._getTabByIndex(index);
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
- setStacked(value) {
99
- toggleClass(this._rootElement, value, TAB_BAR_CONSTANTS.classes.STACKED);
33
+ setVertical(value) {
34
+ toggleAttribute(this._scrollContainer, !!value, 'aria-orientation', 'vertical');
100
35
  }
101
- scrollTo(scrollX) {
102
- if (this._tabScroller) {
103
- this._tabScroller.scrollTo(scrollX);
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
- getScrollContentWidth() {
107
- return this._tabScroller ? this._tabScroller.getScrollContentWidth() : 0;
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
- getScrollPosition() {
110
- return this._tabScroller ? this._tabScroller.getScrollPosition() : 0;
44
+ addSlotListener(listener) {
45
+ this._defaultSlotElement.addEventListener('slotchange', listener);
111
46
  }
112
- getOffsetWidth() {
113
- return this._tabScrollElement.offsetWidth;
47
+ getTabs() {
48
+ return Array.from(this._component.querySelectorAll(TAB_CONSTANTS.elementName));
114
49
  }
115
- getTabDimensionsAtIndex(index) {
116
- const tab = this._getTabByIndex(index);
117
- if (tab) {
118
- return tab.computeDimensions();
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
- isScrolled() {
133
- const position = this._tabScrollAreaElement.scrollLeft;
134
- return position > 0;
135
- }
136
- isScrolledEnd() {
137
- const position = Math.round(this._tabScrollAreaElement.scrollLeft);
138
- const scrollWidth = Math.round(this._tabScrollContentElement.scrollWidth - this._tabScrollElement.offsetWidth);
139
- return position >= scrollWidth;
140
- }
141
- getFocusedTabIndex() {
142
- const activeElement = getActiveElement();
143
- return this._tabs.findIndex(tab => {
144
- if (tab === activeElement) {
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
- focusTabAtIndex(index) {
151
- const tab = this._getTabByIndex(index);
152
- if (tab) {
153
- return tab.focus();
154
- }
155
- }
156
- setLayoutMode(value) {
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
- setPreviousButtonEnabled(value) {
184
- this._prevButtonElement.disabled = !value;
80
+ isScrollable() {
81
+ const { scrollHeight, scrollWidth, clientHeight, clientWidth } = this._scrollContainer;
82
+ return this._component.vertical ? scrollHeight > clientHeight : scrollWidth > clientWidth;
185
83
  }
186
- setNextButtonVisibility(value) {
84
+ setScrollButtons(value) {
85
+ var _a, _b;
187
86
  if (value) {
188
- this._nextButtonContainerElement.style.removeProperty('display');
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._nextButtonContainerElement.style.display = 'none';
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
- setNextButtonEnabled(value) {
195
- this._nextButtonElement.disabled = !value;
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
- _getTabs() {
218
- return Array.from(this._component.querySelectorAll(TAB_CONSTANTS.elementName));
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
- _getTabByIndex(index) {
221
- return this._tabs[index];
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
- LAYOUT_MODE: string;
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
- classes: {
19
- UNDERLINED: string;
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
- ROOT: string;
27
- TAB_SCROLLER: string;
28
- TAB_SCROLLER_AREA: string;
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
- events: {
36
- ACTIVATE: string;
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
- ARROW_LEFT_KEYCODE: number;
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 interface ITabBarActivateEventData {
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
- LAYOUT_MODE: 'layout-mode',
11
- LAYOUT_ALIGN: 'layout-align',
12
- UNDERLINE: 'underline',
13
- AUTO_ACTIVATE: 'auto-activate',
11
+ VERTICAL: 'vertical',
14
12
  STACKED: 'stacked',
15
- SCROLL_BUTTONS: 'scroll-buttons',
16
- FORCE_SCROLL_BUTTONS: 'force-scroll-buttons'
17
- };
18
- const classes = {
19
- UNDERLINED: 'forge-tab-bar--underlined',
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
- ROOT: '.forge-tab-bar',
27
- TAB_SCROLLER: '.mdc-tab-scroller',
28
- TAB_SCROLLER_AREA: '.mdc-tab-scroller__scroll-area',
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 events = {
36
- ACTIVATE: `${elementName}-activate`
24
+ const classes = {
25
+ SCROLL_BUTTON: 'scroll-button'
37
26
  };
38
- const strings = {
39
- ARROW_LEFT_KEY: 'ArrowLeft',
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
- ARROW_LEFT_KEYCODE: 37,
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
- strings,
37
+ selectors,
38
+ classes,
62
39
  numbers
63
40
  };
64
- export const ACCEPTABLE_KEYS = [
65
- strings.ARROW_LEFT_KEY,
66
- strings.ARROW_RIGHT_KEY,
67
- strings.END_KEY,
68
- strings.HOME_KEY,
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
- activeTab: number;
11
- layoutMode: TabBarLayoutMode;
12
- layoutAlign: TabBarLayoutAlign;
13
- underline: boolean;
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
- forceScrollButtons: boolean;
18
- activateTab(index: number): void;
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 _layoutMode;
26
- private _layoutAlign;
27
- private _underline;
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 _forceScrollButtons;
33
+ private _tabs;
34
+ private _scrollButtonsVisible;
35
+ private _tabScrollAnimationFrame;
32
36
  private _tabsChangedListener;
33
- private _tabInteractedListener;
37
+ private _tabSelectedListener;
34
38
  private _keydownListener;
35
- private _scrollPrevClickListener;
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
- disconnect(): void;
45
+ destroy(): void;
43
46
  private _onTabsChanged;
44
- private _onTabInteracted;
47
+ private _onTabSelected;
45
48
  private _onKeydown;
46
- private _onScrollPrevious;
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
- * Calculates the scroll increment that will make the tab at the given index visible
60
- * @param index The index of the tab
61
- * @param nextIndex The index of the next tab
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 _calculateScrollIncrement;
66
- /**
67
- * Private method for determining the index of the destination tab based on what key was pressed
68
- * @param origin The original index from which to determine the destination
69
- * @param key The name of the key
70
- */
71
- private _determineTargetFromKey;
72
- private _isScrollable;
73
- private _getKeyFromEvent;
74
- private _isActivationKey;
75
- private _indexIsInRange;
76
- activateTab(index: number): void;
77
- scrollIntoView(index: number): void;
78
- /** Gets and sets the active tab index. */
79
- get activeTab(): number;
80
- set activeTab(value: number);
81
- private get _isFixed();
82
- get layoutMode(): TabBarLayoutMode;
83
- set layoutMode(value: TabBarLayoutMode);
84
- get layoutAlign(): TabBarLayoutAlign;
85
- set layoutAlign(value: TabBarLayoutAlign);
86
- get underline(): boolean;
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 scrollButtons(): boolean;
91
- set scrollButtons(value: boolean);
92
- get forceScrollButtons(): boolean;
93
- set forceScrollButtons(value: boolean);
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
  }