@spectrum-web-components/number-field 1.12.0-testing.20260223092154 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -341,6 +341,38 @@ The number field works with the following interactions:
341
341
 
342
342
  The input value incrementally increases or decreases by the value of the `step` attribute. The <kbd>shift</kbd> key can be used to apply steps at 10 times (or the value of the `step-modifier` attribute times) their normal rate.
343
343
 
344
+ #### Truncated value tooltip
345
+
346
+ Like [`<sp-textfield>`](../textfield), number field will show a tooltip with the full formatted value when the single-line input content is visually truncated. This supports long formatted content (for example currency values) in constrained widths and supports accessibility when users adjust text spacing ([WCAG 1.4.12](https://www.w3.org/WAI/WCAG21/Understanding/text-spacing.html)).
347
+
348
+ Stepper visibility affects available inline space, so truncation may occur at different widths when `hide-stepper` is toggled. The full value is available on hover and keyboard focus so screen reader users can access it via the control's value. As with textfield, the tooltip defaults to placement `bottom`; use the `tooltip-placement` attribute with a valid placement value (e.g. `top`, `right`, `left`). Placement may flip when space is limited so the tooltip stays in view.
349
+
350
+ ```html
351
+ <sp-field-label for="truncated-show-stepper">Show stepper</sp-field-label>
352
+ <sp-number-field
353
+ id="truncated-show-stepper"
354
+ value="123456"
355
+ format-options='{
356
+ "style": "currency",
357
+ "currency": "EUR",
358
+ "currencyDisplay": "code",
359
+ "currencySign": "accounting"
360
+ }'
361
+ ></sp-number-field>
362
+ <sp-field-label for="truncated-hide-stepper">Hide stepper</sp-field-label>
363
+ <sp-number-field
364
+ id="truncated-hide-stepper"
365
+ value="123456"
366
+ hide-stepper
367
+ format-options='{
368
+ "style": "currency",
369
+ "currency": "EUR",
370
+ "currencyDisplay": "code",
371
+ "currencySign": "accounting"
372
+ }'
373
+ ></sp-number-field>
374
+ ```
375
+
344
376
  #### Default value
345
377
 
346
378
  The `<sp-number-field>` component doesn't manage a default value by itself. This means that consumers can set the value of the number-field as an empty string by clearing the input. If we want the number-field to reset to a `default-value` when the user clears the input, we can listen for the `change` event on the number-field component and set its value to the desired `default-value` if the input is empty.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spectrum-web-components/number-field",
3
- "version": "1.12.0-testing.20260223092154",
3
+ "version": "1.12.0",
4
4
  "description": "Web component implementation of a Spectrum design NumberField",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Adobe",
@@ -55,13 +55,13 @@
55
55
  "types": "./src/index.d.ts",
56
56
  "dependencies": {
57
57
  "@internationalized/number": "3.6.5",
58
- "@spectrum-web-components/base": "1.12.0-testing.20260223092154",
59
- "@spectrum-web-components/icon": "1.12.0-testing.20260223092154",
60
- "@spectrum-web-components/icons-ui": "1.12.0-testing.20260223092154",
61
- "@spectrum-web-components/infield-button": "1.12.0-testing.20260223092154",
62
- "@spectrum-web-components/reactive-controllers": "1.12.0-testing.20260223092154",
63
- "@spectrum-web-components/shared": "1.12.0-testing.20260223092154",
64
- "@spectrum-web-components/textfield": "1.12.0-testing.20260223092154"
58
+ "@spectrum-web-components/base": "1.12.0",
59
+ "@spectrum-web-components/icon": "1.12.0",
60
+ "@spectrum-web-components/icons-ui": "1.12.0",
61
+ "@spectrum-web-components/infield-button": "1.12.0",
62
+ "@spectrum-web-components/reactive-controllers": "1.12.0",
63
+ "@spectrum-web-components/shared": "1.12.0",
64
+ "@spectrum-web-components/textfield": "1.12.0"
65
65
  },
66
66
  "devDependencies": {
67
67
  "@formatjs/intl-numberformat": "8.15.4"
@@ -364,7 +364,7 @@ export class NumberField extends TextfieldBase {
364
364
  });
365
365
  }
366
366
  handleInput(event) {
367
- var _a;
367
+ var _a, _b, _c;
368
368
  if (this.isComposing) {
369
369
  if (event.data) {
370
370
  const partialValue = this.convertValueToNumber(event.data);
@@ -402,6 +402,19 @@ export class NumberField extends TextfieldBase {
402
402
  this._trackingValue = value;
403
403
  this.inputElement.value = value;
404
404
  this.inputElement.setSelectionRange(selectionStart, selectionStart);
405
+ const justBecameTruncated = this.truncatedValueTooltipController.refresh();
406
+ if (justBecameTruncated) {
407
+ this.updateComplete.then(() => {
408
+ var _a2, _b2;
409
+ this.truncatedValueTooltipController.syncTooltipText(
410
+ (_b2 = (_a2 = this.inputElement) == null ? void 0 : _a2.value) != null ? _b2 : this.displayValue
411
+ );
412
+ });
413
+ } else {
414
+ this.truncatedValueTooltipController.syncTooltipText(
415
+ (_c = (_b = this.inputElement) == null ? void 0 : _b.value) != null ? _c : this.displayValue
416
+ );
417
+ }
405
418
  return;
406
419
  } else {
407
420
  this.inputElement.value = this.indeterminate ? indeterminatePlaceholder : this._trackingValue;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["NumberField.ts"],
4
- "sourcesContent": ["/**\n * Copyright 2026 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport { NumberFormatter, NumberParser } from '@internationalized/number';\n\nimport {\n CSSResultArray,\n html,\n nothing,\n PropertyValues,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport { streamingListener } from '@spectrum-web-components/base/src/streaming-listener.js';\nimport chevronStyles from '@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js';\nimport {\n LanguageResolutionController,\n languageResolverUpdatedSymbol,\n} from '@spectrum-web-components/reactive-controllers/src/LanguageResolution.js';\nimport { isAndroid, isIOS, isIPhone } from '@spectrum-web-components/shared';\nimport { TextfieldBase } from '@spectrum-web-components/textfield';\n\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';\n\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];\n }\n\n @query('.buttons')\n private buttons!: HTMLDivElement;\n\n @property({ type: Boolean, reflect: true })\n public override focused = false;\n\n _forcedUnit = '';\n\n /**\n * An `&lt;sp-number-field&gt;` element will process its numeric value with\n * `new Intl.NumberFormat(this.resolvedLanguage, this.formatOptions).format(this.valueAsNumber)`\n * in order to prepare it for visual delivery in the input. In order to customize this\n * processing supply your own `Intl.NumberFormatOptions` object here.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat\n */\n @property({ type: Object, attribute: 'format-options' })\n public formatOptions: Intl.NumberFormatOptions = {};\n\n /**\n * Whether the stepper UI is hidden or not.\n */\n @property({ type: Boolean, reflect: true, attribute: 'hide-stepper' })\n public hideStepper = false;\n\n @property({ type: Boolean, reflect: true })\n public indeterminate = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'keyboard-focused' })\n public keyboardFocused = false;\n\n @property({ type: Number })\n public max?: number;\n\n @property({ type: Number })\n public min?: number;\n\n /**\n * The distance by which to alter the value of the element when taking a \"step\".\n *\n * When `this.formatOptions.style === 'percentage'` the default step will be\n * set to 0.01 unless otherwise supplied to the element.\n */\n @property({ type: Number })\n public step?: number;\n\n public managedInput = false;\n\n @property({ type: Number, reflect: true, attribute: 'step-modifier' })\n public stepModifier = 10;\n\n @property({ type: Number })\n public override set value(rawValue: number) {\n const value = this.validateInput(rawValue);\n if (value === this.value) {\n return;\n }\n this.lastCommitedValue = value;\n const oldValue = this._value;\n this._value = value;\n this.requestUpdate('value', oldValue);\n }\n\n public override get value(): number {\n return this._value;\n }\n\n private get inputValue(): string {\n return this.indeterminate ? this.formattedValue : 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 (typeof previousValue === 'undefined' || previousValue === this.value) {\n // Do not announce when the value is unchanged.\n return;\n }\n\n this.lastCommitedValue = this.value;\n\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }));\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)) {\n return '';\n }\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 {\n valueChars[index] = '';\n }\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 const inputEvent = new Event('input', {\n bubbles: true,\n composed: true,\n });\n this.inputElement.readOnly = true;\n this.inputElement.dispatchEvent(inputEvent);\n this.indeterminate = false;\n this.focus();\n this.inputElement.readOnly = false;\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) {\n return;\n }\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\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) - (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 (window.__swc.DEBUG) {\n window.__swc.warn(\n this,\n `Number Formatter Error: Format options include style === 'unit' but unit is not supported: ${error instanceof Error ? error.message : 'Unknown error'}`,\n 'https://opensource.adobe.com/spectrum-web-components/components/number-field/',\n { level: 'low' }\n );\n }\n if (style === 'unit') {\n this._forcedUnit = unit as string;\n }\n this._numberFormatter = this._numberFormatterFocused;\n }\n }\n return this.focused ? this._numberFormatterFocused : 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 (window.__swc.DEBUG) {\n window.__swc.warn(\n this,\n `Number Parser Error: Format options include style === 'unit' but unit is not supported: ${error instanceof Error ? error.message : 'Unknown error'}`,\n 'https://opensource.adobe.com/spectrum-web-components/components/number-field/',\n { level: 'low' }\n );\n }\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 ['pointerup', 'pointercancel', 'pointerleave'],\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' && 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' && 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 = typeof this.min !== 'undefined' && this.min >= 0;\n\n const { maximumFractionDigits } = this.numberFormatter.resolvedOptions();\n const hasDecimals = 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) {\n inputMode = 'text';\n } else if (isIOS() && hasDecimals) {\n inputMode = 'decimal';\n }\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\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
- "names": ["event"]
4
+ "sourcesContent": ["/**\n * Copyright 2026 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport { NumberFormatter, NumberParser } from '@internationalized/number';\n\nimport {\n CSSResultArray,\n html,\n nothing,\n PropertyValues,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport { streamingListener } from '@spectrum-web-components/base/src/streaming-listener.js';\nimport chevronStyles from '@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js';\nimport {\n LanguageResolutionController,\n languageResolverUpdatedSymbol,\n} from '@spectrum-web-components/reactive-controllers/src/LanguageResolution.js';\nimport { isAndroid, isIOS, isIPhone } from '@spectrum-web-components/shared';\nimport { TextfieldBase } from '@spectrum-web-components/textfield';\n\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';\n\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];\n }\n\n @query('.buttons')\n private buttons!: HTMLDivElement;\n\n @property({ type: Boolean, reflect: true })\n public override focused = false;\n\n _forcedUnit = '';\n\n /**\n * An `&lt;sp-number-field&gt;` element will process its numeric value with\n * `new Intl.NumberFormat(this.resolvedLanguage, this.formatOptions).format(this.valueAsNumber)`\n * in order to prepare it for visual delivery in the input. In order to customize this\n * processing supply your own `Intl.NumberFormatOptions` object here.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat\n */\n @property({ type: Object, attribute: 'format-options' })\n public formatOptions: Intl.NumberFormatOptions = {};\n\n /**\n * Whether the stepper UI is hidden or not.\n */\n @property({ type: Boolean, reflect: true, attribute: 'hide-stepper' })\n public hideStepper = false;\n\n @property({ type: Boolean, reflect: true })\n public indeterminate = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'keyboard-focused' })\n public keyboardFocused = false;\n\n @property({ type: Number })\n public max?: number;\n\n @property({ type: Number })\n public min?: number;\n\n /**\n * The distance by which to alter the value of the element when taking a \"step\".\n *\n * When `this.formatOptions.style === 'percentage'` the default step will be\n * set to 0.01 unless otherwise supplied to the element.\n */\n @property({ type: Number })\n public step?: number;\n\n public managedInput = false;\n\n @property({ type: Number, reflect: true, attribute: 'step-modifier' })\n public stepModifier = 10;\n\n @property({ type: Number })\n public override set value(rawValue: number) {\n const value = this.validateInput(rawValue);\n if (value === this.value) {\n return;\n }\n this.lastCommitedValue = value;\n const oldValue = this._value;\n this._value = value;\n this.requestUpdate('value', oldValue);\n }\n\n public override get value(): number {\n return this._value;\n }\n\n private get inputValue(): string {\n return this.indeterminate ? this.formattedValue : 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 (typeof previousValue === 'undefined' || previousValue === this.value) {\n // Do not announce when the value is unchanged.\n return;\n }\n\n this.lastCommitedValue = this.value;\n\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }));\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)) {\n return '';\n }\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 {\n valueChars[index] = '';\n }\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 const inputEvent = new Event('input', {\n bubbles: true,\n composed: true,\n });\n this.inputElement.readOnly = true;\n this.inputElement.dispatchEvent(inputEvent);\n this.indeterminate = false;\n this.focus();\n this.inputElement.readOnly = false;\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) {\n return;\n }\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\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 // Controller uses an intentional multi-phase update (see TruncatedValueTooltipController):\n // refresh() may queue a second render so the tooltip appears; we sync tooltip text after\n // updateComplete so the tooltip DOM exists.\n const justBecameTruncated =\n this.truncatedValueTooltipController.refresh();\n if (justBecameTruncated) {\n this.updateComplete.then(() => {\n this.truncatedValueTooltipController.syncTooltipText(\n this.inputElement?.value ?? this.displayValue\n );\n });\n } else {\n this.truncatedValueTooltipController.syncTooltipText(\n this.inputElement?.value ?? this.displayValue\n );\n }\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) - (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 (window.__swc.DEBUG) {\n window.__swc.warn(\n this,\n `Number Formatter Error: Format options include style === 'unit' but unit is not supported: ${error instanceof Error ? error.message : 'Unknown error'}`,\n 'https://opensource.adobe.com/spectrum-web-components/components/number-field/',\n { level: 'low' }\n );\n }\n if (style === 'unit') {\n this._forcedUnit = unit as string;\n }\n this._numberFormatter = this._numberFormatterFocused;\n }\n }\n return this.focused ? this._numberFormatterFocused : 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 (window.__swc.DEBUG) {\n window.__swc.warn(\n this,\n `Number Parser Error: Format options include style === 'unit' but unit is not supported: ${error instanceof Error ? error.message : 'Unknown error'}`,\n 'https://opensource.adobe.com/spectrum-web-components/components/number-field/',\n { level: 'low' }\n );\n }\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 ['pointerup', 'pointercancel', 'pointerleave'],\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' && 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' && 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 = typeof this.min !== 'undefined' && this.min >= 0;\n\n const { maximumFractionDigits } = this.numberFormatter.resolvedOptions();\n const hasDecimals = 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) {\n inputMode = 'text';\n } else if (isIOS() && hasDecimals) {\n inputMode = 'decimal';\n }\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\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
+ "names": ["event", "_a", "_b"]
7
7
  }
@@ -1,27 +1,27 @@
1
- "use strict";var y=Object.defineProperty;var F=Object.getOwnPropertyDescriptor;var a=(o,p,e,t)=>{for(var s=t>1?void 0:t?F(p,e):p,i=o.length-1,r;i>=0;i--)(r=o[i])&&(s=(t?r(p,e,s):r(s))||s);return t&&s&&y(p,e,s),s};import{NumberFormatter as c,NumberParser as v}from"@internationalized/number";import{html as h,nothing as E}from"@spectrum-web-components/base";import{property as u,query as C}from"@spectrum-web-components/base/src/decorators.js";import{streamingListener as _}from"@spectrum-web-components/base/src/streaming-listener.js";import w from"@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js";import{LanguageResolutionController as P,languageResolverUpdatedSymbol as V}from"@spectrum-web-components/reactive-controllers/src/LanguageResolution.js";import{isAndroid as N,isIOS as b,isIPhone as I}from"@spectrum-web-components/shared";import{TextfieldBase as x}from"@spectrum-web-components/textfield";import"@spectrum-web-components/icons-ui/icons/sp-icon-chevron100.js";import"@spectrum-web-components/icons-ui/icons/sp-icon-chevron200.js";import"@spectrum-web-components/icons-ui/icons/sp-icon-chevron50.js";import"@spectrum-web-components/icons-ui/icons/sp-icon-chevron75.js";import"@spectrum-web-components/infield-button/sp-infield-button.js";import S from"./number-field.css.js";export const FRAMES_PER_CHANGE=5,CHANGE_DEBOUNCE_MS=100,indeterminatePlaceholder="-",remapMultiByteCharacters={"\uFF11":"1","\uFF12":"2","\uFF13":"3","\uFF14":"4","\uFF15":"5","\uFF16":"6","\uFF17":"7","\uFF18":"8","\uFF19":"9","\uFF10":"0","\u3001":",","\uFF0C":",","\u3002":".","\uFF0E":".","\uFF05":"%","\uFF0B":"+",\u30FC:"-",\u4E00:"1",\u4E8C:"2",\u4E09:"3",\u56DB:"4",\u4E94:"5",\u516D:"6",\u4E03:"7",\u516B:"8",\u4E5D:"9",\u96F6:"0"};const g={s:o=>h`
1
+ "use strict";var E=Object.defineProperty;var _=Object.getOwnPropertyDescriptor;var a=(o,d,e,t)=>{for(var s=t>1?void 0:t?_(d,e):d,i=o.length-1,r;i>=0;i--)(r=o[i])&&(s=(t?r(d,e,s):r(s))||s);return t&&s&&E(d,e,s),s};import{NumberFormatter as v,NumberParser as y}from"@internationalized/number";import{html as p,nothing as w}from"@spectrum-web-components/base";import{property as u,query as P}from"@spectrum-web-components/base/src/decorators.js";import{streamingListener as V}from"@spectrum-web-components/base/src/streaming-listener.js";import N from"@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js";import{LanguageResolutionController as I,languageResolverUpdatedSymbol as x}from"@spectrum-web-components/reactive-controllers/src/LanguageResolution.js";import{isAndroid as S,isIOS as C,isIPhone as R}from"@spectrum-web-components/shared";import{TextfieldBase as D}from"@spectrum-web-components/textfield";import"@spectrum-web-components/icons-ui/icons/sp-icon-chevron100.js";import"@spectrum-web-components/icons-ui/icons/sp-icon-chevron200.js";import"@spectrum-web-components/icons-ui/icons/sp-icon-chevron50.js";import"@spectrum-web-components/icons-ui/icons/sp-icon-chevron75.js";import"@spectrum-web-components/infield-button/sp-infield-button.js";import U from"./number-field.css.js";export const FRAMES_PER_CHANGE=5,CHANGE_DEBOUNCE_MS=100,indeterminatePlaceholder="-",remapMultiByteCharacters={"\uFF11":"1","\uFF12":"2","\uFF13":"3","\uFF14":"4","\uFF15":"5","\uFF16":"6","\uFF17":"7","\uFF18":"8","\uFF19":"9","\uFF10":"0","\u3001":",","\uFF0C":",","\u3002":".","\uFF0E":".","\uFF05":"%","\uFF0B":"+",\u30FC:"-",\u4E00:"1",\u4E8C:"2",\u4E09:"3",\u56DB:"4",\u4E94:"5",\u516D:"6",\u4E03:"7",\u516B:"8",\u4E5D:"9",\u96F6:"0"};const F={s:o=>p`
2
2
  <sp-icon-chevron50
3
3
  class="stepper-icon spectrum-UIIcon-Chevron${o}50"
4
4
  ></sp-icon-chevron50>
5
- `,m:o=>h`
5
+ `,m:o=>p`
6
6
  <sp-icon-chevron75
7
7
  class="stepper-icon spectrum-UIIcon-Chevron${o}75"
8
8
  ></sp-icon-chevron75>
9
- `,l:o=>h`
9
+ `,l:o=>p`
10
10
  <sp-icon-chevron100
11
11
  class="stepper-icon spectrum-UIIcon-Chevron${o}100"
12
12
  ></sp-icon-chevron100>
13
- `,xl:o=>h`
13
+ `,xl:o=>p`
14
14
  <sp-icon-chevron200
15
15
  class="stepper-icon spectrum-UIIcon-Chevron${o}200"
16
16
  ></sp-icon-chevron200>
17
- `};export class NumberField extends x{constructor(){super(...arguments);this.focused=!1;this._forcedUnit="";this.formatOptions={};this.hideStepper=!1;this.indeterminate=!1;this.keyboardFocused=!1;this.managedInput=!1;this.stepModifier=10;this._value=NaN;this._trackingValue="";this.decimalsChars=new Set([".",","]);this.valueBeforeFocus="";this.isIntentDecimal=!1;this.changeCount=0;this.languageResolver=new P(this);this.wasIndeterminate=!1;this.hasRecentlyReceivedPointerDown=!1;this.applyFocusElementLabel=e=>{this.appliedLabel=e};this.isComposing=!1}static get styles(){return[...super.styles,S,w]}set value(e){const t=this.validateInput(e);if(t===this.value)return;this.lastCommitedValue=t;const s=this._value;this._value=t,this.requestUpdate("value",s)}get value(){return this._value}get inputValue(){return this.indeterminate?this.formattedValue:this.inputElement.value}setValue(e=this.value){const t=this.lastCommitedValue;this.value=e,!(typeof t=="undefined"||t===this.value)&&(this.lastCommitedValue=this.value,this.dispatchEvent(new Event("change",{bubbles:!0,composed:!0})))}get valueAsString(){return this._value.toString()}set valueAsString(e){this.value=this.numberParser.parse(e)}get formattedValue(){return isNaN(this.value)?"":this.numberFormatter.format(this.value)+(this.focused?"":this._forcedUnit)}convertValueToNumber(e){let t=e.split("").map(r=>remapMultiByteCharacters[r]||r).join("");const s=this.valueBeforeFocus.split("").filter(r=>this.decimalsChars.has(r)),i=new Set(s);if(b()&&this.inputElement.inputMode==="decimal"&&t!==this.valueBeforeFocus){const d=this.numberFormatter.formatToParts(1000.1).find(n=>n.type==="decimal").value;for(const n of i)!(n===d)&&!this.isIntentDecimal&&(t=t.replace(new RegExp(n,"g"),""));let m=!1;const l=t.split("");for(let n=l.length-1;n>=0;n--){const f=l[n];this.decimalsChars.has(f)&&(m?l[n]="":(l[n]=d,m=!0))}t=l.join("")}return this.numberParser.parse(t)}get _step(){var e;return typeof this.step!="undefined"?this.step:((e=this.formatOptions)==null?void 0:e.style)==="percent"?.01:1}handlePointerdown(e){if(e.button!==0){e.preventDefault();return}this.managedInput=!0,this.buttons.setPointerCapture(e.pointerId);const t=this.buttons.children[0].getBoundingClientRect(),s=this.buttons.children[1].getBoundingClientRect();this.findChange=i=>{i.clientX>=t.x&&i.clientY>=t.y&&i.clientX<=t.x+t.width&&i.clientY<=t.y+t.height?this.change=r=>this.increment(r.shiftKey?this.stepModifier:1):i.clientX>=s.x&&i.clientY>=s.y&&i.clientX<=s.x+s.width&&i.clientY<=s.y+s.height&&(this.change=r=>this.decrement(r.shiftKey?this.stepModifier:1))},this.findChange(e),this.startChange(e)}startChange(e){this.changeCount=0,this.doChange(e),this.safty=setTimeout(()=>{this.doNextChange(e)},400)}doChange(e){this.change(e)}handlePointermove(e){this.findChange(e)}handlePointerup(e){this.buttons.releasePointerCapture(e.pointerId),cancelAnimationFrame(this.nextChange),clearTimeout(this.safty),this.managedInput=!1,this.setValue()}doNextChange(e){return this.changeCount+=1,this.changeCount%FRAMES_PER_CHANGE===0&&this.doChange(e),requestAnimationFrame(()=>{this.nextChange=this.doNextChange(e)})}stepBy(e){if(this.disabled||this.readonly)return;const t=typeof this.min!="undefined"?this.min:0;let s=this.value;s+=e*this._step,isNaN(this.value)&&(s=t),s=this.valueWithLimits(s),this.requestUpdate(),this._value=this.validateInput(s),this.inputElement.value=this.numberFormatter.format(s);const i=new Event("input",{bubbles:!0,composed:!0});this.inputElement.readOnly=!0,this.inputElement.dispatchEvent(i),this.indeterminate=!1,this.focus(),this.inputElement.readOnly=!1}increment(e=1){this.stepBy(1*e)}decrement(e=1){this.stepBy(-1*e)}handleKeydown(e){if(!this.isComposing)switch(e.code){case"ArrowUp":e.preventDefault(),this.increment(e.shiftKey?this.stepModifier:1),this.setValue();break;case"ArrowDown":e.preventDefault(),this.decrement(e.shiftKey?this.stepModifier:1),this.setValue();break}}onScroll(e){e.preventDefault(),this.managedInput=!0;const t=e.shiftKey?e.deltaX/Math.abs(e.deltaX):e.deltaY/Math.abs(e.deltaY);t!==0&&!isNaN(t)&&(this.stepBy(t*(e.shiftKey?this.stepModifier:1)),clearTimeout(this.queuedChangeEvent),this.queuedChangeEvent=setTimeout(()=>{this.setValue()},CHANGE_DEBOUNCE_MS)),this.managedInput=!1}onFocus(){super.onFocus(),this._trackingValue=this.inputValue,this.keyboardFocused=!this.readonly&&!0,this.addEventListener("wheel",this.onScroll,{passive:!1}),this.valueBeforeFocus=this.inputElement.value}onBlur(e){super.onBlur(e),this.keyboardFocused=!this.readonly&&!1,this.removeEventListener("wheel",this.onScroll),this.isIntentDecimal=!1}handleFocusin(){this.focused=!this.readonly&&!0,this.keyboardFocused=!this.readonly&&!0}handleFocusout(){this.focused=!this.readonly&&!1,this.keyboardFocused=!this.readonly&&!1}handleChange(){const e=this.convertValueToNumber(this.inputValue);if(this.wasIndeterminate&&(this.wasIndeterminate=!1,this.indeterminateValue=void 0,isNaN(e))){this.indeterminate=!0;return}this.setValue(e),this.inputElement.value=this.formattedValue}handleCompositionStart(){this.isComposing=!0}handleCompositionEnd(){this.isComposing=!1,requestAnimationFrame(()=>{this.inputElement.dispatchEvent(new Event("input",{composed:!0,bubbles:!0}))})}handleInputElementPointerdown(){this.hasRecentlyReceivedPointerDown=!0,this.updateComplete.then(()=>{requestAnimationFrame(()=>{this.hasRecentlyReceivedPointerDown=!1})})}handleInput(e){var l;if(this.isComposing){if(e.data){const n=this.convertValueToNumber(e.data);Number.isNaN(n)&&(this.inputElement.value=this.indeterminate?indeterminatePlaceholder:this._trackingValue,this.isComposing=!1)}e.stopPropagation();return}this.indeterminate&&(this.wasIndeterminate=!0,this.indeterminateValue=this.value,this.inputElement.value=this.inputElement.value.replace(indeterminatePlaceholder,"")),e.data&&this.decimalsChars.has(e.data)&&(this.isIntentDecimal=!0);const{value:t,selectionStart:s}=this.inputElement,i=t.split("").map(n=>remapMultiByteCharacters[n]||n).join("");if(this.numberParser.isValidPartialNumber(i)){this.lastCommitedValue=(l=this.lastCommitedValue)!=null?l:this.value;const n=this.convertValueToNumber(i);!i&&this.indeterminateValue?(this.indeterminate=!0,this._value=this.indeterminateValue):(this.indeterminate=!1,this._value=this.validateInput(n)),this._trackingValue=i,this.inputElement.value=i,this.inputElement.setSelectionRange(s,s);return}else this.inputElement.value=this.indeterminate?indeterminatePlaceholder:this._trackingValue,e.stopPropagation();const r=i.length,d=this._trackingValue.length,m=(s||r)-(r-d);this.inputElement.setSelectionRange(m,m)}valueWithLimits(e){let t=e;return typeof this.min!="undefined"&&(t=Math.max(this.min,t)),typeof this.max!="undefined"&&(t=Math.min(this.max,t)),t}validateInput(e){e=this.valueWithLimits(e);const t=e<0?-1:1;if(e*=t,this.step){const s=typeof this.min!="undefined"?this.min:0,i=parseFloat(this.valueFormatter.format((e-s)%this.step));if(i===0||(Math.round(i/this.step)===1?e+=this.step-i:e-=i),typeof this.max!="undefined")for(;e>this.max;)e-=this.step;e=parseFloat(this.valueFormatter.format(e))}return e*=t,e}get displayValue(){const e=this.focused?"":indeterminatePlaceholder;return this.indeterminate?e:this.formattedValue}clearNumberFormatterCache(){this._numberFormatter=void 0,this._numberParser=void 0}get numberFormatter(){if(!this._numberFormatter||!this._numberFormatterFocused){const{style:e,unit:t,unitDisplay:s,...i}=this.formatOptions;e!=="unit"&&(i.style=e),this._numberFormatterFocused=new c(this.languageResolver.language,i);try{this._numberFormatter=new c(this.languageResolver.language,this.formatOptions),this._forcedUnit="",this._numberFormatter.format(1)}catch(r){e==="unit"&&(this._forcedUnit=t),this._numberFormatter=this._numberFormatterFocused}}return this.focused?this._numberFormatterFocused:this._numberFormatter}clearValueFormatterCache(){this._valueFormatter=void 0}get valueFormatter(){if(!this._valueFormatter){const e=this.step&&this.step!=Math.floor(this.step)?this.step.toString().split(".")[1].length:0;this._valueFormatter=new c("en",{useGrouping:!1,maximumFractionDigits:e})}return this._valueFormatter}get numberParser(){if(!this._numberParser||!this._numberParserFocused){const{style:e,unit:t,unitDisplay:s,...i}=this.formatOptions;e!=="unit"&&(i.style=e),this._numberParserFocused=new v(this.languageResolver.language,i);try{this._numberParser=new v(this.languageResolver.language,this.formatOptions),this._forcedUnit="",this._numberParser.parse("0")}catch(r){e==="unit"&&(this._forcedUnit=t),this._numberParser=this._numberParserFocused}}return this.focused?this._numberParserFocused:this._numberParser}renderField(){return this.autocomplete="off",h`
17
+ `};export class NumberField extends D{constructor(){super(...arguments);this.focused=!1;this._forcedUnit="";this.formatOptions={};this.hideStepper=!1;this.indeterminate=!1;this.keyboardFocused=!1;this.managedInput=!1;this.stepModifier=10;this._value=NaN;this._trackingValue="";this.decimalsChars=new Set([".",","]);this.valueBeforeFocus="";this.isIntentDecimal=!1;this.changeCount=0;this.languageResolver=new I(this);this.wasIndeterminate=!1;this.hasRecentlyReceivedPointerDown=!1;this.applyFocusElementLabel=e=>{this.appliedLabel=e};this.isComposing=!1}static get styles(){return[...super.styles,U,N]}set value(e){const t=this.validateInput(e);if(t===this.value)return;this.lastCommitedValue=t;const s=this._value;this._value=t,this.requestUpdate("value",s)}get value(){return this._value}get inputValue(){return this.indeterminate?this.formattedValue:this.inputElement.value}setValue(e=this.value){const t=this.lastCommitedValue;this.value=e,!(typeof t=="undefined"||t===this.value)&&(this.lastCommitedValue=this.value,this.dispatchEvent(new Event("change",{bubbles:!0,composed:!0})))}get valueAsString(){return this._value.toString()}set valueAsString(e){this.value=this.numberParser.parse(e)}get formattedValue(){return isNaN(this.value)?"":this.numberFormatter.format(this.value)+(this.focused?"":this._forcedUnit)}convertValueToNumber(e){let t=e.split("").map(r=>remapMultiByteCharacters[r]||r).join("");const s=this.valueBeforeFocus.split("").filter(r=>this.decimalsChars.has(r)),i=new Set(s);if(C()&&this.inputElement.inputMode==="decimal"&&t!==this.valueBeforeFocus){const m=this.numberFormatter.formatToParts(1000.1).find(n=>n.type==="decimal").value;for(const n of i)!(n===m)&&!this.isIntentDecimal&&(t=t.replace(new RegExp(n,"g"),""));let c=!1;const l=t.split("");for(let n=l.length-1;n>=0;n--){const f=l[n];this.decimalsChars.has(f)&&(c?l[n]="":(l[n]=m,c=!0))}t=l.join("")}return this.numberParser.parse(t)}get _step(){var e;return typeof this.step!="undefined"?this.step:((e=this.formatOptions)==null?void 0:e.style)==="percent"?.01:1}handlePointerdown(e){if(e.button!==0){e.preventDefault();return}this.managedInput=!0,this.buttons.setPointerCapture(e.pointerId);const t=this.buttons.children[0].getBoundingClientRect(),s=this.buttons.children[1].getBoundingClientRect();this.findChange=i=>{i.clientX>=t.x&&i.clientY>=t.y&&i.clientX<=t.x+t.width&&i.clientY<=t.y+t.height?this.change=r=>this.increment(r.shiftKey?this.stepModifier:1):i.clientX>=s.x&&i.clientY>=s.y&&i.clientX<=s.x+s.width&&i.clientY<=s.y+s.height&&(this.change=r=>this.decrement(r.shiftKey?this.stepModifier:1))},this.findChange(e),this.startChange(e)}startChange(e){this.changeCount=0,this.doChange(e),this.safty=setTimeout(()=>{this.doNextChange(e)},400)}doChange(e){this.change(e)}handlePointermove(e){this.findChange(e)}handlePointerup(e){this.buttons.releasePointerCapture(e.pointerId),cancelAnimationFrame(this.nextChange),clearTimeout(this.safty),this.managedInput=!1,this.setValue()}doNextChange(e){return this.changeCount+=1,this.changeCount%FRAMES_PER_CHANGE===0&&this.doChange(e),requestAnimationFrame(()=>{this.nextChange=this.doNextChange(e)})}stepBy(e){if(this.disabled||this.readonly)return;const t=typeof this.min!="undefined"?this.min:0;let s=this.value;s+=e*this._step,isNaN(this.value)&&(s=t),s=this.valueWithLimits(s),this.requestUpdate(),this._value=this.validateInput(s),this.inputElement.value=this.numberFormatter.format(s);const i=new Event("input",{bubbles:!0,composed:!0});this.inputElement.readOnly=!0,this.inputElement.dispatchEvent(i),this.indeterminate=!1,this.focus(),this.inputElement.readOnly=!1}increment(e=1){this.stepBy(1*e)}decrement(e=1){this.stepBy(-1*e)}handleKeydown(e){if(!this.isComposing)switch(e.code){case"ArrowUp":e.preventDefault(),this.increment(e.shiftKey?this.stepModifier:1),this.setValue();break;case"ArrowDown":e.preventDefault(),this.decrement(e.shiftKey?this.stepModifier:1),this.setValue();break}}onScroll(e){e.preventDefault(),this.managedInput=!0;const t=e.shiftKey?e.deltaX/Math.abs(e.deltaX):e.deltaY/Math.abs(e.deltaY);t!==0&&!isNaN(t)&&(this.stepBy(t*(e.shiftKey?this.stepModifier:1)),clearTimeout(this.queuedChangeEvent),this.queuedChangeEvent=setTimeout(()=>{this.setValue()},CHANGE_DEBOUNCE_MS)),this.managedInput=!1}onFocus(){super.onFocus(),this._trackingValue=this.inputValue,this.keyboardFocused=!this.readonly&&!0,this.addEventListener("wheel",this.onScroll,{passive:!1}),this.valueBeforeFocus=this.inputElement.value}onBlur(e){super.onBlur(e),this.keyboardFocused=!this.readonly&&!1,this.removeEventListener("wheel",this.onScroll),this.isIntentDecimal=!1}handleFocusin(){this.focused=!this.readonly&&!0,this.keyboardFocused=!this.readonly&&!0}handleFocusout(){this.focused=!this.readonly&&!1,this.keyboardFocused=!this.readonly&&!1}handleChange(){const e=this.convertValueToNumber(this.inputValue);if(this.wasIndeterminate&&(this.wasIndeterminate=!1,this.indeterminateValue=void 0,isNaN(e))){this.indeterminate=!0;return}this.setValue(e),this.inputElement.value=this.formattedValue}handleCompositionStart(){this.isComposing=!0}handleCompositionEnd(){this.isComposing=!1,requestAnimationFrame(()=>{this.inputElement.dispatchEvent(new Event("input",{composed:!0,bubbles:!0}))})}handleInputElementPointerdown(){this.hasRecentlyReceivedPointerDown=!0,this.updateComplete.then(()=>{requestAnimationFrame(()=>{this.hasRecentlyReceivedPointerDown=!1})})}handleInput(e){var l,n,f;if(this.isComposing){if(e.data){const h=this.convertValueToNumber(e.data);Number.isNaN(h)&&(this.inputElement.value=this.indeterminate?indeterminatePlaceholder:this._trackingValue,this.isComposing=!1)}e.stopPropagation();return}this.indeterminate&&(this.wasIndeterminate=!0,this.indeterminateValue=this.value,this.inputElement.value=this.inputElement.value.replace(indeterminatePlaceholder,"")),e.data&&this.decimalsChars.has(e.data)&&(this.isIntentDecimal=!0);const{value:t,selectionStart:s}=this.inputElement,i=t.split("").map(h=>remapMultiByteCharacters[h]||h).join("");if(this.numberParser.isValidPartialNumber(i)){this.lastCommitedValue=(l=this.lastCommitedValue)!=null?l:this.value;const h=this.convertValueToNumber(i);!i&&this.indeterminateValue?(this.indeterminate=!0,this._value=this.indeterminateValue):(this.indeterminate=!1,this._value=this.validateInput(h)),this._trackingValue=i,this.inputElement.value=i,this.inputElement.setSelectionRange(s,s),this.truncatedValueTooltipController.refresh()?this.updateComplete.then(()=>{var b,g;this.truncatedValueTooltipController.syncTooltipText((g=(b=this.inputElement)==null?void 0:b.value)!=null?g:this.displayValue)}):this.truncatedValueTooltipController.syncTooltipText((f=(n=this.inputElement)==null?void 0:n.value)!=null?f:this.displayValue);return}else this.inputElement.value=this.indeterminate?indeterminatePlaceholder:this._trackingValue,e.stopPropagation();const r=i.length,m=this._trackingValue.length,c=(s||r)-(r-m);this.inputElement.setSelectionRange(c,c)}valueWithLimits(e){let t=e;return typeof this.min!="undefined"&&(t=Math.max(this.min,t)),typeof this.max!="undefined"&&(t=Math.min(this.max,t)),t}validateInput(e){e=this.valueWithLimits(e);const t=e<0?-1:1;if(e*=t,this.step){const s=typeof this.min!="undefined"?this.min:0,i=parseFloat(this.valueFormatter.format((e-s)%this.step));if(i===0||(Math.round(i/this.step)===1?e+=this.step-i:e-=i),typeof this.max!="undefined")for(;e>this.max;)e-=this.step;e=parseFloat(this.valueFormatter.format(e))}return e*=t,e}get displayValue(){const e=this.focused?"":indeterminatePlaceholder;return this.indeterminate?e:this.formattedValue}clearNumberFormatterCache(){this._numberFormatter=void 0,this._numberParser=void 0}get numberFormatter(){if(!this._numberFormatter||!this._numberFormatterFocused){const{style:e,unit:t,unitDisplay:s,...i}=this.formatOptions;e!=="unit"&&(i.style=e),this._numberFormatterFocused=new v(this.languageResolver.language,i);try{this._numberFormatter=new v(this.languageResolver.language,this.formatOptions),this._forcedUnit="",this._numberFormatter.format(1)}catch(r){e==="unit"&&(this._forcedUnit=t),this._numberFormatter=this._numberFormatterFocused}}return this.focused?this._numberFormatterFocused:this._numberFormatter}clearValueFormatterCache(){this._valueFormatter=void 0}get valueFormatter(){if(!this._valueFormatter){const e=this.step&&this.step!=Math.floor(this.step)?this.step.toString().split(".")[1].length:0;this._valueFormatter=new v("en",{useGrouping:!1,maximumFractionDigits:e})}return this._valueFormatter}get numberParser(){if(!this._numberParser||!this._numberParserFocused){const{style:e,unit:t,unitDisplay:s,...i}=this.formatOptions;e!=="unit"&&(i.style=e),this._numberParserFocused=new y(this.languageResolver.language,i);try{this._numberParser=new y(this.languageResolver.language,this.formatOptions),this._forcedUnit="",this._numberParser.parse("0")}catch(r){e==="unit"&&(this._forcedUnit=t),this._numberParser=this._numberParserFocused}}return this.focused?this._numberParserFocused:this._numberParser}renderField(){return this.autocomplete="off",p`
18
18
  ${super.renderField()}
19
- ${this.hideStepper?E:h`
19
+ ${this.hideStepper?w:p`
20
20
  <span
21
21
  class="buttons"
22
22
  @focusin=${this.handleFocusin}
23
23
  @focusout=${this.handleFocusout}
24
- ${_({start:["pointerdown",this.handlePointerdown],streamInside:[["pointermove","pointerenter","pointerleave","pointerover","pointerout"],this.handlePointermove],end:[["pointerup","pointercancel","pointerleave"],this.handlePointerup]})}
24
+ ${V({start:["pointerdown",this.handlePointerdown],streamInside:[["pointermove","pointerenter","pointerleave","pointerover","pointerout"],this.handlePointermove],end:[["pointerup","pointercancel","pointerleave"],this.handlePointerup]})}
25
25
  >
26
26
  <sp-infield-button
27
27
  inline="end"
@@ -35,7 +35,7 @@
35
35
  ?disabled=${this.disabled||this.readonly||typeof this.max!="undefined"&&this.value===this.max}
36
36
  ?quiet=${this.quiet}
37
37
  >
38
- ${g[this.size]("Up")}
38
+ ${F[this.size]("Up")}
39
39
  </sp-infield-button>
40
40
  <sp-infield-button
41
41
  inline="end"
@@ -49,9 +49,9 @@
49
49
  ?disabled=${this.disabled||this.readonly||typeof this.min!="undefined"&&this.value===this.min}
50
50
  ?quiet=${this.quiet}
51
51
  >
52
- ${g[this.size]("Down")}
52
+ ${F[this.size]("Down")}
53
53
  </sp-infield-button>
54
54
  </span>
55
55
  `}
56
- `}update(e){if((e.has("formatOptions")||e.has("resolvedLanguage"))&&this.clearNumberFormatterCache(),e.has("value")||e.has("max")||e.has("min")||e.has("step")){const t=this.numberParser.parse(this.formattedValue.replace(this._forcedUnit,""));this.value=t,this.clearValueFormatterCache()}super.update(e)}willUpdate(e){this.multiline=!1,e.has(V)&&this.clearNumberFormatterCache()}firstUpdated(e){super.firstUpdated(e),this.addEventListener("keydown",this.handleKeydown),this.addEventListener("compositionstart",this.handleCompositionStart),this.addEventListener("compositionend",this.handleCompositionEnd)}updated(e){if(!(!this.inputElement||!this.isConnected)){if(e.has("min")||e.has("formatOptions")){const t=typeof this.min!="undefined"&&this.min>=0,{maximumFractionDigits:s}=this.numberFormatter.resolvedOptions(),i=s&&s>0;let r="numeric";I()&&!t?r="text":(b()&&i||N()&&i&&t)&&(r="decimal"),this.inputElement.inputMode=r}e.has("focused")&&this.focused&&!this.hasRecentlyReceivedPointerDown&&this.formatOptions.unit&&this.setSelectionRange(0,this.displayValue.length)}}}a([C(".buttons")],NumberField.prototype,"buttons",2),a([u({type:Boolean,reflect:!0})],NumberField.prototype,"focused",2),a([u({type:Object,attribute:"format-options"})],NumberField.prototype,"formatOptions",2),a([u({type:Boolean,reflect:!0,attribute:"hide-stepper"})],NumberField.prototype,"hideStepper",2),a([u({type:Boolean,reflect:!0})],NumberField.prototype,"indeterminate",2),a([u({type:Boolean,reflect:!0,attribute:"keyboard-focused"})],NumberField.prototype,"keyboardFocused",2),a([u({type:Number})],NumberField.prototype,"max",2),a([u({type:Number})],NumberField.prototype,"min",2),a([u({type:Number})],NumberField.prototype,"step",2),a([u({type:Number,reflect:!0,attribute:"step-modifier"})],NumberField.prototype,"stepModifier",2),a([u({type:Number})],NumberField.prototype,"value",1);
56
+ `}update(e){if((e.has("formatOptions")||e.has("resolvedLanguage"))&&this.clearNumberFormatterCache(),e.has("value")||e.has("max")||e.has("min")||e.has("step")){const t=this.numberParser.parse(this.formattedValue.replace(this._forcedUnit,""));this.value=t,this.clearValueFormatterCache()}super.update(e)}willUpdate(e){this.multiline=!1,e.has(x)&&this.clearNumberFormatterCache()}firstUpdated(e){super.firstUpdated(e),this.addEventListener("keydown",this.handleKeydown),this.addEventListener("compositionstart",this.handleCompositionStart),this.addEventListener("compositionend",this.handleCompositionEnd)}updated(e){if(!(!this.inputElement||!this.isConnected)){if(e.has("min")||e.has("formatOptions")){const t=typeof this.min!="undefined"&&this.min>=0,{maximumFractionDigits:s}=this.numberFormatter.resolvedOptions(),i=s&&s>0;let r="numeric";R()&&!t?r="text":(C()&&i||S()&&i&&t)&&(r="decimal"),this.inputElement.inputMode=r}e.has("focused")&&this.focused&&!this.hasRecentlyReceivedPointerDown&&this.formatOptions.unit&&this.setSelectionRange(0,this.displayValue.length)}}}a([P(".buttons")],NumberField.prototype,"buttons",2),a([u({type:Boolean,reflect:!0})],NumberField.prototype,"focused",2),a([u({type:Object,attribute:"format-options"})],NumberField.prototype,"formatOptions",2),a([u({type:Boolean,reflect:!0,attribute:"hide-stepper"})],NumberField.prototype,"hideStepper",2),a([u({type:Boolean,reflect:!0})],NumberField.prototype,"indeterminate",2),a([u({type:Boolean,reflect:!0,attribute:"keyboard-focused"})],NumberField.prototype,"keyboardFocused",2),a([u({type:Number})],NumberField.prototype,"max",2),a([u({type:Number})],NumberField.prototype,"min",2),a([u({type:Number})],NumberField.prototype,"step",2),a([u({type:Number,reflect:!0,attribute:"step-modifier"})],NumberField.prototype,"stepModifier",2),a([u({type:Number})],NumberField.prototype,"value",1);
57
57
  //# sourceMappingURL=NumberField.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["NumberField.ts"],
4
- "sourcesContent": ["/**\n * Copyright 2026 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport { NumberFormatter, NumberParser } from '@internationalized/number';\n\nimport {\n CSSResultArray,\n html,\n nothing,\n PropertyValues,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport { streamingListener } from '@spectrum-web-components/base/src/streaming-listener.js';\nimport chevronStyles from '@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js';\nimport {\n LanguageResolutionController,\n languageResolverUpdatedSymbol,\n} from '@spectrum-web-components/reactive-controllers/src/LanguageResolution.js';\nimport { isAndroid, isIOS, isIPhone } from '@spectrum-web-components/shared';\nimport { TextfieldBase } from '@spectrum-web-components/textfield';\n\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';\n\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];\n }\n\n @query('.buttons')\n private buttons!: HTMLDivElement;\n\n @property({ type: Boolean, reflect: true })\n public override focused = false;\n\n _forcedUnit = '';\n\n /**\n * An `&lt;sp-number-field&gt;` element will process its numeric value with\n * `new Intl.NumberFormat(this.resolvedLanguage, this.formatOptions).format(this.valueAsNumber)`\n * in order to prepare it for visual delivery in the input. In order to customize this\n * processing supply your own `Intl.NumberFormatOptions` object here.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat\n */\n @property({ type: Object, attribute: 'format-options' })\n public formatOptions: Intl.NumberFormatOptions = {};\n\n /**\n * Whether the stepper UI is hidden or not.\n */\n @property({ type: Boolean, reflect: true, attribute: 'hide-stepper' })\n public hideStepper = false;\n\n @property({ type: Boolean, reflect: true })\n public indeterminate = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'keyboard-focused' })\n public keyboardFocused = false;\n\n @property({ type: Number })\n public max?: number;\n\n @property({ type: Number })\n public min?: number;\n\n /**\n * The distance by which to alter the value of the element when taking a \"step\".\n *\n * When `this.formatOptions.style === 'percentage'` the default step will be\n * set to 0.01 unless otherwise supplied to the element.\n */\n @property({ type: Number })\n public step?: number;\n\n public managedInput = false;\n\n @property({ type: Number, reflect: true, attribute: 'step-modifier' })\n public stepModifier = 10;\n\n @property({ type: Number })\n public override set value(rawValue: number) {\n const value = this.validateInput(rawValue);\n if (value === this.value) {\n return;\n }\n this.lastCommitedValue = value;\n const oldValue = this._value;\n this._value = value;\n this.requestUpdate('value', oldValue);\n }\n\n public override get value(): number {\n return this._value;\n }\n\n private get inputValue(): string {\n return this.indeterminate ? this.formattedValue : 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 (typeof previousValue === 'undefined' || previousValue === this.value) {\n // Do not announce when the value is unchanged.\n return;\n }\n\n this.lastCommitedValue = this.value;\n\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }));\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)) {\n return '';\n }\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 {\n valueChars[index] = '';\n }\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 const inputEvent = new Event('input', {\n bubbles: true,\n composed: true,\n });\n this.inputElement.readOnly = true;\n this.inputElement.dispatchEvent(inputEvent);\n this.indeterminate = false;\n this.focus();\n this.inputElement.readOnly = false;\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) {\n return;\n }\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\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) - (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 (window.__swc.DEBUG) {\n window.__swc.warn(\n this,\n `Number Formatter Error: Format options include style === 'unit' but unit is not supported: ${error instanceof Error ? error.message : 'Unknown error'}`,\n 'https://opensource.adobe.com/spectrum-web-components/components/number-field/',\n { level: 'low' }\n );\n }\n if (style === 'unit') {\n this._forcedUnit = unit as string;\n }\n this._numberFormatter = this._numberFormatterFocused;\n }\n }\n return this.focused ? this._numberFormatterFocused : 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 (window.__swc.DEBUG) {\n window.__swc.warn(\n this,\n `Number Parser Error: Format options include style === 'unit' but unit is not supported: ${error instanceof Error ? error.message : 'Unknown error'}`,\n 'https://opensource.adobe.com/spectrum-web-components/components/number-field/',\n { level: 'low' }\n );\n }\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 ['pointerup', 'pointercancel', 'pointerleave'],\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' && 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' && 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 = typeof this.min !== 'undefined' && this.min >= 0;\n\n const { maximumFractionDigits } = this.numberFormatter.resolvedOptions();\n const hasDecimals = 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) {\n inputMode = 'text';\n } else if (isIOS() && hasDecimals) {\n inputMode = 'decimal';\n }\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\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
- "names": ["NumberFormatter", "NumberParser", "html", "nothing", "property", "query", "streamingListener", "chevronStyles", "LanguageResolutionController", "languageResolverUpdatedSymbol", "isAndroid", "isIOS", "isIPhone", "TextfieldBase", "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", "inputEvent", "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"]
4
+ "sourcesContent": ["/**\n * Copyright 2026 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport { NumberFormatter, NumberParser } from '@internationalized/number';\n\nimport {\n CSSResultArray,\n html,\n nothing,\n PropertyValues,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport { streamingListener } from '@spectrum-web-components/base/src/streaming-listener.js';\nimport chevronStyles from '@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js';\nimport {\n LanguageResolutionController,\n languageResolverUpdatedSymbol,\n} from '@spectrum-web-components/reactive-controllers/src/LanguageResolution.js';\nimport { isAndroid, isIOS, isIPhone } from '@spectrum-web-components/shared';\nimport { TextfieldBase } from '@spectrum-web-components/textfield';\n\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';\n\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];\n }\n\n @query('.buttons')\n private buttons!: HTMLDivElement;\n\n @property({ type: Boolean, reflect: true })\n public override focused = false;\n\n _forcedUnit = '';\n\n /**\n * An `&lt;sp-number-field&gt;` element will process its numeric value with\n * `new Intl.NumberFormat(this.resolvedLanguage, this.formatOptions).format(this.valueAsNumber)`\n * in order to prepare it for visual delivery in the input. In order to customize this\n * processing supply your own `Intl.NumberFormatOptions` object here.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat\n */\n @property({ type: Object, attribute: 'format-options' })\n public formatOptions: Intl.NumberFormatOptions = {};\n\n /**\n * Whether the stepper UI is hidden or not.\n */\n @property({ type: Boolean, reflect: true, attribute: 'hide-stepper' })\n public hideStepper = false;\n\n @property({ type: Boolean, reflect: true })\n public indeterminate = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'keyboard-focused' })\n public keyboardFocused = false;\n\n @property({ type: Number })\n public max?: number;\n\n @property({ type: Number })\n public min?: number;\n\n /**\n * The distance by which to alter the value of the element when taking a \"step\".\n *\n * When `this.formatOptions.style === 'percentage'` the default step will be\n * set to 0.01 unless otherwise supplied to the element.\n */\n @property({ type: Number })\n public step?: number;\n\n public managedInput = false;\n\n @property({ type: Number, reflect: true, attribute: 'step-modifier' })\n public stepModifier = 10;\n\n @property({ type: Number })\n public override set value(rawValue: number) {\n const value = this.validateInput(rawValue);\n if (value === this.value) {\n return;\n }\n this.lastCommitedValue = value;\n const oldValue = this._value;\n this._value = value;\n this.requestUpdate('value', oldValue);\n }\n\n public override get value(): number {\n return this._value;\n }\n\n private get inputValue(): string {\n return this.indeterminate ? this.formattedValue : 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 (typeof previousValue === 'undefined' || previousValue === this.value) {\n // Do not announce when the value is unchanged.\n return;\n }\n\n this.lastCommitedValue = this.value;\n\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }));\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)) {\n return '';\n }\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 {\n valueChars[index] = '';\n }\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 const inputEvent = new Event('input', {\n bubbles: true,\n composed: true,\n });\n this.inputElement.readOnly = true;\n this.inputElement.dispatchEvent(inputEvent);\n this.indeterminate = false;\n this.focus();\n this.inputElement.readOnly = false;\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) {\n return;\n }\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\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 // Controller uses an intentional multi-phase update (see TruncatedValueTooltipController):\n // refresh() may queue a second render so the tooltip appears; we sync tooltip text after\n // updateComplete so the tooltip DOM exists.\n const justBecameTruncated =\n this.truncatedValueTooltipController.refresh();\n if (justBecameTruncated) {\n this.updateComplete.then(() => {\n this.truncatedValueTooltipController.syncTooltipText(\n this.inputElement?.value ?? this.displayValue\n );\n });\n } else {\n this.truncatedValueTooltipController.syncTooltipText(\n this.inputElement?.value ?? this.displayValue\n );\n }\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) - (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 (window.__swc.DEBUG) {\n window.__swc.warn(\n this,\n `Number Formatter Error: Format options include style === 'unit' but unit is not supported: ${error instanceof Error ? error.message : 'Unknown error'}`,\n 'https://opensource.adobe.com/spectrum-web-components/components/number-field/',\n { level: 'low' }\n );\n }\n if (style === 'unit') {\n this._forcedUnit = unit as string;\n }\n this._numberFormatter = this._numberFormatterFocused;\n }\n }\n return this.focused ? this._numberFormatterFocused : 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 (window.__swc.DEBUG) {\n window.__swc.warn(\n this,\n `Number Parser Error: Format options include style === 'unit' but unit is not supported: ${error instanceof Error ? error.message : 'Unknown error'}`,\n 'https://opensource.adobe.com/spectrum-web-components/components/number-field/',\n { level: 'low' }\n );\n }\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 ['pointerup', 'pointercancel', 'pointerleave'],\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' && 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' && 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 = typeof this.min !== 'undefined' && this.min >= 0;\n\n const { maximumFractionDigits } = this.numberFormatter.resolvedOptions();\n const hasDecimals = 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) {\n inputMode = 'text';\n } else if (isIOS() && hasDecimals) {\n inputMode = 'decimal';\n }\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\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
+ "names": ["NumberFormatter", "NumberParser", "html", "nothing", "property", "query", "streamingListener", "chevronStyles", "LanguageResolutionController", "languageResolverUpdatedSymbol", "isAndroid", "isIOS", "isIPhone", "TextfieldBase", "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", "inputEvent", "factor", "direction", "_event", "_b", "_c", "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
  }