@salesforcedevs/dx-components 1.3.228 → 1.3.229-docheader2-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/lwc.config.json +1 -1
  2. package/package.json +2 -3
  3. package/src/modules/dx/dropdownOption/dropdownOption.css +5 -3
  4. package/src/modules/dx/headerNav/headerNav.css +9 -0
  5. package/src/modules/dx/popover/popover.css +2 -2
  6. package/src/modules/dx/sidebar/sidebar.css +8 -5
  7. package/src/modules/dx/sidebar/sidebar.html +30 -4
  8. package/src/modules/dx/sidebar/sidebar.ts +2 -42
  9. package/src/modules/dx/sidebarFooterNav/sidebarFooterNav.css +52 -0
  10. package/src/modules/dx/sidebarFooterNav/sidebarFooterNav.html +55 -0
  11. package/src/modules/dx/sidebarFooterNav/sidebarFooterNav.ts +106 -0
  12. package/src/modules/dx/sidebarOld/sidebarOld.css +1 -0
  13. package/src/modules/dx/sidebarOld/sidebarOld.html +24 -3
  14. package/src/modules/dx/sidebarOld/sidebarOld.ts +0 -38
  15. package/src/modules/dx/sidebarSearchResult/sidebarSearchResult.css +40 -4
  16. package/src/modules/dx/sidebarSearchResult/sidebarSearchResult.html +16 -10
  17. package/src/modules/dx/tab/tab.css +48 -19
  18. package/src/modules/dx/trafficLabeler/trafficLabeler.html +1 -6
  19. package/src/modules/dx/trafficLabeler/trafficLabeler.ts +3 -0
  20. package/src/modules/dx/treeItem/treeItem.css +2 -2
  21. package/src/modules/dx/treeTile/treeTile.css +37 -28
  22. package/src/modules/dx/treeTile/treeTile.html +6 -6
  23. package/src/modules/dx/treeTile/treeTile.ts +2 -1
  24. package/src/modules/dxBaseElements/sidebarBase/sidebarBase.ts +96 -1
  25. package/src/modules/dxHelpers/commonHeader/commonHeader.css +6 -2
  26. package/src/modules/dxHelpers/commonSidebar/commonSidebar.css +36 -13
  27. package/src/modules/dxHelpers/commonTreeItem/commonTreeItem.css +46 -3
  28. package/LICENSE +0 -12
  29. package/src/modules/dx/coveoLabeler/coveoLabeler.html +0 -1
  30. package/src/modules/dx/coveoLabeler/coveoLabeler.ts +0 -11
package/lwc.config.json CHANGED
@@ -33,7 +33,6 @@
33
33
  "dx/checkboxGroup",
34
34
  "dx/checkboxNative",
35
35
  "dx/codeBlock",
36
- "dx/coveoLabeler",
37
36
  "dx/dropdown",
38
37
  "dx/emptyState",
39
38
  "dx/faq",
@@ -78,6 +77,7 @@
78
77
  "dx/select",
79
78
  "dx/sidebar",
80
79
  "dx/sidebarOld",
80
+ "dx/sidebarFooterNav",
81
81
  "dx/skipNavLink",
82
82
  "dx/socials",
83
83
  "dx/spinner",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforcedevs/dx-components",
3
- "version": "1.3.228",
3
+ "version": "1.3.229-docheader2-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": "99f47bf1370b03cd8a24791b3114a1ebe26e25d8"
46
+ }
48
47
  }
@@ -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
- background: var(--dx-g-blue-vibrant-95);
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
 
@@ -10,17 +10,26 @@ nav {
10
10
 
11
11
  .nav-list {
12
12
  display: flex;
13
+ margin-top: calc(var(--dx-g-spacing-2xs) + 1px);
13
14
  }
14
15
 
15
16
  .nav-list li {
16
17
  position: relative;
17
18
  }
18
19
 
20
+ .nav-list li:not(:last-child) {
21
+ margin-right: var(--dx-g-spacing-md);
22
+ }
23
+
19
24
  .nav-list-item-nav-menu {
20
25
  display: none;
21
26
  }
22
27
 
23
28
  @media (max-width: 768px) {
29
+ .nav-list {
30
+ margin-top: 0;
31
+ }
32
+
24
33
  .nav-list-item-nav-menu {
25
34
  display: flex;
26
35
  }
@@ -28,7 +28,7 @@
28
28
  max-height: 65vh;
29
29
  padding: var(--popover-padding);
30
30
  overflow-y: auto;
31
- transition: opacity 0.2s linear, transform 0.2s linear;
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: translateY(0);
44
+ transform: var(--popover-container-open-transform);
45
45
  }
46
46
 
47
47
  .popover-overridewidth {
@@ -15,7 +15,7 @@ dx-empty-state {
15
15
 
16
16
  .sidebar-content {
17
17
  overflow-y: auto;
18
- padding-bottom: var(--dx-g-spacing-md);
18
+ padding: var(--dx-g-spacing-sm) 0 var(--dx-g-spacing-md);
19
19
  }
20
20
 
21
21
  .loading-skeleton {
@@ -53,6 +53,13 @@ dx-empty-state {
53
53
  --dx-c-button-secondary-color-hover: var(--dx-g-gray-80);
54
54
  }
55
55
 
56
+ .results-heading {
57
+ --dx-g-text-body-color: var(--sds-g-gray-14);
58
+
59
+ margin-bottom: var(--dx-g-spacing-sm);
60
+ font-weight: var(--dx-g-font-bold);
61
+ }
62
+
56
63
  @media (max-width: 768px) {
57
64
  :host {
58
65
  width: 100%;
@@ -61,8 +68,4 @@ dx-empty-state {
61
68
  .loading-skeleton {
62
69
  width: 100%;
63
70
  }
64
-
65
- .sidebar-content-tree {
66
- padding: 0 var(--dx-g-spacing-sm);
67
- }
68
71
  }
@@ -16,13 +16,17 @@
16
16
  <dx-icon
17
17
  sprite="utility"
18
18
  symbol={menuSymbol}
19
- color="blue-vibrant-20"
19
+ color="blue-vibrant-50"
20
+ size="medium"
20
21
  ></dx-icon>
21
22
  </dx-button>
22
23
  </div>
23
24
  </div>
24
25
 
25
- <div class="sidebar-header padding-horizontal">
26
+ <div
27
+ class="sidebar-header padding-horizontal"
28
+ show-shadow={showBoxShadow}
29
+ >
26
30
  <div class="header" if:false={mobile}>
27
31
  <h2 class="dx-text-display-6 header-title">{header}</h2>
28
32
  <slot name="header"></slot>
@@ -42,7 +46,7 @@
42
46
  ></dx-sidebar-search>
43
47
  </div>
44
48
  <h2
45
- class="results-heading dx-text-display-8"
49
+ class="results-heading dx-text-body-3"
46
50
  if:true={showResultsHeading}
47
51
  >
48
52
  Results
@@ -83,7 +87,7 @@
83
87
  size="small"
84
88
  ></dx-empty-state>
85
89
  </div>
86
- <div class="sidebar-content sidebar-content-tree">
90
+ <div class={sidebarContentClass} onscroll={handleScroll}>
87
91
  <dx-tree
88
92
  for:each={trees}
89
93
  for:item="tree"
@@ -95,5 +99,27 @@
95
99
  onselecteditemrendered={onSelectedItemRendered}
96
100
  ></dx-tree>
97
101
  </div>
102
+
103
+ <template if:false={mobile}>
104
+ <div if:true={hasSidebarFooter} class="footer-nav">
105
+ <dx-sidebar-footer-nav
106
+ lang-value-path={langValuePath}
107
+ language={language}
108
+ languages={languages}
109
+ bail-href={bailHref}
110
+ bail-label={bailLabel}
111
+ ></dx-sidebar-footer-nav>
112
+ </div>
113
+ </template>
114
+
115
+ <template if:true={mobile}>
116
+ <div if:true={hasMobileSidebarFooter} class="footer-nav">
117
+ <dx-sidebar-footer-nav
118
+ lang-value-path={langValuePath}
119
+ language={language}
120
+ languages={languages}
121
+ ></dx-sidebar-footer-nav>
122
+ </div>
123
+ </template>
98
124
  </div>
99
125
  </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
  }
@@ -216,7 +175,7 @@ export default class Sidebar extends SidebarBase {
216
175
  this.isSearchLoading = e.detail;
217
176
  }
218
177
 
219
- private onSidebarSearchContentScroll() {
178
+ private onSidebarSearchContentScroll(scrollEvent) {
220
179
  if (this.isSearchLoading) {
221
180
  return;
222
181
  }
@@ -233,6 +192,7 @@ export default class Sidebar extends SidebarBase {
233
192
  this.requestedFetchMoreResults = true;
234
193
  search.fetchMoreResults();
235
194
  }
195
+ this.handleScroll(scrollEvent);
236
196
  }
237
197
 
238
198
  private initializeSearchScrollPosition() {
@@ -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
+ }
@@ -2,6 +2,7 @@
2
2
 
3
3
  .sidebar-content {
4
4
  overflow-y: auto;
5
+ padding-top: var(--dx-g-spacing-sm);
5
6
  }
6
7
 
7
8
  dx-empty-state {
@@ -16,14 +16,15 @@
16
16
  <dx-icon
17
17
  sprite="utility"
18
18
  symbol={menuSymbol}
19
- color="blue-vibrant-20"
19
+ color="blue-vibrant-50"
20
+ size="medium"
20
21
  ></dx-icon>
21
22
  </dx-button>
22
23
  </div>
23
24
  </div>
24
25
 
25
26
  <template if:true={expanded}>
26
- <div class="padding-horizontal">
27
+ <div class="padding-horizontal" show-shadow={showBoxShadow}>
27
28
  <div class="header" if:false={mobile}>
28
29
  <h2 class="dx-text-display-6 header-title">{header}</h2>
29
30
  <slot name="header"></slot>
@@ -48,8 +49,9 @@
48
49
  </div>
49
50
  </div>
50
51
  <div
51
- class="sidebar-content sidebar-content-tree"
52
+ class={sidebarContentClass}
52
53
  if:true={anyResultMatch}
54
+ onscroll={handleScroll}
53
55
  >
54
56
  <dx-tree
55
57
  for:each={filteredTrees}
@@ -70,6 +72,25 @@
70
72
  suggestions={emptyStateSuggestions}
71
73
  if:false={anyResultMatch}
72
74
  ></dx-empty-state>
75
+ <div if:true={hasMobileSidebarFooter} class="footer-nav">
76
+ <dx-sidebar-footer-nav
77
+ lang-value-path={langValuePath}
78
+ language={language}
79
+ languages={languages}
80
+ ></dx-sidebar-footer-nav>
81
+ </div>
82
+ </template>
83
+
84
+ <template if:false={mobile}>
85
+ <div if:true={hasSidebarFooter} class="footer-nav">
86
+ <dx-sidebar-footer-nav
87
+ lang-value-path={langValuePath}
88
+ language={language}
89
+ languages={languages}
90
+ bail-href={bailHref}
91
+ bail-label={bailLabel}
92
+ ></dx-sidebar-footer-nav>
93
+ </div>
73
94
  </template>
74
95
  </div>
75
96
  </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.
@@ -8,29 +8,65 @@ a {
8
8
  }
9
9
 
10
10
  .sidebar-item {
11
- padding: var(--dx-g-spacing-smd) var(--dx-g-spacing-md);
11
+ padding: var(--dx-g-spacing-smd) var(--dx-g-spacing-lg)
12
+ var(--dx-g-spacing-smd) var(--dx-g-spacing-2xl);
13
+ }
14
+
15
+ .sidebar-item:not(.sidebar-item-selected):focus-visible {
16
+ padding: calc(var(--dx-g-spacing-sm) - var(--dx-g-spacing-2xs)) 0;
17
+ margin: 0 var(--dx-g-spacing-lg) 0 var(--dx-g-spacing-2xl);
18
+ outline: var(--dx-g-spacing-2xs) solid var(--dx-g-blue-vibrant-40);
19
+ border-radius: var(--dx-g-spacing-2xs);
20
+ }
21
+
22
+ .sidebar-item-selected:focus-visible {
23
+ padding-top: 0;
24
+ padding-bottom: 0;
25
+ outline: none;
26
+
27
+ .search-result {
28
+ outline: var(--dx-g-spacing-2xs) solid var(--dx-g-blue-vibrant-40);
29
+ border-radius: var(--dx-g-spacing-2xs);
30
+ padding-top: calc(var(--dx-g-spacing-sm) - var(--dx-g-spacing-2xs));
31
+ padding-bottom: calc(var(--dx-g-spacing-sm) - var(--dx-g-spacing-2xs));
32
+ }
12
33
  }
13
34
 
14
35
  .search-text {
15
- font-size: var(--dx-g-text-xs);
36
+ font-size: var(--dx-g-text-sm);
16
37
  font-family: var(--dx-g-font-sans);
17
- line-height: 18px;
38
+ line-height: var(--dx-g-text-lg);
39
+ font-weight: var(--dx-g-font-bold);
18
40
  overflow-wrap: break-word;
19
41
  }
20
42
 
21
43
  .description {
22
44
  -webkit-line-clamp: 3;
23
45
  overflow-wrap: break-word;
46
+
47
+ --dx-g-text-body-color: var(--dx-g-blue-vibrant-20);
48
+
49
+ font-weight: var(--dx-g-font-normal);
24
50
  }
25
51
 
26
52
  .title {
27
53
  color: var(--dx-g-text-heading-color);
28
54
  }
29
55
 
56
+ .title:hover {
57
+ color: var(--dx-g-blue-vibrant-50);
58
+ }
59
+
30
60
  .bold {
31
61
  font-weight: 700;
32
62
  }
33
63
 
34
64
  a > *:not(:last-child) {
35
- margin-bottom: 2px;
65
+ margin-bottom: var(--dx-g-spacing-xs);
66
+ }
67
+
68
+ @media (max-width: 768px) {
69
+ .sidebar-item {
70
+ padding: var(--dx-g-spacing-smd) var(--dx-g-spacing-lg);
71
+ }
36
72
  }