@salesforcedevs/dx-components 0.10.1-alpha.13 → 0.10.1-alpha.133

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 (55) hide show
  1. package/lwc.config.json +3 -1
  2. package/package.json +2 -2
  3. package/src/assets/svg/docs-empty-state-small.svg +72 -0
  4. package/src/assets/svg/sidebar-loading.svg +34 -0
  5. package/src/modules/dx/cardGrid/__tests__/cardMockProps.ts +78 -148
  6. package/src/modules/dx/codeBlock/codeBlock.stories.ts +2 -69
  7. package/src/modules/dx/codeBlock/codeBlock.ts +5 -1
  8. package/src/modules/dx/codeBlock/darkTheme.css +0 -1
  9. package/src/modules/dx/codeBlock/lightTheme.css +0 -1
  10. package/src/modules/dx/emptyState/__tests__/emptyState.test.ts +29 -9
  11. package/src/modules/dx/emptyState/emptyState.css +14 -0
  12. package/src/modules/dx/emptyState/emptyState.html +2 -2
  13. package/src/modules/dx/emptyState/emptyState.stories.ts +8 -0
  14. package/src/modules/dx/emptyState/emptyState.ts +14 -0
  15. package/src/modules/dx/footer/links.ts +3 -5
  16. package/src/modules/dx/headerNav/__tests__/headerNav.test.ts +2 -4
  17. package/src/modules/dx/headerNav/headerNav.html +8 -6
  18. package/src/modules/dx/headerNav/headerNav.ts +2 -2
  19. package/src/modules/dx/lazy/lazy.ts +0 -7
  20. package/src/modules/dx/newsletterForm/newsletterForm.html +5 -3
  21. package/src/modules/dx/searchResults/coveo.css +314 -111
  22. package/src/modules/dx/sidebar/__tests__/mockDocContent.ts +48 -0
  23. package/src/modules/dx/sidebar/__tests__/mockPageReference.ts +8 -0
  24. package/src/modules/dx/sidebar/sidebar.css +38 -17
  25. package/src/modules/dx/sidebar/sidebar.html +62 -58
  26. package/src/modules/dx/sidebar/sidebar.stories.ts +53 -54
  27. package/src/modules/dx/sidebar/sidebar.ts +99 -10
  28. package/src/modules/dx/sidebarSearch/__tests__/mockPreloadedState.ts +8843 -0
  29. package/src/modules/dx/sidebarSearch/__tests__/sidebarSearch.test.ts +121 -0
  30. package/src/modules/dx/sidebarSearch/sidebarSearch.ts +282 -120
  31. package/src/modules/dx/sidebarSearch/utils.ts +2 -0
  32. package/src/modules/dx/sidebarSearchResult/__tests__/sidebarSearchResult.test.ts +55 -0
  33. package/src/modules/dx/sidebarSearchResult/sidebarSearchResult.css +12 -2
  34. package/src/modules/dx/sidebarSearchResult/sidebarSearchResult.html +1 -1
  35. package/src/modules/dx/sidebarSearchResult/sidebarSearchResult.ts +8 -2
  36. package/src/modules/dx/spinner/__tests__/spinner.test.ts +37 -0
  37. package/src/modules/dx/spinner/spinner.css +750 -0
  38. package/src/modules/dx/spinner/spinner.html +6 -0
  39. package/src/modules/dx/spinner/spinner.stories.ts +69 -0
  40. package/src/modules/dx/spinner/spinner.ts +20 -0
  41. package/src/modules/dx/{headerNavOption/__tests__/headerNavOption.test.ts → tab/__tests__/tab.test.ts} +40 -24
  42. package/src/modules/dx/{headerNavOption/headerNavOption.css → tab/tab.css} +24 -9
  43. package/src/modules/dx/{headerNavOption/headerNavOption.html → tab/tab.html} +5 -1
  44. package/src/modules/dx/tab/tab.stories.ts +57 -0
  45. package/src/modules/dx/{headerNavOption/headerNavOption.ts → tab/tab.ts} +26 -5
  46. package/src/modules/helpers/table/table.css +23 -7
  47. package/src/modules/utils/coveo/coveo.ts +50 -12
  48. package/src/modules/utils/highlight/__tests__/highlight.test.ts +154 -0
  49. package/src/modules/utils/highlight/highlight.ts +32 -0
  50. package/src/modules/utils/jest/jest.ts +35 -0
  51. package/src/modules/utils/normalizers/normalizers.ts +3 -0
  52. package/src/modules/utils/recentSearches/__tests__/recentSearches.test.ts +79 -0
  53. package/src/modules/utils/recentSearches/recentSearches.ts +12 -17
  54. package/src/modules/utils/regexps/regexps.ts +5 -0
  55. package/src/modules/utils/tests/tests.ts +18 -11
@@ -8,15 +8,12 @@ const render = createRenderComponent(TAG, EmptyState);
8
8
  describe(TAG, () => {
9
9
  it("renders", () => {
10
10
  const element = render(mockProps);
11
- const container: HTMLElement = element.shadowRoot.querySelector(
12
- ".container"
13
- );
14
- const renderedTitle: HTMLElement = element.shadowRoot.querySelector(
15
- "h3"
16
- );
17
- const renderedSubTitle: HTMLElement = element.shadowRoot.querySelector(
18
- "p"
19
- );
11
+ const container: HTMLElement =
12
+ element.shadowRoot.querySelector(".container");
13
+ const renderedTitle: HTMLElement =
14
+ element.shadowRoot.querySelector("h3");
15
+ const renderedSubTitle: HTMLElement =
16
+ element.shadowRoot.querySelector("p");
20
17
  const image: HTMLImageElement = element.shadowRoot.querySelector("img");
21
18
 
22
19
  expect(renderedTitle).not.toBeNull();
@@ -29,4 +26,27 @@ describe(TAG, () => {
29
26
 
30
27
  return expect(element).toBeAccessible();
31
28
  });
29
+
30
+ it("renders as the large variant by default", () => {
31
+ const element = render(mockProps);
32
+ const container: HTMLElement =
33
+ element.shadowRoot.querySelector(".container");
34
+ const image: HTMLImageElement = element.shadowRoot.querySelector("img");
35
+ expect(container.classList).toContain("size-large");
36
+ expect(container.classList).toHaveLength(2);
37
+ expect(image.src).not.toContain("-small.svg");
38
+ });
39
+
40
+ it("renders as the small variant when specified", () => {
41
+ const element = render({
42
+ ...mockProps,
43
+ size: "small"
44
+ });
45
+ const container: HTMLElement =
46
+ element.shadowRoot.querySelector(".container");
47
+ const image: HTMLImageElement = element.shadowRoot.querySelector("img");
48
+ expect(container.classList).toContain("size-small");
49
+ expect(container.classList).toHaveLength(2);
50
+ expect(image.src).toContain("-small.svg");
51
+ });
32
52
  });
@@ -24,6 +24,11 @@ img {
24
24
  min-width: var(--dx-c-empty-state-image-width);
25
25
  }
26
26
 
27
+ .size-small img {
28
+ width: calc(100% - 40px);
29
+ min-width: calc(100% - 40px);
30
+ }
31
+
27
32
  .text {
28
33
  position: absolute;
29
34
  top: 35%;
@@ -38,10 +43,19 @@ img {
38
43
  padding: 0 var(--dx-g-spacing-xl);
39
44
  }
40
45
 
46
+ .size-small .text {
47
+ top: 40%;
48
+ }
49
+
41
50
  .title {
42
51
  font-size: var(--dx-g-text-2xl);
43
52
  }
44
53
 
54
+ .size-small .title {
55
+ font-size: var(--dx-g-text-base);
56
+ white-space: nowrap;
57
+ }
58
+
45
59
  .subtitle {
46
60
  padding-top: var(--dx-g-spacing-sm);
47
61
  color: var(--dx-g-text-heading-color);
@@ -1,6 +1,6 @@
1
1
  <template>
2
- <div class="container" part="container">
3
- <img src="/assets/svg/docs-empty-state.svg" alt="Mountains" />
2
+ <div class={containerClassName} part="container">
3
+ <img src={imageAssetPath} alt="Mountains" />
4
4
  <div class="text">
5
5
  <h3 class="title dx-text-heading-3">{title}</h3>
6
6
  <p class="subtitle dx-text-body-2" if:true={subtitle}>{subtitle}</p>
@@ -20,6 +20,9 @@ const createStyles = () => html`
20
20
  width: 300px;
21
21
  display: block;
22
22
  }
23
+ .small-container {
24
+ width: 250px;
25
+ }
23
26
  </style>
24
27
  `;
25
28
 
@@ -34,4 +37,9 @@ export const Base = () => html`
34
37
 
35
38
  ${title("No subtitle and customized with style hooks")}
36
39
  <dx-empty-state id="styled" title="No Results"></dx-empty-state>
40
+
41
+ ${title("Small variant")}
42
+ <div class="small-container">
43
+ <dx-empty-state title="No Results" size="small"></dx-empty-state>
44
+ </div>
37
45
  `;
@@ -1,6 +1,20 @@
1
1
  import { LightningElement, api } from "lwc";
2
+ import { EmptyStateSize } from "typings/custom";
2
3
 
3
4
  export default class EmptyState extends LightningElement {
4
5
  @api title: string = "";
5
6
  @api subtitle?: string | null = null;
7
+ @api size?: EmptyStateSize = "large";
8
+
9
+ get containerClassName() {
10
+ return `container ${
11
+ !this.size || this.size === "large" ? "size-large" : "size-small"
12
+ }`;
13
+ }
14
+
15
+ get imageAssetPath() {
16
+ return `/assets/svg/docs-empty-state${
17
+ this.size === "small" ? "-small" : ""
18
+ }.svg`;
19
+ }
6
20
  }
@@ -45,7 +45,7 @@ export const generalLinksRaw = [
45
45
  label: "Community",
46
46
  options: [
47
47
  {
48
- href: "https://trailblazers.salesforce.com/",
48
+ href: "https://trailhead.salesforce.com/trailblazer-community/feed",
49
49
  label: "Trailblazer Community"
50
50
  },
51
51
  {
@@ -90,13 +90,11 @@ export const intellectualHref =
90
90
  export const termsLinks = [
91
91
  { href: privacyHref, label: "Privacy Statement" },
92
92
  {
93
- href:
94
- "https://trailblazer.me/resource/documents/documents/pdf/TermsOfUse_en_US.pdf",
93
+ href: "https://trailblazer.me/resource/documents/documents/pdf/TermsOfUse_en_US.pdf",
95
94
  label: "Terms of Use"
96
95
  },
97
96
  {
98
- href:
99
- "https://www.salesforce.com/company/privacy/full_privacy/#nav_info",
97
+ href: "https://www.salesforce.com/company/privacy/full_privacy/#nav_info",
100
98
  label: "Use of Cookies"
101
99
  },
102
100
  { href: "https://trust.salesforce.com/en/", label: "Trust" }
@@ -11,9 +11,7 @@ describe(TAG, () => {
11
11
  const element = render({ navItems });
12
12
 
13
13
  const items = element.shadowRoot.querySelectorAll(".nav-list-item");
14
- const dropdownItems = element.shadowRoot.querySelectorAll(
15
- "dx-header-nav-option"
16
- );
14
+ const dropdownItems = element.shadowRoot.querySelectorAll("dx-tab");
17
15
 
18
16
  // items with more options render something different on mobile and desktop whose display is toggled by `display: none;`
19
17
  const expectedItemLength =
@@ -34,7 +32,7 @@ describe(TAG, () => {
34
32
  const mockOpenNav = jest.fn();
35
33
  element.addEventListener("requestopennavmenu", mockOpenNav);
36
34
  const navOption: HTMLElement = element.shadowRoot.querySelector(
37
- "dx-header-nav-option.nav-list-item-nav-menu"
35
+ "dx-tab.nav-list-item-nav-menu"
38
36
  );
39
37
  expect(navOption).not.toBeNull();
40
38
  navOption.click();
@@ -3,13 +3,13 @@
3
3
  <ul class="nav-list">
4
4
  <template for:each={navItems} for:item="navItem">
5
5
  <li key={navItem.id}>
6
- <dx-header-nav-option
6
+ <dx-tab
7
7
  if:false={navItem.options}
8
8
  is-active={navItem.isActive}
9
9
  label={navItem.label}
10
10
  href={navItem.link.href}
11
11
  variant={variant}
12
- ></dx-header-nav-option>
12
+ ></dx-tab>
13
13
 
14
14
  <!-- DESKTOP "MORE CONTENT" NAV ITEM -->
15
15
  <dx-dropdown
@@ -23,21 +23,23 @@
23
23
  value={pathname}
24
24
  value-path="link.href"
25
25
  >
26
- <dx-header-nav-option
26
+ <dx-tab
27
27
  label={navItem.label}
28
28
  variant={variant}
29
- ></dx-header-nav-option>
29
+ use-icon
30
+ ></dx-tab>
30
31
  </dx-dropdown>
31
32
 
32
33
  <!-- MOBILE "MORE CONTENT" NAV ITEM -->
33
- <dx-header-nav-option
34
+ <dx-tab
34
35
  if:true={navItem.options}
35
36
  class="nav-list-item-nav-menu"
36
37
  data-id={navItem.id}
37
38
  label={navItem.label}
39
+ use-icon
38
40
  variant={variant}
39
41
  onclick={requestOpenNavMenu}
40
- ></dx-header-nav-option>
42
+ ></dx-tab>
41
43
  </li>
42
44
  </template>
43
45
  </ul>
@@ -1,8 +1,8 @@
1
1
  import { LightningElement, api } from "lwc";
2
- import { HeaderNavVariant, Option } from "typings/custom";
2
+ import { TabVariant, Option } from "typings/custom";
3
3
  export default class HeaderNav extends LightningElement {
4
4
  @api pathname: string | null = null;
5
- @api variant: HeaderNavVariant = "default";
5
+ @api variant: TabVariant = "default";
6
6
  @api ariaLabel: string = "Navigation Bar";
7
7
 
8
8
  @api
@@ -2,13 +2,6 @@ import { LightningElement, api } from "lwc";
2
2
 
3
3
  import { LazyMode } from "typings/custom";
4
4
 
5
- declare global {
6
- interface Window {
7
- requestIdleCallback: any;
8
- cancelIdleCallback: any;
9
- }
10
- }
11
-
12
5
  /**
13
6
  * Defines a fallback for BackgroundTasksAPI for browsers that doesn't support it.
14
7
  * Currently BackgroundTasksAPI is supported by all major browsers
@@ -4,9 +4,11 @@
4
4
  onchange={handleChange}
5
5
  onkeydown={handleKeyDown}
6
6
  >
7
- <h4 class="dx-text-heading-8">
8
- Sign up now to receive the newsletter.
9
- </h4>
7
+ <slot name="form-heading">
8
+ <h4 class="newsletter-form-heading dx-text-heading-8">
9
+ Sign up now to receive the newsletter.
10
+ </h4>
11
+ </slot>
10
12
  <dx-input
11
13
  name="fname"
12
14
  value={firstName}