@spectrum-web-components/button 0.18.0 → 0.18.1
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/README.md +193 -34
- package/custom-elements.json +90 -90
- package/package.json +50 -16
- package/sp-button.dev.js +3 -0
- package/sp-button.dev.js.map +7 -0
- package/sp-button.js +3 -14
- package/sp-button.js.map +7 -1
- package/sp-clear-button.dev.js +3 -0
- package/sp-clear-button.dev.js.map +7 -0
- package/sp-clear-button.js +3 -14
- package/sp-clear-button.js.map +7 -1
- package/sp-close-button.dev.js +3 -0
- package/sp-close-button.dev.js.map +7 -0
- package/sp-close-button.js +3 -14
- package/sp-close-button.js.map +7 -1
- package/src/Button.dev.js +79 -0
- package/src/Button.dev.js.map +7 -0
- package/src/Button.js +72 -87
- package/src/Button.js.map +7 -1
- package/src/ButtonBase.dev.js +215 -0
- package/src/ButtonBase.dev.js.map +7 -0
- package/src/ButtonBase.js +198 -201
- package/src/ButtonBase.js.map +7 -1
- package/src/ClearButton.dev.js +70 -0
- package/src/ClearButton.dev.js.map +7 -0
- package/src/ClearButton.js +45 -52
- package/src/ClearButton.js.map +7 -1
- package/src/CloseButton.dev.js +65 -0
- package/src/CloseButton.dev.js.map +7 -0
- package/src/CloseButton.js +42 -49
- package/src/CloseButton.js.map +7 -1
- package/src/StyledButton.dev.js +8 -0
- package/src/StyledButton.dev.js.map +7 -0
- package/src/StyledButton.js +6 -17
- package/src/StyledButton.js.map +7 -1
- package/src/button-base.css.dev.js +10 -0
- package/src/button-base.css.dev.js.map +7 -0
- package/src/button-base.css.js +4 -15
- package/src/button-base.css.js.map +7 -1
- package/src/button.css.dev.js +619 -0
- package/src/button.css.dev.js.map +7 -0
- package/src/button.css.js +4 -15
- package/src/button.css.js.map +7 -1
- package/src/index.dev.js +6 -0
- package/src/index.dev.js.map +7 -0
- package/src/index.js +6 -17
- package/src/index.js.map +7 -1
- package/src/spectrum-button-base.css.dev.js +6 -0
- package/src/spectrum-button-base.css.dev.js.map +7 -0
- package/src/spectrum-button-base.css.js +3 -14
- package/src/spectrum-button-base.css.js.map +7 -1
- package/src/spectrum-button.css.dev.js +587 -0
- package/src/spectrum-button.css.dev.js.map +7 -0
- package/src/spectrum-button.css.js +4 -15
- package/src/spectrum-button.css.js.map +7 -1
- package/stories/button-accent-fill-sizes.stories.js +21 -18
- package/stories/button-accent-fill-sizes.stories.js.map +7 -1
- package/stories/button-accent-fill.stories.js +24 -20
- package/stories/button-accent-fill.stories.js.map +7 -1
- package/stories/button-accent-outline-sizes.stories.js +21 -18
- package/stories/button-accent-outline-sizes.stories.js.map +7 -1
- package/stories/button-accent-outline.stories.js +24 -20
- package/stories/button-accent-outline.stories.js.map +7 -1
- package/stories/button-black-fill-sizes.stories.js +22 -19
- package/stories/button-black-fill-sizes.stories.js.map +7 -1
- package/stories/button-black-fill.stories.js +26 -21
- package/stories/button-black-fill.stories.js.map +7 -1
- package/stories/button-black-outline-sizes.stories.js +22 -19
- package/stories/button-black-outline-sizes.stories.js.map +7 -1
- package/stories/button-black-outline.stories.js +26 -21
- package/stories/button-black-outline.stories.js.map +7 -1
- package/stories/button-negative-fill-sizes.stories.js +21 -18
- package/stories/button-negative-fill-sizes.stories.js.map +7 -1
- package/stories/button-negative-fill.stories.js +24 -20
- package/stories/button-negative-fill.stories.js.map +7 -1
- package/stories/button-negative-outline-sizes.stories.js +21 -18
- package/stories/button-negative-outline-sizes.stories.js.map +7 -1
- package/stories/button-negative-outline.stories.js +24 -20
- package/stories/button-negative-outline.stories.js.map +7 -1
- package/stories/button-primary-fill-sizes.stories.js +21 -18
- package/stories/button-primary-fill-sizes.stories.js.map +7 -1
- package/stories/button-primary-fill.stories.js +24 -20
- package/stories/button-primary-fill.stories.js.map +7 -1
- package/stories/button-primary-outline-sizes.stories.js +21 -18
- package/stories/button-primary-outline-sizes.stories.js.map +7 -1
- package/stories/button-primary-outline.stories.js +24 -20
- package/stories/button-primary-outline.stories.js.map +7 -1
- package/stories/button-secondary-fill-sizes.stories.js +21 -18
- package/stories/button-secondary-fill-sizes.stories.js.map +7 -1
- package/stories/button-secondary-fill.stories.js +24 -20
- package/stories/button-secondary-fill.stories.js.map +7 -1
- package/stories/button-secondary-outline-sizes.stories.js +21 -18
- package/stories/button-secondary-outline-sizes.stories.js.map +7 -1
- package/stories/button-secondary-outline.stories.js +24 -20
- package/stories/button-secondary-outline.stories.js.map +7 -1
- package/stories/button-white-fill-sizes.stories.js +22 -19
- package/stories/button-white-fill-sizes.stories.js.map +7 -1
- package/stories/button-white-fill.stories.js +26 -21
- package/stories/button-white-fill.stories.js.map +7 -1
- package/stories/button-white-outline-sizes.stories.js +22 -19
- package/stories/button-white-outline-sizes.stories.js.map +7 -1
- package/stories/button-white-outline.stories.js +26 -21
- package/stories/button-white-outline.stories.js.map +7 -1
- package/stories/index.js +92 -93
- package/stories/index.js.map +7 -1
- package/test/benchmark/test-basic.js +5 -16
- package/test/benchmark/test-basic.js.map +7 -1
- package/test/button-accent-fill-sizes.test-vrt.js +4 -15
- package/test/button-accent-fill-sizes.test-vrt.js.map +7 -1
- package/test/button-accent-fill.test-vrt.js +4 -15
- package/test/button-accent-fill.test-vrt.js.map +7 -1
- package/test/button-accent-outline-sizes.test-vrt.js +4 -15
- package/test/button-accent-outline-sizes.test-vrt.js.map +7 -1
- package/test/button-accent-outline.test-vrt.js +4 -15
- package/test/button-accent-outline.test-vrt.js.map +7 -1
- package/test/button-black-fill-sizes.test-vrt.js +4 -15
- package/test/button-black-fill-sizes.test-vrt.js.map +7 -1
- package/test/button-black-fill.test-vrt.js +4 -15
- package/test/button-black-fill.test-vrt.js.map +7 -1
- package/test/button-black-outline-sizes.test-vrt.js +4 -15
- package/test/button-black-outline-sizes.test-vrt.js.map +7 -1
- package/test/button-black-outline.test-vrt.js +4 -15
- package/test/button-black-outline.test-vrt.js.map +7 -1
- package/test/button-negative-fill-sizes.test-vrt.js +4 -15
- package/test/button-negative-fill-sizes.test-vrt.js.map +7 -1
- package/test/button-negative-fill.test-vrt.js +4 -15
- package/test/button-negative-fill.test-vrt.js.map +7 -1
- package/test/button-negative-outline-sizes.test-vrt.js +4 -15
- package/test/button-negative-outline-sizes.test-vrt.js.map +7 -1
- package/test/button-negative-outline.test-vrt.js +4 -15
- package/test/button-negative-outline.test-vrt.js.map +7 -1
- package/test/button-primary-fill-sizes.test-vrt.js +4 -15
- package/test/button-primary-fill-sizes.test-vrt.js.map +7 -1
- package/test/button-primary-fill.test-vrt.js +4 -15
- package/test/button-primary-fill.test-vrt.js.map +7 -1
- package/test/button-primary-outline-sizes.test-vrt.js +4 -15
- package/test/button-primary-outline-sizes.test-vrt.js.map +7 -1
- package/test/button-primary-outline.test-vrt.js +4 -15
- package/test/button-primary-outline.test-vrt.js.map +7 -1
- package/test/button-secondary-fill-sizes.test-vrt.js +4 -15
- package/test/button-secondary-fill-sizes.test-vrt.js.map +7 -1
- package/test/button-secondary-fill.test-vrt.js +4 -15
- package/test/button-secondary-fill.test-vrt.js.map +7 -1
- package/test/button-secondary-outline-sizes.test-vrt.js +4 -15
- package/test/button-secondary-outline-sizes.test-vrt.js.map +7 -1
- package/test/button-secondary-outline.test-vrt.js +4 -15
- package/test/button-secondary-outline.test-vrt.js.map +7 -1
- package/test/button-white-fill-sizes.test-vrt.js +4 -15
- package/test/button-white-fill-sizes.test-vrt.js.map +7 -1
- package/test/button-white-fill.test-vrt.js +4 -15
- package/test/button-white-fill.test-vrt.js.map +7 -1
- package/test/button-white-outline-sizes.test-vrt.js +4 -15
- package/test/button-white-outline-sizes.test-vrt.js.map +7 -1
- package/test/button-white-outline.test-vrt.js +4 -15
- package/test/button-white-outline.test-vrt.js.map +7 -1
- package/test/button.test.js +321 -320
- package/test/button.test.js.map +7 -1
- package/test/clear-button.test.js +13 -20
- package/test/clear-button.test.js.map +7 -1
- package/test/close-button.test.js +13 -20
- package/test/close-button.test.js.map +7 -1
package/test/button.test.js
CHANGED
|
@@ -1,390 +1,391 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
import {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
1
|
+
import "@spectrum-web-components/button/sp-button.js";
|
|
2
|
+
import {
|
|
3
|
+
elementUpdated,
|
|
4
|
+
expect,
|
|
5
|
+
fixture,
|
|
6
|
+
html,
|
|
7
|
+
waitUntil
|
|
8
|
+
} from "@open-wc/testing";
|
|
9
|
+
import {
|
|
10
|
+
shiftTabEvent,
|
|
11
|
+
testForLitDevWarnings
|
|
12
|
+
} from "../../../test/testing-helpers.js";
|
|
13
|
+
import { spy } from "sinon";
|
|
14
|
+
describe("Button", () => {
|
|
15
|
+
testForLitDevWarnings(async () => await fixture(html`
|
|
16
|
+
<sp-button tabindex="0">Button</sp-button>
|
|
17
|
+
`));
|
|
18
|
+
it("loads default", async () => {
|
|
19
|
+
const el = await fixture(html`
|
|
19
20
|
<sp-button tabindex="0">Button</sp-button>
|
|
20
21
|
`);
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
await elementUpdated(el);
|
|
23
|
+
expect(el).to.not.be.undefined;
|
|
24
|
+
expect(el.textContent).to.include("Button");
|
|
25
|
+
await expect(el).to.be.accessible();
|
|
26
|
+
});
|
|
27
|
+
it("loads default w/ element content", async () => {
|
|
28
|
+
const el = await fixture(html`
|
|
28
29
|
<sp-button label="Button"><svg></svg></sp-button>
|
|
29
30
|
`);
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
await elementUpdated(el);
|
|
32
|
+
expect(el).to.not.be.undefined;
|
|
33
|
+
await expect(el).to.be.accessible();
|
|
34
|
+
});
|
|
35
|
+
it("loads default w/ an icon", async () => {
|
|
36
|
+
const el = await fixture(html`
|
|
36
37
|
<sp-button label="">
|
|
37
38
|
Button
|
|
38
39
|
<svg slot="icon"></svg>
|
|
39
40
|
</sp-button>
|
|
40
41
|
`);
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
42
|
+
await elementUpdated(el);
|
|
43
|
+
expect(el).to.not.be.undefined;
|
|
44
|
+
expect(el.textContent).to.include("Button");
|
|
45
|
+
expect(!el.hasIcon);
|
|
46
|
+
await expect(el).to.be.accessible();
|
|
47
|
+
});
|
|
48
|
+
it("loads default only icon", async () => {
|
|
49
|
+
const el = await fixture(html`
|
|
49
50
|
<sp-button label="Button">
|
|
50
51
|
<svg slot="icon"></svg>
|
|
51
52
|
</sp-button>
|
|
52
53
|
`);
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
54
|
+
await elementUpdated(el);
|
|
55
|
+
expect(el).to.not.be.undefined;
|
|
56
|
+
await expect(el).to.be.accessible();
|
|
57
|
+
});
|
|
58
|
+
it('manages "role"', async () => {
|
|
59
|
+
const el = await fixture(html`
|
|
59
60
|
<sp-button>Button</sp-button>
|
|
60
61
|
`);
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
62
|
+
await elementUpdated(el);
|
|
63
|
+
expect(el.getAttribute("role")).to.equal("button");
|
|
64
|
+
el.href = "#";
|
|
65
|
+
await elementUpdated(el);
|
|
66
|
+
expect(el.getAttribute("role")).to.equal("link");
|
|
67
|
+
el.removeAttribute("href");
|
|
68
|
+
await elementUpdated(el);
|
|
69
|
+
expect(el.getAttribute("role")).to.equal("button");
|
|
70
|
+
});
|
|
71
|
+
it("allows label to be toggled", async () => {
|
|
72
|
+
const testNode = document.createTextNode("Button");
|
|
73
|
+
const el = await fixture(html`
|
|
73
74
|
<sp-button>
|
|
74
75
|
${testNode}
|
|
75
76
|
<svg slot="icon"></svg>
|
|
76
77
|
</sp-button>
|
|
77
78
|
`);
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
79
|
+
await elementUpdated(el);
|
|
80
|
+
const labelTestableEl = el;
|
|
81
|
+
expect(labelTestableEl.hasLabel, "starts with label").to.be.true;
|
|
82
|
+
testNode.textContent = "";
|
|
83
|
+
await elementUpdated(el);
|
|
84
|
+
await waitUntil(() => !labelTestableEl.hasLabel, "label is removed");
|
|
85
|
+
testNode.textContent = "Button";
|
|
86
|
+
await elementUpdated(el);
|
|
87
|
+
expect(labelTestableEl.hasLabel, "label is returned").to.be.true;
|
|
88
|
+
});
|
|
89
|
+
it("loads with href", async () => {
|
|
90
|
+
const el = await fixture(html`
|
|
90
91
|
<sp-button href="test_url">With Href</sp-button>
|
|
91
92
|
`);
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
93
|
+
await elementUpdated(el);
|
|
94
|
+
expect(el).to.not.be.undefined;
|
|
95
|
+
expect(el.textContent).to.include("With Href");
|
|
96
|
+
});
|
|
97
|
+
it("loads with href and target", async () => {
|
|
98
|
+
const el = await fixture(html`
|
|
98
99
|
<sp-button href="test_url" target="_blank">
|
|
99
100
|
With Target
|
|
100
101
|
</sp-button>
|
|
101
102
|
`);
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
103
|
+
await elementUpdated(el);
|
|
104
|
+
expect(el).to.not.be.undefined;
|
|
105
|
+
expect(el.textContent).to.include("With Target");
|
|
106
|
+
});
|
|
107
|
+
it("accepts shit+tab interactions", async () => {
|
|
108
|
+
let focusedCount = 0;
|
|
109
|
+
const el = await fixture(html`
|
|
109
110
|
<sp-button href="test_url" target="_blank">
|
|
110
111
|
With Target
|
|
111
112
|
</sp-button>
|
|
112
113
|
`);
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
114
|
+
await elementUpdated(el);
|
|
115
|
+
const focusElement = el.focusElement;
|
|
116
|
+
focusElement.addEventListener("focus", () => focusedCount += 1);
|
|
117
|
+
expect(focusedCount).to.equal(0);
|
|
118
|
+
el.focus();
|
|
119
|
+
await elementUpdated(el);
|
|
120
|
+
expect(focusedCount).to.equal(1);
|
|
121
|
+
el.dispatchEvent(shiftTabEvent());
|
|
122
|
+
el.dispatchEvent(new Event("focusin"));
|
|
123
|
+
await elementUpdated(el);
|
|
124
|
+
expect(focusedCount).to.equal(1);
|
|
125
|
+
});
|
|
126
|
+
it("manages `disabled`", async () => {
|
|
127
|
+
const clickSpy = spy();
|
|
128
|
+
const el = await fixture(html`
|
|
128
129
|
<sp-button @click=${() => clickSpy()}>Button</sp-button>
|
|
129
130
|
`);
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
131
|
+
await elementUpdated(el);
|
|
132
|
+
el.click();
|
|
133
|
+
await elementUpdated(el);
|
|
134
|
+
expect(clickSpy.calledOnce).to.be.true;
|
|
135
|
+
clickSpy.resetHistory();
|
|
136
|
+
el.disabled = true;
|
|
137
|
+
await elementUpdated(el);
|
|
138
|
+
el.click();
|
|
139
|
+
await elementUpdated(el);
|
|
140
|
+
expect(clickSpy.callCount).to.equal(0);
|
|
141
|
+
clickSpy.resetHistory();
|
|
142
|
+
await elementUpdated(el);
|
|
143
|
+
el.dispatchEvent(new Event("click", {}));
|
|
144
|
+
await elementUpdated(el);
|
|
145
|
+
expect(clickSpy.callCount).to.equal(0);
|
|
146
|
+
clickSpy.resetHistory();
|
|
147
|
+
el.disabled = false;
|
|
148
|
+
el.click();
|
|
149
|
+
await elementUpdated(el);
|
|
150
|
+
expect(clickSpy.calledOnce).to.be.true;
|
|
151
|
+
});
|
|
152
|
+
it("manages `aria-disabled`", async () => {
|
|
153
|
+
const el = await fixture(html`
|
|
153
154
|
<sp-button href="test_url" target="_blank">
|
|
154
155
|
With Target
|
|
155
156
|
</sp-button>
|
|
156
157
|
`);
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
158
|
+
await elementUpdated(el);
|
|
159
|
+
expect(el.hasAttribute("aria-disabled"), "initially not").to.be.false;
|
|
160
|
+
el.disabled = true;
|
|
161
|
+
await elementUpdated(el);
|
|
162
|
+
expect(el.getAttribute("aria-disabled")).to.equal("true");
|
|
163
|
+
el.disabled = false;
|
|
164
|
+
await elementUpdated(el);
|
|
165
|
+
expect(el.hasAttribute("aria-disabled"), "finally not").to.be.false;
|
|
166
|
+
});
|
|
167
|
+
it("manages tabIndex while disabled", async () => {
|
|
168
|
+
const el = await fixture(html`
|
|
168
169
|
<sp-button href="test_url" target="_blank">
|
|
169
170
|
With Target
|
|
170
171
|
</sp-button>
|
|
171
172
|
`);
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
173
|
+
await elementUpdated(el);
|
|
174
|
+
expect(el.tabIndex).to.equal(0);
|
|
175
|
+
el.disabled = true;
|
|
176
|
+
await elementUpdated(el);
|
|
177
|
+
expect(el.tabIndex).to.equal(-1);
|
|
178
|
+
el.tabIndex = 2;
|
|
179
|
+
await elementUpdated(el);
|
|
180
|
+
expect(el.tabIndex).to.equal(-1);
|
|
181
|
+
el.disabled = false;
|
|
182
|
+
await elementUpdated(el);
|
|
183
|
+
expect(el.tabIndex).to.equal(2);
|
|
184
|
+
});
|
|
185
|
+
it("swallows `click` interaction when `[disabled]`", async () => {
|
|
186
|
+
const clickSpy = spy();
|
|
187
|
+
const el = await fixture(html`
|
|
187
188
|
<sp-button disabled @click=${() => clickSpy()}>
|
|
188
189
|
Button
|
|
189
190
|
</sp-button>
|
|
190
191
|
`);
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
192
|
+
await elementUpdated(el);
|
|
193
|
+
expect(clickSpy.callCount).to.equal(0);
|
|
194
|
+
el.click();
|
|
195
|
+
await elementUpdated(el);
|
|
196
|
+
expect(clickSpy.callCount).to.equal(0);
|
|
197
|
+
});
|
|
198
|
+
it("translates keyboard interactions to click", async () => {
|
|
199
|
+
const clickSpy = spy();
|
|
200
|
+
const el = await fixture(html`
|
|
200
201
|
<sp-button @click=${() => clickSpy()}>Button</sp-button>
|
|
201
202
|
`);
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
203
|
+
await elementUpdated(el);
|
|
204
|
+
el.dispatchEvent(new KeyboardEvent("keypress", {
|
|
205
|
+
bubbles: true,
|
|
206
|
+
composed: true,
|
|
207
|
+
cancelable: true,
|
|
208
|
+
code: "Enter",
|
|
209
|
+
key: "Enter"
|
|
210
|
+
}));
|
|
211
|
+
await elementUpdated(el);
|
|
212
|
+
expect(clickSpy.callCount).to.equal(1);
|
|
213
|
+
clickSpy.resetHistory();
|
|
214
|
+
el.dispatchEvent(new KeyboardEvent("keypress", {
|
|
215
|
+
bubbles: true,
|
|
216
|
+
composed: true,
|
|
217
|
+
cancelable: true,
|
|
218
|
+
code: "NumpadEnter",
|
|
219
|
+
key: "NumpadEnter"
|
|
220
|
+
}));
|
|
221
|
+
await elementUpdated(el);
|
|
222
|
+
expect(clickSpy.callCount).to.equal(1);
|
|
223
|
+
clickSpy.resetHistory();
|
|
224
|
+
el.dispatchEvent(new KeyboardEvent("keypress", {
|
|
225
|
+
bubbles: true,
|
|
226
|
+
composed: true,
|
|
227
|
+
cancelable: true,
|
|
228
|
+
code: "Space",
|
|
229
|
+
key: "Space"
|
|
230
|
+
}));
|
|
231
|
+
await elementUpdated(el);
|
|
232
|
+
expect(clickSpy.callCount).to.equal(0);
|
|
233
|
+
clickSpy.resetHistory();
|
|
234
|
+
el.dispatchEvent(new KeyboardEvent("keydown", {
|
|
235
|
+
bubbles: true,
|
|
236
|
+
composed: true,
|
|
237
|
+
cancelable: true,
|
|
238
|
+
code: "Space",
|
|
239
|
+
key: "Space"
|
|
240
|
+
}));
|
|
241
|
+
el.dispatchEvent(new KeyboardEvent("keyup", {
|
|
242
|
+
bubbles: true,
|
|
243
|
+
composed: true,
|
|
244
|
+
cancelable: true,
|
|
245
|
+
code: "Space",
|
|
246
|
+
key: "Space"
|
|
247
|
+
}));
|
|
248
|
+
await elementUpdated(el);
|
|
249
|
+
expect(clickSpy.callCount).to.equal(1);
|
|
250
|
+
clickSpy.resetHistory();
|
|
251
|
+
el.dispatchEvent(new KeyboardEvent("keydown", {
|
|
252
|
+
bubbles: true,
|
|
253
|
+
composed: true,
|
|
254
|
+
cancelable: true,
|
|
255
|
+
code: "Space",
|
|
256
|
+
key: "Space"
|
|
257
|
+
}));
|
|
258
|
+
el.dispatchEvent(new KeyboardEvent("keyup", {
|
|
259
|
+
bubbles: true,
|
|
260
|
+
composed: true,
|
|
261
|
+
cancelable: true,
|
|
262
|
+
code: "KeyG",
|
|
263
|
+
key: "g"
|
|
264
|
+
}));
|
|
265
|
+
await elementUpdated(el);
|
|
266
|
+
expect(clickSpy.callCount).to.equal(0);
|
|
267
|
+
el.dispatchEvent(new KeyboardEvent("keyup", {
|
|
268
|
+
bubbles: true,
|
|
269
|
+
composed: true,
|
|
270
|
+
cancelable: true,
|
|
271
|
+
code: "Space",
|
|
272
|
+
key: "Space"
|
|
273
|
+
}));
|
|
274
|
+
clickSpy.resetHistory();
|
|
275
|
+
el.dispatchEvent(new KeyboardEvent("keydown", {
|
|
276
|
+
bubbles: true,
|
|
277
|
+
composed: true,
|
|
278
|
+
cancelable: true,
|
|
279
|
+
code: "KeyG",
|
|
280
|
+
key: "g"
|
|
281
|
+
}));
|
|
282
|
+
el.dispatchEvent(new KeyboardEvent("keyup", {
|
|
283
|
+
bubbles: true,
|
|
284
|
+
composed: true,
|
|
285
|
+
cancelable: true,
|
|
286
|
+
code: "Space",
|
|
287
|
+
key: "Space"
|
|
288
|
+
}));
|
|
289
|
+
await elementUpdated(el);
|
|
290
|
+
expect(clickSpy.callCount).to.equal(0);
|
|
291
|
+
});
|
|
292
|
+
it('proxies clicks by "type"', async () => {
|
|
293
|
+
const submitSpy = spy();
|
|
294
|
+
const resetSpy = spy();
|
|
295
|
+
const test = await fixture(html`
|
|
295
296
|
<form
|
|
296
297
|
@submit=${(event) => {
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
298
|
+
event.preventDefault();
|
|
299
|
+
submitSpy();
|
|
300
|
+
}}
|
|
300
301
|
@reset=${(event) => {
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
302
|
+
event.preventDefault();
|
|
303
|
+
resetSpy();
|
|
304
|
+
}}
|
|
304
305
|
>
|
|
305
306
|
<sp-button>Button</sp-button>
|
|
306
307
|
</form>
|
|
307
308
|
`);
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
309
|
+
const el = test.querySelector("sp-button");
|
|
310
|
+
await elementUpdated(el);
|
|
311
|
+
el.type = "submit";
|
|
312
|
+
await elementUpdated(el);
|
|
313
|
+
el.click();
|
|
314
|
+
expect(submitSpy.callCount).to.equal(1);
|
|
315
|
+
expect(resetSpy.callCount).to.equal(0);
|
|
316
|
+
el.type = "reset";
|
|
317
|
+
await elementUpdated(el);
|
|
318
|
+
el.click();
|
|
319
|
+
expect(submitSpy.callCount).to.equal(1);
|
|
320
|
+
expect(resetSpy.callCount).to.equal(1);
|
|
321
|
+
el.type = "button";
|
|
322
|
+
await elementUpdated(el);
|
|
323
|
+
el.click();
|
|
324
|
+
expect(submitSpy.callCount).to.equal(1);
|
|
325
|
+
expect(resetSpy.callCount).to.equal(1);
|
|
326
|
+
});
|
|
327
|
+
it("proxies click by [href]", async () => {
|
|
328
|
+
const clickSpy = spy();
|
|
329
|
+
const el = await fixture(html`
|
|
329
330
|
<sp-button href="test_url">With Href</sp-button>
|
|
330
331
|
`);
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
});
|
|
337
|
-
expect(clickSpy.callCount).to.equal(0);
|
|
338
|
-
el.click();
|
|
339
|
-
await elementUpdated(el);
|
|
340
|
-
expect(clickSpy.callCount).to.equal(1);
|
|
332
|
+
await elementUpdated(el);
|
|
333
|
+
el.anchorElement.addEventListener("click", (event) => {
|
|
334
|
+
event.preventDefault();
|
|
335
|
+
event.stopPropagation();
|
|
336
|
+
clickSpy();
|
|
341
337
|
});
|
|
342
|
-
|
|
343
|
-
|
|
338
|
+
expect(clickSpy.callCount).to.equal(0);
|
|
339
|
+
el.click();
|
|
340
|
+
await elementUpdated(el);
|
|
341
|
+
expect(clickSpy.callCount).to.equal(1);
|
|
342
|
+
});
|
|
343
|
+
it('manages "active" while focused', async () => {
|
|
344
|
+
const el = await fixture(html`
|
|
344
345
|
<sp-button label="Button">
|
|
345
346
|
<svg slot="icon"></svg>
|
|
346
347
|
</sp-button>
|
|
347
348
|
`);
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
349
|
+
await elementUpdated(el);
|
|
350
|
+
el.active = true;
|
|
351
|
+
await elementUpdated(el);
|
|
352
|
+
el.dispatchEvent(new FocusEvent("focusout"));
|
|
353
|
+
await elementUpdated(el);
|
|
354
|
+
expect(el.active).to.be.false;
|
|
355
|
+
});
|
|
356
|
+
describe("deprecated variants and attributes", () => {
|
|
357
|
+
it("manages [quiet]", async () => {
|
|
358
|
+
const el = await fixture(html`
|
|
358
359
|
<sp-button quiet>Button</sp-button>
|
|
359
360
|
`);
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
361
|
+
await elementUpdated(el);
|
|
362
|
+
expect(el.treatment).to.equal("outline");
|
|
363
|
+
el.quiet = false;
|
|
364
|
+
await elementUpdated(el);
|
|
365
|
+
expect(el.treatment).to.equal("fill");
|
|
366
|
+
});
|
|
367
|
+
it('upgrades [variant="cta"] to [variant="accent"]', async () => {
|
|
368
|
+
const el = await fixture(html`
|
|
368
369
|
<sp-button variant="cta">Button</sp-button>
|
|
369
370
|
`);
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
371
|
+
await elementUpdated(el);
|
|
372
|
+
expect(el.variant).to.equal("accent");
|
|
373
|
+
});
|
|
374
|
+
it('manages [variant="overBackground"]', async () => {
|
|
375
|
+
const el = await fixture(html`
|
|
375
376
|
<sp-button variant="overBackground">Button</sp-button>
|
|
376
377
|
`);
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
378
|
+
await elementUpdated(el);
|
|
379
|
+
expect(el.variant).to.equal("white");
|
|
380
|
+
expect(el.treatment).to.equal("outline");
|
|
381
|
+
});
|
|
382
|
+
it('forces [variant="accent"]', async () => {
|
|
383
|
+
const el = await fixture(html`
|
|
383
384
|
<sp-button variant="not-supported">Button</sp-button>
|
|
384
385
|
`);
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
});
|
|
386
|
+
await elementUpdated(el);
|
|
387
|
+
expect(el.variant).to.equal("accent");
|
|
388
388
|
});
|
|
389
|
+
});
|
|
389
390
|
});
|
|
390
|
-
//# sourceMappingURL=button.test.js.map
|
|
391
|
+
//# sourceMappingURL=button.test.js.map
|