@spectrum-web-components/number-field 0.42.5 → 0.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spectrum-web-components/number-field",
3
- "version": "0.42.5",
3
+ "version": "0.43.0",
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.42.5",
62
- "@spectrum-web-components/icon": "^0.42.5",
63
- "@spectrum-web-components/icons-ui": "^0.42.5",
64
- "@spectrum-web-components/infield-button": "^0.42.5",
65
- "@spectrum-web-components/reactive-controllers": "^0.42.5",
66
- "@spectrum-web-components/shared": "^0.42.5",
67
- "@spectrum-web-components/textfield": "^0.42.5"
61
+ "@spectrum-web-components/base": "^0.43.0",
62
+ "@spectrum-web-components/icon": "^0.43.0",
63
+ "@spectrum-web-components/icons-ui": "^0.43.0",
64
+ "@spectrum-web-components/infield-button": "^0.43.0",
65
+ "@spectrum-web-components/reactive-controllers": "^0.43.0",
66
+ "@spectrum-web-components/shared": "^0.43.0",
67
+ "@spectrum-web-components/textfield": "^0.43.0"
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": "f29fd737947945de8cd6f5bc03fb389d386c9c3a"
79
+ "gitHead": "dd5179a5eae5fe69ac77c5e10faed912d0e780e3"
80
80
  }
@@ -228,7 +228,7 @@ export class NumberField extends TextfieldBase {
228
228
  value = this.valueWithLimits(value);
229
229
  this.requestUpdate();
230
230
  this._value = this.validateInput(value);
231
- this.inputElement.value = value.toString();
231
+ this.inputElement.value = this.numberFormatter.format(value);
232
232
  this.inputElement.dispatchEvent(
233
233
  new Event("input", { bubbles: true, composed: true })
234
234
  );
@@ -445,13 +445,10 @@ export class NumberField extends TextfieldBase {
445
445
  get valueFormatter() {
446
446
  if (!this._valueFormatter) {
447
447
  const digitsAfterDecimal = this.step ? this.step != Math.floor(this.step) ? this.step.toString().split(".")[1].length : 0 : 0;
448
- this._valueFormatter = new NumberFormatter(
449
- this.languageResolver.language,
450
- {
451
- maximumFractionDigits: digitsAfterDecimal,
452
- useGrouping: false
453
- }
454
- );
448
+ this._valueFormatter = new NumberFormatter("en", {
449
+ useGrouping: false,
450
+ maximumFractionDigits: digitsAfterDecimal
451
+ });
455
452
  }
456
453
  return this._valueFormatter;
457
454
  }
@@ -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 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(_event: FocusEvent): void {\n super.onBlur(_event);\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 private hasRecentlyReceivedPointerDown = false;\n\n protected override handleInputElementPointerdown(): void {\n this.hasRecentlyReceivedPointerDown = true;\n this.updateComplete.then(() => {\n requestAnimationFrame(() => {\n this.hasRecentlyReceivedPointerDown = false;\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 = parseFloat(\n this.valueFormatter.format((value - min) % this.step)\n );\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 value = parseFloat(this.valueFormatter.format(value));\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 protected clearValueFormatterCache(): void {\n this._valueFormatter = undefined;\n }\n protected get valueFormatter(): NumberFormatter {\n if (!this._valueFormatter) {\n const digitsAfterDecimal = this.step\n ? this.step != Math.floor(this.step)\n ? this.step.toString().split('.')[1].length\n : 0\n : 0;\n this._valueFormatter = new NumberFormatter(\n this.languageResolver.language,\n {\n maximumFractionDigits: digitsAfterDecimal,\n useGrouping: false,\n }\n );\n }\n\n return this._valueFormatter;\n }\n private _numberFormatter?: NumberFormatter;\n private _numberFormatterFocused?: NumberFormatter;\n private _valueFormatter?: NumberFormatter;\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 if (changes.has('step')) {\n this.clearValueFormatterCache();\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 if (\n changes.has('focused') &&\n this.focused &&\n !this.hasRecentlyReceivedPointerDown &&\n !!this.formatOptions.unit\n ) {\n // Normalize keyboard focus entry between unit and non-unit bearing Number Fields\n this.setSelectionRange(0, this.displayValue.length);\n }\n }\n}\n"],
5
- "mappings": ";;;;;;;;;;;AAYA;AAAA,EAEI;AAAA,EACA;AAAA,OAGG;AACP;AAAA,EACI;AAAA,EACA;AAAA,OACG;AACP;AAAA,EACI;AAAA,EACA;AAAA,OACG;AACP,SAAS,yBAAyB;AAClC,SAAS,iBAAiB,oBAAoB;AAE9C,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP;AAAA,EACI;AAAA,EACA;AAAA,OACG;AACP,SAAS,qBAAqB;AAC9B,OAAO,mBAAmB;AAC1B,OAAO,YAAY;AAEZ,aAAM,oBAAoB;AAE1B,aAAM,qBAAqB;AAC3B,aAAM,2BAA2B;AACjC,aAAM,2BAAmD;AAAA,EAC5D,UAAK;AAAA,EACL,UAAK;AAAA,EACL,UAAK;AAAA,EACL,UAAK;AAAA,EACL,UAAK;AAAA,EACL,UAAK;AAAA,EACL,UAAK;AAAA,EACL,UAAK;AAAA,EACL,UAAK;AAAA,EACL,UAAK;AAAA,EACL,UAAK;AAAA,EACL,UAAK;AAAA,EACL,UAAK;AAAA,EACL,UAAK;AAAA,EACL,UAAK;AAAA,EACL,UAAK;AAAA,EACL,QAAG;AACP;AAEA,MAAM,cAAsE;AAAA,EACxE,GAAG,CAAC,QAAQ;AAAA;AAAA,yDAEyC,GAAG;AAAA;AAAA;AAAA,EAGxD,GAAG,CAAC,QAAQ;AAAA;AAAA,yDAEyC,GAAG;AAAA;AAAA;AAAA,EAGxD,GAAG,CAAC,QAAQ;AAAA;AAAA,yDAEyC,GAAG;AAAA;AAAA;AAAA,EAGxD,IAAI,CAAC,QAAQ;AAAA;AAAA,yDAEwC,GAAG;AAAA;AAAA;AAG5D;AAOO,aAAM,oBAAoB,cAAc;AAAA,EAAxC;AAAA;AASH,SAAgB,UAAU;AAE1B,uBAAc;AAWd,SAAO,gBAA0C,CAAC;AAMlD,SAAO,cAAc;AAGrB,SAAO,gBAAgB;AAGvB,SAAO,kBAAkB;AAiBzB,SAAO,eAAe;AAGtB,SAAO,eAAe;AAwBtB,SAAgB,SAAS;AACzB,SAAQ,iBAAiB;AAiEzB,SAAQ,cAAc;AAItB,SAAQ,mBAAmB,IAAI,6BAA6B,IAAI;AA4JhE,SAAQ,mBAAmB;AAiC3B,SAAQ,iCAAiC;AAyMzC,kCAAyB,CAAC,UAAyB;AAC/C,WAAK,eAAe;AAAA,IACxB;AAoGA,SAAQ,cAAc;AAAA;AAAA,EA/nBtB,WAA2B,SAAyB;AAChD,WAAO,CAAC,GAAG,MAAM,QAAQ,QAAQ,aAAa;AAAA,EAClD;AAAA,EAsDA,IAAoB,MAAM,UAAkB;AACxC,UAAM,QAAQ,KAAK,cAAc,QAAQ;AACzC,QAAI,UAAU,KAAK,OAAO;AACtB;AAAA,IACJ;AACA,SAAK,oBAAoB;AACzB,UAAM,WAAW,KAAK;AACtB,SAAK,SAAS;AACd,SAAK,cAAc,SAAS,QAAQ;AAAA,EACxC;AAAA,EAEA,IAAoB,QAAgB;AAChC,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAY,aAAqB;AAC7B,WAAO,KAAK,gBACN,KAAK,iBACL,KAAK,aAAa;AAAA,EAC5B;AAAA,EAMQ,SAAS,QAAgB,KAAK,OAAa;AAC/C,SAAK,QAAQ;AACb,QACI,OAAO,KAAK,sBAAsB,eAClC,KAAK,sBAAsB,KAAK,OAClC;AAEE;AAAA,IACJ;AAEA,SAAK;AAAA,MACD,IAAI,MAAM,UAAU,EAAE,SAAS,MAAM,UAAU,KAAK,CAAC;AAAA,IACzD;AACA,SAAK,oBAAoB,KAAK;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAW,gBAAwB;AAC/B,WAAO,KAAK,OAAO,SAAS;AAAA,EAChC;AAAA,EAEA,IAAW,cAAc,OAAe;AACpC,SAAK,QAAQ,KAAK,aAAa,MAAM,KAAK;AAAA,EAC9C;AAAA,EAEA,IAAW,iBAAyB;AAChC,QAAI,MAAM,KAAK,KAAK,EAAG,QAAO;AAC9B,WACI,KAAK,gBAAgB,OAAO,KAAK,KAAK,KACrC,KAAK,UAAU,KAAK,KAAK;AAAA,EAElC;AAAA,EAEQ,qBAAqB,OAAuB;AApNxD;AAqNQ,QAAI,SAAS,KAAK,KAAK,aAAa,cAAc,WAAW;AACzD,YAAM,QAAQ,KAAK,gBAAgB,cAAc,MAAM;AACvD,YAAM,gBAAgB,MACjB,MAAM,EAAE,EACR,KAAK,CAAC,SAAS,SAAS,OAAO,SAAS,GAAG;AAChD,YAAM,sBAAqB,WAAM;AAAA,QAC7B,CAAC,SAAS,KAAK,SAAS;AAAA,MAC5B,MAF2B,mBAExB;AACH,UAAI,iBAAiB,oBAAoB;AACrC,gBAAQ,MAAM,QAAQ,eAAe,kBAAkB;AAAA,MAC3D;AAAA,IACJ;AACA,WAAO,KAAK,aAAa,MAAM,KAAK;AAAA,EACxC;AAAA,EAEA,IAAY,QAAgB;AApOhC;AAqOQ,QAAI,OAAO,KAAK,SAAS,aAAa;AAClC,aAAO,KAAK;AAAA,IAChB;AACA,UAAI,UAAK,kBAAL,mBAAoB,WAAU,WAAW;AACzC,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AAAA,EASQ,kBAAkB,OAA2B;AACjD,QAAI,MAAM,WAAW,GAAG;AACpB,YAAM,eAAe;AACrB;AAAA,IACJ;AACA,SAAK,eAAe;AACpB,SAAK,QAAQ,kBAAkB,MAAM,SAAS;AAC9C,UAAM,aAAa,KAAK,QAAQ,SAAS,CAAC,EAAE,sBAAsB;AAClE,UAAM,eAAe,KAAK,QAAQ,SAAS,CAAC,EAAE,sBAAsB;AACpE,SAAK,aAAa,CAACA,WAAwB;AACvC,UACIA,OAAM,WAAW,WAAW,KAC5BA,OAAM,WAAW,WAAW,KAC5BA,OAAM,WAAW,WAAW,IAAI,WAAW,SAC3CA,OAAM,WAAW,WAAW,IAAI,WAAW,QAC7C;AACE,aAAK,SAAS,CAACA,WACX,KAAK,UAAUA,OAAM,WAAW,KAAK,eAAe,CAAC;AAAA,MAC7D,WACIA,OAAM,WAAW,aAAa,KAC9BA,OAAM,WAAW,aAAa,KAC9BA,OAAM,WAAW,aAAa,IAAI,aAAa,SAC/CA,OAAM,WAAW,aAAa,IAAI,aAAa,QACjD;AACE,aAAK,SAAS,CAACA,WACX,KAAK,UAAUA,OAAM,WAAW,KAAK,eAAe,CAAC;AAAA,MAC7D;AAAA,IACJ;AACA,SAAK,WAAW,KAAK;AACrB,SAAK,YAAY,KAAK;AAAA,EAC1B;AAAA,EAEQ,YAAY,OAA2B;AAC3C,SAAK,cAAc;AACnB,SAAK,SAAS,KAAK;AACnB,SAAK,QAAQ,WAAW,MAAM;AAC1B,WAAK,aAAa,KAAK;AAAA,IAC3B,GAAG,GAAG;AAAA,EACV;AAAA,EAEQ,SAAS,OAA2B;AACxC,SAAK,OAAO,KAAK;AAAA,EACrB;AAAA,EAEQ,kBAAkB,OAA2B;AACjD,SAAK,WAAW,KAAK;AAAA,EACzB;AAAA,EAEQ,gBAAgB,OAA2B;AAC/C,SAAK,QAAQ,sBAAsB,MAAM,SAAS;AAClD,yBAAqB,KAAK,UAAU;AACpC,iBAAa,KAAK,KAAK;AACvB,SAAK,eAAe;AACpB,SAAK,SAAS;AAAA,EAClB;AAAA,EAEQ,aAAa,OAA6B;AAC9C,SAAK,eAAe;AACpB,QAAI,KAAK,cAAc,sBAAsB,GAAG;AAC5C,WAAK,SAAS,KAAK;AAAA,IACvB;AACA,WAAO,sBAAsB,MAAM;AAC/B,WAAK,aAAa,KAAK,aAAa,KAAK;AAAA,IAC7C,CAAC;AAAA,EACL;AAAA,EAEQ,OAAO,OAAqB;AAChC,QAAI,KAAK,YAAY,KAAK,UAAU;AAChC;AAAA,IACJ;AACA,UAAM,MAAM,OAAO,KAAK,QAAQ,cAAc,KAAK,MAAM;AACzD,QAAI,QAAQ,KAAK;AACjB,aAAS,QAAQ,KAAK;AACtB,QAAI,MAAM,KAAK,KAAK,GAAG;AACnB,cAAQ;AAAA,IACZ;AACA,YAAQ,KAAK,gBAAgB,KAAK;AAElC,SAAK,cAAc;AACnB,SAAK,SAAS,KAAK,cAAc,KAAK;AACtC,SAAK,aAAa,QAAQ,MAAM,SAAS;AAEzC,SAAK,aAAa;AAAA,MACd,IAAI,MAAM,SAAS,EAAE,SAAS,MAAM,UAAU,KAAK,CAAC;AAAA,IACxD;AACA,SAAK,gBAAgB;AACrB,SAAK,MAAM;AAAA,EACf;AAAA,EAEQ,UAAU,SAAS,GAAS;AAChC,SAAK,OAAO,IAAI,MAAM;AAAA,EAC1B;AAAA,EAEQ,UAAU,SAAS,GAAS;AAChC,SAAK,OAAO,KAAK,MAAM;AAAA,EAC3B;AAAA,EAEQ,cAAc,OAA4B;AAC9C,QAAI,KAAK,YAAa;AACtB,YAAQ,MAAM,MAAM;AAAA,MAChB,KAAK;AACD,cAAM,eAAe;AACrB,aAAK,UAAU,MAAM,WAAW,KAAK,eAAe,CAAC;AACrD,aAAK,SAAS;AACd;AAAA,MACJ,KAAK;AACD,cAAM,eAAe;AACrB,aAAK,UAAU,MAAM,WAAW,KAAK,eAAe,CAAC;AACrD,aAAK,SAAS;AACd;AAAA,IACR;AAAA,EACJ;AAAA,EAIU,SAAS,OAAyB;AACxC,UAAM,eAAe;AACrB,SAAK,eAAe;AACpB,UAAM,YAAY,MAAM,WAClB,MAAM,SAAS,KAAK,IAAI,MAAM,MAAM,IACpC,MAAM,SAAS,KAAK,IAAI,MAAM,MAAM;AAC1C,QAAI,cAAc,KAAK,CAAC,MAAM,SAAS,GAAG;AACtC,WAAK,OAAO,aAAa,MAAM,WAAW,KAAK,eAAe,EAAE;AAChE,mBAAa,KAAK,iBAAiB;AACnC,WAAK,oBAAoB,WAAW,MAAM;AACtC,aAAK,SAAS;AAAA,MAClB,GAAG,kBAAkB;AAAA,IACzB;AACA,SAAK,eAAe;AAAA,EACxB;AAAA,EAEmB,UAAgB;AAC/B,UAAM,QAAQ;AACd,SAAK,iBAAiB,KAAK;AAC3B,SAAK,kBAAkB,CAAC,KAAK,YAAY;AACzC,SAAK,iBAAiB,SAAS,KAAK,UAAU,EAAE,SAAS,MAAM,CAAC;AAAA,EACpE;AAAA,EAEmB,OAAO,QAA0B;AAChD,UAAM,OAAO,MAAM;AACnB,SAAK,kBAAkB,CAAC,KAAK,YAAY;AACzC,SAAK,oBAAoB,SAAS,KAAK,QAAQ;AAAA,EACnD;AAAA,EAEQ,gBAAsB;AAC1B,SAAK,UAAU,CAAC,KAAK,YAAY;AACjC,SAAK,kBAAkB,CAAC,KAAK,YAAY;AAAA,EAC7C;AAAA,EAEQ,iBAAuB;AAC3B,SAAK,UAAU,CAAC,KAAK,YAAY;AACjC,SAAK,kBAAkB,CAAC,KAAK,YAAY;AAAA,EAC7C;AAAA,EAKmB,eAAqB;AACpC,UAAM,QAAQ,KAAK,qBAAqB,KAAK,UAAU;AACvD,QAAI,KAAK,kBAAkB;AACvB,WAAK,mBAAmB;AACxB,WAAK,qBAAqB;AAC1B,UAAI,MAAM,KAAK,GAAG;AACd,aAAK,gBAAgB;AACrB;AAAA,MACJ;AAAA,IACJ;AACA,SAAK,SAAS,KAAK;AACnB,SAAK,aAAa,QAAQ,KAAK;AAAA,EACnC;AAAA,EAEU,yBAA+B;AACrC,SAAK,cAAc;AAAA,EACvB;AAAA,EAEU,uBAA6B;AACnC,SAAK,cAAc;AACnB,0BAAsB,MAAM;AACxB,WAAK,aAAa;AAAA,QACd,IAAI,MAAM,SAAS;AAAA,UACf,UAAU;AAAA,UACV,SAAS;AAAA,QACb,CAAC;AAAA,MACL;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EAImB,gCAAsC;AACrD,SAAK,iCAAiC;AACtC,SAAK,eAAe,KAAK,MAAM;AAC3B,4BAAsB,MAAM;AACxB,aAAK,iCAAiC;AAAA,MAC1C,CAAC;AAAA,IACL,CAAC;AAAA,EACL;AAAA,EAEmB,YAAY,OAAoB;AA3bvD;AA4bQ,QAAI,KAAK,aAAa;AAClB,YAAM,gBAAgB;AACtB;AAAA,IACJ;AACA,QAAI,KAAK,eAAe;AACpB,WAAK,mBAAmB;AACxB,WAAK,qBAAqB,KAAK;AAC/B,WAAK,aAAa,QAAQ,KAAK,aAAa,MAAM;AAAA,QAC9C;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AACA,UAAM,EAAE,OAAO,eAAe,eAAe,IAAI,KAAK;AACtD,UAAM,QAAQ,cACT,MAAM,EAAE,EACR,IAAI,CAAC,SAAS,yBAAyB,IAAI,KAAK,IAAI,EACpD,KAAK,EAAE;AACZ,QAAI,KAAK,aAAa,qBAAqB,KAAK,GAAG;AAE/C,WAAK,qBAAoB,UAAK,sBAAL,YAA0B,KAAK;AACxD,YAAM,gBAAgB,KAAK,qBAAqB,KAAK;AACrD,UAAI,CAAC,SAAS,KAAK,oBAAoB;AACnC,aAAK,gBAAgB;AACrB,aAAK,SAAS,KAAK;AAAA,MACvB,OAAO;AACH,aAAK,gBAAgB;AACrB,aAAK,SAAS,KAAK,cAAc,aAAa;AAAA,MAClD;AACA,WAAK,iBAAiB;AACtB,WAAK,aAAa,QAAQ;AAC1B,WAAK,aAAa,kBAAkB,gBAAgB,cAAc;AAClE;AAAA,IACJ,OAAO;AACH,WAAK,aAAa,QAAQ,KAAK,gBACzB,2BACA,KAAK;AAAA,IACf;AACA,UAAM,gBAAgB,MAAM;AAC5B,UAAM,iBAAiB,KAAK,eAAe;AAC3C,UAAM,mBACD,kBAAkB,kBAClB,gBAAgB;AACrB,SAAK,aAAa,kBAAkB,iBAAiB,eAAe;AAAA,EACxE;AAAA,EAEQ,gBAAgB,WAA2B;AAC/C,QAAI,QAAQ;AACZ,QAAI,OAAO,KAAK,QAAQ,aAAa;AACjC,cAAQ,KAAK,IAAI,KAAK,KAAK,KAAK;AAAA,IACpC;AACA,QAAI,OAAO,KAAK,QAAQ,aAAa;AACjC,cAAQ,KAAK,IAAI,KAAK,KAAK,KAAK;AAAA,IACpC;AACA,WAAO;AAAA,EACX;AAAA,EAEQ,cAAc,OAAuB;AACzC,YAAQ,KAAK,gBAAgB,KAAK;AAClC,UAAM,iBAAiB,QAAQ,IAAI,KAAK;AACxC,aAAS;AAGT,QAAI,KAAK,MAAM;AACX,YAAM,MAAM,OAAO,KAAK,QAAQ,cAAc,KAAK,MAAM;AACzD,YAAM,aAAa;AAAA,QACf,KAAK,eAAe,QAAQ,QAAQ,OAAO,KAAK,IAAI;AAAA,MACxD;AACA,YAAM,cAAc,eAAe;AACnC,UAAI,CAAC,aAAa;AACd,cAAM,YAAY,KAAK,MAAM,aAAa,KAAK,IAAI;AACnD,YAAI,cAAc,GAAG;AACjB,mBAAS,KAAK,OAAO;AAAA,QACzB,OAAO;AACH,mBAAS;AAAA,QACb;AAAA,MACJ;AACA,UAAI,OAAO,KAAK,QAAQ,aAAa;AACjC,eAAO,QAAQ,KAAK,KAAK;AACrB,mBAAS,KAAK;AAAA,QAClB;AAAA,MACJ;AACA,cAAQ,WAAW,KAAK,eAAe,OAAO,KAAK,CAAC;AAAA,IACxD;AACA,aAAS;AACT,WAAO;AAAA,EACX;AAAA,EAEA,IAAuB,eAAuB;AAC1C,UAAM,qBAAqB,KAAK,UAAU,KAAK;AAC/C,WAAO,KAAK,gBAAgB,qBAAqB,KAAK;AAAA,EAC1D;AAAA,EAEU,4BAAkC;AACxC,SAAK,mBAAmB;AACxB,SAAK,gBAAgB;AAAA,EACzB;AAAA,EAEA,IAAc,kBAAmC;AAC7C,QAAI,CAAC,KAAK,oBAAoB,CAAC,KAAK,yBAAyB;AACzD,YAAM;AAAA,QACF;AAAA,QACA;AAAA;AAAA,QAEA;AAAA,QACA,GAAG;AAAA,MACP,IAAI,KAAK;AACT,UAAI,UAAU,QAAQ;AAClB,QAAC,oBAAiD,QAAQ;AAAA,MAC9D;AACA,WAAK,0BAA0B,IAAI;AAAA,QAC/B,KAAK,iBAAiB;AAAA,QACtB;AAAA,MACJ;AACA,UAAI;AACA,aAAK,mBAAmB,IAAI;AAAA,UACxB,KAAK,iBAAiB;AAAA,UACtB,KAAK;AAAA,QACT;AACA,aAAK,cAAc;AACnB,aAAK,iBAAiB,OAAO,CAAC;AAAA,MAClC,SAAS,OAAO;AACZ,YAAI,UAAU,QAAQ;AAClB,eAAK,cAAc;AAAA,QACvB;AACA,aAAK,mBAAmB,KAAK;AAAA,MACjC;AAAA,IACJ;AACA,WAAO,KAAK,UACN,KAAK,0BACL,KAAK;AAAA,EACf;AAAA,EAEU,2BAAiC;AACvC,SAAK,kBAAkB;AAAA,EAC3B;AAAA,EACA,IAAc,iBAAkC;AAC5C,QAAI,CAAC,KAAK,iBAAiB;AACvB,YAAM,qBAAqB,KAAK,OAC1B,KAAK,QAAQ,KAAK,MAAM,KAAK,IAAI,IAC7B,KAAK,KAAK,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,SACnC,IACJ;AACN,WAAK,kBAAkB,IAAI;AAAA,QACvB,KAAK,iBAAiB;AAAA,QACtB;AAAA,UACI,uBAAuB;AAAA,UACvB,aAAa;AAAA,QACjB;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO,KAAK;AAAA,EAChB;AAAA,EAIA,IAAc,eAA6B;AACvC,QAAI,CAAC,KAAK,iBAAiB,CAAC,KAAK,sBAAsB;AACnD,YAAM;AAAA,QACF;AAAA,QACA;AAAA;AAAA,QAEA;AAAA,QACA,GAAG;AAAA,MACP,IAAI,KAAK;AACT,UAAI,UAAU,QAAQ;AAClB,QAAC,oBAAiD,QAAQ;AAAA,MAC9D;AACA,WAAK,uBAAuB,IAAI;AAAA,QAC5B,KAAK,iBAAiB;AAAA,QACtB;AAAA,MACJ;AACA,UAAI;AACA,aAAK,gBAAgB,IAAI;AAAA,UACrB,KAAK,iBAAiB;AAAA,UACtB,KAAK;AAAA,QACT;AACA,aAAK,cAAc;AACnB,aAAK,cAAc,MAAM,GAAG;AAAA,MAChC,SAAS,OAAO;AACZ,YAAI,UAAU,QAAQ;AAClB,eAAK,cAAc;AAAA,QACvB;AACA,aAAK,gBAAgB,KAAK;AAAA,MAC9B;AAAA,IACJ;AACA,WAAO,KAAK,UAAU,KAAK,uBAAuB,KAAK;AAAA,EAC3D;AAAA,EASmB,cAA8B;AAC7C,SAAK,eAAe;AACpB,WAAO;AAAA,cACD,MAAM,YAAY,CAAC;AAAA,cACnB,KAAK,cACD,UACA;AAAA;AAAA;AAAA,qCAGmB,KAAK,aAAa;AAAA,sCACjB,KAAK,cAAc;AAAA,4BAC7B,kBAAkB;AAAA,MAChB,OAAO,CAAC,eAAe,KAAK,iBAAiB;AAAA,MAC7C,cAAc;AAAA,QACV;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACJ;AAAA,QACA,KAAK;AAAA,MACT;AAAA,MACA,KAAK;AAAA,QACD;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,QACJ;AAAA,QACA,KAAK;AAAA,MACT;AAAA,IACJ,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iDAMqB,KAAK,UAAU;AAAA,sCAC1B,cAAc,KAAK,YAAY;AAAA,qCAChC,KAAK,IAAI;AAAA;AAAA,yCAEL,KAAK,OAAO;AAAA,0CACX,KAAK,YACjB,KAAK,YACJ,OAAO,KAAK,QAAQ,eACjB,KAAK,UAAU,KAAK,GAAI;AAAA,uCACnB,KAAK,KAAK;AAAA;AAAA,gCAEjB,YAAY,KAAK,IAAI,EAAE,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iDAMX,KAAK,UAAU;AAAA,sCAC1B,cAAc,KAAK,YAAY;AAAA,qCAChC,KAAK,IAAI;AAAA;AAAA,yCAEL,KAAK,OAAO;AAAA,0CACX,KAAK,YACjB,KAAK,YACJ,OAAO,KAAK,QAAQ,eACjB,KAAK,UAAU,KAAK,GAAI;AAAA,uCACnB,KAAK,KAAK;AAAA;AAAA,gCAEjB,YAAY,KAAK,IAAI,EAAE,MAAM,CAAC;AAAA;AAAA;AAAA,mBAG3C;AAAA;AAAA,EAEf;AAAA,EAEmB,OAAO,SAA+B;AACrD,QAAI,QAAQ,IAAI,eAAe,KAAK,QAAQ,IAAI,kBAAkB,GAAG;AACjE,WAAK,0BAA0B;AAAA,IACnC;AACA,QAAI,QAAQ,IAAI,OAAO,KAAK,QAAQ,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG;AAClE,YAAM,QAAQ,KAAK,aAAa;AAAA,QAC5B,KAAK,eAAe,QAAQ,KAAK,aAAa,EAAE;AAAA,MACpD;AACA,WAAK,QAAQ;AAAA,IACjB;AACA,QAAI,QAAQ,IAAI,MAAM,GAAG;AACrB,WAAK,yBAAyB;AAAA,IAClC;AACA,UAAM,OAAO,OAAO;AAAA,EACxB;AAAA,EAEgB,WAAW,SAA+B;AACtD,SAAK,YAAY;AACjB,QAAI,QAAQ,IAAI,6BAA6B,GAAG;AAC5C,WAAK,0BAA0B;AAAA,IACnC;AAAA,EACJ;AAAA,EAImB,aAAa,SAA+B;AAC3D,UAAM,aAAa,OAAO;AAC1B,SAAK,iBAAiB,WAAW,KAAK,aAAa;AACnD,SAAK,iBAAiB,oBAAoB,KAAK,sBAAsB;AACrE,SAAK,iBAAiB,kBAAkB,KAAK,oBAAoB;AAAA,EACrE;AAAA,EAEmB,QAAQ,SAAqC;AAC5D,QAAI,QAAQ,IAAI,KAAK,KAAK,QAAQ,IAAI,eAAe,GAAG;AACpD,UAAI,YAAY;AAChB,YAAM,cAAc,OAAO,KAAK,QAAQ,eAAe,KAAK,MAAM;AAClE,YAAM,EAAE,sBAAsB,IAC1B,KAAK,gBAAgB,gBAAgB;AACzC,YAAM,cAAc,wBAAwB;AAE5C,UAAI,SAAS,GAAG;AAIZ,YAAI,aAAa;AACb,sBAAY;AAAA,QAChB,WAAW,aAAa;AACpB,sBAAY;AAAA,QAChB;AAAA,MACJ,WAAW,UAAU,GAAG;AAGpB,YAAI,aAAa;AACb,sBAAY;AAAA,QAChB,WAAW,aAAa;AACpB,sBAAY;AAAA,QAChB;AAAA,MACJ;AACA,WAAK,aAAa,YAAY;AAAA,IAClC;AACA,QACI,QAAQ,IAAI,SAAS,KACrB,KAAK,WACL,CAAC,KAAK,kCACN,CAAC,CAAC,KAAK,cAAc,MACvB;AAEE,WAAK,kBAAkB,GAAG,KAAK,aAAa,MAAM;AAAA,IACtD;AAAA,EACJ;AACJ;AAzqBY;AAAA,EADP,MAAM,UAAU;AAAA,GALR,YAMD;AAGQ;AAAA,EADf,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GARjC,YASO;AAaT;AAAA,EADN,SAAS,EAAE,MAAM,QAAQ,WAAW,iBAAiB,CAAC;AAAA,GArB9C,YAsBF;AAMA;AAAA,EADN,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM,WAAW,eAAe,CAAC;AAAA,GA3B5D,YA4BF;AAGA;AAAA,EADN,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GA9BjC,YA+BF;AAGA;AAAA,EADN,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM,WAAW,mBAAmB,CAAC;AAAA,GAjChE,YAkCF;AAGA;AAAA,EADN,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GApCjB,YAqCF;AAGA;AAAA,EADN,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAvCjB,YAwCF;AASA;AAAA,EADN,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAhDjB,YAiDF;AAKA;AAAA,EADN,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM,WAAW,gBAAgB,CAAC;AAAA,GArD5D,YAsDF;AAGa;AAAA,EADnB,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAxDjB,YAyDW;",
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 = this.numberFormatter.format(value);\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(_event: FocusEvent): void {\n super.onBlur(_event);\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 private hasRecentlyReceivedPointerDown = false;\n\n protected override handleInputElementPointerdown(): void {\n this.hasRecentlyReceivedPointerDown = true;\n this.updateComplete.then(() => {\n requestAnimationFrame(() => {\n this.hasRecentlyReceivedPointerDown = false;\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 = parseFloat(\n this.valueFormatter.format((value - min) % this.step)\n );\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 value = parseFloat(this.valueFormatter.format(value));\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 protected clearValueFormatterCache(): void {\n this._valueFormatter = undefined;\n }\n protected get valueFormatter(): NumberFormatter {\n if (!this._valueFormatter) {\n const digitsAfterDecimal = this.step\n ? this.step != Math.floor(this.step)\n ? this.step.toString().split('.')[1].length\n : 0\n : 0;\n this._valueFormatter = new NumberFormatter('en', {\n useGrouping: false,\n maximumFractionDigits: digitsAfterDecimal,\n });\n }\n\n return this._valueFormatter;\n }\n private _numberFormatter?: NumberFormatter;\n private _numberFormatterFocused?: NumberFormatter;\n private _valueFormatter?: NumberFormatter;\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 if (changes.has('step')) {\n this.clearValueFormatterCache();\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 if (\n changes.has('focused') &&\n this.focused &&\n !this.hasRecentlyReceivedPointerDown &&\n !!this.formatOptions.unit\n ) {\n // Normalize keyboard focus entry between unit and non-unit bearing Number Fields\n this.setSelectionRange(0, this.displayValue.length);\n }\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;AAYA;AAAA,EAEI;AAAA,EACA;AAAA,OAGG;AACP;AAAA,EACI;AAAA,EACA;AAAA,OACG;AACP;AAAA,EACI;AAAA,EACA;AAAA,OACG;AACP,SAAS,yBAAyB;AAClC,SAAS,iBAAiB,oBAAoB;AAE9C,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP;AAAA,EACI;AAAA,EACA;AAAA,OACG;AACP,SAAS,qBAAqB;AAC9B,OAAO,mBAAmB;AAC1B,OAAO,YAAY;AAEZ,aAAM,oBAAoB;AAE1B,aAAM,qBAAqB;AAC3B,aAAM,2BAA2B;AACjC,aAAM,2BAAmD;AAAA,EAC5D,UAAK;AAAA,EACL,UAAK;AAAA,EACL,UAAK;AAAA,EACL,UAAK;AAAA,EACL,UAAK;AAAA,EACL,UAAK;AAAA,EACL,UAAK;AAAA,EACL,UAAK;AAAA,EACL,UAAK;AAAA,EACL,UAAK;AAAA,EACL,UAAK;AAAA,EACL,UAAK;AAAA,EACL,UAAK;AAAA,EACL,UAAK;AAAA,EACL,UAAK;AAAA,EACL,UAAK;AAAA,EACL,QAAG;AACP;AAEA,MAAM,cAAsE;AAAA,EACxE,GAAG,CAAC,QAAQ;AAAA;AAAA,yDAEyC,GAAG;AAAA;AAAA;AAAA,EAGxD,GAAG,CAAC,QAAQ;AAAA;AAAA,yDAEyC,GAAG;AAAA;AAAA;AAAA,EAGxD,GAAG,CAAC,QAAQ;AAAA;AAAA,yDAEyC,GAAG;AAAA;AAAA;AAAA,EAGxD,IAAI,CAAC,QAAQ;AAAA;AAAA,yDAEwC,GAAG;AAAA;AAAA;AAG5D;AAOO,aAAM,oBAAoB,cAAc;AAAA,EAAxC;AAAA;AASH,SAAgB,UAAU;AAE1B,uBAAc;AAWd,SAAO,gBAA0C,CAAC;AAMlD,SAAO,cAAc;AAGrB,SAAO,gBAAgB;AAGvB,SAAO,kBAAkB;AAiBzB,SAAO,eAAe;AAGtB,SAAO,eAAe;AAwBtB,SAAgB,SAAS;AACzB,SAAQ,iBAAiB;AAiEzB,SAAQ,cAAc;AAItB,SAAQ,mBAAmB,IAAI,6BAA6B,IAAI;AA4JhE,SAAQ,mBAAmB;AAiC3B,SAAQ,iCAAiC;AAsMzC,kCAAyB,CAAC,UAAyB;AAC/C,WAAK,eAAe;AAAA,IACxB;AAoGA,SAAQ,cAAc;AAAA;AAAA,EA5nBtB,WAA2B,SAAyB;AAChD,WAAO,CAAC,GAAG,MAAM,QAAQ,QAAQ,aAAa;AAAA,EAClD;AAAA,EAsDA,IAAoB,MAAM,UAAkB;AACxC,UAAM,QAAQ,KAAK,cAAc,QAAQ;AACzC,QAAI,UAAU,KAAK,OAAO;AACtB;AAAA,IACJ;AACA,SAAK,oBAAoB;AACzB,UAAM,WAAW,KAAK;AACtB,SAAK,SAAS;AACd,SAAK,cAAc,SAAS,QAAQ;AAAA,EACxC;AAAA,EAEA,IAAoB,QAAgB;AAChC,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAY,aAAqB;AAC7B,WAAO,KAAK,gBACN,KAAK,iBACL,KAAK,aAAa;AAAA,EAC5B;AAAA,EAMQ,SAAS,QAAgB,KAAK,OAAa;AAC/C,SAAK,QAAQ;AACb,QACI,OAAO,KAAK,sBAAsB,eAClC,KAAK,sBAAsB,KAAK,OAClC;AAEE;AAAA,IACJ;AAEA,SAAK;AAAA,MACD,IAAI,MAAM,UAAU,EAAE,SAAS,MAAM,UAAU,KAAK,CAAC;AAAA,IACzD;AACA,SAAK,oBAAoB,KAAK;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAW,gBAAwB;AAC/B,WAAO,KAAK,OAAO,SAAS;AAAA,EAChC;AAAA,EAEA,IAAW,cAAc,OAAe;AACpC,SAAK,QAAQ,KAAK,aAAa,MAAM,KAAK;AAAA,EAC9C;AAAA,EAEA,IAAW,iBAAyB;AAChC,QAAI,MAAM,KAAK,KAAK,EAAG,QAAO;AAC9B,WACI,KAAK,gBAAgB,OAAO,KAAK,KAAK,KACrC,KAAK,UAAU,KAAK,KAAK;AAAA,EAElC;AAAA,EAEQ,qBAAqB,OAAuB;AApNxD;AAqNQ,QAAI,SAAS,KAAK,KAAK,aAAa,cAAc,WAAW;AACzD,YAAM,QAAQ,KAAK,gBAAgB,cAAc,MAAM;AACvD,YAAM,gBAAgB,MACjB,MAAM,EAAE,EACR,KAAK,CAAC,SAAS,SAAS,OAAO,SAAS,GAAG;AAChD,YAAM,sBAAqB,WAAM;AAAA,QAC7B,CAAC,SAAS,KAAK,SAAS;AAAA,MAC5B,MAF2B,mBAExB;AACH,UAAI,iBAAiB,oBAAoB;AACrC,gBAAQ,MAAM,QAAQ,eAAe,kBAAkB;AAAA,MAC3D;AAAA,IACJ;AACA,WAAO,KAAK,aAAa,MAAM,KAAK;AAAA,EACxC;AAAA,EAEA,IAAY,QAAgB;AApOhC;AAqOQ,QAAI,OAAO,KAAK,SAAS,aAAa;AAClC,aAAO,KAAK;AAAA,IAChB;AACA,UAAI,UAAK,kBAAL,mBAAoB,WAAU,WAAW;AACzC,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AAAA,EASQ,kBAAkB,OAA2B;AACjD,QAAI,MAAM,WAAW,GAAG;AACpB,YAAM,eAAe;AACrB;AAAA,IACJ;AACA,SAAK,eAAe;AACpB,SAAK,QAAQ,kBAAkB,MAAM,SAAS;AAC9C,UAAM,aAAa,KAAK,QAAQ,SAAS,CAAC,EAAE,sBAAsB;AAClE,UAAM,eAAe,KAAK,QAAQ,SAAS,CAAC,EAAE,sBAAsB;AACpE,SAAK,aAAa,CAACA,WAAwB;AACvC,UACIA,OAAM,WAAW,WAAW,KAC5BA,OAAM,WAAW,WAAW,KAC5BA,OAAM,WAAW,WAAW,IAAI,WAAW,SAC3CA,OAAM,WAAW,WAAW,IAAI,WAAW,QAC7C;AACE,aAAK,SAAS,CAACA,WACX,KAAK,UAAUA,OAAM,WAAW,KAAK,eAAe,CAAC;AAAA,MAC7D,WACIA,OAAM,WAAW,aAAa,KAC9BA,OAAM,WAAW,aAAa,KAC9BA,OAAM,WAAW,aAAa,IAAI,aAAa,SAC/CA,OAAM,WAAW,aAAa,IAAI,aAAa,QACjD;AACE,aAAK,SAAS,CAACA,WACX,KAAK,UAAUA,OAAM,WAAW,KAAK,eAAe,CAAC;AAAA,MAC7D;AAAA,IACJ;AACA,SAAK,WAAW,KAAK;AACrB,SAAK,YAAY,KAAK;AAAA,EAC1B;AAAA,EAEQ,YAAY,OAA2B;AAC3C,SAAK,cAAc;AACnB,SAAK,SAAS,KAAK;AACnB,SAAK,QAAQ,WAAW,MAAM;AAC1B,WAAK,aAAa,KAAK;AAAA,IAC3B,GAAG,GAAG;AAAA,EACV;AAAA,EAEQ,SAAS,OAA2B;AACxC,SAAK,OAAO,KAAK;AAAA,EACrB;AAAA,EAEQ,kBAAkB,OAA2B;AACjD,SAAK,WAAW,KAAK;AAAA,EACzB;AAAA,EAEQ,gBAAgB,OAA2B;AAC/C,SAAK,QAAQ,sBAAsB,MAAM,SAAS;AAClD,yBAAqB,KAAK,UAAU;AACpC,iBAAa,KAAK,KAAK;AACvB,SAAK,eAAe;AACpB,SAAK,SAAS;AAAA,EAClB;AAAA,EAEQ,aAAa,OAA6B;AAC9C,SAAK,eAAe;AACpB,QAAI,KAAK,cAAc,sBAAsB,GAAG;AAC5C,WAAK,SAAS,KAAK;AAAA,IACvB;AACA,WAAO,sBAAsB,MAAM;AAC/B,WAAK,aAAa,KAAK,aAAa,KAAK;AAAA,IAC7C,CAAC;AAAA,EACL;AAAA,EAEQ,OAAO,OAAqB;AAChC,QAAI,KAAK,YAAY,KAAK,UAAU;AAChC;AAAA,IACJ;AACA,UAAM,MAAM,OAAO,KAAK,QAAQ,cAAc,KAAK,MAAM;AACzD,QAAI,QAAQ,KAAK;AACjB,aAAS,QAAQ,KAAK;AACtB,QAAI,MAAM,KAAK,KAAK,GAAG;AACnB,cAAQ;AAAA,IACZ;AACA,YAAQ,KAAK,gBAAgB,KAAK;AAElC,SAAK,cAAc;AACnB,SAAK,SAAS,KAAK,cAAc,KAAK;AACtC,SAAK,aAAa,QAAQ,KAAK,gBAAgB,OAAO,KAAK;AAE3D,SAAK,aAAa;AAAA,MACd,IAAI,MAAM,SAAS,EAAE,SAAS,MAAM,UAAU,KAAK,CAAC;AAAA,IACxD;AACA,SAAK,gBAAgB;AACrB,SAAK,MAAM;AAAA,EACf;AAAA,EAEQ,UAAU,SAAS,GAAS;AAChC,SAAK,OAAO,IAAI,MAAM;AAAA,EAC1B;AAAA,EAEQ,UAAU,SAAS,GAAS;AAChC,SAAK,OAAO,KAAK,MAAM;AAAA,EAC3B;AAAA,EAEQ,cAAc,OAA4B;AAC9C,QAAI,KAAK,YAAa;AACtB,YAAQ,MAAM,MAAM;AAAA,MAChB,KAAK;AACD,cAAM,eAAe;AACrB,aAAK,UAAU,MAAM,WAAW,KAAK,eAAe,CAAC;AACrD,aAAK,SAAS;AACd;AAAA,MACJ,KAAK;AACD,cAAM,eAAe;AACrB,aAAK,UAAU,MAAM,WAAW,KAAK,eAAe,CAAC;AACrD,aAAK,SAAS;AACd;AAAA,IACR;AAAA,EACJ;AAAA,EAIU,SAAS,OAAyB;AACxC,UAAM,eAAe;AACrB,SAAK,eAAe;AACpB,UAAM,YAAY,MAAM,WAClB,MAAM,SAAS,KAAK,IAAI,MAAM,MAAM,IACpC,MAAM,SAAS,KAAK,IAAI,MAAM,MAAM;AAC1C,QAAI,cAAc,KAAK,CAAC,MAAM,SAAS,GAAG;AACtC,WAAK,OAAO,aAAa,MAAM,WAAW,KAAK,eAAe,EAAE;AAChE,mBAAa,KAAK,iBAAiB;AACnC,WAAK,oBAAoB,WAAW,MAAM;AACtC,aAAK,SAAS;AAAA,MAClB,GAAG,kBAAkB;AAAA,IACzB;AACA,SAAK,eAAe;AAAA,EACxB;AAAA,EAEmB,UAAgB;AAC/B,UAAM,QAAQ;AACd,SAAK,iBAAiB,KAAK;AAC3B,SAAK,kBAAkB,CAAC,KAAK,YAAY;AACzC,SAAK,iBAAiB,SAAS,KAAK,UAAU,EAAE,SAAS,MAAM,CAAC;AAAA,EACpE;AAAA,EAEmB,OAAO,QAA0B;AAChD,UAAM,OAAO,MAAM;AACnB,SAAK,kBAAkB,CAAC,KAAK,YAAY;AACzC,SAAK,oBAAoB,SAAS,KAAK,QAAQ;AAAA,EACnD;AAAA,EAEQ,gBAAsB;AAC1B,SAAK,UAAU,CAAC,KAAK,YAAY;AACjC,SAAK,kBAAkB,CAAC,KAAK,YAAY;AAAA,EAC7C;AAAA,EAEQ,iBAAuB;AAC3B,SAAK,UAAU,CAAC,KAAK,YAAY;AACjC,SAAK,kBAAkB,CAAC,KAAK,YAAY;AAAA,EAC7C;AAAA,EAKmB,eAAqB;AACpC,UAAM,QAAQ,KAAK,qBAAqB,KAAK,UAAU;AACvD,QAAI,KAAK,kBAAkB;AACvB,WAAK,mBAAmB;AACxB,WAAK,qBAAqB;AAC1B,UAAI,MAAM,KAAK,GAAG;AACd,aAAK,gBAAgB;AACrB;AAAA,MACJ;AAAA,IACJ;AACA,SAAK,SAAS,KAAK;AACnB,SAAK,aAAa,QAAQ,KAAK;AAAA,EACnC;AAAA,EAEU,yBAA+B;AACrC,SAAK,cAAc;AAAA,EACvB;AAAA,EAEU,uBAA6B;AACnC,SAAK,cAAc;AACnB,0BAAsB,MAAM;AACxB,WAAK,aAAa;AAAA,QACd,IAAI,MAAM,SAAS;AAAA,UACf,UAAU;AAAA,UACV,SAAS;AAAA,QACb,CAAC;AAAA,MACL;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EAImB,gCAAsC;AACrD,SAAK,iCAAiC;AACtC,SAAK,eAAe,KAAK,MAAM;AAC3B,4BAAsB,MAAM;AACxB,aAAK,iCAAiC;AAAA,MAC1C,CAAC;AAAA,IACL,CAAC;AAAA,EACL;AAAA,EAEmB,YAAY,OAAoB;AA3bvD;AA4bQ,QAAI,KAAK,aAAa;AAClB,YAAM,gBAAgB;AACtB;AAAA,IACJ;AACA,QAAI,KAAK,eAAe;AACpB,WAAK,mBAAmB;AACxB,WAAK,qBAAqB,KAAK;AAC/B,WAAK,aAAa,QAAQ,KAAK,aAAa,MAAM;AAAA,QAC9C;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AACA,UAAM,EAAE,OAAO,eAAe,eAAe,IAAI,KAAK;AACtD,UAAM,QAAQ,cACT,MAAM,EAAE,EACR,IAAI,CAAC,SAAS,yBAAyB,IAAI,KAAK,IAAI,EACpD,KAAK,EAAE;AACZ,QAAI,KAAK,aAAa,qBAAqB,KAAK,GAAG;AAE/C,WAAK,qBAAoB,UAAK,sBAAL,YAA0B,KAAK;AACxD,YAAM,gBAAgB,KAAK,qBAAqB,KAAK;AACrD,UAAI,CAAC,SAAS,KAAK,oBAAoB;AACnC,aAAK,gBAAgB;AACrB,aAAK,SAAS,KAAK;AAAA,MACvB,OAAO;AACH,aAAK,gBAAgB;AACrB,aAAK,SAAS,KAAK,cAAc,aAAa;AAAA,MAClD;AACA,WAAK,iBAAiB;AACtB,WAAK,aAAa,QAAQ;AAC1B,WAAK,aAAa,kBAAkB,gBAAgB,cAAc;AAClE;AAAA,IACJ,OAAO;AACH,WAAK,aAAa,QAAQ,KAAK,gBACzB,2BACA,KAAK;AAAA,IACf;AACA,UAAM,gBAAgB,MAAM;AAC5B,UAAM,iBAAiB,KAAK,eAAe;AAC3C,UAAM,mBACD,kBAAkB,kBAClB,gBAAgB;AACrB,SAAK,aAAa,kBAAkB,iBAAiB,eAAe;AAAA,EACxE;AAAA,EAEQ,gBAAgB,WAA2B;AAC/C,QAAI,QAAQ;AACZ,QAAI,OAAO,KAAK,QAAQ,aAAa;AACjC,cAAQ,KAAK,IAAI,KAAK,KAAK,KAAK;AAAA,IACpC;AACA,QAAI,OAAO,KAAK,QAAQ,aAAa;AACjC,cAAQ,KAAK,IAAI,KAAK,KAAK,KAAK;AAAA,IACpC;AACA,WAAO;AAAA,EACX;AAAA,EAEQ,cAAc,OAAuB;AACzC,YAAQ,KAAK,gBAAgB,KAAK;AAClC,UAAM,iBAAiB,QAAQ,IAAI,KAAK;AACxC,aAAS;AAGT,QAAI,KAAK,MAAM;AACX,YAAM,MAAM,OAAO,KAAK,QAAQ,cAAc,KAAK,MAAM;AACzD,YAAM,aAAa;AAAA,QACf,KAAK,eAAe,QAAQ,QAAQ,OAAO,KAAK,IAAI;AAAA,MACxD;AACA,YAAM,cAAc,eAAe;AACnC,UAAI,CAAC,aAAa;AACd,cAAM,YAAY,KAAK,MAAM,aAAa,KAAK,IAAI;AACnD,YAAI,cAAc,GAAG;AACjB,mBAAS,KAAK,OAAO;AAAA,QACzB,OAAO;AACH,mBAAS;AAAA,QACb;AAAA,MACJ;AACA,UAAI,OAAO,KAAK,QAAQ,aAAa;AACjC,eAAO,QAAQ,KAAK,KAAK;AACrB,mBAAS,KAAK;AAAA,QAClB;AAAA,MACJ;AACA,cAAQ,WAAW,KAAK,eAAe,OAAO,KAAK,CAAC;AAAA,IACxD;AACA,aAAS;AACT,WAAO;AAAA,EACX;AAAA,EAEA,IAAuB,eAAuB;AAC1C,UAAM,qBAAqB,KAAK,UAAU,KAAK;AAC/C,WAAO,KAAK,gBAAgB,qBAAqB,KAAK;AAAA,EAC1D;AAAA,EAEU,4BAAkC;AACxC,SAAK,mBAAmB;AACxB,SAAK,gBAAgB;AAAA,EACzB;AAAA,EAEA,IAAc,kBAAmC;AAC7C,QAAI,CAAC,KAAK,oBAAoB,CAAC,KAAK,yBAAyB;AACzD,YAAM;AAAA,QACF;AAAA,QACA;AAAA;AAAA,QAEA;AAAA,QACA,GAAG;AAAA,MACP,IAAI,KAAK;AACT,UAAI,UAAU,QAAQ;AAClB,QAAC,oBAAiD,QAAQ;AAAA,MAC9D;AACA,WAAK,0BAA0B,IAAI;AAAA,QAC/B,KAAK,iBAAiB;AAAA,QACtB;AAAA,MACJ;AACA,UAAI;AACA,aAAK,mBAAmB,IAAI;AAAA,UACxB,KAAK,iBAAiB;AAAA,UACtB,KAAK;AAAA,QACT;AACA,aAAK,cAAc;AACnB,aAAK,iBAAiB,OAAO,CAAC;AAAA,MAClC,SAAS,OAAO;AACZ,YAAI,UAAU,QAAQ;AAClB,eAAK,cAAc;AAAA,QACvB;AACA,aAAK,mBAAmB,KAAK;AAAA,MACjC;AAAA,IACJ;AACA,WAAO,KAAK,UACN,KAAK,0BACL,KAAK;AAAA,EACf;AAAA,EAEU,2BAAiC;AACvC,SAAK,kBAAkB;AAAA,EAC3B;AAAA,EACA,IAAc,iBAAkC;AAC5C,QAAI,CAAC,KAAK,iBAAiB;AACvB,YAAM,qBAAqB,KAAK,OAC1B,KAAK,QAAQ,KAAK,MAAM,KAAK,IAAI,IAC7B,KAAK,KAAK,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,SACnC,IACJ;AACN,WAAK,kBAAkB,IAAI,gBAAgB,MAAM;AAAA,QAC7C,aAAa;AAAA,QACb,uBAAuB;AAAA,MAC3B,CAAC;AAAA,IACL;AAEA,WAAO,KAAK;AAAA,EAChB;AAAA,EAIA,IAAc,eAA6B;AACvC,QAAI,CAAC,KAAK,iBAAiB,CAAC,KAAK,sBAAsB;AACnD,YAAM;AAAA,QACF;AAAA,QACA;AAAA;AAAA,QAEA;AAAA,QACA,GAAG;AAAA,MACP,IAAI,KAAK;AACT,UAAI,UAAU,QAAQ;AAClB,QAAC,oBAAiD,QAAQ;AAAA,MAC9D;AACA,WAAK,uBAAuB,IAAI;AAAA,QAC5B,KAAK,iBAAiB;AAAA,QACtB;AAAA,MACJ;AACA,UAAI;AACA,aAAK,gBAAgB,IAAI;AAAA,UACrB,KAAK,iBAAiB;AAAA,UACtB,KAAK;AAAA,QACT;AACA,aAAK,cAAc;AACnB,aAAK,cAAc,MAAM,GAAG;AAAA,MAChC,SAAS,OAAO;AACZ,YAAI,UAAU,QAAQ;AAClB,eAAK,cAAc;AAAA,QACvB;AACA,aAAK,gBAAgB,KAAK;AAAA,MAC9B;AAAA,IACJ;AACA,WAAO,KAAK,UAAU,KAAK,uBAAuB,KAAK;AAAA,EAC3D;AAAA,EASmB,cAA8B;AAC7C,SAAK,eAAe;AACpB,WAAO;AAAA,cACD,MAAM,YAAY,CAAC;AAAA,cACnB,KAAK,cACD,UACA;AAAA;AAAA;AAAA,qCAGmB,KAAK,aAAa;AAAA,sCACjB,KAAK,cAAc;AAAA,4BAC7B,kBAAkB;AAAA,MAChB,OAAO,CAAC,eAAe,KAAK,iBAAiB;AAAA,MAC7C,cAAc;AAAA,QACV;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACJ;AAAA,QACA,KAAK;AAAA,MACT;AAAA,MACA,KAAK;AAAA,QACD;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,QACJ;AAAA,QACA,KAAK;AAAA,MACT;AAAA,IACJ,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iDAMqB,KAAK,UAAU;AAAA,sCAC1B,cAAc,KAAK,YAAY;AAAA,qCAChC,KAAK,IAAI;AAAA;AAAA,yCAEL,KAAK,OAAO;AAAA,0CACX,KAAK,YACjB,KAAK,YACJ,OAAO,KAAK,QAAQ,eACjB,KAAK,UAAU,KAAK,GAAI;AAAA,uCACnB,KAAK,KAAK;AAAA;AAAA,gCAEjB,YAAY,KAAK,IAAI,EAAE,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iDAMX,KAAK,UAAU;AAAA,sCAC1B,cAAc,KAAK,YAAY;AAAA,qCAChC,KAAK,IAAI;AAAA;AAAA,yCAEL,KAAK,OAAO;AAAA,0CACX,KAAK,YACjB,KAAK,YACJ,OAAO,KAAK,QAAQ,eACjB,KAAK,UAAU,KAAK,GAAI;AAAA,uCACnB,KAAK,KAAK;AAAA;AAAA,gCAEjB,YAAY,KAAK,IAAI,EAAE,MAAM,CAAC;AAAA;AAAA;AAAA,mBAG3C;AAAA;AAAA,EAEf;AAAA,EAEmB,OAAO,SAA+B;AACrD,QAAI,QAAQ,IAAI,eAAe,KAAK,QAAQ,IAAI,kBAAkB,GAAG;AACjE,WAAK,0BAA0B;AAAA,IACnC;AACA,QAAI,QAAQ,IAAI,OAAO,KAAK,QAAQ,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG;AAClE,YAAM,QAAQ,KAAK,aAAa;AAAA,QAC5B,KAAK,eAAe,QAAQ,KAAK,aAAa,EAAE;AAAA,MACpD;AACA,WAAK,QAAQ;AAAA,IACjB;AACA,QAAI,QAAQ,IAAI,MAAM,GAAG;AACrB,WAAK,yBAAyB;AAAA,IAClC;AACA,UAAM,OAAO,OAAO;AAAA,EACxB;AAAA,EAEgB,WAAW,SAA+B;AACtD,SAAK,YAAY;AACjB,QAAI,QAAQ,IAAI,6BAA6B,GAAG;AAC5C,WAAK,0BAA0B;AAAA,IACnC;AAAA,EACJ;AAAA,EAImB,aAAa,SAA+B;AAC3D,UAAM,aAAa,OAAO;AAC1B,SAAK,iBAAiB,WAAW,KAAK,aAAa;AACnD,SAAK,iBAAiB,oBAAoB,KAAK,sBAAsB;AACrE,SAAK,iBAAiB,kBAAkB,KAAK,oBAAoB;AAAA,EACrE;AAAA,EAEmB,QAAQ,SAAqC;AAC5D,QAAI,QAAQ,IAAI,KAAK,KAAK,QAAQ,IAAI,eAAe,GAAG;AACpD,UAAI,YAAY;AAChB,YAAM,cAAc,OAAO,KAAK,QAAQ,eAAe,KAAK,MAAM;AAClE,YAAM,EAAE,sBAAsB,IAC1B,KAAK,gBAAgB,gBAAgB;AACzC,YAAM,cAAc,wBAAwB;AAE5C,UAAI,SAAS,GAAG;AAIZ,YAAI,aAAa;AACb,sBAAY;AAAA,QAChB,WAAW,aAAa;AACpB,sBAAY;AAAA,QAChB;AAAA,MACJ,WAAW,UAAU,GAAG;AAGpB,YAAI,aAAa;AACb,sBAAY;AAAA,QAChB,WAAW,aAAa;AACpB,sBAAY;AAAA,QAChB;AAAA,MACJ;AACA,WAAK,aAAa,YAAY;AAAA,IAClC;AACA,QACI,QAAQ,IAAI,SAAS,KACrB,KAAK,WACL,CAAC,KAAK,kCACN,CAAC,CAAC,KAAK,cAAc,MACvB;AAEE,WAAK,kBAAkB,GAAG,KAAK,aAAa,MAAM;AAAA,IACtD;AAAA,EACJ;AACJ;AAtqBY;AAAA,EADP,MAAM,UAAU;AAAA,GALR,YAMD;AAGQ;AAAA,EADf,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GARjC,YASO;AAaT;AAAA,EADN,SAAS,EAAE,MAAM,QAAQ,WAAW,iBAAiB,CAAC;AAAA,GArB9C,YAsBF;AAMA;AAAA,EADN,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM,WAAW,eAAe,CAAC;AAAA,GA3B5D,YA4BF;AAGA;AAAA,EADN,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GA9BjC,YA+BF;AAGA;AAAA,EADN,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM,WAAW,mBAAmB,CAAC;AAAA,GAjChE,YAkCF;AAGA;AAAA,EADN,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GApCjB,YAqCF;AAGA;AAAA,EADN,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAvCjB,YAwCF;AASA;AAAA,EADN,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAhDjB,YAiDF;AAKA;AAAA,EADN,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM,WAAW,gBAAgB,CAAC;AAAA,GArD5D,YAsDF;AAGa;AAAA,EADnB,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAxDjB,YAyDW;",
6
6
  "names": ["event"]
7
7
  }
@@ -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.hasRecentlyReceivedPointerDown=!1;this.applyFocusElementLabel=e=>{this.appliedLabel=e};this.isComposing=!1}static get styles(){return[...super.styles,N,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(e){super.onBlur(e),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}))})}handleInputElementPointerdown(){this.hasRecentlyReceivedPointerDown=!0,this.updateComplete.then(()=>{requestAnimationFrame(()=>{this.hasRecentlyReceivedPointerDown=!1})})}handleInput(e){var c;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=(c=this.lastCommitedValue)!=null?c: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,m=(i||r)-(r-u);this.inputElement.setSelectionRange(m,m)}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=parseFloat(this.valueFormatter.format((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;e=parseFloat(this.valueFormatter.format(e))}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 p(this.languageResolver.language,s);try{this._numberFormatter=new p(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}clearValueFormatterCache(){this._valueFormatter=void 0}get valueFormatter(){if(!this._valueFormatter){const e=this.step&&this.step!=Math.floor(this.step)?this.step.toString().split(".")[1].length:0;this._valueFormatter=new p(this.languageResolver.language,{maximumFractionDigits:e,useGrouping:!1})}return this._valueFormatter}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`
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.hasRecentlyReceivedPointerDown=!1;this.applyFocusElementLabel=e=>{this.appliedLabel=e};this.isComposing=!1}static get styles(){return[...super.styles,N,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=this.numberFormatter.format(i),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(e){super.onBlur(e),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}))})}handleInputElementPointerdown(){this.hasRecentlyReceivedPointerDown=!0,this.updateComplete.then(()=>{requestAnimationFrame(()=>{this.hasRecentlyReceivedPointerDown=!1})})}handleInput(e){var c;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=(c=this.lastCommitedValue)!=null?c: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,m=(i||r)-(r-u);this.inputElement.setSelectionRange(m,m)}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=parseFloat(this.valueFormatter.format((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;e=parseFloat(this.valueFormatter.format(e))}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 p(this.languageResolver.language,s);try{this._numberFormatter=new p(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}clearValueFormatterCache(){this._valueFormatter=void 0}get valueFormatter(){if(!this._valueFormatter){const e=this.step&&this.step!=Math.floor(this.step)?this.step.toString().split(".")[1].length:0;this._valueFormatter=new p("en",{useGrouping:!1,maximumFractionDigits:e})}return this._valueFormatter}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?F:h`
20
20
  <span
@@ -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 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(_event: FocusEvent): void {\n super.onBlur(_event);\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 private hasRecentlyReceivedPointerDown = false;\n\n protected override handleInputElementPointerdown(): void {\n this.hasRecentlyReceivedPointerDown = true;\n this.updateComplete.then(() => {\n requestAnimationFrame(() => {\n this.hasRecentlyReceivedPointerDown = false;\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 = parseFloat(\n this.valueFormatter.format((value - min) % this.step)\n );\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 value = parseFloat(this.valueFormatter.format(value));\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 protected clearValueFormatterCache(): void {\n this._valueFormatter = undefined;\n }\n protected get valueFormatter(): NumberFormatter {\n if (!this._valueFormatter) {\n const digitsAfterDecimal = this.step\n ? this.step != Math.floor(this.step)\n ? this.step.toString().split('.')[1].length\n : 0\n : 0;\n this._valueFormatter = new NumberFormatter(\n this.languageResolver.language,\n {\n maximumFractionDigits: digitsAfterDecimal,\n useGrouping: false,\n }\n );\n }\n\n return this._valueFormatter;\n }\n private _numberFormatter?: NumberFormatter;\n private _numberFormatterFocused?: NumberFormatter;\n private _valueFormatter?: NumberFormatter;\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 if (changes.has('step')) {\n this.clearValueFormatterCache();\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 if (\n changes.has('focused') &&\n this.focused &&\n !this.hasRecentlyReceivedPointerDown &&\n !!this.formatOptions.unit\n ) {\n // Normalize keyboard focus entry between unit and non-unit bearing Number Fields\n this.setSelectionRange(0, this.displayValue.length);\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 = this.numberFormatter.format(value);\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(_event: FocusEvent): void {\n super.onBlur(_event);\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 private hasRecentlyReceivedPointerDown = false;\n\n protected override handleInputElementPointerdown(): void {\n this.hasRecentlyReceivedPointerDown = true;\n this.updateComplete.then(() => {\n requestAnimationFrame(() => {\n this.hasRecentlyReceivedPointerDown = false;\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 = parseFloat(\n this.valueFormatter.format((value - min) % this.step)\n );\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 value = parseFloat(this.valueFormatter.format(value));\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 protected clearValueFormatterCache(): void {\n this._valueFormatter = undefined;\n }\n protected get valueFormatter(): NumberFormatter {\n if (!this._valueFormatter) {\n const digitsAfterDecimal = this.step\n ? this.step != Math.floor(this.step)\n ? this.step.toString().split('.')[1].length\n : 0\n : 0;\n this._valueFormatter = new NumberFormatter('en', {\n useGrouping: false,\n maximumFractionDigits: digitsAfterDecimal,\n });\n }\n\n return this._valueFormatter;\n }\n private _numberFormatter?: NumberFormatter;\n private _numberFormatterFocused?: NumberFormatter;\n private _valueFormatter?: NumberFormatter;\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 if (changes.has('step')) {\n this.clearValueFormatterCache();\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 if (\n changes.has('focused') &&\n this.focused &&\n !this.hasRecentlyReceivedPointerDown &&\n !!this.formatOptions.unit\n ) {\n // Normalize keyboard focus entry between unit and non-unit bearing Number Fields\n this.setSelectionRange(0, this.displayValue.length);\n }\n }\n}\n"],
5
+ "mappings": "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",
6
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", "_event", "originalValue", "selectionStart", "valueAsNumber", "currentLength", "previousLength", "nextSelectStart", "nextValue", "signMultiplier", "moduloStep", "indeterminateValue", "style", "unit", "unitDisplay", "formatOptionsNoUnit", "error", "digitsAfterDecimal", "changes", "inputMode", "hasNegative", "maximumFractionDigits", "hasDecimals", "__decorateClass"]
7
7
  }
@@ -12,6 +12,7 @@ import {
12
12
  currency,
13
13
  decimals,
14
14
  Default,
15
+ germanDecimals,
15
16
  indeterminate,
16
17
  percents,
17
18
  pixels,
@@ -115,6 +116,23 @@ describe("NumberField", () => {
115
116
  expect(el.valueAsString).to.equal("5");
116
117
  expect(el.focusElement.value).to.equal("5");
117
118
  });
119
+ it("respects other locales", async () => {
120
+ const el = await getElFrom(
121
+ germanDecimals({
122
+ step: 0.01
123
+ })
124
+ );
125
+ el.value = 2.42;
126
+ await elementUpdated(el);
127
+ el.size = "xl";
128
+ expect(el.value).to.equal(2.42);
129
+ expect(el.formattedValue).to.equal("+2,42");
130
+ expect(el.focusElement.value).to.equal("+2,42");
131
+ await clickBySelector(el, ".step-up");
132
+ expect(el.value).to.equal(2.43);
133
+ expect(el.formattedValue).to.equal("+2,43");
134
+ expect(el.focusElement.value).to.equal("+2,43");
135
+ });
118
136
  it("supports both positive and negative decimal values", async () => {
119
137
  const el = await getElFrom(
120
138
  Default({
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["number-field.test.ts"],
4
- "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport { html } from '@spectrum-web-components/base';\nimport {\n aTimeout,\n elementUpdated,\n expect,\n nextFrame,\n oneEvent,\n} from '@open-wc/testing';\nimport { shouldPolyfill } from '@formatjs/intl-numberformat/should-polyfill.js';\n\nimport {\n currency,\n decimals,\n Default,\n indeterminate,\n percents,\n pixels,\n units,\n} from '../stories/number-field.stories.js';\nimport '@spectrum-web-components/number-field/sp-number-field.js';\nimport {\n CHANGE_DEBOUNCE_MS,\n FRAMES_PER_CHANGE,\n indeterminatePlaceholder,\n NumberField,\n} from '@spectrum-web-components/number-field';\nimport {\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 {\n fixture,\n testForLitDevWarnings,\n} from '../../../test/testing-helpers.js';\nimport { isMac } from '@spectrum-web-components/shared/src/platform.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 it('correctly handles max values greater than 1000 with step=1', async () => {\n const el = await getElFrom(\n Default({\n step: 1,\n min: 0,\n max: 200000,\n value: 999,\n })\n );\n\n await clickBySelector(el, '.step-up');\n\n expect(el.value).to.equal(1000);\n expect(el.valueAsString).to.equal('1000');\n expect(el.formattedValue).to.equal('1,000');\n expect(el.focusElement.value).to.equal('1,000');\n\n el.value = 15000;\n await elementUpdated(el);\n\n expect(el.value).to.equal(15000);\n expect(el.valueAsString).to.equal('15000');\n expect(el.formattedValue).to.equal('15,000');\n expect(el.focusElement.value).to.equal('15,000');\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\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('does not select all on click based `focus`', async function () {\n this.retries(0);\n const modifier = isMac() ? 'Meta' : 'Control';\n const el = await getElFrom(units({ value: 17 }));\n expect(el.value).to.equal(17);\n const rect = el.focusElement.getBoundingClientRect();\n await sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n rect.left + rect.width / 8,\n rect.top + rect.height / 2,\n ],\n },\n ],\n });\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await elementUpdated(el);\n expect(el.focused).to.be.true;\n await sendKeys({\n press: `${modifier}+KeyC`,\n });\n await nextFrame();\n await nextFrame();\n await elementUpdated(el);\n await sendKeys({\n press: 'ArrowRight',\n });\n await nextFrame();\n await nextFrame();\n await elementUpdated(el);\n await sendKeys({\n press: `${modifier}+KeyV`,\n });\n await nextFrame();\n await nextFrame();\n await elementUpdated(el);\n expect(el.value, 'copy/paste changed the value').to.equal(17);\n });\n it('selects all on `Tab` based `focus`', async function () {\n this.retries(0);\n const modifier = isMac() ? 'Meta' : 'Control';\n const el = await getElFrom(units({ value: 17 }));\n const input = document.createElement('input');\n el.insertAdjacentElement('beforebegin', input);\n input.focus();\n await sendKeys({\n press: 'Tab',\n });\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await elementUpdated(el);\n expect(el.focused).to.be.true;\n await sendKeys({\n press: `${modifier}+KeyC`,\n });\n await nextFrame();\n await nextFrame();\n await elementUpdated(el);\n await sendKeys({\n press: 'ArrowRight',\n });\n await nextFrame();\n await nextFrame();\n await elementUpdated(el);\n await sendKeys({\n press: `${modifier}+KeyV`,\n });\n await nextFrame();\n await nextFrame();\n await elementUpdated(el);\n expect(el.value, 'copy/paste did not change the value').to.equal(\n 1717\n );\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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",
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport { html } from '@spectrum-web-components/base';\nimport {\n aTimeout,\n elementUpdated,\n expect,\n nextFrame,\n oneEvent,\n} from '@open-wc/testing';\nimport { shouldPolyfill } from '@formatjs/intl-numberformat/should-polyfill.js';\n\nimport {\n currency,\n decimals,\n Default,\n germanDecimals,\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 {\n fixture,\n testForLitDevWarnings,\n} from '../../../test/testing-helpers.js';\nimport { isMac } from '@spectrum-web-components/shared/src/platform.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 it('respects other locales', async () => {\n const el = await getElFrom(\n germanDecimals({\n step: 0.01,\n })\n );\n el.value = 2.42;\n await elementUpdated(el);\n el.size = 'xl';\n expect(el.value).to.equal(2.42);\n expect(el.formattedValue).to.equal('+2,42');\n expect(el.focusElement.value).to.equal('+2,42');\n\n await clickBySelector(el, '.step-up');\n\n expect(el.value).to.equal(2.43);\n expect(el.formattedValue).to.equal('+2,43');\n expect(el.focusElement.value).to.equal('+2,43');\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 it('correctly handles max values greater than 1000 with step=1', async () => {\n const el = await getElFrom(\n Default({\n step: 1,\n min: 0,\n max: 200000,\n value: 999,\n })\n );\n\n await clickBySelector(el, '.step-up');\n\n expect(el.value).to.equal(1000);\n expect(el.valueAsString).to.equal('1000');\n expect(el.formattedValue).to.equal('1,000');\n expect(el.focusElement.value).to.equal('1,000');\n\n el.value = 15000;\n await elementUpdated(el);\n\n expect(el.value).to.equal(15000);\n expect(el.valueAsString).to.equal('15000');\n expect(el.formattedValue).to.equal('15,000');\n expect(el.focusElement.value).to.equal('15,000');\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\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('does not select all on click based `focus`', async function () {\n this.retries(0);\n const modifier = isMac() ? 'Meta' : 'Control';\n const el = await getElFrom(units({ value: 17 }));\n expect(el.value).to.equal(17);\n const rect = el.focusElement.getBoundingClientRect();\n await sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n rect.left + rect.width / 8,\n rect.top + rect.height / 2,\n ],\n },\n ],\n });\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await elementUpdated(el);\n expect(el.focused).to.be.true;\n await sendKeys({\n press: `${modifier}+KeyC`,\n });\n await nextFrame();\n await nextFrame();\n await elementUpdated(el);\n await sendKeys({\n press: 'ArrowRight',\n });\n await nextFrame();\n await nextFrame();\n await elementUpdated(el);\n await sendKeys({\n press: `${modifier}+KeyV`,\n });\n await nextFrame();\n await nextFrame();\n await elementUpdated(el);\n expect(el.value, 'copy/paste changed the value').to.equal(17);\n });\n it('selects all on `Tab` based `focus`', async function () {\n this.retries(0);\n const modifier = isMac() ? 'Meta' : 'Control';\n const el = await getElFrom(units({ value: 17 }));\n const input = document.createElement('input');\n el.insertAdjacentElement('beforebegin', input);\n input.focus();\n await sendKeys({\n press: 'Tab',\n });\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await elementUpdated(el);\n expect(el.focused).to.be.true;\n await sendKeys({\n press: `${modifier}+KeyC`,\n });\n await nextFrame();\n await nextFrame();\n await elementUpdated(el);\n await sendKeys({\n press: 'ArrowRight',\n });\n await nextFrame();\n await nextFrame();\n await elementUpdated(el);\n await sendKeys({\n press: `${modifier}+KeyV`,\n });\n await nextFrame();\n await nextFrame();\n await elementUpdated(el);\n expect(el.value, 'copy/paste did not change the value').to.equal(\n 1717\n );\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
  }