@salesforcedevs/dx-components 1.3.239 → 1.3.241-ux-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/lwc.config.json +1 -0
- package/package.json +2 -3
- package/src/modules/dx/coveoRecommendations/coveoRecommendations.ts +3 -0
- package/src/modules/dx/dropdownOption/dropdownOption.css +5 -3
- package/src/modules/dx/popover/popover.css +2 -2
- package/src/modules/dx/searchResults/coveo.css +1 -1
- package/src/modules/dx/sidebar/sidebar.html +22 -0
- package/src/modules/dx/sidebar/sidebar.ts +0 -41
- package/src/modules/dx/sidebarFooterNav/sidebarFooterNav.css +52 -0
- package/src/modules/dx/sidebarFooterNav/sidebarFooterNav.html +55 -0
- package/src/modules/dx/sidebarFooterNav/sidebarFooterNav.ts +106 -0
- package/src/modules/dx/sidebarOld/sidebarOld.html +19 -0
- package/src/modules/dx/sidebarOld/sidebarOld.ts +0 -38
- package/src/modules/dx/tab/tab.css +15 -20
- package/src/modules/dxBaseElements/sidebarBase/sidebarBase.ts +64 -1
- package/src/modules/dxHelpers/commonHeader/commonHeader.css +2 -1
- package/src/modules/dxHelpers/commonSidebar/commonSidebar.css +24 -4
- package/src/modules/dxHelpers/commonTreeItem/commonTreeItem.css +3 -3
- package/LICENSE +0 -12
package/lwc.config.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@salesforcedevs/dx-components",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.241-ux-alpha",
|
|
4
4
|
"description": "DX Lightning web components",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"engines": {
|
|
@@ -43,6 +43,5 @@
|
|
|
43
43
|
},
|
|
44
44
|
"volta": {
|
|
45
45
|
"node": "16.19.1"
|
|
46
|
-
}
|
|
47
|
-
"gitHead": "0c1431dd24a7dd5107b4bfc7c6192cb149aac106"
|
|
46
|
+
}
|
|
48
47
|
}
|
|
@@ -43,6 +43,9 @@ export default class CoveoRecommendations extends LightningElement {
|
|
|
43
43
|
this._recommendations = await Promise.all(
|
|
44
44
|
blogDataLoadTasks
|
|
45
45
|
);
|
|
46
|
+
if (this._recommendations.length === 0) {
|
|
47
|
+
this.showRecommendations = false;
|
|
48
|
+
}
|
|
46
49
|
} catch (ex) {
|
|
47
50
|
this.showRecommendations = false;
|
|
48
51
|
} finally {
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
.option:active {
|
|
41
|
-
background: var(--dx-g-blue-vibrant-95) !important;
|
|
41
|
+
background: var(--dx-g-cloud-blue-vibrant-95) !important;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
.option:not(.option-active):hover {
|
|
@@ -46,7 +46,9 @@
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
.option-active {
|
|
49
|
-
|
|
49
|
+
--dx-c-dropdown-option-label-color: var(--dx-g-blue-vibrant-50);
|
|
50
|
+
|
|
51
|
+
background: var(--dx-g-cloud-blue-vibrant-95);
|
|
50
52
|
}
|
|
51
53
|
|
|
52
54
|
.option_details {
|
|
@@ -67,7 +69,7 @@
|
|
|
67
69
|
color: var(--dx-c-dropdown-option-label-color, var(--dx-g-blue-vibrant-50));
|
|
68
70
|
display: flex;
|
|
69
71
|
align-items: center;
|
|
70
|
-
font-weight: var(--dx-g-font-bold);
|
|
72
|
+
font-weight: var(--dx-c-dropdown-option-font-weight, var(--dx-g-font-bold));
|
|
71
73
|
font-size: var(--dx-c-dropdown-option-font-size, var(--dx-g-text-base));
|
|
72
74
|
}
|
|
73
75
|
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
max-height: 65vh;
|
|
29
29
|
padding: var(--popover-padding);
|
|
30
30
|
overflow-y: auto;
|
|
31
|
-
transition:
|
|
31
|
+
transition: var(--popover-transition);
|
|
32
32
|
transition-delay: 0.02s;
|
|
33
33
|
transform: translateY(var(--dx-g-spacing-xs));
|
|
34
34
|
opacity: 0;
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
|
|
42
42
|
.popover-container_open .popover {
|
|
43
43
|
opacity: 1;
|
|
44
|
-
transform:
|
|
44
|
+
transform: var(--popover-container-open-transform);
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
.popover-overridewidth {
|
|
@@ -7944,7 +7944,7 @@ select.coveo-dropdown::-ms-expand {
|
|
|
7944
7944
|
|
|
7945
7945
|
@font-face {
|
|
7946
7946
|
font-family: "Lato";
|
|
7947
|
-
src: url('https://static.cloud.coveo.com/searchui/v2.
|
|
7947
|
+
src: url('https://static.cloud.coveo.com/searchui/v2.10113/0/fonts/lato.woff2'), url('https://staticdev.cloud.coveo.com/searchui/v2.10113/0/fonts/lato.woff2'), url('../fonts/lato.woff2'), url('https://static.cloud.coveo.com/searchui/v2.10113/0/fonts/lato.woff'), url('https://staticdev.cloud.coveo.com/searchui/v2.10113/0/fonts/lato.woff'), url('../fonts/lato.woff');
|
|
7948
7948
|
font-weight: normal;
|
|
7949
7949
|
font-style: normal;
|
|
7950
7950
|
}
|
|
@@ -95,5 +95,27 @@
|
|
|
95
95
|
onselecteditemrendered={onSelectedItemRendered}
|
|
96
96
|
></dx-tree>
|
|
97
97
|
</div>
|
|
98
|
+
|
|
99
|
+
<template if:false={mobile}>
|
|
100
|
+
<div if:true={hasSidebarFooter} class="footer-nav">
|
|
101
|
+
<dx-sidebar-footer-nav
|
|
102
|
+
lang-value-path={langValuePath}
|
|
103
|
+
language={language}
|
|
104
|
+
languages={languages}
|
|
105
|
+
bail-href={bailHref}
|
|
106
|
+
bail-label={bailLabel}
|
|
107
|
+
></dx-sidebar-footer-nav>
|
|
108
|
+
</div>
|
|
109
|
+
</template>
|
|
110
|
+
|
|
111
|
+
<template if:true={mobile}>
|
|
112
|
+
<div if:true={hasMobileSidebarFooter} class="footer-nav">
|
|
113
|
+
<dx-sidebar-footer-nav
|
|
114
|
+
lang-value-path={langValuePath}
|
|
115
|
+
language={language}
|
|
116
|
+
languages={languages}
|
|
117
|
+
></dx-sidebar-footer-nav>
|
|
118
|
+
</div>
|
|
119
|
+
</template>
|
|
98
120
|
</div>
|
|
99
121
|
</template>
|
|
@@ -15,15 +15,6 @@ export default class Sidebar extends SidebarBase {
|
|
|
15
15
|
@api coveoAdvancedQueryConfig!: string;
|
|
16
16
|
@api header: string = "";
|
|
17
17
|
|
|
18
|
-
@api
|
|
19
|
-
get value() {
|
|
20
|
-
return this._value;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
set value(value) {
|
|
24
|
-
this._value = value;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
18
|
@api
|
|
28
19
|
get trees() {
|
|
29
20
|
return this._trees;
|
|
@@ -52,16 +43,10 @@ export default class Sidebar extends SidebarBase {
|
|
|
52
43
|
)?.setInputValue(searchTerm);
|
|
53
44
|
}
|
|
54
45
|
|
|
55
|
-
private expanded: boolean = true;
|
|
56
|
-
private _value?: string = undefined;
|
|
57
|
-
|
|
58
46
|
@track
|
|
59
47
|
private _trees!: Array<TreeNode>;
|
|
60
|
-
|
|
61
|
-
private mobile: boolean = true;
|
|
62
48
|
private matchMedia!: MediaQueryList;
|
|
63
49
|
private valueToLabel: { [key: string]: string } = {};
|
|
64
|
-
|
|
65
50
|
private isSearchLoading: boolean = false;
|
|
66
51
|
private searchValue: string | null = null;
|
|
67
52
|
private searchResults: SidebarSearchResult[] = [];
|
|
@@ -171,32 +156,6 @@ export default class Sidebar extends SidebarBase {
|
|
|
171
156
|
this.matchMedia.removeEventListener("change", this.onMediaChange);
|
|
172
157
|
}
|
|
173
158
|
|
|
174
|
-
private onMediaChange = (event: MediaQueryListEvent | MediaQueryList) => {
|
|
175
|
-
this.mobile = event.matches;
|
|
176
|
-
this.expanded = !this.mobile;
|
|
177
|
-
};
|
|
178
|
-
|
|
179
|
-
private onSelect(event: CustomEvent) {
|
|
180
|
-
this._value = event.detail.name;
|
|
181
|
-
|
|
182
|
-
if (this.mobile) {
|
|
183
|
-
this.onToggleClick();
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
private onToggleClick() {
|
|
188
|
-
this.expanded = !this.expanded;
|
|
189
|
-
this.dispatchEvent(
|
|
190
|
-
new CustomEvent("togglesidebar", {
|
|
191
|
-
detail: {
|
|
192
|
-
open: this.expanded,
|
|
193
|
-
bubbles: true,
|
|
194
|
-
composed: true
|
|
195
|
-
}
|
|
196
|
-
})
|
|
197
|
-
);
|
|
198
|
-
}
|
|
199
|
-
|
|
200
159
|
private makeKey(): string {
|
|
201
160
|
return Math.random().toString(36).substring(7);
|
|
202
161
|
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
@import "dxHelpers/reset";
|
|
2
|
+
|
|
3
|
+
:host {
|
|
4
|
+
--button-primary-color: var(--dx-g-blue-vibrant-50);
|
|
5
|
+
--button-primary-color-hover: var(--dx-g-cloud-blue-vibrant-95);
|
|
6
|
+
--popover-container-open-transform: translateX(-4px) translateY(-8px);
|
|
7
|
+
--popover-transition: none;
|
|
8
|
+
--dx-c-dropdown-option-font-weight: normal;
|
|
9
|
+
--dx-c-dropdown-option-label-color: var(--dx-g-gray-10);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.footer-display {
|
|
13
|
+
display: flex;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.footer_lang-dropdown {
|
|
17
|
+
--dx-c-button-primary-color: var(--button-primary-color);
|
|
18
|
+
--border-color: var(--button-primary-color);
|
|
19
|
+
|
|
20
|
+
display: flex;
|
|
21
|
+
padding: 0 var(--dx-g-spacing-md);
|
|
22
|
+
height: var(--dx-g-spacing-xl);
|
|
23
|
+
border-radius: var(--dx-g-spacing-xs);
|
|
24
|
+
align-items: center;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.footer_lang-dropdown[aria-expanded="true"] {
|
|
28
|
+
background-color: var(--dx-g-cloud-blue-vibrant-95);
|
|
29
|
+
|
|
30
|
+
--border-color: var(--dx-g-cloud-blue-vibrant-95);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.footer_lang-dropdown:hover,
|
|
34
|
+
.footer_lang-dropdown:active,
|
|
35
|
+
.footer_lang-dropdown:focus,
|
|
36
|
+
.pdf_bail-link:hover {
|
|
37
|
+
background-color: var(--button-primary-color-hover);
|
|
38
|
+
|
|
39
|
+
--border-color: var(--button-primary-color-hover);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.pdf_bail-link {
|
|
43
|
+
--dx-c-button-horizontal-spacing: var(--dx-g-spacing-sm);
|
|
44
|
+
--dx-c-button-priamry-color-hover: var(--dx-g-cloud-blue-vibrant-95);
|
|
45
|
+
|
|
46
|
+
padding: 0 var(--dx-g-spacing-md);
|
|
47
|
+
border-radius: var(--dx-g-spacing-xs);
|
|
48
|
+
margin-right: var(--dx-g-spacing-sm);
|
|
49
|
+
display: flex;
|
|
50
|
+
height: var(--dx-g-spacing-xl);
|
|
51
|
+
align-items: center;
|
|
52
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div if:false={mobile} class="footer-display">
|
|
3
|
+
<dx-button
|
|
4
|
+
if:true={hasBailLink}
|
|
5
|
+
aria-label={bailLabel}
|
|
6
|
+
class="pdf_bail-link"
|
|
7
|
+
href={bailHref}
|
|
8
|
+
onclick={handleBailClick}
|
|
9
|
+
variant="inline"
|
|
10
|
+
icon-size="medium"
|
|
11
|
+
icon-symbol="new_window"
|
|
12
|
+
target="_blank"
|
|
13
|
+
>
|
|
14
|
+
{bailLabel}
|
|
15
|
+
</dx-button>
|
|
16
|
+
<dx-dropdown
|
|
17
|
+
if:true={hasLanguages}
|
|
18
|
+
options={languages}
|
|
19
|
+
small
|
|
20
|
+
value-path={langValuePath}
|
|
21
|
+
value={language}
|
|
22
|
+
onchange={onLangChange}
|
|
23
|
+
>
|
|
24
|
+
<dx-button
|
|
25
|
+
class="footer_lang-dropdown"
|
|
26
|
+
aria-label="Select Language"
|
|
27
|
+
variant="inline"
|
|
28
|
+
icon-size="medium"
|
|
29
|
+
icon-symbol="world"
|
|
30
|
+
>
|
|
31
|
+
{languageLabel}
|
|
32
|
+
</dx-button>
|
|
33
|
+
</dx-dropdown>
|
|
34
|
+
</div>
|
|
35
|
+
<div if:true={mobile} class="footer-display">
|
|
36
|
+
<dx-dropdown
|
|
37
|
+
if:true={hasLanguages}
|
|
38
|
+
options={languages}
|
|
39
|
+
small
|
|
40
|
+
value-path={langValuePath}
|
|
41
|
+
value={language}
|
|
42
|
+
onchange={onLangChange}
|
|
43
|
+
>
|
|
44
|
+
<dx-button
|
|
45
|
+
class="footer_lang-dropdown"
|
|
46
|
+
aria-label="Select Language"
|
|
47
|
+
variant="inline"
|
|
48
|
+
icon-size="small"
|
|
49
|
+
icon-symbol="world"
|
|
50
|
+
>
|
|
51
|
+
{languageLabel}
|
|
52
|
+
</dx-button>
|
|
53
|
+
</dx-dropdown>
|
|
54
|
+
</div>
|
|
55
|
+
</template>
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/* eslint-disable @lwc/lwc/no-document-query */
|
|
2
|
+
import { LightningElement, api } from "lwc";
|
|
3
|
+
import type { OptionWithLink } from "typings/custom";
|
|
4
|
+
import { toJson } from "dxUtils/normalizers";
|
|
5
|
+
import get from "lodash.get";
|
|
6
|
+
import { track } from "dxUtils/analytics";
|
|
7
|
+
|
|
8
|
+
const MOBILE_SIZE_MATCH = "768px";
|
|
9
|
+
|
|
10
|
+
export default class SidebarFooterNav extends LightningElement {
|
|
11
|
+
@api langValuePath: string = "id";
|
|
12
|
+
@api bailHref?: string | null = null;
|
|
13
|
+
@api bailLabel?: string | null = null;
|
|
14
|
+
|
|
15
|
+
@api
|
|
16
|
+
get languages() {
|
|
17
|
+
return this._languages;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
set languages(value) {
|
|
21
|
+
this._languages = toJson(value);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@api
|
|
25
|
+
get language() {
|
|
26
|
+
return this._language;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
set language(value) {
|
|
30
|
+
this._language = value;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
private _languages!: OptionWithLink[];
|
|
34
|
+
private _language: string | null = null;
|
|
35
|
+
private mobile: boolean = false;
|
|
36
|
+
private matchMedia!: MediaQueryList;
|
|
37
|
+
|
|
38
|
+
private get hasLanguages(): boolean {
|
|
39
|
+
return this.languages?.length > 1;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
private get languageLabel(): string {
|
|
43
|
+
const matchingLanguageData = this.language
|
|
44
|
+
? this.languages.find(
|
|
45
|
+
(lang) => get(lang, this.langValuePath) === this.language
|
|
46
|
+
)
|
|
47
|
+
: null;
|
|
48
|
+
return matchingLanguageData?.label || this.languages[0].label;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
get hasBailLink(): boolean {
|
|
52
|
+
return !!(this.bailHref && this.bailLabel);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
private onLangChange(event: CustomEvent<string>): void {
|
|
56
|
+
const { detail } = event;
|
|
57
|
+
this._language = detail;
|
|
58
|
+
|
|
59
|
+
this.dispatchEvent(
|
|
60
|
+
new CustomEvent("langchange", {
|
|
61
|
+
detail,
|
|
62
|
+
bubbles: true,
|
|
63
|
+
composed: true
|
|
64
|
+
})
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
private getFilename = function (path: string) {
|
|
69
|
+
return path.substring(path.lastIndexOf("/") + 1);
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
private handleBailClick(event: Event) {
|
|
73
|
+
const payload = {
|
|
74
|
+
click_text: "pdf",
|
|
75
|
+
click_url: this.bailHref,
|
|
76
|
+
element_title: "pdf",
|
|
77
|
+
element_type: "link",
|
|
78
|
+
content_category: "download"
|
|
79
|
+
};
|
|
80
|
+
track(event.target!, "custEv_pdfDownload", {
|
|
81
|
+
...payload,
|
|
82
|
+
file_name: this.getFilename(this.bailHref!),
|
|
83
|
+
file_extension: "pdf"
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
track(event.target!, "custEv_linkClick", {
|
|
87
|
+
...payload
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
connectedCallback() {
|
|
92
|
+
this.matchMedia = window.matchMedia(
|
|
93
|
+
`(max-width: ${MOBILE_SIZE_MATCH})`
|
|
94
|
+
);
|
|
95
|
+
this.onMediaChange(this.matchMedia);
|
|
96
|
+
this.matchMedia.addEventListener("change", this.onMediaChange);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
disconnectedCallback() {
|
|
100
|
+
this.matchMedia.removeEventListener("change", this.onMediaChange);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
private onMediaChange = (event: MediaQueryListEvent | MediaQueryList) => {
|
|
104
|
+
this.mobile = event.matches;
|
|
105
|
+
};
|
|
106
|
+
}
|
|
@@ -70,6 +70,25 @@
|
|
|
70
70
|
suggestions={emptyStateSuggestions}
|
|
71
71
|
if:false={anyResultMatch}
|
|
72
72
|
></dx-empty-state>
|
|
73
|
+
<div if:true={hasMobileSidebarFooter} class="footer-nav">
|
|
74
|
+
<dx-sidebar-footer-nav
|
|
75
|
+
lang-value-path={langValuePath}
|
|
76
|
+
language={language}
|
|
77
|
+
languages={languages}
|
|
78
|
+
></dx-sidebar-footer-nav>
|
|
79
|
+
</div>
|
|
80
|
+
</template>
|
|
81
|
+
|
|
82
|
+
<template if:false={mobile}>
|
|
83
|
+
<div if:true={hasSidebarFooter} class="footer-nav">
|
|
84
|
+
<dx-sidebar-footer-nav
|
|
85
|
+
lang-value-path={langValuePath}
|
|
86
|
+
language={language}
|
|
87
|
+
languages={languages}
|
|
88
|
+
bail-href={bailHref}
|
|
89
|
+
bail-label={bailLabel}
|
|
90
|
+
></dx-sidebar-footer-nav>
|
|
91
|
+
</div>
|
|
73
92
|
</template>
|
|
74
93
|
</div>
|
|
75
94
|
</template>
|
|
@@ -11,15 +11,6 @@ const MOBILE_SIZE_MATCH = "768px";
|
|
|
11
11
|
export default class Sidebar extends SidebarBase {
|
|
12
12
|
@api header: string = "";
|
|
13
13
|
|
|
14
|
-
@api
|
|
15
|
-
get value() {
|
|
16
|
-
return this._value;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
set value(value) {
|
|
20
|
-
this._value = value;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
14
|
@api
|
|
24
15
|
get trees() {
|
|
25
16
|
return this._trees;
|
|
@@ -37,13 +28,10 @@ export default class Sidebar extends SidebarBase {
|
|
|
37
28
|
this.assignFilteredTrees();
|
|
38
29
|
}
|
|
39
30
|
|
|
40
|
-
private expanded: boolean = true;
|
|
41
31
|
private _searchTimeout?: number;
|
|
42
|
-
private _value?: string = undefined;
|
|
43
32
|
private _trees!: Array<TreeNode>;
|
|
44
33
|
|
|
45
34
|
private filteredTrees: Array<{ key: string; tree: TreeNode }> = [];
|
|
46
|
-
private mobile: boolean = true;
|
|
47
35
|
private searchText: string = "";
|
|
48
36
|
private matchMedia!: MediaQueryList;
|
|
49
37
|
private valueToLabel: { [key: string]: string } = {};
|
|
@@ -101,32 +89,6 @@ export default class Sidebar extends SidebarBase {
|
|
|
101
89
|
this.matchMedia.removeEventListener("change", this.onMediaChange);
|
|
102
90
|
}
|
|
103
91
|
|
|
104
|
-
private onMediaChange = (event: MediaQueryListEvent | MediaQueryList) => {
|
|
105
|
-
this.mobile = event.matches;
|
|
106
|
-
this.expanded = !this.mobile;
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
private onSelect(event: CustomEvent) {
|
|
110
|
-
this._value = event.detail.name;
|
|
111
|
-
|
|
112
|
-
if (this.mobile) {
|
|
113
|
-
this.onToggleClick();
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
private onToggleClick() {
|
|
118
|
-
this.expanded = !this.expanded;
|
|
119
|
-
this.dispatchEvent(
|
|
120
|
-
new CustomEvent("togglesidebar", {
|
|
121
|
-
detail: {
|
|
122
|
-
open: this.expanded,
|
|
123
|
-
bubbles: true,
|
|
124
|
-
composed: true
|
|
125
|
-
}
|
|
126
|
-
})
|
|
127
|
-
);
|
|
128
|
-
}
|
|
129
|
-
|
|
130
92
|
/*
|
|
131
93
|
* Debouncing this method: Do not apply searchText filter as long as this
|
|
132
94
|
* function is being called to avoid running the recursivity logic very often.
|
|
@@ -11,22 +11,13 @@ a {
|
|
|
11
11
|
);
|
|
12
12
|
|
|
13
13
|
position: relative;
|
|
14
|
-
|
|
15
|
-
align-items: center;
|
|
16
|
-
height: var(--dx-g-spacing-xl);
|
|
17
|
-
font-family: var(--dx-g-font-display);
|
|
18
|
-
white-space: nowrap;
|
|
19
|
-
color: var(--dx-g-blue-vibrant-20);
|
|
20
|
-
transition: var(--dx-g-transition-hue-1x);
|
|
21
|
-
cursor: pointer;
|
|
22
|
-
outline-offset: -1px;
|
|
14
|
+
height: calc(var(--dx-g-spacing-3xl) - 4px);
|
|
23
15
|
}
|
|
24
16
|
|
|
25
17
|
.nav-list-item_default {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
padding: 0 var(--horizontal-spacing);
|
|
18
|
+
padding: calc(var(--dx-g-spacing-sm) + 2px) var(--dx-g-spacing-md);
|
|
19
|
+
justify-content: center;
|
|
20
|
+
display: flex;
|
|
30
21
|
}
|
|
31
22
|
|
|
32
23
|
.nav-list-item_small {
|
|
@@ -46,8 +37,6 @@ button.nav-list-item_small > dx-icon {
|
|
|
46
37
|
margin-left: var(--dx-g-spacing-xs);
|
|
47
38
|
}
|
|
48
39
|
|
|
49
|
-
.nav-list-item_default:hover,
|
|
50
|
-
.nav-list-item_default:active,
|
|
51
40
|
:host([aria-expanded="true"]) button.nav-list-item_default {
|
|
52
41
|
background: var(
|
|
53
42
|
--dx-g-brand-current-button-color-background-inactive,
|
|
@@ -76,11 +65,10 @@ button.nav-list-item:active > dx-icon,
|
|
|
76
65
|
}
|
|
77
66
|
|
|
78
67
|
.nav-list-item_default.state-active {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
);
|
|
83
|
-
color: var(--dx-g-brand-current-color, var(--dx-g-brand-default-color));
|
|
68
|
+
color: var(--dx-g-blue-vibrant-50);
|
|
69
|
+
font-family: var(--dx-g-font-sans);
|
|
70
|
+
font-size: var(--dx-g-text-base);
|
|
71
|
+
border-bottom: var(--dx-g-spacing-xs) solid var(--dx-g-blue-vibrant-50);
|
|
84
72
|
}
|
|
85
73
|
|
|
86
74
|
@media (max-width: 1160px) {
|
|
@@ -100,3 +88,10 @@ button.nav-list-item:active > dx-icon,
|
|
|
100
88
|
);
|
|
101
89
|
}
|
|
102
90
|
}
|
|
91
|
+
|
|
92
|
+
@media (max-width: 768px) {
|
|
93
|
+
.nav-list-item {
|
|
94
|
+
height: var(--dx-g-spacing-3xl);
|
|
95
|
+
display: flex;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { LightningElement } from "lwc";
|
|
1
|
+
import { LightningElement, api } from "lwc";
|
|
2
|
+
import type { OptionWithLink } from "typings/custom";
|
|
3
|
+
import { toJson } from "dxUtils/normalizers";
|
|
2
4
|
|
|
3
5
|
export const HEIGHT_OF_SIDEBAR_ITEM = 32;
|
|
4
6
|
export const WAIT_TIME_BEFORE_SCROLL_IN_MS = 500;
|
|
@@ -8,6 +10,33 @@ export class SidebarBase extends LightningElement {
|
|
|
8
10
|
|
|
9
11
|
selectedElement: HTMLElement | null = null;
|
|
10
12
|
timerId: ReturnType<typeof setTimeout> | null = null;
|
|
13
|
+
_languages!: OptionWithLink[];
|
|
14
|
+
mobile: boolean = true;
|
|
15
|
+
expanded: boolean = true;
|
|
16
|
+
_value?: string = undefined;
|
|
17
|
+
|
|
18
|
+
@api langValuePath: string = "id";
|
|
19
|
+
@api language!: string;
|
|
20
|
+
@api bailHref!: string;
|
|
21
|
+
@api bailLabel!: string;
|
|
22
|
+
|
|
23
|
+
@api
|
|
24
|
+
get languages() {
|
|
25
|
+
return this._languages;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
set languages(value) {
|
|
29
|
+
this._languages = toJson(value);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
@api
|
|
33
|
+
get value() {
|
|
34
|
+
return this._value;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
set value(value) {
|
|
38
|
+
this._value = value;
|
|
39
|
+
}
|
|
11
40
|
|
|
12
41
|
get sidebarContent() {
|
|
13
42
|
if (!this._sidebarContent) {
|
|
@@ -62,4 +91,38 @@ export class SidebarBase extends LightningElement {
|
|
|
62
91
|
this.selectedElement = null;
|
|
63
92
|
}
|
|
64
93
|
}
|
|
94
|
+
|
|
95
|
+
onMediaChange = (event: MediaQueryListEvent | MediaQueryList) => {
|
|
96
|
+
this.mobile = event.matches;
|
|
97
|
+
this.expanded = !this.mobile;
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
onSelect(event: CustomEvent) {
|
|
101
|
+
this._value = event.detail.name;
|
|
102
|
+
|
|
103
|
+
if (this.mobile) {
|
|
104
|
+
this.onToggleClick();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
onToggleClick() {
|
|
109
|
+
this.expanded = !this.expanded;
|
|
110
|
+
this.dispatchEvent(
|
|
111
|
+
new CustomEvent("togglesidebar", {
|
|
112
|
+
detail: {
|
|
113
|
+
open: this.expanded,
|
|
114
|
+
bubbles: true,
|
|
115
|
+
composed: true
|
|
116
|
+
}
|
|
117
|
+
})
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
private get hasMobileSidebarFooter(): boolean {
|
|
122
|
+
return this.mobile && this.languages?.length > 1 && this.expanded;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
private get hasSidebarFooter(): boolean {
|
|
126
|
+
return this.languages?.length > 1 || Boolean(this.bailHref);
|
|
127
|
+
}
|
|
65
128
|
}
|
|
@@ -58,7 +58,7 @@ header.state-show-mobile-nav .header_l2_group-nav_overflow {
|
|
|
58
58
|
/* Second row */
|
|
59
59
|
|
|
60
60
|
.header_l2 {
|
|
61
|
-
background:
|
|
61
|
+
background: white;
|
|
62
62
|
padding: var(--dx-g-spacing-lg) var(--dx-g-global-header-padding-horizontal);
|
|
63
63
|
}
|
|
64
64
|
|
|
@@ -70,6 +70,7 @@ header.state-show-mobile-nav .header_l2_group-nav_overflow {
|
|
|
70
70
|
|
|
71
71
|
.header_l2_group-title {
|
|
72
72
|
flex-shrink: 0;
|
|
73
|
+
padding-right: var(--dx-g-spacing-xl);
|
|
73
74
|
}
|
|
74
75
|
|
|
75
76
|
.header_l2_group-title
|
|
@@ -13,7 +13,12 @@
|
|
|
13
13
|
--dx-c-sidebar-vertical-padding: var(--dx-g-spacing-md);
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
dx-tree
|
|
16
|
+
dx-tree {
|
|
17
|
+
border-top: 1px solid var(--dx-g-gray-90);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
dx-tree:last-child {
|
|
21
|
+
border-bottom: 1px solid var(--dx-g-gray-90);
|
|
17
22
|
margin-bottom: var(--dx-g-spacing-sm);
|
|
18
23
|
}
|
|
19
24
|
|
|
@@ -53,7 +58,7 @@ dx-tree:not(:last-child) {
|
|
|
53
58
|
}
|
|
54
59
|
|
|
55
60
|
.container {
|
|
56
|
-
background-color:
|
|
61
|
+
background-color: white;
|
|
57
62
|
display: flex;
|
|
58
63
|
flex-direction: column;
|
|
59
64
|
height: var(--dx-c-sidebar-height);
|
|
@@ -66,10 +71,10 @@ dx-tree:not(:last-child) {
|
|
|
66
71
|
var(--dx-c-sidebar-left-padding) - var(--dx-g-spacing-md)
|
|
67
72
|
);
|
|
68
73
|
|
|
74
|
+
border-right: 1px solid var(--dx-g-gray-90);
|
|
69
75
|
box-shadow: 2px 0 0 0 var(--border-color);
|
|
70
76
|
min-height: var(--dx-c-sidebar-min-height);
|
|
71
|
-
padding: var(--dx-c-sidebar-vertical-padding) 0
|
|
72
|
-
var(--dx-c-sidebar-vertical-padding) var(--left-spacing);
|
|
77
|
+
padding: var(--dx-c-sidebar-vertical-padding) 0 var(--dx-g-spacing-2xs) 0;
|
|
73
78
|
position: relative;
|
|
74
79
|
}
|
|
75
80
|
|
|
@@ -127,6 +132,21 @@ dx-tree:not(:last-child) {
|
|
|
127
132
|
white-space: nowrap;
|
|
128
133
|
}
|
|
129
134
|
|
|
135
|
+
.footer-nav {
|
|
136
|
+
display: flex;
|
|
137
|
+
padding: var(--dx-g-spacing-xs) var(--dx-g-spacing-sm)
|
|
138
|
+
var(--dx-g-spacing-xs) var(--dx-g-spacing-xl);
|
|
139
|
+
position: fixed;
|
|
140
|
+
bottom: 0;
|
|
141
|
+
left: 0;
|
|
142
|
+
width: inherit;
|
|
143
|
+
background: white;
|
|
144
|
+
border-top: 1px solid var(--dx-g-gray-90);
|
|
145
|
+
border-right: 1px solid var(--dx-g-gray-90);
|
|
146
|
+
height: var(--dx-g-spacing-2xl);
|
|
147
|
+
align-items: center;
|
|
148
|
+
}
|
|
149
|
+
|
|
130
150
|
@media screen and (max-width: 768px) {
|
|
131
151
|
.padding-horizontal {
|
|
132
152
|
padding-left: var(--dx-g-spacing-lg);
|
|
@@ -8,14 +8,14 @@
|
|
|
8
8
|
|
|
9
9
|
.sidebar-item-selected {
|
|
10
10
|
background: var(--dx-g-cloud-blue-vibrant-95);
|
|
11
|
-
box-shadow: inset var(--dx-g-spacing-xs) 0 0 0 var(--dx-g-blue-vibrant-
|
|
11
|
+
box-shadow: inset var(--dx-g-spacing-xs) 0 0 0 var(--dx-g-blue-vibrant-40);
|
|
12
12
|
border-radius: 0;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
.sidebar-item {
|
|
16
|
-
padding: 6px var(--dx-g-spacing-
|
|
16
|
+
padding: 6px var(--dx-g-spacing-xl);
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
.sidebar-item:not(.sidebar-item-selected):hover {
|
|
20
|
-
|
|
20
|
+
color: var(--dx-g-blue-vibrant-50);
|
|
21
21
|
}
|
package/LICENSE
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
Copyright (c) 2020, Salesforce.com, Inc.
|
|
2
|
-
All rights reserved.
|
|
3
|
-
|
|
4
|
-
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
|
5
|
-
|
|
6
|
-
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
|
7
|
-
|
|
8
|
-
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
|
9
|
-
|
|
10
|
-
* Neither the name of Salesforce.com nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
|
11
|
-
|
|
12
|
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|