@spectrum-web-components/tags 0.8.15-devmode.7 → 0.8.15

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.
@@ -4,7 +4,7 @@
4
4
  "modules": [
5
5
  {
6
6
  "kind": "javascript-module",
7
- "path": "sp-tag.ts",
7
+ "path": "sp-tag.js",
8
8
  "declarations": [],
9
9
  "exports": [
10
10
  {
@@ -19,7 +19,7 @@
19
19
  },
20
20
  {
21
21
  "kind": "javascript-module",
22
- "path": "sp-tags.ts",
22
+ "path": "sp-tags.js",
23
23
  "declarations": [],
24
24
  "exports": [
25
25
  {
@@ -34,7 +34,7 @@
34
34
  },
35
35
  {
36
36
  "kind": "javascript-module",
37
- "path": "src/Tag.ts",
37
+ "path": "src/Tag.js",
38
38
  "declarations": [
39
39
  {
40
40
  "kind": "class",
@@ -184,14 +184,14 @@
184
184
  "name": "Tag",
185
185
  "declaration": {
186
186
  "name": "Tag",
187
- "module": "src/Tag.ts"
187
+ "module": "src/Tag.js"
188
188
  }
189
189
  }
190
190
  ]
191
191
  },
192
192
  {
193
193
  "kind": "javascript-module",
194
- "path": "src/Tags.ts",
194
+ "path": "src/Tags.js",
195
195
  "declarations": [
196
196
  {
197
197
  "kind": "class",
@@ -281,7 +281,7 @@
281
281
  "name": "Tags",
282
282
  "declaration": {
283
283
  "name": "Tags",
284
- "module": "src/Tags.ts"
284
+ "module": "src/Tags.js"
285
285
  }
286
286
  }
287
287
  ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spectrum-web-components/tags",
3
- "version": "0.8.15-devmode.7+8303f3a2a",
3
+ "version": "0.8.15",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -66,10 +66,10 @@
66
66
  "lit-html"
67
67
  ],
68
68
  "dependencies": {
69
- "@spectrum-web-components/base": "^0.5.9-devmode.31+8303f3a2a",
70
- "@spectrum-web-components/button": "^0.18.1-devmode.7+8303f3a2a",
71
- "@spectrum-web-components/reactive-controllers": "^0.2.5-devmode.86+8303f3a2a",
72
- "@spectrum-web-components/shared": "^0.14.5-devmode.7+8303f3a2a",
69
+ "@spectrum-web-components/base": "^0.6.0",
70
+ "@spectrum-web-components/button": "^0.18.1",
71
+ "@spectrum-web-components/reactive-controllers": "^0.2.5",
72
+ "@spectrum-web-components/shared": "^0.14.5",
73
73
  "tslib": "^2.0.0"
74
74
  },
75
75
  "devDependencies": {
@@ -81,5 +81,5 @@
81
81
  "sideEffects": [
82
82
  "./sp-*.js"
83
83
  ],
84
- "gitHead": "8303f3a2a90b0aedc15158797662ccfa8f4a2031"
84
+ "gitHead": "50cac779bbb0d6735c2061f1eceb86b9daf9b22b"
85
85
  }
package/test/tag.test.js CHANGED
@@ -7,9 +7,18 @@ import {
7
7
  backspaceEvent,
8
8
  deleteEvent,
9
9
  enterEvent,
10
- spaceEvent
10
+ spaceEvent,
11
+ testForLitDevWarnings
11
12
  } from "../../../test/testing-helpers.js";
12
13
  describe("Tag", () => {
14
+ testForLitDevWarnings(async () => await fixture(html`
15
+ <sp-tags>
16
+ <sp-tag>Tag 1</sp-tag>
17
+ <sp-tag invalid>Tag 2</sp-tag>
18
+ <sp-tag disabled>Tag 3</sp-tag>
19
+ <sp-tag deletable>Tag 4</sp-tag>
20
+ </sp-tags>
21
+ `));
13
22
  it("loads default tags accessibly", async () => {
14
23
  const el = await fixture(html`
15
24
  <sp-tags>
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["tag.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 { elementUpdated, expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit/static-html.js';\nimport { spy } from 'sinon';\n\nimport '@spectrum-web-components/tags/sp-tag.js';\nimport '@spectrum-web-components/tags/sp-tags.js';\nimport { Tag } from '@spectrum-web-components/tags';\nimport { ClearButton } from '@spectrum-web-components/button';\nimport {\n backspaceEvent,\n deleteEvent,\n enterEvent,\n spaceEvent,\n} from '../../../test/testing-helpers.js';\n\ndescribe('Tag', () => {\n it('loads default tags accessibly', async () => {\n const el = await fixture<Tag>(\n html`\n <sp-tags>\n <sp-tag>Tag 1</sp-tag>\n <sp-tag invalid>Tag 2</sp-tag>\n <sp-tag disabled>Tag 3</sp-tag>\n <sp-tag deletable>Tag 4</sp-tag>\n </sp-tags>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('[disabled] manages [aria-disabled]', async () => {\n const el = await fixture<Tag>(\n html`\n <sp-tags>\n <sp-tag>Tag 1</sp-tag>\n <sp-tag invalid>Tag 2</sp-tag>\n <sp-tag disabled>Tag 3</sp-tag>\n <sp-tag deletable>Tag 4</sp-tag>\n </sp-tags>\n `\n );\n const notDisabled = el.querySelector('sp-tag') as Tag;\n const disabled = el.querySelector('[disabled]') as Tag;\n\n await elementUpdated(disabled);\n\n expect(notDisabled.hasAttribute('aria-disabled')).to.be.false;\n expect(disabled.hasAttribute('aria-disabled')).to.be.true;\n expect(disabled.getAttribute('aria-disabled')).to.equal('true');\n });\n it('dispatches `delete` events on click', async () => {\n const deleteSpy = spy();\n const handleDelete = (): void => deleteSpy();\n const el = await fixture<Tag>(\n html`\n <sp-tag @delete=${handleDelete} deletable>Tag 1</sp-tag>\n `\n );\n\n await elementUpdated(el);\n\n expect(deleteSpy.called).to.be.false;\n\n const root: HTMLElement | DocumentFragment = el.shadowRoot\n ? el.shadowRoot\n : el;\n const deleteButton = root.querySelector(\n 'sp-clear-button'\n ) as ClearButton;\n deleteButton.click();\n\n await elementUpdated(el);\n\n expect(deleteSpy.called).to.be.true;\n expect(deleteSpy.callCount).to.equal(1);\n });\n it('does not dispatch `delete` events when [readonly]', async () => {\n const deleteSpy = spy();\n const handleDelete = (): void => deleteSpy();\n const el = await fixture<Tag>(\n html`\n <sp-tag @delete=${handleDelete} deletable readonly>\n Tag 1\n </sp-tag>\n `\n );\n\n await elementUpdated(el);\n\n expect(deleteSpy.called).to.be.false;\n\n const root: HTMLElement | DocumentFragment = el.shadowRoot\n ? el.shadowRoot\n : el;\n const deleteButton = root.querySelector(\n 'sp-clear-button'\n ) as ClearButton;\n deleteButton.click();\n\n await elementUpdated(el);\n\n expect(deleteSpy.called).to.be.false;\n });\n it('dispatches `delete` events on keyboard input', async () => {\n const deleteSpy = spy();\n const handleDelete = (): void => deleteSpy();\n let expectedEventCount = 0;\n const el = await fixture<Tag>(\n html`\n <sp-tag @delete=${handleDelete}>Tag 1</sp-tag>\n `\n );\n const testKeyboardEvent = async (\n event: KeyboardEvent\n ): Promise<void> => {\n expectedEventCount += 1;\n\n el.dispatchEvent(event);\n await elementUpdated(el);\n\n expect(deleteSpy.called).to.be.true;\n expect(\n deleteSpy.callCount,\n `Accepts \"${event.code}\" key input`\n ).to.equal(expectedEventCount);\n };\n\n await elementUpdated(el);\n\n expect(deleteSpy.called).to.be.false;\n\n el.dispatchEvent(new FocusEvent('focusin'));\n await elementUpdated(el);\n\n el.dispatchEvent(deleteEvent());\n await elementUpdated(el);\n\n expect(deleteSpy.called).to.be.false;\n\n el.deletable = true;\n await elementUpdated(el);\n\n el.dispatchEvent(enterEvent());\n await elementUpdated(el);\n\n expect(deleteSpy.called).to.be.false;\n\n testKeyboardEvent(deleteEvent());\n testKeyboardEvent(spaceEvent());\n testKeyboardEvent(backspaceEvent());\n\n el.dispatchEvent(new FocusEvent('focusout'));\n await elementUpdated(el);\n\n el.dispatchEvent(deleteEvent());\n expect(\n deleteSpy.callCount,\n 'Does not respond after `focusout`'\n ).to.equal(expectedEventCount);\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 { elementUpdated, expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit/static-html.js';\nimport { spy } from 'sinon';\n\nimport '@spectrum-web-components/tags/sp-tag.js';\nimport '@spectrum-web-components/tags/sp-tags.js';\nimport { Tag } from '@spectrum-web-components/tags';\nimport { ClearButton } from '@spectrum-web-components/button';\nimport {\n backspaceEvent,\n deleteEvent,\n enterEvent,\n spaceEvent,\n testForLitDevWarnings,\n} from '../../../test/testing-helpers.js';\n\ndescribe('Tag', () => {\n testForLitDevWarnings(\n async () =>\n await fixture<Tag>(\n html`\n <sp-tags>\n <sp-tag>Tag 1</sp-tag>\n <sp-tag invalid>Tag 2</sp-tag>\n <sp-tag disabled>Tag 3</sp-tag>\n <sp-tag deletable>Tag 4</sp-tag>\n </sp-tags>\n `\n )\n );\n it('loads default tags accessibly', async () => {\n const el = await fixture<Tag>(\n html`\n <sp-tags>\n <sp-tag>Tag 1</sp-tag>\n <sp-tag invalid>Tag 2</sp-tag>\n <sp-tag disabled>Tag 3</sp-tag>\n <sp-tag deletable>Tag 4</sp-tag>\n </sp-tags>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('[disabled] manages [aria-disabled]', async () => {\n const el = await fixture<Tag>(\n html`\n <sp-tags>\n <sp-tag>Tag 1</sp-tag>\n <sp-tag invalid>Tag 2</sp-tag>\n <sp-tag disabled>Tag 3</sp-tag>\n <sp-tag deletable>Tag 4</sp-tag>\n </sp-tags>\n `\n );\n const notDisabled = el.querySelector('sp-tag') as Tag;\n const disabled = el.querySelector('[disabled]') as Tag;\n\n await elementUpdated(disabled);\n\n expect(notDisabled.hasAttribute('aria-disabled')).to.be.false;\n expect(disabled.hasAttribute('aria-disabled')).to.be.true;\n expect(disabled.getAttribute('aria-disabled')).to.equal('true');\n });\n it('dispatches `delete` events on click', async () => {\n const deleteSpy = spy();\n const handleDelete = (): void => deleteSpy();\n const el = await fixture<Tag>(\n html`\n <sp-tag @delete=${handleDelete} deletable>Tag 1</sp-tag>\n `\n );\n\n await elementUpdated(el);\n\n expect(deleteSpy.called).to.be.false;\n\n const root: HTMLElement | DocumentFragment = el.shadowRoot\n ? el.shadowRoot\n : el;\n const deleteButton = root.querySelector(\n 'sp-clear-button'\n ) as ClearButton;\n deleteButton.click();\n\n await elementUpdated(el);\n\n expect(deleteSpy.called).to.be.true;\n expect(deleteSpy.callCount).to.equal(1);\n });\n it('does not dispatch `delete` events when [readonly]', async () => {\n const deleteSpy = spy();\n const handleDelete = (): void => deleteSpy();\n const el = await fixture<Tag>(\n html`\n <sp-tag @delete=${handleDelete} deletable readonly>\n Tag 1\n </sp-tag>\n `\n );\n\n await elementUpdated(el);\n\n expect(deleteSpy.called).to.be.false;\n\n const root: HTMLElement | DocumentFragment = el.shadowRoot\n ? el.shadowRoot\n : el;\n const deleteButton = root.querySelector(\n 'sp-clear-button'\n ) as ClearButton;\n deleteButton.click();\n\n await elementUpdated(el);\n\n expect(deleteSpy.called).to.be.false;\n });\n it('dispatches `delete` events on keyboard input', async () => {\n const deleteSpy = spy();\n const handleDelete = (): void => deleteSpy();\n let expectedEventCount = 0;\n const el = await fixture<Tag>(\n html`\n <sp-tag @delete=${handleDelete}>Tag 1</sp-tag>\n `\n );\n const testKeyboardEvent = async (\n event: KeyboardEvent\n ): Promise<void> => {\n expectedEventCount += 1;\n\n el.dispatchEvent(event);\n await elementUpdated(el);\n\n expect(deleteSpy.called).to.be.true;\n expect(\n deleteSpy.callCount,\n `Accepts \"${event.code}\" key input`\n ).to.equal(expectedEventCount);\n };\n\n await elementUpdated(el);\n\n expect(deleteSpy.called).to.be.false;\n\n el.dispatchEvent(new FocusEvent('focusin'));\n await elementUpdated(el);\n\n el.dispatchEvent(deleteEvent());\n await elementUpdated(el);\n\n expect(deleteSpy.called).to.be.false;\n\n el.deletable = true;\n await elementUpdated(el);\n\n el.dispatchEvent(enterEvent());\n await elementUpdated(el);\n\n expect(deleteSpy.called).to.be.false;\n\n testKeyboardEvent(deleteEvent());\n testKeyboardEvent(spaceEvent());\n testKeyboardEvent(backspaceEvent());\n\n el.dispatchEvent(new FocusEvent('focusout'));\n await elementUpdated(el);\n\n el.dispatchEvent(deleteEvent());\n expect(\n deleteSpy.callCount,\n 'Does not respond after `focusout`'\n ).to.equal(expectedEventCount);\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
package/test/tags.test.js CHANGED
@@ -11,10 +11,18 @@ import {
11
11
  enterEvent,
12
12
  homeEvent,
13
13
  pageDownEvent,
14
- pageUpEvent
14
+ pageUpEvent,
15
+ testForLitDevWarnings
15
16
  } from "../../../test/testing-helpers.js";
16
17
  import { executeServerCommand } from "@web/test-runner-commands";
17
18
  describe("Tags", () => {
19
+ testForLitDevWarnings(async () => await fixture(html`
20
+ <sp-tags>
21
+ <sp-tag>Tag 1</sp-tag>
22
+ <sp-tag invalid>Tag 2</sp-tag>
23
+ <sp-tag disabled>Tag 3</sp-tag>
24
+ </sp-tags>
25
+ `));
18
26
  it("loads default tags accessibly", async () => {
19
27
  const el = await fixture(html`
20
28
  <sp-tags>
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["tags.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 { elementUpdated, expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit/static-html.js';\n\nimport '@spectrum-web-components/tags/sp-tag.js';\nimport '@spectrum-web-components/tags/sp-tags.js';\nimport { Tag, Tags } from '@spectrum-web-components/tags';\nimport {\n arrowDownEvent,\n arrowLeftEvent,\n arrowRightEvent,\n arrowUpEvent,\n endEvent,\n enterEvent,\n homeEvent,\n pageDownEvent,\n pageUpEvent,\n} from '../../../test/testing-helpers.js';\nimport { executeServerCommand } from '@web/test-runner-commands';\n\ndescribe('Tags', () => {\n it('loads default tags accessibly', async () => {\n const el = await fixture<Tags>(\n html`\n <sp-tags>\n <sp-tag>Tag 1</sp-tag>\n <sp-tag invalid>Tag 2</sp-tag>\n <sp-tag disabled>Tag 3</sp-tag>\n </sp-tags>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n expect(el.hasAttribute('role')).to.be.true;\n expect(el.hasAttribute('aria-label')).to.be.true;\n });\n it('does not accept focus when empty', async () => {\n const el = await fixture<Tags>(\n html`\n <sp-tags></sp-tags>\n `\n );\n\n await elementUpdated(el);\n\n expect(document.activeElement === el).to.be.false;\n\n el.focus();\n await elementUpdated(el);\n\n expect(document.activeElement === el).to.be.false;\n });\n it('does not accept focus when no tag has `deletable`', async () => {\n const el = await fixture<Tags>(\n html`\n <sp-tags>\n <sp-tag>Tag 1</sp-tag>\n <sp-tag invalid>Tag 2</sp-tag>\n <sp-tag disabled>Tag 3</sp-tag>\n </sp-tags>\n `\n );\n await elementUpdated(el);\n\n const tag1 = el.querySelector('sp-tag:nth-child(1)') as Tag;\n const tag2 = el.querySelector('sp-tag:nth-child(2)') as Tag;\n const tag3 = el.querySelector('sp-tag:nth-child(3)') as Tag;\n\n expect(document.activeElement === el).to.be.false;\n\n el.focus();\n await elementUpdated(el);\n\n expect(document.activeElement === el).to.be.false;\n expect(document.activeElement === tag1).to.be.false;\n expect(document.activeElement === tag2).to.be.false;\n expect(document.activeElement === tag3).to.be.false;\n });\n it('loads default tags with `role` and `aria-label` from the outside', async () => {\n const el = await fixture<Tags>(\n html`\n <sp-tags>\n <sp-tag>Tag 1</sp-tag>\n <sp-tag invalid>Tag 2</sp-tag>\n <sp-tag disabled>Tag 3</sp-tag>\n </sp-tags>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n expect(el.hasAttribute('role')).to.be.true;\n expect(el.hasAttribute('aria-label')).to.be.true;\n });\n it('accepts keyboard events while focused', async () => {\n const el = await fixture<Tags>(\n html`\n <sp-tags>\n <sp-tag deletable>Tag 1</sp-tag>\n <sp-tag deletable>Tag 2</sp-tag>\n <sp-tag deletable>Tag 3</sp-tag>\n <sp-tag deletable>Tag 4</sp-tag>\n <sp-tag deletable>Tag 5</sp-tag>\n </sp-tags>\n `\n );\n\n await elementUpdated(el);\n\n const tag1 = el.querySelector('sp-tag:nth-child(1)') as Tag;\n const tag2 = el.querySelector('sp-tag:nth-child(2)') as Tag;\n const tag3 = el.querySelector('sp-tag:nth-child(3)') as Tag;\n const tag4 = el.querySelector('sp-tag:nth-child(4)') as Tag;\n const tag5 = el.querySelector('sp-tag:nth-child(5)') as Tag;\n\n tag1.focus();\n await elementUpdated(el);\n\n el.dispatchEvent(pageUpEvent());\n el.dispatchEvent(arrowRightEvent());\n await elementUpdated(el);\n\n expect(document.activeElement === tag2).to.be.true;\n\n el.dispatchEvent(arrowDownEvent());\n await elementUpdated(el);\n\n expect(document.activeElement === tag3).to.be.true;\n\n el.dispatchEvent(endEvent());\n await elementUpdated(el);\n\n expect(document.activeElement === tag5).to.be.true;\n\n el.dispatchEvent(arrowLeftEvent());\n await elementUpdated(el);\n\n expect(document.activeElement === tag4).to.be.true;\n\n el.dispatchEvent(arrowUpEvent());\n await elementUpdated(el);\n\n expect(document.activeElement === tag3).to.be.true;\n\n el.dispatchEvent(homeEvent());\n await elementUpdated(el);\n\n expect(document.activeElement === tag1).to.be.true;\n\n tag1.blur();\n });\n it('will not focus [disabled] children', async () => {\n const el = await fixture<Tags>(\n html`\n <sp-tags>\n <sp-tag disabled deletable>Tag 1</sp-tag>\n <sp-tag deletable>Tag 2</sp-tag>\n <sp-tag deletable>Tag 3</sp-tag>\n <sp-tag deletable>Tag 4</sp-tag>\n <sp-tag disabled deletable>Tag 5</sp-tag>\n </sp-tags>\n `\n );\n\n await elementUpdated(el);\n\n const tag2 = el.querySelector('sp-tag:nth-child(2)') as Tag;\n const tag4 = el.querySelector('sp-tag:nth-child(4)') as Tag;\n\n tag2.focus();\n await elementUpdated(el);\n\n el.dispatchEvent(enterEvent());\n el.dispatchEvent(endEvent());\n await elementUpdated(el);\n\n expect(document.activeElement === tag4).to.be.true;\n\n el.dispatchEvent(homeEvent());\n await elementUpdated(el);\n\n expect(document.activeElement === tag2).to.be.true;\n\n el.dispatchEvent(arrowUpEvent());\n await elementUpdated(el);\n\n expect(document.activeElement === tag4).to.be.true;\n\n el.dispatchEvent(arrowDownEvent());\n await elementUpdated(el);\n\n expect(document.activeElement === tag2).to.be.true;\n });\n it('will only tab index [deletable] children', async () => {\n const el = await fixture<Tags>(\n html`\n <sp-tags>\n <sp-tag deletable>Tag 1</sp-tag>\n <sp-tag>Tag 2</sp-tag>\n <sp-tag>Tag 3</sp-tag>\n <sp-tag>Tag 4</sp-tag>\n <sp-tag deletable>Tag 5</sp-tag>\n </sp-tags>\n `\n );\n\n await elementUpdated(el);\n\n const tag1 = el.querySelector('sp-tag:nth-child(1)') as Tag;\n const tag5 = el.querySelector('sp-tag:nth-child(5)') as Tag;\n\n tag1.focus();\n await elementUpdated(el);\n\n el.dispatchEvent(enterEvent());\n el.dispatchEvent(endEvent());\n await elementUpdated(el);\n\n expect(document.activeElement === tag5).to.be.true;\n\n el.dispatchEvent(homeEvent());\n await elementUpdated(el);\n\n expect(document.activeElement === tag1).to.be.true;\n\n el.dispatchEvent(arrowUpEvent());\n await elementUpdated(el);\n\n expect(document.activeElement === tag5).to.be.true;\n\n el.dispatchEvent(arrowUpEvent());\n await elementUpdated(el);\n\n expect(document.activeElement === tag1).to.be.true;\n });\n it('utilises floating tab index for [deletable] children', async () => {\n const el = await fixture<Tags>(\n html`\n <div>\n <a href=\"#\">Heyo</a>\n <sp-tags>\n <sp-tag deletable>Tag 1</sp-tag>\n <sp-tag deletable>Tag 2</sp-tag>\n </sp-tags>\n <sp-tags>\n <sp-tag deletable>Tag A</sp-tag>\n <sp-tag deletable>Tag B</sp-tag>\n </sp-tags>\n </div>\n `\n );\n const anchor = el.querySelector('a') as HTMLElement;\n\n anchor.focus();\n expect(document.activeElement === anchor).to.be.true;\n\n const tagset1 = el.querySelector('sp-tags:nth-child(2)') as Tags;\n const tagset2 = el.querySelector('sp-tags:nth-child(3)') as Tags;\n\n const tag1 = tagset1.querySelector('sp-tag:nth-child(1)') as Tag;\n const tagA = tagset2.querySelector('sp-tag:nth-child(1)') as Tag;\n const tagB = tagset2.querySelector('sp-tag:nth-child(2)') as Tag;\n\n await executeServerCommand('send-keys', {\n press: 'Tab',\n });\n expect(document.activeElement === tag1).to.be.true;\n\n await executeServerCommand('send-keys', {\n press: 'Tab',\n });\n expect(document.activeElement === tagA).to.be.true;\n\n tagset2.dispatchEvent(arrowDownEvent());\n expect(document.activeElement === tagB).to.be.true;\n });\n it('loads accepts \"PageUp\" and \"PageDown\" keys', async () => {\n const el = await fixture<HTMLDivElement>(\n html`\n <div>\n <sp-tags>\n <sp-tag deletable>Tag 1</sp-tag>\n </sp-tags>\n <sp-tags>\n <sp-tag deletable>Tag 2</sp-tag>\n </sp-tags>\n <sp-tags></sp-tags>\n <sp-tags>\n <sp-tag disabled deletable>Tag 3</sp-tag>\n <sp-tag deletable>Tag 4</sp-tag>\n </sp-tags>\n </div>\n `\n );\n\n const tags1 = el.querySelector('sp-tags:nth-child(1)') as Tags;\n const tags2 = el.querySelector('sp-tags:nth-child(2)') as Tags;\n const tags4 = el.querySelector('sp-tags:nth-child(4)') as Tags;\n\n const tag1 = tags1.querySelector('sp-tag') as Tag;\n const tag2 = tags2.querySelector('sp-tag') as Tag;\n const tag4 = tags4.querySelector('sp-tag:not([disabled])') as Tag;\n\n tag1.focus();\n tag1.dispatchEvent(pageUpEvent());\n\n expect(document.activeElement === tag4).to.be.true;\n\n tag4.dispatchEvent(pageDownEvent());\n\n expect(document.activeElement === tag1).to.be.true;\n\n tag1.dispatchEvent(pageDownEvent());\n\n expect(document.activeElement === tag2).to.be.true;\n\n tag2.dispatchEvent(pageDownEvent());\n\n expect(document.activeElement === tag4, 'Focuses `tag4`').to.be.true;\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 { elementUpdated, expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit/static-html.js';\n\nimport '@spectrum-web-components/tags/sp-tag.js';\nimport '@spectrum-web-components/tags/sp-tags.js';\nimport { Tag, Tags } from '@spectrum-web-components/tags';\nimport {\n arrowDownEvent,\n arrowLeftEvent,\n arrowRightEvent,\n arrowUpEvent,\n endEvent,\n enterEvent,\n homeEvent,\n pageDownEvent,\n pageUpEvent,\n testForLitDevWarnings,\n} from '../../../test/testing-helpers.js';\nimport { executeServerCommand } from '@web/test-runner-commands';\n\ndescribe('Tags', () => {\n testForLitDevWarnings(\n async () =>\n await fixture<Tags>(\n html`\n <sp-tags>\n <sp-tag>Tag 1</sp-tag>\n <sp-tag invalid>Tag 2</sp-tag>\n <sp-tag disabled>Tag 3</sp-tag>\n </sp-tags>\n `\n )\n );\n it('loads default tags accessibly', async () => {\n const el = await fixture<Tags>(\n html`\n <sp-tags>\n <sp-tag>Tag 1</sp-tag>\n <sp-tag invalid>Tag 2</sp-tag>\n <sp-tag disabled>Tag 3</sp-tag>\n </sp-tags>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n expect(el.hasAttribute('role')).to.be.true;\n expect(el.hasAttribute('aria-label')).to.be.true;\n });\n it('does not accept focus when empty', async () => {\n const el = await fixture<Tags>(\n html`\n <sp-tags></sp-tags>\n `\n );\n\n await elementUpdated(el);\n\n expect(document.activeElement === el).to.be.false;\n\n el.focus();\n await elementUpdated(el);\n\n expect(document.activeElement === el).to.be.false;\n });\n it('does not accept focus when no tag has `deletable`', async () => {\n const el = await fixture<Tags>(\n html`\n <sp-tags>\n <sp-tag>Tag 1</sp-tag>\n <sp-tag invalid>Tag 2</sp-tag>\n <sp-tag disabled>Tag 3</sp-tag>\n </sp-tags>\n `\n );\n await elementUpdated(el);\n\n const tag1 = el.querySelector('sp-tag:nth-child(1)') as Tag;\n const tag2 = el.querySelector('sp-tag:nth-child(2)') as Tag;\n const tag3 = el.querySelector('sp-tag:nth-child(3)') as Tag;\n\n expect(document.activeElement === el).to.be.false;\n\n el.focus();\n await elementUpdated(el);\n\n expect(document.activeElement === el).to.be.false;\n expect(document.activeElement === tag1).to.be.false;\n expect(document.activeElement === tag2).to.be.false;\n expect(document.activeElement === tag3).to.be.false;\n });\n it('loads default tags with `role` and `aria-label` from the outside', async () => {\n const el = await fixture<Tags>(\n html`\n <sp-tags>\n <sp-tag>Tag 1</sp-tag>\n <sp-tag invalid>Tag 2</sp-tag>\n <sp-tag disabled>Tag 3</sp-tag>\n </sp-tags>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n expect(el.hasAttribute('role')).to.be.true;\n expect(el.hasAttribute('aria-label')).to.be.true;\n });\n it('accepts keyboard events while focused', async () => {\n const el = await fixture<Tags>(\n html`\n <sp-tags>\n <sp-tag deletable>Tag 1</sp-tag>\n <sp-tag deletable>Tag 2</sp-tag>\n <sp-tag deletable>Tag 3</sp-tag>\n <sp-tag deletable>Tag 4</sp-tag>\n <sp-tag deletable>Tag 5</sp-tag>\n </sp-tags>\n `\n );\n\n await elementUpdated(el);\n\n const tag1 = el.querySelector('sp-tag:nth-child(1)') as Tag;\n const tag2 = el.querySelector('sp-tag:nth-child(2)') as Tag;\n const tag3 = el.querySelector('sp-tag:nth-child(3)') as Tag;\n const tag4 = el.querySelector('sp-tag:nth-child(4)') as Tag;\n const tag5 = el.querySelector('sp-tag:nth-child(5)') as Tag;\n\n tag1.focus();\n await elementUpdated(el);\n\n el.dispatchEvent(pageUpEvent());\n el.dispatchEvent(arrowRightEvent());\n await elementUpdated(el);\n\n expect(document.activeElement === tag2).to.be.true;\n\n el.dispatchEvent(arrowDownEvent());\n await elementUpdated(el);\n\n expect(document.activeElement === tag3).to.be.true;\n\n el.dispatchEvent(endEvent());\n await elementUpdated(el);\n\n expect(document.activeElement === tag5).to.be.true;\n\n el.dispatchEvent(arrowLeftEvent());\n await elementUpdated(el);\n\n expect(document.activeElement === tag4).to.be.true;\n\n el.dispatchEvent(arrowUpEvent());\n await elementUpdated(el);\n\n expect(document.activeElement === tag3).to.be.true;\n\n el.dispatchEvent(homeEvent());\n await elementUpdated(el);\n\n expect(document.activeElement === tag1).to.be.true;\n\n tag1.blur();\n });\n it('will not focus [disabled] children', async () => {\n const el = await fixture<Tags>(\n html`\n <sp-tags>\n <sp-tag disabled deletable>Tag 1</sp-tag>\n <sp-tag deletable>Tag 2</sp-tag>\n <sp-tag deletable>Tag 3</sp-tag>\n <sp-tag deletable>Tag 4</sp-tag>\n <sp-tag disabled deletable>Tag 5</sp-tag>\n </sp-tags>\n `\n );\n\n await elementUpdated(el);\n\n const tag2 = el.querySelector('sp-tag:nth-child(2)') as Tag;\n const tag4 = el.querySelector('sp-tag:nth-child(4)') as Tag;\n\n tag2.focus();\n await elementUpdated(el);\n\n el.dispatchEvent(enterEvent());\n el.dispatchEvent(endEvent());\n await elementUpdated(el);\n\n expect(document.activeElement === tag4).to.be.true;\n\n el.dispatchEvent(homeEvent());\n await elementUpdated(el);\n\n expect(document.activeElement === tag2).to.be.true;\n\n el.dispatchEvent(arrowUpEvent());\n await elementUpdated(el);\n\n expect(document.activeElement === tag4).to.be.true;\n\n el.dispatchEvent(arrowDownEvent());\n await elementUpdated(el);\n\n expect(document.activeElement === tag2).to.be.true;\n });\n it('will only tab index [deletable] children', async () => {\n const el = await fixture<Tags>(\n html`\n <sp-tags>\n <sp-tag deletable>Tag 1</sp-tag>\n <sp-tag>Tag 2</sp-tag>\n <sp-tag>Tag 3</sp-tag>\n <sp-tag>Tag 4</sp-tag>\n <sp-tag deletable>Tag 5</sp-tag>\n </sp-tags>\n `\n );\n\n await elementUpdated(el);\n\n const tag1 = el.querySelector('sp-tag:nth-child(1)') as Tag;\n const tag5 = el.querySelector('sp-tag:nth-child(5)') as Tag;\n\n tag1.focus();\n await elementUpdated(el);\n\n el.dispatchEvent(enterEvent());\n el.dispatchEvent(endEvent());\n await elementUpdated(el);\n\n expect(document.activeElement === tag5).to.be.true;\n\n el.dispatchEvent(homeEvent());\n await elementUpdated(el);\n\n expect(document.activeElement === tag1).to.be.true;\n\n el.dispatchEvent(arrowUpEvent());\n await elementUpdated(el);\n\n expect(document.activeElement === tag5).to.be.true;\n\n el.dispatchEvent(arrowUpEvent());\n await elementUpdated(el);\n\n expect(document.activeElement === tag1).to.be.true;\n });\n it('utilises floating tab index for [deletable] children', async () => {\n const el = await fixture<Tags>(\n html`\n <div>\n <a href=\"#\">Heyo</a>\n <sp-tags>\n <sp-tag deletable>Tag 1</sp-tag>\n <sp-tag deletable>Tag 2</sp-tag>\n </sp-tags>\n <sp-tags>\n <sp-tag deletable>Tag A</sp-tag>\n <sp-tag deletable>Tag B</sp-tag>\n </sp-tags>\n </div>\n `\n );\n const anchor = el.querySelector('a') as HTMLElement;\n\n anchor.focus();\n expect(document.activeElement === anchor).to.be.true;\n\n const tagset1 = el.querySelector('sp-tags:nth-child(2)') as Tags;\n const tagset2 = el.querySelector('sp-tags:nth-child(3)') as Tags;\n\n const tag1 = tagset1.querySelector('sp-tag:nth-child(1)') as Tag;\n const tagA = tagset2.querySelector('sp-tag:nth-child(1)') as Tag;\n const tagB = tagset2.querySelector('sp-tag:nth-child(2)') as Tag;\n\n await executeServerCommand('send-keys', {\n press: 'Tab',\n });\n expect(document.activeElement === tag1).to.be.true;\n\n await executeServerCommand('send-keys', {\n press: 'Tab',\n });\n expect(document.activeElement === tagA).to.be.true;\n\n tagset2.dispatchEvent(arrowDownEvent());\n expect(document.activeElement === tagB).to.be.true;\n });\n it('loads accepts \"PageUp\" and \"PageDown\" keys', async () => {\n const el = await fixture<HTMLDivElement>(\n html`\n <div>\n <sp-tags>\n <sp-tag deletable>Tag 1</sp-tag>\n </sp-tags>\n <sp-tags>\n <sp-tag deletable>Tag 2</sp-tag>\n </sp-tags>\n <sp-tags></sp-tags>\n <sp-tags>\n <sp-tag disabled deletable>Tag 3</sp-tag>\n <sp-tag deletable>Tag 4</sp-tag>\n </sp-tags>\n </div>\n `\n );\n\n const tags1 = el.querySelector('sp-tags:nth-child(1)') as Tags;\n const tags2 = el.querySelector('sp-tags:nth-child(2)') as Tags;\n const tags4 = el.querySelector('sp-tags:nth-child(4)') as Tags;\n\n const tag1 = tags1.querySelector('sp-tag') as Tag;\n const tag2 = tags2.querySelector('sp-tag') as Tag;\n const tag4 = tags4.querySelector('sp-tag:not([disabled])') as Tag;\n\n tag1.focus();\n tag1.dispatchEvent(pageUpEvent());\n\n expect(document.activeElement === tag4).to.be.true;\n\n tag4.dispatchEvent(pageDownEvent());\n\n expect(document.activeElement === tag1).to.be.true;\n\n tag1.dispatchEvent(pageDownEvent());\n\n expect(document.activeElement === tag2).to.be.true;\n\n tag2.dispatchEvent(pageDownEvent());\n\n expect(document.activeElement === tag4, 'Focuses `tag4`').to.be.true;\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }