{"version":3,"names":["CSS","loader","clearButton","editingEnabled","inlineChild","inputIcon","prefix","suffix","numberButtonWrapper","buttonItemHorizontal","wrapper","inputWrapper","actionWrapper","resizeIconWrapper","numberButtonItem","IDS","validationMessage","INPUT_TYPE_ICONS","tel","password","email","date","time","search","SLOTS","action","inputCss","CalciteInputStyle0","Input","this","childElType","previousValueOrigin","mutationObserver","createObserver","setDisabledAction","userChangedValue","keyDownHandler","event","readOnly","disabled","defaultPrevented","isClearable","key","clearInputValue","preventDefault","submitForm","nativeEvent","setValue","committing","origin","value","emitChangeIfUserModified","previousEmittedValue","calciteInputChange","emit","setPreviousEmittedValue","inputBlurHandler","window","clearInterval","nudgeNumberValueIntervalId","calciteInternalInputBlur","clickHandler","composedPath","includes","inputWrapperEl","actionWrapperEl","setFocus","inputFocusHandler","calciteInternalInputFocus","inputChangeHandler","type","files","childEl","inputInputHandler","target","inputKeyDownHandler","inputNumberInputHandler","numberStringFormatter","numberFormatOptions","locale","effectiveLocale","numberingSystem","useGrouping","groupSeparator","delocalizedValue","delocalize","inputType","isValidNumber","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","numberButtonPointerUpAndOutHandler","numberButtonPointerDownHandler","isPrimaryPointerButton","dataset","adjustment","onHiddenFormInputInput","name","stopPropagation","setChildElRef","el","setChildNumberElRef","setInputValue","newInputValue","normalizeValue","setPreviousValue","previousValue","signDisplay","isValueDeleted","hasTrailingDecimalSeparator","charAt","sanitizedValue","sanitizeNumberString","newValue","newLocalizedValue","localize","addLocalizedTrailingDecimalZeros","calciteInputInputEvent","calciteInputInput","inputKeyUpHandler","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","isTextarea","clearable","effectiveLocaleChange","updateMessages","connectedCallback","connectLocalized","connectMessages","inlineEditableEl","closest","connectLabel","connectForm","observe","childList","addEventListener","internalHiddenInputInputEvent","disconnectedCallback","disconnectLabel","disconnectForm","disconnectLocalized","disconnectMessages","disconnect","removeEventListener","componentWillLoad","setUpLoadableComponent","setUpMessages","componentDidLoad","setComponentLoaded","componentShouldUpdate","oldValue","property","componentDidRender","updateHostInteraction","componentFocusable","focus","selectText","select","onLabelClick","inputStep","step","Math","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","inputClearButton","clear","onClick","tabIndex","scale","getIconScale","iconEl","flipRtl","iconFlipRtl","isHorizontalNumberButton","numberButtonType","numberButtonsHorizontalUp","onPointerDown","onPointerOut","onPointerUp","numberButtonsHorizontalDown","numberButtonsVertical","prefixText","suffixText","autofocus","hasAttribute","enterKeyHint","inputMode","localeNumberInput","accept","toAriaBoolean","status","getLabelText","autocomplete","defaultValue","maxLength","minLength","multiple","undefined","onBlur","onFocus","onInput","onKeyDown","onKeyUp","pattern","placeholder","ref","onChange","required","Host","InteractiveContainer","CSS_UTILITY","rtl","HiddenFormInputSlot","component","Validation","validationIcon","id","message"],"sources":["src/components/input/resources.ts","src/components/input/input.scss?tag=calcite-input&encapsulation=shadow","src/components/input/input.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: \"inputValidationMessage\",\n};\n\nexport const INPUT_TYPE_ICONS = {\n tel: \"phone\",\n password: \"lock\",\n email: \"email-address\",\n date: \"calendar\",\n time: \"clock\",\n search: \"search\",\n} as const;\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 & textarea {\n @apply h-6;\n min-block-size: theme(\"spacing.6\");\n }\n & .number-button-wrapper,\n & .action-wrapper calcite-button,\n & .action-wrapper calcite-button button {\n @apply h-6;\n }\n & input[type=\"file\"] {\n @apply h-6;\n }\n & .clear-button {\n min-block-size: theme(\"spacing.6\");\n min-inline-size: theme(\"spacing.6\");\n }\n & textarea {\n @apply text-n2h\n h-auto\n py-1\n px-2;\n }\n}\n\n:host([scale=\"m\"]) {\n & input,\n & .prefix,\n & .suffix {\n @apply text-n1h h-8 px-3;\n }\n & textarea {\n min-block-size: theme(\"spacing.8\");\n }\n & .number-button-wrapper,\n & .action-wrapper calcite-button,\n & .action-wrapper calcite-button button {\n @apply h-8;\n }\n & input[type=\"file\"] {\n @apply h-8;\n }\n & .clear-button {\n min-block-size: theme(\"spacing.8\");\n min-inline-size: theme(\"spacing.8\");\n }\n & textarea {\n @apply text-n1h\n h-auto\n py-2\n px-3;\n }\n}\n\n:host([scale=\"l\"]) {\n & input,\n & .prefix,\n & .suffix {\n @apply text-0h h-11 px-4;\n }\n & textarea {\n min-block-size: theme(\"spacing.11\");\n }\n & .number-button-wrapper,\n & .action-wrapper calcite-button,\n & .action-wrapper calcite-button button {\n @apply h-11;\n }\n & input[type=\"file\"] {\n @apply h-11;\n }\n & .clear-button {\n min-block-size: theme(\"spacing.11\");\n min-inline-size: theme(\"spacing.11\");\n }\n & textarea {\n @apply text-0h\n h-auto\n py-3\n px-4;\n }\n}\n\n@include disabled() {\n & textarea {\n resize: none;\n }\n}\n\ntextarea,\ninput {\n transition:\n var(--calcite-animation-timing),\n block-size 0,\n outline-offset 0s;\n -webkit-appearance: none;\n @apply font-inherit\n text-color-1\n bg-foreground-1\n relative\n m-0\n box-border\n flex\n max-h-full\n w-full\n max-w-full\n flex-1\n rounded-none\n font-normal;\n}\n\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n// states\ninput,\ntextarea {\n @apply border\n border-color-input\n border-solid\n text-color-1\n text-ellipsis;\n &::placeholder,\n &:-ms-input-placeholder,\n &::-ms-input-placeholder {\n @apply text-color-3 font-normal;\n }\n &:placeholder-shown {\n @apply text-ellipsis;\n }\n}\ninput:focus,\ntextarea:focus {\n @apply border-color-brand text-color-1;\n}\ninput[readonly],\ntextarea[readonly] {\n @apply bg-background font-medium;\n}\ninput[readonly]:focus,\ntextarea[readonly]:focus {\n @apply text-color-1;\n}\ncalcite-icon {\n @apply text-color-3;\n}\n\n//focus\ntextarea,\ninput {\n @apply focus-base;\n}\ntextarea:focus,\ninput:focus {\n @apply focus-inset;\n}\n\n:host([status=\"invalid\"]) {\n & input,\n & textarea {\n @apply border-color-danger;\n }\n & input:focus,\n & textarea: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\n.icon,\n.resize-icon-wrapper {\n @apply z-default; // needed for firefox to display the icon properly\n}\n\n// hide browser default clear\n\ninput[type=\"text\"]::-ms-clear,\ninput[type=\"text\"]::-ms-reveal {\n @apply hidden\n h-0\n w-0;\n}\ninput[type=\"search\"]::-webkit-search-decoration,\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-results-button,\ninput[type=\"search\"]::-webkit-search-results-decoration,\ninput[type=\"date\"]::-webkit-clear-button,\ninput[type=\"time\"]::-webkit-clear-button {\n @apply hidden;\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 & textarea,\n & input {\n text-align: start;\n }\n}\n\n:host([alignment=\"end\"]) {\n & textarea,\n & input {\n text-align: end;\n }\n}\n\n// number buttons\ninput[type=\"number\"] {\n -moz-appearance: textfield;\n\n &::-webkit-inner-spin-button,\n &::-webkit-outer-spin-button {\n -webkit-appearance: none;\n -moz-appearance: textfield;\n @apply m-0;\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 textarea {\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// hide the default date picker\n:input::-webkit-calendar-picker-indicator {\n @apply hidden;\n}\n\ninput[type=\"date\"]::-webkit-input-placeholder {\n visibility: hidden !important;\n}\n\n// textarea resize icon\ntextarea::-webkit-resizer {\n @apply absolute\n bottom-0\n box-border\n py-0\n px-1;\n inset-inline-end: 0;\n}\n\n.resize-icon-wrapper {\n inset-block-end: 2px;\n inset-inline-end: 2px;\n\n @apply bg-foreground-1\n text-color-3\n pointer-events-none\n absolute\n h-3\n w-3;\n\n & calcite-icon {\n inset-block-end: theme(\"spacing.1\");\n inset-inline-end: theme(\"spacing.1\");\n transform: rotate(-45deg);\n }\n}\n\n.calcite--rtl {\n .resize-icon-wrapper {\n & calcite-icon {\n transform: rotate(45deg);\n }\n }\n}\n\n:host([type=\"color\"]) input {\n @apply p-1;\n}\n\n// file input\n:host([type=\"file\"]) input {\n @apply bg-foreground-1\n border-color-input\n cursor-pointer\n border\n border-dashed\n text-center;\n}\n\n:host([type=\"file\"][scale=\"s\"]) input {\n @apply py-px px-2;\n}\n\n:host([type=\"file\"][scale=\"m\"]) input {\n @apply py-1 px-3;\n}\n\n:host([type=\"file\"][scale=\"l\"]) input {\n @apply py-2 px-4;\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 { Scale, Status, Alignment } 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 { getIconScale } from \"../../utils/component\";\nimport { Validation } from \"../functional/Validation\";\nimport { IconNameOrString } from \"../icon/interfaces\";\nimport { InputMessages } from \"./assets/input/t9n\";\nimport { InputPlacement, NumberNudgeDirection, SetValueOrigin } from \"./interfaces\";\nimport { CSS, IDS, INPUT_TYPE_ICONS, SLOTS } from \"./resources\";\nimport { NumericInputComponent, syncHiddenFormInput, TextualInputComponent } from \"./common/input\";\n\n/**\n * @slot action - A slot for positioning a `calcite-button` next to the component.\n */\n@Component({\n tag: \"calcite-input\",\n styleUrl: \"input.scss\",\n shadow: true,\n assetsDirs: [\"assets\"],\n})\nexport class Input\n implements\n LabelableComponent,\n FormComponent,\n InteractiveComponent,\n T9nComponent,\n LocalizedComponent,\n LoadableComponent,\n NumericInputComponent,\n TextualInputComponent\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. The clear button shows by default for `\"search\"`, `\"time\"`, and `\"date\"` types, and will not display for the `\"textarea\"` type.\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 * When `true`, shows a default recommended icon. Alternatively, pass a Calcite UI Icon name to display a specific icon.\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 /** Accessible name for the component. */\n @Prop() label: string;\n\n /** When `true`, a busy indicator is displayed. */\n @Prop({ reflect: true }) loading = false;\n\n /**\n * Specifies the Unicode numeral system used by the component for localization.\n *\n */\n @Prop({ reflect: true }) numberingSystem: NumberingSystem;\n\n /**\n * When `true`, uses locale formatting for numbers.\n *\n * @internal\n */\n @Prop() localeFormat = false;\n\n /**\n * Specifies the maximum value for type \"number\".\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 for `type=\"number\"`.\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 @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 @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 for `type=\"number\"`. */\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 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 /**\n * Specifies a regex pattern the component's `value` must match for validation.\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/pattern)\n */\n @Prop() pattern: string;\n\n /**\n * Specifies a comma separated list of unique file type specifiers for limiting accepted file types.\n * This property only has an effect when `type` is \"file\".\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/pattern)\n */\n @Prop() accept: string;\n\n /**\n * When `true`, the component can accept more than one value.\n * This property only has an effect when `type` is \"email\" or \"file\".\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/multiple)\n */\n @Prop() multiple = false;\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 /**\n * Specifies the component type.\n *\n * Note that the following `type`s add type-specific icons by default: `\"date\"`, `\"email\"`, `\"password\"`, `\"search\"`, `\"tel\"`, `\"time\"`.\n */\n @Prop({ reflect: true }) type:\n | \"color\"\n | \"date\"\n | \"datetime-local\"\n | \"email\"\n | \"file\"\n | \"image\"\n | \"month\"\n | \"number\"\n | \"password\"\n | \"search\"\n | \"tel\"\n | \"text\"\n | \"textarea\"\n | \"time\"\n | \"url\"\n | \"week\" = \"text\";\n\n /** The component's value. */\n @Prop({ mutable: true }) value = \"\";\n\n /**\n * When `type` is `\"file\"`, specifies the component's selected files.\n *\n * @mdn https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/files\n */\n @Prop() files: FileList | undefined;\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: InputMessages;\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 (this.type === \"number\" && (newValue === \"Infinity\" || newValue === \"-Infinity\")) {\n this.displayedValue = newValue;\n this.previousEmittedValue = newValue;\n return;\n }\n\n this.setValue({\n origin: \"direct\",\n previousValue,\n value:\n newValue == null || newValue == \"\"\n ? \"\"\n : this.type === \"number\"\n ? isValidNumber(newValue)\n ? newValue\n : this.previousValue || \"\"\n : newValue,\n });\n this.warnAboutInvalidNumberValue(newValue);\n }\n this.userChangedValue = false;\n }\n\n @Watch(\"icon\")\n @Watch(\"type\")\n updateRequestedIcon(): void {\n this.requestedIcon = setRequestedIcon(INPUT_TYPE_ICONS, this.icon, this.type);\n }\n\n //--------------------------------------------------------------------------\n //\n // Private Properties\n //\n //--------------------------------------------------------------------------\n\n @Element() el: HTMLCalciteInputElement;\n\n labelEl: HTMLCalciteLabelElement;\n\n formEl: HTMLFormElement;\n\n defaultValue: Input[\"value\"];\n\n inlineEditableEl: HTMLCalciteInlineEditableElement;\n\n private inputWrapperEl: HTMLDivElement;\n\n private actionWrapperEl: HTMLDivElement;\n\n /** keep track of the rendered child type */\n private childEl?: HTMLInputElement | HTMLTextAreaElement;\n\n /** keep track of the rendered child type */\n private childElType?: \"input\" | \"textarea\" = \"input\";\n\n /** number text input element for locale */\n private childNumberEl?: HTMLInputElement;\n\n get isClearable(): boolean {\n return !this.isTextarea && (this.clearable || this.type === \"search\") && this.value?.length > 0;\n }\n\n get isTextarea(): boolean {\n return this.childElType === \"textarea\";\n }\n\n private minString?: string;\n\n private maxString?: string;\n\n private previousEmittedValue: 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() defaultMessages: InputMessages;\n\n @State() effectiveLocale = \"\";\n\n @Watch(\"effectiveLocale\")\n effectiveLocaleChange(): void {\n updateMessages(this, this.effectiveLocale);\n }\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\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\n this.setDisabledAction();\n this.el.addEventListener(internalHiddenInputInputEvent, this.onHiddenFormInputInput);\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.childElType = this.type === \"textarea\" ? \"textarea\" : \"input\";\n this.maxString = this.max?.toString();\n this.minString = this.min?.toString();\n this.requestedIcon = setRequestedIcon(INPUT_TYPE_ICONS, this.icon, this.type);\n await setUpMessages(this);\n\n this.setPreviousEmittedValue(this.value);\n this.setPreviousValue(this.value);\n\n if (this.type === \"number\") {\n if (this.value === \"Infinity\" || this.value === \"-Infinity\") {\n this.displayedValue = this.value;\n this.previousEmittedValue = this.value;\n } else {\n this.warnAboutInvalidNumberValue(this.value);\n this.setValue({\n origin: \"connected\",\n value: isValidNumber(this.value) ? this.value : \"\",\n });\n }\n }\n }\n\n componentDidLoad(): void {\n setComponentLoaded(this);\n }\n\n componentShouldUpdate(newValue: string, oldValue: string, property: string): boolean {\n if (this.type === \"number\" && property === \"value\" && newValue && !isValidNumber(newValue)) {\n this.setValue({\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 }) calciteInternalInputFocus: EventEmitter;\n\n /**\n * @internal\n */\n @Event({ cancelable: false }) calciteInternalInputBlur: EventEmitter;\n\n /**\n * Fires each time a new `value` is typed.\n */\n @Event({ cancelable: true }) calciteInputInput: EventEmitter;\n\n /**\n * Fires each time a new `value` is typed and committed.\n */\n @Event({ cancelable: false }) calciteInputChange: 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 if (this.type === \"number\") {\n this.childNumberEl?.focus();\n } else {\n this.childEl?.focus();\n }\n }\n\n /** Selects the text of the component's `value`. */\n @Method()\n async selectText(): Promise {\n if (this.type === \"number\") {\n this.childNumberEl?.select();\n } else {\n this.childEl?.select();\n }\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 inputStep = this.step === \"any\" ? 1 : Math.abs(this.step || 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.setValue({\n committing: true,\n nativeEvent,\n origin: \"user\",\n value: finalValue,\n });\n }\n\n private clearInputValue = (nativeEvent: KeyboardEvent | MouseEvent): void => {\n this.setValue({\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.previousEmittedValue) {\n this.calciteInputChange.emit();\n this.setPreviousEmittedValue(this.value);\n }\n };\n\n private inputBlurHandler = () => {\n window.clearInterval(this.nudgeNumberValueIntervalId);\n this.calciteInternalInputBlur.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 inputFocusHandler = (): void => {\n this.calciteInternalInputFocus.emit();\n };\n\n private inputChangeHandler = (): void => {\n if (this.type === \"file\") {\n this.files = (this.childEl as HTMLInputElement).files;\n }\n };\n\n private inputInputHandler = (nativeEvent: InputEvent): void => {\n if (this.disabled || this.readOnly) {\n return;\n }\n this.setValue({\n nativeEvent,\n origin: \"user\",\n value: (nativeEvent.target as HTMLInputElement).value,\n });\n };\n\n private inputKeyDownHandler = (event: KeyboardEvent): void => {\n if (this.disabled || this.readOnly) {\n return;\n }\n if (event.key === \"Enter\") {\n this.emitChangeIfUserModified();\n }\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 (!isValidNumber(delocalizedValue)) {\n nativeEvent.preventDefault();\n }\n this.setValue({\n nativeEvent,\n origin: \"user\",\n value: parseNumberString(delocalizedValue),\n });\n this.childNumberEl.value = this.displayedValue;\n } else {\n this.setValue({\n nativeEvent,\n origin: \"user\",\n value: delocalizedValue,\n });\n }\n };\n\n private inputNumberKeyDownHandler = (event: KeyboardEvent): void => {\n if (this.type !== \"number\" || 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 numberStringFormatter.numberFormatOptions = {\n locale: this.effectiveLocale,\n numberingSystem: this.numberingSystem,\n useGrouping: this.groupSeparator,\n };\n if (event.key === numberStringFormatter.decimal) {\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)) {\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) || this.type !== \"number\") {\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 numberButtonPointerUpAndOutHandler = (): void => {\n window.clearInterval(this.nudgeNumberValueIntervalId);\n };\n\n private numberButtonPointerDownHandler = (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(this.type, this, input);\n }\n\n private onHiddenFormInputInput = (event: Event): void => {\n if ((event.target as HTMLInputElement).name === this.name) {\n this.setValue({\n value: (event.target as HTMLInputElement).value,\n origin: \"direct\",\n });\n }\n this.setFocus();\n event.stopPropagation();\n };\n\n private setChildElRef = (el: HTMLInputElement | HTMLTextAreaElement) => {\n this.childEl = el;\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 setInputValue = (newInputValue: string): void => {\n if (this.type === \"text\" && !this.childEl) {\n return;\n }\n if (this.type === \"number\" && !this.childNumberEl) {\n return;\n }\n this[`child${this.type === \"number\" ? \"Number\" : \"\"}El`].value = newInputValue;\n };\n\n private setPreviousEmittedValue = (value: string): void => {\n this.previousEmittedValue = this.normalizeValue(value);\n };\n\n private normalizeValue(value: string): string {\n return this.type === \"number\" ? (isValidNumber(value) ? value : \"\") : value;\n }\n\n private setPreviousValue = (value: string): void => {\n this.previousValue = this.normalizeValue(value);\n };\n\n private setValue = ({\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 this.setPreviousValue(previousValue ?? this.value);\n this.previousValueOrigin = origin;\n\n if (this.type === \"number\") {\n numberStringFormatter.numberFormatOptions = {\n locale: this.effectiveLocale,\n numberingSystem: this.numberingSystem,\n useGrouping: this.groupSeparator,\n signDisplay: \"never\",\n };\n\n const isValueDeleted =\n this.previousValue?.length > value.length || this.value?.length > value.length;\n const hasTrailingDecimalSeparator = value.charAt(value.length - 1) === \".\";\n const sanitizedValue =\n hasTrailingDecimalSeparator && isValueDeleted ? value : sanitizeNumberString(value);\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.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 } else {\n this.userChangedValue = origin === \"user\" && this.value !== value;\n this.value = value;\n }\n\n if (origin === \"direct\") {\n this.setInputValue(value);\n this.previousEmittedValue = value;\n }\n\n if (nativeEvent) {\n const calciteInputInputEvent = this.calciteInputInput.emit();\n if (calciteInputInputEvent.defaultPrevented) {\n this.value = this.previousValue;\n this.displayedValue =\n this.type === \"number\"\n ? numberStringFormatter.localize(this.previousValue)\n : this.previousValue;\n } else if (committing) {\n this.emitChangeIfUserModified();\n }\n }\n };\n\n private inputKeyUpHandler = (): void => {\n window.clearInterval(this.nudgeNumberValueIntervalId);\n };\n\n private warnAboutInvalidNumberValue(value: string): void {\n if (this.type === \"number\" && 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 const suffixText =
{this.suffixText}
;\n\n const autofocus = this.el.autofocus || this.el.hasAttribute(\"autofocus\") ? true : null;\n const enterKeyHint = this.el.enterKeyHint || this.el.getAttribute(\"enterkeyhint\");\n const inputMode = this.el.inputMode || this.el.getAttribute(\"inputmode\");\n\n const localeNumberInput =\n this.type === \"number\" ? (\n \n ) : null;\n\n const childEl =\n this.type !== \"number\"\n ? [\n ,\n this.isTextarea ? (\n
\n \n
\n ) : null,\n ]\n : null;\n\n return (\n \n \n (this.inputWrapperEl = el)}\n >\n {this.type === \"number\" && this.numberButtonType === \"horizontal\" && !this.readOnly\n ? numberButtonsHorizontalDown\n : null}\n {this.prefixText ? prefixText : null}\n
\n {localeNumberInput}\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.type === \"number\" && this.numberButtonType === \"vertical\" && !this.readOnly\n ? numberButtonsVertical\n : null}\n {this.suffixText ? suffixText : null}\n {this.type === \"number\" && 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":[]}