@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.
- package/lwc.config.json +3 -1
- package/package.json +2 -2
- package/src/assets/svg/docs-empty-state-small.svg +72 -0
- package/src/assets/svg/sidebar-loading.svg +34 -0
- package/src/modules/dx/cardGrid/__tests__/cardMockProps.ts +78 -148
- package/src/modules/dx/codeBlock/codeBlock.stories.ts +2 -69
- package/src/modules/dx/codeBlock/codeBlock.ts +5 -1
- package/src/modules/dx/codeBlock/darkTheme.css +0 -1
- package/src/modules/dx/codeBlock/lightTheme.css +0 -1
- package/src/modules/dx/emptyState/__tests__/emptyState.test.ts +29 -9
- package/src/modules/dx/emptyState/emptyState.css +14 -0
- package/src/modules/dx/emptyState/emptyState.html +2 -2
- package/src/modules/dx/emptyState/emptyState.stories.ts +8 -0
- package/src/modules/dx/emptyState/emptyState.ts +14 -0
- package/src/modules/dx/footer/links.ts +3 -5
- package/src/modules/dx/headerNav/__tests__/headerNav.test.ts +2 -4
- package/src/modules/dx/headerNav/headerNav.html +8 -6
- package/src/modules/dx/headerNav/headerNav.ts +2 -2
- package/src/modules/dx/lazy/lazy.ts +0 -7
- package/src/modules/dx/newsletterForm/newsletterForm.html +5 -3
- package/src/modules/dx/searchResults/coveo.css +314 -111
- package/src/modules/dx/sidebar/__tests__/mockDocContent.ts +48 -0
- package/src/modules/dx/sidebar/__tests__/mockPageReference.ts +8 -0
- package/src/modules/dx/sidebar/sidebar.css +38 -17
- package/src/modules/dx/sidebar/sidebar.html +62 -58
- package/src/modules/dx/sidebar/sidebar.stories.ts +53 -54
- package/src/modules/dx/sidebar/sidebar.ts +99 -10
- package/src/modules/dx/sidebarSearch/__tests__/mockPreloadedState.ts +8843 -0
- package/src/modules/dx/sidebarSearch/__tests__/sidebarSearch.test.ts +121 -0
- package/src/modules/dx/sidebarSearch/sidebarSearch.ts +282 -120
- package/src/modules/dx/sidebarSearch/utils.ts +2 -0
- package/src/modules/dx/sidebarSearchResult/__tests__/sidebarSearchResult.test.ts +55 -0
- package/src/modules/dx/sidebarSearchResult/sidebarSearchResult.css +12 -2
- package/src/modules/dx/sidebarSearchResult/sidebarSearchResult.html +1 -1
- package/src/modules/dx/sidebarSearchResult/sidebarSearchResult.ts +8 -2
- package/src/modules/dx/spinner/__tests__/spinner.test.ts +37 -0
- package/src/modules/dx/spinner/spinner.css +750 -0
- package/src/modules/dx/spinner/spinner.html +6 -0
- package/src/modules/dx/spinner/spinner.stories.ts +69 -0
- package/src/modules/dx/spinner/spinner.ts +20 -0
- package/src/modules/dx/{headerNavOption/__tests__/headerNavOption.test.ts → tab/__tests__/tab.test.ts} +40 -24
- package/src/modules/dx/{headerNavOption/headerNavOption.css → tab/tab.css} +24 -9
- package/src/modules/dx/{headerNavOption/headerNavOption.html → tab/tab.html} +5 -1
- package/src/modules/dx/tab/tab.stories.ts +57 -0
- package/src/modules/dx/{headerNavOption/headerNavOption.ts → tab/tab.ts} +26 -5
- package/src/modules/helpers/table/table.css +23 -7
- package/src/modules/utils/coveo/coveo.ts +50 -12
- package/src/modules/utils/highlight/__tests__/highlight.test.ts +154 -0
- package/src/modules/utils/highlight/highlight.ts +32 -0
- package/src/modules/utils/jest/jest.ts +35 -0
- package/src/modules/utils/normalizers/normalizers.ts +3 -0
- package/src/modules/utils/recentSearches/__tests__/recentSearches.test.ts +79 -0
- package/src/modules/utils/recentSearches/recentSearches.ts +12 -17
- package/src/modules/utils/regexps/regexps.ts +5 -0
- 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 =
|
|
12
|
-
".container"
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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=
|
|
3
|
-
<img src=
|
|
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://
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
26
|
+
<dx-tab
|
|
27
27
|
label={navItem.label}
|
|
28
28
|
variant={variant}
|
|
29
|
-
|
|
29
|
+
use-icon
|
|
30
|
+
></dx-tab>
|
|
30
31
|
</dx-dropdown>
|
|
31
32
|
|
|
32
33
|
<!-- MOBILE "MORE CONTENT" NAV ITEM -->
|
|
33
|
-
<dx-
|
|
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-
|
|
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 {
|
|
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:
|
|
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
|
-
<
|
|
8
|
-
|
|
9
|
-
|
|
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}
|