@spectrum-web-components/button 0.42.0 → 0.42.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.
@@ -8,11 +8,12 @@ import {
8
8
  nextFrame,
9
9
  waitUntil
10
10
  } from "@open-wc/testing";
11
+ import { testForLitDevWarnings } from "../../../test/testing-helpers.js";
11
12
  import {
12
- shiftTabEvent,
13
- testForLitDevWarnings
14
- } from "../../../test/testing-helpers.js";
15
- import { a11ySnapshot, findAccessibilityNode } from "@web/test-runner-commands";
13
+ a11ySnapshot,
14
+ findAccessibilityNode,
15
+ sendKeys
16
+ } from "@web/test-runner-commands";
16
17
  import { spy } from "sinon";
17
18
  describe("Button", () => {
18
19
  testForLitDevWarnings(
@@ -72,6 +73,37 @@ describe("Button", () => {
72
73
  expect(el).to.not.be.undefined;
73
74
  await expect(el).to.be.accessible();
74
75
  });
76
+ it("has a stable/predictable `updateComplete`", async () => {
77
+ const test = await fixture(
78
+ html`
79
+ <div></div>
80
+ `
81
+ );
82
+ let keydownTime = -1;
83
+ let updateComplete1 = -1;
84
+ let updateComplete2 = -1;
85
+ const el = document.createElement("sp-button");
86
+ el.autofocus = true;
87
+ el.addEventListener("keydown", () => {
88
+ keydownTime = performance.now();
89
+ });
90
+ el.updateComplete.then(() => {
91
+ updateComplete1 = performance.now();
92
+ });
93
+ el.updateComplete.then(() => {
94
+ updateComplete2 = performance.now();
95
+ });
96
+ test.append(el);
97
+ await nextFrame();
98
+ await nextFrame();
99
+ await nextFrame();
100
+ await nextFrame();
101
+ expect(keydownTime, "keydown happened").to.not.eq(-1);
102
+ expect(updateComplete1, "first update complete happened").to.not.eq(-1);
103
+ expect(updateComplete2, "first update complete happened").to.not.eq(-1);
104
+ expect(updateComplete1).lte(updateComplete2);
105
+ expect(updateComplete2).lte(keydownTime);
106
+ });
75
107
  it('manages "role"', async () => {
76
108
  const el = await fixture(
77
109
  html`
@@ -139,16 +171,26 @@ describe("Button", () => {
139
171
  `
140
172
  );
141
173
  await elementUpdated(el);
142
- const focusElement = el.focusElement;
143
- focusElement.addEventListener("focus", () => focusedCount += 1);
174
+ const input = document.createElement("input");
175
+ el.insertAdjacentElement("beforebegin", input);
176
+ input.focus();
177
+ expect(document.activeElement === input).to.be.true;
178
+ el.addEventListener("focus", () => {
179
+ focusedCount += 1;
180
+ });
144
181
  expect(focusedCount).to.equal(0);
145
- el.focus();
182
+ await sendKeys({
183
+ press: "Tab"
184
+ });
146
185
  await elementUpdated(el);
186
+ expect(document.activeElement === el).to.be.true;
147
187
  expect(focusedCount).to.equal(1);
148
- el.dispatchEvent(shiftTabEvent());
149
- el.dispatchEvent(new Event("focusin"));
188
+ await sendKeys({
189
+ press: "Shift+Tab"
190
+ });
150
191
  await elementUpdated(el);
151
192
  expect(focusedCount).to.equal(1);
193
+ expect(document.activeElement === input).to.be.true;
152
194
  });
153
195
  it("manages `disabled`", async () => {
154
196
  const clickSpy = spy();
@@ -539,9 +581,16 @@ describe("Button", () => {
539
581
  `
540
582
  );
541
583
  await elementUpdated(el);
542
- el.active = true;
584
+ el.focus();
543
585
  await elementUpdated(el);
544
- el.dispatchEvent(new FocusEvent("focusout"));
586
+ await sendKeys({
587
+ down: "Space"
588
+ });
589
+ await elementUpdated(el);
590
+ expect(el.active).to.be.true;
591
+ await sendKeys({
592
+ up: "Space"
593
+ });
545
594
  await elementUpdated(el);
546
595
  expect(el.active).to.be.false;
547
596
  });
@@ -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 {\n shiftTabEvent,\n testForLitDevWarnings,\n} from '../../../test/testing-helpers.js';\nimport { a11ySnapshot, findAccessibilityNode } 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('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\n const focusElement = el.focusElement as HTMLButtonElement;\n focusElement.addEventListener('focus', () => (focusedCount += 1));\n expect(focusedCount).to.equal(0);\n\n el.focus();\n await elementUpdated(el);\n\n expect(focusedCount).to.equal(1);\n\n el.dispatchEvent(shiftTabEvent());\n el.dispatchEvent(new Event('focusin'));\n await elementUpdated(el);\n\n expect(focusedCount).to.equal(1);\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.active = true;\n await elementUpdated(el);\n\n el.dispatchEvent(new FocusEvent('focusout'));\n await elementUpdated(el);\n\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 {\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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",
6
6
  "names": []
7
7
  }