@spectrum-web-components/textfield 0.33.3-overlay.65 → 0.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ import { html } from "@spectrum-web-components/base";
3
+ import "@spectrum-web-components/textfield/sp-textfield.js";
4
+ import "@spectrum-web-components/field-label/sp-field-label.js";
5
+ import "@spectrum-web-components/help-text/sp-help-text.js";
6
+ import { ifDefined } from "@spectrum-web-components/base/src/directives.js";
7
+ export default {
8
+ component: "sp-textfield",
9
+ title: "Textfield/Sizes"
10
+ };
11
+ const template = ({
12
+ size
13
+ } = {}) => {
14
+ return html`
15
+ <sp-field-label for="name" size=${ifDefined(size)}>
16
+ Enter your name
17
+ </sp-field-label>
18
+ <sp-textfield id="name" size=${ifDefined(size)} value="Sized Textfield">
19
+ <sp-help-text size=${ifDefined(size)} slot="help-text">
20
+ This is for the whole enchilada.
21
+ </sp-help-text>
22
+ </sp-textfield>
23
+ `;
24
+ };
25
+ export const s = () => template({ size: "s" });
26
+ export const noSize = () => template();
27
+ export const m = () => template({ size: "m" });
28
+ export const l = () => template({ size: "l" });
29
+ export const XL = () => template({ size: "xl" });
30
+ //# sourceMappingURL=textfield-sizes.stories.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["textfield-sizes.stories.ts"],
4
+ "sourcesContent": ["/*\nCopyright 2018 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 { html, TemplateResult } from '@spectrum-web-components/base';\n\nimport '@spectrum-web-components/textfield/sp-textfield.js';\nimport '@spectrum-web-components/field-label/sp-field-label.js';\nimport '@spectrum-web-components/help-text/sp-help-text.js';\nimport { ifDefined } from '@spectrum-web-components/base/src/directives.js';\n\nexport default {\n component: 'sp-textfield',\n title: 'Textfield/Sizes',\n};\n\nconst template = ({\n size,\n}: {\n size?: 's' | 'm' | 'l' | 'xl';\n} = {}): TemplateResult => {\n return html`\n <sp-field-label for=\"name\" size=${ifDefined(size)}>\n Enter your name\n </sp-field-label>\n <sp-textfield id=\"name\" size=${ifDefined(size)} value=\"Sized Textfield\">\n <sp-help-text size=${ifDefined(size)} slot=\"help-text\">\n This is for the whole enchilada.\n </sp-help-text>\n </sp-textfield>\n `;\n};\n\nexport const s = (): TemplateResult => template({ size: 's' });\nexport const noSize = (): TemplateResult => template();\nexport const m = (): TemplateResult => template({ size: 'm' });\nexport const l = (): TemplateResult => template({ size: 'l' });\nexport const XL = (): TemplateResult => template({ size: 'xl' });\n"],
5
+ "mappings": ";AAWA,SAAS,YAA4B;AAErC,OAAO;AACP,OAAO;AACP,OAAO;AACP,SAAS,iBAAiB;AAE1B,eAAe;AAAA,EACX,WAAW;AAAA,EACX,OAAO;AACX;AAEA,MAAM,WAAW,CAAC;AAAA,EACd;AACJ,IAEI,CAAC,MAAsB;AACvB,SAAO;AAAA,0CAC+B,UAAU,IAAI;AAAA;AAAA;AAAA,uCAGjB,UAAU,IAAI;AAAA,iCACpB,UAAU,IAAI;AAAA;AAAA;AAAA;AAAA;AAK/C;AAEO,aAAM,IAAI,MAAsB,SAAS,EAAE,MAAM,IAAI,CAAC;AACtD,aAAM,SAAS,MAAsB,SAAS;AAC9C,aAAM,IAAI,MAAsB,SAAS,EAAE,MAAM,IAAI,CAAC;AACtD,aAAM,IAAI,MAAsB,SAAS,EAAE,MAAM,IAAI,CAAC;AACtD,aAAM,KAAK,MAAsB,SAAS,EAAE,MAAM,KAAK,CAAC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ import * as stories from "../stories/textarea-sizes.stories.js";
3
+ import { regressVisuals } from "../../../test/visual/test.js";
4
+ regressVisuals("TextareaSizesStories", stories);
5
+ //# sourceMappingURL=textarea-sizes.test-vrt.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["textarea-sizes.test-vrt.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 * as stories from '../stories/textarea-sizes.stories.js';\nimport { regressVisuals } from '../../../test/visual/test.js';\nimport type { TestsType } from '../../../test/visual/test.js';\n\nregressVisuals('TextareaSizesStories', stories as unknown as TestsType);\n"],
5
+ "mappings": ";AAYA,YAAY,aAAa;AACzB,SAAS,sBAAsB;AAG/B,eAAe,wBAAwB,OAA+B;",
6
+ "names": []
7
+ }
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ import * as stories from "../stories/textfield-sizes.stories.js";
3
+ import { regressVisuals } from "../../../test/visual/test.js";
4
+ regressVisuals("TextfieldSizesStories", stories);
5
+ //# sourceMappingURL=textfield-sizes.test-vrt.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["textfield-sizes.test-vrt.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 * as stories from '../stories/textfield-sizes.stories.js';\nimport { regressVisuals } from '../../../test/visual/test.js';\nimport type { TestsType } from '../../../test/visual/test.js';\n\nregressVisuals('TextfieldSizesStories', stories as unknown as TestsType);\n"],
5
+ "mappings": ";AAYA,YAAY,aAAa;AACzB,SAAS,sBAAsB;AAG/B,eAAe,yBAAyB,OAA+B;",
6
+ "names": []
7
+ }
@@ -83,6 +83,87 @@ describe("Textfield", () => {
83
83
  const input = el.shadowRoot ? el.shadowRoot.querySelector("textarea") : null;
84
84
  expect(input).to.not.be.null;
85
85
  });
86
+ it("multiline with rows", async () => {
87
+ const el = await litFixture(
88
+ html`
89
+ <sp-textfield
90
+ placeholder="Enter your name"
91
+ multiline
92
+ rows="5"
93
+ ></sp-textfield>
94
+ `
95
+ );
96
+ expect(el).to.not.equal(void 0);
97
+ const input = el.shadowRoot ? el.shadowRoot.querySelector("textarea") : null;
98
+ expect(input).to.not.be.null;
99
+ expect(input == null ? void 0 : input.getAttribute("rows")).to.equal("5");
100
+ });
101
+ it("multiline with 1 row has smaller height than multiline without explicit rows", async () => {
102
+ var _a;
103
+ const oneRowEl = await litFixture(
104
+ html`
105
+ <sp-textfield
106
+ placeholder="Enter your name"
107
+ multiline
108
+ rows="1"
109
+ ></sp-textfield>
110
+ `
111
+ );
112
+ expect(oneRowEl).to.not.equal(void 0);
113
+ const oneRowTextarea = oneRowEl.shadowRoot ? oneRowEl.shadowRoot.querySelector("textarea") : null;
114
+ expect(oneRowTextarea).to.not.be.null;
115
+ expect(oneRowTextarea == null ? void 0 : oneRowTextarea.getAttribute("rows")).to.equal("1");
116
+ const defaultEL = await litFixture(
117
+ html`
118
+ <sp-textfield
119
+ placeholder="Enter your name"
120
+ multiline
121
+ ></sp-textfield>
122
+ `
123
+ );
124
+ expect(defaultEL).to.not.equal(void 0);
125
+ const defaultTextarea = oneRowEl.shadowRoot ? defaultEL.shadowRoot.querySelector("textarea") : null;
126
+ expect(defaultTextarea).to.not.be.null;
127
+ expect(defaultTextarea == null ? void 0 : defaultTextarea.getAttribute("rows")).to.be.null;
128
+ const boundsDefaultElement = defaultTextarea == null ? void 0 : defaultTextarea.getBoundingClientRect();
129
+ const boundsOneRowElement = oneRowTextarea == null ? void 0 : oneRowTextarea.getBoundingClientRect();
130
+ expect(boundsDefaultElement == null ? void 0 : boundsDefaultElement.height).to.be.greaterThan((_a = boundsOneRowElement == null ? void 0 : boundsOneRowElement.height) != null ? _a : 0);
131
+ });
132
+ it("multiline with rows does not resize", async () => {
133
+ const el = await litFixture(
134
+ html`
135
+ <sp-textfield
136
+ multiline
137
+ rows="5"
138
+ label="No resize control"
139
+ placeholder="No resize control"
140
+ ></sp-textfield>
141
+ `
142
+ );
143
+ const sizedElement = el.focusElement;
144
+ const startBounds = sizedElement.getBoundingClientRect();
145
+ await sendMouse({
146
+ steps: [
147
+ {
148
+ type: "move",
149
+ position: [startBounds.right - 6, startBounds.bottom - 6]
150
+ },
151
+ {
152
+ type: "down"
153
+ },
154
+ {
155
+ type: "move",
156
+ position: [startBounds.right + 50, startBounds.bottom + 50]
157
+ },
158
+ {
159
+ type: "up"
160
+ }
161
+ ]
162
+ });
163
+ const endBounds = sizedElement.getBoundingClientRect();
164
+ expect(endBounds.height).equals(startBounds.height);
165
+ expect(endBounds.width).equals(startBounds.width);
166
+ });
86
167
  it("resizes by default", async () => {
87
168
  const el = await litFixture(
88
169
  html`
@@ -165,6 +246,21 @@ describe("Textfield", () => {
165
246
  const sizer = el.shadowRoot ? el.shadowRoot.querySelector("#sizer") : null;
166
247
  expect(sizer).to.not.be.null;
167
248
  });
249
+ it("multiline with rows and grows does not grow", async () => {
250
+ const el = await litFixture(
251
+ html`
252
+ <sp-textfield
253
+ placeholder="Enter your name"
254
+ multiline
255
+ grows
256
+ rows="5"
257
+ ></sp-textfield>
258
+ `
259
+ );
260
+ expect(el).to.not.equal(void 0);
261
+ const sizer = el.shadowRoot ? el.shadowRoot.querySelector("#sizer") : null;
262
+ expect(sizer).to.be.null;
263
+ });
168
264
  it("valid", async () => {
169
265
  const el = await litFixture(
170
266
  html`
@@ -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('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('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 - 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 - 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 { 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(boundsOneRowElement?.height ?? 0);\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 - 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 - 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": ";AAYA,SAAS,gBAAgB,QAAQ,MAAM,kBAAkB;AACzD,SAAS,gBAAgB;AACzB,SAAS,iBAAiB;AAC1B,SAAS,yBAAyB;AAElC,OAAO;AACP,OAAO;AACP,SAAS,6BAA6B;AACtC,SAAS,iBAAiB;AAE1B,SAAS,aAAa,MAAM;AACxB;AAAA,IACI,YACI,MAAM;AAAA,MACF;AAAA;AAAA;AAAA,IAGJ;AAAA,EACR;AACA,KAAG,sCAAsC,YAAY;AACjD,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA,IAGJ;AAEA,UAAM,eAAe,EAAE;AAEvB,UAAM,OAAO,EAAE,EAAE,GAAG,GAAG,WAAW;AAAA,EACtC,CAAC;AACD,KAAG,wCAAwC,YAAY;AACnD,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA,IAGJ;AAEA,UAAM,eAAe,EAAE;AAEvB,UAAM,OAAO,EAAE,EAAE,GAAG,GAAG,WAAW;AAAA,EACtC,CAAC;AAED,KAAG,mCAAmC,YAAY;AAC9C,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA,IAGJ;AAEA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,QAAQ,EAAE,GAAG,MAAM,CAAC;AAE9B,OAAG,WAAW;AACd,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAE;AAE/B,OAAG,WAAW;AACd,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAE;AAE/B,OAAG,WAAW;AACd,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,QAAQ,EAAE,GAAG,MAAM,CAAC;AAAA,EAClC,CAAC;AAED,KAAG,wCAAwC,YAAY;AACnD,UAAM,KAAK,SAAS,cAAc,cAAc;AAEhD,WAAO,GAAG,YAAY,EAAE,GAAG,GAAG;AAC9B,WAAO,GAAG,QAAQ,EAAE,GAAG,MAAM,CAAC;AAE9B,OAAG,OAAO;AAAA,EACd,CAAC;AACD,KAAG,SAAS,YAAY;AACpB,UAAM,kBAAkB;AACxB,UAAM,KAAK,MAAM;AAAA,MACb;AAAA,4CACgC;AAAA;AAAA,IAEpC;AACA,WAAO,EAAE,EAAE,GAAG,IAAI,MAAM,MAAS;AACjC,UAAM,QAAQ,GAAG,aACX,GAAG,WAAW,cAAc,OAAO,IACnC;AACN,WAAO,KAAK,EAAE,GAAG,IAAI,GAAG;AACxB,UAAM,cAAc,QAAQ,MAAM,cAAc;AAChD,WAAO,WAAW,EAAE,GAAG,MAAM,eAAe;AAAA,EAChD,CAAC;AACD,KAAG,aAAa,YAAY;AACxB,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMJ;AACA,WAAO,EAAE,EAAE,GAAG,IAAI,MAAM,MAAS;AACjC,UAAM,QAAQ,GAAG,aACX,GAAG,WAAW,cAAc,UAAU,IACtC;AACN,WAAO,KAAK,EAAE,GAAG,IAAI,GAAG;AAAA,EAC5B,CAAC;AACD,KAAG,uBAAuB,YAAY;AAClC,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOJ;AACA,WAAO,EAAE,EAAE,GAAG,IAAI,MAAM,MAAS;AACjC,UAAM,QAAQ,GAAG,aACX,GAAG,WAAW,cAAc,UAAU,IACtC;AACN,WAAO,KAAK,EAAE,GAAG,IAAI,GAAG;AACxB,WAAO,+BAAO,aAAa,OAAO,EAAE,GAAG,MAAM,GAAG;AAAA,EACpD,CAAC;AACD,KAAG,gFAAgF,YAAY;AAxInG;AAyIQ,UAAM,WAAW,MAAM;AAAA,MACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOJ;AACA,WAAO,QAAQ,EAAE,GAAG,IAAI,MAAM,MAAS;AACvC,UAAM,iBAAiB,SAAS,aAC1B,SAAS,WAAW,cAAc,UAAU,IAC5C;AACN,WAAO,cAAc,EAAE,GAAG,IAAI,GAAG;AACjC,WAAO,iDAAgB,aAAa,OAAO,EAAE,GAAG,MAAM,GAAG;AAEzD,UAAM,YAAY,MAAM;AAAA,MACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMJ;AACA,WAAO,SAAS,EAAE,GAAG,IAAI,MAAM,MAAS;AACxC,UAAM,kBAAkB,SAAS,aAC3B,UAAU,WAAW,cAAc,UAAU,IAC7C;AACN,WAAO,eAAe,EAAE,GAAG,IAAI,GAAG;AAClC,WAAO,mDAAiB,aAAa,OAAO,EAAE,GAAG,GAAG;AAEpD,UAAM,uBAAuB,mDAAiB;AAC9C,UAAM,sBAAsB,iDAAgB;AAC5C,WAAO,6DAAsB,MAAM,EAAE,GAAG,GAAG,aAAY,gEAAqB,WAArB,YAA+B,CAAC;AAAA,EAC3F,CAAC;AACD,KAAG,uCAAuC,YAAY;AAClD,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQJ;AAEA,UAAM,eAAgB,GACjB;AACL,UAAM,cAAc,aAAa,sBAAsB;AACvD,UAAM,UAAU;AAAA,MACZ,OAAO;AAAA,QACH;AAAA,UACI,MAAM;AAAA,UACN,UAAU,CAAC,YAAY,QAAQ,GAAG,YAAY,SAAS,CAAC;AAAA,QAC5D;AAAA,QACA;AAAA,UACI,MAAM;AAAA,QACV;AAAA,QACA;AAAA,UACI,MAAM;AAAA,UACN,UAAU,CAAC,YAAY,QAAQ,IAAI,YAAY,SAAS,EAAE;AAAA,QAC9D;AAAA,QACA;AAAA,UACI,MAAM;AAAA,QACV;AAAA,MACJ;AAAA,IACJ,CAAC;AAED,UAAM,YAAY,aAAa,sBAAsB;AACrD,WAAO,UAAU,MAAM,EAAE,OAAO,YAAY,MAAM;AAClD,WAAO,UAAU,KAAK,EAAE,OAAO,YAAY,KAAK;AAAA,EACpD,CAAC;AACD,KAAG,sBAAsB,YAAY;AACjC,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOJ;AAEA,UAAM,eAAgB,GACjB;AACL,UAAM,cAAc,aAAa,sBAAsB;AACvD,UAAM,UAAU;AAAA,MACZ,OAAO;AAAA,QACH;AAAA,UACI,MAAM;AAAA,UACN,UAAU,CAAC,YAAY,QAAQ,GAAG,YAAY,SAAS,CAAC;AAAA,QAC5D;AAAA,QACA;AAAA,UACI,MAAM;AAAA,QACV;AAAA,QACA;AAAA,UACI,MAAM;AAAA,UACN,UAAU,CAAC,YAAY,QAAQ,IAAI,YAAY,SAAS,EAAE;AAAA,QAC9D;AAAA,QACA;AAAA,UACI,MAAM;AAAA,QACV;AAAA,MACJ;AAAA,IACJ,CAAC;AAED,UAAM,YAAY,aAAa,sBAAsB;AACrD,WAAO,UAAU,MAAM,EAAE,GAAG,GAAG,YAAY,YAAY,MAAM;AAC7D,WAAO,UAAU,KAAK,EAAE,GAAG,GAAG,YAAY,YAAY,KAAK;AAAA,EAC/D,CAAC;AACD,KAAG,0BAA0B,YAAY;AACrC,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQJ;AACA,UAAM,cAAc,GAAG,sBAAsB;AAE7C,UAAM,UAAU;AAAA,MACZ,OAAO;AAAA,QACH;AAAA,UACI,MAAM;AAAA,UACN,UAAU,CAAC,YAAY,QAAQ,GAAG,YAAY,SAAS,CAAC;AAAA,QAC5D;AAAA,QACA;AAAA,UACI,MAAM;AAAA,QACV;AAAA,QACA;AAAA,UACI,MAAM;AAAA,UACN,UAAU,CAAC,YAAY,QAAQ,IAAI,YAAY,SAAS,EAAE;AAAA,QAC9D;AAAA,QACA;AAAA,UACI,MAAM;AAAA,QACV;AAAA,MACJ;AAAA,IACJ,CAAC;AAED,UAAM,YAAY,GAAG,sBAAsB;AAC3C,WAAO,UAAU,KAAK,EAAE,OAAO,YAAY,KAAK;AAChD,WAAO,UAAU,MAAM,EAAE,OAAO,YAAY,MAAM;AAAA,EACtD,CAAC;AACD,KAAG,SAAS,YAAY;AACpB,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOJ;AACA,WAAO,EAAE,EAAE,GAAG,IAAI,MAAM,MAAS;AACjC,UAAM,QAAQ,GAAG,aACX,GAAG,WAAW,cAAc,QAAQ,IACpC;AACN,WAAO,KAAK,EAAE,GAAG,IAAI,GAAG;AAAA,EAC5B,CAAC;AACD,KAAG,+CAA+C,YAAY;AAC1D,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQJ;AACA,WAAO,EAAE,EAAE,GAAG,IAAI,MAAM,MAAS;AACjC,UAAM,QAAQ,GAAG,aACX,GAAG,WAAW,cAAc,QAAQ,IACpC;AACN,WAAO,KAAK,EAAE,GAAG,GAAG;AAAA,EACxB,CAAC;AACD,KAAG,SAAS,YAAY;AACpB,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQJ;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,EAAE,EAAE,GAAG,IAAI,MAAM,MAAS;AACjC,UAAM,QAAQ,GAAG,aACX,GAAG,WAAW,cAAc,QAAQ,IACpC;AACN,WAAO,KAAK,EAAE,GAAG,IAAI,GAAG;AAAA,EAC5B,CAAC;AACD,KAAG,qBAAqB,YAAY;AAChC,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASJ;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,EAAE,EAAE,GAAG,IAAI,MAAM,MAAS;AACjC,UAAM,QAAQ,GAAG,aACX,GAAG,WAAW,cAAc,QAAQ,IACpC;AACN,WAAO,KAAK,EAAE,GAAG,IAAI,GAAG;AAAA,EAC5B,CAAC;AACD,KAAG,oBAAoB,YAAY;AAC/B,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOJ;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,EAAE,EAAE,GAAG,IAAI,MAAM,MAAS;AACjC,UAAM,QAAQ,GAAG,aACX,GAAG,WAAW,cAAc,QAAQ,IACpC;AACN,WAAO,KAAK,EAAE,GAAG,IAAI,GAAG;AAAA,EAC5B,CAAC;AACD,KAAG,gCAAgC,YAAY;AAC3C,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQJ;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,EAAE,EAAE,GAAG,IAAI,MAAM,MAAS;AACjC,UAAM,QAAQ,GAAG,aACX,GAAG,WAAW,cAAc,QAAQ,IACpC;AACN,WAAO,KAAK,EAAE,GAAG,IAAI,GAAG;AAAA,EAC5B,CAAC;AACD,KAAG,oCAAoC,YAAY;AAC/C,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQJ;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,EAAE,EAAE,GAAG,IAAI,MAAM,MAAS;AACjC,UAAM,QAAQ,GAAG,aACX,GAAG,WAAW,cAAc,QAAQ,IACpC;AACN,WAAO,KAAK,EAAE,GAAG,IAAI,GAAG;AAAA,EAC5B,CAAC;AACD,KAAG,gDAAgD,YAAY;AAC3D,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASJ;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,EAAE,EAAE,GAAG,IAAI,MAAM,MAAS;AACjC,UAAM,QAAQ,GAAG,aACX,GAAG,WAAW,cAAc,QAAQ,IACpC;AACN,WAAO,KAAK,EAAE,GAAG,IAAI,GAAG;AAAA,EAC5B,CAAC;AACD,KAAG,mBAAmB,YAAY;AAC9B,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQJ;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,EAAE,EAAE,GAAG,IAAI,MAAM,MAAS;AACjC,UAAM,QAAQ,GAAG,aACX,GAAG,WAAW,cAAc,QAAQ,IACpC;AACN,WAAO,KAAK,EAAE,GAAG,IAAI,GAAG;AAAA,EAC5B,CAAC;AACD,KAAG,+BAA+B,YAAY;AAC1C,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASJ;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,EAAE,EAAE,GAAG,IAAI,MAAM,MAAS;AACjC,UAAM,QAAQ,GAAG,aACX,GAAG,WAAW,cAAc,QAAQ,IACpC;AACN,WAAO,KAAK,EAAE,GAAG,IAAI,GAAG;AAAA,EAC5B,CAAC;AACD,KAAG,WAAW,YAAY;AACtB,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQJ;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,EAAE,EAAE,GAAG,IAAI,MAAM,MAAS;AACjC,UAAM,QAAQ,GAAG,aACX,GAAG,WAAW,cAAc,UAAU,IACtC;AACN,WAAO,KAAK,EAAE,GAAG,IAAI,GAAG;AAAA,EAC5B,CAAC;AACD,KAAG,uBAAuB,YAAY;AAClC,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASJ;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,EAAE,EAAE,GAAG,IAAI,MAAM,MAAS;AACjC,UAAM,QAAQ,GAAG,aACX,GAAG,WAAW,cAAc,UAAU,IACtC;AACN,WAAO,KAAK,EAAE,GAAG,IAAI,GAAG;AAAA,EAC5B,CAAC;AACD,KAAG,sBAAsB,YAAY;AACjC,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOJ;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,EAAE,EAAE,GAAG,IAAI,MAAM,MAAS;AACjC,UAAM,QAAQ,GAAG,aACX,GAAG,WAAW,cAAc,UAAU,IACtC;AACN,WAAO,KAAK,EAAE,GAAG,IAAI,GAAG;AAAA,EAC5B,CAAC;AACD,KAAG,kCAAkC,YAAY;AAC7C,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQJ;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,EAAE,EAAE,GAAG,IAAI,MAAM,MAAS;AACjC,UAAM,QAAQ,GAAG,aACX,GAAG,WAAW,cAAc,UAAU,IACtC;AACN,WAAO,KAAK,EAAE,GAAG,IAAI,GAAG;AAAA,EAC5B,CAAC;AACD,KAAG,qBAAqB,YAAY;AAChC,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQJ;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,EAAE,EAAE,GAAG,IAAI,MAAM,MAAS;AACjC,UAAM,QAAQ,GAAG,aACX,GAAG,WAAW,cAAc,UAAU,IACtC;AACN,WAAO,KAAK,EAAE,GAAG,IAAI,GAAG;AAAA,EAC5B,CAAC;AACD,KAAG,iCAAiC,YAAY;AAC5C,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASJ;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,EAAE,EAAE,GAAG,IAAI,MAAM,MAAS;AACjC,UAAM,QAAQ,GAAG,aACX,GAAG,WAAW,cAAc,UAAU,IACtC;AACN,WAAO,KAAK,EAAE,GAAG,IAAI,GAAG;AAAA,EAC5B,CAAC;AACD,KAAG,sCAAsC,YAAY;AACjD,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQJ;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,EAAE,EAAE,GAAG,IAAI,MAAM,MAAS;AACjC,UAAM,QAAQ,GAAG,aACX,GAAG,WAAW,cAAc,UAAU,IACtC;AACN,WAAO,KAAK,EAAE,GAAG,IAAI,GAAG;AAAA,EAC5B,CAAC;AACD,KAAG,kDAAkD,YAAY;AAC7D,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASJ;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,EAAE,EAAE,GAAG,IAAI,MAAM,MAAS;AACjC,UAAM,QAAQ,GAAG,aACX,GAAG,WAAW,cAAc,UAAU,IACtC;AACN,WAAO,KAAK,EAAE,GAAG,IAAI,GAAG;AAAA,EAC5B,CAAC;AACD,KAAG,kBAAkB,YAAY;AAC7B,QAAI,gBAAyC;AAC7C,UAAM,YAAY,CAAC,UAAuB;AACtC,YAAM,OAAO,MAAM,aAAa;AAChC,sBAAgB,KAAK,CAAC;AAAA,IAC1B;AACA,aAAS,iBAAiB,WAAW,SAAS;AAC9C,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA,IAGJ;AACA,UAAM,eAAe,EAAE;AAEvB,OAAG,MAAM;AACT,UAAM,eAAe,EAAE;AAEvB,WAAO,kBAAkB,GAAG,YAAY,EAAE,GAAG,GAAG;AAChD,aAAS,oBAAoB,WAAW,SAAS;AAAA,EACrD,CAAC;AACD,KAAG,wCAAwC,YAAY;AACnD,QAAI,gBAAyC;AAC7C,UAAM,YAAY,CAAC,UAAuB;AACtC,YAAM,OAAO,MAAM,aAAa;AAChC,sBAAgB,KAAK,CAAC;AAAA,IAC1B;AACA,aAAS,iBAAiB,WAAW,SAAS;AAC9C,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMJ;AACA,UAAM,eAAe,EAAE;AAEvB,OAAG,MAAM;AACT,UAAM,eAAe,EAAE;AAEvB,WAAO,kBAAkB,GAAG,YAAY,EAAE,GAAG,GAAG;AAChD,WAAO,SAAS,kBAAkB,EAAE,EAAE,GAAG,GAAG;AAC5C,aAAS,oBAAoB,WAAW,SAAS;AAEjD,OAAG,MAAM;AACT,UAAM,eAAe,EAAE;AAEvB,WAAO,kBAAkB,GAAG,YAAY,EAAE,GAAG,GAAG;AAChD,WAAO,SAAS,kBAAkB,EAAE,EAAE,GAAG,GAAG;AAC5C,aAAS,oBAAoB,WAAW,SAAS;AAAA,EACrD,CAAC;AACD,KAAG,iBAAiB,YAAY;AAC5B,UAAM,YAAY;AAClB,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA,IAGJ;AACA,UAAM,eAAe,EAAE;AAEvB,OAAG,aAAa,QAAQ;AACxB,OAAG,aAAa,cAAc,IAAI,MAAM,OAAO,CAAC;AAEhD,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,SAAS;AAAA,EACvC,CAAC;AACD,KAAG,WAAW,YAAY;AACtB,UAAM,YAAY;AAClB,UAAM,KAAK,MAAM;AAAA,MACb;AAAA,sCAC0B;AAAA;AAAA,IAE9B;AACA,UAAM,eAAe,EAAE;AACvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,SAAS;AAEnC,OAAG,MAAM;AACT,OAAG,OAAO;AACV,UAAM,SAAS,EAAE,OAAO,YAAY,CAAC;AACrC,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,EAChC,CAAC;AACD,KAAG,qBAAqB,YAAY;AAChC,UAAM,YAAY;AAClB,UAAM,KAAK,MAAM;AAAA,MACb;AAAA,sCAC0B;AAAA;AAAA,IAE9B;AACA,UAAM,eAAe,EAAE;AACvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,SAAS;AAEnC,OAAG,MAAM;AACT,OAAG,kBAAkB,GAAG,QAAQ,MAAM;AACtC,UAAM,SAAS,EAAE,OAAO,YAAY,CAAC;AACrC,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,MAAM;AAAA,EACpC,CAAC;AACD,KAAG,mCAAmC,YAAY;AAC9C,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA,IAGJ;AACA,OAAG,MAAM;AACT,UAAM,SAAS;AAAA,MACX,MAAM;AAAA,IACV,CAAC;AACD,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,IAAI;AAC9B,WAAO,GAAG,cAAc,CAAC,EAAE,GAAG,GAAG;AAEjC,UAAM,SAAS;AAAA,MACX,MAAM;AAAA,IACV,CAAC;AACD,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,KAAK;AAC/B,WAAO,GAAG,cAAc,CAAC,EAAE,GAAG,GAAG;AAAA,EACrC,CAAC;AACD,KAAG,qBAAqB,YAAY;AAChC,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQJ;AACA,UAAM,eAAe,EAAE;AACvB,OAAG,MAAM;AAET,UAAM,SAAS;AAAA,MACX,MAAM;AAAA,IACV,CAAC;AACD,UAAM,eAAe,EAAE;AACvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,GAAG;AAC7B,WAAO,GAAG,cAAc,CAAC,EAAE,GAAG,GAAG;AAEjC,UAAM,SAAS;AAAA,MACX,MAAM;AAAA,IACV,CAAC;AACD,UAAM,eAAe,EAAE;AACvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,IAAI;AAC9B,WAAO,GAAG,cAAc,CAAC;AAEzB,UAAM,SAAS;AAAA,MACX,MAAM;AAAA,IACV,CAAC;AACD,UAAM,eAAe,EAAE;AACvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,KAAK;AAC/B,WAAO,GAAG,cAAc,CAAC;AAEzB,UAAM,SAAS;AAAA,MACX,MAAM;AAAA,IACV,CAAC;AACD,UAAM,eAAe,EAAE;AACvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,KAAK;AAC/B,WAAO,GAAG,cAAc,CAAC;AAEzB,UAAM,SAAS;AAAA,MACX,OAAO;AAAA,IACX,CAAC;AACD,UAAM,eAAe,EAAE;AACvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,IAAI;AAC9B,WAAO,GAAG,cAAc,CAAC;AAEzB,UAAM,SAAS;AAAA,MACX,OAAO;AAAA,IACX,CAAC;AACD,UAAM,eAAe,EAAE;AACvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,GAAG;AAC7B,WAAO,GAAG,cAAc,CAAC,EAAE,GAAG,GAAG;AAAA,EACrC,CAAC;AACD,KAAG,+BAA+B,YAAY;AAC1C,UAAM,YAAY;AAClB,QAAI,cAAc;AAClB,UAAM,WAAW,CAAC,UAAuB;AACrC,oBAAc,MAAM,aAAa,EAAE,CAAC;AAAA,IACxC;AACA,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA,8BAGkB;AAAA;AAAA;AAAA,IAGtB;AACA,UAAM,eAAe,EAAE;AAEvB,OAAG,aAAa,QAAQ;AACxB,OAAG,aAAa,cAAc,IAAI,MAAM,OAAO,CAAC;AAChD,OAAG,aAAa,cAAc,IAAI,MAAM,QAAQ,CAAC;AAEjD,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,SAAS;AACnC,UAAM,aAAa;AACnB,WAAO,UAAU,EAAE,GAAG,MAAM,EAAE;AAAA,EAClC,CAAC;AACD,KAAG,2CAA2C,YAAY;AACtD,QAAI,KAAK,MAAM;AAAA,MACX;AAAA;AAAA;AAAA,IAGJ;AACA,UAAM,eAAe,EAAE;AACvB,QAAI,QAAQ,GAAG,aAAa,GAAG,WAAW,cAAc,OAAO,IAAI;AACnE,WAAO,KAAK,EAAE,GAAG;AACjB,QAAI,OAAO;AACP,aAAO,MAAM,aAAa,cAAc,CAAC,EAAE,GAAG,MAAM,KAAK;AAAA,IAC7D;AAEA,SAAK,MAAM;AAAA,MACP;AAAA;AAAA;AAAA,IAGJ;AACA,UAAM,eAAe,EAAE;AACvB,YAAQ,GAAG,aAAa,GAAG,WAAW,cAAc,OAAO,IAAI;AAC/D,WAAO,KAAK,EAAE,GAAG;AACjB,QAAI,OAAO;AACP,aAAO,MAAM,aAAa,cAAc,CAAC,EAAE,GAAG,IAAI;AAAA,IACtD;AAAA,EACJ,CAAC;AACD,KAAG,+BAA+B,YAAY;AAC1C,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA,IAGJ;AACA,UAAM,eAAe,EAAE;AACvB,WAAO,GAAG,OAAO,EAAE,GAAG,GAAG;AAEzB,OAAG,WAAW;AACd,UAAM,eAAe,EAAE;AACvB,WAAO,GAAG,OAAO,EAAE,GAAG,GAAG;AAAA,EAC7B,CAAC;AACD,KAAG,0BAA0B,YAAY;AACrC,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA,IAGJ;AACA,UAAM,eAAe,EAAE;AACvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAE5B,UAAM,eAAe,GAAG;AAExB,OAAG,aAAa,QAAQ;AACxB,iBAAa,cAAc,IAAI,WAAW,OAAO,CAAC;AAElD,UAAM,eAAe,EAAE;AACvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,MAAM;AAEhC,iBAAa,QAAQ;AACrB,iBAAa,kBAAkB,GAAG,CAAC;AACnC,iBAAa,cAAc,IAAI,WAAW,OAAO,CAAC;AAElD,UAAM,eAAe,EAAE;AACvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,OAAO;AACjC,WAAO,aAAa,cAAc,EAAE,GAAG,MAAM,CAAC;AAE9C,iBAAa,QAAQ;AACrB,iBAAa,kBAAkB,GAAG,CAAC;AACnC,iBAAa,cAAc,IAAI,WAAW,OAAO,CAAC;AAElD,UAAM,eAAe,EAAE;AACvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,OAAO;AACjC,WAAO,aAAa,cAAc,EAAE,GAAG,MAAM,CAAC;AAAA,EAClD,CAAC;AACD,WAAS,kBAAkB,MAAM;AAM7B,OAAG,4CAA4C,YAAY;AACvD,YAAM,QAAyB;AAAA,QAC3B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AACA,uBAAiB,KAAK,OAAO;AACzB,cAAM,KAAK,MAAM;AAAA,UACb;AAAA,6CACyB;AAAA;AAAA,QAE7B;AACA,eAAO,GAAG,IAAI,EAAE,OAAO,CAAC;AAExB,WAAG,aAAa,QAAQ,KAAK;AAC7B,eAAO,GAAG,IAAI,EAAE,OAAO,KAAK;AAAA,MAChC;AAAA,IACJ,CAAC;AACD,OAAG,uDAAuD,YAAY;AAClE,YAAM,MAAM,MAAM;AAAA,QACd;AAAA;AAAA;AAAA,MAGJ;AAEA,YAAM,MAAM,MAAM;AAAA,QACd;AAAA;AAAA;AAAA,MAGJ;AACA,aAAO,IAAI,IAAI,EAAE,OAAO,MAAM;AAC9B,aAAO,IAAI,IAAI,EAAE,OAAO,MAAM;AAE9B,UAAI,aAAa,QAAQ,QAAQ;AACjC,aAAO,IAAI,IAAI,EAAE,OAAO,MAAM;AAAA,IAClC,CAAC;AACD,OAAG,uCAAuC,YAAY;AAClD,YAAM,KAAK,MAAM;AAAA,QACb;AAAA;AAAA;AAAA,MAGJ;AAEA,SAAG,OAAO;AACV,YAAM,eAAe,EAAE;AAEvB,aAAO,GAAG,aAAa,MAAM,CAAC,EAAE,OAAO,OAAO;AAC9C,aAAO,GAAG,IAAI,EAAE,OAAO,OAAO;AAAA,IAClC,CAAC;AACD,OAAG,yDAAyD,YAAY;AACpE,YAAM,KAAK,MAAM;AAAA,QACb;AAAA;AAAA;AAAA,MAGJ;AAIA,SAAG,OAAO;AACV,YAAM,eAAe,EAAE;AAEvB,aAAO,GAAG,aAAa,MAAM,CAAC,EAAE,OAAO,OAAO;AAC9C,aAAO,GAAG,IAAI,EAAE,OAAO,MAAM;AAAA,IACjC,CAAC;AAAA,EACL,CAAC;AACD,WAAS,aAAa,MAAM;AACxB,UAAM,OAAO;AACb,UAAM,cAAc;AACpB,UAAM,sBAAsB;AAC5B,OAAG,2CAA2C,YAAY;AACtD,YAAM,KAAK,MAAM,WAAW;AAAA,sCACF;AAAA,qDACe;AAAA;AAAA,aAExC;AAED,YAAM,eAAe,EAAE;AAEvB,YAAM,kBAAkB,MAAM,WAAW;AAAA,IAC7C,CAAC;AACD,OAAG,qDAAqD,YAAY;AAChE,YAAM,KAAK,MAAM,WAAW;AAAA,sCACF;AAAA;AAAA,0BAEZ;AAAA;AAAA;AAAA,aAGb;AAED,YAAM,eAAe,EAAE;AAEvB,YAAM,kBAAkB,MAAM,WAAW;AAAA,IAC7C,CAAC;AACD,OAAG,4CAA4C,YAAY;AACvD,YAAM,KAAK,MAAM,WAAsB;AAAA,sCACb;AAAA,qDACe;AAAA;AAAA,0BAE3B;AAAA;AAAA;AAAA,aAGb;AACD,YAAM,mBAAmB,GAAG;AAAA,QACxB;AAAA,MACJ;AAEA,YAAM,eAAe,EAAE;AAEvB,aAAO,iBAAiB,OAAO,EAAE,GAAG,MAAM,SAAS;AACnD,YAAM,kBAAkB,MAAM,WAAW;AAEzC,SAAG,UAAU;AACb,YAAM,eAAe,EAAE;AAEvB,aAAO,iBAAiB,OAAO,EAAE,GAAG,MAAM,UAAU;AAKpD,UAAI;AACA,cAAM,kBAAkB,MAAM,mBAAmB;AACjD,YAAI,UAAU,GAAG;AACb,gBAAM,IAAI,MAAM,+BAA+B;AAAA,QACnD;AAAA,MACJ,SAAS,OAAP;AACE,YAAI,CAAC,UAAU,GAAG;AACd,gBAAM;AAAA,QACV;AAAA,MACJ;AAAA,IACJ,CAAC;AACD,OAAG,uDAAuD,YAAY;AAClE,YAAM,KAAK,MAAM,WAAsB;AAAA,sCACb;AAAA;AAAA,0BAEZ;AAAA;AAAA;AAAA,0BAGA;AAAA;AAAA;AAAA,aAGb;AACD,YAAM,mBAAmB,GAAG;AAAA,QACxB;AAAA,MACJ;AAEA,YAAM,eAAe,EAAE;AAEvB,aAAO,iBAAiB,OAAO,EAAE,GAAG,MAAM,SAAS;AACnD,YAAM,kBAAkB,MAAM,WAAW;AAEzC,SAAG,UAAU;AACb,YAAM,eAAe,EAAE;AAEvB,aAAO,iBAAiB,OAAO,EAAE,GAAG,MAAM,UAAU;AAKpD,UAAI;AACA,cAAM,kBAAkB,MAAM,mBAAmB;AACjD,YAAI,UAAU,GAAG;AACb,gBAAM,IAAI,MAAM,+BAA+B;AAAA,QACnD;AAAA,MACJ,SAAS,OAAP;AACE,YAAI,CAAC,UAAU,GAAG;AACd,gBAAM;AAAA,QACV;AAAA,MACJ;AAAA,IACJ,CAAC;AAAA,EACL,CAAC;AACL,CAAC;",
6
6
  "names": []
7
7
  }