@spectrum-web-components/tabs 1.1.0 → 1.1.2
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 +7 -7
- package/sp-tab-panel.d.ts +6 -0
- package/sp-tab-panel.dev.js +5 -0
- package/sp-tab-panel.dev.js.map +7 -0
- package/sp-tab-panel.js +2 -0
- package/sp-tab-panel.js.map +7 -0
- package/sp-tab.d.ts +6 -0
- package/sp-tab.dev.js +5 -0
- package/sp-tab.dev.js.map +7 -0
- package/sp-tab.js +2 -0
- package/sp-tab.js.map +7 -0
- package/sp-tabs-overflow.d.ts +6 -0
- package/sp-tabs-overflow.dev.js +5 -0
- package/sp-tabs-overflow.dev.js.map +7 -0
- package/sp-tabs-overflow.js +2 -0
- package/sp-tabs-overflow.js.map +7 -0
- package/sp-tabs.d.ts +6 -0
- package/sp-tabs.dev.js +5 -0
- package/sp-tabs.dev.js.map +7 -0
- package/sp-tabs.js +2 -0
- package/sp-tabs.js.map +7 -0
- package/src/Tab.d.ts +28 -0
- package/src/Tab.dev.js +94 -0
- package/src/Tab.dev.js.map +7 -0
- package/src/Tab.js +10 -0
- package/src/Tab.js.map +7 -0
- package/src/TabPanel.d.ts +16 -0
- package/src/TabPanel.dev.js +66 -0
- package/src/TabPanel.dev.js.map +7 -0
- package/src/TabPanel.js +7 -0
- package/src/TabPanel.js.map +7 -0
- package/src/Tabs.d.ts +102 -0
- package/src/Tabs.dev.js +457 -0
- package/src/Tabs.dev.js.map +7 -0
- package/src/Tabs.js +30 -0
- package/src/Tabs.js.map +7 -0
- package/src/TabsOverflow.d.ts +31 -0
- package/src/TabsOverflow.dev.js +165 -0
- package/src/TabsOverflow.dev.js.map +7 -0
- package/src/TabsOverflow.js +36 -0
- package/src/TabsOverflow.js.map +7 -0
- package/src/index.d.ts +4 -0
- package/src/index.dev.js +6 -0
- package/src/index.dev.js.map +7 -0
- package/src/index.js +2 -0
- package/src/index.js.map +7 -0
- package/src/spectrum-tab.css.d.ts +2 -0
- package/src/spectrum-tab.css.dev.js +7 -0
- package/src/spectrum-tab.css.dev.js.map +7 -0
- package/src/spectrum-tab.css.js +4 -0
- package/src/spectrum-tab.css.js.map +7 -0
- package/src/spectrum-tabs-sizes.css.d.ts +2 -0
- package/src/spectrum-tabs-sizes.css.dev.js +7 -0
- package/src/spectrum-tabs-sizes.css.dev.js.map +7 -0
- package/src/spectrum-tabs-sizes.css.js +4 -0
- package/src/spectrum-tabs-sizes.css.js.map +7 -0
- package/src/spectrum-tabs.css.d.ts +2 -0
- package/src/spectrum-tabs.css.dev.js +7 -0
- package/src/spectrum-tabs.css.dev.js.map +7 -0
- package/src/spectrum-tabs.css.js +4 -0
- package/src/spectrum-tabs.css.js.map +7 -0
- package/src/tab-overrides.css.d.ts +2 -0
- package/src/tab-overrides.css.dev.js +7 -0
- package/src/tab-overrides.css.dev.js.map +7 -0
- package/src/tab-overrides.css.js +4 -0
- package/src/tab-overrides.css.js.map +7 -0
- package/src/tab-panel.css.d.ts +2 -0
- package/src/tab-panel.css.dev.js +7 -0
- package/src/tab-panel.css.dev.js.map +7 -0
- package/src/tab-panel.css.js +4 -0
- package/src/tab-panel.css.js.map +7 -0
- package/src/tab.css.d.ts +2 -0
- package/src/tab.css.dev.js +7 -0
- package/src/tab.css.dev.js.map +7 -0
- package/src/tab.css.js +4 -0
- package/src/tab.css.js.map +7 -0
- package/src/tabs-overflow.css.d.ts +2 -0
- package/src/tabs-overflow.css.dev.js +7 -0
- package/src/tabs-overflow.css.dev.js.map +7 -0
- package/src/tabs-overflow.css.js +4 -0
- package/src/tabs-overflow.css.js.map +7 -0
- package/src/tabs-overrides.css.d.ts +2 -0
- package/src/tabs-overrides.css.dev.js +7 -0
- package/src/tabs-overrides.css.dev.js.map +7 -0
- package/src/tabs-overrides.css.js +4 -0
- package/src/tabs-overrides.css.js.map +7 -0
- package/src/tabs-sizes-overrides.css.d.ts +2 -0
- package/src/tabs-sizes-overrides.css.dev.js +7 -0
- package/src/tabs-sizes-overrides.css.dev.js.map +7 -0
- package/src/tabs-sizes-overrides.css.js +4 -0
- package/src/tabs-sizes-overrides.css.js.map +7 -0
- package/src/tabs-sizes.css.d.ts +2 -0
- package/src/tabs-sizes.css.dev.js +7 -0
- package/src/tabs-sizes.css.dev.js.map +7 -0
- package/src/tabs-sizes.css.js +4 -0
- package/src/tabs-sizes.css.js.map +7 -0
- package/src/tabs.css.d.ts +2 -0
- package/src/tabs.css.dev.js +7 -0
- package/src/tabs.css.dev.js.map +7 -0
- package/src/tabs.css.js +4 -0
- package/src/tabs.css.js.map +7 -0
- package/stories/index.js +53 -0
- package/stories/index.js.map +7 -0
- package/stories/tabs-horizontal-sizes.stories.js +91 -0
- package/stories/tabs-horizontal-sizes.stories.js.map +7 -0
- package/stories/tabs-overflow-panel-sizes.stories.js +35 -0
- package/stories/tabs-overflow-panel-sizes.stories.js.map +7 -0
- package/stories/tabs-overflow-sizes.stories.js +31 -0
- package/stories/tabs-overflow-sizes.stories.js.map +7 -0
- package/stories/tabs-overflow.stories.js +37 -0
- package/stories/tabs-overflow.stories.js.map +7 -0
- package/stories/tabs-vertical-right-sizes.stories.js +88 -0
- package/stories/tabs-vertical-right-sizes.stories.js.map +7 -0
- package/stories/tabs-vertical-sizes.stories.js +88 -0
- package/stories/tabs-vertical-sizes.stories.js.map +7 -0
- package/stories/tabs.stories.js +504 -0
- package/stories/tabs.stories.js.map +7 -0
- package/test/benchmark/basic-test.js +13 -0
- package/test/benchmark/basic-test.js.map +7 -0
- package/test/tab.test.js +47 -0
- package/test/tab.test.js.map +7 -0
- package/test/tabs-horizontal-sizes.test-vrt.js +5 -0
- package/test/tabs-horizontal-sizes.test-vrt.js.map +7 -0
- package/test/tabs-memory.test.js +13 -0
- package/test/tabs-memory.test.js.map +7 -0
- package/test/tabs-overflow-panel-sizes.test-vrt.js +5 -0
- package/test/tabs-overflow-panel-sizes.test-vrt.js.map +7 -0
- package/test/tabs-overflow-sizes.test-vrt.js +5 -0
- package/test/tabs-overflow-sizes.test-vrt.js.map +7 -0
- package/test/tabs-overflow.test-vrt.js +5 -0
- package/test/tabs-overflow.test-vrt.js.map +7 -0
- package/test/tabs-overflow.test.js +389 -0
- package/test/tabs-overflow.test.js.map +7 -0
- package/test/tabs-vertical-right-sizes.test-vrt.js +5 -0
- package/test/tabs-vertical-right-sizes.test-vrt.js.map +7 -0
- package/test/tabs-vertical-sizes.test-vrt.js +5 -0
- package/test/tabs-vertical-sizes.test-vrt.js.map +7 -0
- package/test/tabs.test-vrt.js +5 -0
- package/test/tabs.test-vrt.js.map +7 -0
- package/test/tabs.test.js +507 -0
- package/test/tabs.test.js.map +7 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["tabs-horizontal-sizes.test-vrt.ts"],
|
|
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-horizontal-sizes.stories.js';\nimport { regressVisuals } from '../../../test/visual/test.js';\nimport type { TestsType } from '../../../test/visual/test.js';\n\nregressVisuals('TabsHorizontalSizesStories', stories as unknown as TestsType);\n"],
|
|
5
|
+
"mappings": ";AAYA,YAAY,aAAa;AACzB,SAAS,sBAAsB;AAG/B,eAAe,8BAA8B,OAA+B;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import { html } from "@open-wc/testing";
|
|
3
|
+
import "@spectrum-web-components/tabs/sp-tabs.js";
|
|
4
|
+
import "@spectrum-web-components/tabs/sp-tab.js";
|
|
5
|
+
import { testForMemoryLeaks } from "../../../test/testing-helpers.js";
|
|
6
|
+
testForMemoryLeaks(html`
|
|
7
|
+
<sp-tabs selected="first">
|
|
8
|
+
<sp-tab label="Tab 1" value="first"></sp-tab>
|
|
9
|
+
<sp-tab label="Tab 2" value="second"></sp-tab>
|
|
10
|
+
<sp-tab label="Tab 3" value="third"></sp-tab>
|
|
11
|
+
</sp-tabs>
|
|
12
|
+
`);
|
|
13
|
+
//# sourceMappingURL=tabs-memory.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["tabs-memory.test.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2023 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\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 { html } from '@open-wc/testing';\nimport '@spectrum-web-components/tabs/sp-tabs.js';\nimport '@spectrum-web-components/tabs/sp-tab.js';\nimport { testForMemoryLeaks } from '../../../test/testing-helpers.js';\n\ntestForMemoryLeaks(html`\n <sp-tabs selected=\"first\">\n <sp-tab label=\"Tab 1\" value=\"first\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"second\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"third\"></sp-tab>\n </sp-tabs>\n`);\n"],
|
|
5
|
+
"mappings": ";AAWA,SAAS,YAAY;AACrB,OAAO;AACP,OAAO;AACP,SAAS,0BAA0B;AAEnC,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAMlB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import * as stories from "../stories/tabs-overflow-panel-sizes.stories.js";
|
|
3
|
+
import { regressVisuals } from "../../../test/visual/test.js";
|
|
4
|
+
regressVisuals("TabsOverflowPanelSizesStories", stories);
|
|
5
|
+
//# sourceMappingURL=tabs-overflow-panel-sizes.test-vrt.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["tabs-overflow-panel-sizes.test-vrt.ts"],
|
|
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-overflow-panel-sizes.stories.js';\nimport { regressVisuals } from '../../../test/visual/test.js';\nimport type { TestsType } from '../../../test/visual/test.js';\n\nregressVisuals('TabsOverflowPanelSizesStories', stories as unknown as TestsType);\n"],
|
|
5
|
+
"mappings": ";AAYA,YAAY,aAAa;AACzB,SAAS,sBAAsB;AAG/B,eAAe,iCAAiC,OAA+B;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["tabs-overflow-sizes.test-vrt.ts"],
|
|
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-overflow-sizes.stories.js';\nimport { regressVisuals } from '../../../test/visual/test.js';\nimport type { TestsType } from '../../../test/visual/test.js';\n\nregressVisuals('TabsOverflowSizesStories', stories as unknown as TestsType);\n"],
|
|
5
|
+
"mappings": ";AAYA,YAAY,aAAa;AACzB,SAAS,sBAAsB;AAG/B,eAAe,4BAA4B,OAA+B;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["tabs-overflow.test-vrt.ts"],
|
|
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-overflow.stories.js';\nimport { regressVisuals } from '../../../test/visual/test.js';\nimport type { TestsType } from '../../../test/visual/test.js';\n\nregressVisuals('TabsOverflowStories', stories as unknown as TestsType);\n"],
|
|
5
|
+
"mappings": ";AAYA,YAAY,aAAa;AACzB,SAAS,sBAAsB;AAG/B,eAAe,uBAAuB,OAA+B;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import { isFirefox } from "@spectrum-web-components/shared/src/platform.js";
|
|
3
|
+
import {
|
|
4
|
+
calculateScrollTargetForLeftSide,
|
|
5
|
+
calculateScrollTargetForRightSide
|
|
6
|
+
} from "@spectrum-web-components/tabs";
|
|
7
|
+
import "@spectrum-web-components/tabs/sp-tab-panel.js";
|
|
8
|
+
import "@spectrum-web-components/tabs/sp-tab.js";
|
|
9
|
+
import "@spectrum-web-components/tabs/sp-tabs-overflow.js";
|
|
10
|
+
import "@spectrum-web-components/tabs/sp-tabs.js";
|
|
11
|
+
import "@spectrum-web-components/theme/scale-medium.js";
|
|
12
|
+
import "@spectrum-web-components/theme/sp-theme.js";
|
|
13
|
+
import "@spectrum-web-components/theme/theme-light.js";
|
|
14
|
+
import { elementUpdated, expect, fixture, waitUntil } from "@open-wc/testing";
|
|
15
|
+
import {
|
|
16
|
+
ElementSizes,
|
|
17
|
+
html,
|
|
18
|
+
nothing
|
|
19
|
+
} from "@spectrum-web-components/base";
|
|
20
|
+
import { sendKeys, setViewport } from "@web/test-runner-commands";
|
|
21
|
+
import { repeat } from "lit/directives/repeat.js";
|
|
22
|
+
const RIGHT_BUTTON_SELECTOR = ".right-scroll";
|
|
23
|
+
const LEFT_BUTTON_SELECTOR = ".left-scroll";
|
|
24
|
+
const renderTabsOverflow = async ({
|
|
25
|
+
count,
|
|
26
|
+
size,
|
|
27
|
+
includeTabPanel,
|
|
28
|
+
selected = 1,
|
|
29
|
+
dir = "ltr"
|
|
30
|
+
}) => {
|
|
31
|
+
const theme = await fixture(html`
|
|
32
|
+
<sp-theme dir=${dir} system="spectrum" scale="medium" color="light">
|
|
33
|
+
<div class="container" style="width: 200px; height: 150px;">
|
|
34
|
+
<sp-tabs-overflow>
|
|
35
|
+
<sp-tabs size=${size} selected=${selected}>
|
|
36
|
+
${repeat(
|
|
37
|
+
new Array(count),
|
|
38
|
+
(item) => item,
|
|
39
|
+
(_item, index) => html`
|
|
40
|
+
<sp-tab
|
|
41
|
+
label=${`Tab Item ${index + 1}`}
|
|
42
|
+
value=${index + 1}
|
|
43
|
+
></sp-tab>
|
|
44
|
+
`
|
|
45
|
+
)}
|
|
46
|
+
${includeTabPanel ? html`
|
|
47
|
+
${repeat(
|
|
48
|
+
new Array(count),
|
|
49
|
+
(item) => item,
|
|
50
|
+
(_item, index) => html`
|
|
51
|
+
<sp-tab-panel value=${index + 1}>
|
|
52
|
+
Content for Tab Item ${index + 1}
|
|
53
|
+
</sp-tab-panel>
|
|
54
|
+
`
|
|
55
|
+
)}
|
|
56
|
+
` : nothing}
|
|
57
|
+
</sp-tabs>
|
|
58
|
+
</sp-tabs-overflow>
|
|
59
|
+
</div>
|
|
60
|
+
</sp-theme>
|
|
61
|
+
`);
|
|
62
|
+
await elementUpdated(theme);
|
|
63
|
+
const tabsContainer = theme.querySelector(".container");
|
|
64
|
+
return tabsContainer;
|
|
65
|
+
};
|
|
66
|
+
describe("TabsOverflow", () => {
|
|
67
|
+
it("loads default tabs-overflow accessibly", async () => {
|
|
68
|
+
const el = await fixture(html`
|
|
69
|
+
<sp-tabs-overflow>
|
|
70
|
+
<sp-tabs size="m" selected="1">
|
|
71
|
+
<sp-tab label="Tab Item 1" value="1"></sp-tab>
|
|
72
|
+
<sp-tab label="Tab Item 2" value="2"></sp-tab>
|
|
73
|
+
<sp-tab-panel value="1">Tab Content 1</sp-tab-panel>
|
|
74
|
+
<sp-tab-panel value="2">Tab Content 2</sp-tab-panel>
|
|
75
|
+
</sp-tabs>
|
|
76
|
+
</sp-tabs-overflow>
|
|
77
|
+
`);
|
|
78
|
+
await elementUpdated(el);
|
|
79
|
+
await expect(el).to.be.accessible();
|
|
80
|
+
});
|
|
81
|
+
it("show render left and right buttons in shadowDom", async () => {
|
|
82
|
+
const el = await renderTabsOverflow({
|
|
83
|
+
count: 20,
|
|
84
|
+
size: ElementSizes.L,
|
|
85
|
+
includeTabPanel: true
|
|
86
|
+
});
|
|
87
|
+
const spTabsOverflows = el.querySelector(
|
|
88
|
+
"sp-tabs-overflow"
|
|
89
|
+
);
|
|
90
|
+
const rightButton = spTabsOverflows.shadowRoot.querySelector(
|
|
91
|
+
".right-scroll"
|
|
92
|
+
);
|
|
93
|
+
expect(rightButton).to.exist;
|
|
94
|
+
const leftButton = spTabsOverflows.shadowRoot.querySelector(
|
|
95
|
+
".left-scroll"
|
|
96
|
+
);
|
|
97
|
+
expect(leftButton).to.exist;
|
|
98
|
+
});
|
|
99
|
+
it("reflect proper sp-tab size", async () => {
|
|
100
|
+
const el = await renderTabsOverflow({
|
|
101
|
+
count: 20,
|
|
102
|
+
size: ElementSizes.M,
|
|
103
|
+
includeTabPanel: true
|
|
104
|
+
});
|
|
105
|
+
const spTabsOverflows = el.querySelector(
|
|
106
|
+
"sp-tabs-overflow"
|
|
107
|
+
);
|
|
108
|
+
expect(spTabsOverflows.getAttribute("size")).to.equal("m");
|
|
109
|
+
});
|
|
110
|
+
it("should scroll when the button is clicked", async () => {
|
|
111
|
+
const el = await renderTabsOverflow({
|
|
112
|
+
count: 20,
|
|
113
|
+
size: ElementSizes.L,
|
|
114
|
+
includeTabPanel: true
|
|
115
|
+
});
|
|
116
|
+
await elementUpdated(el);
|
|
117
|
+
const spTabsOverflows = el.querySelector(
|
|
118
|
+
"sp-tabs-overflow"
|
|
119
|
+
);
|
|
120
|
+
const leftButton = spTabsOverflows.shadowRoot.querySelector(
|
|
121
|
+
".left-scroll"
|
|
122
|
+
);
|
|
123
|
+
const rightButton = spTabsOverflows.shadowRoot.querySelector(
|
|
124
|
+
".right-scroll"
|
|
125
|
+
);
|
|
126
|
+
leftButton.dispatchEvent(new Event("click", {}));
|
|
127
|
+
const tabsEl = spTabsOverflows.querySelector("sp-tab");
|
|
128
|
+
const initialLeft = tabsEl.getBoundingClientRect().left;
|
|
129
|
+
rightButton.dispatchEvent(new Event("click", {}));
|
|
130
|
+
await elementUpdated(el);
|
|
131
|
+
rightButton.dispatchEvent(new Event("click", {}));
|
|
132
|
+
await elementUpdated(el);
|
|
133
|
+
rightButton.dispatchEvent(new Event("click", {}));
|
|
134
|
+
await elementUpdated(el);
|
|
135
|
+
const finalLeft = tabsEl.getBoundingClientRect().left;
|
|
136
|
+
expect(finalLeft).to.be.lessThanOrEqual(initialLeft);
|
|
137
|
+
});
|
|
138
|
+
it("should scroll up to the last item and back in LTR", async () => {
|
|
139
|
+
if (isFirefox()) return;
|
|
140
|
+
const el = await renderTabsOverflow({
|
|
141
|
+
count: 8,
|
|
142
|
+
size: ElementSizes.L,
|
|
143
|
+
includeTabPanel: true,
|
|
144
|
+
dir: "ltr"
|
|
145
|
+
});
|
|
146
|
+
await elementUpdated(el);
|
|
147
|
+
await setViewport({ width: 360, height: 640 });
|
|
148
|
+
await nextFrame();
|
|
149
|
+
const tabsOverflow = el.querySelector(
|
|
150
|
+
"sp-tabs-overflow"
|
|
151
|
+
);
|
|
152
|
+
expect(tabsOverflow["overflowState"].canScrollLeft).to.be.false;
|
|
153
|
+
expect(tabsOverflow["overflowState"].canScrollRight).to.be.true;
|
|
154
|
+
await scrollToEnd(el, RIGHT_BUTTON_SELECTOR, "ltr");
|
|
155
|
+
expect(tabsOverflow["overflowState"].canScrollLeft).to.be.true;
|
|
156
|
+
expect(tabsOverflow["overflowState"].canScrollRight).to.be.false;
|
|
157
|
+
await scrollToEnd(el, LEFT_BUTTON_SELECTOR, "ltr");
|
|
158
|
+
expect(tabsOverflow["overflowState"].canScrollLeft).to.be.false;
|
|
159
|
+
expect(tabsOverflow["overflowState"].canScrollRight).to.be.true;
|
|
160
|
+
});
|
|
161
|
+
it("should scroll up to the last item and back in RTL", async () => {
|
|
162
|
+
if (isFirefox()) return;
|
|
163
|
+
const el = await renderTabsOverflow({
|
|
164
|
+
count: 8,
|
|
165
|
+
size: ElementSizes.L,
|
|
166
|
+
includeTabPanel: true,
|
|
167
|
+
dir: "rtl"
|
|
168
|
+
});
|
|
169
|
+
await elementUpdated(el);
|
|
170
|
+
await setViewport({ width: 360, height: 640 });
|
|
171
|
+
await nextFrame();
|
|
172
|
+
const tabsOverflow = el.querySelector(
|
|
173
|
+
"sp-tabs-overflow"
|
|
174
|
+
);
|
|
175
|
+
expect(tabsOverflow["overflowState"].canScrollLeft).to.be.true;
|
|
176
|
+
expect(tabsOverflow["overflowState"].canScrollRight).to.be.false;
|
|
177
|
+
await scrollToEnd(el, LEFT_BUTTON_SELECTOR, "rtl");
|
|
178
|
+
expect(tabsOverflow["overflowState"].canScrollLeft).to.be.false;
|
|
179
|
+
expect(tabsOverflow["overflowState"].canScrollRight).to.be.true;
|
|
180
|
+
await scrollToEnd(el, RIGHT_BUTTON_SELECTOR, "rtl");
|
|
181
|
+
expect(tabsOverflow["overflowState"].canScrollLeft).to.be.true;
|
|
182
|
+
expect(tabsOverflow["overflowState"].canScrollRight).to.be.false;
|
|
183
|
+
});
|
|
184
|
+
it("should fail properly if slot is not sp-tabs", async () => {
|
|
185
|
+
const el = await fixture(html`
|
|
186
|
+
<sp-tabs-overflow>
|
|
187
|
+
<div>Some div</div>
|
|
188
|
+
</sp-tabs-overflow>
|
|
189
|
+
`);
|
|
190
|
+
await elementUpdated(el);
|
|
191
|
+
const slot = el.shadowRoot.querySelector("slot");
|
|
192
|
+
const slotContent = (slot == null ? void 0 : slot.assignedElements()) || "";
|
|
193
|
+
expect(slotContent[0].toString()).to.not.contains("Tabs");
|
|
194
|
+
});
|
|
195
|
+
it("should automatically bring the selected tab into view", async () => {
|
|
196
|
+
const el = await renderTabsOverflow({
|
|
197
|
+
count: 20,
|
|
198
|
+
size: ElementSizes.L,
|
|
199
|
+
includeTabPanel: false,
|
|
200
|
+
selected: 10
|
|
201
|
+
});
|
|
202
|
+
await elementUpdated(el);
|
|
203
|
+
const tabsEl = el.querySelector("sp-tabs");
|
|
204
|
+
let selectedTab = tabsEl.querySelector(
|
|
205
|
+
`[role="tab"][value="10"]`
|
|
206
|
+
);
|
|
207
|
+
expect(selectedTab).to.exist;
|
|
208
|
+
let selectedTabPosition = selectedTab.getBoundingClientRect();
|
|
209
|
+
expect(selectedTabPosition.left).to.be.greaterThan(0);
|
|
210
|
+
expect(selectedTabPosition.left).to.be.lessThan(tabsEl.offsetWidth);
|
|
211
|
+
const firstTab = tabsEl.querySelector(`[role="tab"][value="1"]`);
|
|
212
|
+
const firstTabPosition = firstTab.getBoundingClientRect();
|
|
213
|
+
expect(firstTabPosition.left).to.be.lessThan(0);
|
|
214
|
+
tabsEl.selected = "1";
|
|
215
|
+
await elementUpdated(tabsEl);
|
|
216
|
+
selectedTab = tabsEl.querySelector(`[role="tab"][value="1"]`);
|
|
217
|
+
expect(selectedTab).to.exist;
|
|
218
|
+
selectedTabPosition = selectedTab.getBoundingClientRect();
|
|
219
|
+
expect(selectedTabPosition.left).to.be.greaterThan(0);
|
|
220
|
+
expect(selectedTabPosition.left).to.be.lessThan(tabsEl.offsetWidth);
|
|
221
|
+
const previousSelection = tabsEl.querySelector(
|
|
222
|
+
`[role="tab"][value="10"]`
|
|
223
|
+
);
|
|
224
|
+
const previousSelectionPosition = previousSelection.getBoundingClientRect();
|
|
225
|
+
expect(previousSelectionPosition.left).to.be.greaterThan(
|
|
226
|
+
tabsEl.offsetWidth
|
|
227
|
+
);
|
|
228
|
+
});
|
|
229
|
+
it("prev and next buttons have default labels", async () => {
|
|
230
|
+
const el = await renderTabsOverflow({
|
|
231
|
+
count: 20,
|
|
232
|
+
size: ElementSizes.M,
|
|
233
|
+
includeTabPanel: true
|
|
234
|
+
});
|
|
235
|
+
await elementUpdated(el);
|
|
236
|
+
const spTabsOverflows = el.querySelector(
|
|
237
|
+
"sp-tabs-overflow"
|
|
238
|
+
);
|
|
239
|
+
const leftButton = spTabsOverflows.shadowRoot.querySelector(
|
|
240
|
+
".left-scroll"
|
|
241
|
+
);
|
|
242
|
+
const rightButton = spTabsOverflows.shadowRoot.querySelector(
|
|
243
|
+
".right-scroll"
|
|
244
|
+
);
|
|
245
|
+
expect(leftButton == null ? void 0 : leftButton.getAttribute("aria-label")).to.equal(
|
|
246
|
+
"Scroll to previous tabs"
|
|
247
|
+
);
|
|
248
|
+
expect(rightButton == null ? void 0 : rightButton.getAttribute("aria-label")).to.equal(
|
|
249
|
+
"Scroll to next tabs"
|
|
250
|
+
);
|
|
251
|
+
});
|
|
252
|
+
it("prev and next buttons labels overwritten via attributes", async () => {
|
|
253
|
+
const tabsContainer = await fixture(html`
|
|
254
|
+
<div class="container" style="width: 200px; height: 150px;">
|
|
255
|
+
<sp-tabs-overflow
|
|
256
|
+
label-previous="custom label prev"
|
|
257
|
+
label-next="custom label next"
|
|
258
|
+
>
|
|
259
|
+
<sp-tabs size=${ElementSizes.M} selected=${1}>
|
|
260
|
+
${repeat(
|
|
261
|
+
new Array(20),
|
|
262
|
+
(item) => item,
|
|
263
|
+
(_item, index) => html`
|
|
264
|
+
<sp-tab
|
|
265
|
+
label=${`Tab Item ${index + 1}`}
|
|
266
|
+
value=${index + 1}
|
|
267
|
+
></sp-tab>
|
|
268
|
+
`
|
|
269
|
+
)}
|
|
270
|
+
${repeat(
|
|
271
|
+
new Array(20),
|
|
272
|
+
(item) => item,
|
|
273
|
+
(_item, index) => html`
|
|
274
|
+
<sp-tab-panel value=${index + 1}>
|
|
275
|
+
Content for Tab Item ${index + 1}
|
|
276
|
+
</sp-tab-panel>
|
|
277
|
+
`
|
|
278
|
+
)}
|
|
279
|
+
</sp-tabs>
|
|
280
|
+
</sp-tabs-overflow>
|
|
281
|
+
</div>
|
|
282
|
+
`);
|
|
283
|
+
await elementUpdated(tabsContainer);
|
|
284
|
+
const el = tabsContainer;
|
|
285
|
+
const spTabsOverflows = el.querySelector(
|
|
286
|
+
"sp-tabs-overflow"
|
|
287
|
+
);
|
|
288
|
+
const leftButton = spTabsOverflows.shadowRoot.querySelector(
|
|
289
|
+
".left-scroll"
|
|
290
|
+
);
|
|
291
|
+
const rightButton = spTabsOverflows.shadowRoot.querySelector(
|
|
292
|
+
".right-scroll"
|
|
293
|
+
);
|
|
294
|
+
expect(leftButton == null ? void 0 : leftButton.getAttribute("aria-label")).to.equal(
|
|
295
|
+
"custom label prev"
|
|
296
|
+
);
|
|
297
|
+
expect(rightButton == null ? void 0 : rightButton.getAttribute("aria-label")).to.equal(
|
|
298
|
+
"custom label next"
|
|
299
|
+
);
|
|
300
|
+
});
|
|
301
|
+
});
|
|
302
|
+
describe("calculateScrollTargetForRightSide", () => {
|
|
303
|
+
const container = { offsetWidth: 100, scrollLeft: 0 };
|
|
304
|
+
const tabs = [
|
|
305
|
+
{ offsetLeft: 0, offsetWidth: 100 },
|
|
306
|
+
// currently selected tab
|
|
307
|
+
{ offsetLeft: 100, offsetWidth: 100 },
|
|
308
|
+
{ offsetLeft: 200, offsetWidth: 100 }
|
|
309
|
+
];
|
|
310
|
+
it("correctly aligns tab on the right side of the viewport", () => {
|
|
311
|
+
expect(
|
|
312
|
+
calculateScrollTargetForRightSide(2, "ltr", tabs, container)
|
|
313
|
+
).to.equal(100);
|
|
314
|
+
expect(
|
|
315
|
+
calculateScrollTargetForRightSide(2, "rtl", tabs, container)
|
|
316
|
+
).to.equal(0);
|
|
317
|
+
});
|
|
318
|
+
});
|
|
319
|
+
describe("calculateScrollTargetForLeftSide", () => {
|
|
320
|
+
const container = { offsetWidth: 100, scrollLeft: 200 };
|
|
321
|
+
const tabs = [
|
|
322
|
+
{ offsetLeft: -200, offsetWidth: 100 },
|
|
323
|
+
{ offsetLeft: -100, offsetWidth: 100 },
|
|
324
|
+
{ offsetLeft: 0, offsetWidth: 100 }
|
|
325
|
+
// currently selected tab
|
|
326
|
+
];
|
|
327
|
+
it("correctly aligns tab on the left side of the viewport", () => {
|
|
328
|
+
expect(
|
|
329
|
+
calculateScrollTargetForLeftSide(1, "ltr", tabs, container)
|
|
330
|
+
).to.equal(-100);
|
|
331
|
+
expect(
|
|
332
|
+
calculateScrollTargetForLeftSide(0, "ltr", tabs, container)
|
|
333
|
+
).to.equal(0);
|
|
334
|
+
expect(
|
|
335
|
+
calculateScrollTargetForLeftSide(1, "rtl", tabs, container)
|
|
336
|
+
).to.equal(100);
|
|
337
|
+
expect(
|
|
338
|
+
calculateScrollTargetForLeftSide(0, "rtl", tabs, container)
|
|
339
|
+
).to.equal(0);
|
|
340
|
+
});
|
|
341
|
+
});
|
|
342
|
+
async function repeatScroll(options, iteration = 1) {
|
|
343
|
+
const {
|
|
344
|
+
times,
|
|
345
|
+
elementToUpdate,
|
|
346
|
+
elementToScroll,
|
|
347
|
+
distanceToReachInIteration
|
|
348
|
+
} = options;
|
|
349
|
+
if (iteration > times) return;
|
|
350
|
+
const distanceToReach = distanceToReachInIteration(iteration);
|
|
351
|
+
await sendKeys({ press: "Enter" });
|
|
352
|
+
await elementUpdated(elementToUpdate);
|
|
353
|
+
await waitUntil(
|
|
354
|
+
() => Math.ceil(Math.abs(elementToScroll.scrollLeft)) - Math.abs(distanceToReach) === 0,
|
|
355
|
+
`scroll to ${distanceToReach}`
|
|
356
|
+
);
|
|
357
|
+
return await repeatScroll(options, iteration + 1);
|
|
358
|
+
}
|
|
359
|
+
async function scrollToEnd(tabsContainer, buttonSelector, direction = "ltr") {
|
|
360
|
+
const tabs = tabsContainer.querySelector("sp-tabs");
|
|
361
|
+
const tabsList = tabs.shadowRoot.querySelector("#list");
|
|
362
|
+
const tabsOverflow = tabsContainer.querySelector(
|
|
363
|
+
"sp-tabs-overflow"
|
|
364
|
+
);
|
|
365
|
+
const button = tabsOverflow.shadowRoot.querySelector(
|
|
366
|
+
buttonSelector
|
|
367
|
+
);
|
|
368
|
+
const { scrollWidth, clientWidth } = tabsList;
|
|
369
|
+
const distPerScroll = clientWidth * tabsOverflow["scrollFactor"];
|
|
370
|
+
const totalScrollDist = scrollWidth - clientWidth;
|
|
371
|
+
const scrollsToEnd = Math.ceil(totalScrollDist / distPerScroll);
|
|
372
|
+
let distanceToReachInIteration;
|
|
373
|
+
if (direction === "ltr") {
|
|
374
|
+
distanceToReachInIteration = buttonSelector === LEFT_BUTTON_SELECTOR ? (iteration) => Math.max(totalScrollDist - iteration * distPerScroll, 0) : (iteration) => Math.min(iteration * distPerScroll, totalScrollDist);
|
|
375
|
+
} else {
|
|
376
|
+
distanceToReachInIteration = buttonSelector === LEFT_BUTTON_SELECTOR ? (iteration) => Math.max(-1 * iteration * distPerScroll, -totalScrollDist) : (iteration) => -Math.max(totalScrollDist - iteration * distPerScroll, 0);
|
|
377
|
+
}
|
|
378
|
+
button.focus();
|
|
379
|
+
return await repeatScroll({
|
|
380
|
+
times: scrollsToEnd,
|
|
381
|
+
elementToUpdate: tabsOverflow,
|
|
382
|
+
elementToScroll: tabsList,
|
|
383
|
+
distanceToReachInIteration
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
function nextFrame() {
|
|
387
|
+
return new Promise((res) => requestAnimationFrame(() => res()));
|
|
388
|
+
}
|
|
389
|
+
//# sourceMappingURL=tabs-overflow.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["tabs-overflow.test.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2022 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*/\nimport { ActionButton } from '@spectrum-web-components/action-button';\nimport { isFirefox } from '@spectrum-web-components/shared/src/platform.js';\nimport {\n calculateScrollTargetForLeftSide,\n calculateScrollTargetForRightSide,\n Tab,\n Tabs,\n TabsOverflow,\n} from '@spectrum-web-components/tabs';\nimport '@spectrum-web-components/tabs/sp-tab-panel.js';\nimport '@spectrum-web-components/tabs/sp-tab.js';\nimport '@spectrum-web-components/tabs/sp-tabs-overflow.js';\nimport '@spectrum-web-components/tabs/sp-tabs.js';\nimport '@spectrum-web-components/theme/scale-medium.js';\nimport '@spectrum-web-components/theme/sp-theme.js';\nimport '@spectrum-web-components/theme/theme-light.js';\n\nimport { elementUpdated, expect, fixture, waitUntil } from '@open-wc/testing';\nimport {\n ElementSize,\n ElementSizes,\n html,\n nothing,\n} from '@spectrum-web-components/base';\nimport { sendKeys, setViewport } from '@web/test-runner-commands';\nimport { repeat } from 'lit/directives/repeat.js';\n\nconst RIGHT_BUTTON_SELECTOR = '.right-scroll';\nconst LEFT_BUTTON_SELECTOR = '.left-scroll';\n\ntype OverflowProperties = {\n count: number;\n size: ElementSize;\n includeTabPanel: boolean;\n selected?: number;\n labelPrev?: string;\n labelNext?: string;\n dir?: 'ltr' | 'rtl';\n};\n\nconst renderTabsOverflow = async ({\n count,\n size,\n includeTabPanel,\n selected = 1,\n dir = 'ltr',\n}: OverflowProperties): Promise<HTMLDivElement> => {\n const theme = await fixture<HTMLDivElement>(html`\n <sp-theme dir=${dir} system=\"spectrum\" scale=\"medium\" color=\"light\">\n <div class=\"container\" style=\"width: 200px; height: 150px;\">\n <sp-tabs-overflow>\n <sp-tabs size=${size} selected=${selected}>\n ${repeat(\n new Array(count),\n (item) => item,\n (_item, index) => html`\n <sp-tab\n label=${`Tab Item ${index + 1}`}\n value=${index + 1}\n ></sp-tab>\n `\n )}\n ${includeTabPanel\n ? html`\n ${repeat(\n new Array(count),\n (item) => item,\n (_item, index) => html`\n <sp-tab-panel value=${index + 1}>\n Content for Tab Item ${index + 1}\n </sp-tab-panel>\n `\n )}\n `\n : nothing}\n </sp-tabs>\n </sp-tabs-overflow>\n </div>\n </sp-theme>\n `);\n await elementUpdated(theme);\n const tabsContainer = theme.querySelector('.container') as HTMLDivElement;\n\n return tabsContainer;\n};\n\ndescribe('TabsOverflow', () => {\n it('loads default tabs-overflow accessibly', async () => {\n const el = await fixture<TabsOverflow>(html`\n <sp-tabs-overflow>\n <sp-tabs size=\"m\" selected=\"1\">\n <sp-tab label=\"Tab Item 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab Item 2\" value=\"2\"></sp-tab>\n <sp-tab-panel value=\"1\">Tab Content 1</sp-tab-panel>\n <sp-tab-panel value=\"2\">Tab Content 2</sp-tab-panel>\n </sp-tabs>\n </sp-tabs-overflow>\n `);\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n\n it('show render left and right buttons in shadowDom', async () => {\n const el = await renderTabsOverflow({\n count: 20,\n size: ElementSizes.L,\n includeTabPanel: true,\n });\n\n const spTabsOverflows: TabsOverflow = el.querySelector(\n 'sp-tabs-overflow'\n ) as TabsOverflow;\n const rightButton = spTabsOverflows.shadowRoot.querySelector(\n '.right-scroll'\n ) as ActionButton;\n expect(rightButton).to.exist;\n const leftButton = spTabsOverflows.shadowRoot.querySelector(\n '.left-scroll'\n ) as ActionButton;\n expect(leftButton).to.exist;\n });\n\n it('reflect proper sp-tab size', async () => {\n const el = await renderTabsOverflow({\n count: 20,\n size: ElementSizes.M,\n includeTabPanel: true,\n });\n\n const spTabsOverflows: TabsOverflow = el.querySelector(\n 'sp-tabs-overflow'\n ) as TabsOverflow;\n\n expect(spTabsOverflows.getAttribute('size')).to.equal('m');\n });\n\n it('should scroll when the button is clicked', async () => {\n const el = await renderTabsOverflow({\n count: 20,\n size: ElementSizes.L,\n includeTabPanel: true,\n });\n await elementUpdated(el);\n\n const spTabsOverflows: TabsOverflow = el.querySelector(\n 'sp-tabs-overflow'\n ) as TabsOverflow;\n const leftButton = spTabsOverflows.shadowRoot.querySelector(\n '.left-scroll'\n ) as ActionButton;\n\n const rightButton = spTabsOverflows.shadowRoot.querySelector(\n '.right-scroll'\n ) as ActionButton;\n\n leftButton.dispatchEvent(new Event('click', {}));\n\n const tabsEl = spTabsOverflows.querySelector('sp-tab') as Tab;\n const initialLeft = tabsEl.getBoundingClientRect().left;\n rightButton.dispatchEvent(new Event('click', {}));\n await elementUpdated(el);\n rightButton.dispatchEvent(new Event('click', {}));\n await elementUpdated(el);\n rightButton.dispatchEvent(new Event('click', {}));\n await elementUpdated(el);\n const finalLeft = tabsEl.getBoundingClientRect().left;\n expect(finalLeft).to.be.lessThanOrEqual(initialLeft);\n });\n\n it('should scroll up to the last item and back in LTR', async () => {\n // TODO: run on iPhone as per https://github.com/adobe/spectrum-web-components/pull/4722\n // await setUserAgent(\n // 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148'\n // );\n\n // Skipping on Firefox due to timeouts on CI\n if (isFirefox()) return;\n\n const el = await renderTabsOverflow({\n count: 8,\n size: ElementSizes.L,\n includeTabPanel: true,\n dir: 'ltr',\n });\n await elementUpdated(el);\n await setViewport({ width: 360, height: 640 });\n await nextFrame();\n\n const tabsOverflow = el.querySelector(\n 'sp-tabs-overflow'\n ) as TabsOverflow;\n\n expect(tabsOverflow['overflowState'].canScrollLeft).to.be.false;\n expect(tabsOverflow['overflowState'].canScrollRight).to.be.true;\n\n await scrollToEnd(el, RIGHT_BUTTON_SELECTOR, 'ltr');\n\n expect(tabsOverflow['overflowState'].canScrollLeft).to.be.true;\n expect(tabsOverflow['overflowState'].canScrollRight).to.be.false;\n\n await scrollToEnd(el, LEFT_BUTTON_SELECTOR, 'ltr');\n\n expect(tabsOverflow['overflowState'].canScrollLeft).to.be.false;\n expect(tabsOverflow['overflowState'].canScrollRight).to.be.true;\n });\n\n it('should scroll up to the last item and back in RTL', async () => {\n // TODO: run on iPhone as per https://github.com/adobe/spectrum-web-components/pull/4722\n // await setUserAgent(\n // 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148'\n // );\n\n // Skipping on Firefox due to timeouts on CI\n if (isFirefox()) return;\n\n const el = await renderTabsOverflow({\n count: 8,\n size: ElementSizes.L,\n includeTabPanel: true,\n dir: 'rtl',\n });\n await elementUpdated(el);\n await setViewport({ width: 360, height: 640 });\n await nextFrame();\n\n const tabsOverflow = el.querySelector(\n 'sp-tabs-overflow'\n ) as TabsOverflow;\n\n expect(tabsOverflow['overflowState'].canScrollLeft).to.be.true;\n expect(tabsOverflow['overflowState'].canScrollRight).to.be.false;\n\n await scrollToEnd(el, LEFT_BUTTON_SELECTOR, 'rtl');\n\n expect(tabsOverflow['overflowState'].canScrollLeft).to.be.false;\n expect(tabsOverflow['overflowState'].canScrollRight).to.be.true;\n\n await scrollToEnd(el, RIGHT_BUTTON_SELECTOR, 'rtl');\n\n expect(tabsOverflow['overflowState'].canScrollLeft).to.be.true;\n expect(tabsOverflow['overflowState'].canScrollRight).to.be.false;\n });\n\n it('should fail properly if slot is not sp-tabs', async () => {\n const el = await fixture<TabsOverflow>(html`\n <sp-tabs-overflow>\n <div>Some div</div>\n </sp-tabs-overflow>\n `);\n\n await elementUpdated(el);\n const slot = el.shadowRoot.querySelector('slot');\n const slotContent = slot?.assignedElements() || '';\n expect(slotContent[0].toString()).to.not.contains('Tabs');\n });\n\n it('should automatically bring the selected tab into view', async () => {\n const el = await renderTabsOverflow({\n count: 20,\n size: ElementSizes.L,\n includeTabPanel: false,\n selected: 10,\n });\n await elementUpdated(el);\n\n // Grab the list of tabs.\n const tabsEl = el.querySelector('sp-tabs') as Tabs;\n\n // Grab the coordonates of the selected tab.\n let selectedTab = tabsEl.querySelector(\n `[role=\"tab\"][value=\"10\"]`\n ) as Tab;\n expect(selectedTab).to.exist;\n let selectedTabPosition = selectedTab.getBoundingClientRect();\n\n // Selected tab is in the viewport, offset left is greater than 0 and less than the width of the tabs.\n expect(selectedTabPosition.left).to.be.greaterThan(0);\n expect(selectedTabPosition.left).to.be.lessThan(tabsEl.offsetWidth);\n\n // First tab is not in the viewport anymore, its offset left is less than 0.\n const firstTab = tabsEl.querySelector(`[role=\"tab\"][value=\"1\"]`) as Tab;\n const firstTabPosition = firstTab.getBoundingClientRect();\n expect(firstTabPosition.left).to.be.lessThan(0);\n\n // Make the component automatically scroll left by selecting the first tab.\n tabsEl.selected = '1';\n await elementUpdated(tabsEl);\n\n selectedTab = tabsEl.querySelector(`[role=\"tab\"][value=\"1\"]`) as Tab;\n expect(selectedTab).to.exist;\n selectedTabPosition = selectedTab.getBoundingClientRect();\n\n // First tab is in the viewport, offset left is greater than 0 and less than the width of the tabs.\n expect(selectedTabPosition.left).to.be.greaterThan(0);\n expect(selectedTabPosition.left).to.be.lessThan(tabsEl.offsetWidth);\n\n // Tab nr. 10 is not in the viewport anymore.\n const previousSelection = tabsEl.querySelector(\n `[role=\"tab\"][value=\"10\"]`\n ) as Tab;\n const previousSelectionPosition =\n previousSelection.getBoundingClientRect();\n expect(previousSelectionPosition.left).to.be.greaterThan(\n tabsEl.offsetWidth\n );\n });\n\n it('prev and next buttons have default labels', async () => {\n const el = await renderTabsOverflow({\n count: 20,\n size: ElementSizes.M,\n includeTabPanel: true,\n });\n await elementUpdated(el);\n\n const spTabsOverflows: TabsOverflow = el.querySelector(\n 'sp-tabs-overflow'\n ) as TabsOverflow;\n const leftButton = spTabsOverflows.shadowRoot.querySelector(\n '.left-scroll'\n ) as ActionButton;\n const rightButton = spTabsOverflows.shadowRoot.querySelector(\n '.right-scroll'\n ) as ActionButton;\n\n expect(leftButton?.getAttribute('aria-label')).to.equal(\n 'Scroll to previous tabs'\n );\n expect(rightButton?.getAttribute('aria-label')).to.equal(\n 'Scroll to next tabs'\n );\n });\n\n it('prev and next buttons labels overwritten via attributes', async () => {\n const tabsContainer = await fixture<HTMLDivElement>(html`\n <div class=\"container\" style=\"width: 200px; height: 150px;\">\n <sp-tabs-overflow\n label-previous=\"custom label prev\"\n label-next=\"custom label next\"\n >\n <sp-tabs size=${ElementSizes.M} selected=${1}>\n ${repeat(\n new Array(20),\n (item) => item,\n (_item, index) => html`\n <sp-tab\n label=${`Tab Item ${index + 1}`}\n value=${index + 1}\n ></sp-tab>\n `\n )}\n ${repeat(\n new Array(20),\n (item) => item,\n (_item, index) => html`\n <sp-tab-panel value=${index + 1}>\n Content for Tab Item ${index + 1}\n </sp-tab-panel>\n `\n )}\n </sp-tabs>\n </sp-tabs-overflow>\n </div>\n `);\n await elementUpdated(tabsContainer);\n const el = tabsContainer;\n\n const spTabsOverflows: TabsOverflow = el.querySelector(\n 'sp-tabs-overflow'\n ) as TabsOverflow;\n const leftButton = spTabsOverflows.shadowRoot.querySelector(\n '.left-scroll'\n ) as ActionButton;\n const rightButton = spTabsOverflows.shadowRoot.querySelector(\n '.right-scroll'\n ) as ActionButton;\n\n expect(leftButton?.getAttribute('aria-label')).to.equal(\n 'custom label prev'\n );\n expect(rightButton?.getAttribute('aria-label')).to.equal(\n 'custom label next'\n );\n });\n});\n\ndescribe('calculateScrollTargetForRightSide', () => {\n const container = { offsetWidth: 100, scrollLeft: 0 } as HTMLDivElement;\n const tabs = [\n { offsetLeft: 0, offsetWidth: 100 }, // currently selected tab\n { offsetLeft: 100, offsetWidth: 100 },\n { offsetLeft: 200, offsetWidth: 100 },\n ] as Tab[];\n\n it('correctly aligns tab on the right side of the viewport', () => {\n // Where do I need to scroll on the x axis to get the tab at index 2 to be visible?\n expect(\n calculateScrollTargetForRightSide(2, 'ltr', tabs, container)\n ).to.equal(100); // You need to scroll 100px more\n\n // Repeat for RTL\n expect(\n calculateScrollTargetForRightSide(2, 'rtl', tabs, container)\n ).to.equal(0); // You need to scroll at the begining of the scrollable area\n });\n});\n\ndescribe('calculateScrollTargetForLeftSide', () => {\n const container = { offsetWidth: 100, scrollLeft: 200 } as HTMLDivElement;\n const tabs = [\n { offsetLeft: -200, offsetWidth: 100 },\n { offsetLeft: -100, offsetWidth: 100 },\n { offsetLeft: 0, offsetWidth: 100 }, // currently selected tab\n ] as Tab[];\n\n it('correctly aligns tab on the left side of the viewport', () => {\n // Where do I need to scroll on the x axis to get the tab at index 1 to be visible?\n expect(\n calculateScrollTargetForLeftSide(1, 'ltr', tabs, container)\n ).to.equal(-100); // you need to scroll back -100px\n\n // Where do I need to scroll on the x axis to get the first tab to be visible?\n expect(\n calculateScrollTargetForLeftSide(0, 'ltr', tabs, container)\n ).to.equal(0); // you need to scroll to the begining of the scrollable area\n\n // Repeat for RTL\n expect(\n calculateScrollTargetForLeftSide(1, 'rtl', tabs, container)\n ).to.equal(100);\n\n expect(\n calculateScrollTargetForLeftSide(0, 'rtl', tabs, container)\n ).to.equal(0);\n });\n});\n\nasync function repeatScroll(\n options: {\n times: number;\n elementToUpdate: TabsOverflow;\n elementToScroll: HTMLElement;\n distanceToReachInIteration: (iteration: number) => number;\n },\n iteration = 1\n): Promise<void> {\n const {\n times,\n elementToUpdate,\n elementToScroll,\n distanceToReachInIteration,\n } = options;\n if (iteration > times) return;\n\n const distanceToReach = distanceToReachInIteration(iteration);\n\n await sendKeys({ press: 'Enter' });\n await elementUpdated(elementToUpdate);\n await waitUntil(\n () =>\n Math.ceil(Math.abs(elementToScroll.scrollLeft)) -\n Math.abs(distanceToReach) ===\n 0,\n `scroll to ${distanceToReach}`\n );\n return await repeatScroll(options, iteration + 1);\n}\n\nasync function scrollToEnd(\n tabsContainer: HTMLDivElement,\n buttonSelector: string,\n direction: 'ltr' | 'rtl' = 'ltr'\n): Promise<void> {\n const tabs = tabsContainer.querySelector('sp-tabs') as Tabs;\n const tabsList = tabs.shadowRoot!.querySelector('#list') as HTMLElement;\n const tabsOverflow = tabsContainer.querySelector(\n 'sp-tabs-overflow'\n ) as TabsOverflow;\n const button = tabsOverflow.shadowRoot.querySelector(\n buttonSelector\n ) as ActionButton;\n\n const { scrollWidth, clientWidth } = tabsList;\n const distPerScroll = clientWidth * tabsOverflow['scrollFactor'];\n const totalScrollDist = scrollWidth - clientWidth;\n const scrollsToEnd = Math.ceil(totalScrollDist / distPerScroll);\n let distanceToReachInIteration: (iteration: number) => number;\n\n if (direction === 'ltr') {\n distanceToReachInIteration =\n buttonSelector === LEFT_BUTTON_SELECTOR\n ? (iteration: number) =>\n Math.max(totalScrollDist - iteration * distPerScroll, 0)\n : (iteration: number) =>\n Math.min(iteration * distPerScroll, totalScrollDist);\n } else {\n distanceToReachInIteration =\n buttonSelector === LEFT_BUTTON_SELECTOR\n ? (iteration: number) =>\n Math.max(-1 * iteration * distPerScroll, -totalScrollDist)\n : (iteration: number) =>\n -Math.max(totalScrollDist - iteration * distPerScroll, 0);\n }\n\n button.focus();\n return await repeatScroll({\n times: scrollsToEnd,\n elementToUpdate: tabsOverflow,\n elementToScroll: tabsList,\n distanceToReachInIteration,\n });\n}\n\nfunction nextFrame(): Promise<void> {\n return new Promise((res) => requestAnimationFrame(() => res()));\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import * as stories from "../stories/tabs-vertical-right-sizes.stories.js";
|
|
3
|
+
import { regressVisuals } from "../../../test/visual/test.js";
|
|
4
|
+
regressVisuals("TabsVerticalRightSizesStories", stories);
|
|
5
|
+
//# sourceMappingURL=tabs-vertical-right-sizes.test-vrt.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["tabs-vertical-right-sizes.test-vrt.ts"],
|
|
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-right-sizes.stories.js';\nimport { regressVisuals } from '../../../test/visual/test.js';\nimport type { TestsType } from '../../../test/visual/test.js';\n\nregressVisuals('TabsVerticalRightSizesStories', stories as unknown as TestsType);\n"],
|
|
5
|
+
"mappings": ";AAYA,YAAY,aAAa;AACzB,SAAS,sBAAsB;AAG/B,eAAe,iCAAiC,OAA+B;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["tabs-vertical-sizes.test-vrt.ts"],
|
|
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';\nimport type { TestsType } from '../../../test/visual/test.js';\n\nregressVisuals('TabsVerticalSizesStories', stories as unknown as TestsType);\n"],
|
|
5
|
+
"mappings": ";AAYA,YAAY,aAAa;AACzB,SAAS,sBAAsB;AAG/B,eAAe,4BAA4B,OAA+B;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["tabs.test-vrt.ts"],
|
|
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';\nimport type { TestsType } from '../../../test/visual/test.js';\n\nregressVisuals('TabsStories', stories as unknown as TestsType);\n"],
|
|
5
|
+
"mappings": ";AAYA,YAAY,aAAa;AACzB,SAAS,sBAAsB;AAG/B,eAAe,eAAe,OAA+B;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|