lightning-base-components 1.18.1-alpha → 1.18.2-alpha

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 (215) hide show
  1. package/metadata/raptor.json +5 -0
  2. package/package.json +43 -1
  3. package/scopedImports/@salesforce-internal-core.appVersion.js +1 -1
  4. package/src/lightning/accordion/accordion.css +12 -0
  5. package/src/lightning/accordion/accordion.html +3 -1
  6. package/src/lightning/accordion/accordion.js +4 -2
  7. package/src/lightning/accordion/accordion.slds.css +671 -0
  8. package/src/lightning/accordionSection/accordion-section.slds.css +647 -0
  9. package/src/lightning/accordionSection/accordionSection.css +14 -0
  10. package/src/lightning/accordionSection/accordionSection.html +23 -19
  11. package/src/lightning/accordionSection/accordionSection.js +29 -2
  12. package/src/lightning/ariaObserver/__docs__/ariaObserver.md +21 -9
  13. package/src/lightning/ariaObserver/ariaObserver.js +185 -154
  14. package/src/lightning/ariaObserver/polyfill.js +639 -0
  15. package/src/lightning/avatar/avatar.css +2 -0
  16. package/src/lightning/avatar/avatar.html +2 -0
  17. package/src/lightning/avatar/avatar.js +18 -15
  18. package/src/lightning/avatar/avatar.slds.css +272 -0
  19. package/src/lightning/baseCombobox/base-combobox.slds.css +1585 -0
  20. package/src/lightning/baseCombobox/baseCombobox.css +11 -1
  21. package/src/lightning/baseCombobox/baseCombobox.html +154 -146
  22. package/src/lightning/baseCombobox/baseCombobox.js +82 -46
  23. package/src/lightning/baseCombobox/spinner.slds.css +438 -0
  24. package/src/lightning/baseComboboxItem/baseComboboxItem.js +4 -2
  25. package/src/lightning/baseComboboxItem/inline.css +2 -0
  26. package/src/lightning/breadcrumb/breadcrumb.css +2 -2
  27. package/src/lightning/breadcrumb/breadcrumb.js +4 -2
  28. package/src/lightning/breadcrumb/breadcrumb.slds.css +2 -7
  29. package/src/lightning/breadcrumbs/breadcrumbs.css +2 -2
  30. package/src/lightning/breadcrumbs/breadcrumbs.js +3 -2
  31. package/src/lightning/breadcrumbs/breadcrumbs.slds.css +7 -1
  32. package/src/lightning/button/__examples__/inverse/inverse.css +8 -0
  33. package/src/lightning/button/__examples__/inverse/inverse.html +3 -2
  34. package/src/lightning/button/button.css +2 -0
  35. package/src/lightning/button/button.html +4 -2
  36. package/src/lightning/button/button.js +21 -0
  37. package/src/lightning/button/button.slds.css +527 -0
  38. package/src/lightning/buttonGroup/buttonGroup.css +2 -2
  39. package/src/lightning/buttonGroup/buttonGroup.js +3 -2
  40. package/src/lightning/buttonIcon/button-icon.slds.css +215 -453
  41. package/src/lightning/buttonIcon/buttonIcon.css +2 -2
  42. package/src/lightning/buttonIcon/buttonIcon.js +4 -0
  43. package/src/lightning/buttonIconStateful/button-icon-stateful.slds.css +215 -453
  44. package/src/lightning/buttonIconStateful/buttonIconStateful.css +2 -2
  45. package/src/lightning/buttonMenu/{dropdown.slds.css → button-menu.slds.css} +853 -217
  46. package/src/lightning/buttonMenu/buttonMenu.css +2 -2
  47. package/src/lightning/buttonMenu/buttonMenu.html +2 -2
  48. package/src/lightning/buttonMenu/buttonMenu.js +10 -14
  49. package/src/lightning/buttonStateful/button-stateful.slds.css +225 -457
  50. package/src/lightning/buttonStateful/buttonStateful.css +2 -2
  51. package/src/lightning/buttonStateful/buttonStateful.js +3 -2
  52. package/src/lightning/calendar/__examples__/basic/basic.html +7 -0
  53. package/src/lightning/calendar/__examples__/basic/basic.js +3 -0
  54. package/src/lightning/calendar/calendar.css +3 -0
  55. package/src/lightning/calendar/calendar.html +12 -9
  56. package/src/lightning/calendar/calendar.js +15 -1
  57. package/src/lightning/calendar/calendar.slds.css +2048 -0
  58. package/src/lightning/card/card.css +2 -2
  59. package/src/lightning/card/card.js +3 -2
  60. package/src/lightning/card/card.slds.css +141 -88
  61. package/src/lightning/colorPickerCustom/colorPickerCustom.css +2 -2
  62. package/src/lightning/colorPickerCustom/colorPickerCustom.js +3 -2
  63. package/src/lightning/colorPickerPanel/color-picker-panel.slds.css +11 -38
  64. package/src/lightning/colorPickerPanel/colorPickerPanel.css +3 -2
  65. package/src/lightning/colorPickerPanel/colorPickerPanel.js +4 -2
  66. package/src/lightning/colorPickerPanel/popover.slds.css +121 -0
  67. package/src/lightning/combobox/combobox.css +4 -0
  68. package/src/lightning/combobox/combobox.html +31 -29
  69. package/src/lightning/combobox/combobox.js +21 -4
  70. package/src/lightning/combobox/combobox.slds.css +13 -0
  71. package/src/lightning/combobox/form-element.slds.css +281 -0
  72. package/src/lightning/configProvider/defaultConfig.js +2 -1
  73. package/src/lightning/datepicker/datepicker.css +3 -0
  74. package/src/lightning/datepicker/datepicker.html +7 -4
  75. package/src/lightning/datepicker/datepicker.js +73 -19
  76. package/src/lightning/datepicker/form-element.slds.css +281 -0
  77. package/src/lightning/datepicker/input-text.slds.css +398 -0
  78. package/src/lightning/datetimepicker/datetimepicker.css +3 -0
  79. package/src/lightning/datetimepicker/datetimepicker.html +9 -3
  80. package/src/lightning/datetimepicker/datetimepicker.js +39 -35
  81. package/src/lightning/datetimepicker/form-element.slds.css +281 -0
  82. package/src/lightning/datetimepicker/input-text.slds.css +398 -0
  83. package/src/lightning/dualListbox/dualListbox.css +2 -2
  84. package/src/lightning/dualListbox/dualListbox.html +3 -3
  85. package/src/lightning/dualListbox/dualListbox.js +31 -6
  86. package/src/lightning/dualListbox/form-element.slds.css +83 -34
  87. package/src/lightning/dualListbox/keyboard.js +20 -1
  88. package/src/lightning/dynamicIcon/dynamicIcon.js +3 -2
  89. package/src/lightning/dynamicIcon/ellie.css +1 -1
  90. package/src/lightning/dynamicIcon/eq.css +1 -1
  91. package/src/lightning/dynamicIcon/score.css +1 -1
  92. package/src/lightning/dynamicIcon/strength.css +1 -1
  93. package/src/lightning/dynamicIcon/trend.css +1 -1
  94. package/src/lightning/dynamicIcon/waffle.css +1 -1
  95. package/src/lightning/formattedRichText/linkify.js +2 -2
  96. package/src/lightning/helptext/form-element.slds.css +83 -34
  97. package/src/lightning/helptext/help-text.slds.css +215 -453
  98. package/src/lightning/helptext/helptext.css +2 -2
  99. package/src/lightning/helptext/helptext.js +3 -2
  100. package/src/lightning/i18nCldrOptions/README.md +5 -0
  101. package/src/lightning/i18nService/README.md +5 -0
  102. package/src/lightning/icon/icon.css +2 -2
  103. package/src/lightning/icon/icon.js +16 -2
  104. package/src/lightning/icon/icon.slds.css +29 -17
  105. package/src/lightning/icon/iconColors.js +1 -0
  106. package/src/lightning/input/__examples__/text/text.html +0 -1
  107. package/src/lightning/input/form-element.slds.css +281 -0
  108. package/src/lightning/input/input-checkbox.slds.css +3 -12
  109. package/src/lightning/input/input-text.slds.css +239 -128
  110. package/src/lightning/input/input.css +2 -1
  111. package/src/lightning/input/input.html +8 -8
  112. package/src/lightning/input/input.js +107 -73
  113. package/src/lightning/internationalizationLibrary/README.md +24 -0
  114. package/src/lightning/internationalizationLibrary/utils.js +4 -1
  115. package/src/lightning/layout/__docs__/layout.md +1 -1
  116. package/src/lightning/layout/__examples__/simple/simple.css +1 -1
  117. package/src/lightning/layout/layout.css +5 -1
  118. package/src/lightning/layout/layout.js +4 -2
  119. package/src/lightning/layoutItem/__examples__/alignmentBump/alignmentBump.css +1 -1
  120. package/src/lightning/layoutItem/__examples__/sizePerDevice/sizePerDevice.css +0 -1
  121. package/src/lightning/layoutItem/layoutItem.css +5 -0
  122. package/src/lightning/layoutItem/layoutItem.js +4 -2
  123. package/src/lightning/menuDivider/menu-divider.slds.css +15 -0
  124. package/src/lightning/menuDivider/menuDivider.css +3 -0
  125. package/src/lightning/menuDivider/menuDivider.html +1 -1
  126. package/src/lightning/menuDivider/menuDivider.js +4 -2
  127. package/src/lightning/menuItem/menu-item.slds.css +140 -0
  128. package/src/lightning/menuItem/menuItem.css +3 -0
  129. package/src/lightning/menuItem/menuItem.html +43 -41
  130. package/src/lightning/menuItem/menuItem.js +4 -4
  131. package/src/lightning/menuSubheader/menu-subheader.slds.css +22 -0
  132. package/src/lightning/menuSubheader/menuSubheader.css +3 -0
  133. package/src/lightning/menuSubheader/menuSubheader.html +3 -1
  134. package/src/lightning/menuSubheader/menuSubheader.js +4 -6
  135. package/src/lightning/modal/__docs__/modal.md +3 -1
  136. package/src/lightning/modal/__modalUtils__/modalContainerTestConstants.js +267 -0
  137. package/src/lightning/modal/__modalUtils__/modalContainerTestMethods.js +1165 -0
  138. package/src/lightning/modal/__modalUtils__/modalContainerTestMockData.js +131 -0
  139. package/src/lightning/modal/modal.js +1 -1
  140. package/src/lightning/pill/avatar.slds.css +272 -0
  141. package/src/lightning/pill/link.css +3 -0
  142. package/src/lightning/pill/link.html +1 -1
  143. package/src/lightning/pill/pill.js +29 -9
  144. package/src/lightning/pill/pill.slds.css +168 -0
  145. package/src/lightning/pill/plain.css +3 -0
  146. package/src/lightning/pill/plain.html +1 -1
  147. package/src/lightning/pill/plainLink.css +3 -0
  148. package/src/lightning/pill/plainLink.html +1 -1
  149. package/src/lightning/pillContainer/barePillContainer.css +3 -0
  150. package/src/lightning/pillContainer/barePillContainer.html +1 -2
  151. package/src/lightning/pillContainer/listbox.slds.css +267 -0
  152. package/src/lightning/pillContainer/pill-container.slds.css +22 -0
  153. package/src/lightning/pillContainer/pill.slds.css +168 -0
  154. package/src/lightning/pillContainer/pillContainer.js +7 -3
  155. package/src/lightning/pillContainer/standardPillContainer.css +4 -0
  156. package/src/lightning/pillContainer/standardPillContainer.html +2 -2
  157. package/src/lightning/popup/popover.slds.css +119 -119
  158. package/src/lightning/popup/popup.css +1 -2
  159. package/src/lightning/popup/popup.js +3 -2
  160. package/src/lightning/positionLibrary/elementProxy.js +7 -2
  161. package/src/lightning/positionLibrary/util.js +8 -0
  162. package/src/lightning/primitiveBubble/primitiveBubble.css +2 -2
  163. package/src/lightning/primitiveBubble/primitiveBubble.js +4 -2
  164. package/src/lightning/primitiveButton/primitiveButton.js +5 -4
  165. package/src/lightning/primitiveCellFactory/cellWithStandardLayout.html +29 -21
  166. package/src/lightning/primitiveCellFactory/primitiveCellFactory.js +4 -0
  167. package/src/lightning/primitiveColorpickerButton/color-picker-button.slds.css +31 -19
  168. package/src/lightning/primitiveColorpickerButton/primitiveColorpickerButton.css +2 -2
  169. package/src/lightning/primitiveColorpickerButton/primitiveColorpickerButton.js +5 -3
  170. package/src/lightning/primitiveIcon/icon.slds.css +209 -0
  171. package/src/lightning/primitiveIcon/primitiveIcon.css +2 -1
  172. package/src/lightning/primitiveIcon/primitiveIcon.html +1 -1
  173. package/src/lightning/primitiveIcon/primitiveIcon.js +18 -11
  174. package/src/lightning/progressStep/progressStep.js +10 -13
  175. package/src/lightning/radioGroup/radioGroup.css +2 -1
  176. package/src/lightning/radioGroup/radioGroup.js +4 -2
  177. package/src/lightning/select/form-element.slds.css +83 -34
  178. package/src/lightning/select/select.css +2 -2
  179. package/src/lightning/select/select.js +4 -2
  180. package/src/lightning/select/select.slds.css +86 -34
  181. package/src/lightning/sldsCommon/sldsCommon.css +135 -75
  182. package/src/lightning/spinner/spinner.css +2 -2
  183. package/src/lightning/spinner/spinner.js +4 -2
  184. package/src/lightning/tabBar/tab-bar.slds.css +334 -0
  185. package/src/lightning/tabBar/tabBar.css +2 -0
  186. package/src/lightning/tabBar/tabBar.html +4 -3
  187. package/src/lightning/tabBar/tabBar.js +30 -3
  188. package/src/lightning/tabset/tabset.html +5 -4
  189. package/src/lightning/tabset/tabset.js +29 -11
  190. package/src/lightning/timepicker/form-element.slds.css +281 -0
  191. package/src/lightning/timepicker/timepicker.css +3 -0
  192. package/src/lightning/timepicker/timepicker.html +5 -1
  193. package/src/lightning/timepicker/timepicker.js +18 -15
  194. package/src/lightning/timepicker/timepicker.slds.css +18 -0
  195. package/src/lightning/tooltipLibrary/tooltipLibrary.js +21 -19
  196. package/src/lightning/utilsPrivate/browser.js +5 -3
  197. package/src/lightning/utilsPrivate/os.js +6 -4
  198. package/src/lightning/utilsPrivate/ssr.js +4 -0
  199. package/src/lightning/utilsPrivate/utilsPrivate.js +2 -0
  200. package/src/lightning/verticalNavigation/verticalNavigation.css +2 -1
  201. package/src/lightning/verticalNavigation/verticalNavigation.js +3 -2
  202. package/src/lightning/verticalNavigationSection/verticalNavigationSection.css +2 -1
  203. package/src/lightning/verticalNavigationSection/verticalNavigationSection.js +3 -2
  204. package/src/lightning/accordion/__perf__DISABLED/accordion-perf-utils.js +0 -76
  205. package/src/lightning/accordion/__perf__DISABLED/accordion10Multiple25SectionEach.perf.js +0 -57
  206. package/src/lightning/accordion/__perf__DISABLED/accordion10Simple25SectionEach.perf.js +0 -37
  207. package/src/lightning/accordion/__perf__DISABLED/accordionMultiple50Section.perf.js +0 -45
  208. package/src/lightning/accordion/__perf__DISABLED/accordionSimple50Section.perf.js +0 -35
  209. package/src/lightning/accordion/__perf__DISABLED/container/container.html +0 -15
  210. package/src/lightning/accordion/__perf__DISABLED/container/container.js +0 -7
  211. package/src/lightning/positionLibrary/__component__/positionLibraryBounding.spec.js +0 -319
  212. package/src/lightning/positionLibrary/__component__/x/bounding/bounding.css +0 -16
  213. package/src/lightning/positionLibrary/__component__/x/bounding/bounding.html +0 -36
  214. package/src/lightning/positionLibrary/__component__/x/bounding/bounding.js +0 -122
  215. /package/src/lightning/{baseCombobox → baseComboboxItem}/listbox.slds.css +0 -0
@@ -0,0 +1,334 @@
1
+
2
+ /* Copyright (c) 2015-present, salesforce.com, inc. All rights reserved
3
+ Licensed under BSD 3-Clause - see LICENSE.txt or git.io/sfdc-license */
4
+
5
+ @supports (--styling-hooks: '') {
6
+ /* SHARED TAB BAR STYLING */
7
+
8
+ /* Host reassignments to composed tabs for parity with SLDS blueprint
9
+ https://www.lightningdesignsystem.com/components/tabs/#Styling-Hooks-Overview */
10
+ :host([data-render-mode="shadow"]) [part~='tab-bar'] {
11
+ /* stylelint-disable sds-stylelint-plugin/styling-hooks-pattern */
12
+ --_slds-c-tabbar-standard-font-lineheight: 2.5rem;
13
+ --_slds-c-tabbar-standard-sizing-height: 2.5rem;
14
+ --_slds-c-tabbar-scoped-font-lineheight: 2.5rem;
15
+ --_slds-c-tabbar-scoped-sizing-height: 2.5rem;
16
+ --_slds-c-tabbar-vertical-sizing-width: 12rem;
17
+ /* stylelint-enable sds-stylelint-plugin/styling-hooks-pattern */
18
+
19
+ /* Color */
20
+ --slds-c-tabs-item-color-border-active: var(--slds-c-tabbar-standard-color-border-active);
21
+ --slds-c-tabs-item-color-border-hover: var(--slds-c-tabbar-standard-color-border-hover);
22
+ --slds-c-tabs-item-text-color: var(--slds-c-tabbar-standard-text-color);
23
+ --slds-c-tabs-item-text-color-active: var(--slds-c-tabbar-standard-text-color-active);
24
+ --slds-c-tabs-list-color-border: var(--slds-c-tabbar-standard-color-border);
25
+
26
+ /* Sizing */
27
+ /* stylelint-disable sds-stylelint-plugin/styling-hooks-pattern */
28
+ --slds-c-tabs-item-sizing-height: var(--slds-c-tabbar-standard-sizing-height, var(--_slds-c-tabbar-standard-sizing-height));
29
+ /* stylelint-enable sds-stylelint-plugin/styling-hooks-pattern */
30
+ --slds-c-tabs-list-sizing-border: var(--slds-c-tabbar-standard-sizing-border);
31
+
32
+ /* Spacing */
33
+ --slds-c-tabs-item-spacing-block-end: var(--slds-c-tabbar-standard-spacing-block-end);
34
+ --slds-c-tabs-item-spacing-block-start: var(--slds-c-tabbar-standard-spacing-block-start);
35
+ --slds-c-tabs-item-spacing-inline-end: var(--slds-c-tabbar-standard-spacing-inline-end);
36
+ --slds-c-tabs-item-spacing-inline-start: var(--slds-c-tabbar-standard-spacing-inline-start);
37
+
38
+ /* Text */
39
+ /* stylelint-disable sds-stylelint-plugin/styling-hooks-pattern */
40
+ --slds-c-tabs-item-line-height: var(--slds-c-tabbar-standard-font-lineheight, var(--_slds-c-tabbar-standard-font-lineheight));
41
+ /* stylelint-enable sds-stylelint-plugin/styling-hooks-pattern */
42
+ }
43
+
44
+ :host([data-render-mode="shadow"][variant='standard']) [part~='tab-bar'],:host([data-render-mode="shadow"][variant='scoped']) [part~='tab-bar'] {
45
+ display: flex;
46
+ align-items: flex-start;
47
+ }
48
+
49
+ /* SHARED TAB HEADER STYLING */
50
+
51
+ :host([data-render-mode="shadow"][variant='standard']) [part~='tab-item'],:host([data-render-mode="shadow"][variant='scoped']) [part~='tab-item'] {
52
+ position: relative;
53
+ }
54
+
55
+ /* SHARED TAB STYLING */
56
+
57
+ :host([data-render-mode="shadow"]) [role='tab'] {
58
+ text-decoration: none;
59
+ cursor: pointer;
60
+ color: currentColor;
61
+ }
62
+
63
+ :host([data-render-mode="shadow"]) .slds-is-active [role='tab']:focus {
64
+ text-decoration: underline;
65
+ }
66
+
67
+ :host([data-render-mode="shadow"][variant='standard']) .slds-is-active [role='tab'],:host([data-render-mode="shadow"][variant='scoped']) .slds-is-active [role='tab'] {
68
+ font-weight: var(--sds-g-font-weight-7, 700);
69
+ }
70
+
71
+ /* Overflow styles for horizontal tab variants */
72
+ :host([data-render-mode="shadow"][variant='standard']) [role='tab'],:host([data-render-mode="shadow"][variant='scoped']) [role='tab'] {
73
+ max-width: 100%;
74
+ overflow: hidden;
75
+ text-overflow: ellipsis;
76
+ white-space: nowrap;
77
+ }
78
+
79
+ /* SHARED OVERFLOW BUTTON MENU */
80
+
81
+ :host([data-render-mode="shadow"]) [part~='tab-overflow'] {
82
+ display: inline-flex;
83
+
84
+ /* Background Color */
85
+ --slds-c-buttonicon-color-background: transparent;
86
+
87
+ /* Background Color */
88
+ --slds-c-buttonicon-color-background: transparent;
89
+ --slds-c-buttonicon-color-background-hover: transparent;
90
+ --slds-c-buttonicon-color-background-focus: transparent;
91
+ --slds-c-buttonicon-color-background-active: transparent;
92
+
93
+ /* Spacing */
94
+ --slds-c-buttonicon-spacing-block: 0;
95
+
96
+ /* Border Color */
97
+ --slds-c-buttonicon-color-border: transparent;
98
+ --slds-c-buttonicon-color-border-active: transparent;
99
+ --slds-c-buttonicon-color-border-hover: transparent;
100
+ --slds-c-buttonicon-color-border-focus: transparent;
101
+
102
+ /* Shadow */
103
+ --slds-c-buttonicon-shadow: none;
104
+ --slds-c-buttonicon-shadow-focus: none;
105
+ }
106
+
107
+ /* STANDARD TAB BAR STYLING */
108
+
109
+ /* Line under standard tabs */
110
+ :host([data-render-mode="shadow"][variant='standard']) [part~='tab-bar'] {
111
+ border-block-end-width: var(--slds-c-tabbar-standard-sizing-border, var(--sds-g-sizing-border-1, 1px));
112
+ border-block-end-style: solid;
113
+ border-block-end-color: var(--slds-c-tabbar-standard-color-border, var(--slds-g-color-border-base-4, var(--sds-g-color-neutral-base-90, #e5e5e5)));
114
+ }
115
+
116
+ /* STANDARD TAB HEADER STYLING */
117
+
118
+ :host([data-render-mode="shadow"][variant='standard']) [part~='tab-item'] {
119
+ color: var(--slds-c-tabbar-standard-text-color, var(--slds-g-color-neutral-base-30, var(--sds-g-color-neutral-base-30, #444444)));
120
+ padding-block-start: var(--slds-c-tabbar-standard-spacing-block-start, var(--slds-c-tabbar-standard-spacing-block, 0));
121
+ padding-inline-start: var(--slds-c-tabbar-standard-spacing-inline-start, var(--slds-c-tabbar-standard-spacing-inline, var(--sds-g-spacing-3, 0.75rem)));
122
+ padding-inline-end: var(--slds-c-tabbar-standard-spacing-inline-end, var(--slds-c-tabbar-standard-spacing-inline, var(--sds-g-spacing-3, 0.75rem)));
123
+ padding-block-end: var(--slds-c-tabbar-standard-spacing-block-end, var(--slds-c-tabbar-standard-spacing-block, 0));
124
+ margin-block-end: calc(var(--slds-c-tabbar-standard-sizing-border, var(--sds-g-sizing-border-1, 1px)) * -1);
125
+ }
126
+
127
+ :host([data-render-mode="shadow"][variant='standard']) [part~='tab-item'].slds-is-active,:host([data-render-mode="shadow"][variant='standard']) [part~='tab-item'].slds-is-active:hover {
128
+ --slds-c-tabbar-standard-text-color: var(--slds-c-tabbar-standard-text-color-active, var(--slds-g-color-neutral-base-10, var(--sds-g-color-neutral-base-10, #181818)));
129
+ }
130
+
131
+ :host([data-render-mode="shadow"][variant='standard']) [part~='tab-item']:hover {
132
+ color: var(--slds-c-tabbar-standard-text-color-hover, var(--slds-c-tabbar-standard-text-color, var(--slds-g-color-neutral-base-30, var(--sds-g-color-neutral-base-30, #444444))));
133
+ }
134
+
135
+ :host([data-render-mode="shadow"][variant='standard']) [part~='tab-item']::after {
136
+ display: block;
137
+ content: '';
138
+ inset-block-end: 0;
139
+ inset-inline-start: 0;
140
+ inset-inline-end: 0;
141
+ height: 0;
142
+ position: absolute;
143
+ }
144
+
145
+ /* Blue line under active tab */
146
+ :host([data-render-mode="shadow"][variant='standard']) [part~='tab-item'].slds-is-active::after {
147
+ background-color: var(--slds-c-tabbar-standard-color-border-active, var(--sds-g-color-brand-base-60, #1b96ff));
148
+ height: calc(var(--slds-c-tabbar-standard-sizing-border, var(--sds-g-sizing-border-1, 1px)) + 2px);
149
+ }
150
+
151
+ /* Blue line under tab when hovering */
152
+ :host([data-render-mode="shadow"][variant='standard']) [part~='tab-item']:hover::after,:host([data-render-mode="shadow"][variant='standard']) [part~='tab-item'].slds-is-active:hover::after {
153
+ height: calc(var(--slds-c-tabbar-standard-sizing-border, var(--sds-g-sizing-border-1, 1px)) + 1px);
154
+ background-color: var(--slds-c-tabbar-standard-color-border-hover, var(--sds-g-color-brand-base-50, #0176d3));
155
+ }
156
+
157
+ /* STANDARD TAB LINK STYLING */
158
+
159
+ :host([data-render-mode="shadow"][variant='standard']) [role='tab'] {
160
+ display: block;
161
+ /* stylelint-disable sds-stylelint-plugin/styling-hooks-pattern */
162
+ height: var(--slds-c-tabbar-standard-sizing-height, var(--_slds-c-tabbar-standard-sizing-height));
163
+ line-height: var(--slds-c-tabbar-standard-font-lineheight, var(--_slds-c-tabbar-standard-font-lineheight));
164
+ /* stylelint-enable sds-stylelint-plugin/styling-hooks-pattern */
165
+ border: 0;
166
+ }
167
+
168
+ /* STANDARD TAB OVERFLOW STYLING */
169
+
170
+ :host([data-render-mode="shadow"][variant='standard']) [part~='tab-overflow'] {
171
+ /* stylelint-disable sds-stylelint-plugin/styling-hooks-pattern */
172
+ line-height: var(--slds-c-standard-font-lineheight, var(--_slds-c-tabbar-standard-sizing-height));
173
+ /* stylelint-enable sds-stylelint-plugin/styling-hooks-pattern */
174
+ --slds-c-buttonicon-spacing-inline: 0;
175
+
176
+ /* Text Color */
177
+ --slds-c-button-neutral-text-color: var(--slds-c-tabbar-standard-text-color, var(--slds-g-color-neutral-base-30, var(--sds-g-color-neutral-base-30, #444444)));
178
+ --slds-c-button-neutral-text-color-hover: var(--slds-c-tabbar-standard-text-color-hover, var(--slds-g-color-neutral-base-30, var(--sds-g-color-neutral-base-30, #444444)));
179
+ --slds-c-button-neutral-text-color-focus: var(--slds-c-tabbar-standard-text-color-focus, var(--slds-g-color-neutral-base-30, var(--sds-g-color-neutral-base-30, #444444)));
180
+ --slds-c-button-neutral-text-color-active: var(--slds-c-tabbar-standard-text-color-active, var(--slds-g-color-neutral-base-30, var(--sds-g-color-neutral-base-30, #444444)));
181
+
182
+ /* Icon Color */
183
+ --slds-c-buttonicon-color-foreground: var(--slds-c-tabbar-standard-text-color, var(--slds-g-color-neutral-base-30, var(--sds-g-color-neutral-base-30, #444444)));
184
+ --slds-c-buttonicon-color-foreground-hover: var(--slds-c-tabbar-standard-text-color-hover, var(--slds-g-color-neutral-base-30, var(--sds-g-color-neutral-base-30, #444444)));
185
+ --slds-c-buttonicon-color-foreground-focus: var(--slds-c-tabbar-standard-text-color-focus, var(--slds-g-color-neutral-base-30, var(--sds-g-color-neutral-base-30, #444444)));
186
+ --slds-c-buttonicon-color-foreground-active: var(--slds-c-tabbar-standard-text-color-active, var(--slds-g-color-neutral-base-30, var(--sds-g-color-neutral-base-30, #444444)));
187
+ }
188
+
189
+ :host([data-render-mode="shadow"][variant='standard']) [part~='tab-overflow'] lightning-button-menu:focus {
190
+ --sds-c-button-font-decoration: underline;
191
+ }
192
+
193
+ /* SCOPED TAB BAR STYLING */
194
+
195
+ :host([data-render-mode="shadow"][variant='scoped']) [part~='tab-bar'] {
196
+ background-color: var(--slds-c-tabbar-scoped-color-background, var(--slds-g-color-neutral-base-95, var(--sds-g-color-neutral-base-95, #f3f3f3)));
197
+ -webkit-box-align: start;
198
+ border: var(--sds-g-sizing-border-1, 1px) solid var(--slds-c-tabbar-scoped-color-border, var(--slds-g-color-border-base-4, var(--sds-g-color-neutral-base-80, #c9c9c9)));
199
+ border-end-end-radius: 0;
200
+ border-end-start-radius: 0;
201
+ border-start-end-radius: var(--slds-c-tabbar-scoped-radius-border, var(--sds-g-radius-border-2, 0.25rem));
202
+ border-start-start-radius: var(--slds-c-tabbar-scoped-radius-border, var(--sds-g-radius-border-2, 0.25rem));
203
+ }
204
+
205
+ /* SCOPED TAB HEADER STYLING */
206
+
207
+ /* Covers border under active tab, since background is not transparent */
208
+ :host([data-render-mode="shadow"][variant='scoped']) [part~='tab-item'] {
209
+ margin-block-end: calc(var(--sds-g-sizing-border-1, 1px) * -1);
210
+ color: var(--slds-c-tabbar-scoped-text-color, var(--slds-g-color-neutral-base-30, var(--sds-g-color-neutral-base-30, #444444)));
211
+ }
212
+
213
+ :host([data-render-mode="shadow"][variant='scoped']) [part~='tab-item'].slds-is-active {
214
+ --slds-c-tabbar-scoped-text-color: var(--slds-c-tabbar-scoped-text-color-active, var(--slds-g-color-neutral-base-10, var(--sds-g-color-neutral-base-10, #181818)));
215
+ }
216
+
217
+ /* Ensures that borders for tabs overlap */
218
+ :host([data-render-mode="shadow"][variant='scoped']) [part~='tab-item'] + [part~='tab-item'] {
219
+ margin-inline-start: calc(var(--sds-g-sizing-border-1, 1px) * -1);
220
+ }
221
+
222
+ /* SCOPED TAB LINK STYLING */
223
+
224
+ :host([data-render-mode="shadow"][variant='scoped']) [role='tab'] {
225
+ /* stylelint-disable sds-stylelint-plugin/styling-hooks-pattern */
226
+ height: var(--slds-c-tabbar-scoped-sizing-height, var(--_slds-c-tabbar-scoped-sizing-height));
227
+ line-height: var(--slds-c-tabbar-scoped-sizing-height, var(--_slds-c-tabbar-scoped-sizing-height));
228
+ /* stylelint-enable sds-stylelint-plugin/styling-hooks-pattern */
229
+ padding-block-start: var(--slds-c-tabbar-scoped-spacing-block-start, var(--slds-c-tabbar-scoped-spacing-block, 0));
230
+ padding-inline-start: var(--slds-c-tabbar-scoped-spacing-inline-start, var(--slds-c-tabbar-scoped-spacing-inline, var(--sds-g-spacing-4, 1rem)));
231
+ padding-inline-end: var(--slds-c-tabbar-scoped-spacing-inline-end, var(--slds-c-tabbar-scoped-spacing-inline, var(--sds-g-spacing-4, 1rem)));
232
+ padding-block-end: var(--slds-c-tabbar-scoped-spacing-block-end, var(--slds-c-tabbar-scoped-spacing-block, 0));
233
+ color: currentColor;
234
+ background-clip: padding-box;
235
+ border: 0;
236
+ border-inline-start: var(--sds-g-sizing-border-1, 1px) solid transparent;
237
+ border-inline-end: var(--sds-g-sizing-border-1, 1px) solid transparent;
238
+ border-radius: 0;
239
+ display: block;
240
+ }
241
+
242
+ :host([data-render-mode="shadow"][variant='scoped']) [part='tab-item']:first-child [role='tab'] {
243
+ border-left: 0;
244
+ }
245
+
246
+ :host([data-render-mode="shadow"][variant='scoped']) [role='tab']:hover {
247
+ border-color: var(--slds-c-tabbar-scoped-color-border-hover, var(--slds-g-color-border-base-4, var(--sds-g-color-neutral-base-90, #e5e5e5)));
248
+ background-color: var(--slds-c-tabbar-scoped-color-background-hover, transparent);
249
+ }
250
+
251
+ :host([data-render-mode="shadow"][variant='scoped']) .slds-is-active [role='tab'] {
252
+ background-color: var(--slds-c-tabbar-scoped-color-background-active, var(--slds-g-color-neutral-base-100, var(--sds-g-color-neutral-base-100, #ffffff)));
253
+ border-color: var(--slds-c-tabbar-scoped-color-border-active, var(--slds-g-color-border-base-4, var(--sds-g-color-neutral-base-90, #e5e5e5)));
254
+ }
255
+
256
+ /* SCOPED TAB OVERFLOW STYLING */
257
+
258
+ :host([data-render-mode="shadow"][variant='scoped']) [part~='tab-overflow'] {
259
+ /* stylelint-disable sds-stylelint-plugin/styling-hooks-pattern */
260
+ line-height: var(--slds-c-tabbar-scoped-sizing-height, var(--_slds-c-tabbar-scoped-sizing-height));
261
+ /* stylelint-enable sds-stylelint-plugin/styling-hooks-pattern */
262
+ --slds-c-buttonicon-spacing-inline: var(--sds-g-spacing-4, 1rem);
263
+
264
+ /* Text Color */
265
+ --slds-c-button-neutral-text-color: var(--slds-c-tabbar-scoped-text-color, var(--slds-g-color-neutral-base-30, var(--sds-g-color-neutral-base-30, #444444)));
266
+ --slds-c-button-neutral-text-color-hover: var(--slds-c-tabbar-scoped-text-color, var(--slds-g-color-neutral-base-30, var(--sds-g-color-neutral-base-30, #444444)));
267
+ --slds-c-button-neutral-text-color-focus: var(--slds-c-tabbar-scoped-text-color, var(--slds-g-color-neutral-base-30, var(--sds-g-color-neutral-base-30, #444444)));
268
+ --slds-c-button-neutral-text-color-active: var(--slds-c-tabbar-scoped-text-color, var(--slds-g-color-neutral-base-30, var(--sds-g-color-neutral-base-30, #444444)));
269
+
270
+ /* Icon Color */
271
+ --slds-c-buttonicon-color-foreground: var(--slds-c-tabbar-scoped-text-color, var(--slds-g-color-neutral-base-30, var(--sds-g-color-neutral-base-30, #444444)));
272
+ --slds-c-buttonicon-color-foreground-hover: var(--slds-c-tabbar-scoped-text-color, var(--slds-g-color-neutral-base-30, var(--sds-g-color-neutral-base-30, #444444)));
273
+ --slds-c-buttonicon-color-foreground-focus: var(--slds-c-tabbar-scoped-text-color, var(--slds-g-color-neutral-base-30, var(--sds-g-color-neutral-base-30, #444444)));
274
+ --slds-c-buttonicon-color-foreground-active: var(--slds-c-tabbar-scoped-text-color, var(--slds-g-color-neutral-base-30, var(--sds-g-color-neutral-base-30, #444444)));
275
+ }
276
+
277
+ /* VERTICAL TAB BAR STYLING */
278
+
279
+ :host([data-render-mode="shadow"][variant='vertical']) [part~='tab-bar'] {
280
+ background: var(--slds-c-tabbar-vertical-color-background, var(--slds-g-color-neutral-base-95, var(--sds-g-color-neutral-base-95, #f3f3f3)));
281
+ border-inline-end: var(--sds-g-sizing-border-1, 1px) solid var(--slds-c-tabbar-vertical-color-border, var(--slds-g-color-border-base-1, var(--sds-g-color-neutral-base-90, #e5e5e5)));
282
+ /* stylelint-disable sds-stylelint-plugin/styling-hooks-pattern */
283
+ width: var(--slds-c-tabbar-vertical-sizing-width, var(--_slds-c-tabbar-vertical-sizing-width));
284
+ /* stylelint-enable sds-stylelint-plugin/styling-hooks-pattern */
285
+ }
286
+
287
+ /* VERTICAL TAB HEADER STYLING */
288
+
289
+ :host([data-render-mode="shadow"][variant='vertical']) [part='tab-item'] {
290
+ display: flex;
291
+ align-items: center;
292
+ overflow: hidden;
293
+ border-block-end: var(--sds-g-sizing-border-1, 1px) solid var(--slds-c-tabbar-vertical-color-border, var(--slds-g-color-border-base-1, var(--sds-g-color-neutral-base-90, #e5e5e5)));
294
+ color: var(--slds-c-tabbar-vertical-text-color, currentColor);
295
+ }
296
+
297
+ :host([data-render-mode="shadow"][variant='vertical']) [part='tab-item']:last-child {
298
+ margin-block-end: calc(var(--sds-g-sizing-border-1, 1px) * -1);
299
+ }
300
+
301
+ /* Covers border next to active tab, since background is not transparent */
302
+ :host([data-render-mode="shadow"][variant='vertical']) [part='tab-item'].slds-is-active {
303
+ margin-inline-end: calc(var(--sds-g-sizing-border-1, 1px) * -1);
304
+ background: var(--slds-c-tabbar-vertical-color-background-active, var(--slds-g-color-neutral-base-100, var(--sds-g-color-neutral-base-100, #ffffff)));
305
+ color: var(--slds-c-tabbar-vertical-text-color-active, var(--sds-g-color-brand-base-50, #0176d3));
306
+ }
307
+
308
+ /* VERTICAL TAB LINK STYLING */
309
+
310
+ :host([data-render-mode="shadow"][variant='vertical']) [role='tab'] {
311
+ display: flex;
312
+ flex: 1 1 0%;
313
+ align-items: center;
314
+ min-width: 0;
315
+ padding-block-start: var(--slds-c-tabbar-vertical-spacing-block-start, var(--slds-c-tabbar-vertical-spacing-block, var(--sds-g-spacing-3, 0.75rem)));
316
+ padding-inline-start: var(--slds-c-tabbar-vertical-spacing-inline-start, var(--slds-c-tabbar-vertical-spacing-inline, var(--sds-g-spacing-3, 0.75rem)));
317
+ padding-inline-end: var(--slds-c-tabbar-vertical-spacing-inline-end, var(--slds-c-tabbar-vertical-spacing-inline, var(--sds-g-spacing-3, 0.75rem)));
318
+ padding-block-end: var(--slds-c-tabbar-vertical-spacing-block-end, var(--slds-c-tabbar-vertical-spacing-block, var(--sds-g-spacing-3, 0.75rem)));
319
+ color: currentColor;
320
+ -webkit-box-flex: 1;
321
+ -webkit-box-align: center;
322
+ }
323
+
324
+ :host([data-render-mode="shadow"][variant='vertical']) [role='tab']:hover {
325
+ background: var(--slds-c-tabbar-vertical-color-background-hover, var(--slds-g-color-neutral-base-80, var(--sds-g-color-neutral-base-80, #c9c9c9)));
326
+ color: var(--slds-c-tabbar-vertical-text-color-hover, var(--slds-g-color-neutral-base-10, var(--sds-g-color-neutral-base-10, #181818)));
327
+ }
328
+
329
+ /* Active tab should still use active colors on hover */
330
+ :host([data-render-mode="shadow"][variant='vertical']) .slds-is-active [role='tab']:hover {
331
+ background: var(--slds-c-tabbar-vertical-color-background-active, var(--slds-g-color-neutral-base-100, var(--sds-g-color-neutral-base-100, #ffffff)));
332
+ color: currentColor;
333
+ }
334
+ }
@@ -0,0 +1,2 @@
1
+ @import 'lightning/sldsCommon';
2
+ @import './tab-bar.slds.css';
@@ -2,10 +2,11 @@
2
2
  <ul class={computedListClass}
3
3
  role="tablist"
4
4
  aria-orientation={computedAriaOrientation}
5
- onkeydown={handleKeyDown}>
5
+ onkeydown={handleKeyDown}
6
+ part="tab-bar">
6
7
  <template for:each={_allTabs} for:item="tab">
7
8
  <template if:true={tab.visible}>
8
- <li data-tab key={tab.value} class={tab.class} onclick={handleTabClick}
9
+ <li data-tab key={tab.value} class={tab.class} onclick={handleTabClick} part="tab-item"
9
10
  title={tab.title} role="presentation" data-label={tab.label} data-tab-value={tab.value} data-target-selection-name={tab.targetSelectionName}>
10
11
  <a class={tab.linkClass}
11
12
  data-tab-value={tab.value}
@@ -40,7 +41,7 @@
40
41
  </template>
41
42
  </template>
42
43
  <template if:true={overflowSupported}>
43
- <li data-overflow class={computedOverflowClass} style={computedOverflowVisibility}>
44
+ <li data-overflow class={computedOverflowClass} style={computedOverflowVisibility} part="tab-item tab-overflow">
44
45
  <lightning-button-menu variant="bare"
45
46
  alternative-text={i18n.moreAlternativeText}
46
47
  data-target-reveals={targetReveals}
@@ -3,11 +3,14 @@ import labelOverflowMoreAlternativeText from '@salesforce/label/LightningTabs.ov
3
3
  import labelOverflowMoreTitle from '@salesforce/label/LightningTabs.overflowMoreTitle';
4
4
  import labelErrorStateAlternativeText from '@salesforce/label/LightningTabs.errorStateAlternativeText';
5
5
 
6
- import { api, LightningElement, track } from 'lwc';
6
+ import { api, track } from 'lwc';
7
+ import LightningShadowBaseClass from 'lightning/shadowBaseClassPrivate';
7
8
  import { classSet } from 'lightning/utils';
9
+ import { reflectAttribute } from 'lightning/utilsPrivate';
8
10
  import { calculateOverflow } from 'lightning/overflowLibrary';
9
11
  import { LightningResizeObserver } from 'lightning/resizeObserver';
10
12
  import { handleKeyDownOnTabList } from './keyboard';
13
+ import AriaObserver from 'lightning/ariaObserver';
11
14
 
12
15
  const i18n = {
13
16
  more: labelOverflowMore,
@@ -19,7 +22,7 @@ const i18n = {
19
22
  const RECOMPUTE_OVERFLOW_THRESHOLD_PX = 30;
20
23
  const TARGET_SELECTION_NAME_SUFFIX = 'Tab';
21
24
 
22
- export default class LightningTabBar extends LightningElement {
25
+ export default class LightningTabBar extends LightningShadowBaseClass {
23
26
  @api disableOverflow = false;
24
27
 
25
28
  @track _allTabs = [];
@@ -29,11 +32,17 @@ export default class LightningTabBar extends LightningElement {
29
32
 
30
33
  @track _queueSynchronizeA11 = false;
31
34
 
35
+ @track _tabHeaders = [];
36
+
37
+ _selectedTab;
38
+
32
39
  connectedCallback() {
40
+ super.connectedCallback();
33
41
  this._connected = true;
34
42
  if (this.overflowSupported) {
35
43
  this._queueOverflow();
36
44
  }
45
+ this.ariaObserver = new AriaObserver(this);
37
46
  }
38
47
 
39
48
  renderedCallback() {
@@ -45,6 +54,8 @@ export default class LightningTabBar extends LightningElement {
45
54
  this._synchronizeA11y();
46
55
  this._queueSynchronizeA11 = false;
47
56
  }
57
+
58
+ this.ariaObserver.sync();
48
59
  }
49
60
 
50
61
  disconnectedCallback() {
@@ -52,6 +63,11 @@ export default class LightningTabBar extends LightningElement {
52
63
  if (this._resizeObserver) {
53
64
  this._resizeObserver.disconnect();
54
65
  }
66
+
67
+ if (this.ariaObserver) {
68
+ this.ariaObserver.disconnect();
69
+ this.ariaObserver = undefined;
70
+ }
55
71
  }
56
72
 
57
73
  @api
@@ -71,6 +87,7 @@ export default class LightningTabBar extends LightningElement {
71
87
  }
72
88
  }
73
89
  this._variant = value;
90
+ reflectAttribute(this, 'variant', this._variant);
74
91
  }
75
92
 
76
93
  @api
@@ -87,6 +104,7 @@ export default class LightningTabBar extends LightningElement {
87
104
  label: tab.label,
88
105
  title: tab.title || tab.label,
89
106
  linkId: tab.value + '__item',
107
+ node: tab.node,
90
108
  domId: tab.domId,
91
109
  value: String(tab.value),
92
110
  class: classNames,
@@ -354,7 +372,16 @@ export default class LightningTabBar extends LightningElement {
354
372
  );
355
373
 
356
374
  tabLink.setAttribute('id', tabData.linkId);
357
- tabLink.setAttribute('aria-controls', tabData.domId);
375
+ const ariaObserverConfig = {
376
+ targetNode: tabLink,
377
+ attribute: 'aria-controls',
378
+ };
379
+ if (tabData.node) {
380
+ ariaObserverConfig.relatedNodes = tabData.node;
381
+ } else {
382
+ ariaObserverConfig.relatedNodeIds = tabData.domId;
383
+ }
384
+ this.ariaObserver.connect(ariaObserverConfig);
358
385
  });
359
386
  }
360
387
 
@@ -1,8 +1,9 @@
1
1
  <template>
2
- <div class={computedClass} title={title}
3
- onprivatetabregister={handleTabRegister}
4
- onprivatetabdatachange={handleTabDataChange}>
5
- <lightning-tab-bar variant={variant} onselect={handleTabSelected}></lightning-tab-bar>
2
+ <div class={computedClass} title={title}>
3
+ <lightning-tab-bar
4
+ variant={variant}
5
+ onselect={handleTabSelected}>
6
+ </lightning-tab-bar>
6
7
  <slot></slot>
7
8
  </div>
8
9
  </template>
@@ -21,10 +21,19 @@ export default class LightningTabset extends LightningElement {
21
21
 
22
22
  @track _variant = 'standard';
23
23
 
24
+ @track _tabHeaders = [];
25
+
24
26
  connectedCallback() {
25
27
  this._tabByValue = {};
26
- this._tabHeaders = [];
27
28
  this._connected = true;
29
+ this.addEventListener(
30
+ 'privatetabregister',
31
+ this.handleTabRegister.bind(this)
32
+ );
33
+ this.addEventListener(
34
+ 'privatetabdatachange',
35
+ this.handleTabDataChange.bind(this)
36
+ );
28
37
  }
29
38
 
30
39
  disconnectedCallback() {
@@ -115,7 +124,6 @@ export default class LightningTabset extends LightningElement {
115
124
  );
116
125
  if (index >= 0) {
117
126
  this._tabHeaders.splice(index, 1);
118
-
119
127
  this._updateTabBarHeaders(this._tabHeaders);
120
128
 
121
129
  this._tabByValue[tabValue] = undefined;
@@ -131,6 +139,7 @@ export default class LightningTabset extends LightningElement {
131
139
  this._tabHeaders.splice(tabIndex, 0, {
132
140
  value: tabValue,
133
141
  label: tab.label,
142
+ node: tab,
134
143
  domId: tab.id,
135
144
  title: tab.title,
136
145
  iconName: tab.iconName,
@@ -178,15 +187,6 @@ export default class LightningTabset extends LightningElement {
178
187
  tab.loadContent();
179
188
  }
180
189
 
181
- _selectTabHeaderByTabValue(value) {
182
- if (!this._connected) {
183
- return;
184
- }
185
-
186
- const tabBar = this.template.querySelector('lightning-tab-bar');
187
- tabBar.selectTabByValue(value);
188
- }
189
-
190
190
  handleTabSelected(event) {
191
191
  const selectedTabValue = event.detail.value;
192
192
  const tab = this._tabByValue[selectedTabValue];
@@ -232,11 +232,29 @@ export default class LightningTabset extends LightningElement {
232
232
  }
233
233
  }
234
234
 
235
+ /**
236
+ * Need to set tabHeaders programmatically this way. If done declaratively, LWC appears to batch
237
+ * the request to re-render the tab-bar until after all the tabs have been registered. If all tabs
238
+ * haven't been registered, it may not carry out future operations on the tab-bar accurately.
239
+ * Ex. it will not be able to find the selected default tab later during that tab's registration phase.
240
+ * This would cause the active default tab to not be selected.
241
+ *
242
+ * @param {Array} headers
243
+ */
235
244
  _updateTabBarHeaders(headers) {
236
245
  this.template.querySelector('lightning-tab-bar').tabHeaders =
237
246
  headers.slice();
238
247
  }
239
248
 
249
+ _selectTabHeaderByTabValue(value) {
250
+ if (!this._connected) {
251
+ return;
252
+ }
253
+
254
+ const tabBar = this.template.querySelector('lightning-tab-bar');
255
+ tabBar.selectTabByValue(value);
256
+ }
257
+
240
258
  get computedClass() {
241
259
  return tabClassPrefixByVariant[this.variant];
242
260
  }