@salesforcedevs/dx-components 1.3.242 → 1.3.243-newdocux-alpha6

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 (33) hide show
  1. package/lwc.config.json +1 -0
  2. package/package.json +2 -3
  3. package/src/modules/dx/button/button.html +2 -2
  4. package/src/modules/dx/button/button.ts +1 -1
  5. package/src/modules/dx/coveoRecommendations/coveoRecommendations.html +20 -22
  6. package/src/modules/dx/coveoRecommendations/coveoRecommendations.ts +38 -3
  7. package/src/modules/dx/dropdownOption/dropdownOption.css +5 -3
  8. package/src/modules/dx/headerNav/headerNav.css +9 -0
  9. package/src/modules/dx/mainContentHeader/mainContentHeader.css +74 -2
  10. package/src/modules/dx/mainContentHeader/mainContentHeader.html +48 -23
  11. package/src/modules/dx/mainContentHeader/mainContentHeader.ts +20 -5
  12. package/src/modules/dx/popover/popover.css +2 -2
  13. package/src/modules/dx/sidebar/sidebar.css +9 -5
  14. package/src/modules/dx/sidebar/sidebar.html +32 -16
  15. package/src/modules/dx/sidebar/sidebar.ts +2 -42
  16. package/src/modules/dx/sidebarFooterNav/sidebarFooterNav.css +49 -0
  17. package/src/modules/dx/sidebarFooterNav/sidebarFooterNav.html +55 -0
  18. package/src/modules/dx/sidebarFooterNav/sidebarFooterNav.ts +106 -0
  19. package/src/modules/dx/sidebarOld/sidebarOld.css +1 -0
  20. package/src/modules/dx/sidebarOld/sidebarOld.html +31 -14
  21. package/src/modules/dx/sidebarOld/sidebarOld.ts +4 -38
  22. package/src/modules/dx/sidebarSearchResult/sidebarSearchResult.css +35 -4
  23. package/src/modules/dx/sidebarSearchResult/sidebarSearchResult.html +16 -10
  24. package/src/modules/dx/tab/tab.css +48 -19
  25. package/src/modules/dx/treeItem/treeItem.css +2 -2
  26. package/src/modules/dx/treeTile/treeTile.css +39 -28
  27. package/src/modules/dx/treeTile/treeTile.html +6 -6
  28. package/src/modules/dx/treeTile/treeTile.ts +2 -1
  29. package/src/modules/dxBaseElements/sidebarBase/sidebarBase.ts +100 -1
  30. package/src/modules/dxHelpers/commonHeader/commonHeader.css +4 -2
  31. package/src/modules/dxHelpers/commonSidebar/commonSidebar.css +38 -16
  32. package/src/modules/dxHelpers/commonTreeItem/commonTreeItem.css +26 -3
  33. package/LICENSE +0 -12
package/lwc.config.json CHANGED
@@ -78,6 +78,7 @@
78
78
  "dx/select",
79
79
  "dx/sidebar",
80
80
  "dx/sidebarOld",
81
+ "dx/sidebarFooterNav",
81
82
  "dx/skipNavLink",
82
83
  "dx/socials",
83
84
  "dx/spinner",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforcedevs/dx-components",
3
- "version": "1.3.242",
3
+ "version": "1.3.243-newdocux-alpha6",
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": "f53c5d4c4cf5fe27cc7c9cb520d2a93f8bc82973"
46
+ }
48
47
  }
@@ -7,7 +7,7 @@
7
7
  aria-label={ariaLabel}
8
8
  part="container"
9
9
  >
10
- <span if:false={loading}>
10
+ <span if:false={loading} part="content">
11
11
  <slot onslotchange={onSlotChange}></slot>
12
12
  </span>
13
13
  <dx-icon
@@ -29,7 +29,7 @@
29
29
  aria-label={ariaLabel}
30
30
  part="container"
31
31
  >
32
- <span if:false={loading}>
32
+ <span if:false={loading} part="content">
33
33
  <slot onslotchange={onSlotChange}></slot>
34
34
  </span>
35
35
  <dx-icon
@@ -80,6 +80,6 @@ export default class Button extends LightningElement {
80
80
 
81
81
  private onSlotChange(e: LightningSlotElement) {
82
82
  const slot = e.target;
83
- this.isSlotEmpty = slot.assignedElements().length !== 0;
83
+ this.isSlotEmpty = slot.assignedNodes().length === 0;
84
84
  }
85
85
  }
@@ -6,27 +6,25 @@
6
6
  ></dx-hr>
7
7
 
8
8
  <dx-section lwc:if={showRecommendations} class="section-reduced-padding">
9
- <dx-section class="section-reduced-padding">
10
- <dx-spinner lwc:if={recommendationsLoading}>
11
- <div class="spinner-container">
12
- <dx-spinner size="large" variant="brand"></dx-spinner>
13
- </div>
14
- </dx-spinner>
15
- <dx-grid columns="three" class="recent-posts">
16
- <template for:each={recommendations} for:item="recommendation">
17
- <dx-card-blog-post
18
- authors={recommendation.authors}
19
- body={recommendation.yoast_head_json.description}
20
- datetime={recommendation.yoast_head_json.article_published_time}
21
- href={recommendation.yoast_head_json.canonical}
22
- img-alt={recommendation.yoast_head_json.title}
23
- img-src={recommendation.featured_image}
24
- key={recommendation.id}
25
- title={recommendation.yoast_head_json.title}
26
- origin="coveo"
27
- ></dx-card-blog-post>
28
- </template>
29
- </dx-grid>
30
- </dx-section>
9
+ <dx-spinner lwc:if={recommendationsLoading}>
10
+ <div class="spinner-container">
11
+ <dx-spinner size="large" variant="brand"></dx-spinner>
12
+ </div>
13
+ </dx-spinner>
14
+ <dx-grid columns="three" class="recent-posts">
15
+ <template for:each={recommendations} for:item="recommendation">
16
+ <dx-card-blog-post
17
+ authors={recommendation.authors}
18
+ body={recommendation.yoast_head_json.description}
19
+ datetime={recommendation.yoast_head_json.article_published_time}
20
+ href={recommendation.yoast_head_json.canonical}
21
+ img-alt={recommendation.yoast_head_json.title}
22
+ img-src={recommendation.featured_image}
23
+ key={recommendation.id}
24
+ title={recommendation.yoast_head_json.title}
25
+ origin="coveo"
26
+ ></dx-card-blog-post>
27
+ </template>
28
+ </dx-grid>
31
29
  </dx-section>
32
30
  </template>
@@ -1,7 +1,9 @@
1
1
  import { LightningElement, api } from "lwc";
2
2
 
3
+ const SEARCH_HUB = "developerWebsiteBlogs";
3
4
  export default class CoveoRecommendations extends LightningElement {
4
5
  @api coveoAuthToken!: string;
6
+ @api coveoOrganizationId!: string;
5
7
 
6
8
  _recommendations = [] as any[];
7
9
 
@@ -17,6 +19,7 @@ export default class CoveoRecommendations extends LightningElement {
17
19
  "__coveo.analytics.history"
18
20
  );
19
21
  const url = "https://platform.cloud.coveo.com/rest/search/v2";
22
+ const searchStart = performance.now();
20
23
  fetch(url, {
21
24
  headers: {
22
25
  Authorization: `Bearer ${this.coveoAuthToken}`,
@@ -25,14 +28,22 @@ export default class CoveoRecommendations extends LightningElement {
25
28
  method: "POST",
26
29
  body: JSON.stringify({
27
30
  pipeline: "Recommendations_Developer_Blogs",
28
- searchHub: "developerWebsiteBlogs",
31
+ searchHub: SEARCH_HUB,
29
32
  numberOfResults: 3,
30
- actionsHistory: JSON.parse(actionsHistory!)
33
+ actionsHistory: JSON.parse(actionsHistory!),
34
+ isGuestUser: true
31
35
  })
32
36
  }).then(
33
37
  async (response) => {
34
38
  try {
35
- const results = (await response.json()).results;
39
+ const json = await response.json();
40
+ const results = json.results;
41
+
42
+ this.logSearchAnalytics(
43
+ json.searchUid,
44
+ performance.now() - searchStart
45
+ );
46
+
36
47
  const blogDataLoadTasks = results
37
48
  .slice(0, 3)
38
49
  .map(async (rec: any) => {
@@ -57,4 +68,28 @@ export default class CoveoRecommendations extends LightningElement {
57
68
  }
58
69
  );
59
70
  }
71
+
72
+ logSearchAnalytics = (uid: string, time: number) => {
73
+ const payload = {
74
+ anonymous: true,
75
+ language: "en",
76
+ originLevel1: SEARCH_HUB,
77
+ originLevel2: SEARCH_HUB,
78
+ actionCause: "recommendationInterfaceLoad",
79
+ queryText: "", // This has to be included, but is empty, because recommendations use the 'search' endpoint with an empty query string
80
+ responseTime: time,
81
+ searchQueryUid: uid
82
+ };
83
+ fetch(
84
+ `https://${this.coveoOrganizationId}.analytics.org.coveo.com/rest/ua/v15/analytics/search`,
85
+ {
86
+ headers: {
87
+ Authorization: `Bearer ${this.coveoAuthToken}`,
88
+ "Content-Type": "application/json"
89
+ },
90
+ method: "POST",
91
+ body: JSON.stringify(payload)
92
+ }
93
+ );
94
+ };
60
95
  }
@@ -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
  }
@@ -1,10 +1,25 @@
1
1
  @import "dxHelpers/reset";
2
2
  @import "dxHelpers/text";
3
3
 
4
+ :host {
5
+ --dx-c-padding: 0 var(--dx-g-page-padding-horizontal);
6
+ --dx-c-container-justify-content: left;
7
+ }
8
+
9
+ dx-formatted-rich-text {
10
+ --dx-c-formatted-rich-text-inline-link-color: var(
11
+ --dx-g-cloud-blue-vibrant-95
12
+ );
13
+ --dx-c-formatted-rich-text-inline-link-color-hover: var(
14
+ --dx-g-blue-vibrant-70
15
+ );
16
+ }
17
+
4
18
  .container {
5
19
  display: flex;
6
20
  flex-direction: row;
7
- padding: 0 var(--dx-g-page-padding-horizontal);
21
+ padding: var(--dx-c-padding);
22
+ justify-content: var(--dx-c-container-justify-content);
8
23
  overflow: hidden;
9
24
  }
10
25
 
@@ -62,6 +77,29 @@ img.mobile {
62
77
  min-width: 1024px;
63
78
  }
64
79
 
80
+ .multiple-image-container {
81
+ position: relative;
82
+ max-width: 646px;
83
+ }
84
+
85
+ .image-one {
86
+ display: block;
87
+ position: absolute;
88
+ left: 0;
89
+ bottom: 0;
90
+ width: 418px;
91
+ height: 515px;
92
+ }
93
+
94
+ .image-two {
95
+ display: block;
96
+ position: absolute;
97
+ right: 0;
98
+ bottom: 0;
99
+ width: 341px;
100
+ height: 339px;
101
+ }
102
+
65
103
  .text-container > *:not(:last-child) {
66
104
  margin-bottom: var(--dx-g-spacing-smd);
67
105
  }
@@ -76,6 +114,16 @@ svg {
76
114
  bottom: 60px;
77
115
  }
78
116
 
117
+ .foot-note-container {
118
+ display: flex;
119
+ }
120
+
121
+ @media screen and (min-width: 1024px) {
122
+ .text-container {
123
+ text-align: left;
124
+ }
125
+ }
126
+
79
127
  @media screen and (max-width: 1024px) {
80
128
  .container {
81
129
  flex-direction: column;
@@ -87,12 +135,15 @@ svg {
87
135
 
88
136
  .text-container {
89
137
  align-items: center;
90
- text-align: center;
91
138
  padding-top: var(--dx-g-spacing-4xl);
92
139
  padding-bottom: 0;
93
140
  min-height: unset;
94
141
  }
95
142
 
143
+ .button-container {
144
+ justify-content: center;
145
+ }
146
+
96
147
  .text-container > * {
97
148
  max-width: 700px;
98
149
  }
@@ -109,6 +160,10 @@ svg {
109
160
  display: block;
110
161
  margin-top: var(--dx-g-spacing-3xl);
111
162
  }
163
+
164
+ .multiple-image-container {
165
+ display: none;
166
+ }
112
167
  }
113
168
 
114
169
  @media screen and (max-width: 768px) {
@@ -123,3 +178,20 @@ svg {
123
178
  line-height: var(--dx-g-text-4xl);
124
179
  }
125
180
  }
181
+ @media screen and (min-width: 479px) and (max-width: 1024px) {
182
+ .text-container {
183
+ text-align: center;
184
+ }
185
+ }
186
+
187
+ @media screen and (min-width: 479px) {
188
+ .foot-note-image {
189
+ display: none;
190
+ }
191
+ }
192
+
193
+ @media screen and (max-width: 479px) {
194
+ .foot-note-image {
195
+ object-fit: contain;
196
+ }
197
+ }
@@ -3,37 +3,62 @@
3
3
  <div class={textStyle}>
4
4
  <h1 class="heading dx-text-display-2">{title}</h1>
5
5
  <span class="body dx-text-body-1">{body}</span>
6
- <span if:true={subtitle} class="subtitle dx-text-display-7">
6
+ <span lwc:if={subtitle} class="subtitle dx-text-display-7">
7
7
  {subtitle}
8
8
  </span>
9
- <div class="button-container">
10
- <dx-button
11
- onclick={onCtaClick}
12
- href={ctaHref}
13
- target={ctaTarget}
14
- size="large"
15
- >
16
- {ctaLabel}
17
- </dx-button>
18
- <dx-button
19
- class="secondary-button"
20
- if:true={ctaLabelSecondary}
21
- onclick={onCtaClickSecondary}
22
- href={ctaHrefSecondary}
23
- target={ctaTargetSecondary}
24
- size="large"
25
- variant="secondary"
26
- >
27
- {ctaLabelSecondary}
28
- </dx-button>
9
+ <div class="foot-note-container">
10
+ <div class="foot-note-text-button-container">
11
+ <span
12
+ lwc:if={footNote}
13
+ class="dx-text-body-4"
14
+ style={footNoteStyle}
15
+ >
16
+ <dx-formatted-rich-text
17
+ value={footNote}
18
+ ></dx-formatted-rich-text>
19
+ </span>
20
+ <div class="button-container">
21
+ <dx-button
22
+ onclick={onCtaClick}
23
+ href={ctaHref}
24
+ target={ctaTarget}
25
+ size="large"
26
+ >
27
+ {ctaLabel}
28
+ </dx-button>
29
+ <dx-button
30
+ class="secondary-button"
31
+ lwc:if={ctaLabelSecondary}
32
+ onclick={onCtaClickSecondary}
33
+ href={ctaHrefSecondary}
34
+ target={ctaTargetSecondary}
35
+ size="large"
36
+ variant="secondary"
37
+ >
38
+ {ctaLabelSecondary}
39
+ </dx-button>
40
+ </div>
41
+ </div>
42
+ <img
43
+ lwc:if={footNoteImage}
44
+ class="foot-note-image"
45
+ src={footNoteImage}
46
+ alt={footNoteImageAlt}
47
+ width={footNoteImageWidth}
48
+ height={footNoteImageHeight}
49
+ />
29
50
  </div>
30
51
  </div>
31
- <div class="image-container">
52
+ <div lwc:if={multipleImages} class="multiple-image-container">
53
+ <img class="image-one" src={imgSrcOne} alt="" />
54
+ <img class="image-two" src={imgSrcTwo} alt="" />
55
+ </div>
56
+ <div lwc:else class="image-container">
32
57
  <img class="desktop" src={imgSrc} alt="" />
33
58
  <img class="mobile" src={imgSrcMobile} alt="" />
34
59
  </div>
35
60
  </div>
36
- <template if:true={hasSwoop}>
61
+ <template lwc:if={hasSwoop}>
37
62
  <svg
38
63
  width="500"
39
64
  height="80"
@@ -6,17 +6,26 @@ export default class MainContentHeader extends LightningElement {
6
6
  @api title!: string;
7
7
  @api subtitle?: string;
8
8
  @api body!: string;
9
+ @api footNote?: string;
10
+ @api footNoteImage?: string;
11
+ @api footNoteImageAlt?: string;
12
+ @api footNoteImageHeight?: string;
13
+ @api footNoteImageWidth?: string;
9
14
  @api ctaLabel!: string;
10
15
  @api ctaLabelSecondary?: string;
11
16
  @api ctaHref!: string;
12
17
  @api ctaHrefSecondary?: string;
13
- @api imgSrc!: string;
14
- @api imgSrcMobile!: string;
18
+ @api imgSrc?: string;
19
+ @api imgSrcMobile?: string;
15
20
  @api ctaTarget?: string | null = null;
16
21
  @api ctaTargetSecondary?: string | null = null;
17
22
  @api backgroundGradientColor?: string;
18
- @api backgroundGradientDark: boolean = false;
19
- @api hasSwoop: boolean = false;
23
+ @api backgroundImage?: string;
24
+ @api backgroundGradientDark = false;
25
+ @api hasSwoop = false;
26
+ @api multipleImages = false;
27
+ @api imgSrcOne?: string;
28
+ @api imgSrcTwo?: string;
20
29
 
21
30
  private get style() {
22
31
  return cx(
@@ -24,7 +33,9 @@ export default class MainContentHeader extends LightningElement {
24
33
  !this.backgroundGradientDark &&
25
34
  `background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, #ffff 100%), var(--dx-g-${this.backgroundGradientColor});`,
26
35
  this.backgroundGradientDark &&
27
- `background: linear-gradient(90deg, var(--dx-g-indigo-vibrant-20) 0%, var(--dx-g-indigo-vibrant-30) 100%);`
36
+ `background: linear-gradient(90deg, var(--dx-g-indigo-vibrant-20) 0%, var(--dx-g-indigo-vibrant-30) 100%);`,
37
+ this.backgroundImage &&
38
+ `background: #260F8F url('${this.backgroundImage}') no-repeat bottom; background-size: cover;`
28
39
  );
29
40
  }
30
41
 
@@ -35,6 +46,10 @@ export default class MainContentHeader extends LightningElement {
35
46
  );
36
47
  }
37
48
 
49
+ private get footNoteStyle() {
50
+ return cx(this.backgroundGradientDark && "color: white;");
51
+ }
52
+
38
53
  private onCtaClick(e: Event) {
39
54
  if (e.currentTarget) {
40
55
  track(e.currentTarget, "custEv_ctaButtonClick", {
@@ -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-2xl);
19
19
  }
20
20
 
21
21
  .loading-skeleton {
@@ -53,6 +53,14 @@ 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
+ padding-top: var(--dx-g-spacing-smd);
61
+ font-weight: var(--dx-g-font-bold);
62
+ }
63
+
56
64
  @media (max-width: 768px) {
57
65
  :host {
58
66
  width: 100%;
@@ -61,8 +69,4 @@ dx-empty-state {
61
69
  .loading-skeleton {
62
70
  width: 100%;
63
71
  }
64
-
65
- .sidebar-content-tree {
66
- padding: 0 var(--dx-g-spacing-sm);
67
- }
68
72
  }
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <div class={containerClass} part="container">
3
3
  <div
4
- if:true={mobile}
4
+ lwc:if={mobile}
5
5
  class="header padding-horizontal"
6
6
  onclick={onToggleClick}
7
7
  >
@@ -16,22 +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
- <div class="sidebar-header padding-horizontal">
26
- <div class="header" if:false={mobile}>
25
+ <div class="sidebar-header" show-shadow={showBoxShadow}>
26
+ <div class="header padding-horizontal" lwc:if={isDesktop}>
27
27
  <h2 class="dx-text-display-6 header-title">{header}</h2>
28
- <slot name="header"></slot>
29
28
  </div>
30
- <div class="mobile-header" if:true={mobile}>
31
- <h2 class="dx-text-display-6">{header}</h2>
32
- <slot name="header"></slot>
33
- </div>
34
- <div class="search">
29
+ <div class="search padding-horizontal">
35
30
  <dx-sidebar-search
36
31
  onchange={onSearchChange}
37
32
  onloading={onSearchLoading}
@@ -41,9 +36,10 @@
41
36
  coveo-advanced-query-config={coveoAdvancedQueryConfig}
42
37
  ></dx-sidebar-search>
43
38
  </div>
39
+ <slot name="version-picker"></slot>
44
40
  <h2
45
- class="results-heading dx-text-display-8"
46
- if:true={showResultsHeading}
41
+ class="results-heading dx-text-body-3 padding-horizontal"
42
+ lwc:if={showResultsHeading}
47
43
  >
48
44
  Results
49
45
  </h2>
@@ -53,13 +49,13 @@
53
49
  onscroll={onSidebarSearchContentScroll}
54
50
  >
55
51
  <img
56
- if:true={isSearchLoading}
52
+ lwc:if={isSearchLoading}
57
53
  class="loading-skeleton padding-horizontal"
58
54
  src="https://a.sfdcstatic.com/developer-website/images/sidebar-loading.svg"
59
55
  alt="loading"
60
56
  />
61
57
  <template
62
- if:true={showSearchResults}
58
+ lwc:if={showSearchResults}
63
59
  for:each={searchResults}
64
60
  for:item="result"
65
61
  >
@@ -83,7 +79,7 @@
83
79
  size="small"
84
80
  ></dx-empty-state>
85
81
  </div>
86
- <div class="sidebar-content sidebar-content-tree">
82
+ <div class={sidebarContentClass} onscroll={handleScroll}>
87
83
  <dx-tree
88
84
  for:each={trees}
89
85
  for:item="tree"
@@ -95,5 +91,25 @@
95
91
  onselecteditemrendered={onSelectedItemRendered}
96
92
  ></dx-tree>
97
93
  </div>
94
+ <template lwc:if={mobile}>
95
+ <div lwc:if={hasMobileSidebarFooter} class="footer-nav">
96
+ <dx-sidebar-footer-nav
97
+ lang-value-path={langValuePath}
98
+ language={language}
99
+ languages={languages}
100
+ ></dx-sidebar-footer-nav>
101
+ </div>
102
+ </template>
103
+ <template lwc:else>
104
+ <div lwc:if={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>
98
114
  </div>
99
115
  </template>