@salesforcedevs/dx-components 0.56.1 → 0.56.2-example
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/lwc.config.json +18 -3
- package/package.json +18 -6
- package/src/assets/icons/salesforcebrand-sprite/svg/symbols.svg +492 -111
- package/src/assets/svg/big-moon.svg +1 -0
- package/src/assets/svg/blue-circle.svg +3 -0
- package/src/assets/svg/login-widget-bg.png +0 -0
- package/src/assets/svg/subscribe-background-left.svg +14 -0
- package/src/assets/svg/subscribe-background-right.svg +11 -0
- package/src/assets/svg/trial-left.svg +6 -0
- package/src/assets/svg/trial-right.svg +26 -0
- package/src/modules/dx/banner/banner (1).ts +12 -0
- package/src/modules/dx/banner/banner.ts +3 -5
- package/src/modules/dx/button/button.css +10 -9
- package/src/modules/dx/buttonToggle/buttonToggle.css +50 -0
- package/src/modules/dx/buttonToggle/buttonToggle.html +17 -0
- package/src/modules/dx/buttonToggle/buttonToggle.ts +75 -0
- package/src/modules/dx/cardCallout/cardCallout.ts +8 -4
- package/src/modules/dx/cardContent/cardContent.html +4 -1
- package/src/modules/dx/cardDocs/cardDocs.html +4 -1
- package/src/modules/dx/cardEvent/cardEvent.html +1 -2
- package/src/modules/dx/cardEvent/cardEvent.ts +1 -1
- package/src/modules/dx/cardExpanded/cardExpanded.html +1 -6
- package/src/modules/dx/cardExpanded/cardExpanded.ts +2 -2
- package/src/modules/dx/cardMinimal/cardMinimal.html +1 -6
- package/src/modules/dx/cardTrial/cardTrial.css +63 -4
- package/src/modules/dx/cardTrial/cardTrial.html +96 -12
- package/src/modules/dx/cardTrial/cardTrial.ts +70 -2
- package/src/modules/dx/cardTrialExpanded/cardTrialExpanded.css +149 -0
- package/src/modules/dx/cardTrialExpanded/cardTrialExpanded.html +85 -0
- package/src/modules/dx/cardTrialExpanded/cardTrialExpanded.ts +67 -0
- package/src/modules/dx/checkbox/checkbox.css +4 -0
- package/src/modules/dx/codeBlock/codeBlock.ts +5 -1
- package/src/modules/dx/dropdown/dropdown.html +5 -1
- package/src/modules/dx/dropdown/dropdown.ts +13 -3
- package/src/modules/dx/dropdownOption/dropdownOption.css +119 -1
- package/src/modules/dx/dropdownOption/dropdownOption.html +4 -0
- package/src/modules/dx/dropdownOption/dropdownOption.ts +20 -7
- package/src/modules/dx/feature/feature.ts +3 -3
- package/src/modules/dx/featuredContentHeader/featuredContentHeader.css +84 -18
- package/src/modules/dx/featuredContentHeader/featuredContentHeader.html +109 -99
- package/src/modules/dx/featuredContentHeader/featuredContentHeader.ts +27 -7
- package/src/modules/dx/featuresList/featuresList.css +1 -1
- package/src/modules/dx/filterMenu/filterMenu.css +26 -8
- package/src/modules/dx/filterMenu/filterMenu.html +24 -8
- package/src/modules/dx/filterMenu/filterMenu.ts +1 -0
- package/src/modules/dx/footer/footer.css +1 -1
- package/src/modules/dx/footer/footer.html +25 -20
- package/src/modules/dx/footer/footer.ts +19 -15
- package/src/modules/dx/footer/links.ts +115 -39
- package/src/modules/dx/formattedDateTime/formattedDateTime.ts +8 -3
- package/src/modules/dx/header/header.html +10 -3
- package/src/modules/dx/header/header.ts +4 -0
- package/src/modules/dx/headerMobileNavMenu/headerMobileNavMenu.css +1 -0
- package/src/modules/dx/headerSearch/headerSearch.html +0 -1
- package/src/modules/dx/hr/hr.css +2 -4
- package/src/modules/dx/iconBadge/iconBadge.css +12 -0
- package/src/modules/dx/iconBadge/iconBadge.html +2 -7
- package/src/modules/dx/iconBadge/iconBadge.ts +15 -5
- package/src/modules/dx/imageAndLabel/imageAndLabel.css +0 -1
- package/src/modules/dx/input/input.css +17 -1
- package/src/modules/dx/input/input.html +5 -1
- package/src/modules/dx/input/input.ts +8 -0
- package/src/modules/dx/interactiveImage/interactiveImage.css +59 -0
- package/src/modules/dx/interactiveImage/interactiveImage.html +32 -0
- package/src/modules/dx/interactiveImage/interactiveImage.ts +71 -0
- package/src/modules/dx/logo/logo.css +0 -1
- package/src/modules/dx/logo/logo.ts +1 -1
- package/src/modules/dx/metadataBadge/metadataBadge.css +41 -0
- package/src/modules/dx/metadataBadge/metadataBadge.html +5 -0
- package/src/modules/dx/metadataBadge/metadataBadge.ts +24 -0
- package/src/modules/dx/modal/modal.css +40 -0
- package/src/modules/dx/modal/modal.html +10 -0
- package/src/modules/dx/modal/modal.ts +50 -0
- package/src/modules/dx/modalDrawer/modalDrawer.html +2 -2
- package/src/modules/dx/modalDrawer/modalDrawer.ts +7 -1
- package/src/modules/dx/pagination/pagination.css +1 -2
- package/src/modules/dx/popover/popover.css +28 -3
- package/src/modules/dx/popover/popover.html +1 -0
- package/src/modules/dx/popover/popover.ts +83 -44
- package/src/modules/dx/searchResults/coveo.css +18989 -0
- package/src/modules/dx/searchResults/searchResults.css +387 -0
- package/src/modules/dx/searchResults/searchResults.html +104 -0
- package/src/modules/dx/searchResults/searchResults.ts +187 -0
- package/src/modules/dx/section/section.css +10 -1
- package/src/modules/dx/section/section.ts +1 -1
- package/src/modules/dx/select/select.css +7 -3
- package/src/modules/dx/sidebar/sidebar.css +1 -145
- package/src/modules/dx/sidebar/sidebar.ts +2 -0
- package/src/modules/dx/sidebarOld/sidebarOld.css +1 -145
- package/src/modules/dx/sidebarOld/sidebarOld.ts +2 -0
- package/src/modules/dx/sidebarSearch/sidebarSearch.ts +23 -3
- package/src/modules/dx/sidebarSearchResult/sidebarSearchResult.css +1 -1
- package/src/modules/dx/tab/tab.css +0 -4
- package/src/modules/dx/tabPanel/tabPanel.css +20 -0
- package/src/modules/dx/tabPanel/tabPanel.html +13 -0
- package/src/modules/dx/tabPanel/tabPanel.ts +27 -0
- package/src/modules/dx/tabPanelItem/tabPanelItem.css +39 -0
- package/src/modules/dx/tabPanelItem/tabPanelItem.html +15 -0
- package/src/modules/dx/tabPanelItem/tabPanelItem.ts +39 -0
- package/src/modules/dx/tabPanelList/tabPanelList.css +35 -0
- package/src/modules/dx/tabPanelList/tabPanelList.html +47 -0
- package/src/modules/dx/tabPanelList/tabPanelList.ts +164 -0
- package/src/modules/dx/tabPanelList/uniqueId.ts +6 -0
- package/src/modules/dx/tbidAvatarButton/tbidAvatarButton.css +33 -0
- package/src/modules/dx/tbidAvatarButton/tbidAvatarButton.html +53 -0
- package/src/modules/dx/tbidAvatarButton/tbidAvatarButton.ts +440 -0
- package/src/modules/dx/toc/toc.css +1 -0
- package/src/modules/dx/toc/toc.ts +13 -0
- package/src/modules/dx/treeItem/treeItem.html +2 -0
- package/src/modules/dx/treeItem/treeItem.ts +8 -6
- package/src/modules/dx/treeTile/treeTile.css +18 -18
- package/src/modules/dx/treeTile/treeTile.html +5 -4
- package/src/modules/dx/treeTile/treeTile.ts +17 -3
- package/src/modules/dx/typeBadge/typeBadge.css +15 -56
- package/src/modules/dx/typeBadge/typeBadge.html +6 -0
- package/src/modules/dx/typeBadge/typeBadge.ts +149 -46
- package/src/modules/dxBaseElements/archiveCard/archiveCard.ts +2 -6
- package/src/modules/dxBaseElements/headerBase/headerBase.ts +11 -1
- package/src/modules/dxConstants/brands/brands.ts +14 -0
- package/src/modules/dxConstants/colors/colors.ts +14 -0
- package/src/modules/dxConstants/contentTypes/contentTypes.ts +10 -0
- package/src/modules/dxHelpers/card/card.css +1 -1
- package/src/modules/dxHelpers/commonHeader/commonHeader.css +4 -3
- package/src/modules/dxHelpers/commonSidebar/commonSidebar.css +145 -0
- package/src/modules/dxHelpers/{sidebar/sidebar.css → commonTreeItem/commonTreeItem.css} +0 -0
- package/src/modules/dxUtils/async/async.ts +45 -0
- package/src/modules/dxUtils/constants/constants.ts +0 -13
- package/src/modules/dxUtils/css/css.ts +10 -0
- package/src/modules/dxUtils/lwc/lwc.ts +9 -0
- package/src/modules/dxUtils/prismjs/prismjs.ts +347 -9
- package/src/modules/dxUtils/queryCoordinator/queryCoordinator.ts +37 -11
- package/LICENSE +0 -12
- package/src/modules/dx/typeBadgeGroup/typeBadgeGroup.css +0 -12
- package/src/modules/dx/typeBadgeGroup/typeBadgeGroup.html +0 -11
- package/src/modules/dx/typeBadgeGroup/typeBadgeGroup.ts +0 -18
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { LightningElement, api } from "lwc";
|
|
2
|
+
import cx from "classnames";
|
|
3
|
+
export default class TabPanel extends LightningElement {
|
|
4
|
+
@api index!: number;
|
|
5
|
+
@api groupId!: string;
|
|
6
|
+
@api active: boolean = false;
|
|
7
|
+
|
|
8
|
+
private get tabId() {
|
|
9
|
+
return `tabs--${this.groupId}--tab--${this.index}`;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
private get panelId() {
|
|
13
|
+
return `tabs--${this.groupId}--panel--${this.index}`;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
private get activeTabIndex() {
|
|
17
|
+
return this.active ? 0 : -1;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
private get className() {
|
|
21
|
+
return cx("tabpanel", this.active && "tabpanel-active");
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
private get panelHidden() {
|
|
25
|
+
return !this.active;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
@import "dxHelpers/reset";
|
|
2
|
+
|
|
3
|
+
.tab {
|
|
4
|
+
color: var(--dx-g-blue-vibrant-20);
|
|
5
|
+
font-family: var(--dx-g-font-display);
|
|
6
|
+
font-size: var(--dx-g-text-lg);
|
|
7
|
+
font-weight: var(--dx-g-font-bold);
|
|
8
|
+
padding: var(--dx-g-spacing-smd) var(--dx-g-spacing-xl)
|
|
9
|
+
var(--dx-g-spacing-sm);
|
|
10
|
+
border-top-left-radius: var(--dx-g-spacing-sm);
|
|
11
|
+
border-top-right-radius: var(--dx-g-spacing-sm);
|
|
12
|
+
border-bottom: var(--dx-g-spacing-xs) solid transparent;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.tab:hover {
|
|
16
|
+
background-color: var(--dx-g-blue-vibrant-95);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.tab-active {
|
|
20
|
+
color: var(--dx-g-blue-vibrant-50);
|
|
21
|
+
border-bottom: var(--dx-g-spacing-xs) solid var(--dx-g-blue-vibrant-50);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.tab:hover,
|
|
25
|
+
.tab-active {
|
|
26
|
+
font-weight: var(--dx-g-font-bold);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
@media screen and (max-width: 640px) {
|
|
30
|
+
.tab {
|
|
31
|
+
font-size: var(--dx-g-text-base);
|
|
32
|
+
font-family: var(--dx-g-font-sans);
|
|
33
|
+
font-weight: var(--dx-g-font-normal);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.tab-active {
|
|
37
|
+
font-weight: var(--dx-g-font-bold);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { LightningElement, api } from "lwc";
|
|
2
|
+
import cx from "classnames";
|
|
3
|
+
export default class TabPanelItem extends LightningElement {
|
|
4
|
+
@api groupId!: string;
|
|
5
|
+
@api index!: number;
|
|
6
|
+
@api active: boolean = false;
|
|
7
|
+
|
|
8
|
+
@api focus() {
|
|
9
|
+
const button = this.template.querySelector("button");
|
|
10
|
+
if (!button) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
button.focus();
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
private get activeTabIndex() {
|
|
17
|
+
return this.active ? 0 : -1;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
private get panelId() {
|
|
21
|
+
return `tabs--${this.groupId}--panel--${this.index}`;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
private get tabId() {
|
|
25
|
+
return `tabs--${this.groupId}--tab--${this.index}`;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
private get className() {
|
|
29
|
+
return cx("tab", this.active && "tab-active");
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
private onClick() {
|
|
33
|
+
this.dispatchEvent(
|
|
34
|
+
new CustomEvent("select", {
|
|
35
|
+
detail: this.index
|
|
36
|
+
})
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
:host {
|
|
2
|
+
--dx-c-tab-panel-list-horizontal-padding: var(--dx-g-spacing-3xl);
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.tablist-container {
|
|
6
|
+
padding: 0 var(--dx-c-tab-panel-list-horizontal-padding);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.tablist {
|
|
10
|
+
border-bottom: 1px solid var(--dx-g-gray-80);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
dx-popover {
|
|
14
|
+
--popover-padding: none;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.dropdown-item {
|
|
18
|
+
padding: var(--dx-g-spacing-sm);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.dropdown-item:hover {
|
|
22
|
+
cursor: pointer;
|
|
23
|
+
font-weight: var(--dx-g-font-bold);
|
|
24
|
+
background-color: var(--dx-g-blue-vibrant-95);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.more-btn {
|
|
28
|
+
display: flex;
|
|
29
|
+
align-items: center;
|
|
30
|
+
gap: var(--dx-g-spacing-sm);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.hidden {
|
|
34
|
+
display: none;
|
|
35
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="tablist-container">
|
|
3
|
+
<div class="tablist" role="tablist" part="tablist">
|
|
4
|
+
<template for:each={tabs} for:item="tab">
|
|
5
|
+
<dx-tab-panel-item
|
|
6
|
+
key={tab.index}
|
|
7
|
+
onselect={onTabClick}
|
|
8
|
+
group-id={groupId}
|
|
9
|
+
index={tab.index}
|
|
10
|
+
active={tab.active}
|
|
11
|
+
>
|
|
12
|
+
{tab.label}
|
|
13
|
+
</dx-tab-panel-item>
|
|
14
|
+
</template>
|
|
15
|
+
<dx-popover offset="medium" placement="bottom-center">
|
|
16
|
+
<dx-tab-panel-item class="more-btn-container" slot="control">
|
|
17
|
+
<div class="more-btn">
|
|
18
|
+
More
|
|
19
|
+
<dx-icon
|
|
20
|
+
sprite="utility"
|
|
21
|
+
symbol="threedots"
|
|
22
|
+
size="large"
|
|
23
|
+
></dx-icon>
|
|
24
|
+
</div>
|
|
25
|
+
</dx-tab-panel-item>
|
|
26
|
+
<div slot="content">
|
|
27
|
+
<template for:each={dropdownItems} for:item="dropdownItem">
|
|
28
|
+
<div
|
|
29
|
+
role="button"
|
|
30
|
+
onclick={onDropdownItemClick}
|
|
31
|
+
onkeydown={onDropdownItemClick}
|
|
32
|
+
data-value={dropdownItem.index}
|
|
33
|
+
key={dropdownItem.label}
|
|
34
|
+
class="dropdown-item"
|
|
35
|
+
tabindex="0"
|
|
36
|
+
>
|
|
37
|
+
{dropdownItem.label}
|
|
38
|
+
</div>
|
|
39
|
+
</template>
|
|
40
|
+
</div>
|
|
41
|
+
</dx-popover>
|
|
42
|
+
</div>
|
|
43
|
+
<div part="tabpanels">
|
|
44
|
+
<slot onslotchange={onSlotChange}></slot>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
</template>
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { LightningElement, api } from "lwc";
|
|
2
|
+
import { LightningSlotElement, Tab } from "typings/custom";
|
|
3
|
+
import { toJson } from "dxUtils/normalizers";
|
|
4
|
+
import { uniqueId } from "./uniqueId";
|
|
5
|
+
export default class TabPanelList extends LightningElement {
|
|
6
|
+
@api
|
|
7
|
+
get initialIndex() {
|
|
8
|
+
return +this._initialIndex;
|
|
9
|
+
}
|
|
10
|
+
set initialIndex(value) {
|
|
11
|
+
this._initialIndex = +value;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@api
|
|
15
|
+
get tabs() {
|
|
16
|
+
return this._tabs.map((tab: Tab, index) => ({
|
|
17
|
+
...tab,
|
|
18
|
+
index,
|
|
19
|
+
groupId: this.groupId,
|
|
20
|
+
active: this.activeIndex === index
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
set tabs(value: Tab[]) {
|
|
24
|
+
this._tabs = toJson(value);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
private _initialIndex: number = 0;
|
|
28
|
+
private _tabs: Tab[] = [];
|
|
29
|
+
private _activeIndex?: number;
|
|
30
|
+
private groupId: string = uniqueId();
|
|
31
|
+
private tabSlotPanels?: LightningSlotElement;
|
|
32
|
+
private showPopover: boolean = true;
|
|
33
|
+
private dropdownItems: Tab[] = [];
|
|
34
|
+
private hasRendered: boolean = false;
|
|
35
|
+
|
|
36
|
+
private get tabElements() {
|
|
37
|
+
return this.template.querySelectorAll("dx-tab-panel-item");
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
private get activeIndex() {
|
|
41
|
+
return this._activeIndex == null
|
|
42
|
+
? this.initialIndex
|
|
43
|
+
: this._activeIndex;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
private set activeIndex(value: number) {
|
|
47
|
+
this._activeIndex = value;
|
|
48
|
+
this.updateTabs();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
connectedCallback() {
|
|
52
|
+
this.addListeners();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
renderedCallback(): void {
|
|
56
|
+
if (!this.hasRendered) {
|
|
57
|
+
this.onResize();
|
|
58
|
+
this.hasRendered = true;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
disconnectedCallback() {
|
|
63
|
+
this.removeListeners();
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
private onTabClick(e: { detail: number }) {
|
|
67
|
+
if (e.detail !== this.activeIndex) {
|
|
68
|
+
this.dispatchEvent(new CustomEvent("change", { detail: e.detail }));
|
|
69
|
+
}
|
|
70
|
+
this.activeIndex = e.detail;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
private onDropdownItemClick(e: CustomEvent) {
|
|
74
|
+
this.onTabClick({ detail: +e.currentTarget!.dataset.value });
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
private onSlotChange(e: Event) {
|
|
78
|
+
this.tabSlotPanels = <LightningSlotElement>e.target;
|
|
79
|
+
this.updateTabs();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
private updateTabs() {
|
|
83
|
+
if (this.tabSlotPanels) {
|
|
84
|
+
this.tabSlotPanels.assignedElements().forEach((tabPanel, index) => {
|
|
85
|
+
tabPanel.index = index;
|
|
86
|
+
tabPanel.groupId = this.groupId;
|
|
87
|
+
tabPanel.active = this.activeIndex === index;
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
this.tabElements.forEach((tab, index) => {
|
|
91
|
+
tab.active = this.activeIndex === index;
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
private focusActiveTab() {
|
|
96
|
+
this.tabElements[this.activeIndex].focus();
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
private onKeydown = (e: KeyboardEvent) => {
|
|
100
|
+
switch (e.key) {
|
|
101
|
+
case "ArrowLeft": {
|
|
102
|
+
e.preventDefault();
|
|
103
|
+
const prev = this.activeIndex - 1;
|
|
104
|
+
this.activeIndex = prev < 0 ? this.tabs.length - 1 : prev;
|
|
105
|
+
this.focusActiveTab();
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
case "ArrowRight": {
|
|
109
|
+
e.preventDefault();
|
|
110
|
+
const next = this.activeIndex + 1;
|
|
111
|
+
this.activeIndex = next === this.tabs.length ? 0 : next;
|
|
112
|
+
this.focusActiveTab();
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
default:
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
private onResize = () => {
|
|
120
|
+
const allItems = this.template.querySelectorAll("dx-tab-panel-item");
|
|
121
|
+
const hiddenItems: number[] = [];
|
|
122
|
+
const primaryItems = this.template.querySelectorAll(
|
|
123
|
+
"dx-tab-panel-item:not(.more-btn-container)"
|
|
124
|
+
);
|
|
125
|
+
const moreBtn = this.template.querySelector(".more-btn-container")!;
|
|
126
|
+
const containerWidth =
|
|
127
|
+
this.template.querySelector(".tablist")!.offsetWidth;
|
|
128
|
+
let stopWidth = this.template.querySelector(
|
|
129
|
+
"dx-tab-panel-item.more-btn-container"
|
|
130
|
+
)!.offsetWidth;
|
|
131
|
+
|
|
132
|
+
this.dropdownItems = [];
|
|
133
|
+
allItems.forEach((item) => {
|
|
134
|
+
item.classList.remove("hidden");
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
primaryItems.forEach((item, i) => {
|
|
138
|
+
if (containerWidth >= stopWidth + item.offsetWidth) {
|
|
139
|
+
stopWidth += item.offsetWidth;
|
|
140
|
+
} else {
|
|
141
|
+
item.classList.add("hidden");
|
|
142
|
+
hiddenItems.push(i);
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
if (!hiddenItems.length) {
|
|
147
|
+
moreBtn.classList.add("hidden");
|
|
148
|
+
} else {
|
|
149
|
+
hiddenItems.forEach((i) => {
|
|
150
|
+
this.dropdownItems.push({ ...this._tabs[i], index: i });
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
private addListeners() {
|
|
156
|
+
this.template.addEventListener("keydown", this.onKeydown);
|
|
157
|
+
window.addEventListener("resize", this.onResize.bind(this));
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
private removeListeners() {
|
|
161
|
+
this.template.removeEventListener("keydown", this.onKeydown);
|
|
162
|
+
window.removeEventListener("resize", this.onResize.bind(this));
|
|
163
|
+
}
|
|
164
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
@import "dxHelpers/reset";
|
|
2
|
+
|
|
3
|
+
:host {
|
|
4
|
+
--dx-c-button-custom-color: var(--dx-g-blue-vibrant-50);
|
|
5
|
+
--dx-c-button-custom-background: transparent;
|
|
6
|
+
--dx-c-button-custom-border: 1px solid transparent;
|
|
7
|
+
--dx-c-button-custom-color-hover: var(--dx-g-blue-vibrant-50);
|
|
8
|
+
--dx-c-button-custom-background-hover: var(--dx-g-cloud-blue-vibrant-90);
|
|
9
|
+
--dx-c-button-custom-border-hover: var(--dx-g-cloud-blue-vibrant-90);
|
|
10
|
+
--dx-c-slot-empty-width: max-content;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.avatar-control {
|
|
14
|
+
height: var(--dx-g-spacing-xl);
|
|
15
|
+
width: calc(var(--dx-g-spacing-lg) + 4px);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.avatar-small-container {
|
|
19
|
+
align-items: center;
|
|
20
|
+
display: flex;
|
|
21
|
+
padding: 2px 0;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.avatar {
|
|
25
|
+
border-radius: 100%;
|
|
26
|
+
border: 2px solid #0d9dda;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.avatar.avatar-small {
|
|
30
|
+
display: block;
|
|
31
|
+
height: calc(var(--dx-g-spacing-lg) + 4px);
|
|
32
|
+
width: calc(var(--dx-g-spacing-lg) + 4px);
|
|
33
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div if:true={isLoggedIn}>
|
|
3
|
+
<dx-popover
|
|
4
|
+
offset="small"
|
|
5
|
+
width="320px"
|
|
6
|
+
placement="bottom-end"
|
|
7
|
+
open-on-hover
|
|
8
|
+
show-arrow
|
|
9
|
+
>
|
|
10
|
+
<div slot="control" class="avatar-small-container login-control">
|
|
11
|
+
<button
|
|
12
|
+
class="avatar-control"
|
|
13
|
+
aria-labelledby="avatar-control-label"
|
|
14
|
+
>
|
|
15
|
+
<img
|
|
16
|
+
src={userInfo.avatarImgSrc}
|
|
17
|
+
class="avatar avatar-small"
|
|
18
|
+
alt="Small user avatar image"
|
|
19
|
+
/>
|
|
20
|
+
<span id="avatar-control-label" hidden>
|
|
21
|
+
{userInfo.fullName}
|
|
22
|
+
</span>
|
|
23
|
+
</button>
|
|
24
|
+
</div>
|
|
25
|
+
<div slot="content">
|
|
26
|
+
<slot name="popover-content"></slot>
|
|
27
|
+
</div>
|
|
28
|
+
</dx-popover>
|
|
29
|
+
</div>
|
|
30
|
+
<div if:false={isLoggedIn}>
|
|
31
|
+
<dx-popover
|
|
32
|
+
offset="small"
|
|
33
|
+
width="320px"
|
|
34
|
+
placement="bottom-end"
|
|
35
|
+
open-on-hover
|
|
36
|
+
show-arrow
|
|
37
|
+
>
|
|
38
|
+
<dx-button
|
|
39
|
+
slot="control"
|
|
40
|
+
class="login-control"
|
|
41
|
+
icon-symbol="user"
|
|
42
|
+
icon-position="left"
|
|
43
|
+
loading={isLoading}
|
|
44
|
+
variant="custom"
|
|
45
|
+
>
|
|
46
|
+
Login
|
|
47
|
+
</dx-button>
|
|
48
|
+
<div slot="content">
|
|
49
|
+
<slot name="popover-content"></slot>
|
|
50
|
+
</div>
|
|
51
|
+
</dx-popover>
|
|
52
|
+
</div>
|
|
53
|
+
</template>
|