@spectrum-web-components/textfield 0.39.3 → 0.39.4

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/textfield",
3
- "version": "0.39.3",
3
+ "version": "0.39.4",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -57,12 +57,12 @@
57
57
  "lit-html"
58
58
  ],
59
59
  "dependencies": {
60
- "@spectrum-web-components/base": "^0.39.3",
61
- "@spectrum-web-components/help-text": "^0.39.3",
62
- "@spectrum-web-components/icon": "^0.39.3",
63
- "@spectrum-web-components/icons-ui": "^0.39.3",
64
- "@spectrum-web-components/icons-workflow": "^0.39.3",
65
- "@spectrum-web-components/shared": "^0.39.3"
60
+ "@spectrum-web-components/base": "^0.39.4",
61
+ "@spectrum-web-components/help-text": "^0.39.4",
62
+ "@spectrum-web-components/icon": "^0.39.4",
63
+ "@spectrum-web-components/icons-ui": "^0.39.4",
64
+ "@spectrum-web-components/icons-workflow": "^0.39.4",
65
+ "@spectrum-web-components/shared": "^0.39.4"
66
66
  },
67
67
  "devDependencies": {
68
68
  "@spectrum-css/textfield": "^6.0.20"
@@ -73,5 +73,5 @@
73
73
  "./sp-*.js",
74
74
  "./**/*.dev.js"
75
75
  ],
76
- "gitHead": "d7840b3a9b99db4de62c44e3fb91b69dec7319af"
76
+ "gitHead": "f745c90e8e9ea85ff10be025e058b14cc925ec9f"
77
77
  }
@@ -6,7 +6,11 @@ import { findDescribedNode } from "../../../test/testing-helpers-a11y.js";
6
6
  import "@spectrum-web-components/help-text/sp-help-text.js";
7
7
  import "@spectrum-web-components/textfield/sp-textfield.js";
8
8
  import { testForLitDevWarnings } from "../../../test/testing-helpers.js";
9
- import { isFirefox } from "@spectrum-web-components/shared/src/platform.js";
9
+ import {
10
+ isFirefox,
11
+ isWebKit
12
+ } from "@spectrum-web-components/shared/src/platform.js";
13
+ import { fixture } from "../../../test/testing-helpers.js";
10
14
  describe("Textfield", () => {
11
15
  testForLitDevWarnings(
12
16
  async () => await litFixture(
@@ -166,8 +170,11 @@ describe("Textfield", () => {
166
170
  expect(endBounds.height).equals(startBounds.height);
167
171
  expect(endBounds.width).equals(startBounds.width);
168
172
  });
169
- it("resizes by default", async () => {
170
- const el = await litFixture(
173
+ it("resizes by default", async function() {
174
+ if (isWebKit()) {
175
+ this.skip();
176
+ }
177
+ const el = await fixture(
171
178
  html`
172
179
  <sp-textfield
173
180
  multiline
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["textfield.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*/\nimport { Textfield, TextfieldType } from '../';\nimport { elementUpdated, expect, html, litFixture } from '@open-wc/testing';\nimport { sendKeys } from '@web/test-runner-commands';\nimport { sendMouse } from '../../../test/plugins/browser.js';\nimport { findDescribedNode } from '../../../test/testing-helpers-a11y.js';\nimport { HelpText } from '@spectrum-web-components/help-text';\nimport '@spectrum-web-components/help-text/sp-help-text.js';\nimport '@spectrum-web-components/textfield/sp-textfield.js';\nimport { testForLitDevWarnings } from '../../../test/testing-helpers.js';\nimport { isFirefox } from '@spectrum-web-components/shared/src/platform.js';\n\ndescribe('Textfield', () => {\n testForLitDevWarnings(\n async () =>\n await litFixture<Textfield>(\n html`\n <sp-textfield label=\"Enter Your Name\"></sp-textfield>\n `\n )\n );\n it('loads default textfield accessibly', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield label=\"Enter Your Name\"></sp-textfield>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('loads multiline textfield accessibly', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield label=\"Enter your name\" multiline></sp-textfield>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n\n it('manages tabIndex while disabled', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield placeholder=\"Enter Your Name\"></sp-textfield>\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\n it('manages tabIndex before first render', async () => {\n const el = document.createElement('sp-textfield') as Textfield;\n\n expect(el.focusElement).to.be.null;\n expect(el.tabIndex).to.equal(0);\n\n el.remove();\n });\n it('loads', async () => {\n const testPlaceholder = 'Enter your name';\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield placeholder=${testPlaceholder}></sp-textfield>\n `\n );\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('input')\n : null;\n expect(input).to.not.be.null;\n const placeholder = input ? input.placeholder : null;\n expect(placeholder).to.equal(testPlaceholder);\n });\n it('multiline', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your name\"\n multiline\n ></sp-textfield>\n `\n );\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('textarea')\n : null;\n expect(input).to.not.be.null;\n });\n it('multiline with rows', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your name\"\n multiline\n rows=\"5\"\n ></sp-textfield>\n `\n );\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('textarea')\n : null;\n expect(input).to.not.be.null;\n expect(input?.getAttribute('rows')).to.equal('5');\n });\n it('multiline with 1 row has smaller height than multiline without explicit rows', async () => {\n const oneRowEl = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your name\"\n multiline\n rows=\"1\"\n ></sp-textfield>\n `\n );\n expect(oneRowEl).to.not.equal(undefined);\n const oneRowTextarea = oneRowEl.shadowRoot\n ? oneRowEl.shadowRoot.querySelector('textarea')\n : null;\n expect(oneRowTextarea).to.not.be.null;\n expect(oneRowTextarea?.getAttribute('rows')).to.equal('1');\n\n const defaultEL = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your name\"\n multiline\n ></sp-textfield>\n `\n );\n expect(defaultEL).to.not.equal(undefined);\n const defaultTextarea = oneRowEl.shadowRoot\n ? defaultEL.shadowRoot.querySelector('textarea')\n : null;\n expect(defaultTextarea).to.not.be.null;\n expect(defaultTextarea?.getAttribute('rows')).to.be.null;\n\n const boundsDefaultElement = defaultTextarea?.getBoundingClientRect();\n const boundsOneRowElement = oneRowTextarea?.getBoundingClientRect();\n expect(boundsDefaultElement?.height).to.be.greaterThan(\n boundsOneRowElement?.height ?? 0\n );\n });\n it('multiline with rows does not resize', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n multiline\n rows=\"5\"\n label=\"No resize control\"\n placeholder=\"No resize control\"\n ></sp-textfield>\n `\n );\n // Resizing only effects the block size of the host rect, so measure the `focusElement` when resizing.\n const sizedElement = (el as HTMLElement & { focusElement: HTMLElement })\n .focusElement;\n const startBounds = sizedElement.getBoundingClientRect();\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [startBounds.right - 6, startBounds.bottom - 6],\n },\n {\n type: 'down',\n },\n {\n type: 'move',\n position: [startBounds.right + 50, startBounds.bottom + 50],\n },\n {\n type: 'up',\n },\n ],\n });\n\n const endBounds = sizedElement.getBoundingClientRect();\n expect(endBounds.height).equals(startBounds.height);\n expect(endBounds.width).equals(startBounds.width);\n });\n it('resizes by default', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n multiline\n label=\"No resize control\"\n placeholder=\"No resize control\"\n ></sp-textfield>\n `\n );\n // Resizing only effects the block size of the host rect, so measure the `focusElement` when resizing.\n const sizedElement = (el as HTMLElement & { focusElement: HTMLElement })\n .focusElement;\n const startBounds = sizedElement.getBoundingClientRect();\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [startBounds.right - 6, startBounds.bottom - 6],\n },\n {\n type: 'down',\n },\n {\n type: 'move',\n position: [startBounds.right + 50, startBounds.bottom + 50],\n },\n {\n type: 'up',\n },\n ],\n });\n\n const endBounds = sizedElement.getBoundingClientRect();\n expect(endBounds.height).to.be.greaterThan(startBounds.height);\n expect(endBounds.width).to.be.greaterThan(startBounds.width);\n });\n it('accepts resize styling', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n multiline\n style=\"resize: none;\"\n label=\"No resize control\"\n placeholder=\"No resize control\"\n ></sp-textfield>\n `\n );\n const startBounds = el.getBoundingClientRect();\n\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [startBounds.right - 2, startBounds.bottom - 2],\n },\n {\n type: 'down',\n },\n {\n type: 'move',\n position: [startBounds.right + 50, startBounds.bottom + 50],\n },\n {\n type: 'up',\n },\n ],\n });\n\n const endBounds = el.getBoundingClientRect();\n expect(endBounds.width).equals(startBounds.width);\n expect(endBounds.height).equals(startBounds.height);\n });\n it('grows', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your name\"\n multiline\n grows\n ></sp-textfield>\n `\n );\n expect(el).to.not.equal(undefined);\n const sizer = el.shadowRoot\n ? el.shadowRoot.querySelector('#sizer')\n : null;\n expect(sizer).to.not.be.null;\n });\n it('multiline with rows and grows does not grow', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your name\"\n multiline\n grows\n rows=\"5\"\n ></sp-textfield>\n `\n );\n expect(el).to.not.equal(undefined);\n const sizer = el.shadowRoot\n ? el.shadowRoot.querySelector('#sizer')\n : null;\n expect(sizer).to.be.null;\n });\n it('valid', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n pattern=\"[\\\\d]+\"\n value=\"123\"\n required\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#valid')\n : null;\n expect(input).to.not.be.null;\n });\n it('valid - multiline', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n pattern=\"[\\\\d]+\"\n value=\"123\"\n required\n multiline\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#valid')\n : null;\n expect(input).to.not.be.null;\n });\n it('valid - required', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n value=\"123\"\n required\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#valid')\n : null;\n expect(input).to.not.be.null;\n });\n it('valid - multiline - required', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n value=\"123\"\n required\n multiline\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#valid')\n : null;\n expect(input).to.not.be.null;\n });\n it('valid - boundary-type assertions', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n pattern=\"^[\\\\d]+$\"\n value=\"123\"\n required\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#valid')\n : null;\n expect(input).to.not.be.null;\n });\n it('valid - multiline - boundary-type assertions', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n pattern=\"^[\\\\d]+$\"\n value=\"123\"\n required\n multiline\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#valid')\n : null;\n expect(input).to.not.be.null;\n });\n it('valid - boundary-type assertions and title', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n pattern=\"^[\\\\d]+$\"\n value=\"123\"\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot.querySelector('#valid');\n expect(input).to.not.be.null;\n expect(el.focusElement).to.not.have.attribute('title');\n });\n it('valid - multiline - boundary-type assertions and title', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n multiline\n placeholder=\"Enter your number\"\n pattern=\"^[\\\\d]+$\"\n value=\"123\"\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot.querySelector('#valid');\n expect(input).to.not.be.null;\n expect(el.focusElement).to.not.have.attribute('title');\n });\n it('valid - unicode', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your name\"\n pattern=\"\\\\p{L}{4,8}\"\n value=\"\u4F60\u7684\u540D\u5B57\"\n required\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#valid')\n : null;\n expect(input).to.not.be.null;\n });\n it('valid - multiline - unicode', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your name\"\n pattern=\"\\\\p{L}{4,8}\"\n value=\"\u4F60\u7684\u540D\u5B57\"\n required\n multiline\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#valid')\n : null;\n expect(input).to.not.be.null;\n });\n it('invalid', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n pattern=\"[\\\\d]+\"\n value=\"123 not valid\"\n required\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#invalid')\n : null;\n expect(input).to.not.be.null;\n });\n it('invalid - multiline', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n pattern=\"[\\\\d]+\"\n value=\"123 not valid\"\n required\n multiline\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#invalid')\n : null;\n expect(input).to.not.be.null;\n });\n it('invalid - required', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n value=\"\"\n required\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#invalid')\n : null;\n expect(input).to.not.be.null;\n });\n it('invalid - multiline - required', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n value=\"\"\n required\n multiline\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#invalid')\n : null;\n expect(input).to.not.be.null;\n });\n it('invalid - unicode', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n pattern=\"\\\\p{N}+\"\n value=\"123 not valid\"\n required\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#invalid')\n : null;\n expect(input).to.not.be.null;\n });\n it('invalid - multiline - unicode', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n pattern=\"\\\\p{N}+\"\n value=\"123 not valid\"\n required\n multiline\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#invalid')\n : null;\n expect(input).to.not.be.null;\n });\n it('invalid - boundary-type assertions', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n pattern=\"^\\\\p{N}+$\"\n value=\"123 not valid\"\n required\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#invalid')\n : null;\n expect(input).to.not.be.null;\n });\n it('invalid - boundary-type assertions and title', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n type=\"url\"\n value=\"invalid-email\"\n invalid\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot.querySelector('#invalid');\n expect(input).to.not.be.null;\n expect(el.focusElement).to.have.attribute('title');\n });\n it('invalid - multiline - boundary-type assertions and title', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n multiline\n placeholder=\"Enter your number\"\n type=\"url\"\n value=\"invalid-email\"\n invalid\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot.querySelector('#invalid');\n expect(input).to.not.be.null;\n expect(el.focusElement).to.have.attribute('title');\n });\n it('invalid - multiline - boundary-type assertions', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n pattern=\"^\\\\p{N}+$\"\n value=\"123 not valid\"\n required\n multiline\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#invalid')\n : null;\n expect(input).to.not.be.null;\n });\n it('receives focus', async () => {\n let activeElement: HTMLInputElement | null = null;\n const onFocusIn = (event: Event): void => {\n const path = event.composedPath();\n activeElement = path[0] as HTMLInputElement;\n };\n document.addEventListener('focusin', onFocusIn);\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield placeholder=\"Enter your name\"></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n el.focus();\n await elementUpdated(el);\n\n expect(activeElement === el.focusElement).to.be.true;\n document.removeEventListener('focusin', onFocusIn);\n });\n it('does not receive focus when disabled', async () => {\n let activeElement: HTMLInputElement | null = null;\n const onFocusIn = (event: Event): void => {\n const path = event.composedPath();\n activeElement = path[0] as HTMLInputElement;\n };\n document.addEventListener('focusin', onFocusIn);\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n disabled\n placeholder=\"Enter your name\"\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n el.focus();\n await elementUpdated(el);\n\n expect(activeElement === el.focusElement).to.be.false;\n expect(document.activeElement === el).to.be.false;\n document.removeEventListener('focusin', onFocusIn);\n\n el.click();\n await elementUpdated(el);\n\n expect(activeElement === el.focusElement).to.be.false;\n expect(document.activeElement === el).to.be.false;\n document.removeEventListener('focusin', onFocusIn);\n });\n it('accepts input', async () => {\n const testValue = 'Test Name';\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield placeholder=\"Enter your name\"></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n el.focusElement.value = testValue;\n el.focusElement.dispatchEvent(new Event('input'));\n\n expect(el.value).to.equal(testValue);\n });\n it('selects', async () => {\n const testValue = 'Test Name';\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield value=${testValue}></sp-textfield>\n `\n );\n await elementUpdated(el);\n expect(el.value).to.equal(testValue);\n\n el.focus();\n el.select();\n await sendKeys({ press: 'Backspace' });\n expect(el.value).to.equal('');\n });\n it('setSelectionRange', async () => {\n const testValue = 'Test Name';\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield value=${testValue}></sp-textfield>\n `\n );\n await elementUpdated(el);\n expect(el.value).to.equal(testValue);\n\n el.focus();\n el.setSelectionRange(0, 'Test '.length);\n await sendKeys({ press: 'Backspace' });\n expect(el.value).to.equal('Name');\n });\n it('handles minlength with required', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield required minlength=\"3\"></sp-textfield>\n `\n );\n el.focus();\n await sendKeys({\n type: 'ab',\n });\n await elementUpdated(el);\n\n expect(el.value).to.equal('ab');\n expect(el.checkValidity()).to.be.false;\n\n await sendKeys({\n type: 'c',\n });\n await elementUpdated(el);\n\n expect(el.value).to.equal('abc');\n expect(el.checkValidity()).to.be.true;\n });\n it('accepts maxlength', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your name\"\n maxlength=\"3\"\n minlength=\"2\"\n required\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n el.focus();\n\n await sendKeys({\n type: 'a',\n });\n await elementUpdated(el);\n expect(el.value).to.equal('a');\n expect(el.checkValidity()).to.be.false;\n\n await sendKeys({\n type: 'b',\n });\n await elementUpdated(el);\n expect(el.value).to.equal('ab');\n expect(el.checkValidity());\n\n await sendKeys({\n type: 'c',\n });\n await elementUpdated(el);\n expect(el.value).to.equal('abc');\n expect(el.checkValidity());\n\n await sendKeys({\n type: 'd',\n });\n await elementUpdated(el);\n expect(el.value).to.equal('abc');\n expect(el.checkValidity());\n\n await sendKeys({\n press: 'Backspace',\n });\n await elementUpdated(el);\n expect(el.value).to.equal('ab');\n expect(el.checkValidity());\n\n await sendKeys({\n press: 'Backspace',\n });\n await elementUpdated(el);\n expect(el.value).to.equal('a');\n expect(el.checkValidity()).to.be.false;\n });\n it('dispatches a `change` event', async () => {\n const testValue = 'Test Name';\n let eventSource = null as Textfield | null;\n const onChange = (event: Event): void => {\n eventSource = event.composedPath()[0] as Textfield;\n };\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your name\"\n @change=${onChange}\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n el.focusElement.value = testValue;\n el.focusElement.dispatchEvent(new Event('input'));\n el.focusElement.dispatchEvent(new Event('change'));\n\n expect(el.value).to.equal(testValue);\n const testSource = eventSource as Textfield;\n expect(testSource).to.equal(el);\n });\n it('passes through `autocomplete` attribute', async () => {\n let el = await litFixture<Textfield>(\n html`\n <sp-textfield autocomplete=\"off\"></sp-textfield>\n `\n );\n await elementUpdated(el);\n let input = el.shadowRoot ? el.shadowRoot.querySelector('input') : null;\n expect(input).to.exist;\n if (input) {\n expect(input.getAttribute('autocomplete')).to.equal('off');\n }\n\n el = await litFixture<Textfield>(\n html`\n <sp-textfield></sp-textfield>\n `\n );\n await elementUpdated(el);\n input = el.shadowRoot ? el.shadowRoot.querySelector('input') : null;\n expect(input).to.exist;\n if (input) {\n expect(input.getAttribute('autocomplete')).to.not.exist;\n }\n });\n it('tests on `required` changes', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield value=\"\"></sp-textfield>\n `\n );\n await elementUpdated(el);\n expect(el.invalid).to.be.false;\n\n el.required = true;\n await elementUpdated(el);\n expect(el.invalid).to.be.true;\n });\n it('manages `allowed-keys`', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield allowed-keys=\"asdf\"></sp-textfield>\n `\n );\n await elementUpdated(el);\n expect(el.value).to.equal('');\n\n const inputElement = el.focusElement;\n\n el.focusElement.value = 'asdf';\n inputElement.dispatchEvent(new InputEvent('input'));\n\n await elementUpdated(el);\n expect(el.value).to.equal('asdf');\n\n inputElement.value = `asdff`;\n inputElement.setSelectionRange(1, 1);\n inputElement.dispatchEvent(new InputEvent('input'));\n\n await elementUpdated(el);\n expect(el.value).to.equal('asdff');\n expect(inputElement.selectionStart).to.equal(1);\n\n inputElement.value = `asdoff`;\n inputElement.setSelectionRange(4, 4);\n inputElement.dispatchEvent(new InputEvent('input'));\n\n await elementUpdated(el);\n expect(el.value).to.equal('asdff');\n expect(inputElement.selectionStart).to.equal(3);\n });\n describe('type attribute', () => {\n // references:\n // https://developer.mozilla.org/en-US/docs/Glossary/IDL#content_versus_idl_attributes\n // https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#reflecting-content-attributes-in-idl-attributes\n // https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#keywords-and-enumerated-attributes\n\n it('assigns valid attributes to the property', async () => {\n const types: TextfieldType[] = [\n 'text',\n 'url',\n 'tel',\n 'email',\n 'password',\n ];\n for await (const t of types) {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield type=${t}></sp-textfield>\n `\n );\n expect(el.type).equals(t);\n\n el.setAttribute('type', 'url');\n expect(el.type).equals('url');\n }\n });\n it('represents invalid and missing attributes as \"text\"', async () => {\n const el1 = await litFixture<Textfield>(\n html`\n <sp-textfield></sp-textfield>\n `\n );\n\n const el2 = await litFixture<Textfield>(\n html`\n <sp-textfield type=\"time\"></sp-textfield>\n `\n );\n expect(el1.type).equals('text');\n expect(el2.type).equals('text');\n\n el1.setAttribute('type', 'submit');\n expect(el1.type).equals('text');\n });\n it('reflects valid property assignments', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield type=\"url\"></sp-textfield>\n `\n );\n\n el.type = 'email';\n await elementUpdated(el);\n\n expect(el.getAttribute('type')).equals('email');\n expect(el.type).equals('email');\n });\n it('reflects invalid assignments but sets state to \"text\"', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield type=\"url\"></sp-textfield>\n `\n );\n\n // eslint-disable-next-line\n // @ts-ignore\n el.type = 'range';\n await elementUpdated(el);\n\n expect(el.getAttribute('type')).equals('range');\n expect(el.type).equals('text');\n });\n });\n describe('help text', () => {\n const name = 'This is a textfield';\n const description = 'This text helps you fill it out';\n const descriptionNegative = 'This text helps you when invalid';\n it('accepts help text in `slot=\"help-text\"`', async () => {\n const el = await litFixture(html`\n <sp-textfield label=${name}>\n <sp-help-text slot=\"help-text\">${description}</sp-help-text>\n </sp-textfield>\n `);\n\n await elementUpdated(el);\n\n await findDescribedNode(name, description);\n });\n it('accepts help text in `slot=\"help-text\"` w/ own ID', async () => {\n const el = await litFixture(html`\n <sp-textfield label=${name}>\n <sp-help-text slot=\"help-text\" id=\"help-text-id-1\">\n ${description}\n </sp-help-text>\n </sp-textfield>\n `);\n\n await elementUpdated(el);\n\n await findDescribedNode(name, description);\n });\n it('manages neutral/negative help text pairs', async () => {\n const el = await litFixture<Textfield>(html`\n <sp-textfield label=${name}>\n <sp-help-text slot=\"help-text\">${description}</sp-help-text>\n <sp-help-text slot=\"negative-help-text\">\n ${descriptionNegative}\n </sp-help-text>\n </sp-textfield>\n `);\n const negativeHelpText = el.querySelector(\n '[slot=\"negative-help-text\"]'\n ) as HelpText;\n\n await elementUpdated(el);\n\n expect(negativeHelpText.variant).to.equal('neutral');\n await findDescribedNode(name, description);\n\n el.invalid = true;\n await elementUpdated(el);\n\n expect(negativeHelpText.variant).to.equal('negative');\n // There's an issue in the way Firefox processes the a11y tree for\n // elements with an `invalid` attribute/property. The following try/catch\n // wrapping preps the code to pass in that context regardless and error\n // when our tooling no longer runs into this error.\n try {\n await findDescribedNode(name, descriptionNegative);\n if (isFirefox()) {\n throw new Error('this does not fail anymore...');\n }\n } catch (error) {\n if (!isFirefox()) {\n throw error;\n }\n }\n });\n it('manages neutral/negative help text pairs w/ own IDs', async () => {\n const el = await litFixture<Textfield>(html`\n <sp-textfield label=${name}>\n <sp-help-text slot=\"help-text\" id=\"help-text-id-2\">\n ${description}\n </sp-help-text>\n <sp-help-text slot=\"negative-help-text\" id=\"help-text-id-3\">\n ${descriptionNegative}\n </sp-help-text>\n </sp-textfield>\n `);\n const negativeHelpText = el.querySelector(\n '[slot=\"negative-help-text\"]'\n ) as HelpText;\n\n await elementUpdated(el);\n\n expect(negativeHelpText.variant).to.equal('neutral');\n await findDescribedNode(name, description);\n\n el.invalid = true;\n await elementUpdated(el);\n\n expect(negativeHelpText.variant).to.equal('negative');\n // There's an issue in the way Firefox processes the a11y tree for\n // elements with an `invalid` attribute/property. The following try/catch\n // wrapping preps the code to pass in that context regardless and error\n // when our tooling no longer runs into this error.\n try {\n await findDescribedNode(name, descriptionNegative);\n if (isFirefox()) {\n throw new Error('this does not fail anymore...');\n }\n } catch (error) {\n if (!isFirefox()) {\n throw error;\n }\n }\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*/\nimport { Textfield, TextfieldType } from '../';\nimport { elementUpdated, expect, html, litFixture } from '@open-wc/testing';\nimport { sendKeys } from '@web/test-runner-commands';\nimport { sendMouse } from '../../../test/plugins/browser.js';\nimport { findDescribedNode } from '../../../test/testing-helpers-a11y.js';\nimport { HelpText } from '@spectrum-web-components/help-text';\nimport '@spectrum-web-components/help-text/sp-help-text.js';\nimport '@spectrum-web-components/textfield/sp-textfield.js';\nimport { testForLitDevWarnings } from '../../../test/testing-helpers.js';\nimport {\n isFirefox,\n isWebKit,\n} from '@spectrum-web-components/shared/src/platform.js';\nimport { fixture } from '../../../test/testing-helpers.js';\n\ndescribe('Textfield', () => {\n testForLitDevWarnings(\n async () =>\n await litFixture<Textfield>(\n html`\n <sp-textfield label=\"Enter Your Name\"></sp-textfield>\n `\n )\n );\n it('loads default textfield accessibly', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield label=\"Enter Your Name\"></sp-textfield>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('loads multiline textfield accessibly', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield label=\"Enter your name\" multiline></sp-textfield>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n\n it('manages tabIndex while disabled', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield placeholder=\"Enter Your Name\"></sp-textfield>\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\n it('manages tabIndex before first render', async () => {\n const el = document.createElement('sp-textfield') as Textfield;\n\n expect(el.focusElement).to.be.null;\n expect(el.tabIndex).to.equal(0);\n\n el.remove();\n });\n it('loads', async () => {\n const testPlaceholder = 'Enter your name';\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield placeholder=${testPlaceholder}></sp-textfield>\n `\n );\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('input')\n : null;\n expect(input).to.not.be.null;\n const placeholder = input ? input.placeholder : null;\n expect(placeholder).to.equal(testPlaceholder);\n });\n it('multiline', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your name\"\n multiline\n ></sp-textfield>\n `\n );\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('textarea')\n : null;\n expect(input).to.not.be.null;\n });\n it('multiline with rows', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your name\"\n multiline\n rows=\"5\"\n ></sp-textfield>\n `\n );\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('textarea')\n : null;\n expect(input).to.not.be.null;\n expect(input?.getAttribute('rows')).to.equal('5');\n });\n it('multiline with 1 row has smaller height than multiline without explicit rows', async () => {\n const oneRowEl = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your name\"\n multiline\n rows=\"1\"\n ></sp-textfield>\n `\n );\n expect(oneRowEl).to.not.equal(undefined);\n const oneRowTextarea = oneRowEl.shadowRoot\n ? oneRowEl.shadowRoot.querySelector('textarea')\n : null;\n expect(oneRowTextarea).to.not.be.null;\n expect(oneRowTextarea?.getAttribute('rows')).to.equal('1');\n\n const defaultEL = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your name\"\n multiline\n ></sp-textfield>\n `\n );\n expect(defaultEL).to.not.equal(undefined);\n const defaultTextarea = oneRowEl.shadowRoot\n ? defaultEL.shadowRoot.querySelector('textarea')\n : null;\n expect(defaultTextarea).to.not.be.null;\n expect(defaultTextarea?.getAttribute('rows')).to.be.null;\n\n const boundsDefaultElement = defaultTextarea?.getBoundingClientRect();\n const boundsOneRowElement = oneRowTextarea?.getBoundingClientRect();\n expect(boundsDefaultElement?.height).to.be.greaterThan(\n boundsOneRowElement?.height ?? 0\n );\n });\n it('multiline with rows does not resize', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n multiline\n rows=\"5\"\n label=\"No resize control\"\n placeholder=\"No resize control\"\n ></sp-textfield>\n `\n );\n // Resizing only effects the block size of the host rect, so measure the `focusElement` when resizing.\n const sizedElement = (el as HTMLElement & { focusElement: HTMLElement })\n .focusElement;\n const startBounds = sizedElement.getBoundingClientRect();\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [startBounds.right - 6, startBounds.bottom - 6],\n },\n {\n type: 'down',\n },\n {\n type: 'move',\n position: [startBounds.right + 50, startBounds.bottom + 50],\n },\n {\n type: 'up',\n },\n ],\n });\n\n const endBounds = sizedElement.getBoundingClientRect();\n expect(endBounds.height).equals(startBounds.height);\n expect(endBounds.width).equals(startBounds.width);\n });\n it('resizes by default', async function () {\n if (isWebKit()) {\n this.skip();\n }\n const el = await fixture<Textfield>(\n html`\n <sp-textfield\n multiline\n label=\"No resize control\"\n placeholder=\"No resize control\"\n ></sp-textfield>\n `\n );\n // Resizing only effects the block size of the host rect, so measure the `focusElement` when resizing.\n const sizedElement = (el as HTMLElement & { focusElement: HTMLElement })\n .focusElement;\n const startBounds = sizedElement.getBoundingClientRect();\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [startBounds.right - 6, startBounds.bottom - 6],\n },\n {\n type: 'down',\n },\n {\n type: 'move',\n position: [startBounds.right + 50, startBounds.bottom + 50],\n },\n {\n type: 'up',\n },\n ],\n });\n\n const endBounds = sizedElement.getBoundingClientRect();\n expect(endBounds.height).to.be.greaterThan(startBounds.height);\n expect(endBounds.width).to.be.greaterThan(startBounds.width);\n });\n it('accepts resize styling', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n multiline\n style=\"resize: none;\"\n label=\"No resize control\"\n placeholder=\"No resize control\"\n ></sp-textfield>\n `\n );\n const startBounds = el.getBoundingClientRect();\n\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [startBounds.right - 2, startBounds.bottom - 2],\n },\n {\n type: 'down',\n },\n {\n type: 'move',\n position: [startBounds.right + 50, startBounds.bottom + 50],\n },\n {\n type: 'up',\n },\n ],\n });\n\n const endBounds = el.getBoundingClientRect();\n expect(endBounds.width).equals(startBounds.width);\n expect(endBounds.height).equals(startBounds.height);\n });\n it('grows', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your name\"\n multiline\n grows\n ></sp-textfield>\n `\n );\n expect(el).to.not.equal(undefined);\n const sizer = el.shadowRoot\n ? el.shadowRoot.querySelector('#sizer')\n : null;\n expect(sizer).to.not.be.null;\n });\n it('multiline with rows and grows does not grow', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your name\"\n multiline\n grows\n rows=\"5\"\n ></sp-textfield>\n `\n );\n expect(el).to.not.equal(undefined);\n const sizer = el.shadowRoot\n ? el.shadowRoot.querySelector('#sizer')\n : null;\n expect(sizer).to.be.null;\n });\n it('valid', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n pattern=\"[\\\\d]+\"\n value=\"123\"\n required\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#valid')\n : null;\n expect(input).to.not.be.null;\n });\n it('valid - multiline', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n pattern=\"[\\\\d]+\"\n value=\"123\"\n required\n multiline\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#valid')\n : null;\n expect(input).to.not.be.null;\n });\n it('valid - required', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n value=\"123\"\n required\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#valid')\n : null;\n expect(input).to.not.be.null;\n });\n it('valid - multiline - required', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n value=\"123\"\n required\n multiline\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#valid')\n : null;\n expect(input).to.not.be.null;\n });\n it('valid - boundary-type assertions', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n pattern=\"^[\\\\d]+$\"\n value=\"123\"\n required\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#valid')\n : null;\n expect(input).to.not.be.null;\n });\n it('valid - multiline - boundary-type assertions', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n pattern=\"^[\\\\d]+$\"\n value=\"123\"\n required\n multiline\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#valid')\n : null;\n expect(input).to.not.be.null;\n });\n it('valid - boundary-type assertions and title', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n pattern=\"^[\\\\d]+$\"\n value=\"123\"\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot.querySelector('#valid');\n expect(input).to.not.be.null;\n expect(el.focusElement).to.not.have.attribute('title');\n });\n it('valid - multiline - boundary-type assertions and title', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n multiline\n placeholder=\"Enter your number\"\n pattern=\"^[\\\\d]+$\"\n value=\"123\"\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot.querySelector('#valid');\n expect(input).to.not.be.null;\n expect(el.focusElement).to.not.have.attribute('title');\n });\n it('valid - unicode', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your name\"\n pattern=\"\\\\p{L}{4,8}\"\n value=\"\u4F60\u7684\u540D\u5B57\"\n required\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#valid')\n : null;\n expect(input).to.not.be.null;\n });\n it('valid - multiline - unicode', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your name\"\n pattern=\"\\\\p{L}{4,8}\"\n value=\"\u4F60\u7684\u540D\u5B57\"\n required\n multiline\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#valid')\n : null;\n expect(input).to.not.be.null;\n });\n it('invalid', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n pattern=\"[\\\\d]+\"\n value=\"123 not valid\"\n required\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#invalid')\n : null;\n expect(input).to.not.be.null;\n });\n it('invalid - multiline', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n pattern=\"[\\\\d]+\"\n value=\"123 not valid\"\n required\n multiline\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#invalid')\n : null;\n expect(input).to.not.be.null;\n });\n it('invalid - required', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n value=\"\"\n required\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#invalid')\n : null;\n expect(input).to.not.be.null;\n });\n it('invalid - multiline - required', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n value=\"\"\n required\n multiline\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#invalid')\n : null;\n expect(input).to.not.be.null;\n });\n it('invalid - unicode', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n pattern=\"\\\\p{N}+\"\n value=\"123 not valid\"\n required\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#invalid')\n : null;\n expect(input).to.not.be.null;\n });\n it('invalid - multiline - unicode', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n pattern=\"\\\\p{N}+\"\n value=\"123 not valid\"\n required\n multiline\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#invalid')\n : null;\n expect(input).to.not.be.null;\n });\n it('invalid - boundary-type assertions', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n pattern=\"^\\\\p{N}+$\"\n value=\"123 not valid\"\n required\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#invalid')\n : null;\n expect(input).to.not.be.null;\n });\n it('invalid - boundary-type assertions and title', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n type=\"url\"\n value=\"invalid-email\"\n invalid\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot.querySelector('#invalid');\n expect(input).to.not.be.null;\n expect(el.focusElement).to.have.attribute('title');\n });\n it('invalid - multiline - boundary-type assertions and title', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n multiline\n placeholder=\"Enter your number\"\n type=\"url\"\n value=\"invalid-email\"\n invalid\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot.querySelector('#invalid');\n expect(input).to.not.be.null;\n expect(el.focusElement).to.have.attribute('title');\n });\n it('invalid - multiline - boundary-type assertions', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your number\"\n pattern=\"^\\\\p{N}+$\"\n value=\"123 not valid\"\n required\n multiline\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n expect(el).to.not.equal(undefined);\n const input = el.shadowRoot\n ? el.shadowRoot.querySelector('#invalid')\n : null;\n expect(input).to.not.be.null;\n });\n it('receives focus', async () => {\n let activeElement: HTMLInputElement | null = null;\n const onFocusIn = (event: Event): void => {\n const path = event.composedPath();\n activeElement = path[0] as HTMLInputElement;\n };\n document.addEventListener('focusin', onFocusIn);\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield placeholder=\"Enter your name\"></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n el.focus();\n await elementUpdated(el);\n\n expect(activeElement === el.focusElement).to.be.true;\n document.removeEventListener('focusin', onFocusIn);\n });\n it('does not receive focus when disabled', async () => {\n let activeElement: HTMLInputElement | null = null;\n const onFocusIn = (event: Event): void => {\n const path = event.composedPath();\n activeElement = path[0] as HTMLInputElement;\n };\n document.addEventListener('focusin', onFocusIn);\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n disabled\n placeholder=\"Enter your name\"\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n el.focus();\n await elementUpdated(el);\n\n expect(activeElement === el.focusElement).to.be.false;\n expect(document.activeElement === el).to.be.false;\n document.removeEventListener('focusin', onFocusIn);\n\n el.click();\n await elementUpdated(el);\n\n expect(activeElement === el.focusElement).to.be.false;\n expect(document.activeElement === el).to.be.false;\n document.removeEventListener('focusin', onFocusIn);\n });\n it('accepts input', async () => {\n const testValue = 'Test Name';\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield placeholder=\"Enter your name\"></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n el.focusElement.value = testValue;\n el.focusElement.dispatchEvent(new Event('input'));\n\n expect(el.value).to.equal(testValue);\n });\n it('selects', async () => {\n const testValue = 'Test Name';\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield value=${testValue}></sp-textfield>\n `\n );\n await elementUpdated(el);\n expect(el.value).to.equal(testValue);\n\n el.focus();\n el.select();\n await sendKeys({ press: 'Backspace' });\n expect(el.value).to.equal('');\n });\n it('setSelectionRange', async () => {\n const testValue = 'Test Name';\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield value=${testValue}></sp-textfield>\n `\n );\n await elementUpdated(el);\n expect(el.value).to.equal(testValue);\n\n el.focus();\n el.setSelectionRange(0, 'Test '.length);\n await sendKeys({ press: 'Backspace' });\n expect(el.value).to.equal('Name');\n });\n it('handles minlength with required', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield required minlength=\"3\"></sp-textfield>\n `\n );\n el.focus();\n await sendKeys({\n type: 'ab',\n });\n await elementUpdated(el);\n\n expect(el.value).to.equal('ab');\n expect(el.checkValidity()).to.be.false;\n\n await sendKeys({\n type: 'c',\n });\n await elementUpdated(el);\n\n expect(el.value).to.equal('abc');\n expect(el.checkValidity()).to.be.true;\n });\n it('accepts maxlength', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your name\"\n maxlength=\"3\"\n minlength=\"2\"\n required\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n el.focus();\n\n await sendKeys({\n type: 'a',\n });\n await elementUpdated(el);\n expect(el.value).to.equal('a');\n expect(el.checkValidity()).to.be.false;\n\n await sendKeys({\n type: 'b',\n });\n await elementUpdated(el);\n expect(el.value).to.equal('ab');\n expect(el.checkValidity());\n\n await sendKeys({\n type: 'c',\n });\n await elementUpdated(el);\n expect(el.value).to.equal('abc');\n expect(el.checkValidity());\n\n await sendKeys({\n type: 'd',\n });\n await elementUpdated(el);\n expect(el.value).to.equal('abc');\n expect(el.checkValidity());\n\n await sendKeys({\n press: 'Backspace',\n });\n await elementUpdated(el);\n expect(el.value).to.equal('ab');\n expect(el.checkValidity());\n\n await sendKeys({\n press: 'Backspace',\n });\n await elementUpdated(el);\n expect(el.value).to.equal('a');\n expect(el.checkValidity()).to.be.false;\n });\n it('dispatches a `change` event', async () => {\n const testValue = 'Test Name';\n let eventSource = null as Textfield | null;\n const onChange = (event: Event): void => {\n eventSource = event.composedPath()[0] as Textfield;\n };\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield\n placeholder=\"Enter your name\"\n @change=${onChange}\n ></sp-textfield>\n `\n );\n await elementUpdated(el);\n\n el.focusElement.value = testValue;\n el.focusElement.dispatchEvent(new Event('input'));\n el.focusElement.dispatchEvent(new Event('change'));\n\n expect(el.value).to.equal(testValue);\n const testSource = eventSource as Textfield;\n expect(testSource).to.equal(el);\n });\n it('passes through `autocomplete` attribute', async () => {\n let el = await litFixture<Textfield>(\n html`\n <sp-textfield autocomplete=\"off\"></sp-textfield>\n `\n );\n await elementUpdated(el);\n let input = el.shadowRoot ? el.shadowRoot.querySelector('input') : null;\n expect(input).to.exist;\n if (input) {\n expect(input.getAttribute('autocomplete')).to.equal('off');\n }\n\n el = await litFixture<Textfield>(\n html`\n <sp-textfield></sp-textfield>\n `\n );\n await elementUpdated(el);\n input = el.shadowRoot ? el.shadowRoot.querySelector('input') : null;\n expect(input).to.exist;\n if (input) {\n expect(input.getAttribute('autocomplete')).to.not.exist;\n }\n });\n it('tests on `required` changes', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield value=\"\"></sp-textfield>\n `\n );\n await elementUpdated(el);\n expect(el.invalid).to.be.false;\n\n el.required = true;\n await elementUpdated(el);\n expect(el.invalid).to.be.true;\n });\n it('manages `allowed-keys`', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield allowed-keys=\"asdf\"></sp-textfield>\n `\n );\n await elementUpdated(el);\n expect(el.value).to.equal('');\n\n const inputElement = el.focusElement;\n\n el.focusElement.value = 'asdf';\n inputElement.dispatchEvent(new InputEvent('input'));\n\n await elementUpdated(el);\n expect(el.value).to.equal('asdf');\n\n inputElement.value = `asdff`;\n inputElement.setSelectionRange(1, 1);\n inputElement.dispatchEvent(new InputEvent('input'));\n\n await elementUpdated(el);\n expect(el.value).to.equal('asdff');\n expect(inputElement.selectionStart).to.equal(1);\n\n inputElement.value = `asdoff`;\n inputElement.setSelectionRange(4, 4);\n inputElement.dispatchEvent(new InputEvent('input'));\n\n await elementUpdated(el);\n expect(el.value).to.equal('asdff');\n expect(inputElement.selectionStart).to.equal(3);\n });\n describe('type attribute', () => {\n // references:\n // https://developer.mozilla.org/en-US/docs/Glossary/IDL#content_versus_idl_attributes\n // https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#reflecting-content-attributes-in-idl-attributes\n // https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#keywords-and-enumerated-attributes\n\n it('assigns valid attributes to the property', async () => {\n const types: TextfieldType[] = [\n 'text',\n 'url',\n 'tel',\n 'email',\n 'password',\n ];\n for await (const t of types) {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield type=${t}></sp-textfield>\n `\n );\n expect(el.type).equals(t);\n\n el.setAttribute('type', 'url');\n expect(el.type).equals('url');\n }\n });\n it('represents invalid and missing attributes as \"text\"', async () => {\n const el1 = await litFixture<Textfield>(\n html`\n <sp-textfield></sp-textfield>\n `\n );\n\n const el2 = await litFixture<Textfield>(\n html`\n <sp-textfield type=\"time\"></sp-textfield>\n `\n );\n expect(el1.type).equals('text');\n expect(el2.type).equals('text');\n\n el1.setAttribute('type', 'submit');\n expect(el1.type).equals('text');\n });\n it('reflects valid property assignments', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield type=\"url\"></sp-textfield>\n `\n );\n\n el.type = 'email';\n await elementUpdated(el);\n\n expect(el.getAttribute('type')).equals('email');\n expect(el.type).equals('email');\n });\n it('reflects invalid assignments but sets state to \"text\"', async () => {\n const el = await litFixture<Textfield>(\n html`\n <sp-textfield type=\"url\"></sp-textfield>\n `\n );\n\n // eslint-disable-next-line\n // @ts-ignore\n el.type = 'range';\n await elementUpdated(el);\n\n expect(el.getAttribute('type')).equals('range');\n expect(el.type).equals('text');\n });\n });\n describe('help text', () => {\n const name = 'This is a textfield';\n const description = 'This text helps you fill it out';\n const descriptionNegative = 'This text helps you when invalid';\n it('accepts help text in `slot=\"help-text\"`', async () => {\n const el = await litFixture(html`\n <sp-textfield label=${name}>\n <sp-help-text slot=\"help-text\">${description}</sp-help-text>\n </sp-textfield>\n `);\n\n await elementUpdated(el);\n\n await findDescribedNode(name, description);\n });\n it('accepts help text in `slot=\"help-text\"` w/ own ID', async () => {\n const el = await litFixture(html`\n <sp-textfield label=${name}>\n <sp-help-text slot=\"help-text\" id=\"help-text-id-1\">\n ${description}\n </sp-help-text>\n </sp-textfield>\n `);\n\n await elementUpdated(el);\n\n await findDescribedNode(name, description);\n });\n it('manages neutral/negative help text pairs', async () => {\n const el = await litFixture<Textfield>(html`\n <sp-textfield label=${name}>\n <sp-help-text slot=\"help-text\">${description}</sp-help-text>\n <sp-help-text slot=\"negative-help-text\">\n ${descriptionNegative}\n </sp-help-text>\n </sp-textfield>\n `);\n const negativeHelpText = el.querySelector(\n '[slot=\"negative-help-text\"]'\n ) as HelpText;\n\n await elementUpdated(el);\n\n expect(negativeHelpText.variant).to.equal('neutral');\n await findDescribedNode(name, description);\n\n el.invalid = true;\n await elementUpdated(el);\n\n expect(negativeHelpText.variant).to.equal('negative');\n // There's an issue in the way Firefox processes the a11y tree for\n // elements with an `invalid` attribute/property. The following try/catch\n // wrapping preps the code to pass in that context regardless and error\n // when our tooling no longer runs into this error.\n try {\n await findDescribedNode(name, descriptionNegative);\n if (isFirefox()) {\n throw new Error('this does not fail anymore...');\n }\n } catch (error) {\n if (!isFirefox()) {\n throw error;\n }\n }\n });\n it('manages neutral/negative help text pairs w/ own IDs', async () => {\n const el = await litFixture<Textfield>(html`\n <sp-textfield label=${name}>\n <sp-help-text slot=\"help-text\" id=\"help-text-id-2\">\n ${description}\n </sp-help-text>\n <sp-help-text slot=\"negative-help-text\" id=\"help-text-id-3\">\n ${descriptionNegative}\n </sp-help-text>\n </sp-textfield>\n `);\n const negativeHelpText = el.querySelector(\n '[slot=\"negative-help-text\"]'\n ) as HelpText;\n\n await elementUpdated(el);\n\n expect(negativeHelpText.variant).to.equal('neutral');\n await findDescribedNode(name, description);\n\n el.invalid = true;\n await elementUpdated(el);\n\n expect(negativeHelpText.variant).to.equal('negative');\n // There's an issue in the way Firefox processes the a11y tree for\n // elements with an `invalid` attribute/property. The following try/catch\n // wrapping preps the code to pass in that context regardless and error\n // when our tooling no longer runs into this error.\n try {\n await findDescribedNode(name, descriptionNegative);\n if (isFirefox()) {\n throw new Error('this does not fail anymore...');\n }\n } catch (error) {\n if (!isFirefox()) {\n throw error;\n }\n }\n });\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }