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