@salesforcedevs/dx-components 0.10.0 → 0.10.1-alpha.100
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 -3
- package/package.json +3 -4
- package/src/.DS_Store +0 -0
- package/src/assets/svg/docs-empty-state-small.svg +72 -0
- package/src/assets/svg/sidebar-loading.svg +34 -0
- package/src/modules/.DS_Store +0 -0
- package/src/modules/dx/.DS_Store +0 -0
- package/src/modules/dx/cardGrid/__tests__/cardMockProps.ts +78 -148
- package/src/modules/dx/cardGrid/cardGrid.css +0 -32
- package/src/modules/dx/cardGrid/cardGrid.html +5 -11
- package/src/modules/dx/codeBlock/__tests__/codeBlock.test.ts +47 -5
- package/src/modules/dx/codeBlock/codeBlock.stories.ts +2 -69
- package/src/modules/dx/codeBlock/codeBlock.ts +43 -22
- 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 -10
- package/src/modules/dx/emptyState/__tests__/mockProps.ts +1 -3
- package/src/modules/dx/emptyState/emptyState.css +45 -13
- package/src/modules/dx/emptyState/emptyState.html +6 -4
- package/src/modules/dx/emptyState/emptyState.stories.ts +18 -38
- package/src/modules/dx/emptyState/emptyState.ts +11 -20
- package/src/modules/dx/footer/links.ts +3 -5
- package/src/modules/dx/header/__tests__/mockProps.ts +7 -1
- 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/headerSearch/headerSearch.html +2 -4
- package/src/modules/dx/headerSearch/headerSearch.ts +19 -25
- package/src/modules/dx/newsletterForm/newsletterForm.html +5 -3
- package/src/modules/dx/popover/popover.ts +11 -7
- package/src/modules/dx/searchResults/coveo.css +314 -111
- package/src/modules/dx/sidebar/__tests__/sidebar.test.ts +0 -70
- package/src/modules/dx/sidebar/sidebar.css +42 -23
- package/src/modules/dx/sidebar/sidebar.html +62 -40
- package/src/modules/dx/sidebar/sidebar.stories.ts +54 -4
- package/src/modules/dx/sidebar/sidebar.ts +126 -66
- package/src/modules/dx/sidebarSearch/__tests__/preloadedState.ts +3459 -0
- package/src/modules/dx/sidebarSearch/__tests__/sidebarSearch.test.ts +44 -0
- package/src/modules/dx/sidebarSearch/sidebarSearch.css +3 -0
- package/src/modules/dx/sidebarSearch/sidebarSearch.html +26 -0
- package/src/modules/dx/sidebarSearch/sidebarSearch.ts +358 -0
- 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 +36 -0
- package/src/modules/dx/sidebarSearchResult/sidebarSearchResult.html +14 -0
- package/src/modules/dx/sidebarSearchResult/sidebarSearchResult.ts +56 -0
- 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/tab/__tests__/tab.test.ts +112 -54
- package/src/modules/dx/tab/tab.css +91 -16
- package/src/modules/dx/tab/tab.html +10 -12
- package/src/modules/dx/tab/tab.stories.ts +57 -0
- package/src/modules/dx/tab/tab.ts +35 -28
- package/src/modules/dx/tooltip/tippy.css +1 -0
- package/src/modules/dx/treeTile/__tests__/treeTile.test.ts +1 -1
- package/src/modules/dx/treeTile/treeTile.css +3 -19
- package/src/modules/dx/treeTile/treeTile.html +4 -1
- package/src/modules/dx/treeTile/treeTile.ts +2 -2
- package/src/modules/helpers/sidebar/sidebar.css +21 -0
- package/src/modules/helpers/table/table.css +23 -7
- package/src/modules/utils/coveo/coveo.ts +60 -0
- package/src/modules/utils/highlight/highlight.ts +31 -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 +57 -0
- package/src/modules/utils/regexps/regexps.ts +5 -0
- package/LICENSE +0 -12
- package/src/modules/dx/headerNavOption/__tests__/headerNavOption.test.ts +0 -113
- package/src/modules/dx/headerNavOption/headerNavOption.css +0 -91
- package/src/modules/dx/headerNavOption/headerNavOption.html +0 -9
- package/src/modules/dx/headerNavOption/headerNavOption.ts +0 -31
- package/src/modules/dx/headerSearch/__tests__/mockProps.ts +0 -11
- package/src/modules/dx/tab/__tests__/mockProps.ts +0 -4
- package/src/modules/dx/tabPanel/__tests__/mockProps.ts +0 -4
- package/src/modules/dx/tabPanel/__tests__/tabPanel.test.ts +0 -46
- package/src/modules/dx/tabPanel/tabPanel.css +0 -9
- package/src/modules/dx/tabPanel/tabPanel.html +0 -13
- package/src/modules/dx/tabPanel/tabPanel.ts +0 -27
- package/src/modules/dx/tabs/__tests__/mockProps.ts +0 -3
- package/src/modules/dx/tabs/__tests__/tabs.test.ts +0 -47
- package/src/modules/dx/tabs/tabs.css +0 -7
- package/src/modules/dx/tabs/tabs.html +0 -21
- package/src/modules/dx/tabs/tabs.stories.ts +0 -74
- package/src/modules/dx/tabs/tabs.ts +0 -112
- package/src/modules/dx/tabs/uniqueId.ts +0 -6
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { LightningElement, api } from "lwc";
|
|
2
|
-
import cx from "classnames";
|
|
3
|
-
export default class TabPanel extends LightningElement {
|
|
4
|
-
@api index!: number;
|
|
5
|
-
@api groupId!: string;
|
|
6
|
-
@api active: boolean = false;
|
|
7
|
-
|
|
8
|
-
private get tabId() {
|
|
9
|
-
return `tabs--${this.groupId}--tab--${this.index}`;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
private get panelId() {
|
|
13
|
-
return `tabs--${this.groupId}--panel--${this.index}`;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
private get activeTabIndex() {
|
|
17
|
-
return this.active ? 0 : -1;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
private get className() {
|
|
21
|
-
return cx("tabpanel", this.active && "tabpanel-active");
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
private get panelHidden() {
|
|
25
|
-
return !this.active;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import Tabs from "dx/tabs";
|
|
2
|
-
import { createRenderComponent } from "utils/tests";
|
|
3
|
-
import mockProps from "./mockProps";
|
|
4
|
-
|
|
5
|
-
const TAG = "dx-tabs";
|
|
6
|
-
const render = createRenderComponent(TAG, Tabs);
|
|
7
|
-
|
|
8
|
-
describe(TAG, () => {
|
|
9
|
-
it("renders the container div", () => {
|
|
10
|
-
const component = render(mockProps);
|
|
11
|
-
const tabs = component.shadowRoot.querySelector("div");
|
|
12
|
-
expect(tabs).not.toBeNull();
|
|
13
|
-
return expect(component).toBeAccessible();
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
it("renders all tabs with correct active property", () => {
|
|
17
|
-
const component = render(mockProps);
|
|
18
|
-
const tabs = component.shadowRoot.querySelectorAll("dx-tab");
|
|
19
|
-
expect(tabs[0].active).toEqual(true);
|
|
20
|
-
expect(tabs[1].active).toEqual(false);
|
|
21
|
-
expect(tabs.length).toEqual(mockProps.tabs.length);
|
|
22
|
-
return expect(component).toBeAccessible();
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
it("renders with the initial index visible", () => {
|
|
26
|
-
const component = render({ ...mockProps, initialIndex: 1 });
|
|
27
|
-
const tabs = component.shadowRoot.querySelectorAll("dx-tab");
|
|
28
|
-
expect(tabs[0].active).toEqual(false);
|
|
29
|
-
expect(tabs[1].active).toEqual(true);
|
|
30
|
-
expect(tabs.length).toEqual(mockProps.tabs.length);
|
|
31
|
-
return expect(component).toBeAccessible();
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
it("changes active property on click", () => {
|
|
35
|
-
const component = render(mockProps);
|
|
36
|
-
const tabs = component.shadowRoot.querySelectorAll("dx-tab");
|
|
37
|
-
expect(tabs[0].active).toEqual(true);
|
|
38
|
-
expect(tabs[1].active).toEqual(false);
|
|
39
|
-
const mockChange = jest.fn();
|
|
40
|
-
component.addEventListener("change", mockChange);
|
|
41
|
-
tabs[1].dispatchEvent(new CustomEvent("select", { detail: 1 }));
|
|
42
|
-
|
|
43
|
-
expect(mockChange).toHaveBeenCalledTimes(1);
|
|
44
|
-
expect(mockChange.mock.calls[0][0].detail).toEqual(1);
|
|
45
|
-
return expect(component).toBeAccessible();
|
|
46
|
-
});
|
|
47
|
-
});
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div>
|
|
3
|
-
<div role="tablist" part="tablist">
|
|
4
|
-
<template for:each={tabs} for:item="tab">
|
|
5
|
-
<dx-tab
|
|
6
|
-
key={tab.index}
|
|
7
|
-
onselect={onTabClick}
|
|
8
|
-
group-id={groupId}
|
|
9
|
-
index={tab.index}
|
|
10
|
-
active={tab.active}
|
|
11
|
-
small={tab.small}
|
|
12
|
-
>
|
|
13
|
-
{tab.label}
|
|
14
|
-
</dx-tab>
|
|
15
|
-
</template>
|
|
16
|
-
</div>
|
|
17
|
-
<div part="tabpanels">
|
|
18
|
-
<slot onslotchange={onSlotChange}></slot>
|
|
19
|
-
</div>
|
|
20
|
-
</div>
|
|
21
|
-
</template>
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { html } from "lit-html";
|
|
2
|
-
|
|
3
|
-
export default {
|
|
4
|
-
title: "dx/dx-tabs",
|
|
5
|
-
component: "dx-tabs"
|
|
6
|
-
};
|
|
7
|
-
|
|
8
|
-
const tabsGen = (options = {}) => [
|
|
9
|
-
{ label: "Label 1", ...options },
|
|
10
|
-
{ label: "Label 2", ...options },
|
|
11
|
-
{ label: "Label 3", ...options }
|
|
12
|
-
];
|
|
13
|
-
const tabs = JSON.stringify(tabsGen());
|
|
14
|
-
const smallTabs = JSON.stringify(tabsGen({ small: true }));
|
|
15
|
-
|
|
16
|
-
// prettier-ignore
|
|
17
|
-
export const Base = () => html `
|
|
18
|
-
<dx-tabs tabs='${tabs}'>
|
|
19
|
-
<dx-tab-panel>
|
|
20
|
-
<h3>Title 1</h3>
|
|
21
|
-
<p>Content 1</p>
|
|
22
|
-
</dx-tab-panel>
|
|
23
|
-
|
|
24
|
-
<dx-tab-panel>
|
|
25
|
-
<h3>Title 2</h3>
|
|
26
|
-
<p>Content 2</p>
|
|
27
|
-
</dx-tab-panel>
|
|
28
|
-
|
|
29
|
-
<dx-tab-panel>
|
|
30
|
-
<h3>Title 3</h3>
|
|
31
|
-
<p>Content 3</p>
|
|
32
|
-
</dx-tab-panel>
|
|
33
|
-
</dx-tabs>
|
|
34
|
-
|
|
35
|
-
<br/>
|
|
36
|
-
|
|
37
|
-
<dx-tabs
|
|
38
|
-
tabs='${tabs}'
|
|
39
|
-
initial-index=2
|
|
40
|
-
>
|
|
41
|
-
<dx-tab-panel>
|
|
42
|
-
<h3>Title 1</h3>
|
|
43
|
-
<p>Content 1</p>
|
|
44
|
-
</dx-tab-panel>
|
|
45
|
-
|
|
46
|
-
<dx-tab-panel>
|
|
47
|
-
<h3>Title 2</h3>
|
|
48
|
-
<p>Content 2</p>
|
|
49
|
-
</dx-tab-panel>
|
|
50
|
-
|
|
51
|
-
<dx-tab-panel>
|
|
52
|
-
<h3>Title 3</h3>
|
|
53
|
-
<p>Content 3</p>
|
|
54
|
-
</dx-tab-panel>
|
|
55
|
-
</dx-tabs>
|
|
56
|
-
|
|
57
|
-
<br/>
|
|
58
|
-
|
|
59
|
-
<dx-tabs tabs='${smallTabs}'>
|
|
60
|
-
<dx-tab-panel>
|
|
61
|
-
<h3>Title 1</h3>
|
|
62
|
-
<p>Content 1</p>
|
|
63
|
-
</dx-tab-panel>
|
|
64
|
-
|
|
65
|
-
<dx-tab-panel>
|
|
66
|
-
<h3>Title 2</h3>
|
|
67
|
-
<p>Content 2</p>
|
|
68
|
-
</dx-tab-panel>
|
|
69
|
-
|
|
70
|
-
<dx-tab-panel>
|
|
71
|
-
<h3>Title 3</h3>
|
|
72
|
-
<p>Content 3</p>
|
|
73
|
-
</dx-tab-panel>
|
|
74
|
-
</dx-tabs>`;
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import { LightningElement, api } from "lwc";
|
|
2
|
-
import { LightningSlotElement, Tab } from "typings/custom";
|
|
3
|
-
import { toJson } from "utils/normalizers";
|
|
4
|
-
import { uniqueId } from "./uniqueId";
|
|
5
|
-
export default class Tabs extends LightningElement {
|
|
6
|
-
@api
|
|
7
|
-
get initialIndex() {
|
|
8
|
-
return +this._initialIndex;
|
|
9
|
-
}
|
|
10
|
-
set initialIndex(value) {
|
|
11
|
-
this._initialIndex = +value;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
@api
|
|
15
|
-
get tabs() {
|
|
16
|
-
return this._tabs.map((tab: Tab, index) => ({
|
|
17
|
-
...tab,
|
|
18
|
-
index,
|
|
19
|
-
groupId: this.groupId,
|
|
20
|
-
active: this.activeIndex === index
|
|
21
|
-
}));
|
|
22
|
-
}
|
|
23
|
-
set tabs(value: Tab[]) {
|
|
24
|
-
this._tabs = toJson(value);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
private _initialIndex: number = 0;
|
|
28
|
-
private _tabs: Tab[] = [];
|
|
29
|
-
private _activeIndex?: number;
|
|
30
|
-
private groupId: string = uniqueId();
|
|
31
|
-
private tabSlotPanels?: LightningSlotElement;
|
|
32
|
-
|
|
33
|
-
private get tabElements() {
|
|
34
|
-
return this.template.querySelectorAll("dx-tab");
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
private get activeIndex() {
|
|
38
|
-
return this._activeIndex == null
|
|
39
|
-
? this.initialIndex
|
|
40
|
-
: this._activeIndex;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
private set activeIndex(value: number) {
|
|
44
|
-
this._activeIndex = value;
|
|
45
|
-
this.updateTabs();
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
connectedCallback() {
|
|
49
|
-
this.addListeners();
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
disconnectedCallback() {
|
|
53
|
-
this.removeListeners();
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
private onTabClick(e: CustomEvent) {
|
|
57
|
-
if (e.detail !== this.activeIndex) {
|
|
58
|
-
this.dispatchEvent(new CustomEvent("change", { detail: e.detail }));
|
|
59
|
-
}
|
|
60
|
-
this.activeIndex = e.detail;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
private onSlotChange(e: Event) {
|
|
64
|
-
this.tabSlotPanels = <LightningSlotElement>e.target;
|
|
65
|
-
this.updateTabs();
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
private updateTabs() {
|
|
69
|
-
if (this.tabSlotPanels) {
|
|
70
|
-
this.tabSlotPanels.assignedElements().forEach((tabPanel, index) => {
|
|
71
|
-
tabPanel.index = index;
|
|
72
|
-
tabPanel.groupId = this.groupId;
|
|
73
|
-
tabPanel.active = this.activeIndex === index;
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
this.tabElements.forEach((tab, index) => {
|
|
77
|
-
tab.active = this.activeIndex === index;
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
private focusActiveTab() {
|
|
82
|
-
this.tabElements[this.activeIndex].focus();
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
private onKeydown = (e: KeyboardEvent) => {
|
|
86
|
-
switch (e.key) {
|
|
87
|
-
case "ArrowLeft": {
|
|
88
|
-
e.preventDefault();
|
|
89
|
-
const prev = this.activeIndex - 1;
|
|
90
|
-
this.activeIndex = prev < 0 ? this.tabs.length - 1 : prev;
|
|
91
|
-
this.focusActiveTab();
|
|
92
|
-
break;
|
|
93
|
-
}
|
|
94
|
-
case "ArrowRight": {
|
|
95
|
-
e.preventDefault();
|
|
96
|
-
const next = this.activeIndex + 1;
|
|
97
|
-
this.activeIndex = next === this.tabs.length ? 0 : next;
|
|
98
|
-
this.focusActiveTab();
|
|
99
|
-
break;
|
|
100
|
-
}
|
|
101
|
-
default:
|
|
102
|
-
}
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
private addListeners() {
|
|
106
|
-
this.template.addEventListener("keydown", this.onKeydown);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
private removeListeners() {
|
|
110
|
-
this.template.removeEventListener("keydown", this.onKeydown);
|
|
111
|
-
}
|
|
112
|
-
}
|