@spectrum-web-components/button 0.42.4 → 0.43.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spectrum-web-components/button",
3
- "version": "0.42.4",
3
+ "version": "0.43.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -82,16 +82,16 @@
82
82
  "lit-html"
83
83
  ],
84
84
  "dependencies": {
85
- "@spectrum-web-components/base": "^0.42.4",
86
- "@spectrum-web-components/clear-button": "^0.42.4",
87
- "@spectrum-web-components/close-button": "^0.42.4",
88
- "@spectrum-web-components/icon": "^0.42.4",
89
- "@spectrum-web-components/icons-ui": "^0.42.4",
90
- "@spectrum-web-components/progress-circle": "^0.42.4",
91
- "@spectrum-web-components/shared": "^0.42.4"
85
+ "@spectrum-web-components/base": "^0.43.0",
86
+ "@spectrum-web-components/clear-button": "^0.43.0",
87
+ "@spectrum-web-components/close-button": "^0.43.0",
88
+ "@spectrum-web-components/icon": "^0.43.0",
89
+ "@spectrum-web-components/icons-ui": "^0.43.0",
90
+ "@spectrum-web-components/progress-circle": "^0.43.0",
91
+ "@spectrum-web-components/shared": "^0.43.0"
92
92
  },
93
93
  "devDependencies": {
94
- "@spectrum-css/button": "^13.1.0"
94
+ "@spectrum-css/button": "^13.1.1"
95
95
  },
96
96
  "types": "./src/index.d.ts",
97
97
  "customElements": "custom-elements.json",
@@ -99,5 +99,5 @@
99
99
  "./sp-*.js",
100
100
  "./**/*.dev.js"
101
101
  ],
102
- "gitHead": "4924ffd06681ced537edaed873a9ce8b42cf155c"
102
+ "gitHead": "dd5179a5eae5fe69ac77c5e10faed912d0e780e3"
103
103
  }
@@ -9,6 +9,7 @@ import {
9
9
  waitUntil
10
10
  } from "@open-wc/testing";
11
11
  import { testForLitDevWarnings } from "../../../test/testing-helpers.js";
12
+ import { stub } from "sinon";
12
13
  import {
13
14
  a11ySnapshot,
14
15
  findAccessibilityNode,
@@ -17,18 +18,47 @@ import {
17
18
  import { spy } from "sinon";
18
19
  describe("Button", () => {
19
20
  testForLitDevWarnings(
20
- async () => await fixture(
21
- html`
22
- <sp-button tabindex="0">Button</sp-button>
23
- `
24
- )
21
+ async () => await fixture(html`
22
+ <sp-button tabindex="0">Button</sp-button>
23
+ `)
25
24
  );
25
+ describe("dev mode", () => {
26
+ let consoleWarnStub;
27
+ before(() => {
28
+ window.__swc.verbose = true;
29
+ consoleWarnStub = stub(console, "warn");
30
+ });
31
+ afterEach(() => {
32
+ consoleWarnStub.resetHistory();
33
+ });
34
+ after(() => {
35
+ window.__swc.verbose = false;
36
+ consoleWarnStub.restore();
37
+ });
38
+ it("warns in devMode when white/black variant is provided", async () => {
39
+ const el = await fixture(html`
40
+ <sp-button tabindex="0" variant="white">Button</sp-button>
41
+ `);
42
+ await elementUpdated(el);
43
+ expect(consoleWarnStub.called).to.be.true;
44
+ const spyCall = consoleWarnStub.getCall(0);
45
+ expect(
46
+ spyCall.args.at(0).includes("deprecated"),
47
+ "confirm deprecated variant warning"
48
+ ).to.be.true;
49
+ expect(spyCall.args.at(-1), "confirm `data` shape").to.deep.equal({
50
+ data: {
51
+ localName: "sp-button",
52
+ type: "api",
53
+ level: "default"
54
+ }
55
+ });
56
+ });
57
+ });
26
58
  it("loads default", async () => {
27
- const el = await fixture(
28
- html`
29
- <sp-button tabindex="0">Button</sp-button>
30
- `
31
- );
59
+ const el = await fixture(html`
60
+ <sp-button tabindex="0">Button</sp-button>
61
+ `);
32
62
  await elementUpdated(el);
33
63
  expect(el).to.not.be.undefined;
34
64
  expect(el.textContent).to.include("Button");
@@ -37,24 +67,20 @@ describe("Button", () => {
37
67
  expect(el.getAttribute("variant")).to.equal("accent");
38
68
  });
39
69
  it("loads default w/ element content", async () => {
40
- const el = await fixture(
41
- html`
42
- <sp-button label="Button"><svg></svg></sp-button>
43
- `
44
- );
70
+ const el = await fixture(html`
71
+ <sp-button label="Button"><svg></svg></sp-button>
72
+ `);
45
73
  await elementUpdated(el);
46
74
  expect(el).to.not.be.undefined;
47
75
  await expect(el).to.be.accessible();
48
76
  });
49
77
  it("loads default w/ an icon", async () => {
50
- const el = await fixture(
51
- html`
52
- <sp-button label="">
53
- Button
54
- <svg slot="icon"></svg>
55
- </sp-button>
56
- `
57
- );
78
+ const el = await fixture(html`
79
+ <sp-button label="">
80
+ Button
81
+ <svg slot="icon"></svg>
82
+ </sp-button>
83
+ `);
58
84
  await elementUpdated(el);
59
85
  expect(el).to.not.be.undefined;
60
86
  expect(el.textContent).to.include("Button");
@@ -62,23 +88,19 @@ describe("Button", () => {
62
88
  await expect(el).to.be.accessible();
63
89
  });
64
90
  it("loads default only icon", async () => {
65
- const el = await fixture(
66
- html`
67
- <sp-button label="Button" icon-only>
68
- <svg slot="icon"></svg>
69
- </sp-button>
70
- `
71
- );
91
+ const el = await fixture(html`
92
+ <sp-button label="Button" icon-only>
93
+ <svg slot="icon"></svg>
94
+ </sp-button>
95
+ `);
72
96
  await elementUpdated(el);
73
97
  expect(el).to.not.be.undefined;
74
98
  await expect(el).to.be.accessible();
75
99
  });
76
100
  it("has a stable/predictable `updateComplete`", async () => {
77
- const test = await fixture(
78
- html`
79
- <div></div>
80
- `
81
- );
101
+ const test = await fixture(html`
102
+ <div></div>
103
+ `);
82
104
  let keydownTime = -1;
83
105
  let updateComplete1 = -1;
84
106
  let updateComplete2 = -1;
@@ -105,11 +127,9 @@ describe("Button", () => {
105
127
  expect(updateComplete2).lte(keydownTime);
106
128
  });
107
129
  it('manages "role"', async () => {
108
- const el = await fixture(
109
- html`
110
- <sp-button>Button</sp-button>
111
- `
112
- );
130
+ const el = await fixture(html`
131
+ <sp-button>Button</sp-button>
132
+ `);
113
133
  await elementUpdated(el);
114
134
  expect(el.getAttribute("role")).to.equal("button");
115
135
  el.setAttribute("href", "#");
@@ -121,14 +141,12 @@ describe("Button", () => {
121
141
  });
122
142
  it("allows label to be toggled", async () => {
123
143
  const testNode = document.createTextNode("Button");
124
- const el = await fixture(
125
- html`
126
- <sp-button>
127
- ${testNode}
128
- <svg slot="icon"></svg>
129
- </sp-button>
130
- `
131
- );
144
+ const el = await fixture(html`
145
+ <sp-button>
146
+ ${testNode}
147
+ <svg slot="icon"></svg>
148
+ </sp-button>
149
+ `);
132
150
  await elementUpdated(el);
133
151
  const labelTestableEl = el;
134
152
  expect(labelTestableEl.hasLabel, "starts with label").to.be.true;
@@ -140,36 +158,26 @@ describe("Button", () => {
140
158
  expect(labelTestableEl.hasLabel, "label is returned").to.be.true;
141
159
  });
142
160
  it("loads with href", async () => {
143
- const el = await fixture(
144
- html`
145
- <sp-button href="test_url">With Href</sp-button>
146
- `
147
- );
161
+ const el = await fixture(html`
162
+ <sp-button href="test_url">With Href</sp-button>
163
+ `);
148
164
  await elementUpdated(el);
149
165
  expect(el).to.not.be.undefined;
150
166
  expect(el.textContent).to.include("With Href");
151
167
  });
152
168
  it("loads with href and target", async () => {
153
- const el = await fixture(
154
- html`
155
- <sp-button href="test_url" target="_blank">
156
- With Target
157
- </sp-button>
158
- `
159
- );
169
+ const el = await fixture(html`
170
+ <sp-button href="test_url" target="_blank">With Target</sp-button>
171
+ `);
160
172
  await elementUpdated(el);
161
173
  expect(el).to.not.be.undefined;
162
174
  expect(el.textContent).to.include("With Target");
163
175
  });
164
176
  it("accepts shit+tab interactions", async () => {
165
177
  let focusedCount = 0;
166
- const el = await fixture(
167
- html`
168
- <sp-button href="test_url" target="_blank">
169
- With Target
170
- </sp-button>
171
- `
172
- );
178
+ const el = await fixture(html`
179
+ <sp-button href="test_url" target="_blank">With Target</sp-button>
180
+ `);
173
181
  await elementUpdated(el);
174
182
  const input = document.createElement("input");
175
183
  el.insertAdjacentElement("beforebegin", input);
@@ -194,11 +202,9 @@ describe("Button", () => {
194
202
  });
195
203
  it("manages `disabled`", async () => {
196
204
  const clickSpy = spy();
197
- const el = await fixture(
198
- html`
199
- <sp-button @click=${() => clickSpy()}>Button</sp-button>
200
- `
201
- );
205
+ const el = await fixture(html`
206
+ <sp-button @click=${() => clickSpy()}>Button</sp-button>
207
+ `);
202
208
  await elementUpdated(el);
203
209
  el.click();
204
210
  await elementUpdated(el);
@@ -221,11 +227,9 @@ describe("Button", () => {
221
227
  expect(clickSpy.calledOnce).to.be.true;
222
228
  });
223
229
  it("`disabled` manages `tabindex`", async () => {
224
- const el = await fixture(
225
- html`
226
- <sp-button disabled>Button</sp-button>
227
- `
228
- );
230
+ const el = await fixture(html`
231
+ <sp-button disabled>Button</sp-button>
232
+ `);
229
233
  await elementUpdated(el);
230
234
  expect(el.tabIndex).to.equal(-1);
231
235
  expect(el.getAttribute("tabindex")).to.equal("-1");
@@ -239,13 +243,9 @@ describe("Button", () => {
239
243
  expect(el.getAttribute("tabindex")).to.equal("-1");
240
244
  });
241
245
  it("manages `aria-disabled`", async () => {
242
- const el = await fixture(
243
- html`
244
- <sp-button href="test_url" target="_blank">
245
- With Target
246
- </sp-button>
247
- `
248
- );
246
+ const el = await fixture(html`
247
+ <sp-button href="test_url" target="_blank">With Target</sp-button>
248
+ `);
249
249
  await elementUpdated(el);
250
250
  expect(el.hasAttribute("aria-disabled"), "initially not").to.be.false;
251
251
  el.disabled = true;
@@ -256,19 +256,17 @@ describe("Button", () => {
256
256
  expect(el.hasAttribute("aria-disabled"), "finally not").to.be.false;
257
257
  });
258
258
  it("manages aria-label from disabled state", async () => {
259
- const el = await fixture(
260
- html`
261
- <sp-button
262
- href="test_url"
263
- target="_blank"
264
- label="clickable"
265
- disabled
266
- pending-label="Pending Button"
267
- >
268
- Click me
269
- </sp-button>
270
- `
271
- );
259
+ const el = await fixture(html`
260
+ <sp-button
261
+ href="test_url"
262
+ target="_blank"
263
+ label="clickable"
264
+ disabled
265
+ pending-label="Pending Button"
266
+ >
267
+ Click me
268
+ </sp-button>
269
+ `);
272
270
  await elementUpdated(el);
273
271
  expect(el.getAttribute("aria-label")).to.equal("clickable");
274
272
  el.pending = true;
@@ -282,18 +280,16 @@ describe("Button", () => {
282
280
  expect(el.getAttribute("aria-label")).to.equal("clickable");
283
281
  });
284
282
  it("manages aria-label from pending state", async () => {
285
- const el = await fixture(
286
- html`
287
- <sp-button
288
- href="test_url"
289
- target="_blank"
290
- label="clickable"
291
- pending
292
- >
293
- Click me
294
- </sp-button>
295
- `
296
- );
283
+ const el = await fixture(html`
284
+ <sp-button
285
+ href="test_url"
286
+ target="_blank"
287
+ label="clickable"
288
+ pending
289
+ >
290
+ Click me
291
+ </sp-button>
292
+ `);
297
293
  await elementUpdated(el);
298
294
  expect(el.getAttribute("aria-label")).to.equal("Pending");
299
295
  el.disabled = true;
@@ -307,18 +303,16 @@ describe("Button", () => {
307
303
  expect(el.getAttribute("aria-label")).to.equal("clickable");
308
304
  });
309
305
  it("manages aria-label set from outside", async () => {
310
- const el = await fixture(
311
- html`
312
- <sp-button
313
- href="test_url"
314
- target="_blank"
315
- aria-label="test"
316
- pending-label="Pending Button"
317
- >
318
- Click me
319
- </sp-button>
320
- `
321
- );
306
+ const el = await fixture(html`
307
+ <sp-button
308
+ href="test_url"
309
+ target="_blank"
310
+ aria-label="test"
311
+ pending-label="Pending Button"
312
+ >
313
+ Click me
314
+ </sp-button>
315
+ `);
322
316
  await elementUpdated(el);
323
317
  expect(el.getAttribute("aria-label")).to.equal("test");
324
318
  el.pending = true;
@@ -335,11 +329,9 @@ describe("Button", () => {
335
329
  expect(el.getAttribute("aria-label")).to.equal("test");
336
330
  });
337
331
  it("updates pending label accessibly", async () => {
338
- const el = await fixture(
339
- html`
340
- <sp-button href="test_url" target="_blank">Button</sp-button>
341
- `
342
- );
332
+ const el = await fixture(html`
333
+ <sp-button href="test_url" target="_blank">Button</sp-button>
334
+ `);
343
335
  await elementUpdated(el);
344
336
  el.pending = true;
345
337
  await elementUpdated(el);
@@ -367,13 +359,9 @@ describe("Button", () => {
367
359
  expect(el.pending).to.be.false;
368
360
  });
369
361
  it("manages tabIndex while disabled", async () => {
370
- const el = await fixture(
371
- html`
372
- <sp-button href="test_url" target="_blank">
373
- With Target
374
- </sp-button>
375
- `
376
- );
362
+ const el = await fixture(html`
363
+ <sp-button href="test_url" target="_blank">With Target</sp-button>
364
+ `);
377
365
  await elementUpdated(el);
378
366
  expect(el.tabIndex).to.equal(0);
379
367
  el.disabled = true;
@@ -388,13 +376,9 @@ describe("Button", () => {
388
376
  });
389
377
  it("swallows `click` interaction when `[disabled]`", async () => {
390
378
  const clickSpy = spy();
391
- const el = await fixture(
392
- html`
393
- <sp-button disabled @click=${() => clickSpy()}>
394
- Button
395
- </sp-button>
396
- `
397
- );
379
+ const el = await fixture(html`
380
+ <sp-button disabled @click=${() => clickSpy()}>Button</sp-button>
381
+ `);
398
382
  await elementUpdated(el);
399
383
  expect(clickSpy.callCount).to.equal(0);
400
384
  el.click();
@@ -403,11 +387,9 @@ describe("Button", () => {
403
387
  });
404
388
  it("translates keyboard interactions to click", async () => {
405
389
  const clickSpy = spy();
406
- const el = await fixture(
407
- html`
408
- <sp-button @click=${() => clickSpy()}>Button</sp-button>
409
- `
410
- );
390
+ const el = await fixture(html`
391
+ <sp-button @click=${() => clickSpy()}>Button</sp-button>
392
+ `);
411
393
  await elementUpdated(el);
412
394
  el.dispatchEvent(
413
395
  new KeyboardEvent("keypress", {
@@ -520,22 +502,20 @@ describe("Button", () => {
520
502
  it('proxies clicks by "type"', async () => {
521
503
  const submitSpy = spy();
522
504
  const resetSpy = spy();
523
- const test = await fixture(
524
- html`
525
- <form
526
- @submit=${(event) => {
527
- event.preventDefault();
528
- submitSpy();
529
- }}
530
- @reset=${(event) => {
531
- event.preventDefault();
532
- resetSpy();
533
- }}
534
- >
535
- <sp-button>Button</sp-button>
536
- </form>
537
- `
538
- );
505
+ const test = await fixture(html`
506
+ <form
507
+ @submit=${(event) => {
508
+ event.preventDefault();
509
+ submitSpy();
510
+ }}
511
+ @reset=${(event) => {
512
+ event.preventDefault();
513
+ resetSpy();
514
+ }}
515
+ >
516
+ <sp-button>Button</sp-button>
517
+ </form>
518
+ `);
539
519
  const el = test.querySelector("sp-button");
540
520
  await elementUpdated(el);
541
521
  el.type = "submit";
@@ -556,11 +536,9 @@ describe("Button", () => {
556
536
  });
557
537
  it("proxies click by [href]", async () => {
558
538
  const clickSpy = spy();
559
- const el = await fixture(
560
- html`
561
- <sp-button href="test_url">With Href</sp-button>
562
- `
563
- );
539
+ const el = await fixture(html`
540
+ <sp-button href="test_url">With Href</sp-button>
541
+ `);
564
542
  await elementUpdated(el);
565
543
  el.anchorElement.addEventListener("click", (event) => {
566
544
  event.preventDefault();
@@ -573,13 +551,11 @@ describe("Button", () => {
573
551
  expect(clickSpy.callCount).to.equal(1);
574
552
  });
575
553
  it('manages "active" while focused', async () => {
576
- const el = await fixture(
577
- html`
578
- <sp-button label="Button">
579
- <svg slot="icon"></svg>
580
- </sp-button>
581
- `
582
- );
554
+ const el = await fixture(html`
555
+ <sp-button label="Button">
556
+ <svg slot="icon"></svg>
557
+ </sp-button>
558
+ `);
583
559
  await elementUpdated(el);
584
560
  el.focus();
585
561
  await elementUpdated(el);
@@ -596,11 +572,9 @@ describe("Button", () => {
596
572
  });
597
573
  describe("deprecated variants and attributes", () => {
598
574
  it("manages [quiet]", async () => {
599
- const el = await fixture(
600
- html`
601
- <sp-button quiet>Button</sp-button>
602
- `
603
- );
575
+ const el = await fixture(html`
576
+ <sp-button quiet>Button</sp-button>
577
+ `);
604
578
  await elementUpdated(el);
605
579
  expect(el.treatment).to.equal("outline");
606
580
  el.quiet = false;
@@ -608,31 +582,25 @@ describe("Button", () => {
608
582
  expect(el.treatment).to.equal("fill");
609
583
  });
610
584
  it('upgrades [variant="cta"] to [variant="accent"]', async () => {
611
- const el = await fixture(
612
- html`
613
- <sp-button variant="cta">Button</sp-button>
614
- `
615
- );
585
+ const el = await fixture(html`
586
+ <sp-button variant="cta">Button</sp-button>
587
+ `);
616
588
  await elementUpdated(el);
617
589
  expect(el.variant).to.equal("accent");
618
590
  });
619
591
  it('manages [variant="overBackground"]', async () => {
620
- const el = await fixture(
621
- html`
622
- <sp-button variant="overBackground">Button</sp-button>
623
- `
624
- );
592
+ const el = await fixture(html`
593
+ <sp-button variant="overBackground">Button</sp-button>
594
+ `);
625
595
  await elementUpdated(el);
626
596
  expect(el.hasAttribute("variant")).to.not.equal("overBackground");
627
597
  expect(el.treatment).to.equal("outline");
628
598
  expect(el.static).to.equal("white");
629
599
  });
630
600
  it('forces [variant="accent"]', async () => {
631
- const el = await fixture(
632
- html`
633
- <sp-button variant="not-supported">Button</sp-button>
634
- `
635
- );
601
+ const el = await fixture(html`
602
+ <sp-button variant="not-supported">Button</sp-button>
603
+ `);
636
604
  await elementUpdated(el);
637
605
  expect(el.variant).to.equal("accent");
638
606
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["button.test.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 '@spectrum-web-components/button/sp-button.js';\nimport { Button } from '@spectrum-web-components/button';\nimport {\n elementUpdated,\n expect,\n fixture,\n html,\n nextFrame,\n waitUntil,\n} from '@open-wc/testing';\nimport { testForLitDevWarnings } from '../../../test/testing-helpers.js';\nimport {\n a11ySnapshot,\n findAccessibilityNode,\n sendKeys,\n} from '@web/test-runner-commands';\nimport { spy } from 'sinon';\n\ntype TestableButtonType = {\n hasLabel: boolean;\n};\n\ndescribe('Button', () => {\n testForLitDevWarnings(\n async () =>\n await fixture<Button>(\n html`\n <sp-button tabindex=\"0\">Button</sp-button>\n `\n )\n );\n it('loads default', async () => {\n const el = await fixture<Button>(\n html`\n <sp-button tabindex=\"0\">Button</sp-button>\n `\n );\n\n await elementUpdated(el);\n expect(el).to.not.be.undefined;\n expect(el.textContent).to.include('Button');\n await expect(el).to.be.accessible();\n\n // Applies a default variant as an stylable attribute\n expect(el.variant).to.equal('accent');\n expect(el.getAttribute('variant')).to.equal('accent');\n });\n it('loads default w/ element content', async () => {\n const el = await fixture<Button>(\n html`\n <sp-button label=\"Button\"><svg></svg></sp-button>\n `\n );\n\n await elementUpdated(el);\n expect(el).to.not.be.undefined;\n await expect(el).to.be.accessible();\n });\n it('loads default w/ an icon', async () => {\n const el = await fixture<Button>(\n html`\n <sp-button label=\"\">\n Button\n <svg slot=\"icon\"></svg>\n </sp-button>\n `\n );\n\n await elementUpdated(el);\n expect(el).to.not.be.undefined;\n expect(el.textContent).to.include('Button');\n expect(!(el as unknown as { hasIcon: boolean }).hasIcon);\n await expect(el).to.be.accessible();\n });\n it('loads default only icon', async () => {\n const el = await fixture<Button>(\n html`\n <sp-button label=\"Button\" icon-only>\n <svg slot=\"icon\"></svg>\n </sp-button>\n `\n );\n\n await elementUpdated(el);\n expect(el).to.not.be.undefined;\n await expect(el).to.be.accessible();\n });\n it('has a stable/predictable `updateComplete`', async () => {\n const test = await fixture<HTMLDivElement>(\n html`\n <div></div>\n `\n );\n\n let keydownTime = -1;\n let updateComplete1 = -1;\n let updateComplete2 = -1;\n\n const el = document.createElement('sp-button');\n el.autofocus = true;\n el.addEventListener('keydown', () => {\n keydownTime = performance.now();\n });\n el.updateComplete.then(() => {\n updateComplete1 = performance.now();\n });\n el.updateComplete.then(() => {\n updateComplete2 = performance.now();\n });\n test.append(el);\n // don't use elementUpdated(), as it is under test...\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n\n expect(keydownTime, 'keydown happened').to.not.eq(-1);\n expect(updateComplete1, 'first update complete happened').to.not.eq(-1);\n expect(updateComplete2, 'first update complete happened').to.not.eq(-1);\n expect(updateComplete1).lte(updateComplete2);\n expect(updateComplete2).lte(keydownTime);\n });\n it('manages \"role\"', async () => {\n const el = await fixture<Button>(\n html`\n <sp-button>Button</sp-button>\n `\n );\n\n await elementUpdated(el);\n expect(el.getAttribute('role')).to.equal('button');\n\n el.setAttribute('href', '#');\n\n await elementUpdated(el);\n expect(el.getAttribute('role')).to.equal('link');\n\n el.removeAttribute('href');\n\n await elementUpdated(el);\n expect(el.getAttribute('role')).to.equal('button');\n });\n it('allows label to be toggled', async () => {\n const testNode = document.createTextNode('Button');\n const el = await fixture<Button>(\n html`\n <sp-button>\n ${testNode}\n <svg slot=\"icon\"></svg>\n </sp-button>\n `\n );\n\n await elementUpdated(el);\n\n const labelTestableEl = el as unknown as TestableButtonType;\n\n expect(labelTestableEl.hasLabel, 'starts with label').to.be.true;\n\n testNode.textContent = '';\n\n await elementUpdated(el);\n\n await waitUntil(() => !labelTestableEl.hasLabel, 'label is removed');\n\n testNode.textContent = 'Button';\n\n await elementUpdated(el);\n\n expect(labelTestableEl.hasLabel, 'label is returned').to.be.true;\n });\n it('loads with href', async () => {\n const el = await fixture<Button>(\n html`\n <sp-button href=\"test_url\">With Href</sp-button>\n `\n );\n\n await elementUpdated(el);\n expect(el).to.not.be.undefined;\n expect(el.textContent).to.include('With Href');\n });\n it('loads with href and target', async () => {\n const el = await fixture<Button>(\n html`\n <sp-button href=\"test_url\" target=\"_blank\">\n With Target\n </sp-button>\n `\n );\n\n await elementUpdated(el);\n expect(el).to.not.be.undefined;\n expect(el.textContent).to.include('With Target');\n });\n it('accepts shit+tab interactions', async () => {\n let focusedCount = 0;\n const el = await fixture<Button>(\n html`\n <sp-button href=\"test_url\" target=\"_blank\">\n With Target\n </sp-button>\n `\n );\n\n await elementUpdated(el);\n const input = document.createElement('input');\n el.insertAdjacentElement('beforebegin', input);\n input.focus();\n expect(document.activeElement === input).to.be.true;\n\n el.addEventListener('focus', () => {\n focusedCount += 1;\n });\n expect(focusedCount).to.equal(0);\n\n await sendKeys({\n press: 'Tab',\n });\n await elementUpdated(el);\n\n expect(document.activeElement === el).to.be.true;\n expect(focusedCount).to.equal(1);\n\n await sendKeys({\n press: 'Shift+Tab',\n });\n await elementUpdated(el);\n\n expect(focusedCount).to.equal(1);\n expect(document.activeElement === input).to.be.true;\n });\n it('manages `disabled`', async () => {\n const clickSpy = spy();\n const el = await fixture<Button>(\n html`\n <sp-button @click=${() => clickSpy()}>Button</sp-button>\n `\n );\n\n await elementUpdated(el);\n el.click();\n await elementUpdated(el);\n expect(clickSpy.calledOnce).to.be.true;\n\n clickSpy.resetHistory();\n el.disabled = true;\n await elementUpdated(el);\n el.click();\n await elementUpdated(el);\n expect(clickSpy.callCount).to.equal(0);\n\n clickSpy.resetHistory();\n await elementUpdated(el);\n el.dispatchEvent(new Event('click', {}));\n await elementUpdated(el);\n expect(clickSpy.callCount).to.equal(0);\n\n clickSpy.resetHistory();\n el.disabled = false;\n el.click();\n await elementUpdated(el);\n expect(clickSpy.calledOnce).to.be.true;\n });\n it('`disabled` manages `tabindex`', async () => {\n const el = await fixture<Button>(\n html`\n <sp-button disabled>Button</sp-button>\n `\n );\n\n await elementUpdated(el);\n expect(el.tabIndex).to.equal(-1);\n expect(el.getAttribute('tabindex')).to.equal('-1');\n\n el.disabled = false;\n await elementUpdated(el);\n\n expect(el.tabIndex).to.equal(0);\n expect(el.getAttribute('tabindex')).to.equal('0');\n\n el.disabled = true;\n await elementUpdated(el);\n\n expect(el.tabIndex).to.equal(-1);\n expect(el.getAttribute('tabindex')).to.equal('-1');\n });\n it('manages `aria-disabled`', async () => {\n const el = await fixture<Button>(\n html`\n <sp-button href=\"test_url\" target=\"_blank\">\n With Target\n </sp-button>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.hasAttribute('aria-disabled'), 'initially not').to.be.false;\n\n el.disabled = true;\n await elementUpdated(el);\n\n expect(el.getAttribute('aria-disabled')).to.equal('true');\n\n el.disabled = false;\n await elementUpdated(el);\n\n expect(el.hasAttribute('aria-disabled'), 'finally not').to.be.false;\n });\n it('manages aria-label from disabled state', async () => {\n const el = await fixture<Button>(\n html`\n <sp-button\n href=\"test_url\"\n target=\"_blank\"\n label=\"clickable\"\n disabled\n pending-label=\"Pending Button\"\n >\n Click me\n </sp-button>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.getAttribute('aria-label')).to.equal('clickable');\n\n // button set to pending while disabled and the aria-label should stay the same\n el.pending = true;\n await elementUpdated(el);\n expect(el.getAttribute('aria-label')).to.equal('clickable');\n\n // button set to enabled while pending is true and the aria-label should update\n el.disabled = false;\n await elementUpdated(el);\n expect(el.getAttribute('aria-label')).to.equal('Pending Button');\n\n // pending is removed and the aria-label should be back to the original\n el.pending = false;\n await elementUpdated(el);\n expect(el.getAttribute('aria-label')).to.equal('clickable');\n });\n\n it('manages aria-label from pending state', async () => {\n const el = await fixture<Button>(\n html`\n <sp-button\n href=\"test_url\"\n target=\"_blank\"\n label=\"clickable\"\n pending\n >\n Click me\n </sp-button>\n `\n );\n await elementUpdated(el);\n expect(el.getAttribute('aria-label')).to.equal('Pending');\n\n // button set to disabled while pending is true and the aria-label should be original\n el.disabled = true;\n await elementUpdated(el);\n expect(el.getAttribute('aria-label')).to.equal('clickable');\n\n // pending is removed and the aria-label should not change as the button is disabled\n el.pending = false;\n await elementUpdated(el);\n expect(el.getAttribute('aria-label')).to.equal('clickable');\n\n // button is enabled and the aria-label should not change\n el.disabled = false;\n await elementUpdated(el);\n expect(el.getAttribute('aria-label')).to.equal('clickable');\n });\n\n it('manages aria-label set from outside', async () => {\n const el = await fixture<Button>(\n html`\n <sp-button\n href=\"test_url\"\n target=\"_blank\"\n aria-label=\"test\"\n pending-label=\"Pending Button\"\n >\n Click me\n </sp-button>\n `\n );\n await elementUpdated(el);\n expect(el.getAttribute('aria-label')).to.equal('test');\n\n // button set to pending and aria-label should update\n el.pending = true;\n await elementUpdated(el);\n expect(el.getAttribute('aria-label')).to.equal('Pending Button');\n\n // button set to disabled while pending and aria-label should update\n el.disabled = true;\n await elementUpdated(el);\n expect(el.getAttribute('aria-label')).to.equal('test');\n\n // button set to enabled while pending and aria-label should update\n el.disabled = false;\n await elementUpdated(el);\n expect(el.getAttribute('aria-label')).to.equal('Pending Button');\n\n // pending removed and aria-label should update\n el.pending = false;\n await elementUpdated(el);\n expect(el.getAttribute('aria-label')).to.equal('test');\n });\n\n it('updates pending label accessibly', async () => {\n const el = await fixture<Button>(\n html`\n <sp-button href=\"test_url\" target=\"_blank\">Button</sp-button>\n `\n );\n\n await elementUpdated(el);\n el.pending = true;\n await elementUpdated(el);\n\n await nextFrame();\n\n type NamedNode = { name: string };\n let snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Pending'\n ),\n '`Pending` is the label text'\n ).to.not.be.null;\n\n expect(el.pending).to.be.true;\n\n // remove pending state\n el.pending = false;\n await elementUpdated(el);\n\n await nextFrame();\n\n snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n // check label returns to previous value\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Button'\n ),\n '`Button` is the label text'\n ).to.not.be.null;\n\n expect(el.pending).to.be.false;\n });\n\n it('manages tabIndex while disabled', async () => {\n const el = await fixture<Button>(\n html`\n <sp-button href=\"test_url\" target=\"_blank\">\n With Target\n </sp-button>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.tabIndex).to.equal(0);\n\n el.disabled = true;\n await elementUpdated(el);\n\n expect(el.tabIndex).to.equal(-1);\n\n el.tabIndex = 2;\n await elementUpdated(el);\n\n expect(el.tabIndex).to.equal(-1);\n\n el.disabled = false;\n await elementUpdated(el);\n\n expect(el.tabIndex).to.equal(2);\n });\n it('swallows `click` interaction when `[disabled]`', async () => {\n const clickSpy = spy();\n const el = await fixture<Button>(\n html`\n <sp-button disabled @click=${() => clickSpy()}>\n Button\n </sp-button>\n `\n );\n\n await elementUpdated(el);\n expect(clickSpy.callCount).to.equal(0);\n\n el.click();\n\n await elementUpdated(el);\n expect(clickSpy.callCount).to.equal(0);\n });\n it('translates keyboard interactions to click', async () => {\n const clickSpy = spy();\n const el = await fixture<Button>(\n html`\n <sp-button @click=${() => clickSpy()}>Button</sp-button>\n `\n );\n\n await elementUpdated(el);\n\n el.dispatchEvent(\n new KeyboardEvent('keypress', {\n bubbles: true,\n composed: true,\n cancelable: true,\n code: 'Enter',\n key: 'Enter',\n })\n );\n\n await elementUpdated(el);\n expect(clickSpy.callCount).to.equal(1);\n clickSpy.resetHistory();\n\n el.dispatchEvent(\n new KeyboardEvent('keypress', {\n bubbles: true,\n composed: true,\n cancelable: true,\n code: 'NumpadEnter',\n key: 'NumpadEnter',\n })\n );\n\n await elementUpdated(el);\n expect(clickSpy.callCount).to.equal(1);\n clickSpy.resetHistory();\n\n el.dispatchEvent(\n new KeyboardEvent('keypress', {\n bubbles: true,\n composed: true,\n cancelable: true,\n code: 'Space',\n key: 'Space',\n })\n );\n\n await elementUpdated(el);\n expect(clickSpy.callCount).to.equal(0);\n clickSpy.resetHistory();\n\n el.dispatchEvent(\n new KeyboardEvent('keydown', {\n bubbles: true,\n composed: true,\n cancelable: true,\n code: 'Space',\n key: 'Space',\n })\n );\n el.dispatchEvent(\n new KeyboardEvent('keyup', {\n bubbles: true,\n composed: true,\n cancelable: true,\n code: 'Space',\n key: 'Space',\n })\n );\n\n await elementUpdated(el);\n expect(clickSpy.callCount).to.equal(1);\n clickSpy.resetHistory();\n\n el.dispatchEvent(\n new KeyboardEvent('keydown', {\n bubbles: true,\n composed: true,\n cancelable: true,\n code: 'Space',\n key: 'Space',\n })\n );\n el.dispatchEvent(\n new KeyboardEvent('keyup', {\n bubbles: true,\n composed: true,\n cancelable: true,\n code: 'KeyG',\n key: 'g',\n })\n );\n\n await elementUpdated(el);\n expect(clickSpy.callCount).to.equal(0);\n\n el.dispatchEvent(\n new KeyboardEvent('keyup', {\n bubbles: true,\n composed: true,\n cancelable: true,\n code: 'Space',\n key: 'Space',\n })\n );\n clickSpy.resetHistory();\n\n el.dispatchEvent(\n new KeyboardEvent('keydown', {\n bubbles: true,\n composed: true,\n cancelable: true,\n code: 'KeyG',\n key: 'g',\n })\n );\n el.dispatchEvent(\n new KeyboardEvent('keyup', {\n bubbles: true,\n composed: true,\n cancelable: true,\n code: 'Space',\n key: 'Space',\n })\n );\n\n await elementUpdated(el);\n expect(clickSpy.callCount).to.equal(0);\n });\n it('proxies clicks by \"type\"', async () => {\n const submitSpy = spy();\n const resetSpy = spy();\n const test = await fixture<HTMLFormElement>(\n html`\n <form\n @submit=${(event: Event): void => {\n event.preventDefault();\n submitSpy();\n }}\n @reset=${(event: Event): void => {\n event.preventDefault();\n resetSpy();\n }}\n >\n <sp-button>Button</sp-button>\n </form>\n `\n );\n const el = test.querySelector('sp-button') as Button;\n\n await elementUpdated(el);\n el.type = 'submit';\n\n await elementUpdated(el);\n el.click();\n\n expect(submitSpy.callCount).to.equal(1);\n expect(resetSpy.callCount).to.equal(0);\n\n el.type = 'reset';\n\n await elementUpdated(el);\n el.click();\n\n expect(submitSpy.callCount).to.equal(1);\n expect(resetSpy.callCount).to.equal(1);\n\n el.type = 'button';\n\n await elementUpdated(el);\n el.click();\n\n expect(submitSpy.callCount).to.equal(1);\n expect(resetSpy.callCount).to.equal(1);\n });\n it('proxies click by [href]', async () => {\n const clickSpy = spy();\n const el = await fixture<Button>(\n html`\n <sp-button href=\"test_url\">With Href</sp-button>\n `\n );\n\n await elementUpdated(el);\n (\n el as unknown as {\n anchorElement: HTMLAnchorElement;\n }\n ).anchorElement.addEventListener('click', (event: Event): void => {\n event.preventDefault();\n event.stopPropagation();\n clickSpy();\n });\n expect(clickSpy.callCount).to.equal(0);\n\n el.click();\n await elementUpdated(el);\n expect(clickSpy.callCount).to.equal(1);\n });\n it('manages \"active\" while focused', async () => {\n const el = await fixture<Button>(\n html`\n <sp-button label=\"Button\">\n <svg slot=\"icon\"></svg>\n </sp-button>\n `\n );\n\n await elementUpdated(el);\n el.focus();\n await elementUpdated(el);\n await sendKeys({\n down: 'Space',\n });\n await elementUpdated(el);\n expect(el.active).to.be.true;\n await sendKeys({\n up: 'Space',\n });\n await elementUpdated(el);\n expect(el.active).to.be.false;\n });\n describe('deprecated variants and attributes', () => {\n it('manages [quiet]', async () => {\n const el = await fixture<Button>(\n html`\n <sp-button quiet>Button</sp-button>\n `\n );\n\n await elementUpdated(el);\n expect(el.treatment).to.equal('outline');\n\n el.quiet = false;\n\n await elementUpdated(el);\n expect(el.treatment).to.equal('fill');\n });\n it('upgrades [variant=\"cta\"] to [variant=\"accent\"]', async () => {\n const el = await fixture<Button>(\n html`\n <sp-button variant=\"cta\">Button</sp-button>\n `\n );\n\n await elementUpdated(el);\n expect(el.variant).to.equal('accent');\n });\n it('manages [variant=\"overBackground\"]', async () => {\n const el = await fixture<Button>(\n html`\n <sp-button variant=\"overBackground\">Button</sp-button>\n `\n );\n\n await elementUpdated(el);\n expect(el.hasAttribute('variant')).to.not.equal('overBackground');\n expect(el.treatment).to.equal('outline');\n expect(el.static).to.equal('white');\n });\n it('forces [variant=\"accent\"]', async () => {\n const el = await fixture<Button>(\n html`\n <sp-button variant=\"not-supported\">Button</sp-button>\n `\n );\n\n await elementUpdated(el);\n expect(el.variant).to.equal('accent');\n });\n });\n});\n"],
5
- "mappings": "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",
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 '@spectrum-web-components/button/sp-button.js';\nimport { Button } from '@spectrum-web-components/button';\nimport {\n elementUpdated,\n expect,\n fixture,\n html,\n nextFrame,\n waitUntil,\n} from '@open-wc/testing';\nimport { testForLitDevWarnings } from '../../../test/testing-helpers.js';\nimport { stub } from 'sinon';\nimport {\n a11ySnapshot,\n findAccessibilityNode,\n sendKeys,\n} from '@web/test-runner-commands';\nimport { spy } from 'sinon';\n\ntype TestableButtonType = {\n hasLabel: boolean;\n};\n\ndescribe('Button', () => {\n testForLitDevWarnings(\n async () =>\n await fixture<Button>(html`\n <sp-button tabindex=\"0\">Button</sp-button>\n `)\n );\n describe('dev mode', () => {\n let consoleWarnStub!: ReturnType<typeof stub>;\n before(() => {\n window.__swc.verbose = true;\n consoleWarnStub = stub(console, 'warn');\n });\n afterEach(() => {\n consoleWarnStub.resetHistory();\n });\n after(() => {\n window.__swc.verbose = false;\n consoleWarnStub.restore();\n });\n\n it('warns in devMode when white/black variant is provided', async () => {\n const el = await fixture<Button>(html`\n <sp-button tabindex=\"0\" variant=\"white\">Button</sp-button>\n `);\n\n await elementUpdated(el);\n expect(consoleWarnStub.called).to.be.true;\n\n const spyCall = consoleWarnStub.getCall(0);\n expect(\n (spyCall.args.at(0) as string).includes('deprecated'),\n 'confirm deprecated variant warning'\n ).to.be.true;\n expect(spyCall.args.at(-1), 'confirm `data` shape').to.deep.equal({\n data: {\n localName: 'sp-button',\n type: 'api',\n level: 'default',\n },\n });\n });\n });\n it('loads default', async () => {\n const el = await fixture<Button>(html`\n <sp-button tabindex=\"0\">Button</sp-button>\n `);\n\n await elementUpdated(el);\n expect(el).to.not.be.undefined;\n expect(el.textContent).to.include('Button');\n await expect(el).to.be.accessible();\n\n // Applies a default variant as an stylable attribute\n expect(el.variant).to.equal('accent');\n expect(el.getAttribute('variant')).to.equal('accent');\n });\n it('loads default w/ element content', async () => {\n const el = await fixture<Button>(html`\n <sp-button label=\"Button\"><svg></svg></sp-button>\n `);\n\n await elementUpdated(el);\n expect(el).to.not.be.undefined;\n await expect(el).to.be.accessible();\n });\n it('loads default w/ an icon', async () => {\n const el = await fixture<Button>(html`\n <sp-button label=\"\">\n Button\n <svg slot=\"icon\"></svg>\n </sp-button>\n `);\n\n await elementUpdated(el);\n expect(el).to.not.be.undefined;\n expect(el.textContent).to.include('Button');\n expect(!(el as unknown as { hasIcon: boolean }).hasIcon);\n await expect(el).to.be.accessible();\n });\n it('loads default only icon', async () => {\n const el = await fixture<Button>(html`\n <sp-button label=\"Button\" icon-only>\n <svg slot=\"icon\"></svg>\n </sp-button>\n `);\n\n await elementUpdated(el);\n expect(el).to.not.be.undefined;\n await expect(el).to.be.accessible();\n });\n it('has a stable/predictable `updateComplete`', async () => {\n const test = await fixture<HTMLDivElement>(html`\n <div></div>\n `);\n\n let keydownTime = -1;\n let updateComplete1 = -1;\n let updateComplete2 = -1;\n\n const el = document.createElement('sp-button');\n el.autofocus = true;\n el.addEventListener('keydown', () => {\n keydownTime = performance.now();\n });\n el.updateComplete.then(() => {\n updateComplete1 = performance.now();\n });\n el.updateComplete.then(() => {\n updateComplete2 = performance.now();\n });\n test.append(el);\n // don't use elementUpdated(), as it is under test...\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n\n expect(keydownTime, 'keydown happened').to.not.eq(-1);\n expect(updateComplete1, 'first update complete happened').to.not.eq(-1);\n expect(updateComplete2, 'first update complete happened').to.not.eq(-1);\n expect(updateComplete1).lte(updateComplete2);\n expect(updateComplete2).lte(keydownTime);\n });\n it('manages \"role\"', async () => {\n const el = await fixture<Button>(html`\n <sp-button>Button</sp-button>\n `);\n\n await elementUpdated(el);\n expect(el.getAttribute('role')).to.equal('button');\n\n el.setAttribute('href', '#');\n\n await elementUpdated(el);\n expect(el.getAttribute('role')).to.equal('link');\n\n el.removeAttribute('href');\n\n await elementUpdated(el);\n expect(el.getAttribute('role')).to.equal('button');\n });\n it('allows label to be toggled', async () => {\n const testNode = document.createTextNode('Button');\n const el = await fixture<Button>(html`\n <sp-button>\n ${testNode}\n <svg slot=\"icon\"></svg>\n </sp-button>\n `);\n\n await elementUpdated(el);\n\n const labelTestableEl = el as unknown as TestableButtonType;\n\n expect(labelTestableEl.hasLabel, 'starts with label').to.be.true;\n\n testNode.textContent = '';\n\n await elementUpdated(el);\n\n await waitUntil(() => !labelTestableEl.hasLabel, 'label is removed');\n\n testNode.textContent = 'Button';\n\n await elementUpdated(el);\n\n expect(labelTestableEl.hasLabel, 'label is returned').to.be.true;\n });\n it('loads with href', async () => {\n const el = await fixture<Button>(html`\n <sp-button href=\"test_url\">With Href</sp-button>\n `);\n\n await elementUpdated(el);\n expect(el).to.not.be.undefined;\n expect(el.textContent).to.include('With Href');\n });\n it('loads with href and target', async () => {\n const el = await fixture<Button>(html`\n <sp-button href=\"test_url\" target=\"_blank\">With Target</sp-button>\n `);\n\n await elementUpdated(el);\n expect(el).to.not.be.undefined;\n expect(el.textContent).to.include('With Target');\n });\n it('accepts shit+tab interactions', async () => {\n let focusedCount = 0;\n const el = await fixture<Button>(html`\n <sp-button href=\"test_url\" target=\"_blank\">With Target</sp-button>\n `);\n\n await elementUpdated(el);\n const input = document.createElement('input');\n el.insertAdjacentElement('beforebegin', input);\n input.focus();\n expect(document.activeElement === input).to.be.true;\n\n el.addEventListener('focus', () => {\n focusedCount += 1;\n });\n expect(focusedCount).to.equal(0);\n\n await sendKeys({\n press: 'Tab',\n });\n await elementUpdated(el);\n\n expect(document.activeElement === el).to.be.true;\n expect(focusedCount).to.equal(1);\n\n await sendKeys({\n press: 'Shift+Tab',\n });\n await elementUpdated(el);\n\n expect(focusedCount).to.equal(1);\n expect(document.activeElement === input).to.be.true;\n });\n it('manages `disabled`', async () => {\n const clickSpy = spy();\n const el = await fixture<Button>(html`\n <sp-button @click=${() => clickSpy()}>Button</sp-button>\n `);\n\n await elementUpdated(el);\n el.click();\n await elementUpdated(el);\n expect(clickSpy.calledOnce).to.be.true;\n\n clickSpy.resetHistory();\n el.disabled = true;\n await elementUpdated(el);\n el.click();\n await elementUpdated(el);\n expect(clickSpy.callCount).to.equal(0);\n\n clickSpy.resetHistory();\n await elementUpdated(el);\n el.dispatchEvent(new Event('click', {}));\n await elementUpdated(el);\n expect(clickSpy.callCount).to.equal(0);\n\n clickSpy.resetHistory();\n el.disabled = false;\n el.click();\n await elementUpdated(el);\n expect(clickSpy.calledOnce).to.be.true;\n });\n it('`disabled` manages `tabindex`', async () => {\n const el = await fixture<Button>(html`\n <sp-button disabled>Button</sp-button>\n `);\n\n await elementUpdated(el);\n expect(el.tabIndex).to.equal(-1);\n expect(el.getAttribute('tabindex')).to.equal('-1');\n\n el.disabled = false;\n await elementUpdated(el);\n\n expect(el.tabIndex).to.equal(0);\n expect(el.getAttribute('tabindex')).to.equal('0');\n\n el.disabled = true;\n await elementUpdated(el);\n\n expect(el.tabIndex).to.equal(-1);\n expect(el.getAttribute('tabindex')).to.equal('-1');\n });\n it('manages `aria-disabled`', async () => {\n const el = await fixture<Button>(html`\n <sp-button href=\"test_url\" target=\"_blank\">With Target</sp-button>\n `);\n\n await elementUpdated(el);\n\n expect(el.hasAttribute('aria-disabled'), 'initially not').to.be.false;\n\n el.disabled = true;\n await elementUpdated(el);\n\n expect(el.getAttribute('aria-disabled')).to.equal('true');\n\n el.disabled = false;\n await elementUpdated(el);\n\n expect(el.hasAttribute('aria-disabled'), 'finally not').to.be.false;\n });\n it('manages aria-label from disabled state', async () => {\n const el = await fixture<Button>(html`\n <sp-button\n href=\"test_url\"\n target=\"_blank\"\n label=\"clickable\"\n disabled\n pending-label=\"Pending Button\"\n >\n Click me\n </sp-button>\n `);\n\n await elementUpdated(el);\n\n expect(el.getAttribute('aria-label')).to.equal('clickable');\n\n // button set to pending while disabled and the aria-label should stay the same\n el.pending = true;\n await elementUpdated(el);\n expect(el.getAttribute('aria-label')).to.equal('clickable');\n\n // button set to enabled while pending is true and the aria-label should update\n el.disabled = false;\n await elementUpdated(el);\n expect(el.getAttribute('aria-label')).to.equal('Pending Button');\n\n // pending is removed and the aria-label should be back to the original\n el.pending = false;\n await elementUpdated(el);\n expect(el.getAttribute('aria-label')).to.equal('clickable');\n });\n\n it('manages aria-label from pending state', async () => {\n const el = await fixture<Button>(html`\n <sp-button\n href=\"test_url\"\n target=\"_blank\"\n label=\"clickable\"\n pending\n >\n Click me\n </sp-button>\n `);\n await elementUpdated(el);\n expect(el.getAttribute('aria-label')).to.equal('Pending');\n\n // button set to disabled while pending is true and the aria-label should be original\n el.disabled = true;\n await elementUpdated(el);\n expect(el.getAttribute('aria-label')).to.equal('clickable');\n\n // pending is removed and the aria-label should not change as the button is disabled\n el.pending = false;\n await elementUpdated(el);\n expect(el.getAttribute('aria-label')).to.equal('clickable');\n\n // button is enabled and the aria-label should not change\n el.disabled = false;\n await elementUpdated(el);\n expect(el.getAttribute('aria-label')).to.equal('clickable');\n });\n\n it('manages aria-label set from outside', async () => {\n const el = await fixture<Button>(html`\n <sp-button\n href=\"test_url\"\n target=\"_blank\"\n aria-label=\"test\"\n pending-label=\"Pending Button\"\n >\n Click me\n </sp-button>\n `);\n await elementUpdated(el);\n expect(el.getAttribute('aria-label')).to.equal('test');\n\n // button set to pending and aria-label should update\n el.pending = true;\n await elementUpdated(el);\n expect(el.getAttribute('aria-label')).to.equal('Pending Button');\n\n // button set to disabled while pending and aria-label should update\n el.disabled = true;\n await elementUpdated(el);\n expect(el.getAttribute('aria-label')).to.equal('test');\n\n // button set to enabled while pending and aria-label should update\n el.disabled = false;\n await elementUpdated(el);\n expect(el.getAttribute('aria-label')).to.equal('Pending Button');\n\n // pending removed and aria-label should update\n el.pending = false;\n await elementUpdated(el);\n expect(el.getAttribute('aria-label')).to.equal('test');\n });\n\n it('updates pending label accessibly', async () => {\n const el = await fixture<Button>(html`\n <sp-button href=\"test_url\" target=\"_blank\">Button</sp-button>\n `);\n\n await elementUpdated(el);\n el.pending = true;\n await elementUpdated(el);\n\n await nextFrame();\n\n type NamedNode = { name: string };\n let snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Pending'\n ),\n '`Pending` is the label text'\n ).to.not.be.null;\n\n expect(el.pending).to.be.true;\n\n // remove pending state\n el.pending = false;\n await elementUpdated(el);\n\n await nextFrame();\n\n snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n // check label returns to previous value\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Button'\n ),\n '`Button` is the label text'\n ).to.not.be.null;\n\n expect(el.pending).to.be.false;\n });\n\n it('manages tabIndex while disabled', async () => {\n const el = await fixture<Button>(html`\n <sp-button href=\"test_url\" target=\"_blank\">With Target</sp-button>\n `);\n\n await elementUpdated(el);\n\n expect(el.tabIndex).to.equal(0);\n\n el.disabled = true;\n await elementUpdated(el);\n\n expect(el.tabIndex).to.equal(-1);\n\n el.tabIndex = 2;\n await elementUpdated(el);\n\n expect(el.tabIndex).to.equal(-1);\n\n el.disabled = false;\n await elementUpdated(el);\n\n expect(el.tabIndex).to.equal(2);\n });\n it('swallows `click` interaction when `[disabled]`', async () => {\n const clickSpy = spy();\n const el = await fixture<Button>(html`\n <sp-button disabled @click=${() => clickSpy()}>Button</sp-button>\n `);\n\n await elementUpdated(el);\n expect(clickSpy.callCount).to.equal(0);\n\n el.click();\n\n await elementUpdated(el);\n expect(clickSpy.callCount).to.equal(0);\n });\n it('translates keyboard interactions to click', async () => {\n const clickSpy = spy();\n const el = await fixture<Button>(html`\n <sp-button @click=${() => clickSpy()}>Button</sp-button>\n `);\n\n await elementUpdated(el);\n\n el.dispatchEvent(\n new KeyboardEvent('keypress', {\n bubbles: true,\n composed: true,\n cancelable: true,\n code: 'Enter',\n key: 'Enter',\n })\n );\n\n await elementUpdated(el);\n expect(clickSpy.callCount).to.equal(1);\n clickSpy.resetHistory();\n\n el.dispatchEvent(\n new KeyboardEvent('keypress', {\n bubbles: true,\n composed: true,\n cancelable: true,\n code: 'NumpadEnter',\n key: 'NumpadEnter',\n })\n );\n\n await elementUpdated(el);\n expect(clickSpy.callCount).to.equal(1);\n clickSpy.resetHistory();\n\n el.dispatchEvent(\n new KeyboardEvent('keypress', {\n bubbles: true,\n composed: true,\n cancelable: true,\n code: 'Space',\n key: 'Space',\n })\n );\n\n await elementUpdated(el);\n expect(clickSpy.callCount).to.equal(0);\n clickSpy.resetHistory();\n\n el.dispatchEvent(\n new KeyboardEvent('keydown', {\n bubbles: true,\n composed: true,\n cancelable: true,\n code: 'Space',\n key: 'Space',\n })\n );\n el.dispatchEvent(\n new KeyboardEvent('keyup', {\n bubbles: true,\n composed: true,\n cancelable: true,\n code: 'Space',\n key: 'Space',\n })\n );\n\n await elementUpdated(el);\n expect(clickSpy.callCount).to.equal(1);\n clickSpy.resetHistory();\n\n el.dispatchEvent(\n new KeyboardEvent('keydown', {\n bubbles: true,\n composed: true,\n cancelable: true,\n code: 'Space',\n key: 'Space',\n })\n );\n el.dispatchEvent(\n new KeyboardEvent('keyup', {\n bubbles: true,\n composed: true,\n cancelable: true,\n code: 'KeyG',\n key: 'g',\n })\n );\n\n await elementUpdated(el);\n expect(clickSpy.callCount).to.equal(0);\n\n el.dispatchEvent(\n new KeyboardEvent('keyup', {\n bubbles: true,\n composed: true,\n cancelable: true,\n code: 'Space',\n key: 'Space',\n })\n );\n clickSpy.resetHistory();\n\n el.dispatchEvent(\n new KeyboardEvent('keydown', {\n bubbles: true,\n composed: true,\n cancelable: true,\n code: 'KeyG',\n key: 'g',\n })\n );\n el.dispatchEvent(\n new KeyboardEvent('keyup', {\n bubbles: true,\n composed: true,\n cancelable: true,\n code: 'Space',\n key: 'Space',\n })\n );\n\n await elementUpdated(el);\n expect(clickSpy.callCount).to.equal(0);\n });\n it('proxies clicks by \"type\"', async () => {\n const submitSpy = spy();\n const resetSpy = spy();\n const test = await fixture<HTMLFormElement>(html`\n <form\n @submit=${(event: Event): void => {\n event.preventDefault();\n submitSpy();\n }}\n @reset=${(event: Event): void => {\n event.preventDefault();\n resetSpy();\n }}\n >\n <sp-button>Button</sp-button>\n </form>\n `);\n const el = test.querySelector('sp-button') as Button;\n\n await elementUpdated(el);\n el.type = 'submit';\n\n await elementUpdated(el);\n el.click();\n\n expect(submitSpy.callCount).to.equal(1);\n expect(resetSpy.callCount).to.equal(0);\n\n el.type = 'reset';\n\n await elementUpdated(el);\n el.click();\n\n expect(submitSpy.callCount).to.equal(1);\n expect(resetSpy.callCount).to.equal(1);\n\n el.type = 'button';\n\n await elementUpdated(el);\n el.click();\n\n expect(submitSpy.callCount).to.equal(1);\n expect(resetSpy.callCount).to.equal(1);\n });\n it('proxies click by [href]', async () => {\n const clickSpy = spy();\n const el = await fixture<Button>(html`\n <sp-button href=\"test_url\">With Href</sp-button>\n `);\n\n await elementUpdated(el);\n (\n el as unknown as {\n anchorElement: HTMLAnchorElement;\n }\n ).anchorElement.addEventListener('click', (event: Event): void => {\n event.preventDefault();\n event.stopPropagation();\n clickSpy();\n });\n expect(clickSpy.callCount).to.equal(0);\n\n el.click();\n await elementUpdated(el);\n expect(clickSpy.callCount).to.equal(1);\n });\n it('manages \"active\" while focused', async () => {\n const el = await fixture<Button>(html`\n <sp-button label=\"Button\">\n <svg slot=\"icon\"></svg>\n </sp-button>\n `);\n\n await elementUpdated(el);\n el.focus();\n await elementUpdated(el);\n await sendKeys({\n down: 'Space',\n });\n await elementUpdated(el);\n expect(el.active).to.be.true;\n await sendKeys({\n up: 'Space',\n });\n await elementUpdated(el);\n expect(el.active).to.be.false;\n });\n describe('deprecated variants and attributes', () => {\n it('manages [quiet]', async () => {\n const el = await fixture<Button>(html`\n <sp-button quiet>Button</sp-button>\n `);\n\n await elementUpdated(el);\n expect(el.treatment).to.equal('outline');\n\n el.quiet = false;\n\n await elementUpdated(el);\n expect(el.treatment).to.equal('fill');\n });\n it('upgrades [variant=\"cta\"] to [variant=\"accent\"]', async () => {\n const el = await fixture<Button>(html`\n <sp-button variant=\"cta\">Button</sp-button>\n `);\n\n await elementUpdated(el);\n expect(el.variant).to.equal('accent');\n });\n it('manages [variant=\"overBackground\"]', async () => {\n const el = await fixture<Button>(html`\n <sp-button variant=\"overBackground\">Button</sp-button>\n `);\n\n await elementUpdated(el);\n expect(el.hasAttribute('variant')).to.not.equal('overBackground');\n expect(el.treatment).to.equal('outline');\n expect(el.static).to.equal('white');\n });\n it('forces [variant=\"accent\"]', async () => {\n const el = await fixture<Button>(html`\n <sp-button variant=\"not-supported\">Button</sp-button>\n `);\n\n await elementUpdated(el);\n expect(el.variant).to.equal('accent');\n });\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }