@spectrum-web-components/number-field 0.5.0 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -167,7 +167,7 @@
167
167
  },
168
168
  {
169
169
  "kind": "field",
170
- "name": "stepperActive",
170
+ "name": "managedInput",
171
171
  "type": {
172
172
  "text": "boolean"
173
173
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spectrum-web-components/number-field",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -58,12 +58,12 @@
58
58
  ],
59
59
  "dependencies": {
60
60
  "@internationalized/number": "^3.1.0",
61
- "@spectrum-web-components/action-button": "^0.10.0",
61
+ "@spectrum-web-components/action-button": "^0.10.2",
62
62
  "@spectrum-web-components/base": "^0.7.0",
63
63
  "@spectrum-web-components/icon": "^0.12.0",
64
64
  "@spectrum-web-components/icons-ui": "^0.9.0",
65
65
  "@spectrum-web-components/shared": "^0.15.0",
66
- "@spectrum-web-components/textfield": "^0.13.0",
66
+ "@spectrum-web-components/textfield": "^0.13.2",
67
67
  "tslib": "^2.0.0"
68
68
  },
69
69
  "devDependencies": {
@@ -76,5 +76,5 @@
76
76
  "./sp-*.js",
77
77
  "./**/*.dev.js"
78
78
  ],
79
- "gitHead": "05c81318844160db3f8156144106e643507fef97"
79
+ "gitHead": "60b2d3b7d9020d72f9ae930568670321a1918e6f"
80
80
  }
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  import { NumberField } from "./src/NumberField.dev.js";
2
3
  customElements.define("sp-number-field", NumberField);
3
4
  //# sourceMappingURL=sp-number-field.dev.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["sp-number-field.ts"],
4
4
  "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport { NumberField } from './src/NumberField.dev.js'\n\ncustomElements.define('sp-number-field', NumberField);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sp-number-field': NumberField;\n }\n}\n"],
5
- "mappings": "AAYA;AAEA,eAAe,OAAO,mBAAmB,WAAW;",
5
+ "mappings": ";AAYA,SAAS,mBAAmB;AAE5B,eAAe,OAAO,mBAAmB,WAAW;",
6
6
  "names": []
7
7
  }
@@ -1,2 +1,2 @@
1
- import{NumberField as e}from"./src/NumberField.js";customElements.define("sp-number-field",e);
1
+ "use strict";import{NumberField as e}from"./src/NumberField.js";customElements.define("sp-number-field",e);
2
2
  //# sourceMappingURL=sp-number-field.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["sp-number-field.ts"],
4
4
  "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport { NumberField } from './src/NumberField.js';\n\ncustomElements.define('sp-number-field', NumberField);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sp-number-field': NumberField;\n }\n}\n"],
5
- "mappings": "AAYA,mDAEA,eAAe,OAAO,kBAAmB,CAAW",
6
- "names": []
5
+ "mappings": "aAYA,OAAS,eAAAA,MAAmB,uBAE5B,eAAe,OAAO,kBAAmBA,CAAW",
6
+ "names": ["NumberField"]
7
7
  }
@@ -41,7 +41,7 @@ export declare class NumberField extends TextfieldBase {
41
41
  * set to 0.01 unless otherwise supplied to the element.
42
42
  */
43
43
  step?: number;
44
- stepperActive: boolean;
44
+ managedInput: boolean;
45
45
  stepModifier: number;
46
46
  set value(rawValue: number);
47
47
  get value(): number;
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  var __defProp = Object.defineProperty;
2
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
4
  var __decorateClass = (decorators, target, key, kind) => {
@@ -58,7 +59,7 @@ export class NumberField extends TextfieldBase {
58
59
  this.indeterminate = false;
59
60
  this.keyboardFocused = false;
60
61
  this.resolvedLanguage = document.documentElement.lang || navigator.language;
61
- this.stepperActive = false;
62
+ this.managedInput = false;
62
63
  this.stepModifier = 10;
63
64
  this._value = NaN;
64
65
  this._trackingValue = "";
@@ -112,7 +113,7 @@ export class NumberField extends TextfieldBase {
112
113
  event.preventDefault();
113
114
  return;
114
115
  }
115
- this.stepperActive = true;
116
+ this.managedInput = true;
116
117
  this.buttons.setPointerCapture(event.pointerId);
117
118
  const stepUpRect = this.buttons.children[0].getBoundingClientRect();
118
119
  const stepDownRect = this.buttons.children[1].getBoundingClientRect();
@@ -143,8 +144,10 @@ export class NumberField extends TextfieldBase {
143
144
  this.buttons.releasePointerCapture(event.pointerId);
144
145
  cancelAnimationFrame(this.nextChange);
145
146
  clearTimeout(this.safty);
146
- this.dispatchEvent(new Event("change", { bubbles: true, composed: true }));
147
- this.stepperActive = false;
147
+ this.dispatchEvent(
148
+ new Event("change", { bubbles: true, composed: true })
149
+ );
150
+ this.managedInput = false;
148
151
  }
149
152
  doNextChange(event) {
150
153
  this.changeCount += 1;
@@ -167,7 +170,9 @@ export class NumberField extends TextfieldBase {
167
170
  } else {
168
171
  this.value = value;
169
172
  }
170
- this.dispatchEvent(new Event("input", { bubbles: true, composed: true }));
173
+ this.dispatchEvent(
174
+ new Event("input", { bubbles: true, composed: true })
175
+ );
171
176
  this.indeterminate = false;
172
177
  this.focus();
173
178
  }
@@ -182,21 +187,27 @@ export class NumberField extends TextfieldBase {
182
187
  case "ArrowUp":
183
188
  event.preventDefault();
184
189
  this.increment(event.shiftKey ? this.stepModifier : 1);
185
- this.dispatchEvent(new Event("change", { bubbles: true, composed: true }));
190
+ this.dispatchEvent(
191
+ new Event("change", { bubbles: true, composed: true })
192
+ );
186
193
  break;
187
194
  case "ArrowDown":
188
195
  event.preventDefault();
189
196
  this.decrement(event.shiftKey ? this.stepModifier : 1);
190
- this.dispatchEvent(new Event("change", { bubbles: true, composed: true }));
197
+ this.dispatchEvent(
198
+ new Event("change", { bubbles: true, composed: true })
199
+ );
191
200
  break;
192
201
  }
193
202
  }
194
203
  onScroll(event) {
195
204
  event.preventDefault();
205
+ this.managedInput = true;
196
206
  const direction = event.shiftKey ? event.deltaX / Math.abs(event.deltaX) : event.deltaY / Math.abs(event.deltaY);
197
207
  if (direction !== 0 && !isNaN(direction)) {
198
208
  this.stepBy(direction * (event.shiftKey ? this.stepModifier : 1));
199
209
  }
210
+ this.managedInput = false;
200
211
  }
201
212
  onFocus() {
202
213
  super.onFocus();
@@ -234,7 +245,10 @@ export class NumberField extends TextfieldBase {
234
245
  if (this.indeterminate) {
235
246
  this.wasIndeterminate = true;
236
247
  this.indeterminateValue = this.value;
237
- this.inputElement.value = this.inputElement.value.replace(indeterminatePlaceholder, "");
248
+ this.inputElement.value = this.inputElement.value.replace(
249
+ indeterminatePlaceholder,
250
+ ""
251
+ );
238
252
  }
239
253
  const { value: originalValue, selectionStart } = this.inputElement;
240
254
  const value = originalValue.split("").map((char) => remapMultiByteCharacters[char] || char).join("");
@@ -303,9 +317,15 @@ export class NumberField extends TextfieldBase {
303
317
  if (style !== "unit") {
304
318
  formatOptionsNoUnit.style = style;
305
319
  }
306
- this._numberFormatterFocused = new NumberFormatter(this.resolvedLanguage, formatOptionsNoUnit);
320
+ this._numberFormatterFocused = new NumberFormatter(
321
+ this.resolvedLanguage,
322
+ formatOptionsNoUnit
323
+ );
307
324
  try {
308
- this._numberFormatter = new NumberFormatter(this.resolvedLanguage, this.formatOptions);
325
+ this._numberFormatter = new NumberFormatter(
326
+ this.resolvedLanguage,
327
+ this.formatOptions
328
+ );
309
329
  this._forcedUnit = "";
310
330
  this._numberFormatter.format(1);
311
331
  } catch (error) {
@@ -328,9 +348,15 @@ export class NumberField extends TextfieldBase {
328
348
  if (style !== "unit") {
329
349
  formatOptionsNoUnit.style = style;
330
350
  }
331
- this._numberParserFocused = new NumberParser(this.resolvedLanguage, formatOptionsNoUnit);
351
+ this._numberParserFocused = new NumberParser(
352
+ this.resolvedLanguage,
353
+ formatOptionsNoUnit
354
+ );
332
355
  try {
333
- this._numberParser = new NumberParser(this.resolvedLanguage, this.formatOptions);
356
+ this._numberParser = new NumberParser(
357
+ this.resolvedLanguage,
358
+ this.formatOptions
359
+ );
334
360
  this._forcedUnit = "";
335
361
  this._numberParser.parse("0");
336
362
  } catch (error) {
@@ -404,7 +430,9 @@ export class NumberField extends TextfieldBase {
404
430
  this.clearNumberFormatterCache();
405
431
  }
406
432
  if (changes.has("value") || changes.has("max") || changes.has("min")) {
407
- const value = this.numberParser.parse(this.formattedValue.replace(this._forcedUnit, ""));
433
+ const value = this.numberParser.parse(
434
+ this.formattedValue.replace(this._forcedUnit, "")
435
+ );
408
436
  this.value = value;
409
437
  }
410
438
  super.update(changes);
@@ -447,16 +475,19 @@ export class NumberField extends TextfieldBase {
447
475
  super.disconnectedCallback();
448
476
  }
449
477
  resolveLanguage() {
450
- const queryThemeEvent = new CustomEvent("sp-language-context", {
451
- bubbles: true,
452
- composed: true,
453
- detail: {
454
- callback: (lang) => {
455
- this.resolvedLanguage = lang;
456
- }
457
- },
458
- cancelable: true
459
- });
478
+ const queryThemeEvent = new CustomEvent(
479
+ "sp-language-context",
480
+ {
481
+ bubbles: true,
482
+ composed: true,
483
+ detail: {
484
+ callback: (lang) => {
485
+ this.resolvedLanguage = lang;
486
+ }
487
+ },
488
+ cancelable: true
489
+ }
490
+ );
460
491
  this.dispatchEvent(queryThemeEvent);
461
492
  }
462
493
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["NumberField.ts"],
4
- "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n CSSResultArray,\n html,\n PropertyValues,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport { ProvideLang } from '@spectrum-web-components/theme';\nimport { streamingListener } from '@spectrum-web-components/base/src/streaming-listener.js';\nimport { NumberFormatter, NumberParser } from '@internationalized/number';\n\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron75.js';\nimport '@spectrum-web-components/action-button/sp-action-button.js';\nimport {\n isAndroid,\n isIPhone,\n} from '@spectrum-web-components/shared/src/platform.js';\nimport { TextfieldBase } from '@spectrum-web-components/textfield';\nimport chevronStyles from '@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js';\nimport styles from './number-field.css.js';\n\nexport const FRAMES_PER_CHANGE = 5;\nexport const indeterminatePlaceholder = '-';\nexport const remapMultiByteCharacters: Record<string, string> = {\n '\uFF11': '1',\n '\uFF12': '2',\n '\uFF13': '3',\n '\uFF14': '4',\n '\uFF15': '5',\n '\uFF16': '6',\n '\uFF17': '7',\n '\uFF18': '8',\n '\uFF19': '9',\n '\uFF10': '0',\n '\u3001': ',',\n '\uFF0C': ',',\n '\u3002': '.',\n '\uFF0E': '.',\n '\uFF05': '%',\n '\uFF0B': '+',\n \u30FC: '-',\n};\n\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 @property({ attribute: false })\n private resolvedLanguage =\n document.documentElement.lang || navigator.language;\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 stepperActive = false;\n\n @property({ type: Number, reflect: true, attribute: 'step-modifier' })\n public stepModifier = 10;\n\n @property({ type: Number })\n public override set value(rawValue: number) {\n const value = this.validateInput(rawValue);\n if (value === this.value) {\n return;\n }\n const oldValue = this._value;\n this._value = value;\n this.requestUpdate('value', oldValue);\n }\n\n public override get value(): number {\n return this._value;\n }\n\n private get inputValue(): string {\n return this.indeterminate\n ? this.formattedValue\n : this.inputElement.value;\n }\n\n public override _value = NaN;\n private _trackingValue = '';\n\n /**\n * Retreive the value of the element parsed to a Number.\n */\n public get valueAsString(): string {\n return this._value.toString();\n }\n\n public set valueAsString(value: string) {\n this.value = this.numberParser.parse(value);\n }\n\n public get formattedValue(): string {\n if (isNaN(this.value)) return '';\n return (\n this.numberFormatter.format(this.value) +\n (this.focused ? '' : this._forcedUnit)\n );\n }\n\n private convertValueToNumber(value: string): number {\n return this.numberParser.parse(value);\n }\n\n private get _step(): number {\n if (typeof this.step !== 'undefined') {\n return this.step;\n }\n if (this.formatOptions?.style === 'percent') {\n return 0.01;\n }\n return 1;\n }\n\n private nextChange!: number;\n private changeCount = 0;\n private findChange!: (event: PointerEvent) => void;\n private change!: (event: PointerEvent) => void;\n private safty!: number;\n\n private handlePointerdown(event: PointerEvent): void {\n if (event.button !== 0) {\n event.preventDefault();\n return;\n }\n this.stepperActive = true;\n this.buttons.setPointerCapture(event.pointerId);\n const stepUpRect = this.buttons.children[0].getBoundingClientRect();\n const stepDownRect = this.buttons.children[1].getBoundingClientRect();\n this.findChange = (event: PointerEvent) => {\n if (\n event.clientX >= stepUpRect.x &&\n event.clientY >= stepUpRect.y &&\n event.clientX <= stepUpRect.x + stepUpRect.width &&\n event.clientY <= stepUpRect.y + stepUpRect.height\n ) {\n this.change = (event: PointerEvent) =>\n this.increment(event.shiftKey ? this.stepModifier : 1);\n } else if (\n event.clientX >= stepDownRect.x &&\n event.clientY >= stepDownRect.y &&\n event.clientX <= stepDownRect.x + stepDownRect.width &&\n event.clientY <= stepDownRect.y + stepDownRect.height\n ) {\n this.change = (event: PointerEvent) =>\n this.decrement(event.shiftKey ? this.stepModifier : 1);\n }\n };\n this.findChange(event);\n this.startChange(event);\n }\n\n private startChange(event: PointerEvent): void {\n this.changeCount = 0;\n this.doChange(event);\n this.safty = setTimeout(() => {\n this.doNextChange(event);\n }, 400) as unknown as number;\n }\n\n private doChange(event: PointerEvent): void {\n this.change(event);\n }\n\n private handlePointermove(event: PointerEvent): void {\n this.findChange(event);\n }\n\n private handlePointerup(event: PointerEvent): void {\n this.buttons.releasePointerCapture(event.pointerId);\n cancelAnimationFrame(this.nextChange);\n clearTimeout(this.safty);\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\n this.stepperActive = false;\n }\n\n private doNextChange(event: PointerEvent): number {\n this.changeCount += 1;\n if (this.changeCount % FRAMES_PER_CHANGE === 0) {\n this.doChange(event);\n }\n return requestAnimationFrame(() => {\n this.nextChange = this.doNextChange(event);\n });\n }\n\n private stepBy(count: number): void {\n if (this.disabled || this.readonly) {\n return;\n }\n const min = typeof this.min !== 'undefined' ? this.min : 0;\n let value = this.value;\n value += count * this._step;\n if (isNaN(this.value)) {\n this.value = min;\n } else {\n this.value = value;\n }\n this.dispatchEvent(\n new Event('input', { bubbles: true, composed: true })\n );\n this.indeterminate = false;\n this.focus();\n }\n\n private increment(factor = 1): void {\n this.stepBy(1 * factor);\n }\n\n private decrement(factor = 1): void {\n this.stepBy(-1 * factor);\n }\n\n private handleKeydown(event: KeyboardEvent): void {\n switch (event.code) {\n case 'ArrowUp':\n event.preventDefault();\n this.increment(event.shiftKey ? this.stepModifier : 1);\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.decrement(event.shiftKey ? this.stepModifier : 1);\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\n break;\n }\n }\n\n protected onScroll(event: WheelEvent): void {\n event.preventDefault();\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 }\n }\n\n protected override onFocus(): void {\n super.onFocus();\n this._trackingValue = this.inputValue;\n this.keyboardFocused = !this.readonly && true;\n this.addEventListener('wheel', this.onScroll, { passive: false });\n }\n\n protected override onBlur(): void {\n super.onBlur();\n this.keyboardFocused = !this.readonly && false;\n this.removeEventListener('wheel', this.onScroll);\n }\n\n private handleFocusin(): void {\n this.focused = !this.readonly && true;\n this.keyboardFocused = !this.readonly && true;\n }\n\n private handleFocusout(): void {\n this.focused = !this.readonly && false;\n this.keyboardFocused = !this.readonly && false;\n }\n\n private wasIndeterminate = false;\n private indeterminateValue?: number;\n\n protected override handleChange(): void {\n const value = this.convertValueToNumber(this.inputValue);\n if (this.wasIndeterminate) {\n this.wasIndeterminate = false;\n this.indeterminateValue = undefined;\n if (isNaN(value)) {\n this.indeterminate = true;\n return;\n }\n }\n this.value = value;\n super.handleChange();\n }\n\n protected override handleInput(): void {\n if (this.indeterminate) {\n this.wasIndeterminate = true;\n this.indeterminateValue = this.value;\n this.inputElement.value = this.inputElement.value.replace(\n indeterminatePlaceholder,\n ''\n );\n }\n const { value: originalValue, selectionStart } = this.inputElement;\n const value = originalValue\n .split('')\n .map((char) => remapMultiByteCharacters[char] || char)\n .join('');\n if (this.numberParser.isValidPartialNumber(value)) {\n const valueAsNumber = this.convertValueToNumber(value);\n if (!value && this.indeterminateValue) {\n this.indeterminate = true;\n this._value = this.indeterminateValue;\n } else {\n this.indeterminate = false;\n this._value = this.validateInput(valueAsNumber);\n }\n this._trackingValue = value;\n this.inputElement.value = value;\n return;\n }\n const currentLength = value.length;\n const previousLength = this._trackingValue.length;\n const nextSelectStart =\n (selectionStart || currentLength) -\n (currentLength - previousLength);\n this.inputElement.value = this.indeterminate\n ? indeterminatePlaceholder\n : this._trackingValue;\n this.inputElement.setSelectionRange(nextSelectStart, nextSelectStart);\n }\n\n private validateInput(value: number): number {\n if (typeof this.min !== 'undefined') {\n value = Math.max(this.min, value);\n }\n if (typeof this.max !== 'undefined') {\n value = Math.min(this.max, value);\n }\n // Step shouldn't validate when 0...\n if (this.step) {\n const min = typeof this.min !== 'undefined' ? this.min : 0;\n const moduloStep = (value - min) % this.step;\n const fallsOnStep = moduloStep === 0;\n if (!fallsOnStep) {\n const overUnder = Math.round(moduloStep / this.step);\n if (overUnder === 1) {\n value += this.step - moduloStep;\n } else {\n value -= moduloStep;\n }\n }\n if (typeof this.max !== 'undefined') {\n while (value > this.max) {\n value -= this.step;\n }\n }\n }\n return value;\n }\n\n protected override get displayValue(): string {\n const indeterminateValue = this.focused ? '' : indeterminatePlaceholder;\n return this.indeterminate ? indeterminateValue : this.formattedValue;\n }\n\n protected clearNumberFormatterCache(): void {\n this._numberFormatter = undefined;\n this._numberParser = undefined;\n }\n\n protected get numberFormatter(): NumberFormatter {\n if (!this._numberFormatter || !this._numberFormatterFocused) {\n const {\n style,\n unit,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n unitDisplay,\n ...formatOptionsNoUnit\n } = this.formatOptions;\n if (style !== 'unit') {\n (formatOptionsNoUnit as Intl.NumberFormatOptions).style = style;\n }\n this._numberFormatterFocused = new NumberFormatter(\n this.resolvedLanguage,\n formatOptionsNoUnit\n );\n try {\n this._numberFormatter = new NumberFormatter(\n this.resolvedLanguage,\n this.formatOptions\n );\n this._forcedUnit = '';\n this._numberFormatter.format(1);\n } catch (error) {\n if (style === 'unit') {\n this._forcedUnit = unit as string;\n }\n this._numberFormatter = this._numberFormatterFocused;\n }\n }\n return this.focused\n ? this._numberFormatterFocused\n : this._numberFormatter;\n }\n\n private _numberFormatter?: NumberFormatter;\n private _numberFormatterFocused?: NumberFormatter;\n\n protected get numberParser(): NumberParser {\n if (!this._numberParser || !this._numberParserFocused) {\n const {\n style,\n unit,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n unitDisplay,\n ...formatOptionsNoUnit\n } = this.formatOptions;\n if (style !== 'unit') {\n (formatOptionsNoUnit as Intl.NumberFormatOptions).style = style;\n }\n this._numberParserFocused = new NumberParser(\n this.resolvedLanguage,\n formatOptionsNoUnit\n );\n try {\n this._numberParser = new NumberParser(\n this.resolvedLanguage,\n this.formatOptions\n );\n this._forcedUnit = '';\n this._numberParser.parse('0');\n } catch (error) {\n if (style === 'unit') {\n this._forcedUnit = unit as string;\n }\n this._numberParser = this._numberParserFocused;\n }\n }\n return this.focused ? this._numberParserFocused : this._numberParser;\n }\n\n private _numberParser?: NumberParser;\n private _numberParserFocused?: NumberParser;\n\n protected override renderField(): TemplateResult {\n this.autocomplete = 'off';\n return html`\n ${super.renderField()}\n ${this.hideStepper\n ? html``\n : html`\n <span\n class=\"buttons\"\n @focusin=${this.handleFocusin}\n @focusout=${this.handleFocusout}\n ${streamingListener({\n start: ['pointerdown', this.handlePointerdown],\n streamInside: [\n [\n 'pointermove',\n 'pointerenter',\n 'pointerleave',\n 'pointerover',\n 'pointerout',\n ],\n this.handlePointermove,\n ],\n end: [\n ['pointerup', 'pointercancel'],\n this.handlePointerup,\n ],\n })}\n >\n <sp-action-button\n class=\"stepUp\"\n label=\"Increment\"\n tabindex=\"-1\"\n ?focused=${this.focused}\n ?disabled=${this.disabled ||\n this.readonly ||\n (typeof this.max !== 'undefined' &&\n this.value === this.max)}\n ?quiet=${this.quiet}\n >\n <sp-icon-chevron75\n slot=\"icon\"\n class=\"stepper-icon spectrum-UIIcon-ChevronUp75\"\n ></sp-icon-chevron75>\n </sp-action-button>\n <sp-action-button\n class=\"stepDown\"\n label=\"Decrement\"\n tabindex=\"-1\"\n ?focused=${this.focused}\n ?disabled=${this.disabled ||\n this.readonly ||\n (typeof this.min !== 'undefined' &&\n this.value === this.min)}\n ?quiet=${this.quiet}\n >\n <sp-icon-chevron75\n slot=\"icon\"\n class=\"stepper-icon spectrum-UIIcon-ChevronDown75\"\n ></sp-icon-chevron75>\n </sp-action-button>\n </span>\n `}\n `;\n }\n\n protected override update(changes: PropertyValues): void {\n if (changes.has('formatOptions') || changes.has('resolvedLanguage')) {\n this.clearNumberFormatterCache();\n }\n if (changes.has('value') || changes.has('max') || changes.has('min')) {\n const value = this.numberParser.parse(\n this.formattedValue.replace(this._forcedUnit, '')\n );\n this.value = value;\n }\n super.update(changes);\n }\n\n public override willUpdate(): void {\n this.multiline = false;\n }\n\n protected override firstUpdated(changes: PropertyValues): void {\n super.firstUpdated(changes);\n this.addEventListener('keydown', this.handleKeydown);\n }\n\n protected override updated(changes: PropertyValues<this>): void {\n if (changes.has('min') || changes.has('formatOptions')) {\n let inputMode = 'numeric';\n const hasNegative = typeof this.min !== 'undefined' && this.min < 0;\n const { maximumFractionDigits } = this.formatOptions;\n const hasDecimals =\n maximumFractionDigits && maximumFractionDigits > 0;\n /* c8 ignore next 18 */\n if (isIPhone()) {\n // iPhone doesn't have a minus sign in either numeric or decimal.\n // Note this is only for iPhone, not iPad, which always has both\n // minus and decimal in numeric.\n if (hasNegative) {\n inputMode = 'text';\n } else if (hasDecimals) {\n inputMode = 'decimal';\n }\n } else if (isAndroid()) {\n // Android numeric has both a decimal point and minus key.\n // decimal does not have a minus key.\n if (hasNegative) {\n inputMode = 'numeric';\n } else if (hasDecimals) {\n inputMode = 'decimal';\n }\n }\n this.inputElement.inputMode = inputMode;\n }\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n this.resolveLanguage();\n }\n\n public override disconnectedCallback(): void {\n this.resolveLanguage();\n super.disconnectedCallback();\n }\n\n private resolveLanguage(): void {\n const queryThemeEvent = new CustomEvent<ProvideLang>(\n 'sp-language-context',\n {\n bubbles: true,\n composed: true,\n detail: {\n callback: (lang: string) => {\n this.resolvedLanguage = lang;\n },\n },\n cancelable: true,\n }\n );\n this.dispatchEvent(queryThemeEvent);\n }\n}\n"],
5
- "mappings": "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",
6
- "names": []
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n CSSResultArray,\n html,\n PropertyValues,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport { ProvideLang } from '@spectrum-web-components/theme';\nimport { streamingListener } from '@spectrum-web-components/base/src/streaming-listener.js';\nimport { NumberFormatter, NumberParser } from '@internationalized/number';\n\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron75.js';\nimport '@spectrum-web-components/action-button/sp-action-button.js';\nimport {\n isAndroid,\n isIPhone,\n} from '@spectrum-web-components/shared/src/platform.js';\nimport { TextfieldBase } from '@spectrum-web-components/textfield';\nimport chevronStyles from '@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js';\nimport styles from './number-field.css.js';\n\nexport const FRAMES_PER_CHANGE = 5;\nexport const indeterminatePlaceholder = '-';\nexport const remapMultiByteCharacters: Record<string, string> = {\n '\uFF11': '1',\n '\uFF12': '2',\n '\uFF13': '3',\n '\uFF14': '4',\n '\uFF15': '5',\n '\uFF16': '6',\n '\uFF17': '7',\n '\uFF18': '8',\n '\uFF19': '9',\n '\uFF10': '0',\n '\u3001': ',',\n '\uFF0C': ',',\n '\u3002': '.',\n '\uFF0E': '.',\n '\uFF05': '%',\n '\uFF0B': '+',\n \u30FC: '-',\n};\n\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 @property({ attribute: false })\n private resolvedLanguage =\n document.documentElement.lang || navigator.language;\n\n /**\n * The distance by which to alter the value of the element when taking a \"step\".\n *\n * When `this.formatOptions.style === 'percentage'` the default step will be\n * set to 0.01 unless otherwise supplied to the element.\n */\n @property({ type: Number })\n public step?: number;\n\n public managedInput = false;\n\n @property({ type: Number, reflect: true, attribute: 'step-modifier' })\n public stepModifier = 10;\n\n @property({ type: Number })\n public override set value(rawValue: number) {\n const value = this.validateInput(rawValue);\n if (value === this.value) {\n return;\n }\n const oldValue = this._value;\n this._value = value;\n this.requestUpdate('value', oldValue);\n }\n\n public override get value(): number {\n return this._value;\n }\n\n private get inputValue(): string {\n return this.indeterminate\n ? this.formattedValue\n : this.inputElement.value;\n }\n\n public override _value = NaN;\n private _trackingValue = '';\n\n /**\n * Retreive the value of the element parsed to a Number.\n */\n public get valueAsString(): string {\n return this._value.toString();\n }\n\n public set valueAsString(value: string) {\n this.value = this.numberParser.parse(value);\n }\n\n public get formattedValue(): string {\n if (isNaN(this.value)) return '';\n return (\n this.numberFormatter.format(this.value) +\n (this.focused ? '' : this._forcedUnit)\n );\n }\n\n private convertValueToNumber(value: string): number {\n return this.numberParser.parse(value);\n }\n\n private get _step(): number {\n if (typeof this.step !== 'undefined') {\n return this.step;\n }\n if (this.formatOptions?.style === 'percent') {\n return 0.01;\n }\n return 1;\n }\n\n private nextChange!: number;\n private changeCount = 0;\n private findChange!: (event: PointerEvent) => void;\n private change!: (event: PointerEvent) => void;\n private safty!: number;\n\n private handlePointerdown(event: PointerEvent): void {\n if (event.button !== 0) {\n event.preventDefault();\n return;\n }\n this.managedInput = true;\n this.buttons.setPointerCapture(event.pointerId);\n const stepUpRect = this.buttons.children[0].getBoundingClientRect();\n const stepDownRect = this.buttons.children[1].getBoundingClientRect();\n this.findChange = (event: PointerEvent) => {\n if (\n event.clientX >= stepUpRect.x &&\n event.clientY >= stepUpRect.y &&\n event.clientX <= stepUpRect.x + stepUpRect.width &&\n event.clientY <= stepUpRect.y + stepUpRect.height\n ) {\n this.change = (event: PointerEvent) =>\n this.increment(event.shiftKey ? this.stepModifier : 1);\n } else if (\n event.clientX >= stepDownRect.x &&\n event.clientY >= stepDownRect.y &&\n event.clientX <= stepDownRect.x + stepDownRect.width &&\n event.clientY <= stepDownRect.y + stepDownRect.height\n ) {\n this.change = (event: PointerEvent) =>\n this.decrement(event.shiftKey ? this.stepModifier : 1);\n }\n };\n this.findChange(event);\n this.startChange(event);\n }\n\n private startChange(event: PointerEvent): void {\n this.changeCount = 0;\n this.doChange(event);\n this.safty = setTimeout(() => {\n this.doNextChange(event);\n }, 400) as unknown as number;\n }\n\n private doChange(event: PointerEvent): void {\n this.change(event);\n }\n\n private handlePointermove(event: PointerEvent): void {\n this.findChange(event);\n }\n\n private handlePointerup(event: PointerEvent): void {\n this.buttons.releasePointerCapture(event.pointerId);\n cancelAnimationFrame(this.nextChange);\n clearTimeout(this.safty);\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\n this.managedInput = false;\n }\n\n private doNextChange(event: PointerEvent): number {\n this.changeCount += 1;\n if (this.changeCount % FRAMES_PER_CHANGE === 0) {\n this.doChange(event);\n }\n return requestAnimationFrame(() => {\n this.nextChange = this.doNextChange(event);\n });\n }\n\n private stepBy(count: number): void {\n if (this.disabled || this.readonly) {\n return;\n }\n const min = typeof this.min !== 'undefined' ? this.min : 0;\n let value = this.value;\n value += count * this._step;\n if (isNaN(this.value)) {\n this.value = min;\n } else {\n this.value = value;\n }\n this.dispatchEvent(\n new Event('input', { bubbles: true, composed: true })\n );\n this.indeterminate = false;\n this.focus();\n }\n\n private increment(factor = 1): void {\n this.stepBy(1 * factor);\n }\n\n private decrement(factor = 1): void {\n this.stepBy(-1 * factor);\n }\n\n private handleKeydown(event: KeyboardEvent): void {\n switch (event.code) {\n case 'ArrowUp':\n event.preventDefault();\n this.increment(event.shiftKey ? this.stepModifier : 1);\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.decrement(event.shiftKey ? this.stepModifier : 1);\n this.dispatchEvent(\n new Event('change', { bubbles: true, composed: true })\n );\n break;\n }\n }\n\n 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 }\n this.managedInput = false;\n }\n\n protected override onFocus(): void {\n super.onFocus();\n this._trackingValue = this.inputValue;\n this.keyboardFocused = !this.readonly && true;\n this.addEventListener('wheel', this.onScroll, { passive: false });\n }\n\n protected override onBlur(): void {\n super.onBlur();\n this.keyboardFocused = !this.readonly && false;\n this.removeEventListener('wheel', this.onScroll);\n }\n\n private handleFocusin(): void {\n this.focused = !this.readonly && true;\n this.keyboardFocused = !this.readonly && true;\n }\n\n private handleFocusout(): void {\n this.focused = !this.readonly && false;\n this.keyboardFocused = !this.readonly && false;\n }\n\n private wasIndeterminate = false;\n private indeterminateValue?: number;\n\n protected override handleChange(): void {\n const value = this.convertValueToNumber(this.inputValue);\n if (this.wasIndeterminate) {\n this.wasIndeterminate = false;\n this.indeterminateValue = undefined;\n if (isNaN(value)) {\n this.indeterminate = true;\n return;\n }\n }\n this.value = value;\n super.handleChange();\n }\n\n protected override handleInput(): void {\n if (this.indeterminate) {\n this.wasIndeterminate = true;\n this.indeterminateValue = this.value;\n this.inputElement.value = this.inputElement.value.replace(\n indeterminatePlaceholder,\n ''\n );\n }\n const { value: originalValue, selectionStart } = this.inputElement;\n const value = originalValue\n .split('')\n .map((char) => remapMultiByteCharacters[char] || char)\n .join('');\n if (this.numberParser.isValidPartialNumber(value)) {\n const valueAsNumber = this.convertValueToNumber(value);\n if (!value && this.indeterminateValue) {\n this.indeterminate = true;\n this._value = this.indeterminateValue;\n } else {\n this.indeterminate = false;\n this._value = this.validateInput(valueAsNumber);\n }\n this._trackingValue = value;\n this.inputElement.value = value;\n return;\n }\n const currentLength = value.length;\n const previousLength = this._trackingValue.length;\n const nextSelectStart =\n (selectionStart || currentLength) -\n (currentLength - previousLength);\n this.inputElement.value = this.indeterminate\n ? indeterminatePlaceholder\n : this._trackingValue;\n this.inputElement.setSelectionRange(nextSelectStart, nextSelectStart);\n }\n\n private validateInput(value: number): number {\n if (typeof this.min !== 'undefined') {\n value = Math.max(this.min, value);\n }\n if (typeof this.max !== 'undefined') {\n value = Math.min(this.max, value);\n }\n // Step shouldn't validate when 0...\n if (this.step) {\n const min = typeof this.min !== 'undefined' ? this.min : 0;\n const moduloStep = (value - min) % this.step;\n const fallsOnStep = moduloStep === 0;\n if (!fallsOnStep) {\n const overUnder = Math.round(moduloStep / this.step);\n if (overUnder === 1) {\n value += this.step - moduloStep;\n } else {\n value -= moduloStep;\n }\n }\n if (typeof this.max !== 'undefined') {\n while (value > this.max) {\n value -= this.step;\n }\n }\n }\n return value;\n }\n\n protected override get displayValue(): string {\n const indeterminateValue = this.focused ? '' : indeterminatePlaceholder;\n return this.indeterminate ? indeterminateValue : this.formattedValue;\n }\n\n protected clearNumberFormatterCache(): void {\n this._numberFormatter = undefined;\n this._numberParser = undefined;\n }\n\n protected get numberFormatter(): NumberFormatter {\n if (!this._numberFormatter || !this._numberFormatterFocused) {\n const {\n style,\n unit,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n unitDisplay,\n ...formatOptionsNoUnit\n } = this.formatOptions;\n if (style !== 'unit') {\n (formatOptionsNoUnit as Intl.NumberFormatOptions).style = style;\n }\n this._numberFormatterFocused = new NumberFormatter(\n this.resolvedLanguage,\n formatOptionsNoUnit\n );\n try {\n this._numberFormatter = new NumberFormatter(\n this.resolvedLanguage,\n this.formatOptions\n );\n this._forcedUnit = '';\n this._numberFormatter.format(1);\n } catch (error) {\n if (style === 'unit') {\n this._forcedUnit = unit as string;\n }\n this._numberFormatter = this._numberFormatterFocused;\n }\n }\n return this.focused\n ? this._numberFormatterFocused\n : this._numberFormatter;\n }\n\n private _numberFormatter?: NumberFormatter;\n private _numberFormatterFocused?: NumberFormatter;\n\n protected get numberParser(): NumberParser {\n if (!this._numberParser || !this._numberParserFocused) {\n const {\n style,\n unit,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n unitDisplay,\n ...formatOptionsNoUnit\n } = this.formatOptions;\n if (style !== 'unit') {\n (formatOptionsNoUnit as Intl.NumberFormatOptions).style = style;\n }\n this._numberParserFocused = new NumberParser(\n this.resolvedLanguage,\n formatOptionsNoUnit\n );\n try {\n this._numberParser = new NumberParser(\n this.resolvedLanguage,\n this.formatOptions\n );\n this._forcedUnit = '';\n this._numberParser.parse('0');\n } catch (error) {\n if (style === 'unit') {\n this._forcedUnit = unit as string;\n }\n this._numberParser = this._numberParserFocused;\n }\n }\n return this.focused ? this._numberParserFocused : this._numberParser;\n }\n\n private _numberParser?: NumberParser;\n private _numberParserFocused?: NumberParser;\n\n protected override renderField(): TemplateResult {\n this.autocomplete = 'off';\n return html`\n ${super.renderField()}\n ${this.hideStepper\n ? html``\n : html`\n <span\n class=\"buttons\"\n @focusin=${this.handleFocusin}\n @focusout=${this.handleFocusout}\n ${streamingListener({\n start: ['pointerdown', this.handlePointerdown],\n streamInside: [\n [\n 'pointermove',\n 'pointerenter',\n 'pointerleave',\n 'pointerover',\n 'pointerout',\n ],\n this.handlePointermove,\n ],\n end: [\n ['pointerup', 'pointercancel'],\n this.handlePointerup,\n ],\n })}\n >\n <sp-action-button\n class=\"stepUp\"\n label=\"Increment\"\n tabindex=\"-1\"\n ?focused=${this.focused}\n ?disabled=${this.disabled ||\n this.readonly ||\n (typeof this.max !== 'undefined' &&\n this.value === this.max)}\n ?quiet=${this.quiet}\n >\n <sp-icon-chevron75\n slot=\"icon\"\n class=\"stepper-icon spectrum-UIIcon-ChevronUp75\"\n ></sp-icon-chevron75>\n </sp-action-button>\n <sp-action-button\n class=\"stepDown\"\n label=\"Decrement\"\n tabindex=\"-1\"\n ?focused=${this.focused}\n ?disabled=${this.disabled ||\n this.readonly ||\n (typeof this.min !== 'undefined' &&\n this.value === this.min)}\n ?quiet=${this.quiet}\n >\n <sp-icon-chevron75\n slot=\"icon\"\n class=\"stepper-icon spectrum-UIIcon-ChevronDown75\"\n ></sp-icon-chevron75>\n </sp-action-button>\n </span>\n `}\n `;\n }\n\n protected override update(changes: PropertyValues): void {\n if (changes.has('formatOptions') || changes.has('resolvedLanguage')) {\n this.clearNumberFormatterCache();\n }\n if (changes.has('value') || changes.has('max') || changes.has('min')) {\n const value = this.numberParser.parse(\n this.formattedValue.replace(this._forcedUnit, '')\n );\n this.value = value;\n }\n super.update(changes);\n }\n\n public override willUpdate(): void {\n this.multiline = false;\n }\n\n protected override firstUpdated(changes: PropertyValues): void {\n super.firstUpdated(changes);\n this.addEventListener('keydown', this.handleKeydown);\n }\n\n protected override updated(changes: PropertyValues<this>): void {\n if (changes.has('min') || changes.has('formatOptions')) {\n let inputMode = 'numeric';\n const hasNegative = typeof this.min !== 'undefined' && this.min < 0;\n const { maximumFractionDigits } = this.formatOptions;\n const hasDecimals =\n maximumFractionDigits && maximumFractionDigits > 0;\n /* c8 ignore next 18 */\n if (isIPhone()) {\n // iPhone doesn't have a minus sign in either numeric or decimal.\n // Note this is only for iPhone, not iPad, which always has both\n // minus and decimal in numeric.\n if (hasNegative) {\n inputMode = 'text';\n } else if (hasDecimals) {\n inputMode = 'decimal';\n }\n } else if (isAndroid()) {\n // Android numeric has both a decimal point and minus key.\n // decimal does not have a minus key.\n if (hasNegative) {\n inputMode = 'numeric';\n } else if (hasDecimals) {\n inputMode = 'decimal';\n }\n }\n this.inputElement.inputMode = inputMode;\n }\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n this.resolveLanguage();\n }\n\n public override disconnectedCallback(): void {\n this.resolveLanguage();\n super.disconnectedCallback();\n }\n\n private resolveLanguage(): void {\n const queryThemeEvent = new CustomEvent<ProvideLang>(\n 'sp-language-context',\n {\n bubbles: true,\n composed: true,\n detail: {\n callback: (lang: string) => {\n this.resolvedLanguage = lang;\n },\n },\n cancelable: true,\n }\n );\n this.dispatchEvent(queryThemeEvent);\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["event"]
7
7
  }
@@ -1,11 +1,11 @@
1
- var c=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var n=(h,e,t,i)=>{for(var r=i>1?void 0:i?m(e,t):e,s=h.length-1,o;s>=0;s--)(o=h[s])&&(r=(i?o(e,t,r):o(r))||r);return i&&r&&c(e,t,r),r};import{html as d}from"@spectrum-web-components/base";import{property as a,query as f}from"@spectrum-web-components/base/src/decorators.js";import{streamingListener as v}from"@spectrum-web-components/base/src/streaming-listener.js";import{NumberFormatter as l,NumberParser as p}from"@internationalized/number";import"@spectrum-web-components/icons-ui/icons/sp-icon-chevron75.js";import"@spectrum-web-components/action-button/sp-action-button.js";import{isAndroid as b,isIPhone as g}from"@spectrum-web-components/shared/src/platform.js";import{TextfieldBase as y}from"@spectrum-web-components/textfield";import P from"@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js";import _ from"./number-field.css.js";export const FRAMES_PER_CHANGE=5,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:"-"};export class NumberField extends y{constructor(){super(...arguments);this.focused=!1;this._forcedUnit="";this.formatOptions={};this.hideStepper=!1;this.indeterminate=!1;this.keyboardFocused=!1;this.resolvedLanguage=document.documentElement.lang||navigator.language;this.stepperActive=!1;this.stepModifier=10;this._value=NaN;this._trackingValue="";this.changeCount=0;this.wasIndeterminate=!1}static get styles(){return[...super.styles,_,P]}set value(e){const t=this.validateInput(e);if(t===this.value)return;const i=this._value;this._value=t,this.requestUpdate("value",i)}get value(){return this._value}get inputValue(){return this.indeterminate?this.formattedValue:this.inputElement.value}get valueAsString(){return this._value.toString()}set valueAsString(e){this.value=this.numberParser.parse(e)}get formattedValue(){return isNaN(this.value)?"":this.numberFormatter.format(this.value)+(this.focused?"":this._forcedUnit)}convertValueToNumber(e){return this.numberParser.parse(e)}get _step(){var e;return typeof this.step!="undefined"?this.step:((e=this.formatOptions)==null?void 0:e.style)==="percent"?.01:1}handlePointerdown(e){if(e.button!==0){e.preventDefault();return}this.stepperActive=!0,this.buttons.setPointerCapture(e.pointerId);const t=this.buttons.children[0].getBoundingClientRect(),i=this.buttons.children[1].getBoundingClientRect();this.findChange=r=>{r.clientX>=t.x&&r.clientY>=t.y&&r.clientX<=t.x+t.width&&r.clientY<=t.y+t.height?this.change=s=>this.increment(s.shiftKey?this.stepModifier:1):r.clientX>=i.x&&r.clientY>=i.y&&r.clientX<=i.x+i.width&&r.clientY<=i.y+i.height&&(this.change=s=>this.decrement(s.shiftKey?this.stepModifier:1))},this.findChange(e),this.startChange(e)}startChange(e){this.changeCount=0,this.doChange(e),this.safty=setTimeout(()=>{this.doNextChange(e)},400)}doChange(e){this.change(e)}handlePointermove(e){this.findChange(e)}handlePointerup(e){this.buttons.releasePointerCapture(e.pointerId),cancelAnimationFrame(this.nextChange),clearTimeout(this.safty),this.dispatchEvent(new Event("change",{bubbles:!0,composed:!0})),this.stepperActive=!1}doNextChange(e){return this.changeCount+=1,this.changeCount%FRAMES_PER_CHANGE===0&&this.doChange(e),requestAnimationFrame(()=>{this.nextChange=this.doNextChange(e)})}stepBy(e){if(this.disabled||this.readonly)return;const t=typeof this.min!="undefined"?this.min:0;let i=this.value;i+=e*this._step,isNaN(this.value)?this.value=t:this.value=i,this.dispatchEvent(new Event("input",{bubbles:!0,composed:!0})),this.indeterminate=!1,this.focus()}increment(e=1){this.stepBy(1*e)}decrement(e=1){this.stepBy(-1*e)}handleKeydown(e){switch(e.code){case"ArrowUp":e.preventDefault(),this.increment(e.shiftKey?this.stepModifier:1),this.dispatchEvent(new Event("change",{bubbles:!0,composed:!0}));break;case"ArrowDown":e.preventDefault(),this.decrement(e.shiftKey?this.stepModifier:1),this.dispatchEvent(new Event("change",{bubbles:!0,composed:!0}));break}}onScroll(e){e.preventDefault();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))}onFocus(){super.onFocus(),this._trackingValue=this.inputValue,this.keyboardFocused=!this.readonly&&!0,this.addEventListener("wheel",this.onScroll,{passive:!1})}onBlur(){super.onBlur(),this.keyboardFocused=!this.readonly&&!1,this.removeEventListener("wheel",this.onScroll)}handleFocusin(){this.focused=!this.readonly&&!0,this.keyboardFocused=!this.readonly&&!0}handleFocusout(){this.focused=!this.readonly&&!1,this.keyboardFocused=!this.readonly&&!1}handleChange(){const e=this.convertValueToNumber(this.inputValue);if(this.wasIndeterminate&&(this.wasIndeterminate=!1,this.indeterminateValue=void 0,isNaN(e))){this.indeterminate=!0;return}this.value=e,super.handleChange()}handleInput(){this.indeterminate&&(this.wasIndeterminate=!0,this.indeterminateValue=this.value,this.inputElement.value=this.inputElement.value.replace(indeterminatePlaceholder,""));const{value:e,selectionStart:t}=this.inputElement,i=e.split("").map(u=>remapMultiByteCharacters[u]||u).join("");if(this.numberParser.isValidPartialNumber(i)){const u=this.convertValueToNumber(i);!i&&this.indeterminateValue?(this.indeterminate=!0,this._value=this.indeterminateValue):(this.indeterminate=!1,this._value=this.validateInput(u)),this._trackingValue=i,this.inputElement.value=i;return}const r=i.length,s=this._trackingValue.length,o=(t||r)-(r-s);this.inputElement.value=this.indeterminate?indeterminatePlaceholder:this._trackingValue,this.inputElement.setSelectionRange(o,o)}validateInput(e){if(typeof this.min!="undefined"&&(e=Math.max(this.min,e)),typeof this.max!="undefined"&&(e=Math.min(this.max,e)),this.step){const t=typeof this.min!="undefined"?this.min:0,i=(e-t)%this.step;if(i===0||(Math.round(i/this.step)===1?e+=this.step-i:e-=i),typeof this.max!="undefined")for(;e>this.max;)e-=this.step}return e}get displayValue(){const e=this.focused?"":indeterminatePlaceholder;return this.indeterminate?e:this.formattedValue}clearNumberFormatterCache(){this._numberFormatter=void 0,this._numberParser=void 0}get numberFormatter(){if(!this._numberFormatter||!this._numberFormatterFocused){const{style:e,unit:t,unitDisplay:i,...r}=this.formatOptions;e!=="unit"&&(r.style=e),this._numberFormatterFocused=new l(this.resolvedLanguage,r);try{this._numberFormatter=new l(this.resolvedLanguage,this.formatOptions),this._forcedUnit="",this._numberFormatter.format(1)}catch(s){e==="unit"&&(this._forcedUnit=t),this._numberFormatter=this._numberFormatterFocused}}return this.focused?this._numberFormatterFocused:this._numberFormatter}get numberParser(){if(!this._numberParser||!this._numberParserFocused){const{style:e,unit:t,unitDisplay:i,...r}=this.formatOptions;e!=="unit"&&(r.style=e),this._numberParserFocused=new p(this.resolvedLanguage,r);try{this._numberParser=new p(this.resolvedLanguage,this.formatOptions),this._forcedUnit="",this._numberParser.parse("0")}catch(s){e==="unit"&&(this._forcedUnit=t),this._numberParser=this._numberParserFocused}}return this.focused?this._numberParserFocused:this._numberParser}renderField(){return this.autocomplete="off",d`
1
+ "use strict";var m=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var n=(h,o,e,t)=>{for(var i=t>1?void 0:t?f(o,e):o,r=h.length-1,s;r>=0;r--)(s=h[r])&&(i=(t?s(o,e,i):s(i))||i);return t&&i&&m(o,e,i),i};import{html as d}from"@spectrum-web-components/base";import{property as a,query as v}from"@spectrum-web-components/base/src/decorators.js";import{streamingListener as b}from"@spectrum-web-components/base/src/streaming-listener.js";import{NumberFormatter as p,NumberParser as c}from"@internationalized/number";import"@spectrum-web-components/icons-ui/icons/sp-icon-chevron75.js";import"@spectrum-web-components/action-button/sp-action-button.js";import{isAndroid as g,isIPhone as y}from"@spectrum-web-components/shared/src/platform.js";import{TextfieldBase as P}from"@spectrum-web-components/textfield";import _ from"@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js";import E from"./number-field.css.js";export const FRAMES_PER_CHANGE=5,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:"-"};export class NumberField extends P{constructor(){super(...arguments);this.focused=!1;this._forcedUnit="";this.formatOptions={};this.hideStepper=!1;this.indeterminate=!1;this.keyboardFocused=!1;this.resolvedLanguage=document.documentElement.lang||navigator.language;this.managedInput=!1;this.stepModifier=10;this._value=NaN;this._trackingValue="";this.changeCount=0;this.wasIndeterminate=!1}static get styles(){return[...super.styles,E,_]}set value(e){const t=this.validateInput(e);if(t===this.value)return;const i=this._value;this._value=t,this.requestUpdate("value",i)}get value(){return this._value}get inputValue(){return this.indeterminate?this.formattedValue:this.inputElement.value}get valueAsString(){return this._value.toString()}set valueAsString(e){this.value=this.numberParser.parse(e)}get formattedValue(){return isNaN(this.value)?"":this.numberFormatter.format(this.value)+(this.focused?"":this._forcedUnit)}convertValueToNumber(e){return this.numberParser.parse(e)}get _step(){var e;return typeof this.step!="undefined"?this.step:((e=this.formatOptions)==null?void 0:e.style)==="percent"?.01:1}handlePointerdown(e){if(e.button!==0){e.preventDefault();return}this.managedInput=!0,this.buttons.setPointerCapture(e.pointerId);const t=this.buttons.children[0].getBoundingClientRect(),i=this.buttons.children[1].getBoundingClientRect();this.findChange=r=>{r.clientX>=t.x&&r.clientY>=t.y&&r.clientX<=t.x+t.width&&r.clientY<=t.y+t.height?this.change=s=>this.increment(s.shiftKey?this.stepModifier:1):r.clientX>=i.x&&r.clientY>=i.y&&r.clientX<=i.x+i.width&&r.clientY<=i.y+i.height&&(this.change=s=>this.decrement(s.shiftKey?this.stepModifier:1))},this.findChange(e),this.startChange(e)}startChange(e){this.changeCount=0,this.doChange(e),this.safty=setTimeout(()=>{this.doNextChange(e)},400)}doChange(e){this.change(e)}handlePointermove(e){this.findChange(e)}handlePointerup(e){this.buttons.releasePointerCapture(e.pointerId),cancelAnimationFrame(this.nextChange),clearTimeout(this.safty),this.dispatchEvent(new Event("change",{bubbles:!0,composed:!0})),this.managedInput=!1}doNextChange(e){return this.changeCount+=1,this.changeCount%FRAMES_PER_CHANGE===0&&this.doChange(e),requestAnimationFrame(()=>{this.nextChange=this.doNextChange(e)})}stepBy(e){if(this.disabled||this.readonly)return;const t=typeof this.min!="undefined"?this.min:0;let i=this.value;i+=e*this._step,isNaN(this.value)?this.value=t:this.value=i,this.dispatchEvent(new Event("input",{bubbles:!0,composed:!0})),this.indeterminate=!1,this.focus()}increment(e=1){this.stepBy(1*e)}decrement(e=1){this.stepBy(-1*e)}handleKeydown(e){switch(e.code){case"ArrowUp":e.preventDefault(),this.increment(e.shiftKey?this.stepModifier:1),this.dispatchEvent(new Event("change",{bubbles:!0,composed:!0}));break;case"ArrowDown":e.preventDefault(),this.decrement(e.shiftKey?this.stepModifier:1),this.dispatchEvent(new Event("change",{bubbles:!0,composed:!0}));break}}onScroll(e){e.preventDefault(),this.managedInput=!0;const t=e.shiftKey?e.deltaX/Math.abs(e.deltaX):e.deltaY/Math.abs(e.deltaY);t!==0&&!isNaN(t)&&this.stepBy(t*(e.shiftKey?this.stepModifier:1)),this.managedInput=!1}onFocus(){super.onFocus(),this._trackingValue=this.inputValue,this.keyboardFocused=!this.readonly&&!0,this.addEventListener("wheel",this.onScroll,{passive:!1})}onBlur(){super.onBlur(),this.keyboardFocused=!this.readonly&&!1,this.removeEventListener("wheel",this.onScroll)}handleFocusin(){this.focused=!this.readonly&&!0,this.keyboardFocused=!this.readonly&&!0}handleFocusout(){this.focused=!this.readonly&&!1,this.keyboardFocused=!this.readonly&&!1}handleChange(){const e=this.convertValueToNumber(this.inputValue);if(this.wasIndeterminate&&(this.wasIndeterminate=!1,this.indeterminateValue=void 0,isNaN(e))){this.indeterminate=!0;return}this.value=e,super.handleChange()}handleInput(){this.indeterminate&&(this.wasIndeterminate=!0,this.indeterminateValue=this.value,this.inputElement.value=this.inputElement.value.replace(indeterminatePlaceholder,""));const{value:e,selectionStart:t}=this.inputElement,i=e.split("").map(u=>remapMultiByteCharacters[u]||u).join("");if(this.numberParser.isValidPartialNumber(i)){const u=this.convertValueToNumber(i);!i&&this.indeterminateValue?(this.indeterminate=!0,this._value=this.indeterminateValue):(this.indeterminate=!1,this._value=this.validateInput(u)),this._trackingValue=i,this.inputElement.value=i;return}const r=i.length,s=this._trackingValue.length,l=(t||r)-(r-s);this.inputElement.value=this.indeterminate?indeterminatePlaceholder:this._trackingValue,this.inputElement.setSelectionRange(l,l)}validateInput(e){if(typeof this.min!="undefined"&&(e=Math.max(this.min,e)),typeof this.max!="undefined"&&(e=Math.min(this.max,e)),this.step){const t=typeof this.min!="undefined"?this.min:0,i=(e-t)%this.step;if(i===0||(Math.round(i/this.step)===1?e+=this.step-i:e-=i),typeof this.max!="undefined")for(;e>this.max;)e-=this.step}return e}get displayValue(){const e=this.focused?"":indeterminatePlaceholder;return this.indeterminate?e:this.formattedValue}clearNumberFormatterCache(){this._numberFormatter=void 0,this._numberParser=void 0}get numberFormatter(){if(!this._numberFormatter||!this._numberFormatterFocused){const{style:e,unit:t,unitDisplay:i,...r}=this.formatOptions;e!=="unit"&&(r.style=e),this._numberFormatterFocused=new p(this.resolvedLanguage,r);try{this._numberFormatter=new p(this.resolvedLanguage,this.formatOptions),this._forcedUnit="",this._numberFormatter.format(1)}catch(s){e==="unit"&&(this._forcedUnit=t),this._numberFormatter=this._numberFormatterFocused}}return this.focused?this._numberFormatterFocused:this._numberFormatter}get numberParser(){if(!this._numberParser||!this._numberParserFocused){const{style:e,unit:t,unitDisplay:i,...r}=this.formatOptions;e!=="unit"&&(r.style=e),this._numberParserFocused=new c(this.resolvedLanguage,r);try{this._numberParser=new c(this.resolvedLanguage,this.formatOptions),this._forcedUnit="",this._numberParser.parse("0")}catch(s){e==="unit"&&(this._forcedUnit=t),this._numberParser=this._numberParserFocused}}return this.focused?this._numberParserFocused:this._numberParser}renderField(){return this.autocomplete="off",d`
2
2
  ${super.renderField()}
3
3
  ${this.hideStepper?d``:d`
4
4
  <span
5
5
  class="buttons"
6
6
  @focusin=${this.handleFocusin}
7
7
  @focusout=${this.handleFocusout}
8
- ${v({start:["pointerdown",this.handlePointerdown],streamInside:[["pointermove","pointerenter","pointerleave","pointerover","pointerout"],this.handlePointermove],end:[["pointerup","pointercancel"],this.handlePointerup]})}
8
+ ${b({start:["pointerdown",this.handlePointerdown],streamInside:[["pointermove","pointerenter","pointerleave","pointerover","pointerout"],this.handlePointermove],end:[["pointerup","pointercancel"],this.handlePointerup]})}
9
9
  >
10
10
  <sp-action-button
11
11
  class="stepUp"
@@ -35,5 +35,5 @@ var c=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var n=(h,e,t,i
35
35
  </sp-action-button>
36
36
  </span>
37
37
  `}
38
- `}update(e){if((e.has("formatOptions")||e.has("resolvedLanguage"))&&this.clearNumberFormatterCache(),e.has("value")||e.has("max")||e.has("min")){const t=this.numberParser.parse(this.formattedValue.replace(this._forcedUnit,""));this.value=t}super.update(e)}willUpdate(){this.multiline=!1}firstUpdated(e){super.firstUpdated(e),this.addEventListener("keydown",this.handleKeydown)}updated(e){if(e.has("min")||e.has("formatOptions")){let t="numeric";const i=typeof this.min!="undefined"&&this.min<0,{maximumFractionDigits:r}=this.formatOptions,s=r&&r>0;g()?i?t="text":s&&(t="decimal"):b()&&(i?t="numeric":s&&(t="decimal")),this.inputElement.inputMode=t}}connectedCallback(){super.connectedCallback(),this.resolveLanguage()}disconnectedCallback(){this.resolveLanguage(),super.disconnectedCallback()}resolveLanguage(){const e=new CustomEvent("sp-language-context",{bubbles:!0,composed:!0,detail:{callback:t=>{this.resolvedLanguage=t}},cancelable:!0});this.dispatchEvent(e)}}n([f(".buttons")],NumberField.prototype,"buttons",2),n([a({type:Boolean,reflect:!0})],NumberField.prototype,"focused",2),n([a({type:Object,attribute:"format-options"})],NumberField.prototype,"formatOptions",2),n([a({type:Boolean,reflect:!0,attribute:"hide-stepper"})],NumberField.prototype,"hideStepper",2),n([a({type:Boolean,reflect:!0})],NumberField.prototype,"indeterminate",2),n([a({type:Boolean,reflect:!0,attribute:"keyboard-focused"})],NumberField.prototype,"keyboardFocused",2),n([a({type:Number})],NumberField.prototype,"max",2),n([a({type:Number})],NumberField.prototype,"min",2),n([a({attribute:!1})],NumberField.prototype,"resolvedLanguage",2),n([a({type:Number})],NumberField.prototype,"step",2),n([a({type:Number,reflect:!0,attribute:"step-modifier"})],NumberField.prototype,"stepModifier",2),n([a({type:Number})],NumberField.prototype,"value",1);
38
+ `}update(e){if((e.has("formatOptions")||e.has("resolvedLanguage"))&&this.clearNumberFormatterCache(),e.has("value")||e.has("max")||e.has("min")){const t=this.numberParser.parse(this.formattedValue.replace(this._forcedUnit,""));this.value=t}super.update(e)}willUpdate(){this.multiline=!1}firstUpdated(e){super.firstUpdated(e),this.addEventListener("keydown",this.handleKeydown)}updated(e){if(e.has("min")||e.has("formatOptions")){let t="numeric";const i=typeof this.min!="undefined"&&this.min<0,{maximumFractionDigits:r}=this.formatOptions,s=r&&r>0;y()?i?t="text":s&&(t="decimal"):g()&&(i?t="numeric":s&&(t="decimal")),this.inputElement.inputMode=t}}connectedCallback(){super.connectedCallback(),this.resolveLanguage()}disconnectedCallback(){this.resolveLanguage(),super.disconnectedCallback()}resolveLanguage(){const e=new CustomEvent("sp-language-context",{bubbles:!0,composed:!0,detail:{callback:t=>{this.resolvedLanguage=t}},cancelable:!0});this.dispatchEvent(e)}}n([v(".buttons")],NumberField.prototype,"buttons",2),n([a({type:Boolean,reflect:!0})],NumberField.prototype,"focused",2),n([a({type:Object,attribute:"format-options"})],NumberField.prototype,"formatOptions",2),n([a({type:Boolean,reflect:!0,attribute:"hide-stepper"})],NumberField.prototype,"hideStepper",2),n([a({type:Boolean,reflect:!0})],NumberField.prototype,"indeterminate",2),n([a({type:Boolean,reflect:!0,attribute:"keyboard-focused"})],NumberField.prototype,"keyboardFocused",2),n([a({type:Number})],NumberField.prototype,"max",2),n([a({type:Number})],NumberField.prototype,"min",2),n([a({attribute:!1})],NumberField.prototype,"resolvedLanguage",2),n([a({type:Number})],NumberField.prototype,"step",2),n([a({type:Number,reflect:!0,attribute:"step-modifier"})],NumberField.prototype,"stepModifier",2),n([a({type:Number})],NumberField.prototype,"value",1);
39
39
  //# sourceMappingURL=NumberField.js.map