@spectrum-web-components/tabs 0.8.16-devmode.0 → 0.9.0
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/package.json +5 -5
- package/sp-tab-panel.js +1 -2
- package/sp-tab-panel.js.map +1 -1
- package/sp-tab.js +1 -2
- package/sp-tab.js.map +1 -1
- package/sp-tabs.js +1 -2
- package/sp-tabs.js.map +1 -1
- package/src/Tab.js +5 -96
- package/src/Tab.js.map +1 -1
- package/src/TabPanel.js +2 -56
- package/src/TabPanel.js.map +1 -1
- package/src/Tabs.js +4 -287
- package/src/Tabs.js.map +1 -1
- package/src/index.js +1 -3
- package/src/index.js.map +1 -1
- package/src/spectrum-tab.css.js +2 -4
- package/src/spectrum-tab.css.js.map +1 -1
- package/src/spectrum-tabs.css.js +2 -4
- package/src/spectrum-tabs.css.js.map +1 -1
- package/src/tab-panel.css.js +2 -4
- package/src/tab-panel.css.js.map +1 -1
- package/src/tab.css.js +2 -4
- package/src/tab.css.js.map +1 -1
- package/src/tabs.css.js +2 -4
- package/src/tabs.css.js.map +1 -1
- package/stories/tabs-horizontal-sizes.stories.js +7 -76
- package/stories/tabs-horizontal-sizes.stories.js.map +1 -1
- package/stories/tabs-vertical-right-sizes.stories.js +7 -73
- package/stories/tabs-vertical-right-sizes.stories.js.map +1 -1
- package/stories/tabs-vertical-sizes.stories.js +7 -73
- package/stories/tabs-vertical-sizes.stories.js.map +1 -1
- package/stories/tabs.stories.js +75 -196
- package/stories/tabs.stories.js.map +1 -1
- package/test/benchmark/basic-test.js +1 -5
- package/test/benchmark/basic-test.js.map +1 -1
- package/test/tab.test.js +4 -26
- package/test/tab.test.js.map +1 -1
- package/test/tabs-horizontal-sizes.test-vrt.js +1 -3
- package/test/tabs-horizontal-sizes.test-vrt.js.map +1 -1
- package/test/tabs-vertical-right-sizes.test-vrt.js +1 -3
- package/test/tabs-vertical-right-sizes.test-vrt.js.map +1 -1
- package/test/tabs-vertical-sizes.test-vrt.js +1 -3
- package/test/tabs-vertical-sizes.test-vrt.js.map +1 -1
- package/test/tabs.test-vrt.js +1 -3
- package/test/tabs.test-vrt.js.map +1 -1
- package/test/tabs.test.js +17 -396
- package/test/tabs.test.js.map +1 -1
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { regressVisuals } from "../../../test/visual/test.js";
|
|
3
|
-
regressVisuals("TabsVerticalSizesStories", stories);
|
|
1
|
+
import*as s from"../stories/tabs-vertical-sizes.stories.js";import{regressVisuals as r}from"../../../test/visual/test.js";r("TabsVerticalSizesStories",s);
|
|
4
2
|
//# sourceMappingURL=tabs-vertical-sizes.test-vrt.js.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["tabs-vertical-sizes.test-vrt.ts"],
|
|
4
4
|
"sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport * as stories from '../stories/tabs-vertical-sizes.stories.js';\nimport { regressVisuals } from '../../../test/visual/test.js';\n\nregressVisuals('TabsVerticalSizesStories', stories);\n"],
|
|
5
|
-
"mappings": "AAYA
|
|
5
|
+
"mappings": "AAYA,4DACA,8DAEA,EAAe,2BAA4B,CAAO",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/test/tabs.test-vrt.js
CHANGED
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { regressVisuals } from "../../../test/visual/test.js";
|
|
3
|
-
regressVisuals("TabsStories", stories);
|
|
1
|
+
import*as s from"../stories/tabs.stories.js";import{regressVisuals as r}from"../../../test/visual/test.js";r("TabsStories",s);
|
|
4
2
|
//# sourceMappingURL=tabs.test-vrt.js.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["tabs.test-vrt.ts"],
|
|
4
4
|
"sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport * as stories from '../stories/tabs.stories.js';\nimport { regressVisuals } from '../../../test/visual/test.js';\n\nregressVisuals('TabsStories', stories);\n"],
|
|
5
|
-
"mappings": "AAYA
|
|
5
|
+
"mappings": "AAYA,6CACA,8DAEA,EAAe,cAAe,CAAO",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/test/tabs.test.js
CHANGED
|
@@ -1,28 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import "@spectrum-web-components/tabs/sp-tab.js";
|
|
3
|
-
import "@spectrum-web-components/tabs/sp-tab-panel.js";
|
|
4
|
-
import { Tab } from "@spectrum-web-components/tabs";
|
|
5
|
-
import "@spectrum-web-components/icons-workflow/icons/sp-icon-checkmark.js";
|
|
6
|
-
import {
|
|
7
|
-
elementUpdated,
|
|
8
|
-
expect,
|
|
9
|
-
fixture,
|
|
10
|
-
oneEvent,
|
|
11
|
-
waitUntil
|
|
12
|
-
} from "@open-wc/testing";
|
|
13
|
-
import { html } from "lit/static-html.js";
|
|
14
|
-
import { LitElement } from "@spectrum-web-components/base";
|
|
15
|
-
import {
|
|
16
|
-
arrowDownEvent,
|
|
17
|
-
arrowLeftEvent,
|
|
18
|
-
arrowRightEvent,
|
|
19
|
-
arrowUpEvent,
|
|
20
|
-
enterEvent,
|
|
21
|
-
spaceEvent
|
|
22
|
-
} from "../../../test/testing-helpers.js";
|
|
23
|
-
import { sendKeys } from "@web/test-runner-commands";
|
|
24
|
-
const createTabs = async () => {
|
|
25
|
-
const tabs = await fixture(html`
|
|
1
|
+
import"@spectrum-web-components/tabs/sp-tabs.js";import"@spectrum-web-components/tabs/sp-tab.js";import"@spectrum-web-components/tabs/sp-tab-panel.js";import{Tab as u}from"@spectrum-web-components/tabs";import"@spectrum-web-components/icons-workflow/icons/sp-icon-checkmark.js";import{elementUpdated as s,expect as t,fixture as b,oneEvent as y,waitUntil as E}from"@open-wc/testing";import{html as o}from"lit/static-html.js";import{LitElement as S}from"@spectrum-web-components/base";import{arrowDownEvent as g,arrowLeftEvent as f,arrowRightEvent as m,arrowUpEvent as w,enterEvent as v,spaceEvent as T}from"../../../test/testing-helpers.js";import{sendKeys as h}from"@web/test-runner-commands";const d=async()=>{const e=await b(o`
|
|
26
2
|
<sp-tabs selected="first">
|
|
27
3
|
<sp-tab label="Tab 1" value="first"></sp-tab>
|
|
28
4
|
<sp-tab label="Tab 2" value="second"></sp-tab>
|
|
@@ -31,254 +7,47 @@ const createTabs = async () => {
|
|
|
31
7
|
<sp-tab-panel value="second">Second tab content</sp-tab-panel>
|
|
32
8
|
<sp-tab-panel value="third">Third tab content</sp-tab-panel>
|
|
33
9
|
</sp-tabs>
|
|
34
|
-
`);
|
|
35
|
-
await elementUpdated(tabs);
|
|
36
|
-
return tabs;
|
|
37
|
-
};
|
|
38
|
-
describe("Tabs", () => {
|
|
39
|
-
it("loads accessibly", async () => {
|
|
40
|
-
const tabs = await createTabs();
|
|
41
|
-
const tabList = tabs.querySelectorAll("sp-tab");
|
|
42
|
-
expect(tabList).to.exist;
|
|
43
|
-
expect(tabList.length).to.equal(3);
|
|
44
|
-
await expect(tabs).to.be.accessible();
|
|
45
|
-
});
|
|
46
|
-
it("loads accessibly w/o panels", async () => {
|
|
47
|
-
const tabs = await fixture(html`
|
|
10
|
+
`);return await s(e),e};describe("Tabs",()=>{it("loads accessibly",async()=>{const e=await d(),a=e.querySelectorAll("sp-tab");t(a).to.exist,t(a.length).to.equal(3),await t(e).to.be.accessible()}),it("loads accessibly w/o panels",async()=>{const e=await b(o`
|
|
48
11
|
<sp-tabs selected="first">
|
|
49
12
|
<sp-tab value="first">Tab 1</sp-tab>
|
|
50
13
|
<sp-tab value="second">Tab 2</sp-tab>
|
|
51
14
|
<sp-tab value="third">Tab 3</sp-tab>
|
|
52
15
|
</sp-tabs>
|
|
53
|
-
`);
|
|
54
|
-
const tabList = tabs.querySelectorAll("sp-tab");
|
|
55
|
-
expect(tabList).to.exist;
|
|
56
|
-
expect(tabList.length).to.equal(3);
|
|
57
|
-
await expect(tabs).to.be.accessible();
|
|
58
|
-
});
|
|
59
|
-
it("can be disabled", async () => {
|
|
60
|
-
const tabs = await createTabs();
|
|
61
|
-
const tab = tabs.querySelector('[label="Tab 3"]');
|
|
62
|
-
tabs.disabled = true;
|
|
63
|
-
await elementUpdated(tabs);
|
|
64
|
-
expect(tabs.selected).to.equal("first");
|
|
65
|
-
tab.click();
|
|
66
|
-
await elementUpdated(tabs);
|
|
67
|
-
expect(tabs.selected).to.equal("first");
|
|
68
|
-
});
|
|
69
|
-
it("can have disabled sp-tab children", async () => {
|
|
70
|
-
const tabs = await createTabs();
|
|
71
|
-
const tab2 = tabs.querySelector('[label="Tab 2"]');
|
|
72
|
-
const tab3 = tabs.querySelector('[label="Tab 3"]');
|
|
73
|
-
tab3.disabled = true;
|
|
74
|
-
await elementUpdated(tab3);
|
|
75
|
-
expect(tabs.selected).to.equal("first");
|
|
76
|
-
tab3.click();
|
|
77
|
-
await elementUpdated(tabs);
|
|
78
|
-
expect(tabs.selected).to.equal("first");
|
|
79
|
-
tab2.click();
|
|
80
|
-
await elementUpdated(tabs);
|
|
81
|
-
expect(tabs.selected).to.equal("second");
|
|
82
|
-
});
|
|
83
|
-
it("reflects selected tab with selected property", async () => {
|
|
84
|
-
const tabs = await createTabs();
|
|
85
|
-
const firstTab = tabs.querySelector("sp-tab[value=first]");
|
|
86
|
-
const secondTab = tabs.querySelector("sp-tab[value=second]");
|
|
87
|
-
const thirdTab = tabs.querySelector("sp-tab[value=third]");
|
|
88
|
-
const firstPanel = tabs.querySelector("sp-tab-panel[value=first]");
|
|
89
|
-
const secondPanel = tabs.querySelector("sp-tab-panel[value=second]");
|
|
90
|
-
const thirdPanel = tabs.querySelector("sp-tab-panel[value=third]");
|
|
91
|
-
expect(firstTab.selected, "first: 1, selected").to.be.true;
|
|
92
|
-
expect(firstPanel.selected, "first panel: 1, selected").to.be.true;
|
|
93
|
-
expect(secondTab.selected, "second: 1, not selected").to.be.false;
|
|
94
|
-
expect(secondPanel.selected, "second panel: 1, not selected").to.be.false;
|
|
95
|
-
expect(thirdTab.selected, "third: 1, not selected").to.be.false;
|
|
96
|
-
expect(thirdPanel.selected, "third panel: 1, not selected").to.be.false;
|
|
97
|
-
expect(tabs.selected).to.equal(firstTab.value);
|
|
98
|
-
secondTab.click();
|
|
99
|
-
await elementUpdated(tabs);
|
|
100
|
-
expect(firstTab.selected, "first: 2, not selected").to.be.false;
|
|
101
|
-
expect(firstPanel.selected, "first panel: 2, not selected").to.be.false;
|
|
102
|
-
expect(secondTab.selected, "second: 2, selected").to.be.true;
|
|
103
|
-
expect(secondTab.selected, "first panel: 2, selected").to.be.true;
|
|
104
|
-
expect(thirdTab.selected, "third: 2, not selected").to.be.false;
|
|
105
|
-
expect(thirdTab.selected, "first panel: 2, not selected").to.be.false;
|
|
106
|
-
expect(tabs.selected).to.equal(secondTab.value);
|
|
107
|
-
thirdTab.click();
|
|
108
|
-
await elementUpdated(tabs);
|
|
109
|
-
expect(firstTab.selected, "first: 3, not selected").to.be.false;
|
|
110
|
-
expect(firstPanel.selected, "first panel: 3, not selected").to.be.false;
|
|
111
|
-
expect(secondTab.selected, "second: 3, not selected").to.be.false;
|
|
112
|
-
expect(secondPanel.selected, "second panel: 3, not selected").to.be.false;
|
|
113
|
-
expect(thirdTab.selected, "third: 3, selected").to.be.true;
|
|
114
|
-
expect(thirdTab.selected, "first panel: 3, selected").to.be.true;
|
|
115
|
-
expect(tabs.selected).to.equal(thirdTab.value);
|
|
116
|
-
});
|
|
117
|
-
it("autofocuses", async () => {
|
|
118
|
-
const tabs = await fixture(html`
|
|
16
|
+
`),a=e.querySelectorAll("sp-tab");t(a).to.exist,t(a.length).to.equal(3),await t(e).to.be.accessible()}),it("can be disabled",async()=>{const e=await d(),a=e.querySelector('[label="Tab 3"]');e.disabled=!0,await s(e),t(e.selected).to.equal("first"),a.click(),await s(e),t(e.selected).to.equal("first")}),it("can have disabled sp-tab children",async()=>{const e=await d(),a=e.querySelector('[label="Tab 2"]'),c=e.querySelector('[label="Tab 3"]');c.disabled=!0,await s(c),t(e.selected).to.equal("first"),c.click(),await s(e),t(e.selected).to.equal("first"),a.click(),await s(e),t(e.selected).to.equal("second")}),it("reflects selected tab with selected property",async()=>{const e=await d(),a=e.querySelector("sp-tab[value=first]"),c=e.querySelector("sp-tab[value=second]"),l=e.querySelector("sp-tab[value=third]"),n=e.querySelector("sp-tab-panel[value=first]"),i=e.querySelector("sp-tab-panel[value=second]"),r=e.querySelector("sp-tab-panel[value=third]");t(a.selected,"first: 1, selected").to.be.true,t(n.selected,"first panel: 1, selected").to.be.true,t(c.selected,"second: 1, not selected").to.be.false,t(i.selected,"second panel: 1, not selected").to.be.false,t(l.selected,"third: 1, not selected").to.be.false,t(r.selected,"third panel: 1, not selected").to.be.false,t(e.selected).to.equal(a.value),c.click(),await s(e),t(a.selected,"first: 2, not selected").to.be.false,t(n.selected,"first panel: 2, not selected").to.be.false,t(c.selected,"second: 2, selected").to.be.true,t(c.selected,"first panel: 2, selected").to.be.true,t(l.selected,"third: 2, not selected").to.be.false,t(l.selected,"first panel: 2, not selected").to.be.false,t(e.selected).to.equal(c.value),l.click(),await s(e),t(a.selected,"first: 3, not selected").to.be.false,t(n.selected,"first panel: 3, not selected").to.be.false,t(c.selected,"second: 3, not selected").to.be.false,t(i.selected,"second panel: 3, not selected").to.be.false,t(l.selected,"third: 3, selected").to.be.true,t(l.selected,"first panel: 3, selected").to.be.true,t(e.selected).to.equal(l.value)}),it("autofocuses",async()=>{const e=await b(o`
|
|
119
17
|
<sp-tabs selected="second" autofocus>
|
|
120
18
|
<sp-tab label="Tab 1" value="first"></sp-tab>
|
|
121
19
|
<sp-tab label="Tab 2" value="second"></sp-tab>
|
|
122
20
|
<sp-tab label="Tab 3" value="third"></sp-tab>
|
|
123
21
|
</sp-tabs>
|
|
124
|
-
`);
|
|
125
|
-
await elementUpdated(tabs);
|
|
126
|
-
const autoElement = tabs.querySelector('[label="Tab 2"]');
|
|
127
|
-
await waitUntil(() => document.activeElement === autoElement, "Autofocused");
|
|
128
|
-
});
|
|
129
|
-
it("auto", async () => {
|
|
130
|
-
const el = await fixture(html`
|
|
22
|
+
`);await s(e);const a=e.querySelector('[label="Tab 2"]');await E(()=>document.activeElement===a,"Autofocused")}),it("auto",async()=>{const e=await b(o`
|
|
131
23
|
<sp-tabs selected="second" auto>
|
|
132
24
|
<sp-tab label="Tab 1" value="first"></sp-tab>
|
|
133
25
|
<sp-tab label="Tab 2" value="second"></sp-tab>
|
|
134
26
|
<sp-tab label="Tab 3" value="third"></sp-tab>
|
|
135
27
|
</sp-tabs>
|
|
136
|
-
`);
|
|
137
|
-
await elementUpdated(el);
|
|
138
|
-
expect(el.selected).to.equal("second");
|
|
139
|
-
el.focus();
|
|
140
|
-
await sendKeys({
|
|
141
|
-
press: "ArrowLeft"
|
|
142
|
-
});
|
|
143
|
-
expect(el.selected).to.equal("first");
|
|
144
|
-
await sendKeys({
|
|
145
|
-
press: "ArrowLeft"
|
|
146
|
-
});
|
|
147
|
-
expect(el.selected).to.equal("third");
|
|
148
|
-
await sendKeys({
|
|
149
|
-
press: "ArrowRight"
|
|
150
|
-
});
|
|
151
|
-
expect(el.selected).to.equal("first");
|
|
152
|
-
});
|
|
153
|
-
it("forces only one tab to be selected", async () => {
|
|
154
|
-
const tabs = await createTabs();
|
|
155
|
-
const selectedTabs = tabs.querySelectorAll("sp-tab[selected]");
|
|
156
|
-
expect(tabs.selected).to.equal("first");
|
|
157
|
-
expect(selectedTabs.length).to.equal(1);
|
|
158
|
-
});
|
|
159
|
-
it("de-selects all but first selected tab if multiple selected", async () => {
|
|
160
|
-
const tabs = await createTabs();
|
|
161
|
-
const tab1 = tabs.querySelector("sp-tab[value=first]");
|
|
162
|
-
const tab2 = tabs.querySelector("sp-tab[value=second]");
|
|
163
|
-
if (!(tab1 instanceof Tab))
|
|
164
|
-
throw new Error("tab1 not of type Tab");
|
|
165
|
-
if (!(tab2 instanceof Tab))
|
|
166
|
-
throw new Error("tab2 not of type Tab");
|
|
167
|
-
expect(tabs.selected).to.equal("first");
|
|
168
|
-
expect(tab1.selected).to.be.true;
|
|
169
|
-
expect(tab2.selected).to.be.false;
|
|
170
|
-
});
|
|
171
|
-
it("ensures setting selection updates selected tab", async () => {
|
|
172
|
-
const tabs = await createTabs();
|
|
173
|
-
const tab1 = tabs.querySelector("sp-tab[value=first]");
|
|
174
|
-
const tab2 = tabs.querySelector("sp-tab[value=second]");
|
|
175
|
-
const tab3 = tabs.querySelector("sp-tab[value=third]");
|
|
176
|
-
if (!(tab1 instanceof Tab))
|
|
177
|
-
throw new Error("tab1 not of type Tab");
|
|
178
|
-
if (!(tab2 instanceof Tab))
|
|
179
|
-
throw new Error("tab2 not of type Tab");
|
|
180
|
-
if (!(tab3 instanceof Tab))
|
|
181
|
-
throw new Error("tab3 not of type Tab");
|
|
182
|
-
expect(tabs.selected).to.equal("first");
|
|
183
|
-
expect(tab1.selected, "first: 1, selected").to.be.true;
|
|
184
|
-
expect(tab2.selected, "second: 1, not selected").to.be.false;
|
|
185
|
-
expect(tab3.selected, "thurd: 1, not selected").to.be.false;
|
|
186
|
-
tabs.selected = "second";
|
|
187
|
-
await elementUpdated(tabs);
|
|
188
|
-
expect(tabs.selected).to.equal("second");
|
|
189
|
-
expect(tab1.selected, "first: 2, not selected").to.be.false;
|
|
190
|
-
expect(tab2.selected, "second: 2, selected").to.be.true;
|
|
191
|
-
expect(tab3.selected, "third: 2, not selected").to.be.false;
|
|
192
|
-
tabs.selected = "third";
|
|
193
|
-
await elementUpdated(tabs);
|
|
194
|
-
expect(tabs.selected).to.equal("third");
|
|
195
|
-
expect(tab1.selected, "first: 3, not selected").to.be.false;
|
|
196
|
-
expect(tab2.selected, "second: 3, not selected").to.be.false;
|
|
197
|
-
expect(tab3.selected, "third: 3, selected").to.be.true;
|
|
198
|
-
});
|
|
199
|
-
it("ensures setting selected and clicking on tab both work together", async () => {
|
|
200
|
-
const tabs = await createTabs();
|
|
201
|
-
const tab1 = tabs.querySelector("sp-tab[value=first]");
|
|
202
|
-
const tab2 = tabs.querySelector("sp-tab[value=second]");
|
|
203
|
-
const tab3 = tabs.querySelector("sp-tab[value=third]");
|
|
204
|
-
if (!(tab1 instanceof Tab))
|
|
205
|
-
throw new Error("tab1 not of type Tab");
|
|
206
|
-
if (!(tab2 instanceof Tab))
|
|
207
|
-
throw new Error("tab2 not of type Tab");
|
|
208
|
-
if (!(tab3 instanceof Tab))
|
|
209
|
-
throw new Error("tab3 not of type Tab");
|
|
210
|
-
tab2.click();
|
|
211
|
-
await elementUpdated(tabs);
|
|
212
|
-
expect(tabs.selected).to.equal("second");
|
|
213
|
-
expect(tab1.selected).to.be.false;
|
|
214
|
-
expect(tab2.selected).to.be.true;
|
|
215
|
-
expect(tab3.selected).to.be.false;
|
|
216
|
-
tabs.selected = "first";
|
|
217
|
-
await elementUpdated(tabs);
|
|
218
|
-
expect(tabs.selected).to.equal("first");
|
|
219
|
-
expect(tab1.selected).to.be.true;
|
|
220
|
-
expect(tab2.selected).to.be.false;
|
|
221
|
-
expect(tab3.selected).to.be.false;
|
|
222
|
-
});
|
|
223
|
-
it("displays `vertical`", async () => {
|
|
224
|
-
const el = await fixture(html`
|
|
28
|
+
`);await s(e),t(e.selected).to.equal("second"),e.focus(),await h({press:"ArrowLeft"}),t(e.selected).to.equal("first"),await h({press:"ArrowLeft"}),t(e.selected).to.equal("third"),await h({press:"ArrowRight"}),t(e.selected).to.equal("first")}),it("forces only one tab to be selected",async()=>{const e=await d(),a=e.querySelectorAll("sp-tab[selected]");t(e.selected).to.equal("first"),t(a.length).to.equal(1)}),it("de-selects all but first selected tab if multiple selected",async()=>{const e=await d(),a=e.querySelector("sp-tab[value=first]"),c=e.querySelector("sp-tab[value=second]");if(!(a instanceof u))throw new Error("tab1 not of type Tab");if(!(c instanceof u))throw new Error("tab2 not of type Tab");t(e.selected).to.equal("first"),t(a.selected).to.be.true,t(c.selected).to.be.false}),it("ensures setting selection updates selected tab",async()=>{const e=await d(),a=e.querySelector("sp-tab[value=first]"),c=e.querySelector("sp-tab[value=second]"),l=e.querySelector("sp-tab[value=third]");if(!(a instanceof u))throw new Error("tab1 not of type Tab");if(!(c instanceof u))throw new Error("tab2 not of type Tab");if(!(l instanceof u))throw new Error("tab3 not of type Tab");t(e.selected).to.equal("first"),t(a.selected,"first: 1, selected").to.be.true,t(c.selected,"second: 1, not selected").to.be.false,t(l.selected,"thurd: 1, not selected").to.be.false,e.selected="second",await s(e),t(e.selected).to.equal("second"),t(a.selected,"first: 2, not selected").to.be.false,t(c.selected,"second: 2, selected").to.be.true,t(l.selected,"third: 2, not selected").to.be.false,e.selected="third",await s(e),t(e.selected).to.equal("third"),t(a.selected,"first: 3, not selected").to.be.false,t(c.selected,"second: 3, not selected").to.be.false,t(l.selected,"third: 3, selected").to.be.true}),it("ensures setting selected and clicking on tab both work together",async()=>{const e=await d(),a=e.querySelector("sp-tab[value=first]"),c=e.querySelector("sp-tab[value=second]"),l=e.querySelector("sp-tab[value=third]");if(!(a instanceof u))throw new Error("tab1 not of type Tab");if(!(c instanceof u))throw new Error("tab2 not of type Tab");if(!(l instanceof u))throw new Error("tab3 not of type Tab");c.click(),await s(e),t(e.selected).to.equal("second"),t(a.selected).to.be.false,t(c.selected).to.be.true,t(l.selected).to.be.false,e.selected="first",await s(e),t(e.selected).to.equal("first"),t(a.selected).to.be.true,t(c.selected).to.be.false,t(l.selected).to.be.false}),it("displays `vertical`",async()=>{const e=await b(o`
|
|
225
29
|
<sp-tabs selected="first" direction="vertical">
|
|
226
30
|
<sp-tab label="Tab 1" value="first"></sp-tab>
|
|
227
31
|
<sp-tab label="Tab 2" value="second"></sp-tab>
|
|
228
32
|
<sp-tab label="Tab 3" value="third"></sp-tab>
|
|
229
33
|
</sp-tabs>
|
|
230
|
-
`);
|
|
231
|
-
await elementUpdated(el);
|
|
232
|
-
expect(el.selected).to.be.equal("first");
|
|
233
|
-
el.selected = "first";
|
|
234
|
-
await elementUpdated(el);
|
|
235
|
-
expect(el.selected).to.be.equal("first");
|
|
236
|
-
});
|
|
237
|
-
it("displays with nothing `selected`", async () => {
|
|
238
|
-
const el = await fixture(html`
|
|
34
|
+
`);await s(e),t(e.selected).to.be.equal("first"),e.selected="first",await s(e),t(e.selected).to.be.equal("first")}),it("displays with nothing `selected`",async()=>{const e=await b(o`
|
|
239
35
|
<sp-tabs>
|
|
240
36
|
<sp-tab label="Tab 1" value="first"></sp-tab>
|
|
241
37
|
<sp-tab label="Tab 2" value="second"></sp-tab>
|
|
242
38
|
<sp-tab label="Tab 3" value="third"></sp-tab>
|
|
243
39
|
</sp-tabs>
|
|
244
|
-
`);
|
|
245
|
-
await elementUpdated(el);
|
|
246
|
-
expect(el.selected).to.be.equal("");
|
|
247
|
-
el.selected = "first";
|
|
248
|
-
await elementUpdated(el);
|
|
249
|
-
expect(el.selected).to.be.equal("first");
|
|
250
|
-
});
|
|
251
|
-
it("ignores children with no `value`", async () => {
|
|
252
|
-
const el = await fixture(html`
|
|
40
|
+
`);await s(e),t(e.selected).to.be.equal(""),e.selected="first",await s(e),t(e.selected).to.be.equal("first")}),it("ignores children with no `value`",async()=>{const e=await b(o`
|
|
253
41
|
<sp-tabs selected="first">
|
|
254
42
|
<sp-tab label="Tab 1" value="first"></sp-tab>
|
|
255
43
|
<div id="other">Other thing</div>
|
|
256
44
|
</sp-tabs>
|
|
257
|
-
`);
|
|
258
|
-
|
|
259
|
-
expect(el.selected).to.be.equal("first");
|
|
260
|
-
const otherThing = el.querySelector("#other");
|
|
261
|
-
otherThing.click();
|
|
262
|
-
await elementUpdated(el);
|
|
263
|
-
expect(el.selected).to.be.equal("first");
|
|
264
|
-
});
|
|
265
|
-
it("allows selection to be cancellable", async () => {
|
|
266
|
-
const cancelSelection = (event) => event.preventDefault();
|
|
267
|
-
const el = await fixture(html`
|
|
268
|
-
<sp-tabs selected="first" @change=${cancelSelection}>
|
|
45
|
+
`);await s(e),t(e.selected).to.be.equal("first"),e.querySelector("#other").click(),await s(e),t(e.selected).to.be.equal("first")}),it("allows selection to be cancellable",async()=>{const a=await b(o`
|
|
46
|
+
<sp-tabs selected="first" @change=${l=>l.preventDefault()}>
|
|
269
47
|
<sp-tab label="Tab 1" value="first"></sp-tab>
|
|
270
48
|
<sp-tab label="Tab 2" value="second"></sp-tab>
|
|
271
49
|
</sp-tabs>
|
|
272
|
-
`);
|
|
273
|
-
await elementUpdated(el);
|
|
274
|
-
expect(el.selected).to.be.equal("first");
|
|
275
|
-
const secondTab = el.querySelector('[value="second"]');
|
|
276
|
-
secondTab.click();
|
|
277
|
-
await elementUpdated(el);
|
|
278
|
-
expect(el.selected).to.be.equal("first");
|
|
279
|
-
});
|
|
280
|
-
it("prevents [tabindex=0] while `focusin`", async () => {
|
|
281
|
-
const el = await fixture(html`
|
|
50
|
+
`);await s(a),t(a.selected).to.be.equal("first"),a.querySelector('[value="second"]').click(),await s(a),t(a.selected).to.be.equal("first")}),it("prevents [tabindex=0] while `focusin`",async()=>{const e=await b(o`
|
|
282
51
|
<sp-tabs>
|
|
283
52
|
<sp-tab label="Tab 1" value="first" selected>
|
|
284
53
|
<sp-icon-checkmark slot="icon"></sp-icon-checkmark>
|
|
@@ -287,28 +56,7 @@ describe("Tabs", () => {
|
|
|
287
56
|
<sp-icon-checkmark slot="icon"></sp-icon-checkmark>
|
|
288
57
|
</sp-tab>
|
|
289
58
|
</sp-tabs>
|
|
290
|
-
`);
|
|
291
|
-
const selected = el.querySelector('[value="first"]');
|
|
292
|
-
const toBeSelected = el.querySelector('[value="second"]');
|
|
293
|
-
await elementUpdated(el);
|
|
294
|
-
await waitUntil(() => el.selected === "first", "wait for selection");
|
|
295
|
-
expect(el.selected).to.equal("first");
|
|
296
|
-
expect(selected.tabIndex).to.equal(0);
|
|
297
|
-
toBeSelected.dispatchEvent(new Event("focusin", { bubbles: true }));
|
|
298
|
-
await elementUpdated(el);
|
|
299
|
-
expect(el.selected).to.equal("first");
|
|
300
|
-
expect(selected.tabIndex).to.equal(-1);
|
|
301
|
-
toBeSelected.dispatchEvent(new Event("focusout", { bubbles: true }));
|
|
302
|
-
await elementUpdated(el);
|
|
303
|
-
expect(el.selected).to.equal("first");
|
|
304
|
-
expect(selected.tabIndex).to.equal(0);
|
|
305
|
-
toBeSelected.click();
|
|
306
|
-
await elementUpdated(el);
|
|
307
|
-
expect(el.selected).to.equal("second");
|
|
308
|
-
expect(toBeSelected.tabIndex).to.equal(0);
|
|
309
|
-
});
|
|
310
|
-
it("accepts keyboard based selection", async () => {
|
|
311
|
-
const el = await fixture(html`
|
|
59
|
+
`),a=e.querySelector('[value="first"]'),c=e.querySelector('[value="second"]');await s(e),await E(()=>e.selected==="first","wait for selection"),t(e.selected).to.equal("first"),t(a.tabIndex).to.equal(0),c.dispatchEvent(new Event("focusin",{bubbles:!0})),await s(e),t(e.selected).to.equal("first"),t(a.tabIndex).to.equal(-1),c.dispatchEvent(new Event("focusout",{bubbles:!0})),await s(e),t(e.selected).to.equal("first"),t(a.tabIndex).to.equal(0),c.click(),await s(e),t(e.selected).to.equal("second"),t(c.tabIndex).to.equal(0)}),it("accepts keyboard based selection",async()=>{const e=await b(o`
|
|
312
60
|
<sp-tabs selected="Unknown">
|
|
313
61
|
<sp-tab label="Tab 1" value="first">
|
|
314
62
|
<sp-icon-checkmark slot="icon"></sp-icon-checkmark>
|
|
@@ -317,33 +65,7 @@ describe("Tabs", () => {
|
|
|
317
65
|
<sp-icon-checkmark slot="icon"></sp-icon-checkmark>
|
|
318
66
|
</sp-tab>
|
|
319
67
|
</sp-tabs>
|
|
320
|
-
`);
|
|
321
|
-
await elementUpdated(el);
|
|
322
|
-
expect(el.selected).to.be.equal("");
|
|
323
|
-
const firstTab = el.querySelector('[value="first"]');
|
|
324
|
-
const secondTab = el.querySelector('[value="second"]');
|
|
325
|
-
firstTab.dispatchEvent(new FocusEvent("focusin", { bubbles: true }));
|
|
326
|
-
firstTab.focus();
|
|
327
|
-
await elementUpdated(el);
|
|
328
|
-
expect(document.activeElement === firstTab, "Focus first tab").to.be.true;
|
|
329
|
-
firstTab.dispatchEvent(arrowLeftEvent());
|
|
330
|
-
firstTab.dispatchEvent(arrowUpEvent());
|
|
331
|
-
await elementUpdated(el);
|
|
332
|
-
expect(document.activeElement === secondTab, "Focus second tab").to.be.true;
|
|
333
|
-
secondTab.dispatchEvent(enterEvent());
|
|
334
|
-
await elementUpdated(el);
|
|
335
|
-
expect(el.selected).to.be.equal("second");
|
|
336
|
-
secondTab.dispatchEvent(arrowRightEvent());
|
|
337
|
-
await elementUpdated(el);
|
|
338
|
-
expect(document.activeElement === firstTab, "Focus first tab").to.be.true;
|
|
339
|
-
firstTab.dispatchEvent(spaceEvent());
|
|
340
|
-
await elementUpdated(el);
|
|
341
|
-
expect(el.selected).to.be.equal("first");
|
|
342
|
-
});
|
|
343
|
-
it("accepts keyboard based selection through shadow DOM", async () => {
|
|
344
|
-
class TabTestEl extends LitElement {
|
|
345
|
-
render() {
|
|
346
|
-
return html`
|
|
68
|
+
`);await s(e),t(e.selected).to.be.equal("");const a=e.querySelector('[value="first"]'),c=e.querySelector('[value="second"]');a.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),a.focus(),await s(e),t(document.activeElement===a,"Focus first tab").to.be.true,a.dispatchEvent(f()),a.dispatchEvent(w()),await s(e),t(document.activeElement===c,"Focus second tab").to.be.true,c.dispatchEvent(v()),await s(e),t(e.selected).to.be.equal("second"),c.dispatchEvent(m()),await s(e),t(document.activeElement===a,"Focus first tab").to.be.true,a.dispatchEvent(T()),await s(e),t(e.selected).to.be.equal("first")}),it("accepts keyboard based selection through shadow DOM",async()=>{class e extends S{render(){return o`
|
|
347
69
|
<sp-tabs selected="Unknown">
|
|
348
70
|
<sp-tab label="Tab 1" value="first">
|
|
349
71
|
<sp-icon-checkmark slot="icon"></sp-icon-checkmark>
|
|
@@ -352,43 +74,9 @@ describe("Tabs", () => {
|
|
|
352
74
|
<sp-icon-checkmark slot="icon"></sp-icon-checkmark>
|
|
353
75
|
</sp-tab>
|
|
354
76
|
</sp-tabs>
|
|
355
|
-
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
customElements.define("tab-test-el", TabTestEl);
|
|
359
|
-
const el = await fixture(html`
|
|
77
|
+
`}}customElements.define("tab-test-el",e);const a=await b(o`
|
|
360
78
|
<tab-test-el></tab-test-el>
|
|
361
|
-
`);
|
|
362
|
-
await elementUpdated(el);
|
|
363
|
-
const rootNode = el.shadowRoot;
|
|
364
|
-
const tabsEl = rootNode.querySelector("sp-tabs");
|
|
365
|
-
await elementUpdated(tabsEl);
|
|
366
|
-
expect(tabsEl.selected).to.be.equal("");
|
|
367
|
-
const firstTab = tabsEl.querySelector('[value="first"]');
|
|
368
|
-
const secondTab = tabsEl.querySelector('[value="second"]');
|
|
369
|
-
firstTab.dispatchEvent(new FocusEvent("focusin", { bubbles: true }));
|
|
370
|
-
firstTab.focus();
|
|
371
|
-
await elementUpdated(el);
|
|
372
|
-
let activeElement = rootNode.activeElement;
|
|
373
|
-
expect(activeElement === firstTab, "Focus first tab").to.be.true;
|
|
374
|
-
firstTab.dispatchEvent(arrowLeftEvent());
|
|
375
|
-
firstTab.dispatchEvent(arrowUpEvent());
|
|
376
|
-
await elementUpdated(el);
|
|
377
|
-
activeElement = rootNode.activeElement;
|
|
378
|
-
expect(activeElement === secondTab, "Focus second tab").to.be.true;
|
|
379
|
-
secondTab.dispatchEvent(enterEvent());
|
|
380
|
-
await elementUpdated(el);
|
|
381
|
-
expect(tabsEl.selected).to.be.equal("second");
|
|
382
|
-
secondTab.dispatchEvent(arrowRightEvent());
|
|
383
|
-
await elementUpdated(el);
|
|
384
|
-
activeElement = rootNode.activeElement;
|
|
385
|
-
expect(activeElement === firstTab, "Focus first tab").to.be.true;
|
|
386
|
-
firstTab.dispatchEvent(spaceEvent());
|
|
387
|
-
await elementUpdated(el);
|
|
388
|
-
expect(tabsEl.selected).to.be.equal("first");
|
|
389
|
-
});
|
|
390
|
-
it('accepts keyboard based selection - [direction="vertical"]', async () => {
|
|
391
|
-
const el = await fixture(html`
|
|
79
|
+
`);await s(a);const c=a.shadowRoot,l=c.querySelector("sp-tabs");await s(l),t(l.selected).to.be.equal("");const n=l.querySelector('[value="first"]'),i=l.querySelector('[value="second"]');n.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),n.focus(),await s(a);let r=c.activeElement;t(r===n,"Focus first tab").to.be.true,n.dispatchEvent(f()),n.dispatchEvent(w()),await s(a),r=c.activeElement,t(r===i,"Focus second tab").to.be.true,i.dispatchEvent(v()),await s(a),t(l.selected).to.be.equal("second"),i.dispatchEvent(m()),await s(a),r=c.activeElement,t(r===n,"Focus first tab").to.be.true,n.dispatchEvent(T()),await s(a),t(l.selected).to.be.equal("first")}),it('accepts keyboard based selection - [direction="vertical"]',async()=>{const e=await b(o`
|
|
392
80
|
<sp-tabs selected="Unknown" direction="vertical">
|
|
393
81
|
<sp-tab label="Tab 1" value="first">
|
|
394
82
|
<sp-icon-checkmark slot="icon"></sp-icon-checkmark>
|
|
@@ -397,82 +85,15 @@ describe("Tabs", () => {
|
|
|
397
85
|
<sp-icon-checkmark slot="icon"></sp-icon-checkmark>
|
|
398
86
|
</sp-tab>
|
|
399
87
|
</sp-tabs>
|
|
400
|
-
`);
|
|
401
|
-
await elementUpdated(el);
|
|
402
|
-
expect(el.selected).to.be.equal("");
|
|
403
|
-
const firstTab = el.querySelector('[value="first"]');
|
|
404
|
-
const secondTab = el.querySelector('[value="second"]');
|
|
405
|
-
firstTab.dispatchEvent(new FocusEvent("focusin", { bubbles: true }));
|
|
406
|
-
firstTab.focus();
|
|
407
|
-
await elementUpdated(el);
|
|
408
|
-
expect(document.activeElement === firstTab, "Focus first tab").to.be.true;
|
|
409
|
-
firstTab.dispatchEvent(arrowLeftEvent());
|
|
410
|
-
firstTab.dispatchEvent(arrowUpEvent());
|
|
411
|
-
await elementUpdated(el);
|
|
412
|
-
expect(document.activeElement === secondTab, "Focus second tab").to.be.true;
|
|
413
|
-
secondTab.dispatchEvent(enterEvent());
|
|
414
|
-
await elementUpdated(el);
|
|
415
|
-
expect(el.selected).to.be.equal("second");
|
|
416
|
-
secondTab.dispatchEvent(arrowDownEvent());
|
|
417
|
-
await elementUpdated(el);
|
|
418
|
-
expect(document.activeElement === firstTab, "Focus first tab").to.be.true;
|
|
419
|
-
firstTab.dispatchEvent(spaceEvent());
|
|
420
|
-
await elementUpdated(el);
|
|
421
|
-
expect(el.selected).to.be.equal("first");
|
|
422
|
-
});
|
|
423
|
-
it("selects through slotted DOM", async () => {
|
|
424
|
-
const el = await fixture(html`
|
|
88
|
+
`);await s(e),t(e.selected).to.be.equal("");const a=e.querySelector('[value="first"]'),c=e.querySelector('[value="second"]');a.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),a.focus(),await s(e),t(document.activeElement===a,"Focus first tab").to.be.true,a.dispatchEvent(f()),a.dispatchEvent(w()),await s(e),t(document.activeElement===c,"Focus second tab").to.be.true,c.dispatchEvent(v()),await s(e),t(e.selected).to.be.equal("second"),c.dispatchEvent(g()),await s(e),t(document.activeElement===a,"Focus first tab").to.be.true,a.dispatchEvent(T()),await s(e),t(e.selected).to.be.equal("first")}),it("selects through slotted DOM",async()=>{const e=await b(o`
|
|
425
89
|
<sp-tabs selected="first">
|
|
426
90
|
<sp-tab value="first">Tab 1</sp-tab>
|
|
427
91
|
<sp-tab value="second"><span>Tab 2</span></sp-tab>
|
|
428
92
|
</sp-tabs>
|
|
429
|
-
`);
|
|
430
|
-
const span = el.querySelector("span");
|
|
431
|
-
await elementUpdated(el);
|
|
432
|
-
expect(el.selected).to.equal("first");
|
|
433
|
-
span.click();
|
|
434
|
-
await elementUpdated(el);
|
|
435
|
-
expect(el.selected).to.equal("second");
|
|
436
|
-
});
|
|
437
|
-
it("updates selection indicator in response to tab updates", async () => {
|
|
438
|
-
const el = await fixture(html`
|
|
93
|
+
`),a=e.querySelector("span");await s(e),t(e.selected).to.equal("first"),a.click(),await s(e),t(e.selected).to.equal("second")}),it("updates selection indicator in response to tab updates",async()=>{const e=await b(o`
|
|
439
94
|
<sp-tabs selected="first">
|
|
440
95
|
<sp-tab value="first">Tab 1</sp-tab>
|
|
441
96
|
<sp-tab value="second">Tab 2</sp-tab>
|
|
442
97
|
</sp-tabs>
|
|
443
|
-
`);
|
|
444
|
-
const selected = el.querySelector('[value="first"]');
|
|
445
|
-
await elementUpdated(el);
|
|
446
|
-
const extractScaleX = /scaleX\((.+)\)/;
|
|
447
|
-
const initialExec = extractScaleX.exec(el.selectionIndicatorStyle);
|
|
448
|
-
const initialWidth = parseFloat(initialExec[1]);
|
|
449
|
-
let contentchanged = oneEvent(el, "sp-tab-contentchange");
|
|
450
|
-
selected.textContent = "WWWWWWWWWWWWWWWWWWWWWWWWW";
|
|
451
|
-
await contentchanged;
|
|
452
|
-
await elementUpdated(el);
|
|
453
|
-
const longerExec = extractScaleX.exec(el.selectionIndicatorStyle);
|
|
454
|
-
const longerWidth = parseFloat(longerExec[1]);
|
|
455
|
-
expect(initialWidth).to.be.lessThan(longerWidth);
|
|
456
|
-
contentchanged = oneEvent(el, "sp-tab-contentchange");
|
|
457
|
-
selected.textContent = "W";
|
|
458
|
-
await contentchanged;
|
|
459
|
-
await elementUpdated(el);
|
|
460
|
-
const shorterExec = extractScaleX.exec(el.selectionIndicatorStyle);
|
|
461
|
-
const shorterWidth = parseFloat(shorterExec[1]);
|
|
462
|
-
expect(initialWidth).to.be.greaterThan(shorterWidth);
|
|
463
|
-
expect(longerWidth).to.be.greaterThan(shorterWidth);
|
|
464
|
-
});
|
|
465
|
-
it("clicks on #list do not throw", async () => {
|
|
466
|
-
const tabs = await createTabs();
|
|
467
|
-
const tabList = tabs.shadowRoot.querySelector("#list");
|
|
468
|
-
let hasError = false;
|
|
469
|
-
const oldOnerror = window.onerror;
|
|
470
|
-
window.onerror = () => {
|
|
471
|
-
hasError = true;
|
|
472
|
-
};
|
|
473
|
-
tabList.dispatchEvent(new MouseEvent("click"));
|
|
474
|
-
expect(hasError, "it should not error").to.be.false;
|
|
475
|
-
window.onerror = oldOnerror;
|
|
476
|
-
});
|
|
477
|
-
});
|
|
98
|
+
`),a=e.querySelector('[value="first"]');await s(e);const c=/scaleX\((.+)\)/,l=c.exec(e.selectionIndicatorStyle),n=parseFloat(l[1]);let i=y(e,"sp-tab-contentchange");a.textContent="WWWWWWWWWWWWWWWWWWWWWWWWW",await i,await s(e);const r=c.exec(e.selectionIndicatorStyle),p=parseFloat(r[1]);t(n).to.be.lessThan(p),i=y(e,"sp-tab-contentchange"),a.textContent="W",await i,await s(e);const k=c.exec(e.selectionIndicatorStyle),q=parseFloat(k[1]);t(n).to.be.greaterThan(q),t(p).to.be.greaterThan(q)}),it("clicks on #list do not throw",async()=>{const a=(await d()).shadowRoot.querySelector("#list");let c=!1;const l=window.onerror;window.onerror=()=>{c=!0},a.dispatchEvent(new MouseEvent("click")),t(c,"it should not error").to.be.false,window.onerror=l})});
|
|
478
99
|
//# sourceMappingURL=tabs.test.js.map
|