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.
- package/metadata/raptor.json +5 -0
- package/package.json +43 -1
- package/scopedImports/@salesforce-internal-core.appVersion.js +1 -1
- package/src/lightning/accordion/accordion.css +12 -0
- package/src/lightning/accordion/accordion.html +3 -1
- package/src/lightning/accordion/accordion.js +4 -2
- package/src/lightning/accordion/accordion.slds.css +671 -0
- package/src/lightning/accordionSection/accordion-section.slds.css +647 -0
- package/src/lightning/accordionSection/accordionSection.css +14 -0
- package/src/lightning/accordionSection/accordionSection.html +23 -19
- package/src/lightning/accordionSection/accordionSection.js +29 -2
- package/src/lightning/ariaObserver/__docs__/ariaObserver.md +21 -9
- package/src/lightning/ariaObserver/ariaObserver.js +185 -154
- package/src/lightning/ariaObserver/polyfill.js +639 -0
- package/src/lightning/avatar/avatar.css +2 -0
- package/src/lightning/avatar/avatar.html +2 -0
- package/src/lightning/avatar/avatar.js +18 -15
- package/src/lightning/avatar/avatar.slds.css +272 -0
- package/src/lightning/baseCombobox/base-combobox.slds.css +1585 -0
- package/src/lightning/baseCombobox/baseCombobox.css +11 -1
- package/src/lightning/baseCombobox/baseCombobox.html +154 -146
- package/src/lightning/baseCombobox/baseCombobox.js +82 -46
- package/src/lightning/baseCombobox/spinner.slds.css +438 -0
- package/src/lightning/baseComboboxItem/baseComboboxItem.js +4 -2
- package/src/lightning/baseComboboxItem/inline.css +2 -0
- package/src/lightning/breadcrumb/breadcrumb.css +2 -2
- package/src/lightning/breadcrumb/breadcrumb.js +4 -2
- package/src/lightning/breadcrumb/breadcrumb.slds.css +2 -7
- package/src/lightning/breadcrumbs/breadcrumbs.css +2 -2
- package/src/lightning/breadcrumbs/breadcrumbs.js +3 -2
- package/src/lightning/breadcrumbs/breadcrumbs.slds.css +7 -1
- package/src/lightning/button/__examples__/inverse/inverse.css +8 -0
- package/src/lightning/button/__examples__/inverse/inverse.html +3 -2
- package/src/lightning/button/button.css +2 -0
- package/src/lightning/button/button.html +4 -2
- package/src/lightning/button/button.js +21 -0
- package/src/lightning/button/button.slds.css +527 -0
- package/src/lightning/buttonGroup/buttonGroup.css +2 -2
- package/src/lightning/buttonGroup/buttonGroup.js +3 -2
- package/src/lightning/buttonIcon/button-icon.slds.css +215 -453
- package/src/lightning/buttonIcon/buttonIcon.css +2 -2
- package/src/lightning/buttonIcon/buttonIcon.js +4 -0
- package/src/lightning/buttonIconStateful/button-icon-stateful.slds.css +215 -453
- package/src/lightning/buttonIconStateful/buttonIconStateful.css +2 -2
- package/src/lightning/buttonMenu/{dropdown.slds.css → button-menu.slds.css} +853 -217
- package/src/lightning/buttonMenu/buttonMenu.css +2 -2
- package/src/lightning/buttonMenu/buttonMenu.html +2 -2
- package/src/lightning/buttonMenu/buttonMenu.js +10 -14
- package/src/lightning/buttonStateful/button-stateful.slds.css +225 -457
- package/src/lightning/buttonStateful/buttonStateful.css +2 -2
- package/src/lightning/buttonStateful/buttonStateful.js +3 -2
- package/src/lightning/calendar/__examples__/basic/basic.html +7 -0
- package/src/lightning/calendar/__examples__/basic/basic.js +3 -0
- package/src/lightning/calendar/calendar.css +3 -0
- package/src/lightning/calendar/calendar.html +12 -9
- package/src/lightning/calendar/calendar.js +15 -1
- package/src/lightning/calendar/calendar.slds.css +2048 -0
- package/src/lightning/card/card.css +2 -2
- package/src/lightning/card/card.js +3 -2
- package/src/lightning/card/card.slds.css +141 -88
- package/src/lightning/colorPickerCustom/colorPickerCustom.css +2 -2
- package/src/lightning/colorPickerCustom/colorPickerCustom.js +3 -2
- package/src/lightning/colorPickerPanel/color-picker-panel.slds.css +11 -38
- package/src/lightning/colorPickerPanel/colorPickerPanel.css +3 -2
- package/src/lightning/colorPickerPanel/colorPickerPanel.js +4 -2
- package/src/lightning/colorPickerPanel/popover.slds.css +121 -0
- package/src/lightning/combobox/combobox.css +4 -0
- package/src/lightning/combobox/combobox.html +31 -29
- package/src/lightning/combobox/combobox.js +21 -4
- package/src/lightning/combobox/combobox.slds.css +13 -0
- package/src/lightning/combobox/form-element.slds.css +281 -0
- package/src/lightning/configProvider/defaultConfig.js +2 -1
- package/src/lightning/datepicker/datepicker.css +3 -0
- package/src/lightning/datepicker/datepicker.html +7 -4
- package/src/lightning/datepicker/datepicker.js +73 -19
- package/src/lightning/datepicker/form-element.slds.css +281 -0
- package/src/lightning/datepicker/input-text.slds.css +398 -0
- package/src/lightning/datetimepicker/datetimepicker.css +3 -0
- package/src/lightning/datetimepicker/datetimepicker.html +9 -3
- package/src/lightning/datetimepicker/datetimepicker.js +39 -35
- package/src/lightning/datetimepicker/form-element.slds.css +281 -0
- package/src/lightning/datetimepicker/input-text.slds.css +398 -0
- package/src/lightning/dualListbox/dualListbox.css +2 -2
- package/src/lightning/dualListbox/dualListbox.html +3 -3
- package/src/lightning/dualListbox/dualListbox.js +31 -6
- package/src/lightning/dualListbox/form-element.slds.css +83 -34
- package/src/lightning/dualListbox/keyboard.js +20 -1
- package/src/lightning/dynamicIcon/dynamicIcon.js +3 -2
- package/src/lightning/dynamicIcon/ellie.css +1 -1
- package/src/lightning/dynamicIcon/eq.css +1 -1
- package/src/lightning/dynamicIcon/score.css +1 -1
- package/src/lightning/dynamicIcon/strength.css +1 -1
- package/src/lightning/dynamicIcon/trend.css +1 -1
- package/src/lightning/dynamicIcon/waffle.css +1 -1
- package/src/lightning/formattedRichText/linkify.js +2 -2
- package/src/lightning/helptext/form-element.slds.css +83 -34
- package/src/lightning/helptext/help-text.slds.css +215 -453
- package/src/lightning/helptext/helptext.css +2 -2
- package/src/lightning/helptext/helptext.js +3 -2
- package/src/lightning/i18nCldrOptions/README.md +5 -0
- package/src/lightning/i18nService/README.md +5 -0
- package/src/lightning/icon/icon.css +2 -2
- package/src/lightning/icon/icon.js +16 -2
- package/src/lightning/icon/icon.slds.css +29 -17
- package/src/lightning/icon/iconColors.js +1 -0
- package/src/lightning/input/__examples__/text/text.html +0 -1
- package/src/lightning/input/form-element.slds.css +281 -0
- package/src/lightning/input/input-checkbox.slds.css +3 -12
- package/src/lightning/input/input-text.slds.css +239 -128
- package/src/lightning/input/input.css +2 -1
- package/src/lightning/input/input.html +8 -8
- package/src/lightning/input/input.js +107 -73
- package/src/lightning/internationalizationLibrary/README.md +24 -0
- package/src/lightning/internationalizationLibrary/utils.js +4 -1
- package/src/lightning/layout/__docs__/layout.md +1 -1
- package/src/lightning/layout/__examples__/simple/simple.css +1 -1
- package/src/lightning/layout/layout.css +5 -1
- package/src/lightning/layout/layout.js +4 -2
- package/src/lightning/layoutItem/__examples__/alignmentBump/alignmentBump.css +1 -1
- package/src/lightning/layoutItem/__examples__/sizePerDevice/sizePerDevice.css +0 -1
- package/src/lightning/layoutItem/layoutItem.css +5 -0
- package/src/lightning/layoutItem/layoutItem.js +4 -2
- package/src/lightning/menuDivider/menu-divider.slds.css +15 -0
- package/src/lightning/menuDivider/menuDivider.css +3 -0
- package/src/lightning/menuDivider/menuDivider.html +1 -1
- package/src/lightning/menuDivider/menuDivider.js +4 -2
- package/src/lightning/menuItem/menu-item.slds.css +140 -0
- package/src/lightning/menuItem/menuItem.css +3 -0
- package/src/lightning/menuItem/menuItem.html +43 -41
- package/src/lightning/menuItem/menuItem.js +4 -4
- package/src/lightning/menuSubheader/menu-subheader.slds.css +22 -0
- package/src/lightning/menuSubheader/menuSubheader.css +3 -0
- package/src/lightning/menuSubheader/menuSubheader.html +3 -1
- package/src/lightning/menuSubheader/menuSubheader.js +4 -6
- package/src/lightning/modal/__docs__/modal.md +3 -1
- package/src/lightning/modal/__modalUtils__/modalContainerTestConstants.js +267 -0
- package/src/lightning/modal/__modalUtils__/modalContainerTestMethods.js +1165 -0
- package/src/lightning/modal/__modalUtils__/modalContainerTestMockData.js +131 -0
- package/src/lightning/modal/modal.js +1 -1
- package/src/lightning/pill/avatar.slds.css +272 -0
- package/src/lightning/pill/link.css +3 -0
- package/src/lightning/pill/link.html +1 -1
- package/src/lightning/pill/pill.js +29 -9
- package/src/lightning/pill/pill.slds.css +168 -0
- package/src/lightning/pill/plain.css +3 -0
- package/src/lightning/pill/plain.html +1 -1
- package/src/lightning/pill/plainLink.css +3 -0
- package/src/lightning/pill/plainLink.html +1 -1
- package/src/lightning/pillContainer/barePillContainer.css +3 -0
- package/src/lightning/pillContainer/barePillContainer.html +1 -2
- package/src/lightning/pillContainer/listbox.slds.css +267 -0
- package/src/lightning/pillContainer/pill-container.slds.css +22 -0
- package/src/lightning/pillContainer/pill.slds.css +168 -0
- package/src/lightning/pillContainer/pillContainer.js +7 -3
- package/src/lightning/pillContainer/standardPillContainer.css +4 -0
- package/src/lightning/pillContainer/standardPillContainer.html +2 -2
- package/src/lightning/popup/popover.slds.css +119 -119
- package/src/lightning/popup/popup.css +1 -2
- package/src/lightning/popup/popup.js +3 -2
- package/src/lightning/positionLibrary/elementProxy.js +7 -2
- package/src/lightning/positionLibrary/util.js +8 -0
- package/src/lightning/primitiveBubble/primitiveBubble.css +2 -2
- package/src/lightning/primitiveBubble/primitiveBubble.js +4 -2
- package/src/lightning/primitiveButton/primitiveButton.js +5 -4
- package/src/lightning/primitiveCellFactory/cellWithStandardLayout.html +29 -21
- package/src/lightning/primitiveCellFactory/primitiveCellFactory.js +4 -0
- package/src/lightning/primitiveColorpickerButton/color-picker-button.slds.css +31 -19
- package/src/lightning/primitiveColorpickerButton/primitiveColorpickerButton.css +2 -2
- package/src/lightning/primitiveColorpickerButton/primitiveColorpickerButton.js +5 -3
- package/src/lightning/primitiveIcon/icon.slds.css +209 -0
- package/src/lightning/primitiveIcon/primitiveIcon.css +2 -1
- package/src/lightning/primitiveIcon/primitiveIcon.html +1 -1
- package/src/lightning/primitiveIcon/primitiveIcon.js +18 -11
- package/src/lightning/progressStep/progressStep.js +10 -13
- package/src/lightning/radioGroup/radioGroup.css +2 -1
- package/src/lightning/radioGroup/radioGroup.js +4 -2
- package/src/lightning/select/form-element.slds.css +83 -34
- package/src/lightning/select/select.css +2 -2
- package/src/lightning/select/select.js +4 -2
- package/src/lightning/select/select.slds.css +86 -34
- package/src/lightning/sldsCommon/sldsCommon.css +135 -75
- package/src/lightning/spinner/spinner.css +2 -2
- package/src/lightning/spinner/spinner.js +4 -2
- package/src/lightning/tabBar/tab-bar.slds.css +334 -0
- package/src/lightning/tabBar/tabBar.css +2 -0
- package/src/lightning/tabBar/tabBar.html +4 -3
- package/src/lightning/tabBar/tabBar.js +30 -3
- package/src/lightning/tabset/tabset.html +5 -4
- package/src/lightning/tabset/tabset.js +29 -11
- package/src/lightning/timepicker/form-element.slds.css +281 -0
- package/src/lightning/timepicker/timepicker.css +3 -0
- package/src/lightning/timepicker/timepicker.html +5 -1
- package/src/lightning/timepicker/timepicker.js +18 -15
- package/src/lightning/timepicker/timepicker.slds.css +18 -0
- package/src/lightning/tooltipLibrary/tooltipLibrary.js +21 -19
- package/src/lightning/utilsPrivate/browser.js +5 -3
- package/src/lightning/utilsPrivate/os.js +6 -4
- package/src/lightning/utilsPrivate/ssr.js +4 -0
- package/src/lightning/utilsPrivate/utilsPrivate.js +2 -0
- package/src/lightning/verticalNavigation/verticalNavigation.css +2 -1
- package/src/lightning/verticalNavigation/verticalNavigation.js +3 -2
- package/src/lightning/verticalNavigationSection/verticalNavigationSection.css +2 -1
- package/src/lightning/verticalNavigationSection/verticalNavigationSection.js +3 -2
- package/src/lightning/accordion/__perf__DISABLED/accordion-perf-utils.js +0 -76
- package/src/lightning/accordion/__perf__DISABLED/accordion10Multiple25SectionEach.perf.js +0 -57
- package/src/lightning/accordion/__perf__DISABLED/accordion10Simple25SectionEach.perf.js +0 -37
- package/src/lightning/accordion/__perf__DISABLED/accordionMultiple50Section.perf.js +0 -45
- package/src/lightning/accordion/__perf__DISABLED/accordionSimple50Section.perf.js +0 -35
- package/src/lightning/accordion/__perf__DISABLED/container/container.html +0 -15
- package/src/lightning/accordion/__perf__DISABLED/container/container.js +0 -7
- package/src/lightning/positionLibrary/__component__/positionLibraryBounding.spec.js +0 -319
- package/src/lightning/positionLibrary/__component__/x/bounding/bounding.css +0 -16
- package/src/lightning/positionLibrary/__component__/x/bounding/bounding.html +0 -36
- package/src/lightning/positionLibrary/__component__/x/bounding/bounding.js +0 -122
- /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
|
+
}
|
|
@@ -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,
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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
|
}
|