{"version":3,"names":["CSS","loader","clearButton","editingEnabled","inlineChild","inputIcon","prefix","suffix","numberButtonWrapper","buttonItemHorizontal","wrapper","inputWrapper","actionWrapper","resizeIconWrapper","numberButtonItem","IDS","validationMessage","SLOTS","action","inputNumberCss","CalciteInputNumberStyle0","InputNumber","this","previousValueOrigin","mutationObserver","createObserver","setDisabledAction","userChangedValue","keyDownHandler","event","readOnly","disabled","defaultPrevented","isClearable","key","clearInputValue","preventDefault","submitForm","nativeEvent","setNumberValue","committing","origin","value","emitChangeIfUserModified","previousEmittedNumberValue","calciteInputNumberChange","emit","setPreviousEmittedNumberValue","inputNumberBlurHandler","window","clearInterval","nudgeNumberValueIntervalId","calciteInternalInputNumberBlur","clickHandler","composedPath","includes","inputWrapperEl","actionWrapperEl","setFocus","inputNumberFocusHandler","calciteInternalInputNumberFocus","inputNumberInputHandler","target","numberStringFormatter","numberFormatOptions","locale","effectiveLocale","numberingSystem","useGrouping","groupSeparator","delocalizedValue","delocalize","inputType","isValidNumber","integer","parseNumberString","childNumberEl","displayedValue","inputNumberKeyDownHandler","nudgeNumberValue","supportedKeys","numberKeys","altKey","ctrlKey","metaKey","isShiftTabEvent","shiftKey","decimal","indexOf","test","split","length","direction","KeyboardEvent","repeat","inputMax","maxString","parseFloat","inputMin","minString","valueNudgeDelayInMs","incrementOrDecrementNumberValue","firstValueNudge","setInterval","nudgeButtonPointerUpHandler","isPrimaryPointerButton","nudgeButtonPointerOutHandler","nudgeButtonPointerDownHandler","dataset","adjustment","onHiddenFormInputInput","name","stopPropagation","setChildNumberElRef","el","setInputNumberValue","newInputValue","normalizeValue","setPreviousNumberValue","previousValue","isValueDeleted","valueHandleInteger","replace","hasTrailingDecimalSeparator","charAt","sanitizedValue","sanitizeNumberString","newValue","newLocalizedValue","localize","addLocalizedTrailingDecimalZeros","calciteInputNumberInputEvent","calciteInputNumberInput","inputNumberKeyUpHandler","valid","badInput","customError","patternMismatch","rangeOverflow","rangeUnderflow","stepMismatch","tooLong","tooShort","typeMismatch","valueMissing","handleGlobalAttributesChanged","forceUpdate","disabledWatcher","maxWatcher","max","toString","minWatcher","min","onMessagesChange","valueWatcher","warnAboutInvalidNumberValue","updateRequestedIcon","requestedIcon","setRequestedIcon","icon","clearable","effectiveLocaleWatcher","updateMessages","connectedCallback","connectLocalized","connectMessages","inlineEditableEl","closest","connectLabel","connectForm","observe","childList","addEventListener","internalHiddenInputInputEvent","componentDidLoad","setComponentLoaded","disconnectedCallback","disconnectLabel","disconnectForm","disconnectLocalized","disconnectMessages","disconnect","removeEventListener","componentWillLoad","setUpLoadableComponent","setUpMessages","componentShouldUpdate","oldValue","property","componentDidRender","updateHostInteraction","componentFocusable","focus","selectText","select","onLabelClick","stepHandleInteger","step","Math","round","inputStep","abs","inputVal","BigDecimal","nudgedValue","add","nudgedValueBelowInputMin","isNaN","subtract","isNegative","nudgedValueAboveInputMax","finalValue","syncHiddenFormInput","input","slottedActionEl","getSlotted","getAttribute","slottedActionElDisabledInternally","setAttribute","removeAttribute","console","warn","render","dir","getElementDir","h","class","label","messages","loading","type","inputClearButton","clear","onClick","tabIndex","scale","getIconScale","iconEl","flipRtl","iconFlipRtl","isHorizontalNumberButton","numberButtonType","numberButtonsHorizontalUp","onPointerDown","onPointerOut","onPointerUp","numberButtonsHorizontalDown","numberButtonsVertical","prefixText","suffixText","childEl","toAriaBoolean","status","getLabelText","autocomplete","autofocus","defaultValue","enterKeyHint","inputMode","maxLength","minLength","undefined","onBlur","onFocus","onInput","onKeyDown","onKeyUp","placeholder","ref","Host","InteractiveContainer","CSS_UTILITY","rtl","HiddenFormInputSlot","component","Validation","validationIcon","id","message"],"sources":["src/components/input-number/resources.ts","src/components/input-number/input-number.scss?tag=calcite-input-number&encapsulation=shadow","src/components/input-number/input-number.tsx"],"sourcesContent":["export const CSS = {\n loader: \"loader\",\n clearButton: \"clear-button\",\n editingEnabled: \"editing-enabled\",\n inlineChild: \"inline-child\",\n inputIcon: \"icon\",\n prefix: \"prefix\",\n suffix: \"suffix\",\n numberButtonWrapper: \"number-button-wrapper\",\n buttonItemHorizontal: \"number-button-item--horizontal\",\n wrapper: \"element-wrapper\",\n inputWrapper: \"wrapper\",\n actionWrapper: \"action-wrapper\",\n resizeIconWrapper: \"resize-icon-wrapper\",\n numberButtonItem: \"number-button-item\",\n};\n\nexport const IDS = {\n validationMessage: \"inputNumberValidationMessage\",\n};\n\nexport const SLOTS = {\n action: \"action\",\n};\n","/**\n * CSS Custom Properties\n *\n * These properties can be overridden using the component's tag as selector.\n *\n * @prop --calcite-input-prefix-size: Specifies the component's prefix width.\n * @prop --calcite-input-suffix-size: Specifies the component's suffix width.\n */\n\n:host {\n @apply block;\n}\n\n// scales\n:host([scale=\"s\"]) {\n & input,\n & .prefix,\n & .suffix {\n @apply text-n2h h-6 px-2;\n }\n & .number-button-wrapper,\n & .action-wrapper calcite-button,\n & .action-wrapper calcite-button button {\n @apply h-6;\n }\n & .clear-button {\n min-block-size: theme(\"spacing.6\");\n min-inline-size: theme(\"spacing.6\");\n }\n}\n\n:host([scale=\"m\"]) {\n & input,\n & .prefix,\n & .suffix {\n @apply text-n1h h-8 px-3;\n }\n & .number-button-wrapper,\n & .action-wrapper calcite-button,\n & .action-wrapper calcite-button button {\n @apply h-8;\n }\n & .clear-button {\n min-block-size: theme(\"spacing.8\");\n min-inline-size: theme(\"spacing.8\");\n }\n}\n\n:host([scale=\"l\"]) {\n & input,\n & .prefix,\n & .suffix {\n @apply text-0h h-11 px-4;\n }\n & .number-button-wrapper,\n & .action-wrapper calcite-button,\n & .action-wrapper calcite-button button {\n @apply h-11;\n }\n & .clear-button {\n min-block-size: theme(\"spacing.11\");\n min-inline-size: theme(\"spacing.11\");\n }\n}\n\n@include disabled();\n\ninput {\n transition:\n var(--calcite-animation-timing),\n block-size 0,\n outline-offset 0s;\n -webkit-appearance: none;\n @apply bg-foreground-1\n box-border\n flex\n flex-1\n font-inherit\n font-normal\n m-0\n max-h-full\n max-w-full\n relative\n rounded-none\n text-color-1\n text-ellipsis\n w-full;\n\n &:placeholder-shown {\n @apply text-ellipsis;\n }\n}\n\n// states\ninput {\n @apply text-color-1\n border-color-input\n border\n border-solid;\n &::placeholder,\n &:-ms-input-placeholder,\n &::-ms-input-placeholder {\n @apply text-color-3 font-normal;\n }\n}\ninput:focus {\n @apply border-color-brand text-color-1;\n}\ninput[readonly] {\n @apply bg-background font-medium;\n}\ninput[readonly]:focus {\n @apply text-color-1;\n}\ncalcite-icon {\n @apply text-color-3;\n}\n\n//focus\ninput {\n @apply focus-base;\n}\n\ninput:focus {\n @apply focus-inset;\n}\n\n:host([status=\"invalid\"]) {\n & input {\n @apply border-color-danger;\n }\n & input:focus {\n @apply focus-inset-danger;\n }\n}\n\n// ICONS\n\n// position icons\n\n:host([scale=\"s\"]) .icon {\n inset-inline-start: theme(\"spacing.2\");\n}\n\n:host([scale=\"m\"]) .icon {\n inset-inline-start: theme(\"spacing.3\");\n}\n\n:host([scale=\"l\"]) .icon {\n inset-inline-start: theme(\"spacing.4\");\n}\n\n// position placeholder/value text in relation to icons\n\n:host([icon][scale=\"s\"]) input {\n padding-inline-start: theme(\"padding.8\");\n}\n\n:host([icon][scale=\"m\"]) input {\n padding-inline-start: theme(\"padding.10\");\n}\n\n:host([icon][scale=\"l\"]) input {\n padding-inline-start: theme(\"padding.14\");\n}\n\n// positioning wrapper for icon and loader\n\n.element-wrapper {\n @apply relative\n order-3\n inline-flex\n flex-1\n items-center;\n}\n\n.icon {\n @apply transition-default\n pointer-events-none\n absolute\n block\n\n z-default; // needed for firefox to display the icon properly\n}\n\n.clear-button {\n pointer-events: initial;\n @apply focus-base\n border-color-input\n bg-foreground-1\n order-4\n m-0\n box-border\n flex\n min-h-full\n cursor-pointer\n items-center\n justify-center\n self-stretch\n border\n border-solid;\n\n border-inline-start-width: theme(\"borderWidth.0\");\n\n &:hover {\n @apply bg-foreground-2 transition-default;\n calcite-icon {\n @apply text-color-1 transition-default;\n }\n }\n &:active {\n @apply bg-foreground-3;\n calcite-icon {\n @apply text-color-1;\n }\n }\n &:focus {\n @apply focus-inset;\n }\n &:disabled {\n @apply opacity-disabled;\n }\n}\n\n// loading\n.loader {\n inset-block-start: 1px;\n inset-inline: 1px;\n @apply pointer-events-none\n absolute\n block;\n}\n\n// slotted action\n.action-wrapper {\n @apply order-7 flex;\n}\n\n// prefix and suffix\n.prefix,\n.suffix {\n @apply border-color-input\n bg-background\n text-color-2\n box-border\n flex\n h-auto\n min-h-full\n select-none\n content-center\n items-center\n break-words\n border\n border-solid\n font-medium\n leading-none;\n}\n\n.prefix {\n @apply order-2;\n border-inline-end-width: theme(\"borderWidth.0\");\n inline-size: var(--calcite-input-prefix-size, auto);\n}\n.suffix {\n @apply order-5;\n border-inline-start-width: theme(\"borderWidth.0\");\n inline-size: var(--calcite-input-suffix-size, auto);\n}\n\n// alignment type\n:host([alignment=\"start\"]) {\n & input {\n text-align: start;\n }\n}\n\n:host([alignment=\"end\"]) {\n & input {\n text-align: end;\n }\n}\n\n.number-button-wrapper {\n @apply transition-default\n pointer-events-none\n order-6\n box-border\n flex\n flex-col;\n}\n\n:host([number-button-type=\"vertical\"]) .wrapper {\n flex-direction: row;\n display: flex;\n}\n\n:host([number-button-type=\"vertical\"]) {\n & input {\n @apply order-2;\n }\n}\n\n:host([number-button-type=\"horizontal\"]) .calcite--rtl {\n & .number-button-item[data-adjustment=\"down\"] calcite-icon {\n transform: rotate(-90deg);\n }\n & .number-button-item[data-adjustment=\"up\"] calcite-icon {\n transform: rotate(-90deg);\n }\n}\n\n.number-button-item.number-button-item--horizontal {\n &[data-adjustment=\"down\"],\n &[data-adjustment=\"up\"] {\n @apply order-1\n max-h-full\n min-h-full\n self-stretch;\n & calcite-icon {\n transform: rotate(90deg);\n }\n }\n}\n\n.number-button-item.number-button-item--horizontal[data-adjustment=\"down\"] {\n @apply border-color-input\n border\n border-solid;\n border-inline-end-width: theme(\"borderWidth.0\");\n &:hover {\n @apply bg-foreground-2;\n calcite-icon {\n @apply text-color-1;\n }\n }\n}\n\n.number-button-item.number-button-item--horizontal[data-adjustment=\"up\"] {\n @apply order-5;\n &:hover {\n @apply bg-foreground-2;\n calcite-icon {\n @apply text-color-1;\n }\n }\n}\n\n:host([number-button-type=\"vertical\"]) .number-button-item[data-adjustment=\"down\"]:hover {\n @apply bg-foreground-2;\n calcite-icon {\n @apply text-color-1;\n }\n}\n\n:host([number-button-type=\"vertical\"]) .number-button-item[data-adjustment=\"up\"]:hover {\n @apply bg-foreground-2;\n calcite-icon {\n @apply text-color-1;\n }\n}\n\n:host([number-button-type=\"vertical\"]) .number-button-item[data-adjustment=\"down\"] {\n @apply border-t-0;\n}\n\n.number-button-item {\n max-block-size: 50%;\n min-block-size: 50%;\n pointer-events: initial;\n @apply border-color-input\n bg-foreground-1\n transition-default\n m-0\n box-border\n flex\n cursor-pointer\n items-center\n self-center\n border\n border-solid\n py-0\n px-2;\n border-inline-start-width: theme(\"borderWidth.0\");\n & calcite-icon {\n @apply transition-default pointer-events-none;\n }\n &:focus {\n @apply bg-foreground-2;\n calcite-icon {\n @apply text-color-1;\n }\n }\n &:active {\n @apply bg-foreground-3;\n }\n &:disabled {\n @apply pointer-events-none;\n }\n}\n\n.wrapper {\n @apply relative\n flex\n flex-row\n items-center;\n}\n\n:host(.no-bottom-border) input {\n @apply border-b-0;\n}\n\n:host(.border-top-color-one) input {\n @apply border-t-color-1;\n}\n\n// input needed for higher specificity of these overrides\ninput {\n &.inline-child {\n @apply transition-default bg-transparent;\n .editing-enabled {\n background-color: inherit;\n }\n }\n\n &.inline-child:not(.editing-enabled) {\n @apply border-color-transparent\n flex\n cursor-pointer text-ellipsis;\n padding-inline-start: 0;\n }\n}\n\n@include form-validation-message();\n@include hidden-form-input();\n@include base-component();\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Method,\n Prop,\n State,\n VNode,\n Watch,\n} from \"@stencil/core\";\nimport {\n getElementDir,\n getSlotted,\n isPrimaryPointerButton,\n setRequestedIcon,\n toAriaBoolean,\n} from \"../../utils/dom\";\nimport { Alignment, Scale, Status } from \"../interfaces\";\nimport {\n connectForm,\n disconnectForm,\n FormComponent,\n HiddenFormInputSlot,\n internalHiddenInputInputEvent,\n MutableValidityState,\n submitForm,\n} from \"../../utils/form\";\nimport {\n InteractiveComponent,\n InteractiveContainer,\n updateHostInteraction,\n} from \"../../utils/interactive\";\nimport { numberKeys } from \"../../utils/key\";\nimport { connectLabel, disconnectLabel, getLabelText, LabelableComponent } from \"../../utils/label\";\nimport {\n componentFocusable,\n LoadableComponent,\n setComponentLoaded,\n setUpLoadableComponent,\n} from \"../../utils/loadable\";\nimport {\n connectLocalized,\n disconnectLocalized,\n LocalizedComponent,\n NumberingSystem,\n numberStringFormatter,\n} from \"../../utils/locale\";\nimport {\n addLocalizedTrailingDecimalZeros,\n BigDecimal,\n isValidNumber,\n parseNumberString,\n sanitizeNumberString,\n} from \"../../utils/number\";\nimport { createObserver } from \"../../utils/observers\";\nimport { CSS_UTILITY } from \"../../utils/resources\";\nimport {\n connectMessages,\n disconnectMessages,\n setUpMessages,\n T9nComponent,\n updateMessages,\n} from \"../../utils/t9n\";\nimport { InputPlacement, NumberNudgeDirection, SetValueOrigin } from \"../input/interfaces\";\nimport { getIconScale } from \"../../utils/component\";\nimport { Validation } from \"../functional/Validation\";\nimport {\n NumericInputComponent,\n syncHiddenFormInput,\n TextualInputComponent,\n} from \"../input/common/input\";\nimport { IconNameOrString } from \"../icon/interfaces\";\nimport { CSS, IDS, SLOTS } from \"./resources\";\nimport { InputNumberMessages } from \"./assets/input-number/t9n\";\n\n/**\n * @slot action - A slot for positioning a button next to the component.\n */\n@Component({\n tag: \"calcite-input-number\",\n styleUrl: \"input-number.scss\",\n shadow: true,\n assetsDirs: [\"assets\"],\n})\nexport class InputNumber\n implements\n LabelableComponent,\n FormComponent,\n InteractiveComponent,\n LocalizedComponent,\n NumericInputComponent,\n T9nComponent,\n TextualInputComponent,\n LoadableComponent\n{\n //--------------------------------------------------------------------------\n //\n // Global attributes\n //\n //--------------------------------------------------------------------------\n\n @Watch(\"autofocus\")\n @Watch(\"enterkeyhint\")\n @Watch(\"inputmode\")\n handleGlobalAttributesChanged(): void {\n forceUpdate(this);\n }\n\n //--------------------------------------------------------------------------\n //\n // Properties\n //\n //--------------------------------------------------------------------------\n\n /** Specifies the text alignment of the component's value. */\n @Prop({ reflect: true }) alignment: Extract<\"start\" | \"end\", Alignment> = \"start\";\n\n /**\n * Adds global prop, missing from Stencil's `HTMLElement` type, see https://github.com/ionic-team/stencil/issues/5726\n *\n * @ignore\n */\n // eslint-disable-next-line @stencil-community/reserved-member-names\n @Prop() autofocus: boolean;\n\n /**\n * When `true`, a clear button is displayed when the component has a value.\n */\n @Prop({ reflect: true }) clearable = false;\n\n /**\n * When `true`, interaction is prevented and the component is displayed with lower opacity.\n *\n * @mdn [disabled](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/disabled)\n */\n @Prop({ reflect: true }) disabled = false;\n\n @Watch(\"disabled\")\n disabledWatcher(): void {\n this.setDisabledAction();\n }\n\n /**\n * Adds support for kebab-cased attribute, removed in https://github.com/Esri/calcite-design-system/pull/9123\n *\n * @futureBreaking kebab-cased attribute will not be supported in a future release\n * @internal\n */\n // eslint-disable-next-line @stencil-community/reserved-member-names\n @Prop() enterKeyHint: string;\n\n /**\n * The `id` of the form that will be associated with the component.\n *\n * When not set, the component will be associated with its ancestor form element, if any.\n */\n @Prop({ reflect: true }) form: string;\n\n /**\n * When `true`, number values are displayed with a group separator corresponding to the language and country format.\n */\n @Prop({ reflect: true }) groupSeparator = false;\n\n /**\n * Specifies an icon to display.\n *\n * @futureBreaking Remove boolean type as it is not supported.\n */\n @Prop({ reflect: true }) icon: IconNameOrString | boolean;\n\n /** When `true`, the icon will be flipped when the element direction is right-to-left (`\"rtl\"`). */\n @Prop({ reflect: true }) iconFlipRtl = false;\n\n /**\n * Adds support for kebab-cased attribute, removed in https://github.com/Esri/calcite-design-system/pull/9123\n *\n * @futureBreaking kebab-cased attribute will not be supported in a future release\n * @internal\n */\n // eslint-disable-next-line @stencil-community/reserved-member-names\n @Prop() inputMode: string;\n\n /** When `true`, restricts the component to integer numbers only and disables exponential notation. */\n @Prop() integer = false;\n\n /** Accessible name for the component's button or hyperlink. */\n @Prop() label: string;\n\n /** When `true`, the component is in the loading state and `calcite-progress` is displayed. */\n @Prop({ reflect: true }) loading = false;\n\n /**\n * Specifies the Unicode numeral system used by the component for localization.\n */\n @Prop({ reflect: true }) numberingSystem: NumberingSystem;\n\n /**\n * Toggles locale formatting for numbers.\n *\n * @internal\n */\n @Prop() localeFormat = false;\n\n /**\n * Specifies the maximum value.\n *\n * @mdn [max](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#max)\n */\n @Prop({ reflect: true }) max: number;\n\n /** watcher to update number-to-string for max */\n @Watch(\"max\")\n maxWatcher(): void {\n this.maxString = this.max?.toString() || null;\n }\n\n /**\n * Specifies the minimum value.\n *\n * @mdn [min](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#min)\n */\n @Prop({ reflect: true }) min: number;\n\n /** watcher to update number-to-string for min */\n @Watch(\"min\")\n minWatcher(): void {\n this.minString = this.min?.toString() || null;\n }\n\n /**\n * Specifies the maximum length of text for the component's value.\n *\n * @mdn [maxlength](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#maxlength)\n *\n * @deprecated This property has no effect on the component.\n */\n @Prop({ reflect: true }) maxLength: number;\n\n /**\n * Specifies the minimum length of text for the component's value.\n *\n * @mdn [minlength](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#minlength)\n *\n * @deprecated This property has no effect on the component.\n */\n @Prop({ reflect: true }) minLength: number;\n\n /** Specifies the validation message to display under the component. */\n @Prop() validationMessage: string;\n\n /** Specifies the validation icon to display under the component. */\n @Prop({ reflect: true }) validationIcon: IconNameOrString | boolean;\n\n /**\n * The current validation state of the component.\n *\n * @readonly\n * @mdn [ValidityState](https://developer.mozilla.org/en-US/docs/Web/API/ValidityState)\n */\n // eslint-disable-next-line @stencil-community/strict-mutable -- updated in form util when syncing hidden input\n @Prop({ mutable: true }) validity: MutableValidityState = {\n valid: false,\n badInput: false,\n customError: false,\n patternMismatch: false,\n rangeOverflow: false,\n rangeUnderflow: false,\n stepMismatch: false,\n tooLong: false,\n tooShort: false,\n typeMismatch: false,\n valueMissing: false,\n };\n\n /**\n * Specifies the name of the component.\n *\n * Required to pass the component's `value` on form submission.\n *\n * @mdn [name](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#name)\n */\n @Prop({ reflect: true }) name: string;\n\n /** Specifies the placement of the buttons. */\n @Prop({ reflect: true }) numberButtonType: InputPlacement = \"vertical\";\n\n /**\n * Specifies placeholder text for the component.\n *\n * @mdn [placeholder](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#placeholder)\n */\n @Prop() placeholder: string;\n\n /** Adds text to the start of the component. */\n @Prop() prefixText: string;\n\n /**\n * When `true`, the component's value can be read, but cannot be modified.\n *\n * @mdn [readOnly](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/readonly)\n */\n @Prop({ reflect: true }) readOnly = false;\n\n /** When `true`, the component must have a value in order for the form to submit. */\n @Prop({ reflect: true }) required = false;\n\n /** Specifies the size of the component. */\n @Prop({ reflect: true }) scale: Scale = \"m\";\n\n /** Specifies the status of the input field, which determines message and icons. */\n @Prop({ reflect: true }) status: Status = \"idle\";\n\n /**\n * Specifies the granularity that the component's value must adhere to.\n *\n * @mdn [step](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/step)\n */\n @Prop({ reflect: true }) step: number | \"any\";\n\n /**\n * Specifies the type of content to autocomplete, for use in forms.\n * Read the native attribute's documentation on MDN for more info.\n *\n * @mdn [step](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete)\n */\n @Prop() autocomplete: string;\n\n /** Adds text to the end of the component. */\n @Prop() suffixText: string;\n\n /**\n * @internal\n */\n @Prop({ mutable: true, reflect: true }) editingEnabled = false;\n\n /** The component's value. */\n @Prop({ mutable: true }) value = \"\";\n\n /**\n * Made into a prop for testing purposes only\n *\n * @internal\n */\n // eslint-disable-next-line @stencil-community/strict-mutable -- updated by t9n module\n @Prop({ mutable: true }) messages: InputNumberMessages;\n\n /**\n * Use this property to override individual strings used by the component.\n */\n // eslint-disable-next-line @stencil-community/strict-mutable -- updated by t9n module\n @Prop({ mutable: true }) messageOverrides: Partial;\n\n @Watch(\"messageOverrides\")\n onMessagesChange(): void {\n /* wired up by t9n util */\n }\n\n @Watch(\"value\")\n valueWatcher(newValue: string, previousValue: string): void {\n if (!this.userChangedValue) {\n if (newValue === \"Infinity\" || newValue === \"-Infinity\") {\n this.displayedValue = newValue;\n this.previousEmittedNumberValue = newValue;\n return;\n }\n\n this.setNumberValue({\n origin: \"direct\",\n previousValue,\n value:\n newValue == null || newValue == \"\"\n ? \"\"\n : isValidNumber(newValue)\n ? newValue\n : this.previousValue || \"\",\n });\n this.warnAboutInvalidNumberValue(newValue);\n }\n this.userChangedValue = false;\n }\n\n @Watch(\"icon\")\n updateRequestedIcon(): void {\n this.requestedIcon = setRequestedIcon({}, this.icon, \"number\");\n }\n\n //--------------------------------------------------------------------------\n //\n // Private Properties\n //\n //--------------------------------------------------------------------------\n\n @Element() el: HTMLCalciteInputNumberElement;\n\n labelEl: HTMLCalciteLabelElement;\n\n formEl: HTMLFormElement;\n\n defaultValue: InputNumber[\"value\"];\n\n inlineEditableEl: HTMLCalciteInlineEditableElement;\n\n private inputWrapperEl: HTMLDivElement;\n\n private actionWrapperEl: HTMLDivElement;\n\n /** number text input element for locale */\n private childNumberEl?: HTMLInputElement;\n\n get isClearable(): boolean {\n return this.clearable && this.value.length > 0;\n }\n\n private minString?: string;\n\n private maxString?: string;\n\n private previousEmittedNumberValue: string;\n\n private previousValue: string;\n\n private previousValueOrigin: SetValueOrigin = \"initial\";\n\n /** the computed icon to render */\n private requestedIcon?: IconNameOrString;\n\n private nudgeNumberValueIntervalId: number;\n\n mutationObserver = createObserver(\"mutation\", () => this.setDisabledAction());\n\n private userChangedValue = false;\n\n //--------------------------------------------------------------------------\n //\n // State\n //\n //--------------------------------------------------------------------------\n\n @State() effectiveLocale = \"\";\n\n @Watch(\"effectiveLocale\")\n effectiveLocaleWatcher(locale: string): void {\n updateMessages(this, this.effectiveLocale);\n numberStringFormatter.numberFormatOptions = {\n locale,\n numberingSystem: this.numberingSystem,\n useGrouping: false,\n };\n }\n\n @State() defaultMessages: InputNumberMessages;\n\n @State() displayedValue: string;\n\n @State() slottedActionElDisabledInternally = false;\n\n //--------------------------------------------------------------------------\n //\n // Lifecycle\n //\n //--------------------------------------------------------------------------\n\n connectedCallback(): void {\n connectLocalized(this);\n connectMessages(this);\n this.inlineEditableEl = this.el.closest(\"calcite-inline-editable\");\n if (this.inlineEditableEl) {\n this.editingEnabled = this.inlineEditableEl.editingEnabled || false;\n }\n connectLabel(this);\n connectForm(this);\n\n this.mutationObserver?.observe(this.el, { childList: true });\n this.setDisabledAction();\n this.el.addEventListener(internalHiddenInputInputEvent, this.onHiddenFormInputInput);\n }\n\n componentDidLoad(): void {\n setComponentLoaded(this);\n }\n\n disconnectedCallback(): void {\n disconnectLabel(this);\n disconnectForm(this);\n disconnectLocalized(this);\n disconnectMessages(this);\n\n this.mutationObserver?.disconnect();\n this.el.removeEventListener(internalHiddenInputInputEvent, this.onHiddenFormInputInput);\n }\n\n async componentWillLoad(): Promise {\n setUpLoadableComponent(this);\n this.maxString = this.max?.toString();\n this.minString = this.min?.toString();\n this.requestedIcon = setRequestedIcon({}, this.icon, \"number\");\n await setUpMessages(this);\n\n this.setPreviousEmittedNumberValue(this.value);\n this.setPreviousNumberValue(this.value);\n\n this.warnAboutInvalidNumberValue(this.value);\n\n if (this.value === \"Infinity\" || this.value === \"-Infinity\") {\n this.displayedValue = this.value;\n this.previousEmittedNumberValue = this.value;\n } else {\n this.setNumberValue({\n origin: \"connected\",\n value: isValidNumber(this.value) ? this.value : \"\",\n });\n }\n }\n\n componentShouldUpdate(newValue: string, oldValue: string, property: string): boolean {\n if (property === \"value\" && newValue && !isValidNumber(newValue)) {\n this.setNumberValue({\n origin: \"reset\",\n value: oldValue,\n });\n return false;\n }\n return true;\n }\n\n componentDidRender(): void {\n updateHostInteraction(this);\n }\n\n //--------------------------------------------------------------------------\n //\n // Events\n //\n //--------------------------------------------------------------------------\n\n /**\n * @internal\n */\n @Event({ cancelable: false }) calciteInternalInputNumberFocus: EventEmitter;\n\n /**\n * @internal\n */\n @Event({ cancelable: false }) calciteInternalInputNumberBlur: EventEmitter;\n\n /**\n * Fires each time a new value is typed.\n */\n @Event({ cancelable: true }) calciteInputNumberInput: EventEmitter;\n\n /**\n * Fires each time a new value is typed and committed.\n */\n @Event({ cancelable: false }) calciteInputNumberChange: EventEmitter;\n\n //--------------------------------------------------------------------------\n //\n // Public Methods\n //\n //--------------------------------------------------------------------------\n\n /** Sets focus on the component. */\n @Method()\n async setFocus(): Promise {\n await componentFocusable(this);\n\n this.childNumberEl?.focus();\n }\n\n /** Selects the text of the component's `value`. */\n @Method()\n async selectText(): Promise {\n this.childNumberEl?.select();\n }\n\n //--------------------------------------------------------------------------\n //\n // Private Methods\n //\n //--------------------------------------------------------------------------\n\n keyDownHandler = (event: KeyboardEvent): void => {\n if (this.readOnly || this.disabled || event.defaultPrevented) {\n return;\n }\n\n if (this.isClearable && event.key === \"Escape\") {\n this.clearInputValue(event);\n event.preventDefault();\n }\n if (event.key === \"Enter\") {\n if (submitForm(this)) {\n event.preventDefault();\n }\n }\n };\n\n onLabelClick(): void {\n this.setFocus();\n }\n\n incrementOrDecrementNumberValue(\n direction: NumberNudgeDirection,\n inputMax: number | null,\n inputMin: number | null,\n nativeEvent: KeyboardEvent | MouseEvent,\n ): void {\n const { value } = this;\n\n if (value === \"Infinity\" || value === \"-Infinity\") {\n return;\n }\n\n const adjustment = direction === \"up\" ? 1 : -1;\n const stepHandleInteger =\n this.integer && this.step !== \"any\" ? Math.round(this.step) : this.step;\n const inputStep = stepHandleInteger === \"any\" ? 1 : Math.abs(stepHandleInteger || 1);\n const inputVal = new BigDecimal(value !== \"\" ? value : \"0\");\n const nudgedValue = inputVal.add(`${inputStep * adjustment}`);\n\n const nudgedValueBelowInputMin = () =>\n typeof inputMin === \"number\" &&\n !isNaN(inputMin) &&\n nudgedValue.subtract(`${inputMin}`).isNegative;\n\n const nudgedValueAboveInputMax = () =>\n typeof inputMax === \"number\" &&\n !isNaN(inputMax) &&\n !nudgedValue.subtract(`${inputMax}`).isNegative;\n\n const finalValue = nudgedValueBelowInputMin()\n ? `${inputMin}`\n : nudgedValueAboveInputMax()\n ? `${inputMax}`\n : nudgedValue.toString();\n\n this.setNumberValue({\n committing: true,\n nativeEvent,\n origin: \"user\",\n value: finalValue,\n });\n }\n\n private clearInputValue = (nativeEvent: KeyboardEvent | MouseEvent): void => {\n this.setNumberValue({\n committing: true,\n nativeEvent,\n origin: \"user\",\n value: \"\",\n });\n };\n\n private emitChangeIfUserModified = (): void => {\n if (this.previousValueOrigin === \"user\" && this.value !== this.previousEmittedNumberValue) {\n this.calciteInputNumberChange.emit();\n this.setPreviousEmittedNumberValue(this.value);\n }\n };\n\n private inputNumberBlurHandler = () => {\n window.clearInterval(this.nudgeNumberValueIntervalId);\n this.calciteInternalInputNumberBlur.emit();\n this.emitChangeIfUserModified();\n };\n\n private clickHandler = (event: MouseEvent): void => {\n if (this.disabled) {\n return;\n }\n\n const composedPath = event.composedPath();\n\n if (\n !composedPath.includes(this.inputWrapperEl) ||\n composedPath.includes(this.actionWrapperEl)\n ) {\n return;\n }\n\n this.setFocus();\n };\n\n private inputNumberFocusHandler = (): void => {\n this.calciteInternalInputNumberFocus.emit();\n };\n\n private inputNumberInputHandler = (nativeEvent: InputEvent): void => {\n if (this.disabled || this.readOnly) {\n return;\n }\n\n if (this.value === \"Infinity\" || this.value === \"-Infinity\") {\n return;\n }\n\n const value = (nativeEvent.target as HTMLInputElement).value;\n numberStringFormatter.numberFormatOptions = {\n locale: this.effectiveLocale,\n numberingSystem: this.numberingSystem,\n useGrouping: this.groupSeparator,\n };\n const delocalizedValue = numberStringFormatter.delocalize(value);\n if (nativeEvent.inputType === \"insertFromPaste\") {\n if (\n !isValidNumber(delocalizedValue) ||\n (this.integer && (delocalizedValue.includes(\"e\") || delocalizedValue.includes(\".\")))\n ) {\n nativeEvent.preventDefault();\n }\n this.setNumberValue({\n nativeEvent,\n origin: \"user\",\n value: parseNumberString(delocalizedValue),\n });\n this.childNumberEl.value = this.displayedValue;\n } else {\n this.setNumberValue({\n nativeEvent,\n origin: \"user\",\n value: delocalizedValue,\n });\n }\n };\n\n private inputNumberKeyDownHandler = (event: KeyboardEvent): void => {\n if (this.disabled || this.readOnly) {\n return;\n }\n\n if (this.value === \"Infinity\" || this.value === \"-Infinity\") {\n event.preventDefault();\n if (event.key === \"Backspace\" || event.key === \"Delete\") {\n this.clearInputValue(event);\n }\n return;\n }\n\n if (event.key === \"ArrowUp\") {\n /* prevent default behavior of moving cursor to the beginning of the input when holding down ArrowUp */\n event.preventDefault();\n this.nudgeNumberValue(\"up\", event);\n return;\n }\n if (event.key === \"ArrowDown\") {\n this.nudgeNumberValue(\"down\", event);\n return;\n }\n const supportedKeys = [\n ...numberKeys,\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Backspace\",\n \"Delete\",\n \"Enter\",\n \"Escape\",\n \"Tab\",\n ];\n if (event.altKey || event.ctrlKey || event.metaKey) {\n return;\n }\n const isShiftTabEvent = event.shiftKey && event.key === \"Tab\";\n if (supportedKeys.includes(event.key) || isShiftTabEvent) {\n if (event.key === \"Enter\") {\n this.emitChangeIfUserModified();\n }\n return;\n }\n\n numberStringFormatter.numberFormatOptions = {\n locale: this.effectiveLocale,\n numberingSystem: this.numberingSystem,\n useGrouping: this.groupSeparator,\n };\n\n if (event.key === numberStringFormatter.decimal && !this.integer) {\n if (!this.value && !this.childNumberEl.value) {\n return;\n }\n if (this.value && this.childNumberEl.value.indexOf(numberStringFormatter.decimal) === -1) {\n return;\n }\n }\n if (/[eE]/.test(event.key) && !this.integer) {\n if (!this.value && !this.childNumberEl.value) {\n return;\n }\n if (this.value && !/[eE]/.test(this.childNumberEl.value)) {\n return;\n }\n }\n\n if (event.key === \"-\") {\n if (!this.value && !this.childNumberEl.value) {\n return;\n }\n if (this.value && this.childNumberEl.value.split(\"-\").length <= 2) {\n return;\n }\n }\n event.preventDefault();\n };\n\n private nudgeNumberValue = (\n direction: NumberNudgeDirection,\n nativeEvent: KeyboardEvent | MouseEvent,\n ): void => {\n if (nativeEvent instanceof KeyboardEvent && nativeEvent.repeat) {\n return;\n }\n\n const inputMax = this.maxString ? parseFloat(this.maxString) : null;\n const inputMin = this.minString ? parseFloat(this.minString) : null;\n const valueNudgeDelayInMs = 150;\n\n this.incrementOrDecrementNumberValue(direction, inputMax, inputMin, nativeEvent);\n\n if (this.nudgeNumberValueIntervalId) {\n window.clearInterval(this.nudgeNumberValueIntervalId);\n }\n let firstValueNudge = true;\n this.nudgeNumberValueIntervalId = window.setInterval(() => {\n if (firstValueNudge) {\n firstValueNudge = false;\n return;\n }\n\n this.incrementOrDecrementNumberValue(direction, inputMax, inputMin, nativeEvent);\n }, valueNudgeDelayInMs);\n };\n\n private nudgeButtonPointerUpHandler = (event: PointerEvent): void => {\n if (!isPrimaryPointerButton(event)) {\n return;\n }\n window.clearInterval(this.nudgeNumberValueIntervalId);\n };\n\n private nudgeButtonPointerOutHandler = (): void => {\n window.clearInterval(this.nudgeNumberValueIntervalId);\n };\n\n private nudgeButtonPointerDownHandler = (event: PointerEvent): void => {\n if (!isPrimaryPointerButton(event)) {\n return;\n }\n\n event.preventDefault();\n const direction = (event.target as HTMLDivElement).dataset.adjustment as NumberNudgeDirection;\n if (!this.disabled) {\n this.nudgeNumberValue(direction, event);\n }\n };\n\n syncHiddenFormInput(input: HTMLInputElement): void {\n syncHiddenFormInput(\"number\", this, input);\n }\n\n private onHiddenFormInputInput = (event: Event): void => {\n if ((event.target as HTMLInputElement).name === this.name) {\n this.setNumberValue({\n value: (event.target as HTMLInputElement).value,\n origin: \"direct\",\n });\n }\n this.setFocus();\n event.stopPropagation();\n };\n\n private setChildNumberElRef = (el: HTMLInputElement) => {\n this.childNumberEl = el;\n };\n\n private setDisabledAction(): void {\n const slottedActionEl = getSlotted(this.el, \"action\");\n\n if (!slottedActionEl) {\n return;\n }\n\n if (this.disabled) {\n if (slottedActionEl.getAttribute(\"disabled\") == null) {\n this.slottedActionElDisabledInternally = true;\n }\n slottedActionEl.setAttribute(\"disabled\", \"\");\n } else if (this.slottedActionElDisabledInternally) {\n slottedActionEl.removeAttribute(\"disabled\");\n this.slottedActionElDisabledInternally = false;\n }\n }\n\n private setInputNumberValue = (newInputValue: string): void => {\n if (!this.childNumberEl) {\n return;\n }\n this.childNumberEl.value = newInputValue;\n };\n\n private setPreviousEmittedNumberValue = (value: string): void => {\n this.previousEmittedNumberValue = this.normalizeValue(value);\n };\n\n private normalizeValue(value: string): string {\n return isValidNumber(value) ? value : \"\";\n }\n\n private setPreviousNumberValue = (value: string): void => {\n this.previousValue = this.normalizeValue(value);\n };\n\n private setNumberValue = ({\n committing = false,\n nativeEvent,\n origin,\n previousValue,\n value,\n }: {\n committing?: boolean;\n nativeEvent?: MouseEvent | KeyboardEvent | InputEvent;\n origin: SetValueOrigin;\n previousValue?: string;\n value: string;\n }): void => {\n numberStringFormatter.numberFormatOptions = {\n locale: this.effectiveLocale,\n numberingSystem: this.numberingSystem,\n useGrouping: this.groupSeparator,\n };\n\n const isValueDeleted =\n this.previousValue?.length > value.length || this.value?.length > value.length;\n\n const valueHandleInteger = this.integer ? value.replace(/[e.]/g, \"\") : value;\n\n const hasTrailingDecimalSeparator =\n valueHandleInteger.charAt(valueHandleInteger.length - 1) === \".\";\n\n const sanitizedValue =\n hasTrailingDecimalSeparator && isValueDeleted\n ? valueHandleInteger\n : sanitizeNumberString(valueHandleInteger);\n\n const newValue =\n value && !sanitizedValue\n ? isValidNumber(this.previousValue)\n ? this.previousValue\n : \"\"\n : sanitizedValue;\n\n let newLocalizedValue = numberStringFormatter.localize(newValue);\n\n if (origin !== \"connected\" && !hasTrailingDecimalSeparator) {\n newLocalizedValue = addLocalizedTrailingDecimalZeros(\n newLocalizedValue,\n newValue,\n numberStringFormatter,\n );\n }\n\n // adds localized trailing decimal separator\n this.displayedValue =\n hasTrailingDecimalSeparator && isValueDeleted\n ? `${newLocalizedValue}${numberStringFormatter.decimal}`\n : newLocalizedValue;\n\n this.setPreviousNumberValue(previousValue ?? this.value);\n this.previousValueOrigin = origin;\n this.userChangedValue = origin === \"user\" && this.value !== newValue;\n // don't sanitize the start of negative/decimal numbers, but\n // don't set value to an invalid number\n this.value = [\"-\", \".\"].includes(newValue) ? \"\" : newValue;\n\n if (origin === \"direct\") {\n this.setInputNumberValue(newLocalizedValue);\n this.setPreviousEmittedNumberValue(newLocalizedValue);\n }\n\n if (nativeEvent) {\n const calciteInputNumberInputEvent = this.calciteInputNumberInput.emit();\n if (calciteInputNumberInputEvent.defaultPrevented) {\n this.value = this.previousValue;\n this.displayedValue = numberStringFormatter.localize(this.previousValue);\n } else if (committing) {\n this.emitChangeIfUserModified();\n }\n }\n };\n\n private inputNumberKeyUpHandler = (): void => {\n window.clearInterval(this.nudgeNumberValueIntervalId);\n };\n\n private warnAboutInvalidNumberValue(value: string): void {\n if (value && !isValidNumber(value)) {\n console.warn(`The specified value \"${value}\" cannot be parsed, or is out of range.`);\n }\n }\n\n // --------------------------------------------------------------------------\n //\n // Render Methods\n //\n // --------------------------------------------------------------------------\n\n render(): VNode {\n const dir = getElementDir(this.el);\n const loader = (\n
\n \n
\n );\n\n const inputClearButton = (\n \n \n \n );\n const iconEl = (\n \n );\n\n const isHorizontalNumberButton = this.numberButtonType === \"horizontal\";\n\n const numberButtonsHorizontalUp = (\n \n \n \n );\n\n const numberButtonsHorizontalDown = (\n \n \n \n );\n\n const numberButtonsVertical = (\n
\n {numberButtonsHorizontalUp}\n {numberButtonsHorizontalDown}\n
\n );\n\n const prefixText =
{this.prefixText}
;\n\n const suffixText =
{this.suffixText}
;\n\n const childEl = (\n \n );\n\n return (\n \n \n (this.inputWrapperEl = el)}\n >\n {this.numberButtonType === \"horizontal\" && !this.readOnly\n ? numberButtonsHorizontalDown\n : null}\n {this.prefixText ? prefixText : null}\n
\n {childEl}\n {this.isClearable ? inputClearButton : null}\n {this.requestedIcon ? iconEl : null}\n {this.loading ? loader : null}\n
\n
(this.actionWrapperEl = el)}>\n \n
\n {this.numberButtonType === \"vertical\" && !this.readOnly ? numberButtonsVertical : null}\n {this.suffixText ? suffixText : null}\n {this.numberButtonType === \"horizontal\" && !this.readOnly\n ? numberButtonsHorizontalUp\n : null}\n \n \n {this.validationMessage && this.status === \"invalid\" ? (\n \n ) : null}\n
\n
\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}