@spectrum-web-components/number-field 0.34.0 → 0.35.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.
@@ -663,6 +663,10 @@
663
663
  "privacy": "protected",
664
664
  "readonly": true
665
665
  },
666
+ {
667
+ "kind": "field",
668
+ "name": "applyFocusElementLabel"
669
+ },
666
670
  {
667
671
  "kind": "field",
668
672
  "name": "_numberParser",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spectrum-web-components/number-field",
3
- "version": "0.34.0",
3
+ "version": "0.35.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -58,17 +58,17 @@
58
58
  ],
59
59
  "dependencies": {
60
60
  "@internationalized/number": "^3.1.0",
61
- "@spectrum-web-components/action-button": "^0.34.0",
62
- "@spectrum-web-components/base": "^0.34.0",
63
- "@spectrum-web-components/icon": "^0.34.0",
64
- "@spectrum-web-components/icons-ui": "^0.34.0",
65
- "@spectrum-web-components/reactive-controllers": "^0.34.0",
66
- "@spectrum-web-components/shared": "^0.34.0",
67
- "@spectrum-web-components/textfield": "^0.34.0"
61
+ "@spectrum-web-components/action-button": "^0.35.0",
62
+ "@spectrum-web-components/base": "^0.35.0",
63
+ "@spectrum-web-components/icon": "^0.35.0",
64
+ "@spectrum-web-components/icons-ui": "^0.35.0",
65
+ "@spectrum-web-components/reactive-controllers": "^0.35.0",
66
+ "@spectrum-web-components/shared": "^0.35.0",
67
+ "@spectrum-web-components/textfield": "^0.35.0"
68
68
  },
69
69
  "devDependencies": {
70
70
  "@formatjs/intl-numberformat": "^8.3.5",
71
- "@spectrum-css/stepper": "^4.0.38"
71
+ "@spectrum-css/stepper": "^4.0.43"
72
72
  },
73
73
  "types": "./src/index.d.ts",
74
74
  "customElements": "custom-elements.json",
@@ -76,5 +76,5 @@
76
76
  "./sp-*.js",
77
77
  "./**/*.dev.js"
78
78
  ],
79
- "gitHead": "f9b3294d67cdd52b2c36897cdc1c20ceaeb019cf"
79
+ "gitHead": "1ee5a6c92838cdf48321276d97f61c20f8476ac1"
80
80
  }
@@ -91,6 +91,7 @@ export declare class NumberField extends TextfieldBase {
91
91
  private _numberFormatter?;
92
92
  private _numberFormatterFocused?;
93
93
  protected get numberParser(): NumberParser;
94
+ applyFocusElementLabel: (value?: string) => void;
94
95
  private _numberParser?;
95
96
  private _numberParserFocused?;
96
97
  protected renderField(): TemplateResult;
@@ -98,6 +98,9 @@ export class NumberField extends TextfieldBase {
98
98
  this.changeCount = 0;
99
99
  this.languageResolver = new LanguageResolutionController(this);
100
100
  this.wasIndeterminate = false;
101
+ this.applyFocusElementLabel = (value) => {
102
+ this.appliedLabel = value;
103
+ };
101
104
  }
102
105
  static get styles() {
103
106
  return [...super.styles, styles, chevronStyles];
@@ -456,7 +459,8 @@ export class NumberField extends TextfieldBase {
456
459
  >
457
460
  <sp-action-button
458
461
  class="step-up"
459
- label="Increment"
462
+ aria-describedby=${this.helpTextId}
463
+ label=${"Increase " + this.appliedLabel}
460
464
  tabindex="-1"
461
465
  ?focused=${this.focused}
462
466
  ?disabled=${this.disabled || this.readonly || typeof this.max !== "undefined" && this.value === this.max}
@@ -466,7 +470,8 @@ export class NumberField extends TextfieldBase {
466
470
  </sp-action-button>
467
471
  <sp-action-button
468
472
  class="step-down"
469
- label="Decrement"
473
+ aria-describedby=${this.helpTextId}
474
+ label=${"Decrease " + this.appliedLabel}
470
475
  tabindex="-1"
471
476
  ?focused=${this.focused}
472
477
  ?disabled=${this.disabled || this.readonly || typeof this.min !== "undefined" && this.value === this.min}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["NumberField.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 {\n CSSResultArray,\n html,\n PropertyValues,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport {\n LanguageResolutionController,\n languageResolverUpdatedSymbol,\n} from '@spectrum-web-components/reactive-controllers/src/LanguageResolution.js';\nimport { streamingListener } from '@spectrum-web-components/base/src/streaming-listener.js';\nimport { NumberFormatter, NumberParser } from '@internationalized/number';\n\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron75.js';\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron100.js';\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron200.js';\nimport '@spectrum-web-components/action-button/sp-action-button.js';\nimport {\n isAndroid,\n isIPhone,\n} from '@spectrum-web-components/shared/src/platform.js';\nimport { TextfieldBase } from '@spectrum-web-components/textfield';\nimport chevronStyles from '@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js';\nimport styles from './number-field.css.js';\n\nexport const FRAMES_PER_CHANGE = 5;\n// Debounce duration for inserting a `change` event after a batch of `wheel` originating `input` events.\nexport const CHANGE_DEBOUNCE_MS = 100;\nexport const indeterminatePlaceholder = '-';\nexport const remapMultiByteCharacters: Record<string, string> = {\n '\uFF11': '1',\n '\uFF12': '2',\n '\uFF13': '3',\n '\uFF14': '4',\n '\uFF15': '5',\n '\uFF16': '6',\n '\uFF17': '7',\n '\uFF18': '8',\n '\uFF19': '9',\n '\uFF10': '0',\n '\u3001': ',',\n '\uFF0C': ',',\n '\u3002': '.',\n '\uFF0E': '.',\n '\uFF05': '%',\n '\uFF0B': '+',\n \u30FC: '-',\n};\n\nconst chevronIcon: Record<string, (dir: 'Down' | 'Up') => TemplateResult> = {\n s: (dir) => html`\n <sp-icon-chevron75\n slot=\"icon\"\n class=\"stepper-icon spectrum-UIIcon-Chevron${dir}75\"\n ></sp-icon-chevron75>\n `,\n m: (dir) => html`\n <sp-icon-chevron75\n slot=\"icon\"\n class=\"stepper-icon spectrum-UIIcon-Chevron${dir}75\"\n ></sp-icon-chevron75>\n `,\n l: (dir) => html`\n <sp-icon-chevron100\n slot=\"icon\"\n class=\"stepper-icon spectrum-UIIcon-Chevron${dir}100\"\n ></sp-icon-chevron100>\n `,\n xl: (dir) => html`\n <sp-icon-chevron200\n slot=\"icon\"\n class=\"stepper-icon spectrum-UIIcon-Chevron${dir}200\"\n ></sp-icon-chevron200>\n `,\n};\n\n/**\n * @element sp-number-field\n * @slot help-text - default or non-negative help text to associate to your form element\n * @slot negative-help-text - negative help text to associate to your form element when `invalid`\n */\nexport class NumberField extends TextfieldBase {\n public static override get styles(): CSSResultArray {\n return [...super.styles, styles, chevronStyles];\n }\n\n @query('.buttons')\n private buttons!: HTMLDivElement;\n\n @property({ type: Boolean, reflect: true })\n public override focused = false;\n\n _forcedUnit = '';\n\n /**\n * An `&lt;sp-number-field&gt;` element will process its numeric value with\n * `new Intl.NumberFormat(this.resolvedLanguage, this.formatOptions).format(this.valueAsNumber)`\n * in order to prepare it for visual delivery in the input. In order to customize this\n * processing supply your own `Intl.NumberFormatOptions` object here.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat\n */\n @property({ type: Object, attribute: 'format-options' })\n public formatOptions: Intl.NumberFormatOptions = {};\n\n /**\n * Whether the stepper UI is hidden or not.\n */\n @property({ type: Boolean, reflect: true, attribute: 'hide-stepper' })\n public hideStepper = false;\n\n @property({ type: Boolean, reflect: true })\n public indeterminate = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'keyboard-focused' })\n public keyboardFocused = false;\n\n @property({ type: Number })\n public max?: number;\n\n @property({ type: Number })\n public min?: number;\n\n /**\n * The distance by which to alter the value of the element when taking a \"step\".\n *\n * When `this.formatOptions.style === 'percentage'` the default step will be\n * set to 0.01 unless otherwise supplied to the element.\n */\n @property({ type: Number })\n public step?: number;\n\n public managedInput = false;\n\n @property({ type: Number, reflect: true, attribute: 'step-modifier' })\n public stepModifier = 10;\n\n @property({ type: Number })\n public override set value(rawValue: number) {\n const value = this.validateInput(rawValue);\n if (value === this.value) {\n return;\n }\n const oldValue = this._value;\n this._value = value;\n this.requestUpdate('value', oldValue);\n }\n\n public override get value(): number {\n return this._value;\n }\n\n private get inputValue(): string {\n return this.indeterminate\n ? this.formattedValue\n : this.inputElement.value;\n }\n\n public override _value = NaN;\n private _trackingValue = '';\n\n /**\n * Retreive the value of the element parsed to a Number.\n */\n public get valueAsString(): string {\n return this._value.toString();\n }\n\n public set valueAsString(value: string) {\n this.value = this.numberParser.parse(value);\n }\n\n public get formattedValue(): string {\n if (isNaN(this.value)) return '';\n return (\n this.numberFormatter.format(this.value) +\n (this.focused ? '' : this._forcedUnit)\n );\n }\n\n private convertValueToNumber(value: string): number {\n if (isIPhone() && this.inputElement.inputMode === 'decimal') {\n const parts = this.numberFormatter.formatToParts(1000.1);\n const sourceDecimal = value\n .split('')\n .find((char) => char === ',' || char === '.');\n const replacementDecimal = parts.find(\n (part) => part.type === 'decimal'\n )?.value;\n if (sourceDecimal && replacementDecimal) {\n value = value.replace(sourceDecimal, replacementDecimal);\n }\n }\n return this.numberParser.parse(value);\n }\n\n private get _step(): number {\n if (typeof this.step !== 'undefined') {\n return this.step;\n }\n if (this.formatOptions?.style === 'percent') {\n return 0.01;\n }\n return 1;\n }\n\n private nextChange!: number;\n private changeCount = 0;\n private findChange!: (event: PointerEvent) => void;\n private change!: (event: PointerEvent) => void;\n private safty!: number;\n private languageResolver = new LanguageResolutionController(this);\n\n private handlePointerdown(event: PointerEvent): void {\n if (event.button !== 0) {\n event.preventDefault();\n return;\n }\n this.managedInput = true;\n this.buttons.setPointerCapture(event.pointerId);\n const stepUpRect = this.buttons.children[0].getBoundingClientRect();\n const stepDownRect = this.buttons.children[1].getBoundingClientRect();\n this.findChange = (event: PointerEvent) => {\n if (\n event.clientX >= stepUpRect.x &&\n event.clientY >= stepUpRect.y &&\n event.clientX <= stepUpRect.x + stepUpRect.width &&\n event.clientY <= stepUpRect.y + stepUpRect.height\n ) {\n this.change = (event: PointerEvent) =>\n this.increment(event.shiftKey ? this.stepModifier : 1);\n } else if (\n event.clientX >= stepDownRect.x &&\n event.clientY >= stepDownRect.y &&\n event.clientX <= stepDownRect.x + stepDownRect.width &&\n event.clientY <= stepDownRect.y + stepDownRect.height\n ) {\n this.change = (event: PointerEvent) =>\n this.decrement(event.shiftKey ? this.stepModifier : 1);\n }\n };\n this.findChange(event);\n this.startChange(event);\n }\n\n private startChange(event: PointerEvent): void {\n this.changeCount = 0;\n this.doChange(event);\n this.safty = setTimeout(() => {\n this.doNextChange(event);\n }, 400) as unknown as number;\n }\n\n private doChange(event: PointerEvent): void {\n this.change(event);\n }\n\n private handlePointermove(event: PointerEvent): void {\n this.findChange(event);\n }\n\n private handlePointerup(event: PointerEvent): void {\n this.buttons.releasePointerCapture(event.pointerId);\n cancelAnimationFrame(this.nextChange);\n clearTimeout(this.safty);\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\n this.managedInput = false;\n }\n\n private doNextChange(event: PointerEvent): number {\n this.changeCount += 1;\n if (this.changeCount % FRAMES_PER_CHANGE === 0) {\n this.doChange(event);\n }\n return requestAnimationFrame(() => {\n this.nextChange = this.doNextChange(event);\n });\n }\n\n private stepBy(count: number): void {\n if (this.disabled || this.readonly) {\n return;\n }\n const min = typeof this.min !== 'undefined' ? this.min : 0;\n let value = this.value;\n value += count * this._step;\n if (isNaN(this.value)) {\n this.value = min;\n } else {\n this.value = value;\n }\n this.dispatchEvent(\n new Event('input', { bubbles: true, composed: true })\n );\n this.indeterminate = false;\n this.focus();\n }\n\n private increment(factor = 1): void {\n this.stepBy(1 * factor);\n }\n\n private decrement(factor = 1): void {\n this.stepBy(-1 * factor);\n }\n\n private handleKeydown(event: KeyboardEvent): void {\n switch (event.code) {\n case 'ArrowUp':\n event.preventDefault();\n this.increment(event.shiftKey ? this.stepModifier : 1);\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.decrement(event.shiftKey ? this.stepModifier : 1);\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\n break;\n }\n }\n\n private queuedChangeEvent!: number;\n\n protected onScroll(event: WheelEvent): void {\n event.preventDefault();\n this.managedInput = true;\n const direction = event.shiftKey\n ? event.deltaX / Math.abs(event.deltaX)\n : event.deltaY / Math.abs(event.deltaY);\n if (direction !== 0 && !isNaN(direction)) {\n this.stepBy(direction * (event.shiftKey ? this.stepModifier : 1));\n clearTimeout(this.queuedChangeEvent);\n this.queuedChangeEvent = setTimeout(() => {\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\n }, CHANGE_DEBOUNCE_MS) as unknown as number;\n }\n this.managedInput = false;\n }\n\n protected override onFocus(): void {\n super.onFocus();\n this._trackingValue = this.inputValue;\n this.keyboardFocused = !this.readonly && true;\n this.addEventListener('wheel', this.onScroll, { passive: false });\n }\n\n protected override onBlur(): void {\n super.onBlur();\n this.keyboardFocused = !this.readonly && false;\n this.removeEventListener('wheel', this.onScroll);\n }\n\n private handleFocusin(): void {\n this.focused = !this.readonly && true;\n this.keyboardFocused = !this.readonly && true;\n }\n\n private handleFocusout(): void {\n this.focused = !this.readonly && false;\n this.keyboardFocused = !this.readonly && false;\n }\n\n private wasIndeterminate = false;\n private indeterminateValue?: number;\n\n protected override handleChange(): void {\n const value = this.convertValueToNumber(this.inputValue);\n if (this.wasIndeterminate) {\n this.wasIndeterminate = false;\n this.indeterminateValue = undefined;\n if (isNaN(value)) {\n this.indeterminate = true;\n return;\n }\n }\n this.value = value;\n super.handleChange();\n }\n\n protected override handleInput(): void {\n if (this.indeterminate) {\n this.wasIndeterminate = true;\n this.indeterminateValue = this.value;\n this.inputElement.value = this.inputElement.value.replace(\n indeterminatePlaceholder,\n ''\n );\n }\n const { value: originalValue, selectionStart } = this.inputElement;\n const value = originalValue\n .split('')\n .map((char) => remapMultiByteCharacters[char] || char)\n .join('');\n if (this.numberParser.isValidPartialNumber(value)) {\n const valueAsNumber = this.convertValueToNumber(value);\n if (!value && this.indeterminateValue) {\n this.indeterminate = true;\n this._value = this.indeterminateValue;\n } else {\n this.indeterminate = false;\n this._value = this.validateInput(valueAsNumber);\n }\n this._trackingValue = value;\n this.inputElement.value = value;\n return;\n }\n const currentLength = value.length;\n const previousLength = this._trackingValue.length;\n const nextSelectStart =\n (selectionStart || currentLength) -\n (currentLength - previousLength);\n this.inputElement.value = this.indeterminate\n ? indeterminatePlaceholder\n : this._trackingValue;\n this.inputElement.setSelectionRange(nextSelectStart, nextSelectStart);\n }\n\n private validateInput(value: number): number {\n if (typeof this.min !== 'undefined') {\n value = Math.max(this.min, value);\n }\n if (typeof this.max !== 'undefined') {\n value = Math.min(this.max, value);\n }\n // Step shouldn't validate when 0...\n if (this.step) {\n const min = typeof this.min !== 'undefined' ? this.min : 0;\n const moduloStep = (value - min) % this.step;\n const fallsOnStep = moduloStep === 0;\n if (!fallsOnStep) {\n const overUnder = Math.round(moduloStep / this.step);\n if (overUnder === 1) {\n value += this.step - moduloStep;\n } else {\n value -= moduloStep;\n }\n }\n if (typeof this.max !== 'undefined') {\n while (value > this.max) {\n value -= this.step;\n }\n }\n }\n return value;\n }\n\n protected override get displayValue(): string {\n const indeterminateValue = this.focused ? '' : indeterminatePlaceholder;\n return this.indeterminate ? indeterminateValue : this.formattedValue;\n }\n\n protected clearNumberFormatterCache(): void {\n this._numberFormatter = undefined;\n this._numberParser = undefined;\n }\n\n protected get numberFormatter(): NumberFormatter {\n if (!this._numberFormatter || !this._numberFormatterFocused) {\n const {\n style,\n unit,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n unitDisplay,\n ...formatOptionsNoUnit\n } = this.formatOptions;\n if (style !== 'unit') {\n (formatOptionsNoUnit as Intl.NumberFormatOptions).style = style;\n }\n this._numberFormatterFocused = new NumberFormatter(\n this.languageResolver.language,\n formatOptionsNoUnit\n );\n try {\n this._numberFormatter = new NumberFormatter(\n this.languageResolver.language,\n this.formatOptions\n );\n this._forcedUnit = '';\n this._numberFormatter.format(1);\n } catch (error) {\n if (style === 'unit') {\n this._forcedUnit = unit as string;\n }\n this._numberFormatter = this._numberFormatterFocused;\n }\n }\n return this.focused\n ? this._numberFormatterFocused\n : this._numberFormatter;\n }\n\n private _numberFormatter?: NumberFormatter;\n private _numberFormatterFocused?: NumberFormatter;\n\n protected get numberParser(): NumberParser {\n if (!this._numberParser || !this._numberParserFocused) {\n const {\n style,\n unit,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n unitDisplay,\n ...formatOptionsNoUnit\n } = this.formatOptions;\n if (style !== 'unit') {\n (formatOptionsNoUnit as Intl.NumberFormatOptions).style = style;\n }\n this._numberParserFocused = new NumberParser(\n this.languageResolver.language,\n formatOptionsNoUnit\n );\n try {\n this._numberParser = new NumberParser(\n this.languageResolver.language,\n this.formatOptions\n );\n this._forcedUnit = '';\n this._numberParser.parse('0');\n } catch (error) {\n if (style === 'unit') {\n this._forcedUnit = unit as string;\n }\n this._numberParser = this._numberParserFocused;\n }\n }\n return this.focused ? this._numberParserFocused : this._numberParser;\n }\n\n private _numberParser?: NumberParser;\n private _numberParserFocused?: NumberParser;\n\n protected override renderField(): TemplateResult {\n this.autocomplete = 'off';\n return html`\n ${super.renderField()}\n ${this.hideStepper\n ? html``\n : html`\n <span\n class=\"buttons\"\n @focusin=${this.handleFocusin}\n @focusout=${this.handleFocusout}\n ${streamingListener({\n start: ['pointerdown', this.handlePointerdown],\n streamInside: [\n [\n 'pointermove',\n 'pointerenter',\n 'pointerleave',\n 'pointerover',\n 'pointerout',\n ],\n this.handlePointermove,\n ],\n end: [\n [\n 'pointerup',\n 'pointercancel',\n 'pointerleave',\n ],\n this.handlePointerup,\n ],\n })}\n >\n <sp-action-button\n class=\"step-up\"\n label=\"Increment\"\n tabindex=\"-1\"\n ?focused=${this.focused}\n ?disabled=${this.disabled ||\n this.readonly ||\n (typeof this.max !== 'undefined' &&\n this.value === this.max)}\n ?quiet=${this.quiet}\n >\n ${chevronIcon[this.size]('Up')}\n </sp-action-button>\n <sp-action-button\n class=\"step-down\"\n label=\"Decrement\"\n tabindex=\"-1\"\n ?focused=${this.focused}\n ?disabled=${this.disabled ||\n this.readonly ||\n (typeof this.min !== 'undefined' &&\n this.value === this.min)}\n ?quiet=${this.quiet}\n >\n ${chevronIcon[this.size]('Down')}\n </sp-action-button>\n </span>\n `}\n `;\n }\n\n protected override update(changes: PropertyValues): void {\n if (changes.has('formatOptions') || changes.has('resolvedLanguage')) {\n this.clearNumberFormatterCache();\n }\n if (changes.has('value') || changes.has('max') || changes.has('min')) {\n const value = this.numberParser.parse(\n this.formattedValue.replace(this._forcedUnit, '')\n );\n this.value = value;\n }\n super.update(changes);\n }\n\n public override willUpdate(changes: PropertyValues): void {\n this.multiline = false;\n if (changes.has(languageResolverUpdatedSymbol)) {\n this.clearNumberFormatterCache();\n }\n }\n\n protected override firstUpdated(changes: PropertyValues): void {\n super.firstUpdated(changes);\n this.addEventListener('keydown', this.handleKeydown);\n }\n\n protected override updated(changes: PropertyValues<this>): void {\n if (changes.has('min') || changes.has('formatOptions')) {\n let inputMode = 'numeric';\n const hasNegative = typeof this.min !== 'undefined' && this.min < 0;\n const { maximumFractionDigits } =\n this.numberFormatter.resolvedOptions();\n const hasDecimals = maximumFractionDigits > 0;\n /* c8 ignore next 18 */\n if (isIPhone()) {\n // iPhone doesn't have a minus sign in either numeric or decimal.\n // Note this is only for iPhone, not iPad, which always has both\n // minus and decimal in numeric.\n if (hasNegative) {\n inputMode = 'text';\n } else if (hasDecimals) {\n inputMode = 'decimal';\n }\n } else if (isAndroid()) {\n // Android numeric has both a decimal point and minus key.\n // decimal does not have a minus key.\n if (hasNegative) {\n inputMode = 'numeric';\n } else if (hasDecimals) {\n inputMode = 'decimal';\n }\n }\n this.inputElement.inputMode = inputMode;\n }\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n CSSResultArray,\n html,\n PropertyValues,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport {\n LanguageResolutionController,\n languageResolverUpdatedSymbol,\n} from '@spectrum-web-components/reactive-controllers/src/LanguageResolution.js';\nimport { streamingListener } from '@spectrum-web-components/base/src/streaming-listener.js';\nimport { NumberFormatter, NumberParser } from '@internationalized/number';\n\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron75.js';\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron100.js';\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron200.js';\nimport '@spectrum-web-components/action-button/sp-action-button.js';\nimport {\n isAndroid,\n isIPhone,\n} from '@spectrum-web-components/shared/src/platform.js';\nimport { TextfieldBase } from '@spectrum-web-components/textfield';\nimport chevronStyles from '@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js';\nimport styles from './number-field.css.js';\n\nexport const FRAMES_PER_CHANGE = 5;\n// Debounce duration for inserting a `change` event after a batch of `wheel` originating `input` events.\nexport const CHANGE_DEBOUNCE_MS = 100;\nexport const indeterminatePlaceholder = '-';\nexport const remapMultiByteCharacters: Record<string, string> = {\n '\uFF11': '1',\n '\uFF12': '2',\n '\uFF13': '3',\n '\uFF14': '4',\n '\uFF15': '5',\n '\uFF16': '6',\n '\uFF17': '7',\n '\uFF18': '8',\n '\uFF19': '9',\n '\uFF10': '0',\n '\u3001': ',',\n '\uFF0C': ',',\n '\u3002': '.',\n '\uFF0E': '.',\n '\uFF05': '%',\n '\uFF0B': '+',\n \u30FC: '-',\n};\n\nconst chevronIcon: Record<string, (dir: 'Down' | 'Up') => TemplateResult> = {\n s: (dir) => html`\n <sp-icon-chevron75\n slot=\"icon\"\n class=\"stepper-icon spectrum-UIIcon-Chevron${dir}75\"\n ></sp-icon-chevron75>\n `,\n m: (dir) => html`\n <sp-icon-chevron75\n slot=\"icon\"\n class=\"stepper-icon spectrum-UIIcon-Chevron${dir}75\"\n ></sp-icon-chevron75>\n `,\n l: (dir) => html`\n <sp-icon-chevron100\n slot=\"icon\"\n class=\"stepper-icon spectrum-UIIcon-Chevron${dir}100\"\n ></sp-icon-chevron100>\n `,\n xl: (dir) => html`\n <sp-icon-chevron200\n slot=\"icon\"\n class=\"stepper-icon spectrum-UIIcon-Chevron${dir}200\"\n ></sp-icon-chevron200>\n `,\n};\n\n/**\n * @element sp-number-field\n * @slot help-text - default or non-negative help text to associate to your form element\n * @slot negative-help-text - negative help text to associate to your form element when `invalid`\n */\nexport class NumberField extends TextfieldBase {\n public static override get styles(): CSSResultArray {\n return [...super.styles, styles, chevronStyles];\n }\n\n @query('.buttons')\n private buttons!: HTMLDivElement;\n\n @property({ type: Boolean, reflect: true })\n public override focused = false;\n\n _forcedUnit = '';\n\n /**\n * An `&lt;sp-number-field&gt;` element will process its numeric value with\n * `new Intl.NumberFormat(this.resolvedLanguage, this.formatOptions).format(this.valueAsNumber)`\n * in order to prepare it for visual delivery in the input. In order to customize this\n * processing supply your own `Intl.NumberFormatOptions` object here.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat\n */\n @property({ type: Object, attribute: 'format-options' })\n public formatOptions: Intl.NumberFormatOptions = {};\n\n /**\n * Whether the stepper UI is hidden or not.\n */\n @property({ type: Boolean, reflect: true, attribute: 'hide-stepper' })\n public hideStepper = false;\n\n @property({ type: Boolean, reflect: true })\n public indeterminate = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'keyboard-focused' })\n public keyboardFocused = false;\n\n @property({ type: Number })\n public max?: number;\n\n @property({ type: Number })\n public min?: number;\n\n /**\n * The distance by which to alter the value of the element when taking a \"step\".\n *\n * When `this.formatOptions.style === 'percentage'` the default step will be\n * set to 0.01 unless otherwise supplied to the element.\n */\n @property({ type: Number })\n public step?: number;\n\n public managedInput = false;\n\n @property({ type: Number, reflect: true, attribute: 'step-modifier' })\n public stepModifier = 10;\n\n @property({ type: Number })\n public override set value(rawValue: number) {\n const value = this.validateInput(rawValue);\n if (value === this.value) {\n return;\n }\n const oldValue = this._value;\n this._value = value;\n this.requestUpdate('value', oldValue);\n }\n\n public override get value(): number {\n return this._value;\n }\n\n private get inputValue(): string {\n return this.indeterminate\n ? this.formattedValue\n : this.inputElement.value;\n }\n\n public override _value = NaN;\n private _trackingValue = '';\n\n /**\n * Retreive the value of the element parsed to a Number.\n */\n public get valueAsString(): string {\n return this._value.toString();\n }\n\n public set valueAsString(value: string) {\n this.value = this.numberParser.parse(value);\n }\n\n public get formattedValue(): string {\n if (isNaN(this.value)) return '';\n return (\n this.numberFormatter.format(this.value) +\n (this.focused ? '' : this._forcedUnit)\n );\n }\n\n private convertValueToNumber(value: string): number {\n if (isIPhone() && this.inputElement.inputMode === 'decimal') {\n const parts = this.numberFormatter.formatToParts(1000.1);\n const sourceDecimal = value\n .split('')\n .find((char) => char === ',' || char === '.');\n const replacementDecimal = parts.find(\n (part) => part.type === 'decimal'\n )?.value;\n if (sourceDecimal && replacementDecimal) {\n value = value.replace(sourceDecimal, replacementDecimal);\n }\n }\n return this.numberParser.parse(value);\n }\n\n private get _step(): number {\n if (typeof this.step !== 'undefined') {\n return this.step;\n }\n if (this.formatOptions?.style === 'percent') {\n return 0.01;\n }\n return 1;\n }\n\n private nextChange!: number;\n private changeCount = 0;\n private findChange!: (event: PointerEvent) => void;\n private change!: (event: PointerEvent) => void;\n private safty!: number;\n private languageResolver = new LanguageResolutionController(this);\n\n private handlePointerdown(event: PointerEvent): void {\n if (event.button !== 0) {\n event.preventDefault();\n return;\n }\n this.managedInput = true;\n this.buttons.setPointerCapture(event.pointerId);\n const stepUpRect = this.buttons.children[0].getBoundingClientRect();\n const stepDownRect = this.buttons.children[1].getBoundingClientRect();\n this.findChange = (event: PointerEvent) => {\n if (\n event.clientX >= stepUpRect.x &&\n event.clientY >= stepUpRect.y &&\n event.clientX <= stepUpRect.x + stepUpRect.width &&\n event.clientY <= stepUpRect.y + stepUpRect.height\n ) {\n this.change = (event: PointerEvent) =>\n this.increment(event.shiftKey ? this.stepModifier : 1);\n } else if (\n event.clientX >= stepDownRect.x &&\n event.clientY >= stepDownRect.y &&\n event.clientX <= stepDownRect.x + stepDownRect.width &&\n event.clientY <= stepDownRect.y + stepDownRect.height\n ) {\n this.change = (event: PointerEvent) =>\n this.decrement(event.shiftKey ? this.stepModifier : 1);\n }\n };\n this.findChange(event);\n this.startChange(event);\n }\n\n private startChange(event: PointerEvent): void {\n this.changeCount = 0;\n this.doChange(event);\n this.safty = setTimeout(() => {\n this.doNextChange(event);\n }, 400) as unknown as number;\n }\n\n private doChange(event: PointerEvent): void {\n this.change(event);\n }\n\n private handlePointermove(event: PointerEvent): void {\n this.findChange(event);\n }\n\n private handlePointerup(event: PointerEvent): void {\n this.buttons.releasePointerCapture(event.pointerId);\n cancelAnimationFrame(this.nextChange);\n clearTimeout(this.safty);\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\n this.managedInput = false;\n }\n\n private doNextChange(event: PointerEvent): number {\n this.changeCount += 1;\n if (this.changeCount % FRAMES_PER_CHANGE === 0) {\n this.doChange(event);\n }\n return requestAnimationFrame(() => {\n this.nextChange = this.doNextChange(event);\n });\n }\n\n private stepBy(count: number): void {\n if (this.disabled || this.readonly) {\n return;\n }\n const min = typeof this.min !== 'undefined' ? this.min : 0;\n let value = this.value;\n value += count * this._step;\n if (isNaN(this.value)) {\n this.value = min;\n } else {\n this.value = value;\n }\n this.dispatchEvent(\n new Event('input', { bubbles: true, composed: true })\n );\n this.indeterminate = false;\n this.focus();\n }\n\n private increment(factor = 1): void {\n this.stepBy(1 * factor);\n }\n\n private decrement(factor = 1): void {\n this.stepBy(-1 * factor);\n }\n\n private handleKeydown(event: KeyboardEvent): void {\n switch (event.code) {\n case 'ArrowUp':\n event.preventDefault();\n this.increment(event.shiftKey ? this.stepModifier : 1);\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.decrement(event.shiftKey ? this.stepModifier : 1);\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\n break;\n }\n }\n\n private queuedChangeEvent!: number;\n\n protected onScroll(event: WheelEvent): void {\n event.preventDefault();\n this.managedInput = true;\n const direction = event.shiftKey\n ? event.deltaX / Math.abs(event.deltaX)\n : event.deltaY / Math.abs(event.deltaY);\n if (direction !== 0 && !isNaN(direction)) {\n this.stepBy(direction * (event.shiftKey ? this.stepModifier : 1));\n clearTimeout(this.queuedChangeEvent);\n this.queuedChangeEvent = setTimeout(() => {\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\n }, CHANGE_DEBOUNCE_MS) as unknown as number;\n }\n this.managedInput = false;\n }\n\n protected override onFocus(): void {\n super.onFocus();\n this._trackingValue = this.inputValue;\n this.keyboardFocused = !this.readonly && true;\n this.addEventListener('wheel', this.onScroll, { passive: false });\n }\n\n protected override onBlur(): void {\n super.onBlur();\n this.keyboardFocused = !this.readonly && false;\n this.removeEventListener('wheel', this.onScroll);\n }\n\n private handleFocusin(): void {\n this.focused = !this.readonly && true;\n this.keyboardFocused = !this.readonly && true;\n }\n\n private handleFocusout(): void {\n this.focused = !this.readonly && false;\n this.keyboardFocused = !this.readonly && false;\n }\n\n private wasIndeterminate = false;\n private indeterminateValue?: number;\n\n protected override handleChange(): void {\n const value = this.convertValueToNumber(this.inputValue);\n if (this.wasIndeterminate) {\n this.wasIndeterminate = false;\n this.indeterminateValue = undefined;\n if (isNaN(value)) {\n this.indeterminate = true;\n return;\n }\n }\n this.value = value;\n super.handleChange();\n }\n\n protected override handleInput(): void {\n if (this.indeterminate) {\n this.wasIndeterminate = true;\n this.indeterminateValue = this.value;\n this.inputElement.value = this.inputElement.value.replace(\n indeterminatePlaceholder,\n ''\n );\n }\n const { value: originalValue, selectionStart } = this.inputElement;\n const value = originalValue\n .split('')\n .map((char) => remapMultiByteCharacters[char] || char)\n .join('');\n if (this.numberParser.isValidPartialNumber(value)) {\n const valueAsNumber = this.convertValueToNumber(value);\n if (!value && this.indeterminateValue) {\n this.indeterminate = true;\n this._value = this.indeterminateValue;\n } else {\n this.indeterminate = false;\n this._value = this.validateInput(valueAsNumber);\n }\n this._trackingValue = value;\n this.inputElement.value = value;\n return;\n }\n const currentLength = value.length;\n const previousLength = this._trackingValue.length;\n const nextSelectStart =\n (selectionStart || currentLength) -\n (currentLength - previousLength);\n this.inputElement.value = this.indeterminate\n ? indeterminatePlaceholder\n : this._trackingValue;\n this.inputElement.setSelectionRange(nextSelectStart, nextSelectStart);\n }\n\n private validateInput(value: number): number {\n if (typeof this.min !== 'undefined') {\n value = Math.max(this.min, value);\n }\n if (typeof this.max !== 'undefined') {\n value = Math.min(this.max, value);\n }\n // Step shouldn't validate when 0...\n if (this.step) {\n const min = typeof this.min !== 'undefined' ? this.min : 0;\n const moduloStep = (value - min) % this.step;\n const fallsOnStep = moduloStep === 0;\n if (!fallsOnStep) {\n const overUnder = Math.round(moduloStep / this.step);\n if (overUnder === 1) {\n value += this.step - moduloStep;\n } else {\n value -= moduloStep;\n }\n }\n if (typeof this.max !== 'undefined') {\n while (value > this.max) {\n value -= this.step;\n }\n }\n }\n return value;\n }\n\n protected override get displayValue(): string {\n const indeterminateValue = this.focused ? '' : indeterminatePlaceholder;\n return this.indeterminate ? indeterminateValue : this.formattedValue;\n }\n\n protected clearNumberFormatterCache(): void {\n this._numberFormatter = undefined;\n this._numberParser = undefined;\n }\n\n protected get numberFormatter(): NumberFormatter {\n if (!this._numberFormatter || !this._numberFormatterFocused) {\n const {\n style,\n unit,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n unitDisplay,\n ...formatOptionsNoUnit\n } = this.formatOptions;\n if (style !== 'unit') {\n (formatOptionsNoUnit as Intl.NumberFormatOptions).style = style;\n }\n this._numberFormatterFocused = new NumberFormatter(\n this.languageResolver.language,\n formatOptionsNoUnit\n );\n try {\n this._numberFormatter = new NumberFormatter(\n this.languageResolver.language,\n this.formatOptions\n );\n this._forcedUnit = '';\n this._numberFormatter.format(1);\n } catch (error) {\n if (style === 'unit') {\n this._forcedUnit = unit as string;\n }\n this._numberFormatter = this._numberFormatterFocused;\n }\n }\n return this.focused\n ? this._numberFormatterFocused\n : this._numberFormatter;\n }\n\n private _numberFormatter?: NumberFormatter;\n private _numberFormatterFocused?: NumberFormatter;\n\n protected get numberParser(): NumberParser {\n if (!this._numberParser || !this._numberParserFocused) {\n const {\n style,\n unit,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n unitDisplay,\n ...formatOptionsNoUnit\n } = this.formatOptions;\n if (style !== 'unit') {\n (formatOptionsNoUnit as Intl.NumberFormatOptions).style = style;\n }\n this._numberParserFocused = new NumberParser(\n this.languageResolver.language,\n formatOptionsNoUnit\n );\n try {\n this._numberParser = new NumberParser(\n this.languageResolver.language,\n this.formatOptions\n );\n this._forcedUnit = '';\n this._numberParser.parse('0');\n } catch (error) {\n if (style === 'unit') {\n this._forcedUnit = unit as string;\n }\n this._numberParser = this._numberParserFocused;\n }\n }\n return this.focused ? this._numberParserFocused : this._numberParser;\n }\n\n applyFocusElementLabel = (value?: string): void => {\n this.appliedLabel = value;\n };\n\n private _numberParser?: NumberParser;\n private _numberParserFocused?: NumberParser;\n\n protected override renderField(): TemplateResult {\n this.autocomplete = 'off';\n return html`\n ${super.renderField()}\n ${this.hideStepper\n ? html``\n : html`\n <span\n class=\"buttons\"\n @focusin=${this.handleFocusin}\n @focusout=${this.handleFocusout}\n ${streamingListener({\n start: ['pointerdown', this.handlePointerdown],\n streamInside: [\n [\n 'pointermove',\n 'pointerenter',\n 'pointerleave',\n 'pointerover',\n 'pointerout',\n ],\n this.handlePointermove,\n ],\n end: [\n [\n 'pointerup',\n 'pointercancel',\n 'pointerleave',\n ],\n this.handlePointerup,\n ],\n })}\n >\n <sp-action-button\n class=\"step-up\"\n aria-describedby=${this.helpTextId}\n label=${'Increase ' + this.appliedLabel}\n tabindex=\"-1\"\n ?focused=${this.focused}\n ?disabled=${this.disabled ||\n this.readonly ||\n (typeof this.max !== 'undefined' &&\n this.value === this.max)}\n ?quiet=${this.quiet}\n >\n ${chevronIcon[this.size]('Up')}\n </sp-action-button>\n <sp-action-button\n class=\"step-down\"\n aria-describedby=${this.helpTextId}\n label=${'Decrease ' + this.appliedLabel}\n tabindex=\"-1\"\n ?focused=${this.focused}\n ?disabled=${this.disabled ||\n this.readonly ||\n (typeof this.min !== 'undefined' &&\n this.value === this.min)}\n ?quiet=${this.quiet}\n >\n ${chevronIcon[this.size]('Down')}\n </sp-action-button>\n </span>\n `}\n `;\n }\n\n protected override update(changes: PropertyValues): void {\n if (changes.has('formatOptions') || changes.has('resolvedLanguage')) {\n this.clearNumberFormatterCache();\n }\n if (changes.has('value') || changes.has('max') || changes.has('min')) {\n const value = this.numberParser.parse(\n this.formattedValue.replace(this._forcedUnit, '')\n );\n this.value = value;\n }\n super.update(changes);\n }\n\n public override willUpdate(changes: PropertyValues): void {\n this.multiline = false;\n if (changes.has(languageResolverUpdatedSymbol)) {\n this.clearNumberFormatterCache();\n }\n }\n\n protected override firstUpdated(changes: PropertyValues): void {\n super.firstUpdated(changes);\n this.addEventListener('keydown', this.handleKeydown);\n }\n\n protected override updated(changes: PropertyValues<this>): void {\n if (changes.has('min') || changes.has('formatOptions')) {\n let inputMode = 'numeric';\n const hasNegative = typeof this.min !== 'undefined' && this.min < 0;\n const { maximumFractionDigits } =\n this.numberFormatter.resolvedOptions();\n const hasDecimals = maximumFractionDigits > 0;\n /* c8 ignore next 18 */\n if (isIPhone()) {\n // iPhone doesn't have a minus sign in either numeric or decimal.\n // Note this is only for iPhone, not iPad, which always has both\n // minus and decimal in numeric.\n if (hasNegative) {\n inputMode = 'text';\n } else if (hasDecimals) {\n inputMode = 'decimal';\n }\n } else if (isAndroid()) {\n // Android numeric has both a decimal point and minus key.\n // decimal does not have a minus key.\n if (hasNegative) {\n inputMode = 'numeric';\n } else if (hasDecimals) {\n inputMode = 'decimal';\n }\n }\n this.inputElement.inputMode = inputMode;\n }\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["event"]
7
7
  }
@@ -18,7 +18,7 @@
18
18
  slot="icon"
19
19
  class="stepper-icon spectrum-UIIcon-Chevron${a}200"
20
20
  ></sp-icon-chevron200>
21
- `};export class NumberField extends F{constructor(){super(...arguments);this.focused=!1;this._forcedUnit="";this.formatOptions={};this.hideStepper=!1;this.indeterminate=!1;this.keyboardFocused=!1;this.managedInput=!1;this.stepModifier=10;this._value=NaN;this._trackingValue="";this.changeCount=0;this.languageResolver=new y(this);this.wasIndeterminate=!1}static get styles(){return[...super.styles,w,C]}set value(e){const t=this.validateInput(e);if(t===this.value)return;const i=this._value;this._value=t,this.requestUpdate("value",i)}get value(){return this._value}get inputValue(){return this.indeterminate?this.formattedValue:this.inputElement.value}get valueAsString(){return this._value.toString()}set valueAsString(e){this.value=this.numberParser.parse(e)}get formattedValue(){return isNaN(this.value)?"":this.numberFormatter.format(this.value)+(this.focused?"":this._forcedUnit)}convertValueToNumber(e){var t;if(m()&&this.inputElement.inputMode==="decimal"){const i=this.numberFormatter.formatToParts(1000.1),r=e.split("").find(u=>u===","||u==="."),s=(t=i.find(u=>u.type==="decimal"))==null?void 0:t.value;r&&s&&(e=e.replace(r,s))}return this.numberParser.parse(e)}get _step(){var e;return typeof this.step!="undefined"?this.step:((e=this.formatOptions)==null?void 0:e.style)==="percent"?.01:1}handlePointerdown(e){if(e.button!==0){e.preventDefault();return}this.managedInput=!0,this.buttons.setPointerCapture(e.pointerId);const t=this.buttons.children[0].getBoundingClientRect(),i=this.buttons.children[1].getBoundingClientRect();this.findChange=r=>{r.clientX>=t.x&&r.clientY>=t.y&&r.clientX<=t.x+t.width&&r.clientY<=t.y+t.height?this.change=s=>this.increment(s.shiftKey?this.stepModifier:1):r.clientX>=i.x&&r.clientY>=i.y&&r.clientX<=i.x+i.width&&r.clientY<=i.y+i.height&&(this.change=s=>this.decrement(s.shiftKey?this.stepModifier:1))},this.findChange(e),this.startChange(e)}startChange(e){this.changeCount=0,this.doChange(e),this.safty=setTimeout(()=>{this.doNextChange(e)},400)}doChange(e){this.change(e)}handlePointermove(e){this.findChange(e)}handlePointerup(e){this.buttons.releasePointerCapture(e.pointerId),cancelAnimationFrame(this.nextChange),clearTimeout(this.safty),this.dispatchEvent(new Event("change",{bubbles:!0,composed:!0})),this.managedInput=!1}doNextChange(e){return this.changeCount+=1,this.changeCount%FRAMES_PER_CHANGE===0&&this.doChange(e),requestAnimationFrame(()=>{this.nextChange=this.doNextChange(e)})}stepBy(e){if(this.disabled||this.readonly)return;const t=typeof this.min!="undefined"?this.min:0;let i=this.value;i+=e*this._step,isNaN(this.value)?this.value=t:this.value=i,this.dispatchEvent(new Event("input",{bubbles:!0,composed:!0})),this.indeterminate=!1,this.focus()}increment(e=1){this.stepBy(1*e)}decrement(e=1){this.stepBy(-1*e)}handleKeydown(e){switch(e.code){case"ArrowUp":e.preventDefault(),this.increment(e.shiftKey?this.stepModifier:1),this.dispatchEvent(new Event("change",{bubbles:!0,composed:!0}));break;case"ArrowDown":e.preventDefault(),this.decrement(e.shiftKey?this.stepModifier:1),this.dispatchEvent(new Event("change",{bubbles:!0,composed:!0}));break}}onScroll(e){e.preventDefault(),this.managedInput=!0;const t=e.shiftKey?e.deltaX/Math.abs(e.deltaX):e.deltaY/Math.abs(e.deltaY);t!==0&&!isNaN(t)&&(this.stepBy(t*(e.shiftKey?this.stepModifier:1)),clearTimeout(this.queuedChangeEvent),this.queuedChangeEvent=setTimeout(()=>{this.dispatchEvent(new Event("change",{bubbles:!0,composed:!0}))},CHANGE_DEBOUNCE_MS)),this.managedInput=!1}onFocus(){super.onFocus(),this._trackingValue=this.inputValue,this.keyboardFocused=!this.readonly&&!0,this.addEventListener("wheel",this.onScroll,{passive:!1})}onBlur(){super.onBlur(),this.keyboardFocused=!this.readonly&&!1,this.removeEventListener("wheel",this.onScroll)}handleFocusin(){this.focused=!this.readonly&&!0,this.keyboardFocused=!this.readonly&&!0}handleFocusout(){this.focused=!this.readonly&&!1,this.keyboardFocused=!this.readonly&&!1}handleChange(){const e=this.convertValueToNumber(this.inputValue);if(this.wasIndeterminate&&(this.wasIndeterminate=!1,this.indeterminateValue=void 0,isNaN(e))){this.indeterminate=!0;return}this.value=e,super.handleChange()}handleInput(){this.indeterminate&&(this.wasIndeterminate=!0,this.indeterminateValue=this.value,this.inputElement.value=this.inputElement.value.replace(indeterminatePlaceholder,""));const{value:e,selectionStart:t}=this.inputElement,i=e.split("").map(p=>remapMultiByteCharacters[p]||p).join("");if(this.numberParser.isValidPartialNumber(i)){const p=this.convertValueToNumber(i);!i&&this.indeterminateValue?(this.indeterminate=!0,this._value=this.indeterminateValue):(this.indeterminate=!1,this._value=this.validateInput(p)),this._trackingValue=i,this.inputElement.value=i;return}const r=i.length,s=this._trackingValue.length,u=(t||r)-(r-s);this.inputElement.value=this.indeterminate?indeterminatePlaceholder:this._trackingValue,this.inputElement.setSelectionRange(u,u)}validateInput(e){if(typeof this.min!="undefined"&&(e=Math.max(this.min,e)),typeof this.max!="undefined"&&(e=Math.min(this.max,e)),this.step){const t=typeof this.min!="undefined"?this.min:0,i=(e-t)%this.step;if(i===0||(Math.round(i/this.step)===1?e+=this.step-i:e-=i),typeof this.max!="undefined")for(;e>this.max;)e-=this.step}return e}get displayValue(){const e=this.focused?"":indeterminatePlaceholder;return this.indeterminate?e:this.formattedValue}clearNumberFormatterCache(){this._numberFormatter=void 0,this._numberParser=void 0}get numberFormatter(){if(!this._numberFormatter||!this._numberFormatterFocused){const{style:e,unit:t,unitDisplay:i,...r}=this.formatOptions;e!=="unit"&&(r.style=e),this._numberFormatterFocused=new d(this.languageResolver.language,r);try{this._numberFormatter=new d(this.languageResolver.language,this.formatOptions),this._forcedUnit="",this._numberFormatter.format(1)}catch(s){e==="unit"&&(this._forcedUnit=t),this._numberFormatter=this._numberFormatterFocused}}return this.focused?this._numberFormatterFocused:this._numberFormatter}get numberParser(){if(!this._numberParser||!this._numberParserFocused){const{style:e,unit:t,unitDisplay:i,...r}=this.formatOptions;e!=="unit"&&(r.style=e),this._numberParserFocused=new c(this.languageResolver.language,r);try{this._numberParser=new c(this.languageResolver.language,this.formatOptions),this._forcedUnit="",this._numberParser.parse("0")}catch(s){e==="unit"&&(this._forcedUnit=t),this._numberParser=this._numberParserFocused}}return this.focused?this._numberParserFocused:this._numberParser}renderField(){return this.autocomplete="off",h`
21
+ `};export class NumberField extends F{constructor(){super(...arguments);this.focused=!1;this._forcedUnit="";this.formatOptions={};this.hideStepper=!1;this.indeterminate=!1;this.keyboardFocused=!1;this.managedInput=!1;this.stepModifier=10;this._value=NaN;this._trackingValue="";this.changeCount=0;this.languageResolver=new y(this);this.wasIndeterminate=!1;this.applyFocusElementLabel=e=>{this.appliedLabel=e}}static get styles(){return[...super.styles,w,C]}set value(e){const t=this.validateInput(e);if(t===this.value)return;const i=this._value;this._value=t,this.requestUpdate("value",i)}get value(){return this._value}get inputValue(){return this.indeterminate?this.formattedValue:this.inputElement.value}get valueAsString(){return this._value.toString()}set valueAsString(e){this.value=this.numberParser.parse(e)}get formattedValue(){return isNaN(this.value)?"":this.numberFormatter.format(this.value)+(this.focused?"":this._forcedUnit)}convertValueToNumber(e){var t;if(m()&&this.inputElement.inputMode==="decimal"){const i=this.numberFormatter.formatToParts(1000.1),r=e.split("").find(u=>u===","||u==="."),s=(t=i.find(u=>u.type==="decimal"))==null?void 0:t.value;r&&s&&(e=e.replace(r,s))}return this.numberParser.parse(e)}get _step(){var e;return typeof this.step!="undefined"?this.step:((e=this.formatOptions)==null?void 0:e.style)==="percent"?.01:1}handlePointerdown(e){if(e.button!==0){e.preventDefault();return}this.managedInput=!0,this.buttons.setPointerCapture(e.pointerId);const t=this.buttons.children[0].getBoundingClientRect(),i=this.buttons.children[1].getBoundingClientRect();this.findChange=r=>{r.clientX>=t.x&&r.clientY>=t.y&&r.clientX<=t.x+t.width&&r.clientY<=t.y+t.height?this.change=s=>this.increment(s.shiftKey?this.stepModifier:1):r.clientX>=i.x&&r.clientY>=i.y&&r.clientX<=i.x+i.width&&r.clientY<=i.y+i.height&&(this.change=s=>this.decrement(s.shiftKey?this.stepModifier:1))},this.findChange(e),this.startChange(e)}startChange(e){this.changeCount=0,this.doChange(e),this.safty=setTimeout(()=>{this.doNextChange(e)},400)}doChange(e){this.change(e)}handlePointermove(e){this.findChange(e)}handlePointerup(e){this.buttons.releasePointerCapture(e.pointerId),cancelAnimationFrame(this.nextChange),clearTimeout(this.safty),this.dispatchEvent(new Event("change",{bubbles:!0,composed:!0})),this.managedInput=!1}doNextChange(e){return this.changeCount+=1,this.changeCount%FRAMES_PER_CHANGE===0&&this.doChange(e),requestAnimationFrame(()=>{this.nextChange=this.doNextChange(e)})}stepBy(e){if(this.disabled||this.readonly)return;const t=typeof this.min!="undefined"?this.min:0;let i=this.value;i+=e*this._step,isNaN(this.value)?this.value=t:this.value=i,this.dispatchEvent(new Event("input",{bubbles:!0,composed:!0})),this.indeterminate=!1,this.focus()}increment(e=1){this.stepBy(1*e)}decrement(e=1){this.stepBy(-1*e)}handleKeydown(e){switch(e.code){case"ArrowUp":e.preventDefault(),this.increment(e.shiftKey?this.stepModifier:1),this.dispatchEvent(new Event("change",{bubbles:!0,composed:!0}));break;case"ArrowDown":e.preventDefault(),this.decrement(e.shiftKey?this.stepModifier:1),this.dispatchEvent(new Event("change",{bubbles:!0,composed:!0}));break}}onScroll(e){e.preventDefault(),this.managedInput=!0;const t=e.shiftKey?e.deltaX/Math.abs(e.deltaX):e.deltaY/Math.abs(e.deltaY);t!==0&&!isNaN(t)&&(this.stepBy(t*(e.shiftKey?this.stepModifier:1)),clearTimeout(this.queuedChangeEvent),this.queuedChangeEvent=setTimeout(()=>{this.dispatchEvent(new Event("change",{bubbles:!0,composed:!0}))},CHANGE_DEBOUNCE_MS)),this.managedInput=!1}onFocus(){super.onFocus(),this._trackingValue=this.inputValue,this.keyboardFocused=!this.readonly&&!0,this.addEventListener("wheel",this.onScroll,{passive:!1})}onBlur(){super.onBlur(),this.keyboardFocused=!this.readonly&&!1,this.removeEventListener("wheel",this.onScroll)}handleFocusin(){this.focused=!this.readonly&&!0,this.keyboardFocused=!this.readonly&&!0}handleFocusout(){this.focused=!this.readonly&&!1,this.keyboardFocused=!this.readonly&&!1}handleChange(){const e=this.convertValueToNumber(this.inputValue);if(this.wasIndeterminate&&(this.wasIndeterminate=!1,this.indeterminateValue=void 0,isNaN(e))){this.indeterminate=!0;return}this.value=e,super.handleChange()}handleInput(){this.indeterminate&&(this.wasIndeterminate=!0,this.indeterminateValue=this.value,this.inputElement.value=this.inputElement.value.replace(indeterminatePlaceholder,""));const{value:e,selectionStart:t}=this.inputElement,i=e.split("").map(p=>remapMultiByteCharacters[p]||p).join("");if(this.numberParser.isValidPartialNumber(i)){const p=this.convertValueToNumber(i);!i&&this.indeterminateValue?(this.indeterminate=!0,this._value=this.indeterminateValue):(this.indeterminate=!1,this._value=this.validateInput(p)),this._trackingValue=i,this.inputElement.value=i;return}const r=i.length,s=this._trackingValue.length,u=(t||r)-(r-s);this.inputElement.value=this.indeterminate?indeterminatePlaceholder:this._trackingValue,this.inputElement.setSelectionRange(u,u)}validateInput(e){if(typeof this.min!="undefined"&&(e=Math.max(this.min,e)),typeof this.max!="undefined"&&(e=Math.min(this.max,e)),this.step){const t=typeof this.min!="undefined"?this.min:0,i=(e-t)%this.step;if(i===0||(Math.round(i/this.step)===1?e+=this.step-i:e-=i),typeof this.max!="undefined")for(;e>this.max;)e-=this.step}return e}get displayValue(){const e=this.focused?"":indeterminatePlaceholder;return this.indeterminate?e:this.formattedValue}clearNumberFormatterCache(){this._numberFormatter=void 0,this._numberParser=void 0}get numberFormatter(){if(!this._numberFormatter||!this._numberFormatterFocused){const{style:e,unit:t,unitDisplay:i,...r}=this.formatOptions;e!=="unit"&&(r.style=e),this._numberFormatterFocused=new d(this.languageResolver.language,r);try{this._numberFormatter=new d(this.languageResolver.language,this.formatOptions),this._forcedUnit="",this._numberFormatter.format(1)}catch(s){e==="unit"&&(this._forcedUnit=t),this._numberFormatter=this._numberFormatterFocused}}return this.focused?this._numberFormatterFocused:this._numberFormatter}get numberParser(){if(!this._numberParser||!this._numberParserFocused){const{style:e,unit:t,unitDisplay:i,...r}=this.formatOptions;e!=="unit"&&(r.style=e),this._numberParserFocused=new c(this.languageResolver.language,r);try{this._numberParser=new c(this.languageResolver.language,this.formatOptions),this._forcedUnit="",this._numberParser.parse("0")}catch(s){e==="unit"&&(this._forcedUnit=t),this._numberParser=this._numberParserFocused}}return this.focused?this._numberParserFocused:this._numberParser}renderField(){return this.autocomplete="off",h`
22
22
  ${super.renderField()}
23
23
  ${this.hideStepper?h``:h`
24
24
  <span
@@ -29,7 +29,8 @@
29
29
  >
30
30
  <sp-action-button
31
31
  class="step-up"
32
- label="Increment"
32
+ aria-describedby=${this.helpTextId}
33
+ label=${"Increase "+this.appliedLabel}
33
34
  tabindex="-1"
34
35
  ?focused=${this.focused}
35
36
  ?disabled=${this.disabled||this.readonly||typeof this.max!="undefined"&&this.value===this.max}
@@ -39,7 +40,8 @@
39
40
  </sp-action-button>
40
41
  <sp-action-button
41
42
  class="step-down"
42
- label="Decrement"
43
+ aria-describedby=${this.helpTextId}
44
+ label=${"Decrease "+this.appliedLabel}
43
45
  tabindex="-1"
44
46
  ?focused=${this.focused}
45
47
  ?disabled=${this.disabled||this.readonly||typeof this.min!="undefined"&&this.value===this.min}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["NumberField.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 {\n CSSResultArray,\n html,\n PropertyValues,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport {\n LanguageResolutionController,\n languageResolverUpdatedSymbol,\n} from '@spectrum-web-components/reactive-controllers/src/LanguageResolution.js';\nimport { streamingListener } from '@spectrum-web-components/base/src/streaming-listener.js';\nimport { NumberFormatter, NumberParser } from '@internationalized/number';\n\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron75.js';\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron100.js';\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron200.js';\nimport '@spectrum-web-components/action-button/sp-action-button.js';\nimport {\n isAndroid,\n isIPhone,\n} from '@spectrum-web-components/shared/src/platform.js';\nimport { TextfieldBase } from '@spectrum-web-components/textfield';\nimport chevronStyles from '@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js';\nimport styles from './number-field.css.js';\n\nexport const FRAMES_PER_CHANGE = 5;\n// Debounce duration for inserting a `change` event after a batch of `wheel` originating `input` events.\nexport const CHANGE_DEBOUNCE_MS = 100;\nexport const indeterminatePlaceholder = '-';\nexport const remapMultiByteCharacters: Record<string, string> = {\n '\uFF11': '1',\n '\uFF12': '2',\n '\uFF13': '3',\n '\uFF14': '4',\n '\uFF15': '5',\n '\uFF16': '6',\n '\uFF17': '7',\n '\uFF18': '8',\n '\uFF19': '9',\n '\uFF10': '0',\n '\u3001': ',',\n '\uFF0C': ',',\n '\u3002': '.',\n '\uFF0E': '.',\n '\uFF05': '%',\n '\uFF0B': '+',\n \u30FC: '-',\n};\n\nconst chevronIcon: Record<string, (dir: 'Down' | 'Up') => TemplateResult> = {\n s: (dir) => html`\n <sp-icon-chevron75\n slot=\"icon\"\n class=\"stepper-icon spectrum-UIIcon-Chevron${dir}75\"\n ></sp-icon-chevron75>\n `,\n m: (dir) => html`\n <sp-icon-chevron75\n slot=\"icon\"\n class=\"stepper-icon spectrum-UIIcon-Chevron${dir}75\"\n ></sp-icon-chevron75>\n `,\n l: (dir) => html`\n <sp-icon-chevron100\n slot=\"icon\"\n class=\"stepper-icon spectrum-UIIcon-Chevron${dir}100\"\n ></sp-icon-chevron100>\n `,\n xl: (dir) => html`\n <sp-icon-chevron200\n slot=\"icon\"\n class=\"stepper-icon spectrum-UIIcon-Chevron${dir}200\"\n ></sp-icon-chevron200>\n `,\n};\n\n/**\n * @element sp-number-field\n * @slot help-text - default or non-negative help text to associate to your form element\n * @slot negative-help-text - negative help text to associate to your form element when `invalid`\n */\nexport class NumberField extends TextfieldBase {\n public static override get styles(): CSSResultArray {\n return [...super.styles, styles, chevronStyles];\n }\n\n @query('.buttons')\n private buttons!: HTMLDivElement;\n\n @property({ type: Boolean, reflect: true })\n public override focused = false;\n\n _forcedUnit = '';\n\n /**\n * An `&lt;sp-number-field&gt;` element will process its numeric value with\n * `new Intl.NumberFormat(this.resolvedLanguage, this.formatOptions).format(this.valueAsNumber)`\n * in order to prepare it for visual delivery in the input. In order to customize this\n * processing supply your own `Intl.NumberFormatOptions` object here.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat\n */\n @property({ type: Object, attribute: 'format-options' })\n public formatOptions: Intl.NumberFormatOptions = {};\n\n /**\n * Whether the stepper UI is hidden or not.\n */\n @property({ type: Boolean, reflect: true, attribute: 'hide-stepper' })\n public hideStepper = false;\n\n @property({ type: Boolean, reflect: true })\n public indeterminate = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'keyboard-focused' })\n public keyboardFocused = false;\n\n @property({ type: Number })\n public max?: number;\n\n @property({ type: Number })\n public min?: number;\n\n /**\n * The distance by which to alter the value of the element when taking a \"step\".\n *\n * When `this.formatOptions.style === 'percentage'` the default step will be\n * set to 0.01 unless otherwise supplied to the element.\n */\n @property({ type: Number })\n public step?: number;\n\n public managedInput = false;\n\n @property({ type: Number, reflect: true, attribute: 'step-modifier' })\n public stepModifier = 10;\n\n @property({ type: Number })\n public override set value(rawValue: number) {\n const value = this.validateInput(rawValue);\n if (value === this.value) {\n return;\n }\n const oldValue = this._value;\n this._value = value;\n this.requestUpdate('value', oldValue);\n }\n\n public override get value(): number {\n return this._value;\n }\n\n private get inputValue(): string {\n return this.indeterminate\n ? this.formattedValue\n : this.inputElement.value;\n }\n\n public override _value = NaN;\n private _trackingValue = '';\n\n /**\n * Retreive the value of the element parsed to a Number.\n */\n public get valueAsString(): string {\n return this._value.toString();\n }\n\n public set valueAsString(value: string) {\n this.value = this.numberParser.parse(value);\n }\n\n public get formattedValue(): string {\n if (isNaN(this.value)) return '';\n return (\n this.numberFormatter.format(this.value) +\n (this.focused ? '' : this._forcedUnit)\n );\n }\n\n private convertValueToNumber(value: string): number {\n if (isIPhone() && this.inputElement.inputMode === 'decimal') {\n const parts = this.numberFormatter.formatToParts(1000.1);\n const sourceDecimal = value\n .split('')\n .find((char) => char === ',' || char === '.');\n const replacementDecimal = parts.find(\n (part) => part.type === 'decimal'\n )?.value;\n if (sourceDecimal && replacementDecimal) {\n value = value.replace(sourceDecimal, replacementDecimal);\n }\n }\n return this.numberParser.parse(value);\n }\n\n private get _step(): number {\n if (typeof this.step !== 'undefined') {\n return this.step;\n }\n if (this.formatOptions?.style === 'percent') {\n return 0.01;\n }\n return 1;\n }\n\n private nextChange!: number;\n private changeCount = 0;\n private findChange!: (event: PointerEvent) => void;\n private change!: (event: PointerEvent) => void;\n private safty!: number;\n private languageResolver = new LanguageResolutionController(this);\n\n private handlePointerdown(event: PointerEvent): void {\n if (event.button !== 0) {\n event.preventDefault();\n return;\n }\n this.managedInput = true;\n this.buttons.setPointerCapture(event.pointerId);\n const stepUpRect = this.buttons.children[0].getBoundingClientRect();\n const stepDownRect = this.buttons.children[1].getBoundingClientRect();\n this.findChange = (event: PointerEvent) => {\n if (\n event.clientX >= stepUpRect.x &&\n event.clientY >= stepUpRect.y &&\n event.clientX <= stepUpRect.x + stepUpRect.width &&\n event.clientY <= stepUpRect.y + stepUpRect.height\n ) {\n this.change = (event: PointerEvent) =>\n this.increment(event.shiftKey ? this.stepModifier : 1);\n } else if (\n event.clientX >= stepDownRect.x &&\n event.clientY >= stepDownRect.y &&\n event.clientX <= stepDownRect.x + stepDownRect.width &&\n event.clientY <= stepDownRect.y + stepDownRect.height\n ) {\n this.change = (event: PointerEvent) =>\n this.decrement(event.shiftKey ? this.stepModifier : 1);\n }\n };\n this.findChange(event);\n this.startChange(event);\n }\n\n private startChange(event: PointerEvent): void {\n this.changeCount = 0;\n this.doChange(event);\n this.safty = setTimeout(() => {\n this.doNextChange(event);\n }, 400) as unknown as number;\n }\n\n private doChange(event: PointerEvent): void {\n this.change(event);\n }\n\n private handlePointermove(event: PointerEvent): void {\n this.findChange(event);\n }\n\n private handlePointerup(event: PointerEvent): void {\n this.buttons.releasePointerCapture(event.pointerId);\n cancelAnimationFrame(this.nextChange);\n clearTimeout(this.safty);\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\n this.managedInput = false;\n }\n\n private doNextChange(event: PointerEvent): number {\n this.changeCount += 1;\n if (this.changeCount % FRAMES_PER_CHANGE === 0) {\n this.doChange(event);\n }\n return requestAnimationFrame(() => {\n this.nextChange = this.doNextChange(event);\n });\n }\n\n private stepBy(count: number): void {\n if (this.disabled || this.readonly) {\n return;\n }\n const min = typeof this.min !== 'undefined' ? this.min : 0;\n let value = this.value;\n value += count * this._step;\n if (isNaN(this.value)) {\n this.value = min;\n } else {\n this.value = value;\n }\n this.dispatchEvent(\n new Event('input', { bubbles: true, composed: true })\n );\n this.indeterminate = false;\n this.focus();\n }\n\n private increment(factor = 1): void {\n this.stepBy(1 * factor);\n }\n\n private decrement(factor = 1): void {\n this.stepBy(-1 * factor);\n }\n\n private handleKeydown(event: KeyboardEvent): void {\n switch (event.code) {\n case 'ArrowUp':\n event.preventDefault();\n this.increment(event.shiftKey ? this.stepModifier : 1);\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.decrement(event.shiftKey ? this.stepModifier : 1);\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\n break;\n }\n }\n\n private queuedChangeEvent!: number;\n\n protected onScroll(event: WheelEvent): void {\n event.preventDefault();\n this.managedInput = true;\n const direction = event.shiftKey\n ? event.deltaX / Math.abs(event.deltaX)\n : event.deltaY / Math.abs(event.deltaY);\n if (direction !== 0 && !isNaN(direction)) {\n this.stepBy(direction * (event.shiftKey ? this.stepModifier : 1));\n clearTimeout(this.queuedChangeEvent);\n this.queuedChangeEvent = setTimeout(() => {\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\n }, CHANGE_DEBOUNCE_MS) as unknown as number;\n }\n this.managedInput = false;\n }\n\n protected override onFocus(): void {\n super.onFocus();\n this._trackingValue = this.inputValue;\n this.keyboardFocused = !this.readonly && true;\n this.addEventListener('wheel', this.onScroll, { passive: false });\n }\n\n protected override onBlur(): void {\n super.onBlur();\n this.keyboardFocused = !this.readonly && false;\n this.removeEventListener('wheel', this.onScroll);\n }\n\n private handleFocusin(): void {\n this.focused = !this.readonly && true;\n this.keyboardFocused = !this.readonly && true;\n }\n\n private handleFocusout(): void {\n this.focused = !this.readonly && false;\n this.keyboardFocused = !this.readonly && false;\n }\n\n private wasIndeterminate = false;\n private indeterminateValue?: number;\n\n protected override handleChange(): void {\n const value = this.convertValueToNumber(this.inputValue);\n if (this.wasIndeterminate) {\n this.wasIndeterminate = false;\n this.indeterminateValue = undefined;\n if (isNaN(value)) {\n this.indeterminate = true;\n return;\n }\n }\n this.value = value;\n super.handleChange();\n }\n\n protected override handleInput(): void {\n if (this.indeterminate) {\n this.wasIndeterminate = true;\n this.indeterminateValue = this.value;\n this.inputElement.value = this.inputElement.value.replace(\n indeterminatePlaceholder,\n ''\n );\n }\n const { value: originalValue, selectionStart } = this.inputElement;\n const value = originalValue\n .split('')\n .map((char) => remapMultiByteCharacters[char] || char)\n .join('');\n if (this.numberParser.isValidPartialNumber(value)) {\n const valueAsNumber = this.convertValueToNumber(value);\n if (!value && this.indeterminateValue) {\n this.indeterminate = true;\n this._value = this.indeterminateValue;\n } else {\n this.indeterminate = false;\n this._value = this.validateInput(valueAsNumber);\n }\n this._trackingValue = value;\n this.inputElement.value = value;\n return;\n }\n const currentLength = value.length;\n const previousLength = this._trackingValue.length;\n const nextSelectStart =\n (selectionStart || currentLength) -\n (currentLength - previousLength);\n this.inputElement.value = this.indeterminate\n ? indeterminatePlaceholder\n : this._trackingValue;\n this.inputElement.setSelectionRange(nextSelectStart, nextSelectStart);\n }\n\n private validateInput(value: number): number {\n if (typeof this.min !== 'undefined') {\n value = Math.max(this.min, value);\n }\n if (typeof this.max !== 'undefined') {\n value = Math.min(this.max, value);\n }\n // Step shouldn't validate when 0...\n if (this.step) {\n const min = typeof this.min !== 'undefined' ? this.min : 0;\n const moduloStep = (value - min) % this.step;\n const fallsOnStep = moduloStep === 0;\n if (!fallsOnStep) {\n const overUnder = Math.round(moduloStep / this.step);\n if (overUnder === 1) {\n value += this.step - moduloStep;\n } else {\n value -= moduloStep;\n }\n }\n if (typeof this.max !== 'undefined') {\n while (value > this.max) {\n value -= this.step;\n }\n }\n }\n return value;\n }\n\n protected override get displayValue(): string {\n const indeterminateValue = this.focused ? '' : indeterminatePlaceholder;\n return this.indeterminate ? indeterminateValue : this.formattedValue;\n }\n\n protected clearNumberFormatterCache(): void {\n this._numberFormatter = undefined;\n this._numberParser = undefined;\n }\n\n protected get numberFormatter(): NumberFormatter {\n if (!this._numberFormatter || !this._numberFormatterFocused) {\n const {\n style,\n unit,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n unitDisplay,\n ...formatOptionsNoUnit\n } = this.formatOptions;\n if (style !== 'unit') {\n (formatOptionsNoUnit as Intl.NumberFormatOptions).style = style;\n }\n this._numberFormatterFocused = new NumberFormatter(\n this.languageResolver.language,\n formatOptionsNoUnit\n );\n try {\n this._numberFormatter = new NumberFormatter(\n this.languageResolver.language,\n this.formatOptions\n );\n this._forcedUnit = '';\n this._numberFormatter.format(1);\n } catch (error) {\n if (style === 'unit') {\n this._forcedUnit = unit as string;\n }\n this._numberFormatter = this._numberFormatterFocused;\n }\n }\n return this.focused\n ? this._numberFormatterFocused\n : this._numberFormatter;\n }\n\n private _numberFormatter?: NumberFormatter;\n private _numberFormatterFocused?: NumberFormatter;\n\n protected get numberParser(): NumberParser {\n if (!this._numberParser || !this._numberParserFocused) {\n const {\n style,\n unit,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n unitDisplay,\n ...formatOptionsNoUnit\n } = this.formatOptions;\n if (style !== 'unit') {\n (formatOptionsNoUnit as Intl.NumberFormatOptions).style = style;\n }\n this._numberParserFocused = new NumberParser(\n this.languageResolver.language,\n formatOptionsNoUnit\n );\n try {\n this._numberParser = new NumberParser(\n this.languageResolver.language,\n this.formatOptions\n );\n this._forcedUnit = '';\n this._numberParser.parse('0');\n } catch (error) {\n if (style === 'unit') {\n this._forcedUnit = unit as string;\n }\n this._numberParser = this._numberParserFocused;\n }\n }\n return this.focused ? this._numberParserFocused : this._numberParser;\n }\n\n private _numberParser?: NumberParser;\n private _numberParserFocused?: NumberParser;\n\n protected override renderField(): TemplateResult {\n this.autocomplete = 'off';\n return html`\n ${super.renderField()}\n ${this.hideStepper\n ? html``\n : html`\n <span\n class=\"buttons\"\n @focusin=${this.handleFocusin}\n @focusout=${this.handleFocusout}\n ${streamingListener({\n start: ['pointerdown', this.handlePointerdown],\n streamInside: [\n [\n 'pointermove',\n 'pointerenter',\n 'pointerleave',\n 'pointerover',\n 'pointerout',\n ],\n this.handlePointermove,\n ],\n end: [\n [\n 'pointerup',\n 'pointercancel',\n 'pointerleave',\n ],\n this.handlePointerup,\n ],\n })}\n >\n <sp-action-button\n class=\"step-up\"\n label=\"Increment\"\n tabindex=\"-1\"\n ?focused=${this.focused}\n ?disabled=${this.disabled ||\n this.readonly ||\n (typeof this.max !== 'undefined' &&\n this.value === this.max)}\n ?quiet=${this.quiet}\n >\n ${chevronIcon[this.size]('Up')}\n </sp-action-button>\n <sp-action-button\n class=\"step-down\"\n label=\"Decrement\"\n tabindex=\"-1\"\n ?focused=${this.focused}\n ?disabled=${this.disabled ||\n this.readonly ||\n (typeof this.min !== 'undefined' &&\n this.value === this.min)}\n ?quiet=${this.quiet}\n >\n ${chevronIcon[this.size]('Down')}\n </sp-action-button>\n </span>\n `}\n `;\n }\n\n protected override update(changes: PropertyValues): void {\n if (changes.has('formatOptions') || changes.has('resolvedLanguage')) {\n this.clearNumberFormatterCache();\n }\n if (changes.has('value') || changes.has('max') || changes.has('min')) {\n const value = this.numberParser.parse(\n this.formattedValue.replace(this._forcedUnit, '')\n );\n this.value = value;\n }\n super.update(changes);\n }\n\n public override willUpdate(changes: PropertyValues): void {\n this.multiline = false;\n if (changes.has(languageResolverUpdatedSymbol)) {\n this.clearNumberFormatterCache();\n }\n }\n\n protected override firstUpdated(changes: PropertyValues): void {\n super.firstUpdated(changes);\n this.addEventListener('keydown', this.handleKeydown);\n }\n\n protected override updated(changes: PropertyValues<this>): void {\n if (changes.has('min') || changes.has('formatOptions')) {\n let inputMode = 'numeric';\n const hasNegative = typeof this.min !== 'undefined' && this.min < 0;\n const { maximumFractionDigits } =\n this.numberFormatter.resolvedOptions();\n const hasDecimals = maximumFractionDigits > 0;\n /* c8 ignore next 18 */\n if (isIPhone()) {\n // iPhone doesn't have a minus sign in either numeric or decimal.\n // Note this is only for iPhone, not iPad, which always has both\n // minus and decimal in numeric.\n if (hasNegative) {\n inputMode = 'text';\n } else if (hasDecimals) {\n inputMode = 'decimal';\n }\n } else if (isAndroid()) {\n // Android numeric has both a decimal point and minus key.\n // decimal does not have a minus key.\n if (hasNegative) {\n inputMode = 'numeric';\n } else if (hasDecimals) {\n inputMode = 'decimal';\n }\n }\n this.inputElement.inputMode = inputMode;\n }\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["html", "property", "query", "LanguageResolutionController", "languageResolverUpdatedSymbol", "streamingListener", "NumberFormatter", "NumberParser", "isAndroid", "isIPhone", "TextfieldBase", "chevronStyles", "styles", "chevronIcon", "dir", "rawValue", "value", "oldValue", "_a", "parts", "sourceDecimal", "char", "replacementDecimal", "part", "event", "stepUpRect", "stepDownRect", "count", "min", "factor", "direction", "originalValue", "selectionStart", "valueAsNumber", "currentLength", "previousLength", "nextSelectStart", "moduloStep", "indeterminateValue", "style", "unit", "unitDisplay", "formatOptionsNoUnit", "error", "changes", "inputMode", "hasNegative", "maximumFractionDigits", "hasDecimals", "__decorateClass"]
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 {\n CSSResultArray,\n html,\n PropertyValues,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport {\n LanguageResolutionController,\n languageResolverUpdatedSymbol,\n} from '@spectrum-web-components/reactive-controllers/src/LanguageResolution.js';\nimport { streamingListener } from '@spectrum-web-components/base/src/streaming-listener.js';\nimport { NumberFormatter, NumberParser } from '@internationalized/number';\n\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron75.js';\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron100.js';\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron200.js';\nimport '@spectrum-web-components/action-button/sp-action-button.js';\nimport {\n isAndroid,\n isIPhone,\n} from '@spectrum-web-components/shared/src/platform.js';\nimport { TextfieldBase } from '@spectrum-web-components/textfield';\nimport chevronStyles from '@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js';\nimport styles from './number-field.css.js';\n\nexport const FRAMES_PER_CHANGE = 5;\n// Debounce duration for inserting a `change` event after a batch of `wheel` originating `input` events.\nexport const CHANGE_DEBOUNCE_MS = 100;\nexport const indeterminatePlaceholder = '-';\nexport const remapMultiByteCharacters: Record<string, string> = {\n '\uFF11': '1',\n '\uFF12': '2',\n '\uFF13': '3',\n '\uFF14': '4',\n '\uFF15': '5',\n '\uFF16': '6',\n '\uFF17': '7',\n '\uFF18': '8',\n '\uFF19': '9',\n '\uFF10': '0',\n '\u3001': ',',\n '\uFF0C': ',',\n '\u3002': '.',\n '\uFF0E': '.',\n '\uFF05': '%',\n '\uFF0B': '+',\n \u30FC: '-',\n};\n\nconst chevronIcon: Record<string, (dir: 'Down' | 'Up') => TemplateResult> = {\n s: (dir) => html`\n <sp-icon-chevron75\n slot=\"icon\"\n class=\"stepper-icon spectrum-UIIcon-Chevron${dir}75\"\n ></sp-icon-chevron75>\n `,\n m: (dir) => html`\n <sp-icon-chevron75\n slot=\"icon\"\n class=\"stepper-icon spectrum-UIIcon-Chevron${dir}75\"\n ></sp-icon-chevron75>\n `,\n l: (dir) => html`\n <sp-icon-chevron100\n slot=\"icon\"\n class=\"stepper-icon spectrum-UIIcon-Chevron${dir}100\"\n ></sp-icon-chevron100>\n `,\n xl: (dir) => html`\n <sp-icon-chevron200\n slot=\"icon\"\n class=\"stepper-icon spectrum-UIIcon-Chevron${dir}200\"\n ></sp-icon-chevron200>\n `,\n};\n\n/**\n * @element sp-number-field\n * @slot help-text - default or non-negative help text to associate to your form element\n * @slot negative-help-text - negative help text to associate to your form element when `invalid`\n */\nexport class NumberField extends TextfieldBase {\n public static override get styles(): CSSResultArray {\n return [...super.styles, styles, chevronStyles];\n }\n\n @query('.buttons')\n private buttons!: HTMLDivElement;\n\n @property({ type: Boolean, reflect: true })\n public override focused = false;\n\n _forcedUnit = '';\n\n /**\n * An `&lt;sp-number-field&gt;` element will process its numeric value with\n * `new Intl.NumberFormat(this.resolvedLanguage, this.formatOptions).format(this.valueAsNumber)`\n * in order to prepare it for visual delivery in the input. In order to customize this\n * processing supply your own `Intl.NumberFormatOptions` object here.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat\n */\n @property({ type: Object, attribute: 'format-options' })\n public formatOptions: Intl.NumberFormatOptions = {};\n\n /**\n * Whether the stepper UI is hidden or not.\n */\n @property({ type: Boolean, reflect: true, attribute: 'hide-stepper' })\n public hideStepper = false;\n\n @property({ type: Boolean, reflect: true })\n public indeterminate = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'keyboard-focused' })\n public keyboardFocused = false;\n\n @property({ type: Number })\n public max?: number;\n\n @property({ type: Number })\n public min?: number;\n\n /**\n * The distance by which to alter the value of the element when taking a \"step\".\n *\n * When `this.formatOptions.style === 'percentage'` the default step will be\n * set to 0.01 unless otherwise supplied to the element.\n */\n @property({ type: Number })\n public step?: number;\n\n public managedInput = false;\n\n @property({ type: Number, reflect: true, attribute: 'step-modifier' })\n public stepModifier = 10;\n\n @property({ type: Number })\n public override set value(rawValue: number) {\n const value = this.validateInput(rawValue);\n if (value === this.value) {\n return;\n }\n const oldValue = this._value;\n this._value = value;\n this.requestUpdate('value', oldValue);\n }\n\n public override get value(): number {\n return this._value;\n }\n\n private get inputValue(): string {\n return this.indeterminate\n ? this.formattedValue\n : this.inputElement.value;\n }\n\n public override _value = NaN;\n private _trackingValue = '';\n\n /**\n * Retreive the value of the element parsed to a Number.\n */\n public get valueAsString(): string {\n return this._value.toString();\n }\n\n public set valueAsString(value: string) {\n this.value = this.numberParser.parse(value);\n }\n\n public get formattedValue(): string {\n if (isNaN(this.value)) return '';\n return (\n this.numberFormatter.format(this.value) +\n (this.focused ? '' : this._forcedUnit)\n );\n }\n\n private convertValueToNumber(value: string): number {\n if (isIPhone() && this.inputElement.inputMode === 'decimal') {\n const parts = this.numberFormatter.formatToParts(1000.1);\n const sourceDecimal = value\n .split('')\n .find((char) => char === ',' || char === '.');\n const replacementDecimal = parts.find(\n (part) => part.type === 'decimal'\n )?.value;\n if (sourceDecimal && replacementDecimal) {\n value = value.replace(sourceDecimal, replacementDecimal);\n }\n }\n return this.numberParser.parse(value);\n }\n\n private get _step(): number {\n if (typeof this.step !== 'undefined') {\n return this.step;\n }\n if (this.formatOptions?.style === 'percent') {\n return 0.01;\n }\n return 1;\n }\n\n private nextChange!: number;\n private changeCount = 0;\n private findChange!: (event: PointerEvent) => void;\n private change!: (event: PointerEvent) => void;\n private safty!: number;\n private languageResolver = new LanguageResolutionController(this);\n\n private handlePointerdown(event: PointerEvent): void {\n if (event.button !== 0) {\n event.preventDefault();\n return;\n }\n this.managedInput = true;\n this.buttons.setPointerCapture(event.pointerId);\n const stepUpRect = this.buttons.children[0].getBoundingClientRect();\n const stepDownRect = this.buttons.children[1].getBoundingClientRect();\n this.findChange = (event: PointerEvent) => {\n if (\n event.clientX >= stepUpRect.x &&\n event.clientY >= stepUpRect.y &&\n event.clientX <= stepUpRect.x + stepUpRect.width &&\n event.clientY <= stepUpRect.y + stepUpRect.height\n ) {\n this.change = (event: PointerEvent) =>\n this.increment(event.shiftKey ? this.stepModifier : 1);\n } else if (\n event.clientX >= stepDownRect.x &&\n event.clientY >= stepDownRect.y &&\n event.clientX <= stepDownRect.x + stepDownRect.width &&\n event.clientY <= stepDownRect.y + stepDownRect.height\n ) {\n this.change = (event: PointerEvent) =>\n this.decrement(event.shiftKey ? this.stepModifier : 1);\n }\n };\n this.findChange(event);\n this.startChange(event);\n }\n\n private startChange(event: PointerEvent): void {\n this.changeCount = 0;\n this.doChange(event);\n this.safty = setTimeout(() => {\n this.doNextChange(event);\n }, 400) as unknown as number;\n }\n\n private doChange(event: PointerEvent): void {\n this.change(event);\n }\n\n private handlePointermove(event: PointerEvent): void {\n this.findChange(event);\n }\n\n private handlePointerup(event: PointerEvent): void {\n this.buttons.releasePointerCapture(event.pointerId);\n cancelAnimationFrame(this.nextChange);\n clearTimeout(this.safty);\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\n this.managedInput = false;\n }\n\n private doNextChange(event: PointerEvent): number {\n this.changeCount += 1;\n if (this.changeCount % FRAMES_PER_CHANGE === 0) {\n this.doChange(event);\n }\n return requestAnimationFrame(() => {\n this.nextChange = this.doNextChange(event);\n });\n }\n\n private stepBy(count: number): void {\n if (this.disabled || this.readonly) {\n return;\n }\n const min = typeof this.min !== 'undefined' ? this.min : 0;\n let value = this.value;\n value += count * this._step;\n if (isNaN(this.value)) {\n this.value = min;\n } else {\n this.value = value;\n }\n this.dispatchEvent(\n new Event('input', { bubbles: true, composed: true })\n );\n this.indeterminate = false;\n this.focus();\n }\n\n private increment(factor = 1): void {\n this.stepBy(1 * factor);\n }\n\n private decrement(factor = 1): void {\n this.stepBy(-1 * factor);\n }\n\n private handleKeydown(event: KeyboardEvent): void {\n switch (event.code) {\n case 'ArrowUp':\n event.preventDefault();\n this.increment(event.shiftKey ? this.stepModifier : 1);\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.decrement(event.shiftKey ? this.stepModifier : 1);\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\n break;\n }\n }\n\n private queuedChangeEvent!: number;\n\n protected onScroll(event: WheelEvent): void {\n event.preventDefault();\n this.managedInput = true;\n const direction = event.shiftKey\n ? event.deltaX / Math.abs(event.deltaX)\n : event.deltaY / Math.abs(event.deltaY);\n if (direction !== 0 && !isNaN(direction)) {\n this.stepBy(direction * (event.shiftKey ? this.stepModifier : 1));\n clearTimeout(this.queuedChangeEvent);\n this.queuedChangeEvent = setTimeout(() => {\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\n }, CHANGE_DEBOUNCE_MS) as unknown as number;\n }\n this.managedInput = false;\n }\n\n protected override onFocus(): void {\n super.onFocus();\n this._trackingValue = this.inputValue;\n this.keyboardFocused = !this.readonly && true;\n this.addEventListener('wheel', this.onScroll, { passive: false });\n }\n\n protected override onBlur(): void {\n super.onBlur();\n this.keyboardFocused = !this.readonly && false;\n this.removeEventListener('wheel', this.onScroll);\n }\n\n private handleFocusin(): void {\n this.focused = !this.readonly && true;\n this.keyboardFocused = !this.readonly && true;\n }\n\n private handleFocusout(): void {\n this.focused = !this.readonly && false;\n this.keyboardFocused = !this.readonly && false;\n }\n\n private wasIndeterminate = false;\n private indeterminateValue?: number;\n\n protected override handleChange(): void {\n const value = this.convertValueToNumber(this.inputValue);\n if (this.wasIndeterminate) {\n this.wasIndeterminate = false;\n this.indeterminateValue = undefined;\n if (isNaN(value)) {\n this.indeterminate = true;\n return;\n }\n }\n this.value = value;\n super.handleChange();\n }\n\n protected override handleInput(): void {\n if (this.indeterminate) {\n this.wasIndeterminate = true;\n this.indeterminateValue = this.value;\n this.inputElement.value = this.inputElement.value.replace(\n indeterminatePlaceholder,\n ''\n );\n }\n const { value: originalValue, selectionStart } = this.inputElement;\n const value = originalValue\n .split('')\n .map((char) => remapMultiByteCharacters[char] || char)\n .join('');\n if (this.numberParser.isValidPartialNumber(value)) {\n const valueAsNumber = this.convertValueToNumber(value);\n if (!value && this.indeterminateValue) {\n this.indeterminate = true;\n this._value = this.indeterminateValue;\n } else {\n this.indeterminate = false;\n this._value = this.validateInput(valueAsNumber);\n }\n this._trackingValue = value;\n this.inputElement.value = value;\n return;\n }\n const currentLength = value.length;\n const previousLength = this._trackingValue.length;\n const nextSelectStart =\n (selectionStart || currentLength) -\n (currentLength - previousLength);\n this.inputElement.value = this.indeterminate\n ? indeterminatePlaceholder\n : this._trackingValue;\n this.inputElement.setSelectionRange(nextSelectStart, nextSelectStart);\n }\n\n private validateInput(value: number): number {\n if (typeof this.min !== 'undefined') {\n value = Math.max(this.min, value);\n }\n if (typeof this.max !== 'undefined') {\n value = Math.min(this.max, value);\n }\n // Step shouldn't validate when 0...\n if (this.step) {\n const min = typeof this.min !== 'undefined' ? this.min : 0;\n const moduloStep = (value - min) % this.step;\n const fallsOnStep = moduloStep === 0;\n if (!fallsOnStep) {\n const overUnder = Math.round(moduloStep / this.step);\n if (overUnder === 1) {\n value += this.step - moduloStep;\n } else {\n value -= moduloStep;\n }\n }\n if (typeof this.max !== 'undefined') {\n while (value > this.max) {\n value -= this.step;\n }\n }\n }\n return value;\n }\n\n protected override get displayValue(): string {\n const indeterminateValue = this.focused ? '' : indeterminatePlaceholder;\n return this.indeterminate ? indeterminateValue : this.formattedValue;\n }\n\n protected clearNumberFormatterCache(): void {\n this._numberFormatter = undefined;\n this._numberParser = undefined;\n }\n\n protected get numberFormatter(): NumberFormatter {\n if (!this._numberFormatter || !this._numberFormatterFocused) {\n const {\n style,\n unit,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n unitDisplay,\n ...formatOptionsNoUnit\n } = this.formatOptions;\n if (style !== 'unit') {\n (formatOptionsNoUnit as Intl.NumberFormatOptions).style = style;\n }\n this._numberFormatterFocused = new NumberFormatter(\n this.languageResolver.language,\n formatOptionsNoUnit\n );\n try {\n this._numberFormatter = new NumberFormatter(\n this.languageResolver.language,\n this.formatOptions\n );\n this._forcedUnit = '';\n this._numberFormatter.format(1);\n } catch (error) {\n if (style === 'unit') {\n this._forcedUnit = unit as string;\n }\n this._numberFormatter = this._numberFormatterFocused;\n }\n }\n return this.focused\n ? this._numberFormatterFocused\n : this._numberFormatter;\n }\n\n private _numberFormatter?: NumberFormatter;\n private _numberFormatterFocused?: NumberFormatter;\n\n protected get numberParser(): NumberParser {\n if (!this._numberParser || !this._numberParserFocused) {\n const {\n style,\n unit,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n unitDisplay,\n ...formatOptionsNoUnit\n } = this.formatOptions;\n if (style !== 'unit') {\n (formatOptionsNoUnit as Intl.NumberFormatOptions).style = style;\n }\n this._numberParserFocused = new NumberParser(\n this.languageResolver.language,\n formatOptionsNoUnit\n );\n try {\n this._numberParser = new NumberParser(\n this.languageResolver.language,\n this.formatOptions\n );\n this._forcedUnit = '';\n this._numberParser.parse('0');\n } catch (error) {\n if (style === 'unit') {\n this._forcedUnit = unit as string;\n }\n this._numberParser = this._numberParserFocused;\n }\n }\n return this.focused ? this._numberParserFocused : this._numberParser;\n }\n\n applyFocusElementLabel = (value?: string): void => {\n this.appliedLabel = value;\n };\n\n private _numberParser?: NumberParser;\n private _numberParserFocused?: NumberParser;\n\n protected override renderField(): TemplateResult {\n this.autocomplete = 'off';\n return html`\n ${super.renderField()}\n ${this.hideStepper\n ? html``\n : html`\n <span\n class=\"buttons\"\n @focusin=${this.handleFocusin}\n @focusout=${this.handleFocusout}\n ${streamingListener({\n start: ['pointerdown', this.handlePointerdown],\n streamInside: [\n [\n 'pointermove',\n 'pointerenter',\n 'pointerleave',\n 'pointerover',\n 'pointerout',\n ],\n this.handlePointermove,\n ],\n end: [\n [\n 'pointerup',\n 'pointercancel',\n 'pointerleave',\n ],\n this.handlePointerup,\n ],\n })}\n >\n <sp-action-button\n class=\"step-up\"\n aria-describedby=${this.helpTextId}\n label=${'Increase ' + this.appliedLabel}\n tabindex=\"-1\"\n ?focused=${this.focused}\n ?disabled=${this.disabled ||\n this.readonly ||\n (typeof this.max !== 'undefined' &&\n this.value === this.max)}\n ?quiet=${this.quiet}\n >\n ${chevronIcon[this.size]('Up')}\n </sp-action-button>\n <sp-action-button\n class=\"step-down\"\n aria-describedby=${this.helpTextId}\n label=${'Decrease ' + this.appliedLabel}\n tabindex=\"-1\"\n ?focused=${this.focused}\n ?disabled=${this.disabled ||\n this.readonly ||\n (typeof this.min !== 'undefined' &&\n this.value === this.min)}\n ?quiet=${this.quiet}\n >\n ${chevronIcon[this.size]('Down')}\n </sp-action-button>\n </span>\n `}\n `;\n }\n\n protected override update(changes: PropertyValues): void {\n if (changes.has('formatOptions') || changes.has('resolvedLanguage')) {\n this.clearNumberFormatterCache();\n }\n if (changes.has('value') || changes.has('max') || changes.has('min')) {\n const value = this.numberParser.parse(\n this.formattedValue.replace(this._forcedUnit, '')\n );\n this.value = value;\n }\n super.update(changes);\n }\n\n public override willUpdate(changes: PropertyValues): void {\n this.multiline = false;\n if (changes.has(languageResolverUpdatedSymbol)) {\n this.clearNumberFormatterCache();\n }\n }\n\n protected override firstUpdated(changes: PropertyValues): void {\n super.firstUpdated(changes);\n this.addEventListener('keydown', this.handleKeydown);\n }\n\n protected override updated(changes: PropertyValues<this>): void {\n if (changes.has('min') || changes.has('formatOptions')) {\n let inputMode = 'numeric';\n const hasNegative = typeof this.min !== 'undefined' && this.min < 0;\n const { maximumFractionDigits } =\n this.numberFormatter.resolvedOptions();\n const hasDecimals = maximumFractionDigits > 0;\n /* c8 ignore next 18 */\n if (isIPhone()) {\n // iPhone doesn't have a minus sign in either numeric or decimal.\n // Note this is only for iPhone, not iPad, which always has both\n // minus and decimal in numeric.\n if (hasNegative) {\n inputMode = 'text';\n } else if (hasDecimals) {\n inputMode = 'decimal';\n }\n } else if (isAndroid()) {\n // Android numeric has both a decimal point and minus key.\n // decimal does not have a minus key.\n if (hasNegative) {\n inputMode = 'numeric';\n } else if (hasDecimals) {\n inputMode = 'decimal';\n }\n }\n this.inputElement.inputMode = inputMode;\n }\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["html", "property", "query", "LanguageResolutionController", "languageResolverUpdatedSymbol", "streamingListener", "NumberFormatter", "NumberParser", "isAndroid", "isIPhone", "TextfieldBase", "chevronStyles", "styles", "chevronIcon", "dir", "value", "rawValue", "oldValue", "_a", "parts", "sourceDecimal", "char", "replacementDecimal", "part", "event", "stepUpRect", "stepDownRect", "count", "min", "factor", "direction", "originalValue", "selectionStart", "valueAsNumber", "currentLength", "previousLength", "nextSelectStart", "moduloStep", "indeterminateValue", "style", "unit", "unitDisplay", "formatOptionsNoUnit", "error", "changes", "inputMode", "hasNegative", "maximumFractionDigits", "hasDecimals", "__decorateClass"]
7
7
  }
@@ -4,6 +4,7 @@ import {
4
4
  aTimeout,
5
5
  elementUpdated,
6
6
  expect,
7
+ fixture,
7
8
  nextFrame,
8
9
  oneEvent
9
10
  } from "@open-wc/testing";
@@ -23,7 +24,12 @@ import {
23
24
  FRAMES_PER_CHANGE,
24
25
  indeterminatePlaceholder
25
26
  } from "@spectrum-web-components/number-field";
26
- import { sendKeys, setUserAgent } from "@web/test-runner-commands";
27
+ import {
28
+ a11ySnapshot,
29
+ findAccessibilityNode,
30
+ sendKeys,
31
+ setUserAgent
32
+ } from "@web/test-runner-commands";
27
33
  import { spy } from "sinon";
28
34
  import { clickBySelector, getElFrom } from "./helpers.js";
29
35
  import { createLanguageContext } from "../../../tools/reactive-controllers/test/helpers.js";
@@ -1234,5 +1240,35 @@ describe("NumberField", () => {
1234
1240
  await clickBySelector(el, ".step-down");
1235
1241
  });
1236
1242
  });
1243
+ describe("accessibility model", () => {
1244
+ it("buttons have proper label", async () => {
1245
+ await fixture(html`
1246
+ <div>
1247
+ ${Default({
1248
+ onChange: () => {
1249
+ return;
1250
+ }
1251
+ })}
1252
+ </div>
1253
+ `);
1254
+ const snapshot = await a11ySnapshot(
1255
+ {}
1256
+ );
1257
+ expect(
1258
+ findAccessibilityNode(
1259
+ snapshot,
1260
+ (node) => node.name === "Increase Enter a number"
1261
+ ),
1262
+ "`name` is the label text"
1263
+ ).to.not.be.null;
1264
+ expect(
1265
+ findAccessibilityNode(
1266
+ snapshot,
1267
+ (node) => node.name === "Decrease Enter a number"
1268
+ ),
1269
+ "`name` is the label text"
1270
+ ).to.not.be.null;
1271
+ });
1272
+ });
1237
1273
  });
1238
1274
  //# sourceMappingURL=number-field.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["number-field.test.ts"],
4
- "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport { html } from '@spectrum-web-components/base';\nimport {\n aTimeout,\n elementUpdated,\n expect,\n nextFrame,\n oneEvent,\n} from '@open-wc/testing';\nimport { shouldPolyfill } from '@formatjs/intl-numberformat/should-polyfill.js';\n\nimport {\n currency,\n decimals,\n Default,\n indeterminate,\n percents,\n pixels,\n units,\n} from '../stories/number-field.stories.js';\nimport '@spectrum-web-components/number-field/sp-number-field.js';\nimport {\n CHANGE_DEBOUNCE_MS,\n FRAMES_PER_CHANGE,\n indeterminatePlaceholder,\n NumberField,\n} from '@spectrum-web-components/number-field';\nimport { sendKeys, setUserAgent } from '@web/test-runner-commands';\nimport { spy } from 'sinon';\nimport { clickBySelector, getElFrom } from './helpers.js';\nimport { createLanguageContext } from '../../../tools/reactive-controllers/test/helpers.js';\nimport { sendMouse } from '../../../test/plugins/browser.js';\nimport { testForLitDevWarnings } from '../../../test/testing-helpers.js';\n\ndescribe('NumberField', () => {\n before(async () => {\n const shouldPolyfillEn = shouldPolyfill('en');\n const shouldPolyfillFr = shouldPolyfill('fr');\n // eslint-disable-next-line no-console\n console.log({\n en: shouldPolyfillEn,\n fr: shouldPolyfillFr,\n shouldPolyfill,\n });\n if (shouldPolyfillEn || shouldPolyfillFr) {\n await import('@formatjs/intl-numberformat/polyfill-force.js');\n }\n if (shouldPolyfillEn) {\n await import('@formatjs/intl-numberformat/locale-data/en.js');\n }\n if (shouldPolyfillFr) {\n await import('@formatjs/intl-numberformat/locale-data/fr.js');\n }\n });\n testForLitDevWarnings(async () => await getElFrom(Default({})));\n it('loads default number-field accessibly', async () => {\n const el = await getElFrom(Default({}));\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n describe('receives input', () => {\n it('without language context', async () => {\n const el = await getElFrom(Default({ value: 1337 }));\n el.size = 's';\n expect(el.formattedValue).to.equal('1,337');\n expect(el.valueAsString).to.equal('1337');\n expect(el.value).to.equal(1337);\n el.focus();\n await sendKeys({ type: '7331' });\n await elementUpdated(el);\n await sendKeys({ press: 'Enter' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('13,377,331');\n expect(el.valueAsString).to.equal('13377331');\n expect(el.value).to.equal(13377331);\n });\n it('with language context', async () => {\n const [languageContext] = createLanguageContext('fr');\n const el = await getElFrom(html`\n <div @sp-language-context=${languageContext}>\n ${Default({ value: 1337 })}\n </div>\n `);\n el.size = 'l';\n expect(el.formattedValue).to.equal('1\u202F337');\n expect(el.valueAsString).to.equal('1337');\n expect(el.value).to.equal(1337);\n el.focus();\n await sendKeys({ type: '7331' });\n await elementUpdated(el);\n await sendKeys({ press: 'Enter' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('13\u202F377\u202F331');\n expect(el.valueAsString).to.equal('13377331');\n expect(el.value).to.equal(13377331);\n });\n });\n describe('Step', () => {\n it('can be 0', async () => {\n const el = await getElFrom(\n Default({\n step: 0,\n min: 0,\n max: 10,\n value: 5,\n })\n );\n el.size = 'xl';\n expect(el.value).to.equal(5);\n expect(el.formattedValue).to.equal('5');\n expect(el.valueAsString).to.equal('5');\n });\n });\n describe('Increments', () => {\n let el: NumberField;\n beforeEach(async () => {\n el = await getElFrom(Default({}));\n expect(el.value).to.be.NaN;\n expect(el.formattedValue).to.equal('');\n expect(el.valueAsString).to.equal('NaN');\n });\n it('via pointer, only \"left\" button', async () => {\n await clickBySelector(el, '.step-up', { button: 'middle' });\n expect(el.formattedValue).to.equal('');\n expect(el.valueAsString).to.equal('NaN');\n expect(el.value).to.be.NaN;\n });\n it('via pointer', async () => {\n await clickBySelector(el, '.step-up');\n expect(el.formattedValue).to.equal('0');\n expect(el.valueAsString).to.equal('0');\n expect(el.value).to.equal(0);\n await clickBySelector(el, '.step-up');\n expect(el.formattedValue).to.equal('1');\n expect(el.valueAsString).to.equal('1');\n expect(el.value).to.equal(1);\n });\n it('via arrow up', async () => {\n el.focus();\n await elementUpdated(el);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('0');\n expect(el.valueAsString).to.equal('0');\n expect(el.value).to.equal(0);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('1');\n expect(el.valueAsString).to.equal('1');\n expect(el.value).to.equal(1);\n });\n it('via arrow up (shift modified)', async () => {\n el.focus();\n await elementUpdated(el);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('0');\n expect(el.valueAsString).to.equal('0');\n expect(el.value).to.equal(0);\n await sendKeys({ press: 'Shift+ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n });\n it('via arrow up (custom shift modified value)', async () => {\n el.focus();\n (el as NumberField).stepModifier = 5;\n (el as NumberField).step = 3;\n await elementUpdated(el);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('0');\n expect(el.valueAsString).to.equal('0');\n expect(el.value).to.equal(0);\n await sendKeys({ press: 'Shift+ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('15');\n expect(el.valueAsString).to.equal('15');\n expect(el.value).to.equal(15);\n });\n it('via scroll', async () => {\n el.focus();\n await elementUpdated(el);\n expect(el.focused).to.be.true;\n el.dispatchEvent(new WheelEvent('wheel', { deltaY: 1 }));\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('0');\n expect(el.valueAsString).to.equal('0');\n expect(el.value).to.equal(0);\n el.dispatchEvent(new WheelEvent('wheel', { deltaY: 100 }));\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('1');\n expect(el.valueAsString).to.equal('1');\n expect(el.value).to.equal(1);\n });\n it('via scroll (shift modified)', async () => {\n el.focus();\n await elementUpdated(el);\n expect(el.focused).to.be.true;\n el.dispatchEvent(\n new WheelEvent('wheel', {\n deltaX: 1,\n shiftKey: true,\n })\n );\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('0');\n expect(el.valueAsString).to.equal('0');\n expect(el.value).to.equal(0);\n el.dispatchEvent(\n new WheelEvent('wheel', {\n deltaX: 100,\n shiftKey: true,\n })\n );\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n });\n });\n describe('Decrements', () => {\n let el: NumberField;\n beforeEach(async () => {\n el = await getElFrom(Default({}));\n expect(el.value).to.be.NaN;\n expect(el.formattedValue).to.equal('');\n expect(el.valueAsString).to.equal('NaN');\n });\n it('via pointer, only \"left\" button', async () => {\n await clickBySelector(el, '.step-down', { button: 'middle' });\n expect(el.formattedValue).to.equal('');\n expect(el.valueAsString).to.equal('NaN');\n expect(el.value).to.be.NaN;\n });\n it('via pointer', async () => {\n await clickBySelector(el, '.step-down');\n expect(el.formattedValue).to.equal('0');\n expect(el.valueAsString).to.equal('0');\n expect(el.value).to.equal(0);\n await clickBySelector(el, '.step-down');\n expect(el.formattedValue).to.equal('-1');\n expect(el.valueAsString).to.equal('-1');\n expect(el.value).to.equal(-1);\n });\n it('via arrow down', async () => {\n el.focus();\n await elementUpdated(el);\n await sendKeys({ press: 'ArrowDown' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('0');\n expect(el.valueAsString).to.equal('0');\n expect(el.value).to.equal(0);\n await sendKeys({ press: 'ArrowDown' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('-1');\n expect(el.valueAsString).to.equal('-1');\n expect(el.value).to.equal(-1);\n });\n it('via arrow down (shift modified)', async () => {\n el.focus();\n await elementUpdated(el);\n await sendKeys({ press: 'ArrowDown' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('0');\n expect(el.valueAsString).to.equal('0');\n expect(el.value).to.equal(0);\n await sendKeys({ press: 'Shift+ArrowDown' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('-10');\n expect(el.valueAsString).to.equal('-10');\n expect(el.value).to.equal(-10);\n });\n it('via arrow up (custom shift modified value)', async () => {\n el.focus();\n (el as NumberField).stepModifier = 5;\n (el as NumberField).step = 3;\n await elementUpdated(el);\n await sendKeys({ press: 'ArrowDown' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('0');\n expect(el.valueAsString).to.equal('0');\n expect(el.value).to.equal(0);\n await sendKeys({ press: 'Shift+ArrowDown' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('-15');\n expect(el.valueAsString).to.equal('-15');\n expect(el.value).to.equal(-15);\n });\n it('via scroll', async () => {\n el.focus();\n await elementUpdated(el);\n expect(el.focused).to.be.true;\n el.dispatchEvent(new WheelEvent('wheel', { deltaY: -1 }));\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('0');\n expect(el.valueAsString).to.equal('0');\n expect(el.value).to.equal(0);\n el.dispatchEvent(new WheelEvent('wheel', { deltaY: -100 }));\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('-1');\n expect(el.valueAsString).to.equal('-1');\n expect(el.value).to.equal(-1);\n });\n it('via scroll (shift modified)', async () => {\n el.focus();\n await elementUpdated(el);\n expect(el.focused).to.be.true;\n el.dispatchEvent(\n new WheelEvent('wheel', {\n deltaX: -1,\n shiftKey: true,\n })\n );\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('0');\n expect(el.valueAsString).to.equal('0');\n expect(el.value).to.equal(0);\n el.dispatchEvent(\n new WheelEvent('wheel', {\n deltaX: -100,\n shiftKey: true,\n })\n );\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('-10');\n expect(el.valueAsString).to.equal('-10');\n expect(el.value).to.equal(-10);\n });\n });\n describe('dispatched events', () => {\n const inputSpy = spy();\n const changeSpy = spy();\n let el: NumberField;\n beforeEach(async () => {\n inputSpy.resetHistory();\n changeSpy.resetHistory();\n el = await getElFrom(Default({ value: 50 }));\n el.addEventListener('input', (event: Event) => {\n inputSpy((event.target as NumberField)?.value);\n });\n el.addEventListener('change', (event: Event) => {\n changeSpy((event.target as NumberField)?.value);\n });\n });\n it('via scroll', async () => {\n el.focus();\n await elementUpdated(el);\n expect(el.focused).to.be.true;\n el.dispatchEvent(new WheelEvent('wheel', { deltaY: 1 }));\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('51');\n expect(el.valueAsString).to.equal('51');\n expect(el.value).to.equal(51);\n expect(inputSpy.callCount).to.equal(1);\n expect(changeSpy.callCount).to.equal(0);\n el.dispatchEvent(new WheelEvent('wheel', { deltaY: 100 }));\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('52');\n expect(el.valueAsString).to.equal('52');\n expect(el.value).to.equal(52);\n expect(inputSpy.callCount).to.equal(2);\n expect(changeSpy.callCount).to.equal(0);\n await aTimeout(CHANGE_DEBOUNCE_MS + 10);\n expect(inputSpy.callCount).to.equal(2);\n expect(changeSpy.callCount).to.equal(1);\n });\n it('has a useful `value`', async () => {\n el.focus();\n await sendKeys({ type: '7' });\n await sendKeys({ press: 'Enter' });\n expect(inputSpy.calledWith(507), 'input').to.be.true;\n expect(changeSpy.calledWith(507), 'change').to.be.true;\n await sendKeys({ type: ',00' });\n await sendKeys({ press: 'Enter' });\n expect(inputSpy.calledWith(5070), 'input').to.be.true;\n expect(inputSpy.calledWith(50700), 'input').to.be.true;\n expect(changeSpy.calledWith(50700), 'change').to.be.true;\n });\n it('has a useful `value` - percent', async () => {\n el.formatOptions = { style: 'percent' };\n el.value = 0.45;\n expect(el.value).to.equal(0.45);\n el.focus();\n await sendKeys({ type: '7' }); // Visible text: 45%7\n expect(inputSpy.calledWith(4.57), 'first input').to.be.true;\n await sendKeys({ press: 'Backspace' }); // Visible text: 45%\n await sendKeys({ press: 'Backspace' }); // Visible text: 45\n await sendKeys({ press: 'Backspace' }); // Visible text: 4\n await sendKeys({ press: 'Enter' });\n expect(el.value).to.equal(0.04);\n expect(inputSpy.calledWith(0.45), 'second input').to.be.true;\n expect(inputSpy.calledWith(0.04), 'third input').to.be.true;\n expect(changeSpy.calledWith(0.04), 'change').to.be.true;\n });\n it('has a useful `value` - currency', async () => {\n el.formatOptions = {\n style: 'currency',\n currency: 'EUR',\n currencyDisplay: 'code',\n currencySign: 'accounting',\n };\n await elementUpdated(el);\n el.value = 45;\n expect(el.value).to.equal(45);\n el.focus();\n await sendKeys({ type: '7' }); // Visible text: EUR\u00A045.007\n expect(el.value).to.equal(45.007);\n expect(inputSpy.calledWith(el.value), 'first input').to.be.true;\n await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR\u00A045.007\n await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR\u00A045.007\n await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR\u00A045.007\n await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR\u00A045.007\n await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR\u00A045.007\n await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR\u00A045.007\n await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR\u00A045.007\n await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR\u00A045.007\n await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR\u00A045.007\n await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR\u00A045.007\n await sendKeys({ type: '1' }); // Visible text: 1EUR\u00A045.007\n await sendKeys({ press: 'Enter' }); // Visible text: EUR\u00A0145.01\n expect(el.value).to.equal(145.007);\n expect(inputSpy.calledWith(145.007), 'second input').to.be.true;\n expect(changeSpy.calledWith(145.007), 'change').to.be.true;\n });\n it('one input/one change for each Arrow*', async () => {\n el.focus();\n await sendKeys({ press: 'ArrowUp' });\n expect(inputSpy.callCount).to.equal(1);\n expect(changeSpy.callCount).to.equal(1);\n expect(el.value).to.equal(51);\n await sendKeys({ press: 'ArrowDown' });\n expect(inputSpy.callCount).to.equal(2);\n expect(changeSpy.callCount).to.equal(2);\n expect(el.value).to.equal(50);\n });\n it('one input/one change for each click', async () => {\n await clickBySelector(el, '.step-up');\n expect(inputSpy.callCount).to.equal(1);\n expect(changeSpy.callCount).to.equal(1);\n expect(el.value).to.equal(51);\n await clickBySelector(el, '.step-down');\n expect(inputSpy.callCount).to.equal(2);\n expect(changeSpy.callCount).to.equal(2);\n expect(el.value).to.equal(50);\n });\n it('click with modifier key', async () => {\n let target = el.shadowRoot.querySelector('.step-up') as HTMLElement;\n const stepUpRect = target.getBoundingClientRect();\n const options = {\n bubbles: true,\n composed: true,\n shiftKey: true,\n clientX: stepUpRect.x + 1,\n clientY: stepUpRect.y + 1,\n };\n (\n el as unknown as {\n buttons: HTMLDivElement;\n }\n ).buttons.setPointerCapture = () => {\n return;\n };\n (\n el as unknown as {\n buttons: HTMLDivElement;\n }\n ).buttons.releasePointerCapture = () => {\n return;\n };\n let input = oneEvent(el, 'input');\n target.dispatchEvent(new PointerEvent('pointerdown', options));\n await input;\n target.dispatchEvent(new PointerEvent('pointerup', options));\n expect(inputSpy.callCount).to.equal(1);\n expect(changeSpy.callCount).to.equal(1);\n expect(el.value).to.equal(60);\n target = el.shadowRoot.querySelector('.step-down') as HTMLElement;\n const stepDownRect = target.getBoundingClientRect();\n options.clientX = stepDownRect.x + 1;\n options.clientY = stepDownRect.y + 1;\n input = oneEvent(el, 'input');\n target.dispatchEvent(new PointerEvent('pointerdown', options));\n await input;\n target.dispatchEvent(new PointerEvent('pointerup', options));\n expect(inputSpy.callCount).to.equal(2);\n expect(changeSpy.callCount).to.equal(2);\n expect(el.value).to.equal(50);\n });\n it('many input, but one change', async () => {\n const buttonUp = el.shadowRoot.querySelector(\n '.step-up'\n ) as HTMLElement;\n const buttonUpRect = buttonUp.getBoundingClientRect();\n const buttonUpPosition: [number, number] = [\n buttonUpRect.x + buttonUpRect.width / 2,\n buttonUpRect.y + buttonUpRect.height / 2,\n ];\n const buttonDown = el.shadowRoot.querySelector(\n '.step-down'\n ) as HTMLElement;\n const buttonDownRect = buttonDown.getBoundingClientRect();\n const buttonDownPosition: [number, number] = [\n buttonDownRect.x + buttonDownRect.width / 2,\n buttonDownRect.y + buttonDownRect.height / 2,\n ];\n sendMouse({\n steps: [\n {\n type: 'move',\n position: buttonUpPosition,\n },\n {\n type: 'down',\n },\n ],\n });\n await oneEvent(el, 'input');\n expect(el.value).to.equal(51);\n expect(inputSpy.callCount).to.equal(1);\n expect(changeSpy.callCount).to.equal(0);\n await oneEvent(el, 'input');\n expect(el.value).to.equal(52);\n expect(inputSpy.callCount).to.equal(2);\n expect(changeSpy.callCount).to.equal(0);\n sendMouse({\n steps: [\n {\n type: 'move',\n position: buttonDownPosition,\n },\n ],\n });\n let framesToWait = FRAMES_PER_CHANGE * 2;\n while (framesToWait) {\n // input is only processed onces per FRAMES_PER_CHANGE number of frames\n framesToWait -= 1;\n await nextFrame();\n }\n expect(inputSpy.callCount).to.equal(4);\n expect(changeSpy.callCount).to.equal(0);\n await sendMouse({\n steps: [\n {\n type: 'up',\n },\n ],\n });\n expect(inputSpy.callCount).to.equal(4);\n expect(changeSpy.callCount).to.equal(1);\n });\n });\n it('accepts pointer interactions with the stepper UI', async () => {\n const inputSpy = spy();\n const el = await getElFrom(Default({ value: 50 }));\n el.addEventListener('input', () => inputSpy());\n expect(el.formattedValue).to.equal('50');\n expect(el.valueAsString).to.equal('50');\n expect(el.value).to.equal(50);\n const buttonUp = el.shadowRoot.querySelector('.step-up') as HTMLElement;\n const buttonUpRect = buttonUp.getBoundingClientRect();\n const buttonUpPosition: [number, number] = [\n buttonUpRect.x + buttonUpRect.width / 2,\n buttonUpRect.y + buttonUpRect.height / 2,\n ];\n const buttonDown = el.shadowRoot.querySelector(\n '.step-down'\n ) as HTMLElement;\n const buttonDownRect = buttonDown.getBoundingClientRect();\n const buttonDownPosition: [number, number] = [\n buttonDownRect.x + buttonDownRect.width / 2,\n buttonDownRect.y + buttonDownRect.height / 2,\n ];\n const outsidePosition: [number, number] = [\n buttonDownRect.x + buttonDownRect.width + 5,\n buttonDownRect.y + buttonDownRect.height + 5,\n ];\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: buttonUpPosition,\n },\n {\n type: 'down',\n },\n ],\n });\n await oneEvent(el, 'input');\n let value = 50 + inputSpy.callCount;\n expect(el.formattedValue).to.equal(String(value));\n expect(el.valueAsString).to.equal(String(value));\n expect(el.value).to.equal(value);\n inputSpy.resetHistory();\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: buttonDownPosition,\n },\n ],\n });\n value = value - inputSpy.callCount;\n expect(el.formattedValue).to.equal(String(value));\n expect(el.valueAsString).to.equal(String(value));\n expect(el.value).to.equal(value);\n inputSpy.resetHistory();\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: outsidePosition,\n },\n ],\n });\n value = value - inputSpy.callCount;\n expect(el.formattedValue).to.equal(String(value));\n expect(el.valueAsString).to.equal(String(value));\n expect(el.value).to.equal(value);\n inputSpy.resetHistory();\n await oneEvent(el, 'input');\n value = value - inputSpy.callCount;\n expect(el.formattedValue).to.equal(String(value));\n expect(el.valueAsString).to.equal(String(value));\n expect(el.value).to.equal(value);\n inputSpy.resetHistory();\n await sendMouse({\n steps: [\n {\n type: 'up',\n },\n ],\n });\n let framesToWait = FRAMES_PER_CHANGE;\n while (framesToWait) {\n // input is only processed onces per FRAMES_PER_CHANGE number of frames\n framesToWait -= 1;\n await nextFrame();\n }\n await elementUpdated(el);\n value = value - inputSpy.callCount;\n expect(el.formattedValue).to.equal(String(value));\n expect(el.valueAsString).to.equal(String(value));\n expect(el.value).to.equal(value);\n });\n it('surfaces `valueAsNumber`', async () => {\n const el = await getElFrom(Default({}));\n el.value = 1000;\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('1,000');\n expect(el.valueAsString).to.equal('1000');\n expect(el.value).to.equal(1000);\n el.valueAsString = '2222';\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('2,222');\n expect(el.valueAsString).to.equal('2222');\n expect(el.value).to.equal(2222);\n });\n describe('manages `value` with `formatOptions`', () => {\n it('manages decimals', async () => {\n const el = await getElFrom(decimals({ value: 1.333333 }));\n expect(el.value).to.equal(1.33);\n expect(el.formattedValue).to.equal('+1.33');\n expect(el.valueAsString).to.equal('1.33');\n });\n it('manages precents', async () => {\n const el = await getElFrom(percents({ value: 0.45 }));\n expect(el.formattedValue).to.equal('45%');\n expect(el.valueAsString).to.equal('0.45');\n expect(el.value).to.equal(0.45);\n await clickBySelector(el, '.step-down');\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('44%');\n expect(el.valueAsString).to.equal('0.44');\n expect(el.value).to.equal(0.44);\n await clickBySelector(el, '.step-up');\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('45%');\n expect(el.valueAsString).to.equal('0.45');\n expect(el.value).to.equal(0.45);\n el.focus();\n el.value = 0;\n await sendKeys({ type: '54' });\n await sendKeys({ press: 'Enter' });\n expect(el.formattedValue).to.equal('54%');\n expect(el.valueAsString).to.equal('0.54');\n expect(el.value).to.equal(0.54);\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('54%');\n expect(el.valueAsString).to.equal('0.54');\n expect(el.value).to.equal(0.54);\n });\n it('manages currency', async () => {\n const el = await getElFrom(currency({ value: 234.21 }));\n expect(el.formattedValue).to.equal('EUR\u00A0234.21');\n expect(el.valueAsString).to.equal('234.21');\n expect(el.value).to.equal(234.21);\n });\n it('manages units', async () => {\n const el = await getElFrom(units({ value: 17 }));\n expect(el.formattedValue).to.equal('17 inches');\n expect(el.valueAsString).to.equal('17');\n expect(el.value).to.equal(17);\n });\n it('manages units not supported by the browser', async () => {\n const el = await getElFrom(pixels({ value: 17 }));\n expect(el.formattedValue).to.equal('17px');\n expect(el.valueAsString).to.equal('17');\n expect(el.value).to.equal(17);\n });\n });\n describe('max', () => {\n let el: NumberField;\n let lastInputValue = 0;\n let lastChangeValue = 0;\n beforeEach(async () => {\n el = await getElFrom(\n Default({\n max: 10,\n value: 10,\n onInput: (value: number) => (lastInputValue = value),\n onChange: (value: number) => (lastChangeValue = value),\n })\n );\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n });\n it('constrains input', async () => {\n el.focus();\n await sendKeys({ type: '15' });\n await sendKeys({ press: 'Enter' });\n await elementUpdated(el);\n expect(lastInputValue, 'last input value').to.equal(10);\n expect(lastChangeValue, 'last change value').to.equal(10);\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n });\n it('constrains `value`', async () => {\n el.value = 20;\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n });\n it('validates on commit', async () => {\n el.focus();\n await sendKeys({ type: '15' });\n await sendKeys({ press: 'Enter' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n });\n it('disabled `stepUp` button', async () => {\n await clickBySelector(el, '.step-up');\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n });\n it('validates late', async () => {\n el.max = 5;\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('5');\n expect(el.valueAsString).to.equal('5');\n expect(el.value).to.equal(5);\n });\n });\n describe('min', () => {\n let el: NumberField;\n let lastInputValue = 0;\n let lastChangeValue = 0;\n beforeEach(async () => {\n el = await getElFrom(\n Default({\n min: 10,\n value: 10,\n onInput: (value: number) => (lastInputValue = value),\n onChange: (value: number) => (lastChangeValue = value),\n })\n );\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n });\n it('constrains input', async () => {\n el.focus();\n await sendKeys({ press: 'Backspace' });\n await sendKeys({ press: 'Backspace' });\n await sendKeys({ type: '5' });\n await sendKeys({ press: 'Enter' });\n await elementUpdated(el);\n expect(lastInputValue, 'last input value').to.equal(10);\n expect(lastChangeValue, 'last change value').to.equal(10);\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n });\n xit('manages `inputMode` in iPhone', async () => {\n // setUserAgent is not currently supported by Playwright\n await setUserAgent(\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148'\n );\n el.min = 0;\n await elementUpdated(el);\n expect(el.focusElement.inputMode).to.equal('numeric');\n el.min = -10;\n await elementUpdated(el);\n expect(el.focusElement.inputMode).to.equal('text');\n el.formatOptions = {\n minimumFractionDigits: 1,\n maximumFractionDigits: 2,\n };\n el.min = 0;\n await elementUpdated(el);\n expect(el.focusElement.inputMode).to.equal('decimal');\n });\n xit('manages `inputMode` in Android', async () => {\n // setUserAgent is not currently supported by Playwright\n await setUserAgent(\n 'Mozilla/5.0 (Linux; Android 10; SM-A205U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.210 Mobile Safari/537.36'\n );\n el.min = 0;\n await elementUpdated(el);\n expect(el.focusElement.inputMode).to.equal('numeric');\n el.min = -10;\n await elementUpdated(el);\n expect(el.focusElement.inputMode).to.equal('numeric');\n el.formatOptions = {\n minimumFractionDigits: 1,\n maximumFractionDigits: 2,\n };\n el.min = 0;\n await elementUpdated(el);\n expect(el.focusElement.inputMode).to.equal('decimal');\n });\n it('constrains `value`', async () => {\n el.value = 0;\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n });\n it('validates on commit', async () => {\n el.focus();\n await sendKeys({ press: '0' });\n await sendKeys({ press: 'Enter' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('100');\n expect(el.valueAsString).to.equal('100');\n expect(el.value).to.equal(100);\n });\n it('disabled `stepDown` button', async () => {\n await clickBySelector(el, '.step-down');\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n });\n it('validates late', async () => {\n el.min = 15;\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('15');\n expect(el.valueAsString).to.equal('15');\n expect(el.value).to.equal(15);\n });\n });\n describe('step', () => {\n let el: NumberField;\n beforeEach(async () => {\n el = await getElFrom(Default({ value: 10, step: 5 }));\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n });\n it('via arrow up', async () => {\n el.focus();\n await elementUpdated(el);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('15');\n expect(el.valueAsString).to.equal('15');\n expect(el.value).to.equal(15);\n });\n it('via arrow down', async () => {\n el.focus();\n await elementUpdated(el);\n await sendKeys({ press: 'ArrowDown' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('5');\n expect(el.valueAsString).to.equal('5');\n expect(el.value).to.equal(5);\n });\n it('step up via pointer', async () => {\n await clickBySelector(el, '.step-up');\n expect(el.formattedValue).to.equal('15');\n expect(el.valueAsString).to.equal('15');\n expect(el.value).to.equal(15);\n });\n it('step down via pointer', async () => {\n await clickBySelector(el, '.step-down');\n expect(el.formattedValue).to.equal('5');\n expect(el.valueAsString).to.equal('5');\n expect(el.value).to.equal(5);\n });\n });\n describe('step + constraints', () => {\n let el: NumberField;\n beforeEach(async () => {\n el = await getElFrom(Default({ step: 5 }));\n expect(el.formattedValue).to.equal('');\n expect(el.valueAsString).to.equal('NaN');\n expect(el.value).to.be.NaN;\n });\n it('steps', async () => {\n el.focus();\n await elementUpdated(el);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('0');\n expect(el.valueAsString).to.equal('0');\n expect(el.value).to.equal(0);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('5');\n expect(el.valueAsString).to.equal('5');\n expect(el.value).to.equal(5);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n });\n it('steps from min', async () => {\n el.min = 5;\n await elementUpdated(el);\n el.focus();\n await elementUpdated(el);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('5');\n expect(el.valueAsString).to.equal('5');\n expect(el.value).to.equal(5);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('15');\n expect(el.valueAsString).to.equal('15');\n expect(el.value).to.equal(15);\n });\n it('steps from mismatched min', async () => {\n el.min = 2;\n await elementUpdated(el);\n el.focus();\n await elementUpdated(el);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('2');\n expect(el.valueAsString).to.equal('2');\n expect(el.value).to.equal(2);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('7');\n expect(el.valueAsString).to.equal('7');\n expect(el.value).to.equal(7);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('12');\n expect(el.valueAsString).to.equal('12');\n expect(el.value).to.equal(12);\n });\n it('steps to mismatched max', async () => {\n el.min = 2;\n el.max = 10;\n await elementUpdated(el);\n el.focus();\n await elementUpdated(el);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('2');\n expect(el.valueAsString).to.equal('2');\n expect(el.value).to.equal(2);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('7');\n expect(el.valueAsString).to.equal('7');\n expect(el.value).to.equal(7);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('7');\n expect(el.valueAsString).to.equal('7');\n expect(el.value).to.equal(7);\n });\n it('validates max + step', async () => {\n el.value = 2;\n el.min = 2;\n el.max = 10;\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('2');\n expect(el.valueAsString).to.equal('2');\n expect(el.value).to.equal(2);\n el.value = 11;\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('7');\n expect(el.valueAsString).to.equal('7');\n expect(el.value).to.equal(7);\n el.value = 27;\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('7');\n expect(el.valueAsString).to.equal('7');\n expect(el.value).to.equal(7);\n });\n });\n describe('indeterminate', () => {\n let el: NumberField;\n beforeEach(async () => {\n el = await getElFrom(indeterminate(indeterminate.args));\n expect(el.formattedValue).to.equal('100');\n expect(el.valueAsString).to.equal('100');\n expect(el.value).to.equal(100);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal(indeterminatePlaceholder);\n });\n it('remove \"-\" on focus', async () => {\n el.focus();\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('100');\n expect(el.valueAsString).to.equal('100');\n expect(el.value).to.equal(100);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal('');\n el.blur();\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('100');\n expect(el.valueAsString).to.equal('100');\n expect(el.value).to.equal(100);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal(indeterminatePlaceholder);\n });\n it('return to \"-\" after suplied value is removed', async () => {\n el.focus();\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('100');\n expect(el.valueAsString).to.equal('100');\n expect(el.value).to.equal(100);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal('');\n await sendKeys({ type: '50' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('50');\n expect(el.valueAsString).to.equal('50');\n expect(el.value).to.equal(50);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal('50');\n await sendKeys({ press: 'Backspace' });\n await sendKeys({ press: 'Backspace' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('100');\n expect(el.valueAsString).to.equal('100');\n expect(el.value).to.equal(100);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal('');\n el.blur();\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('100');\n expect(el.valueAsString).to.equal('100');\n expect(el.value).to.equal(100);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal(indeterminatePlaceholder);\n });\n it('starts from `value` on \"ArrowUp\" keypresses', async () => {\n el.focus();\n await elementUpdated(el);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('101');\n expect(el.valueAsString).to.equal('101');\n expect(el.value).to.equal(101);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal('101');\n el.blur();\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('101');\n expect(el.valueAsString).to.equal('101');\n expect(el.value).to.equal(101);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal('101');\n });\n it('starts from `value` on click `.step-up`', async () => {\n el.focus();\n await elementUpdated(el);\n await clickBySelector(el, '.step-up');\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('101');\n expect(el.valueAsString).to.equal('101');\n expect(el.value).to.equal(101);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal('101');\n el.blur();\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('101');\n expect(el.valueAsString).to.equal('101');\n expect(el.value).to.equal(101);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal('101');\n });\n it('starts from `value` on \"ArrowDown\" keypresses', async () => {\n el.focus();\n await elementUpdated(el);\n await sendKeys({ press: 'ArrowDown' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('99');\n expect(el.valueAsString).to.equal('99');\n expect(el.value).to.equal(99);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal('99');\n el.blur();\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('99');\n expect(el.valueAsString).to.equal('99');\n expect(el.value).to.equal(99);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal('99');\n });\n it('starts from `value` on click `.step-down`', async () => {\n el.focus();\n await elementUpdated(el);\n await clickBySelector(el, '.step-down');\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('99');\n expect(el.valueAsString).to.equal('99');\n expect(el.value).to.equal(99);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal('99');\n el.blur();\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('99');\n expect(el.valueAsString).to.equal('99');\n expect(el.value).to.equal(99);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal('99');\n });\n });\n it('removes the stepper UI with [hide-stepper]', async () => {\n const el = await getElFrom(Default({ hideStepper: true }));\n const stepUp = el.shadowRoot.querySelector('.step-up');\n const stepDown = el.shadowRoot.querySelector('.step-down');\n expect(stepUp).to.be.null;\n expect(stepDown).to.be.null;\n });\n describe('Disabled', () => {\n let el: NumberField;\n beforeEach(async () => {\n el = await getElFrom(Default({ disabled: true, value: 1337 }));\n expect(el.formattedValue).to.equal('1,337');\n expect(el.valueAsString).to.equal('1337');\n expect(el.value).to.equal(1337);\n el.focus();\n await elementUpdated(el);\n });\n afterEach(async () => {\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('1,337');\n expect(el.valueAsString).to.equal('1337');\n expect(el.value).to.equal(1337);\n });\n it('presents as `disabled`', async () => {\n await sendKeys({ type: '12345' });\n await elementUpdated(el);\n await sendKeys({ press: 'Enter' });\n });\n it('prevents increment via keyboard', async () => {\n await sendKeys({ press: 'ArrowUp' });\n });\n it('prevents decrement via keyboard', async () => {\n await sendKeys({ press: 'ArrowDown' });\n });\n it('prevents increment via scroll', async () => {\n el.dispatchEvent(new WheelEvent('wheel', { deltaY: 1 }));\n });\n it('prevents decrement via scroll', async () => {\n el.dispatchEvent(new WheelEvent('wheel', { deltaY: -1 }));\n });\n it('prevents increment via stepper button', async () => {\n await clickBySelector(el, '.step-up');\n });\n it('prevents decrement via stepper button', async () => {\n await clickBySelector(el, '.step-down');\n });\n });\n describe('Readonly', () => {\n let el: NumberField;\n beforeEach(async () => {\n el = await getElFrom(Default({ readonly: true, value: 1337 }));\n expect(el.formattedValue).to.equal('1,337');\n expect(el.valueAsString).to.equal('1337');\n expect(el.value).to.equal(1337);\n el.focus();\n await elementUpdated(el);\n });\n afterEach(async () => {\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('1,337');\n expect(el.valueAsString).to.equal('1337');\n expect(el.value).to.equal(1337);\n });\n it('presents as `readonly`', async () => {\n await sendKeys({ type: '12345' });\n await elementUpdated(el);\n await sendKeys({ press: 'Enter' });\n });\n it('prevents increment via keyboard', async () => {\n await sendKeys({ press: 'ArrowUp' });\n });\n it('prevents decrement via keyboard', async () => {\n await sendKeys({ press: 'ArrowDown' });\n });\n it('prevents increment via scroll', async () => {\n el.dispatchEvent(new WheelEvent('wheel', { deltaY: 1 }));\n });\n it('prevents decrement via scroll', async () => {\n el.dispatchEvent(new WheelEvent('wheel', { deltaY: -1 }));\n });\n it('prevents increment via stepper button', async () => {\n await clickBySelector(el, '.step-up');\n });\n it('prevents decrement via stepper button', async () => {\n await clickBySelector(el, '.step-down');\n });\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport { html } from '@spectrum-web-components/base';\nimport {\n aTimeout,\n elementUpdated,\n expect,\n fixture,\n nextFrame,\n oneEvent,\n} from '@open-wc/testing';\nimport { shouldPolyfill } from '@formatjs/intl-numberformat/should-polyfill.js';\n\nimport {\n currency,\n decimals,\n Default,\n indeterminate,\n percents,\n pixels,\n units,\n} from '../stories/number-field.stories.js';\nimport '@spectrum-web-components/number-field/sp-number-field.js';\nimport {\n CHANGE_DEBOUNCE_MS,\n FRAMES_PER_CHANGE,\n indeterminatePlaceholder,\n NumberField,\n} from '@spectrum-web-components/number-field';\nimport {\n a11ySnapshot,\n findAccessibilityNode,\n sendKeys,\n setUserAgent,\n} from '@web/test-runner-commands';\nimport { spy } from 'sinon';\nimport { clickBySelector, getElFrom } from './helpers.js';\nimport { createLanguageContext } from '../../../tools/reactive-controllers/test/helpers.js';\nimport { sendMouse } from '../../../test/plugins/browser.js';\nimport { testForLitDevWarnings } from '../../../test/testing-helpers.js';\n\ndescribe('NumberField', () => {\n before(async () => {\n const shouldPolyfillEn = shouldPolyfill('en');\n const shouldPolyfillFr = shouldPolyfill('fr');\n // eslint-disable-next-line no-console\n console.log({\n en: shouldPolyfillEn,\n fr: shouldPolyfillFr,\n shouldPolyfill,\n });\n if (shouldPolyfillEn || shouldPolyfillFr) {\n await import('@formatjs/intl-numberformat/polyfill-force.js');\n }\n if (shouldPolyfillEn) {\n await import('@formatjs/intl-numberformat/locale-data/en.js');\n }\n if (shouldPolyfillFr) {\n await import('@formatjs/intl-numberformat/locale-data/fr.js');\n }\n });\n testForLitDevWarnings(async () => await getElFrom(Default({})));\n it('loads default number-field accessibly', async () => {\n const el = await getElFrom(Default({}));\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n describe('receives input', () => {\n it('without language context', async () => {\n const el = await getElFrom(Default({ value: 1337 }));\n el.size = 's';\n expect(el.formattedValue).to.equal('1,337');\n expect(el.valueAsString).to.equal('1337');\n expect(el.value).to.equal(1337);\n el.focus();\n await sendKeys({ type: '7331' });\n await elementUpdated(el);\n await sendKeys({ press: 'Enter' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('13,377,331');\n expect(el.valueAsString).to.equal('13377331');\n expect(el.value).to.equal(13377331);\n });\n it('with language context', async () => {\n const [languageContext] = createLanguageContext('fr');\n const el = await getElFrom(html`\n <div @sp-language-context=${languageContext}>\n ${Default({ value: 1337 })}\n </div>\n `);\n el.size = 'l';\n expect(el.formattedValue).to.equal('1\u202F337');\n expect(el.valueAsString).to.equal('1337');\n expect(el.value).to.equal(1337);\n el.focus();\n await sendKeys({ type: '7331' });\n await elementUpdated(el);\n await sendKeys({ press: 'Enter' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('13\u202F377\u202F331');\n expect(el.valueAsString).to.equal('13377331');\n expect(el.value).to.equal(13377331);\n });\n });\n describe('Step', () => {\n it('can be 0', async () => {\n const el = await getElFrom(\n Default({\n step: 0,\n min: 0,\n max: 10,\n value: 5,\n })\n );\n el.size = 'xl';\n expect(el.value).to.equal(5);\n expect(el.formattedValue).to.equal('5');\n expect(el.valueAsString).to.equal('5');\n });\n });\n describe('Increments', () => {\n let el: NumberField;\n beforeEach(async () => {\n el = await getElFrom(Default({}));\n expect(el.value).to.be.NaN;\n expect(el.formattedValue).to.equal('');\n expect(el.valueAsString).to.equal('NaN');\n });\n it('via pointer, only \"left\" button', async () => {\n await clickBySelector(el, '.step-up', { button: 'middle' });\n expect(el.formattedValue).to.equal('');\n expect(el.valueAsString).to.equal('NaN');\n expect(el.value).to.be.NaN;\n });\n it('via pointer', async () => {\n await clickBySelector(el, '.step-up');\n expect(el.formattedValue).to.equal('0');\n expect(el.valueAsString).to.equal('0');\n expect(el.value).to.equal(0);\n await clickBySelector(el, '.step-up');\n expect(el.formattedValue).to.equal('1');\n expect(el.valueAsString).to.equal('1');\n expect(el.value).to.equal(1);\n });\n it('via arrow up', async () => {\n el.focus();\n await elementUpdated(el);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('0');\n expect(el.valueAsString).to.equal('0');\n expect(el.value).to.equal(0);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('1');\n expect(el.valueAsString).to.equal('1');\n expect(el.value).to.equal(1);\n });\n it('via arrow up (shift modified)', async () => {\n el.focus();\n await elementUpdated(el);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('0');\n expect(el.valueAsString).to.equal('0');\n expect(el.value).to.equal(0);\n await sendKeys({ press: 'Shift+ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n });\n it('via arrow up (custom shift modified value)', async () => {\n el.focus();\n (el as NumberField).stepModifier = 5;\n (el as NumberField).step = 3;\n await elementUpdated(el);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('0');\n expect(el.valueAsString).to.equal('0');\n expect(el.value).to.equal(0);\n await sendKeys({ press: 'Shift+ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('15');\n expect(el.valueAsString).to.equal('15');\n expect(el.value).to.equal(15);\n });\n it('via scroll', async () => {\n el.focus();\n await elementUpdated(el);\n expect(el.focused).to.be.true;\n el.dispatchEvent(new WheelEvent('wheel', { deltaY: 1 }));\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('0');\n expect(el.valueAsString).to.equal('0');\n expect(el.value).to.equal(0);\n el.dispatchEvent(new WheelEvent('wheel', { deltaY: 100 }));\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('1');\n expect(el.valueAsString).to.equal('1');\n expect(el.value).to.equal(1);\n });\n it('via scroll (shift modified)', async () => {\n el.focus();\n await elementUpdated(el);\n expect(el.focused).to.be.true;\n el.dispatchEvent(\n new WheelEvent('wheel', {\n deltaX: 1,\n shiftKey: true,\n })\n );\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('0');\n expect(el.valueAsString).to.equal('0');\n expect(el.value).to.equal(0);\n el.dispatchEvent(\n new WheelEvent('wheel', {\n deltaX: 100,\n shiftKey: true,\n })\n );\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n });\n });\n describe('Decrements', () => {\n let el: NumberField;\n beforeEach(async () => {\n el = await getElFrom(Default({}));\n expect(el.value).to.be.NaN;\n expect(el.formattedValue).to.equal('');\n expect(el.valueAsString).to.equal('NaN');\n });\n it('via pointer, only \"left\" button', async () => {\n await clickBySelector(el, '.step-down', { button: 'middle' });\n expect(el.formattedValue).to.equal('');\n expect(el.valueAsString).to.equal('NaN');\n expect(el.value).to.be.NaN;\n });\n it('via pointer', async () => {\n await clickBySelector(el, '.step-down');\n expect(el.formattedValue).to.equal('0');\n expect(el.valueAsString).to.equal('0');\n expect(el.value).to.equal(0);\n await clickBySelector(el, '.step-down');\n expect(el.formattedValue).to.equal('-1');\n expect(el.valueAsString).to.equal('-1');\n expect(el.value).to.equal(-1);\n });\n it('via arrow down', async () => {\n el.focus();\n await elementUpdated(el);\n await sendKeys({ press: 'ArrowDown' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('0');\n expect(el.valueAsString).to.equal('0');\n expect(el.value).to.equal(0);\n await sendKeys({ press: 'ArrowDown' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('-1');\n expect(el.valueAsString).to.equal('-1');\n expect(el.value).to.equal(-1);\n });\n it('via arrow down (shift modified)', async () => {\n el.focus();\n await elementUpdated(el);\n await sendKeys({ press: 'ArrowDown' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('0');\n expect(el.valueAsString).to.equal('0');\n expect(el.value).to.equal(0);\n await sendKeys({ press: 'Shift+ArrowDown' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('-10');\n expect(el.valueAsString).to.equal('-10');\n expect(el.value).to.equal(-10);\n });\n it('via arrow up (custom shift modified value)', async () => {\n el.focus();\n (el as NumberField).stepModifier = 5;\n (el as NumberField).step = 3;\n await elementUpdated(el);\n await sendKeys({ press: 'ArrowDown' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('0');\n expect(el.valueAsString).to.equal('0');\n expect(el.value).to.equal(0);\n await sendKeys({ press: 'Shift+ArrowDown' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('-15');\n expect(el.valueAsString).to.equal('-15');\n expect(el.value).to.equal(-15);\n });\n it('via scroll', async () => {\n el.focus();\n await elementUpdated(el);\n expect(el.focused).to.be.true;\n el.dispatchEvent(new WheelEvent('wheel', { deltaY: -1 }));\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('0');\n expect(el.valueAsString).to.equal('0');\n expect(el.value).to.equal(0);\n el.dispatchEvent(new WheelEvent('wheel', { deltaY: -100 }));\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('-1');\n expect(el.valueAsString).to.equal('-1');\n expect(el.value).to.equal(-1);\n });\n it('via scroll (shift modified)', async () => {\n el.focus();\n await elementUpdated(el);\n expect(el.focused).to.be.true;\n el.dispatchEvent(\n new WheelEvent('wheel', {\n deltaX: -1,\n shiftKey: true,\n })\n );\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('0');\n expect(el.valueAsString).to.equal('0');\n expect(el.value).to.equal(0);\n el.dispatchEvent(\n new WheelEvent('wheel', {\n deltaX: -100,\n shiftKey: true,\n })\n );\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('-10');\n expect(el.valueAsString).to.equal('-10');\n expect(el.value).to.equal(-10);\n });\n });\n describe('dispatched events', () => {\n const inputSpy = spy();\n const changeSpy = spy();\n let el: NumberField;\n beforeEach(async () => {\n inputSpy.resetHistory();\n changeSpy.resetHistory();\n el = await getElFrom(Default({ value: 50 }));\n el.addEventListener('input', (event: Event) => {\n inputSpy((event.target as NumberField)?.value);\n });\n el.addEventListener('change', (event: Event) => {\n changeSpy((event.target as NumberField)?.value);\n });\n });\n it('via scroll', async () => {\n el.focus();\n await elementUpdated(el);\n expect(el.focused).to.be.true;\n el.dispatchEvent(new WheelEvent('wheel', { deltaY: 1 }));\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('51');\n expect(el.valueAsString).to.equal('51');\n expect(el.value).to.equal(51);\n expect(inputSpy.callCount).to.equal(1);\n expect(changeSpy.callCount).to.equal(0);\n el.dispatchEvent(new WheelEvent('wheel', { deltaY: 100 }));\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('52');\n expect(el.valueAsString).to.equal('52');\n expect(el.value).to.equal(52);\n expect(inputSpy.callCount).to.equal(2);\n expect(changeSpy.callCount).to.equal(0);\n await aTimeout(CHANGE_DEBOUNCE_MS + 10);\n expect(inputSpy.callCount).to.equal(2);\n expect(changeSpy.callCount).to.equal(1);\n });\n it('has a useful `value`', async () => {\n el.focus();\n await sendKeys({ type: '7' });\n await sendKeys({ press: 'Enter' });\n expect(inputSpy.calledWith(507), 'input').to.be.true;\n expect(changeSpy.calledWith(507), 'change').to.be.true;\n await sendKeys({ type: ',00' });\n await sendKeys({ press: 'Enter' });\n expect(inputSpy.calledWith(5070), 'input').to.be.true;\n expect(inputSpy.calledWith(50700), 'input').to.be.true;\n expect(changeSpy.calledWith(50700), 'change').to.be.true;\n });\n it('has a useful `value` - percent', async () => {\n el.formatOptions = { style: 'percent' };\n el.value = 0.45;\n expect(el.value).to.equal(0.45);\n el.focus();\n await sendKeys({ type: '7' }); // Visible text: 45%7\n expect(inputSpy.calledWith(4.57), 'first input').to.be.true;\n await sendKeys({ press: 'Backspace' }); // Visible text: 45%\n await sendKeys({ press: 'Backspace' }); // Visible text: 45\n await sendKeys({ press: 'Backspace' }); // Visible text: 4\n await sendKeys({ press: 'Enter' });\n expect(el.value).to.equal(0.04);\n expect(inputSpy.calledWith(0.45), 'second input').to.be.true;\n expect(inputSpy.calledWith(0.04), 'third input').to.be.true;\n expect(changeSpy.calledWith(0.04), 'change').to.be.true;\n });\n it('has a useful `value` - currency', async () => {\n el.formatOptions = {\n style: 'currency',\n currency: 'EUR',\n currencyDisplay: 'code',\n currencySign: 'accounting',\n };\n await elementUpdated(el);\n el.value = 45;\n expect(el.value).to.equal(45);\n el.focus();\n await sendKeys({ type: '7' }); // Visible text: EUR\u00A045.007\n expect(el.value).to.equal(45.007);\n expect(inputSpy.calledWith(el.value), 'first input').to.be.true;\n await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR\u00A045.007\n await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR\u00A045.007\n await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR\u00A045.007\n await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR\u00A045.007\n await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR\u00A045.007\n await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR\u00A045.007\n await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR\u00A045.007\n await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR\u00A045.007\n await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR\u00A045.007\n await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR\u00A045.007\n await sendKeys({ type: '1' }); // Visible text: 1EUR\u00A045.007\n await sendKeys({ press: 'Enter' }); // Visible text: EUR\u00A0145.01\n expect(el.value).to.equal(145.007);\n expect(inputSpy.calledWith(145.007), 'second input').to.be.true;\n expect(changeSpy.calledWith(145.007), 'change').to.be.true;\n });\n it('one input/one change for each Arrow*', async () => {\n el.focus();\n await sendKeys({ press: 'ArrowUp' });\n expect(inputSpy.callCount).to.equal(1);\n expect(changeSpy.callCount).to.equal(1);\n expect(el.value).to.equal(51);\n await sendKeys({ press: 'ArrowDown' });\n expect(inputSpy.callCount).to.equal(2);\n expect(changeSpy.callCount).to.equal(2);\n expect(el.value).to.equal(50);\n });\n it('one input/one change for each click', async () => {\n await clickBySelector(el, '.step-up');\n expect(inputSpy.callCount).to.equal(1);\n expect(changeSpy.callCount).to.equal(1);\n expect(el.value).to.equal(51);\n await clickBySelector(el, '.step-down');\n expect(inputSpy.callCount).to.equal(2);\n expect(changeSpy.callCount).to.equal(2);\n expect(el.value).to.equal(50);\n });\n it('click with modifier key', async () => {\n let target = el.shadowRoot.querySelector('.step-up') as HTMLElement;\n const stepUpRect = target.getBoundingClientRect();\n const options = {\n bubbles: true,\n composed: true,\n shiftKey: true,\n clientX: stepUpRect.x + 1,\n clientY: stepUpRect.y + 1,\n };\n (\n el as unknown as {\n buttons: HTMLDivElement;\n }\n ).buttons.setPointerCapture = () => {\n return;\n };\n (\n el as unknown as {\n buttons: HTMLDivElement;\n }\n ).buttons.releasePointerCapture = () => {\n return;\n };\n let input = oneEvent(el, 'input');\n target.dispatchEvent(new PointerEvent('pointerdown', options));\n await input;\n target.dispatchEvent(new PointerEvent('pointerup', options));\n expect(inputSpy.callCount).to.equal(1);\n expect(changeSpy.callCount).to.equal(1);\n expect(el.value).to.equal(60);\n target = el.shadowRoot.querySelector('.step-down') as HTMLElement;\n const stepDownRect = target.getBoundingClientRect();\n options.clientX = stepDownRect.x + 1;\n options.clientY = stepDownRect.y + 1;\n input = oneEvent(el, 'input');\n target.dispatchEvent(new PointerEvent('pointerdown', options));\n await input;\n target.dispatchEvent(new PointerEvent('pointerup', options));\n expect(inputSpy.callCount).to.equal(2);\n expect(changeSpy.callCount).to.equal(2);\n expect(el.value).to.equal(50);\n });\n it('many input, but one change', async () => {\n const buttonUp = el.shadowRoot.querySelector(\n '.step-up'\n ) as HTMLElement;\n const buttonUpRect = buttonUp.getBoundingClientRect();\n const buttonUpPosition: [number, number] = [\n buttonUpRect.x + buttonUpRect.width / 2,\n buttonUpRect.y + buttonUpRect.height / 2,\n ];\n const buttonDown = el.shadowRoot.querySelector(\n '.step-down'\n ) as HTMLElement;\n const buttonDownRect = buttonDown.getBoundingClientRect();\n const buttonDownPosition: [number, number] = [\n buttonDownRect.x + buttonDownRect.width / 2,\n buttonDownRect.y + buttonDownRect.height / 2,\n ];\n sendMouse({\n steps: [\n {\n type: 'move',\n position: buttonUpPosition,\n },\n {\n type: 'down',\n },\n ],\n });\n await oneEvent(el, 'input');\n expect(el.value).to.equal(51);\n expect(inputSpy.callCount).to.equal(1);\n expect(changeSpy.callCount).to.equal(0);\n await oneEvent(el, 'input');\n expect(el.value).to.equal(52);\n expect(inputSpy.callCount).to.equal(2);\n expect(changeSpy.callCount).to.equal(0);\n sendMouse({\n steps: [\n {\n type: 'move',\n position: buttonDownPosition,\n },\n ],\n });\n let framesToWait = FRAMES_PER_CHANGE * 2;\n while (framesToWait) {\n // input is only processed onces per FRAMES_PER_CHANGE number of frames\n framesToWait -= 1;\n await nextFrame();\n }\n expect(inputSpy.callCount).to.equal(4);\n expect(changeSpy.callCount).to.equal(0);\n await sendMouse({\n steps: [\n {\n type: 'up',\n },\n ],\n });\n expect(inputSpy.callCount).to.equal(4);\n expect(changeSpy.callCount).to.equal(1);\n });\n });\n it('accepts pointer interactions with the stepper UI', async () => {\n const inputSpy = spy();\n const el = await getElFrom(Default({ value: 50 }));\n el.addEventListener('input', () => inputSpy());\n expect(el.formattedValue).to.equal('50');\n expect(el.valueAsString).to.equal('50');\n expect(el.value).to.equal(50);\n const buttonUp = el.shadowRoot.querySelector('.step-up') as HTMLElement;\n const buttonUpRect = buttonUp.getBoundingClientRect();\n const buttonUpPosition: [number, number] = [\n buttonUpRect.x + buttonUpRect.width / 2,\n buttonUpRect.y + buttonUpRect.height / 2,\n ];\n const buttonDown = el.shadowRoot.querySelector(\n '.step-down'\n ) as HTMLElement;\n const buttonDownRect = buttonDown.getBoundingClientRect();\n const buttonDownPosition: [number, number] = [\n buttonDownRect.x + buttonDownRect.width / 2,\n buttonDownRect.y + buttonDownRect.height / 2,\n ];\n const outsidePosition: [number, number] = [\n buttonDownRect.x + buttonDownRect.width + 5,\n buttonDownRect.y + buttonDownRect.height + 5,\n ];\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: buttonUpPosition,\n },\n {\n type: 'down',\n },\n ],\n });\n await oneEvent(el, 'input');\n let value = 50 + inputSpy.callCount;\n expect(el.formattedValue).to.equal(String(value));\n expect(el.valueAsString).to.equal(String(value));\n expect(el.value).to.equal(value);\n inputSpy.resetHistory();\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: buttonDownPosition,\n },\n ],\n });\n value = value - inputSpy.callCount;\n expect(el.formattedValue).to.equal(String(value));\n expect(el.valueAsString).to.equal(String(value));\n expect(el.value).to.equal(value);\n inputSpy.resetHistory();\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: outsidePosition,\n },\n ],\n });\n value = value - inputSpy.callCount;\n expect(el.formattedValue).to.equal(String(value));\n expect(el.valueAsString).to.equal(String(value));\n expect(el.value).to.equal(value);\n inputSpy.resetHistory();\n await oneEvent(el, 'input');\n value = value - inputSpy.callCount;\n expect(el.formattedValue).to.equal(String(value));\n expect(el.valueAsString).to.equal(String(value));\n expect(el.value).to.equal(value);\n inputSpy.resetHistory();\n await sendMouse({\n steps: [\n {\n type: 'up',\n },\n ],\n });\n let framesToWait = FRAMES_PER_CHANGE;\n while (framesToWait) {\n // input is only processed onces per FRAMES_PER_CHANGE number of frames\n framesToWait -= 1;\n await nextFrame();\n }\n await elementUpdated(el);\n value = value - inputSpy.callCount;\n expect(el.formattedValue).to.equal(String(value));\n expect(el.valueAsString).to.equal(String(value));\n expect(el.value).to.equal(value);\n });\n it('surfaces `valueAsNumber`', async () => {\n const el = await getElFrom(Default({}));\n el.value = 1000;\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('1,000');\n expect(el.valueAsString).to.equal('1000');\n expect(el.value).to.equal(1000);\n el.valueAsString = '2222';\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('2,222');\n expect(el.valueAsString).to.equal('2222');\n expect(el.value).to.equal(2222);\n });\n describe('manages `value` with `formatOptions`', () => {\n it('manages decimals', async () => {\n const el = await getElFrom(decimals({ value: 1.333333 }));\n expect(el.value).to.equal(1.33);\n expect(el.formattedValue).to.equal('+1.33');\n expect(el.valueAsString).to.equal('1.33');\n });\n it('manages precents', async () => {\n const el = await getElFrom(percents({ value: 0.45 }));\n expect(el.formattedValue).to.equal('45%');\n expect(el.valueAsString).to.equal('0.45');\n expect(el.value).to.equal(0.45);\n await clickBySelector(el, '.step-down');\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('44%');\n expect(el.valueAsString).to.equal('0.44');\n expect(el.value).to.equal(0.44);\n await clickBySelector(el, '.step-up');\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('45%');\n expect(el.valueAsString).to.equal('0.45');\n expect(el.value).to.equal(0.45);\n el.focus();\n el.value = 0;\n await sendKeys({ type: '54' });\n await sendKeys({ press: 'Enter' });\n expect(el.formattedValue).to.equal('54%');\n expect(el.valueAsString).to.equal('0.54');\n expect(el.value).to.equal(0.54);\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('54%');\n expect(el.valueAsString).to.equal('0.54');\n expect(el.value).to.equal(0.54);\n });\n it('manages currency', async () => {\n const el = await getElFrom(currency({ value: 234.21 }));\n expect(el.formattedValue).to.equal('EUR\u00A0234.21');\n expect(el.valueAsString).to.equal('234.21');\n expect(el.value).to.equal(234.21);\n });\n it('manages units', async () => {\n const el = await getElFrom(units({ value: 17 }));\n expect(el.formattedValue).to.equal('17 inches');\n expect(el.valueAsString).to.equal('17');\n expect(el.value).to.equal(17);\n });\n it('manages units not supported by the browser', async () => {\n const el = await getElFrom(pixels({ value: 17 }));\n expect(el.formattedValue).to.equal('17px');\n expect(el.valueAsString).to.equal('17');\n expect(el.value).to.equal(17);\n });\n });\n describe('max', () => {\n let el: NumberField;\n let lastInputValue = 0;\n let lastChangeValue = 0;\n beforeEach(async () => {\n el = await getElFrom(\n Default({\n max: 10,\n value: 10,\n onInput: (value: number) => (lastInputValue = value),\n onChange: (value: number) => (lastChangeValue = value),\n })\n );\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n });\n it('constrains input', async () => {\n el.focus();\n await sendKeys({ type: '15' });\n await sendKeys({ press: 'Enter' });\n await elementUpdated(el);\n expect(lastInputValue, 'last input value').to.equal(10);\n expect(lastChangeValue, 'last change value').to.equal(10);\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n });\n it('constrains `value`', async () => {\n el.value = 20;\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n });\n it('validates on commit', async () => {\n el.focus();\n await sendKeys({ type: '15' });\n await sendKeys({ press: 'Enter' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n });\n it('disabled `stepUp` button', async () => {\n await clickBySelector(el, '.step-up');\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n });\n it('validates late', async () => {\n el.max = 5;\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('5');\n expect(el.valueAsString).to.equal('5');\n expect(el.value).to.equal(5);\n });\n });\n describe('min', () => {\n let el: NumberField;\n let lastInputValue = 0;\n let lastChangeValue = 0;\n beforeEach(async () => {\n el = await getElFrom(\n Default({\n min: 10,\n value: 10,\n onInput: (value: number) => (lastInputValue = value),\n onChange: (value: number) => (lastChangeValue = value),\n })\n );\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n });\n it('constrains input', async () => {\n el.focus();\n await sendKeys({ press: 'Backspace' });\n await sendKeys({ press: 'Backspace' });\n await sendKeys({ type: '5' });\n await sendKeys({ press: 'Enter' });\n await elementUpdated(el);\n expect(lastInputValue, 'last input value').to.equal(10);\n expect(lastChangeValue, 'last change value').to.equal(10);\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n });\n xit('manages `inputMode` in iPhone', async () => {\n // setUserAgent is not currently supported by Playwright\n await setUserAgent(\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148'\n );\n el.min = 0;\n await elementUpdated(el);\n expect(el.focusElement.inputMode).to.equal('numeric');\n el.min = -10;\n await elementUpdated(el);\n expect(el.focusElement.inputMode).to.equal('text');\n el.formatOptions = {\n minimumFractionDigits: 1,\n maximumFractionDigits: 2,\n };\n el.min = 0;\n await elementUpdated(el);\n expect(el.focusElement.inputMode).to.equal('decimal');\n });\n xit('manages `inputMode` in Android', async () => {\n // setUserAgent is not currently supported by Playwright\n await setUserAgent(\n 'Mozilla/5.0 (Linux; Android 10; SM-A205U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.210 Mobile Safari/537.36'\n );\n el.min = 0;\n await elementUpdated(el);\n expect(el.focusElement.inputMode).to.equal('numeric');\n el.min = -10;\n await elementUpdated(el);\n expect(el.focusElement.inputMode).to.equal('numeric');\n el.formatOptions = {\n minimumFractionDigits: 1,\n maximumFractionDigits: 2,\n };\n el.min = 0;\n await elementUpdated(el);\n expect(el.focusElement.inputMode).to.equal('decimal');\n });\n it('constrains `value`', async () => {\n el.value = 0;\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n });\n it('validates on commit', async () => {\n el.focus();\n await sendKeys({ press: '0' });\n await sendKeys({ press: 'Enter' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('100');\n expect(el.valueAsString).to.equal('100');\n expect(el.value).to.equal(100);\n });\n it('disabled `stepDown` button', async () => {\n await clickBySelector(el, '.step-down');\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n });\n it('validates late', async () => {\n el.min = 15;\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('15');\n expect(el.valueAsString).to.equal('15');\n expect(el.value).to.equal(15);\n });\n });\n describe('step', () => {\n let el: NumberField;\n beforeEach(async () => {\n el = await getElFrom(Default({ value: 10, step: 5 }));\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n });\n it('via arrow up', async () => {\n el.focus();\n await elementUpdated(el);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('15');\n expect(el.valueAsString).to.equal('15');\n expect(el.value).to.equal(15);\n });\n it('via arrow down', async () => {\n el.focus();\n await elementUpdated(el);\n await sendKeys({ press: 'ArrowDown' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('5');\n expect(el.valueAsString).to.equal('5');\n expect(el.value).to.equal(5);\n });\n it('step up via pointer', async () => {\n await clickBySelector(el, '.step-up');\n expect(el.formattedValue).to.equal('15');\n expect(el.valueAsString).to.equal('15');\n expect(el.value).to.equal(15);\n });\n it('step down via pointer', async () => {\n await clickBySelector(el, '.step-down');\n expect(el.formattedValue).to.equal('5');\n expect(el.valueAsString).to.equal('5');\n expect(el.value).to.equal(5);\n });\n });\n describe('step + constraints', () => {\n let el: NumberField;\n beforeEach(async () => {\n el = await getElFrom(Default({ step: 5 }));\n expect(el.formattedValue).to.equal('');\n expect(el.valueAsString).to.equal('NaN');\n expect(el.value).to.be.NaN;\n });\n it('steps', async () => {\n el.focus();\n await elementUpdated(el);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('0');\n expect(el.valueAsString).to.equal('0');\n expect(el.value).to.equal(0);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('5');\n expect(el.valueAsString).to.equal('5');\n expect(el.value).to.equal(5);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n });\n it('steps from min', async () => {\n el.min = 5;\n await elementUpdated(el);\n el.focus();\n await elementUpdated(el);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('5');\n expect(el.valueAsString).to.equal('5');\n expect(el.value).to.equal(5);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('15');\n expect(el.valueAsString).to.equal('15');\n expect(el.value).to.equal(15);\n });\n it('steps from mismatched min', async () => {\n el.min = 2;\n await elementUpdated(el);\n el.focus();\n await elementUpdated(el);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('2');\n expect(el.valueAsString).to.equal('2');\n expect(el.value).to.equal(2);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('7');\n expect(el.valueAsString).to.equal('7');\n expect(el.value).to.equal(7);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('12');\n expect(el.valueAsString).to.equal('12');\n expect(el.value).to.equal(12);\n });\n it('steps to mismatched max', async () => {\n el.min = 2;\n el.max = 10;\n await elementUpdated(el);\n el.focus();\n await elementUpdated(el);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('2');\n expect(el.valueAsString).to.equal('2');\n expect(el.value).to.equal(2);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('7');\n expect(el.valueAsString).to.equal('7');\n expect(el.value).to.equal(7);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('7');\n expect(el.valueAsString).to.equal('7');\n expect(el.value).to.equal(7);\n });\n it('validates max + step', async () => {\n el.value = 2;\n el.min = 2;\n el.max = 10;\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('2');\n expect(el.valueAsString).to.equal('2');\n expect(el.value).to.equal(2);\n el.value = 11;\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('7');\n expect(el.valueAsString).to.equal('7');\n expect(el.value).to.equal(7);\n el.value = 27;\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('7');\n expect(el.valueAsString).to.equal('7');\n expect(el.value).to.equal(7);\n });\n });\n describe('indeterminate', () => {\n let el: NumberField;\n beforeEach(async () => {\n el = await getElFrom(indeterminate(indeterminate.args));\n expect(el.formattedValue).to.equal('100');\n expect(el.valueAsString).to.equal('100');\n expect(el.value).to.equal(100);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal(indeterminatePlaceholder);\n });\n it('remove \"-\" on focus', async () => {\n el.focus();\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('100');\n expect(el.valueAsString).to.equal('100');\n expect(el.value).to.equal(100);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal('');\n el.blur();\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('100');\n expect(el.valueAsString).to.equal('100');\n expect(el.value).to.equal(100);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal(indeterminatePlaceholder);\n });\n it('return to \"-\" after suplied value is removed', async () => {\n el.focus();\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('100');\n expect(el.valueAsString).to.equal('100');\n expect(el.value).to.equal(100);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal('');\n await sendKeys({ type: '50' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('50');\n expect(el.valueAsString).to.equal('50');\n expect(el.value).to.equal(50);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal('50');\n await sendKeys({ press: 'Backspace' });\n await sendKeys({ press: 'Backspace' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('100');\n expect(el.valueAsString).to.equal('100');\n expect(el.value).to.equal(100);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal('');\n el.blur();\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('100');\n expect(el.valueAsString).to.equal('100');\n expect(el.value).to.equal(100);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal(indeterminatePlaceholder);\n });\n it('starts from `value` on \"ArrowUp\" keypresses', async () => {\n el.focus();\n await elementUpdated(el);\n await sendKeys({ press: 'ArrowUp' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('101');\n expect(el.valueAsString).to.equal('101');\n expect(el.value).to.equal(101);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal('101');\n el.blur();\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('101');\n expect(el.valueAsString).to.equal('101');\n expect(el.value).to.equal(101);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal('101');\n });\n it('starts from `value` on click `.step-up`', async () => {\n el.focus();\n await elementUpdated(el);\n await clickBySelector(el, '.step-up');\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('101');\n expect(el.valueAsString).to.equal('101');\n expect(el.value).to.equal(101);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal('101');\n el.blur();\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('101');\n expect(el.valueAsString).to.equal('101');\n expect(el.value).to.equal(101);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal('101');\n });\n it('starts from `value` on \"ArrowDown\" keypresses', async () => {\n el.focus();\n await elementUpdated(el);\n await sendKeys({ press: 'ArrowDown' });\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('99');\n expect(el.valueAsString).to.equal('99');\n expect(el.value).to.equal(99);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal('99');\n el.blur();\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('99');\n expect(el.valueAsString).to.equal('99');\n expect(el.value).to.equal(99);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal('99');\n });\n it('starts from `value` on click `.step-down`', async () => {\n el.focus();\n await elementUpdated(el);\n await clickBySelector(el, '.step-down');\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('99');\n expect(el.valueAsString).to.equal('99');\n expect(el.value).to.equal(99);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal('99');\n el.blur();\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('99');\n expect(el.valueAsString).to.equal('99');\n expect(el.value).to.equal(99);\n expect(\n (el as unknown as { displayValue: string }).displayValue\n ).to.equal('99');\n });\n });\n it('removes the stepper UI with [hide-stepper]', async () => {\n const el = await getElFrom(Default({ hideStepper: true }));\n const stepUp = el.shadowRoot.querySelector('.step-up');\n const stepDown = el.shadowRoot.querySelector('.step-down');\n expect(stepUp).to.be.null;\n expect(stepDown).to.be.null;\n });\n describe('Disabled', () => {\n let el: NumberField;\n beforeEach(async () => {\n el = await getElFrom(Default({ disabled: true, value: 1337 }));\n expect(el.formattedValue).to.equal('1,337');\n expect(el.valueAsString).to.equal('1337');\n expect(el.value).to.equal(1337);\n el.focus();\n await elementUpdated(el);\n });\n afterEach(async () => {\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('1,337');\n expect(el.valueAsString).to.equal('1337');\n expect(el.value).to.equal(1337);\n });\n it('presents as `disabled`', async () => {\n await sendKeys({ type: '12345' });\n await elementUpdated(el);\n await sendKeys({ press: 'Enter' });\n });\n it('prevents increment via keyboard', async () => {\n await sendKeys({ press: 'ArrowUp' });\n });\n it('prevents decrement via keyboard', async () => {\n await sendKeys({ press: 'ArrowDown' });\n });\n it('prevents increment via scroll', async () => {\n el.dispatchEvent(new WheelEvent('wheel', { deltaY: 1 }));\n });\n it('prevents decrement via scroll', async () => {\n el.dispatchEvent(new WheelEvent('wheel', { deltaY: -1 }));\n });\n it('prevents increment via stepper button', async () => {\n await clickBySelector(el, '.step-up');\n });\n it('prevents decrement via stepper button', async () => {\n await clickBySelector(el, '.step-down');\n });\n });\n describe('Readonly', () => {\n let el: NumberField;\n beforeEach(async () => {\n el = await getElFrom(Default({ readonly: true, value: 1337 }));\n expect(el.formattedValue).to.equal('1,337');\n expect(el.valueAsString).to.equal('1337');\n expect(el.value).to.equal(1337);\n el.focus();\n await elementUpdated(el);\n });\n afterEach(async () => {\n await elementUpdated(el);\n expect(el.formattedValue).to.equal('1,337');\n expect(el.valueAsString).to.equal('1337');\n expect(el.value).to.equal(1337);\n });\n it('presents as `readonly`', async () => {\n await sendKeys({ type: '12345' });\n await elementUpdated(el);\n await sendKeys({ press: 'Enter' });\n });\n it('prevents increment via keyboard', async () => {\n await sendKeys({ press: 'ArrowUp' });\n });\n it('prevents decrement via keyboard', async () => {\n await sendKeys({ press: 'ArrowDown' });\n });\n it('prevents increment via scroll', async () => {\n el.dispatchEvent(new WheelEvent('wheel', { deltaY: 1 }));\n });\n it('prevents decrement via scroll', async () => {\n el.dispatchEvent(new WheelEvent('wheel', { deltaY: -1 }));\n });\n it('prevents increment via stepper button', async () => {\n await clickBySelector(el, '.step-up');\n });\n it('prevents decrement via stepper button', async () => {\n await clickBySelector(el, '.step-down');\n });\n });\n describe('accessibility model', () => {\n it('buttons have proper label', async () => {\n await fixture<HTMLDivElement>(html`\n <div>\n ${Default({\n onChange: () => {\n return;\n },\n })}\n </div>\n `);\n\n type NamedNode = { name: string };\n const snapshot = (await a11ySnapshot(\n {}\n )) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Increase Enter a number'\n ),\n '`name` is the label text'\n ).to.not.be.null;\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Decrease Enter a number'\n ),\n '`name` is the label text'\n ).to.not.be.null;\n });\n });\n});\n"],
5
+ "mappings": ";AAYA,SAAS,YAAY;AACrB;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,SAAS,sBAAsB;AAE/B;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,OAAO;AACP;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,OAEG;AACP;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,SAAS,WAAW;AACpB,SAAS,iBAAiB,iBAAiB;AAC3C,SAAS,6BAA6B;AACtC,SAAS,iBAAiB;AAC1B,SAAS,6BAA6B;AAEtC,SAAS,eAAe,MAAM;AAC1B,SAAO,YAAY;AACf,UAAM,mBAAmB,eAAe,IAAI;AAC5C,UAAM,mBAAmB,eAAe,IAAI;AAE5C,YAAQ,IAAI;AAAA,MACR,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ;AAAA,IACJ,CAAC;AACD,QAAI,oBAAoB,kBAAkB;AACtC,YAAM,OAAO,+CAA+C;AAAA,IAChE;AACA,QAAI,kBAAkB;AAClB,YAAM,OAAO,+CAA+C;AAAA,IAChE;AACA,QAAI,kBAAkB;AAClB,YAAM,OAAO,+CAA+C;AAAA,IAChE;AAAA,EACJ,CAAC;AACD,wBAAsB,YAAY,MAAM,UAAU,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC9D,KAAG,yCAAyC,YAAY;AACpD,UAAM,KAAK,MAAM,UAAU,QAAQ,CAAC,CAAC,CAAC;AACtC,UAAM,eAAe,EAAE;AAEvB,UAAM,OAAO,EAAE,EAAE,GAAG,GAAG,WAAW;AAAA,EACtC,CAAC;AACD,WAAS,kBAAkB,MAAM;AAC7B,OAAG,4BAA4B,YAAY;AACvC,YAAM,KAAK,MAAM,UAAU,QAAQ,EAAE,OAAO,KAAK,CAAC,CAAC;AACnD,SAAG,OAAO;AACV,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,OAAO;AAC1C,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,MAAM;AACxC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,IAAI;AAC9B,SAAG,MAAM;AACT,YAAM,SAAS,EAAE,MAAM,OAAO,CAAC;AAC/B,YAAM,eAAe,EAAE;AACvB,YAAM,SAAS,EAAE,OAAO,QAAQ,CAAC;AACjC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,YAAY;AAC/C,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,UAAU;AAC5C,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,QAAQ;AAAA,IACtC,CAAC;AACD,OAAG,yBAAyB,YAAY;AACpC,YAAM,CAAC,eAAe,IAAI,sBAAsB,IAAI;AACpD,YAAM,KAAK,MAAM,UAAU;AAAA,4CACK;AAAA,sBACtB,QAAQ,EAAE,OAAO,KAAK,CAAC;AAAA;AAAA,aAEhC;AACD,SAAG,OAAO;AACV,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,YAAO;AAC1C,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,MAAM;AACxC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,IAAI;AAC9B,SAAG,MAAM;AACT,YAAM,SAAS,EAAE,MAAM,OAAO,CAAC;AAC/B,YAAM,eAAe,EAAE;AACvB,YAAM,SAAS,EAAE,OAAO,QAAQ,CAAC;AACjC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,sBAAY;AAC/C,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,UAAU;AAC5C,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,QAAQ;AAAA,IACtC,CAAC;AAAA,EACL,CAAC;AACD,WAAS,QAAQ,MAAM;AACnB,OAAG,YAAY,YAAY;AACvB,YAAM,KAAK,MAAM;AAAA,QACb,QAAQ;AAAA,UACJ,MAAM;AAAA,UACN,KAAK;AAAA,UACL,KAAK;AAAA,UACL,OAAO;AAAA,QACX,CAAC;AAAA,MACL;AACA,SAAG,OAAO;AACV,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAC3B,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AAAA,IACzC,CAAC;AAAA,EACL,CAAC;AACD,WAAS,cAAc,MAAM;AACzB,QAAI;AACJ,eAAW,YAAY;AACnB,WAAK,MAAM,UAAU,QAAQ,CAAC,CAAC,CAAC;AAChC,aAAO,GAAG,KAAK,EAAE,GAAG,GAAG;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE;AACrC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,KAAK;AAAA,IAC3C,CAAC;AACD,OAAG,mCAAmC,YAAY;AAC9C,YAAM,gBAAgB,IAAI,YAAY,EAAE,QAAQ,SAAS,CAAC;AAC1D,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE;AACrC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,KAAK;AACvC,aAAO,GAAG,KAAK,EAAE,GAAG,GAAG;AAAA,IAC3B,CAAC;AACD,OAAG,eAAe,YAAY;AAC1B,YAAM,gBAAgB,IAAI,UAAU;AACpC,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAC3B,YAAM,gBAAgB,IAAI,UAAU;AACpC,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAAA,IAC/B,CAAC;AACD,OAAG,gBAAgB,YAAY;AAC3B,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,YAAM,SAAS,EAAE,OAAO,UAAU,CAAC;AACnC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAC3B,YAAM,SAAS,EAAE,OAAO,UAAU,CAAC;AACnC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAAA,IAC/B,CAAC;AACD,OAAG,iCAAiC,YAAY;AAC5C,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,YAAM,SAAS,EAAE,OAAO,UAAU,CAAC;AACnC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAC3B,YAAM,SAAS,EAAE,OAAO,gBAAgB,CAAC;AACzC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAChC,CAAC;AACD,OAAG,8CAA8C,YAAY;AACzD,SAAG,MAAM;AACT,MAAC,GAAmB,eAAe;AACnC,MAAC,GAAmB,OAAO;AAC3B,YAAM,eAAe,EAAE;AACvB,YAAM,SAAS,EAAE,OAAO,UAAU,CAAC;AACnC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAC3B,YAAM,SAAS,EAAE,OAAO,gBAAgB,CAAC;AACzC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAChC,CAAC;AACD,OAAG,cAAc,YAAY;AACzB,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,OAAO,EAAE,GAAG,GAAG;AACzB,SAAG,cAAc,IAAI,WAAW,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AACvD,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAC3B,SAAG,cAAc,IAAI,WAAW,SAAS,EAAE,QAAQ,IAAI,CAAC,CAAC;AACzD,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAAA,IAC/B,CAAC;AACD,OAAG,+BAA+B,YAAY;AAC1C,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,OAAO,EAAE,GAAG,GAAG;AACzB,SAAG;AAAA,QACC,IAAI,WAAW,SAAS;AAAA,UACpB,QAAQ;AAAA,UACR,UAAU;AAAA,QACd,CAAC;AAAA,MACL;AACA,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAC3B,SAAG;AAAA,QACC,IAAI,WAAW,SAAS;AAAA,UACpB,QAAQ;AAAA,UACR,UAAU;AAAA,QACd,CAAC;AAAA,MACL;AACA,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAChC,CAAC;AAAA,EACL,CAAC;AACD,WAAS,cAAc,MAAM;AACzB,QAAI;AACJ,eAAW,YAAY;AACnB,WAAK,MAAM,UAAU,QAAQ,CAAC,CAAC,CAAC;AAChC,aAAO,GAAG,KAAK,EAAE,GAAG,GAAG;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE;AACrC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,KAAK;AAAA,IAC3C,CAAC;AACD,OAAG,mCAAmC,YAAY;AAC9C,YAAM,gBAAgB,IAAI,cAAc,EAAE,QAAQ,SAAS,CAAC;AAC5D,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE;AACrC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,KAAK;AACvC,aAAO,GAAG,KAAK,EAAE,GAAG,GAAG;AAAA,IAC3B,CAAC;AACD,OAAG,eAAe,YAAY;AAC1B,YAAM,gBAAgB,IAAI,YAAY;AACtC,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAC3B,YAAM,gBAAgB,IAAI,YAAY;AACtC,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAChC,CAAC;AACD,OAAG,kBAAkB,YAAY;AAC7B,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,YAAM,SAAS,EAAE,OAAO,YAAY,CAAC;AACrC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAC3B,YAAM,SAAS,EAAE,OAAO,YAAY,CAAC;AACrC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAChC,CAAC;AACD,OAAG,mCAAmC,YAAY;AAC9C,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,YAAM,SAAS,EAAE,OAAO,YAAY,CAAC;AACrC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAC3B,YAAM,SAAS,EAAE,OAAO,kBAAkB,CAAC;AAC3C,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,KAAK;AACxC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,KAAK;AACvC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,GAAG;AAAA,IACjC,CAAC;AACD,OAAG,8CAA8C,YAAY;AACzD,SAAG,MAAM;AACT,MAAC,GAAmB,eAAe;AACnC,MAAC,GAAmB,OAAO;AAC3B,YAAM,eAAe,EAAE;AACvB,YAAM,SAAS,EAAE,OAAO,YAAY,CAAC;AACrC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAC3B,YAAM,SAAS,EAAE,OAAO,kBAAkB,CAAC;AAC3C,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,KAAK;AACxC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,KAAK;AACvC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,GAAG;AAAA,IACjC,CAAC;AACD,OAAG,cAAc,YAAY;AACzB,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,OAAO,EAAE,GAAG,GAAG;AACzB,SAAG,cAAc,IAAI,WAAW,SAAS,EAAE,QAAQ,GAAG,CAAC,CAAC;AACxD,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAC3B,SAAG,cAAc,IAAI,WAAW,SAAS,EAAE,QAAQ,KAAK,CAAC,CAAC;AAC1D,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAChC,CAAC;AACD,OAAG,+BAA+B,YAAY;AAC1C,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,OAAO,EAAE,GAAG,GAAG;AACzB,SAAG;AAAA,QACC,IAAI,WAAW,SAAS;AAAA,UACpB,QAAQ;AAAA,UACR,UAAU;AAAA,QACd,CAAC;AAAA,MACL;AACA,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAC3B,SAAG;AAAA,QACC,IAAI,WAAW,SAAS;AAAA,UACpB,QAAQ;AAAA,UACR,UAAU;AAAA,QACd,CAAC;AAAA,MACL;AACA,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,KAAK;AACxC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,KAAK;AACvC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,GAAG;AAAA,IACjC,CAAC;AAAA,EACL,CAAC;AACD,WAAS,qBAAqB,MAAM;AAChC,UAAM,WAAW,IAAI;AACrB,UAAM,YAAY,IAAI;AACtB,QAAI;AACJ,eAAW,YAAY;AACnB,eAAS,aAAa;AACtB,gBAAU,aAAa;AACvB,WAAK,MAAM,UAAU,QAAQ,EAAE,OAAO,GAAG,CAAC,CAAC;AAC3C,SAAG,iBAAiB,SAAS,CAAC,UAAiB;AArW3D;AAsWgB,kBAAU,WAAM,WAAN,mBAA8B,KAAK;AAAA,MACjD,CAAC;AACD,SAAG,iBAAiB,UAAU,CAAC,UAAiB;AAxW5D;AAyWgB,mBAAW,WAAM,WAAN,mBAA8B,KAAK;AAAA,MAClD,CAAC;AAAA,IACL,CAAC;AACD,OAAG,cAAc,YAAY;AACzB,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,OAAO,EAAE,GAAG,GAAG;AACzB,SAAG,cAAc,IAAI,WAAW,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AACvD,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAC5B,aAAO,SAAS,SAAS,EAAE,GAAG,MAAM,CAAC;AACrC,aAAO,UAAU,SAAS,EAAE,GAAG,MAAM,CAAC;AACtC,SAAG,cAAc,IAAI,WAAW,SAAS,EAAE,QAAQ,IAAI,CAAC,CAAC;AACzD,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAC5B,aAAO,SAAS,SAAS,EAAE,GAAG,MAAM,CAAC;AACrC,aAAO,UAAU,SAAS,EAAE,GAAG,MAAM,CAAC;AACtC,YAAM,SAAS,qBAAqB,EAAE;AACtC,aAAO,SAAS,SAAS,EAAE,GAAG,MAAM,CAAC;AACrC,aAAO,UAAU,SAAS,EAAE,GAAG,MAAM,CAAC;AAAA,IAC1C,CAAC;AACD,OAAG,wBAAwB,YAAY;AACnC,SAAG,MAAM;AACT,YAAM,SAAS,EAAE,MAAM,IAAI,CAAC;AAC5B,YAAM,SAAS,EAAE,OAAO,QAAQ,CAAC;AACjC,aAAO,SAAS,WAAW,GAAG,GAAG,OAAO,EAAE,GAAG,GAAG;AAChD,aAAO,UAAU,WAAW,GAAG,GAAG,QAAQ,EAAE,GAAG,GAAG;AAClD,YAAM,SAAS,EAAE,MAAM,MAAM,CAAC;AAC9B,YAAM,SAAS,EAAE,OAAO,QAAQ,CAAC;AACjC,aAAO,SAAS,WAAW,IAAI,GAAG,OAAO,EAAE,GAAG,GAAG;AACjD,aAAO,SAAS,WAAW,KAAK,GAAG,OAAO,EAAE,GAAG,GAAG;AAClD,aAAO,UAAU,WAAW,KAAK,GAAG,QAAQ,EAAE,GAAG,GAAG;AAAA,IACxD,CAAC;AACD,OAAG,kCAAkC,YAAY;AAC7C,SAAG,gBAAgB,EAAE,OAAO,UAAU;AACtC,SAAG,QAAQ;AACX,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,IAAI;AAC9B,SAAG,MAAM;AACT,YAAM,SAAS,EAAE,MAAM,IAAI,CAAC;AAC5B,aAAO,SAAS,WAAW,IAAI,GAAG,aAAa,EAAE,GAAG,GAAG;AACvD,YAAM,SAAS,EAAE,OAAO,YAAY,CAAC;AACrC,YAAM,SAAS,EAAE,OAAO,YAAY,CAAC;AACrC,YAAM,SAAS,EAAE,OAAO,YAAY,CAAC;AACrC,YAAM,SAAS,EAAE,OAAO,QAAQ,CAAC;AACjC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,IAAI;AAC9B,aAAO,SAAS,WAAW,IAAI,GAAG,cAAc,EAAE,GAAG,GAAG;AACxD,aAAO,SAAS,WAAW,IAAI,GAAG,aAAa,EAAE,GAAG,GAAG;AACvD,aAAO,UAAU,WAAW,IAAI,GAAG,QAAQ,EAAE,GAAG,GAAG;AAAA,IACvD,CAAC;AACD,OAAG,mCAAmC,YAAY;AAC9C,SAAG,gBAAgB;AAAA,QACf,OAAO;AAAA,QACP,UAAU;AAAA,QACV,iBAAiB;AAAA,QACjB,cAAc;AAAA,MAClB;AACA,YAAM,eAAe,EAAE;AACvB,SAAG,QAAQ;AACX,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAC5B,SAAG,MAAM;AACT,YAAM,SAAS,EAAE,MAAM,IAAI,CAAC;AAC5B,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,MAAM;AAChC,aAAO,SAAS,WAAW,GAAG,KAAK,GAAG,aAAa,EAAE,GAAG,GAAG;AAC3D,YAAM,SAAS,EAAE,OAAO,YAAY,CAAC;AACrC,YAAM,SAAS,EAAE,OAAO,YAAY,CAAC;AACrC,YAAM,SAAS,EAAE,OAAO,YAAY,CAAC;AACrC,YAAM,SAAS,EAAE,OAAO,YAAY,CAAC;AACrC,YAAM,SAAS,EAAE,OAAO,YAAY,CAAC;AACrC,YAAM,SAAS,EAAE,OAAO,YAAY,CAAC;AACrC,YAAM,SAAS,EAAE,OAAO,YAAY,CAAC;AACrC,YAAM,SAAS,EAAE,OAAO,YAAY,CAAC;AACrC,YAAM,SAAS,EAAE,OAAO,YAAY,CAAC;AACrC,YAAM,SAAS,EAAE,OAAO,YAAY,CAAC;AACrC,YAAM,SAAS,EAAE,MAAM,IAAI,CAAC;AAC5B,YAAM,SAAS,EAAE,OAAO,QAAQ,CAAC;AACjC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,OAAO;AACjC,aAAO,SAAS,WAAW,OAAO,GAAG,cAAc,EAAE,GAAG,GAAG;AAC3D,aAAO,UAAU,WAAW,OAAO,GAAG,QAAQ,EAAE,GAAG,GAAG;AAAA,IAC1D,CAAC;AACD,OAAG,wCAAwC,YAAY;AACnD,SAAG,MAAM;AACT,YAAM,SAAS,EAAE,OAAO,UAAU,CAAC;AACnC,aAAO,SAAS,SAAS,EAAE,GAAG,MAAM,CAAC;AACrC,aAAO,UAAU,SAAS,EAAE,GAAG,MAAM,CAAC;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAC5B,YAAM,SAAS,EAAE,OAAO,YAAY,CAAC;AACrC,aAAO,SAAS,SAAS,EAAE,GAAG,MAAM,CAAC;AACrC,aAAO,UAAU,SAAS,EAAE,GAAG,MAAM,CAAC;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAChC,CAAC;AACD,OAAG,uCAAuC,YAAY;AAClD,YAAM,gBAAgB,IAAI,UAAU;AACpC,aAAO,SAAS,SAAS,EAAE,GAAG,MAAM,CAAC;AACrC,aAAO,UAAU,SAAS,EAAE,GAAG,MAAM,CAAC;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAC5B,YAAM,gBAAgB,IAAI,YAAY;AACtC,aAAO,SAAS,SAAS,EAAE,GAAG,MAAM,CAAC;AACrC,aAAO,UAAU,SAAS,EAAE,GAAG,MAAM,CAAC;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAChC,CAAC;AACD,OAAG,2BAA2B,YAAY;AACtC,UAAI,SAAS,GAAG,WAAW,cAAc,UAAU;AACnD,YAAM,aAAa,OAAO,sBAAsB;AAChD,YAAM,UAAU;AAAA,QACZ,SAAS;AAAA,QACT,UAAU;AAAA,QACV,UAAU;AAAA,QACV,SAAS,WAAW,IAAI;AAAA,QACxB,SAAS,WAAW,IAAI;AAAA,MAC5B;AACA,MACI,GAGF,QAAQ,oBAAoB,MAAM;AAChC;AAAA,MACJ;AACA,MACI,GAGF,QAAQ,wBAAwB,MAAM;AACpC;AAAA,MACJ;AACA,UAAI,QAAQ,SAAS,IAAI,OAAO;AAChC,aAAO,cAAc,IAAI,aAAa,eAAe,OAAO,CAAC;AAC7D,YAAM;AACN,aAAO,cAAc,IAAI,aAAa,aAAa,OAAO,CAAC;AAC3D,aAAO,SAAS,SAAS,EAAE,GAAG,MAAM,CAAC;AACrC,aAAO,UAAU,SAAS,EAAE,GAAG,MAAM,CAAC;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAC5B,eAAS,GAAG,WAAW,cAAc,YAAY;AACjD,YAAM,eAAe,OAAO,sBAAsB;AAClD,cAAQ,UAAU,aAAa,IAAI;AACnC,cAAQ,UAAU,aAAa,IAAI;AACnC,cAAQ,SAAS,IAAI,OAAO;AAC5B,aAAO,cAAc,IAAI,aAAa,eAAe,OAAO,CAAC;AAC7D,YAAM;AACN,aAAO,cAAc,IAAI,aAAa,aAAa,OAAO,CAAC;AAC3D,aAAO,SAAS,SAAS,EAAE,GAAG,MAAM,CAAC;AACrC,aAAO,UAAU,SAAS,EAAE,GAAG,MAAM,CAAC;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAChC,CAAC;AACD,OAAG,8BAA8B,YAAY;AACzC,YAAM,WAAW,GAAG,WAAW;AAAA,QAC3B;AAAA,MACJ;AACA,YAAM,eAAe,SAAS,sBAAsB;AACpD,YAAM,mBAAqC;AAAA,QACvC,aAAa,IAAI,aAAa,QAAQ;AAAA,QACtC,aAAa,IAAI,aAAa,SAAS;AAAA,MAC3C;AACA,YAAM,aAAa,GAAG,WAAW;AAAA,QAC7B;AAAA,MACJ;AACA,YAAM,iBAAiB,WAAW,sBAAsB;AACxD,YAAM,qBAAuC;AAAA,QACzC,eAAe,IAAI,eAAe,QAAQ;AAAA,QAC1C,eAAe,IAAI,eAAe,SAAS;AAAA,MAC/C;AACA,gBAAU;AAAA,QACN,OAAO;AAAA,UACH;AAAA,YACI,MAAM;AAAA,YACN,UAAU;AAAA,UACd;AAAA,UACA;AAAA,YACI,MAAM;AAAA,UACV;AAAA,QACJ;AAAA,MACJ,CAAC;AACD,YAAM,SAAS,IAAI,OAAO;AAC1B,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAC5B,aAAO,SAAS,SAAS,EAAE,GAAG,MAAM,CAAC;AACrC,aAAO,UAAU,SAAS,EAAE,GAAG,MAAM,CAAC;AACtC,YAAM,SAAS,IAAI,OAAO;AAC1B,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAC5B,aAAO,SAAS,SAAS,EAAE,GAAG,MAAM,CAAC;AACrC,aAAO,UAAU,SAAS,EAAE,GAAG,MAAM,CAAC;AACtC,gBAAU;AAAA,QACN,OAAO;AAAA,UACH;AAAA,YACI,MAAM;AAAA,YACN,UAAU;AAAA,UACd;AAAA,QACJ;AAAA,MACJ,CAAC;AACD,UAAI,eAAe,oBAAoB;AACvC,aAAO,cAAc;AAEjB,wBAAgB;AAChB,cAAM,UAAU;AAAA,MACpB;AACA,aAAO,SAAS,SAAS,EAAE,GAAG,MAAM,CAAC;AACrC,aAAO,UAAU,SAAS,EAAE,GAAG,MAAM,CAAC;AACtC,YAAM,UAAU;AAAA,QACZ,OAAO;AAAA,UACH;AAAA,YACI,MAAM;AAAA,UACV;AAAA,QACJ;AAAA,MACJ,CAAC;AACD,aAAO,SAAS,SAAS,EAAE,GAAG,MAAM,CAAC;AACrC,aAAO,UAAU,SAAS,EAAE,GAAG,MAAM,CAAC;AAAA,IAC1C,CAAC;AAAA,EACL,CAAC;AACD,KAAG,oDAAoD,YAAY;AAC/D,UAAM,WAAW,IAAI;AACrB,UAAM,KAAK,MAAM,UAAU,QAAQ,EAAE,OAAO,GAAG,CAAC,CAAC;AACjD,OAAG,iBAAiB,SAAS,MAAM,SAAS,CAAC;AAC7C,WAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,WAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAC5B,UAAM,WAAW,GAAG,WAAW,cAAc,UAAU;AACvD,UAAM,eAAe,SAAS,sBAAsB;AACpD,UAAM,mBAAqC;AAAA,MACvC,aAAa,IAAI,aAAa,QAAQ;AAAA,MACtC,aAAa,IAAI,aAAa,SAAS;AAAA,IAC3C;AACA,UAAM,aAAa,GAAG,WAAW;AAAA,MAC7B;AAAA,IACJ;AACA,UAAM,iBAAiB,WAAW,sBAAsB;AACxD,UAAM,qBAAuC;AAAA,MACzC,eAAe,IAAI,eAAe,QAAQ;AAAA,MAC1C,eAAe,IAAI,eAAe,SAAS;AAAA,IAC/C;AACA,UAAM,kBAAoC;AAAA,MACtC,eAAe,IAAI,eAAe,QAAQ;AAAA,MAC1C,eAAe,IAAI,eAAe,SAAS;AAAA,IAC/C;AACA,UAAM,UAAU;AAAA,MACZ,OAAO;AAAA,QACH;AAAA,UACI,MAAM;AAAA,UACN,UAAU;AAAA,QACd;AAAA,QACA;AAAA,UACI,MAAM;AAAA,QACV;AAAA,MACJ;AAAA,IACJ,CAAC;AACD,UAAM,SAAS,IAAI,OAAO;AAC1B,QAAI,QAAQ,KAAK,SAAS;AAC1B,WAAO,GAAG,cAAc,EAAE,GAAG,MAAM,OAAO,KAAK,CAAC;AAChD,WAAO,GAAG,aAAa,EAAE,GAAG,MAAM,OAAO,KAAK,CAAC;AAC/C,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,KAAK;AAC/B,aAAS,aAAa;AACtB,UAAM,UAAU;AAAA,MACZ,OAAO;AAAA,QACH;AAAA,UACI,MAAM;AAAA,UACN,UAAU;AAAA,QACd;AAAA,MACJ;AAAA,IACJ,CAAC;AACD,YAAQ,QAAQ,SAAS;AACzB,WAAO,GAAG,cAAc,EAAE,GAAG,MAAM,OAAO,KAAK,CAAC;AAChD,WAAO,GAAG,aAAa,EAAE,GAAG,MAAM,OAAO,KAAK,CAAC;AAC/C,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,KAAK;AAC/B,aAAS,aAAa;AACtB,UAAM,UAAU;AAAA,MACZ,OAAO;AAAA,QACH;AAAA,UACI,MAAM;AAAA,UACN,UAAU;AAAA,QACd;AAAA,MACJ;AAAA,IACJ,CAAC;AACD,YAAQ,QAAQ,SAAS;AACzB,WAAO,GAAG,cAAc,EAAE,GAAG,MAAM,OAAO,KAAK,CAAC;AAChD,WAAO,GAAG,aAAa,EAAE,GAAG,MAAM,OAAO,KAAK,CAAC;AAC/C,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,KAAK;AAC/B,aAAS,aAAa;AACtB,UAAM,SAAS,IAAI,OAAO;AAC1B,YAAQ,QAAQ,SAAS;AACzB,WAAO,GAAG,cAAc,EAAE,GAAG,MAAM,OAAO,KAAK,CAAC;AAChD,WAAO,GAAG,aAAa,EAAE,GAAG,MAAM,OAAO,KAAK,CAAC;AAC/C,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,KAAK;AAC/B,aAAS,aAAa;AACtB,UAAM,UAAU;AAAA,MACZ,OAAO;AAAA,QACH;AAAA,UACI,MAAM;AAAA,QACV;AAAA,MACJ;AAAA,IACJ,CAAC;AACD,QAAI,eAAe;AACnB,WAAO,cAAc;AAEjB,sBAAgB;AAChB,YAAM,UAAU;AAAA,IACpB;AACA,UAAM,eAAe,EAAE;AACvB,YAAQ,QAAQ,SAAS;AACzB,WAAO,GAAG,cAAc,EAAE,GAAG,MAAM,OAAO,KAAK,CAAC;AAChD,WAAO,GAAG,aAAa,EAAE,GAAG,MAAM,OAAO,KAAK,CAAC;AAC/C,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,KAAK;AAAA,EACnC,CAAC;AACD,KAAG,4BAA4B,YAAY;AACvC,UAAM,KAAK,MAAM,UAAU,QAAQ,CAAC,CAAC,CAAC;AACtC,OAAG,QAAQ;AACX,UAAM,eAAe,EAAE;AACvB,WAAO,GAAG,cAAc,EAAE,GAAG,MAAM,OAAO;AAC1C,WAAO,GAAG,aAAa,EAAE,GAAG,MAAM,MAAM;AACxC,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,GAAI;AAC9B,OAAG,gBAAgB;AACnB,UAAM,eAAe,EAAE;AACvB,WAAO,GAAG,cAAc,EAAE,GAAG,MAAM,OAAO;AAC1C,WAAO,GAAG,aAAa,EAAE,GAAG,MAAM,MAAM;AACxC,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,IAAI;AAAA,EAClC,CAAC;AACD,WAAS,wCAAwC,MAAM;AACnD,OAAG,oBAAoB,YAAY;AAC/B,YAAM,KAAK,MAAM,UAAU,SAAS,EAAE,OAAO,SAAS,CAAC,CAAC;AACxD,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,IAAI;AAC9B,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,OAAO;AAC1C,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,MAAM;AAAA,IAC5C,CAAC;AACD,OAAG,oBAAoB,YAAY;AAC/B,YAAM,KAAK,MAAM,UAAU,SAAS,EAAE,OAAO,KAAK,CAAC,CAAC;AACpD,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,KAAK;AACxC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,MAAM;AACxC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,IAAI;AAC9B,YAAM,gBAAgB,IAAI,YAAY;AACtC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,KAAK;AACxC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,MAAM;AACxC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,IAAI;AAC9B,YAAM,gBAAgB,IAAI,UAAU;AACpC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,KAAK;AACxC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,MAAM;AACxC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,IAAI;AAC9B,SAAG,MAAM;AACT,SAAG,QAAQ;AACX,YAAM,SAAS,EAAE,MAAM,KAAK,CAAC;AAC7B,YAAM,SAAS,EAAE,OAAO,QAAQ,CAAC;AACjC,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,KAAK;AACxC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,MAAM;AACxC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,IAAI;AAC9B,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,KAAK;AACxC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,MAAM;AACxC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,IAAI;AAAA,IAClC,CAAC;AACD,OAAG,oBAAoB,YAAY;AAC/B,YAAM,KAAK,MAAM,UAAU,SAAS,EAAE,OAAO,OAAO,CAAC,CAAC;AACtD,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,eAAY;AAC/C,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,QAAQ;AAC1C,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,MAAM;AAAA,IACpC,CAAC;AACD,OAAG,iBAAiB,YAAY;AAC5B,YAAM,KAAK,MAAM,UAAU,MAAM,EAAE,OAAO,GAAG,CAAC,CAAC;AAC/C,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,WAAW;AAC9C,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAChC,CAAC;AACD,OAAG,8CAA8C,YAAY;AACzD,YAAM,KAAK,MAAM,UAAU,OAAO,EAAE,OAAO,GAAG,CAAC,CAAC;AAChD,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,MAAM;AACzC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAChC,CAAC;AAAA,EACL,CAAC;AACD,WAAS,OAAO,MAAM;AAClB,QAAI;AACJ,QAAI,iBAAiB;AACrB,QAAI,kBAAkB;AACtB,eAAW,YAAY;AACnB,WAAK,MAAM;AAAA,QACP,QAAQ;AAAA,UACJ,KAAK;AAAA,UACL,OAAO;AAAA,UACP,SAAS,CAAC,UAAmB,iBAAiB;AAAA,UAC9C,UAAU,CAAC,UAAmB,kBAAkB;AAAA,QACpD,CAAC;AAAA,MACL;AACA,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAChC,CAAC;AACD,OAAG,oBAAoB,YAAY;AAC/B,SAAG,MAAM;AACT,YAAM,SAAS,EAAE,MAAM,KAAK,CAAC;AAC7B,YAAM,SAAS,EAAE,OAAO,QAAQ,CAAC;AACjC,YAAM,eAAe,EAAE;AACvB,aAAO,gBAAgB,kBAAkB,EAAE,GAAG,MAAM,EAAE;AACtD,aAAO,iBAAiB,mBAAmB,EAAE,GAAG,MAAM,EAAE;AACxD,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAChC,CAAC;AACD,OAAG,sBAAsB,YAAY;AACjC,SAAG,QAAQ;AACX,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAChC,CAAC;AACD,OAAG,uBAAuB,YAAY;AAClC,SAAG,MAAM;AACT,YAAM,SAAS,EAAE,MAAM,KAAK,CAAC;AAC7B,YAAM,SAAS,EAAE,OAAO,QAAQ,CAAC;AACjC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAChC,CAAC;AACD,OAAG,4BAA4B,YAAY;AACvC,YAAM,gBAAgB,IAAI,UAAU;AACpC,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAChC,CAAC;AACD,OAAG,kBAAkB,YAAY;AAC7B,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAAA,IAC/B,CAAC;AAAA,EACL,CAAC;AACD,WAAS,OAAO,MAAM;AAClB,QAAI;AACJ,QAAI,iBAAiB;AACrB,QAAI,kBAAkB;AACtB,eAAW,YAAY;AACnB,WAAK,MAAM;AAAA,QACP,QAAQ;AAAA,UACJ,KAAK;AAAA,UACL,OAAO;AAAA,UACP,SAAS,CAAC,UAAmB,iBAAiB;AAAA,UAC9C,UAAU,CAAC,UAAmB,kBAAkB;AAAA,QACpD,CAAC;AAAA,MACL;AACA,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAChC,CAAC;AACD,OAAG,oBAAoB,YAAY;AAC/B,SAAG,MAAM;AACT,YAAM,SAAS,EAAE,OAAO,YAAY,CAAC;AACrC,YAAM,SAAS,EAAE,OAAO,YAAY,CAAC;AACrC,YAAM,SAAS,EAAE,MAAM,IAAI,CAAC;AAC5B,YAAM,SAAS,EAAE,OAAO,QAAQ,CAAC;AACjC,YAAM,eAAe,EAAE;AACvB,aAAO,gBAAgB,kBAAkB,EAAE,GAAG,MAAM,EAAE;AACtD,aAAO,iBAAiB,mBAAmB,EAAE,GAAG,MAAM,EAAE;AACxD,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAChC,CAAC;AACD,QAAI,iCAAiC,YAAY;AAE7C,YAAM;AAAA,QACF;AAAA,MACJ;AACA,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,aAAa,SAAS,EAAE,GAAG,MAAM,SAAS;AACpD,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,aAAa,SAAS,EAAE,GAAG,MAAM,MAAM;AACjD,SAAG,gBAAgB;AAAA,QACf,uBAAuB;AAAA,QACvB,uBAAuB;AAAA,MAC3B;AACA,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,aAAa,SAAS,EAAE,GAAG,MAAM,SAAS;AAAA,IACxD,CAAC;AACD,QAAI,kCAAkC,YAAY;AAE9C,YAAM;AAAA,QACF;AAAA,MACJ;AACA,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,aAAa,SAAS,EAAE,GAAG,MAAM,SAAS;AACpD,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,aAAa,SAAS,EAAE,GAAG,MAAM,SAAS;AACpD,SAAG,gBAAgB;AAAA,QACf,uBAAuB;AAAA,QACvB,uBAAuB;AAAA,MAC3B;AACA,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,aAAa,SAAS,EAAE,GAAG,MAAM,SAAS;AAAA,IACxD,CAAC;AACD,OAAG,sBAAsB,YAAY;AACjC,SAAG,QAAQ;AACX,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAChC,CAAC;AACD,OAAG,uBAAuB,YAAY;AAClC,SAAG,MAAM;AACT,YAAM,SAAS,EAAE,OAAO,IAAI,CAAC;AAC7B,YAAM,SAAS,EAAE,OAAO,QAAQ,CAAC;AACjC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,KAAK;AACxC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,KAAK;AACvC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,GAAG;AAAA,IACjC,CAAC;AACD,OAAG,8BAA8B,YAAY;AACzC,YAAM,gBAAgB,IAAI,YAAY;AACtC,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAChC,CAAC;AACD,OAAG,kBAAkB,YAAY;AAC7B,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAChC,CAAC;AAAA,EACL,CAAC;AACD,WAAS,QAAQ,MAAM;AACnB,QAAI;AACJ,eAAW,YAAY;AACnB,WAAK,MAAM,UAAU,QAAQ,EAAE,OAAO,IAAI,MAAM,EAAE,CAAC,CAAC;AACpD,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAChC,CAAC;AACD,OAAG,gBAAgB,YAAY;AAC3B,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,YAAM,SAAS,EAAE,OAAO,UAAU,CAAC;AACnC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAChC,CAAC;AACD,OAAG,kBAAkB,YAAY;AAC7B,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,YAAM,SAAS,EAAE,OAAO,YAAY,CAAC;AACrC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAAA,IAC/B,CAAC;AACD,OAAG,uBAAuB,YAAY;AAClC,YAAM,gBAAgB,IAAI,UAAU;AACpC,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAChC,CAAC;AACD,OAAG,yBAAyB,YAAY;AACpC,YAAM,gBAAgB,IAAI,YAAY;AACtC,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAAA,IAC/B,CAAC;AAAA,EACL,CAAC;AACD,WAAS,sBAAsB,MAAM;AACjC,QAAI;AACJ,eAAW,YAAY;AACnB,WAAK,MAAM,UAAU,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;AACzC,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE;AACrC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,KAAK;AACvC,aAAO,GAAG,KAAK,EAAE,GAAG,GAAG;AAAA,IAC3B,CAAC;AACD,OAAG,SAAS,YAAY;AACpB,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,YAAM,SAAS,EAAE,OAAO,UAAU,CAAC;AACnC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAC3B,YAAM,SAAS,EAAE,OAAO,UAAU,CAAC;AACnC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAC3B,YAAM,SAAS,EAAE,OAAO,UAAU,CAAC;AACnC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAChC,CAAC;AACD,OAAG,kBAAkB,YAAY;AAC7B,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,YAAM,SAAS,EAAE,OAAO,UAAU,CAAC;AACnC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAC3B,YAAM,SAAS,EAAE,OAAO,UAAU,CAAC;AACnC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAC5B,YAAM,SAAS,EAAE,OAAO,UAAU,CAAC;AACnC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAChC,CAAC;AACD,OAAG,6BAA6B,YAAY;AACxC,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,YAAM,SAAS,EAAE,OAAO,UAAU,CAAC;AACnC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAC3B,YAAM,SAAS,EAAE,OAAO,UAAU,CAAC;AACnC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAC3B,YAAM,SAAS,EAAE,OAAO,UAAU,CAAC;AACnC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAChC,CAAC;AACD,OAAG,2BAA2B,YAAY;AACtC,SAAG,MAAM;AACT,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,YAAM,SAAS,EAAE,OAAO,UAAU,CAAC;AACnC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAC3B,YAAM,SAAS,EAAE,OAAO,UAAU,CAAC;AACnC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAC3B,YAAM,SAAS,EAAE,OAAO,UAAU,CAAC;AACnC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAAA,IAC/B,CAAC;AACD,OAAG,wBAAwB,YAAY;AACnC,SAAG,QAAQ;AACX,SAAG,MAAM;AACT,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAC3B,SAAG,QAAQ;AACX,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAC3B,SAAG,QAAQ;AACX,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,GAAG;AACtC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,GAAG;AACrC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAAA,IAC/B,CAAC;AAAA,EACL,CAAC;AACD,WAAS,iBAAiB,MAAM;AAC5B,QAAI;AACJ,eAAW,YAAY;AACnB,WAAK,MAAM,UAAU,cAAc,cAAc,IAAI,CAAC;AACtD,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,KAAK;AACxC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,KAAK;AACvC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,GAAG;AAC7B;AAAA,QACK,GAA2C;AAAA,MAChD,EAAE,GAAG,MAAM,wBAAwB;AAAA,IACvC,CAAC;AACD,OAAG,uBAAuB,YAAY;AAClC,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,KAAK;AACxC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,KAAK;AACvC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,GAAG;AAC7B;AAAA,QACK,GAA2C;AAAA,MAChD,EAAE,GAAG,MAAM,EAAE;AACb,SAAG,KAAK;AACR,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,KAAK;AACxC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,KAAK;AACvC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,GAAG;AAC7B;AAAA,QACK,GAA2C;AAAA,MAChD,EAAE,GAAG,MAAM,wBAAwB;AAAA,IACvC,CAAC;AACD,OAAG,gDAAgD,YAAY;AAC3D,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,KAAK;AACxC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,KAAK;AACvC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,GAAG;AAC7B;AAAA,QACK,GAA2C;AAAA,MAChD,EAAE,GAAG,MAAM,EAAE;AACb,YAAM,SAAS,EAAE,MAAM,KAAK,CAAC;AAC7B,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAC5B;AAAA,QACK,GAA2C;AAAA,MAChD,EAAE,GAAG,MAAM,IAAI;AACf,YAAM,SAAS,EAAE,OAAO,YAAY,CAAC;AACrC,YAAM,SAAS,EAAE,OAAO,YAAY,CAAC;AACrC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,KAAK;AACxC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,KAAK;AACvC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,GAAG;AAC7B;AAAA,QACK,GAA2C;AAAA,MAChD,EAAE,GAAG,MAAM,EAAE;AACb,SAAG,KAAK;AACR,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,KAAK;AACxC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,KAAK;AACvC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,GAAG;AAC7B;AAAA,QACK,GAA2C;AAAA,MAChD,EAAE,GAAG,MAAM,wBAAwB;AAAA,IACvC,CAAC;AACD,OAAG,+CAA+C,YAAY;AAC1D,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,YAAM,SAAS,EAAE,OAAO,UAAU,CAAC;AACnC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,KAAK;AACxC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,KAAK;AACvC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,GAAG;AAC7B;AAAA,QACK,GAA2C;AAAA,MAChD,EAAE,GAAG,MAAM,KAAK;AAChB,SAAG,KAAK;AACR,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,KAAK;AACxC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,KAAK;AACvC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,GAAG;AAC7B;AAAA,QACK,GAA2C;AAAA,MAChD,EAAE,GAAG,MAAM,KAAK;AAAA,IACpB,CAAC;AACD,OAAG,2CAA2C,YAAY;AACtD,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,YAAM,gBAAgB,IAAI,UAAU;AACpC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,KAAK;AACxC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,KAAK;AACvC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,GAAG;AAC7B;AAAA,QACK,GAA2C;AAAA,MAChD,EAAE,GAAG,MAAM,KAAK;AAChB,SAAG,KAAK;AACR,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,KAAK;AACxC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,KAAK;AACvC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,GAAG;AAC7B;AAAA,QACK,GAA2C;AAAA,MAChD,EAAE,GAAG,MAAM,KAAK;AAAA,IACpB,CAAC;AACD,OAAG,iDAAiD,YAAY;AAC5D,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,YAAM,SAAS,EAAE,OAAO,YAAY,CAAC;AACrC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAC5B;AAAA,QACK,GAA2C;AAAA,MAChD,EAAE,GAAG,MAAM,IAAI;AACf,SAAG,KAAK;AACR,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAC5B;AAAA,QACK,GAA2C;AAAA,MAChD,EAAE,GAAG,MAAM,IAAI;AAAA,IACnB,CAAC;AACD,OAAG,6CAA6C,YAAY;AACxD,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,YAAM,gBAAgB,IAAI,YAAY;AACtC,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAC5B;AAAA,QACK,GAA2C;AAAA,MAChD,EAAE,GAAG,MAAM,IAAI;AACf,SAAG,KAAK;AACR,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,IAAI;AACvC,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,IAAI;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAC5B;AAAA,QACK,GAA2C;AAAA,MAChD,EAAE,GAAG,MAAM,IAAI;AAAA,IACnB,CAAC;AAAA,EACL,CAAC;AACD,KAAG,8CAA8C,YAAY;AACzD,UAAM,KAAK,MAAM,UAAU,QAAQ,EAAE,aAAa,KAAK,CAAC,CAAC;AACzD,UAAM,SAAS,GAAG,WAAW,cAAc,UAAU;AACrD,UAAM,WAAW,GAAG,WAAW,cAAc,YAAY;AACzD,WAAO,MAAM,EAAE,GAAG,GAAG;AACrB,WAAO,QAAQ,EAAE,GAAG,GAAG;AAAA,EAC3B,CAAC;AACD,WAAS,YAAY,MAAM;AACvB,QAAI;AACJ,eAAW,YAAY;AACnB,WAAK,MAAM,UAAU,QAAQ,EAAE,UAAU,MAAM,OAAO,KAAK,CAAC,CAAC;AAC7D,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,OAAO;AAC1C,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,MAAM;AACxC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,IAAI;AAC9B,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AAAA,IAC3B,CAAC;AACD,cAAU,YAAY;AAClB,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,OAAO;AAC1C,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,MAAM;AACxC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,IAAI;AAAA,IAClC,CAAC;AACD,OAAG,0BAA0B,YAAY;AACrC,YAAM,SAAS,EAAE,MAAM,QAAQ,CAAC;AAChC,YAAM,eAAe,EAAE;AACvB,YAAM,SAAS,EAAE,OAAO,QAAQ,CAAC;AAAA,IACrC,CAAC;AACD,OAAG,mCAAmC,YAAY;AAC9C,YAAM,SAAS,EAAE,OAAO,UAAU,CAAC;AAAA,IACvC,CAAC;AACD,OAAG,mCAAmC,YAAY;AAC9C,YAAM,SAAS,EAAE,OAAO,YAAY,CAAC;AAAA,IACzC,CAAC;AACD,OAAG,iCAAiC,YAAY;AAC5C,SAAG,cAAc,IAAI,WAAW,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AAAA,IAC3D,CAAC;AACD,OAAG,iCAAiC,YAAY;AAC5C,SAAG,cAAc,IAAI,WAAW,SAAS,EAAE,QAAQ,GAAG,CAAC,CAAC;AAAA,IAC5D,CAAC;AACD,OAAG,yCAAyC,YAAY;AACpD,YAAM,gBAAgB,IAAI,UAAU;AAAA,IACxC,CAAC;AACD,OAAG,yCAAyC,YAAY;AACpD,YAAM,gBAAgB,IAAI,YAAY;AAAA,IAC1C,CAAC;AAAA,EACL,CAAC;AACD,WAAS,YAAY,MAAM;AACvB,QAAI;AACJ,eAAW,YAAY;AACnB,WAAK,MAAM,UAAU,QAAQ,EAAE,UAAU,MAAM,OAAO,KAAK,CAAC,CAAC;AAC7D,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,OAAO;AAC1C,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,MAAM;AACxC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,IAAI;AAC9B,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AAAA,IAC3B,CAAC;AACD,cAAU,YAAY;AAClB,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,cAAc,EAAE,GAAG,MAAM,OAAO;AAC1C,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,MAAM;AACxC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,IAAI;AAAA,IAClC,CAAC;AACD,OAAG,0BAA0B,YAAY;AACrC,YAAM,SAAS,EAAE,MAAM,QAAQ,CAAC;AAChC,YAAM,eAAe,EAAE;AACvB,YAAM,SAAS,EAAE,OAAO,QAAQ,CAAC;AAAA,IACrC,CAAC;AACD,OAAG,mCAAmC,YAAY;AAC9C,YAAM,SAAS,EAAE,OAAO,UAAU,CAAC;AAAA,IACvC,CAAC;AACD,OAAG,mCAAmC,YAAY;AAC9C,YAAM,SAAS,EAAE,OAAO,YAAY,CAAC;AAAA,IACzC,CAAC;AACD,OAAG,iCAAiC,YAAY;AAC5C,SAAG,cAAc,IAAI,WAAW,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AAAA,IAC3D,CAAC;AACD,OAAG,iCAAiC,YAAY;AAC5C,SAAG,cAAc,IAAI,WAAW,SAAS,EAAE,QAAQ,GAAG,CAAC,CAAC;AAAA,IAC5D,CAAC;AACD,OAAG,yCAAyC,YAAY;AACpD,YAAM,gBAAgB,IAAI,UAAU;AAAA,IACxC,CAAC;AACD,OAAG,yCAAyC,YAAY;AACpD,YAAM,gBAAgB,IAAI,YAAY;AAAA,IAC1C,CAAC;AAAA,EACL,CAAC;AACD,WAAS,uBAAuB,MAAM;AAClC,OAAG,6BAA6B,YAAY;AACxC,YAAM,QAAwB;AAAA;AAAA,sBAEpB,QAAQ;AAAA,QACN,UAAU,MAAM;AACZ;AAAA,QACJ;AAAA,MACJ,CAAC;AAAA;AAAA,aAER;AAGD,YAAM,WAAY,MAAM;AAAA,QACpB,CAAC;AAAA,MACL;AAIA;AAAA,QACI;AAAA,UACI;AAAA,UACA,CAAC,SAAS,KAAK,SAAS;AAAA,QAC5B;AAAA,QACA;AAAA,MACJ,EAAE,GAAG,IAAI,GAAG;AAEZ;AAAA,QACI;AAAA,UACI;AAAA,UACA,CAAC,SAAS,KAAK,SAAS;AAAA,QAC5B;AAAA,QACA;AAAA,MACJ,EAAE,GAAG,IAAI,GAAG;AAAA,IAChB,CAAC;AAAA,EACL,CAAC;AACL,CAAC;",
6
6
  "names": []
7
7
  }