@spectrum-web-components/number-field 1.0.1 → 1.0.3
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": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -58,14 +58,14 @@
|
|
|
58
58
|
"lit-html"
|
|
59
59
|
],
|
|
60
60
|
"dependencies": {
|
|
61
|
-
"@internationalized/number": "^3.
|
|
61
|
+
"@internationalized/number": "^3.6.0",
|
|
62
62
|
"@spectrum-web-components/base": "^1.0.1",
|
|
63
|
-
"@spectrum-web-components/icon": "^1.0.
|
|
64
|
-
"@spectrum-web-components/icons-ui": "^1.0.
|
|
65
|
-
"@spectrum-web-components/infield-button": "^1.0.
|
|
66
|
-
"@spectrum-web-components/reactive-controllers": "^1.0.
|
|
63
|
+
"@spectrum-web-components/icon": "^1.0.3",
|
|
64
|
+
"@spectrum-web-components/icons-ui": "^1.0.3",
|
|
65
|
+
"@spectrum-web-components/infield-button": "^1.0.3",
|
|
66
|
+
"@spectrum-web-components/reactive-controllers": "^1.0.3",
|
|
67
67
|
"@spectrum-web-components/shared": "^1.0.1",
|
|
68
|
-
"@spectrum-web-components/textfield": "^1.0.
|
|
68
|
+
"@spectrum-web-components/textfield": "^1.0.3"
|
|
69
69
|
},
|
|
70
70
|
"devDependencies": {
|
|
71
71
|
"@formatjs/intl-numberformat": "^8.3.5",
|
|
@@ -77,5 +77,5 @@
|
|
|
77
77
|
"./sp-*.js",
|
|
78
78
|
"./**/*.dev.js"
|
|
79
79
|
],
|
|
80
|
-
"gitHead": "
|
|
80
|
+
"gitHead": "f102bde98b9dca7ef2ad602dc31ce986560891ad"
|
|
81
81
|
}
|
package/src/NumberField.dev.js
CHANGED
|
@@ -566,7 +566,7 @@ export class NumberField extends TextfieldBase {
|
|
|
566
566
|
inline="end"
|
|
567
567
|
block="start"
|
|
568
568
|
class="button step-up"
|
|
569
|
-
aria-
|
|
569
|
+
aria-hidden="true"
|
|
570
570
|
label=${"Increase " + this.appliedLabel}
|
|
571
571
|
size=${this.size}
|
|
572
572
|
tabindex="-1"
|
|
@@ -580,7 +580,7 @@ export class NumberField extends TextfieldBase {
|
|
|
580
580
|
inline="end"
|
|
581
581
|
block="end"
|
|
582
582
|
class="button step-down"
|
|
583
|
-
aria-
|
|
583
|
+
aria-hidden="true"
|
|
584
584
|
label=${"Decrease " + this.appliedLabel}
|
|
585
585
|
size=${this.size}
|
|
586
586
|
tabindex="-1"
|
|
@@ -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 { NumberFormatter, NumberParser } from '@internationalized/number';\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 { streamingListener } from '@spectrum-web-components/base/src/streaming-listener.js';\nimport {\n LanguageResolutionController,\n languageResolverUpdatedSymbol,\n} from '@spectrum-web-components/reactive-controllers/src/LanguageResolution.js';\n\nimport chevronStyles from '@spectrum-web-components/icon/src/spectrum-icon-chevron.css.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/icons-ui/icons/sp-icon-chevron50.js';\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron75.js';\nimport '@spectrum-web-components/infield-button/sp-infield-button.js';\nimport {\n isAndroid,\n isIOS,\n isIPhone,\n} from '@spectrum-web-components/shared/src/platform.js';\nimport { TextfieldBase } from '@spectrum-web-components/textfield';\nimport chevronIconOverrides from '@spectrum-web-components/icon/src/icon-chevron-overrides.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 \u4E00: '1',\n \u4E8C: '2',\n \u4E09: '3',\n \u56DB: '4',\n \u4E94: '5',\n \u516D: '6',\n \u4E03: '7',\n \u516B: '8',\n \u4E5D: '9',\n \u96F6: '0',\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, chevronIconOverrides];\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 `<sp-number-field>` 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(newValue: number = this.value): void {\n // Capture previous value for accurate IME change detection\n const previousValue = this.lastCommitedValue;\n\n this.value = newValue;\n\n if (\n typeof previousValue === 'undefined' ||\n previousValue === this.value\n ) {\n // Do not announce when the value is unchanged.\n return;\n }\n\n this.lastCommitedValue = this.value;\n\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\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 decimalsChars = new Set(['.', ',']);\n private valueBeforeFocus: string = '';\n private isIntentDecimal: boolean = false;\n\n private convertValueToNumber(inputValue: string): number {\n // Normalize full-width characters to their ASCII equivalents\n let normalizedValue = inputValue\n .split('')\n .map((char) => remapMultiByteCharacters[char] || char)\n .join('');\n\n const separators = this.valueBeforeFocus\n .split('')\n .filter((char) => this.decimalsChars.has(char));\n const uniqueSeparators = new Set(separators);\n\n if (\n isIOS() &&\n this.inputElement.inputMode === 'decimal' &&\n normalizedValue !== this.valueBeforeFocus\n ) {\n const parts = this.numberFormatter.formatToParts(1000.1);\n\n const replacementDecimal = parts.find(\n (part) => part.type === 'decimal'\n )!.value;\n\n for (const separator of uniqueSeparators) {\n const isDecimalSeparator = separator === replacementDecimal;\n if (!isDecimalSeparator && !this.isIntentDecimal) {\n normalizedValue = normalizedValue.replace(\n new RegExp(separator, 'g'),\n ''\n );\n }\n }\n\n let hasReplacedDecimal = false;\n const valueChars = normalizedValue.split('');\n for (let index = valueChars.length - 1; index >= 0; index--) {\n const char = valueChars[index];\n if (this.decimalsChars.has(char)) {\n if (!hasReplacedDecimal) {\n valueChars[index] = replacementDecimal;\n hasReplacedDecimal = true;\n } else valueChars[index] = '';\n }\n }\n normalizedValue = valueChars.join('');\n }\n return this.numberParser.parse(normalizedValue);\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 this.valueBeforeFocus = this.inputElement.value;\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 this.isIntentDecimal = false;\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: InputEvent): void {\n if (this.isComposing) {\n // If user actually types a new character.\n if (event.data) {\n // Don't allow non-numeric characters even in composing mode.\n const partialValue = this.convertValueToNumber(event.data);\n\n if (Number.isNaN(partialValue)) {\n this.inputElement.value = this.indeterminate\n ? indeterminatePlaceholder\n : this._trackingValue;\n\n this.isComposing = false;\n }\n }\n\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 if (event.data && this.decimalsChars.has(event.data))\n this.isIntentDecimal = true;\n\n const { value: originalValue, selectionStart } = this.inputElement;\n const value = originalValue\n .split('')\n .map((char) => remapMultiByteCharacters[char] || char)\n .join('');\n\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 // Don't emit input event when the character is invalid.\n event.stopPropagation();\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 (\n changes.has('value') ||\n changes.has('max') ||\n changes.has('min') ||\n changes.has('step')\n ) {\n const value = this.numberParser.parse(\n this.formattedValue.replace(this._forcedUnit, '')\n );\n this.value = value;\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 (!this.inputElement || !this.isConnected) {\n // Prevent race conditions if inputElement is removed from DOM while a queued update is still running.\n return;\n }\n\n if (changes.has('min') || changes.has('formatOptions')) {\n const hasOnlyPositives =\n typeof this.min !== 'undefined' && this.min >= 0;\n\n const { maximumFractionDigits } =\n this.numberFormatter.resolvedOptions();\n const hasDecimals =\n maximumFractionDigits && maximumFractionDigits > 0;\n\n let inputMode = 'numeric';\n /* c8 ignore next 5 */\n // iPhone doesn't have a minus sign in either numeric or decimal.\n if (isIPhone() && !hasOnlyPositives) inputMode = 'text';\n else if (isIOS() && hasDecimals) inputMode = 'decimal';\n // Android numeric has both a decimal point and minus key. Decimal does not have a minus key.\n else if (isAndroid() && hasDecimals && hasOnlyPositives)\n inputMode = 'decimal';\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,SAAS,iBAAiB,oBAAoB;AAC9C;AAAA,EAEI;AAAA,EACA;AAAA,OAGG;AACP;AAAA,EACI;AAAA,EACA;AAAA,OACG;AACP,SAAS,yBAAyB;AAClC;AAAA,EACI;AAAA,EACA;AAAA,OACG;AAEP,OAAO,mBAAmB;AAC1B,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,SAAS,qBAAqB;AAC9B,OAAO,0BAA0B;AACjC,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;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AACP;AACA,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;AA2CzB,SAAQ,gBAAgB,oBAAI,IAAI,CAAC,KAAK,GAAG,CAAC;AAC1C,SAAQ,mBAA2B;AACnC,SAAQ,kBAA2B;AA6DnC,SAAQ,cAAc;AAItB,SAAQ,mBAAmB,IAAI,6BAA6B,IAAI;AA8JhE,SAAQ,mBAAmB;AAiC3B,SAAQ,iCAAiC;AA2NzC,kCAAyB,CAAC,UAAyB;AAC/C,WAAK,eAAe;AAAA,IACxB;AAuGA,SAAQ,cAAc;AAAA;AAAA,EA/rBtB,WAA2B,SAAyB;AAChD,WAAO,CAAC,GAAG,MAAM,QAAQ,QAAQ,eAAe,oBAAoB;AAAA,EACxE;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,WAAmB,KAAK,OAAa;AAElD,UAAM,gBAAgB,KAAK;AAE3B,SAAK,QAAQ;AAEb,QACI,OAAO,kBAAkB,eACzB,kBAAkB,KAAK,OACzB;AAEE;AAAA,IACJ;AAEA,SAAK,oBAAoB,KAAK;AAE9B,SAAK;AAAA,MACD,IAAI,MAAM,UAAU,EAAE,SAAS,MAAM,UAAU,KAAK,CAAC;AAAA,IACzD;AAAA,EACJ;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,EAMQ,qBAAqB,YAA4B;AAErD,QAAI,kBAAkB,WACjB,MAAM,EAAE,EACR,IAAI,CAAC,SAAS,yBAAyB,IAAI,KAAK,IAAI,EACpD,KAAK,EAAE;AAEZ,UAAM,aAAa,KAAK,iBACnB,MAAM,EAAE,EACR,OAAO,CAAC,SAAS,KAAK,cAAc,IAAI,IAAI,CAAC;AAClD,UAAM,mBAAmB,IAAI,IAAI,UAAU;AAE3C,QACI,MAAM,KACN,KAAK,aAAa,cAAc,aAChC,oBAAoB,KAAK,kBAC3B;AACE,YAAM,QAAQ,KAAK,gBAAgB,cAAc,MAAM;AAEvD,YAAM,qBAAqB,MAAM;AAAA,QAC7B,CAAC,SAAS,KAAK,SAAS;AAAA,MAC5B,EAAG;AAEH,iBAAW,aAAa,kBAAkB;AACtC,cAAM,qBAAqB,cAAc;AACzC,YAAI,CAAC,sBAAsB,CAAC,KAAK,iBAAiB;AAC9C,4BAAkB,gBAAgB;AAAA,YAC9B,IAAI,OAAO,WAAW,GAAG;AAAA,YACzB;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAEA,UAAI,qBAAqB;AACzB,YAAM,aAAa,gBAAgB,MAAM,EAAE;AAC3C,eAAS,QAAQ,WAAW,SAAS,GAAG,SAAS,GAAG,SAAS;AACzD,cAAM,OAAO,WAAW,KAAK;AAC7B,YAAI,KAAK,cAAc,IAAI,IAAI,GAAG;AAC9B,cAAI,CAAC,oBAAoB;AACrB,uBAAW,KAAK,IAAI;AACpB,iCAAqB;AAAA,UACzB,MAAO,YAAW,KAAK,IAAI;AAAA,QAC/B;AAAA,MACJ;AACA,wBAAkB,WAAW,KAAK,EAAE;AAAA,IACxC;AACA,WAAO,KAAK,aAAa,MAAM,eAAe;AAAA,EAClD;AAAA,EACA,IAAY,QAAgB;AAxRhC;AAyRQ,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;AAChE,SAAK,mBAAmB,KAAK,aAAa;AAAA,EAC9C;AAAA,EAEmB,OAAO,QAA0B;AAChD,UAAM,OAAO,MAAM;AACnB,SAAK,kBAAkB,CAAC,KAAK,YAAY;AACzC,SAAK,oBAAoB,SAAS,KAAK,QAAQ;AAC/C,SAAK,kBAAkB;AAAA,EAC3B;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,OAAyB;AAjf5D;AAkfQ,QAAI,KAAK,aAAa;AAElB,UAAI,MAAM,MAAM;AAEZ,cAAM,eAAe,KAAK,qBAAqB,MAAM,IAAI;AAEzD,YAAI,OAAO,MAAM,YAAY,GAAG;AAC5B,eAAK,aAAa,QAAQ,KAAK,gBACzB,2BACA,KAAK;AAEX,eAAK,cAAc;AAAA,QACvB;AAAA,MACJ;AAEA,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,QAAI,MAAM,QAAQ,KAAK,cAAc,IAAI,MAAM,IAAI;AAC/C,WAAK,kBAAkB;AAE3B,UAAM,EAAE,OAAO,eAAe,eAAe,IAAI,KAAK;AACtD,UAAM,QAAQ,cACT,MAAM,EAAE,EACR,IAAI,CAAC,SAAS,yBAAyB,IAAI,KAAK,IAAI,EACpD,KAAK,EAAE;AAEZ,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;AAGX,YAAM,gBAAgB;AAAA,IAC1B;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,QACI,QAAQ,IAAI,OAAO,KACnB,QAAQ,IAAI,KAAK,KACjB,QAAQ,IAAI,KAAK,KACjB,QAAQ,IAAI,MAAM,GACpB;AACE,YAAM,QAAQ,KAAK,aAAa;AAAA,QAC5B,KAAK,eAAe,QAAQ,KAAK,aAAa,EAAE;AAAA,MACpD;AACA,WAAK,QAAQ;AACb,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,CAAC,KAAK,gBAAgB,CAAC,KAAK,aAAa;AAEzC;AAAA,IACJ;AAEA,QAAI,QAAQ,IAAI,KAAK,KAAK,QAAQ,IAAI,eAAe,GAAG;AACpD,YAAM,mBACF,OAAO,KAAK,QAAQ,eAAe,KAAK,OAAO;AAEnD,YAAM,EAAE,sBAAsB,IAC1B,KAAK,gBAAgB,gBAAgB;AACzC,YAAM,cACF,yBAAyB,wBAAwB;AAErD,UAAI,YAAY;AAGhB,UAAI,SAAS,KAAK,CAAC,iBAAkB,aAAY;AAAA,eACxC,MAAM,KAAK,YAAa,aAAY;AAAA,eAEpC,UAAU,KAAK,eAAe;AACnC,oBAAY;AAEhB,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;AAvuBY;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 { NumberFormatter, NumberParser } from '@internationalized/number';\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 { streamingListener } from '@spectrum-web-components/base/src/streaming-listener.js';\nimport {\n LanguageResolutionController,\n languageResolverUpdatedSymbol,\n} from '@spectrum-web-components/reactive-controllers/src/LanguageResolution.js';\n\nimport chevronStyles from '@spectrum-web-components/icon/src/spectrum-icon-chevron.css.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/icons-ui/icons/sp-icon-chevron50.js';\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron75.js';\nimport '@spectrum-web-components/infield-button/sp-infield-button.js';\nimport {\n isAndroid,\n isIOS,\n isIPhone,\n} from '@spectrum-web-components/shared/src/platform.js';\nimport { TextfieldBase } from '@spectrum-web-components/textfield';\nimport chevronIconOverrides from '@spectrum-web-components/icon/src/icon-chevron-overrides.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 \u4E00: '1',\n \u4E8C: '2',\n \u4E09: '3',\n \u56DB: '4',\n \u4E94: '5',\n \u516D: '6',\n \u4E03: '7',\n \u516B: '8',\n \u4E5D: '9',\n \u96F6: '0',\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, chevronIconOverrides];\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 `<sp-number-field>` 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(newValue: number = this.value): void {\n // Capture previous value for accurate IME change detection\n const previousValue = this.lastCommitedValue;\n\n this.value = newValue;\n\n if (\n typeof previousValue === 'undefined' ||\n previousValue === this.value\n ) {\n // Do not announce when the value is unchanged.\n return;\n }\n\n this.lastCommitedValue = this.value;\n\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\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 decimalsChars = new Set(['.', ',']);\n private valueBeforeFocus: string = '';\n private isIntentDecimal: boolean = false;\n\n private convertValueToNumber(inputValue: string): number {\n // Normalize full-width characters to their ASCII equivalents\n let normalizedValue = inputValue\n .split('')\n .map((char) => remapMultiByteCharacters[char] || char)\n .join('');\n\n const separators = this.valueBeforeFocus\n .split('')\n .filter((char) => this.decimalsChars.has(char));\n const uniqueSeparators = new Set(separators);\n\n if (\n isIOS() &&\n this.inputElement.inputMode === 'decimal' &&\n normalizedValue !== this.valueBeforeFocus\n ) {\n const parts = this.numberFormatter.formatToParts(1000.1);\n\n const replacementDecimal = parts.find(\n (part) => part.type === 'decimal'\n )!.value;\n\n for (const separator of uniqueSeparators) {\n const isDecimalSeparator = separator === replacementDecimal;\n if (!isDecimalSeparator && !this.isIntentDecimal) {\n normalizedValue = normalizedValue.replace(\n new RegExp(separator, 'g'),\n ''\n );\n }\n }\n\n let hasReplacedDecimal = false;\n const valueChars = normalizedValue.split('');\n for (let index = valueChars.length - 1; index >= 0; index--) {\n const char = valueChars[index];\n if (this.decimalsChars.has(char)) {\n if (!hasReplacedDecimal) {\n valueChars[index] = replacementDecimal;\n hasReplacedDecimal = true;\n } else valueChars[index] = '';\n }\n }\n normalizedValue = valueChars.join('');\n }\n return this.numberParser.parse(normalizedValue);\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 this.valueBeforeFocus = this.inputElement.value;\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 this.isIntentDecimal = false;\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: InputEvent): void {\n if (this.isComposing) {\n // If user actually types a new character.\n if (event.data) {\n // Don't allow non-numeric characters even in composing mode.\n const partialValue = this.convertValueToNumber(event.data);\n\n if (Number.isNaN(partialValue)) {\n this.inputElement.value = this.indeterminate\n ? indeterminatePlaceholder\n : this._trackingValue;\n\n this.isComposing = false;\n }\n }\n\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 if (event.data && this.decimalsChars.has(event.data))\n this.isIntentDecimal = true;\n\n const { value: originalValue, selectionStart } = this.inputElement;\n const value = originalValue\n .split('')\n .map((char) => remapMultiByteCharacters[char] || char)\n .join('');\n\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 // Don't emit input event when the character is invalid.\n event.stopPropagation();\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-hidden=\"true\"\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-hidden=\"true\"\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 (\n changes.has('value') ||\n changes.has('max') ||\n changes.has('min') ||\n changes.has('step')\n ) {\n const value = this.numberParser.parse(\n this.formattedValue.replace(this._forcedUnit, '')\n );\n this.value = value;\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 (!this.inputElement || !this.isConnected) {\n // Prevent race conditions if inputElement is removed from DOM while a queued update is still running.\n return;\n }\n\n if (changes.has('min') || changes.has('formatOptions')) {\n const hasOnlyPositives =\n typeof this.min !== 'undefined' && this.min >= 0;\n\n const { maximumFractionDigits } =\n this.numberFormatter.resolvedOptions();\n const hasDecimals =\n maximumFractionDigits && maximumFractionDigits > 0;\n\n let inputMode = 'numeric';\n /* c8 ignore next 5 */\n // iPhone doesn't have a minus sign in either numeric or decimal.\n if (isIPhone() && !hasOnlyPositives) inputMode = 'text';\n else if (isIOS() && hasDecimals) inputMode = 'decimal';\n // Android numeric has both a decimal point and minus key. Decimal does not have a minus key.\n else if (isAndroid() && hasDecimals && hasOnlyPositives)\n inputMode = 'decimal';\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": ["event"]
|
|
7
7
|
}
|
package/src/NumberField.js
CHANGED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
inline="end"
|
|
28
28
|
block="start"
|
|
29
29
|
class="button step-up"
|
|
30
|
-
aria-
|
|
30
|
+
aria-hidden="true"
|
|
31
31
|
label=${"Increase "+this.appliedLabel}
|
|
32
32
|
size=${this.size}
|
|
33
33
|
tabindex="-1"
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
inline="end"
|
|
42
42
|
block="end"
|
|
43
43
|
class="button step-down"
|
|
44
|
-
aria-
|
|
44
|
+
aria-hidden="true"
|
|
45
45
|
label=${"Decrease "+this.appliedLabel}
|
|
46
46
|
size=${this.size}
|
|
47
47
|
tabindex="-1"
|
package/src/NumberField.js.map
CHANGED
|
@@ -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 { NumberFormatter, NumberParser } from '@internationalized/number';\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 { streamingListener } from '@spectrum-web-components/base/src/streaming-listener.js';\nimport {\n LanguageResolutionController,\n languageResolverUpdatedSymbol,\n} from '@spectrum-web-components/reactive-controllers/src/LanguageResolution.js';\n\nimport chevronStyles from '@spectrum-web-components/icon/src/spectrum-icon-chevron.css.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/icons-ui/icons/sp-icon-chevron50.js';\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron75.js';\nimport '@spectrum-web-components/infield-button/sp-infield-button.js';\nimport {\n isAndroid,\n isIOS,\n isIPhone,\n} from '@spectrum-web-components/shared/src/platform.js';\nimport { TextfieldBase } from '@spectrum-web-components/textfield';\nimport chevronIconOverrides from '@spectrum-web-components/icon/src/icon-chevron-overrides.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 \u4E00: '1',\n \u4E8C: '2',\n \u4E09: '3',\n \u56DB: '4',\n \u4E94: '5',\n \u516D: '6',\n \u4E03: '7',\n \u516B: '8',\n \u4E5D: '9',\n \u96F6: '0',\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, chevronIconOverrides];\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 `<sp-number-field>` 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(newValue: number = this.value): void {\n // Capture previous value for accurate IME change detection\n const previousValue = this.lastCommitedValue;\n\n this.value = newValue;\n\n if (\n typeof previousValue === 'undefined' ||\n previousValue === this.value\n ) {\n // Do not announce when the value is unchanged.\n return;\n }\n\n this.lastCommitedValue = this.value;\n\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\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 decimalsChars = new Set(['.', ',']);\n private valueBeforeFocus: string = '';\n private isIntentDecimal: boolean = false;\n\n private convertValueToNumber(inputValue: string): number {\n // Normalize full-width characters to their ASCII equivalents\n let normalizedValue = inputValue\n .split('')\n .map((char) => remapMultiByteCharacters[char] || char)\n .join('');\n\n const separators = this.valueBeforeFocus\n .split('')\n .filter((char) => this.decimalsChars.has(char));\n const uniqueSeparators = new Set(separators);\n\n if (\n isIOS() &&\n this.inputElement.inputMode === 'decimal' &&\n normalizedValue !== this.valueBeforeFocus\n ) {\n const parts = this.numberFormatter.formatToParts(1000.1);\n\n const replacementDecimal = parts.find(\n (part) => part.type === 'decimal'\n )!.value;\n\n for (const separator of uniqueSeparators) {\n const isDecimalSeparator = separator === replacementDecimal;\n if (!isDecimalSeparator && !this.isIntentDecimal) {\n normalizedValue = normalizedValue.replace(\n new RegExp(separator, 'g'),\n ''\n );\n }\n }\n\n let hasReplacedDecimal = false;\n const valueChars = normalizedValue.split('');\n for (let index = valueChars.length - 1; index >= 0; index--) {\n const char = valueChars[index];\n if (this.decimalsChars.has(char)) {\n if (!hasReplacedDecimal) {\n valueChars[index] = replacementDecimal;\n hasReplacedDecimal = true;\n } else valueChars[index] = '';\n }\n }\n normalizedValue = valueChars.join('');\n }\n return this.numberParser.parse(normalizedValue);\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 this.valueBeforeFocus = this.inputElement.value;\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 this.isIntentDecimal = false;\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: InputEvent): void {\n if (this.isComposing) {\n // If user actually types a new character.\n if (event.data) {\n // Don't allow non-numeric characters even in composing mode.\n const partialValue = this.convertValueToNumber(event.data);\n\n if (Number.isNaN(partialValue)) {\n this.inputElement.value = this.indeterminate\n ? indeterminatePlaceholder\n : this._trackingValue;\n\n this.isComposing = false;\n }\n }\n\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 if (event.data && this.decimalsChars.has(event.data))\n this.isIntentDecimal = true;\n\n const { value: originalValue, selectionStart } = this.inputElement;\n const value = originalValue\n .split('')\n .map((char) => remapMultiByteCharacters[char] || char)\n .join('');\n\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 // Don't emit input event when the character is invalid.\n event.stopPropagation();\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 (\n changes.has('value') ||\n changes.has('max') ||\n changes.has('min') ||\n changes.has('step')\n ) {\n const value = this.numberParser.parse(\n this.formattedValue.replace(this._forcedUnit, '')\n );\n this.value = value;\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 (!this.inputElement || !this.isConnected) {\n // Prevent race conditions if inputElement is removed from DOM while a queued update is still running.\n return;\n }\n\n if (changes.has('min') || changes.has('formatOptions')) {\n const hasOnlyPositives =\n typeof this.min !== 'undefined' && this.min >= 0;\n\n const { maximumFractionDigits } =\n this.numberFormatter.resolvedOptions();\n const hasDecimals =\n maximumFractionDigits && maximumFractionDigits > 0;\n\n let inputMode = 'numeric';\n /* c8 ignore next 5 */\n // iPhone doesn't have a minus sign in either numeric or decimal.\n if (isIPhone() && !hasOnlyPositives) inputMode = 'text';\n else if (isIOS() && hasDecimals) inputMode = 'decimal';\n // Android numeric has both a decimal point and minus key. Decimal does not have a minus key.\n else if (isAndroid() && hasDecimals && hasOnlyPositives)\n inputMode = 'decimal';\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 { NumberFormatter, NumberParser } from '@internationalized/number';\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 { streamingListener } from '@spectrum-web-components/base/src/streaming-listener.js';\nimport {\n LanguageResolutionController,\n languageResolverUpdatedSymbol,\n} from '@spectrum-web-components/reactive-controllers/src/LanguageResolution.js';\n\nimport chevronStyles from '@spectrum-web-components/icon/src/spectrum-icon-chevron.css.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/icons-ui/icons/sp-icon-chevron50.js';\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron75.js';\nimport '@spectrum-web-components/infield-button/sp-infield-button.js';\nimport {\n isAndroid,\n isIOS,\n isIPhone,\n} from '@spectrum-web-components/shared/src/platform.js';\nimport { TextfieldBase } from '@spectrum-web-components/textfield';\nimport chevronIconOverrides from '@spectrum-web-components/icon/src/icon-chevron-overrides.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 \u4E00: '1',\n \u4E8C: '2',\n \u4E09: '3',\n \u56DB: '4',\n \u4E94: '5',\n \u516D: '6',\n \u4E03: '7',\n \u516B: '8',\n \u4E5D: '9',\n \u96F6: '0',\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, chevronIconOverrides];\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 `<sp-number-field>` 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(newValue: number = this.value): void {\n // Capture previous value for accurate IME change detection\n const previousValue = this.lastCommitedValue;\n\n this.value = newValue;\n\n if (\n typeof previousValue === 'undefined' ||\n previousValue === this.value\n ) {\n // Do not announce when the value is unchanged.\n return;\n }\n\n this.lastCommitedValue = this.value;\n\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\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 decimalsChars = new Set(['.', ',']);\n private valueBeforeFocus: string = '';\n private isIntentDecimal: boolean = false;\n\n private convertValueToNumber(inputValue: string): number {\n // Normalize full-width characters to their ASCII equivalents\n let normalizedValue = inputValue\n .split('')\n .map((char) => remapMultiByteCharacters[char] || char)\n .join('');\n\n const separators = this.valueBeforeFocus\n .split('')\n .filter((char) => this.decimalsChars.has(char));\n const uniqueSeparators = new Set(separators);\n\n if (\n isIOS() &&\n this.inputElement.inputMode === 'decimal' &&\n normalizedValue !== this.valueBeforeFocus\n ) {\n const parts = this.numberFormatter.formatToParts(1000.1);\n\n const replacementDecimal = parts.find(\n (part) => part.type === 'decimal'\n )!.value;\n\n for (const separator of uniqueSeparators) {\n const isDecimalSeparator = separator === replacementDecimal;\n if (!isDecimalSeparator && !this.isIntentDecimal) {\n normalizedValue = normalizedValue.replace(\n new RegExp(separator, 'g'),\n ''\n );\n }\n }\n\n let hasReplacedDecimal = false;\n const valueChars = normalizedValue.split('');\n for (let index = valueChars.length - 1; index >= 0; index--) {\n const char = valueChars[index];\n if (this.decimalsChars.has(char)) {\n if (!hasReplacedDecimal) {\n valueChars[index] = replacementDecimal;\n hasReplacedDecimal = true;\n } else valueChars[index] = '';\n }\n }\n normalizedValue = valueChars.join('');\n }\n return this.numberParser.parse(normalizedValue);\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 this.valueBeforeFocus = this.inputElement.value;\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 this.isIntentDecimal = false;\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: InputEvent): void {\n if (this.isComposing) {\n // If user actually types a new character.\n if (event.data) {\n // Don't allow non-numeric characters even in composing mode.\n const partialValue = this.convertValueToNumber(event.data);\n\n if (Number.isNaN(partialValue)) {\n this.inputElement.value = this.indeterminate\n ? indeterminatePlaceholder\n : this._trackingValue;\n\n this.isComposing = false;\n }\n }\n\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 if (event.data && this.decimalsChars.has(event.data))\n this.isIntentDecimal = true;\n\n const { value: originalValue, selectionStart } = this.inputElement;\n const value = originalValue\n .split('')\n .map((char) => remapMultiByteCharacters[char] || char)\n .join('');\n\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 // Don't emit input event when the character is invalid.\n event.stopPropagation();\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-hidden=\"true\"\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-hidden=\"true\"\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 (\n changes.has('value') ||\n changes.has('max') ||\n changes.has('min') ||\n changes.has('step')\n ) {\n const value = this.numberParser.parse(\n this.formattedValue.replace(this._forcedUnit, '')\n );\n this.value = value;\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 (!this.inputElement || !this.isConnected) {\n // Prevent race conditions if inputElement is removed from DOM while a queued update is still running.\n return;\n }\n\n if (changes.has('min') || changes.has('formatOptions')) {\n const hasOnlyPositives =\n typeof this.min !== 'undefined' && this.min >= 0;\n\n const { maximumFractionDigits } =\n this.numberFormatter.resolvedOptions();\n const hasDecimals =\n maximumFractionDigits && maximumFractionDigits > 0;\n\n let inputMode = 'numeric';\n /* c8 ignore next 5 */\n // iPhone doesn't have a minus sign in either numeric or decimal.\n if (isIPhone() && !hasOnlyPositives) inputMode = 'text';\n else if (isIOS() && hasDecimals) inputMode = 'decimal';\n // Android numeric has both a decimal point and minus key. Decimal does not have a minus key.\n else if (isAndroid() && hasDecimals && hasOnlyPositives)\n inputMode = 'decimal';\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": ["NumberFormatter", "NumberParser", "html", "nothing", "property", "query", "streamingListener", "LanguageResolutionController", "languageResolverUpdatedSymbol", "chevronStyles", "isAndroid", "isIOS", "isIPhone", "TextfieldBase", "chevronIconOverrides", "styles", "chevronIcon", "dir", "value", "rawValue", "oldValue", "newValue", "previousValue", "inputValue", "normalizedValue", "char", "separators", "uniqueSeparators", "replacementDecimal", "part", "separator", "hasReplacedDecimal", "valueChars", "index", "_a", "event", "stepUpRect", "stepDownRect", "count", "min", "factor", "direction", "_event", "partialValue", "originalValue", "selectionStart", "valueAsNumber", "currentLength", "previousLength", "nextSelectStart", "nextValue", "signMultiplier", "moduloStep", "indeterminateValue", "style", "unit", "unitDisplay", "formatOptionsNoUnit", "error", "digitsAfterDecimal", "changes", "hasOnlyPositives", "maximumFractionDigits", "hasDecimals", "inputMode", "__decorateClass"]
|
|
7
7
|
}
|
|
@@ -1706,7 +1706,7 @@ describe("NumberField", () => {
|
|
|
1706
1706
|
});
|
|
1707
1707
|
});
|
|
1708
1708
|
describe("accessibility model", () => {
|
|
1709
|
-
it("buttons
|
|
1709
|
+
it("increment and decrement buttons cannot receive keyboard focus", async () => {
|
|
1710
1710
|
await fixture(html`
|
|
1711
1711
|
<div>
|
|
1712
1712
|
${Default({
|
|
@@ -1725,14 +1725,14 @@ describe("NumberField", () => {
|
|
|
1725
1725
|
(node) => node.name === "Increase Enter a number"
|
|
1726
1726
|
),
|
|
1727
1727
|
"`name` is the label text"
|
|
1728
|
-
).to.
|
|
1728
|
+
).to.be.null;
|
|
1729
1729
|
expect(
|
|
1730
1730
|
findAccessibilityNode(
|
|
1731
1731
|
snapshot,
|
|
1732
1732
|
(node) => node.name === "Decrease Enter a number"
|
|
1733
1733
|
),
|
|
1734
1734
|
"`name` is the label text"
|
|
1735
|
-
).to.
|
|
1735
|
+
).to.be.null;
|
|
1736
1736
|
});
|
|
1737
1737
|
});
|
|
1738
1738
|
});
|
|
@@ -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 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 xit('correctly interprets decimal point on iPhone', async () => {\n // setUserAgent is not currently supported by Playwright\n await setUserAgent(\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1'\n );\n const el = await getElFrom(decimals({ value: 1234 }));\n expect(el.formattedValue).to.equal('1,234');\n\n el.focus();\n await sendKeys({ press: 'Backspace' });\n el.blur();\n expect(el.formattedValue).to.equal('123');\n\n el.focus();\n await sendKeys({ type: '45' });\n el.blur();\n expect(el.formattedValue).to.equal('12,345');\n\n el.focus();\n await sendKeys({ type: ',6' });\n el.blur();\n expect(el.formattedValue).to.equal('12,345.6');\n\n el.focus();\n await sendKeys({ type: ',7' });\n el.blur();\n expect(el.formattedValue).to.equal('123,456.7');\n\n el.focus();\n await sendKeys({ press: 'Backspace' });\n await sendKeys({ press: 'Backspace' });\n el.blur();\n expect(el.formattedValue).to.equal('123,456');\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('handles IME input correctly and dispatches change event', async () => {\n el.focus();\n el.dispatchEvent(new CompositionEvent('compositionstart'));\n // input multibyte characters\n await sendKeys({ type: '\uFF11\uFF12\uFF13' });\n await elementUpdated(el);\n el.dispatchEvent(new CompositionEvent('compositionend'));\n await elementUpdated(el);\n await sendKeys({ press: 'Enter' });\n expect(el.value).to.equal(50123);\n expect(changeSpy.callCount).to.equal(1);\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 iPad', async () => {\n // setUserAgent is not currently supported by Playwright\n await setUserAgent(\n 'Mozilla/5.0 (iPad; CPU OS 17_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Mobile15E148 Safari/604.1'\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.min = undefined;\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 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.min = undefined;\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.min = undefined;\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 el.formatOptions = {\n minimumFractionDigits: 1,\n maximumFractionDigits: 2,\n };\n el.min = -10;\n await elementUpdated(el);\n expect(el.focusElement.inputMode).to.equal('numeric');\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 xit('correctly interprets decimal point on iPhone', async () => {\n // setUserAgent is not currently supported by Playwright\n await setUserAgent(\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1'\n );\n const el = await getElFrom(decimals({ value: 1234 }));\n expect(el.formattedValue).to.equal('1,234');\n\n el.focus();\n await sendKeys({ press: 'Backspace' });\n el.blur();\n expect(el.formattedValue).to.equal('123');\n\n el.focus();\n await sendKeys({ type: '45' });\n el.blur();\n expect(el.formattedValue).to.equal('12,345');\n\n el.focus();\n await sendKeys({ type: ',6' });\n el.blur();\n expect(el.formattedValue).to.equal('12,345.6');\n\n el.focus();\n await sendKeys({ type: ',7' });\n el.blur();\n expect(el.formattedValue).to.equal('123,456.7');\n\n el.focus();\n await sendKeys({ press: 'Backspace' });\n await sendKeys({ press: 'Backspace' });\n el.blur();\n expect(el.formattedValue).to.equal('123,456');\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('handles IME input correctly and dispatches change event', async () => {\n el.focus();\n el.dispatchEvent(new CompositionEvent('compositionstart'));\n // input multibyte characters\n await sendKeys({ type: '\uFF11\uFF12\uFF13' });\n await elementUpdated(el);\n el.dispatchEvent(new CompositionEvent('compositionend'));\n await elementUpdated(el);\n await sendKeys({ press: 'Enter' });\n expect(el.value).to.equal(50123);\n expect(changeSpy.callCount).to.equal(1);\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 iPad', async () => {\n // setUserAgent is not currently supported by Playwright\n await setUserAgent(\n 'Mozilla/5.0 (iPad; CPU OS 17_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Mobile15E148 Safari/604.1'\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.min = undefined;\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 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.min = undefined;\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.min = undefined;\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 el.formatOptions = {\n minimumFractionDigits: 1,\n maximumFractionDigits: 2,\n };\n el.min = -10;\n await elementUpdated(el);\n expect(el.focusElement.inputMode).to.equal('numeric');\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('increment and decrement buttons cannot receive keyboard focus', 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.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.be.null;\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|