@salesforcedevs/dx-components 0.10.1-alpha.144 → 0.10.1-alpha.148

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 (40) hide show
  1. package/lwc.config.json +1 -1
  2. package/package.json +2 -3
  3. package/src/.DS_Store +0 -0
  4. package/src/modules/.DS_Store +0 -0
  5. package/src/modules/dx/.DS_Store +0 -0
  6. package/src/modules/dx/banner/__tests__/banner.test.ts +31 -0
  7. package/src/modules/dx/{feedbackBanner/feedbackBanner.css → banner/banner.css} +6 -6
  8. package/src/modules/dx/banner/banner.html +13 -0
  9. package/src/modules/dx/banner/banner.ts +14 -0
  10. package/src/modules/dx/codeBlock/codeBlock.ts +21 -21
  11. package/src/modules/dx/dropdown/dropdown.html +2 -0
  12. package/src/modules/dx/dropdown/dropdown.ts +4 -2
  13. package/src/modules/dx/dropdownOption/__tests__/dropdownOption.test.ts +32 -2
  14. package/src/modules/dx/dropdownOption/dropdownOption.ts +9 -6
  15. package/src/modules/dx/emptyState/emptyState.css +2 -1
  16. package/src/modules/dx/footer/footer.ts +13 -1
  17. package/src/modules/dx/header/__tests__/header.test.ts +38 -21
  18. package/src/modules/dx/header/__tests__/mockProps.ts +22 -36
  19. package/src/modules/dx/header/header.html +4 -1
  20. package/src/modules/dx/header/header.stories.ts +30 -0
  21. package/src/modules/dx/header/header.ts +4 -1
  22. package/src/modules/dx/headerNav/headerNav.html +1 -0
  23. package/src/modules/dx/headerSearch/__tests__/headerSearch.test.ts +18 -34
  24. package/src/modules/dx/headerSearch/__tests__/mockProps.ts +12 -0
  25. package/src/modules/dx/newsletterForm/newsletterForm.ts +20 -11
  26. package/src/modules/dx/sidebar/__tests__/mockSearchChangeEmptyEvent.ts +6 -0
  27. package/src/modules/dx/sidebar/__tests__/mockSearchChangeEvent.ts +527 -0
  28. package/src/modules/dx/sidebar/__tests__/sidebar.test.ts +209 -177
  29. package/src/modules/dx/sidebar/sidebar.ts +17 -8
  30. package/src/modules/dx/sidebarSearch/__tests__/sidebarSearch.test.ts +24 -30
  31. package/src/modules/dx/sidebarSearch/sidebarSearch.ts +16 -21
  32. package/src/modules/dx/tree/tree.ts +0 -1
  33. package/src/modules/dx/treeTile/__tests__/treeTile.test.ts +26 -37
  34. package/src/modules/utils/headerBase/headerBase.ts +13 -2
  35. package/LICENSE +0 -12
  36. package/src/modules/dx/feedbackBanner/__tests__/feedbackBanner.test.ts +0 -19
  37. package/src/modules/dx/feedbackBanner/feedbackBanner.html +0 -13
  38. package/src/modules/dx/feedbackBanner/feedbackBanner.ts +0 -3
  39. package/src/modules/dx/sidebarSearch/utils.ts +0 -2
  40. package/src/modules/dx/tooltip/tippy.css +0 -1
package/lwc.config.json CHANGED
@@ -26,7 +26,7 @@
26
26
  "dx/featuredContentHeader",
27
27
  "dx/featureGrid",
28
28
  "dx/featuresList",
29
- "dx/feedbackBanner",
29
+ "dx/banner",
30
30
  "dx/footer",
31
31
  "dx/newsletterForm",
32
32
  "dx/formattedDateTime",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforcedevs/dx-components",
3
- "version": "0.10.1-alpha.144",
3
+ "version": "0.10.1-alpha.148",
4
4
  "description": "DX Lightning web components",
5
5
  "license": "MIT",
6
6
  "engines": {
@@ -28,6 +28,5 @@
28
28
  "@types/classnames": "^2.2.10",
29
29
  "@types/debounce": "^1.2.0",
30
30
  "@types/lodash.get": "^4.4.6"
31
- },
32
- "gitHead": "4cc21fc7e5a26c53794426454cbf630fe1d54413"
31
+ }
33
32
  }
package/src/.DS_Store ADDED
Binary file
Binary file
Binary file
@@ -0,0 +1,31 @@
1
+ import Banner from "dx/banner";
2
+ import { createRenderComponent } from "utils/tests";
3
+
4
+ const TAG = "dx-banner";
5
+ const render = createRenderComponent(TAG, Banner);
6
+
7
+ describe(TAG, () => {
8
+ it("renders banner component", () => {
9
+ const element = render();
10
+
11
+ const innerContainer = element.shadowRoot.querySelectorAll(
12
+ ".container_inner"
13
+ );
14
+
15
+ expect(innerContainer).not.toBeNull();
16
+
17
+ return expect(element).toBeAccessible();
18
+ });
19
+
20
+ it("renders custom banner markup in the banner", () => {
21
+ const element = render({ bannerMarkup: "Give feedback about our new site" });
22
+
23
+ const bannerContainer = element.shadowRoot.querySelector(
24
+ ".info-container"
25
+ );
26
+
27
+ return Promise.resolve().then(() => {
28
+ expect(bannerContainer.innerHTML).toContain('Give feedback about our new site')
29
+ });
30
+ });
31
+ });
@@ -1,7 +1,7 @@
1
1
  @import "helpers/reset";
2
2
  @import "helpers/text";
3
3
 
4
- .feedback {
4
+ .container {
5
5
  --primary-color: var(--dx-g-cloud-blue-vibrant-50);
6
6
  --secondary-color: var(--dx-g-cloud-blue-vibrant-40);
7
7
 
@@ -21,26 +21,26 @@
21
21
  );
22
22
  }
23
23
 
24
- .feedback_inner {
24
+ .container_inner {
25
25
  height: 100%;
26
26
  display: flex;
27
- align-items: center;
28
27
  background: var(--primary-color);
29
28
  padding: var(--dx-g-spacing-xs) var(--dx-g-spacing-sm);
30
29
  color: white;
31
30
  font-weight: bold;
32
31
  }
33
32
 
34
- .feedback a {
33
+ .container a {
35
34
  text-decoration: underline;
36
35
  transition: var(--dx-g-transition-hue-1x);
37
36
  margin-right: 4px;
38
37
  }
39
38
 
40
- .feedback a:hover {
39
+ .container a:hover {
41
40
  opacity: 0.8;
42
41
  }
43
42
 
44
- .feedback dx-icon {
43
+ .container dx-icon {
45
44
  margin-right: var(--dx-g-spacing-sm);
45
+ margin-top:var( --dx-g-spacing-2xs)
46
46
  }
@@ -0,0 +1,13 @@
1
+ <template>
2
+ <div class="container">
3
+ <div class="container_inner dx-text-body-4">
4
+ <dx-icon symbol="announcement"></dx-icon>
5
+ <!--
6
+ NOTE: Here we are rendering mark up using lwc:dom & innerHTML
7
+ option instead of slots because the html markup will come as a
8
+ property to the component from a configuration
9
+ -->
10
+ <div lwc:dom="manual" class="info-container"></div>
11
+ </div>
12
+ </div>
13
+ </template>
@@ -0,0 +1,14 @@
1
+ import { LightningElement, api } from "lwc";
2
+
3
+ export default class Banner extends LightningElement {
4
+ @api bannerMarkup =
5
+ '<span><a href="https://forms.gle/TdSyKFPHXoBx7seM9" target="blank">Share your feedback</a>about our new site.</span>';
6
+
7
+ renderedCallback(){
8
+ const container = this.template.querySelector(".info-container");
9
+ if(container){
10
+ // eslint-disable-next-line @lwc/lwc/no-inner-html
11
+ container.innerHTML = this.bannerMarkup
12
+ }
13
+ }
14
+ }
@@ -1,11 +1,11 @@
1
- import { LightningElement, api, track } from "lwc";
1
+ import { LightningElement, api, wire, track } from "lwc";
2
2
  import { CodeBlockTheme, CodeBlockLanguage } from "typings/custom";
3
3
  import cx from "classnames";
4
- // import Prism from "utils/prismjs";
5
- // import {
6
- // getLocalStorageData,
7
- // setLocalStorageData
8
- // } from "@sfdocs-internal/wires";
4
+ import Prism from "utils/prismjs";
5
+ import {
6
+ getLocalStorageData,
7
+ setLocalStorageData
8
+ } from "@sfdocs-internal/wires";
9
9
  import { track as gtmTrack } from "dx/instrumentation";
10
10
 
11
11
  // Used por remove enclosing <pre> tag's (if occurs)
@@ -13,8 +13,8 @@ const preTagRegexp: RegExp = /^<pre.*?>(.*)<\/pre>$/is;
13
13
 
14
14
  const LIGHT = "light";
15
15
  const DARK = "dark";
16
- // const themes: CodeBlockTheme[] = [LIGHT, DARK];
17
- // const LOCAL_STORAGE_KEY = "dx-codeblock-theme";
16
+ const themes: CodeBlockTheme[] = [LIGHT, DARK];
17
+ const LOCAL_STORAGE_KEY = "dx-codeblock-theme";
18
18
 
19
19
  export default class CodeBlock extends LightningElement {
20
20
  @api defaultTheme: CodeBlockTheme = LIGHT;
@@ -69,17 +69,17 @@ export default class CodeBlock extends LightningElement {
69
69
 
70
70
  @track private theme: CodeBlockTheme | null = null;
71
71
 
72
- // @wire(getLocalStorageData, { key: "dx-codeblock-theme" })
73
- // updateThemeForCodeblock(value: any) {
74
- // if (themes.includes(value)) {
75
- // this.theme = value;
76
- // } else {
77
- // setLocalStorageData(
78
- // LOCAL_STORAGE_KEY,
79
- // this.theme || this.defaultTheme
80
- // );
81
- // }
82
- // }
72
+ @wire(getLocalStorageData, { key: "dx-codeblock-theme" })
73
+ updateThemeForCodeblock(value: any) {
74
+ if (themes.includes(value)) {
75
+ this.theme = value;
76
+ } else {
77
+ setLocalStorageData(
78
+ LOCAL_STORAGE_KEY,
79
+ this.theme || this.defaultTheme
80
+ );
81
+ }
82
+ }
83
83
 
84
84
  get updateThemeBtnText(): string {
85
85
  return `Switch to ${this.theme === DARK ? "Light" : "Dark"} mode`;
@@ -134,7 +134,7 @@ export default class CodeBlock extends LightningElement {
134
134
  // eslint-disable-next-line
135
135
  codeBlockEl.innerHTML = "";
136
136
  codeBlockEl.appendChild(codeEl);
137
- // Prism.highlightAllUnder(codeBlockEl);
137
+ Prism.highlightAllUnder(codeBlockEl);
138
138
  });
139
139
 
140
140
  if (divEl) {
@@ -192,7 +192,7 @@ export default class CodeBlock extends LightningElement {
192
192
 
193
193
  updateTheme(event: any) {
194
194
  this.theme = this.theme === DARK ? LIGHT : DARK;
195
- // setLocalStorageData(LOCAL_STORAGE_KEY, this.theme);
195
+ setLocalStorageData(LOCAL_STORAGE_KEY, this.theme);
196
196
 
197
197
  gtmTrack(event.target, "custEv_codeBlock", {
198
198
  codeBlockAction: this.theme === DARK ? "darkmode" : "lightmode"
@@ -21,6 +21,7 @@
21
21
  >
22
22
  <template for:each={options} for:item="option">
23
23
  <dx-dropdown-option
24
+ analytics-event={analyticsEvent}
24
25
  active={option.active}
25
26
  key-value={option.keyValue}
26
27
  if:false={option.options}
@@ -39,6 +40,7 @@
39
40
  <span class="menu_heading">{option.label}</span>
40
41
  <template for:each={option.options} for:item="suboption">
41
42
  <dx-dropdown-option
43
+ analytics-event={analyticsEvent}
42
44
  active={suboption.active}
43
45
  key={suboption.id}
44
46
  key-value={suboption.keyValue}
@@ -29,8 +29,10 @@ export default class Dropdown extends LightningElement {
29
29
  @api small?: boolean = false;
30
30
  @api openOnHover?: boolean = false; // dropdown opens/closes with hover
31
31
  @api width?: string | null = null;
32
- @api fullWidth?: boolean | null;
33
- @api navItemLabel: string | null = null;
32
+ @api fullWidth?: boolean | null; @api navItemLabel: string | null = null;
33
+
34
+ // props forwarded to dropdown option
35
+ @api analyticsEvent: string | null = null
34
36
 
35
37
  @api
36
38
  get options() {
@@ -1,6 +1,7 @@
1
1
  import DropdownOption from "dx/dropdownOption";
2
2
  import { createRenderComponent } from "utils/tests";
3
3
  import { MOCK_BUTTON_PROPS, MOCK_LINK_PROPS } from "./mockProps";
4
+ import * as instrumentation from "dx/instrumentation";
4
5
 
5
6
  const TAG = "dx-dropdown-option";
6
7
  const render = createRenderComponent(TAG, DropdownOption);
@@ -13,6 +14,10 @@ const appendToMenu = (element: HTMLElement) => {
13
14
  };
14
15
 
15
16
  describe(TAG, () => {
17
+ beforeEach(() => {
18
+ jest.clearAllMocks();
19
+ });
20
+
16
21
  it("renders a button by default", () => {
17
22
  const component = render(MOCK_BUTTON_PROPS);
18
23
  expect(component.shadowRoot.querySelector("button")).not.toBeNull();
@@ -23,8 +28,8 @@ describe(TAG, () => {
23
28
 
24
29
  it("renders the correct label, description, and img", () => {
25
30
  const component = render(MOCK_BUTTON_PROPS);
26
- const label = component.shadowRoot.querySelector(".option_label")
27
- .textContent;
31
+ const label =
32
+ component.shadowRoot.querySelector(".option_label").textContent;
28
33
  expect(label).toEqual(MOCK_BUTTON_PROPS.option.label);
29
34
 
30
35
  const description = component.shadowRoot.querySelector(
@@ -79,4 +84,29 @@ describe(TAG, () => {
79
84
 
80
85
  expect(onClickMock).toBeCalled();
81
86
  });
87
+
88
+ it("fires analytics when given an analytics event", () => {
89
+ const track = jest.spyOn(instrumentation, "track");
90
+
91
+ const component = render({
92
+ ...MOCK_BUTTON_PROPS,
93
+ analyticsEvent: "mock"
94
+ });
95
+
96
+ const option = component.shadowRoot.querySelector(".option");
97
+ option.click();
98
+
99
+ expect(track).toHaveBeenCalledTimes(1);
100
+ });
101
+
102
+ it("doesn't fire analytics when not given an analytics event", () => {
103
+ const track = jest.spyOn(instrumentation, "track");
104
+
105
+ const component = render(MOCK_BUTTON_PROPS);
106
+
107
+ const option = component.shadowRoot.querySelector(".option");
108
+ option.click();
109
+
110
+ expect(track).not.toHaveBeenCalled();
111
+ });
82
112
  });
@@ -8,6 +8,7 @@ export default class DropdownOption extends LightningElement {
8
8
  @api keyValue!: string;
9
9
  @api active: boolean = false;
10
10
  @api navItemLabel: String | null = null;
11
+ @api analyticsEvent: string | null = null;
11
12
 
12
13
  @api focus() {
13
14
  const option = this.template.querySelector(".option");
@@ -26,11 +27,13 @@ export default class DropdownOption extends LightningElement {
26
27
  new CustomEvent("select", { detail: this.keyValue })
27
28
  );
28
29
 
29
- track(e.currentTarget, "custEv_topNavLinkClick", {
30
- navHeading: this.navItemLabel || undefined,
31
- navSubHeading: this.option.label || undefined,
32
- clickText: this.keyValue || undefined,
33
- pageLocation: window.location.pathname || undefined
34
- });
30
+ if (this.analyticsEvent && e.currentTarget) {
31
+ track(e.currentTarget, this.analyticsEvent, {
32
+ navHeading: this.navItemLabel || undefined,
33
+ navSubHeading: this.option.label || undefined,
34
+ clickText: this.keyValue || undefined,
35
+ pageLocation: window.location.pathname || undefined
36
+ });
37
+ }
35
38
  }
36
39
  }
@@ -25,8 +25,9 @@ img {
25
25
  }
26
26
 
27
27
  .size-small img {
28
+ max-width: 250px;
29
+ min-width: unset;
28
30
  width: calc(100% - 40px);
29
- min-width: calc(100% - 40px);
30
31
  }
31
32
 
32
33
  .text {
@@ -14,6 +14,12 @@ import { track } from "dx/instrumentation";
14
14
  const createNewsletterSignupHref = (email: string): string =>
15
15
  `/newsletter?subscriberEmail=${email}`;
16
16
 
17
+ const ANALYTICS_INFO = {
18
+ itemTitle: "Newsletter Sign Up Footer",
19
+ elementType: "button",
20
+ destinationType: "internal",
21
+ ctaClick: true
22
+ };
17
23
  export default class Footer extends LightningElement {
18
24
  @api locale: string | null = null;
19
25
  @api
@@ -85,7 +91,13 @@ export default class Footer extends LightningElement {
85
91
 
86
92
  private onSubmitEmail = async (e: CustomEvent) => {
87
93
  const href = createNewsletterSignupHref(e.detail);
88
- track(e.currentTarget, "custEv_newsletterSubscriptionStart");
94
+
95
+ track(e.currentTarget, "custEv_ctaButtonClick", {
96
+ ...ANALYTICS_INFO,
97
+ clickText: e.detail,
98
+ clickUrl: href,
99
+ });
100
+
89
101
  window.location.assign(href);
90
102
  };
91
103
 
@@ -9,23 +9,20 @@ import {
9
9
  mockPropsNoNavigation
10
10
  } from "./mockProps";
11
11
  import { track } from "dx/instrumentation";
12
+ import { ANALYTICS_INFO } from "utils/headerBase";
12
13
 
13
14
  const TAG = "dx-header";
14
15
  const render = createRenderComponent(TAG, Header);
15
16
 
16
17
  jest.mock("dx/instrumentation");
17
18
 
18
- const GTM_EVENT_NAME = "custEv_signupStart";
19
- const SIGN_UP_LABEL = "Sign Up";
20
-
21
19
  describe("dx-header", () => {
22
20
  it("renders", () => {
23
21
  const subtitle = "testsubtitle";
24
22
  const element = render({ ...mockPropsDevelopers, subtitle });
25
23
  const subtitleEl = element.shadowRoot.querySelector(".subtitle");
26
- const buttons: Array<HTMLElement> = element.shadowRoot.querySelectorAll(
27
- "dx-button"
28
- );
24
+ const buttons: Array<HTMLElement> =
25
+ element.shadowRoot.querySelectorAll("dx-button");
29
26
  const dropdown = element.shadowRoot.querySelector("dx-dropdown");
30
27
  const headerEl = element.shadowRoot.querySelector("dx-header-nav");
31
28
 
@@ -88,9 +85,8 @@ describe("dx-header", () => {
88
85
  ...mockPropsDevelopers,
89
86
  versions: JSON.stringify([version])
90
87
  });
91
- const dropdown: Dropdown = element.shadowRoot.querySelector(
92
- "dx-dropdown"
93
- );
88
+ const dropdown: Dropdown =
89
+ element.shadowRoot.querySelector("dx-dropdown");
94
90
  expect(dropdown).not.toBeNull();
95
91
  expect(dropdown.options).toHaveLength(1);
96
92
 
@@ -180,9 +176,8 @@ describe("dx-header", () => {
180
176
  bailLabel: "test",
181
177
  signupLink: "/"
182
178
  });
183
- const buttons: Array<Button> = element.shadowRoot.querySelectorAll(
184
- "dx-button"
185
- );
179
+ const buttons: Array<Button> =
180
+ element.shadowRoot.querySelectorAll("dx-button");
186
181
 
187
182
  expect(buttons[0].href).toEqual("/");
188
183
  expect(buttons[2].href).toEqual("test");
@@ -194,26 +189,48 @@ describe("dx-header", () => {
194
189
  subtitle: mockPropsDevelopers.subtitle,
195
190
  navItems: mockPropsDevelopers.navItems
196
191
  });
197
- const headerSearch = element.shadowRoot.querySelector(
198
- "dx-header-search"
199
- );
192
+ const headerSearch =
193
+ element.shadowRoot.querySelector("dx-header-search");
200
194
 
201
195
  expect(headerSearch).toBeNull();
202
196
  return expect(element).toBeAccessible();
203
197
  });
204
198
 
205
- it("signup button track is beign called", () => {
199
+ it("signup button track is being called", () => {
206
200
  const element = render(mockPropsDevelopers);
207
201
 
208
- const button: HTMLElement = element.shadowRoot.querySelector(
209
- "dx-button"
210
- );
202
+ const button: HTMLElement =
203
+ element.shadowRoot.querySelector("dx-button");
211
204
 
212
205
  button.click();
213
206
 
214
207
  expect(track).toBeCalledTimes(1);
215
- expect(track).toBeCalledWith(button, GTM_EVENT_NAME, {
216
- clickText: SIGN_UP_LABEL
208
+ expect(track).toBeCalledWith(button, "custEv_signupStart", {
209
+ ...ANALYTICS_INFO,
210
+ clickUrl: "/sign-up"
217
211
  });
218
212
  });
213
+
214
+ it("hides signup button when signupLink property is empty", () => {
215
+ const updatedMockPropsDevelopers = {
216
+ ...mockPropsDevelopers,
217
+ signupLink: ""
218
+ };
219
+ const element = render(updatedMockPropsDevelopers);
220
+ const signupButtonContainer: HTMLElement =
221
+ element.shadowRoot.querySelector(".header-login-signup");
222
+ expect(signupButtonContainer).toBeNull();
223
+ });
224
+
225
+ it("hides banner when banner markup is empty", () => {
226
+ const bannerMarkup = "";
227
+ const updatedMockPropsDevelopers = {
228
+ ...mockPropsDevelopers,
229
+ bannerMarkup
230
+ };
231
+ const element = render(updatedMockPropsDevelopers);
232
+ const bannerElement: HTMLElement =
233
+ element.shadowRoot.querySelector("dx-banner");
234
+ expect(bannerElement).toBeNull();
235
+ });
219
236
  });
@@ -43,6 +43,7 @@ const versions = JSON.stringify([
43
43
  export const mockPropsDevelopers = {
44
44
  navItems: JSON.stringify(mockNavDevelopers),
45
45
  subtitle: "Developers",
46
+ signupLink: "/sign-up",
46
47
  ...coveoConfig
47
48
  };
48
49
 
@@ -51,15 +52,22 @@ export const mockPropsNoNavigation = {
51
52
  ...coveoConfig
52
53
  };
53
54
 
55
+ export const mockPropsDevWebsite = {
56
+ version: "1",
57
+ versions,
58
+ ...coveoConfig,
59
+ signupLink: "/sign-up",
60
+ bannerMarkup:
61
+ '<span><a href="https://forms.gle/TdSyKFPHXoBx7seM9" target="blank">Share your feedback</a>about our new site.</span>'
62
+ };
63
+
54
64
  export const mockPropsEmployees = {
55
65
  bailHref: "/quip-dev-center",
56
66
  bailLabel: "Quip Development Center",
57
67
  brand: "employees",
58
68
  navItems: JSON.stringify(mockNavEmployees),
59
69
  subtitle: "Employees",
60
- version: "1",
61
- versions,
62
- ...coveoConfig
70
+ ...mockPropsDevWebsite
63
71
  };
64
72
 
65
73
  export const mockPropsMarketing = {
@@ -68,9 +76,7 @@ export const mockPropsMarketing = {
68
76
  brand: "marketing",
69
77
  navItems: JSON.stringify(mockNavMarketing),
70
78
  subtitle: "Marketing",
71
- version: "1",
72
- versions,
73
- ...coveoConfig
79
+ ...mockPropsDevWebsite
74
80
  };
75
81
 
76
82
  export const mockPropsPartners = {
@@ -79,9 +85,7 @@ export const mockPropsPartners = {
79
85
  brand: "partners",
80
86
  navItems: JSON.stringify(mockNavPartners),
81
87
  subtitle: "Partners",
82
- version: "1",
83
- versions,
84
- ...coveoConfig
88
+ ...mockPropsDevWebsite
85
89
  };
86
90
 
87
91
  export const mockPropsCommerce = {
@@ -90,9 +94,7 @@ export const mockPropsCommerce = {
90
94
  brand: "commerce",
91
95
  navItems: JSON.stringify(mockNavCommerce),
92
96
  subtitle: "Commerce",
93
- version: "1",
94
- versions,
95
- ...coveoConfig
97
+ ...mockPropsDevWebsite
96
98
  };
97
99
 
98
100
  export const mockPropsSales = {
@@ -101,9 +103,7 @@ export const mockPropsSales = {
101
103
  brand: "sales",
102
104
  navItems: JSON.stringify(mockNavSales),
103
105
  subtitle: "Sales",
104
- version: "1",
105
- versions,
106
- ...coveoConfig
106
+ ...mockPropsDevWebsite
107
107
  };
108
108
 
109
109
  export const mockPropsSuccess = {
@@ -112,9 +112,7 @@ export const mockPropsSuccess = {
112
112
  brand: "success",
113
113
  navItems: JSON.stringify(mockNavSuccess),
114
114
  subtitle: "Success",
115
- version: "1",
116
- versions,
117
- ...coveoConfig
115
+ ...mockPropsDevWebsite
118
116
  };
119
117
 
120
118
  export const mockPropsIntegration = {
@@ -123,9 +121,7 @@ export const mockPropsIntegration = {
123
121
  brand: "integration",
124
122
  navItems: JSON.stringify(mockNavIntegration),
125
123
  subtitle: "Integration",
126
- version: "1",
127
- versions,
128
- ...coveoConfig
124
+ ...mockPropsDevWebsite
129
125
  };
130
126
 
131
127
  export const mockPropsPlatform = {
@@ -134,9 +130,7 @@ export const mockPropsPlatform = {
134
130
  brand: "platform",
135
131
  navItems: JSON.stringify(mockNavPlatform),
136
132
  subtitle: "Platform",
137
- version: "1",
138
- versions,
139
- ...coveoConfig
133
+ ...mockPropsDevWebsite
140
134
  };
141
135
 
142
136
  export const mockPropsIndustries = {
@@ -145,9 +139,7 @@ export const mockPropsIndustries = {
145
139
  brand: "industries",
146
140
  navItems: JSON.stringify(mockNavIndustries),
147
141
  subtitle: "Industries",
148
- version: "1",
149
- versions,
150
- ...coveoConfig
142
+ ...mockPropsDevWebsite
151
143
  };
152
144
 
153
145
  export const mockPropsLearning = {
@@ -156,9 +148,7 @@ export const mockPropsLearning = {
156
148
  brand: "learning",
157
149
  navItems: JSON.stringify(mockNavLearning),
158
150
  subtitle: "Learning",
159
- version: "1",
160
- versions,
161
- ...coveoConfig
151
+ ...mockPropsDevWebsite
162
152
  };
163
153
 
164
154
  export const mockPropsService = {
@@ -167,9 +157,7 @@ export const mockPropsService = {
167
157
  brand: "service",
168
158
  navItems: JSON.stringify(mockNavService),
169
159
  subtitle: "Service",
170
- version: "1",
171
- versions,
172
- ...coveoConfig
160
+ ...mockPropsDevWebsite
173
161
  };
174
162
 
175
163
  export const mockPropsAnalytics = {
@@ -178,7 +166,5 @@ export const mockPropsAnalytics = {
178
166
  brand: "analytics",
179
167
  navItems: JSON.stringify(mockNavAnalytics),
180
168
  subtitle: "Analytics",
181
- version: "1",
182
- versions,
183
- ...coveoConfig
169
+ ...mockPropsDevWebsite
184
170
  };
@@ -1,7 +1,10 @@
1
1
  <template>
2
2
  <dx-brand-theme-provider brand={brand}>
3
3
  <header class={className}>
4
- <dx-feedback-banner></dx-feedback-banner>
4
+ <dx-banner
5
+ if:true={bannerMarkup}
6
+ banner-markup={bannerMarkup}
7
+ ></dx-banner>
5
8
  <div class="header_l1">
6
9
  <dx-breadcrumbs
7
10
  title={title}