@spectrum-web-components/number-field 0.40.1 → 0.40.2

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.
@@ -647,6 +647,24 @@
647
647
  }
648
648
  ]
649
649
  },
650
+ {
651
+ "kind": "method",
652
+ "name": "valueWithLimits",
653
+ "privacy": "private",
654
+ "return": {
655
+ "type": {
656
+ "text": "number"
657
+ }
658
+ },
659
+ "parameters": [
660
+ {
661
+ "name": "nextValue",
662
+ "type": {
663
+ "text": "number"
664
+ }
665
+ }
666
+ ]
667
+ },
650
668
  {
651
669
  "kind": "method",
652
670
  "name": "validateInput",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spectrum-web-components/number-field",
3
- "version": "0.40.1",
3
+ "version": "0.40.2",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -58,13 +58,13 @@
58
58
  ],
59
59
  "dependencies": {
60
60
  "@internationalized/number": "^3.1.0",
61
- "@spectrum-web-components/base": "^0.40.1",
62
- "@spectrum-web-components/icon": "^0.40.1",
63
- "@spectrum-web-components/icons-ui": "^0.40.1",
64
- "@spectrum-web-components/infield-button": "^0.40.1",
65
- "@spectrum-web-components/reactive-controllers": "^0.40.1",
66
- "@spectrum-web-components/shared": "^0.40.1",
67
- "@spectrum-web-components/textfield": "^0.40.1"
61
+ "@spectrum-web-components/base": "^0.40.2",
62
+ "@spectrum-web-components/icon": "^0.40.2",
63
+ "@spectrum-web-components/icons-ui": "^0.40.2",
64
+ "@spectrum-web-components/infield-button": "^0.40.2",
65
+ "@spectrum-web-components/reactive-controllers": "^0.40.2",
66
+ "@spectrum-web-components/shared": "^0.40.2",
67
+ "@spectrum-web-components/textfield": "^0.40.2"
68
68
  },
69
69
  "devDependencies": {
70
70
  "@formatjs/intl-numberformat": "^8.3.5",
@@ -76,5 +76,5 @@
76
76
  "./sp-*.js",
77
77
  "./**/*.dev.js"
78
78
  ],
79
- "gitHead": "a75c4f83094c505d64658dbc7de20b5f18a8fde1"
79
+ "gitHead": "e5fd35c7a98569150ca695ec0e0e7411c9c64c28"
80
80
  }
@@ -89,6 +89,7 @@ export declare class NumberField extends TextfieldBase {
89
89
  protected handleCompositionStart(): void;
90
90
  protected handleCompositionEnd(): void;
91
91
  protected handleInput(event: Event): void;
92
+ private valueWithLimits;
92
93
  private validateInput;
93
94
  protected get displayValue(): string;
94
95
  protected clearNumberFormatterCache(): void;
@@ -226,6 +226,8 @@ export class NumberField extends TextfieldBase {
226
226
  if (isNaN(this.value)) {
227
227
  value = min;
228
228
  }
229
+ value = this.valueWithLimits(value);
230
+ this.requestUpdate();
229
231
  this._value = this.validateInput(value);
230
232
  this.inputElement.value = value.toString();
231
233
  this.inputElement.dispatchEvent(
@@ -353,15 +355,20 @@ export class NumberField extends TextfieldBase {
353
355
  const nextSelectStart = (selectionStart || currentLength) - (currentLength - previousLength);
354
356
  this.inputElement.setSelectionRange(nextSelectStart, nextSelectStart);
355
357
  }
356
- validateInput(value) {
357
- const signMultiplier = value < 0 ? -1 : 1;
358
- value *= signMultiplier;
358
+ valueWithLimits(nextValue) {
359
+ let value = nextValue;
359
360
  if (typeof this.min !== "undefined") {
360
361
  value = Math.max(this.min, value);
361
362
  }
362
363
  if (typeof this.max !== "undefined") {
363
364
  value = Math.min(this.max, value);
364
365
  }
366
+ return value;
367
+ }
368
+ validateInput(value) {
369
+ value = this.valueWithLimits(value);
370
+ const signMultiplier = value < 0 ? -1 : 1;
371
+ value *= signMultiplier;
365
372
  if (this.step) {
366
373
  const min = typeof this.min !== "undefined" ? this.min : 0;
367
374
  const moduloStep = (value - min) % this.step;
@@ -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 nothing,\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-chevron50.js';\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/infield-button/sp-infield-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-chevron50\n class=\"stepper-icon spectrum-UIIcon-Chevron${dir}50\"\n ></sp-icon-chevron50>\n `,\n m: (dir) => html`\n <sp-icon-chevron75\n class=\"stepper-icon spectrum-UIIcon-Chevron${dir}75\"\n ></sp-icon-chevron75>\n `,\n l: (dir) => html`\n <sp-icon-chevron100\n class=\"stepper-icon spectrum-UIIcon-Chevron${dir}100\"\n ></sp-icon-chevron100>\n `,\n xl: (dir) => html`\n <sp-icon-chevron200\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 this.lastCommitedValue = value;\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 private lastCommitedValue?: number;\n\n private setValue(value: number = this.value): void {\n this.value = value;\n if (\n typeof this.lastCommitedValue === 'undefined' ||\n this.lastCommitedValue === this.value\n ) {\n // Do not announce when the value is unchanged.\n return;\n }\n\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\n this.lastCommitedValue = this.value;\n }\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.managedInput = false;\n this.setValue();\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 value = min;\n }\n\n this._value = this.validateInput(value);\n this.inputElement.value = value.toString();\n\n this.inputElement.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 if (this.isComposing) return;\n switch (event.code) {\n case 'ArrowUp':\n event.preventDefault();\n this.increment(event.shiftKey ? this.stepModifier : 1);\n this.setValue();\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.decrement(event.shiftKey ? this.stepModifier : 1);\n this.setValue();\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.setValue();\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.setValue(value);\n this.inputElement.value = this.formattedValue;\n }\n\n protected handleCompositionStart(): void {\n this.isComposing = true;\n }\n\n protected handleCompositionEnd(): void {\n this.isComposing = false;\n requestAnimationFrame(() => {\n this.inputElement.dispatchEvent(\n new Event('input', {\n composed: true,\n bubbles: true,\n })\n );\n });\n }\n\n protected override handleInput(event: Event): void {\n if (this.isComposing) {\n event.stopPropagation();\n return;\n }\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 // Use starting value as this.value is the `input` value.\n this.lastCommitedValue = this.lastCommitedValue ?? this.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 this.inputElement.setSelectionRange(selectionStart, selectionStart);\n return;\n } else {\n this.inputElement.value = this.indeterminate\n ? indeterminatePlaceholder\n : this._trackingValue;\n }\n const currentLength = value.length;\n const previousLength = this._trackingValue.length;\n const nextSelectStart =\n (selectionStart || currentLength) -\n (currentLength - previousLength);\n this.inputElement.setSelectionRange(nextSelectStart, nextSelectStart);\n }\n\n private validateInput(value: number): number {\n const signMultiplier = value < 0 ? -1 : 1; // 'signMultiplier' adjusts 'value' for 'validateInput' and reverts it before returning.\n value *= signMultiplier;\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 value *= signMultiplier;\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 ? nothing\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-infield-button\n inline=\"end\"\n block=\"start\"\n class=\"button step-up\"\n aria-describedby=${this.helpTextId}\n label=${'Increase ' + this.appliedLabel}\n size=${this.size}\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-infield-button>\n <sp-infield-button\n inline=\"end\"\n block=\"end\"\n class=\"button step-down\"\n aria-describedby=${this.helpTextId}\n label=${'Decrease ' + this.appliedLabel}\n size=${this.size}\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-infield-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 private isComposing = false;\n\n protected override firstUpdated(changes: PropertyValues): void {\n super.firstUpdated(changes);\n this.addEventListener('keydown', this.handleKeydown);\n this.addEventListener('compositionstart', this.handleCompositionStart);\n this.addEventListener('compositionend', this.handleCompositionEnd);\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 nothing,\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-chevron50.js';\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/infield-button/sp-infield-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-chevron50\n class=\"stepper-icon spectrum-UIIcon-Chevron${dir}50\"\n ></sp-icon-chevron50>\n `,\n m: (dir) => html`\n <sp-icon-chevron75\n class=\"stepper-icon spectrum-UIIcon-Chevron${dir}75\"\n ></sp-icon-chevron75>\n `,\n l: (dir) => html`\n <sp-icon-chevron100\n class=\"stepper-icon spectrum-UIIcon-Chevron${dir}100\"\n ></sp-icon-chevron100>\n `,\n xl: (dir) => html`\n <sp-icon-chevron200\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 this.lastCommitedValue = value;\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 private lastCommitedValue?: number;\n\n private setValue(value: number = this.value): void {\n this.value = value;\n if (\n typeof this.lastCommitedValue === 'undefined' ||\n this.lastCommitedValue === this.value\n ) {\n // Do not announce when the value is unchanged.\n return;\n }\n\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\n this.lastCommitedValue = this.value;\n }\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.managedInput = false;\n this.setValue();\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 value = min;\n }\n value = this.valueWithLimits(value);\n\n this.requestUpdate();\n this._value = this.validateInput(value);\n this.inputElement.value = value.toString();\n\n this.inputElement.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 if (this.isComposing) return;\n switch (event.code) {\n case 'ArrowUp':\n event.preventDefault();\n this.increment(event.shiftKey ? this.stepModifier : 1);\n this.setValue();\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.decrement(event.shiftKey ? this.stepModifier : 1);\n this.setValue();\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.setValue();\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.setValue(value);\n this.inputElement.value = this.formattedValue;\n }\n\n protected handleCompositionStart(): void {\n this.isComposing = true;\n }\n\n protected handleCompositionEnd(): void {\n this.isComposing = false;\n requestAnimationFrame(() => {\n this.inputElement.dispatchEvent(\n new Event('input', {\n composed: true,\n bubbles: true,\n })\n );\n });\n }\n\n protected override handleInput(event: Event): void {\n if (this.isComposing) {\n event.stopPropagation();\n return;\n }\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 // Use starting value as this.value is the `input` value.\n this.lastCommitedValue = this.lastCommitedValue ?? this.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 this.inputElement.setSelectionRange(selectionStart, selectionStart);\n return;\n } else {\n this.inputElement.value = this.indeterminate\n ? indeterminatePlaceholder\n : this._trackingValue;\n }\n const currentLength = value.length;\n const previousLength = this._trackingValue.length;\n const nextSelectStart =\n (selectionStart || currentLength) -\n (currentLength - previousLength);\n this.inputElement.setSelectionRange(nextSelectStart, nextSelectStart);\n }\n\n private valueWithLimits(nextValue: number): number {\n let value = nextValue;\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 return value;\n }\n\n private validateInput(value: number): number {\n value = this.valueWithLimits(value);\n const signMultiplier = value < 0 ? -1 : 1; // 'signMultiplier' adjusts 'value' for 'validateInput' and reverts it before returning.\n value *= signMultiplier;\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 value *= signMultiplier;\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 ? nothing\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-infield-button\n inline=\"end\"\n block=\"start\"\n class=\"button step-up\"\n aria-describedby=${this.helpTextId}\n label=${'Increase ' + this.appliedLabel}\n size=${this.size}\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-infield-button>\n <sp-infield-button\n inline=\"end\"\n block=\"end\"\n class=\"button step-down\"\n aria-describedby=${this.helpTextId}\n label=${'Decrease ' + this.appliedLabel}\n size=${this.size}\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-infield-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 private isComposing = false;\n\n protected override firstUpdated(changes: PropertyValues): void {\n super.firstUpdated(changes);\n this.addEventListener('keydown', this.handleKeydown);\n this.addEventListener('compositionstart', this.handleCompositionStart);\n this.addEventListener('compositionend', this.handleCompositionEnd);\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
  }
@@ -1,4 +1,4 @@
1
- "use strict";var g=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var n=(a,l,e,t)=>{for(var s=t>1?void 0:t?y(l,e):l,i=a.length-1,r;i>=0;i--)(r=a[i])&&(s=(t?r(l,e,s):r(s))||s);return t&&s&&g(l,e,s),s};import{html as h,nothing as C}from"@spectrum-web-components/base";import{property as o,query as E}from"@spectrum-web-components/base/src/decorators.js";import{LanguageResolutionController as P,languageResolverUpdatedSymbol as _}from"@spectrum-web-components/reactive-controllers/src/LanguageResolution.js";import{streamingListener as F}from"@spectrum-web-components/base/src/streaming-listener.js";import{NumberFormatter as c,NumberParser as f}from"@internationalized/number";import"@spectrum-web-components/icons-ui/icons/sp-icon-chevron50.js";import"@spectrum-web-components/icons-ui/icons/sp-icon-chevron75.js";import"@spectrum-web-components/icons-ui/icons/sp-icon-chevron100.js";import"@spectrum-web-components/icons-ui/icons/sp-icon-chevron200.js";import"@spectrum-web-components/infield-button/sp-infield-button.js";import{isAndroid as V,isIPhone as v}from"@spectrum-web-components/shared/src/platform.js";import{TextfieldBase as w}from"@spectrum-web-components/textfield";import x from"@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js";import I from"./number-field.css.js";export const FRAMES_PER_CHANGE=5,CHANGE_DEBOUNCE_MS=100,indeterminatePlaceholder="-",remapMultiByteCharacters={"\uFF11":"1","\uFF12":"2","\uFF13":"3","\uFF14":"4","\uFF15":"5","\uFF16":"6","\uFF17":"7","\uFF18":"8","\uFF19":"9","\uFF10":"0","\u3001":",","\uFF0C":",","\u3002":".","\uFF0E":".","\uFF05":"%","\uFF0B":"+",\u30FC:"-"};const b={s:a=>h`
1
+ "use strict";var g=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var n=(a,l,e,t)=>{for(var i=t>1?void 0:t?y(l,e):l,s=a.length-1,r;s>=0;s--)(r=a[s])&&(i=(t?r(l,e,i):r(i))||i);return t&&i&&g(l,e,i),i};import{html as h,nothing as C}from"@spectrum-web-components/base";import{property as o,query as E}from"@spectrum-web-components/base/src/decorators.js";import{LanguageResolutionController as P,languageResolverUpdatedSymbol as _}from"@spectrum-web-components/reactive-controllers/src/LanguageResolution.js";import{streamingListener as F}from"@spectrum-web-components/base/src/streaming-listener.js";import{NumberFormatter as c,NumberParser as f}from"@internationalized/number";import"@spectrum-web-components/icons-ui/icons/sp-icon-chevron50.js";import"@spectrum-web-components/icons-ui/icons/sp-icon-chevron75.js";import"@spectrum-web-components/icons-ui/icons/sp-icon-chevron100.js";import"@spectrum-web-components/icons-ui/icons/sp-icon-chevron200.js";import"@spectrum-web-components/infield-button/sp-infield-button.js";import{isAndroid as V,isIPhone as v}from"@spectrum-web-components/shared/src/platform.js";import{TextfieldBase as w}from"@spectrum-web-components/textfield";import x from"@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js";import I from"./number-field.css.js";export const FRAMES_PER_CHANGE=5,CHANGE_DEBOUNCE_MS=100,indeterminatePlaceholder="-",remapMultiByteCharacters={"\uFF11":"1","\uFF12":"2","\uFF13":"3","\uFF14":"4","\uFF15":"5","\uFF16":"6","\uFF17":"7","\uFF18":"8","\uFF19":"9","\uFF10":"0","\u3001":",","\uFF0C":",","\u3002":".","\uFF0E":".","\uFF05":"%","\uFF0B":"+",\u30FC:"-"};const b={s:a=>h`
2
2
  <sp-icon-chevron50
3
3
  class="stepper-icon spectrum-UIIcon-Chevron${a}50"
4
4
  ></sp-icon-chevron50>
@@ -14,7 +14,7 @@
14
14
  <sp-icon-chevron200
15
15
  class="stepper-icon spectrum-UIIcon-Chevron${a}200"
16
16
  ></sp-icon-chevron200>
17
- `};export class NumberField extends w{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 P(this);this.wasIndeterminate=!1;this.applyFocusElementLabel=e=>{this.appliedLabel=e};this.isComposing=!1}static get styles(){return[...super.styles,I,x]}set value(e){const t=this.validateInput(e);if(t===this.value)return;this.lastCommitedValue=t;const s=this._value;this._value=t,this.requestUpdate("value",s)}get value(){return this._value}get inputValue(){return this.indeterminate?this.formattedValue:this.inputElement.value}setValue(e=this.value){this.value=e,!(typeof this.lastCommitedValue=="undefined"||this.lastCommitedValue===this.value)&&(this.dispatchEvent(new Event("change",{bubbles:!0,composed:!0})),this.lastCommitedValue=this.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(v()&&this.inputElement.inputMode==="decimal"){const s=this.numberFormatter.formatToParts(1000.1),i=e.split("").find(u=>u===","||u==="."),r=(t=s.find(u=>u.type==="decimal"))==null?void 0:t.value;i&&r&&(e=e.replace(i,r))}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(),s=this.buttons.children[1].getBoundingClientRect();this.findChange=i=>{i.clientX>=t.x&&i.clientY>=t.y&&i.clientX<=t.x+t.width&&i.clientY<=t.y+t.height?this.change=r=>this.increment(r.shiftKey?this.stepModifier:1):i.clientX>=s.x&&i.clientY>=s.y&&i.clientX<=s.x+s.width&&i.clientY<=s.y+s.height&&(this.change=r=>this.decrement(r.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.managedInput=!1,this.setValue()}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 s=this.value;s+=e*this._step,isNaN(this.value)&&(s=t),this._value=this.validateInput(s),this.inputElement.value=s.toString(),this.inputElement.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){if(!this.isComposing)switch(e.code){case"ArrowUp":e.preventDefault(),this.increment(e.shiftKey?this.stepModifier:1),this.setValue();break;case"ArrowDown":e.preventDefault(),this.decrement(e.shiftKey?this.stepModifier:1),this.setValue();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.setValue()},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.setValue(e),this.inputElement.value=this.formattedValue}handleCompositionStart(){this.isComposing=!0}handleCompositionEnd(){this.isComposing=!1,requestAnimationFrame(()=>{this.inputElement.dispatchEvent(new Event("input",{composed:!0,bubbles:!0}))})}handleInput(e){var m;if(this.isComposing){e.stopPropagation();return}this.indeterminate&&(this.wasIndeterminate=!0,this.indeterminateValue=this.value,this.inputElement.value=this.inputElement.value.replace(indeterminatePlaceholder,""));const{value:t,selectionStart:s}=this.inputElement,i=t.split("").map(d=>remapMultiByteCharacters[d]||d).join("");if(this.numberParser.isValidPartialNumber(i)){this.lastCommitedValue=(m=this.lastCommitedValue)!=null?m:this.value;const d=this.convertValueToNumber(i);!i&&this.indeterminateValue?(this.indeterminate=!0,this._value=this.indeterminateValue):(this.indeterminate=!1,this._value=this.validateInput(d)),this._trackingValue=i,this.inputElement.value=i,this.inputElement.setSelectionRange(s,s);return}else this.inputElement.value=this.indeterminate?indeterminatePlaceholder:this._trackingValue;const r=i.length,u=this._trackingValue.length,p=(s||r)-(r-u);this.inputElement.setSelectionRange(p,p)}validateInput(e){const t=e<0?-1:1;if(e*=t,typeof this.min!="undefined"&&(e=Math.max(this.min,e)),typeof this.max!="undefined"&&(e=Math.min(this.max,e)),this.step){const s=typeof this.min!="undefined"?this.min:0,i=(e-s)%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*=t,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:s,...i}=this.formatOptions;e!=="unit"&&(i.style=e),this._numberFormatterFocused=new c(this.languageResolver.language,i);try{this._numberFormatter=new c(this.languageResolver.language,this.formatOptions),this._forcedUnit="",this._numberFormatter.format(1)}catch(r){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:s,...i}=this.formatOptions;e!=="unit"&&(i.style=e),this._numberParserFocused=new f(this.languageResolver.language,i);try{this._numberParser=new f(this.languageResolver.language,this.formatOptions),this._forcedUnit="",this._numberParser.parse("0")}catch(r){e==="unit"&&(this._forcedUnit=t),this._numberParser=this._numberParserFocused}}return this.focused?this._numberParserFocused:this._numberParser}renderField(){return this.autocomplete="off",h`
17
+ `};export class NumberField extends w{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 P(this);this.wasIndeterminate=!1;this.applyFocusElementLabel=e=>{this.appliedLabel=e};this.isComposing=!1}static get styles(){return[...super.styles,I,x]}set value(e){const t=this.validateInput(e);if(t===this.value)return;this.lastCommitedValue=t;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}setValue(e=this.value){this.value=e,!(typeof this.lastCommitedValue=="undefined"||this.lastCommitedValue===this.value)&&(this.dispatchEvent(new Event("change",{bubbles:!0,composed:!0})),this.lastCommitedValue=this.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(v()&&this.inputElement.inputMode==="decimal"){const i=this.numberFormatter.formatToParts(1000.1),s=e.split("").find(u=>u===","||u==="."),r=(t=i.find(u=>u.type==="decimal"))==null?void 0:t.value;s&&r&&(e=e.replace(s,r))}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=s=>{s.clientX>=t.x&&s.clientY>=t.y&&s.clientX<=t.x+t.width&&s.clientY<=t.y+t.height?this.change=r=>this.increment(r.shiftKey?this.stepModifier:1):s.clientX>=i.x&&s.clientY>=i.y&&s.clientX<=i.x+i.width&&s.clientY<=i.y+i.height&&(this.change=r=>this.decrement(r.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.managedInput=!1,this.setValue()}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)&&(i=t),i=this.valueWithLimits(i),this.requestUpdate(),this._value=this.validateInput(i),this.inputElement.value=i.toString(),this.inputElement.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){if(!this.isComposing)switch(e.code){case"ArrowUp":e.preventDefault(),this.increment(e.shiftKey?this.stepModifier:1),this.setValue();break;case"ArrowDown":e.preventDefault(),this.decrement(e.shiftKey?this.stepModifier:1),this.setValue();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.setValue()},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.setValue(e),this.inputElement.value=this.formattedValue}handleCompositionStart(){this.isComposing=!0}handleCompositionEnd(){this.isComposing=!1,requestAnimationFrame(()=>{this.inputElement.dispatchEvent(new Event("input",{composed:!0,bubbles:!0}))})}handleInput(e){var m;if(this.isComposing){e.stopPropagation();return}this.indeterminate&&(this.wasIndeterminate=!0,this.indeterminateValue=this.value,this.inputElement.value=this.inputElement.value.replace(indeterminatePlaceholder,""));const{value:t,selectionStart:i}=this.inputElement,s=t.split("").map(d=>remapMultiByteCharacters[d]||d).join("");if(this.numberParser.isValidPartialNumber(s)){this.lastCommitedValue=(m=this.lastCommitedValue)!=null?m:this.value;const d=this.convertValueToNumber(s);!s&&this.indeterminateValue?(this.indeterminate=!0,this._value=this.indeterminateValue):(this.indeterminate=!1,this._value=this.validateInput(d)),this._trackingValue=s,this.inputElement.value=s,this.inputElement.setSelectionRange(i,i);return}else this.inputElement.value=this.indeterminate?indeterminatePlaceholder:this._trackingValue;const r=s.length,u=this._trackingValue.length,p=(i||r)-(r-u);this.inputElement.setSelectionRange(p,p)}valueWithLimits(e){let t=e;return typeof this.min!="undefined"&&(t=Math.max(this.min,t)),typeof this.max!="undefined"&&(t=Math.min(this.max,t)),t}validateInput(e){e=this.valueWithLimits(e);const t=e<0?-1:1;if(e*=t,this.step){const i=typeof this.min!="undefined"?this.min:0,s=(e-i)%this.step;if(s===0||(Math.round(s/this.step)===1?e+=this.step-s:e-=s),typeof this.max!="undefined")for(;e>this.max;)e-=this.step}return e*=t,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,...s}=this.formatOptions;e!=="unit"&&(s.style=e),this._numberFormatterFocused=new c(this.languageResolver.language,s);try{this._numberFormatter=new c(this.languageResolver.language,this.formatOptions),this._forcedUnit="",this._numberFormatter.format(1)}catch(r){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,...s}=this.formatOptions;e!=="unit"&&(s.style=e),this._numberParserFocused=new f(this.languageResolver.language,s);try{this._numberParser=new f(this.languageResolver.language,this.formatOptions),this._forcedUnit="",this._numberParser.parse("0")}catch(r){e==="unit"&&(this._forcedUnit=t),this._numberParser=this._numberParserFocused}}return this.focused?this._numberParserFocused:this._numberParser}renderField(){return this.autocomplete="off",h`
18
18
  ${super.renderField()}
19
19
  ${this.hideStepper?C:h`
20
20
  <span
@@ -53,5 +53,5 @@
53
53
  </sp-infield-button>
54
54
  </span>
55
55
  `}
56
- `}update(e){if((e.has("formatOptions")||e.has("resolvedLanguage"))&&this.clearNumberFormatterCache(),e.has("value")||e.has("max")||e.has("min")){const t=this.numberParser.parse(this.formattedValue.replace(this._forcedUnit,""));this.value=t}super.update(e)}willUpdate(e){this.multiline=!1,e.has(_)&&this.clearNumberFormatterCache()}firstUpdated(e){super.firstUpdated(e),this.addEventListener("keydown",this.handleKeydown),this.addEventListener("compositionstart",this.handleCompositionStart),this.addEventListener("compositionend",this.handleCompositionEnd)}updated(e){if(e.has("min")||e.has("formatOptions")){let t="numeric";const s=typeof this.min!="undefined"&&this.min<0,{maximumFractionDigits:i}=this.numberFormatter.resolvedOptions(),r=i>0;v()?s?t="text":r&&(t="decimal"):V()&&(s?t="numeric":r&&(t="decimal")),this.inputElement.inputMode=t}}}n([E(".buttons")],NumberField.prototype,"buttons",2),n([o({type:Boolean,reflect:!0})],NumberField.prototype,"focused",2),n([o({type:Object,attribute:"format-options"})],NumberField.prototype,"formatOptions",2),n([o({type:Boolean,reflect:!0,attribute:"hide-stepper"})],NumberField.prototype,"hideStepper",2),n([o({type:Boolean,reflect:!0})],NumberField.prototype,"indeterminate",2),n([o({type:Boolean,reflect:!0,attribute:"keyboard-focused"})],NumberField.prototype,"keyboardFocused",2),n([o({type:Number})],NumberField.prototype,"max",2),n([o({type:Number})],NumberField.prototype,"min",2),n([o({type:Number})],NumberField.prototype,"step",2),n([o({type:Number,reflect:!0,attribute:"step-modifier"})],NumberField.prototype,"stepModifier",2),n([o({type:Number})],NumberField.prototype,"value",1);
56
+ `}update(e){if((e.has("formatOptions")||e.has("resolvedLanguage"))&&this.clearNumberFormatterCache(),e.has("value")||e.has("max")||e.has("min")){const t=this.numberParser.parse(this.formattedValue.replace(this._forcedUnit,""));this.value=t}super.update(e)}willUpdate(e){this.multiline=!1,e.has(_)&&this.clearNumberFormatterCache()}firstUpdated(e){super.firstUpdated(e),this.addEventListener("keydown",this.handleKeydown),this.addEventListener("compositionstart",this.handleCompositionStart),this.addEventListener("compositionend",this.handleCompositionEnd)}updated(e){if(e.has("min")||e.has("formatOptions")){let t="numeric";const i=typeof this.min!="undefined"&&this.min<0,{maximumFractionDigits:s}=this.numberFormatter.resolvedOptions(),r=s>0;v()?i?t="text":r&&(t="decimal"):V()&&(i?t="numeric":r&&(t="decimal")),this.inputElement.inputMode=t}}}n([E(".buttons")],NumberField.prototype,"buttons",2),n([o({type:Boolean,reflect:!0})],NumberField.prototype,"focused",2),n([o({type:Object,attribute:"format-options"})],NumberField.prototype,"formatOptions",2),n([o({type:Boolean,reflect:!0,attribute:"hide-stepper"})],NumberField.prototype,"hideStepper",2),n([o({type:Boolean,reflect:!0})],NumberField.prototype,"indeterminate",2),n([o({type:Boolean,reflect:!0,attribute:"keyboard-focused"})],NumberField.prototype,"keyboardFocused",2),n([o({type:Number})],NumberField.prototype,"max",2),n([o({type:Number})],NumberField.prototype,"min",2),n([o({type:Number})],NumberField.prototype,"step",2),n([o({type:Number,reflect:!0,attribute:"step-modifier"})],NumberField.prototype,"stepModifier",2),n([o({type:Number})],NumberField.prototype,"value",1);
57
57
  //# sourceMappingURL=NumberField.js.map
@@ -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 nothing,\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-chevron50.js';\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/infield-button/sp-infield-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-chevron50\n class=\"stepper-icon spectrum-UIIcon-Chevron${dir}50\"\n ></sp-icon-chevron50>\n `,\n m: (dir) => html`\n <sp-icon-chevron75\n class=\"stepper-icon spectrum-UIIcon-Chevron${dir}75\"\n ></sp-icon-chevron75>\n `,\n l: (dir) => html`\n <sp-icon-chevron100\n class=\"stepper-icon spectrum-UIIcon-Chevron${dir}100\"\n ></sp-icon-chevron100>\n `,\n xl: (dir) => html`\n <sp-icon-chevron200\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 this.lastCommitedValue = value;\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 private lastCommitedValue?: number;\n\n private setValue(value: number = this.value): void {\n this.value = value;\n if (\n typeof this.lastCommitedValue === 'undefined' ||\n this.lastCommitedValue === this.value\n ) {\n // Do not announce when the value is unchanged.\n return;\n }\n\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\n this.lastCommitedValue = this.value;\n }\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.managedInput = false;\n this.setValue();\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 value = min;\n }\n\n this._value = this.validateInput(value);\n this.inputElement.value = value.toString();\n\n this.inputElement.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 if (this.isComposing) return;\n switch (event.code) {\n case 'ArrowUp':\n event.preventDefault();\n this.increment(event.shiftKey ? this.stepModifier : 1);\n this.setValue();\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.decrement(event.shiftKey ? this.stepModifier : 1);\n this.setValue();\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.setValue();\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.setValue(value);\n this.inputElement.value = this.formattedValue;\n }\n\n protected handleCompositionStart(): void {\n this.isComposing = true;\n }\n\n protected handleCompositionEnd(): void {\n this.isComposing = false;\n requestAnimationFrame(() => {\n this.inputElement.dispatchEvent(\n new Event('input', {\n composed: true,\n bubbles: true,\n })\n );\n });\n }\n\n protected override handleInput(event: Event): void {\n if (this.isComposing) {\n event.stopPropagation();\n return;\n }\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 // Use starting value as this.value is the `input` value.\n this.lastCommitedValue = this.lastCommitedValue ?? this.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 this.inputElement.setSelectionRange(selectionStart, selectionStart);\n return;\n } else {\n this.inputElement.value = this.indeterminate\n ? indeterminatePlaceholder\n : this._trackingValue;\n }\n const currentLength = value.length;\n const previousLength = this._trackingValue.length;\n const nextSelectStart =\n (selectionStart || currentLength) -\n (currentLength - previousLength);\n this.inputElement.setSelectionRange(nextSelectStart, nextSelectStart);\n }\n\n private validateInput(value: number): number {\n const signMultiplier = value < 0 ? -1 : 1; // 'signMultiplier' adjusts 'value' for 'validateInput' and reverts it before returning.\n value *= signMultiplier;\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 value *= signMultiplier;\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 ? nothing\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-infield-button\n inline=\"end\"\n block=\"start\"\n class=\"button step-up\"\n aria-describedby=${this.helpTextId}\n label=${'Increase ' + this.appliedLabel}\n size=${this.size}\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-infield-button>\n <sp-infield-button\n inline=\"end\"\n block=\"end\"\n class=\"button step-down\"\n aria-describedby=${this.helpTextId}\n label=${'Decrease ' + this.appliedLabel}\n size=${this.size}\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-infield-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 private isComposing = false;\n\n protected override firstUpdated(changes: PropertyValues): void {\n super.firstUpdated(changes);\n this.addEventListener('keydown', this.handleKeydown);\n this.addEventListener('compositionstart', this.handleCompositionStart);\n this.addEventListener('compositionend', this.handleCompositionEnd);\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", "nothing", "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", "signMultiplier", "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 nothing,\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-chevron50.js';\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/infield-button/sp-infield-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-chevron50\n class=\"stepper-icon spectrum-UIIcon-Chevron${dir}50\"\n ></sp-icon-chevron50>\n `,\n m: (dir) => html`\n <sp-icon-chevron75\n class=\"stepper-icon spectrum-UIIcon-Chevron${dir}75\"\n ></sp-icon-chevron75>\n `,\n l: (dir) => html`\n <sp-icon-chevron100\n class=\"stepper-icon spectrum-UIIcon-Chevron${dir}100\"\n ></sp-icon-chevron100>\n `,\n xl: (dir) => html`\n <sp-icon-chevron200\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 this.lastCommitedValue = value;\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 private lastCommitedValue?: number;\n\n private setValue(value: number = this.value): void {\n this.value = value;\n if (\n typeof this.lastCommitedValue === 'undefined' ||\n this.lastCommitedValue === this.value\n ) {\n // Do not announce when the value is unchanged.\n return;\n }\n\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\n this.lastCommitedValue = this.value;\n }\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.managedInput = false;\n this.setValue();\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 value = min;\n }\n value = this.valueWithLimits(value);\n\n this.requestUpdate();\n this._value = this.validateInput(value);\n this.inputElement.value = value.toString();\n\n this.inputElement.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 if (this.isComposing) return;\n switch (event.code) {\n case 'ArrowUp':\n event.preventDefault();\n this.increment(event.shiftKey ? this.stepModifier : 1);\n this.setValue();\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.decrement(event.shiftKey ? this.stepModifier : 1);\n this.setValue();\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.setValue();\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.setValue(value);\n this.inputElement.value = this.formattedValue;\n }\n\n protected handleCompositionStart(): void {\n this.isComposing = true;\n }\n\n protected handleCompositionEnd(): void {\n this.isComposing = false;\n requestAnimationFrame(() => {\n this.inputElement.dispatchEvent(\n new Event('input', {\n composed: true,\n bubbles: true,\n })\n );\n });\n }\n\n protected override handleInput(event: Event): void {\n if (this.isComposing) {\n event.stopPropagation();\n return;\n }\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 // Use starting value as this.value is the `input` value.\n this.lastCommitedValue = this.lastCommitedValue ?? this.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 this.inputElement.setSelectionRange(selectionStart, selectionStart);\n return;\n } else {\n this.inputElement.value = this.indeterminate\n ? indeterminatePlaceholder\n : this._trackingValue;\n }\n const currentLength = value.length;\n const previousLength = this._trackingValue.length;\n const nextSelectStart =\n (selectionStart || currentLength) -\n (currentLength - previousLength);\n this.inputElement.setSelectionRange(nextSelectStart, nextSelectStart);\n }\n\n private valueWithLimits(nextValue: number): number {\n let value = nextValue;\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 return value;\n }\n\n private validateInput(value: number): number {\n value = this.valueWithLimits(value);\n const signMultiplier = value < 0 ? -1 : 1; // 'signMultiplier' adjusts 'value' for 'validateInput' and reverts it before returning.\n value *= signMultiplier;\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 value *= signMultiplier;\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 ? nothing\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-infield-button\n inline=\"end\"\n block=\"start\"\n class=\"button step-up\"\n aria-describedby=${this.helpTextId}\n label=${'Increase ' + this.appliedLabel}\n size=${this.size}\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-infield-button>\n <sp-infield-button\n inline=\"end\"\n block=\"end\"\n class=\"button step-down\"\n aria-describedby=${this.helpTextId}\n label=${'Decrease ' + this.appliedLabel}\n size=${this.size}\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-infield-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 private isComposing = false;\n\n protected override firstUpdated(changes: PropertyValues): void {\n super.firstUpdated(changes);\n this.addEventListener('keydown', this.handleKeydown);\n this.addEventListener('compositionstart', this.handleCompositionStart);\n this.addEventListener('compositionend', this.handleCompositionEnd);\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", "nothing", "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", "nextValue", "signMultiplier", "moduloStep", "indeterminateValue", "style", "unit", "unitDisplay", "formatOptionsNoUnit", "error", "changes", "inputMode", "hasNegative", "maximumFractionDigits", "hasDecimals", "__decorateClass"]
7
7
  }
@@ -872,6 +872,34 @@ describe("NumberField", () => {
872
872
  expect(el.valueAsString).to.equal("10");
873
873
  expect(el.value).to.equal(10);
874
874
  });
875
+ it("constrains ArrowUp usage", async () => {
876
+ expect(el.value).to.equal(10);
877
+ el.focus();
878
+ await sendKeys({ press: "ArrowUp" });
879
+ expect(el.focusElement.value).to.equal("10");
880
+ await sendKeys({ press: "Shift+ArrowUp" });
881
+ expect(el.focusElement.value).to.equal("10");
882
+ });
883
+ it("constrains pointer usage", async () => {
884
+ expect(el.value).to.equal(10);
885
+ const buttonUp = el.shadowRoot.querySelector(
886
+ ".step-up"
887
+ );
888
+ const buttonUpRect = buttonUp.getBoundingClientRect();
889
+ const buttonUpPosition = [
890
+ buttonUpRect.x + buttonUpRect.width / 2,
891
+ buttonUpRect.y + buttonUpRect.height / 2
892
+ ];
893
+ await sendMouse({
894
+ steps: [
895
+ {
896
+ type: "click",
897
+ position: buttonUpPosition
898
+ }
899
+ ]
900
+ });
901
+ expect(el.value).to.equal(10);
902
+ });
875
903
  it("validates on commit", async () => {
876
904
  el.focus();
877
905
  await sendKeys({ type: "15" });
@@ -961,6 +989,14 @@ describe("NumberField", () => {
961
989
  expect(el.formattedValue).to.equal("10");
962
990
  expect(el.valueAsString).to.equal("10");
963
991
  expect(el.value).to.equal(10);
992
+ el.focus();
993
+ await sendKeys({ press: "Backspace" });
994
+ await sendKeys({ press: "Backspace" });
995
+ await sendKeys({ type: "-2000" });
996
+ await sendKeys({ press: "Enter" });
997
+ expect(el.formattedValue).to.equal("10");
998
+ expect(el.valueAsString).to.equal("10");
999
+ expect(el.value).to.equal(10);
964
1000
  });
965
1001
  it("dispatches onchange on setting min value", async () => {
966
1002
  el.value = 15;
@@ -1029,6 +1065,45 @@ describe("NumberField", () => {
1029
1065
  expect(el.valueAsString).to.equal("10");
1030
1066
  expect(el.value).to.equal(10);
1031
1067
  });
1068
+ it("constrains ArrowDown usage", async () => {
1069
+ el.min = 0;
1070
+ el.value = 0;
1071
+ expect(el.value).to.equal(0);
1072
+ el.focus();
1073
+ await sendKeys({ press: "ArrowDown" });
1074
+ expect(el.formattedValue).to.equal("0");
1075
+ expect(el.valueAsString).to.equal("0");
1076
+ expect(el.value).to.equal(0);
1077
+ await sendKeys({ press: "Shift+ArrowDown" });
1078
+ await elementUpdated(el);
1079
+ expect(el.formattedValue).to.equal("0");
1080
+ expect(el.valueAsString).to.equal("0");
1081
+ expect(el.value).to.equal(0);
1082
+ });
1083
+ it("constrains pointer usage", async () => {
1084
+ el.min = 0;
1085
+ el.value = 0;
1086
+ await elementUpdated(el);
1087
+ expect(el.value).to.equal(0);
1088
+ const buttonDown = el.shadowRoot.querySelector(
1089
+ ".step-down"
1090
+ );
1091
+ const buttonDownRect = buttonDown.getBoundingClientRect();
1092
+ const buttonDownPosition = [
1093
+ buttonDownRect.x + buttonDownRect.width / 2,
1094
+ buttonDownRect.y + buttonDownRect.height / 2
1095
+ ];
1096
+ await sendMouse({
1097
+ steps: [
1098
+ {
1099
+ type: "click",
1100
+ position: buttonDownPosition
1101
+ }
1102
+ ]
1103
+ });
1104
+ await elementUpdated(el);
1105
+ expect(el.value).to.equal(0);
1106
+ });
1032
1107
  it("validates on commit", async () => {
1033
1108
  el.focus();
1034
1109
  await sendKeys({ press: "0" });
@@ -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 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 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\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 expect(el.focusElement.value).to.equal('1,337');\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 expect(el.focusElement.value).to.equal('13,377,331');\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\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 expect(el.focusElement.value).to.equal('1\u202F337');\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 expect(el.focusElement.value).to.equal('13\u202F377\u202F331');\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\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 expect(el.focusElement.value).to.equal('5');\n });\n\n it('supports both positive and negative decimal values', async () => {\n const el = await getElFrom(\n Default({\n step: 0.001,\n min: -10,\n max: 10,\n value: -2.4,\n })\n );\n\n el.size = 'xl';\n expect(el.value).to.equal(-2.4);\n expect(el.valueAsString).to.equal('-2.4');\n expect(el.focusElement.value).to.equal('-2.4');\n });\n });\n describe('Increments', () => {\n let el: NumberField;\n\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 expect(el.focusElement.value).to.equal('');\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 expect(el.focusElement.value).to.equal('');\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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.value).to.equal('10');\n });\n });\n describe('Decrements', () => {\n let el: NumberField;\n\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 expect(el.focusElement.value).to.equal('');\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 expect(el.focusElement.value).to.equal('');\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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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('except when changing `value` from the outside', async () => {\n el.focus();\n await elementUpdated(el);\n expect(el.focused).to.be.true;\n el.value = 51;\n expect(changeSpy.callCount).to.equal(0);\n await elementUpdated(el);\n el.value = 52;\n expect(changeSpy.callCount).to.equal(0);\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 await oneEvent(el, 'input');\n expect(el.value).to.equal(53);\n expect(inputSpy.callCount).to.equal(3);\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(5);\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(5);\n expect(changeSpy.callCount).to.equal(1);\n });\n it('no change in committed value - using buttons', 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(\n changeSpy.callCount,\n 'value does not change from initial value so no \"change\" event is dispatched'\n ).to.equal(0);\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 const inputSpy = spy();\n const changeSpy = spy();\n beforeEach(async () => {\n inputSpy.resetHistory();\n changeSpy.resetHistory();\n el = await getElFrom(\n Default({\n max: 10,\n value: 10,\n onInput: (value: number) => {\n inputSpy(value);\n lastInputValue = value;\n },\n onChange: (value: number) => {\n changeSpy(value);\n lastChangeValue = value;\n },\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(\n 0,\n 'value does not change from initial value so no \"change\" event is dispatched'\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 `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 it('dispatches onchange on setting max value', async () => {\n el.value = 5;\n await elementUpdated(el);\n expect(changeSpy.callCount).to.equal(0);\n expect(el.value).to.equal(5);\n el.focus();\n await sendKeys({\n press: 'Backspace',\n });\n await sendKeys({\n press: '1',\n });\n await sendKeys({\n press: '5',\n });\n await sendKeys({\n press: 'Enter',\n });\n await elementUpdated(el);\n expect(el.value).to.equal(10);\n expect(inputSpy.callCount).to.equal(3);\n expect(changeSpy.callCount).to.equal(1);\n expect(lastChangeValue, 'last change value').to.equal(10);\n });\n });\n describe('min', () => {\n let el: NumberField;\n let lastInputValue = 0;\n let lastChangeValue = 0;\n const inputSpy = spy();\n const changeSpy = spy();\n beforeEach(async () => {\n inputSpy.resetHistory();\n changeSpy.resetHistory();\n el = await getElFrom(\n Default({\n min: 10,\n value: 10,\n onInput: (value: number) => {\n inputSpy(value);\n lastInputValue = value;\n },\n onChange: (value: number) => {\n changeSpy(value);\n lastChangeValue = value;\n },\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(\n 0,\n 'value does not change from initial value so no \"change\" event is dispatched'\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('dispatches onchange on setting min value', async () => {\n el.value = 15;\n await elementUpdated(el);\n expect(changeSpy.callCount).to.equal(0);\n expect(el.value).to.equal(15);\n el.focus();\n await sendKeys({\n press: 'Backspace',\n });\n await sendKeys({\n press: 'Backspace',\n });\n await sendKeys({\n press: '5',\n });\n await sendKeys({\n press: 'Enter',\n });\n await elementUpdated(el);\n expect(el.value).to.equal(10);\n expect(inputSpy.callCount).to.equal(3);\n expect(changeSpy.callCount).to.equal(1);\n expect(lastChangeValue, 'last change 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;AAC5C,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;AAEnD,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,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,OAAO;AAC9C,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;AAClC,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,YAAY;AAAA,IACvD,CAAC;AACD,OAAG,yBAAyB,YAAY;AACpC,YAAM,CAAC,eAAe,IAAI,sBAAsB,IAAI;AACpD,YAAM,KAAK,MAAM,UAAU;AAAA,4CACK,eAAe;AAAA,sBACrC,QAAQ,EAAE,OAAO,KAAK,CAAC,CAAC;AAAA;AAAA,aAEjC;AAED,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,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,YAAO;AAC9C,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;AAClC,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,sBAAY;AAAA,IACvD,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;AAEA,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;AACrC,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,GAAG;AAAA,IAC9C,CAAC;AAED,OAAG,sDAAsD,YAAY;AACjE,YAAM,KAAK,MAAM;AAAA,QACb,QAAQ;AAAA,UACJ,MAAM;AAAA,UACN,KAAK;AAAA,UACL,KAAK;AAAA,UACL,OAAO;AAAA,QACX,CAAC;AAAA,MACL;AAEA,SAAG,OAAO;AACV,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,IAAI;AAC9B,aAAO,GAAG,aAAa,EAAE,GAAG,MAAM,MAAM;AACxC,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,MAAM;AAAA,IACjD,CAAC;AAAA,EACL,CAAC;AACD,WAAS,cAAc,MAAM;AACzB,QAAI;AAEJ,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;AACvC,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAC7C,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;AACvB,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAC7C,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,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,GAAG;AAC1C,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,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,GAAG;AAAA,IAC9C,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,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,GAAG;AAC1C,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,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,GAAG;AAAA,IAC9C,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,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,GAAG;AAC1C,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;AAC5B,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,IAAI;AAAA,IAC/C,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,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,GAAG;AAC1C,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;AAC5B,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,IAAI;AAAA,IAC/C,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,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,GAAG;AAC1C,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;AAC3B,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,GAAG;AAAA,IAC9C,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,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,GAAG;AAC1C,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;AAC5B,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,IAAI;AAAA,IAC/C,CAAC;AAAA,EACL,CAAC;AACD,WAAS,cAAc,MAAM;AACzB,QAAI;AAEJ,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;AACvC,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAC7C,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;AACvB,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,IAC7C,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,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,GAAG;AAC1C,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;AAC5B,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,IAAI;AAAA,IAC/C,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,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,GAAG;AAC1C,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,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,IAAI;AAAA,IAC/C,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,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,GAAG;AAC1C,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;AAC7B,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,KAAK;AAAA,IAChD,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,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,GAAG;AAC1C,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;AAC7B,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,KAAK;AAAA,IAChD,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,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,GAAG;AAC1C,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;AAC5B,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,IAAI;AAAA,IAC/C,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,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,GAAG;AAC1C,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;AAC7B,aAAO,GAAG,aAAa,KAAK,EAAE,GAAG,MAAM,KAAK;AAAA,IAChD,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;AArZ3D;AAsZgB,kBAAU,WAAM,WAAN,mBAA8B,KAAK;AAAA,MACjD,CAAC;AACD,SAAG,iBAAiB,UAAU,CAAC,UAAiB;AAxZ5D;AAyZgB,mBAAW,WAAM,WAAN,mBAA8B,KAAK;AAAA,MAClD,CAAC;AAAA,IACL,CAAC;AACD,OAAG,iDAAiD,YAAY;AAC5D,SAAG,MAAM;AACT,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,OAAO,EAAE,GAAG,GAAG;AACzB,SAAG,QAAQ;AACX,aAAO,UAAU,SAAS,EAAE,GAAG,MAAM,CAAC;AACtC,YAAM,eAAe,EAAE;AACvB,SAAG,QAAQ;AACX,aAAO,UAAU,SAAS,EAAE,GAAG,MAAM,CAAC;AAAA,IAC1C,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,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;AACD,OAAG,gDAAgD,YAAY;AAC3D,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;AAAA,QACI,UAAU;AAAA,QACV;AAAA,MACJ,EAAE,GAAG,MAAM,CAAC;AAAA,IAChB,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,UAAM,WAAW,IAAI;AACrB,UAAM,YAAY,IAAI;AACtB,eAAW,YAAY;AACnB,eAAS,aAAa;AACtB,gBAAU,aAAa;AACvB,WAAK,MAAM;AAAA,QACP,QAAQ;AAAA,UACJ,KAAK;AAAA,UACL,OAAO;AAAA,UACP,SAAS,CAAC,UAAkB;AACxB,qBAAS,KAAK;AACd,6BAAiB;AAAA,UACrB;AAAA,UACA,UAAU,CAAC,UAAkB;AACzB,sBAAU,KAAK;AACf,8BAAkB;AAAA,UACtB;AAAA,QACJ,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;AAAA,QAC5C;AAAA,QACA;AAAA,MACJ;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,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;AACD,OAAG,4CAA4C,YAAY;AACvD,SAAG,QAAQ;AACX,YAAM,eAAe,EAAE;AACvB,aAAO,UAAU,SAAS,EAAE,GAAG,MAAM,CAAC;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAC3B,SAAG,MAAM;AACT,YAAM,SAAS;AAAA,QACX,OAAO;AAAA,MACX,CAAC;AACD,YAAM,SAAS;AAAA,QACX,OAAO;AAAA,MACX,CAAC;AACD,YAAM,SAAS;AAAA,QACX,OAAO;AAAA,MACX,CAAC;AACD,YAAM,SAAS;AAAA,QACX,OAAO;AAAA,MACX,CAAC;AACD,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAC5B,aAAO,SAAS,SAAS,EAAE,GAAG,MAAM,CAAC;AACrC,aAAO,UAAU,SAAS,EAAE,GAAG,MAAM,CAAC;AACtC,aAAO,iBAAiB,mBAAmB,EAAE,GAAG,MAAM,EAAE;AAAA,IAC5D,CAAC;AAAA,EACL,CAAC;AACD,WAAS,OAAO,MAAM;AAClB,QAAI;AACJ,QAAI,iBAAiB;AACrB,QAAI,kBAAkB;AACtB,UAAM,WAAW,IAAI;AACrB,UAAM,YAAY,IAAI;AACtB,eAAW,YAAY;AACnB,eAAS,aAAa;AACtB,gBAAU,aAAa;AACvB,WAAK,MAAM;AAAA,QACP,QAAQ;AAAA,UACJ,KAAK;AAAA,UACL,OAAO;AAAA,UACP,SAAS,CAAC,UAAkB;AACxB,qBAAS,KAAK;AACd,6BAAiB;AAAA,UACrB;AAAA,UACA,UAAU,CAAC,UAAkB;AACzB,sBAAU,KAAK;AACf,8BAAkB;AAAA,UACtB;AAAA,QACJ,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;AAAA,QAC5C;AAAA,QACA;AAAA,MACJ;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,4CAA4C,YAAY;AACvD,SAAG,QAAQ;AACX,YAAM,eAAe,EAAE;AACvB,aAAO,UAAU,SAAS,EAAE,GAAG,MAAM,CAAC;AACtC,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAC5B,SAAG,MAAM;AACT,YAAM,SAAS;AAAA,QACX,OAAO;AAAA,MACX,CAAC;AACD,YAAM,SAAS;AAAA,QACX,OAAO;AAAA,MACX,CAAC;AACD,YAAM,SAAS;AAAA,QACX,OAAO;AAAA,MACX,CAAC;AACD,YAAM,SAAS;AAAA,QACX,OAAO;AAAA,MACX,CAAC;AACD,YAAM,eAAe,EAAE;AACvB,aAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAC5B,aAAO,SAAS,SAAS,EAAE,GAAG,MAAM,CAAC;AACrC,aAAO,UAAU,SAAS,EAAE,GAAG,MAAM,CAAC;AACtC,aAAO,iBAAiB,mBAAmB,EAAE,GAAG,MAAM,EAAE;AAAA,IAC5D,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,CAAC;AAAA;AAAA,aAET;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;",
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 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\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 expect(el.focusElement.value).to.equal('1,337');\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 expect(el.focusElement.value).to.equal('13,377,331');\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\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 expect(el.focusElement.value).to.equal('1\u202F337');\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 expect(el.focusElement.value).to.equal('13\u202F377\u202F331');\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\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 expect(el.focusElement.value).to.equal('5');\n });\n\n it('supports both positive and negative decimal values', async () => {\n const el = await getElFrom(\n Default({\n step: 0.001,\n min: -10,\n max: 10,\n value: -2.4,\n })\n );\n\n el.size = 'xl';\n expect(el.value).to.equal(-2.4);\n expect(el.valueAsString).to.equal('-2.4');\n expect(el.focusElement.value).to.equal('-2.4');\n });\n });\n describe('Increments', () => {\n let el: NumberField;\n\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 expect(el.focusElement.value).to.equal('');\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 expect(el.focusElement.value).to.equal('');\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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.value).to.equal('10');\n });\n });\n describe('Decrements', () => {\n let el: NumberField;\n\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 expect(el.focusElement.value).to.equal('');\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 expect(el.focusElement.value).to.equal('');\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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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 expect(el.focusElement.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('except when changing `value` from the outside', async () => {\n el.focus();\n await elementUpdated(el);\n expect(el.focused).to.be.true;\n el.value = 51;\n expect(changeSpy.callCount).to.equal(0);\n await elementUpdated(el);\n el.value = 52;\n expect(changeSpy.callCount).to.equal(0);\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 await oneEvent(el, 'input');\n expect(el.value).to.equal(53);\n expect(inputSpy.callCount).to.equal(3);\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(5);\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(5);\n expect(changeSpy.callCount).to.equal(1);\n });\n it('no change in committed value - using buttons', 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(\n changeSpy.callCount,\n 'value does not change from initial value so no \"change\" event is dispatched'\n ).to.equal(0);\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 const inputSpy = spy();\n const changeSpy = spy();\n beforeEach(async () => {\n inputSpy.resetHistory();\n changeSpy.resetHistory();\n el = await getElFrom(\n Default({\n max: 10,\n value: 10,\n onInput: (value: number) => {\n inputSpy(value);\n lastInputValue = value;\n },\n onChange: (value: number) => {\n changeSpy(value);\n lastChangeValue = value;\n },\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(\n 0,\n 'value does not change from initial value so no \"change\" event is dispatched'\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 `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('constrains ArrowUp usage', async () => {\n expect(el.value).to.equal(10);\n el.focus();\n await sendKeys({ press: 'ArrowUp' });\n expect(el.focusElement.value).to.equal('10');\n await sendKeys({ press: 'Shift+ArrowUp' });\n expect(el.focusElement.value).to.equal('10');\n });\n it('constrains pointer usage', async () => {\n expect(el.value).to.equal(10);\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 await sendMouse({\n steps: [\n {\n type: 'click',\n position: buttonUpPosition,\n },\n ],\n });\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 it('dispatches onchange on setting max value', async () => {\n el.value = 5;\n await elementUpdated(el);\n expect(changeSpy.callCount).to.equal(0);\n expect(el.value).to.equal(5);\n el.focus();\n await sendKeys({\n press: 'Backspace',\n });\n await sendKeys({\n press: '1',\n });\n await sendKeys({\n press: '5',\n });\n await sendKeys({\n press: 'Enter',\n });\n await elementUpdated(el);\n expect(el.value).to.equal(10);\n expect(inputSpy.callCount).to.equal(3);\n expect(changeSpy.callCount).to.equal(1);\n expect(lastChangeValue, 'last change value').to.equal(10);\n });\n });\n describe('min', () => {\n let el: NumberField;\n let lastInputValue = 0;\n let lastChangeValue = 0;\n const inputSpy = spy();\n const changeSpy = spy();\n beforeEach(async () => {\n inputSpy.resetHistory();\n changeSpy.resetHistory();\n el = await getElFrom(\n Default({\n min: 10,\n value: 10,\n onInput: (value: number) => {\n inputSpy(value);\n lastInputValue = value;\n },\n onChange: (value: number) => {\n changeSpy(value);\n lastChangeValue = value;\n },\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(\n 0,\n 'value does not change from initial value so no \"change\" event is dispatched'\n );\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n el.focus();\n await sendKeys({ press: 'Backspace' });\n await sendKeys({ press: 'Backspace' });\n await sendKeys({ type: '-2000' });\n await sendKeys({ press: 'Enter' });\n expect(el.formattedValue).to.equal('10');\n expect(el.valueAsString).to.equal('10');\n expect(el.value).to.equal(10);\n });\n it('dispatches onchange on setting min value', async () => {\n el.value = 15;\n await elementUpdated(el);\n expect(changeSpy.callCount).to.equal(0);\n expect(el.value).to.equal(15);\n el.focus();\n await sendKeys({\n press: 'Backspace',\n });\n await sendKeys({\n press: 'Backspace',\n });\n await sendKeys({\n press: '5',\n });\n await sendKeys({\n press: 'Enter',\n });\n await elementUpdated(el);\n expect(el.value).to.equal(10);\n expect(inputSpy.callCount).to.equal(3);\n expect(changeSpy.callCount).to.equal(1);\n expect(lastChangeValue, 'last change 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('constrains ArrowDown usage', async () => {\n el.min = 0;\n el.value = 0;\n expect(el.value).to.equal(0);\n el.focus();\n await sendKeys({ press: 'ArrowDown' });\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('0');\n expect(el.valueAsString).to.equal('0');\n expect(el.value).to.equal(0);\n });\n it('constrains pointer usage', async () => {\n el.min = 0;\n el.value = 0;\n await elementUpdated(el);\n expect(el.value).to.equal(0);\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 await sendMouse({\n steps: [\n {\n type: 'click',\n position: buttonDownPosition,\n },\n ],\n });\n await elementUpdated(el);\n expect(el.value).to.equal(0);\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": "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",
6
6
  "names": []
7
7
  }