{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/vue-autonumeric/dist/vue-autonumeric.min.js","webpack:///./vendor/autonumeric/dist/autoNumeric.js","webpack:///./views/App.vue?b3b6","webpack:///./node_modules/vue-loader/lib/runtime/componentNormalizer.js","webpack:///./views/App.vue","webpack:///views/App.vue","webpack:///./node_modules/vue-router/dist/vue-router.esm.js","webpack:///./views/pages/Dashboard.vue?1194","webpack:///views/pages/Dashboard.vue","webpack:///./views/pages/Dashboard.vue","webpack:///./views/pages/OrderOverview.vue?c059","webpack:///views/pages/OrderOverview.vue","webpack:///./views/pages/OrderOverview.vue","webpack:///./routes.js","webpack:///./widgets/AkApprovalStatusSelect.vue?1df6","webpack:///widgets/AkApprovalStatusSelect.vue","webpack:///./widgets/AkApprovalStatusSelect.vue","webpack:///./widgets/AkPrice.vue?0aef","webpack:////Volumes/htdocs/optiek-dominiek-blueprints/vendor/multimedium/spine/resources/spine-appkit-vue/src/components/form/mixins/FormElementMixin.js","webpack:///./widgets/AkPrice.vue","webpack:///widgets/AkPrice.vue","webpack:///./main.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","self","e","configurable","default","version","__e","window","Math","Function","__g","a","propertyIsEnumerable","split","TypeError","ceil","floor","isNaN","VueAutonumeric","Vue","component","u","f","options","render","staticRenderFns","_scopeId","computed","keys","forEach","esModule","this","tag","type","placeholder","contenteditable","hasContentEditable","attrs","ref","on","updateVModel","props","required","validator","String","Array","resetOnOptions","Boolean","data","anElement","initialOptions","created","isArray","manageOptionElement","readOnly","mounted","$refs","autoNumericElement","set","anInfo","methods","$emit","getNumber","getPredefinedOptions","console","warn","watch","reset","mergeOptions","_getOptionObject","update","JSON","stringify","apply","arguments","assign","S","F","G","v","h","P","y","B","W","b","O","x","length","virtual","R","U","document","createElement","toString","valueOf","writable","join","concat","push","slice","min","max","random","getOwnPropertySymbols","factory","__webpack_modules__","__unused_webpack_module","__webpack_exports__","_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__","_AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__","_maths_Evaluator__WEBPACK_IMPORTED_MODULE_2__","_maths_Parser__WEBPACK_IMPORTED_MODULE_3__","_toConsumableArray","arr","_arrayLikeToArray","_arrayWithoutHoles","iter","iterator","from","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","_slicedToArray","_arrayWithHoles","_i","_s","_e","_x","_r","_arr","_n","_d","next","done","err","_iterableToArrayLimit","_nonIterableRest","minLen","constructor","test","len","arr2","_extends","target","source","_typeof","obj","_classCallCheck","instance","Constructor","_defineProperties","descriptor","_toPropertyKey","_defineProperty","arg","input","hint","prim","toPrimitive","undefined","res","Number","_toPrimitive","AutoNumeric","_this","arg1","arg2","arg3","_AutoNumeric$_setArgu","_setArgumentsValues","domElement","initialValue","userOptions","defaultRawValue","_setSettings","_checkElement","savedCancellableValue","historyTable","historyTableIndex","onGoingRedo","parentForm","_getParentForm","runOnce","settings","formatOnPageLoad","_formatDefaultValueOnPageLoad","valueToSet","isNull","emptyInputBehavior","minimumValue","maximumValue","zero","focus","press","always","_setElementAndRawValue","hasEventListeners","isInputElement","isContentEditable","noEventListeners","_createEventListeners","_setWritePermissions","_saveInitialValues","storageNamePrefix","_setPersistentStorageName","validState","isFocused","isWheelEvent","isDropEvent","isEditing","rawValueOnFocus","internalModification","attributeToWatch","_getAttributeToWatch","getterSetter","getOwnPropertyDescriptor","__proto__","_addWatcher","createLocalList","_createLocalList","_addToGlobalList","global","newValue","autoNumericLocalList","aNObject","setUnformatted","callback","result","_executeCallback","getNumericString","getFormatted","getLocalized","reformat","unformat","unformatLocalized","forcedOutputFormat","_len","newOptions","_key","isPristine","checkOnlyRawValue","clear","forceClearAll","remove","wipe","nuke","has","domElementOrAutoNumericObject","node","addObject","otherAutoNumericObject","getAutoNumericElement","_hasLocalList","mergedLocalLists","otherANLocalList","_getLocalList","size","Map","mergeMaps","_addToLocalList","_setLocalList","removeObject","keepCurrentANObject","initialCompleteLocalList","empty","keepEachANObjectInItsOwnList","elements","getList","rawValue","defaultSettings","allowDecimalPadding","_allowDecimalPadding","alwaysAllowDecimalCharacter","_alwaysAllowDecimalCharacter","caretPositionOnFocus","_caretPositionOnFocus","_createLocalList2","_deleteLocalList","currencySymbol","_currencySymbol","currencySymbolPlacement","_currencySymbolPlacement","decimalCharacter","_decimalCharacter","decimalCharacterAlternative","_decimalCharacterAlternative","decimalPlaces","_decimalPlaces","warning","showWarnings","decimalPlacesRawValue","_decimalPlacesRawValue","decimalPlacesShownOnBlur","_decimalPlacesShownOnBlur","decimalPlacesShownOnFocus","_decimalPlacesShownOnFocus","defaultValueOverride","_defaultValueOverride","digitalGroupSpacing","_digitalGroupSpacing","digitGroupSeparator","_digitGroupSeparator","divisorWhenUnfocused","_divisorWhenUnfocused","_emptyInputBehavior","eventBubbles","_eventBubbles","eventIsCancelable","_eventIsCancelable","failOnUnknownOption","_failOnUnknownOption","_formatOnPageLoad","formulaMode","_formulaMode","historySize","_historySize","invalidClass","_invalidClass","isCancellable","_isCancellable","leadingZero","_leadingZero","_maximumValue","_minimumValue","modifyValueOnUpDownArrow","_modifyValueOnUpDownArrow","modifyValueOnWheel","_modifyValueOnWheel","negativeBracketsTypeOnBlur","_negativeBracketsTypeOnBlur","negativePositiveSignPlacement","_negativePositiveSignPlacement","negativeSignCharacter","_negativeSignCharacter","negativePositiveSignBehavior","_negativePositiveSignBehavior","_noEventListeners","noEvents","addEvents","_removeEventListeners","onInvalidPaste","_onInvalidPaste","outputFormat","_outputFormat","overrideMinMaxLimits","_overrideMinMaxLimits","positiveSignCharacter","_positiveSignCharacter","rawValueDivisor","_rawValueDivisor","_readOnly","roundingMethod","_roundingMethod","saveValueToSessionStorage","_saveValueToSessionStorage","symbolWhenUnfocused","_symbolWhenUnfocused","selectNumberOnly","_selectNumberOnly","selectOnFocus","_selectOnFocus","serializeSpaces","_serializeSpaces","showOnlyNumbersOnFocus","_showOnlyNumbersOnFocus","showPositiveSign","_showPositiveSign","_showWarnings","styleRules","_styleRules","suffixText","_suffixText","unformatOnHover","_unformatOnHover","unformatOnSubmit","_unformatOnSubmit2","upDownStep","_upDownStep","valuesToStrings","_valuesToStrings","watchExternalChanges","_watchExternalChanges","wheelOn","_wheelOn","wheelStep","_wheelStep","_triggerEvent","events","initialized","getElementValue","newRawValue","error","aNElement","protoProps","staticProps","throwError","isArg1Element","isElement","isArg1String","isString","isArg2Object","isObject","isArg2Array","isArg2Number","isNumberOrArabic","isArg2PreDefinedOptionName","_isPreDefinedOptionValid","isArg2Null","isArg2EmptyString","isEmptyString","isArg3Object","isArg3Array","isArg3Null","isArg3PreDefinedOptionName","querySelector","optionsArray","_this13","mergedOptions","optionObjectOrPredefinedOptionString","preDefinedOptionName","predefinedOptions","optionObjectOrPredefinedName","aNFormHandlerMap","stringsArray","isInArray","_checkValuesToStringsArray","values","hoveredWithAlt","formNode","_this14","inputList","getElementsByTagName","autoNumericInputs","domElementOrSelector","_isInGlobalList","weakMapName","WeakMap","autoNumericGlobalListName","_createWeakMap","autoNumericObject","_doesGlobalListExists","_createGlobalList","_getFromGlobalList","getSettings","shouldExtendDefaultOptions","originalOptions","isUndefinedOrNullOrEmpty","isOriginalOptionAnObject","_convertOldOptionsToNewOnes","getDefaultConfig","isTrueOrFalseString","isBoolean","optionsToUse","testPositiveInteger","testNumericalCharacters","testFloatOrIntegerAndPossibleNegativeSign","testPositiveFloatOrInteger","floats","isNumber","never","none","start","end","decimalLeft","decimalRight","_correctCaretPositionOnFocusAndSelectOnFocusOptions","doNoForceCaretPosition","select","comma","dot","normalSpace","thinSpace","narrowNoBreakSpace","noBreakSpace","noSeparator","apostrophe","arabicThousandsSeparator","dotAbove","privateUseTwo","two","twoThree","twoScaled","three","four","middleDot","arabicDecimalSeparator","decimalSeparatorKeySymbol","prefix","suffix","left","right","isNegative","_ref5","_ref6","leftBracket","rightBracket","contains","ceiling","ignore","invalid","parseFloat","isInt","_validateDecimalPlacesRawValue","clamp","truncate","replace","halfUpSymmetric","halfUpAsymmetric","halfDownSymmetric","halfDownAsymmetric","halfEvenBankersRounding","upRoundAwayFromZero","downRoundTowardZero","toCeilingTowardPositiveInfinity","toFloorTowardNegativeInfinity","toNearest05","toNearest05Alt","upToNext05","downToNext05","parentheses","brackets","chevrons","curlyBraces","angleBrackets","japaneseQuotationMarks","halfBrackets","whiteSquareBrackets","quotationMarks","guillemets","_isWithinRangeWithOverrideOption","allow","deny","keep","string","number","negativeDot","negativeComma","dotNegative","commaNegative","hover","plus","percent","userDefined","rule","isFunction","isValid","validate","optionsResult","_this15","optionObject","numericStringOrDomElement","isUndefined","_len5","_key5","_generateOptionsObjectFromOptionsArray","isNegativeSignAllowed","isPositiveSignAllowed","_setBrackets","regex","_cachesUsualRegularExpressions","valueString","_toNumericValue","triggerEvent","formatted","oldValue","oldRawValue","_checkValuesToStringsSettings","_correctNegativePositiveSignPlacementOption","_calculateDecimalPlacesOnInit","_roundFormattedValueShownOnFocus","_modifyNegativeSignAndDecimalCharacterForFormattedValue","_addGroupSeparators","formattedValue","format","setElementValue","isNumberStrict","_len6","_key6","_checkStringsToValuesSettings","objectKeyLookup","_settings$negativeBra","_settings$negativeBra2","firstBracket","lastBracket","charAt","_removeBrackets","_convertToNumericString","scientificToDecimal","unwantedCharacters","RegExp","NaN","originalDecimalPlacesRawValue","_roundRawValue","_toLocale","unformattedValue","outputFormatToUse","localizedValue","localize","isManagedByAutoNumeric","saveChangeToHistory","_get","getFunction","stripZeros","_stripAllNonNumberCharactersExceptCustomDecimalChar","_normalizeCurrencySuffixAndNegativeSignCharacters","allowedAutoStrip","match","numRegAutoStrip","negativeSign","_s$split2","integerPart","decimalPart","modifiedIntegerPart","mIntPos","mIntNeg","stripReg","_addBrackets","rearrangeSignsAndValueOrder","_mergeCurrencySignNegativePositiveSignAndValue","_settings$negativeBra4","lastIndexOf","convertToNumber","temp","arabicToLatinNumbers","hyphen","locale","signOnEmpty","inputValue","currentRawValue","isValueNegative","forcedRawValue","isNegativeWithBrackets","_isElementValueEmptyOrOnlyTheNegativeSign","_orderValueCurrencySymbolAndSuffixText","isZeroOrHasNoValue","decimalPlacesToRoundTo","_inputValue$split","_inputValue$split2","_inputValue$split3","_inputValue$split4","digitalGroup","substring","isNegativeStrict","_toggleNegativeBracket","signToUse","roundedInputValue","decimalPlacesNeeded","_roundValue","_roundFormattedValueShownOnBlur","_roundCloseTo05","temporaryDecimalPlacesOverride","_AutoNumeric$_prepare2","_prepareValueForRounding","decimalCharacterPosition","inputValueHasNoDot","_inputValue$split6","roundedStrLength","decimalPositionToUse","checkDecimalPlaces","inputValueRounded","zeros","_truncateZeros","odd","lastDigit","inputValueArray","_shouldRoundUp","round","indexOf","isPaste","_value$split2","modifiedDecimalPart","minParse","parseStr","maxParse","valParse","testMinMax","_this$_checkIfInRange2","_checkIfInRangeWithOverrideOption","minTest","maxTest","_cleanValueForRangeParse","doNotSelect","useDefault","additionalDecimalPlacesRawValue","currentSettings","decimalPlacesInOptions","negativeSignReg","aNegRegAutoStrip","formulaChars","oldOptionsConverter","aSep","nSep","dGroup","aDec","altDec","aSign","pSign","pNeg","aSuffix","oLimits","vMax","vMin","mDec","eDec","scaleDecimal","aStor","mRound","aPad","nBracket","wEmpty","lZero","aForm","sNumber","anDefault","unSetOnSubmit","outputType","debug","originalDecimalPlaces","option","trim","parsedMinValue","parsedMaxValue","parsedValue","eventKeyName","isFnKeys","keyName","_allFnKeys","isOSKeys","OSLeft","OSRight","isContextMenu","ContextMenu","isSomeNonPrintableKeys","_someNonPrintableKeys","isOtherNonPrintableKeys","NumLock","ScrollLock","Insert","Command","isUnrecognizableKeys","Unidentified","form","finalResult","_this16","intoAnArray","formatType","serializedSpaceCharacter","nodeName","toLowerCase","element","disabled","selected","encodeURIComponent","checked","valueResult","anObject","cloneObject","_serialize","initialValueHtmlAttribute","getAttribute","_this2","_onFocusInFunc","_onFocusIn","_onFocusInAndMouseEnterFunc","_onFocusInAndMouseEnter","_onFocusFunc","_onFocus","_onKeydownFunc","_onKeydown","_onKeypressFunc","_onKeypress","_onKeyupFunc","_onKeyup","_onFocusOutAndMouseLeaveFunc","_onFocusOutAndMouseLeave","_onPasteFunc","_onPaste","_onWheelFunc","_onWheel","_onDropFunc","_onDrop","_onKeydownGlobalFunc","_onKeydownGlobal","_onKeyupGlobalFunc","_onKeyupGlobal","addEventListener","_setupFormListener","removeEventListener","_removeFormListener","_this3","_onFormSubmitFunc","_onFormSubmit","_onFormResetFunc","_onFormReset","_hasParentFormCounter","_incrementParentFormCounter","_initializeFormCounterToOne","_storeFormHandlerFunction","anCount","_getParentFormCounter","_getFormHandlerFunction","submitFn","resetFn","_removeFormDataSetInfo","_decrementParentFormCounter","dataset","formElement","_getFormElement","_doesFormHandlerListExists","_createFormHandlerList","formHandlerName","randomString","anFormHandler","_hasFormHandlerFunction","_getFormHandlerKey","removeAttribute","useHtmlAttribute","_setReadOnly","_setReadWrite","setAttribute","_this4","_this$getterSetter","setter","val","_this5","_this$getterSetter2","nodeType","Node","ELEMENT_NODE","DOCUMENT_NODE","DOCUMENT_FRAGMENT_NODE","TEXT_NODE","isEmptyHistoryTable","_historyTableCurrentValueUsed","addNewHistoryState","nextHistoryStateIndex","arrayTrim","selection","getElementSelection","selectionStart","selectionEnd","_historyTableForget","check","undo","undoInfo","setElementSelection","_historyTableUndoOrRedo","numberOfEntriesToForget","shiftedAway","shift","indexToUse","_this6","positive","_addCSSClass","_removeCSSClass","negative","ranges","range","userObject","classes","callbackResult","userClass","index","cssClassName","classList","add","_this7","_len2","_key2","originalSettings","numericString","_updateEventListeners","_saveValueToPersistentStorage","setValue","_this$constructor$_ch","_this$constructor$_ch2","_checkValuesToStrings","isZero","_trimLeadingAndTrailingZeros","_getRawValueToFormat","_setValidOrInvalidState","_triggerRangeEvents","_removeValueFromPersistentStorage","strippedValue","normalizedValue","_stripAllNonNumberCharacters","_this8","_isUserManuallyEditingTheValue","rawValueModified","_parseStyleRules","requestAnimationFrame","_historyTableAdd","newElementValue","sendFormattedEvent","oldElementValue","_setElementValue","_setRawValue","valuesToStringsKeys","eventName","detail","trimPaddedZerosFromDecimalPlaces","selectNumber","_defaultSelectAll","valueLen","currencySymbolSize","negLen","suffixTextLen","isPositive","elementValue","decimalCount","parentNode","domElementToDetach","otherAnElement","_removeFromLocalList","reFormat","valueOrElement","optionOverride","_formatOrUnformatOther","stringOrElement","isFormatting","valueOrStringOrElement","settingsToUse","_cloneAndMergeSettings","domElementOrArrayOrString","_this9","attached","returnASingleAutoNumericObject","domElementsArray","querySelectorAll","currentLocalList","autoNumericObjectsArray","originalCreateLocalListSetting","newAutoNumericElement","temporaryForcedOptions","_removeWatcher","_removeFromGlobalList","removeChild","forceSearch","newParentForm","oldANChildren","_getFormAutoNumericChildren","_this10","inputElementsList","nonInputContentEditableElementsList","_getContenteditableElements","arrayUnique","filter","hasAttribute","elementsInside","elementsOutside","tagName","_serializeNumericString","_serializeFormatted","_serializeLocalized","_serializeNumericStringArray","_serializeFormattedArray","_serializeLocalizedArray","formArrayNumericString","formArrayFormatted","formArrayLocalized","_getChildANInputElement","formUnformat","submit","formReformat","formNumericString","formFormatted","formUnformatLocalized","formLocalized","formJsonNumericString","formJsonFormatted","formJsonLocalized","localList","_len3","newSettings","_key3","_len4","_key4","predefinedOption","_mergeSettings","_updatePredefinedOptions","French","NorthAmerican","British","Swiss","Japanese","Spanish","Chinese","Brazilian","htmlAttribute","camelize","isTrailingNegative","totalLength","valueSize","integerSize","hasDecimalChar","offsetDecimalChar","caretPosition","positiveNegativeSignSize","minRangeExceeded","maxRangeExceeded","setInvalidState","invalidValue","setValidState","correctedValue","minRangeOk","_isMinimumRangeRespected","maxRangeOk","_isMaximumRangeRespected","_setValidState","_setInvalidState","originalDigitGroupSeparator","originalCurrencySymbol","originalSuffixText","rawValueStorageName","id","decodeURIComponent","sessionStorage","setItem","getItem","removeItem","altKey","_unformatAltHovered","_reformatAltHovered","elementValueToSet","rawValueToFormat","roundedValue","_roundFormattedValueShownOnFocusOrBlur","onlyNumbers","valueOnFocus","lastVal","isEmptyValue","orderedValue","orderedValueTest","_saveCancellableValue","_initialCaretPosition","formula","ast","evaluate","invalidFormula","validFormula","eventKey","Backspace","Delete","LeftArrow","RightArrow","Home","End","getHoveredElement","_updateEventKeyInfo","keydownEventCounter","initialValueOnFirstKeydown","initialRawValueOnFirstKeydown","Esc","Enter","_exitFormulaMode","_acceptNonPrintableKeysInFormulaMode","Equal","_enterFormulaMode","UpArrow","DownArrow","upDownArrowAction","processed","preventDefault","targetValue","change","_updateInternalProperties","_processNonPrintableKeysAndShortcuts","isDeletionAllowed","_processCharacterDeletion","_formatValue","throwInput","_processCharacterInsertion","position","Z","z","ctrlKey","shiftKey","_historyTableRedo","_historyTableUndo","Y","metaKey","X","cutNumber","_setCaretPosition","Alt","skip","valuePartsBeforePaste","Tab","_saveRawValueForAndroid","_targetValue","AndroidDefault","isRawValueNull","_this$constructor$_ch4","elementValueIsAlreadySet","_modifyNegativeSignAndDecimalCharacterForRawValue","groupedValue","_onBlur","rawPastedText","eventTarget","clipboardData","getData","explicitOriginalTarget","initialFormattedValue","selectionSize","_untranslatedPastedText","_preparePastedText","pastedRawValue","isPasteNegative","pastedText","caretPositionOnInitialTextAfterPasting","untranslatedPastedText","isPasteNegativeAndInitialValueIsPositive","isInitialValueNegative","leftFormattedPart","rightFormattedPart","setRawNegativeSign","convertCharacterCountToIndexPosition","countNumberCharactersOnTheCaretLeftSide","leftPart","rightPart","leftPartContainedADot","negativePasteOnNegativeNumber","lastGoodKnownResult","pastedTextIndex","modifiedLeftPart","_checkIfInRange","lastGoodKnownResultIndex","lastGoodKnownResultSize","replaceCharAt","indexSelectionEndInRawValue","selectedText","countCharInText","valueHasBeenSet","valueHasBeenClamped","clampedValue","clampToRangeLimits","caretPositionInFormattedNumber","findCaretPositionInFormattedNumber","isUp","isDown","step","currentUnformattedValue","stepToUse","addAndRoundToNearestAuto","subtractAndRoundToNearestAuto","_setSelection","_wheelAndUpDownActions","wheelAction","scrollBy","deltaY","isDeltaYZero","isWheelUpEvent","isWheelDownEvent","isWheelEventWithZeroDeltaY","droppedText","dataTransfer","cleanedValue","unformatOther","previousValue","_this11","map","_unformatOnSubmit","_this12","_getDefaultValue","setTimeout","character","hoveredElement","allowedTagList","currentElementTag","_isElementTagSupported","_isInputElement","_isInputTypeSupported","_isContentEditable","currentValue","forcedInitialValue","unLocalizedCurrentValue","_getValueFromPersistentStorage","toStrip","Infinity","maximumValueIntegerPart","minimumValueIntegerPart","decimalPlacesRawValueInOptions","_calculateDecimalPlacesOnUpdate","caretFix","_transformOptionsValuesToDefaultTypes","_runCallbacksFoundInTheSettingsObject","_setNegativePositiveSignPermissions","_calculateVMinAndVMaxIntegerSizes","_setTrailingNegativeSignInfo","_calculateValuesToStringsKeys","isEmptyObj","_keepAnOriginalSettingsCopy","text","_this$_getLeftAndRigh2","_getLeftAndRightPartAroundTheSelection","Hyphen","Minus","num0","numpad0","_this$_normalizeParts","_normalizeParts","_this$_normalizeParts2","normalizedLeft","normalizedRight","normalizedNewValue","_AutoNumeric$_checkIf","_AutoNumeric$_checkIf2","roundedRawValue","_truncateDecimalPlaces","testValue","valueToSetOnEmpty","roundedValueToShow","currencySymbolLen","_this$_getSignPositio2","_getSignPosition","signPosition","currencySymbolPosition","oldParts","_this$_getLeftAndRigh4","substr","_setValueParts","_checkPaste","_shouldSkipEventKey","_expandSelectionOnSign","_directionKeys","_ref3","_ref4","isValNegative","_this$_getUnformatted4","_getUnformattedLeftAndRightPartAroundTheSelection","_this$_getUnformatted2","_this$_processCharact2","_processCharacterDeletionIfTrailingNegativeSign","_this$_getUnformatted6","_isDecimalCharacterInsertionAllowed","eventNumber","subParts","leftReg","leftAr","signParts","escapeChr","escapedParts","miniParts","newLeft","multiple","rootElement","exclude","filterOut","isInitialValueArray","isInitialValueArrayAndNotEmpty","secondArgumentIsInitialValueArray","secondArgumentIsOptionArray","typeOfFirstArrayElement","isOptionsArrayAndNotEmpty","thirdArgumentIsOptionArray","_typeOfFirstArrayElement","initialValueArraySize","isInitialValueNumber","_AutoNumeric__WEBPACK_IMPORTED_MODULE_0__","doNotAllow","createList","doNotOverride","bubbles","isCancelable","medium","cancellable","tenTrillions","modifyValue","doNotToggle","readWrite","doNotSave","selectNumbersOnly","showAll","hide","show","keepCurrentValue","doNotWatch","progressive","freeze","__WEBPACK_DEFAULT_EXPORT__","AutoNumericEnum","fromCharCodeKeyCode","0","8","9","13","16","17","18","19","20","27","32","33","34","35","36","37","38","39","40","45","46","48","49","50","51","52","53","54","55","56","57","91","92","93","96","97","98","99","100","101","102","103","104","105","106","107","109","110","111","112","113","114","115","116","117","118","119","120","121","122","123","144","145","173","182","183","186","187","188","189","190","191","192","219","220","221","222","224","225","AltGr","CapsLock","Ctrl","Fn","FnLock","Hyper","Meta","Shift","Super","SymbolLock","Space","PageUp","PageDown","Clear","Copy","CrSel","Cut","EraseEof","ExSel","Paste","Redo","Undo","Accept","Again","Attn","Cancel","Execute","Find","Finish","Help","Pause","Play","Props","Select","ZoomIn","ZoomOut","BrightnessDown","BrightnessUp","Eject","LogOff","Power","PowerOff","PrintScreen","Hibernate","Standby","WakeUp","Compose","Dead","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","Print","num1","num2","num3","num4","num5","num6","num7","num8","num9","g","j","k","q","w","A","C","D","E","H","I","J","K","L","M","N","Q","T","V","Semicolon","Comma","Plus","Dot","Slash","Backquote","LeftParenthesis","RightParenthesis","LeftBracket","RightBracket","Backslash","Quote","numpad1","numpad2","numpad3","numpad4","numpad5","numpad6","numpad7","numpad8","numpad9","NumpadDot","NumpadDotAlt","NumpadMultiply","NumpadPlus","NumpadMinus","NumpadSubtract","NumpadSlash","NumpadDotObsoleteBrowsers","NumpadMultiplyObsoleteBrowsers","NumpadPlusObsoleteBrowsers","NumpadMinusObsoleteBrowsers","NumpadSlashObsoleteBrowsers","native","_AutoNumericEnum__WEBPACK_IMPORTED_MODULE_0__","AutoNumericHelper","str","lowercaseValue","reference","prop","isFinite","_char","latinConvertedNumber","parseInt","func","needle","array","Error","Element","abs","event","which","keyCode","isSeleniumBot","keyCodeNumber","potentialResult","fromCharCode","tem","ua","navigator","userAgent","exec","appName","appVersion","splice","webdriver","numberOrNumericString","checkEverywhere","newCharacter","formattedNumberString","numberDotOrNegativeSign","numberDotAndNegativeSignCount","rawNumberString","caretPositionInRawValue","formattedNumberStringIndex","formattedNumberStringSize","rawNumberStringSize","rawNumberStringIndex","charCounter","characterCount","isSelectionStartUndefined","selectionInfo","getSelection","getRangeAt","startOffset","endOffset","setSelectionRange","firstChild","createRange","setStart","setEnd","removeAllRanges","addRange","message","showWarning","WheelEvent","wheelEvent","_String$split4","stepPlace","isAddition","forceDecimalPlaces","absValue","offset","rawValueMinimumOffset","pow","minimumOffsetFirstDecimalPlaceIndex","indexFirstNonZeroDecimalPlace","roundToNearest","lengthValue","_result","_offset","decimalPlacesLimit","modifyAndRoundToNearestAuto","arabicNumbers","returnANumber","parseDecimalCharacter","parseThousandSeparator","charCodeAt","resultAsNumber","cancelable","CustomEvent","createEvent","initCustomEvent","dispatchEvent","nL","search","xc","yc","xNeg","strLength","textContent","setCustomValidity","separator","removeData","skipFirstWord","words","word","toUpperCase","nodeValue","excludedElements","_numericString$split2","trimmedDecimalPart","hoveredElements","arrLength","_ref","Set","mapObjects","reduce","as","entries","find","_char2","numericValue","_val$split2","exponent","isNegativeExponent","_int","_float","insertAt","repeat","alwaysAllow","doNotCreateList","currencySign","austral","australCentavo","baht","cedi","cent","colon","cruzeiro","dollar","dong","drachma","dram","european","euro","florin","franc","guarani","hryvnia","kip","att","lepton","lira","liraOld","lari","mark","mill","naira","peseta","peso","pfennig","pound","real","riel","ruble","rupee","rupeeOld","shekel","shekelAlt","taka","tenge","togrog","won","yen","one","five","six","percentage","permille","basisPoint","doesNotBubble","isNotCancelable","fail","doNotFormat","enabled","verySmall","small","large","veryLarge","insane","MAX_SAFE_INTEGER","notCancellable","oneBillion","doNothing","minus","heavyMinus","fullWidthHyphen","circledMinus","squaredMinus","triangleMinus","plusMinus","minusPlus","dotMinus","minusTilde","not","toggle","fullWidthPlus","heavyPlus","doublePlus","triplePlus","circledPlus","squaredPlus","trianglePlus","dotPlus","altHebrewPlus","save","selectAll","positiveNegative","range0To100With4Steps","evenOdd","rangeSmallAndZero","doNotUnformat","zeroDash","oneAroundZero","1","getOwnPropertyNames","optionName","valuesToStringObjectName","_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_1__","japanese","euroPos","euroNeg","euroSpace","euroSpacePos","euroSpaceNeg","percentageEU2dec","percentageEU2decPos","percentageEU2decNeg","percentageEU3dec","percentageEU3decPos","percentageEU3decNeg","dollarPos","dollarNeg","dollarNegBrackets","percentageUS2dec","percentageUS2decPos","percentageUS2decNeg","percentageUS3dec","percentageUS3decPos","percentageUS3decNeg","turkish","Turkish","dotDecimalCharCommaSeparator","commaDecimalCharDotSeparator","integer","integerPos","integerNeg","floatPos","floatNeg","numeric","numericPos","numericNeg","ASTNode","Evaluator","subtree","_Token__WEBPACK_IMPORTED_MODULE_1__","Lexer","textLength","token","_skipSpaces","isDigit","_getNumber","symbol","startIndex","_ASTNode__WEBPACK_IMPORTED_MODULE_0__","_Lexer__WEBPACK_IMPORTED_MODULE_1__","Parser","customDecimalCharacter","lexer","getNextToken","_exp","termNode","_term","exprNode","_moreExp","createNode","createLeaf","factorNode","_factor","termsNode","_moreTerms","expression","factor","createUnaryNode","_match","expected","getIndex","_createClass","Token","__webpack_module_cache__","cachedModule","definition","_vm","_h","$createElement","_c","_self","class","$authService","isAuthenticated","userInterface","drawerPinned","scopedSlots","_u","fn","proxy","_v","model","showDrawer","$$v","logoPath","$getSetting","close","$event","togglePinned","items","menu","searchEnabled","menuItemClicked","staticClass","loading","normalizeComponent","scriptExports","functionalTemplate","injectStyles","scopeId","moduleIdentifier","shadowMode","hook","_compiled","functional","context","$vnode","ssrContext","parent","__VUE_SSR_CONTEXT__","_registeredComponents","_ssrRegister","$root","$options","shadowRoot","_injectStyles","originalRender","existing","beforeCreate","_withStripped","__file","extend","encodeReserveRE","encodeReserveReplacer","commaRE","encode","decode","castQueryParamValue","parseQuery","query","param","parts","stringifyQuery","val2","trailingSlashRE","createRoute","record","location","redirectedFrom","router","clone","route","meta","path","hash","params","fullPath","getFullPath","matched","formatMatch","START","unshift","_stringifyQuery","isSameRoute","onlyPath","isObjectEqual","aKeys","sort","bKeys","every","aVal","bVal","handleRouteEntered","instances","cbs","enteredCbs","i$1","_isBeingDestroyed","View","_","children","routerView","$route","cache","_routerViewCache","depth","inactive","_routerRoot","vnodeData","keepAlive","_directInactive","_inactive","$parent","routerViewDepth","cachedData","cachedComponent","configProps","fillPropsinData","components","registerRouteInstance","vm","current","prepatch","vnode","componentInstance","init","propsToPass","config","resolveProps","resolvePath","relative","base","append","firstChar","stack","pop","segments","segment","cleanPath","isarray","pathToRegexp_1","pathToRegexp","parse_1","parse","compile_1","tokensToFunction","tokensToFunction_1","tokensToRegExp_1","tokensToRegExp","PATH_REGEXP","tokens","defaultDelimiter","delimiter","escaped","capture","group","modifier","asterisk","partial","optional","pattern","escapeGroup","escapeString","encodeURIComponentPretty","encodeURI","matches","flags","opts","pretty","attachKeys","re","sensitive","strict","endsWithDelimiter","groups","regexpToRegexp","arrayToRegexp","stringToRegexp","compile","regexpCompileCache","fillParams","routeMsg","filler","pathMatch","normalizeLocation","raw","_normalized","params$1","rawPath","parsedPath","hashIndex","queryIndex","parsePath","basePath","extraQuery","_parseQuery","parsedQuery","resolveQuery","_Vue","noop","Link","to","custom","exact","exactPath","activeClass","exactActiveClass","ariaCurrentValue","this$1","$router","resolve","href","globalActiveClass","linkActiveClass","globalExactActiveClass","linkExactActiveClass","activeClassFallback","exactActiveClassFallback","compareTarget","queryIncludes","isIncludedRoute","handler","guardEvent","click","scopedSlot","$scopedSlots","$hasNormal","navigate","isActive","isExactActive","findAnchor","child","$slots","isStatic","aData","handler$1","event$1","aAttrs","defaultPrevented","button","currentTarget","inBrowser","createRouteMap","routes","oldPathList","oldPathMap","oldNameMap","parentRoute","pathList","pathMap","nameMap","addRouteRecord","matchAs","pathToRegexpOptions","normalizedPath","normalizePath","caseSensitive","compileRouteRegex","alias","redirect","beforeEnter","childMatchAs","aliases","aliasRoute","createMatcher","currentRoute","_createRoute","paramNames","record$1","matchRoute","originalRedirect","resolveRecordPath","aliasedMatch","aliasedRecord","addRoute","parentOrRoute","getRoutes","addRoutes","Time","performance","now","Date","genStateKey","toFixed","getStateKey","setStateKey","positionStore","setupScroll","history","scrollRestoration","protocolAndPath","protocol","host","absolutePath","stateCopy","state","replaceState","handlePopState","handleScroll","isPop","app","behavior","scrollBehavior","$nextTick","getScrollPosition","shouldScroll","then","scrollToPosition","catch","saveScrollPosition","pageXOffset","pageYOffset","isValidPosition","normalizePosition","hashStartsWithNumberRE","selector","el","getElementById","docRect","documentElement","getBoundingClientRect","elRect","top","getElementPosition","style","scrollTo","supportsPushState","pushState","url","runQueue","queue","cb","NavigationFailureType","redirected","aborted","cancelled","duplicated","createNavigationRedirectedError","createRouterError","propertiesToLog","createNavigationCancelledError","_isRouter","isError","isNavigationFailure","errorType","resolveAsyncComponents","hasAsync","pending","flatMapComponents","def","cid","once","resolvedDef","hasSymbol","resolved","reject","reason","msg","comp","flatten","called","args","History","baseEl","normalizeBase","ready","readyCbs","readyErrorCbs","errorCbs","listeners","extractGuards","records","reverse","guards","guard","extractGuard","bindGuard","listen","onReady","errorCb","onError","transitionTo","onComplete","onAbort","prev","confirmTransition","updateRoute","ensureURL","afterHooks","abort","lastRouteIndex","lastCurrentIndex","updated","activated","deactivated","resolveQueue","extractLeaveGuards","beforeHooks","extractUpdateHooks","createNavigationAbortedError","bindEnterGuard","extractEnterGuards","resolveHooks","setupListeners","teardown","cleanupListener","HTML5History","_startLocation","getLocation","expectScroll","supportsScroll","handleRoutingEvent","go","fromRoute","getCurrentLocation","pathname","pathLowerCase","baseLowerCase","HashHistory","fallback","checkFallback","ensureSlash","getHash","replaceHash","eventType","pushHash","getUrl","AbstractHistory","targetIndex","VueRouter","apps","matcher","prototypeAccessors","registerHook","list","$once","routeOrError","handleInitialScroll","_route","beforeEach","beforeResolve","afterEach","Promise","back","forward","getMatchedComponents","createHref","normalizedTo","defineProperties","install","installed","isDef","registerInstance","callVal","_parentVnode","mixin","_router","util","defineReactive","destroyed","strats","optionMergeStrategies","beforeRouteEnter","beforeRouteLeave","beforeRouteUpdate","START_LOCATION","use","_l","item","currentUrl","title","childItem","order","cart","receipt","static","staticStyle","display","backToOrders","$t","openOrderDefinitionForm","padding","toggleProcessed","code","line","shoppable","domProps","innerHTML","quantity","amount","lines","paymentStatus","inspector","paymentType","paymentCardHolderName","getPaymentCardNumber","paymentCardExpirationMonthAndYear","paymentMessage","comments","orderHistory","_f","createdAt","date","internalComments","cartDetails","firstName","surname","streetName","streetNumber","boxNumber","postalCode","city","countryIso","phone","email","invoiceFirstName","invoiceSurnames","invoiceCompanyName","invoiceVat","invoiceStreetAddress","invoiceStreetNumber","invoiceBoxNumber","invoicePostalCode","invoiceCity","invoiceCountryIso","invoiceEmail","shippingTypeId","shippingCompanyName","shippingName","shippingReceiverName","shippingFirstName","shippingSurnames","shippingEmail","shippingStreetAddress","shippingStreetNumber","shippingBoxNumber","shippingPostalCode","shippingCity","shippingCountryIso","requestedDeliveryDate","$moment","hasDateShippingPlanned","paymentSaved","confirmTitle","confirmText","confirmLabel","cancelLabel","confirm","cancelOrder","cancel","showConfirm","$get","orderCode","success","bundle","gridDefinition","getOrder","objectId","hashId","$post","dataFetchParams","localStorage","persistentFilters","$cookies","allParams","Dashboard","routesAppended","cmsRouter","getRoutesAppend","gridRouteIndex","findIndex","OrderOverview","childview","template","getRoutesPrepend","setActiveRouter","selectOptions","valueChanged","statuses","label","helpText","hasError","_g","autoNumericOptions","readonly","$currentListeners","_t","removeFromListener","localValue","hidden","isEmpty","locales","isLocalized","$localeHandler","getActiveLocale","formatStateOutput","tempListeners","$listeners","listerner","mixins","FormElementMixin","decimalNumber","AkApprovalStatusSelect","AkPrice","globalMessages","App","$mount","AppKit"],"mappings":"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","file":"admin.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n","!function(t,n){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=n(require(\"AutoNumeric\")):\"function\"==typeof define&&define.amd?define(\"VueAutonumeric\",[\"AutoNumeric\"],n):\"object\"==typeof exports?exports.VueAutonumeric=n(require(\"AutoNumeric\")):t.VueAutonumeric=n(t.AutoNumeric)}(\"undefined\"!=typeof self?self:this,function(t){return function(t){function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var e={};return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:r})},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,\"a\",e),e},n.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},n.p=\"\",n(n.s=10)}([function(t,n){var e=t.exports={version:\"2.5.4\"};\"number\"==typeof __e&&(__e=e)},function(t,n){var e=t.exports=\"undefined\"!=typeof window&&window.Math==Math?window:\"undefined\"!=typeof self&&self.Math==Math?self:Function(\"return this\")();\"number\"==typeof __g&&(__g=e)},function(t,n){t.exports=function(t){return\"object\"==typeof t?null!==t:\"function\"==typeof t}},function(t,n,e){t.exports=!e(4)(function(){return 7!=Object.defineProperty({},\"a\",{get:function(){return 7}}).a})},function(t,n){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,n){var e={}.hasOwnProperty;t.exports=function(t,n){return e.call(t,n)}},function(t,n,e){var r=e(7),o=e(8);t.exports=function(t){return r(o(t))}},function(t,n,e){var r=e(32);t.exports=Object(\"z\").propertyIsEnumerable(0)?Object:function(t){return\"String\"==r(t)?t.split(\"\"):Object(t)}},function(t,n){t.exports=function(t){if(void 0==t)throw TypeError(\"Can't call method on \"+t);return t}},function(t,n){var e=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:e)(t)}},function(t,n,e){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.VueAutonumeric=void 0;var r=e(11),o=function(t){return t&&t.__esModule?t:{default:t}}(r);\"undefined\"!=typeof window&&window.Vue&&Vue.component(\"vue-autonumeric\",o.default),n.VueAutonumeric=o.default,n.default=o.default},function(t,n,e){var r=e(12)(e(13),null,null,null);t.exports=r.exports},function(t,n){t.exports=function(t,n,e,r){var o,i=t=t||{},u=typeof t.default;\"object\"!==u&&\"function\"!==u||(o=t,i=t.default);var f=\"function\"==typeof i?i.options:i;if(n&&(f.render=n.render,f.staticRenderFns=n.staticRenderFns),e&&(f._scopeId=e),r){var c=Object.create(f.computed||null);Object.keys(r).forEach(function(t){var n=r[t];c[t]=function(){return n}}),f.computed=c}return{esModule:o,exports:i,options:f}}},function(t,n,e){\"use strict\";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(n,\"__esModule\",{value:!0});var o=e(14),i=r(o),u=e(16),f=r(u),c=e(43),a=r(c),s={};n.default={name:\"VueAutonumeric\",render:function(t){var n=\"input\"===this.tag,e=void 0;return e=n?{type:\"text\",placeholder:this.placeholder}:{contenteditable:this.hasContentEditable},t(this.tag,{attrs:e,ref:\"autoNumericElement\",on:{\"autoNumeric:rawValueModified\":this.updateVModel}})},props:{value:{required:!1,validator:function(t){return\"number\"==typeof t||\"string\"==typeof t||\"\"===t||null===t}},options:{type:[Object,String,Array],required:!1,default:function(){return s}},resetOnOptions:{type:Boolean,required:!1,default:!0},placeholder:{type:String,required:!1},tag:{type:String,required:!1,default:\"input\"}},data:function(){return{anElement:null,initialOptions:null,hasContentEditable:!0}},created:function(){var t=this;if(Array.isArray(this.options)){var n={};this.options.forEach(function(e){t.initialOptions=t.manageOptionElement(e),n=(0,f.default)(n,t.initialOptions)}),this.initialOptions=n}else this.initialOptions=this.manageOptionElement(this.options);this.hasContentEditable=!this.initialOptions.readOnly},mounted:function(){this.anElement=new a.default(this.$refs.autoNumericElement,this.initialOptions),null!==this.value&&\"\"!==this.value&&(this.anElement.set(this.value),this.updateVModel())},computed:{anInfo:function(){return{value:this.value,options:this.options}}},methods:{updateVModel:function(t){null!==this.anElement&&this.$emit(\"input\",this.anElement.getNumber(),t)},manageOptionElement:function(t){var n=void 0;return\"string\"==typeof t||t instanceof String?void 0!==(n=a.default.getPredefinedOptions()[t])&&null!==n||(console.warn(\"The given pre-defined options [\"+t+\"] is not recognized by AutoNumeric.\\nSwitching back to the default options.\"),n=s):n=t,n}},watch:{anInfo:function(t,n){if(n.options&&(0,i.default)(t.options)!==(0,i.default)(n.options)){this.resetOnOptions&&this.anElement.options.reset();var e=void 0;e=Array.isArray(t.options)?a.default.mergeOptions(t.options):a.default._getOptionObject(t.options),this.anElement.update(e)}void 0!==t.value&&this.anElement.getNumber()!==t.value&&t.value!==n.value&&this.anElement.set(t.value)}}}},function(t,n,e){t.exports={default:e(15),__esModule:!0}},function(t,n,e){var r=e(0),o=r.JSON||(r.JSON={stringify:JSON.stringify});t.exports=function(t){return o.stringify.apply(o,arguments)}},function(t,n,e){t.exports={default:e(17),__esModule:!0}},function(t,n,e){e(18),t.exports=e(0).Object.assign},function(t,n,e){var r=e(19);r(r.S+r.F,\"Object\",{assign:e(29)})},function(t,n,e){var r=e(1),o=e(0),i=e(20),u=e(22),f=e(5),c=function(t,n,e){var a,s,l,p=t&c.F,d=t&c.G,v=t&c.S,h=t&c.P,y=t&c.B,m=t&c.W,b=d?o:o[n]||(o[n]={}),O=b.prototype,x=d?r:v?r[n]:(r[n]||{}).prototype;d&&(e=n);for(a in e)(s=!p&&x&&void 0!==x[a])&&f(b,a)||(l=s?x[a]:e[a],b[a]=d&&\"function\"!=typeof x[a]?e[a]:y&&s?i(l,r):m&&x[a]==l?function(t){var n=function(n,e,r){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(n);case 2:return new t(n,e)}return new t(n,e,r)}return t.apply(this,arguments)};return n.prototype=t.prototype,n}(l):h&&\"function\"==typeof l?i(Function.call,l):l,h&&((b.virtual||(b.virtual={}))[a]=l,t&c.R&&O&&!O[a]&&u(O,a,l)))};c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,t.exports=c},function(t,n,e){var r=e(21);t.exports=function(t,n,e){if(r(t),void 0===n)return t;switch(e){case 1:return function(e){return t.call(n,e)};case 2:return function(e,r){return t.call(n,e,r)};case 3:return function(e,r,o){return t.call(n,e,r,o)}}return function(){return t.apply(n,arguments)}}},function(t,n){t.exports=function(t){if(\"function\"!=typeof t)throw TypeError(t+\" is not a function!\");return t}},function(t,n,e){var r=e(23),o=e(28);t.exports=e(3)?function(t,n,e){return r.f(t,n,o(1,e))}:function(t,n,e){return t[n]=e,t}},function(t,n,e){var r=e(24),o=e(25),i=e(27),u=Object.defineProperty;n.f=e(3)?Object.defineProperty:function(t,n,e){if(r(t),n=i(n,!0),r(e),o)try{return u(t,n,e)}catch(t){}if(\"get\"in e||\"set\"in e)throw TypeError(\"Accessors not supported!\");return\"value\"in e&&(t[n]=e.value),t}},function(t,n,e){var r=e(2);t.exports=function(t){if(!r(t))throw TypeError(t+\" is not an object!\");return t}},function(t,n,e){t.exports=!e(3)&&!e(4)(function(){return 7!=Object.defineProperty(e(26)(\"div\"),\"a\",{get:function(){return 7}}).a})},function(t,n,e){var r=e(2),o=e(1).document,i=r(o)&&r(o.createElement);t.exports=function(t){return i?o.createElement(t):{}}},function(t,n,e){var r=e(2);t.exports=function(t,n){if(!r(t))return t;var e,o;if(n&&\"function\"==typeof(e=t.toString)&&!r(o=e.call(t)))return o;if(\"function\"==typeof(e=t.valueOf)&&!r(o=e.call(t)))return o;if(!n&&\"function\"==typeof(e=t.toString)&&!r(o=e.call(t)))return o;throw TypeError(\"Can't convert object to primitive value\")}},function(t,n){t.exports=function(t,n){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:n}}},function(t,n,e){\"use strict\";var r=e(30),o=e(40),i=e(41),u=e(42),f=e(7),c=Object.assign;t.exports=!c||e(4)(function(){var t={},n={},e=Symbol(),r=\"abcdefghijklmnopqrst\";return t[e]=7,r.split(\"\").forEach(function(t){n[t]=t}),7!=c({},t)[e]||Object.keys(c({},n)).join(\"\")!=r})?function(t,n){for(var e=u(t),c=arguments.length,a=1,s=o.f,l=i.f;c>a;)for(var p,d=f(arguments[a++]),v=s?r(d).concat(s(d)):r(d),h=v.length,y=0;h>y;)l.call(d,p=v[y++])&&(e[p]=d[p]);return e}:c},function(t,n,e){var r=e(31),o=e(39);t.exports=Object.keys||function(t){return r(t,o)}},function(t,n,e){var r=e(5),o=e(6),i=e(33)(!1),u=e(36)(\"IE_PROTO\");t.exports=function(t,n){var e,f=o(t),c=0,a=[];for(e in f)e!=u&&r(f,e)&&a.push(e);for(;n.length>c;)r(f,e=n[c++])&&(~i(a,e)||a.push(e));return a}},function(t,n){var e={}.toString;t.exports=function(t){return e.call(t).slice(8,-1)}},function(t,n,e){var r=e(6),o=e(34),i=e(35);t.exports=function(t){return function(n,e,u){var f,c=r(n),a=o(c.length),s=i(u,a);if(t&&e!=e){for(;a>s;)if((f=c[s++])!=f)return!0}else for(;a>s;s++)if((t||s in c)&&c[s]===e)return t||s||0;return!t&&-1}}},function(t,n,e){var r=e(9),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},function(t,n,e){var r=e(9),o=Math.max,i=Math.min;t.exports=function(t,n){return t=r(t),t<0?o(t+n,0):i(t,n)}},function(t,n,e){var r=e(37)(\"keys\"),o=e(38);t.exports=function(t){return r[t]||(r[t]=o(t))}},function(t,n,e){var r=e(1),o=r[\"__core-js_shared__\"]||(r[\"__core-js_shared__\"]={});t.exports=function(t){return o[t]||(o[t]={})}},function(t,n){var e=0,r=Math.random();t.exports=function(t){return\"Symbol(\".concat(void 0===t?\"\":t,\")_\",(++e+r).toString(36))}},function(t,n){t.exports=\"constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf\".split(\",\")},function(t,n){n.f=Object.getOwnPropertySymbols},function(t,n){n.f={}.propertyIsEnumerable},function(t,n,e){var r=e(8);t.exports=function(t){return Object(r(t))}},function(n,e){n.exports=t}]).default});","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"AutoNumeric\"] = factory();\n\telse\n\t\troot[\"AutoNumeric\"] = factory();\n})(this, () => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./src/AutoNumeric.js\":\n/*!****************************!*\\\n !*** ./src/AutoNumeric.js ***!\n \\****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ AutoNumeric)\n/* harmony export */ });\n/* harmony import */ var _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AutoNumericHelper */ \"./src/AutoNumericHelper.js\");\n/* harmony import */ var _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AutoNumericEnum */ \"./src/AutoNumericEnum.js\");\n/* harmony import */ var _maths_Evaluator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./maths/Evaluator */ \"./src/maths/Evaluator.js\");\n/* harmony import */ var _maths_Parser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./maths/Parser */ \"./src/maths/Parser.js\");\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i[\"return\"] && (_r = _i[\"return\"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/**\n * AutoNumeric.js\n *\n * @version 4.10.7\n * @date 2024-10-14 UTC 01:11\n *\n * @authors 2016-2024 Alexandre Bonneau \n * 2009-2016 Bob Knothe \n * @contributors Sokolov Yura and others, cf. AUTHORS\n * @copyright Alexandre Bonneau & Robert J. Knothe\n * @since 2009-08-09\n *\n * @summary AutoNumeric is a standalone Javascript library\n * that provides live *as-you-type* formatting for\n * international numbers and currencies.\n *\n * @link http://autonumeric.org\n * @docs https://docs.autonumeric.org\n *\n * Note : Some functions are borrowed from big.js\n * @see https://github.com/MikeMcl/big.js/\n *\n * Please report any bugs to https://github.com/autoNumeric/autoNumeric\n *\n * @license Released under the MIT License\n * @link http://www.opensource.org/licenses/mit-license.php\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\n//TODO Prevent having to enter relative path in the js files (i.e. using `./AutoNumericHelper` instead of just `AutoNumericHelper`) (cf. http://moduscreate.com/es6-es2015-import-no-relative-path-webpack/)\n\n\n\n\n\n/**\n * Class declaration for the AutoNumeric object.\n *\n * An AutoNumeric element is an object wrapper that keeps a reference to the DOM element it manages (usually an one), and provides autoNumeric-specific variables and functions.\n */\nvar AutoNumeric = /*#__PURE__*/function () {\n /**\n * Initialize the AutoNumeric object onto the given DOM element, and attach the settings and related event listeners to it.\n * The options passed as a parameter is an object that contains the settings (i.e. {digitGroupSeparator: \".\", decimalCharacter: \",\", currencySymbol: '€ '})\n *\n * @example\n * anElement = new AutoNumeric(domElement); // With the default options\n * anElement = new AutoNumeric(domElement, { options }); // With one option object\n * anElement = new AutoNumeric(domElement, 'euroPos'); // With a named pre-defined string\n * anElement = new AutoNumeric(domElement, [{ options1 }, 'euroPos', { options2 }]); // With multiple option objects (the latest option overwriting the previous ones)\n * anElement = new AutoNumeric(domElement, null, { options }); // With one option object, and a failed initial value\n * anElement = new AutoNumeric(domElement).french(); // With one pre-defined language object\n * anElement = new AutoNumeric(domElement).french({ options });// With one pre-defined language object and additional options that will override the defaults\n *\n * // ...or init and set the value in one call :\n * anElement = new AutoNumeric(domElement, 12345.789); // With the default options, and an initial value\n * anElement = new AutoNumeric(domElement, 12345.789, { options });\n * anElement = new AutoNumeric(domElement, '12345.789', { options });\n * anElement = new AutoNumeric(domElement, 12345.789, 'euroPos');\n * anElement = new AutoNumeric(domElement, 12345.789, [{ options1 }, 'euroPos', { options2 }]);\n * anElement = new AutoNumeric(domElement, 12345.789).french({ options });\n * anElement = new AutoNumeric(domElement, 12345.789, { options }).french({ options }); // Not really helpful, but possible\n *\n * // The AutoNumeric constructor class can also accept a string as a css selector. Under the hood this use `QuerySelector` and limit itself to only the first element it finds.\n * anElement = new AutoNumeric('.myCssClass > input');\n * anElement = new AutoNumeric('.myCssClass > input', { options });\n * anElement = new AutoNumeric('.myCssClass > input', 'euroPos');\n * anElement = new AutoNumeric('.myCssClass > input', [{ options1 }, 'euroPos', { options2 }]);\n * anElement = new AutoNumeric('.myCssClass > input', 12345.789);\n * anElement = new AutoNumeric('.myCssClass > input', 12345.789, { options });\n * anElement = new AutoNumeric('.myCssClass > input', 12345.789, 'euroPos');\n * anElement = new AutoNumeric('.myCssClass > input', 12345.789, [{ options1 }, 'euroPos', { options2 }]);\n * anElement = new AutoNumeric('.myCssClass > input', null, { options }); // With a failed initial value\n * anElement = new AutoNumeric('.myCssClass > input', 12345.789).french({ options });\n *\n * @param {object|Array|number|string} arg1\n * @param {object|Array|number|string|null} arg2\n * @param {object|Array|number|string|null} arg3\n * @throws\n */\n function AutoNumeric() {\n var _this = this;\n var arg1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var arg2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var arg3 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n _classCallCheck(this, AutoNumeric);\n // --------------------------------------------------------\n // -------------- Initialization\n // Initialize the arguments\n var _AutoNumeric$_setArgu = AutoNumeric._setArgumentsValues(arg1, arg2, arg3),\n domElement = _AutoNumeric$_setArgu.domElement,\n initialValue = _AutoNumeric$_setArgu.initialValue,\n userOptions = _AutoNumeric$_setArgu.userOptions;\n\n // Initialize the element\n this.domElement = domElement;\n\n // Generate the settings\n this.defaultRawValue = ''; // The default raw value to set when initializing an AutoNumeric object\n this._setSettings(userOptions, false);\n //TODO If `styleRules` is not null, add by default a class 'autoNumeric' that adds transition to color, background-color, border-color properties\n // Check if the DOM element is supported\n this._checkElement();\n\n // Store the additional attributes inside the AutoNumeric object\n // Note: This variable is needed and not a duplicate of `initialValueOnFirstKeydown` nor `valueOnFocus` since it serves a different purpose and has a different lifecycle\n this.savedCancellableValue = null;\n\n // Initialize the undo/redo variables\n this.historyTable = []; // Keep track of *all* valid states of the element value\n this.historyTableIndex = -1; // Pointer to the current undo/redo state. This will be set to '0' during initialization since it first adds itself.\n this.onGoingRedo = false; // Variable that keeps track if a 'redo' is ongoing (in order to prevent an 'undo' to be launch when releasing the shift key before the ctrl key after a 'redo' shortcut)\n\n // Initialize the parent form element, if any\n this.parentForm = this._getParentForm();\n\n // Set the initial value if it exists and if the `formatOnPageLoad` option will allow it\n if (!this.runOnce && this.settings.formatOnPageLoad) {\n // Format the element value if needed\n this._formatDefaultValueOnPageLoad(initialValue);\n } else {\n // Otherwise set the `rawValue` and the element value, but do not format the latter yet\n var valueToSet;\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(initialValue)) {\n switch (this.settings.emptyInputBehavior) {\n case AutoNumeric.options.emptyInputBehavior.min:\n valueToSet = this.settings.minimumValue;\n break;\n case AutoNumeric.options.emptyInputBehavior.max:\n valueToSet = this.settings.maximumValue;\n break;\n case AutoNumeric.options.emptyInputBehavior.zero:\n valueToSet = '0';\n break;\n case AutoNumeric.options.emptyInputBehavior.focus:\n case AutoNumeric.options.emptyInputBehavior.press:\n case AutoNumeric.options.emptyInputBehavior.always:\n valueToSet = '';\n break;\n // It's possible to set the `null` value as the initial value\n case AutoNumeric.options.emptyInputBehavior[\"null\"]:\n valueToSet = null;\n break;\n // When `emptyInputBehavior` is a number or a string representing a number\n default:\n valueToSet = this.settings.emptyInputBehavior;\n }\n } else {\n valueToSet = initialValue;\n }\n this._setElementAndRawValue(valueToSet);\n }\n this.runOnce = true;\n\n // Add the events listeners only on input or editable elements\n this.hasEventListeners = false;\n if (this.isInputElement || this.isContentEditable) {\n if (!this.settings.noEventListeners) {\n //XXX Here we make sure the global list is created after creating the event listeners, to only create the event listeners on `document` once\n this._createEventListeners();\n }\n this._setWritePermissions(true);\n }\n\n // Save the initial values (html attribute + element.value) for the pristine test\n this._saveInitialValues(initialValue);\n\n // Set up the data for the persistent storage solution (i.e. sessionStorage)\n this.storageNamePrefix = 'AUTO_'; // The prefix for the raw value storage name variable can be modified here\n this._setPersistentStorageName();\n\n // --------------------------------------------------------\n // -------------- Tracking\n this.validState = true; // Keep track if the element is in the valid state\n this.isFocused = false; // Keep track if the element is currently focused\n this.isWheelEvent = false; // Keep track if a mouse wheel event is currently ongoing\n this.isDropEvent = false; // Keep track if a drop event is currently ongoing\n this.isEditing = false; // Keep track if the user is currently editing the element\n this.rawValueOnFocus = void 0; // Keep track of the rawValue (needed to define if a change event must be sent on blur or enter key)\n // Watch any external changes to the element value/textContent/nodeValue and `set()` the new value so that it gets formatted/saved in the history\n this.internalModification = false; // This is temporarily set to `true` only when the AutoNumeric object does update the element value\n this.attributeToWatch = this._getAttributeToWatch();\n this.getterSetter = Object.getOwnPropertyDescriptor(this.domElement.__proto__, this.attributeToWatch);\n this._addWatcher();\n if (this.settings.createLocalList) {\n // Keep track of every AutoNumeric elements that this object initialized\n this._createLocalList();\n }\n\n // Keep track of all AutoNumeric elements in the current web page\n this.constructor._addToGlobalList(this);\n\n // --------------------------------------------------------\n // -------------- Methods\n // Create the global functions\n this.global = {\n /**\n * Set the same given element value for each element in the local AutoNumeric element list, and format those elements immediately\n *\n * @param {number|string} newValue The value must be a number or a numeric string\n * @param {object} options A settings object that will override the current settings. Note: the update is done only if the `newValue` is defined.\n */\n set: function set(newValue) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n _this.autoNumericLocalList.forEach(function (aNObject) {\n aNObject.set(newValue, options);\n });\n },\n /**\n * Set the value given value directly as the DOM element value, without formatting it beforehand.\n * This sets the same unformatted value for each element in the local AutoNumeric element list.\n *\n * @param {number|string} value\n * @param {object} options\n */\n setUnformatted: function setUnformatted(value) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n _this.autoNumericLocalList.forEach(function (aNObject) {\n aNObject.setUnformatted(value, options);\n });\n },\n /**\n * This is an alias of the `getNumericString()` function, and should not be used anymore.\n *\n * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n * @returns {Array}\n * @deprecated\n */\n get: function get() {\n var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var result = [];\n _this.autoNumericLocalList.forEach(function (aNObject) {\n result.push(aNObject.get());\n });\n _this._executeCallback(result, callback);\n return result;\n },\n /**\n * Return an array of the unformatted values (as a string) of each AutoNumeric element of the local AutoNumeric element list\n *\n * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n * @returns {Array}\n */\n getNumericString: function getNumericString() {\n var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var result = [];\n _this.autoNumericLocalList.forEach(function (aNObject) {\n result.push(aNObject.getNumericString());\n });\n _this._executeCallback(result, callback);\n return result;\n },\n /**\n * Return an array of the current formatted values (as a string) of each AutoNumeric element of the local AutoNumeric element list\n *\n * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n * @returns {Array}\n */\n getFormatted: function getFormatted() {\n var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var result = [];\n _this.autoNumericLocalList.forEach(function (aNObject) {\n result.push(aNObject.getFormatted());\n });\n _this._executeCallback(result, callback);\n return result;\n },\n /**\n * Return an array of the element unformatted values (as a real Javascript number), for each element of the local AutoNumeric element list\n *\n * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n * @returns {Array}\n */\n getNumber: function getNumber() {\n var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var result = [];\n _this.autoNumericLocalList.forEach(function (aNObject) {\n result.push(aNObject.getNumber());\n });\n _this._executeCallback(result, callback);\n return result;\n },\n /**\n * Returns the unformatted values (following the `outputFormat` setting) of each element of the local AutoNumeric element list into an array\n *\n * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n * @returns {Array}\n */\n getLocalized: function getLocalized() {\n var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var result = [];\n _this.autoNumericLocalList.forEach(function (aNObject) {\n result.push(aNObject.getLocalized());\n });\n _this._executeCallback(result, callback);\n return result;\n },\n /**\n * Force each element of the local AutoNumeric element list to reformat its value\n */\n reformat: function reformat() {\n _this.autoNumericLocalList.forEach(function (aNObject) {\n aNObject.reformat();\n });\n },\n /**\n * Remove the formatting and keep only the raw unformatted value (as a numericString) in each element of the local AutoNumeric element list\n */\n unformat: function unformat() {\n _this.autoNumericLocalList.forEach(function (aNObject) {\n aNObject.unformat();\n });\n },\n /**\n * Remove the formatting and keep only the localized unformatted value in the element, with the option to override the default outputFormat if needed\n *\n * @param {null|string} forcedOutputFormat If set to something different from `null`, then this is used as an overriding outputFormat option\n */\n unformatLocalized: function unformatLocalized() {\n var forcedOutputFormat = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n _this.autoNumericLocalList.forEach(function (aNObject) {\n aNObject.unformatLocalized(forcedOutputFormat);\n });\n },\n /**\n * Updates the AutoNumeric settings, and immediately format the elements accordingly, for each element of the local AutoNumeric element list\n *\n * @param {object} newOptions This can be either one or more option objects\n */\n update: function update() {\n for (var _len = arguments.length, newOptions = new Array(_len), _key = 0; _key < _len; _key++) {\n newOptions[_key] = arguments[_key];\n }\n _this.autoNumericLocalList.forEach(function (aNObject) {\n aNObject.update.apply(aNObject, newOptions);\n });\n },\n /**\n * Return `true` if *all* the autoNumeric-managed elements are pristine, if their raw value hasn't changed.\n * By default, this returns `true` if the raw unformatted value is still the same even if the formatted one has changed (due to a configuration update for instance).\n *\n * @param {boolean} checkOnlyRawValue If set to `true`, the pristine value is done on the raw unformatted value, not the formatted one. If set to `false`, this also checks that the formatted value hasn't changed.\n * @returns {boolean}\n */\n isPristine: function isPristine() {\n var checkOnlyRawValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var isPristine = true;\n _this.autoNumericLocalList.forEach(function (aNObject) {\n if (isPristine && !aNObject.isPristine(checkOnlyRawValue)) {\n isPristine = false;\n }\n });\n return isPristine;\n },\n /**\n * Execute the `clear()` method on each AutoNumeric object in the local AutoNumeric element list\n *\n * @param {boolean} forceClearAll\n */\n clear: function clear() {\n var forceClearAll = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n _this.autoNumericLocalList.forEach(function (aNObject) {\n aNObject.clear(forceClearAll);\n });\n },\n /**\n * Execute the `remove()` method on each AutoNumeric object in the local AutoNumeric element list\n */\n remove: function remove() {\n _this.autoNumericLocalList.forEach(function (aNObject) {\n aNObject.remove();\n });\n },\n /**\n * Execute the `wipe()` method on each AutoNumeric object in the local AutoNumeric element list\n */\n wipe: function wipe() {\n _this.autoNumericLocalList.forEach(function (aNObject) {\n aNObject.wipe();\n });\n },\n /**\n * Execute the `nuke()` method on each AutoNumeric object in the local AutoNumeric element list\n */\n nuke: function nuke() {\n _this.autoNumericLocalList.forEach(function (aNObject) {\n aNObject.nuke();\n });\n },\n /**\n * Return `true` if the given AutoNumeric object (or DOM element) is in the local AutoNumeric element list\n *\n * @param {HTMLElement|HTMLInputElement|AutoNumeric} domElementOrAutoNumericObject\n * @returns {*}\n */\n has: function has(domElementOrAutoNumericObject) {\n var result;\n if (domElementOrAutoNumericObject instanceof AutoNumeric) {\n result = _this.autoNumericLocalList.has(domElementOrAutoNumericObject.node());\n } else {\n result = _this.autoNumericLocalList.has(domElementOrAutoNumericObject);\n }\n return result;\n },\n /**\n * Add an existing AutoNumeric object (or DOM element) to the local AutoNumeric element list, using the DOM element as the key.\n * This manages the case where `addObject` is used on an AutoNumeric object that already has multiple elements in its local list.\n *\n * @param {HTMLElement|HTMLInputElement|AutoNumeric} domElementOrAutoNumericObject\n */\n addObject: function addObject(domElementOrAutoNumericObject) {\n // Start with the same data, whatever the user passed as arguments\n var domElement;\n var otherAutoNumericObject;\n if (domElementOrAutoNumericObject instanceof AutoNumeric) {\n domElement = domElementOrAutoNumericObject.node();\n otherAutoNumericObject = domElementOrAutoNumericObject;\n } else {\n domElement = domElementOrAutoNumericObject;\n otherAutoNumericObject = AutoNumeric.getAutoNumericElement(domElement);\n }\n\n // Check if the current autoNumeric object has a local list\n if (!_this._hasLocalList()) {\n _this._createLocalList();\n }\n\n // Check if the other autoNumeric object has a local list...\n var otherANLocalList = otherAutoNumericObject._getLocalList();\n if (otherANLocalList.size === 0) {\n // Special case if the other AutoNumeric object has an empty local list, then populate itself to it\n otherAutoNumericObject._createLocalList();\n otherANLocalList = otherAutoNumericObject._getLocalList(); // Update the other local list\n }\n\n var mergedLocalLists;\n if (otherANLocalList instanceof Map) {\n // ...If it does, merge the local lists together\n mergedLocalLists = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].mergeMaps(_this._getLocalList(), otherANLocalList);\n } else {\n // ...If not, just set the current local list onto the other AutoNumeric object\n // We need to specify the AutoNumeric object, otherwise the `_addToLocalList` function would not correctly add the AutoNumeric object since we would not have a reference to it, but a reference to the current AutoNumeric object on which is called this method.\n _this._addToLocalList(domElement, otherAutoNumericObject);\n mergedLocalLists = _this._getLocalList();\n }\n\n // Update the resulting list, on all the objects of that local list (so that we can indifferently use `init()` on any object belonging to that list)\n mergedLocalLists.forEach(function (aNObject) {\n aNObject._setLocalList(mergedLocalLists);\n });\n },\n /**\n * Remove the given AutoNumeric object (or DOM element) from the local AutoNumeric element list, using the DOM element as the key.\n * If this function attempts to remove the current AutoNumeric object from the local list, a warning is shown, but the deletion is still done.\n *\n * Special cases :\n * - If the current object removes itself, then it's removed from the shared local list, then a new empty local list is used/created\n * - If another object remove this object, then a local list with only this object is used/created\n *\n * @param {HTMLElement|HTMLInputElement|AutoNumeric} domElementOrAutoNumericObject\n * @param {boolean} keepCurrentANObject If set to `false`, then the function will also remove the current AutoNumeric object if asked, otherwise it will ignore it and print a warning message\n */\n removeObject: function removeObject(domElementOrAutoNumericObject) {\n var keepCurrentANObject = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n // Start with the same data, whatever the user passed as arguments\n var domElement;\n var otherAutoNumericObject;\n if (domElementOrAutoNumericObject instanceof AutoNumeric) {\n domElement = domElementOrAutoNumericObject.node();\n otherAutoNumericObject = domElementOrAutoNumericObject;\n } else {\n domElement = domElementOrAutoNumericObject;\n otherAutoNumericObject = AutoNumeric.getAutoNumericElement(domElement);\n }\n\n // Remove the other object from the local list\n var initialCompleteLocalList = _this.autoNumericLocalList;\n _this.autoNumericLocalList[\"delete\"](domElement);\n\n // Update the local list for all objects in it\n initialCompleteLocalList.forEach(function (aNObject) {\n aNObject._setLocalList(_this.autoNumericLocalList);\n });\n if (!keepCurrentANObject && domElement === _this.node()) {\n // This object is removed by itself\n // Empty the object local list\n otherAutoNumericObject._setLocalList(new Map());\n } else {\n // This object is removed by another object\n // Set the local list for the removed object, with only this object in it\n otherAutoNumericObject._createLocalList();\n }\n },\n /**\n * Remove all elements from the shared list, effectively emptying it.\n * This is the equivalent of calling `detach()` on each of its elements.\n *\n * @param {boolean} keepEachANObjectInItsOwnList If set to `true`, then instead of completely emptying the local list of each AutoNumeric objects, each one of those keeps itself in its own local list\n */\n empty: function empty() {\n var keepEachANObjectInItsOwnList = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var initialCompleteLocalList = _this.autoNumericLocalList;\n\n // Update the local list for all objects in it\n initialCompleteLocalList.forEach(function (aNObject) {\n if (keepEachANObjectInItsOwnList) {\n aNObject._createLocalList();\n } else {\n aNObject._setLocalList(new Map());\n }\n });\n },\n /**\n * Return an array containing all the AutoNumeric DOM elements that have been initialized by each other\n *\n * @returns {Array}\n */\n elements: function elements() {\n var result = [];\n _this.autoNumericLocalList.forEach(function (aNObject) {\n result.push(aNObject.node());\n });\n return result;\n },\n /**\n * Return the `Map` object directly\n * @returns {Map}\n */\n getList: function getList() {\n return _this.autoNumericLocalList;\n },\n /**\n * Return the number of element in the local AutoNumeric element list\n * @returns {number}\n */\n size: function size() {\n return _this.autoNumericLocalList.size;\n }\n };\n\n // Create the functions that will allow to change each setting one by one\n /**\n * For each option, we define if we need to reformat the element content (does changing the options should change the way its value is displayed?).\n * If yes, then we use the `update()` for force a reformat, otherwise, we just update the `settings` object.\n */\n this.options = {\n /**\n * Reset any options set previously, by overwriting them with the default settings\n *\n * @returns {AutoNumeric}\n */\n reset: function reset() {\n //TODO Add a `settings` parameter so that the user can reset to a specific set of settings. This is different than update since it drops any non-default settings before using those new settings.\n _this.settings = {\n rawValue: _this.defaultRawValue\n }; // Here we pass the default rawValue in order to prevent showing a warning that we try to set an `undefined` value\n _this.update(AutoNumeric.defaultSettings);\n return _this;\n },\n allowDecimalPadding: function allowDecimalPadding(_allowDecimalPadding) {\n _this.update({\n allowDecimalPadding: _allowDecimalPadding\n });\n return _this;\n },\n alwaysAllowDecimalCharacter: function alwaysAllowDecimalCharacter(_alwaysAllowDecimalCharacter) {\n //FIXME Test this\n _this.update({\n alwaysAllowDecimalCharacter: _alwaysAllowDecimalCharacter\n });\n return _this;\n },\n caretPositionOnFocus: function caretPositionOnFocus(_caretPositionOnFocus) {\n //FIXME test this\n _this.settings.caretPositionOnFocus = _caretPositionOnFocus;\n return _this;\n },\n createLocalList: function createLocalList(_createLocalList2) {\n _this.settings.createLocalList = _createLocalList2;\n\n // Delete the local list when this is set to `false`, create it if this is set to `true` and there is not pre-existing list\n if (_this.settings.createLocalList) {\n if (!_this._hasLocalList()) {\n _this._createLocalList();\n }\n } else {\n _this._deleteLocalList();\n }\n return _this;\n },\n currencySymbol: function currencySymbol(_currencySymbol) {\n _this.update({\n currencySymbol: _currencySymbol\n });\n return _this;\n },\n currencySymbolPlacement: function currencySymbolPlacement(_currencySymbolPlacement) {\n _this.update({\n currencySymbolPlacement: _currencySymbolPlacement\n });\n return _this;\n },\n decimalCharacter: function decimalCharacter(_decimalCharacter) {\n _this.update({\n decimalCharacter: _decimalCharacter\n });\n return _this;\n },\n decimalCharacterAlternative: function decimalCharacterAlternative(_decimalCharacterAlternative) {\n _this.settings.decimalCharacterAlternative = _decimalCharacterAlternative;\n return _this;\n },\n /**\n * Update the decimal places globally, which means this override any previously set number of decimal shown on focus, on blur, or in the raw value.\n *\n * @param {int} decimalPlaces\n * @returns {AutoNumeric}\n */\n decimalPlaces: function decimalPlaces(_decimalPlaces) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].warning('Using `options.decimalPlaces()` instead of calling the specific `options.decimalPlacesRawValue()`, `options.decimalPlacesShownOnFocus()` and `options.decimalPlacesShownOnBlur()` methods will reset those options.\\nPlease call the specific methods if you do not want to reset those.', _this.settings.showWarnings);\n _this.update({\n decimalPlaces: _decimalPlaces\n });\n return _this;\n },\n decimalPlacesRawValue: function decimalPlacesRawValue(_decimalPlacesRawValue) {\n //FIXME test this\n _this.update({\n decimalPlacesRawValue: _decimalPlacesRawValue\n });\n return _this;\n },\n decimalPlacesShownOnBlur: function decimalPlacesShownOnBlur(_decimalPlacesShownOnBlur) {\n _this.update({\n decimalPlacesShownOnBlur: _decimalPlacesShownOnBlur\n });\n return _this;\n },\n decimalPlacesShownOnFocus: function decimalPlacesShownOnFocus(_decimalPlacesShownOnFocus) {\n _this.update({\n decimalPlacesShownOnFocus: _decimalPlacesShownOnFocus\n });\n return _this;\n },\n defaultValueOverride: function defaultValueOverride(_defaultValueOverride) {\n _this.update({\n defaultValueOverride: _defaultValueOverride\n });\n return _this;\n },\n digitalGroupSpacing: function digitalGroupSpacing(_digitalGroupSpacing) {\n _this.update({\n digitalGroupSpacing: _digitalGroupSpacing\n });\n return _this;\n },\n digitGroupSeparator: function digitGroupSeparator(_digitGroupSeparator) {\n _this.update({\n digitGroupSeparator: _digitGroupSeparator\n });\n return _this;\n },\n divisorWhenUnfocused: function divisorWhenUnfocused(_divisorWhenUnfocused) {\n _this.update({\n divisorWhenUnfocused: _divisorWhenUnfocused\n });\n return _this;\n },\n emptyInputBehavior: function emptyInputBehavior(_emptyInputBehavior) {\n if (_this.rawValue === null && _emptyInputBehavior !== AutoNumeric.options.emptyInputBehavior[\"null\"]) {\n // Special case : if the current `rawValue` is `null` and the `emptyInputBehavior` is changed to something else than `'null'`, then it makes that `rawValue` invalid.\n // Here we can either prevent the option update and throw an error, or still accept the option update and update the value from `null` to `''`.\n // We cannot keep `rawValue` to `null` since if `emptyInputBehavior` is not set to `null`, lots of function assume `rawValue` is a string.\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].warning(\"You are trying to modify the `emptyInputBehavior` option to something different than `'null'` (\".concat(_emptyInputBehavior, \"), but the element raw value is currently set to `null`. This would result in an invalid `rawValue`. In order to fix that, the element value has been changed to the empty string `''`.\"), _this.settings.showWarnings);\n _this.rawValue = '';\n }\n _this.update({\n emptyInputBehavior: _emptyInputBehavior\n });\n return _this;\n },\n eventBubbles: function eventBubbles(_eventBubbles) {\n _this.settings.eventBubbles = _eventBubbles;\n return _this;\n },\n eventIsCancelable: function eventIsCancelable(_eventIsCancelable) {\n _this.settings.eventIsCancelable = _eventIsCancelable;\n return _this;\n },\n failOnUnknownOption: function failOnUnknownOption(_failOnUnknownOption) {\n _this.settings.failOnUnknownOption = _failOnUnknownOption; //TODO test this with unit tests\n\n return _this;\n },\n formatOnPageLoad: function formatOnPageLoad(_formatOnPageLoad) {\n _this.settings.formatOnPageLoad = _formatOnPageLoad; //TODO test this with unit tests\n\n return _this;\n },\n formulaMode: function formulaMode(_formulaMode) {\n _this.settings.formulaMode = _formulaMode; //TODO test this with unit tests\n\n return _this;\n },\n historySize: function historySize(_historySize) {\n _this.settings.historySize = _historySize;\n return _this;\n },\n invalidClass: function invalidClass(_invalidClass) {\n _this.settings.invalidClass = _invalidClass; //TODO test this with unit tests\n\n return _this;\n },\n isCancellable: function isCancellable(_isCancellable) {\n _this.settings.isCancellable = _isCancellable; //TODO test this with unit tests\n\n return _this;\n },\n leadingZero: function leadingZero(_leadingZero) {\n _this.update({\n leadingZero: _leadingZero\n });\n return _this;\n },\n maximumValue: function maximumValue(_maximumValue) {\n _this.update({\n maximumValue: _maximumValue\n });\n return _this;\n },\n minimumValue: function minimumValue(_minimumValue) {\n _this.update({\n minimumValue: _minimumValue\n });\n return _this;\n },\n modifyValueOnUpDownArrow: function modifyValueOnUpDownArrow(_modifyValueOnUpDownArrow) {\n _this.settings.modifyValueOnUpDownArrow = _modifyValueOnUpDownArrow; //TODO test this with unit tests\n\n return _this;\n },\n modifyValueOnWheel: function modifyValueOnWheel(_modifyValueOnWheel) {\n _this.settings.modifyValueOnWheel = _modifyValueOnWheel; //TODO test this with unit tests\n\n return _this;\n },\n negativeBracketsTypeOnBlur: function negativeBracketsTypeOnBlur(_negativeBracketsTypeOnBlur) {\n _this.update({\n negativeBracketsTypeOnBlur: _negativeBracketsTypeOnBlur\n });\n return _this;\n },\n negativePositiveSignPlacement: function negativePositiveSignPlacement(_negativePositiveSignPlacement) {\n _this.update({\n negativePositiveSignPlacement: _negativePositiveSignPlacement\n });\n return _this;\n },\n negativeSignCharacter: function negativeSignCharacter(_negativeSignCharacter) {\n _this.update({\n negativeSignCharacter: _negativeSignCharacter\n });\n return _this;\n },\n negativePositiveSignBehavior: function negativePositiveSignBehavior(_negativePositiveSignBehavior) {\n _this.settings.negativePositiveSignBehavior = _negativePositiveSignBehavior; //TODO test this with unit tests\n\n return _this;\n },\n noEventListeners: function noEventListeners(_noEventListeners) {\n //TODO test this with unit tests\n if (_noEventListeners === AutoNumeric.options.noEventListeners.noEvents && _this.settings.noEventListeners === AutoNumeric.options.noEventListeners.addEvents) {\n // Remove the events once\n _this._removeEventListeners();\n }\n _this.update({\n noEventListeners: _noEventListeners\n });\n return _this;\n },\n onInvalidPaste: function onInvalidPaste(_onInvalidPaste) {\n _this.settings.onInvalidPaste = _onInvalidPaste; //TODO test this with unit tests\n\n return _this;\n },\n outputFormat: function outputFormat(_outputFormat) {\n _this.settings.outputFormat = _outputFormat;\n return _this;\n },\n overrideMinMaxLimits: function overrideMinMaxLimits(_overrideMinMaxLimits) {\n _this.update({\n overrideMinMaxLimits: _overrideMinMaxLimits\n });\n return _this;\n },\n positiveSignCharacter: function positiveSignCharacter(_positiveSignCharacter) {\n _this.update({\n positiveSignCharacter: _positiveSignCharacter\n });\n return _this;\n },\n rawValueDivisor: function rawValueDivisor(_rawValueDivisor) {\n _this.update({\n rawValueDivisor: _rawValueDivisor\n });\n return _this;\n },\n readOnly: function readOnly(_readOnly) {\n // When changing the readOnly attribute, the raw and formatted values do not change, so no need to call the costly 'update()` method\n _this.settings.readOnly = _readOnly;\n _this._setWritePermissions();\n return _this;\n },\n roundingMethod: function roundingMethod(_roundingMethod) {\n _this.update({\n roundingMethod: _roundingMethod\n });\n return _this;\n },\n saveValueToSessionStorage: function saveValueToSessionStorage(_saveValueToSessionStorage) {\n _this.update({\n saveValueToSessionStorage: _saveValueToSessionStorage\n });\n return _this;\n },\n symbolWhenUnfocused: function symbolWhenUnfocused(_symbolWhenUnfocused) {\n _this.update({\n symbolWhenUnfocused: _symbolWhenUnfocused\n });\n return _this;\n },\n selectNumberOnly: function selectNumberOnly(_selectNumberOnly) {\n _this.settings.selectNumberOnly = _selectNumberOnly; //TODO test this with unit tests\n\n return _this;\n },\n selectOnFocus: function selectOnFocus(_selectOnFocus) {\n _this.settings.selectOnFocus = _selectOnFocus; //TODO test this with unit tests\n\n return _this;\n },\n serializeSpaces: function serializeSpaces(_serializeSpaces) {\n _this.settings.serializeSpaces = _serializeSpaces; //TODO test this with unit tests\n\n return _this;\n },\n showOnlyNumbersOnFocus: function showOnlyNumbersOnFocus(_showOnlyNumbersOnFocus) {\n _this.update({\n showOnlyNumbersOnFocus: _showOnlyNumbersOnFocus\n });\n return _this;\n },\n showPositiveSign: function showPositiveSign(_showPositiveSign) {\n _this.update({\n showPositiveSign: _showPositiveSign\n });\n return _this;\n },\n showWarnings: function showWarnings(_showWarnings) {\n _this.settings.showWarnings = _showWarnings; //TODO test this with unit tests\n\n return _this;\n },\n styleRules: function styleRules(_styleRules) {\n _this.update({\n styleRules: _styleRules\n });\n return _this;\n },\n suffixText: function suffixText(_suffixText) {\n _this.update({\n suffixText: _suffixText\n });\n return _this;\n },\n unformatOnHover: function unformatOnHover(_unformatOnHover) {\n _this.settings.unformatOnHover = _unformatOnHover; //TODO test this with unit tests\n\n return _this;\n },\n unformatOnSubmit: function unformatOnSubmit(_unformatOnSubmit2) {\n _this.settings.unformatOnSubmit = _unformatOnSubmit2; //TODO test this with unit tests\n\n return _this;\n },\n upDownStep: function upDownStep(_upDownStep) {\n _this.settings.upDownStep = _upDownStep; //TODO test this with unit tests\n\n return _this;\n },\n valuesToStrings: function valuesToStrings(_valuesToStrings) {\n _this.update({\n valuesToStrings: _valuesToStrings\n });\n return _this;\n },\n watchExternalChanges: function watchExternalChanges(_watchExternalChanges) {\n //TODO test this with unit tests\n _this.update({\n watchExternalChanges: _watchExternalChanges\n });\n return _this;\n },\n wheelOn: function wheelOn(_wheelOn) {\n _this.settings.wheelOn = _wheelOn; //TODO test this with unit tests\n\n return _this;\n },\n wheelStep: function wheelStep(_wheelStep) {\n _this.settings.wheelStep = _wheelStep; //TODO test this with unit tests\n\n return _this;\n }\n };\n\n // Once the autoNumeric element has been initialized, broadcast that message with additional info.\n // Note: When using `AutoNumeric.multiple()`, one event is sent *per* element initialized\n this._triggerEvent(AutoNumeric.events.initialized, this.domElement, {\n newValue: _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(this.domElement),\n newRawValue: this.rawValue,\n error: null,\n aNElement: this\n });\n }\n\n /**\n * Take the parameters given to the AutoNumeric object, and output the three variables that are needed to finish initializing it :\n * - domElement : The target DOM element\n * - initialValue : The initial value, or `null` if none is given\n * - userOptions : The option object\n *\n * @param {object|Array|number|string} arg1\n * @param {object|Array|number|string|null} arg2\n * @param {object|Array|number|string|null} arg3\n * @returns {{domElement: *, initialValue: *, userOptions: *}}\n * @throws\n * @private\n */\n _createClass(AutoNumeric, [{\n key: \"_saveInitialValues\",\n value:\n /**\n * Save the initial element values for later use in the pristine test.\n * Those values are :\n * - the html attribute (i.e. ), and\n * - the script `value` (i.e. `let domElement.value`)\n *\n * @param {null|number|string} initialValue\n * @private\n */\n function _saveInitialValues(initialValue) {\n // Keep the very first initial values (in the html attribute and set by the script). This is needed to check if the element is pristine.\n // Save the html attribute 'value'\n this.initialValueHtmlAttribute = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].scientificToDecimal(this.domElement.getAttribute('value'));\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(this.initialValueHtmlAttribute)) {\n // Set the default empty value attribute instead of `null`, since if the initial value is null, the empty string is used\n this.initialValueHtmlAttribute = '';\n }\n\n // Save the 'script' value\n this.initialValue = initialValue;\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(this.initialValue)) {\n // Same as above\n this.initialValue = '';\n }\n }\n\n /**\n * Generate all the event listeners for the given DOM element\n * @private\n */\n }, {\n key: \"_createEventListeners\",\n value: function _createEventListeners() {\n var _this2 = this;\n this.formulaMode = false;\n // Create references to the event handler functions, so we can then cleanly remove those listeners if needed\n // That would not be possible if we used closures directly in the event handler declarations\n this._onFocusInFunc = function (e) {\n _this2._onFocusIn(e);\n };\n this._onFocusInAndMouseEnterFunc = function (e) {\n _this2._onFocusInAndMouseEnter(e);\n };\n this._onFocusFunc = function () {\n _this2._onFocus();\n };\n this._onKeydownFunc = function (e) {\n _this2._onKeydown(e);\n };\n this._onKeypressFunc = function (e) {\n _this2._onKeypress(e);\n };\n this._onKeyupFunc = function (e) {\n _this2._onKeyup(e);\n };\n this._onFocusOutAndMouseLeaveFunc = function (e) {\n _this2._onFocusOutAndMouseLeave(e);\n };\n this._onPasteFunc = function (e) {\n _this2._onPaste(e);\n };\n this._onWheelFunc = function (e) {\n _this2._onWheel(e);\n };\n this._onDropFunc = function (e) {\n _this2._onDrop(e);\n };\n this._onKeydownGlobalFunc = function (e) {\n _this2._onKeydownGlobal(e);\n };\n this._onKeyupGlobalFunc = function (e) {\n _this2._onKeyupGlobal(e);\n };\n\n // Add the event listeners\n this.domElement.addEventListener('focusin', this._onFocusInFunc, false);\n this.domElement.addEventListener('focus', this._onFocusInAndMouseEnterFunc, false);\n this.domElement.addEventListener('focus', this._onFocusFunc, false);\n this.domElement.addEventListener('mouseenter', this._onFocusInAndMouseEnterFunc, false);\n this.domElement.addEventListener('keydown', this._onKeydownFunc, false);\n this.domElement.addEventListener('keypress', this._onKeypressFunc, false);\n this.domElement.addEventListener('keyup', this._onKeyupFunc, false);\n this.domElement.addEventListener('blur', this._onFocusOutAndMouseLeaveFunc, false);\n this.domElement.addEventListener('mouseleave', this._onFocusOutAndMouseLeaveFunc, false);\n this.domElement.addEventListener('paste', this._onPasteFunc, false);\n this.domElement.addEventListener('wheel', this._onWheelFunc, false);\n this.domElement.addEventListener('drop', this._onDropFunc, false);\n this._setupFormListener();\n\n // Keep track if the event listeners have been initialized on this object\n this.hasEventListeners = true;\n\n // Create one global event listener for the keyup event on the document object, which will be shared by all the autoNumeric elements\n if (!AutoNumeric._doesGlobalListExists()) {\n document.addEventListener('keydown', this._onKeydownGlobalFunc, false);\n document.addEventListener('keyup', this._onKeyupGlobalFunc, false);\n }\n }\n\n /**\n * Remove all the autoNumeric-related event listeners for the given DOM element\n * @private\n */\n }, {\n key: \"_removeEventListeners\",\n value: function _removeEventListeners() {\n this.domElement.removeEventListener('focusin', this._onFocusInFunc, false);\n this.domElement.removeEventListener('focus', this._onFocusInAndMouseEnterFunc, false);\n this.domElement.removeEventListener('focus', this._onFocusFunc, false);\n this.domElement.removeEventListener('mouseenter', this._onFocusInAndMouseEnterFunc, false);\n this.domElement.removeEventListener('blur', this._onFocusOutAndMouseLeaveFunc, false);\n this.domElement.removeEventListener('mouseleave', this._onFocusOutAndMouseLeaveFunc, false);\n this.domElement.removeEventListener('keydown', this._onKeydownFunc, false);\n this.domElement.removeEventListener('keypress', this._onKeypressFunc, false);\n this.domElement.removeEventListener('keyup', this._onKeyupFunc, false);\n this.domElement.removeEventListener('paste', this._onPasteFunc, false);\n this.domElement.removeEventListener('wheel', this._onWheelFunc, false);\n this.domElement.removeEventListener('drop', this._onDropFunc, false);\n this._removeFormListener();\n\n // Keep track if the event listeners have been initialized on this object\n this.hasEventListeners = false;\n document.removeEventListener('keydown', this._onKeydownGlobalFunc, false);\n document.removeEventListener('keyup', this._onKeyupGlobalFunc, false);\n }\n\n /**\n * Toggle the event listeners according to the `noEventListeners` option, if those were not activated/deactivated before\n * @private\n */\n }, {\n key: \"_updateEventListeners\",\n value: function _updateEventListeners() {\n if (!this.settings.noEventListeners && !this.hasEventListeners) {\n // Special case where an update is done on an element that did not activate its event listeners in the first place\n // i.e. when an element is first created with `contenteditable=\"false\"`, then an update is done with `anElement.french()`\n this._createEventListeners();\n }\n if (this.settings.noEventListeners && this.hasEventListeners) {\n this._removeEventListeners();\n }\n }\n\n /**\n * Mark the parent
so that other AutoNumeric object will not add more listeners.\n * Add a counter so that when removing the AutoNumeric object, we only remove the submit listener if that count is equal to 0.\n * Also keep a reference to the 'submit' event handler function to be able to remove that handler later if the `_removeFormListener()` function is called from another AutoNumeric object.\n *\n * @private\n */\n }, {\n key: \"_setupFormListener\",\n value: function _setupFormListener() {\n var _this3 = this;\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(this.parentForm)) {\n // Set up the handler function\n this._onFormSubmitFunc = function () {\n _this3._onFormSubmit();\n };\n this._onFormResetFunc = function () {\n _this3._onFormReset();\n };\n\n // Check if the parent form already has the AutoNumeric mark\n if (this._hasParentFormCounter()) {\n this._incrementParentFormCounter();\n } else {\n // If not, add the counter\n this._initializeFormCounterToOne();\n // And add the submit and reset event listeners\n this.parentForm.addEventListener('submit', this._onFormSubmitFunc, false);\n this.parentForm.addEventListener('reset', this._onFormResetFunc, false);\n // Also keep a reference to the handler function so that we can remove it later\n this._storeFormHandlerFunction();\n }\n }\n }\n\n /**\n * Remove the form 'submit' event listener, as well as the `dataset` info (`anCount` and `anFormHandler`) from the parent form, only when there are only one AutoNumeric child element left in that .\n * Otherwise, decrement the `anCount`.\n *\n * @private\n */\n }, {\n key: \"_removeFormListener\",\n value: function _removeFormListener() {\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(this.parentForm)) {\n // Check the parent form counter value\n var anCount = this._getParentFormCounter();\n if (anCount === 1) {\n // If it's 1, remove the listeners\n this.parentForm.removeEventListener('submit', this._getFormHandlerFunction().submitFn, false);\n this.parentForm.removeEventListener('reset', this._getFormHandlerFunction().resetFn, false);\n // Also remove the dataset info\n this._removeFormDataSetInfo();\n } else if (anCount > 1) {\n // Otherwise if it's >1 decrement the counter\n this._decrementParentFormCounter();\n } else {\n // If it's <1, throw an error\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The AutoNumeric object count on the form is incoherent.\");\n }\n }\n }\n\n /**\n * Return `true` if the parent form has the form counter attribute\n *\n * @returns {boolean}\n * @private\n */\n }, {\n key: \"_hasParentFormCounter\",\n value: function _hasParentFormCounter() {\n return 'anCount' in this.parentForm.dataset;\n }\n\n /**\n * Return the count of AutoNumeric form children\n *\n * @returns {number}\n * @private\n */\n }, {\n key: \"_getParentFormCounter\",\n value: function _getParentFormCounter() {\n return Number(this.parentForm.dataset.anCount);\n }\n\n /**\n * Set the count of AutoNumeric form children to 1 for the given form element, or if none are passed, the current `this.parentForm` one.\n *\n * @param {HTMLFormElement|null} formElement\n * @private\n */\n }, {\n key: \"_initializeFormCounterToOne\",\n value: function _initializeFormCounterToOne() {\n var formElement = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n this._getFormElement(formElement).dataset.anCount = 1;\n }\n\n /**\n * Increment the AutoNumeric form children count for the given form element, or if none are passed, the current `this.parentForm` one.\n *\n * @param {HTMLFormElement|null} formElement\n * @private\n */\n }, {\n key: \"_incrementParentFormCounter\",\n value: function _incrementParentFormCounter() {\n var formElement = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n this._getFormElement(formElement).dataset.anCount++;\n }\n\n /**\n * Decrement the AutoNumeric form children count for the current `this.parentForm` form element.\n *\n * @private\n */\n }, {\n key: \"_decrementParentFormCounter\",\n value: function _decrementParentFormCounter() {\n this.parentForm.dataset.anCount--;\n }\n\n /**\n * Return `true` if the global form handler list exists on the `window` object.\n *\n * @returns {boolean}\n * @private\n */\n }, {\n key: \"_hasFormHandlerFunction\",\n value:\n /**\n * Return `true` if the given form element, or if none are passed, the current `this.parentForm` one has a form handler name.\n *\n * @param {HTMLFormElement|null} formElement\n * @returns {boolean}\n * @private\n */\n function _hasFormHandlerFunction() {\n var formElement = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n return 'anFormHandler' in this._getFormElement(formElement).dataset;\n }\n\n /**\n * Return the given form element, or defaults to `this.parentForm` if no argument is passed.\n *\n * @param {HTMLFormElement|null} formElement\n * @returns {*}\n * @private\n */\n }, {\n key: \"_getFormElement\",\n value: function _getFormElement() {\n var formElement = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var formElementToUse;\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(formElement)) {\n formElementToUse = formElement;\n } else {\n formElementToUse = this.parentForm;\n }\n return formElementToUse;\n }\n\n /**\n * Generate a form handler unique name and store it in the global form handler list.\n * This also save that name in the dataset of the given form element.\n *\n * @param {HTMLFormElement|null} formElement\n * @private\n */\n }, {\n key: \"_storeFormHandlerFunction\",\n value: function _storeFormHandlerFunction() {\n var formElement = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n // Create the weakMap if it does not exist\n if (!this.constructor._doesFormHandlerListExists()) {\n this.constructor._createFormHandlerList();\n }\n\n // Generate a unique name and save it in the form dataset\n var formHandlerName = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].randomString();\n this._getFormElement(formElement).dataset.anFormHandler = formHandlerName;\n\n // Add the form handler name and handle function reference to the WeakMap\n window.aNFormHandlerMap.set(formHandlerName, {\n submitFn: this._onFormSubmitFunc,\n resetFn: this._onFormResetFunc\n });\n }\n\n /**\n * Return the form handler key name from the parent form element, for the global form handler list.\n *\n * @returns {string|*}\n * @private\n */\n }, {\n key: \"_getFormHandlerKey\",\n value: function _getFormHandlerKey() {\n if (!this._hasFormHandlerFunction()) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"Unable to retrieve the form handler name\");\n }\n var formHandlerName = this.parentForm.dataset.anFormHandler;\n if (formHandlerName === '') {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The form handler name is invalid\");\n }\n return formHandlerName;\n }\n\n /**\n * Return the 'submit' event handler function used for the parent form.\n *\n * @returns {function}\n * @private\n */\n }, {\n key: \"_getFormHandlerFunction\",\n value: function _getFormHandlerFunction() {\n var formHandlerName = this._getFormHandlerKey();\n return window.aNFormHandlerMap.get(formHandlerName);\n }\n\n /**\n * Remove the dataset attributes `data-an-count` and `data-an-form-handler` from the parent form element.\n *\n * @private\n */\n }, {\n key: \"_removeFormDataSetInfo\",\n value: function _removeFormDataSetInfo() {\n // Just in case, set the counter to 0\n this._decrementParentFormCounter();\n // Remove the form handler function from the FormHandlerFunction Map\n window.aNFormHandlerMap[\"delete\"](this._getFormHandlerKey());\n // Lastly, remove the dataset attributes\n this.parentForm.removeAttribute('data-an-count');\n this.parentForm.removeAttribute('data-an-form-handler');\n }\n\n /**\n * Set the DOM element write permissions according to the current settings, by setting the `readonly` or `contenteditable` attributes depending on its tag type.\n * If the `useHtmlAttribute` parameter is set to `true`, then the `readonly` html attribute is used and has precedence over the `readOnly` option to set the element as read-only.\n *\n * @param {boolean} useHtmlAttribute If set to `true`, then the write permissions are set by taking into account the html 'readonly' attribute, even if the `readOnly` option is set to false\n * @private\n */\n }, {\n key: \"_setWritePermissions\",\n value: function _setWritePermissions() {\n var useHtmlAttribute = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n if (useHtmlAttribute && this.domElement.readOnly || this.settings.readOnly) {\n this._setReadOnly();\n } else {\n this._setReadWrite();\n }\n }\n\n /**\n * Set the element to be read-only.\n * If the DOM element tag is not an `input`, then it `contenteditable` attribute is set to `false`.\n *\n * @private\n */\n }, {\n key: \"_setReadOnly\",\n value: function _setReadOnly() {\n if (this.isInputElement) {\n this.domElement.readOnly = true;\n } else {\n this.domElement.setAttribute('contenteditable', false);\n }\n }\n\n /**\n * Set the element to be read-write.\n *\n * @private\n */\n }, {\n key: \"_setReadWrite\",\n value: function _setReadWrite() {\n if (this.isInputElement) {\n this.domElement.readOnly = false;\n } else {\n this.domElement.setAttribute('contenteditable', true);\n }\n }\n\n /**\n * Add a watcher so that any external change to the AutoNumeric-managed element would be detected.\n * As soon as such change is detected, AutoNumeric then tries to `set()` the value so that it gets formatted and stored in the history.\n * //XXX For now, this only works when watching the `value` attribute, not the `textContent` one\n * @private\n */\n }, {\n key: \"_addWatcher\",\n value: function _addWatcher() {\n var _this4 = this;\n // `getterSetter` can be undefined when a non-input element is used\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefined(this.getterSetter)) {\n var _this$getterSetter = this.getterSetter,\n setter = _this$getterSetter.set,\n getter = _this$getterSetter.get;\n Object.defineProperty(this.domElement, this.attributeToWatch, {\n configurable: true,\n // This is needed in some rare cases\n get: function get() {\n return getter.call(_this4.domElement);\n },\n set: function set(val) {\n setter.call(_this4.domElement, val);\n // Only `set()` the value if the modification comes from an external source\n if (_this4.settings.watchExternalChanges && !_this4.internalModification) {\n _this4.set(val);\n }\n }\n });\n }\n\n //FIXME The code above fails for the `textContent` attribute since `this.getterSetter` is undefined when using `getOwnPropertyDescriptor()`\n /* //XXX The code below *almost* work for the textContent, but breaks some unit tests\n this.valueWatched = this.domElement[this.attributeToWatch];\n Object.defineProperty(this.domElement, this.attributeToWatch, {\n configurable: true, // This is needed in some rare cases\n get : () => this.valueWatched,\n set : val => {\n this.valueWatched = val;\n // Only `set()` the value if the modification comes from an external source\n if (this.settings.watchExternalChanges && !this.internalModification) {\n this.set(val);\n }\n },\n });\n */\n }\n\n /**\n * Remove the watcher on the AutoNumeric-managed element\n * Note: This needs to be called when the AutoNumeric element is 'removed', otherwise the getter/setter stays on the DOM element and that can lead to problem if the user initialize another AutoNumeric object on it.\n * @private\n */\n }, {\n key: \"_removeWatcher\",\n value: function _removeWatcher() {\n var _this5 = this;\n // `getterSetter` can be undefined when a non-input element is used\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefined(this.getterSetter)) {\n var _this$getterSetter2 = this.getterSetter,\n setter = _this$getterSetter2.set,\n getter = _this$getterSetter2.get;\n Object.defineProperty(this.domElement, this.attributeToWatch, {\n configurable: true,\n // This is needed in some rare cases\n get: function get() {\n return getter.call(_this5.domElement);\n },\n set: function set(val) {\n setter.call(_this5.domElement, val);\n }\n });\n }\n\n //FIXME The code above fails for the `textContent` attribute since `this.getterSetter` is undefined when using `getOwnPropertyDescriptor()`\n /* //XXX The code below *almost* work for the textContent, but breaks some unit tests\n this.valueWatched = this.domElement[this.attributeToWatch];\n Object.defineProperty(this.domElement, this.attributeToWatch, {\n configurable: true, // This is needed in some rare cases\n get : () => this.valueWatched,\n set : val => {\n this.valueWatched = val;\n },\n });\n */\n }\n\n /**\n * Return the name of the object attribute that store the current formatted data in the DOM element.\n *\n * @returns {string}\n * @private\n */\n }, {\n key: \"_getAttributeToWatch\",\n value: function _getAttributeToWatch() {\n var attributeToWatch;\n if (this.isInputElement) {\n attributeToWatch = 'value';\n } else {\n var nodeType = this.domElement.nodeType;\n if (nodeType === Node.ELEMENT_NODE || nodeType === Node.DOCUMENT_NODE || nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n attributeToWatch = 'textContent';\n } else if (nodeType === Node.TEXT_NODE) {\n attributeToWatch = 'nodeValue';\n }\n }\n return attributeToWatch;\n }\n\n /**\n * Save the current raw value into the history table, along with the selection information.\n *\n * If the user has done some undos and tries to enter:\n * - a new and different number than the 'next' state, this drops the rest of the history table\n * - the very same number that result in the same rawValue as the 'next' state, we only move the history table pointer to the next state\n *\n * @private\n */\n }, {\n key: \"_historyTableAdd\",\n value: function _historyTableAdd() {\n //TODO Add a `this.settings.saveSelectionsIntoHistory` option to prevent saving the selections (in order to gain performance)\n var isEmptyHistoryTable = this.historyTable.length === 0;\n // Only add a new value if it's different from the previous one (to prevent infinitely adding values on mouseover for instance)\n if (isEmptyHistoryTable || this.rawValue !== this._historyTableCurrentValueUsed()) {\n // Trim the history table if the user changed the value of an intermediary state\n var addNewHistoryState = true;\n if (!isEmptyHistoryTable) {\n // If some undo has been done and the user type the exact same data than the next entry after the current history pointer, do not drop the rest of the 'redo' list, and just advance the historyTableIndex\n var nextHistoryStateIndex = this.historyTableIndex + 1;\n if (nextHistoryStateIndex < this.historyTable.length && this.rawValue === this.historyTable[nextHistoryStateIndex].value) {\n // If the character input result in the same state as the next one, do not remove the next history states nor add a new one\n addNewHistoryState = false;\n } else {\n // First remove anything that is after the current index\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].arrayTrim(this.historyTable, this.historyTableIndex + 1);\n }\n }\n\n // Update the history pointer\n this.historyTableIndex++;\n\n // Add the new history state, if needed\n if (addNewHistoryState) {\n // Save the selection info\n var selection = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementSelection(this.domElement);\n this.selectionStart = selection.start;\n this.selectionEnd = selection.end;\n\n // Then add the new raw value\n this.historyTable.push({\n // Save the rawValue and selection start/end\n value: this.rawValue,\n // The selection for this element is temporary, and will be updated when the next history state will be recorded.\n // That way, we are always sure we save the last caret or selection positions just before the value is changed. Otherwise, we would only save those positions when the value is first changed, and would not take into account that the user could move the caret around afterward.\n // For instance, this is needed if the user change the element value, and immediately undo it ; if he then does a redo, he'll see the value and the right selection\n // To sum up; The selection position are not always +1 character, since it could also be '2' if a group separator is added when entering one character. That's why the current history state caret/selection position is updated on each `keyup` event.\n start: this.selectionStart + 1,\n // Here we add one since the user added one character too\n end: this.selectionEnd + 1\n });\n\n // Update the selection in the previous entry, in order to keep track of the updated caret/selection positions\n if (this.historyTable.length > 1) {\n this.historyTable[this.historyTableIndex - 1].start = this.selectionStart;\n this.historyTable[this.historyTableIndex - 1].end = this.selectionEnd;\n }\n }\n\n // Limit the history table size according to the `historySize` option\n if (this.historyTable.length > this.settings.historySize) {\n this._historyTableForget();\n }\n }\n }\n\n /**\n * Debug function for the history table\n * @private\n */\n /*\n _debugHistoryTable() {\n let i = 0;\n let mark;\n this.historyTable.forEach(history => {\n if (this.historyTableIndex === i) {\n mark = '> ';\n } else {\n mark = '';\n }\n console.log(`${mark}${i++}: ${history.value} ${history.start}|${history.end} [onGoingRedo: ${this.onGoingRedo}]`); //DEBUG\n });\n }\n */\n\n /**\n * 'Undo' or 'Redo' the last/next user entry in the history table.\n * This does not modify the history table, only the pointer to the current state.\n *\n * @param {boolean} undo If set to `true`, then this function does an 'Undo', otherwise it does a 'Redo'\n * @private\n */\n }, {\n key: \"_historyTableUndoOrRedo\",\n value: function _historyTableUndoOrRedo() {\n var undo = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var check;\n if (undo) {\n // Only 'undo' if there are some info to undo\n check = this.historyTableIndex > 0;\n if (check) {\n this.historyTableIndex--;\n }\n } else {\n // Only 'redo' if there are some info to redo at the end of the history table\n check = this.historyTableIndex + 1 < this.historyTable.length;\n if (check) {\n this.historyTableIndex++;\n }\n }\n if (check) {\n // Set the value back\n var undoInfo = this.historyTable[this.historyTableIndex];\n this.set(undoInfo.value, null, false); // next or previous raw value\n\n // Set the selection back\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setElementSelection(this.domElement, undoInfo.start, undoInfo.end);\n }\n }\n\n /**\n * 'Undo' the last user entry by going back one entry in the history table.\n * This keeps the following entries in order to allow for a 'redo'.\n * This does not modify the history table, only the pointer to the current state.\n * @private\n */\n }, {\n key: \"_historyTableUndo\",\n value: function _historyTableUndo() {\n this._historyTableUndoOrRedo(true);\n }\n\n /**\n * 'Redo' the next user entry in the history table.\n * This does not modify the history table, only the pointer to the current state.\n * @private\n */\n }, {\n key: \"_historyTableRedo\",\n value: function _historyTableRedo() {\n this._historyTableUndoOrRedo(false);\n }\n\n /**\n * Reset the history table to its initial state, and select the value.\n * @private\n */\n /*\n resetHistoryTable() { //FIXME Test this\n this.set(this.rawValue, null, false);\n this.select();\n const selection = AutoNumericHelper.getElementSelection(this.domElement);\n this.historyTableIndex = 0;\n this.historyTable = [{\n // Save the rawValue and selection start/end\n value: this.rawValue,\n start: selection.start,\n end : selection.end,\n }];\n }\n */\n\n /**\n * Make the history table forget its first N elements, shifting its indexes in the process.\n * `N` being given as the `numberOfEntriesToForget` parameter.\n *\n * @param {Number} numberOfEntriesToForget\n * @returns {object|Array} The discarded objects, in an Array.\n * @private\n */\n }, {\n key: \"_historyTableForget\",\n value: function _historyTableForget() {\n var numberOfEntriesToForget = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n var shiftedAway = [];\n for (var i = 0; i < numberOfEntriesToForget; i++) {\n shiftedAway.push(this.historyTable.shift());\n // Update the history table index accordingly\n this.historyTableIndex--;\n if (this.historyTableIndex < 0) {\n // In case this function is called more times than there is states in the history table\n this.historyTableIndex = 0;\n }\n }\n if (shiftedAway.length === 1) {\n return shiftedAway[0];\n }\n return shiftedAway;\n }\n\n /**\n * Return the currently used value from the history table.\n *\n * @returns {string|number}\n * @private\n */\n }, {\n key: \"_historyTableCurrentValueUsed\",\n value: function _historyTableCurrentValueUsed() {\n var indexToUse = this.historyTableIndex;\n if (indexToUse < 0) {\n indexToUse = 0;\n }\n var result;\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefinedOrNullOrEmpty(this.historyTable[indexToUse])) {\n result = '';\n } else {\n result = this.historyTable[indexToUse].value;\n }\n return result;\n }\n\n /**\n * Parse the `styleRules` option and run the test for each given rules, either pre-defined ones like `positive`, `negative` and `ranges`, or user defined callbacks within the `userDefined` attribute.\n * @private\n */\n }, {\n key: \"_parseStyleRules\",\n value: function _parseStyleRules() {\n var _this6 = this;\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefinedOrNullOrEmpty(this.settings.styleRules) || this.rawValue === '') {\n return;\n }\n\n // 'positive' attribute\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefinedOrNullOrEmpty(this.settings.styleRules.positive)) {\n if (this.rawValue >= 0) {\n this._addCSSClass(this.settings.styleRules.positive);\n } else {\n this._removeCSSClass(this.settings.styleRules.positive);\n }\n }\n\n // 'negative' attribute\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefinedOrNullOrEmpty(this.settings.styleRules.negative)) {\n if (this.rawValue < 0) {\n this._addCSSClass(this.settings.styleRules.negative);\n } else {\n this._removeCSSClass(this.settings.styleRules.negative);\n }\n }\n\n // 'ranges' attribute\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefinedOrNullOrEmpty(this.settings.styleRules.ranges) && this.settings.styleRules.ranges.length !== 0) {\n this.settings.styleRules.ranges.forEach(function (range) {\n if (_this6.rawValue >= range.min && _this6.rawValue < range.max) {\n _this6._addCSSClass(range[\"class\"]);\n } else {\n _this6._removeCSSClass(range[\"class\"]);\n }\n });\n }\n\n // 'userDefined' attribute\n //TODO Also pass the old raw value as a parameter, and not only the new raw value\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefinedOrNullOrEmpty(this.settings.styleRules.userDefined) && this.settings.styleRules.userDefined.length !== 0) {\n this.settings.styleRules.userDefined.forEach(function (userObject) {\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFunction(userObject.callback)) {\n // Test for the type of the `classes` attribute, which changes the function behavior\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(userObject.classes)) {\n // If 'classes' is a string, set it if `true`, remove it if `false`\n if (userObject.callback(_this6.rawValue)) {\n _this6._addCSSClass(userObject.classes);\n } else {\n _this6._removeCSSClass(userObject.classes);\n }\n } else if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArray(userObject.classes)) {\n if (userObject.classes.length === 2) {\n // If 'classes' is an array with only 2 elements, set the first class if `true`, the second if `false`\n if (userObject.callback(_this6.rawValue)) {\n _this6._addCSSClass(userObject.classes[0]);\n _this6._removeCSSClass(userObject.classes[1]);\n } else {\n _this6._removeCSSClass(userObject.classes[0]);\n _this6._addCSSClass(userObject.classes[1]);\n }\n } else if (userObject.classes.length > 2) {\n // The callback returns an array of indexes to use on the `classes` array\n var callbackResult = userObject.callback(_this6.rawValue);\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArray(callbackResult)) {\n // If multiple indexes are returned\n userObject.classes.forEach(function (userClass, index) {\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isInArray(index, callbackResult)) {\n _this6._addCSSClass(userClass);\n } else {\n _this6._removeCSSClass(userClass);\n }\n });\n } else if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isInt(callbackResult)) {\n // If only one index is returned\n userObject.classes.forEach(function (userClass, index) {\n if (index === callbackResult) {\n _this6._addCSSClass(userClass);\n } else {\n _this6._removeCSSClass(userClass);\n }\n });\n } else if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(callbackResult)) {\n // Remove all the classes\n userObject.classes.forEach(function (userClass) {\n _this6._removeCSSClass(userClass);\n });\n } else {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The callback result is not an array nor a valid array index, \".concat(_typeof(callbackResult), \" given.\"));\n }\n } else {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError('The classes attribute is not valid for the `styleRules` option.');\n }\n } else if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefinedOrNullOrEmpty(userObject.classes)) {\n // If 'classes' is `undefined` or `null`, then the callback is called with the AutoNumeric object passed as a parameter\n userObject.callback(_this6);\n } else {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError('The callback/classes structure is not valid for the `styleRules` option.');\n }\n } else {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].warning(\"The given `styleRules` callback is not a function, \".concat(_typeof(userObject.callback), \" given.\"), _this6.settings.showWarnings);\n }\n });\n }\n }\n\n /**\n * Add the given CSS class to the DOM element.\n *\n * @param {string} cssClassName\n * @private\n */\n }, {\n key: \"_addCSSClass\",\n value: function _addCSSClass(cssClassName) {\n this.domElement.classList.add(cssClassName);\n }\n\n /**\n * Remove the given CSS class from the DOM element.\n *\n * @param {string} cssClassName\n * @private\n */\n }, {\n key: \"_removeCSSClass\",\n value: function _removeCSSClass(cssClassName) {\n this.domElement.classList.remove(cssClassName);\n }\n\n // Those are the public function available on each autoNumeric-managed element\n\n /**\n * Method that updates the AutoNumeric settings, and immediately format the element accordingly.\n * The options passed as parameter(s) is either one or many objects that each contains some settings, i.e. :\n * {\n * digitGroupSeparator: \".\",\n * decimalCharacter: \",\",\n * currencySymbol: '€ ',\n * }\n * If multiple options are passed, the latter overwrite the previous ones.\n *\n * Note: If the new settings are not validated, or the call to `set()` fails, then the previous valid settings are reverted back to.\n *\n * @example anElement.update({ options }) // Updates the settings\n * @example anElement.update({ options1 }, { options2 }) // Updates the settings with multiple option objects\n * @example anElement.update([{ options1 }, { options2 }]) // Updates the settings with multiple option objects in a single array\n *\n * @param {object|string|array} newOptions\n * @returns {AutoNumeric}\n */\n }, {\n key: \"update\",\n value: function update() {\n var _this7 = this;\n for (var _len2 = arguments.length, newOptions = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n newOptions[_key2] = arguments[_key2];\n }\n if (Array.isArray(newOptions) && Array.isArray(newOptions[0])) {\n // Allows to pass a single array of options\n newOptions = newOptions[0];\n }\n\n // Keep a copy of the original settings before changing them, in case they do not validate correctly, so we can switch back to them\n var originalSettings = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].cloneObject(this.settings); //TODO Check that the `styleRules` option is correctly cloned (due to depth cloning limitation)\n\n // Store the current unformatted input value\n var numericString = this.rawValue;\n\n // Generate a single option object with the settings from the latter overwriting those from the former\n var optionsToUse = {};\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefinedOrNullOrEmpty(newOptions) || newOptions.length === 0) {\n optionsToUse = null;\n } else if (newOptions.length >= 1) {\n newOptions.forEach(function (optionObject) {\n if (_this7.constructor._isPreDefinedOptionValid(optionObject)) {\n // The option object is a predefined option name (i.e. 'euro')\n optionObject = _this7.constructor._getOptionObject(optionObject);\n }\n _extends(optionsToUse, optionObject);\n });\n }\n\n // Update the settings\n try {\n this._setSettings(optionsToUse, true);\n this._setWritePermissions(); // Update the read/write permissions\n this._updateEventListeners();\n\n // Reformat the input value with the new settings\n // Note: we always `set`, even when `numericString` is the empty string '', since `emptyInputBehavior` (set to `always` or `zero`) can change how the empty input is formatted\n this.set(numericString);\n } catch (error) {\n // If the settings validation fails, then we switch back to the previous valid settings\n this._setSettings(originalSettings, true); // `_setSettings()` is used here instead of directly doing `this.settings = originalSettings;` since lots of side variables are calculated from the settings, and we need to get those back to their previous state. Note: `_setSettings()` is called in the 'update' mode in order to correctly set back the `originalDecimalPlacesRawValue` value.\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"Unable to update the settings, those are invalid: [\".concat(error, \"]\"));\n return this;\n }\n return this;\n }\n\n /**\n * Return the options object containing all the current autoNumeric settings in effect.\n * You can then directly access each option by using its name : `anElement.getSettings().optionNameAutoCompleted`.\n *\n * @example\n * anElement.getSettings()\n * anElement.getSettings().decimalCharacter // Return the decimalCharacter setting as a string - any valid option name can be used\n *\n * @returns {object}\n */\n }, {\n key: \"getSettings\",\n value: function getSettings() {\n return this.settings;\n }\n\n /**\n * Set the given element value, and format it immediately.\n * Additionally, this `set()` method can accept options that will be merged into the current AutoNumeric element, taking precedence over any previous settings.\n *\n * @example anElement.set('12345.67') // Formats the value\n * @example anElement.set(12345.67) // Formats the value\n * @example anElement.set(12345.67, { decimalCharacter : ',' }) // Update the settings and formats the value in one go\n * @example anElement.northAmerican().set('$12,345.67') // Set an already formatted value (this does not _exactly_ respect the currency symbol/negative placements, but only remove all non-numbers characters, according to the ones given in the settings)\n * @example anElement.set(null) // Set the rawValue and element value to `null`\n *\n * @param {number|string|null} newValue The value must be a Number, a numeric string or `null` (if `emptyInputBehavior` is set to `'null'`)\n * @param {object} options A settings object that will override the current settings. Note: the update is done only if the `newValue` is defined.\n * @param {boolean} saveChangeToHistory If set to `true`, then the change is recorded in the history table\n * @returns {AutoNumeric}\n * @throws\n */\n }, {\n key: \"set\",\n value: function set(newValue) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var saveChangeToHistory = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n //TODO Add the `saveSettings` options. If `true`, then when `options` is passed, then it overwrite the current `this.settings`. If `false` the `options` are only used once and `this.settings` is not modified\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefined(newValue)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].warning(\"You are trying to set an 'undefined' value ; an error could have occurred.\", this.settings.showWarnings);\n return this;\n }\n\n // The options update is done only if the `newValue` is not `undefined`\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(options)) {\n this._setSettings(options, true); // We do not call `update` here since this would call `set` too\n }\n\n if (newValue === null && this.settings.emptyInputBehavior !== AutoNumeric.options.emptyInputBehavior[\"null\"]) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].warning(\"You are trying to set the `null` value while the `emptyInputBehavior` option is set to \".concat(this.settings.emptyInputBehavior, \". If you want to be able to set the `null` value, you need to change the 'emptyInputBehavior' option to `'null'`.\"), this.settings.showWarnings);\n return this;\n }\n var value;\n if (newValue === null) {\n //TODO Merge this into a global `if (newValue === null) {` test, with the test above\n // Here this.settings.emptyInputBehavior === AutoNumeric.options.emptyInputBehavior.null\n this._setElementAndRawValue(null, null, saveChangeToHistory);\n this._saveValueToPersistentStorage();\n return this;\n }\n value = this.constructor._toNumericValue(newValue, this.settings);\n if (isNaN(Number(value))) {\n //TODO Do not modify the element value if the newValue results in `NaN`. Make sure the settings, if modified, are revert back too.\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].warning(\"The value you are trying to set results in `NaN`. The element value is set to the empty string instead.\", this.settings.showWarnings);\n this.setValue('', saveChangeToHistory);\n return this;\n }\n if (value === '') {\n switch (this.settings.emptyInputBehavior) {\n case AutoNumeric.options.emptyInputBehavior.zero:\n value = 0;\n break;\n case AutoNumeric.options.emptyInputBehavior.min:\n value = this.settings.minimumValue;\n break;\n case AutoNumeric.options.emptyInputBehavior.max:\n value = this.settings.maximumValue;\n break;\n default:\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNumber(this.settings.emptyInputBehavior)) {\n value = Number(this.settings.emptyInputBehavior);\n }\n }\n }\n if (value !== '') {\n var _this$constructor$_ch = this.constructor._checkIfInRangeWithOverrideOption(value, this.settings),\n _this$constructor$_ch2 = _slicedToArray(_this$constructor$_ch, 2),\n minTest = _this$constructor$_ch2[0],\n maxTest = _this$constructor$_ch2[1];\n\n // Modify the formatted value if the rawValue is found in the `valuesToStrings` option\n if (minTest && maxTest && this.settings.valuesToStrings && this._checkValuesToStrings(value)) {\n // Set the raw value normally, and the formatted value with the corresponding string\n this._setElementAndRawValue(this.settings.valuesToStrings[value], value, saveChangeToHistory);\n this._saveValueToPersistentStorage();\n return this;\n }\n\n // This test is needed by the `showPositiveSign` option\n var isZero = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isZeroOrHasNoValue(value);\n if (isZero) {\n value = '0';\n }\n if (minTest && maxTest) {\n var forcedRawValue = this.constructor._roundRawValue(value, this.settings);\n forcedRawValue = this._trimLeadingAndTrailingZeros(forcedRawValue.replace(this.settings.decimalCharacter, '.')); // Move the `setRawValue` call after the `setElementValue` one\n value = this._getRawValueToFormat(value); // Multiply the raw value to obtain the formatted value\n\n // Round the given value according to the object state (focused/unfocused)\n if (this.isFocused) {\n value = this.constructor._roundFormattedValueShownOnFocus(value, this.settings);\n } else {\n if (this.settings.divisorWhenUnfocused) {\n value = value / this.settings.divisorWhenUnfocused;\n value = value.toString();\n }\n value = this.constructor._roundFormattedValueShownOnBlur(value, this.settings);\n }\n value = this.constructor._modifyNegativeSignAndDecimalCharacterForFormattedValue(value, this.settings);\n value = this.constructor._addGroupSeparators(value, this.settings, this.isFocused, this.rawValue, forcedRawValue);\n if (!this.isFocused && this.settings.symbolWhenUnfocused) {\n value = \"\".concat(value).concat(this.settings.symbolWhenUnfocused);\n }\n if (this.settings.decimalPlacesShownOnFocus || this.settings.divisorWhenUnfocused) {\n this._saveValueToPersistentStorage();\n }\n this._setElementAndRawValue(value, forcedRawValue, saveChangeToHistory);\n\n // Special case when the user is allowed to enter invalid numbers outside the min/max range\n this._setValidOrInvalidState(forcedRawValue);\n return this;\n } else {\n this._triggerRangeEvents(minTest, maxTest);\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The value [\".concat(value, \"] being set falls outside of the minimumValue [\").concat(this.settings.minimumValue, \"] and maximumValue [\").concat(this.settings.maximumValue, \"] range set for this element\"));\n this._removeValueFromPersistentStorage();\n this.setValue('', saveChangeToHistory); //TODO Shouldn't we just drop that faulty newValue and keep the previous one? This is behind a `throwError()` call anyway..\n\n return this;\n }\n } else {\n // Here, `value` equal the empty string `''`\n var result;\n if (this.settings.emptyInputBehavior === AutoNumeric.options.emptyInputBehavior.always) {\n // Keep the currency symbol as per emptyInputBehavior\n result = this.settings.currencySymbol;\n } else {\n result = '';\n }\n this._setElementAndRawValue(result, '', saveChangeToHistory);\n return this;\n }\n }\n\n /**\n * Set the given value directly as the DOM element value, without formatting it beforehand.\n * You can also set the value and update the setting in one go (the value will again not be formatted immediately).\n *\n * @param {number|string} value\n * @param {object} options\n * @returns {AutoNumeric}\n * @throws\n */\n }, {\n key: \"setUnformatted\",\n value: function setUnformatted(value) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n //TODO Should we use `AutoNumeric.unformat()` here and set the unformatted result in case `value` is formatted?\n if (value === null || _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefined(value)) {\n return this;\n }\n\n // The options update is done only if the `value` is not null\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(options)) {\n this._setSettings(options, true); // We do not call `update` here since this would call `set` too\n }\n\n var strippedValue = this.constructor._removeBrackets(value, this.settings);\n var normalizedValue = this.constructor._stripAllNonNumberCharacters(strippedValue, this.settings, true, this.isFocused);\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNumber(normalizedValue)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The value is not a valid one, it's not a numeric string nor a recognized currency.\");\n }\n if (this.constructor._isWithinRangeWithOverrideOption(normalizedValue, this.settings)) {\n // If the `normalizedValue` is in the range\n this.setValue(value);\n } else {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The value is out of the range limits [\".concat(this.settings.minimumValue, \", \").concat(this.settings.maximumValue, \"].\"));\n }\n return this;\n }\n\n /**\n * Set the given value directly as the DOM element value, without formatting it beforehand, and without checking its validity.\n * This also updates the `rawValue` with the given `newValue`, without checking it too ; if it's not formatted like a number recognized by Javascript, this *will* likely make other AutoNumeric methods fail.\n *\n * @param {string|number|null} newValue The new value to set on the element\n * @param {boolean} saveChangeToHistory If set to `true`, then the change is recorded in the history array, otherwise it is not\n * @returns {AutoNumeric}\n */\n }, {\n key: \"setValue\",\n value: function setValue(newValue) {\n var saveChangeToHistory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n this._setElementAndRawValue(newValue, saveChangeToHistory);\n return this;\n }\n\n /**\n * Save the raw value inside the AutoNumeric object.\n *\n * @param {number|string|null} rawValue The numeric value as understood by Javascript like a `Number`\n * @param {boolean} saveChangeToHistory If set to `true`, then the change is recorded in the history array, otherwise it is not\n * @private\n */\n }, {\n key: \"_setRawValue\",\n value: function _setRawValue(rawValue) {\n var _this8 = this;\n var saveChangeToHistory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n // Only set the raw value if the given value is different from the current one\n if (this.rawValue !== rawValue) {\n //TODO Manage the case where one value is a string while the other is a number?\n var oldRawValue = this.rawValue;\n // Update the raw value\n this.rawValue = rawValue; // By default, if the `rawValue` is changed programmatically\n\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(this.settings.rawValueDivisor) && this.settings.rawValueDivisor !== 0 &&\n // Only divide if the `rawValueDivisor` option is set\n rawValue !== '' && rawValue !== null &&\n // Do not modify the `rawValue` if it's an empty string or null\n this._isUserManuallyEditingTheValue()) {\n // If the user is manually changing the element value\n this.rawValue /= this.settings.rawValueDivisor;\n }\n\n // Broadcast the `rawValueModified` event since the `rawValue` has been modified\n this._triggerEvent(AutoNumeric.events.rawValueModified, this.domElement, {\n oldRawValue: oldRawValue,\n newRawValue: this.rawValue,\n isPristine: this.isPristine(true),\n error: null,\n aNElement: this\n });\n\n // Change the element style or use the relevant callbacks\n this._parseStyleRules();\n if (saveChangeToHistory) {\n // Save in the history the last known raw value and formatted result selection\n window.requestAnimationFrame(function () {\n return _this8._historyTableAdd();\n }); // The use of `requestAnimationFrame` fixes PR #731 by avoiding \"Forced reflow\"\n }\n }\n }\n\n /**\n * Set the given value on the DOM element, without affecting the `rawValue`.\n * This sends an 'autoNumeric:formatted' event if the new value is different from the old one.\n *\n * @param {number|string} newElementValue\n * @param {boolean} sendFormattedEvent If set to `true`, then the `AutoNumeric.events.formatted` event is sent if the value has changed\n * @returns {AutoNumeric}\n * @private\n */\n }, {\n key: \"_setElementValue\",\n value: function _setElementValue(newElementValue) {\n var sendFormattedEvent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n //TODO Use an internal attribute to track the current value of the element `formattedValue` (like its counterpart `rawValue`). This would allow us to avoid calling `getElementValue` many times\n var oldElementValue = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(this.domElement);\n\n // Only update the value if it's different from the current one\n if (newElementValue !== oldElementValue) {\n this.internalModification = true;\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setElementValue(this.domElement, newElementValue);\n this.internalModification = false;\n if (sendFormattedEvent) {\n this._triggerEvent(AutoNumeric.events.formatted, this.domElement, {\n oldValue: oldElementValue,\n newValue: newElementValue,\n oldRawValue: this.rawValue,\n newRawValue: this.rawValue,\n isPristine: this.isPristine(false),\n error: null,\n aNElement: this\n });\n }\n }\n return this;\n }\n\n /**\n * Set the given value on the DOM element, and the raw value on `this.rawValue`, if both are given.\n * If only one value is given, then both the DOM element value and the raw value are set with that value.\n * The third argument `saveChangeToHistory` defines if the change should be recorded in the history array.\n * Note: if the second argument `rawValue` is a boolean, we consider that is really is the `saveChangeToHistory` argument.\n *\n * @param {number|string|null} newElementValue\n * @param {number|string|null|boolean} rawValue\n * @param {boolean} saveChangeToHistory\n * @returns {AutoNumeric}\n * @private\n */\n }, {\n key: \"_setElementAndRawValue\",\n value: function _setElementAndRawValue(newElementValue) {\n var rawValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var saveChangeToHistory = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(rawValue)) {\n rawValue = newElementValue;\n } else if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBoolean(rawValue)) {\n saveChangeToHistory = rawValue;\n rawValue = newElementValue;\n }\n\n //XXX The order here is important ; the value should first be set on the element, then and only then we should update the raw value\n // In the `set()` function, we make sure to call `_setRawValue` *after* `setElementValue` so that if `_setRawValue` calls a callback that modify the `rawValue`, then the new value is set correctly (after `setElementValue` briefly set its value first)\n this._setElementValue(newElementValue);\n this._setRawValue(rawValue, saveChangeToHistory);\n return this;\n }\n\n /**\n * Return the multiplied raw value with the `rawValueDivisor`.\n * This is used to display different values between the raw and formatted values.\n *\n * @param {number|string|null} rawValue The numeric value as understood by Javascript like a `Number`\n * @returns {number|string|null}\n * @private\n */\n }, {\n key: \"_getRawValueToFormat\",\n value: function _getRawValueToFormat(rawValue) {\n var rawValueForTheElementValue;\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(this.settings.rawValueDivisor) && this.settings.rawValueDivisor !== 0 &&\n // Only multiply if the `rawValueDivisor` option is set\n rawValue !== '' && rawValue !== null) {\n // Do not modify the `rawValue` if it's an empty string or null\n // !this._isUserManuallyEditingTheValue()) { // If the user is NOT manually changing the element value, but that is done programmatically\n rawValueForTheElementValue = rawValue * this.settings.rawValueDivisor;\n } else {\n rawValueForTheElementValue = rawValue;\n }\n return rawValueForTheElementValue;\n }\n\n /**\n * Check if the given value has a corresponding key in the `valuesToStrings` option object.\n *\n * @param {number|string} value\n * @returns {boolean} Returns `true` if such a key is found.\n * @private\n */\n }, {\n key: \"_checkValuesToStrings\",\n value: function _checkValuesToStrings(value) {\n return this.constructor._checkValuesToStringsArray(value, this.valuesToStringsKeys);\n }\n\n /**\n * Check if the given value has a corresponding key in the `stringsArray` array.\n *\n * @param {number|string} key\n * @param {array} stringsArray Array where the `key` is checked against its keys\n * @returns {boolean} Returns `true` if such a key is found.\n * @private\n */\n }, {\n key: \"_isUserManuallyEditingTheValue\",\n value:\n /**\n * Return `true` if the user is currently modifying the element value manually.\n *\n * @returns {boolean}\n * @private\n */\n function _isUserManuallyEditingTheValue() {\n // return (this.isFocused && this.isEditing) || this.isWheelEvent || this.isDropEvent;\n return this.isFocused && this.isEditing || this.isDropEvent;\n }\n\n /**\n * Execute the given callback function using the given result as its first parameter, and the AutoNumeric object as its second.\n *\n * @param {number|string|Array|null} result\n * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n * @private\n */\n }, {\n key: \"_executeCallback\",\n value: function _executeCallback(result, callback) {\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(callback) && _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFunction(callback)) {\n callback(result, this);\n }\n }\n\n /**\n * Trigger the given event on the given element with the given detail.\n * This takes into account the `eventBubbles` and `eventIsCancelable` options.\n *\n * @param {string} eventName\n * @param {HTMLElement|HTMLDocument|EventTarget} element\n * @param {object} detail\n * @private\n */\n }, {\n key: \"_triggerEvent\",\n value: function _triggerEvent(eventName) {\n var element = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document;\n var detail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].triggerEvent(eventName, element, detail, this.settings.eventBubbles, this.settings.eventIsCancelable);\n }\n\n /**\n * Alias of the `getNumericString()` function.\n * Developers should use one of the more explicit function names to get what they want :\n * - a numeric string : `getNumericString()`\n * - a formatted string : `getFormatted()`\n * - a number : `getNumber()`, or\n * - a localized numeric string : `getLocalized()`\n *\n * @usage anElement.get();\n *\n * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n *\n * @deprecated\n * @returns {string|null}\n */\n }, {\n key: \"get\",\n value: function get() {\n var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n return this.getNumericString(callback);\n }\n\n /**\n * Return the unformatted value as a string.\n * This can also return `null` if `rawValue` is null.\n *\n * @usage anElement.getNumericString();\n *\n * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n *\n * @returns {string|null}\n */\n }, {\n key: \"getNumericString\",\n value: function getNumericString() {\n var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var result;\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(this.rawValue)) {\n result = null;\n } else {\n // Always return a numeric string\n // The following statement gets rid of the trailing zeros in the decimal places since the current method does not pad decimals\n result = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].trimPaddedZerosFromDecimalPlaces(this.rawValue);\n }\n this._executeCallback(result, callback);\n return result;\n }\n\n /**\n * Return the current formatted value of the AutoNumeric element as a string\n *\n * @usage anElement.getFormatted()\n *\n * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n *\n * @returns {string}\n */\n }, {\n key: \"getFormatted\",\n value: function getFormatted() {\n var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n if (!('value' in this.domElement || 'textContent' in this.domElement)) {\n // Make sure `.value` or `.textContent` exists before trying to access those properties\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError('Unable to get the formatted string from the element.');\n }\n var result = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(this.domElement);\n this._executeCallback(result, callback);\n return result;\n }\n\n /**\n * Return the element unformatted value as a real Javascript number.\n * Warning: This can lead to precision problems with big numbers that should be stored as strings.\n *\n * @usage anElement.getNumber()\n *\n * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n *\n * @returns {number|null}\n */\n }, {\n key: \"getNumber\",\n value: function getNumber() {\n var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var result;\n if (this.rawValue === null) {\n result = null;\n } else {\n result = this.constructor._toLocale(this.getNumericString(), 'number', this.settings);\n }\n this._executeCallback(result, callback);\n return result;\n }\n\n /**\n * Returns the unformatted value, but following the `outputFormat` setting, which means the output can either be :\n * - a string (that could or could not represent a number (i.e. \"12345,67-\")), or\n * - a plain number (if the setting 'number' is used).\n *\n * By default, the returned values are an ISO numeric string \"1234.56\" or \"-1234.56\" where the decimal character is a period.\n * Check the \"outputFormat\" option definition for more details.\n *\n * @usage anElement.getLocalized();\n *\n * @param {null|string|function} forcedOutputFormat If set to something different from `null`, then this is used as an overriding outputFormat option\n * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n *\n * @returns {*}\n */\n }, {\n key: \"getLocalized\",\n value: function getLocalized() {\n var forcedOutputFormat = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n // First, check if only a callback has been passed, and if so, sanitize the parameters\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFunction(forcedOutputFormat) && _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(callback)) {\n callback = forcedOutputFormat;\n forcedOutputFormat = null;\n }\n\n // Then get the localized value\n var value;\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isEmptyString(this.rawValue)) {\n value = '';\n } else {\n // Here I use `this.rawValue` instead of `this.getNumericString()` since the current input value could be unformatted with a localization (i.e. '1234567,89-').\n // I also convert the rawValue to a number, then back to a string in order to drop the decimal part if the rawValue is an integer.\n value = '' + Number(this.rawValue);\n }\n if (value !== '' && Number(value) === 0 && this.settings.leadingZero !== AutoNumeric.options.leadingZero.keep) {\n value = '0';\n }\n var outputFormatToUse;\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(forcedOutputFormat)) {\n outputFormatToUse = this.settings.outputFormat;\n } else {\n outputFormatToUse = forcedOutputFormat;\n }\n var result = this.constructor._toLocale(value, outputFormatToUse, this.settings);\n this._executeCallback(result, callback);\n return result;\n }\n\n /**\n * Force the element to reformat its value again (just in case the formatting has been lost).\n * This can be used right after a form submission for instance (after a previous call to `unformat`).\n *\n * @example anElement.reformat()\n *\n * @returns {AutoNumeric}\n */\n }, {\n key: \"reformat\",\n value: function reformat() {\n // `this.rawValue` is used instead of `this.domElement.value` because when the content is `unformatLocalized`, it can become a string that cannot be converted to a number easily\n this.set(this.rawValue);\n return this;\n }\n\n /**\n * Remove the formatting and keep only the raw unformatted value in the element (as a numericString)\n * Note: this is loosely based on the previous 'unSet()' function\n *\n * By default, values are returned as ISO numeric strings (i.e. \"1234.56\" or \"-1234.56\"), where the decimal character is a period.\n * @example anElement.unformat()\n *\n * @returns {AutoNumeric}\n */\n }, {\n key: \"unformat\",\n value: function unformat() {\n this._setElementValue(this.getNumericString());\n return this;\n }\n\n /**\n * Remove the formatting and keep only the localized unformatted value in the element, with the option to override the default outputFormat if needed\n *\n * Locale formats are supported \"1234.56-\" or \"1234,56\" or \"-1234,56 or \"1234,56-\", or even plain numbers.\n * Take a look at the `outputFormat` option definition in the default settings for more details.\n *\n * @param {null|string} forcedOutputFormat If set to something different from `null`, then this is used as an overriding outputFormat option\n * @returns {AutoNumeric}\n */\n }, {\n key: \"unformatLocalized\",\n value: function unformatLocalized() {\n var forcedOutputFormat = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n this._setElementValue(this.getLocalized(forcedOutputFormat));\n return this;\n }\n\n /**\n * Return `true` if the current value is the same as when the element got initialized.\n * Note: By default, this returns `true` if the raw unformatted value is still the same even if the formatted one has changed (due to a configuration update for instance).\n * In order to test if the formatted value is the same (which means neither the raw value nor the settings have been changed), then you must pass `false` as its argument.\n *\n * @param {boolean} checkOnlyRawValue If set to `true`, the pristine value is done on the raw unformatted value, not the formatted one. If set to `false`, this also checks that the formatted value hasn't changed.\n * @returns {boolean}\n */\n }, {\n key: \"isPristine\",\n value: function isPristine() {\n var checkOnlyRawValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var result;\n if (checkOnlyRawValue) {\n result = this.initialValue === this.getNumericString();\n } else {\n result = this.initialValueHtmlAttribute === this.getFormatted();\n }\n return result;\n }\n\n /**\n * Select the formatted element content, based on the `selectNumberOnly` option\n *\n * @returns {AutoNumeric}\n */\n }, {\n key: \"select\",\n value: function select() {\n if (this.settings.selectNumberOnly) {\n this.selectNumber();\n } else {\n this._defaultSelectAll();\n }\n return this;\n }\n\n /**\n * Select the whole element content (including the currency symbol).\n * @private\n */\n }, {\n key: \"_defaultSelectAll\",\n value: function _defaultSelectAll() {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setElementSelection(this.domElement, 0, _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(this.domElement).length);\n }\n\n /**\n * Select only the numbers in the formatted element content, leaving out the currency symbol, whatever the value of the `selectNumberOnly` option\n *\n * @returns {AutoNumeric}\n */\n }, {\n key: \"selectNumber\",\n value: function selectNumber() {\n //TODO Make sure the selection is ok when showPositiveSign is set to `true` (select the negative sign, but not the positive one)\n var unformattedValue = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(this.domElement);\n var valueLen = unformattedValue.length;\n var currencySymbolSize = this.settings.currencySymbol.length;\n var currencySymbolPlacement = this.settings.currencySymbolPlacement;\n var negLen = !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNegative(unformattedValue, this.settings.negativeSignCharacter) ? 0 : 1;\n var suffixTextLen = this.settings.suffixText.length;\n var start;\n if (currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n start = 0;\n } else if (this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.left && negLen === 1 && currencySymbolSize > 0) {\n start = currencySymbolSize + 1;\n } else {\n start = currencySymbolSize;\n }\n var end;\n if (currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix) {\n end = valueLen - suffixTextLen;\n } else {\n switch (this.settings.negativePositiveSignPlacement) {\n case AutoNumeric.options.negativePositiveSignPlacement.left:\n end = valueLen - (suffixTextLen + currencySymbolSize);\n break;\n case AutoNumeric.options.negativePositiveSignPlacement.right:\n if (currencySymbolSize > 0) {\n end = valueLen - (currencySymbolSize + negLen + suffixTextLen);\n } else {\n end = valueLen - (currencySymbolSize + suffixTextLen);\n }\n break;\n default:\n end = valueLen - (currencySymbolSize + suffixTextLen);\n }\n }\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setElementSelection(this.domElement, start, end);\n return this;\n }\n\n /**\n * Select only the integer part in the formatted element content, whatever the value of `selectNumberOnly`\n *\n * @returns {AutoNumeric}\n */\n }, {\n key: \"selectInteger\",\n value: function selectInteger() {\n var start = 0;\n var isPositive = this.rawValue >= 0;\n\n // Negative or positive sign, if any\n if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix || this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix && (this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.prefix || this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.none)) {\n if (this.settings.showPositiveSign && isPositive ||\n // This only exclude the positive sign from being selected\n !isPositive && this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix && this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.left) {\n // And this excludes the negative sign from being selected in this special case : '-€ 1.234,57suffixText'\n start = start + 1;\n }\n }\n\n // Currency symbol\n if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix) {\n start = start + this.settings.currencySymbol.length;\n }\n\n // Calculate the selection end position\n var elementValue = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(this.domElement);\n var end = elementValue.indexOf(this.settings.decimalCharacter);\n if (end === -1) {\n // No decimal character found\n if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n end = elementValue.length - this.settings.currencySymbol.length;\n } else {\n end = elementValue.length;\n }\n\n // Trailing negative sign\n if (!isPositive && (this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.suffix || this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix)) {\n end = end - 1;\n }\n\n // Avoid selecting the suffix test\n end = end - this.settings.suffixText.length;\n }\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setElementSelection(this.domElement, start, end);\n return this;\n }\n\n /**\n * Select only the decimal part in the formatted element content, whatever the value of `selectNumberOnly`\n * Multiple cases are possible :\n * +1.234,57suffixText\n *\n * € +1.234,57suffixText\n * +€ 1.234,57suffixText\n * € 1.234,57+suffixText\n *\n * 1.234,57+ €suffixText\n * 1.234,57 €+suffixText\n * +1.234,57 €suffixText\n *\n * @returns {AutoNumeric}\n */\n }, {\n key: \"selectDecimal\",\n value: function selectDecimal() {\n var start = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(this.domElement).indexOf(this.settings.decimalCharacter);\n var end;\n if (start === -1) {\n // The decimal character has not been found, we deselect all\n start = 0;\n end = 0;\n } else {\n // A decimal character has been found\n start = start + 1; // We add 1 to exclude the decimal character from the selection\n\n var decimalCount;\n if (this.isFocused) {\n decimalCount = this.settings.decimalPlacesShownOnFocus;\n } else {\n decimalCount = this.settings.decimalPlacesShownOnBlur;\n }\n end = start + Number(decimalCount);\n }\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setElementSelection(this.domElement, start, end);\n return this;\n }\n\n /**\n * Return the DOM element reference of the autoNumeric-managed element\n *\n * @returns {HTMLElement|HTMLInputElement}\n */\n }, {\n key: \"node\",\n value: function node() {\n return this.domElement;\n }\n\n /**\n * Return the DOM element reference of the parent node of the autoNumeric-managed element\n *\n * @returns {HTMLElement|HTMLInputElement|Node}\n */\n }, {\n key: \"parent\",\n value: function parent() {\n return this.domElement.parentNode;\n }\n\n /**\n * Detach the current AutoNumeric element from the shared local 'init' list.\n * This means any changes made on that local shared list will not be transmitted to that element anymore.\n * Note : The user can provide another AutoNumeric element, and detach this one instead of the current one.\n *\n * @param {AutoNumeric} otherAnElement\n * @returns {AutoNumeric}\n */\n }, {\n key: \"detach\",\n value: function detach() {\n var otherAnElement = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n //FIXME test this\n var domElementToDetach;\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(otherAnElement)) {\n domElementToDetach = otherAnElement.node();\n } else {\n domElementToDetach = this.domElement;\n }\n this._removeFromLocalList(domElementToDetach); //FIXME What happens if the selected dom element does not exist in the list?\n\n return this;\n }\n\n /**\n * Attach the given AutoNumeric element to the shared local 'init' list.\n * When doing that, by default the DOM content is left untouched.\n * The user can force a reformat with the new shared list options by passing a second argument to `true`.\n *\n * @param {AutoNumeric} otherAnElement\n * @param {boolean} reFormat\n * @returns {AutoNumeric}\n */\n }, {\n key: \"attach\",\n value: function attach(otherAnElement) {\n var reFormat = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n //FIXME test this\n this._addToLocalList(otherAnElement.node()); //FIXME Should we make sure the element is not already in the list?\n if (reFormat) {\n otherAnElement.update(this.settings);\n }\n return this;\n }\n\n /**\n * Format and return the given value, or set the formatted value into the given DOM element if one is passed as an argument.\n * By default, this use the current element settings.\n * The user can override any option of its choosing by passing an option object.\n *\n * @param {number|HTMLElement|HTMLInputElement} valueOrElement\n * @param {null|object} optionOverride\n * @returns {string|null}\n */\n }, {\n key: \"formatOther\",\n value: function formatOther(valueOrElement) {\n var optionOverride = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n //FIXME test this\n return this._formatOrUnformatOther(true, valueOrElement, optionOverride);\n }\n\n /**\n * Unformat and return the raw numeric string corresponding to the given value, or directly set the unformatted value into the given DOM element if one is passed as an argument.\n * By default, this use the current element settings.\n * The user can override any option of its choosing by passing an option object.\n * @param {string|HTMLElement|HTMLInputElement} stringOrElement\n * @param {null|object} optionOverride\n * @returns {string|null}\n */\n }, {\n key: \"unformatOther\",\n value: function unformatOther(stringOrElement) {\n var optionOverride = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n //FIXME test this\n return this._formatOrUnformatOther(false, stringOrElement, optionOverride);\n }\n\n /**\n * Method that either format or unformat the value of another element.\n *\n * - Format and return the given value, or set the formatted value into the given DOM element if one is passed as an argument.\n * - Unformat and return the raw numeric string corresponding to the given value, or directly set the unformatted value into the given DOM element if one is passed as an argument.\n *\n * By default, this use the current element settings.\n * The user can override any option of its choosing by passing an option object.\n *\n * @param {boolean} isFormatting If set to `true`, then the method formats, otherwise if set to `false`, it unformats\n * @param {number|string|HTMLElement|HTMLInputElement} valueOrStringOrElement\n * @param {null|object} optionOverride\n * @returns {string|null}\n * @private\n */\n }, {\n key: \"_formatOrUnformatOther\",\n value: function _formatOrUnformatOther(isFormatting, valueOrStringOrElement) {\n var optionOverride = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n //FIXME test this\n // If the user wants to override the current element settings temporarily\n var settingsToUse;\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(optionOverride)) {\n settingsToUse = this._cloneAndMergeSettings(optionOverride);\n } else {\n settingsToUse = this.settings;\n }\n\n // Then the unformatting is done...\n var result;\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isElement(valueOrStringOrElement)) {\n // ...either directly on the DOM element value\n var elementValue = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(valueOrStringOrElement);\n if (isFormatting) {\n result = AutoNumeric.format(elementValue, settingsToUse);\n } else {\n result = AutoNumeric.unformat(elementValue, settingsToUse);\n }\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setElementValue(valueOrStringOrElement, result); //TODO Use `unformatAndSet` and `formatAndSet`instead\n\n return null;\n }\n\n // ...or on the given value\n if (isFormatting) {\n result = AutoNumeric.format(valueOrStringOrElement, settingsToUse);\n } else {\n result = AutoNumeric.unformat(valueOrStringOrElement, settingsToUse);\n }\n return result;\n }\n\n /**\n * Use the current AutoNumeric element settings to initialize the DOM element(s) given as a parameter.\n * Doing so will *link* the AutoNumeric elements together since they will share the same local AutoNumeric element list.\n * (cf. prototype pattern : https://en.wikipedia.org/wiki/Prototype_pattern)\n *\n * You can `init` either a single DOM element (in that case an AutoNumeric object will be returned), or an array of DOM elements or a string that will be used as a CSS selector. In the latter cases, an array of AutoNumeric objects will then be returned (or an empty array if nothing gets selected by the CSS selector).\n *\n * Use case : Once you have an AutoNumeric element already setup correctly with the right options, you can use it as many times you want to initialize as many other DOM elements as needed.\n * Note : this works only on elements that can be managed by autoNumeric.\n *\n * @param {HTMLElement|HTMLInputElement|Array|string} domElementOrArrayOrString\n * @param {boolean} attached If set to `false`, then the newly generated AutoNumeric element will not share the same local element list\n * @returns {AutoNumeric|[AutoNumeric]}\n */\n }, {\n key: \"init\",\n value: function init(domElementOrArrayOrString) {\n var _this9 = this;\n var attached = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var returnASingleAutoNumericObject = false; // By default, this function returns an array of AutoNumeric objects\n var domElementsArray = [];\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(domElementOrArrayOrString)) {\n domElementsArray = _toConsumableArray(document.querySelectorAll(domElementOrArrayOrString)); // Convert a NodeList to an Array\n } else if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isElement(domElementOrArrayOrString)) {\n domElementsArray.push(domElementOrArrayOrString);\n returnASingleAutoNumericObject = true; // Special case when only one DOM element is passed as a parameter\n } else if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArray(domElementOrArrayOrString)) {\n domElementsArray = domElementOrArrayOrString;\n } else {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The given parameters to the 'init' function are invalid.\");\n }\n if (domElementsArray.length === 0) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].warning(\"No valid DOM elements were given hence no AutoNumeric object were instantiated.\", true);\n return [];\n }\n var currentLocalList = this._getLocalList();\n var autoNumericObjectsArray = [];\n\n // Instantiate (and link depending on `attached`) each AutoNumeric objects\n domElementsArray.forEach(function (domElement) {\n // Initialize the new AutoNumeric element\n var originalCreateLocalListSetting = _this9.settings.createLocalList;\n if (attached) {\n // Temporary variable to know if we should create the local list during the initialization (since we'll remove it afterward)\n _this9.settings.createLocalList = false;\n }\n var newAutoNumericElement = new AutoNumeric(domElement, _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(domElement), _this9.settings);\n\n // Set the common shared local list if needed\n // If the user wants to create a detached new AutoNumeric element, then skip the following step that bind the two elements together by default\n if (attached) {\n // 1) Set the local list reference to point to the initializer's one\n newAutoNumericElement._setLocalList(currentLocalList);\n\n // 2) Add the new element to that existing list\n _this9._addToLocalList(domElement, newAutoNumericElement); // Here we use the *new* AutoNumeric object reference to add to the local list, since we'll need the reference to `this` in the methods to points to that new AutoNumeric object.\n _this9.settings.createLocalList = originalCreateLocalListSetting;\n }\n autoNumericObjectsArray.push(newAutoNumericElement);\n });\n if (returnASingleAutoNumericObject) {\n // If a single DOM element was used as the parameter, then we return an AutoNumeric object directly\n return autoNumericObjectsArray[0];\n }\n\n // ...otherwise we return an Array of AutoNumeric objects\n return autoNumericObjectsArray;\n }\n\n /**\n * Reset the element value either to the empty string '', or the currency sign, depending on the `emptyInputBehavior` option value.\n * If you set the `forceClearAll` argument to `true`, then the `emptyInputBehavior` option is overridden and the whole input is clear, including any currency sign.\n *\n * @param {boolean} forceClearAll\n * @returns {AutoNumeric}\n */\n }, {\n key: \"clear\",\n value: function clear() {\n var forceClearAll = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n if (forceClearAll) {\n var temporaryForcedOptions = {\n emptyInputBehavior: AutoNumeric.options.emptyInputBehavior.focus\n };\n this.set('', temporaryForcedOptions);\n } else {\n this.set('');\n }\n return this;\n }\n\n /**\n * Remove the autoNumeric data and event listeners from the element, but keep the element content intact.\n * This also clears the value from sessionStorage (or cookie, depending on browser supports).\n * Note: this does not remove the formatting.\n *\n * @example anElement.remove()\n */\n }, {\n key: \"remove\",\n value: function remove() {\n this._removeValueFromPersistentStorage();\n this._removeEventListeners();\n this._removeWatcher();\n\n // Also remove the element from the local AutoNumeric list\n this._removeFromLocalList(this.domElement);\n // Also remove the element from the global AutoNumeric list\n this.constructor._removeFromGlobalList(this);\n }\n\n /**\n * Remove the autoNumeric data and event listeners from the element, and reset its value to the empty string ''.\n * This also clears the value from sessionStorage (or cookie, depending on browser supports).\n *\n * @example anElement.wipe()\n */\n }, {\n key: \"wipe\",\n value: function wipe() {\n this._setElementValue('', false); // Do not send the 'AutoNumeric.events.formatted' event when wiping an AutoNumeric object\n this.remove();\n }\n\n /**\n * Remove the autoNumeric data and event listeners from the element, and delete the DOM element altogether\n */\n }, {\n key: \"nuke\",\n value: function nuke() {\n this.remove();\n // Remove the element from the DOM\n this.domElement.parentNode.removeChild(this.domElement);\n }\n\n // Special functions that really work on the parent element, instead of the element itself\n\n /**\n * Return a reference to the parent element if it exists, otherwise return `null`.\n * If the parent form element as already been found, this directly return a reference to it.\n * However, you can force AutoNumeric to search again for its reference by passing `true` as a parameter to this method.\n * This method updates the `this.parentForm` attribute.\n *\n * In either case, whenever a new parent form is set for the current AutoNumeric element, we make sure to update the anCount and anFormHandler attributes on both the old form and the new one (for instance in case the user moved the input elements with `appendChild()` since AutoNumeric cannot not detect that).\n *\n * @param {boolean} forceSearch If set to `true`, the parent form is searched again, even if `this.parentForm` is already set.\n *\n * @returns {HTMLFormElement|null}\n */\n }, {\n key: \"form\",\n value: function form() {\n var forceSearch = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n if (forceSearch || _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefinedOrNullOrEmpty(this.parentForm)) {\n var newParentForm = this._getParentForm();\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(newParentForm) && newParentForm !== this.parentForm) {\n // If the current parent form exists and is different from the previous parent form\n\n // Search for all the AutoNumeric elements in the old parent form\n var oldANChildren = this._getFormAutoNumericChildren(this.parentForm);\n // Update the anCount with the correct number of AutoNumeric elements\n this.parentForm.dataset.anCount = oldANChildren.length;\n\n // Check if the new parent form already has a anFormHandler name\n if (this._hasFormHandlerFunction(newParentForm)) {\n this._incrementParentFormCounter(newParentForm); // Increment its counter\n } else {\n // Create one and set the anCount to 1\n this._storeFormHandlerFunction(newParentForm);\n this._initializeFormCounterToOne(newParentForm);\n }\n }\n this.parentForm = newParentForm;\n }\n return this.parentForm;\n }\n\n /**\n * Returns an array of the AutoNumeric-managed elements for the given form element is passed, otherwise for the current `this.parentForm` element.\n * This search for elements, as well as contenteditable non-input tag ones. This also search for elements outside the `form` elements.\n *\n * @param {HTMLFormElement|null} formElement\n *\n * @returns {Array.}\n * @private\n */\n }, {\n key: \"_getFormAutoNumericChildren\",\n value: function _getFormAutoNumericChildren(formElement) {\n var _this10 = this;\n // Search for all the child AutoNumeric elements in that parent form\n var inputElementsList = _toConsumableArray(formElement.elements); //XXX `.elements` here only returns the form's inputs, not the other child elements that could be contenteditable\n var nonInputContentEditableElementsList = this._getContenteditableElements(formElement); // Get the contenteditable elements inside and outside the form element\n var elementsList = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].arrayUnique(inputElementsList, nonInputContentEditableElementsList);\n return elementsList.filter(function (element) {\n return _this10.constructor.isManagedByAutoNumeric(element);\n });\n }\n\n /**\n * Returns an array of the non-input contenteditable elements linked to the given form element.\n * Two types of elements are possible, either located inside the form element, or outside.\n * For the outside elements, this only works if the form element has a defined id and that id is referenced on the non-input element as the `form` attribute.\n * If no elements can be found, then an empty array is returned.\n *\n * @param {HTMLFormElement|null} formElement\n *\n * @returns {Array.}\n * @private\n */\n }, {\n key: \"_getContenteditableElements\",\n value: function _getContenteditableElements(formElement) {\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefinedOrNullOrEmpty(formElement) || !formElement.hasAttribute('id')) {\n return [];\n }\n var elementsInside = _toConsumableArray(formElement.querySelectorAll('[contenteditable=true]'));\n var elementsOutside = _toConsumableArray(document.querySelectorAll(\"*:not(input)[form=\".concat(formElement.getAttribute('id'), \"][contenteditable=true]\")));\n return _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].arrayUnique(elementsInside, elementsOutside);\n }\n\n /**\n * Returns a reference to the parent element if it exists, otherwise return `null`.\n *\n * @returns {HTMLFormElement|null}\n * @private\n */\n }, {\n key: \"_getParentForm\",\n value: function _getParentForm() {\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefined(this.domElement.form)) return this.domElement.form; // This catches input elements outside the form element\n\n if (this.domElement.tagName.toLowerCase() === 'body') {\n return null;\n }\n var node = this.domElement;\n var tagName;\n do {\n node = node.parentNode;\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(node)) {\n // Special case when using templates with frameworks like Vue.js, where the input element can be 'detached' when initializing the DOM structure\n return null;\n }\n if (node.tagName) {\n tagName = node.tagName.toLowerCase();\n } else {\n tagName = '';\n }\n if (tagName === 'body') {\n // Get out of the loop if we get up to the `` element\n break;\n }\n } while (tagName !== 'form');\n if (tagName === 'form') {\n return node;\n } else {\n return null;\n }\n }\n\n /**\n * Return a string in standard URL-encoded notation with the form input values being unformatted.\n * This string can be used as a query for instance.\n *\n * @returns {string}\n */\n }, {\n key: \"formNumericString\",\n value: function formNumericString() {\n return this.constructor._serializeNumericString(this.form(), this.settings.serializeSpaces);\n }\n\n /**\n * Return a string in standard URL-encoded notation with the form input values being formatted.\n *\n * @returns {string}\n */\n }, {\n key: \"formFormatted\",\n value: function formFormatted() {\n return this.constructor._serializeFormatted(this.form(), this.settings.serializeSpaces);\n }\n\n /**\n * Return a string in standard URL-encoded notation with the form input values, with localized values.\n * The default output format can be overridden by passing the option as a parameter.\n *\n * @param {null|string} forcedOutputFormat If set to something different from `null`, then this is used as an overriding outputFormat option\n * @returns {string}\n */\n }, {\n key: \"formLocalized\",\n value: function formLocalized() {\n var forcedOutputFormat = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var outputFormatToUse;\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(forcedOutputFormat)) {\n outputFormatToUse = this.settings.outputFormat;\n } else {\n outputFormatToUse = forcedOutputFormat;\n }\n return this.constructor._serializeLocalized(this.form(), this.settings.serializeSpaces, outputFormatToUse);\n }\n\n /**\n * Return an array containing an object for each form element.\n * Those objects are of the following structure `{ name: foo, value: '42' }`, where the `name` is the DOM element name, and the `value` is an unformatted numeric string.\n *\n * @returns {Array}\n */\n }, {\n key: \"formArrayNumericString\",\n value: function formArrayNumericString() {\n return this.constructor._serializeNumericStringArray(this.form(), this.settings.serializeSpaces);\n }\n\n /**\n * Return an array containing an object for each form element.\n * Those objects are of the following structure `{ name: foo, value: '42' }`, where the `name` is the DOM element name, and the `value` is the formatted string.\n *\n * @returns {Array}\n */\n }, {\n key: \"formArrayFormatted\",\n value: function formArrayFormatted() {\n return this.constructor._serializeFormattedArray(this.form(), this.settings.serializeSpaces);\n }\n\n /**\n * Return an array containing an object for each form element.\n * Those objects are of the following structure `{ name: foo, value: '42' }`, where the `name` is the DOM element name, and the `value` is the localized numeric string.\n *\n * @param {null|string} forcedOutputFormat If set to something different from `null`, then this is used as an overriding outputFormat option\n * @returns {Array}\n */\n }, {\n key: \"formArrayLocalized\",\n value: function formArrayLocalized() {\n var forcedOutputFormat = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var outputFormatToUse;\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(forcedOutputFormat)) {\n outputFormatToUse = this.settings.outputFormat;\n } else {\n outputFormatToUse = forcedOutputFormat;\n }\n return this.constructor._serializeLocalizedArray(this.form(), this.settings.serializeSpaces, outputFormatToUse);\n }\n\n /**\n * Return a JSON string containing an object representing the form input values.\n * This is based on the result of the `formArrayNumericString()` function.\n *\n * @returns {string}\n */\n }, {\n key: \"formJsonNumericString\",\n value: function formJsonNumericString() {\n return JSON.stringify(this.formArrayNumericString());\n }\n\n /**\n * Return a JSON string containing an object representing the form input values.\n * This is based on the result of the `formArrayFormatted()` function.\n *\n * @returns {string}\n */\n }, {\n key: \"formJsonFormatted\",\n value: function formJsonFormatted() {\n return JSON.stringify(this.formArrayFormatted());\n }\n\n /**\n * Return a JSON string containing an object representing the form input values.\n * This is based on the result of the `formArrayLocalized()` function.\n *\n * @param {null|string} forcedOutputFormat If set to something different from `null`, then this is used as an overriding outputFormat option\n * @returns {string}\n */\n }, {\n key: \"formJsonLocalized\",\n value: function formJsonLocalized() {\n var forcedOutputFormat = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n return JSON.stringify(this.formArrayLocalized(forcedOutputFormat));\n }\n\n /**\n * Unformat all the autoNumeric-managed elements that are a child of the parent element of this DOM element, to numeric strings\n *\n * @returns {AutoNumeric}\n */\n }, {\n key: \"formUnformat\",\n value: function formUnformat() {\n //FIXME test this\n var inputs = this.constructor._getChildANInputElement(this.form());\n inputs.forEach(function (input) {\n AutoNumeric.getAutoNumericElement(input).unformat();\n });\n return this;\n }\n\n /**\n * Unformat all the autoNumeric-managed elements that are a child of the parent element of this DOM element, to localized strings\n *\n * @returns {AutoNumeric}\n */\n }, {\n key: \"formUnformatLocalized\",\n value: function formUnformatLocalized() {\n //FIXME test this\n var inputs = this.constructor._getChildANInputElement(this.form());\n inputs.forEach(function (input) {\n AutoNumeric.getAutoNumericElement(input).unformatLocalized();\n });\n return this;\n }\n\n /**\n * Reformat all the autoNumeric-managed elements that are a child of the parent element of this DOM element\n *\n * @returns {AutoNumeric}\n */\n }, {\n key: \"formReformat\",\n value: function formReformat() {\n //FIXME test this\n var inputs = this.constructor._getChildANInputElement(this.form());\n inputs.forEach(function (input) {\n AutoNumeric.getAutoNumericElement(input).reformat();\n });\n return this;\n }\n\n /**\n * Convert the input values to numeric strings, submit the form, then reformat those back.\n * The function can either take a callback, or not. If it doesn't, the default `form.submit()` function will be called.\n * Otherwise, it runs `callback(value)` with `value` being equal to the result of `formNumericString()`.\n *\n * @param {function|null} callback\n * @returns {AutoNumeric}\n */\n }, {\n key: \"formSubmitNumericString\",\n value: function formSubmitNumericString() {\n var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n //FIXME test this\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(callback)) {\n this.formUnformat();\n this.form().submit();\n this.formReformat();\n } else if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFunction(callback)) {\n callback(this.formNumericString());\n } else {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The given callback is not a function.\");\n }\n return this;\n }\n\n /**\n * Submit the form with the current formatted values.\n * The function can either take a callback, or not. If it doesn't, the default `form.submit()` function will be called.\n * Otherwise, it runs `callback(value)` with `value` being equal to the result of `formFormatted()`.\n *\n * @param {function|null} callback\n * @returns {AutoNumeric}\n */\n }, {\n key: \"formSubmitFormatted\",\n value: function formSubmitFormatted() {\n var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n //FIXME test this\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(callback)) {\n this.form().submit();\n } else if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFunction(callback)) {\n callback(this.formFormatted());\n } else {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The given callback is not a function.\");\n }\n return this;\n }\n\n /**\n * Convert the input values to localized strings, submit the form, then reformat those back.\n * The function can either take a callback, or not. If it doesn't, the default `form.submit()` function will be called.\n * Otherwise, it runs `callback(value)` with `value` being equal to the result of `formLocalized()`.\n *\n * @param {null|string} forcedOutputFormat If set to something different from `null`, then this is used as an overriding outputFormat option\n * @param {function|null} callback\n * @returns {AutoNumeric}\n */\n }, {\n key: \"formSubmitLocalized\",\n value: function formSubmitLocalized() {\n var forcedOutputFormat = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n //FIXME test this\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(callback)) {\n this.formUnformatLocalized();\n this.form().submit();\n this.formReformat();\n } else if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFunction(callback)) {\n callback(this.formLocalized(forcedOutputFormat));\n } else {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The given callback is not a function.\");\n }\n return this;\n }\n\n /**\n * Generate an array of numeric strings from the `` elements, and pass it to the given callback.\n * Under the hood, the array is generated via a call to `formArrayNumericString()`.\n *\n * @param {function} callback\n * @returns {AutoNumeric}\n */\n }, {\n key: \"formSubmitArrayNumericString\",\n value: function formSubmitArrayNumericString(callback) {\n //FIXME test this\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFunction(callback)) {\n callback(this.formArrayNumericString());\n } else {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The given callback is not a function.\");\n }\n return this;\n }\n\n /**\n * Generate an array of the current formatted values from the `` elements, and pass it to the given callback.\n * Under the hood, the array is generated via a call to `formArrayFormatted()`.\n *\n * @param {function} callback\n * @returns {AutoNumeric}\n */\n }, {\n key: \"formSubmitArrayFormatted\",\n value: function formSubmitArrayFormatted(callback) {\n //FIXME test this\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFunction(callback)) {\n callback(this.formArrayFormatted());\n } else {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The given callback is not a function.\");\n }\n return this;\n }\n\n /**\n * Generate an array of localized strings from the `` elements, and pass it to the given callback.\n * Under the hood, the array is generated via a call to `formArrayLocalized()`.\n *\n * @param {function} callback\n * @param {null|string} forcedOutputFormat If set to something different from `null`, then this is used as an overriding outputFormat option\n * @returns {AutoNumeric}\n */\n }, {\n key: \"formSubmitArrayLocalized\",\n value: function formSubmitArrayLocalized(callback) {\n var forcedOutputFormat = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n //FIXME test this\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFunction(callback)) {\n callback(this.formArrayLocalized(forcedOutputFormat));\n } else {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The given callback is not a function.\");\n }\n return this;\n }\n\n /**\n * Generate a JSON string with the numeric strings values from the `` elements, and pass it to the given callback.\n * Under the hood, the array is generated via a call to `formJsonNumericString()`.\n *\n * @param {function} callback\n * @returns {AutoNumeric}\n */\n }, {\n key: \"formSubmitJsonNumericString\",\n value: function formSubmitJsonNumericString(callback) {\n //FIXME test this\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFunction(callback)) {\n callback(this.formJsonNumericString());\n } else {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The given callback is not a function.\");\n }\n return this;\n }\n\n /**\n * Generate a JSON string with the current formatted values from the `` elements, and pass it to the given callback.\n * Under the hood, the array is generated via a call to `formJsonFormatted()`.\n *\n * @param {function} callback\n * @returns {AutoNumeric}\n */\n }, {\n key: \"formSubmitJsonFormatted\",\n value: function formSubmitJsonFormatted(callback) {\n //FIXME test this\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFunction(callback)) {\n callback(this.formJsonFormatted());\n } else {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The given callback is not a function.\");\n }\n return this;\n }\n\n /**\n * Generate a JSON string with the localized strings values from the `` elements, and pass it to the given callback.\n * Under the hood, the array is generated via a call to `formJsonLocalized()`.\n *\n * @param {function} callback\n * @param {null|string} forcedOutputFormat If set to something different from `null`, then this is used as an overriding outputFormat option\n * @returns {AutoNumeric}\n */\n }, {\n key: \"formSubmitJsonLocalized\",\n value: function formSubmitJsonLocalized(callback) {\n var forcedOutputFormat = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n //FIXME test this\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFunction(callback)) {\n callback(this.formJsonLocalized(forcedOutputFormat));\n } else {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The given callback is not a function.\");\n }\n return this;\n }\n\n /**\n * Unformat the given AutoNumeric element, and update the `hoveredWithAlt` variable.\n *\n * @param {AutoNumeric} anElement\n * @private\n */\n }, {\n key: \"_createLocalList\",\n value:\n /**\n * Create a `Map` that will store all the autoNumeric elements that are initialized from this current element.\n * @private\n */\n function _createLocalList() {\n this.autoNumericLocalList = new Map();\n this._addToLocalList(this.domElement);\n }\n\n /**\n * In some rare cases, you could want to delete the local list generated during the element initialization (in order to use another one instead for instance).\n * @private\n */\n }, {\n key: \"_deleteLocalList\",\n value: function _deleteLocalList() {\n delete this.autoNumericLocalList;\n }\n\n /**\n * Set the local list with the given Map object.\n *\n * @param {Map} localList\n * @private\n */\n }, {\n key: \"_setLocalList\",\n value: function _setLocalList(localList) {\n this.autoNumericLocalList = localList;\n }\n\n /**\n * Return the local list Map object.\n *\n * @returns {*|Map}\n * @private\n */\n }, {\n key: \"_getLocalList\",\n value: function _getLocalList() {\n return this.autoNumericLocalList;\n }\n\n /**\n * Return `true` if the AutoNumeric object has a local list defined already and has at least one element in it (itself usually).\n *\n * @returns {boolean}\n * @private\n */\n }, {\n key: \"_hasLocalList\",\n value: function _hasLocalList() {\n return this.autoNumericLocalList instanceof Map && this.autoNumericLocalList.size !== 0;\n }\n\n /**\n * Add the given object to the local autoNumeric element list.\n * Note: in order to keep a coherent list, we only add DOM elements in it, not the autoNumeric object.\n *\n * @param {HTMLElement|HTMLInputElement} domElement\n * @param {AutoNumeric} autoNumericObject A reference to the AutoNumeric object that manage the given DOM element\n * @throws\n * @private\n */\n }, {\n key: \"_addToLocalList\",\n value: function _addToLocalList(domElement) {\n var autoNumericObject = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(autoNumericObject)) {\n autoNumericObject = this;\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefined(this.autoNumericLocalList)) {\n this.autoNumericLocalList.set(domElement, autoNumericObject); // Use the DOM element as key, and the AutoNumeric object as the value\n } else {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The local list provided does not exists when trying to add an element. [\".concat(this.autoNumericLocalList, \"] given.\"));\n }\n }\n\n /**\n * Remove the given object from the local autoNumeric element list.\n *\n * @param {HTMLElement|HTMLInputElement} domElement\n * @private\n */\n }, {\n key: \"_removeFromLocalList\",\n value: function _removeFromLocalList(domElement) {\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefined(this.autoNumericLocalList)) {\n this.autoNumericLocalList[\"delete\"](domElement);\n } else if (this.settings.createLocalList) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The local list provided does not exists when trying to remove an element. [\".concat(this.autoNumericLocalList, \"] given.\"));\n }\n }\n\n /**\n * Merge the `newSettings` given as parameters into the current element settings.\n *\n * WARNING: Using `Object.assign()` here means the merge is not recursive and only one depth is merged.\n * cf. http://stackoverflow.com/a/39188108/2834898\n * cf. tests on http://codepen.io/AnotherLinuxUser/pen/KaJORq?editors=0011\n *\n * @param {object} newSettings\n * @private\n */\n }, {\n key: \"_mergeSettings\",\n value: function _mergeSettings() {\n for (var _len3 = arguments.length, newSettings = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n newSettings[_key3] = arguments[_key3];\n }\n _extends.apply(void 0, [this.settings].concat(newSettings));\n }\n\n /**\n * Return a new object with the current element settings merged with the new settings.\n *\n * @param {object} newSettings\n * @returns {object}\n * @private\n */\n }, {\n key: \"_cloneAndMergeSettings\",\n value: function _cloneAndMergeSettings() {\n var result = {};\n for (var _len4 = arguments.length, newSettings = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n newSettings[_key4] = arguments[_key4];\n }\n _extends.apply(void 0, [result, this.settings].concat(newSettings));\n return result;\n }\n\n /**\n * Validate the given option object.\n * If the options are valid, this function returns nothing, otherwise if the options are invalid, this function throws an error.\n *\n * This tests if the options are not conflicting and are well formatted.\n * This function is lenient since it only tests the settings properties ; it ignores any other properties the options object could have.\n *\n * @param {*} userOptions\n * @param {Boolean} shouldExtendDefaultOptions If `true`, then this function will extend the `userOptions` passed by the user, with the default options.\n * @param {object|null} originalOptions The user can pass the original options (and not the one that are generated from the default settings and the various usability corrections), in order to add compatibility and conflicts checks.\n * @throws Error This throws if the `userOptions` are not valid\n */\n }, {\n key: \"_updatePredefinedOptions\",\n value:\n // Pre-defined options can be called to update the current default options with their specificities\n //XXX A better way would be to not initialize first, but that's not possible since `new` is called first and we do not pass the language options (i.e. `French`) to the constructor\n\n /**\n * Update the AutoNumeric object with the predefined options, and possibly some option overrides.\n *\n * @param {object} predefinedOption\n * @param {object} optionOverride\n * @private\n * @returns {AutoNumeric}\n */\n function _updatePredefinedOptions(predefinedOption) {\n var optionOverride = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(optionOverride)) {\n this._mergeSettings(predefinedOption, optionOverride);\n this.update(this.settings);\n } else {\n this.update(predefinedOption);\n }\n return this;\n }\n\n /**\n * Update the settings to use the French pre-defined language options.\n * Those pre-defined options can be overridden by passing an option object as a parameter.\n *\n * @param {object} optionOverride\n * @returns {AutoNumeric}\n */\n }, {\n key: \"french\",\n value: function french() {\n var optionOverride = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n this._updatePredefinedOptions(AutoNumeric.getPredefinedOptions().French, optionOverride);\n return this;\n }\n\n /**\n * Update the settings to use the North American pre-defined language options.\n * Those pre-defined options can be overridden by passing an option object as a parameter.\n *\n * @param {object} optionOverride\n * @returns {AutoNumeric}\n */\n }, {\n key: \"northAmerican\",\n value: function northAmerican() {\n var optionOverride = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n this._updatePredefinedOptions(AutoNumeric.getPredefinedOptions().NorthAmerican, optionOverride);\n return this;\n }\n\n /**\n * Update the settings to use the British pre-defined language options.\n * Those pre-defined options can be overridden by passing an option object as a parameter.\n *\n * @param {object} optionOverride\n * @returns {AutoNumeric}\n */\n }, {\n key: \"british\",\n value: function british() {\n var optionOverride = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n this._updatePredefinedOptions(AutoNumeric.getPredefinedOptions().British, optionOverride);\n return this;\n }\n\n /**\n * Update the settings to use the Swiss pre-defined language options.\n * Those pre-defined options can be overridden by passing an option object as a parameter.\n *\n * @param {object} optionOverride\n * @returns {AutoNumeric}\n */\n }, {\n key: \"swiss\",\n value: function swiss() {\n var optionOverride = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n this._updatePredefinedOptions(AutoNumeric.getPredefinedOptions().Swiss, optionOverride);\n return this;\n }\n\n /**\n * Update the settings to use the Japanese pre-defined language options.\n * Those pre-defined options can be overridden by passing an option object as a parameter.\n *\n * @param {object} optionOverride\n * @returns {AutoNumeric}\n */\n }, {\n key: \"japanese\",\n value: function japanese() {\n var optionOverride = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n this._updatePredefinedOptions(AutoNumeric.getPredefinedOptions().Japanese, optionOverride);\n return this;\n }\n\n /**\n * Update the settings to use the Spanish pre-defined language options.\n * Those pre-defined options can be overridden by passing an option object as a parameter.\n *\n * @param {object} optionOverride\n * @returns {AutoNumeric}\n */\n }, {\n key: \"spanish\",\n value: function spanish() {\n var optionOverride = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n this._updatePredefinedOptions(AutoNumeric.getPredefinedOptions().Spanish, optionOverride);\n return this;\n }\n\n /**\n * Update the settings to use the Chinese pre-defined language options.\n * Those pre-defined options can be overridden by passing an option object as a parameter.\n *\n * @param {object} optionOverride\n * @returns {AutoNumeric}\n */\n }, {\n key: \"chinese\",\n value: function chinese() {\n var optionOverride = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n this._updatePredefinedOptions(AutoNumeric.getPredefinedOptions().Chinese, optionOverride);\n return this;\n }\n\n /**\n * Update the settings to use the Brazilian pre-defined language options.\n * Those pre-defined options can be overridden by passing an option object as a parameter.\n *\n * @param {object} optionOverride\n * @returns {AutoNumeric}\n */\n }, {\n key: \"brazilian\",\n value: function brazilian() {\n var optionOverride = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n this._updatePredefinedOptions(AutoNumeric.getPredefinedOptions().Brazilian, optionOverride);\n return this;\n }\n\n // Internal private functions\n /**\n * Run any callbacks found in the settings object in order to set the settings value back.\n * Any parameter can have a callback defined.\n * The callback takes the current AutoNumeric element as the first argument, and the key name as the second.\n * @example callback(this, 'currencySymbol')\n */\n }, {\n key: \"_runCallbacksFoundInTheSettingsObject\",\n value: function _runCallbacksFoundInTheSettingsObject() {\n //FIXME test this\n // Loops through the this.settings object (option array) to find the following\n for (var key in this.settings) {\n if (Object.prototype.hasOwnProperty.call(this.settings, key)) {\n var value = this.settings[key];\n if (typeof value === 'function') {\n this.settings[key] = value(this, key);\n } else {\n // Calls the attached function from the html5 data. For instance: \n var htmlAttribute = '';\n if (key in this.domElement.dataset) {\n htmlAttribute = this.domElement.dataset[key];\n }\n htmlAttribute = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].camelize(htmlAttribute);\n if (typeof this.settings[htmlAttribute] === 'function') {\n this.settings[key] = htmlAttribute(this, key);\n }\n }\n }\n }\n }\n\n /**\n * Keep track if the settings configuration leads to a trailing negative sign (only when the raw value is negative), so we do not have to test the settings values every time we need to know that.\n * `isTrailingNegative` is set to `true` if the settings result in a trailing negative character, `false` otherwise.\n * Note: This returns `true` even if the raw value is positive.\n * @private\n */\n }, {\n key: \"_setTrailingNegativeSignInfo\",\n value: function _setTrailingNegativeSignInfo() {\n this.isTrailingNegative = this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix && this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.suffix || this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix && (this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.left || this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.right);\n }\n\n /**\n * Strip all the unwanted non-number characters.\n * However, it does not reorder the localized negative sign.\n *\n * @param {string} s\n * @param {object} settings\n * @param {boolean} stripZeros If set to `false`, then the leading zero(s) are not stripped, otherwise if set to `true`, the `leadingZero` option is followed\n * @param {boolean} isFocused If the element is focused, then this is `true`\n * @returns {string}\n * @private\n */\n }, {\n key: \"_modifyNegativeSignAndDecimalCharacterForRawValue\",\n value:\n /**\n * Modify the negative sign and the decimal character of the given string value to a hyphen (-) and a dot (.) in order to make that value 'typecastable' to a real number.\n *\n * @param {string} s The formatted value\n * @returns {string} The value with the 'normal' minus sign and decimal character\n */\n function _modifyNegativeSignAndDecimalCharacterForRawValue(s) {\n if (this.settings.decimalCharacter !== '.') {\n s = s.replace(this.settings.decimalCharacter, '.');\n }\n if (this.settings.negativeSignCharacter !== '-' && this.settings.isNegativeSignAllowed) {\n s = s.replace(this.settings.negativeSignCharacter, '-');\n }\n if (!s.match(/\\d/)) {\n // The default value returned by `get` is not formatted with decimals\n s += '0';\n }\n return s;\n }\n\n /**\n * Modify the negative sign and the decimal character to use those defined in the settings.\n *\n * @param {string} s\n * @param {object} settings\n * @returns {string}\n */\n }, {\n key: \"_initialCaretPosition\",\n value:\n /**\n * Calculate where to put the caret position on focus if the element content is not selected.\n * This calculation is affected by the `caretPositionOnFocus` option which can be either `null`, `'start'`, `'end'`, `'decimalLeft'` or 'decimalRight'`, and will decide where to put the caret (on the left or right of the value or the decimal character, respectively) :\n * - `null` : the caret position is not forced\n * - `'start'` : the caret is positioned on the left hand side of the value\n * - `'end'` : the caret is positioned on the right hand side of the value\n * - `'decimalLeft'` : the caret is positioned on the left side of the decimal character\n * - `'decimalRight'` : the caret is positioned on the right side of the decimal character\n *\n * @param {string} value The formatted string stripped of the currency symbol and negative/positive sign\n * @returns {number}\n * @throws\n * @private\n */\n function _initialCaretPosition(value) {\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(this.settings.caretPositionOnFocus) && this.settings.selectOnFocus === AutoNumeric.options.selectOnFocus.doNotSelect) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError('`_initialCaretPosition()` should never be called when the `caretPositionOnFocus` option is `null`.');\n }\n var isValueNegative = this.rawValue < 0;\n var isZeroOrHasNoValue = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isZeroOrHasNoValue(value);\n var totalLength = value.length;\n var valueSize = 0;\n var integerSize = 0;\n var hasDecimalChar = false;\n var offsetDecimalChar = 0;\n if (this.settings.caretPositionOnFocus !== AutoNumeric.options.caretPositionOnFocus.start) {\n value = value.replace(this.settings.negativeSignCharacter, '');\n value = value.replace(this.settings.positiveSignCharacter, '');\n value = value.replace(this.settings.currencySymbol, '');\n valueSize = value.length;\n hasDecimalChar = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].contains(value, this.settings.decimalCharacter);\n if (this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.decimalLeft || this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.decimalRight) {\n if (hasDecimalChar) {\n integerSize = value.indexOf(this.settings.decimalCharacter);\n offsetDecimalChar = this.settings.decimalCharacter.length;\n } else {\n integerSize = valueSize;\n offsetDecimalChar = 0;\n }\n }\n }\n var signToUse = '';\n if (isValueNegative) {\n signToUse = this.settings.negativeSignCharacter;\n } else if (this.settings.showPositiveSign && !isZeroOrHasNoValue) {\n signToUse = this.settings.positiveSignCharacter;\n }\n var positiveNegativeSignSize = signToUse.length;\n var currencySymbolSize = this.settings.currencySymbol.length;\n\n // Calculate the caret position based on `currencySymbolPlacement`, `negativePositiveSignPlacement` and `caretPositionOnFocus`\n var caretPosition;\n if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix) {\n if (this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.start) {\n if (this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none && (isValueNegative || !isValueNegative && this.settings.showPositiveSign && !isZeroOrHasNoValue)) {\n switch (this.settings.negativePositiveSignPlacement) {\n case AutoNumeric.options.negativePositiveSignPlacement.prefix: // +€|12.34\n case AutoNumeric.options.negativePositiveSignPlacement.left: // +€|12.34\n case AutoNumeric.options.negativePositiveSignPlacement.right:\n // €+|12.34\n caretPosition = positiveNegativeSignSize + currencySymbolSize;\n break;\n case AutoNumeric.options.negativePositiveSignPlacement.suffix:\n // €|12.34+\n caretPosition = currencySymbolSize;\n break;\n }\n } else {\n // €|12.34\n caretPosition = currencySymbolSize;\n }\n } else if (this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.end) {\n if (this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none && (isValueNegative || !isValueNegative && this.settings.showPositiveSign && !isZeroOrHasNoValue)) {\n switch (this.settings.negativePositiveSignPlacement) {\n case AutoNumeric.options.negativePositiveSignPlacement.prefix: // +€12.34|\n case AutoNumeric.options.negativePositiveSignPlacement.left: // +€12.34|\n case AutoNumeric.options.negativePositiveSignPlacement.right:\n // €+12.34|\n caretPosition = totalLength;\n break;\n case AutoNumeric.options.negativePositiveSignPlacement.suffix:\n // €12.34|+\n caretPosition = currencySymbolSize + valueSize;\n break;\n }\n } else {\n // €12.34|\n caretPosition = totalLength;\n }\n } else if (this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.decimalLeft) {\n if (this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none && (isValueNegative || !isValueNegative && this.settings.showPositiveSign && !isZeroOrHasNoValue)) {\n switch (this.settings.negativePositiveSignPlacement) {\n case AutoNumeric.options.negativePositiveSignPlacement.prefix: // +€12|.34\n case AutoNumeric.options.negativePositiveSignPlacement.left: // +€12|.34\n case AutoNumeric.options.negativePositiveSignPlacement.right:\n // €+12|.34\n caretPosition = positiveNegativeSignSize + currencySymbolSize + integerSize;\n break;\n case AutoNumeric.options.negativePositiveSignPlacement.suffix:\n // €12|.34+\n caretPosition = currencySymbolSize + integerSize;\n break;\n }\n } else {\n // €12|.34\n caretPosition = currencySymbolSize + integerSize;\n }\n } else if (this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.decimalRight) {\n if (this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none && (isValueNegative || !isValueNegative && this.settings.showPositiveSign && !isZeroOrHasNoValue)) {\n switch (this.settings.negativePositiveSignPlacement) {\n case AutoNumeric.options.negativePositiveSignPlacement.prefix: // +€12.|34\n case AutoNumeric.options.negativePositiveSignPlacement.left: // +€12.|34\n case AutoNumeric.options.negativePositiveSignPlacement.right:\n // €+12.|34\n caretPosition = positiveNegativeSignSize + currencySymbolSize + integerSize + offsetDecimalChar;\n break;\n case AutoNumeric.options.negativePositiveSignPlacement.suffix:\n // €12.|34+\n caretPosition = currencySymbolSize + integerSize + offsetDecimalChar;\n break;\n }\n } else {\n // €12.|34\n caretPosition = currencySymbolSize + integerSize + offsetDecimalChar;\n }\n }\n } else if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n if (this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.start) {\n if (this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none && (isValueNegative || !isValueNegative && this.settings.showPositiveSign && !isZeroOrHasNoValue)) {\n switch (this.settings.negativePositiveSignPlacement) {\n case AutoNumeric.options.negativePositiveSignPlacement.suffix: // |12.34€+\n case AutoNumeric.options.negativePositiveSignPlacement.right: // |12.34€+\n case AutoNumeric.options.negativePositiveSignPlacement.left:\n // |12.34+€\n caretPosition = 0;\n break;\n case AutoNumeric.options.negativePositiveSignPlacement.prefix:\n // +|12.34€\n caretPosition = positiveNegativeSignSize;\n break;\n }\n } else {\n // |12.34€\n caretPosition = 0;\n }\n } else if (this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.end) {\n if (this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none && (isValueNegative || !isValueNegative && this.settings.showPositiveSign && !isZeroOrHasNoValue)) {\n switch (this.settings.negativePositiveSignPlacement) {\n case AutoNumeric.options.negativePositiveSignPlacement.suffix: // 12.34|€+\n case AutoNumeric.options.negativePositiveSignPlacement.right: // 12.34|€+\n case AutoNumeric.options.negativePositiveSignPlacement.left:\n // 12.34|+€\n caretPosition = valueSize;\n break;\n case AutoNumeric.options.negativePositiveSignPlacement.prefix:\n // +12.34|€\n caretPosition = positiveNegativeSignSize + valueSize;\n break;\n }\n } else {\n // 12.34|€\n caretPosition = valueSize;\n }\n } else if (this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.decimalLeft) {\n if (this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none && (isValueNegative || !isValueNegative && this.settings.showPositiveSign && !isZeroOrHasNoValue)) {\n switch (this.settings.negativePositiveSignPlacement) {\n case AutoNumeric.options.negativePositiveSignPlacement.suffix: // 12|.34€+\n case AutoNumeric.options.negativePositiveSignPlacement.right: // 12|.34€+\n case AutoNumeric.options.negativePositiveSignPlacement.left:\n // 12|.34+€\n caretPosition = integerSize;\n break;\n case AutoNumeric.options.negativePositiveSignPlacement.prefix:\n // +12|.34€\n caretPosition = positiveNegativeSignSize + integerSize;\n break;\n }\n } else {\n // 12|.34€\n caretPosition = integerSize;\n }\n } else if (this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.decimalRight) {\n if (this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none && (isValueNegative || !isValueNegative && this.settings.showPositiveSign && !isZeroOrHasNoValue)) {\n switch (this.settings.negativePositiveSignPlacement) {\n case AutoNumeric.options.negativePositiveSignPlacement.suffix: // 12.|34€+\n case AutoNumeric.options.negativePositiveSignPlacement.right: // 12.|34€+\n case AutoNumeric.options.negativePositiveSignPlacement.left:\n // 12.|34+€\n caretPosition = integerSize + offsetDecimalChar;\n break;\n case AutoNumeric.options.negativePositiveSignPlacement.prefix:\n // +12.|34€\n caretPosition = positiveNegativeSignSize + integerSize + offsetDecimalChar;\n break;\n }\n } else {\n // 12.|34€\n caretPosition = integerSize + offsetDecimalChar;\n }\n }\n }\n return caretPosition;\n }\n\n /**\n * Truncate the trailing zeroes to the given number of decimal places\n *\n * @param {string} roundedInputValue\n * @param {int} decimalPlacesNeeded The number of decimal places to keep\n * @returns {string}\n */\n }, {\n key: \"_triggerRangeEvents\",\n value:\n /**\n * Helper function that triggers the range events if they are needed\n *\n * @param {boolean} minTest\n * @param {boolean} maxTest\n * @private\n */\n function _triggerRangeEvents(minTest, maxTest) {\n if (!minTest) {\n this._triggerEvent(AutoNumeric.events.minRangeExceeded, this.domElement);\n }\n if (!maxTest) {\n this._triggerEvent(AutoNumeric.events.maxRangeExceeded, this.domElement);\n }\n }\n\n /**\n * Set the invalid state on the AutoNumeric element.\n * If the element is not an input, and therefore a contenteditable-enabled element, its validity state cannot be changed.\n * In that case, the invalid css class defined with the `settings.invalidClass` option is added to the element.\n * The 'autoNumeric:invalidValue' event is always sent when this function is called.\n *\n * @private\n */\n }, {\n key: \"_setInvalidState\",\n value: function _setInvalidState() {\n if (this.isInputElement) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setInvalidState(this.domElement);\n } else {\n this._addCSSClass(this.settings.invalidClass);\n }\n this._triggerEvent(AutoNumeric.events.invalidValue, this.domElement);\n this.validState = false;\n }\n\n /**\n * Set the valid state on the AutoNumeric element.\n * If the element is not an input, and therefore a contenteditable-enabled element, its validity state cannot be changed.\n * In that case, the invalid css class defined with the `settings.invalidClass` option is removed.\n * The 'autoNumeric:correctedValue' event is sent if the element state is invalid when this is called.\n *\n * @private\n */\n }, {\n key: \"_setValidState\",\n value: function _setValidState() {\n if (this.isInputElement) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setValidState(this.domElement);\n } else {\n this._removeCSSClass(this.settings.invalidClass);\n }\n if (!this.validState) {\n this._triggerEvent(AutoNumeric.events.correctedValue, this.domElement);\n }\n this.validState = true;\n }\n\n /**\n * Sets the valid or invalid state on the DOM element, if the value is within the range set by the minimum and maximum value\n *\n * @param {string} value\n * @private\n */\n }, {\n key: \"_setValidOrInvalidState\",\n value: function _setValidOrInvalidState(value) {\n if (this.settings.overrideMinMaxLimits === AutoNumeric.options.overrideMinMaxLimits.invalid) {\n var minRangeOk = this.constructor._isMinimumRangeRespected(value, this.settings);\n var maxRangeOk = this.constructor._isMaximumRangeRespected(value, this.settings);\n if (minRangeOk && maxRangeOk) {\n this._setValidState();\n } else {\n this._setInvalidState();\n }\n this._triggerRangeEvents(minRangeOk, maxRangeOk);\n }\n }\n\n /**\n * Original settings saved for use when the `decimalPlacesShownOnFocus` and `showOnlyNumbersOnFocus` options are used.\n * Those original settings are used exclusively in the `focusin` and `focusout` event handlers.\n */\n }, {\n key: \"_keepAnOriginalSettingsCopy\",\n value: function _keepAnOriginalSettingsCopy() {\n this.originalDigitGroupSeparator = this.settings.digitGroupSeparator;\n this.originalCurrencySymbol = this.settings.currencySymbol;\n this.originalSuffixText = this.settings.suffixText;\n }\n\n /**\n * Removes any zeros in excess in the front and back of the given `value`, according to the `settings`.\n * This also manages the cases where the decimal point is on the far left or far right of the `value`.\n *\n * @param {string} value\n * @returns {string|null}\n */\n }, {\n key: \"_trimLeadingAndTrailingZeros\",\n value: function _trimLeadingAndTrailingZeros(value) {\n // Return the empty string is the value is already empty. This prevents converting that value to '0'.\n if (value === '' || value === null) {\n return value;\n }\n if (this.settings.leadingZero !== AutoNumeric.options.leadingZero.keep) {\n if (Number(value) === 0) {\n // Return '0' if the value is zero\n return '0';\n }\n\n // Trim the leading zeros, while leaving one zero to the left of the decimal point if needed\n value = value.replace(/^(-)?0+(?=\\d)/g, '$1');\n }\n\n //TODO remove this from that function and use `trimPaddedZerosFromDecimalPlaces()` instead\n // Trim the trailing zeros after the last decimal place not being a zero (i.e. 1.2300 -> 1.23)\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].contains(value, '.')) {\n value = value.replace(/(\\.[0-9]*?)0+$/, '$1');\n }\n\n // Remove any trailing decimal point\n value = value.replace(/\\.$/, '');\n return value;\n }\n\n /**\n * Generate the name for the persistent stored data variable\n * @private\n */\n }, {\n key: \"_setPersistentStorageName\",\n value: function _setPersistentStorageName() {\n if (this.settings.saveValueToSessionStorage) {\n if (this.domElement.name !== '' && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefined(this.domElement.name)) {\n this.rawValueStorageName = \"\".concat(this.storageNamePrefix).concat(decodeURIComponent(this.domElement.name));\n } else {\n this.rawValueStorageName = \"\".concat(this.storageNamePrefix).concat(this.domElement.id);\n }\n }\n }\n\n /**\n * Save the raw Value into sessionStorage or a cookie depending on what the browser is supporting.\n * @private\n */\n }, {\n key: \"_saveValueToPersistentStorage\",\n value: function _saveValueToPersistentStorage() {\n if (this.settings.saveValueToSessionStorage) {\n sessionStorage.setItem(this.rawValueStorageName, this.rawValue);\n }\n }\n\n /**\n * Retrieve the raw value from sessionStorage or the cookie depending on what the browser is supporting.\n *\n * @returns {*}\n * @private\n */\n }, {\n key: \"_getValueFromPersistentStorage\",\n value: function _getValueFromPersistentStorage() {\n if (this.settings.saveValueToSessionStorage) {\n return sessionStorage.getItem(this.rawValueStorageName);\n }\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].warning('`_getValueFromPersistentStorage()` is called but `settings.saveValueToSessionStorage` is false. There must be an error that needs fixing.', this.settings.showWarnings);\n return null;\n }\n\n /**\n * Remove the raw value data from sessionStorage or the cookie depending on what the browser is supporting.\n * @private\n */\n }, {\n key: \"_removeValueFromPersistentStorage\",\n value: function _removeValueFromPersistentStorage() {\n if (this.settings.saveValueToSessionStorage) {\n sessionStorage.removeItem(this.rawValueStorageName);\n }\n }\n\n /**\n * Get the default value from the html `value` attribute.\n * Return the empty string if such attribute is not found.\n *\n * @param {HTMLElement} domElement\n *\n * @returns {string}\n * @private\n */\n }, {\n key: \"_getDefaultValue\",\n value: function _getDefaultValue(domElement) {\n // Get the default html value\n // Note: we do not use the simpler `return domElement.defaultValue;` code since the given domElement can sometime be a `contenteditable` element which does not support the `defaultValue` attribute.\n var value = domElement.getAttribute('value');\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(value)) {\n return '';\n }\n return value;\n }\n\n /**\n * Handler for 'focusin' and 'mouseenter' events\n * On focusin, multiple things happens :\n * - If `Alt` is pressed, unformat\n * - Remove the separators if `showOnlyNumbersOnFocus` is set\n * - Depending on `emptyInputBehavior`, reformat the empty formatted value\n * - Display the correct number of decimal places (on focus/blur)\n * - Place the caret correctly if the element is empty\n *\n * Note: On focusin, the `rawValue` is never changed. Only the formatted value can be modified.\n *\n * @param {KeyboardEvent|MouseEvent} e\n * @private\n */\n }, {\n key: \"_onFocusInAndMouseEnter\",\n value: function _onFocusInAndMouseEnter(e) {\n //TODO Create separate handlers for the focus and mouseenter events\n this.isEditing = false; // Just in case no `keyUp` event have been sent (i.e. if the user lost the focus from the current window while typing)\n\n if (!this.formulaMode && this.settings.unformatOnHover && e.type === 'mouseenter' && e.altKey) {\n this.constructor._unformatAltHovered(this);\n return;\n }\n if (e.type === 'focus') {\n //TODO Move that back to the 'focus' event handler when the separation between the 'focus' and 'mouseenter' handler will be done\n // Keep track if the element is currently focused\n this.isFocused = true;\n this.rawValueOnFocus = this.rawValue; // Keep track of the initial rawValue. This is needed to define if a change event must be dispatched later\n }\n\n if (e.type === 'focus' && this.settings.unformatOnHover && this.hoveredWithAlt) {\n this.constructor._reformatAltHovered(this);\n }\n if (e.type === 'focus' || e.type === 'mouseenter' && !this.isFocused) {\n var elementValueToSet = null; // Store the value we want to set on the element, and only call `_setElementValue()` once\n\n if (this.settings.emptyInputBehavior === AutoNumeric.options.emptyInputBehavior.focus && this.rawValue < 0 && this.settings.negativeBracketsTypeOnBlur !== null && this.settings.isNegativeSignAllowed) {\n //FIXME this is called a second time in _addGroupSeparators too. Prevent this, if possible.\n // Only remove the brackets if the value is negative\n elementValueToSet = this.constructor._removeBrackets(_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(this.domElement), this.settings);\n //FIXME The element value is set here, why continue and set it again later in that same parent logic block?\n }\n\n // Use the `rawValue`, multiplied by `rawValueDivisor` if defined\n var rawValueToFormat = this._getRawValueToFormat(this.rawValue);\n\n // Modify the element value according to the number of decimal places to show on focus or the `showOnlyNumbersOnFocus` option\n if (rawValueToFormat !== '') {\n // Round the given value according to the object state (focus/unfocused)\n var roundedValue = this.constructor._roundFormattedValueShownOnFocusOrBlur(rawValueToFormat, this.settings, this.isFocused);\n if (this.settings.showOnlyNumbersOnFocus === AutoNumeric.options.showOnlyNumbersOnFocus.onlyNumbers) {\n //TODO Use a `this.settingsOverride` object instead of modifying the `this.settings` object\n this.settings.digitGroupSeparator = '';\n this.settings.currencySymbol = '';\n this.settings.suffixText = '';\n elementValueToSet = roundedValue.replace('.', this.settings.decimalCharacter);\n } else {\n var formattedValue;\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(roundedValue)) {\n formattedValue = '';\n } else {\n formattedValue = this.constructor._addGroupSeparators(roundedValue.replace('.', this.settings.decimalCharacter), this.settings, this.isFocused, rawValueToFormat);\n }\n elementValueToSet = formattedValue;\n }\n }\n\n // In order to send a 'native' change event when blurring the input, we need to first store the initial input value on focus.\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(elementValueToSet)) {\n this.valueOnFocus = '';\n } else {\n this.valueOnFocus = elementValueToSet;\n }\n this.lastVal = this.valueOnFocus;\n var isEmptyValue = this.constructor._isElementValueEmptyOrOnlyTheNegativeSign(this.valueOnFocus, this.settings);\n var orderedValue = this.constructor._orderValueCurrencySymbolAndSuffixText(this.valueOnFocus, this.settings, true); // This displays the currency sign on hover even if the rawValue is empty\n var orderedValueTest = isEmptyValue && orderedValue !== '' && this.settings.emptyInputBehavior === AutoNumeric.options.emptyInputBehavior.focus;\n if (orderedValueTest) {\n elementValueToSet = orderedValue;\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(elementValueToSet)) {\n this._setElementValue(elementValueToSet);\n }\n if (orderedValueTest && orderedValue === this.settings.currencySymbol && this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n // If there is a currency symbol and its on the right hand side, then we place the caret accordingly on the far left side\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setElementSelection(e.target, 0);\n }\n }\n }\n\n /**\n * Handler for the 'focus' event.\n * We update the info of the focused state in the `this.isFocused` variable when the element gets focused.\n * @private\n */\n }, {\n key: \"_onFocus\",\n value: function _onFocus() {\n if (this.settings.isCancellable) {\n // Save the current unformatted value for later use by the 'cancellable' feature\n this._saveCancellableValue();\n }\n }\n\n /**\n * Handler for the 'focusin' event.\n * This is called before the 'focus' event, and is necessary to change the selection on focus under Firefox for instance.\n *\n * @param {Event} e\n * @private\n */\n }, {\n key: \"_onFocusIn\",\n value: function _onFocusIn(e) {\n if (this.settings.selectOnFocus) {\n // The whole input content is selected on focus (following the `selectOnFocus` and `selectNumberOnly` options)\n //XXX Firefox <47 does not respect this selection...Oh well.\n this.select();\n } else {\n // Or we decide where to put the caret using the `caretPositionOnFocus` option\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(this.settings.caretPositionOnFocus)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setElementSelection(e.target, this._initialCaretPosition(_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(this.domElement)));\n }\n }\n }\n\n /**\n * Enter the special 'formula mode' where users can enter a math expression that will be evaluated on blur and `enter`\n * @private\n */\n }, {\n key: \"_enterFormulaMode\",\n value: function _enterFormulaMode() {\n if (this.settings.formulaMode) {\n this.formulaMode = true; // 'Deactivate' the normal event listeners behavior\n // Clear the input and add a '=' sign to it\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setElementValue(this.domElement, '=');\n // Put the caret after the `=` character\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setElementSelection(this.domElement, 1);\n }\n }\n\n /**\n * Exit the formula mode\n * Tries to parse and evaluate the math expression, then `set()` the result if it's correct, otherwise reformat with the previous `rawValue`\n * @private\n */\n }, {\n key: \"_exitFormulaMode\",\n value: function _exitFormulaMode() {\n // Parse the formula\n var formula = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(this.domElement);\n formula = formula.replace(/^\\s*=/, ''); // Remove all the leading whitespaces and the equal sign from the formula\n var result;\n try {\n var ast = new _maths_Parser__WEBPACK_IMPORTED_MODULE_3__[\"default\"](formula, this.settings.decimalCharacter);\n result = new _maths_Evaluator__WEBPACK_IMPORTED_MODULE_2__[\"default\"]().evaluate(ast);\n } catch (e) {\n // Error when parsing the math expression\n this._triggerEvent(AutoNumeric.events.invalidFormula, this.domElement, {\n formula: formula,\n aNElement: this\n });\n this.reformat();\n this.formulaMode = false;\n return;\n }\n\n // The math expression is correctly parsed\n this._triggerEvent(AutoNumeric.events.validFormula, this.domElement, {\n formula: formula,\n result: result,\n aNElement: this\n });\n this.set(result); // Note: we can have a valid formula, but an invalid value (i.e. out of the min/max range)\n this.formulaMode = false;\n }\n\n /**\n * Returns `true` if the non-printable key is accepted in formula mode\n *\n * @returns {boolean}\n * @private\n */\n }, {\n key: \"_acceptNonPrintableKeysInFormulaMode\",\n value: function _acceptNonPrintableKeysInFormulaMode() {\n return this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Backspace || this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Delete || this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.LeftArrow || this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.RightArrow || this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Home || this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.End;\n }\n\n /**\n * Handler for 'keydown' events.\n * The user just started pushing any key, hence one event is sent.\n *\n * Note :\n * By default a 'normal' input output those events in the right order when inputting a character key (i.e. 'a') :\n * - keydown\n * - keypress\n * - input\n * - keyup\n *\n * ...when inputting a modifier key (i.e. 'ctrl') :\n * - keydown\n * - keyup\n *\n * If 'delete' or 'backspace' are entered 'normally', the following events are sent :\n * - keydown\n * - input\n * - keyup\n *\n * If 'delete' or 'backspace' are entered continuously (with the key still pressed), the following events are sent :\n * - keydown\n * - input\n * [- keydown\n * - input] x times\n * - keyup\n *\n * If 'enter' is entered and the value has not changed, the following events are sent :\n * - keydown\n * - keypress\n * - keyup\n *\n * If 'enter' is entered and the value has been changed, the following events are sent :\n * - keydown\n * - keypress\n * - change\n * - keyup\n *\n * When a paste is done, the following events are sent :\n * - input (if paste is done with the mouse)\n *\n * - keydown (if paste is done with ctrl+v)\n * - keydown\n * - input\n * - keyup\n * - keyup\n *\n * @param {KeyboardEvent} e\n */\n }, {\n key: \"_onKeydown\",\n value: function _onKeydown(e) {\n this.formatted = false; // Keep track if the element has been formatted already. If that's the case, prevent further format calculations.\n this.isEditing = true; // Keep track if the user is currently editing the element manually\n\n if (!this.formulaMode && !this.isFocused && this.settings.unformatOnHover && e.altKey && this.domElement === _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getHoveredElement()) {\n // Here I prevent calling _unformatAltHovered if the element is already focused, since the global 'keydown' listener will pick it up as well\n this.constructor._unformatAltHovered(this);\n return;\n }\n this._updateEventKeyInfo(e);\n this.keydownEventCounter += 1; // Every time the keydown event is caught, increment the counter to keep track if the key is continuously pressed\n if (this.keydownEventCounter === 1) {\n this.initialValueOnFirstKeydown = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(e.target); // This is needed in `onKeyup()` to check if the value as changed during the key press\n this.initialRawValueOnFirstKeydown = this.rawValue;\n }\n if (this.formulaMode) {\n if (this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Esc) {\n // Cancel the formula\n this.formulaMode = false;\n this.reformat();\n return;\n }\n if (this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Enter) {\n // Calculate the formula\n this._exitFormulaMode();\n return;\n }\n\n // Accept the backspace, delete, arrow, home and end keys\n if (this._acceptNonPrintableKeysInFormulaMode()) {\n return;\n }\n\n //TODO Manage the undo/redo events *while* editing a math expression\n //TODO Manage the cut/paste events *while* editing a math expression\n } else {\n if (this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Equal) {\n this._enterFormulaMode();\n return;\n }\n if (this.settings.modifyValueOnUpDownArrow && (this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.UpArrow || this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.DownArrow)) {\n this.upDownArrowAction(e);\n return;\n }\n }\n if (this.domElement.readOnly || this.settings.readOnly || this.domElement.disabled) {\n this.processed = true;\n return;\n }\n if (this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Esc) {\n //XXX The default 'Escape' key behavior differs between Firefox and Chrome, Firefox already having a built-in 'cancellable-like' feature. This is why we call `e.preventDefault()` here instead of just when `isCancellable` is set to `true`. This allow us to keep the same behavior across browsers.\n e.preventDefault();\n if (this.settings.isCancellable) {\n // If the user wants to cancel his modifications:\n // We set back the saved value\n if (this.rawValue !== this.savedCancellableValue) {\n // Do not set the value again if it has not changed\n this.set(this.savedCancellableValue);\n // And we need to send an 'input' event when setting back the initial value in order to make other scripts aware of the value change...\n this._triggerEvent(AutoNumeric.events[\"native\"].input, e.target);\n }\n }\n\n // ...and lastly we update the caret selection, even if the option `isCancellable` is false\n this.select();\n //TODO Add an option to select either the integer or decimal part with `Esc`\n }\n\n // The \"enter\" key throws a `change` event if the raw value has changed since the `focus` event\n var targetValue = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(e.target);\n if (this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Enter && this.rawValue !== this.rawValueOnFocus) {\n this._triggerEvent(AutoNumeric.events[\"native\"].change, e.target);\n this.valueOnFocus = targetValue;\n this.rawValueOnFocus = this.rawValue;\n if (this.settings.isCancellable) {\n // If the user activated the 'cancellable' feature, we save the validated value when 'Enter' is hit\n this._saveCancellableValue();\n }\n }\n this._updateInternalProperties(e);\n if (this._processNonPrintableKeysAndShortcuts(e)) {\n this.processed = true;\n return;\n }\n\n // Check if the key is a delete/backspace key\n if (this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Backspace || this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Delete) {\n var isDeletionAllowed = this._processCharacterDeletion(e); // Because backspace and delete only triggers keydown and keyup events, not keypress\n this.processed = true;\n if (!isDeletionAllowed) {\n // Prevent the deletion if `overrideMinMaxLimits` option is `doNotOverride` and the result goes out of the allowed range\n e.preventDefault();\n return;\n }\n this._formatValue(e);\n\n // If and only if the resulting value has changed after that backspace/delete, then we have to send an 'input' event like browsers normally do.\n targetValue = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(e.target); // Update the value since it could have been changed during the deletion\n if (targetValue !== this.lastVal && this.throwInput) {\n // Throw an input event when a character deletion is detected\n this._triggerEvent(AutoNumeric.events[\"native\"].input, e.target);\n e.preventDefault(); // ...and immediately prevent the browser to delete a second character\n }\n\n this.lastVal = targetValue;\n this.throwInput = true;\n }\n }\n\n /**\n * Handler for 'keypress' events.\n * The user is still pressing the key, which will output a character (i.e. '2') continuously until he releases the key.\n * Note: 'keypress' events are not sent for delete keys like Backspace/Delete.\n *\n * @param {KeyboardEvent} e\n */\n }, {\n key: \"_onKeypress\",\n value: function _onKeypress(e) {\n if (this.formulaMode) {\n // Accept the backspace, delete, arrow, home and end keys\n if (this._acceptNonPrintableKeysInFormulaMode()) {\n return;\n }\n\n //TODO Prevent keys to be entered on the left-hand side of the '=' sign?...Or just let the user see what they are wrongly doing?\n if (this.settings.formulaChars.test(this.eventKey)) {\n // Accept the custom decimal character too\n return; // Accept the key in the formula (and do not accept the '=' character here again)\n } else {\n e.preventDefault(); // Reject the key\n }\n\n return;\n }\n if (this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Insert) {\n return;\n }\n var processed = this.processed;\n this._updateInternalProperties(e);\n if (this._processNonPrintableKeysAndShortcuts(e)) {\n return;\n }\n if (processed) {\n e.preventDefault();\n return;\n }\n var isCharacterInsertionAllowed = this._processCharacterInsertion();\n if (isCharacterInsertionAllowed) {\n this._formatValue(e);\n var targetValue = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(e.target);\n if (targetValue !== this.lastVal && this.throwInput) {\n // Throws input event on adding a character\n this._triggerEvent(AutoNumeric.events[\"native\"].input, e.target);\n e.preventDefault(); // ...and immediately prevent the browser to add a second character\n } else {\n if ((this.eventKey === this.settings.decimalCharacter || this.eventKey === this.settings.decimalCharacterAlternative) && _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementSelection(e.target).start === _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementSelection(e.target).end && _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementSelection(e.target).start === targetValue.indexOf(this.settings.decimalCharacter)) {\n var position = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementSelection(e.target).start + 1;\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setElementSelection(e.target, position);\n }\n e.preventDefault();\n }\n this.lastVal = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(e.target);\n this.throwInput = true;\n this._setValidOrInvalidState(this.rawValue); // Updates the valid state as soon as the number is entered (in the case where the user keeps pressing the number key)\n\n return;\n }\n e.preventDefault();\n }\n\n /**\n * Handler for 'keyup' events.\n * The user just released any key, hence one event is sent.\n *\n * @param {KeyboardEvent} e\n */\n }, {\n key: \"_onKeyup\",\n value: function _onKeyup(e) {\n this.isEditing = false;\n this.keydownEventCounter = 0; // Reset the keydown events counter\n\n if (this.formulaMode) {\n return;\n }\n if (this.settings.isCancellable && this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Esc) {\n // If the user wants to cancel its modifications, we drop the 'keyup' event for the Esc key\n e.preventDefault();\n return;\n }\n\n // Manage the undo/redo events\n this._updateEventKeyInfo(e); // Fixes #761, where the Ctrl key is not correctly detected during undo/redo since this.eventKey was not updated from 'Z' to 'Control'\n if (this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Z || this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.z) {\n if (e.ctrlKey && e.shiftKey) {\n // Redo\n e.preventDefault();\n this._historyTableRedo();\n this._triggerEvent(AutoNumeric.events[\"native\"].input, e.target); //TODO instead of adding the event here, generate it from the `_historyTableRedo()` function?\n this.onGoingRedo = true;\n return;\n } else if (e.ctrlKey && !e.shiftKey) {\n if (this.onGoingRedo) {\n // Prevent an 'undo' to be launched when releasing the shift key before the ctrl key after a 'redo' shortcut\n this.onGoingRedo = false;\n } else {\n e.preventDefault();\n // Undo\n this._historyTableUndo();\n this._triggerEvent(AutoNumeric.events[\"native\"].input, e.target); //TODO instead of adding the event here, generate it from the `_historyTableRedo()` function?\n\n return;\n }\n }\n } else if ((this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Y || this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.y) && e.ctrlKey) {\n // Redo\n e.preventDefault();\n this._historyTableRedo();\n this._triggerEvent(AutoNumeric.events[\"native\"].input, e.target); //TODO instead of adding the event here, generate it from the `_historyTableRedo()` function?\n this.onGoingRedo = true;\n return;\n }\n if (this.onGoingRedo && (e.ctrlKey || e.shiftKey)) {\n // Special case where if the user has entered `Control+Shift+z`, then release `z`, keeping `Control` or `Shift` pressed, then `this.onGoingRedo` is never changed back to `false` when the user release `Control` or `Shift`\n this.onGoingRedo = false;\n }\n\n // Manage the Cut event\n if ((e.ctrlKey || e.metaKey) && (this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.X || this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.x)) {\n // Save the caret position at the start of the selection\n var caretPosition = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementSelection(this.domElement).start;\n // Convert the remaining 'formatted' numbers in a Js number\n var cutNumber = this.constructor._toNumericValue(_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(e.target), this.settings);\n // Try to set that value with `set()`\n this.set(cutNumber);\n // Set back the initial caret position\n this._setCaretPosition(caretPosition);\n }\n\n // Manage the reformat when hovered with the Alt key pressed\n if (this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Alt && this.settings.unformatOnHover && this.hoveredWithAlt) {\n this.constructor._reformatAltHovered(this);\n return;\n }\n\n // Manage the Backspace and Delete keys when used in combination with the control key (fix #656)\n if ((e.ctrlKey || e.metaKey) && (this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Backspace || this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Delete)) {\n var _targetValue = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(e.target);\n this._setRawValue(this._formatOrUnformatOther(false, _targetValue));\n return;\n }\n this._updateInternalProperties(e);\n var skip = this._processNonPrintableKeysAndShortcuts(e);\n delete this.valuePartsBeforePaste;\n var targetValue = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(e.target);\n if (skip || targetValue === '' && this.initialValueOnFirstKeydown === '') {\n // If the user enters skippable keys, or keeps deleting/backspacing into the empty input, no 'formatted' event are sent (cf. issue #621)\n return;\n }\n\n // Added to properly place the caret when only the currency sign is present\n if (targetValue === this.settings.currencySymbol) {\n if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setElementSelection(e.target, 0);\n } else {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setElementSelection(e.target, this.settings.currencySymbol.length);\n }\n } else if (this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Tab) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setElementSelection(e.target, 0, targetValue.length);\n }\n if (targetValue === this.settings.suffixText || this.rawValue === '' && this.settings.currencySymbol !== '' && this.settings.suffixText !== '') {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setElementSelection(e.target, 0);\n }\n\n // Saves the extended decimal to preserve the data when navigating away from the page\n if (this.settings.decimalPlacesShownOnFocus !== null) {\n this._saveValueToPersistentStorage();\n }\n if (!this.formatted) {\n //TODO Is this line needed? Considering that onKeydown and onKeypress both finish by setting it to false...\n this._formatValue(e);\n }\n this._setValidOrInvalidState(this.rawValue);\n\n // Force the `rawValue` update on Android Chrome\n this._saveRawValueForAndroid();\n\n // If the input value has changed during the key press event chain, an event is sent to alert that a formatting has been done (cf. Issue #187)\n if (targetValue !== this.initialValueOnFirstKeydown) {\n // Checking the value that were saved after the very first keydown event ensure that the 'formatted' event will be sent even if the user continuously press the Delete/Backspace key\n this._triggerEvent(AutoNumeric.events.formatted, e.target, {\n oldValue: this.initialValueOnFirstKeydown,\n newValue: targetValue,\n oldRawValue: this.initialRawValueOnFirstKeydown,\n newRawValue: this.rawValue,\n isPristine: this.isPristine(false),\n error: null,\n aNElement: this\n });\n }\n\n // Update the selection of the current element of the history table\n if (this.historyTable.length > 1) {\n var selection = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementSelection(this.domElement);\n this.selectionStart = selection.start;\n this.selectionEnd = selection.end;\n this.historyTable[this.historyTableIndex].start = this.selectionStart;\n this.historyTable[this.historyTableIndex].end = this.selectionEnd;\n }\n }\n\n /**\n * On Android Chrome, the `rawValue` is not updated when the user changes the input value.\n * This function updates the `rawValue` accordingly.\n * @private\n */\n }, {\n key: \"_saveRawValueForAndroid\",\n value: function _saveRawValueForAndroid() {\n if (this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.AndroidDefault) {\n var normalizedValue = this.constructor._stripAllNonNumberCharactersExceptCustomDecimalChar(this.getFormatted(), this.settings, true, this.isFocused);\n normalizedValue = this.constructor._convertToNumericString(normalizedValue, this.settings);\n this._setRawValue(normalizedValue);\n }\n }\n\n /**\n * Handler for 'focusout' events\n * On focusout, multiple things happens :\n * - The element value is formatted back if the `Alt` key was pressed,\n * - The element value is formatted back if `showOnlyNumbersOnFocus` was set to only show numbers,\n * - The element value is multiplied by `rawValueDivisor` on `blur`\n *\n * Note: On focusout, the `rawValue` is never changed. Only the formatted value can be modified.\n *\n * @param {Event} e\n */\n }, {\n key: \"_onFocusOutAndMouseLeave\",\n value: function _onFocusOutAndMouseLeave(e) {\n //TODO Create separate handlers for blur and mouseleave\n this.isEditing = false; // Just in case no `keyUp` event have been sent (if the user lost the focus on the window while typing)\n\n if (e.type === 'mouseleave' && this.formulaMode) {\n return;\n }\n\n //FIXME Do not call `set()` if the current raw value is the same as the one we are trying to set (currently, on focus out, `set()` is always called, even if the value has not changed\n if (this.settings.unformatOnHover && e.type === 'mouseleave' && this.hoveredWithAlt) {\n this.constructor._reformatAltHovered(this);\n return;\n }\n if (e.type === 'mouseleave' && !this.isFocused || e.type === 'blur') {\n if (e.type === 'blur' && this.formulaMode) {\n this._exitFormulaMode();\n }\n this._saveValueToPersistentStorage();\n if (this.settings.showOnlyNumbersOnFocus === AutoNumeric.options.showOnlyNumbersOnFocus.onlyNumbers) {\n this.settings.digitGroupSeparator = this.originalDigitGroupSeparator;\n this.settings.currencySymbol = this.originalCurrencySymbol;\n this.settings.suffixText = this.originalSuffixText;\n }\n\n // Use the rawValue, multiplied by `rawValueDivisor` if defined\n var rawValueToFormat = this._getRawValueToFormat(this.rawValue);\n var isRawValueNull = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(rawValueToFormat);\n var _this$constructor$_ch3 = this.constructor._checkIfInRangeWithOverrideOption(rawValueToFormat, this.settings),\n _this$constructor$_ch4 = _slicedToArray(_this$constructor$_ch3, 2),\n minTest = _this$constructor$_ch4[0],\n maxTest = _this$constructor$_ch4[1];\n\n // Directly set the formatted value if the `rawValue` is found in `valuesToStrings`\n var elementValueIsAlreadySet = false;\n if (rawValueToFormat !== '' && !isRawValueNull) {\n this._triggerRangeEvents(minTest, maxTest);\n if (this.settings.valuesToStrings && this._checkValuesToStrings(rawValueToFormat)) {\n // Set the formatted value with the corresponding string\n this._setElementValue(this.settings.valuesToStrings[rawValueToFormat]);\n elementValueIsAlreadySet = true;\n }\n }\n\n // Only generate the formatted value if no `valuesToStrings` have been found\n if (!elementValueIsAlreadySet) {\n var value;\n if (isRawValueNull || rawValueToFormat === '') {\n value = rawValueToFormat;\n } else {\n value = String(rawValueToFormat);\n }\n if (rawValueToFormat !== '' && !isRawValueNull) {\n if (minTest && maxTest && !this.constructor._isElementValueEmptyOrOnlyTheNegativeSign(rawValueToFormat, this.settings)) {\n value = this._modifyNegativeSignAndDecimalCharacterForRawValue(value);\n if (this.settings.divisorWhenUnfocused && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(value)) {\n value = value / this.settings.divisorWhenUnfocused;\n value = value.toString();\n }\n value = this.constructor._roundFormattedValueShownOnBlur(value, this.settings);\n value = this.constructor._modifyNegativeSignAndDecimalCharacterForFormattedValue(value, this.settings);\n } else {\n this._triggerRangeEvents(minTest, maxTest);\n }\n } else if (rawValueToFormat === '') {\n switch (this.settings.emptyInputBehavior) {\n case AutoNumeric.options.emptyInputBehavior.zero:\n this._setRawValue('0');\n value = this.constructor._roundValue('0', this.settings, 0);\n break;\n case AutoNumeric.options.emptyInputBehavior.min:\n this._setRawValue(this.settings.minimumValue);\n value = this.constructor._roundFormattedValueShownOnFocusOrBlur(this.settings.minimumValue, this.settings, this.isFocused);\n break;\n case AutoNumeric.options.emptyInputBehavior.max:\n this._setRawValue(this.settings.maximumValue);\n value = this.constructor._roundFormattedValueShownOnFocusOrBlur(this.settings.maximumValue, this.settings, this.isFocused);\n break;\n default:\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNumber(this.settings.emptyInputBehavior)) {\n this._setRawValue(this.settings.emptyInputBehavior);\n value = this.constructor._roundFormattedValueShownOnFocusOrBlur(this.settings.emptyInputBehavior, this.settings, this.isFocused);\n }\n }\n }\n var groupedValue = this.constructor._orderValueCurrencySymbolAndSuffixText(value, this.settings, false);\n if (!(this.constructor._isElementValueEmptyOrOnlyTheNegativeSign(value, this.settings) || isRawValueNull && this.settings.emptyInputBehavior === AutoNumeric.options.emptyInputBehavior[\"null\"])) {\n groupedValue = this.constructor._addGroupSeparators(value, this.settings, false, rawValueToFormat);\n }\n\n // Testing for `allowDecimalPadding.never` or `allowDecimalPadding.floats` is needed to make sure we do not keep a trailing decimalCharacter (like '500.') in the element, since the raw value would still be a correctly formatted integer ('500')\n if (groupedValue !== rawValueToFormat || rawValueToFormat === '' ||\n // This make sure we get rid on any currency symbol or suffix that might have been added on focus\n this.settings.allowDecimalPadding === AutoNumeric.options.allowDecimalPadding.never || this.settings.allowDecimalPadding === AutoNumeric.options.allowDecimalPadding.floats) {\n if (this.settings.symbolWhenUnfocused && rawValueToFormat !== '' && rawValueToFormat !== null) {\n groupedValue = \"\".concat(groupedValue).concat(this.settings.symbolWhenUnfocused);\n }\n this._setElementValue(groupedValue);\n }\n }\n this._setValidOrInvalidState(this.rawValue);\n if (e.type === 'blur') {\n //TODO Create separate handlers for blur and mouseleave, really.\n this._onBlur(e);\n }\n }\n }\n\n /**\n * Handler for 'paste' event\n *\n * @param {Event|ClipboardEvent} e\n */\n }, {\n key: \"_onPaste\",\n value: function _onPaste(e) {\n //FIXME When pasting '000' on a thousand group selection, the whole selection gets deleted, and only one '0' is pasted (cf. issue #302)\n // The event is prevented by default, since otherwise the user would be able to paste invalid characters into the input\n e.preventDefault();\n if (this.settings.readOnly || this.domElement.readOnly || this.domElement.disabled) {\n // Do not allow pasting in a readonly element (fix issue #505)\n return;\n }\n var rawPastedText;\n if (e.clipboardData && e.clipboardData.getData) {\n rawPastedText = e.clipboardData.getData('text/plain');\n } else {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError('Unable to retrieve the pasted value. Please use a modern browser (i.e. Firefox or Chromium).');\n }\n\n // Fix for firefox paste handling on `contenteditable` elements where `e.target` is the text node, not the element\n var eventTarget;\n if (!e.target.tagName) {\n eventTarget = e.explicitOriginalTarget;\n } else {\n eventTarget = e.target;\n }\n\n // 0. Special case if the user has selected all the input text before pasting\n var initialFormattedValue = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(eventTarget);\n var selectionStart = eventTarget.selectionStart || 0;\n var selectionEnd = eventTarget.selectionEnd || 0;\n var selectionSize = selectionEnd - selectionStart;\n if (selectionSize === initialFormattedValue.length) {\n // If all the element text is selected\n //TODO Refactor this with the tests below\n // Since the whole element content will be replaced, no need to complicate things and directly test for the validity of the pasted content, then set the `rawValue` and caret position (fix issue #482)\n // 1. Strip all thousand separators, brackets and currency sign, and convert the decimal character to a dot\n var _untranslatedPastedText = this._preparePastedText(rawPastedText);\n var pastedRawValue = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].arabicToLatinNumbers(_untranslatedPastedText, false, false, false); // Allow pasting arabic numbers\n\n // 2. Check that the paste is a valid number once it has been normalized to a raw value\n if (pastedRawValue === '.' || pastedRawValue === '' || pastedRawValue !== '.' && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNumber(pastedRawValue)) {\n this.formatted = true; // This prevents the `keyup` event on the `v` key during a paste to try to format an empty value.\n // If the user tries to paste a single decimal character (that has been translated to '.' already) or the empty value, ignore the paste\n if (this.settings.onInvalidPaste === AutoNumeric.options.onInvalidPaste.error) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The pasted value '\".concat(rawPastedText, \"' is not a valid paste content.\"));\n }\n return;\n }\n\n // 3. Then try to set it as the new value. The `set()` method will run the additional tests (i.e. limits) as needed.\n this.set(pastedRawValue);\n this.formatted = true;\n\n // 4. On a 'normal' non-autoNumeric input, an `input` event is sent when a paste is done. We mimic that.\n this._triggerEvent(AutoNumeric.events[\"native\"].input, eventTarget);\n\n // 5. Return since the job is done\n return;\n }\n\n // 1. Check if the paste has a negative sign (only if it's the first character), and store that information for later use\n var isPasteNegative = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNegativeStrict(rawPastedText, this.settings.negativeSignCharacter);\n if (isPasteNegative) {\n // 1a. Remove the negative sign from the pasted text\n rawPastedText = rawPastedText.slice(1, rawPastedText.length); //TODO This can lead to an empty rawPastedText if only the negative sign character is pasted. This then complains about not being a valid paste content. Define which behaviour we want when this happens, then implement the solution.\n }\n\n // 2. Strip all thousand separators, brackets and currency sign, and convert the decimal character to a dot\n var untranslatedPastedText = this._preparePastedText(rawPastedText);\n var pastedText;\n if (untranslatedPastedText === '.') {\n // Special case : If the user tries to paste a single decimal character (that has been translated to '.' already)\n pastedText = '.';\n } else {\n // Normal case\n // Allow pasting arabic numbers\n pastedText = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].arabicToLatinNumbers(untranslatedPastedText, false, false, false);\n }\n\n // 3. Test if the paste is valid (only has numbers and eventually a decimal character). If it's not valid, stop here.\n if (pastedText !== '.' && (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNumber(pastedText) || pastedText === '')) {\n this.formatted = true; // This prevents the `keyup` event on the `v` key during a paste to try to format an empty value (fix issue #484)\n if (this.settings.onInvalidPaste === AutoNumeric.options.onInvalidPaste.error) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The pasted value '\".concat(rawPastedText, \"' is not a valid paste content.\"));\n }\n return;\n }\n\n // 4. Calculate the paste result\n var caretPositionOnInitialTextAfterPasting;\n var isInitialValueNegative = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNegativeStrict(this.getNumericString(), this.settings.negativeSignCharacter);\n var isPasteNegativeAndInitialValueIsPositive;\n var result;\n\n // If the pasted content is negative, then the result will be negative too\n if (isPasteNegative && !isInitialValueNegative) {\n isInitialValueNegative = true;\n isPasteNegativeAndInitialValueIsPositive = true;\n } else {\n isPasteNegativeAndInitialValueIsPositive = false;\n }\n\n // 1. Generate the unformatted result\n var leftFormattedPart = initialFormattedValue.slice(0, selectionStart);\n var rightFormattedPart = initialFormattedValue.slice(selectionEnd, initialFormattedValue.length);\n if (selectionStart !== selectionEnd) {\n // a. If there is a selection, remove the selected part, and return the left and right part\n result = this._preparePastedText(leftFormattedPart + rightFormattedPart);\n } else {\n // b. Else if this is only one caret (and therefore no selection), then return the left and right part\n result = this._preparePastedText(initialFormattedValue);\n }\n\n // Add back the negative sign if needed\n if (isInitialValueNegative) {\n result = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setRawNegativeSign(result);\n }\n\n // Build the unformatted result string\n caretPositionOnInitialTextAfterPasting = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].convertCharacterCountToIndexPosition(_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].countNumberCharactersOnTheCaretLeftSide(initialFormattedValue, selectionStart, this.settings.decimalCharacter));\n if (isPasteNegativeAndInitialValueIsPositive) {\n // If the initial paste is negative and the initial value is not, then I must offset the caret position by one place to the right to take the additional hyphen into account\n caretPositionOnInitialTextAfterPasting++;\n //TODO Quid if the negative sign is not on the left (negativePositiveSignPlacement and currencySymbolPlacement)?\n //TODO Quid if the positive sign is shown?\n }\n\n var leftPart = result.slice(0, caretPositionOnInitialTextAfterPasting);\n var rightPart = result.slice(caretPositionOnInitialTextAfterPasting, result.length);\n var leftPartContainedADot = false;\n if (pastedText === '.') {\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].contains(leftPart, '.')) {\n // If I remove a dot here, then I need to update the caret position (decrement it by 1) when positioning it\n // To do so, we keep that info in order to modify the caret position later\n leftPartContainedADot = true;\n leftPart = leftPart.replace('.', '');\n }\n rightPart = rightPart.replace('.', '');\n }\n\n // Manage the case where a negative number is pasted onto another negative number that is entirely selected (cf. issue #593)\n var negativePasteOnNegativeNumber = false;\n if (leftPart === '' && rightPart === '-') {\n leftPart = '-';\n rightPart = '';\n // When pasting a negative number on a negative number, we need to offset the caret position one place to the right to take into account the negative sign\n negativePasteOnNegativeNumber = true;\n }\n\n // -- Here, we are good to go to continue on the same basis for each value of the `onInvalidPaste` option\n\n switch (this.settings.onInvalidPaste) {\n /* 4a. Truncate paste behavior:\n * Insert as many numbers as possible on the right hand side of the caret from the pasted text content, until the input reach its range limit.\n * If there is more characters in the clipboard once a limit is reached, drop the extraneous characters.\n * Otherwise paste all the numbers from the clipboard.\n * While doing so, we check if the result is within the minimum and maximum values allowed, and stop as soon as we encounter one of those.\n *\n * 4b. Replace paste behavior:\n * Idem than the 'truncate' paste behavior, except that when a range limit is hit, we try to replace the subsequent initial numbers with the pasted ones, until we hit the range limit a second (and last) time, or we run out of numbers to paste\n */\n /* eslint no-case-declarations: 0 */\n case AutoNumeric.options.onInvalidPaste.truncate:\n case AutoNumeric.options.onInvalidPaste.replace:\n // c. Add numbers one by one at the caret position, while testing if the result is valid and within the range of the minimum and maximum value\n // Continue until you either run out of numbers to paste, or that you get out of the range limits\n var minParse = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].parseStr(this.settings.minimumValue);\n var maxParse = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].parseStr(this.settings.maximumValue);\n var lastGoodKnownResult = result; // This is set as the default, in case we do not add even one number\n var pastedTextIndex = 0;\n var modifiedLeftPart = leftPart;\n while (pastedTextIndex < pastedText.length) {\n // Modify the result with another pasted character\n modifiedLeftPart += pastedText[pastedTextIndex];\n result = modifiedLeftPart + rightPart;\n\n // Check the range limits\n if (!this.constructor._checkIfInRange(result, minParse, maxParse)) {\n // The result is out of the range limits, stop the loop here\n break;\n }\n\n // Save the last good known result\n lastGoodKnownResult = result;\n\n // Update the local variables for the next loop\n pastedTextIndex++;\n }\n\n // Update the last caret position where to insert a new number\n caretPositionOnInitialTextAfterPasting += pastedTextIndex;\n if (negativePasteOnNegativeNumber) caretPositionOnInitialTextAfterPasting++;\n\n //XXX Here we have the result for the `truncate` option\n if (this.settings.onInvalidPaste === AutoNumeric.options.onInvalidPaste.truncate) {\n //TODO If the user as defined a truncate callback and there are still some numbers (that will be dropped), then call this callback with the initial paste as well as the remaining numbers\n result = lastGoodKnownResult;\n if (leftPartContainedADot) {\n // If a dot has been removed for the part on the left of the caret, we decrement the caret index position\n caretPositionOnInitialTextAfterPasting--;\n }\n break;\n }\n //XXX ...else we need to continue modifying the result for the 'replace' option\n\n // d. Until there are numbers to paste, replace the initial numbers one by one, and still do the range test.\n // Stop when you have no more numbers to paste, or if you are out of the range limits.\n // If you do get to the range limits, use the previous known good value within those limits.\n // Note: The numbers are replaced one by one, in the integer then decimal part, while ignoring the decimal character\n //TODO What should happen if the user try to paste a decimal number? Should we override the current initial decimal character in favor of this new one? If we do, then we have to recalculate the vMin/vMax from the start in order to take into account this new decimal character position..\n var lastGoodKnownResultIndex = caretPositionOnInitialTextAfterPasting;\n var lastGoodKnownResultSize = lastGoodKnownResult.length;\n while (pastedTextIndex < pastedText.length && lastGoodKnownResultIndex < lastGoodKnownResultSize) {\n if (lastGoodKnownResult[lastGoodKnownResultIndex] === '.') {\n // We skip the decimal character 'replacement'. That way, we do not change the decimal character position regarding the remaining numbers.\n lastGoodKnownResultIndex++;\n continue;\n }\n\n // This replaces one character at a time\n result = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].replaceCharAt(lastGoodKnownResult, lastGoodKnownResultIndex, pastedText[pastedTextIndex]);\n\n // Check the range limits\n if (!this.constructor._checkIfInRange(result, minParse, maxParse)) {\n // The result is out of the range limits, stop the loop here\n break;\n }\n\n // Save the last good known result\n lastGoodKnownResult = result;\n\n // Update the local variables for the next loop\n pastedTextIndex++;\n lastGoodKnownResultIndex++;\n }\n\n // Update the last caret position where to insert a new number\n caretPositionOnInitialTextAfterPasting = lastGoodKnownResultIndex;\n if (leftPartContainedADot) {\n // If a dot has been removed for the part on the left of the caret, we decrement the caret index position\n caretPositionOnInitialTextAfterPasting--;\n }\n result = lastGoodKnownResult;\n break;\n /* 4c. Normal paste behavior:\n * Insert the pasted number inside the current unformatted text, at the correct caret position or selection\n */\n case AutoNumeric.options.onInvalidPaste.error:\n case AutoNumeric.options.onInvalidPaste.ignore:\n case AutoNumeric.options.onInvalidPaste.clamp:\n default:\n // Generate the unformatted result\n result = \"\".concat(leftPart).concat(pastedText).concat(rightPart);\n\n // 2. Calculate the caret position in the unformatted value, for later use\n if (selectionStart === selectionEnd) {\n // There is no selection, then the caret position is set after the pasted text\n var indexWherePastedTextHasBeenInserted = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].convertCharacterCountToIndexPosition(_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].countNumberCharactersOnTheCaretLeftSide(initialFormattedValue, selectionStart, this.settings.decimalCharacter));\n caretPositionOnInitialTextAfterPasting = indexWherePastedTextHasBeenInserted + pastedText.length; // I must not count the characters that have been removed from the pasted text (i.e. '.')\n } else if (rightPart === '') {\n // If the user selected from the caret position to the end of the input (on the far right)\n caretPositionOnInitialTextAfterPasting = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].convertCharacterCountToIndexPosition(_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].countNumberCharactersOnTheCaretLeftSide(initialFormattedValue, selectionStart, this.settings.decimalCharacter)) + pastedText.length;\n if (negativePasteOnNegativeNumber) caretPositionOnInitialTextAfterPasting++;\n } else {\n // Usual case\n var indexSelectionEndInRawValue = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].convertCharacterCountToIndexPosition(_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].countNumberCharactersOnTheCaretLeftSide(initialFormattedValue, selectionEnd, this.settings.decimalCharacter));\n\n // Here I must not count the characters that have been removed from the pasted text (i.e. '.'), or the thousand separators in the initial selected text\n var selectedText = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(eventTarget).slice(selectionStart, selectionEnd);\n caretPositionOnInitialTextAfterPasting = indexSelectionEndInRawValue - selectionSize + _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].countCharInText(this.settings.digitGroupSeparator, selectedText) + pastedText.length;\n }\n\n // Modify the caret position for special cases, only if the whole input has not been selected\n if (isPasteNegativeAndInitialValueIsPositive) {\n // If the pasted value has a negative sign ('-'), but the initial value does not, offset the index by one\n caretPositionOnInitialTextAfterPasting++;\n }\n if (leftPartContainedADot) {\n // If a dot has been removed for the part on the left of the caret, we decrement the caret index position\n caretPositionOnInitialTextAfterPasting--;\n }\n }\n\n // 5. Check if the result is a valid number, if not, drop the paste and do nothing.\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNumber(result) || result === '') {\n if (this.settings.onInvalidPaste === AutoNumeric.options.onInvalidPaste.error) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The pasted value '\".concat(rawPastedText, \"' would result into an invalid content '\").concat(result, \"'.\")); //TODO Should we send a warning instead of throwing an error?\n //TODO This is not DRY ; refactor with above\n }\n\n return;\n }\n\n // 6. If it's a valid number, check if it falls inside the minimum and maximum value. If this fails, modify the value following this procedure :\n /*\n * If 'error' (this is the default) :\n * - Normal paste behavior.\n * - Try to set the new value, if it fails, then throw an error in the console.\n * - Do not change the input value, do not change the current selection.\n * If 'ignore' :\n * - Normal paste behavior.\n * - Try to set the new value, if it fails, do nothing more.\n * - Do not change the input value, do not change the current selection.\n * If 'clamp' :\n * - Normal paste behavior.\n * - Try to set the new value, if it fails, set the value to the minimum or maximum limit, whichever is closest to the\n * paste result.\n * - Change the caret position to be positioned on the left hand side of the decimal character.\n * If 'truncate' :\n * - Truncate paste behavior.\n * - Try to set the new value, until it fails (if the result is out of the min and max value limits).\n * - Drop the remaining non-pasted numbers, and keep the last known non-failing result.\n * - Change the caret position to be positioned after the last pasted character.\n * If 'replace' :\n * - Replace paste behavior.\n * - Try to set the new value, until it fails (if the result is out of the min and max value limits).\n * - Then try to replace as many numbers as possible with the pasted ones. Once it fails, keep the last known non-failing result.\n * - Change the caret position to be positioned after the last pasted character.\n */\n var valueHasBeenSet = false;\n var valueHasBeenClamped = false;\n try {\n this.set(result);\n valueHasBeenSet = true;\n } catch (error) {\n var clampedValue;\n switch (this.settings.onInvalidPaste) {\n case AutoNumeric.options.onInvalidPaste.clamp:\n clampedValue = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].clampToRangeLimits(result, this.settings);\n try {\n this.set(clampedValue);\n } catch (error) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"Fatal error: Unable to set the clamped value '\".concat(clampedValue, \"'.\"));\n }\n valueHasBeenClamped = true;\n valueHasBeenSet = true;\n result = clampedValue; // This is used only for setting the caret position later\n break;\n case AutoNumeric.options.onInvalidPaste.error:\n case AutoNumeric.options.onInvalidPaste.truncate:\n case AutoNumeric.options.onInvalidPaste.replace:\n // Throw an error message\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The pasted value '\".concat(rawPastedText, \"' results in a value '\").concat(result, \"' that is outside of the minimum [\").concat(this.settings.minimumValue, \"] and maximum [\").concat(this.settings.maximumValue, \"] value range.\"));\n // Fall through\n case AutoNumeric.options.onInvalidPaste.ignore:\n // Do nothing\n // Fall through\n default:\n return;\n // ...and nothing else should be changed\n }\n }\n\n // 7. Then lastly, set the caret position at the right logical place\n var targetValue = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(eventTarget);\n var caretPositionInFormattedNumber;\n if (valueHasBeenSet) {\n switch (this.settings.onInvalidPaste) {\n case AutoNumeric.options.onInvalidPaste.clamp:\n if (valueHasBeenClamped) {\n if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setElementSelection(eventTarget, targetValue.length - this.settings.currencySymbol.length); // This puts the caret on the right of the last decimal place\n } else {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setElementSelection(eventTarget, targetValue.length); // ...and this on the far right\n }\n\n break;\n }\n // else if the value has not been clamped, the default behavior is used...\n // falls through\n case AutoNumeric.options.onInvalidPaste.error:\n case AutoNumeric.options.onInvalidPaste.ignore:\n case AutoNumeric.options.onInvalidPaste.truncate:\n case AutoNumeric.options.onInvalidPaste.replace:\n default:\n // Whenever one or multiple characters are pasted, this means we have to manage the potential thousand separators that could be added by the formatting\n caretPositionInFormattedNumber = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].findCaretPositionInFormattedNumber(result, caretPositionOnInitialTextAfterPasting, targetValue, this.settings.decimalCharacter);\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setElementSelection(eventTarget, caretPositionInFormattedNumber);\n }\n }\n\n // 8. We make sure we send an input event only if the result is different from the initial value before the paste\n if (valueHasBeenSet && initialFormattedValue !== targetValue) {\n // On a 'normal' non-autoNumeric input, an `input` event is sent when a paste is done. We mimic that.\n this._triggerEvent(AutoNumeric.events[\"native\"].input, eventTarget);\n }\n }\n\n /**\n * When focusing out of the input, we check if the value has changed, and if it has, then we send a `change` event (since the native one would have been prevented by `e.preventDefault()` called in the other event listeners).\n * We also update the info of the focused state in the `this.isFocused` variable.\n *\n * @param {Event} e\n */\n }, {\n key: \"_onBlur\",\n value: function _onBlur(e) {\n // Keep track if the element is currently focused\n this.isFocused = false;\n // Keep track if the user is currently editing the element\n this.isEditing = false;\n\n // Send a `change` event if the raw value has been changed since the last focus or 'enter' validation\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].trimPaddedZerosFromDecimalPlaces(this.rawValue) !== _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].trimPaddedZerosFromDecimalPlaces(this.rawValueOnFocus)) {\n this._triggerEvent(AutoNumeric.events[\"native\"].change, e.target);\n }\n this.rawValueOnFocus = void 0; // Reset the tracker\n }\n\n /**\n * Helper function that DRY the similar behaviors of the mousewheel and up/down arrow keys, which increment/decrement the element value, either by a fixed value, or using the 'progressive' heuristic\n *\n * @param {WheelEvent|KeyboardEvent} e The `wheel` or keyboard event\n * @param {boolean} isUp Defines if the event should increment the value\n * @param {boolean} isDown Defines if the event should decrement the value\n * @param {string|number} step The step to be applied to the increment/decrement action\n * @private\n */\n }, {\n key: \"_wheelAndUpDownActions\",\n value: function _wheelAndUpDownActions(e, isUp, isDown, step) {\n // 0) First, save the caret position so we can set it back once the value has been changed\n var selectionStart = e.target.selectionStart || 0;\n var selectionEnd = e.target.selectionEnd || 0;\n\n // 1) Get the unformatted value\n var currentUnformattedValue = this.rawValue;\n var result;\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefinedOrNullOrEmpty(currentUnformattedValue)) {\n // If by default the input is empty, start at '0'\n if (this.settings.minimumValue > 0 || this.settings.maximumValue < 0) {\n // or if '0' is not between min and max value, 'minimumValue' if the user does a wheelup, 'maximumValue' if the user does a wheeldown\n if (isUp) {\n result = this.settings.minimumValue;\n } else {\n result = this.settings.maximumValue;\n }\n } else {\n result = 0;\n }\n } else {\n result = currentUnformattedValue;\n }\n result = +result; // Typecast to a number needed for the following addition/subtraction\n\n // 2) Increment/Decrement the value\n // But first, choose the increment/decrement method ; fixed or progressive\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNumber(step)) {\n var stepToUse = +step; // Typecast to a number needed for the following addition/subtraction\n // Fixed method\n // This is the simplest method, where a fixed offset in added/subtracted from the current value\n if (isUp) {\n // Increment\n result += stepToUse;\n } else if (isDown) {\n // Decrement\n result -= stepToUse;\n }\n } else {\n // Progressive method\n // For this method, we calculate an offset that is in relation to the size of the current number (using only the integer part size).\n // The bigger the number, the bigger the offset (usually the number count in the integer part minus 3, except for small numbers where a different behavior is better for the user experience).\n //TODO Known limitation : The progressive method does not play well with numbers between 0 and 1 where to modify the decimal places the rawValue first has to go from '1' to '0'\n if (isUp) {\n // Increment\n result = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].addAndRoundToNearestAuto(result, this.settings.decimalPlacesRawValue);\n } else if (isDown) {\n // Decrement\n result = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].subtractAndRoundToNearestAuto(result, this.settings.decimalPlacesRawValue);\n }\n }\n\n // 3) Set the new value so it gets formatted\n // First clamp the result if needed\n result = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].clampToRangeLimits(result, this.settings);\n if (result !== +currentUnformattedValue) {\n // Only 'set' the value if it has changed. For instance 'set' should not happen if the user hits a limit and continue to try to go past it since we clamp the value.\n this.set(result);\n\n // Since we changed the input value, we send a native `input` event\n this._triggerEvent(AutoNumeric.events[\"native\"].input, e.target);\n }\n\n //XXX Do not prevent if the value is not modified? From a UX point of view, preventing the wheel event when the user use it on top of an autoNumeric element should always be done, even if the value does not change. Perhaps that could affect other scripts relying on this event to be sent though.\n e.preventDefault(); // We prevent the page to scroll while we increment/decrement the value\n\n // 4) Finally, we set back the caret position/selection\n // There is no need to take into account the fact that the number count could be different at the end of the wheel event ; it would be too complex and most of the time unreliable\n this._setSelection(selectionStart, selectionEnd);\n }\n\n /**\n * Handler for up and down arrow keys\n * Increment or decrement the element value according to the `upDownStep` option chosen\n *\n * @param {KeyboardEvent} e\n */\n }, {\n key: \"upDownArrowAction\",\n value: function upDownArrowAction(e) {\n if (this.formulaMode || this.settings.readOnly || this.domElement.readOnly || this.domElement.disabled) {\n return;\n }\n var isUp = false;\n var isDown = false;\n if (this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.UpArrow) {\n isUp = true;\n } else if (this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.DownArrow) {\n isDown = true;\n } else {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError('Something has gone wrong since neither an Up or Down arrow key is detected, but the function was still called!');\n }\n this._wheelAndUpDownActions(e, isUp, isDown, this.settings.upDownStep);\n }\n\n /**\n * Handler for 'wheel' event\n *\n * @param {WheelEvent} e\n */\n }, {\n key: \"_onWheel\",\n value: function _onWheel(e) {\n if (this.formulaMode) {\n return;\n }\n if (this.settings.readOnly || this.domElement.readOnly || this.domElement.disabled) {\n // Do not allow scrolling in a readonly element (fix issue #541)\n return;\n }\n if (this.settings.modifyValueOnWheel) {\n if (this.settings.wheelOn === AutoNumeric.options.wheelOn.focus) {\n if (this.isFocused) {\n if (!e.shiftKey) {\n this.wheelAction(e);\n }\n } else if (e.shiftKey) {\n this.wheelAction(e);\n }\n } else if (this.settings.wheelOn === AutoNumeric.options.wheelOn.hover) {\n if (!e.shiftKey) {\n this.wheelAction(e);\n } else {\n // Note: When not `defaultPrevented`, Shift + mouse wheel is reserved by the browsers for horizontal scrolling.\n // Hence, using the Shift key with the `wheelOn` 'hover' option will only scroll the page if we prevent the default behavior\n e.preventDefault(); // Do not scroll horizontally\n\n // Scroll vertically\n window.scrollBy(0, _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNegativeStrict(String(e.deltaY)) ? -50 : 50); // `e.deltaY` is usually too small compared to how the page is scrolled. That's why we use a fixed offset.\n }\n } else {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError('Unknown `wheelOn` option.');\n }\n }\n }\n\n /**\n * Increment or decrement the element value according to the `wheelStep` option chosen\n *\n * @param {WheelEvent} e The `wheel` event\n */\n }, {\n key: \"wheelAction\",\n value: function wheelAction(e) {\n this.isWheelEvent = true; // Keep the info that we are currently managing a mouse wheel event\n\n var isUp = false;\n var isDown = false;\n var isDeltaYZero = false;\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isWheelUpEvent(e)) {\n isUp = true;\n } else if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isWheelDownEvent(e)) {\n isDown = true;\n } else if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isWheelEventWithZeroDeltaY(e)) {\n // Ignore that event (maybe call e.preventDefault() ?), fixes issue #776\n isDeltaYZero = true;\n } else {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The event is not a 'wheel' event.\");\n }\n if (!isDeltaYZero) {\n this._wheelAndUpDownActions(e, isUp, isDown, this.settings.wheelStep);\n }\n this.isWheelEvent = false; // Set back the mouse wheel indicator to its default\n }\n\n /**\n * Handler for 'drop' event\n *\n * @param {DragEvent} e\n */\n }, {\n key: \"_onDrop\",\n value: function _onDrop(e) {\n if (this.formulaMode) {\n // Dropping while in formula mode shouldn't be possible. This is done 'just in case'\n return;\n }\n\n // Note: by default browsers already prevent the drop on readOnly and disabled elements\n this.isDropEvent = true;\n e.preventDefault();\n var droppedText = e.dataTransfer.getData('text/plain');\n var cleanedValue = this.unformatOther(droppedText);\n var previousValue = this.rawValue;\n this.set(cleanedValue);\n this.isDropEvent = false;\n\n // Test if a change event must be sent (if the dropped value is different from before)\n var newValue = this.constructor._toNumericValue(cleanedValue, this.settings);\n if (!isNaN(Number(newValue))) {\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].trimPaddedZerosFromDecimalPlaces(previousValue) !== _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].trimPaddedZerosFromDecimalPlaces(newValue)) {\n this._triggerEvent(AutoNumeric.events[\"native\"].change, this.domElement);\n }\n }\n }\n\n /**\n * Handler for 'submit' events happening on the parent element.\n * If `unformatOnSubmit` is set to `true`, the element value is first unformatted before the form is submitted.\n *\n * @returns {boolean}\n */\n }, {\n key: \"_onFormSubmit\",\n value: function _onFormSubmit() {\n var _this11 = this;\n // Search for all the AutoNumeric children of the form element and call the `_unformatOnSubmit()` function\n var inputElements = this._getFormAutoNumericChildren(this.parentForm);\n var aNElements = inputElements.map(function (aNElement) {\n return _this11.constructor.getAutoNumericElement(aNElement);\n });\n aNElements.forEach(function (aNElement) {\n return aNElement._unformatOnSubmit();\n });\n return true;\n }\n\n /**\n * Handler for 'reset' events caught on the parent element.\n * When such event is detected, then every child AutoNumeric elements must format their default value that the browser is forcing upon them.\n *\n * @private\n */\n }, {\n key: \"_onFormReset\",\n value: function _onFormReset() {\n var _this12 = this;\n var inputElements = this._getFormAutoNumericChildren(this.parentForm);\n var aNElements = inputElements.map(function (aNElement) {\n return _this12.constructor.getAutoNumericElement(aNElement);\n });\n // Tell all the AutoNumeric children to format their default value\n aNElements.forEach(function (aNElement) {\n var val = _this12._getDefaultValue(aNElement.node());\n // aNElement.set(val); //XXX If I use that line, the format is first correctly done, but the form reset is still not finished and will overwrite the formatting. This is why we need to use the following setTimeout line.\n setTimeout(function () {\n return aNElement.set(val);\n }, 0); //XXX This is an ugly hack, but it seems to be the accepted answer to this problem (https://stackoverflow.com/a/8152960/2834898). This is sad. Do note that I use '0ms' here since using `setTimeout` will push that code on the event stack, and as soon as the reset will be finished, this will be run (see https://stackoverflow.com/a/23987283/2834898).\n });\n }\n\n /**\n * Unformat the element value according to the `unformatOnSubmit` option\n *\n * @private\n */\n }, {\n key: \"_unformatOnSubmit\",\n value: function _unformatOnSubmit() {\n if (this.settings.unformatOnSubmit) {\n this._setElementValue(this.rawValue);\n }\n }\n\n /**\n * Listen for the `alt` key keydown event globally, and if the event is caught, unformat the AutoNumeric element that is hovered by the mouse.\n *\n * @param {KeyboardEvent} e\n * @private\n */\n }, {\n key: \"_onKeydownGlobal\",\n value: function _onKeydownGlobal(e) {\n //TODO Find a way to keep the caret position between the alt keyup/keydown states\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].character(e) === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Alt) {\n var hoveredElement = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getHoveredElement();\n if (AutoNumeric.isManagedByAutoNumeric(hoveredElement)) {\n var anElement = AutoNumeric.getAutoNumericElement(hoveredElement);\n if (!anElement.formulaMode && anElement.settings.unformatOnHover) {\n this.constructor._unformatAltHovered(anElement);\n }\n }\n }\n }\n\n /**\n * Listen for the `alt` key keyup event globally, and if the event is caught, reformat the AutoNumeric element that is hovered by the mouse.\n *\n * @param {KeyboardEvent} e\n * @private\n */\n }, {\n key: \"_onKeyupGlobal\",\n value: function _onKeyupGlobal(e) {\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].character(e) === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Alt) {\n var hoveredElement = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getHoveredElement();\n if (AutoNumeric.isManagedByAutoNumeric(hoveredElement)) {\n var anElement = AutoNumeric.getAutoNumericElement(hoveredElement);\n if (anElement.formulaMode || !anElement.settings.unformatOnHover) {\n return;\n }\n this.constructor._reformatAltHovered(anElement);\n }\n }\n }\n\n /**\n * Return `true` if the DOM element is supported by autoNumeric.\n * A supported element is an element whitelisted in the `allowedTagList`.\n *\n * @returns {boolean}\n * @private\n */\n }, {\n key: \"_isElementTagSupported\",\n value: function _isElementTagSupported() {\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isElement(this.domElement)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The DOM element is not valid, \".concat(this.domElement, \" given.\"));\n }\n return _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isInArray(this.domElement.tagName.toLowerCase(), this.allowedTagList);\n }\n\n /**\n * Return `true` in the DOM element is an .\n *\n * @returns {boolean}\n * @private\n */\n }, {\n key: \"_isInputElement\",\n value: function _isInputElement() {\n return this.domElement.tagName.toLowerCase() === 'input';\n }\n\n /**\n * Return `true` if the input type is supported by AutoNumeric\n *\n * @returns {boolean}\n * @throws\n */\n }, {\n key: \"_isInputTypeSupported\",\n value: function _isInputTypeSupported() {\n return this.domElement.type === 'text' || this.domElement.type === 'hidden' || this.domElement.type === 'tel' || _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefinedOrNullOrEmpty(this.domElement.type);\n }\n\n /**\n * Check if the DOM element is supported by autoNumeric.\n * A supported element is either an element with the correct 'type' attribute, or a tag whitelisted in the `allowedTagList` array.\n * If the check fails, this method throws.\n * This function also sets the info `this.isInputElement` which keep tracks if the DOM element is an or not, and the `this.isContentEditable` if the element has the `contenteditable` attribute set to `true` initially.\n *\n * @throws\n * @private\n */\n }, {\n key: \"_checkElement\",\n value: function _checkElement() {\n var currentElementTag = this.domElement.tagName.toLowerCase();\n if (!this._isElementTagSupported()) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The <\".concat(currentElementTag, \"> tag is not supported by autoNumeric\"));\n }\n if (this._isInputElement()) {\n if (!this._isInputTypeSupported()) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The input type \\\"\".concat(this.domElement.type, \"\\\" is not supported by autoNumeric\"));\n }\n this.isInputElement = true;\n } else {\n this.isInputElement = false;\n this.isContentEditable = this._isContentEditable(this.domElement);\n }\n }\n\n /**\n * Returns `true` if the given DOM element is a contenteditable one (set to `true`)\n *\n * @param {HTMLElement} domElement\n * @returns {boolean}\n */\n }, {\n key: \"_isContentEditable\",\n value: function _isContentEditable(domElement) {\n return domElement.hasAttribute('contenteditable') && domElement.getAttribute('contenteditable') === 'true';\n }\n\n /**\n * Formats the default value on page load.\n * This is called only if the `formatOnPageLoad` option is set to `true`.\n *\n * @param {number|string|null} forcedInitialValue The value that should be used for initialization, in place on the eventual html one\n */\n }, {\n key: \"_formatDefaultValueOnPageLoad\",\n value: function _formatDefaultValueOnPageLoad() {\n var forcedInitialValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var setValue = true;\n var currentValue;\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(forcedInitialValue)) {\n currentValue = forcedInitialValue;\n } else {\n // Make sure the initial value does not have any superfluous whitespaces around it (Fix issue #479)\n currentValue = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(this.domElement).trim();\n // Correct the DOM attribute in case some whitespaces were present\n this.domElement.setAttribute('value', currentValue);\n }\n if (this.isInputElement || this.isContentEditable) {\n /*\n * If the input value has been set by the dev, but not directly as an attribute in the html, then it takes\n * precedence and should get formatted during the initialization (if this input value is a valid number and that the\n * developer wants it formatted on init (cf. the `settings.formatOnPageLoad` option)).\n * Note; this is true whatever the developer has set for `data-default-value-override` in the html (asp.net users).\n *\n * In other words : if `defaultValueOverride` is not null, it means the developer is trying to prevent postback problems.\n * But if `input.value` is set to a number, and the html `value` attribute is not set, then it means the dev has\n * changed the input value, and then it means we should not overwrite his own decision to do so.\n * Hence, if `defaultValueOverride` is not null, but `input.value` is a number and `this.domElement.hasAttribute('value')`\n * is false, we should ignore `defaultValueOverride` altogether.\n */\n var unLocalizedCurrentValue = this.constructor._toNumericValue(currentValue, this.settings); // This allows to use a localized value on startup\n if (!this.domElement.hasAttribute('value') || this.domElement.getAttribute('value') === '') {\n // Check if the `value` is valid or not\n if (!isNaN(Number(unLocalizedCurrentValue)) && Infinity !== unLocalizedCurrentValue) {\n this.set(unLocalizedCurrentValue);\n setValue = false;\n } else {\n // If not, inform the developer that nothing usable has been provided\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The value [\".concat(currentValue, \"] used in the input is not a valid value autoNumeric can work with.\"));\n }\n } else {\n /* Checks for :\n * - page reload from back button, and\n * - ASP.net form post back\n * The following HTML data attribute is REQUIRED (data-an-default=\"same value as the value attribute\")\n * example: \n */\n if (this.settings.defaultValueOverride !== null && this.settings.defaultValueOverride.toString() !== currentValue || this.settings.defaultValueOverride === null && currentValue !== '' && currentValue !== this.domElement.getAttribute('value') || currentValue !== '' && this.domElement.getAttribute('type') === 'hidden' && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNumber(unLocalizedCurrentValue)) {\n if (this.settings.saveValueToSessionStorage && (this.settings.decimalPlacesShownOnFocus !== null || this.settings.divisorWhenUnfocused)) {\n this._setRawValue(this._getValueFromPersistentStorage());\n }\n\n // If the decimalPlacesShownOnFocus value should NOT be saved in sessionStorage\n if (!this.settings.saveValueToSessionStorage) {\n var toStrip = this.constructor._removeBrackets(currentValue, this.settings);\n if ((this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.suffix || this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.prefix && this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) && this.settings.negativeSignCharacter !== '' && _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNegative(currentValue, this.settings.negativeSignCharacter)) {\n this._setRawValue(\"-\".concat(this.constructor._stripAllNonNumberCharacters(toStrip, this.settings, true, this.isFocused)));\n } else {\n this._setRawValue(this.constructor._stripAllNonNumberCharacters(toStrip, this.settings, true, this.isFocused));\n }\n }\n setValue = false;\n }\n }\n if (currentValue === '') {\n switch (this.settings.emptyInputBehavior) {\n case AutoNumeric.options.emptyInputBehavior.focus:\n case AutoNumeric.options.emptyInputBehavior.press:\n break;\n case AutoNumeric.options.emptyInputBehavior.always:\n this._setElementValue(this.settings.currencySymbol);\n break;\n case AutoNumeric.options.emptyInputBehavior.min:\n this.set(this.settings.minimumValue);\n break;\n case AutoNumeric.options.emptyInputBehavior.max:\n this.set(this.settings.maximumValue);\n break;\n case AutoNumeric.options.emptyInputBehavior.zero:\n this.set('0');\n break;\n // It's possible to set the `null` value as the initial value\n case AutoNumeric.options.emptyInputBehavior[\"null\"]:\n this.set(null);\n break;\n // When `emptyInputBehavior` is a number or a string representing a number\n default:\n this.set(this.settings.emptyInputBehavior);\n }\n } else if (setValue && currentValue === this.domElement.getAttribute('value')) {\n this.set(currentValue);\n }\n } else if (this.settings.defaultValueOverride === null || this.settings.defaultValueOverride === currentValue) {\n this.set(currentValue);\n }\n }\n\n /**\n * Enhance the user experience by modifying the default `negativePositiveSignPlacement` option depending on `currencySymbol` and `currencySymbolPlacement`.\n *\n * If the user has not set the placement of the negative sign (`negativePositiveSignPlacement`), but has set a currency symbol (`currencySymbol`),\n * then we modify the default value of `negativePositiveSignPlacement` in order to keep the resulting output logical by default :\n * - \"$-1,234.56\" instead of \"-$1,234.56\" ({currencySymbol: \"$\", negativePositiveSignPlacement: \"r\"})\n * - \"-1,234.56$\" instead of \"1,234.56-$\" ({currencySymbol: \"$\", currencySymbolPlacement: \"s\", negativePositiveSignPlacement: \"p\"})\n *\n * @param {object} settings\n */\n }, {\n key: \"_calculateVMinAndVMaxIntegerSizes\",\n value:\n /**\n * Analyze and save the minimumValue and maximumValue integer size for later uses\n * @private\n */\n function _calculateVMinAndVMaxIntegerSizes() {\n var _this$settings$maximu = this.settings.maximumValue.toString().split('.'),\n _this$settings$maximu2 = _slicedToArray(_this$settings$maximu, 1),\n maximumValueIntegerPart = _this$settings$maximu2[0];\n var _ref = !this.settings.minimumValue && this.settings.minimumValue !== 0 ? [] : this.settings.minimumValue.toString().split('.'),\n _ref2 = _slicedToArray(_ref, 1),\n minimumValueIntegerPart = _ref2[0];\n maximumValueIntegerPart = maximumValueIntegerPart.replace(this.settings.negativeSignCharacter, '');\n minimumValueIntegerPart = minimumValueIntegerPart.replace(this.settings.negativeSignCharacter, '');\n this.settings.mIntPos = Math.max(maximumValueIntegerPart.length, 1);\n this.settings.mIntNeg = Math.max(minimumValueIntegerPart.length, 1);\n }\n\n /**\n * Calculate once what are the `valuesToStrings` option keys.\n * @private\n */\n }, {\n key: \"_calculateValuesToStringsKeys\",\n value: function _calculateValuesToStringsKeys() {\n if (this.settings.valuesToStrings) {\n this.valuesToStringsKeys = Object.keys(this.settings.valuesToStrings);\n } else {\n this.valuesToStringsKeys = [];\n }\n }\n\n /**\n * Caches regular expressions for _stripAllNonNumberCharactersExceptCustomDecimalChar\n *\n * @param {object} settings\n * @param {object} regex\n */\n }, {\n key: \"_transformOptionsValuesToDefaultTypes\",\n value:\n /**\n * Modify the user settings to make them 'exploitable' later.\n */\n function _transformOptionsValuesToDefaultTypes() {\n for (var key in this.settings) {\n if (Object.prototype.hasOwnProperty.call(this.settings, key)) {\n var value = this.settings[key];\n\n // Convert the strings 'true' and 'false' to booleans\n if (value === 'true' || value === 'false') {\n this.settings[key] = value === 'true';\n }\n\n // Convert numbers in options to strings\n //TODO Only transform the values of type 'Number' to 'String' if it's a currency number (so that we can have big numbers). Do not convert other numbers (i.e. `historySize`)\n if (typeof value === 'number') {\n this.settings[key] = value.toString();\n }\n }\n }\n }\n\n /**\n * Convert the old settings options name to new ones.\n *\n * @param {object} options\n */\n }, {\n key: \"_setSettings\",\n value:\n /**\n * Analyse the settings/options passed by the user, validate and clean them, then set them into `this.settings`.\n * Note: This sets the settings to `null` if somehow the settings objet is undefined or empty\n * If only `decimalPlaces` is defined in the option, overwrite the other decimalPlaces* options, otherwise, use those options\n *\n * @param {object} options\n * @param {boolean} update - If set to `true`, then the settings already exists and this function only updates them instead of recreating them from scratch\n * @throws\n */\n function _setSettings(options) {\n var update = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n // If the user used old options, we convert them to new ones\n if (update || !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(options)) {\n this.constructor._convertOldOptionsToNewOnes(options);\n }\n if (update) {\n // The settings are updated\n // Update the original data, if it has changed\n var decimalPlacesRawValueInOptions = ('decimalPlacesRawValue' in options);\n if (decimalPlacesRawValueInOptions) {\n this.settings.originalDecimalPlacesRawValue = options.decimalPlacesRawValue;\n }\n var decimalPlacesInOptions = ('decimalPlaces' in options);\n if (decimalPlacesInOptions) {\n this.settings.originalDecimalPlaces = options.decimalPlaces;\n }\n\n // Then update all the `decimalPlaces*` options\n this.constructor._calculateDecimalPlacesOnUpdate(options, this.settings);\n\n // Finally generate the updated settings object to use\n this._mergeSettings(options); //TODO Check that the `styleRules` option is correctly cloned (due to depth cloning limitation)\n } else {\n // The settings are generated for the first time\n this.settings = {};\n // If we couldn't grab any settings, create them from the default ones and combine them with the options passed as a parameter as well as with the HTML5 `data-*` info (via `this.domElement.dataset`), if any.\n this._mergeSettings(this.constructor.getDefaultConfig(), this.domElement.dataset, options, {\n rawValue: this.defaultRawValue\n });\n this.caretFix = false;\n this.throwInput = true; // Throw input event\n this.allowedTagList = _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].allowedTagList;\n this.runOnce = false;\n this.hoveredWithAlt = false; // Keep tracks if the current AutoNumeric element is hovered by the mouse cursor while `Alt` is pressed\n }\n\n // Modify the user settings to make them 'exploitable'\n this._transformOptionsValuesToDefaultTypes();\n\n // Immediately run the callbacks that could update the settings object\n this._runCallbacksFoundInTheSettingsObject();\n\n // Improve the `negativePositiveSignPlacement` option if needed\n this.constructor._correctNegativePositiveSignPlacementOption(this.settings);\n\n // Set the `caretPositionOnFocus` and `selectOnFocus` options so that they do not conflict, if one of those have been set manually by the user.\n // If order to check that, we take a look at the original options the user passed as an argument, not `this.settings` that have been merged with the default settings. //TODO Check the validity of that comment\n this.constructor._correctCaretPositionOnFocusAndSelectOnFocusOptions(this.settings);\n\n // Define if the negative or positive signs are allowed\n this.constructor._setNegativePositiveSignPermissions(this.settings);\n\n // Calculate the number of decimal places (during the element initialization)\n if (!update) {\n // Make sure the `originalDecimalPlaces` info is set\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(options) || !options.decimalPlaces) {\n this.settings.originalDecimalPlaces = null;\n } else {\n this.settings.originalDecimalPlaces = options.decimalPlaces;\n }\n\n // Save the `originalDecimalPlacesRawValue` info\n this.settings.originalDecimalPlacesRawValue = this.settings.decimalPlacesRawValue;\n\n // Then update all the `decimalPlaces*` options\n this.constructor._calculateDecimalPlacesOnInit(this.settings);\n }\n\n // Additional changes to the settings object\n this._calculateVMinAndVMaxIntegerSizes();\n this._setTrailingNegativeSignInfo();\n this.regex = {}; // Create the object that will store the regular expressions\n this.constructor._cachesUsualRegularExpressions(this.settings, this.regex);\n this.constructor._setBrackets(this.settings);\n this._calculateValuesToStringsKeys();\n\n // Validate the settings. Both tests throws if necessary.\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isEmptyObj(this.settings)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError('Unable to set the settings, those are invalid ; an empty object was given.');\n }\n this.constructor.validate(this.settings, false, options);\n\n // Original settings saved for use when decimalPlacesShownOnFocus, divisorWhenUnfocused & showOnlyNumbersOnFocus options are being used\n this._keepAnOriginalSettingsCopy();\n }\n\n /**\n * Define if the negative or positive signs are allowed, and update the given settings object directly.\n *\n * @param {object} settings\n * @private\n */\n }, {\n key: \"_preparePastedText\",\n value:\n /**\n * Return the pasted text that will be used, by stripping most non-numeric characters\n *\n * @param {string} text\n * @returns {string}\n */\n function _preparePastedText(text) {\n return this.constructor._stripAllNonNumberCharacters(text, this.settings, true, this.isFocused);\n }\n\n /**\n * Return TRUE if the given value (a number as a string) is within the range set in the settings `minimumValue` and `maximumValue`, FALSE otherwise.\n *\n * @param {string} value\n * @param {object} parsedMinValue Parsed via the `parseStr()` function\n * @param {object} parsedMaxValue Parsed via the `parseStr()` function\n * @returns {boolean}\n */\n }, {\n key: \"_updateInternalProperties\",\n value:\n /**\n * Update the selection values as well as resets the internal state of the current AutoNumeric object.\n * This keeps tracks of the current selection and resets the 'processed' state.\n *\n * Note : This state can change between the keydown, keypress and keyup events, that's why\n * this function is called on each event handler.\n *\n * @private\n */\n function _updateInternalProperties() {\n this.selection = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementSelection(this.domElement);\n this.processed = false;\n }\n\n /**\n * Update the `event.key` attribute that triggered the given event.\n *\n * `event.key` describes:\n * - the key name (if a non-printable character),\n * - or directly the character that result from the key press used to trigger the event.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key\n * The key list is described here:\n * @link https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values\n *\n * @param {Event|KeyboardEvent} e\n * @private\n */\n }, {\n key: \"_updateEventKeyInfo\",\n value: function _updateEventKeyInfo(e) {\n this.eventKey = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].character(e);\n }\n\n /**\n * Save the unformatted element value.\n * This is used in the 'cancellable' feature where the element value is saved on focus and input validation, to be used if the user wants to cancel his modifications by hitting the 'Escape' key.\n *\n * @private\n */\n }, {\n key: \"_saveCancellableValue\",\n value: function _saveCancellableValue() {\n this.savedCancellableValue = this.rawValue;\n }\n\n /**\n * Set the text selection inside the input with the given start and end position.\n *\n * @param {int} start\n * @param {int} end\n * @private\n */\n }, {\n key: \"_setSelection\",\n value: function _setSelection(start, end) {\n //TODO use this function to replace the direct calls to `setElementSelection()`, wherever possible\n start = Math.max(start, 0);\n end = Math.min(end, _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(this.domElement).length);\n this.selection = {\n start: start,\n end: end,\n length: end - start\n };\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setElementSelection(this.domElement, start, end);\n }\n\n /**\n * Set the caret position inside the input at the given position.\n *\n * @param {int} position\n * @private\n */\n }, {\n key: \"_setCaretPosition\",\n value: function _setCaretPosition(position) {\n this._setSelection(position, position);\n }\n\n /**\n * Return an array containing the string parts located on the left and right side of the caret or selection.\n * Those parts are left 'untouched', i.e. formatted by autoNumeric.\n *\n * @returns {[string, string]} The parts on the left and right of the caret or selection\n * @private\n */\n }, {\n key: \"_getLeftAndRightPartAroundTheSelection\",\n value: function _getLeftAndRightPartAroundTheSelection() {\n var value = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(this.domElement);\n var left = value.substring(0, this.selection.start);\n var right = value.substring(this.selection.end, value.length);\n return [left, right];\n }\n\n /**\n * Return an array containing the string parts located on the left and right side of the caret or selection.\n * Those parts are unformatted (stripped) of any non-numbers characters, and any trailing negative character is put back on the left hand side of the number.\n *\n * @returns {[string, string]} The parts on the left and right of the caret or selection, unformatted.\n * @private\n */\n }, {\n key: \"_getUnformattedLeftAndRightPartAroundTheSelection\",\n value: function _getUnformattedLeftAndRightPartAroundTheSelection() {\n var _this$_getLeftAndRigh = this._getLeftAndRightPartAroundTheSelection(),\n _this$_getLeftAndRigh2 = _slicedToArray(_this$_getLeftAndRigh, 2),\n left = _this$_getLeftAndRigh2[0],\n right = _this$_getLeftAndRigh2[1];\n if (left === '' && right === '') {\n return ['', ''];\n }\n\n // If changing the sign and `left` is equal to the number zero, prevent stripping the leading zero(s)\n var stripZeros = true;\n if ((this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Hyphen || this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Minus) && Number(left) === 0) {\n stripZeros = false;\n }\n\n //TODO DRY that with `_normalizeParts()` -->\n if (this.isTrailingNegative && (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNegative(right, this.settings.negativeSignCharacter) &&\n // The caret is placed on the left of the negative sign\n !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNegative(left, this.settings.negativeSignCharacter) || right === '' &&\n // ...or the caret is placed on the far right of the input (Fix issue #481)\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNegative(left, this.settings.negativeSignCharacter, true))) {\n left = left.replace(this.settings.negativeSignCharacter, '');\n right = right.replace(this.settings.negativeSignCharacter, '');\n // This is done here because `_getUnformattedLeftAndRightPartAroundTheSelection()` is called multiple times during the same key event, and at one point the left/right value has been normalized already..\n left = left.replace('-', '');\n right = right.replace('-', '');\n\n // Then finally set back the normalized minus character at the right place\n left = \"-\".concat(left);\n }\n left = AutoNumeric._stripAllNonNumberCharactersExceptCustomDecimalChar(left, this.settings, stripZeros, this.isFocused);\n right = AutoNumeric._stripAllNonNumberCharactersExceptCustomDecimalChar(right, this.settings, false, this.isFocused);\n return [left, right];\n }\n\n /**\n * Strip parts from excess characters and leading zeros.\n *\n * @param {string} left\n * @param {string} right\n * @returns {[*,*,*]}\n * @private\n */\n }, {\n key: \"_normalizeParts\",\n value: function _normalizeParts(left, right) {\n //TODO Refactor with `_getUnformattedLeftAndRightPartAroundTheSelection` which share a lot of similar code\n // If changing the sign and left is equal to the number zero - prevents stripping the leading zeros\n var stripZeros = true;\n if ((this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Hyphen || this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Minus) && Number(left) === 0) {\n stripZeros = false;\n }\n if (this.isTrailingNegative && _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNegative(right, this.settings.negativeSignCharacter) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNegative(left, this.settings.negativeSignCharacter)) {\n // Only set the negative sign if the value is negative\n left = \"-\".concat(left);\n right = right.replace(this.settings.negativeSignCharacter, '');\n }\n left = AutoNumeric._stripAllNonNumberCharactersExceptCustomDecimalChar(left, this.settings, stripZeros, this.isFocused);\n right = AutoNumeric._stripAllNonNumberCharactersExceptCustomDecimalChar(right, this.settings, false, this.isFocused);\n\n // Prevents multiple leading zeros from being entered\n if (this.settings.leadingZero === AutoNumeric.options.leadingZero.deny && (this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.num0 || this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.numpad0) && Number(left) === 0 &&\n // If `right` is not empty and the first character is not `decimalCharacter`\n !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].contains(left, this.settings.decimalCharacter) && right !== '') {\n left = left.substring(0, left.length - 1);\n }\n\n // Insert zero there is a leading dot\n var newValue = left + right;\n if (this.settings.decimalCharacter) {\n var m = newValue.match(new RegExp(\"^\".concat(this.regex.aNegRegAutoStrip, \"\\\\\").concat(this.settings.decimalCharacter)));\n if (m) {\n left = left.replace(m[1], m[1] + '0');\n newValue = left + right;\n }\n }\n return [left, right, newValue];\n }\n\n /**\n * Set the formatted element value as well as the `rawValue`.\n * This returns `true` if the element and raw value have been modified, `false` otherwise.\n * This method also adjust the caret position according to the `leadingZero` option and the normalized value. //TODO What about the cursor *selection*?\n *\n * @param {string} left\n * @param {string} right\n * @param {boolean} isPaste\n * @returns {boolean}\n * @private\n */\n }, {\n key: \"_setValueParts\",\n value: function _setValueParts(left, right) {\n var isPaste = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var _this$_normalizeParts = this._normalizeParts(left, right),\n _this$_normalizeParts2 = _slicedToArray(_this$_normalizeParts, 3),\n normalizedLeft = _this$_normalizeParts2[0],\n normalizedRight = _this$_normalizeParts2[1],\n normalizedNewValue = _this$_normalizeParts2[2];\n var _AutoNumeric$_checkIf = AutoNumeric._checkIfInRangeWithOverrideOption(normalizedNewValue, this.settings),\n _AutoNumeric$_checkIf2 = _slicedToArray(_AutoNumeric$_checkIf, 2),\n minTest = _AutoNumeric$_checkIf2[0],\n maxTest = _AutoNumeric$_checkIf2[1];\n if (minTest && maxTest) {\n // First, set the raw value\n var roundedRawValue = AutoNumeric._truncateDecimalPlaces(normalizedNewValue, this.settings, isPaste, this.settings.decimalPlacesRawValue);\n var testValue = roundedRawValue.replace(this.settings.decimalCharacter, '.');\n if (testValue === '' || testValue === this.settings.negativeSignCharacter) {\n var valueToSetOnEmpty;\n switch (this.settings.emptyInputBehavior) {\n case AutoNumeric.options.emptyInputBehavior.focus:\n case AutoNumeric.options.emptyInputBehavior.press:\n case AutoNumeric.options.emptyInputBehavior.always:\n valueToSetOnEmpty = '';\n break;\n case AutoNumeric.options.emptyInputBehavior.min:\n valueToSetOnEmpty = this.settings.minimumValue;\n break;\n case AutoNumeric.options.emptyInputBehavior.max:\n valueToSetOnEmpty = this.settings.maximumValue;\n break;\n case AutoNumeric.options.emptyInputBehavior.zero:\n valueToSetOnEmpty = '0';\n break;\n case AutoNumeric.options.emptyInputBehavior[\"null\"]:\n valueToSetOnEmpty = null;\n break;\n // When `emptyInputBehavior` is a number or a string representing a number\n default:\n valueToSetOnEmpty = this.settings.emptyInputBehavior;\n }\n this._setRawValue(valueToSetOnEmpty);\n } else {\n this._setRawValue(this._trimLeadingAndTrailingZeros(testValue));\n }\n\n // Then set the formatted value\n var roundedValueToShow = AutoNumeric._truncateDecimalPlaces(normalizedNewValue, this.settings, isPaste, this.settings.decimalPlacesShownOnFocus);\n var position = normalizedLeft.length;\n if (position > roundedValueToShow.length) {\n position = roundedValueToShow.length;\n }\n\n // Make sure when the user enter a '0' on the far left with a leading zero option set to 'deny', that the caret does not move since the input is dropped (fix issue #283)\n if (position === 1 && normalizedLeft === '0' && this.settings.leadingZero === AutoNumeric.options.leadingZero.deny) {\n // If the user enter `0`, then the caret is put on the right side of it (Fix issue #299)\n if (normalizedRight === '' || normalizedLeft === '0' && normalizedRight !== '') {\n position = 1;\n } else {\n position = 0;\n }\n }\n this._setElementValue(roundedValueToShow, false);\n this._setCaretPosition(position);\n return true;\n }\n this._triggerRangeEvents(minTest, maxTest);\n return false;\n }\n\n /**\n * Helper function for `_expandSelectionOnSign()`.\n *\n * @returns {Array} Array containing [signPosition, currencySymbolPosition] of a formatted value\n * @private\n */\n }, {\n key: \"_getSignPosition\",\n value: function _getSignPosition() {\n var result;\n if (this.settings.currencySymbol) {\n var currencySymbolLen = this.settings.currencySymbol.length;\n var value = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(this.domElement);\n if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix) {\n var hasNeg = this.settings.negativeSignCharacter && value && value.charAt(0) === this.settings.negativeSignCharacter;\n if (hasNeg) {\n result = [1, currencySymbolLen + 1];\n } else {\n result = [0, currencySymbolLen];\n }\n } else {\n var valueLen = value.length;\n result = [valueLen - currencySymbolLen, valueLen];\n }\n } else {\n result = [1000, -1];\n }\n return result;\n }\n\n /**\n * Expands selection to cover whole sign\n * Prevents partial deletion/copying/overwriting of a sign\n * @private\n */\n }, {\n key: \"_expandSelectionOnSign\",\n value: function _expandSelectionOnSign() {\n var _this$_getSignPositio = this._getSignPosition(),\n _this$_getSignPositio2 = _slicedToArray(_this$_getSignPositio, 2),\n signPosition = _this$_getSignPositio2[0],\n currencySymbolPosition = _this$_getSignPositio2[1];\n var selection = this.selection;\n\n // If selection catches something except sign and catches only space from sign\n if (selection.start < currencySymbolPosition && selection.end > signPosition) {\n // Then select without empty space\n if ((selection.start < signPosition || selection.end > currencySymbolPosition) && _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(this.domElement).substring(Math.max(selection.start, signPosition), Math.min(selection.end, currencySymbolPosition)).match(/^\\s*$/)) {\n if (selection.start < signPosition) {\n this._setSelection(selection.start, signPosition);\n } else {\n this._setSelection(currencySymbolPosition, selection.end);\n }\n } else {\n // Else select with whole sign\n this._setSelection(Math.min(selection.start, signPosition), Math.max(selection.end, currencySymbolPosition));\n }\n }\n }\n\n /**\n * Try to strip pasted value to digits\n */\n }, {\n key: \"_checkPaste\",\n value: function _checkPaste() {\n // Do not process anything if the value has already been formatted\n if (this.formatted) {\n return;\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefined(this.valuePartsBeforePaste)) {\n var oldParts = this.valuePartsBeforePaste;\n var _this$_getLeftAndRigh3 = this._getLeftAndRightPartAroundTheSelection(),\n _this$_getLeftAndRigh4 = _slicedToArray(_this$_getLeftAndRigh3, 2),\n left = _this$_getLeftAndRigh4[0],\n right = _this$_getLeftAndRigh4[1];\n\n // Try to strip the pasted value first\n delete this.valuePartsBeforePaste;\n var modifiedLeftPart = left.substr(0, oldParts[0].length) + AutoNumeric._stripAllNonNumberCharactersExceptCustomDecimalChar(left.substr(oldParts[0].length), this.settings, true, this.isFocused);\n if (!this._setValueParts(modifiedLeftPart, right, true)) {\n this._setElementValue(oldParts.join(''), false);\n this._setCaretPosition(oldParts[0].length);\n }\n }\n }\n\n /**\n * Return `true` if the given key should be ignored or not.\n *\n * @param {string} eventKeyName\n * @returns {boolean}\n * @private\n */\n }, {\n key: \"_processNonPrintableKeysAndShortcuts\",\n value:\n /**\n * Process copying, cutting and pasting, as well as undo/redoing and cursor moving.\n * Return `true` if further processing should not be performed.\n *\n * @param {KeyboardEvent} e\n * @returns {boolean}\n * @private\n */\n function _processNonPrintableKeysAndShortcuts(e) {\n // Catch the ctrl up on ctrl-v\n if ((e.ctrlKey || e.metaKey) && e.type === 'keyup' && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefined(this.valuePartsBeforePaste) || e.shiftKey && this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Insert) {\n //TODO Move this test inside the `onKeyup` handler\n this._checkPaste();\n return false;\n }\n\n // Skip all function keys (F1-F12), Windows keys, tab and other special keys\n if (this.constructor._shouldSkipEventKey(this.eventKey)) {\n return true;\n }\n\n // If a \"Select all\" keyboard shortcut is detected (ctrl + a)\n if ((e.ctrlKey || e.metaKey) && this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.a) {\n if (this.settings.selectNumberOnly) {\n // `preventDefault()` is used here to prevent the browser to first select all the input text (including the currency sign), otherwise we would see that whole selection first in a flash, then the selection with only the number part without the currency sign.\n e.preventDefault();\n //TODO replace `selectNumber` by `select`?\n this.selectNumber();\n }\n return true;\n }\n\n // If a \"Copy\", \"Paste\" or \"Cut\" keyboard shortcut is detected (respectively 'ctrl + c', 'ctrl + v' or 'ctrl + x')\n if ((e.ctrlKey || e.metaKey) && (this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.c || this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.v || this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.x)) {\n if (e.type === 'keydown') {\n this._expandSelectionOnSign();\n }\n\n // Try to prevent wrong paste\n if (this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.v || this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Insert) {\n if (e.type === 'keydown' || e.type === 'keypress') {\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefined(this.valuePartsBeforePaste)) {\n this.valuePartsBeforePaste = this._getLeftAndRightPartAroundTheSelection();\n }\n } else {\n this._checkPaste();\n }\n }\n return e.type === 'keydown' || e.type === 'keypress' || this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.c;\n }\n\n // If the ctrl/meta key is used (during the undo shortcut for instance)\n if (e.ctrlKey || e.metaKey) {\n return !(this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Z || this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.z);\n }\n\n // Jump over the thousand separator\n //TODO Move this test inside the `onKeydown` handler\n if (this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.LeftArrow || this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.RightArrow) {\n if (e.type === 'keydown' && !e.shiftKey) {\n var value = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(this.domElement);\n if (this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.LeftArrow && (value.charAt(this.selection.start - 2) === this.settings.digitGroupSeparator || value.charAt(this.selection.start - 2) === this.settings.decimalCharacter)) {\n this._setCaretPosition(this.selection.start - 1);\n } else if (this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.RightArrow && (value.charAt(this.selection.start + 1) === this.settings.digitGroupSeparator || value.charAt(this.selection.start + 1) === this.settings.decimalCharacter)) {\n this._setCaretPosition(this.selection.start + 1);\n }\n }\n return true;\n }\n return _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isInArray(this.eventKey, _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName._directionKeys);\n }\n\n /**\n * Process deletion of characters when the minus sign is to the right of the numeric characters.\n *\n * @param {string[]} leftAndRight The parts on the left and on the right of the caret or selection as an array with [left, right]\n * @returns {string[]} Processed left and right as an array with [left, right]\n * @private\n */\n }, {\n key: \"_processCharacterDeletionIfTrailingNegativeSign\",\n value: function _processCharacterDeletionIfTrailingNegativeSign(_ref3) {\n var _ref4 = _slicedToArray(_ref3, 2),\n left = _ref4[0],\n right = _ref4[1];\n var value = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(this.domElement);\n var isValNegative = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNegative(value, this.settings.negativeSignCharacter);\n if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix && this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.suffix) {\n if (this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Backspace) {\n this.caretFix = this.selection.start >= value.indexOf(this.settings.suffixText) && this.settings.suffixText !== '';\n if (value.charAt(this.selection.start - 1) === '-') {\n left = left.substring(1);\n } else if (this.selection.start <= value.length - this.settings.suffixText.length) {\n left = left.substring(0, left.length - 1);\n }\n } else {\n this.caretFix = this.selection.start >= value.indexOf(this.settings.suffixText) && this.settings.suffixText !== '';\n if (this.selection.start >= value.indexOf(this.settings.currencySymbol) + this.settings.currencySymbol.length) {\n right = right.substring(1, right.length);\n }\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNegative(left, this.settings.negativeSignCharacter) && value.charAt(this.selection.start) === '-') {\n left = left.substring(1);\n }\n }\n }\n if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n switch (this.settings.negativePositiveSignPlacement) {\n case AutoNumeric.options.negativePositiveSignPlacement.left:\n this.caretFix = this.selection.start >= value.indexOf(this.settings.negativeSignCharacter) + this.settings.negativeSignCharacter.length;\n if (this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Backspace) {\n if (this.selection.start === value.indexOf(this.settings.negativeSignCharacter) + this.settings.negativeSignCharacter.length && isValNegative) {\n left = left.substring(1);\n } else if (left !== '-' && (this.selection.start <= value.indexOf(this.settings.negativeSignCharacter) || !isValNegative)) {\n left = left.substring(0, left.length - 1);\n }\n } else {\n if (left[0] === '-') {\n right = right.substring(1);\n }\n if (this.selection.start === value.indexOf(this.settings.negativeSignCharacter) && isValNegative) {\n left = left.substring(1);\n }\n }\n break;\n case AutoNumeric.options.negativePositiveSignPlacement.right:\n this.caretFix = this.selection.start >= value.indexOf(this.settings.negativeSignCharacter) + this.settings.negativeSignCharacter.length;\n if (this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Backspace) {\n if (this.selection.start === value.indexOf(this.settings.negativeSignCharacter) + this.settings.negativeSignCharacter.length) {\n left = left.substring(1);\n } else if (left !== '-' && this.selection.start <= value.indexOf(this.settings.negativeSignCharacter) - this.settings.currencySymbol.length) {\n left = left.substring(0, left.length - 1);\n } else if (left !== '' && !isValNegative) {\n left = left.substring(0, left.length - 1);\n }\n } else {\n this.caretFix = this.selection.start >= value.indexOf(this.settings.currencySymbol) && this.settings.currencySymbol !== '';\n if (this.selection.start === value.indexOf(this.settings.negativeSignCharacter)) {\n left = left.substring(1);\n }\n right = right.substring(1);\n }\n break;\n }\n }\n return [left, right];\n }\n\n /**\n * Process the deletion of characters.\n * Returns `true` if the deletion is allowed (within the min and max range, according to the `overrideMinMaxLimits` option), `false` otherwise.\n *\n * @param {Event} e\n * @returns {boolean}\n */\n }, {\n key: \"_processCharacterDeletion\",\n value: function _processCharacterDeletion(e) {\n var left;\n var right;\n if (!this.selection.length) {\n var _this$_getUnformatted = this._getUnformattedLeftAndRightPartAroundTheSelection();\n var _this$_getUnformatted2 = _slicedToArray(_this$_getUnformatted, 2);\n left = _this$_getUnformatted2[0];\n right = _this$_getUnformatted2[1];\n if (left === '' && right === '') {\n this.throwInput = false;\n }\n if (this.isTrailingNegative && _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNegative(_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(this.domElement), this.settings.negativeSignCharacter)) {\n var _this$_processCharact = this._processCharacterDeletionIfTrailingNegativeSign([left, right]);\n var _this$_processCharact2 = _slicedToArray(_this$_processCharact, 2);\n left = _this$_processCharact2[0];\n right = _this$_processCharact2[1];\n } else {\n if (this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Backspace) {\n left = left.substring(0, left.length - 1);\n } else {\n right = right.substring(1, right.length);\n }\n }\n } else {\n this._expandSelectionOnSign();\n var _this$_getUnformatted3 = this._getUnformattedLeftAndRightPartAroundTheSelection();\n var _this$_getUnformatted4 = _slicedToArray(_this$_getUnformatted3, 2);\n left = _this$_getUnformatted4[0];\n right = _this$_getUnformatted4[1];\n }\n if (!this.constructor._isWithinRangeWithOverrideOption(\"\".concat(left).concat(right), this.settings)) {\n // If the result with the deletion would be out of the range, we prevent it\n return false;\n }\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(e.target) === this.settings.currencySymbol) {\n return false;\n }\n this._setValueParts(left, right);\n return true;\n }\n\n /**\n * Return `true` if a decimal character is allowed to be typed.\n * If the number of decimal places shown on focus is zero, then the decimal character is not allowed.\n *\n * @returns {boolean}\n * @private\n */\n }, {\n key: \"_isDecimalCharacterInsertionAllowed\",\n value: function _isDecimalCharacterInsertionAllowed() {\n return String(this.settings.decimalPlacesShownOnFocus) !== String(AutoNumeric.options.decimalPlacesShownOnFocus.none) && String(this.settings.decimalPlaces) !== String(AutoNumeric.options.decimalPlaces.none);\n }\n\n /**\n * Return `true` if the key is allowed.\n * This function decides if the key pressed should be dropped or accepted, and modify the value 'on-the-fly' accordingly.\n * //TODO This should use another function in order to separate the test and the modification\n *\n * @returns {boolean}\n */\n }, {\n key: \"_processCharacterInsertion\",\n value: function _processCharacterInsertion() {\n var _this$_getUnformatted5 = this._getUnformattedLeftAndRightPartAroundTheSelection(),\n _this$_getUnformatted6 = _slicedToArray(_this$_getUnformatted5, 2),\n left = _this$_getUnformatted6[0],\n right = _this$_getUnformatted6[1];\n if (this.eventKey !== _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.AndroidDefault) {\n this.throwInput = true;\n }\n\n // Start rules when the decimal character key is pressed always use numeric pad dot to insert decimal separator\n // Do not allow decimal character if no decimal part allowed\n if (this.eventKey === this.settings.decimalCharacter || this.settings.decimalCharacterAlternative && this.eventKey === this.settings.decimalCharacterAlternative) {\n if (!this._isDecimalCharacterInsertionAllowed() || !this.settings.decimalCharacter) {\n return false;\n }\n if (this.settings.alwaysAllowDecimalCharacter) {\n // Remove any previous decimal character\n left = left.replace(this.settings.decimalCharacter, '');\n right = right.replace(this.settings.decimalCharacter, '');\n } else {\n // Do not allow a decimal character if another decimal character is already present\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].contains(left, this.settings.decimalCharacter)) {\n return true;\n }\n\n // Prevent adding a decimal character at the far right of the number\n if (right.indexOf(this.settings.decimalCharacter) > 0) {\n return true;\n }\n\n // Remove the decimal character if found on the far left of the right part\n if (right.indexOf(this.settings.decimalCharacter) === 0) {\n right = right.substr(1);\n }\n }\n\n // If the user is trying to add a decimal character on the far left of the number, we allow it\n if (this.settings.negativeSignCharacter && _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].contains(right, this.settings.negativeSignCharacter)) {\n // We need however to move the negative sign from the right to the left part\n left = \"\".concat(this.settings.negativeSignCharacter).concat(left);\n right = right.replace(this.settings.negativeSignCharacter, '');\n }\n this._setValueParts(left + this.settings.decimalCharacter, right);\n return true;\n }\n\n // Prevent entering the minus sign if it's not allowed (Note: `this.settings.isNegativeSignAllowed` is only set to `true` if the minimumValue is lower than zero, allowing negative numbers to be entered)\n if ((this.eventKey === '-' || this.eventKey === '+') && this.settings.isNegativeSignAllowed) {\n // Here, the left and right parts have been normalized already, hence the minus sign usage\n if (left === '' && _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].contains(right, '-')) {\n // The value is originally negative (with a trailing negative sign)\n if (this.settings.negativePositiveSignBehavior || !this.settings.negativePositiveSignBehavior && this.eventKey === '+') {\n right = right.replace('-', '');\n }\n } else if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNegativeStrict(left, '-')) {\n // The value is originally negative (with a leading negative sign)\n // Remove the negative sign, effectively converting the value to a positive one\n if (this.settings.negativePositiveSignBehavior || !this.settings.negativePositiveSignBehavior && this.eventKey === '+') {\n left = left.replace('-', '');\n }\n } else if (this.settings.negativePositiveSignBehavior || !this.settings.negativePositiveSignBehavior && this.eventKey === '-') {\n // The value is originally positive, so we toggle the state to a negative one (unformatted, which means even with a trailing negative sign, we add the minus sign on the far left)\n left = \"\".concat(this.settings.negativeSignCharacter).concat(left);\n }\n this._setValueParts(left, right);\n return true;\n }\n var eventNumber = Number(this.eventKey);\n if (eventNumber >= 0 && eventNumber <= 9) {\n // If the user tries to insert a digit\n if (this.settings.isNegativeSignAllowed && left === '' && _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].contains(right, '-')) {\n // ...and that digit is before the minus sign\n left = '-';\n right = right.substring(1, right.length);\n }\n if (this.settings.maximumValue <= 0 && this.settings.minimumValue < this.settings.maximumValue && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].contains(_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(this.domElement), this.settings.negativeSignCharacter) && this.eventKey !== '0') {\n left = \"-\".concat(left);\n }\n this._setValueParts(\"\".concat(left).concat(this.eventKey), right);\n return true;\n }\n\n // Prevent any other characters\n this.throwInput = false;\n return false;\n }\n\n /**\n * Formatting of just processed value while keeping the cursor position\n *\n * @param {Event} e\n * @private\n */\n }, {\n key: \"_formatValue\",\n value: function _formatValue(e) {\n //TODO Break apart and simplify this really long function\n var elementValue = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(this.domElement);\n var _this$_getUnformatted7 = this._getUnformattedLeftAndRightPartAroundTheSelection(),\n _this$_getUnformatted8 = _slicedToArray(_this$_getUnformatted7, 1),\n left = _this$_getUnformatted8[0];\n\n // No grouping separator and no currency sign\n if ((this.settings.digitGroupSeparator === '' || this.settings.digitGroupSeparator !== '' && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].contains(elementValue, this.settings.digitGroupSeparator)) && (this.settings.currencySymbol === '' || this.settings.currencySymbol !== '' && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].contains(elementValue, this.settings.currencySymbol))) {\n var _elementValue$split = elementValue.split(this.settings.decimalCharacter),\n _elementValue$split2 = _slicedToArray(_elementValue$split, 1),\n subParts = _elementValue$split2[0];\n var negativeSign = '';\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNegative(subParts, this.settings.negativeSignCharacter)) {\n negativeSign = this.settings.negativeSignCharacter;\n subParts = subParts.replace(this.settings.negativeSignCharacter, '');\n left = left.replace('-', ''); // Here we modify the unformatted value (with the 'normal' minus sign)\n }\n\n // Strip leading zero on positive value if needed\n if (negativeSign === '' && subParts.length > this.settings.mIntPos && left.charAt(0) === '0') {\n left = left.slice(1);\n }\n\n // Strip leading zero on negative value if needed\n if (negativeSign === this.settings.negativeSignCharacter && subParts.length > this.settings.mIntNeg && left.charAt(0) === '0') {\n left = left.slice(1);\n }\n if (!this.isTrailingNegative) {\n // Only add the minus sign if it's needed on that side of the numbers\n left = \"\".concat(negativeSign).concat(left);\n }\n }\n var value = this.constructor._addGroupSeparators(elementValue, this.settings, this.isFocused, this.rawValue);\n var position = value.length;\n if (value) {\n // Prepare regexp which searches for cursor position from unformatted left part\n var leftAr = left.split('');\n\n // Fixes caret position with trailing minus sign\n if ((this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.suffix || this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.prefix && this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) && leftAr[0] === this.settings.negativeSignCharacter && !this.settings.isNegativeSignAllowed) {\n leftAr.shift(); // Remove the negative sign character\n\n if ((this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Backspace || this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Delete) && this.caretFix) {\n if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix && this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.left || this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix && this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.suffix) {\n leftAr.push(this.settings.negativeSignCharacter);\n this.caretFix = e.type === 'keydown';\n }\n if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix && this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.right) {\n var signParts = this.settings.currencySymbol.split('');\n var escapeChr = ['\\\\', '^', '$', '.', '|', '?', '*', '+', '(', ')', '['];\n var escapedParts = [];\n signParts.forEach(function (i, miniParts) {\n miniParts = signParts[i];\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isInArray(miniParts, escapeChr)) {\n escapedParts.push('\\\\' + miniParts);\n } else {\n escapedParts.push(miniParts);\n }\n });\n if (this.eventKey === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Backspace && this.settings.negativeSignCharacter === '-') {\n escapedParts.push('-');\n }\n\n // Pushing the escaped sign\n leftAr.push(escapedParts.join(''));\n this.caretFix = e.type === 'keydown';\n }\n }\n }\n for (var i = 0; i < leftAr.length; i++) {\n if (!leftAr[i].match('\\\\d')) {\n leftAr[i] = '\\\\' + leftAr[i]; // Escapes the decimal character\n }\n }\n\n // Generates the regex that will search for the cursor position in the formatted value\n var leftReg;\n if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n leftReg = new RegExp(\"^.*?\".concat(leftAr.join('.*?')));\n } else {\n // prefix is assumed\n leftReg = new RegExp(\"^.*?[\".concat(this.settings.currencySymbol, \"]*\").concat(leftAr.join('.*?'))); // Fixes issue #647 when using a currency that has some characters in it that matches the value we just entered (i.e. numbers in the currency)\n }\n\n // Search cursor position in formatted value\n var newLeft = value.match(leftReg);\n if (newLeft) {\n position = newLeft[0].length;\n\n // If the positive sign is shown, calculate the caret position accordingly\n if (this.settings.showPositiveSign) {\n if (position === 0 && newLeft.input.charAt(0) === this.settings.positiveSignCharacter) {\n position = newLeft.input.indexOf(this.settings.currencySymbol) === 1 ? this.settings.currencySymbol.length + 1 : 1;\n }\n if (position === 0 && newLeft.input.charAt(this.settings.currencySymbol.length) === this.settings.positiveSignCharacter) {\n position = this.settings.currencySymbol.length + 1;\n }\n }\n\n // If we are just before the sign which is in prefix position\n if ((position === 0 && value.charAt(0) !== this.settings.negativeSignCharacter || position === 1 && value.charAt(0) === this.settings.negativeSignCharacter) && this.settings.currencySymbol && this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix) {\n // Place caret after prefix sign\n //TODO Should the test be 'isNegative' instead of 'isNegativeStrict' in order to search for '-' everywhere in the string?\n position = this.settings.currencySymbol.length + (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNegativeStrict(value, this.settings.negativeSignCharacter) ? 1 : 0);\n }\n } else {\n if (this.settings.currencySymbol && this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n // If we could not find a place for cursor and have a sign as a suffix\n // Place caret before suffix currency sign\n position -= this.settings.currencySymbol.length;\n }\n if (this.settings.suffixText) {\n // If we could not find a place for cursor and have a suffix\n // Place caret before suffix\n position -= this.settings.suffixText.length;\n }\n }\n }\n\n // Only update the value if it has changed. This prevents modifying the selection, if any.\n if (value !== elementValue) {\n this._setElementValue(value, false);\n this._setCaretPosition(position);\n }\n this.formatted = true; //TODO Rename `this.formatted` to `this._formatExecuted`, since it's possible this function does not need to format anything (in the case where the keycode is dropped for instance)\n }\n\n /**\n * Serialize the form child element values to a string, or an Array.\n * The output format is defined with the `formatType` argument.\n * This is loosely based upon http://stackoverflow.com/a/40705993/2834898.\n *\n * @param {HTMLFormElement} form\n * @param {boolean} intoAnArray If `true`, instead of generating a string, it generates an Array.\n * @param {string} formatType If `'unformatted'`, then the AutoNumeric elements values are unformatted, if `'localized'`, then the AutoNumeric elements values are localized, and if `'formatted'`, then the AutoNumeric elements values are kept formatted. In either way, this function does not modify the value of each DOM element, but only affect the value that is returned by that serialize function.\n * @param {string} serializedSpaceCharacter Can either be the '+' character, or the '%20' string.\n * @param {string|null} forcedOutputFormat If set, then this is the format that is used for the localization, instead of the default `outputFormat` option.\n * @returns {string|Array}\n * @private\n */\n }], [{\n key: \"version\",\n value:\n // Those static declarations are only used by the IDE, to prevent error messages not finding those fields declarations\n\n /**\n * Return the autoNumeric version number (for debugging purpose)\n *\n * @returns {string}\n */\n function version() {\n return '4.10.6';\n }\n }, {\n key: \"_setArgumentsValues\",\n value: function _setArgumentsValues(arg1, arg2, arg3) {\n // Basic check on the argument count\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(arg1)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError('At least one valid parameter is needed in order to initialize an AutoNumeric object');\n }\n\n // Prepare the arguments in order to create the AutoNumeric object with the right values\n // Test the argument types\n var isArg1Element = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isElement(arg1);\n var isArg1String = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(arg1);\n var isArg2Object = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isObject(arg2);\n var isArg2Array = Array.isArray(arg2) && arg2.length > 0;\n var isArg2Number = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNumberOrArabic(arg2) || arg2 === '';\n var isArg2PreDefinedOptionName = this._isPreDefinedOptionValid(arg2);\n var isArg2Null = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(arg2);\n var isArg2EmptyString = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isEmptyString(arg2);\n var isArg3Object = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isObject(arg3);\n var isArg3Array = Array.isArray(arg3) && arg3.length > 0;\n var isArg3Null = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(arg3);\n var isArg3PreDefinedOptionName = this._isPreDefinedOptionValid(arg3);\n\n // Given the parameters passed, sort the data and return a stable state before the initialization\n var domElement;\n var userOptions;\n var initialValue;\n\n //TODO Simplify those tests -->\n if (isArg1Element && isArg2Null && isArg3Null) {\n // new AutoNumeric(domElement); // With the default options\n domElement = arg1;\n initialValue = null;\n userOptions = null;\n } else if (isArg1Element && isArg2Number && isArg3Null) {\n // new AutoNumeric(domElement, 12345.789); // With the default options, and an initial value\n // new AutoNumeric(domElement, '12345.789');\n domElement = arg1;\n initialValue = arg2;\n userOptions = null;\n } else if (isArg1Element && isArg2Object && isArg3Null) {\n // new AutoNumeric(domElement, { options }); // With one option object\n domElement = arg1;\n initialValue = null;\n userOptions = arg2;\n } else if (isArg1Element && isArg2PreDefinedOptionName && isArg3Null) {\n // new AutoNumeric(domElement, 'euroPos'); // With one pre-defined option name\n domElement = arg1;\n initialValue = null;\n userOptions = this._getOptionObject(arg2);\n } else if (isArg1Element && isArg2Array && isArg3Null) {\n // new AutoNumeric(domElement, [{ options1 }, { options2 }]); // With multiple option objects (the latest option overwriting the previous ones)\n domElement = arg1;\n initialValue = null;\n userOptions = this.mergeOptions(arg2);\n } else if (isArg1Element && (isArg2Null || isArg2EmptyString) && isArg3Object) {\n // new AutoNumeric(domElement, null, { options }); // With one option object\n domElement = arg1;\n initialValue = null;\n userOptions = arg3;\n } else if (isArg1Element && (isArg2Null || isArg2EmptyString) && isArg3Array) {\n // new AutoNumeric(domElement, null, [{ options1 }, { options2 }]); // With multiple option objects\n domElement = arg1;\n initialValue = null;\n userOptions = this.mergeOptions(arg3);\n } else if (isArg1String && isArg2Null && isArg3Null) {\n // new AutoNumeric('.myCssClass > input');\n domElement = document.querySelector(arg1);\n initialValue = null;\n userOptions = null;\n } else if (isArg1String && isArg2Object && isArg3Null) {\n // new AutoNumeric('.myCssClass > input', { options });\n domElement = document.querySelector(arg1);\n initialValue = null;\n userOptions = arg2;\n } else if (isArg1String && isArg2PreDefinedOptionName && isArg3Null) {\n // new AutoNumeric('.myCssClass > input', 'euroPos');\n domElement = document.querySelector(arg1);\n initialValue = null;\n userOptions = this._getOptionObject(arg2);\n } else if (isArg1String && isArg2Array && isArg3Null) {\n // new AutoNumeric('.myCssClass > input', [{ options1 }, { options2 }]); // With multiple option objects\n domElement = document.querySelector(arg1);\n initialValue = null;\n userOptions = this.mergeOptions(arg2);\n } else if (isArg1String && (isArg2Null || isArg2EmptyString) && isArg3Object) {\n // new AutoNumeric('.myCssClass > input', null, { options });\n domElement = document.querySelector(arg1);\n initialValue = null;\n userOptions = arg3;\n } else if (isArg1String && (isArg2Null || isArg2EmptyString) && isArg3Array) {\n // new AutoNumeric('.myCssClass > input', null, [{ options1 }, { options2 }]); // With multiple option objects\n domElement = document.querySelector(arg1);\n initialValue = null;\n userOptions = this.mergeOptions(arg3);\n } else if (isArg1String && isArg2Number && isArg3Null) {\n // new AutoNumeric('.myCssClass > input', 12345.789);\n // new AutoNumeric('.myCssClass > input', '12345.789');\n // new AutoNumeric('.myCssClass > input', '');\n domElement = document.querySelector(arg1);\n initialValue = arg2;\n userOptions = null;\n } else if (isArg1String && isArg2Number && isArg3Object) {\n // new AutoNumeric('.myCssClass > input', 12345.789, { options });\n // new AutoNumeric('.myCssClass > input', '12345.789', { options });\n // new AutoNumeric('.myCssClass > input', '', { options });\n domElement = document.querySelector(arg1);\n initialValue = arg2;\n userOptions = arg3;\n } else if (isArg1String && isArg2Number && isArg3PreDefinedOptionName) {\n // new AutoNumeric('.myCssClass > input', 12345.789, 'euroPos');\n // new AutoNumeric('.myCssClass > input', '12345.789', 'euroPos');\n // new AutoNumeric('.myCssClass > input', '', 'euroPos');\n domElement = document.querySelector(arg1);\n initialValue = arg2;\n userOptions = this._getOptionObject(arg3);\n } else if (isArg1String && isArg2Number && isArg3Array) {\n // new AutoNumeric('.myCssClass > input', 12345.789, [{ options1 }, 'euroPos', { options2 }]);\n // new AutoNumeric('.myCssClass > input', '12345.789', [{ options1 }, 'euroPos', { options2 }]);\n // new AutoNumeric('.myCssClass > input', '', [{ options1 }, 'euroPos', { options2 }]);\n domElement = document.querySelector(arg1);\n initialValue = arg2;\n userOptions = this.mergeOptions(arg3);\n } else if (isArg1Element && isArg2Number && isArg3Object) {\n // new AutoNumeric(domElement, 12345.789, { options });\n // new AutoNumeric(domElement, '12345.789', { options });\n // new AutoNumeric(domElement, '', { options });\n domElement = arg1;\n initialValue = arg2;\n userOptions = arg3;\n } else if (isArg1Element && isArg2Number && isArg3PreDefinedOptionName) {\n // new AutoNumeric(domElement, 12345.789, 'euroPos');\n // new AutoNumeric(domElement, '12345.789', 'euroPos');\n // new AutoNumeric(domElement, '', 'euroPos');\n domElement = arg1;\n initialValue = arg2;\n userOptions = this._getOptionObject(arg3);\n } else if (isArg1Element && isArg2Number && isArg3Array) {\n // new AutoNumeric(domElement, 12345.789, [{ options1 }, { options2 }]);\n // new AutoNumeric(domElement, '12345.789', [{ options1 }, { options2 }]);\n // new AutoNumeric(domElement, '', [{ options1 }, { options2 }]);\n domElement = arg1;\n initialValue = arg2;\n userOptions = this.mergeOptions(arg3);\n } else {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The parameters given to the AutoNumeric object are not valid, '\".concat(arg1, \"', '\").concat(arg2, \"' and '\").concat(arg3, \"' given.\"));\n }\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(domElement)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The selector '\".concat(arg1, \"' did not select any valid DOM element. Please check on which element you called AutoNumeric.\"));\n }\n return {\n domElement: domElement,\n initialValue: initialValue,\n userOptions: userOptions\n };\n }\n\n /**\n * Merge the option objects found in the given array `optionsArray`.\n * If a `string` is found, then we try to get the related pre-defined option using that string as its name.\n * When merging the options, the latest option overwrite any previously set. This allows to fine tune a pre-defined option for instance.\n *\n * @param {Array} optionsArray\n * @returns {{}}\n */\n }, {\n key: \"mergeOptions\",\n value: function mergeOptions(optionsArray) {\n var _this13 = this;\n // This allows the user to use multiple options (strings or objects) in an array, and overwrite the previous one with the next option element ; this is useful to tune the wanted format\n var mergedOptions = {};\n optionsArray.forEach(function (optionObjectOrPredefinedOptionString) {\n _extends(mergedOptions, _this13._getOptionObject(optionObjectOrPredefinedOptionString));\n });\n return mergedOptions;\n }\n\n /**\n * Return `true` if the given pre-defined option name is an attribute of the `AutoNumeric.predefinedOptions` object\n *\n * @param {string} preDefinedOptionName\n * @returns {boolean}\n * @private\n */\n }, {\n key: \"_isPreDefinedOptionValid\",\n value: function _isPreDefinedOptionValid(preDefinedOptionName) {\n return Object.prototype.hasOwnProperty.call(AutoNumeric.predefinedOptions, preDefinedOptionName);\n }\n\n /**\n * Return an option object based on the given parameter.\n * If `optionObjectOrPredefinedName` is as string, then we retrieve the pre-defined option object, if it's an object, we use it as is.\n *\n * @param {object|string} optionObjectOrPredefinedName\n * @returns {object}\n */\n }, {\n key: \"_getOptionObject\",\n value: function _getOptionObject(optionObjectOrPredefinedName) {\n var options;\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(optionObjectOrPredefinedName)) {\n options = AutoNumeric.getPredefinedOptions()[optionObjectOrPredefinedName];\n if (options === void 0 || options === null) {\n // If the given pre-defined name does not exist, warn that something is wrong, and continue the execution of the initialization\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].warning(\"The given pre-defined option [\".concat(optionObjectOrPredefinedName, \"] is not recognized by autoNumeric. Please check that pre-defined option name.\"), true);\n }\n } else {\n // A `settings` object\n options = optionObjectOrPredefinedName;\n }\n return options;\n }\n }, {\n key: \"_doesFormHandlerListExists\",\n value: function _doesFormHandlerListExists() {\n var type = _typeof(window.aNFormHandlerMap);\n return type !== 'undefined' && type === 'object';\n }\n\n /**\n * Create the global form handler list on the `window` object.\n *\n * @private\n */\n }, {\n key: \"_createFormHandlerList\",\n value: function _createFormHandlerList() {\n window.aNFormHandlerMap = new Map(); // I would have used a `WeakMap` here, but that does not allow using non-object for keys\n }\n }, {\n key: \"_checkValuesToStringsArray\",\n value: function _checkValuesToStringsArray(key, stringsArray) {\n return _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isInArray(String(key), stringsArray);\n }\n\n /**\n * Static helper for checking if the given `key` is found in the settings' `valuesToStrings` option object.\n *\n * @param {number|string} key\n * @param {object} settings\n * @returns {boolean}\n * @private\n */\n }, {\n key: \"_checkValuesToStringsSettings\",\n value: function _checkValuesToStringsSettings(key, settings) {\n return this._checkValuesToStringsArray(key, Object.keys(settings.valuesToStrings));\n }\n\n /**\n * Static helper for checking if the given `value` is found in the settings' `valuesToStrings` option object.\n *\n * @param {number|string} value\n * @param {object} settings\n * @returns {boolean}\n * @private\n */\n }, {\n key: \"_checkStringsToValuesSettings\",\n value: function _checkStringsToValuesSettings(value, settings) {\n return this._checkValuesToStringsArray(value, Object.values(settings.valuesToStrings));\n }\n }, {\n key: \"_unformatAltHovered\",\n value: function _unformatAltHovered(anElement) {\n anElement.hoveredWithAlt = true;\n anElement.unformat();\n }\n\n /**\n * Reformat the given AutoNumeric element, and update the `hoveredWithAlt` variable.\n *\n * @param {AutoNumeric} anElement\n * @private\n */\n }, {\n key: \"_reformatAltHovered\",\n value: function _reformatAltHovered(anElement) {\n anElement.hoveredWithAlt = false;\n anElement.reformat();\n }\n\n /**\n * Return an array of autoNumeric elements, child of the element passed as a parameter.\n *\n * @param {HTMLElement} formNode\n * @returns {Array}\n * @private\n */\n }, {\n key: \"_getChildANInputElement\",\n value: function _getChildANInputElement(formNode) {\n var _this14 = this;\n //FIXME test this\n var inputList = formNode.getElementsByTagName('input');\n\n // Loop this list and keep only the inputs that are managed by AutoNumeric\n var autoNumericInputs = [];\n var inputElements = Array.prototype.slice.call(inputList, 0);\n inputElements.forEach(function (input) {\n if (_this14.test(input)) {\n autoNumericInputs.push(input);\n }\n });\n return autoNumericInputs;\n }\n\n // Static methods\n /**\n * Test if the given DOM element, or the element selected by the given selector string is already managed by AutoNumeric (if it has been initialized on the current page).\n *\n * @param {HTMLElement|string} domElementOrSelector Accepts either directly a DOM element to test, or a string selector (that will return one and only one element, if any)\n * @returns {boolean}\n */\n }, {\n key: \"test\",\n value: function test(domElementOrSelector) {\n return this._isInGlobalList(_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].domElement(domElementOrSelector));\n }\n\n /**\n * Create a WeakMap with the given name.\n *\n * @param {string} weakMapName\n * @private\n */\n }, {\n key: \"_createWeakMap\",\n value: function _createWeakMap(weakMapName) {\n window[weakMapName] = new WeakMap();\n }\n\n /**\n * Create a list of all the AutoNumeric elements that are initialized on the current page.\n * This is needed in order to determine if a given dom element is already managed by autoNumeric.\n * This uses a WeakMap in order to limit potential garbage collection problems.\n * (cf. my tests on http://codepen.io/AnotherLinuxUser/pen/pRQGaM?editors=1011)\n * @private\n */\n }, {\n key: \"_createGlobalList\",\n value: function _createGlobalList() {\n // The check that this global list does not exist already is done in the add and remove functions already\n this.autoNumericGlobalListName = 'autoNumericGlobalList'; //XXX This looks weird to set a variable on `this.` in a static method, but that really declare that variable like a static property\n // Note: I should not get any memory leaks for referencing the DOM element in the `value`, this DOM element also being the `key`, according to the spec : http://www.ecma-international.org/ecma-262/6.0/#sec-weakmap-objects\n this._createWeakMap(this.autoNumericGlobalListName);\n }\n\n /**\n * Return `true` if the global AutoNumeric element list exists.\n *\n * @returns {boolean}\n * @private\n */\n }, {\n key: \"_doesGlobalListExists\",\n value: function _doesGlobalListExists() {\n var type = _typeof(window[this.autoNumericGlobalListName]);\n return type !== 'undefined' && type === 'object';\n }\n\n /**\n * Add the given object to the global AutoNumeric element list.\n *\n * @param {AutoNumeric} autoNumericObject\n * @private\n */\n }, {\n key: \"_addToGlobalList\",\n value: function _addToGlobalList(autoNumericObject) {\n if (!this._doesGlobalListExists()) {\n this._createGlobalList();\n }\n var domElement = autoNumericObject.node();\n // This checks if the object is not already in the global list before adding it.\n // This could happen if an AutoNumeric element is initialized, then the DOM element is removed directly via `removeChild` (hence the reference does not get removed from the global list), then it get recreated and initialized again\n if (this._isInGlobalList(domElement)) {\n if (this._getFromGlobalList(domElement) === this) {\n // Do not add this AutoNumeric object again since it's already in that global list\n return;\n } else {\n // Print a warning to warn that the domElement already has a reference in the global map (but we cannot for sure starts deleting those old references since they could still be used by another AutoNumeric object)\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].warning(\"A reference to the DOM element you just initialized already exists in the global AutoNumeric element list. Please make sure to not initialize the same DOM element multiple times.\", autoNumericObject.getSettings().showWarnings);\n }\n }\n window[this.autoNumericGlobalListName].set(domElement, autoNumericObject);\n }\n\n /**\n * Remove the given object from the global AutoNumeric element list.\n *\n * @param {AutoNumeric} autoNumericObject\n * @private\n */\n }, {\n key: \"_removeFromGlobalList\",\n value: function _removeFromGlobalList(autoNumericObject) {\n //FIXME test this\n if (this._doesGlobalListExists()) {\n window[this.autoNumericGlobalListName][\"delete\"](autoNumericObject.node());\n }\n }\n\n /**\n * Return the value associated to the key `domElement` passed as a parameter.\n * The value is the AutoNumeric object that manages the DOM element `domElement`.\n *\n * @param {HTMLElement|HTMLInputElement} domElement\n * @returns {null|AutoNumeric}\n * @private\n */\n }, {\n key: \"_getFromGlobalList\",\n value: function _getFromGlobalList(domElement) {\n //FIXME test this\n if (this._doesGlobalListExists()) {\n return window[this.autoNumericGlobalListName].get(domElement);\n }\n return null;\n }\n\n /**\n * Check if the given DOM element is in the global AutoNumeric element list.\n *\n * @param {HTMLElement|HTMLInputElement} domElement\n * @returns {boolean}\n * @private\n */\n }, {\n key: \"_isInGlobalList\",\n value: function _isInGlobalList(domElement) {\n //FIXME test this\n if (!this._doesGlobalListExists()) {\n return false;\n }\n return window[this.autoNumericGlobalListName].has(domElement);\n }\n }, {\n key: \"validate\",\n value: function validate(userOptions) {\n var shouldExtendDefaultOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var originalOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefinedOrNullOrEmpty(userOptions) || !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isObject(userOptions)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The userOptions are invalid ; it should be a valid object, [\".concat(userOptions, \"] given.\"));\n }\n var isOriginalOptionAnObject = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isObject(originalOptions);\n if (!isOriginalOptionAnObject && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(originalOptions)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The 'originalOptions' parameter is invalid ; it should either be a valid option object or `null`, [\".concat(userOptions, \"] given.\"));\n }\n\n // If the user used old options, we convert them to new ones\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(userOptions)) {\n this._convertOldOptionsToNewOnes(userOptions);\n }\n\n // The user can choose if the `userOptions` has already been extended with the default options, or not\n var options;\n if (shouldExtendDefaultOptions) {\n options = _extends({}, this.getDefaultConfig(), userOptions);\n } else {\n options = userOptions;\n }\n\n // First things first, we test that the `showWarnings` option is valid\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isTrueOrFalseString(options.showWarnings) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBoolean(options.showWarnings)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The debug option 'showWarnings' is invalid ; it should be either 'true' or 'false', [\".concat(options.showWarnings, \"] given.\"));\n }\n\n // Define the regular expressions needed for the following tests\n var testPositiveInteger = /^[0-9]+$/;\n var testNumericalCharacters = /[0-9]+/;\n // const testFloatAndPossibleNegativeSign = /^-?[0-9]+(\\.?[0-9]+)$/;\n var testFloatOrIntegerAndPossibleNegativeSign = /^-?[0-9]+(\\.?[0-9]+)?$/;\n var testPositiveFloatOrInteger = /^[0-9]+(\\.?[0-9]+)?$/;\n\n // Then tests the options individually\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isTrueOrFalseString(options.allowDecimalPadding) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBoolean(options.allowDecimalPadding) && options.allowDecimalPadding !== AutoNumeric.options.allowDecimalPadding.floats && !(_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNumber(options.allowDecimalPadding) && options.allowDecimalPadding > 0)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The decimal padding option 'allowDecimalPadding' is invalid ; it should either be `false`, `true`, `'floats'` or a positive integer superior to 0, [\".concat(options.allowDecimalPadding, \"] given.\"));\n }\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNumber(options.allowDecimalPadding) && options.allowDecimalPadding > options.decimalPlaces) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].warning(\"Setting 'allowDecimalPadding' to a number [\".concat(options.allowDecimalPadding, \"] superior to the current 'decimalPlaces' settings [\").concat(options.decimalPlaces, \"] is useless, since the padding will not be shown.\"), options.showWarnings);\n }\n if ((options.allowDecimalPadding === AutoNumeric.options.allowDecimalPadding.never || options.allowDecimalPadding === 'false') && (options.decimalPlaces !== AutoNumeric.options.decimalPlaces.none || options.decimalPlacesShownOnBlur !== AutoNumeric.options.decimalPlacesShownOnBlur.none || options.decimalPlacesShownOnFocus !== AutoNumeric.options.decimalPlacesShownOnFocus.none)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].warning(\"Setting 'allowDecimalPadding' to [\".concat(options.allowDecimalPadding, \"] will override the current 'decimalPlaces*' settings [\").concat(options.decimalPlaces, \", \").concat(options.decimalPlacesShownOnBlur, \" and \").concat(options.decimalPlacesShownOnFocus, \"].\"), options.showWarnings);\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isTrueOrFalseString(options.alwaysAllowDecimalCharacter) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBoolean(options.alwaysAllowDecimalCharacter)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The option 'alwaysAllowDecimalCharacter' is invalid ; it should either be `true` or `false`, [\".concat(options.alwaysAllowDecimalCharacter, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(options.caretPositionOnFocus) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isInArray(options.caretPositionOnFocus, [AutoNumeric.options.caretPositionOnFocus.start, AutoNumeric.options.caretPositionOnFocus.end, AutoNumeric.options.caretPositionOnFocus.decimalLeft, AutoNumeric.options.caretPositionOnFocus.decimalRight])) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The display on empty string option 'caretPositionOnFocus' is invalid ; it should either be `null`, 'focus', 'press', 'always' or 'zero', [\".concat(options.caretPositionOnFocus, \"] given.\"));\n }\n\n // Special case here for `caretPositionOnFocus` and `selectOnFocus` where we need to check the original non-tempered version of the options in order to check for conflicts, since using the default settings remove those and would prevent us warning the user that his option object is not correct.\n var optionsToUse;\n if (isOriginalOptionAnObject) {\n optionsToUse = originalOptions;\n } else {\n optionsToUse = this._correctCaretPositionOnFocusAndSelectOnFocusOptions(userOptions);\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(optionsToUse) && optionsToUse.caretPositionOnFocus !== AutoNumeric.options.caretPositionOnFocus.doNoForceCaretPosition && optionsToUse.selectOnFocus === AutoNumeric.options.selectOnFocus.select) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].warning(\"The 'selectOnFocus' option is set to 'select', which is in conflict with the 'caretPositionOnFocus' which is set to '\".concat(optionsToUse.caretPositionOnFocus, \"'. As a result, if this has been called when instantiating an AutoNumeric object, the 'selectOnFocus' option is forced to 'doNotSelect'.\"), options.showWarnings);\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isInArray(options.digitGroupSeparator, [AutoNumeric.options.digitGroupSeparator.comma, AutoNumeric.options.digitGroupSeparator.dot, AutoNumeric.options.digitGroupSeparator.normalSpace, AutoNumeric.options.digitGroupSeparator.thinSpace, AutoNumeric.options.digitGroupSeparator.narrowNoBreakSpace, AutoNumeric.options.digitGroupSeparator.noBreakSpace, AutoNumeric.options.digitGroupSeparator.noSeparator, AutoNumeric.options.digitGroupSeparator.apostrophe, AutoNumeric.options.digitGroupSeparator.arabicThousandsSeparator, AutoNumeric.options.digitGroupSeparator.dotAbove, AutoNumeric.options.digitGroupSeparator.privateUseTwo])) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The thousand separator character option 'digitGroupSeparator' is invalid ; it should be ',', '.', '\\u066C', '\\u02D9', \\\"'\\\", '\\x92', ' ', '\\u2009', '\\u202F', '\\xA0' or empty (''), [\".concat(options.digitGroupSeparator, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isTrueOrFalseString(options.showOnlyNumbersOnFocus) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBoolean(options.showOnlyNumbersOnFocus)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The 'showOnlyNumbersOnFocus' option is invalid ; it should be either 'true' or 'false', [\".concat(options.showOnlyNumbersOnFocus, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isInArray(options.digitalGroupSpacing, [AutoNumeric.options.digitalGroupSpacing.two, AutoNumeric.options.digitalGroupSpacing.twoThree, AutoNumeric.options.digitalGroupSpacing.twoScaled, AutoNumeric.options.digitalGroupSpacing.three, AutoNumeric.options.digitalGroupSpacing.four]) && !(options.digitalGroupSpacing >= 2 && options.digitalGroupSpacing <= 4)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The grouping separator option for thousands 'digitalGroupSpacing' is invalid ; it should be '2', '2t', '2s', '3', or '4', [\".concat(options.digitalGroupSpacing, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isInArray(options.decimalCharacter, [AutoNumeric.options.decimalCharacter.comma, AutoNumeric.options.decimalCharacter.dot, AutoNumeric.options.decimalCharacter.middleDot, AutoNumeric.options.decimalCharacter.arabicDecimalSeparator, AutoNumeric.options.decimalCharacter.decimalSeparatorKeySymbol])) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The decimal separator character option 'decimalCharacter' is invalid ; it should be '.', ',', '\\xB7', '\\u2396' or '\\u066B', [\".concat(options.decimalCharacter, \"] given.\"));\n }\n\n // Checks if the decimal and thousand characters are the same\n if (options.decimalCharacter === options.digitGroupSeparator) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"autoNumeric will not function properly when the decimal character 'decimalCharacter' [\".concat(options.decimalCharacter, \"] and the thousand separator 'digitGroupSeparator' [\").concat(options.digitGroupSeparator, \"] are the same character.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(options.decimalCharacterAlternative) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(options.decimalCharacterAlternative)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The alternate decimal separator character option 'decimalCharacterAlternative' is invalid ; it should be a string, [\".concat(options.decimalCharacterAlternative, \"] given.\"));\n }\n if (options.currencySymbol !== '' && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(options.currencySymbol)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The currency symbol option 'currencySymbol' is invalid ; it should be a string, [\".concat(options.currencySymbol, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isInArray(options.currencySymbolPlacement, [AutoNumeric.options.currencySymbolPlacement.prefix, AutoNumeric.options.currencySymbolPlacement.suffix])) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The placement of the currency sign option 'currencySymbolPlacement' is invalid ; it should either be 'p' (prefix) or 's' (suffix), [\".concat(options.currencySymbolPlacement, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isInArray(options.negativePositiveSignPlacement, [AutoNumeric.options.negativePositiveSignPlacement.prefix, AutoNumeric.options.negativePositiveSignPlacement.suffix, AutoNumeric.options.negativePositiveSignPlacement.left, AutoNumeric.options.negativePositiveSignPlacement.right, AutoNumeric.options.negativePositiveSignPlacement.none])) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The placement of the negative sign option 'negativePositiveSignPlacement' is invalid ; it should either be 'p' (prefix), 's' (suffix), 'l' (left), 'r' (right) or 'null', [\".concat(options.negativePositiveSignPlacement, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isTrueOrFalseString(options.showPositiveSign) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBoolean(options.showPositiveSign)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The show positive sign option 'showPositiveSign' is invalid ; it should be either 'true' or 'false', [\".concat(options.showPositiveSign, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(options.suffixText) || options.suffixText !== '' && (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNegative(options.suffixText, options.negativeSignCharacter) || testNumericalCharacters.test(options.suffixText))) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The additional suffix option 'suffixText' is invalid ; it should not contains the negative sign '\".concat(options.negativeSignCharacter, \"' nor any numerical characters, [\").concat(options.suffixText, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(options.negativeSignCharacter) || options.negativeSignCharacter.length !== 1 || _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefinedOrNullOrEmpty(options.negativeSignCharacter) || testNumericalCharacters.test(options.negativeSignCharacter)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The negative sign character option 'negativeSignCharacter' is invalid ; it should be a single character, and cannot be any numerical characters, [\".concat(options.negativeSignCharacter, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(options.positiveSignCharacter) || options.positiveSignCharacter.length !== 1 || _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefinedOrNullOrEmpty(options.positiveSignCharacter) || testNumericalCharacters.test(options.positiveSignCharacter)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The positive sign character option 'positiveSignCharacter' is invalid ; it should be a single character, and cannot be any numerical characters, [\".concat(options.positiveSignCharacter, \"] given.\\nIf you want to show the positive sign character, you need to set the `showPositiveSign` option to `true`.\"));\n }\n if (options.negativeSignCharacter === options.positiveSignCharacter) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The positive 'positiveSignCharacter' and negative 'negativeSignCharacter' sign characters cannot be identical ; [\".concat(options.negativeSignCharacter, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isTrueOrFalseString(options.negativePositiveSignBehavior) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBoolean(options.negativePositiveSignBehavior)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The option 'negativePositiveSignBehavior' is invalid ; it should be either 'true' or 'false', [\".concat(options.negativePositiveSignBehavior, \"] given.\"));\n }\n var _ref5 = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(options.negativeBracketsTypeOnBlur) ? ['', ''] : options.negativeBracketsTypeOnBlur.split(','),\n _ref6 = _slicedToArray(_ref5, 2),\n leftBracket = _ref6[0],\n rightBracket = _ref6[1];\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].contains(options.digitGroupSeparator, options.negativeSignCharacter) || _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].contains(options.decimalCharacter, options.negativeSignCharacter) || _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].contains(options.decimalCharacterAlternative, options.negativeSignCharacter) || _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].contains(leftBracket, options.negativeSignCharacter) || _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].contains(rightBracket, options.negativeSignCharacter) || _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].contains(options.suffixText, options.negativeSignCharacter)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The negative sign character option 'negativeSignCharacter' is invalid ; it should not be equal or a part of the digit separator, the decimal character, the decimal character alternative, the negative brackets or the suffix text, [\".concat(options.negativeSignCharacter, \"] given.\"));\n }\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].contains(options.digitGroupSeparator, options.positiveSignCharacter) || _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].contains(options.decimalCharacter, options.positiveSignCharacter) || _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].contains(options.decimalCharacterAlternative, options.positiveSignCharacter) || _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].contains(leftBracket, options.positiveSignCharacter) || _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].contains(rightBracket, options.positiveSignCharacter) || _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].contains(options.suffixText, options.positiveSignCharacter)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The positive sign character option 'positiveSignCharacter' is invalid ; it should not be equal or a part of the digit separator, the decimal character, the decimal character alternative, the negative brackets or the suffix text, [\".concat(options.positiveSignCharacter, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(options.overrideMinMaxLimits) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isInArray(options.overrideMinMaxLimits, [AutoNumeric.options.overrideMinMaxLimits.ceiling, AutoNumeric.options.overrideMinMaxLimits.floor, AutoNumeric.options.overrideMinMaxLimits.ignore, AutoNumeric.options.overrideMinMaxLimits.invalid])) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The override min & max limits option 'overrideMinMaxLimits' is invalid ; it should either be 'ceiling', 'floor', 'ignore' or 'invalid', [\".concat(options.overrideMinMaxLimits, \"] given.\"));\n }\n if (options.overrideMinMaxLimits !== AutoNumeric.options.overrideMinMaxLimits.invalid && options.overrideMinMaxLimits !== AutoNumeric.options.overrideMinMaxLimits.ignore && (options.minimumValue > 0 || options.maximumValue < 0)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].warning(\"You've set a `minimumValue` or a `maximumValue` excluding the value `0`. AutoNumeric will force the users to always have a valid value in the input, hence preventing them to clear the field. If you want to allow for temporary invalid values (i.e. out-of-range), you should use the 'invalid' option for the 'overrideMinMaxLimits' setting.\");\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(options.maximumValue) || !testFloatOrIntegerAndPossibleNegativeSign.test(options.maximumValue)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The maximum possible value option 'maximumValue' is invalid ; it should be a string that represents a positive or negative number, [\".concat(options.maximumValue, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(options.minimumValue) || !testFloatOrIntegerAndPossibleNegativeSign.test(options.minimumValue)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The minimum possible value option 'minimumValue' is invalid ; it should be a string that represents a positive or negative number, [\".concat(options.minimumValue, \"] given.\"));\n }\n if (parseFloat(options.minimumValue) > parseFloat(options.maximumValue)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The minimum possible value option is greater than the maximum possible value option ; 'minimumValue' [\".concat(options.minimumValue, \"] should be smaller than 'maximumValue' [\").concat(options.maximumValue, \"].\"));\n }\n if (!(_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isInt(options.decimalPlaces) && options.decimalPlaces >= 0 ||\n // If integer option\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(options.decimalPlaces) && testPositiveInteger.test(options.decimalPlaces)) // If string option\n ) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The number of decimal places option 'decimalPlaces' is invalid ; it should be a positive integer, [\".concat(options.decimalPlaces, \"] given.\"));\n }\n if (!(_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(options.decimalPlacesRawValue) || _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isInt(options.decimalPlacesRawValue) && options.decimalPlacesRawValue >= 0 ||\n // If integer option\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(options.decimalPlacesRawValue) && testPositiveInteger.test(options.decimalPlacesRawValue)) // If string option\n ) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The number of decimal places for the raw value option 'decimalPlacesRawValue' is invalid ; it should be a positive integer or `null`, [\".concat(options.decimalPlacesRawValue, \"] given.\"));\n }\n\n // Checks if the number of decimal places for the raw value is lower than the `decimalPlaces`, `decimalPlacesShownOnFocus` and/or `decimalPlacesShownOnBlur` options\n this._validateDecimalPlacesRawValue(options);\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(options.decimalPlacesShownOnFocus) && !testPositiveInteger.test(String(options.decimalPlacesShownOnFocus))) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The number of expanded decimal places option 'decimalPlacesShownOnFocus' is invalid ; it should be a positive integer or `null`, [\".concat(options.decimalPlacesShownOnFocus, \"] given.\"));\n }\n\n // Checks if the extended decimal places \"decimalPlacesShownOnFocus\" is greater than the decimal places number `decimalPlaces`\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(options.decimalPlacesShownOnFocus) && Number(options.decimalPlaces) > Number(options.decimalPlacesShownOnFocus)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].warning(\"The extended decimal places 'decimalPlacesShownOnFocus' [\".concat(options.decimalPlacesShownOnFocus, \"] should be greater than the 'decimalPlaces' [\").concat(options.decimalPlaces, \"] value. Currently, this will limit the ability of your user to manually change some of the decimal places. Do you really want to do that?\"), options.showWarnings);\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(options.divisorWhenUnfocused) && !testPositiveFloatOrInteger.test(options.divisorWhenUnfocused) || options.divisorWhenUnfocused === 0 || options.divisorWhenUnfocused === '0' || options.divisorWhenUnfocused === 1 || options.divisorWhenUnfocused === '1') {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The divisor option 'divisorWhenUnfocused' is invalid ; it should be a positive number higher than one, preferably an integer, [\".concat(options.divisorWhenUnfocused, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(options.decimalPlacesShownOnBlur) && !testPositiveInteger.test(options.decimalPlacesShownOnBlur)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The number of decimals shown when unfocused option 'decimalPlacesShownOnBlur' is invalid ; it should be a positive integer or `null`, [\".concat(options.decimalPlacesShownOnBlur, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(options.symbolWhenUnfocused) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(options.symbolWhenUnfocused)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The symbol to show when unfocused option 'symbolWhenUnfocused' is invalid ; it should be a string, [\".concat(options.symbolWhenUnfocused, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isTrueOrFalseString(options.saveValueToSessionStorage) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBoolean(options.saveValueToSessionStorage)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The save to session storage option 'saveValueToSessionStorage' is invalid ; it should be either 'true' or 'false', [\".concat(options.saveValueToSessionStorage, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isInArray(options.onInvalidPaste, [AutoNumeric.options.onInvalidPaste.error, AutoNumeric.options.onInvalidPaste.ignore, AutoNumeric.options.onInvalidPaste.clamp, AutoNumeric.options.onInvalidPaste.truncate, AutoNumeric.options.onInvalidPaste.replace])) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The paste behavior option 'onInvalidPaste' is invalid ; it should either be 'error', 'ignore', 'clamp', 'truncate' or 'replace' (cf. documentation), [\".concat(options.onInvalidPaste, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isInArray(options.roundingMethod, [AutoNumeric.options.roundingMethod.halfUpSymmetric, AutoNumeric.options.roundingMethod.halfUpAsymmetric, AutoNumeric.options.roundingMethod.halfDownSymmetric, AutoNumeric.options.roundingMethod.halfDownAsymmetric, AutoNumeric.options.roundingMethod.halfEvenBankersRounding, AutoNumeric.options.roundingMethod.upRoundAwayFromZero, AutoNumeric.options.roundingMethod.downRoundTowardZero, AutoNumeric.options.roundingMethod.toCeilingTowardPositiveInfinity, AutoNumeric.options.roundingMethod.toFloorTowardNegativeInfinity, AutoNumeric.options.roundingMethod.toNearest05, AutoNumeric.options.roundingMethod.toNearest05Alt, AutoNumeric.options.roundingMethod.upToNext05, AutoNumeric.options.roundingMethod.downToNext05])) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The rounding method option 'roundingMethod' is invalid ; it should either be 'S', 'A', 's', 'a', 'B', 'U', 'D', 'C', 'F', 'N05', 'CHF', 'U05' or 'D05' (cf. documentation), [\".concat(options.roundingMethod, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(options.negativeBracketsTypeOnBlur) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isInArray(options.negativeBracketsTypeOnBlur, [AutoNumeric.options.negativeBracketsTypeOnBlur.parentheses, AutoNumeric.options.negativeBracketsTypeOnBlur.brackets, AutoNumeric.options.negativeBracketsTypeOnBlur.chevrons, AutoNumeric.options.negativeBracketsTypeOnBlur.curlyBraces, AutoNumeric.options.negativeBracketsTypeOnBlur.angleBrackets, AutoNumeric.options.negativeBracketsTypeOnBlur.japaneseQuotationMarks, AutoNumeric.options.negativeBracketsTypeOnBlur.halfBrackets, AutoNumeric.options.negativeBracketsTypeOnBlur.whiteSquareBrackets, AutoNumeric.options.negativeBracketsTypeOnBlur.quotationMarks, AutoNumeric.options.negativeBracketsTypeOnBlur.guillemets])) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The brackets for negative values option 'negativeBracketsTypeOnBlur' is invalid ; it should either be '(,)', '[,]', '<,>', '{,}', '\\u3008,\\u3009', '\\uFF62,\\uFF63', '\\u2E24,\\u2E25', '\\u27E6,\\u27E7', '\\u2039,\\u203A' or '\\xAB,\\xBB', [\".concat(options.negativeBracketsTypeOnBlur, \"] given.\"));\n }\n if (!(_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(options.emptyInputBehavior) || _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNumber(options.emptyInputBehavior)) || !(_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isInArray(options.emptyInputBehavior, [AutoNumeric.options.emptyInputBehavior.focus, AutoNumeric.options.emptyInputBehavior.press, AutoNumeric.options.emptyInputBehavior.always, AutoNumeric.options.emptyInputBehavior.min, AutoNumeric.options.emptyInputBehavior.max, AutoNumeric.options.emptyInputBehavior.zero, AutoNumeric.options.emptyInputBehavior[\"null\"]]) || testFloatOrIntegerAndPossibleNegativeSign.test(options.emptyInputBehavior))) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The display on empty string option 'emptyInputBehavior' is invalid ; it should either be 'focus', 'press', 'always', 'min', 'max', 'zero', 'null', a number, or a string that represents a number, [\".concat(options.emptyInputBehavior, \"] given.\"));\n }\n if (options.emptyInputBehavior === AutoNumeric.options.emptyInputBehavior.zero && (options.minimumValue > 0 || options.maximumValue < 0)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The 'emptyInputBehavior' option is set to 'zero', but this value is outside of the range defined by 'minimumValue' and 'maximumValue' [\".concat(options.minimumValue, \", \").concat(options.maximumValue, \"].\"));\n }\n if (testFloatOrIntegerAndPossibleNegativeSign.test(String(options.emptyInputBehavior))) {\n if (!this._isWithinRangeWithOverrideOption(options.emptyInputBehavior, options)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The 'emptyInputBehavior' option is set to a number or a string that represents a number, but its value [\".concat(options.emptyInputBehavior, \"] is outside of the range defined by the 'minimumValue' and 'maximumValue' options [\").concat(options.minimumValue, \", \").concat(options.maximumValue, \"].\"));\n }\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isTrueOrFalseString(options.eventBubbles) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBoolean(options.eventBubbles)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The event bubbles option 'eventBubbles' is invalid ; it should be either 'true' or 'false', [\".concat(options.eventBubbles, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isTrueOrFalseString(options.eventIsCancelable) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBoolean(options.eventIsCancelable)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The event is cancelable option 'eventIsCancelable' is invalid ; it should be either 'true' or 'false', [\".concat(options.eventIsCancelable, \"] given.\"));\n }\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBoolean(options.invalidClass) || !/^-?[_a-zA-Z]+[_a-zA-Z0-9-]*$/.test(options.invalidClass)) {\n //TODO Make sure this covers all the CSS class names\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The name of the 'invalidClass' option is not a valid CSS class name ; it should not be empty, and should follow the '^-?[_a-zA-Z]+[_a-zA-Z0-9-]*$' regex, [\".concat(options.invalidClass, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isInArray(options.leadingZero, [AutoNumeric.options.leadingZero.allow, AutoNumeric.options.leadingZero.deny, AutoNumeric.options.leadingZero.keep])) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The leading zero behavior option 'leadingZero' is invalid ; it should either be 'allow', 'deny' or 'keep', [\".concat(options.leadingZero, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isTrueOrFalseString(options.formatOnPageLoad) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBoolean(options.formatOnPageLoad)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The format on initialization option 'formatOnPageLoad' is invalid ; it should be either 'true' or 'false', [\".concat(options.formatOnPageLoad, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isTrueOrFalseString(options.formulaMode) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBoolean(options.formulaMode)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The formula mode option 'formulaMode' is invalid ; it should be either 'true' or 'false', [\".concat(options.formulaMode, \"] given.\"));\n }\n if (!testPositiveInteger.test(options.historySize) || options.historySize === 0) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The history size option 'historySize' is invalid ; it should be a positive integer, [\".concat(options.historySize, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isTrueOrFalseString(options.selectNumberOnly) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBoolean(options.selectNumberOnly)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The select number only option 'selectNumberOnly' is invalid ; it should be either 'true' or 'false', [\".concat(options.selectNumberOnly, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isTrueOrFalseString(options.selectOnFocus) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBoolean(options.selectOnFocus)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The select on focus option 'selectOnFocus' is invalid ; it should be either 'true' or 'false', [\".concat(options.selectOnFocus, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(options.defaultValueOverride) && options.defaultValueOverride !== '' && !testFloatOrIntegerAndPossibleNegativeSign.test(options.defaultValueOverride)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The unformatted default value option 'defaultValueOverride' is invalid ; it should be a string that represents a positive or negative number, [\".concat(options.defaultValueOverride, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isTrueOrFalseString(options.unformatOnSubmit) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBoolean(options.unformatOnSubmit)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The remove formatting on submit option 'unformatOnSubmit' is invalid ; it should be either 'true' or 'false', [\".concat(options.unformatOnSubmit, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(options.valuesToStrings) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isObject(options.valuesToStrings)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The option 'valuesToStrings' is invalid ; it should be an object, ideally with 'key -> value' entries, [\".concat(options.valuesToStrings, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(options.outputFormat) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isInArray(options.outputFormat, [AutoNumeric.options.outputFormat.string, AutoNumeric.options.outputFormat.number, AutoNumeric.options.outputFormat.dot, AutoNumeric.options.outputFormat.negativeDot, AutoNumeric.options.outputFormat.comma, AutoNumeric.options.outputFormat.negativeComma, AutoNumeric.options.outputFormat.dotNegative, AutoNumeric.options.outputFormat.commaNegative])) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The custom locale format option 'outputFormat' is invalid ; it should either be null, 'string', 'number', '.', '-.', ',', '-,', '.-' or ',-', [\".concat(options.outputFormat, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isTrueOrFalseString(options.isCancellable) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBoolean(options.isCancellable)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The cancellable behavior option 'isCancellable' is invalid ; it should be either 'true' or 'false', [\".concat(options.isCancellable, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isTrueOrFalseString(options.modifyValueOnUpDownArrow) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBoolean(options.modifyValueOnUpDownArrow)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The increment/decrement on up and down arrow keys 'modifyValueOnUpDownArrow' is invalid ; it should be either 'true' or 'false', [\".concat(options.modifyValueOnUpDownArrow, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isTrueOrFalseString(options.modifyValueOnWheel) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBoolean(options.modifyValueOnWheel)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The increment/decrement on mouse wheel option 'modifyValueOnWheel' is invalid ; it should be either 'true' or 'false', [\".concat(options.modifyValueOnWheel, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isTrueOrFalseString(options.watchExternalChanges) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBoolean(options.watchExternalChanges)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The option 'watchExternalChanges' is invalid ; it should be either 'true' or 'false', [\".concat(options.watchExternalChanges, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isInArray(options.wheelOn, [AutoNumeric.options.wheelOn.focus, AutoNumeric.options.wheelOn.hover])) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The wheel behavior option 'wheelOn' is invalid ; it should either be 'focus' or 'hover', [\".concat(options.wheelOn, \"] given.\"));\n }\n if (!(_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(options.upDownStep) || _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNumber(options.upDownStep)) || options.upDownStep !== 'progressive' && !testPositiveFloatOrInteger.test(options.upDownStep) || Number(options.upDownStep) === 0) {\n // A step equal to '0' is rejected\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The up/down arrow step value option 'upDownStep' is invalid ; it should either be the string 'progressive', or a number or a string that represents a positive number (excluding zero), [\".concat(options.upDownStep, \"] given.\"));\n }\n if (!(_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(options.wheelStep) || _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNumber(options.wheelStep)) || options.wheelStep !== 'progressive' && !testPositiveFloatOrInteger.test(options.wheelStep) || Number(options.wheelStep) === 0) {\n // A step equal to '0' is rejected\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The wheel step value option 'wheelStep' is invalid ; it should either be the string 'progressive', or a number or a string that represents a positive number (excluding zero), [\".concat(options.wheelStep, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isInArray(options.serializeSpaces, [AutoNumeric.options.serializeSpaces.plus, AutoNumeric.options.serializeSpaces.percent])) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The space replacement character option 'serializeSpaces' is invalid ; it should either be '+' or '%20', [\".concat(options.serializeSpaces, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isTrueOrFalseString(options.noEventListeners) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBoolean(options.noEventListeners)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The option 'noEventListeners' that prevent the creation of event listeners is invalid ; it should be either 'true' or 'false', [\".concat(options.noEventListeners, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(options.styleRules) && !(_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isObject(options.styleRules) && (Object.prototype.hasOwnProperty.call(options.styleRules, 'positive') || Object.prototype.hasOwnProperty.call(options.styleRules, 'negative') || Object.prototype.hasOwnProperty.call(options.styleRules, 'ranges') || Object.prototype.hasOwnProperty.call(options.styleRules, 'userDefined')))) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The option 'styleRules' is invalid ; it should be a correctly structured object, with one or more 'positive', 'negative', 'ranges' or 'userDefined' attributes, [\".concat(options.styleRules, \"] given.\"));\n }\n\n // Deeper tests of the `styleRules` object : Check that the callback, if defined, is a function\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(options.styleRules) && Object.prototype.hasOwnProperty.call(options.styleRules, 'userDefined') && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(options.styleRules.userDefined)) {\n options.styleRules.userDefined.forEach(function (rule) {\n if (Object.prototype.hasOwnProperty.call(rule, 'callback') && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFunction(rule.callback)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The callback defined in the `userDefined` attribute is not a function, \".concat(_typeof(rule.callback), \" given.\"));\n }\n });\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(options.rawValueDivisor) && !testPositiveFloatOrInteger.test(options.rawValueDivisor) || options.rawValueDivisor === 0 || options.rawValueDivisor === '0' || options.rawValueDivisor === 1 || options.rawValueDivisor === '1') {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The raw value divisor option 'rawValueDivisor' is invalid ; it should be a positive number higher than one, preferably an integer, [\".concat(options.rawValueDivisor, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isTrueOrFalseString(options.readOnly) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBoolean(options.readOnly)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The option 'readOnly' is invalid ; it should be either 'true' or 'false', [\".concat(options.readOnly, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isTrueOrFalseString(options.unformatOnHover) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBoolean(options.unformatOnHover)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The option 'unformatOnHover' is invalid ; it should be either 'true' or 'false', [\".concat(options.unformatOnHover, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isTrueOrFalseString(options.failOnUnknownOption) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBoolean(options.failOnUnknownOption)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The debug option 'failOnUnknownOption' is invalid ; it should be either 'true' or 'false', [\".concat(options.failOnUnknownOption, \"] given.\"));\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isTrueOrFalseString(options.createLocalList) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBoolean(options.createLocalList)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The debug option 'createLocalList' is invalid ; it should be either 'true' or 'false', [\".concat(options.createLocalList, \"] given.\"));\n }\n }\n\n /**\n * Check the `decimalPlaces*` options and output the relevant warnings if some of those will get overwritten during the initialization or settings update.\n *\n * @param {object} options\n * @private\n */\n }, {\n key: \"_validateDecimalPlacesRawValue\",\n value: function _validateDecimalPlacesRawValue(options) {\n // Checks if the number of decimal places for the raw value is lower than the `decimalPlaces`, `decimalPlacesShownOnFocus` and/or `decimalPlacesShownOnBlur` options\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(options.decimalPlacesRawValue)) {\n if (options.decimalPlacesRawValue < options.decimalPlaces) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].warning(\"The number of decimal places to store in the raw value [\".concat(options.decimalPlacesRawValue, \"] is lower than the ones to display [\").concat(options.decimalPlaces, \"]. This will likely confuse your users.\\nTo solve that, you'd need to either set `decimalPlacesRawValue` to `null`, or set a number of decimal places for the raw value equal of bigger than `decimalPlaces`.\"), options.showWarnings);\n }\n if (options.decimalPlacesRawValue < options.decimalPlacesShownOnFocus) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].warning(\"The number of decimal places to store in the raw value [\".concat(options.decimalPlacesRawValue, \"] is lower than the ones shown on focus [\").concat(options.decimalPlacesShownOnFocus, \"]. This will likely confuse your users.\\nTo solve that, you'd need to either set `decimalPlacesRawValue` to `null`, or set a number of decimal places for the raw value equal of bigger than `decimalPlacesShownOnFocus`.\"), options.showWarnings);\n }\n if (options.decimalPlacesRawValue < options.decimalPlacesShownOnBlur) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].warning(\"The number of decimal places to store in the raw value [\".concat(options.decimalPlacesRawValue, \"] is lower than the ones shown when unfocused [\").concat(options.decimalPlacesShownOnBlur, \"]. This will likely confuse your users.\\nTo solve that, you'd need to either set `decimalPlacesRawValue` to `null`, or set a number of decimal places for the raw value equal of bigger than `decimalPlacesShownOnBlur`.\"), options.showWarnings);\n }\n }\n }\n\n /**\n * Return `true` if the settings/options are valid, `false` otherwise.\n *\n * @param {object} options\n * @returns {boolean}\n */\n }, {\n key: \"areSettingsValid\",\n value: function areSettingsValid(options) {\n var isValid = true;\n try {\n this.validate(options, true);\n } catch (error) {\n isValid = false;\n }\n return isValid;\n }\n\n /**\n * Return the default autoNumeric settings.\n *\n * @returns {object}\n */\n }, {\n key: \"getDefaultConfig\",\n value: function getDefaultConfig() {\n return AutoNumeric.defaultSettings;\n }\n\n /**\n * Return all the predefined language options in one object.\n * You can also access a specific language object directly by using `AutoNumeric.getPredefinedOptions().French` for instance.\n *\n * @returns {object}\n */\n }, {\n key: \"getPredefinedOptions\",\n value: function getPredefinedOptions() {\n return AutoNumeric.predefinedOptions;\n }\n\n /**\n * Analyse the given array `options` and return a single 'merged' option objet.\n * `options` can be `null`, or an array of an option objects, or an array containing another array of option objects / strings (pre-defined option names)\n *\n * @param {null|Array>} options\n * @returns {null|object}\n * @private\n */\n }, {\n key: \"_generateOptionsObjectFromOptionsArray\",\n value: function _generateOptionsObjectFromOptionsArray(options) {\n var _this15 = this;\n var optionsResult;\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefinedOrNullOrEmpty(options) || options.length === 0) {\n optionsResult = null;\n } else {\n optionsResult = {};\n if (options.length === 1 && Array.isArray(options[0])) {\n options[0].forEach(function (optionObject) {\n // Using `_getOptionObject()` allows using pre-defined names in the `options` array\n _extends(optionsResult, _this15._getOptionObject(optionObject));\n });\n } else if (options.length >= 1) {\n options.forEach(function (optionObject) {\n _extends(optionsResult, _this15._getOptionObject(optionObject));\n });\n }\n }\n return optionsResult;\n }\n\n /**\n * Format the given number (or numeric string) with the given options. This returns the formatted value as a string.\n * This can also format the given DOM element value with the given options and returns the formatted value as a string.\n * Note : This function does *not* update that element value with the newly formatted value.\n * This basically allows to get the formatted value without first having to initialize an AutoNumeric object.\n *\n * @param {number|string|HTMLElement|HTMLInputElement} numericStringOrDomElement A number, or a string that represent a javascript number, or a DOM element\n * @param {object|null} options Multiple objects can be passed, the latter overwriting the settings from the former ones\n * @returns {string|null}\n */\n }, {\n key: \"format\",\n value: function format(numericStringOrDomElement) {\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefined(numericStringOrDomElement) || numericStringOrDomElement === null) {\n return null;\n }\n\n // Retrieve the value to format\n var value;\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isElement(numericStringOrDomElement)) {\n value = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(numericStringOrDomElement);\n } else {\n value = numericStringOrDomElement;\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(value) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNumber(value)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The value \\\"\".concat(value, \"\\\" being \\\"set\\\" is not numeric and therefore cannot be used appropriately.\"));\n }\n\n // Manage options\n for (var _len5 = arguments.length, options = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n options[_key5 - 1] = arguments[_key5];\n }\n var optionsToUse = this._generateOptionsObjectFromOptionsArray(options);\n\n // Initiate a very basic settings object\n var settings = _extends({}, this.getDefaultConfig(), optionsToUse);\n settings.isNegativeSignAllowed = value < 0;\n settings.isPositiveSignAllowed = value >= 0;\n this._setBrackets(settings);\n var regex = {};\n this._cachesUsualRegularExpressions(settings, regex); // This is needed by `_stripAllNonNumberCharactersExceptCustomDecimalChar` that uses those regex\n\n // Check the validity of the `value` parameter\n // Convert the value to a numeric string, stripping unnecessary characters in the process\n var valueString = this._toNumericValue(value, settings);\n if (isNaN(Number(valueString))) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The value [\".concat(valueString, \"] that you are trying to format is not a recognized number.\"));\n }\n\n // Check if the given valueString is valid\n if (!this._isWithinRangeWithOverrideOption(valueString, settings)) {\n // Throw a custom event\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].triggerEvent(AutoNumeric.events.formatted, document, {\n oldValue: null,\n newValue: null,\n oldRawValue: null,\n newRawValue: null,\n isPristine: null,\n error: 'Range test failed',\n aNElement: null\n }, true, true);\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The value [\".concat(valueString, \"] being set falls outside of the minimumValue [\").concat(settings.minimumValue, \"] and maximumValue [\").concat(settings.maximumValue, \"] range set for this element\"));\n }\n\n // Directly format any `valuesToStrings` values, if found\n if (settings.valuesToStrings && this._checkValuesToStringsSettings(value, settings)) {\n return settings.valuesToStrings[value];\n }\n\n // Generate the `negativePositiveSignPlacement` option as needed\n this._correctNegativePositiveSignPlacementOption(settings);\n // Calculate the needed decimal places\n this._calculateDecimalPlacesOnInit(settings);\n\n // Multiply the raw value with `rawValueDivisor` if defined\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefinedOrNullOrEmpty(settings.rawValueDivisor) && settings.rawValueDivisor !== 0 &&\n // Only divide if the `rawValueDivisor` option is set\n valueString !== '' && valueString !== null) {\n // Do not modify the `valueString` if it's an empty string or null\n valueString *= settings.rawValueDivisor;\n }\n\n // Everything is ok, proceed to rounding, formatting and grouping\n valueString = this._roundFormattedValueShownOnFocus(valueString, settings);\n valueString = this._modifyNegativeSignAndDecimalCharacterForFormattedValue(valueString, settings);\n valueString = this._addGroupSeparators(valueString, settings, false, valueString);\n return valueString;\n }\n\n /**\n * Format the given DOM element value, and set the resulting value back as the element value.\n *\n * @param {HTMLElement|HTMLInputElement} domElement\n * @param {object} options\n * @returns {string|null}\n */\n }, {\n key: \"formatAndSet\",\n value: function formatAndSet(domElement) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n //FIXME test this\n var formattedValue = this.format(domElement, options);\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setElementValue(domElement, formattedValue);\n return formattedValue;\n }\n\n /**\n * Unformat the given formatted string with the given options. This returns a numeric string.\n * It can also unformat the given DOM element value with the given options and returns the unformatted numeric string.\n * Note: This does *not* update that element value.\n * This basically allows to get the unformatted value without first having to initialize an AutoNumeric object.\n *\n * @param {string|number|HTMLElement|HTMLInputElement} numericStringOrDomElement A number, or a string that represent a javascript number, or a DOM element\n * @param {object|null} options Multiple objects can be passed, the latter overwriting the settings from the former ones\n * @returns {string|number|NaN}\n */\n }, {\n key: \"unformat\",\n value: function unformat(numericStringOrDomElement) {\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNumberStrict(numericStringOrDomElement)) {\n // Giving an unformatted value should return the same unformatted value, whatever the options passed as a parameter\n return numericStringOrDomElement;\n }\n\n // Retrieve the value to unformat\n var value;\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isElement(numericStringOrDomElement)) {\n value = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(numericStringOrDomElement);\n } else {\n value = numericStringOrDomElement;\n }\n if (value === '') {\n // This allows to be coherent when serializing forms with empty inputs. Fix issue #512.\n return '';\n }\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefined(value) || value === null) {\n return null;\n }\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArray(value) || _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isObject(value)) {\n // Check the validity of the `value` parameter\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"A number or a string representing a number is needed to be able to unformat it, [\".concat(value, \"] given.\"));\n }\n\n // Manage options\n for (var _len6 = arguments.length, options = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {\n options[_key6 - 1] = arguments[_key6];\n }\n var optionsToUse = this._generateOptionsObjectFromOptionsArray(options);\n\n // Generate the settings\n var settings = _extends({}, this.getDefaultConfig(), optionsToUse);\n settings.isNegativeSignAllowed = false;\n settings.isPositiveSignAllowed = true;\n value = value.toString();\n\n // Directly unformat any `valuesToStrings` values, if found\n if (settings.valuesToStrings && this._checkStringsToValuesSettings(value, settings)) {\n return _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].objectKeyLookup(settings.valuesToStrings, value);\n }\n\n // This checks if a negative sign is anywhere in the `value`, not just on the very first character (i.e. '12345.67-')\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNegative(value, settings.negativeSignCharacter)) {\n settings.isNegativeSignAllowed = true;\n settings.isPositiveSignAllowed = false;\n } else if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(settings.negativeBracketsTypeOnBlur)) {\n var _settings$negativeBra = settings.negativeBracketsTypeOnBlur.split(',');\n var _settings$negativeBra2 = _slicedToArray(_settings$negativeBra, 2);\n settings.firstBracket = _settings$negativeBra2[0];\n settings.lastBracket = _settings$negativeBra2[1];\n if (value.charAt(0) === settings.firstBracket && value.charAt(value.length - 1) === settings.lastBracket) {\n settings.isNegativeSignAllowed = true;\n settings.isPositiveSignAllowed = false;\n value = this._removeBrackets(value, settings, false);\n }\n }\n value = this._convertToNumericString(value, settings);\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNumber(Number(value))) {\n // In case of numbers with the scientific notation (#757)\n value = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].scientificToDecimal(value);\n }\n var unwantedCharacters = new RegExp(\"[^+-0123456789.]\", 'gi');\n if (unwantedCharacters.test(value)) {\n return NaN;\n }\n\n // Generate the `negativePositiveSignPlacement` option as needed\n this._correctNegativePositiveSignPlacementOption(settings);\n // Calculate the needed decimal places\n if (settings.decimalPlacesRawValue) {\n // `originalDecimalPlacesRawValue` needs to be defined\n settings.originalDecimalPlacesRawValue = settings.decimalPlacesRawValue;\n } else {\n settings.originalDecimalPlacesRawValue = settings.decimalPlaces;\n }\n this._calculateDecimalPlacesOnInit(settings);\n\n // Divide the raw value with `rawValueDivisor` if defined\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefinedOrNullOrEmpty(settings.rawValueDivisor) && settings.rawValueDivisor !== 0 &&\n // Only divide if the `rawValueDivisor` option is set\n value !== '' && value !== null) {\n // Do not modify the `value` if it's an empty string or null\n value /= settings.rawValueDivisor;\n }\n value = this._roundRawValue(value, settings);\n value = value.replace(settings.decimalCharacter, '.'); // Here we need to convert back the decimal character to a period since `_roundValue` adds it in some cases\n value = this._toLocale(value, settings.outputFormat, settings);\n return value;\n }\n\n /**\n * Unformat the given DOM element value, and set the resulting value back as the element value.\n *\n * @param {HTMLElement|HTMLInputElement} domElement\n * @param {object} options\n * @returns {*}\n */\n }, {\n key: \"unformatAndSet\",\n value: function unformatAndSet(domElement) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n //FIXME test this\n var unformattedValue = this.unformat(domElement, options);\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setElementValue(domElement, unformattedValue);\n return unformattedValue;\n }\n\n /**\n * Unformat and localize the given formatted string with the given options. This returns a numeric string.\n * It can also unformat and localize the given DOM element value with the given options and returns the unformatted numeric string.\n * Note: This does *not* update that element value.\n * This basically allows to get the localized value without first having to initialize an AutoNumeric object.\n *\n * @param {string|number|HTMLElement|HTMLInputElement} numericStringOrDomElement\n * @param {object} settings\n * @returns {*}\n */\n }, {\n key: \"localize\",\n value: function localize(numericStringOrDomElement) {\n var settings = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var value;\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isElement(numericStringOrDomElement)) {\n value = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getElementValue(numericStringOrDomElement);\n } else {\n value = numericStringOrDomElement;\n }\n if (value === '') {\n // This allows to be coherent when serializing forms with empty inputs. Fix issue #512.\n return '';\n }\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(settings)) {\n settings = AutoNumeric.defaultSettings;\n }\n value = this.unformat(value, settings);\n\n //XXX The following code is pretty close to the one you can find in `getLocalized()`, but different enough so we won't refactor it.\n if (Number(value) === 0 && settings.leadingZero !== AutoNumeric.options.leadingZero.keep) {\n value = '0';\n }\n var outputFormatToUse;\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(settings)) {\n outputFormatToUse = settings.outputFormat;\n } else {\n outputFormatToUse = AutoNumeric.defaultSettings.outputFormat;\n }\n return this._toLocale(value, outputFormatToUse, settings);\n }\n }, {\n key: \"localizeAndSet\",\n value: function localizeAndSet(domElement) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n //FIXME test this\n var localizedValue = this.localize(domElement, options);\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setElementValue(domElement, localizedValue);\n return localizedValue;\n }\n\n /**\n * Return `true` if the given DOM element has an AutoNumeric object that manages it.\n * This function also accepts a selector string.\n *\n * @param {HTMLElement|string} domElementOrSelector Accepts either directly a DOM element to test, or a string selector (that will return one and only one element, if any)\n * @returns {boolean}\n */\n }, {\n key: \"isManagedByAutoNumeric\",\n value: function isManagedByAutoNumeric(domElementOrSelector) {\n //FIXME test this\n return this._isInGlobalList(_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].domElement(domElementOrSelector));\n }\n\n /**\n * Return the AutoNumeric object that manages the given DOM element.\n * This function also accepts a selector string.\n *\n * @param {HTMLElement|string} domElementOrSelector Accepts either directly a DOM element to test, or a string selector (that will return one and only one element, if any)\n * @returns {null|AutoNumeric}\n */\n }, {\n key: \"getAutoNumericElement\",\n value: function getAutoNumericElement(domElementOrSelector) {\n var domElement = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].domElement(domElementOrSelector);\n if (!this.isManagedByAutoNumeric(domElement)) {\n return null;\n }\n return this._getFromGlobalList(domElement);\n }\n\n /**\n * Set the given element value, and format it immediately.\n * Return `null` if no AutoNumeric object is found, else, return the AutoNumeric object.\n *\n * @param {HTMLElement|string} domElementOrSelector Either a DOM element reference, or a selector string can be used\n * @param {number|string|null} newValue The value must be a Number, a numeric string or `null` (if `emptyInputBehavior` is set to `'null'`)\n * @param {object} options A settings object that will override the current settings. Note: the update is done only if the `newValue` is defined.\n * @param {boolean} saveChangeToHistory If set to `true`, then the change is recorded in the history table\n * @returns {AutoNumeric|null}\n */\n }, {\n key: \"set\",\n value: function set(domElementOrSelector, newValue) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var saveChangeToHistory = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var domElement = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].domElement(domElementOrSelector);\n if (!this.isManagedByAutoNumeric(domElement)) {\n var showWarnings;\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(options) && Object.prototype.hasOwnProperty.call(options, 'showWarnings')) {\n showWarnings = options.showWarnings;\n } else {\n showWarnings = true;\n }\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].warning(\"Impossible to find an AutoNumeric object for the given DOM element or selector.\", showWarnings);\n return null;\n }\n return this.getAutoNumericElement(domElement).set(newValue, options, saveChangeToHistory);\n }\n\n /**\n * Return the unformatted value as a string from the given DOM element or query selector.\n * This can also return `null` if `rawValue` is null.\n *\n * @param {HTMLElement|string} domElementOrSelector\n * @param {function|null} callback\n * @returns {string|null}\n */\n }, {\n key: \"getNumericString\",\n value: function getNumericString(domElementOrSelector) {\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n return this._get(domElementOrSelector, 'getNumericString', callback);\n }\n\n /**\n * Return the current formatted value of the AutoNumeric element as a string, from the given DOM element or query selector.\n *\n * @param {HTMLElement|string} domElementOrSelector\n * @param {function|null} callback\n * @returns {string}\n */\n }, {\n key: \"getFormatted\",\n value: function getFormatted(domElementOrSelector) {\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n return this._get(domElementOrSelector, 'getFormatted', callback);\n }\n\n /**\n * Return the element unformatted value as a real Javascript number, from the given DOM element or query selector.\n * Warning: This can lead to precision problems with big numbers that should be stored as strings.\n *\n * @param {HTMLElement|string} domElementOrSelector\n * @param {function|null} callback\n * @returns {number|null}\n */\n }, {\n key: \"getNumber\",\n value: function getNumber(domElementOrSelector) {\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n return this._get(domElementOrSelector, 'getNumber', callback);\n }\n\n /**\n * DRY the code between the static `get*` functions\n *\n * @param {HTMLElement|string} domElementOrSelector\n * @param {string} getFunction The name of the non-static `get*` function as a string\n * @param {function|null} callback\n * @returns {*}\n * @private\n */\n }, {\n key: \"_get\",\n value: function _get(domElementOrSelector, getFunction) {\n var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var domElement = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].domElement(domElementOrSelector);\n if (!this.isManagedByAutoNumeric(domElement)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"Impossible to find an AutoNumeric object for the given DOM element or selector.\");\n }\n return this.getAutoNumericElement(domElement)[getFunction](callback);\n }\n\n /**\n * Returns the unformatted value following the `outputFormat` setting, from the given DOM element or query selector.\n * See the non-static `getLocalized()` method documentation for more details.\n *\n * @param {HTMLElement|string} domElementOrSelector\n * @param {null|string|function} forcedOutputFormat\n * @param {function|null} callback\n * @returns {*}\n */\n }, {\n key: \"getLocalized\",\n value: function getLocalized(domElementOrSelector) {\n var forcedOutputFormat = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var domElement = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].domElement(domElementOrSelector);\n if (!this.isManagedByAutoNumeric(domElement)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"Impossible to find an AutoNumeric object for the given DOM element or selector.\");\n }\n return this.getAutoNumericElement(domElement).getLocalized(forcedOutputFormat, callback);\n }\n }, {\n key: \"_stripAllNonNumberCharacters\",\n value: function _stripAllNonNumberCharacters(s, settings, stripZeros, isFocused) {\n return this._stripAllNonNumberCharactersExceptCustomDecimalChar(s, settings, stripZeros, isFocused).replace(settings.decimalCharacter, '.');\n }\n\n /**\n * Strip all unwanted non-number characters except the custom decimal character.\n *\n * It converts the custom negative sign and removes the positive sign (custom or not).\n * This keeps :\n * - the numbers,\n * - the normal negative sign '-' if any,\n * - and the *custom* decimal character.\n *\n * @param {string} s\n * @param {object} settings\n * @param {boolean} stripZeros If set to `false`, then the leading zero(s) are not stripped, otherwise if set to `true`, the `leadingZero` option is followed\n * @param {boolean} isFocused If the element is focused, then this is `true`\n * @returns {string|*}\n */\n }, {\n key: \"_stripAllNonNumberCharactersExceptCustomDecimalChar\",\n value: function _stripAllNonNumberCharactersExceptCustomDecimalChar(s, settings, stripZeros, isFocused) {\n //XXX Note; this function is static since we need to pass a `settings` object when calling the static `AutoNumeric.format()` method\n //TODO This function is called 10 times (sic!) on each key input, couldn't we lower that number? cf. issue #325\n s = this._normalizeCurrencySuffixAndNegativeSignCharacters(s, settings);\n\n // Then remove all the characters that are not numbers, the normal negative sign '-', or the custom decimal character (note: this also remove any custom positive sign)\n s = s.replace(settings.allowedAutoStrip, '');\n\n // Get only number string\n var m = s.match(settings.numRegAutoStrip);\n s = m ? [m[1], m[2], m[3]].join('') : '';\n if (settings.leadingZero === AutoNumeric.options.leadingZero.allow || settings.leadingZero === AutoNumeric.options.leadingZero.keep) {\n var negativeSign = '';\n var _s$split = s.split(settings.decimalCharacter),\n _s$split2 = _slicedToArray(_s$split, 2),\n integerPart = _s$split2[0],\n decimalPart = _s$split2[1];\n var modifiedIntegerPart = integerPart;\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].contains(modifiedIntegerPart, settings.negativeSignCharacter)) {\n negativeSign = settings.negativeSignCharacter;\n modifiedIntegerPart = modifiedIntegerPart.replace(settings.negativeSignCharacter, '');\n }\n\n // Strip leading zero on positive value if needed\n if (negativeSign === '' && modifiedIntegerPart.length > settings.mIntPos && modifiedIntegerPart.charAt(0) === '0') {\n modifiedIntegerPart = modifiedIntegerPart.slice(1);\n }\n\n // Strip leading zero on negative value if needed\n if (negativeSign !== '' && modifiedIntegerPart.length > settings.mIntNeg && modifiedIntegerPart.charAt(0) === '0') {\n modifiedIntegerPart = modifiedIntegerPart.slice(1);\n }\n s = \"\".concat(negativeSign).concat(modifiedIntegerPart).concat(_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefined(decimalPart) ? '' : settings.decimalCharacter + decimalPart);\n }\n if (stripZeros && settings.leadingZero === AutoNumeric.options.leadingZero.deny || !isFocused && settings.leadingZero === AutoNumeric.options.leadingZero.allow) {\n s = s.replace(settings.stripReg, '$1$2');\n }\n return s;\n }\n\n /**\n * Sets or removes brackets on negative values, depending on the focus state, which is passed as `isFocused`.\n * The focus state is 'stored' in that object property.\n *\n * @param {string} value\n * @param {object} settings\n * @param {boolean} isFocused\n * @returns {*}\n */\n }, {\n key: \"_toggleNegativeBracket\",\n value: function _toggleNegativeBracket(value, settings, isFocused) {\n //XXX Note; this function is static since we need to pass a `settings` object when calling the static `AutoNumeric.format()` method\n var result;\n if (isFocused) {\n result = this._removeBrackets(value, settings);\n } else {\n result = this._addBrackets(value, settings);\n }\n return result;\n }\n\n /**\n * Add the bracket types specified in the `settings` object, to the given string `value`.\n *\n * @param {string} value\n * @param {object} settings\n * @returns {string}\n * @private\n */\n }, {\n key: \"_addBrackets\",\n value: function _addBrackets(value, settings) {\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(settings.negativeBracketsTypeOnBlur)) {\n return value;\n }\n return \"\".concat(settings.firstBracket).concat(value.replace(settings.negativeSignCharacter, '')).concat(settings.lastBracket);\n }\n\n /**\n * Remove the bracket types specified in the `settings` object, from the given string `value`.\n *\n * @param {string} value\n * @param {object} settings\n * @param {boolean} rearrangeSignsAndValueOrder If set to `true`, then only the brackets are remove and a negative sign is added, without reordering the negative sign, currency symbol and value according to the settings.\n * @returns {string}\n * @private\n */\n }, {\n key: \"_removeBrackets\",\n value: function _removeBrackets(value, settings) {\n var rearrangeSignsAndValueOrder = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var result;\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(settings.negativeBracketsTypeOnBlur) && value.charAt(0) === settings.firstBracket) {\n // Remove the brackets if they are present\n result = value.replace(settings.firstBracket, '');\n result = result.replace(settings.lastBracket, '');\n\n // Add back the negative sign at the right place\n if (rearrangeSignsAndValueOrder) {\n // First we need to remove the currency symbol from the value, since we want to be able to add back the negative sign at the right place (including between the value and the currency sign)\n result = result.replace(settings.currencySymbol, '');\n result = this._mergeCurrencySignNegativePositiveSignAndValue(result, settings, true, false); //TODO This assume the value is negative and non-empty. Is this always the case?\n } else {\n // Here we only want to add the negative sign since we removed the brackets, without reordering\n result = \"\".concat(settings.negativeSignCharacter).concat(result);\n }\n } else {\n result = value;\n }\n return result;\n }\n\n /**\n * Analyze the `negativeBracketsTypeOnBlur` options and keep track of the first and last bracket characters to use.\n *\n * @param {object} settings\n * @private\n */\n }, {\n key: \"_setBrackets\",\n value: function _setBrackets(settings) {\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(settings.negativeBracketsTypeOnBlur)) {\n settings.firstBracket = '';\n settings.lastBracket = '';\n } else {\n // Use temporary variables to fix the MS Edge destructuring issue (see pull request #564)\n var _settings$negativeBra3 = settings.negativeBracketsTypeOnBlur.split(','),\n _settings$negativeBra4 = _slicedToArray(_settings$negativeBra3, 2),\n firstBracket = _settings$negativeBra4[0],\n lastBracket = _settings$negativeBra4[1];\n settings.firstBracket = firstBracket;\n settings.lastBracket = lastBracket;\n }\n }\n\n /**\n * Return a number as a numeric string that can be typecast to a Number that Javascript will understand.\n *\n * This function returns the given string by stripping:\n * - the currency sign (currencySymbol),\n * - the grouping separators (digitalGroupSpacing),\n * - the suffix text (suffixText),\n * - the positive sign (positiveSignCharacter),\n * - the brackets if any,\n * - by replacing the negative sign character with a hyphen,\n * - and by replacing the decimal character (decimalCharacter) by a dot.\n *\n * Lastly, it also put the negative sign back to its normal position if needed.\n * Bonus; it converts any arabic numbers found to the latin ones.\n *\n * @param {string} s\n * @param {object} settings\n * @returns {string|void|*}\n */\n }, {\n key: \"_convertToNumericString\",\n value: function _convertToNumericString(s, settings) {\n // Remove the custom brackets\n s = this._removeBrackets(s, settings, false);\n s = this._normalizeCurrencySuffixAndNegativeSignCharacters(s, settings);\n\n // Remove the grouping separators (thousands separators usually)\n s = s.replace(new RegExp(\"[\".concat(settings.digitGroupSeparator, \"]\"), 'g'), '');\n\n // Replace the decimal character by a dot\n if (settings.decimalCharacter !== '.') {\n s = s.replace(settings.decimalCharacter, '.');\n }\n\n // Move the trailing negative sign, if any, to the usual leftmost position\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNegative(s) && s.lastIndexOf('-') === s.length - 1) {\n s = s.replace('-', '');\n s = \"-\".concat(s);\n }\n\n // Replace the custom positive sign\n if (settings.showPositiveSign) {\n s = s.replace(settings.positiveSignCharacter, '');\n }\n\n // Convert arabic numbers to latin ones, if any\n var convertToNumber = settings.leadingZero !== AutoNumeric.options.leadingZero.keep;\n var temp = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].arabicToLatinNumbers(s, convertToNumber, false, false);\n if (!isNaN(temp)) {\n s = temp.toString();\n }\n return s;\n }\n\n /**\n * Removes the currency symbol and the suffix text from the given string, and replace the custom negative sign with a hyphen.\n *\n * @param {string} s\n * @param {object} settings\n * @returns {string | *}\n * @private\n */\n }, {\n key: \"_normalizeCurrencySuffixAndNegativeSignCharacters\",\n value: function _normalizeCurrencySuffixAndNegativeSignCharacters(s, settings) {\n s = String(s); // Typecast to a string, in case that the given value is a number\n\n // Remove the currency symbol\n if (settings.currencySymbol !== AutoNumeric.options.currencySymbol.none) {\n s = s.replace(settings.currencySymbol, '');\n }\n\n // Remove the suffixText\n if (settings.suffixText !== AutoNumeric.options.suffixText.none) {\n s = s.replace(settings.suffixText, '');\n }\n\n // Replace the custom negative sign with a hyphen\n if (settings.negativeSignCharacter !== AutoNumeric.options.negativeSignCharacter.hyphen) {\n s = s.replace(settings.negativeSignCharacter, '-');\n }\n return s;\n }\n\n /**\n * Converts the ISO numeric string to the locale decimal and minus sign placement.\n * See the \"outputFormat\" option definition for more details.\n * Note: If the `outputFormat` is set to a number, the custom `negativeSignCharacter` is ignored.\n *\n * @param {string|null} value The unformatted value\n * @param {string|null} locale\n * @param {object} settings\n * @returns {*}\n */\n }, {\n key: \"_toLocale\",\n value: function _toLocale(value, locale, settings) {\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(locale) || locale === AutoNumeric.options.outputFormat.string) {\n return value;\n }\n var result;\n switch (locale) {\n case AutoNumeric.options.outputFormat.number:\n result = Number(value);\n break;\n case AutoNumeric.options.outputFormat.dotNegative:\n result = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNegative(value) ? value.replace('-', '') + '-' : value;\n break;\n case AutoNumeric.options.outputFormat.comma:\n case AutoNumeric.options.outputFormat.negativeComma:\n result = value.replace('.', ',');\n break;\n case AutoNumeric.options.outputFormat.commaNegative:\n result = value.replace('.', ',');\n result = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNegative(result) ? result.replace('-', '') + '-' : result;\n break;\n // The default case\n case AutoNumeric.options.outputFormat.dot:\n case AutoNumeric.options.outputFormat.negativeDot:\n result = value;\n break;\n default:\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The given outputFormat [\".concat(locale, \"] option is not recognized.\"));\n }\n if (locale !== AutoNumeric.options.outputFormat.number && settings.negativeSignCharacter !== '-') {\n // Modify the default minus sign with the custom one, if any\n result = result.replace('-', settings.negativeSignCharacter);\n }\n return result;\n }\n }, {\n key: \"_modifyNegativeSignAndDecimalCharacterForFormattedValue\",\n value: function _modifyNegativeSignAndDecimalCharacterForFormattedValue(s, settings) {\n //XXX Note; this function is static since we need to pass a `settings` object when calling the static `AutoNumeric.format()` method\n if (settings.negativeSignCharacter !== '-') {\n s = s.replace('-', settings.negativeSignCharacter);\n }\n if (settings.decimalCharacter !== '.') {\n s = s.replace('.', settings.decimalCharacter);\n }\n return s;\n }\n\n /**\n * Return `true` if the given value is empty or is equal to the negative sign character defined in the given settings.\n *\n * @param {string} value\n * @param {object} settings\n * @returns {boolean}\n * @private\n */\n }, {\n key: \"_isElementValueEmptyOrOnlyTheNegativeSign\",\n value: function _isElementValueEmptyOrOnlyTheNegativeSign(value, settings) {\n return value === '' || value === settings.negativeSignCharacter;\n }\n\n /**\n * Return the value with the currency symbol and the suffix text ordered according to the given settings.\n *\n * @param {string} value\n * @param {object} settings\n * @param {boolean} signOnEmpty\n * @returns {*}\n * @private\n */\n }, {\n key: \"_orderValueCurrencySymbolAndSuffixText\",\n value: function _orderValueCurrencySymbolAndSuffixText(value, settings, signOnEmpty) {\n var result;\n if (settings.emptyInputBehavior === AutoNumeric.options.emptyInputBehavior.always || signOnEmpty) {\n switch (settings.negativePositiveSignPlacement) {\n case AutoNumeric.options.negativePositiveSignPlacement.left:\n case AutoNumeric.options.negativePositiveSignPlacement.prefix:\n case AutoNumeric.options.negativePositiveSignPlacement.none:\n result = value + settings.currencySymbol + settings.suffixText;\n break;\n default:\n result = settings.currencySymbol + value + settings.suffixText;\n }\n } else {\n result = value;\n }\n return result;\n }\n\n /**\n * Modify the input value by adding the group separators, as defined in the settings, and the negative brackets if needed.\n *\n * @param {string} inputValue The formatted value (i.e. with the `decimalCharacter` defined in the settings, not the raw value)\n * @param {object} settings\n * @param {boolean} isFocused\n * @param {number|string|null} currentRawValue The object current raw value (`this.rawValue`)\n * @param {number|string|null} forcedRawValue If this is set, then this rawValue is used instead of the one passed through the `settings` object. This is useful is some very specific cases where we need to set the raw value *after* settings the formatted value, using the `_addGroupSeparators()` method.\n * @returns {*}\n */\n }, {\n key: \"_addGroupSeparators\",\n value: function _addGroupSeparators(inputValue, settings, isFocused, currentRawValue) {\n var forcedRawValue = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;\n //TODO Test if `inputValue` === '', and return '' directly if that's the case,\n //XXX Note; this function is static since we need to pass a `settings` object when calling the static `AutoNumeric.format()` method\n var isValueNegative;\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(forcedRawValue)) {\n // Prefer directly testing if the raw value is negative in order for the test to be more performant than manipulating the formatted value\n isValueNegative = forcedRawValue < 0;\n } else {\n isValueNegative = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNegative(inputValue, settings.negativeSignCharacter) || _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNegativeWithBrackets(inputValue, settings.firstBracket, settings.lastBracket); // Test if the value is negative before removing the negative sign\n }\n\n inputValue = this._stripAllNonNumberCharactersExceptCustomDecimalChar(inputValue, settings, false, isFocused);\n if (this._isElementValueEmptyOrOnlyTheNegativeSign(inputValue, settings)) {\n return this._orderValueCurrencySymbolAndSuffixText(inputValue, settings, true);\n }\n var isZeroOrHasNoValue = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isZeroOrHasNoValue(inputValue);\n\n // Temporarily remove the negative sign if present\n if (isValueNegative) {\n inputValue = inputValue.replace('-', ''); // At this point the `inputValue` has been normalized with a 'normal' negative sign `'-'` //TODO Check that comment validity, since `_stripAllNonNumberCharactersExceptCustomDecimalChar` *does not* convert the negative sign\n }\n\n // Splits the string at the decimal string\n var _inputValue$split = inputValue.split(settings.decimalCharacter),\n _inputValue$split2 = _slicedToArray(_inputValue$split, 2),\n integerPart = _inputValue$split2[0],\n decimalPart = _inputValue$split2[1];\n if (settings.decimalCharacterAlternative && _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefined(decimalPart)) {\n var _inputValue$split3 = inputValue.split(settings.decimalCharacterAlternative);\n var _inputValue$split4 = _slicedToArray(_inputValue$split3, 2);\n integerPart = _inputValue$split4[0];\n decimalPart = _inputValue$split4[1];\n }\n if (settings.digitGroupSeparator !== '') {\n settings.digitalGroupSpacing = settings.digitalGroupSpacing.toString();\n var digitalGroup;\n switch (settings.digitalGroupSpacing) {\n case AutoNumeric.options.digitalGroupSpacing.twoThree:\n digitalGroup = /(\\d)((\\d)(\\d{2}?)+)$/;\n break;\n case AutoNumeric.options.digitalGroupSpacing.twoScaled:\n digitalGroup = /(\\d)((?:\\d{2}){0,2}\\d{3}(?:(?:\\d{2}){2}\\d{3})*?)$/;\n break;\n case AutoNumeric.options.digitalGroupSpacing.two:\n case AutoNumeric.options.digitalGroupSpacing.three:\n case AutoNumeric.options.digitalGroupSpacing.four:\n default:\n digitalGroup = new RegExp(\"(\\\\d)((\\\\d{\".concat(settings.digitalGroupSpacing, \"}?)+)$\"));\n }\n\n // Re-inserts the thousand separator via a regular expression\n while (digitalGroup.test(integerPart)) {\n integerPart = integerPart.replace(digitalGroup, \"$1\".concat(settings.digitGroupSeparator, \"$2\"));\n }\n }\n\n // Find out how many decimal places should be kept, depending on the object state (isFocused)\n var decimalPlacesToRoundTo;\n if (isFocused) {\n decimalPlacesToRoundTo = settings.decimalPlacesShownOnFocus;\n } else {\n decimalPlacesToRoundTo = settings.decimalPlacesShownOnBlur;\n }\n if (decimalPlacesToRoundTo !== 0 && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefined(decimalPart)) {\n if (decimalPart.length > decimalPlacesToRoundTo) {\n // Trim the excessive number of decimal places\n decimalPart = decimalPart.substring(0, decimalPlacesToRoundTo);\n }\n\n // Joins the whole number with the decimal value\n inputValue = \"\".concat(integerPart).concat(settings.decimalCharacter).concat(decimalPart);\n } else {\n // Otherwise if it's an integer\n inputValue = integerPart;\n }\n\n // Add back the negative/positive sign and the currency symbol, at the right positions\n inputValue = AutoNumeric._mergeCurrencySignNegativePositiveSignAndValue(inputValue, settings, isValueNegative, isZeroOrHasNoValue); //TODO this function is called again in `_toggleNegativeBracket` if the brackets are removed; let's DRY this\n\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(forcedRawValue)) {\n // If the raw value is not forced, use the default one from the settings object\n forcedRawValue = currentRawValue;\n }\n\n // Toggle the negative sign and brackets\n if (settings.negativeBracketsTypeOnBlur !== null && (forcedRawValue < 0 || _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNegativeStrict(inputValue, settings.negativeSignCharacter))) {\n inputValue = this._toggleNegativeBracket(inputValue, settings, isFocused);\n }\n var result;\n if (settings.suffixText) {\n result = \"\".concat(inputValue).concat(settings.suffixText);\n } else {\n result = inputValue;\n }\n return result;\n }\n\n /**\n * Return a semi-formatted string where the input value, the negative or positive sign, and the currency symbol are stitched together at the right positions, using the options set in the `settings` object.\n * Note : the `inputValue` is usually not a numeric string since the grouping symbols are already added to it at this point.\n *\n * @param {string} inputValue\n * @param {object} settings\n * @param {boolean} isValueNegative\n * @param {boolean} isZeroOrHasNoValue\n * @returns {*}\n * @throws\n * @private\n */\n }, {\n key: \"_mergeCurrencySignNegativePositiveSignAndValue\",\n value: function _mergeCurrencySignNegativePositiveSignAndValue(inputValue, settings, isValueNegative, isZeroOrHasNoValue) {\n var signToUse = '';\n if (isValueNegative) {\n signToUse = settings.negativeSignCharacter;\n } else if (settings.showPositiveSign && !isZeroOrHasNoValue) {\n signToUse = settings.positiveSignCharacter;\n }\n var result;\n if (settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix) {\n if (settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none && (isValueNegative || !isValueNegative && settings.showPositiveSign && !isZeroOrHasNoValue)) {\n switch (settings.negativePositiveSignPlacement) {\n case AutoNumeric.options.negativePositiveSignPlacement.prefix:\n case AutoNumeric.options.negativePositiveSignPlacement.left:\n result = \"\".concat(signToUse).concat(settings.currencySymbol).concat(inputValue);\n break;\n case AutoNumeric.options.negativePositiveSignPlacement.right:\n result = \"\".concat(settings.currencySymbol).concat(signToUse).concat(inputValue);\n break;\n case AutoNumeric.options.negativePositiveSignPlacement.suffix:\n result = \"\".concat(settings.currencySymbol).concat(inputValue).concat(signToUse);\n break;\n }\n } else {\n result = settings.currencySymbol + inputValue;\n }\n } else if (settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n if (settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none && (isValueNegative || !isValueNegative && settings.showPositiveSign && !isZeroOrHasNoValue)) {\n switch (settings.negativePositiveSignPlacement) {\n case AutoNumeric.options.negativePositiveSignPlacement.suffix:\n case AutoNumeric.options.negativePositiveSignPlacement.right:\n result = \"\".concat(inputValue).concat(settings.currencySymbol).concat(signToUse);\n break;\n case AutoNumeric.options.negativePositiveSignPlacement.left:\n result = \"\".concat(inputValue).concat(signToUse).concat(settings.currencySymbol);\n break;\n case AutoNumeric.options.negativePositiveSignPlacement.prefix:\n result = \"\".concat(signToUse).concat(inputValue).concat(settings.currencySymbol);\n break;\n }\n } else {\n result = inputValue + settings.currencySymbol;\n }\n }\n return result;\n }\n }, {\n key: \"_truncateZeros\",\n value: function _truncateZeros(roundedInputValue, decimalPlacesNeeded) {\n var regex;\n switch (decimalPlacesNeeded) {\n case 0:\n // Prevents padding - removes trailing zeros until the first significant digit is encountered\n regex = /(\\.(?:\\d*[1-9])?)0*$/;\n break;\n case 1:\n // Allows padding when decimalPlacesNeeded equals one - leaves one zero trailing the decimal character\n regex = /(\\.\\d(?:\\d*[1-9])?)0*$/;\n break;\n default:\n // Removes superfluous zeros after the decimalPlacesNeeded length\n regex = new RegExp(\"(\\\\.\\\\d{\".concat(decimalPlacesNeeded, \"}(?:\\\\d*[1-9])?)0*\"));\n }\n\n // If there are no decimal places, we don't need a decimal point at the end\n roundedInputValue = roundedInputValue.replace(regex, '$1');\n if (decimalPlacesNeeded === 0) {\n roundedInputValue = roundedInputValue.replace(/\\.$/, '');\n }\n return roundedInputValue;\n }\n\n /**\n * Round the given `value` with the number of decimal places to keep for the raw value.\n *\n * @param {string|null} value An unformatted numeric value\n * @param {object} settings\n * @returns {*}\n * @private\n */\n }, {\n key: \"_roundRawValue\",\n value: function _roundRawValue(value, settings) {\n return this._roundValue(value, settings, settings.decimalPlacesRawValue);\n }\n\n /**\n * Round the given `value` with the number of decimal places to show for the element if focused.\n *\n * @param {string|null} value An unformatted numeric value\n * @param {object} settings\n * @returns {*}\n * @private\n */\n }, {\n key: \"_roundFormattedValueShownOnFocus\",\n value: function _roundFormattedValueShownOnFocus(value, settings) {\n return this._roundValue(value, settings, Number(settings.decimalPlacesShownOnFocus));\n }\n\n /**\n * Round the given `value` with the number of decimal places to show for the element if unfocused.\n *\n * @param {string|null} value An unformatted numeric value\n * @param {object} settings\n * @returns {*}\n * @private\n */\n }, {\n key: \"_roundFormattedValueShownOnBlur\",\n value: function _roundFormattedValueShownOnBlur(value, settings) {\n return this._roundValue(value, settings, Number(settings.decimalPlacesShownOnBlur));\n }\n\n /**\n * Round the given `value` with the number of decimal places to show for the element based on the value of isFocused.\n *\n * @param {string|null} value An unformatted numeric value\n * @param {object} settings\n * @param {boolean} isFocused\n * @returns {*}\n * @private\n */\n }, {\n key: \"_roundFormattedValueShownOnFocusOrBlur\",\n value: function _roundFormattedValueShownOnFocusOrBlur(value, settings, isFocused) {\n if (isFocused) {\n return this._roundFormattedValueShownOnFocus(value, settings);\n } else {\n return this._roundFormattedValueShownOnBlur(value, settings);\n }\n }\n\n /**\n * Round the input value using the rounding method defined in the settings.\n * This function accepts multiple rounding methods. See the documentation for more details about those.\n *\n * Note : This is handled as text since JavaScript math functions can return inaccurate values.\n *\n * @param {string|null} inputValue An unformatted numeric value\n * @param {object} settings\n * @param {int} decimalPlacesToRoundTo\n * @returns {*}\n */\n }, {\n key: \"_roundValue\",\n value: function _roundValue(inputValue, settings, decimalPlacesToRoundTo) {\n //XXX Note; this function is static since we need to pass a `settings` object when calling the static `AutoNumeric.format()` method\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(inputValue)) {\n // Prevent rounding a `null` value\n return inputValue;\n }\n\n //TODO Divide this function to make it easier to understand\n inputValue = inputValue === '' ? '0' : inputValue.toString();\n if (settings.roundingMethod === AutoNumeric.options.roundingMethod.toNearest05 || settings.roundingMethod === AutoNumeric.options.roundingMethod.toNearest05Alt || settings.roundingMethod === AutoNumeric.options.roundingMethod.upToNext05 || settings.roundingMethod === AutoNumeric.options.roundingMethod.downToNext05) {\n return this._roundCloseTo05(inputValue, settings);\n }\n var _AutoNumeric$_prepare = AutoNumeric._prepareValueForRounding(inputValue, settings),\n _AutoNumeric$_prepare2 = _slicedToArray(_AutoNumeric$_prepare, 2),\n negativeSign = _AutoNumeric$_prepare2[0],\n preparedValue = _AutoNumeric$_prepare2[1];\n inputValue = preparedValue;\n var decimalCharacterPosition = inputValue.lastIndexOf('.');\n var inputValueHasNoDot = decimalCharacterPosition === -1; // No dot character is found in the `inputValue`\n var _inputValue$split5 = inputValue.split('.'),\n _inputValue$split6 = _slicedToArray(_inputValue$split5, 2),\n integerPart = _inputValue$split6[0],\n decimalPart = _inputValue$split6[1]; // Here the decimal character is always a period '.'\n var hasDecimals = decimalPart > 0;\n\n // If no decimals are detected\n if (!hasDecimals && (settings.allowDecimalPadding === AutoNumeric.options.allowDecimalPadding.never || settings.allowDecimalPadding === AutoNumeric.options.allowDecimalPadding.floats)) {\n // If the value decimalPart is only one or more zeroes, then it needs to be removed from the resulting string (cf. issue #652)\n return Number(inputValue) === 0 ? integerPart : \"\".concat(negativeSign).concat(integerPart);\n }\n\n // Else there are some decimal places that may need to be rounded\n // Sets the truncate zero method\n var temporaryDecimalPlacesOverride;\n if (settings.allowDecimalPadding === AutoNumeric.options.allowDecimalPadding.always || settings.allowDecimalPadding === AutoNumeric.options.allowDecimalPadding.floats) {\n temporaryDecimalPlacesOverride = decimalPlacesToRoundTo;\n } else if (settings.allowDecimalPadding > 0) {\n temporaryDecimalPlacesOverride = settings.allowDecimalPadding;\n } else {\n temporaryDecimalPlacesOverride = 0;\n }\n\n // Define the decimal position to use (use the very last position if there are no dot in the initial inputValue)\n var decimalPositionToUse = inputValueHasNoDot ? inputValue.length - 1 : decimalCharacterPosition;\n // Checks decimal places to determine if rounding is required\n var checkDecimalPlaces = inputValue.length - 1 - decimalPositionToUse;\n var inputValueRounded = '';\n\n // Check if no rounding is required\n if (checkDecimalPlaces <= decimalPlacesToRoundTo) {\n // Check if we need to pad with zeros\n inputValueRounded = inputValue;\n if (checkDecimalPlaces < temporaryDecimalPlacesOverride) {\n if (inputValueHasNoDot) {\n inputValueRounded = \"\".concat(inputValueRounded).concat(settings.decimalCharacter);\n }\n var zeros = '000000'; //TODO Change that string with a longer one to prevent having to loop numerous times in the next `while` statement?\n while (checkDecimalPlaces < temporaryDecimalPlacesOverride) {\n zeros = zeros.substring(0, temporaryDecimalPlacesOverride - checkDecimalPlaces);\n inputValueRounded += zeros;\n checkDecimalPlaces += zeros.length;\n }\n } else if (checkDecimalPlaces > temporaryDecimalPlacesOverride) {\n inputValueRounded = this._truncateZeros(inputValueRounded, temporaryDecimalPlacesOverride);\n } else if (checkDecimalPlaces === 0 && temporaryDecimalPlacesOverride === 0) {\n // Remove any trailing dot, if any\n inputValueRounded = inputValueRounded.replace(/\\.$/, '');\n }\n return Number(inputValueRounded) === 0 ? inputValueRounded : \"\".concat(negativeSign).concat(inputValueRounded);\n }\n\n // Rounded length of the string after rounding\n var roundedStrLength;\n if (inputValueHasNoDot) {\n roundedStrLength = decimalPlacesToRoundTo - 1;\n } else {\n roundedStrLength = Number(decimalPlacesToRoundTo) + Number(decimalCharacterPosition);\n }\n var lastDigit = Number(inputValue.charAt(roundedStrLength + 1));\n var inputValueArray = inputValue.substring(0, roundedStrLength + 1).split('');\n var odd;\n if (inputValue.charAt(roundedStrLength) === '.') {\n odd = inputValue.charAt(roundedStrLength - 1) % 2;\n } else {\n odd = inputValue.charAt(roundedStrLength) % 2;\n }\n if (this._shouldRoundUp(lastDigit, settings, negativeSign, odd)) {\n // Round up the last digit if required, and continue until no more 9's are found\n for (var i = inputValueArray.length - 1; i >= 0; i -= 1) {\n if (inputValueArray[i] !== '.') {\n inputValueArray[i] = +inputValueArray[i] + 1;\n if (inputValueArray[i] < 10) {\n break;\n }\n if (i > 0) {\n inputValueArray[i] = '0';\n }\n }\n }\n }\n\n // Reconstruct the string, converting any 10's to 0's\n inputValueArray = inputValueArray.slice(0, roundedStrLength + 1);\n\n // Return the rounded value\n inputValueRounded = this._truncateZeros(inputValueArray.join(''), temporaryDecimalPlacesOverride);\n return Number(inputValueRounded) === 0 ? inputValueRounded : \"\".concat(negativeSign).concat(inputValueRounded);\n }\n\n /**\n * Round the `value` when the rounding method deals with '.05'\n *\n * @param {string} value\n * @param {object} settings\n * @returns {string}\n * @private\n */\n }, {\n key: \"_roundCloseTo05\",\n value: function _roundCloseTo05(value, settings) {\n switch (settings.roundingMethod) {\n case AutoNumeric.options.roundingMethod.toNearest05:\n case AutoNumeric.options.roundingMethod.toNearest05Alt:\n value = (Math.round(value * 20) / 20).toString();\n break;\n case AutoNumeric.options.roundingMethod.upToNext05:\n value = (Math.ceil(value * 20) / 20).toString();\n break;\n default:\n value = (Math.floor(value * 20) / 20).toString();\n }\n var result;\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].contains(value, '.')) {\n result = value + '.00';\n } else if (value.length - value.indexOf('.') < 3) {\n result = value + '0';\n } else {\n result = value;\n }\n return result;\n }\n\n /**\n * Modify the given `value` in order to make it usable for the rest of the rounding function.\n * This convert the `value` to a positive one, trim any leading zeros and make sure it does not start with a leading dot.\n *\n * @param {string} value The unformatted value\n * @param {object} settings\n * @returns {[string, string]}\n * @private\n */\n }, {\n key: \"_prepareValueForRounding\",\n value: function _prepareValueForRounding(value, settings) {\n // Checks if `inputValue` is a negative value\n var negativeSign = '';\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNegativeStrict(value, '-')) {\n // The value being unformatted, we check for the minus sign\n negativeSign = '-';\n\n // Removes the negative sign that will be added back later if required\n value = value.replace('-', '');\n }\n\n // Append a zero if the first character is not a digit (then it is likely a dot)\n if (!value.match(/^\\d/)) {\n value = \"0\".concat(value);\n }\n\n // Determines if the value is equal to zero. If it is, remove the negative sign\n if (Number(value) === 0) {\n negativeSign = '';\n }\n\n // Trims leading zero's as needed\n if (Number(value) > 0 && settings.leadingZero !== AutoNumeric.options.leadingZero.keep || value.length > 0 && settings.leadingZero === AutoNumeric.options.leadingZero.allow) {\n value = value.replace(/^0*(\\d)/, '$1');\n }\n return [negativeSign, value];\n }\n\n /**\n * Return `true` if a round up should be done given the last digit, the settings and other information about the value.\n *\n * @param {number} lastDigit\n * @param {object} settings\n * @param {string} negativeSign This variable comes from `_prepareValueForRounding()`, which return `'-'` if the initial value was negative\n * @param {number} odd\n * @returns {boolean}\n * @private\n */\n }, {\n key: \"_shouldRoundUp\",\n value: function _shouldRoundUp(lastDigit, settings, negativeSign, odd) {\n return lastDigit > 4 && settings.roundingMethod === AutoNumeric.options.roundingMethod.halfUpSymmetric ||\n // Round half up symmetric\n lastDigit > 4 && settings.roundingMethod === AutoNumeric.options.roundingMethod.halfUpAsymmetric && negativeSign === '' ||\n // Round half up asymmetric positive values\n lastDigit > 5 && settings.roundingMethod === AutoNumeric.options.roundingMethod.halfUpAsymmetric && negativeSign === '-' ||\n // Round half up asymmetric negative values\n lastDigit > 5 && settings.roundingMethod === AutoNumeric.options.roundingMethod.halfDownSymmetric ||\n // Round half down symmetric\n lastDigit > 5 && settings.roundingMethod === AutoNumeric.options.roundingMethod.halfDownAsymmetric && negativeSign === '' ||\n // Round half down asymmetric positive values\n lastDigit > 4 && settings.roundingMethod === AutoNumeric.options.roundingMethod.halfDownAsymmetric && negativeSign === '-' ||\n // Round half down asymmetric negative values\n lastDigit > 5 && settings.roundingMethod === AutoNumeric.options.roundingMethod.halfEvenBankersRounding || lastDigit === 5 && settings.roundingMethod === AutoNumeric.options.roundingMethod.halfEvenBankersRounding && odd === 1 || lastDigit > 0 && settings.roundingMethod === AutoNumeric.options.roundingMethod.toCeilingTowardPositiveInfinity && negativeSign === '' || lastDigit > 0 && settings.roundingMethod === AutoNumeric.options.roundingMethod.toFloorTowardNegativeInfinity && negativeSign === '-' || lastDigit > 0 && settings.roundingMethod === AutoNumeric.options.roundingMethod.upRoundAwayFromZero; // Round up away from zero\n }\n\n /**\n * Truncates the decimal part of a number to the given number of decimal places `decimalPlacesToRoundTo`.\n *\n * @param {string} value\n * @param {object} settings\n * @param {boolean} isPaste\n * @param {int} decimalPlacesToRoundTo\n * @returns {*}\n */\n }, {\n key: \"_truncateDecimalPlaces\",\n value: function _truncateDecimalPlaces(value, settings, isPaste, decimalPlacesToRoundTo) {\n if (isPaste) {\n value = this._roundFormattedValueShownOnFocus(value, settings);\n }\n var _value$split = value.split(settings.decimalCharacter),\n _value$split2 = _slicedToArray(_value$split, 2),\n integerPart = _value$split2[0],\n decimalPart = _value$split2[1];\n\n // Truncate the decimal part to the satisfying length since we would round it anyway\n if (decimalPart && decimalPart.length > decimalPlacesToRoundTo) {\n if (decimalPlacesToRoundTo > 0) {\n var modifiedDecimalPart = decimalPart.substring(0, decimalPlacesToRoundTo);\n value = \"\".concat(integerPart).concat(settings.decimalCharacter).concat(modifiedDecimalPart);\n } else {\n value = integerPart;\n }\n }\n return value;\n }\n\n /**\n * Check if the given value is within the `minimumValue` and `maximumValue` range, while using the override options set with `overrideMinMaxLimits`.\n * The minimum and maximum limit test results are returned in an array like `[isMinimumLimitRespected, isMaximumLimitRespected]`.\n *\n * @param {string} value\n * @param {object} settings\n * @returns {[boolean, boolean]}\n */\n }, {\n key: \"_checkIfInRangeWithOverrideOption\",\n value: function _checkIfInRangeWithOverrideOption(value, settings) {\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(value) && settings.emptyInputBehavior === AutoNumeric.options.emptyInputBehavior[\"null\"] ||\n // When the `null` value is accepted as the `rawValue`, the limits are ignored\n settings.overrideMinMaxLimits === AutoNumeric.options.overrideMinMaxLimits.ignore || settings.overrideMinMaxLimits === AutoNumeric.options.overrideMinMaxLimits.invalid) {\n return [true, true];\n }\n value = value.toString();\n value = value.replace(',', '.');\n var minParse = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].parseStr(settings.minimumValue);\n var maxParse = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].parseStr(settings.maximumValue);\n var valParse = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].parseStr(value);\n var result;\n switch (settings.overrideMinMaxLimits) {\n case AutoNumeric.options.overrideMinMaxLimits.floor:\n result = [_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].testMinMax(minParse, valParse) > -1, true];\n break;\n case AutoNumeric.options.overrideMinMaxLimits.ceiling:\n result = [true, _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].testMinMax(maxParse, valParse) < 1];\n break;\n default:\n result = [_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].testMinMax(minParse, valParse) > -1, _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].testMinMax(maxParse, valParse) < 1];\n }\n return result;\n }\n\n /**\n * Returns `true` if the given value is within the `minimumValue` and `maximumValue` limits, while using the override options set with `overrideMinMaxLimits`, `false` otherwise\n *\n * @param {string} value\n * @param {object} settings\n * @returns {boolean}\n * @private\n */\n }, {\n key: \"_isWithinRangeWithOverrideOption\",\n value: function _isWithinRangeWithOverrideOption(value, settings) {\n var _this$_checkIfInRange = this._checkIfInRangeWithOverrideOption(value, settings),\n _this$_checkIfInRange2 = _slicedToArray(_this$_checkIfInRange, 2),\n minTest = _this$_checkIfInRange2[0],\n maxTest = _this$_checkIfInRange2[1];\n return minTest && maxTest;\n }\n\n /**\n * Helper function that prepares the value string for the min/max test\n *\n * @param {string} value\n * @returns {{}}\n * @private\n */\n }, {\n key: \"_cleanValueForRangeParse\",\n value: function _cleanValueForRangeParse(value) {\n value = value.toString().replace(',', '.');\n return _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].parseStr(value);\n }\n\n /**\n * Returns `true` is the value is superior or equal to the `minimumValue` limit, discarding any override options\n *\n * @param {string} value\n * @param {object} settings\n * @returns {boolean}\n * @private\n */\n }, {\n key: \"_isMinimumRangeRespected\",\n value: function _isMinimumRangeRespected(value, settings) {\n return _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].testMinMax(_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].parseStr(settings.minimumValue), this._cleanValueForRangeParse(value)) > -1;\n }\n\n /**\n * Returns `true` is the value is inferior or equal to the `maximumValue` limit, discarding any override options\n *\n * @param {string} value\n * @param {object} settings\n * @returns {boolean}\n * @private\n */\n }, {\n key: \"_isMaximumRangeRespected\",\n value: function _isMaximumRangeRespected(value, settings) {\n return _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].testMinMax(_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].parseStr(settings.maximumValue), this._cleanValueForRangeParse(value)) < 1;\n }\n }, {\n key: \"_correctNegativePositiveSignPlacementOption\",\n value: function _correctNegativePositiveSignPlacementOption(settings) {\n //XXX Note; this function is static since we need to pass a `settings` object when calling the static `AutoNumeric.format()` method\n // If negativePositiveSignPlacement is already set, we do not overwrite it\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(settings.negativePositiveSignPlacement)) {\n return;\n }\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefined(settings) && _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefinedOrNullOrEmpty(settings.negativePositiveSignPlacement) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefinedOrNullOrEmpty(settings.currencySymbol)) {\n switch (settings.currencySymbolPlacement) {\n case AutoNumeric.options.currencySymbolPlacement.suffix:\n settings.negativePositiveSignPlacement = AutoNumeric.options.negativePositiveSignPlacement.prefix; // Default -1,234.56 €\n break;\n case AutoNumeric.options.currencySymbolPlacement.prefix:\n settings.negativePositiveSignPlacement = AutoNumeric.options.negativePositiveSignPlacement.left; // Default -$1,234.56\n break;\n default:\n //\n }\n } else {\n // Sets the default value if `negativePositiveSignPlacement` is `null`\n settings.negativePositiveSignPlacement = AutoNumeric.options.negativePositiveSignPlacement.left;\n }\n }\n\n /**\n * Correct the `caretPositionOnFocus` and `selectOnFocus` options, since setting both leads to a conflict.\n * This method directly modifies the `options` object passed as a parameter, then returns it.\n * It returns `null` if the given option is `null`.\n *\n * @param {object} options The options passed as an argument by the user\n * @returns {object|null}\n * @private\n */\n }, {\n key: \"_correctCaretPositionOnFocusAndSelectOnFocusOptions\",\n value: function _correctCaretPositionOnFocusAndSelectOnFocusOptions(options) {\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(options)) {\n return null;\n }\n\n // If the user has set the `caretPositionOnFocus` option, do not set `selectOnFocus` to `true` by default\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefinedOrNullOrEmpty(options.caretPositionOnFocus) && _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefinedOrNullOrEmpty(options.selectOnFocus)) {\n options.selectOnFocus = AutoNumeric.options.selectOnFocus.doNotSelect;\n }\n\n // If the user has set the `selectOnFocus` option to `true`, set `caretPositionOnFocus` to `doNoForceCaretPosition`\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefinedOrNullOrEmpty(options.caretPositionOnFocus) && !_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefinedOrNullOrEmpty(options.selectOnFocus) && options.selectOnFocus === AutoNumeric.options.selectOnFocus.select) {\n options.caretPositionOnFocus = AutoNumeric.options.caretPositionOnFocus.doNoForceCaretPosition;\n }\n return options;\n }\n\n /**\n * Calculate the number de decimal places to be used by the AutoNumeric object, for each of its state, and for its formatted and raw value.\n * By default, the `rawValue` precision is the same as the formatted value one.\n *\n * This method is called during the AutoNumeric object initialization. This assumes some internal variable state.\n *\n * This method set the following options accordingly to their own value and the mandatory `decimalPlaces` option:\n * - decimalPlacesRawValue (nullable)\n * - decimalPlacesShownOnBlur (nullable)\n * - decimalPlacesShownOnFocus (nullable)\n *\n * Note: the `decimalPlaces` option is only used here and only serve to define those three previous options value.\n * AutoNumeric will then *only* use `decimalPlacesRawValue`, `decimalPlacesShownOnBlur` and `decimalPlacesShownOnFocus` from there.\n *\n * This method directly modifies the `settings` object passed as a parameter.\n *\n * @param {object} settings This is an object with the new settings to use.\n * @private\n */\n }, {\n key: \"_calculateDecimalPlacesOnInit\",\n value: function _calculateDecimalPlacesOnInit(settings) {\n // Check the `decimalPlaces*` options and output any warnings as needed, before modifying those options\n this._validateDecimalPlacesRawValue(settings);\n\n // Initialization phase\n //XXX This assumes at this stage, `settings.decimalPlaces` as been set from the default options\n\n // Overwrite the `decimalPlaces*` values if the `decimalPlaces*` options are not set in the `settings`\n // Sets `decimalPlacesShownOnBlur` (previously known as `scaleDecimalPlaces`)\n if (settings.decimalPlacesShownOnFocus === AutoNumeric.options.decimalPlacesShownOnFocus.useDefault) {\n settings.decimalPlacesShownOnFocus = settings.decimalPlaces;\n }\n if (settings.decimalPlacesShownOnBlur === AutoNumeric.options.decimalPlacesShownOnBlur.useDefault) {\n settings.decimalPlacesShownOnBlur = settings.decimalPlaces;\n }\n if (settings.decimalPlacesRawValue === AutoNumeric.options.decimalPlacesRawValue.useDefault) {\n settings.decimalPlacesRawValue = settings.decimalPlaces;\n }\n\n // Add the additional decimal places to the raw value\n var additionalDecimalPlacesRawValue = 0;\n if (settings.rawValueDivisor && settings.rawValueDivisor !== AutoNumeric.options.rawValueDivisor.none) {\n additionalDecimalPlacesRawValue = String(settings.rawValueDivisor).length - 1; // i.e. Dividing by '100' adds 2 decimal places to the needed precision\n if (additionalDecimalPlacesRawValue < 0) {\n additionalDecimalPlacesRawValue = 0;\n }\n }\n settings.decimalPlacesRawValue = Math.max(Math.max(settings.decimalPlacesShownOnBlur, settings.decimalPlacesShownOnFocus) + additionalDecimalPlacesRawValue, Number(settings.originalDecimalPlacesRawValue) + additionalDecimalPlacesRawValue);\n }\n\n /**\n * Recalculate the number de decimal places to be used by the AutoNumeric object, for each of its state, and for its formatted and raw value.\n * By default, the `rawValue` precision is the same as the formatted value one.\n *\n * This method is close to the one called during initialization, `_calculateDecimalPlacesOnInit()`, but with slight difference so that the `decimalPlaces*` options are correctly updated as needed.\n *\n * This methods set the following options accordingly to their own value and the mandatory `decimalPlaces` option:\n * - decimalPlacesRawValue (nullable)\n * - decimalPlacesShownOnBlur (nullable)\n * - decimalPlacesShownOnFocus (nullable)\n *\n * Note: the `decimalPlaces` option is only used here and only serve to define those three previous options value.\n * AutoNumeric will then *only* use `decimalPlacesRawValue`, `decimalPlacesShownOnBlur` and `decimalPlacesShownOnFocus` from there.\n *\n * This methods directly modifies the `settings` object passed as a parameter.\n *\n * @param {object} settings This is an object with the new settings to use.\n * @param {object} currentSettings This is the current settings (`this.settings`) used by the element.\n * @private\n */\n }, {\n key: \"_calculateDecimalPlacesOnUpdate\",\n value: function _calculateDecimalPlacesOnUpdate(settings) {\n var currentSettings = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n // Check the `decimalPlaces*` options and output any warnings as needed, before modifying those options\n this._validateDecimalPlacesRawValue(settings);\n\n // Update phase\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(currentSettings)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"When updating the settings, the previous ones should be passed as an argument.\");\n }\n var decimalPlacesInOptions = ('decimalPlaces' in settings);\n if (!(decimalPlacesInOptions || 'decimalPlacesRawValue' in settings || 'decimalPlacesShownOnFocus' in settings || 'decimalPlacesShownOnBlur' in settings || 'rawValueDivisor' in settings)) {\n // Do Nothing if no decimal places-related options are modified\n return;\n }\n\n // Overwrite the `decimalPlaces*` values if the `decimalPlaces*` options are not set in the `settings`\n if (decimalPlacesInOptions) {\n if (!('decimalPlacesShownOnFocus' in settings) || settings.decimalPlacesShownOnFocus === AutoNumeric.options.decimalPlacesShownOnFocus.useDefault) {\n settings.decimalPlacesShownOnFocus = settings.decimalPlaces;\n }\n if (!('decimalPlacesShownOnBlur' in settings) || settings.decimalPlacesShownOnBlur === AutoNumeric.options.decimalPlacesShownOnBlur.useDefault) {\n settings.decimalPlacesShownOnBlur = settings.decimalPlaces;\n }\n if (!('decimalPlacesRawValue' in settings) || settings.decimalPlacesRawValue === AutoNumeric.options.decimalPlacesRawValue.useDefault) {\n settings.decimalPlacesRawValue = settings.decimalPlaces;\n }\n } else {\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefined(settings.decimalPlacesShownOnFocus)) {\n settings.decimalPlacesShownOnFocus = currentSettings.decimalPlacesShownOnFocus;\n }\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefined(settings.decimalPlacesShownOnBlur)) {\n settings.decimalPlacesShownOnBlur = currentSettings.decimalPlacesShownOnBlur;\n }\n }\n\n // Add the additional decimal places to the raw value\n var additionalDecimalPlacesRawValue = 0;\n if (settings.rawValueDivisor && settings.rawValueDivisor !== AutoNumeric.options.rawValueDivisor.none) {\n additionalDecimalPlacesRawValue = String(settings.rawValueDivisor).length - 1; // i.e. Dividing by '100' adds 2 decimal places to the needed precision\n if (additionalDecimalPlacesRawValue < 0) {\n additionalDecimalPlacesRawValue = 0;\n }\n }\n if (!settings.decimalPlaces && !settings.decimalPlacesRawValue) {\n settings.decimalPlacesRawValue = Math.max(Math.max(settings.decimalPlacesShownOnBlur, settings.decimalPlacesShownOnFocus) + additionalDecimalPlacesRawValue, Number(currentSettings.originalDecimalPlacesRawValue) + additionalDecimalPlacesRawValue);\n } else {\n settings.decimalPlacesRawValue = Math.max(Math.max(settings.decimalPlacesShownOnBlur, settings.decimalPlacesShownOnFocus) + additionalDecimalPlacesRawValue, Number(settings.decimalPlacesRawValue) + additionalDecimalPlacesRawValue);\n }\n }\n }, {\n key: \"_cachesUsualRegularExpressions\",\n value: function _cachesUsualRegularExpressions(settings, regex) {\n // Test if there is a negative character in the string\n var negativeSignReg;\n if (settings.negativeSignCharacter !== AutoNumeric.options.negativeSignCharacter.hyphen) {\n negativeSignReg = \"([-\\\\\".concat(settings.negativeSignCharacter, \"]?)\");\n } else {\n negativeSignReg = '(-?)';\n }\n regex.aNegRegAutoStrip = negativeSignReg;\n settings.allowedAutoStrip = new RegExp(\"[^-0123456789\\\\\".concat(settings.decimalCharacter, \"]\"), 'g');\n settings.numRegAutoStrip = new RegExp(\"\".concat(negativeSignReg, \"(?:\\\\\").concat(settings.decimalCharacter, \"?([0-9]+\\\\\").concat(settings.decimalCharacter, \"[0-9]+)|([0-9]*(?:\\\\\").concat(settings.decimalCharacter, \"[0-9]*)?))\"));\n\n // Using this regex version `^${regex.aNegRegAutoStrip}0*(\\\\d|$)` entirely clear the input on blur\n settings.stripReg = new RegExp(\"^\".concat(regex.aNegRegAutoStrip, \"0*([0-9])\"));\n\n // All the characters that are accepted during the formula mode\n settings.formulaChars = new RegExp(\"[0-9\".concat(settings.decimalCharacter, \"+\\\\-*/() ]\"));\n }\n }, {\n key: \"_convertOldOptionsToNewOnes\",\n value: function _convertOldOptionsToNewOnes(options) {\n //TODO Delete this function once the old options are not used anymore\n var oldOptionsConverter = {\n // Old option names, with their corresponding new names\n aSep: 'digitGroupSeparator',\n nSep: 'showOnlyNumbersOnFocus',\n dGroup: 'digitalGroupSpacing',\n aDec: 'decimalCharacter',\n altDec: 'decimalCharacterAlternative',\n aSign: 'currencySymbol',\n pSign: 'currencySymbolPlacement',\n pNeg: 'negativePositiveSignPlacement',\n aSuffix: 'suffixText',\n oLimits: 'overrideMinMaxLimits',\n vMax: 'maximumValue',\n vMin: 'minimumValue',\n mDec: 'decimalPlacesOverride',\n eDec: 'decimalPlacesShownOnFocus',\n scaleDecimal: 'decimalPlacesShownOnBlur',\n aStor: 'saveValueToSessionStorage',\n mRound: 'roundingMethod',\n aPad: 'allowDecimalPadding',\n nBracket: 'negativeBracketsTypeOnBlur',\n wEmpty: 'emptyInputBehavior',\n lZero: 'leadingZero',\n aForm: 'formatOnPageLoad',\n sNumber: 'selectNumberOnly',\n anDefault: 'defaultValueOverride',\n unSetOnSubmit: 'unformatOnSubmit',\n outputType: 'outputFormat',\n debug: 'showWarnings',\n // Current options :\n allowDecimalPadding: true,\n alwaysAllowDecimalCharacter: true,\n caretPositionOnFocus: true,\n createLocalList: true,\n currencySymbol: true,\n currencySymbolPlacement: true,\n decimalCharacter: true,\n decimalCharacterAlternative: true,\n decimalPlaces: true,\n decimalPlacesRawValue: true,\n decimalPlacesShownOnBlur: true,\n decimalPlacesShownOnFocus: true,\n defaultValueOverride: true,\n digitalGroupSpacing: true,\n digitGroupSeparator: true,\n divisorWhenUnfocused: true,\n emptyInputBehavior: true,\n eventBubbles: true,\n eventIsCancelable: true,\n failOnUnknownOption: true,\n formatOnPageLoad: true,\n formulaMode: true,\n historySize: true,\n isCancellable: true,\n leadingZero: true,\n maximumValue: true,\n minimumValue: true,\n modifyValueOnUpDownArrow: true,\n modifyValueOnWheel: true,\n negativeBracketsTypeOnBlur: true,\n negativePositiveSignPlacement: true,\n negativeSignCharacter: true,\n negativePositiveSignBehavior: true,\n noEventListeners: true,\n onInvalidPaste: true,\n outputFormat: true,\n overrideMinMaxLimits: true,\n positiveSignCharacter: true,\n rawValueDivisor: true,\n readOnly: true,\n roundingMethod: true,\n saveValueToSessionStorage: true,\n selectNumberOnly: true,\n selectOnFocus: true,\n serializeSpaces: true,\n showOnlyNumbersOnFocus: true,\n showPositiveSign: true,\n showWarnings: true,\n styleRules: true,\n suffixText: true,\n symbolWhenUnfocused: true,\n upDownStep: true,\n unformatOnHover: true,\n unformatOnSubmit: true,\n valuesToStrings: true,\n watchExternalChanges: true,\n wheelOn: true,\n wheelStep: true,\n // Additional information that are added to the `settings` object :\n //TODO Find a way to exclude those internal data from the settings object (ideally by using another object, or better yet, class attributes) -->\n allowedAutoStrip: true,\n formulaChars: true,\n isNegativeSignAllowed: true,\n isPositiveSignAllowed: true,\n mIntNeg: true,\n mIntPos: true,\n numRegAutoStrip: true,\n originalDecimalPlaces: true,\n originalDecimalPlacesRawValue: true,\n stripReg: true\n };\n for (var option in options) {\n if (Object.prototype.hasOwnProperty.call(options, option)) {\n if (oldOptionsConverter[option] === true) {\n // If the option is a 'new' option, we continue looping\n continue;\n }\n if (Object.prototype.hasOwnProperty.call(oldOptionsConverter, option)) {\n // Else we have an 'old' option name\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].warning(\"You are using the deprecated option name '\".concat(option, \"'. Please use '\").concat(oldOptionsConverter[option], \"' instead from now on. The old option name will be dropped very soon\\u2122.\"), true);\n\n // Then we modify the initial option object to use the new options instead of the old ones\n options[oldOptionsConverter[option]] = options[option];\n delete options[option];\n } else if (options.failOnUnknownOption) {\n // ...or the option name is unknown. This means there is a problem with the options object, therefore we throw an error.\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"Option name '\".concat(option, \"' is unknown. Please fix the options passed to autoNumeric\"));\n }\n }\n }\n if ('mDec' in options) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].warning('The old `mDec` option has been deprecated in favor of more accurate options ; `decimalPlaces`, `decimalPlacesRawValue`, `decimalPlacesShownOnFocus` and `decimalPlacesShownOnBlur`.', true);\n }\n }\n }, {\n key: \"_setNegativePositiveSignPermissions\",\n value: function _setNegativePositiveSignPermissions(settings) {\n settings.isNegativeSignAllowed = settings.minimumValue < 0;\n settings.isPositiveSignAllowed = settings.maximumValue >= 0;\n }\n\n /**\n * Convert the `value` parameter that can either be :\n * - a real number,\n * - a number represented in the scientific notation (i.e. -123.4567e-6)\n * - a string representing a real number, or\n * - a string representing a localized number (with specific group separators and decimal character),\n * ...to a string representing a real 'javascript' number (i.e. '1234' or '1234.567').\n *\n * This function returns `NaN` if such conversion fails.\n *\n * @param {int|float|string} value\n * @param {object} settings\n * @returns {string|NaN}\n */\n }, {\n key: \"_toNumericValue\",\n value: function _toNumericValue(value, settings) {\n //XXX Note; this function is static since we need to pass a `settings` object when calling the static `AutoNumeric.format()` method\n var result;\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNumber(Number(value))) {\n // if (settings.decimalCharacter === '.' && AutoNumericHelper.isNumber(Number(value))) {\n // The value has either already been stripped, or a 'real' javascript number is passed as a parameter\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNumberStrict(value)) {\n value = String(value).trim(); // cf. issue #721\n }\n\n result = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].scientificToDecimal(value);\n } else {\n // Else if it's a string that `Number()` cannot typecast, then we try to convert the localized numeric string to a numeric one\n // Convert the value to a numeric string, stripping unnecessary characters in the process\n result = this._convertToNumericString(value.toString(), settings);\n\n // If the result is still not a numeric string, then we throw a warning\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNumber(Number(result))) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].warning(\"The given value \\\"\".concat(value, \"\\\" cannot be converted to a numeric one and therefore cannot be used appropriately.\"), settings.showWarnings);\n result = NaN;\n }\n }\n return result;\n }\n }, {\n key: \"_checkIfInRange\",\n value: function _checkIfInRange(value, parsedMinValue, parsedMaxValue) {\n var parsedValue = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].parseStr(value);\n return _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].testMinMax(parsedMinValue, parsedValue) > -1 && _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].testMinMax(parsedMaxValue, parsedValue) < 1;\n }\n }, {\n key: \"_shouldSkipEventKey\",\n value: function _shouldSkipEventKey(eventKeyName) {\n var isFnKeys = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isInArray(eventKeyName, _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName._allFnKeys);\n var isOSKeys = eventKeyName === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.OSLeft || eventKeyName === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.OSRight;\n var isContextMenu = eventKeyName === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.ContextMenu;\n var isSomeNonPrintableKeys = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isInArray(eventKeyName, _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName._someNonPrintableKeys);\n var isOtherNonPrintableKeys = eventKeyName === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.NumLock || eventKeyName === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.ScrollLock || eventKeyName === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Insert || eventKeyName === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Command;\n var isUnrecognizableKeys = eventKeyName === _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_1__[\"default\"].keyName.Unidentified;\n return isFnKeys || isOSKeys || isContextMenu || isSomeNonPrintableKeys || isUnrecognizableKeys || isOtherNonPrintableKeys;\n }\n }, {\n key: \"_serialize\",\n value: function _serialize(form) {\n var _this16 = this;\n var intoAnArray = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var formatType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'unformatted';\n var serializedSpaceCharacter = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '+';\n var forcedOutputFormat = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;\n var result = [];\n if (_typeof(form) === 'object' && form.nodeName.toLowerCase() === 'form') {\n Array.prototype.slice.call(form.elements).forEach(function (element) {\n if (element.name && !element.disabled && ['file', 'reset', 'submit', 'button'].indexOf(element.type) === -1) {\n if (element.type === 'select-multiple') {\n Array.prototype.slice.call(element.options).forEach(function (option) {\n if (option.selected) {\n //TODO Should we unformat/format/localize the selection option (which be default should be read-only)?\n if (intoAnArray) {\n result.push({\n name: element.name,\n value: option.value\n });\n } else {\n // into a string\n result.push(\"\".concat(encodeURIComponent(element.name), \"=\").concat(encodeURIComponent(option.value)));\n }\n }\n });\n } else if (['checkbox', 'radio'].indexOf(element.type) === -1 || element.checked) {\n var valueResult;\n if (_this16.isManagedByAutoNumeric(element)) {\n var anObject;\n switch (formatType) {\n case 'unformatted':\n anObject = _this16.getAutoNumericElement(element);\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(anObject)) {\n valueResult = _this16.unformat(element, anObject.getSettings());\n }\n break;\n case 'localized':\n anObject = _this16.getAutoNumericElement(element);\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(anObject)) {\n // Here I need to clone the setting object, otherwise I would modify it when changing the `outputFormat` option value\n var currentSettings = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].cloneObject(anObject.getSettings());\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(forcedOutputFormat)) {\n currentSettings.outputFormat = forcedOutputFormat;\n }\n valueResult = _this16.localize(element, currentSettings);\n }\n break;\n case 'formatted':\n default:\n valueResult = element.value;\n }\n } else {\n valueResult = element.value;\n }\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefined(valueResult)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError('This error should never be hit. If it has, something really wrong happened!');\n }\n if (intoAnArray) {\n result.push({\n name: element.name,\n value: valueResult\n });\n } else {\n // into a string\n result.push(\"\".concat(encodeURIComponent(element.name), \"=\").concat(encodeURIComponent(valueResult)));\n }\n }\n }\n });\n }\n var finalResult;\n if (intoAnArray) {\n // Result as an Array\n // Note: `serializedSpaceCharacter` does not affect the array result since we do not change the space character for this one\n finalResult = result;\n } else {\n // Result as a string\n finalResult = result.join('&');\n if ('+' === serializedSpaceCharacter) {\n finalResult = finalResult.replace(/%20/g, '+');\n }\n }\n return finalResult;\n }\n\n /**\n * Serialize the form values to a string, outputting numeric strings for each AutoNumeric-managed element values.\n *\n * @param {HTMLFormElement} form\n * @param {string} serializedSpaceCharacter\n * @returns {string}\n */\n }, {\n key: \"_serializeNumericString\",\n value: function _serializeNumericString(form) {\n var serializedSpaceCharacter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '+';\n return this._serialize(form, false, 'unformatted', serializedSpaceCharacter);\n }\n\n /**\n * Serialize the form values to a string, outputting the formatted value as strings for each AutoNumeric-managed elements.\n *\n * @param {HTMLFormElement} form\n * @param {string} serializedSpaceCharacter\n * @returns {string}\n */\n }, {\n key: \"_serializeFormatted\",\n value: function _serializeFormatted(form) {\n var serializedSpaceCharacter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '+';\n return this._serialize(form, false, 'formatted', serializedSpaceCharacter);\n }\n\n /**\n * Serialize the form values to a string, outputting localized strings for each AutoNumeric-managed element values.\n *\n * @param {HTMLFormElement} form\n * @param {string} serializedSpaceCharacter\n * @param {string|null} forcedOutputFormat If set, then this is the format that is used for the localization, instead of the default `outputFormat` option.\n * @returns {string}\n */\n }, {\n key: \"_serializeLocalized\",\n value: function _serializeLocalized(form) {\n var serializedSpaceCharacter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '+';\n var forcedOutputFormat = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n return this._serialize(form, false, 'localized', serializedSpaceCharacter, forcedOutputFormat);\n }\n\n /**\n * Generate an Array with the form values, outputting numeric strings for each AutoNumeric-managed element values.\n *\n * @param {HTMLFormElement} form\n * @param {string} serializedSpaceCharacter\n * @returns {Array}\n */\n }, {\n key: \"_serializeNumericStringArray\",\n value: function _serializeNumericStringArray(form) {\n var serializedSpaceCharacter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '+';\n return this._serialize(form, true, 'unformatted', serializedSpaceCharacter);\n }\n\n /**\n * Generate an Array with the form values, outputting the formatted value as strings for each AutoNumeric-managed elements.\n *\n * @param {HTMLFormElement} form\n * @param {string} serializedSpaceCharacter\n * @returns {Array}\n */\n }, {\n key: \"_serializeFormattedArray\",\n value: function _serializeFormattedArray(form) {\n var serializedSpaceCharacter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '+';\n return this._serialize(form, true, 'formatted', serializedSpaceCharacter);\n }\n\n /**\n * Generate an Array with the form values, outputting localized strings for each AutoNumeric-managed element values.\n *\n * @param {HTMLFormElement} form\n * @param {string} serializedSpaceCharacter\n * @param {string|null} forcedOutputFormat If set, then this is the format that is used for the localization, instead of the default `outputFormat` option.\n * @returns {Array}\n */\n }, {\n key: \"_serializeLocalizedArray\",\n value: function _serializeLocalizedArray(form) {\n var serializedSpaceCharacter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '+';\n var forcedOutputFormat = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n return this._serialize(form, true, 'localized', serializedSpaceCharacter, forcedOutputFormat);\n }\n }]);\n return AutoNumeric;\n}();\n/**\n * Initialize multiple DOM elements in one call (and possibly pass multiple values that will be mapped to each DOM element).\n *\n * @example\n * // Init multiple DOM elements in one call (and possibly pass multiple values that will be mapped to each DOM element)\n * [anElement1, anElement2, anElement3] = AutoNumeric.multiple([domElement1, domElement2, domElement3], { options });\n * [anElement1, anElement2, anElement3] = AutoNumeric.multiple([domElement1, domElement2, domElement3], [{ options }, 'euroPos']);\n * [anElement1, anElement2, anElement3] = AutoNumeric.multiple([domElement1, domElement2, domElement3], 12345.789, { options });\n * [anElement1, anElement2, anElement3] = AutoNumeric.multiple([domElement1, domElement2, domElement3], 12345.789, [{ options }, 'euroPos']);\n * [anElement1, anElement2, anElement3] = AutoNumeric.multiple.french([domElement1, domElement2, domElement3], [12345.789, 234.78, null], { options });\n * [anElement1, anElement2, anElement3] = AutoNumeric.multiple.french([domElement1, domElement2, domElement3], [12345.789, 234.78, null], [{ options }, 'euroPos']);\n *\n * // Special case, if a element is passed (or any other 'parent' (or 'root') DOM element), then autoNumeric will initialize each child `` elements recursively, ignoring those referenced in the `exclude` attribute\n * [anElement1, anElement2] = AutoNumeric.multiple({ rootElement: formElement }, { options });\n * [anElement1, anElement2] = AutoNumeric.multiple({ rootElement: formElement, exclude : [hiddenElement, tokenElement] }, { options });\n * [anElement1, anElement2] = AutoNumeric.multiple({ rootElement: formElement, exclude : [hiddenElement, tokenElement] }, [12345.789, null], { options });\n *\n * // If you want to select multiple elements via a css selector, then you must use the `multiple` function. Under the hood `QuerySelectorAll` is used.\n * [anElement1, anElement2] = AutoNumeric.multiple('.myCssClass > input', { options }); // This always return an Array, even if there is only one element selected\n * [anElement1, anElement2] = AutoNumeric.multiple('.myCssClass > input', [null, 12345.789], { options }); // Idem above, but with passing the initial values too\n *\n * @param {string|Array|{ rootElement: HTMLElement }|{ rootElement: HTMLElement, exclude: Array}} arg1\n * @param {number|Array|object|null} initialValue\n * @param {object|Array|null} options\n * @returns {Array}\n */\n_defineProperty(AutoNumeric, \"options\", void 0);\n_defineProperty(AutoNumeric, \"events\", void 0);\n_defineProperty(AutoNumeric, \"defaultSettings\", void 0);\n_defineProperty(AutoNumeric, \"predefinedOptions\", void 0);\n\nAutoNumeric.multiple = function (arg1) {\n var initialValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var result = [];\n\n // Analyze the arguments and transform them to make them exploitable\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isObject(initialValue)) {\n // If the user gave an option object as the second argument, instead of the initial values\n options = initialValue;\n initialValue = null;\n }\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(arg1)) {\n arg1 = _toConsumableArray(document.querySelectorAll(arg1)); // Convert a NodeList to an Array (cf. http://stackoverflow.com/a/37297292/2834898)\n } else if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isObject(arg1)) {\n if (!Object.prototype.hasOwnProperty.call(arg1, 'rootElement')) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The object passed to the 'multiple' function is invalid ; no 'rootElement' attribute found.\");\n }\n\n // Retrieve the DOM element list from the given element\n var elements = _toConsumableArray(arg1.rootElement.querySelectorAll('input'));\n if (Object.prototype.hasOwnProperty.call(arg1, 'exclude')) {\n if (!Array.isArray(arg1.exclude)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The 'exclude' array passed to the 'multiple' function is invalid.\");\n }\n\n // Filter out the excluded elements\n arg1 = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].filterOut(elements, arg1.exclude);\n } else {\n arg1 = elements;\n }\n } else if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArray(arg1)) {\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].throwError(\"The given parameters to the 'multiple' function are invalid.\");\n }\n if (arg1.length === 0) {\n var showWarnings = true;\n if (!_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNull(options) && _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBoolean(options.showWarnings)) {\n showWarnings = options.showWarnings;\n }\n _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].warning(\"No valid DOM elements were given hence no AutoNumeric objects were instantiated.\", showWarnings);\n return [];\n }\n\n // At this point, we know `arg1` is an array of DOM elements\n\n // This function can be initialized with two types of array, one for the initial values, and/or one for the options.\n // So we need to find out if an array is detected if the user passed an array of initial values, or an array of options\n // Therefore, we analyze the content of the arrays for the second and third arguments\n // ...for the second parameter :\n var isInitialValueArray = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArray(initialValue);\n var isInitialValueArrayAndNotEmpty = isInitialValueArray && initialValue.length >= 1;\n var secondArgumentIsInitialValueArray = false;\n var secondArgumentIsOptionArray = false;\n // Any of the arrays can be either an array of initial values, or an array of option object/pre-defined option names\n if (isInitialValueArrayAndNotEmpty) {\n var typeOfFirstArrayElement = _typeof(Number(initialValue[0]));\n // First we test the second argument\n secondArgumentIsInitialValueArray = typeOfFirstArrayElement === 'number' && !isNaN(Number(initialValue[0]));\n if (!secondArgumentIsInitialValueArray) {\n // If the second argument is an array, but not an array of values, check if it's instead an array of options/pre-defined option names\n if (typeOfFirstArrayElement === 'string' || isNaN(typeOfFirstArrayElement) || typeOfFirstArrayElement === 'object') {\n secondArgumentIsOptionArray = true;\n }\n }\n }\n\n // ...for the third parameter :\n var isOptionsArrayAndNotEmpty = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArray(options) && options.length >= 1;\n var thirdArgumentIsOptionArray = false;\n if (isOptionsArrayAndNotEmpty) {\n var _typeOfFirstArrayElement = _typeof(options[0]);\n if (_typeOfFirstArrayElement === 'string' || _typeOfFirstArrayElement === 'object') {\n // If the third argument is an array of options/pre-defined option names\n thirdArgumentIsOptionArray = true;\n }\n }\n\n // Depending on our findings, we generate the options variable to use `optionsToUse`, either directly, or merged\n var optionsToUse;\n if (secondArgumentIsOptionArray) {\n optionsToUse = AutoNumeric.mergeOptions(initialValue);\n } else if (thirdArgumentIsOptionArray) {\n optionsToUse = AutoNumeric.mergeOptions(options);\n } else {\n optionsToUse = options;\n }\n\n // Initialize the initial values\n var isInitialValueNumber = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isNumber(initialValue);\n var initialValueArraySize;\n if (secondArgumentIsInitialValueArray) {\n initialValueArraySize = initialValue.length;\n }\n\n // Instantiate each AutoNumeric objects\n arg1.forEach(function (domElement, index) {\n if (isInitialValueNumber) {\n // We set the same value for each element\n result.push(new AutoNumeric(domElement, initialValue, optionsToUse));\n } else if (secondArgumentIsInitialValueArray && index <= initialValueArraySize) {\n result.push(new AutoNumeric(domElement, initialValue[index], optionsToUse));\n } else {\n result.push(new AutoNumeric(domElement, null, optionsToUse));\n }\n });\n return result;\n};\n\n/***/ }),\n\n/***/ \"./src/AutoNumericDefaultSettings.js\":\n/*!*******************************************!*\\\n !*** ./src/AutoNumericDefaultSettings.js ***!\n \\*******************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AutoNumeric */ \"./src/AutoNumeric.js\");\n/* harmony import */ var _AutoNumericOptions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AutoNumericOptions */ \"./src/AutoNumericOptions.js\");\n/**\n * Default settings for AutoNumeric.js\n * @author Alexandre Bonneau \n * @copyright © 2023 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\n\n\n\n/* eslint no-unused-vars: 0 */\n\n/**\n * The defaults options.\n * These can be overridden by the following methods:\n * - HTML5 data attributes (ie. ``)\n * - Options passed to the `update` method (ie. `anElement.update({ currencySymbol: ' €' });`), or simply during the initialization (ie. `new AutoNumeric(domElement, { options });`)\n */\n_AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].defaultSettings = {\n allowDecimalPadding: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.allowDecimalPadding.always,\n alwaysAllowDecimalCharacter: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.alwaysAllowDecimalCharacter.doNotAllow,\n caretPositionOnFocus: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.caretPositionOnFocus.doNoForceCaretPosition,\n createLocalList: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.createLocalList.createList,\n currencySymbol: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.currencySymbol.none,\n currencySymbolPlacement: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.currencySymbolPlacement.prefix,\n decimalCharacter: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.decimalCharacter.dot,\n decimalCharacterAlternative: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.decimalCharacterAlternative.none,\n decimalPlaces: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.decimalPlaces.two,\n decimalPlacesRawValue: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.decimalPlacesRawValue.useDefault,\n decimalPlacesShownOnBlur: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.decimalPlacesShownOnBlur.useDefault,\n decimalPlacesShownOnFocus: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.decimalPlacesShownOnFocus.useDefault,\n defaultValueOverride: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.defaultValueOverride.doNotOverride,\n digitalGroupSpacing: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.digitalGroupSpacing.three,\n digitGroupSeparator: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.digitGroupSeparator.comma,\n divisorWhenUnfocused: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.divisorWhenUnfocused.none,\n emptyInputBehavior: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.emptyInputBehavior.focus,\n eventBubbles: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.eventBubbles.bubbles,\n eventIsCancelable: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.eventIsCancelable.isCancelable,\n failOnUnknownOption: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.failOnUnknownOption.ignore,\n formatOnPageLoad: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.formatOnPageLoad.format,\n formulaMode: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.formulaMode.disabled,\n historySize: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.historySize.medium,\n invalidClass: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.invalidClass,\n isCancellable: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.isCancellable.cancellable,\n leadingZero: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.leadingZero.deny,\n maximumValue: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.maximumValue.tenTrillions,\n minimumValue: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.minimumValue.tenTrillions,\n modifyValueOnUpDownArrow: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.modifyValueOnUpDownArrow.modifyValue,\n modifyValueOnWheel: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.modifyValueOnWheel.modifyValue,\n negativeBracketsTypeOnBlur: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.negativeBracketsTypeOnBlur.none,\n negativePositiveSignPlacement: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.negativePositiveSignPlacement.none,\n negativeSignCharacter: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.negativeSignCharacter.hyphen,\n negativePositiveSignBehavior: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.negativePositiveSignBehavior.doNotToggle,\n noEventListeners: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.noEventListeners.addEvents,\n //TODO Shouldn't we use `truncate` as the default value?\n onInvalidPaste: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.onInvalidPaste.error,\n outputFormat: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.outputFormat.none,\n overrideMinMaxLimits: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.overrideMinMaxLimits.doNotOverride,\n positiveSignCharacter: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.positiveSignCharacter.plus,\n rawValueDivisor: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.rawValueDivisor.none,\n readOnly: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.readOnly.readWrite,\n roundingMethod: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.roundingMethod.halfUpSymmetric,\n saveValueToSessionStorage: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.saveValueToSessionStorage.doNotSave,\n selectNumberOnly: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.selectNumberOnly.selectNumbersOnly,\n selectOnFocus: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.selectOnFocus.select,\n serializeSpaces: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.serializeSpaces.plus,\n showOnlyNumbersOnFocus: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.showOnlyNumbersOnFocus.showAll,\n showPositiveSign: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.showPositiveSign.hide,\n showWarnings: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.showWarnings.show,\n styleRules: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.styleRules.none,\n suffixText: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.suffixText.none,\n symbolWhenUnfocused: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.symbolWhenUnfocused.none,\n unformatOnHover: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.unformatOnHover.unformat,\n unformatOnSubmit: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.unformatOnSubmit.keepCurrentValue,\n upDownStep: '1',\n // To mimic the behavior of 'numeric'-typed input\n valuesToStrings: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.valuesToStrings.none,\n watchExternalChanges: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.watchExternalChanges.doNotWatch,\n wheelOn: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.wheelOn.focus,\n wheelStep: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.wheelStep.progressive\n};\nObject.freeze(_AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].defaultSettings);\nObject.defineProperty(_AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"], 'defaultSettings', {\n configurable: false,\n writable: false\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({});\n\n/***/ }),\n\n/***/ \"./src/AutoNumericEnum.js\":\n/*!********************************!*\\\n !*** ./src/AutoNumericEnum.js ***!\n \\********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/**\n * Enumerations for AutoNumeric.js\n * @author Alexandre Bonneau \n * @copyright © 2023 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * Object that store the helper enumerations\n * @type {{ allowedTagList: [string], keyCode: {}, fromCharCodeKeyCode: [string], keyName: {} }}\n */\nvar AutoNumericEnum = {};\n\n/**\n * List of allowed tag on which autoNumeric can be used.\n */\nAutoNumericEnum.allowedTagList = ['b', 'caption', 'cite', 'code', 'const', 'dd', 'del', 'div', 'dfn', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'input', 'ins', 'kdb', 'label', 'li', 'option', 'output', 'p', 'q', 's', 'sample', 'span', 'strong', 'td', 'th', 'u'];\nObject.freeze(AutoNumericEnum.allowedTagList);\nObject.defineProperty(AutoNumericEnum, 'allowedTagList', {\n configurable: false,\n writable: false\n});\n\n/**\n * This object is the reverse of `keyCode`, and is used to translate the key code to named keys when no valid characters can be obtained by `String.fromCharCode`.\n * This object keys correspond to the `event.keyCode` number, and returns the corresponding key name (à la event.key)\n */\nAutoNumericEnum.fromCharCodeKeyCode = {\n 0: 'LaunchCalculator',\n 8: 'Backspace',\n 9: 'Tab',\n 13: 'Enter',\n 16: 'Shift',\n 17: 'Ctrl',\n 18: 'Alt',\n 19: 'Pause',\n 20: 'CapsLock',\n 27: 'Escape',\n 32: ' ',\n 33: 'PageUp',\n 34: 'PageDown',\n 35: 'End',\n 36: 'Home',\n 37: 'ArrowLeft',\n 38: 'ArrowUp',\n 39: 'ArrowRight',\n 40: 'ArrowDown',\n 45: 'Insert',\n 46: 'Delete',\n 48: '0',\n 49: '1',\n 50: '2',\n 51: '3',\n 52: '4',\n 53: '5',\n 54: '6',\n 55: '7',\n 56: '8',\n 57: '9',\n // 65: 'a',\n // 66: 'b',\n // 67: 'c',\n // 68: 'd',\n // 69: 'e',\n // 70: 'f',\n // 71: 'g',\n // 72: 'h',\n // 73: 'i',\n // 74: 'j',\n // 75: 'k',\n // 76: 'l',\n // 77: 'm',\n // 78: 'n',\n // 79: 'o',\n // 80: 'p',\n // 81: 'q',\n // 82: 'r',\n // 83: 's',\n // 84: 't',\n // 85: 'u',\n // 86: 'v',\n // 87: 'w',\n // 88: 'x',\n // 89: 'y',\n // 90: 'z',\n 91: 'OS',\n // Note: Firefox and Chrome reports 'OS' instead of 'OSLeft'\n 92: 'OSRight',\n 93: 'ContextMenu',\n 96: '0',\n 97: '1',\n 98: '2',\n 99: '3',\n 100: '4',\n 101: '5',\n 102: '6',\n 103: '7',\n 104: '8',\n 105: '9',\n 106: '*',\n 107: '+',\n 109: '-',\n // The 'NumpadSubtract' code\n 110: '.',\n 111: '/',\n 112: 'F1',\n 113: 'F2',\n 114: 'F3',\n 115: 'F4',\n 116: 'F5',\n 117: 'F6',\n 118: 'F7',\n 119: 'F8',\n 120: 'F9',\n 121: 'F10',\n 122: 'F11',\n 123: 'F12',\n 144: 'NumLock',\n 145: 'ScrollLock',\n 173: '-',\n // The 'Minus' sign on Firefox. This is only needed when using the Selenium bot though.\n 182: 'MyComputer',\n 183: 'MyCalculator',\n 186: ';',\n 187: '=',\n 188: ',',\n 189: '-',\n // The 'Minus' sign on all other browsers\n 190: '.',\n 191: '/',\n 192: '`',\n 219: '[',\n 220: '\\\\',\n 221: ']',\n 222: '\\'',\n 224: 'Meta',\n 225: 'AltGraph'\n};\nObject.freeze(AutoNumericEnum.fromCharCodeKeyCode);\nObject.defineProperty(AutoNumericEnum, 'fromCharCodeKeyCode', {\n configurable: false,\n writable: false\n});\n\n/**\n * Wrapper variable that hold named keyboard keys with their respective key name (as set in KeyboardEvent.key).\n * Those names are listed here :\n * @link https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values\n */\nAutoNumericEnum.keyName = {\n // Special values\n Unidentified: 'Unidentified',\n AndroidDefault: 'AndroidDefault',\n // Modifier keys\n Alt: 'Alt',\n AltGr: 'AltGraph',\n CapsLock: 'CapsLock',\n // Under Chrome, e.key is empty for CapsLock\n Ctrl: 'Control',\n Fn: 'Fn',\n FnLock: 'FnLock',\n Hyper: 'Hyper',\n // 'OS' under Firefox\n Meta: 'Meta',\n OSLeft: 'OS',\n OSRight: 'OS',\n Command: 'OS',\n NumLock: 'NumLock',\n ScrollLock: 'ScrollLock',\n Shift: 'Shift',\n Super: 'Super',\n // 'OS' under Firefox\n Symbol: 'Symbol',\n SymbolLock: 'SymbolLock',\n // Whitespace keys\n Enter: 'Enter',\n Tab: 'Tab',\n Space: ' ',\n // 'Spacebar' for Firefox <37, and IE9\n\n // Navigation keys\n LeftArrow: 'ArrowLeft',\n // 'Left' for Firefox <=36, and IE9\n UpArrow: 'ArrowUp',\n // 'Up' for Firefox <=36, and IE9\n RightArrow: 'ArrowRight',\n // 'Right' for Firefox <=36, and IE9\n DownArrow: 'ArrowDown',\n // 'Down' for Firefox <=36, and IE9\n End: 'End',\n Home: 'Home',\n PageUp: 'PageUp',\n PageDown: 'PageDown',\n // Editing keys\n Backspace: 'Backspace',\n Clear: 'Clear',\n Copy: 'Copy',\n CrSel: 'CrSel',\n // 'Crsel' for Firefox <=36, and IE9\n Cut: 'Cut',\n Delete: 'Delete',\n // 'Del' for Firefox <=36, and IE9\n EraseEof: 'EraseEof',\n ExSel: 'ExSel',\n // 'Exsel' for Firefox <=36, and IE9\n Insert: 'Insert',\n Paste: 'Paste',\n Redo: 'Redo',\n Undo: 'Undo',\n // UI keys\n Accept: 'Accept',\n Again: 'Again',\n Attn: 'Attn',\n // 'Unidentified' for Firefox, Chrome, and IE9 ('KanaMode' when using the Japanese keyboard layout)\n Cancel: 'Cancel',\n ContextMenu: 'ContextMenu',\n // 'Apps' for Firefox <=36, and IE9\n Esc: 'Escape',\n // 'Esc' for Firefox <=36, and IE9\n Execute: 'Execute',\n Find: 'Find',\n Finish: 'Finish',\n // 'Unidentified' for Firefox, Chrome, and IE9 ('Katakana' when using the Japanese keyboard layout)\n Help: 'Help',\n Pause: 'Pause',\n Play: 'Play',\n Props: 'Props',\n Select: 'Select',\n ZoomIn: 'ZoomIn',\n ZoomOut: 'ZoomOut',\n // Device keys\n BrightnessDown: 'BrightnessDown',\n BrightnessUp: 'BrightnessUp',\n Eject: 'Eject',\n LogOff: 'LogOff',\n Power: 'Power',\n PowerOff: 'PowerOff',\n PrintScreen: 'PrintScreen',\n Hibernate: 'Hibernate',\n // 'Unidentified' for Firefox <=37\n Standby: 'Standby',\n // 'Unidentified' for Firefox <=36, and IE9\n WakeUp: 'WakeUp',\n // IME and composition keys\n Compose: 'Compose',\n Dead: 'Dead',\n // Function keys\n F1: 'F1',\n F2: 'F2',\n F3: 'F3',\n F4: 'F4',\n F5: 'F5',\n F6: 'F6',\n F7: 'F7',\n F8: 'F8',\n F9: 'F9',\n F10: 'F10',\n F11: 'F11',\n F12: 'F12',\n // Document keys\n Print: 'Print',\n // 'Normal' keys\n num0: '0',\n num1: '1',\n num2: '2',\n num3: '3',\n num4: '4',\n num5: '5',\n num6: '6',\n num7: '7',\n num8: '8',\n num9: '9',\n a: 'a',\n b: 'b',\n c: 'c',\n d: 'd',\n e: 'e',\n f: 'f',\n g: 'g',\n h: 'h',\n i: 'i',\n j: 'j',\n k: 'k',\n l: 'l',\n m: 'm',\n n: 'n',\n o: 'o',\n p: 'p',\n q: 'q',\n r: 'r',\n s: 's',\n t: 't',\n u: 'u',\n v: 'v',\n w: 'w',\n x: 'x',\n y: 'y',\n z: 'z',\n A: 'A',\n B: 'B',\n C: 'C',\n D: 'D',\n E: 'E',\n F: 'F',\n G: 'G',\n H: 'H',\n I: 'I',\n J: 'J',\n K: 'K',\n L: 'L',\n M: 'M',\n N: 'N',\n O: 'O',\n P: 'P',\n Q: 'Q',\n R: 'R',\n S: 'S',\n T: 'T',\n U: 'U',\n V: 'V',\n W: 'W',\n X: 'X',\n Y: 'Y',\n Z: 'Z',\n Semicolon: ';',\n Equal: '=',\n Comma: ',',\n Hyphen: '-',\n Minus: '-',\n Plus: '+',\n Dot: '.',\n Slash: '/',\n Backquote: '`',\n LeftParenthesis: '(',\n RightParenthesis: ')',\n LeftBracket: '[',\n RightBracket: ']',\n Backslash: '\\\\',\n Quote: '\\'',\n // Numeric keypad keys\n numpad0: '0',\n numpad1: '1',\n numpad2: '2',\n numpad3: '3',\n numpad4: '4',\n numpad5: '5',\n numpad6: '6',\n numpad7: '7',\n numpad8: '8',\n numpad9: '9',\n NumpadDot: '.',\n NumpadDotAlt: ',',\n // Modern browsers automatically adapt the character sent by this key to the decimal character of the current language\n NumpadMultiply: '*',\n NumpadPlus: '+',\n NumpadMinus: '-',\n NumpadSubtract: '-',\n NumpadSlash: '/',\n NumpadDotObsoleteBrowsers: 'Decimal',\n NumpadMultiplyObsoleteBrowsers: 'Multiply',\n NumpadPlusObsoleteBrowsers: 'Add',\n NumpadMinusObsoleteBrowsers: 'Subtract',\n NumpadSlashObsoleteBrowsers: 'Divide',\n // Special arrays for quicker tests\n _allFnKeys: ['F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 'F10', 'F11', 'F12'],\n _someNonPrintableKeys: ['Tab', 'Enter', 'Shift', 'ShiftLeft', 'ShiftRight', 'Control', 'ControlLeft', 'ControlRight', 'Alt', 'AltLeft', 'AltRight', 'Pause', 'CapsLock', 'Escape'],\n _directionKeys: ['PageUp', 'PageDown', 'End', 'Home', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'ArrowUp']\n};\nObject.freeze(AutoNumericEnum.keyName._allFnKeys);\nObject.freeze(AutoNumericEnum.keyName._someNonPrintableKeys);\nObject.freeze(AutoNumericEnum.keyName._directionKeys);\nObject.freeze(AutoNumericEnum.keyName);\nObject.defineProperty(AutoNumericEnum, 'keyName', {\n configurable: false,\n writable: false\n});\nObject.freeze(AutoNumericEnum);\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AutoNumericEnum);\n\n/***/ }),\n\n/***/ \"./src/AutoNumericEvents.js\":\n/*!**********************************!*\\\n !*** ./src/AutoNumericEvents.js ***!\n \\**********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AutoNumeric */ \"./src/AutoNumeric.js\");\n/**\n * Options for AutoNumeric.js\n * @author Alexandre Bonneau \n * @copyright © 2023 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\n\n\n/**\n * Event list managed by AutoNumeric\n *\n * @type {{correctedValue: string, initialized: string, invalidFormula: string, invalidValue: string, formatted: string, rawValueModified: string, minRangeExceeded: string, maxRangeExceeded: string, native: {input: string, change: string}, validFormula: string}}\n */\n_AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].events = {\n correctedValue: 'autoNumeric:correctedValue',\n initialized: 'autoNumeric:initialized',\n invalidFormula: 'autoNumeric:invalidFormula',\n invalidValue: 'autoNumeric:invalidValue',\n formatted: 'autoNumeric:formatted',\n rawValueModified: 'autoNumeric:rawValueModified',\n minRangeExceeded: 'autoNumeric:minExceeded',\n maxRangeExceeded: 'autoNumeric:maxExceeded',\n \"native\": {\n input: 'input',\n change: 'change'\n },\n validFormula: 'autoNumeric:validFormula'\n};\nObject.freeze(_AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].events.native);\nObject.freeze(_AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].events);\nObject.defineProperty(_AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"], 'events', {\n configurable: false,\n writable: false\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({});\n\n/***/ }),\n\n/***/ \"./src/AutoNumericHelper.js\":\n/*!**********************************!*\\\n !*** ./src/AutoNumericHelper.js ***!\n \\**********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ AutoNumericHelper)\n/* harmony export */ });\n/* harmony import */ var _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AutoNumericEnum */ \"./src/AutoNumericEnum.js\");\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i[\"return\"] && (_r = _i[\"return\"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/**\n * Helper functions for AutoNumeric.js\n * @author Alexandre Bonneau \n * @copyright © 2023 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\n\n\n/**\n * Static class that holds all the helper functions autoNumeric uses.\n * Note : none of the functions in there are aware of any autoNumeric internals (which means there are no references to autoNumeric-specific info like options names or data structures).\n */\nvar AutoNumericHelper = /*#__PURE__*/function () {\n function AutoNumericHelper() {\n _classCallCheck(this, AutoNumericHelper);\n }\n _createClass(AutoNumericHelper, null, [{\n key: \"isNull\",\n value:\n /**\n * Return `true` if the `value` is null\n *\n * @static\n * @param {*} value The value to test\n * @returns {boolean} Return `true` if the `value` is null, FALSE otherwise\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Return `true` if the `value` is undefined\n *\n * @static\n * @param {*} value The value to test\n * @returns {boolean} Return `true` if the `value` is undefined, FALSE otherwise\n */\n }, {\n key: \"isUndefined\",\n value: function isUndefined(value) {\n return value === void 0;\n }\n\n /**\n * Return `true` if the `value` is undefined, null or empty\n *\n * @param {*} value\n * @returns {boolean}\n */\n }, {\n key: \"isUndefinedOrNullOrEmpty\",\n value: function isUndefinedOrNullOrEmpty(value) {\n return value === null || value === void 0 || '' === value;\n }\n\n /**\n * Return `true` if the given parameter is a String\n *\n * @param {*} str\n * @returns {boolean}\n */\n }, {\n key: \"isString\",\n value: function isString(str) {\n return typeof str === 'string' || str instanceof String;\n }\n /**\n * Return `true` if the `value` is an empty string ''\n *\n * @static\n * @param {*} value The value to test\n * @returns {boolean} Return `true` if the `value` is an empty string '', FALSE otherwise\n */\n }, {\n key: \"isEmptyString\",\n value: function isEmptyString(value) {\n return value === '';\n }\n\n /**\n * Return `true` if the parameter is a boolean\n *\n * @static\n * @param {*} value\n * @returns {boolean}\n */\n }, {\n key: \"isBoolean\",\n value: function isBoolean(value) {\n return typeof value === 'boolean';\n }\n\n /**\n * Return `true` if the parameter is a string 'true' or 'false'\n *\n * This function accepts any cases for those strings.\n * @param {string} value\n * @returns {boolean}\n */\n }, {\n key: \"isTrueOrFalseString\",\n value: function isTrueOrFalseString(value) {\n var lowercaseValue = String(value).toLowerCase();\n return lowercaseValue === 'true' || lowercaseValue === 'false';\n }\n\n /**\n * Return `true` if the parameter is an object\n *\n * @param {*} reference\n * @returns {boolean}\n */\n }, {\n key: \"isObject\",\n value: function isObject(reference) {\n return _typeof(reference) === 'object' && reference !== null && !Array.isArray(reference);\n }\n\n /**\n * Return `true` if the given object is empty\n * cf. http://stackoverflow.com/questions/679915/how-do-i-test-for-an-empty-javascript-object and http://jsperf.com/empty-object-test\n *\n * @param {object} obj\n * @returns {boolean}\n */\n }, {\n key: \"isEmptyObj\",\n value: function isEmptyObj(obj) {\n for (var prop in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Return `true` if the parameter is a real number (and not a numeric string).\n *\n * @param {*} n\n * @returns {boolean}\n */\n }, {\n key: \"isNumberStrict\",\n value: function isNumberStrict(n) {\n return typeof n === 'number';\n }\n\n /**\n * Return `true` if the parameter is a number (or a number written as a string).\n *\n * @param {*} n\n * @returns {boolean}\n */\n }, {\n key: \"isNumber\",\n value: function isNumber(n) {\n return !this.isArray(n) && !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n /**\n * Return `true` if the given character is a number (0 to 9)\n *\n * @param {char} char\n * @returns {boolean}\n */\n }, {\n key: \"isDigit\",\n value: function isDigit(_char) {\n return /\\d/.test(_char);\n }\n\n /**\n * Return `true` if the parameter is a number (or a number written as a string).\n * This version also accepts Arabic and Persian numbers.\n *\n * @param {*} n\n * @returns {boolean}\n */\n }, {\n key: \"isNumberOrArabic\",\n value: function isNumberOrArabic(n) {\n var latinConvertedNumber = this.arabicToLatinNumbers(n, false, true, true);\n return this.isNumber(latinConvertedNumber);\n }\n\n /**\n * Return `true` if the parameter is an integer (and not a float).\n *\n * @param {*} n\n * @returns {boolean}\n */\n }, {\n key: \"isInt\",\n value: function isInt(n) {\n return typeof n === 'number' && parseFloat(n) === parseInt(n, 10) && !isNaN(n);\n }\n\n /**\n * Return `true` if the parameter is a function.\n *\n * @param {function} func\n * @returns {boolean}\n */\n }, {\n key: \"isFunction\",\n value: function isFunction(func) {\n return typeof func === 'function';\n }\n\n /**\n * Return `true` is the string `str` contains the string `needle`\n * Note: this function does not coerce the parameters types\n *\n * @param {string} str\n * @param {string} needle\n * @returns {boolean}\n */\n }, {\n key: \"contains\",\n value: function contains(str, needle) {\n //TODO Use `Array.prototype.includes()` when available (cf. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes)\n if (!this.isString(str) || !this.isString(needle) || str === '' || needle === '') {\n return false;\n }\n return str.indexOf(needle) !== -1;\n }\n\n /**\n * Return `true` if the `needle` is in the array\n *\n * @param {*} needle\n * @param {Array} array\n * @returns {boolean}\n */\n }, {\n key: \"isInArray\",\n value: function isInArray(needle, array) {\n if (!this.isArray(array) || array === [] || this.isUndefined(needle)) {\n return false;\n }\n return array.indexOf(needle) !== -1;\n }\n\n /**\n * Return `true` if the parameter is an Array\n * //TODO Replace this by the default `Array.isArray()` function?\n *\n * @param {*} arr\n * @throws Error\n * @returns {*|boolean}\n */\n }, {\n key: \"isArray\",\n value: function isArray(arr) {\n if (Object.prototype.toString.call([]) === '[object Array]') {\n // Make sure an array has a class attribute of [object Array]\n // Test passed, now check if is an Array\n return Array.isArray(arr) || _typeof(arr) === 'object' && Object.prototype.toString.call(arr) === '[object Array]';\n } else {\n throw new Error('toString message changed for Object Array'); // Verify that the string returned by `toString` does not change in the future (cf. http://stackoverflow.com/a/8365215)\n }\n }\n\n /**\n * Return `true` if the parameter is a DOM element\n * cf. http://stackoverflow.com/a/4754104/2834898\n *\n * @param {*} obj\n * @returns {boolean}\n */\n }, {\n key: \"isElement\",\n value: function isElement(obj) {\n // return !!(obj && obj.nodeName);\n // return obj && 'nodeType' in obj;\n // return obj instanceof Element || obj instanceof HTMLInputElement || obj instanceof HTMLElement;\n if (typeof Element === 'undefined') {\n // This test is needed in environnements where the Element object does not exist (ie. in web workers)\n return false;\n }\n return obj instanceof Element;\n }\n\n /**\n * Return `true` in the given DOM element is an .\n *\n * @param {HTMLElement|HTMLInputElement} domElement\n * @returns {boolean}\n * @private\n */\n }, {\n key: \"isInputElement\",\n value: function isInputElement(domElement) {\n return this.isElement(domElement) && domElement.tagName.toLowerCase() === 'input';\n }\n\n /**\n * Return `true` if the parameter is a string that represents a float number, and that number has a decimal part\n *\n * @param {string} str\n * @returns {boolean}\n */\n // static hasDecimals(str) {\n // const [, decimalPart] = str.split('.');\n // return !isUndefined(decimalPart);\n // }\n\n /**\n * Return the number of decimal places if the parameter is a string that represents a float number, and that number has a decimal part.\n *\n * @param {string} str\n * @returns {int}\n */\n }, {\n key: \"decimalPlaces\",\n value: function decimalPlaces(str) {\n var _str$split = str.split('.'),\n _str$split2 = _slicedToArray(_str$split, 2),\n decimalPart = _str$split2[1];\n if (!this.isUndefined(decimalPart)) {\n return decimalPart.length;\n }\n return 0;\n }\n\n /**\n * Return the index of the first non-zero decimal place in the given value.\n * The index starts after the decimal point, if any, and begins at '1'.\n * If no decimal places are found in the value, this function returns `0`.\n *\n * @example\n * indexFirstNonZeroDecimalPlace('0.00') -> 0\n * indexFirstNonZeroDecimalPlace('1.00') -> 0\n * indexFirstNonZeroDecimalPlace('0.12') -> 1\n * indexFirstNonZeroDecimalPlace('0.1234') -> 1\n * indexFirstNonZeroDecimalPlace('0.01234') -> 2\n * indexFirstNonZeroDecimalPlace('0.001234') -> 3\n * indexFirstNonZeroDecimalPlace('0.0001234') -> 4\n *\n * @param {number} value\n * @returns {Number|number}\n */\n }, {\n key: \"indexFirstNonZeroDecimalPlace\",\n value: function indexFirstNonZeroDecimalPlace(value) {\n var _String$split = String(Math.abs(value)).split('.'),\n _String$split2 = _slicedToArray(_String$split, 2),\n decimalPart = _String$split2[1];\n if (this.isUndefined(decimalPart)) {\n return 0;\n }\n var result = decimalPart.lastIndexOf('0');\n if (result === -1) {\n result = 0;\n } else {\n result += 2;\n }\n return result;\n }\n\n /**\n * Return the code for the key used to generate the given event.\n *\n * @param {Event} event\n * @returns {string|Number}\n */\n }, {\n key: \"keyCodeNumber\",\n value: function keyCodeNumber(event) {\n // `event.keyCode` and `event.which` are deprecated, `KeyboardEvent.key` (https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key) must be used now\n // Also, do note that Firefox generate a 'keypress' event (e.keyCode === 0) for the keys that do not print a character (ie. 'Insert', 'Delete', 'Fn' keys, 'PageUp', 'PageDown' etc.). 'Shift' on the other hand does not generate a keypress event.\n return typeof event.which === 'undefined' ? event.keyCode : event.which;\n }\n\n /**\n * Return the character from the event key code.\n * If the KeyboardEvent does not represent a printable character, then the key name is used (ie. 'Meta', 'Shift', 'F1', etc.)\n * @example character(50) => '2'\n *\n * @param {KeyboardEvent} event\n * @returns {string}\n */\n }, {\n key: \"character\",\n value: function character(event) {\n var result;\n if (event.key === 'Unidentified' || event.key === void 0 || this.isSeleniumBot()) {\n //XXX The selenium geckodriver does not understand `event.key`, hence when using it, we need to rely on the old deprecated `keyCode` attribute, cf. upstream issue https://github.com/mozilla/geckodriver/issues/440\n // Use the old deprecated keyCode property, if the new `key` one is not supported\n var keyCode = this.keyCodeNumber(event);\n if (keyCode === 229) {\n // Android Chrome returns the same keycode number 229 for all keys pressed\n return _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_0__[\"default\"].keyName.AndroidDefault;\n }\n var potentialResult = _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_0__[\"default\"].fromCharCodeKeyCode[keyCode];\n if (!AutoNumericHelper.isUndefinedOrNullOrEmpty(potentialResult)) {\n // Since `String.fromCharCode` do not return named keys for some keys ('Escape' and 'Enter' for instance), we convert the characters to the key names\n result = potentialResult;\n } else {\n result = String.fromCharCode(keyCode);\n }\n } else {\n switch (event.key) {\n // Manages all the special cases for obsolete browsers that return the non-standard names\n case 'Add':\n result = _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_0__[\"default\"].keyName.NumpadPlus;\n break;\n case 'Apps':\n result = _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_0__[\"default\"].keyName.ContextMenu;\n break;\n case 'Crsel':\n result = _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_0__[\"default\"].keyName.CrSel;\n break;\n case 'Decimal':\n if (event[\"char\"]) {\n // this fixes #602\n result = event[\"char\"];\n } else {\n result = _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_0__[\"default\"].keyName.NumpadDot;\n }\n break;\n case 'Del':\n result = _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_0__[\"default\"].keyName.Delete;\n break;\n case 'Divide':\n result = _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_0__[\"default\"].keyName.NumpadSlash;\n break;\n case 'Down':\n result = _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_0__[\"default\"].keyName.DownArrow;\n break;\n case 'Esc':\n result = _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_0__[\"default\"].keyName.Esc;\n break;\n case 'Exsel':\n result = _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_0__[\"default\"].keyName.ExSel;\n break;\n case 'Left':\n result = _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_0__[\"default\"].keyName.LeftArrow;\n break;\n case 'Meta':\n case 'Super':\n result = _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_0__[\"default\"].keyName.OSLeft;\n break;\n case 'Multiply':\n result = _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_0__[\"default\"].keyName.NumpadMultiply;\n break;\n case 'Right':\n result = _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_0__[\"default\"].keyName.RightArrow;\n break;\n case 'Spacebar':\n result = _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_0__[\"default\"].keyName.Space;\n break;\n case 'Subtract':\n result = _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_0__[\"default\"].keyName.NumpadMinus;\n break;\n case 'Up':\n result = _AutoNumericEnum__WEBPACK_IMPORTED_MODULE_0__[\"default\"].keyName.UpArrow;\n break;\n default:\n // The normal case\n result = event.key;\n }\n }\n return result;\n }\n\n /**\n * Return an object containing the name and version of the current browser.\n * @example `browserVersion()` => { name: 'Firefox', version: '42' }\n * Based on http://stackoverflow.com/a/38080051/2834898\n *\n * @returns {{ name: string, version: string }}\n */\n }, {\n key: \"browser\",\n value: function browser() {\n var ua = navigator.userAgent;\n var tem;\n var M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [];\n if (/trident/i.test(M[1])) {\n tem = /\\brv[ :]+(\\d+)/g.exec(ua) || [];\n return {\n name: 'ie',\n version: tem[1] || ''\n };\n }\n if (M[1] === 'Chrome') {\n tem = ua.match(/\\b(OPR|Edge)\\/(\\d+)/);\n if (tem !== null) {\n return {\n name: tem[1].replace('OPR', 'opera'),\n version: tem[2]\n };\n }\n }\n M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];\n if ((tem = ua.match(/version\\/(\\d+)/i)) !== null) {\n M.splice(1, 1, tem[1]);\n }\n return {\n name: M[0].toLowerCase(),\n version: M[1]\n };\n }\n\n /**\n * Check if the browser is controlled by Selenium.\n * Note: This only works within the geckodriver.\n * cf. http://stackoverflow.com/questions/33225947/can-a-website-detect-when-you-are-using-selenium-with-chromedriver\n *\n * @returns {boolean}\n */\n }, {\n key: \"isSeleniumBot\",\n value: function isSeleniumBot() {\n // noinspection JSUnresolvedVariable\n return window.navigator.webdriver === true;\n }\n\n /**\n * Return `true` if the given number is negative, or if the given string contains a negative sign :\n * - everywhere in the string (by default), or\n * - on the first character only if the `checkEverywhere` parameter is set to `false`.\n *\n * Note: `-0` is not a negative number since it's equal to `0`.\n *\n * @param {number|string} numberOrNumericString A Number, or a number represented by a string\n * @param {string} negativeSignCharacter The single character that represent the negative sign\n * @param {boolean} checkEverywhere If TRUE, then the negative sign is search everywhere in the numeric string (this is needed for instance if the string is '1234.56-')\n * @returns {boolean}\n */\n }, {\n key: \"isNegative\",\n value: function isNegative(numberOrNumericString) {\n var negativeSignCharacter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '-';\n var checkEverywhere = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n if (numberOrNumericString === negativeSignCharacter) {\n return true;\n }\n if (numberOrNumericString === '') {\n return false;\n }\n if (AutoNumericHelper.isNumber(numberOrNumericString)) {\n return numberOrNumericString < 0;\n }\n if (checkEverywhere) {\n return this.contains(numberOrNumericString, negativeSignCharacter);\n }\n return this.isNegativeStrict(numberOrNumericString, negativeSignCharacter);\n }\n\n /**\n * Return `true` if the given string contains a negative sign on the first character (on the far left).\n *\n * @example isNegativeStrict('1234.56') => false\n * @example isNegativeStrict('1234.56-') => false\n * @example isNegativeStrict('-1234.56') => true\n * @example isNegativeStrict('-1,234.56 €') => true\n *\n * @param {string} numericString\n * @param {string} negativeSignCharacter The single character that represent the negative sign\n * @returns {boolean}\n */\n }, {\n key: \"isNegativeStrict\",\n value: function isNegativeStrict(numericString) {\n var negativeSignCharacter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '-';\n return numericString.charAt(0) === negativeSignCharacter;\n }\n\n /**\n * Return `true` if the very first character is the opening bracket, and if the rest of the `valueString` also has the closing bracket.\n *\n * @param {string} valueString\n * @param {string} leftBracket\n * @param {string} rightBracket\n * @returns {boolean}\n */\n }, {\n key: \"isNegativeWithBrackets\",\n value: function isNegativeWithBrackets(valueString, leftBracket, rightBracket) {\n return valueString.charAt(0) === leftBracket && this.contains(valueString, rightBracket);\n }\n\n /**\n * Return `true` if the formatted or unformatted numeric string represent the value 0 (ie. '0,00 €'), or is empty (' €').\n * This works since we test if there are any numbers from 1 to 9 in the string. If there is none, then the number is zero (or the string is empty).\n *\n * @param {string} numericString\n * @returns {boolean}\n */\n }, {\n key: \"isZeroOrHasNoValue\",\n value: function isZeroOrHasNoValue(numericString) {\n return !/[1-9]/g.test(numericString);\n }\n\n /**\n * Return the negative version of the value (represented as a string) given as a parameter.\n * The numeric string is a valid Javascript number when typecast to a `Number`.\n *\n * @param {string} value\n * @returns {*}\n */\n }, {\n key: \"setRawNegativeSign\",\n value: function setRawNegativeSign(value) {\n if (!this.isNegativeStrict(value, '-')) {\n return \"-\".concat(value);\n }\n return value;\n }\n\n /**\n * Replace the character at the position `index` in the string `string` by the character(s) `newCharacter`.\n *\n * @param {string} string\n * @param {int} index\n * @param {string} newCharacter\n * @returns {string}\n */\n }, {\n key: \"replaceCharAt\",\n value: function replaceCharAt(string, index, newCharacter) {\n return \"\".concat(string.substr(0, index)).concat(newCharacter).concat(string.substr(index + newCharacter.length));\n }\n\n /**\n * Return the value clamped to the nearest minimum/maximum value, as defined in the settings.\n *\n * @param {string|number} value\n * @param {object} settings\n * @returns {number}\n */\n }, {\n key: \"clampToRangeLimits\",\n value: function clampToRangeLimits(value, settings) {\n //XXX This function always assume `settings.minimumValue` is lower than `settings.maximumValue`\n return Math.max(settings.minimumValue, Math.min(settings.maximumValue, value));\n }\n\n /**\n * Return the number of number or dot characters on the left side of the caret, in a formatted number.\n *\n * @param {string} formattedNumberString\n * @param {int} caretPosition This must be a positive integer\n * @param {string} decimalCharacter\n * @returns {number}\n */\n }, {\n key: \"countNumberCharactersOnTheCaretLeftSide\",\n value: function countNumberCharactersOnTheCaretLeftSide(formattedNumberString, caretPosition, decimalCharacter) {\n // Here we count the dot and report it as a number character too, since it will 'stay' in the Javascript number when unformatted\n var numberDotOrNegativeSign = new RegExp(\"[0-9\".concat(decimalCharacter, \"-]\")); // No need to escape the decimal character here, since it's in `[]`\n\n var numberDotAndNegativeSignCount = 0;\n for (var i = 0; i < caretPosition; i++) {\n // Test if the character is a number, a dot or an hyphen. If it is, count it, otherwise ignore it\n if (numberDotOrNegativeSign.test(formattedNumberString[i])) {\n numberDotAndNegativeSignCount++;\n }\n }\n return numberDotAndNegativeSignCount;\n }\n\n /**\n * Walk the `formattedNumberString` from left to right, one char by one, counting the `formattedNumberStringIndex`.\n * If the char is in the `rawNumberString` (starting at index 0), then `rawNumberStringIndex++`, and continue until\n * there is no more characters in `rawNumberString`) or that `rawNumberStringIndex === caretPositionInRawValue`.\n * When you stop, the `formattedNumberStringIndex` is the position where the caret should be set.\n *\n * @example\n * 1234567|89.01 : position 7 (rawNumberString)\n * 123.456.7|89,01 : position 9 (formattedNumberString)\n *\n * @param {string} rawNumberString\n * @param {int} caretPositionInRawValue\n * @param {string} formattedNumberString\n * @param {string} decimalCharacter\n * @returns {*}\n */\n }, {\n key: \"findCaretPositionInFormattedNumber\",\n value: function findCaretPositionInFormattedNumber(rawNumberString, caretPositionInRawValue, formattedNumberString, decimalCharacter) {\n var formattedNumberStringSize = formattedNumberString.length;\n var rawNumberStringSize = rawNumberString.length;\n var formattedNumberStringIndex;\n var rawNumberStringIndex = 0;\n for (formattedNumberStringIndex = 0; formattedNumberStringIndex < formattedNumberStringSize && rawNumberStringIndex < rawNumberStringSize && rawNumberStringIndex < caretPositionInRawValue; formattedNumberStringIndex++) {\n if (rawNumberString[rawNumberStringIndex] === formattedNumberString[formattedNumberStringIndex] || rawNumberString[rawNumberStringIndex] === '.' && formattedNumberString[formattedNumberStringIndex] === decimalCharacter) {\n rawNumberStringIndex++;\n }\n }\n return formattedNumberStringIndex;\n }\n\n /**\n * Count the number of occurrence of the given character, in the given text.\n *\n * @param {string} character\n * @param {string} text\n * @returns {number}\n */\n }, {\n key: \"countCharInText\",\n value: function countCharInText(character, text) {\n var charCounter = 0;\n for (var i = 0; i < text.length; i++) {\n if (text[i] === character) {\n charCounter++;\n }\n }\n return charCounter;\n }\n\n /**\n * Return the index that can be used to set the caret position.\n * This takes into account that the position is starting at '0', not 1.\n *\n * @param {int} characterCount\n * @returns {number}\n */\n }, {\n key: \"convertCharacterCountToIndexPosition\",\n value: function convertCharacterCountToIndexPosition(characterCount) {\n return Math.max(characterCount, characterCount - 1);\n }\n\n /**\n * Cross browser routine for getting selected range/cursor position.\n * Note: this also works with edge cases like contenteditable-enabled elements, and hidden inputs.\n *\n * @param {HTMLInputElement|EventTarget} element\n * @returns {{}}\n */\n }, {\n key: \"getElementSelection\",\n value: function getElementSelection(element) {\n var position = {};\n var isSelectionStartUndefined;\n try {\n isSelectionStartUndefined = this.isUndefined(element.selectionStart);\n } catch (error) {\n isSelectionStartUndefined = false;\n }\n try {\n if (isSelectionStartUndefined) {\n var selection = window.getSelection();\n var selectionInfo = selection.getRangeAt(0);\n position.start = selectionInfo.startOffset;\n position.end = selectionInfo.endOffset;\n position.length = position.end - position.start;\n } else {\n position.start = element.selectionStart;\n position.end = element.selectionEnd;\n position.length = position.end - position.start;\n }\n } catch (error) {\n // Manages the cases where :\n // - the 'contenteditable' elements that have no selections\n // - the element is of type 'hidden'\n position.start = 0;\n position.end = 0;\n position.length = 0;\n }\n return position;\n }\n\n /**\n * Cross browser routine for setting selected range/cursor position\n *\n * @param {HTMLInputElement|EventTarget} element\n * @param {int} start\n * @param {int|null} end\n */\n }, {\n key: \"setElementSelection\",\n value: function setElementSelection(element, start) {\n var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n if (this.isUndefinedOrNullOrEmpty(end)) {\n end = start;\n }\n if (this.isInputElement(element)) {\n element.setSelectionRange(start, end);\n } else if (!AutoNumericHelper.isNull(element.firstChild)) {\n var range = document.createRange();\n range.setStart(element.firstChild, start);\n range.setEnd(element.firstChild, end);\n var selection = window.getSelection();\n selection.removeAllRanges();\n selection.addRange(range);\n }\n }\n\n /**\n * Function that throw error messages\n *\n * @param {string} message\n * @throws\n */\n }, {\n key: \"throwError\",\n value: function throwError(message) {\n throw new Error(message);\n }\n\n /**\n * Function that display a warning messages, according to the debug level.\n *\n * @param {string} message\n * @param {boolean} showWarning If FALSE, then the warning message is not displayed\n */\n }, {\n key: \"warning\",\n value: function warning(message) {\n var showWarning = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n if (showWarning) {\n /* eslint no-console: 0 */\n console.warn(\"Warning: \".concat(message));\n }\n }\n\n /**\n * Return `true` if the given event is an instance of WheelEvent\n *\n * @static\n * @param {event} event The event to test\n * @returns {boolean} Return `true` if the event is an instance of WheelEvent, FALSE otherwise\n */\n }, {\n key: \"isWheelEvent\",\n value: function isWheelEvent(event) {\n return event instanceof WheelEvent;\n }\n\n /**\n * Return `true` if the given event is a wheelup event\n *\n * @param {WheelEvent} wheelEvent\n * @returns {boolean}\n */\n }, {\n key: \"isWheelUpEvent\",\n value: function isWheelUpEvent(wheelEvent) {\n if (!this.isWheelEvent(wheelEvent) || this.isUndefinedOrNullOrEmpty(wheelEvent.deltaY)) {\n this.throwError(\"The event passed as a parameter is not a valid wheel event, '\".concat(wheelEvent.type, \"' given.\"));\n }\n return wheelEvent.deltaY < 0;\n }\n\n /**\n * Return `true` if the given event is a wheeldown event\n *\n * @param {WheelEvent} wheelEvent\n * @returns {boolean}\n */\n }, {\n key: \"isWheelDownEvent\",\n value: function isWheelDownEvent(wheelEvent) {\n if (!this.isWheelEvent(wheelEvent) || this.isUndefinedOrNullOrEmpty(wheelEvent.deltaY)) {\n this.throwError(\"The event passed as a parameter is not a valid wheel event, '\".concat(wheelEvent.type, \"' given.\"));\n }\n return wheelEvent.deltaY > 0;\n }\n\n /**\n * Return `true` if the given event is an instance of WheelEvent and the deltaY value is equal to zero\n *\n * @param {WheelEvent} wheelEvent The event to test\n * @returns {boolean} Return `true` if the event is an instance of WheelEvent and the deltaY value is equal to zero, FALSE otherwise\n */\n }, {\n key: \"isWheelEventWithZeroDeltaY\",\n value: function isWheelEventWithZeroDeltaY(wheelEvent) {\n return this.isWheelEvent(wheelEvent) && !this.isUndefinedOrNullOrEmpty(wheelEvent.deltaY) && wheelEvent.deltaY === 0;\n }\n\n /**\n * Return the given raw value truncated at the given number of decimal places `decimalPlaces`.\n * This function does not round the value.\n *\n * @example\n * forceDecimalPlaces(123.45678, 0) -> '123.45678'\n * forceDecimalPlaces(123.45678, 1) -> '123.4'\n * forceDecimalPlaces(123.45678, 2) -> '123.45'\n * forceDecimalPlaces(123.45678, 3) -> '123.456'\n *\n * @param {number} value\n * @param {int} decimalPlaces\n * @returns {number|string}\n */\n }, {\n key: \"forceDecimalPlaces\",\n value: function forceDecimalPlaces(value, decimalPlaces) {\n // We could make sure `decimalPlaces` is an integer and positive, but we'll leave that to the dev calling this function.\n var _String$split3 = String(value).split('.'),\n _String$split4 = _slicedToArray(_String$split3, 2),\n integerPart = _String$split4[0],\n decimalPart = _String$split4[1];\n if (!decimalPart) {\n return value;\n }\n return \"\".concat(integerPart, \".\").concat(decimalPart.substr(0, decimalPlaces));\n }\n\n /**\n * Return the 'nearest rounded' value, according to the given step size.\n * @example roundToNearest(264789, 10000)) => 260000\n *\n * @param {number} value\n * @param {number} stepPlace\n * @returns {*}\n */\n }, {\n key: \"roundToNearest\",\n value: function roundToNearest(value) {\n var stepPlace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n if (0 === value) {\n return 0;\n }\n if (stepPlace === 0) {\n this.throwError('The `stepPlace` used to round is equal to `0`. This value must not be equal to zero.');\n }\n return Math.round(value / stepPlace) * stepPlace;\n }\n\n /**\n * Return the 'nearest rounded' value by automatically adding or subtracting the calculated offset to the initial value.\n * This is done without having to pass a step to this function, and based on the size of the given `value`.\n *\n * @example Calculated offset\n * 1 -> 1 (1)\n * 14 -> 10 (10)\n * 143 -> 140 (10)\n * 1.278 -> 1.300 (100)\n * 28.456 -> 28.500 (100)\n * 276.345 -> 276.000 (1.000)\n * 4.534.061 -> 4.530.000 (10.000)\n * 66.723.844 -> 66.700.000 (100.000)\n * 257.833.411 -> 258.000.000 (1.000.000)\n *\n * Initial Added Offset\n * 2 decimalPlacesRawValue : 1.12 -> 2.00 (1)\n * 3 decimalPlacesRawValue : 1.123 -> 2.000 (1)\n *\n * Special case when the `value` to round is between -1 and 1, excluded :\n * @example\n * Number of Initial Result Calculated\n * decimal places value (add) offset\n * 2 decimalPlacesRawValue : 0.12 -> 0.13 (0.01) : Math.pow(10, -2)\n * 2 decimalPlacesRawValue : 0.01 -> 0.02 (0.01)\n * 2 decimalPlacesRawValue : 0.00 -> 0.01 (0.01)\n *\n * 3 decimalPlacesRawValue : 0.123 -> 0.133 (0.01) : Math.pow(10, -2)\n * 3 decimalPlacesRawValue : 0.012 -> 0.013 (0.001) : Math.pow(10, -3)\n * 3 decimalPlacesRawValue : 0.001 -> 0.001 (0.001)\n * 3 decimalPlacesRawValue : 0.000 -> 0.001 (0.001)\n *\n * 4 decimalPlacesRawValue : 0.4123 -> 0.4200 (0.01) : Math.pow(10, -2)\n * 4 decimalPlacesRawValue : 0.0412 -> 0.0420 (0.001) : Math.pow(10, -3)\n * 4 decimalPlacesRawValue : 0.0041 -> 0.0042 (0.0001) : Math.pow(10, -4)\n * 4 decimalPlacesRawValue : 0.0004 -> 0.0005 (0.0001)\n * 4 decimalPlacesRawValue : 0.0000 -> 0.0001 (0.0001)\n *\n * @param {number} value\n * @param {boolean} isAddition\n * @param {int} decimalPlacesRawValue The precision needed by the `rawValue`\n * @returns {*}\n */\n }, {\n key: \"modifyAndRoundToNearestAuto\",\n value: function modifyAndRoundToNearestAuto(value, isAddition, decimalPlacesRawValue) {\n value = Number(this.forceDecimalPlaces(value, decimalPlacesRawValue)); // Make sure that '0.13000000001' is converted to the number of rawValue decimal places '0.13'\n\n var absValue = Math.abs(value);\n if (absValue >= 0 && absValue < 1) {\n var rawValueMinimumOffset = Math.pow(10, -decimalPlacesRawValue);\n if (value === 0) {\n // 4 decimalPlacesRawValue : 0.0000 -> 0.0001 (0.0001)\n return isAddition ? rawValueMinimumOffset : -rawValueMinimumOffset;\n }\n var offset;\n var minimumOffsetFirstDecimalPlaceIndex = decimalPlacesRawValue;\n // Find where is the first non-zero decimal places\n var indexFirstNonZeroDecimalPlace = this.indexFirstNonZeroDecimalPlace(value);\n if (indexFirstNonZeroDecimalPlace >= minimumOffsetFirstDecimalPlaceIndex - 1) {\n /* 4 decimalPlacesRawValue : 0.0041 -> 0.0042 (0.0001) : Math.pow(10, -4)\n * 4 decimalPlacesRawValue : 0.0004 -> 0.0005 (0.0001)\n */\n offset = rawValueMinimumOffset;\n } else {\n offset = Math.pow(10, -(indexFirstNonZeroDecimalPlace + 1));\n }\n var result;\n if (isAddition) {\n result = value + offset;\n } else {\n result = value - offset;\n }\n return this.roundToNearest(result, offset);\n } else {\n // For values >= 1\n value = parseInt(value, 10);\n var lengthValue = Math.abs(value).toString().length; // `Math.abs()` is needed here to omit the negative sign '-' in case of a negative value\n\n var pow;\n switch (lengthValue) {\n // Special cases for small numbers\n case 1:\n pow = 0;\n break;\n case 2:\n case 3:\n pow = 1;\n break;\n case 4:\n case 5:\n pow = 2;\n break;\n // Default behavior\n default:\n pow = lengthValue - 3;\n }\n var _offset = Math.pow(10, pow);\n var _result;\n if (isAddition) {\n _result = value + _offset;\n } else {\n _result = value - _offset;\n }\n if (_result <= 10 && _result >= -10) {\n return _result;\n }\n return this.roundToNearest(_result, _offset);\n }\n }\n\n /**\n * Return the 'nearest rounded' value automatically by adding the calculated offset to the initial value.\n * This will limit the result to the given number of decimal places `decimalPlacesLimit`.\n *\n * @param {number} value\n * @param {int} decimalPlacesLimit\n * @returns {*}\n */\n }, {\n key: \"addAndRoundToNearestAuto\",\n value: function addAndRoundToNearestAuto(value, decimalPlacesLimit) {\n return this.modifyAndRoundToNearestAuto(value, true, decimalPlacesLimit);\n }\n\n /**\n * Return the 'nearest rounded' value automatically by subtracting the calculated offset to the initial value.\n * This will limit the result to the given number of decimal places `decimalPlacesLimit`.\n *\n * @param {number} value\n * @param {int} decimalPlacesLimit\n * @returns {*}\n */\n }, {\n key: \"subtractAndRoundToNearestAuto\",\n value: function subtractAndRoundToNearestAuto(value, decimalPlacesLimit) {\n return this.modifyAndRoundToNearestAuto(value, false, decimalPlacesLimit);\n }\n\n /**\n * Take an arabic number as a string and return a javascript number.\n * By default, this function does not try to convert the arabic decimal and thousand separator characters.\n * This returns `NaN` is the conversion is not possible.\n * Based on http://stackoverflow.com/a/17025392/2834898\n *\n * @param {string} arabicNumbers\n * @param {boolean} returnANumber If `true`, return a Number, otherwise return a String\n * @param {boolean} parseDecimalCharacter\n * @param {boolean} parseThousandSeparator\n * @returns {string|number|NaN}\n */\n }, {\n key: \"arabicToLatinNumbers\",\n value: function arabicToLatinNumbers(arabicNumbers) {\n var returnANumber = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var parseDecimalCharacter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var parseThousandSeparator = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n if (this.isNull(arabicNumbers)) {\n return arabicNumbers;\n }\n var result = arabicNumbers.toString();\n if (result === '') {\n return arabicNumbers;\n }\n if (result.match(/[٠١٢٣٤٥٦٧٨٩۴۵۶]/g) === null) {\n // If no Arabic/Persian numbers are found, return the numeric string or number directly\n if (returnANumber) {\n result = Number(result);\n }\n return result;\n }\n if (parseDecimalCharacter) {\n result = result.replace(/٫/, '.'); // Decimal character\n }\n\n if (parseThousandSeparator) {\n result = result.replace(/٬/g, ''); // Thousand separator\n }\n\n // Replace the numbers only\n result = result.replace(/[٠١٢٣٤٥٦٧٨٩]/g, function (d) {\n return d.charCodeAt(0) - 1632;\n }) // Arabic numbers\n .replace(/[۰۱۲۳۴۵۶۷۸۹]/g, function (d) {\n return d.charCodeAt(0) - 1776;\n }); // Persian numbers\n\n // `NaN` has precedence over the string `'NaN'`\n var resultAsNumber = Number(result);\n if (isNaN(resultAsNumber)) {\n return resultAsNumber;\n }\n if (returnANumber) {\n result = resultAsNumber;\n }\n return result;\n }\n\n /**\n * Create a custom event and immediately sent it from the given element.\n * By default, if no element is given, the event is thrown from `document`.\n *\n * @param {string} eventName\n * @param {HTMLElement|HTMLDocument|EventTarget} element\n * @param {object} detail\n * @param {boolean} bubbles Set to `true` if the event must bubble up\n * @param {boolean} cancelable Set to `true` if the event must be cancelable\n */\n }, {\n key: \"triggerEvent\",\n value: function triggerEvent(eventName) {\n var element = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document;\n var detail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var bubbles = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var cancelable = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n var event;\n if (window.CustomEvent) {\n event = new CustomEvent(eventName, {\n detail: detail,\n bubbles: bubbles,\n cancelable: cancelable\n }); // This is not supported by default by IE ; We use the polyfill for IE9 and later.\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(eventName, bubbles, cancelable, {\n detail: detail\n });\n }\n element.dispatchEvent(event);\n }\n\n /**\n * Function to parse minimumValue, maximumValue & the input value to prepare for testing to determine if the value falls within the min / max range.\n * Return an object example: minimumValue: \"999999999999999.99\" returns the following \"{s: -1, e: 12, c: Array[15]}\".\n *\n * This function is adapted from Big.js https://github.com/MikeMcl/big.js/. Many thanks to Mike.\n *\n * @param {number|string} n A numeric value.\n * @returns {{}}\n */\n }, {\n key: \"parseStr\",\n value: function parseStr(n) {\n var x = {}; // A Big number instance.\n var e;\n var i;\n var nL;\n var j;\n\n // Minus zero?\n if (n === 0 && 1 / n < 0) {\n n = '-0';\n }\n\n // Determine sign. 1 positive, -1 negative\n n = n.toString();\n if (this.isNegativeStrict(n, '-')) {\n n = n.slice(1);\n x.s = -1;\n } else {\n x.s = 1;\n }\n\n // Decimal point?\n e = n.indexOf('.');\n if (e > -1) {\n n = n.replace('.', '');\n }\n\n // Length of string if no decimal character\n if (e < 0) {\n // Integer\n e = n.length;\n }\n\n // Determine leading zeros\n i = n.search(/[1-9]/i) === -1 ? n.length : n.search(/[1-9]/i);\n nL = n.length;\n if (i === nL) {\n // Zero\n x.e = 0;\n x.c = [0];\n } else {\n // Determine trailing zeros\n for (j = nL - 1; n.charAt(j) === '0'; j -= 1) {\n nL -= 1;\n }\n nL -= 1;\n\n // Decimal location\n x.e = e - i - 1;\n x.c = [];\n\n // Convert string to array of digits without leading/trailing zeros\n for (e = 0; i <= nL; i += 1) {\n x.c[e] = +n.charAt(i);\n e += 1;\n }\n }\n return x;\n }\n\n /**\n * Function to test if the input value falls with the Min / Max settings.\n * This uses the parsed strings for the above parseStr function.\n *\n * This function is adapted from Big.js https://github.com/MikeMcl/big.js/. Many thanks to Mike.\n *\n * @param {object} y Big number instance\n * @param {object} x Big number instance\n * @returns {*}\n */\n }, {\n key: \"testMinMax\",\n value: function testMinMax(y, x) {\n var xc = x.c;\n var yc = y.c;\n var i = x.s;\n var j = y.s;\n var k = x.e;\n var l = y.e;\n\n // Either zero?\n if (!xc[0] || !yc[0]) {\n var _result2;\n if (!xc[0]) {\n _result2 = !yc[0] ? 0 : -j;\n } else {\n _result2 = i;\n }\n return _result2;\n }\n\n // Signs differ?\n if (i !== j) {\n return i;\n }\n var xNeg = i < 0;\n\n // Compare exponents\n if (k !== l) {\n return k > l ^ xNeg ? 1 : -1;\n }\n i = -1;\n k = xc.length;\n l = yc.length;\n j = k < l ? k : l;\n\n // Compare digit by digit\n for (i += 1; i < j; i += 1) {\n if (xc[i] !== yc[i]) {\n return xc[i] > yc[i] ^ xNeg ? 1 : -1;\n }\n }\n\n // Compare lengths\n var result;\n if (k === l) {\n result = 0;\n } else {\n result = k > l ^ xNeg ? 1 : -1;\n }\n return result;\n }\n\n /**\n * Generate a random string.\n * cf. http://stackoverflow.com/a/8084248/2834898\n *\n * @param {Number} strLength Length of the generated string (in character count)\n * @returns {string}\n */\n }, {\n key: \"randomString\",\n value: function randomString() {\n var strLength = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 5;\n return Math.random().toString(36).substr(2, strLength);\n }\n\n /**\n * Return the DOM element when passed either a DOM element or a selector string.\n *\n * @param {HTMLElement|string} domElementOrSelector\n * @returns {HTMLElement}\n */\n }, {\n key: \"domElement\",\n value: function domElement(domElementOrSelector) {\n var domElement;\n if (AutoNumericHelper.isString(domElementOrSelector)) {\n domElement = document.querySelector(domElementOrSelector);\n } else {\n domElement = domElementOrSelector;\n }\n return domElement;\n }\n\n /**\n * Retrieve the current element value.\n *\n * @param {HTMLElement|HTMLInputElement|EventTarget} element\n * @returns {number|string|null}\n */\n }, {\n key: \"getElementValue\",\n value: function getElementValue(element) {\n if (element.tagName.toLowerCase() === 'input') {\n return element.value;\n }\n return this.text(element);\n }\n\n /**\n * Modify the element value directly.\n *\n * @param {HTMLElement|HTMLInputElement} element\n * @param {number|string|null} value\n */\n }, {\n key: \"setElementValue\",\n value: function setElementValue(element) {\n var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n if (element.tagName.toLowerCase() === 'input') {\n element.value = value;\n } else {\n element.textContent = value;\n }\n }\n\n /**\n * Set the invalid state for the given element.\n * A custom message can be passed as the second argument.\n * Note: This does not work with contenteditable elements\n *\n * @param {HTMLElement|HTMLInputElement} element\n * @param {string|null} message\n * @throws Error\n */\n }, {\n key: \"setInvalidState\",\n value: function setInvalidState(element) {\n var message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Invalid';\n if (message === '' || this.isNull(message)) this.throwError('Cannot set the invalid state with an empty message.');\n element.setCustomValidity(message);\n }\n\n /**\n * Set the valid state for the given element.\n * Note: This does not work with contenteditable elements\n *\n * @param {HTMLElement|HTMLInputElement} element\n */\n }, {\n key: \"setValidState\",\n value: function setValidState(element) {\n element.setCustomValidity('');\n }\n\n /**\n * This clone the given object, and return it.\n * WARNING: This does not do a deep cloning.\n * cf. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Examples\n * //TODO Add a `deep` option to clone object with more than one depth\n *\n * @param {object} obj\n * @returns {object}\n */\n }, {\n key: \"cloneObject\",\n value: function cloneObject(obj) {\n return _extends({}, obj);\n }\n\n /**\n * Return a 'camelized' version of the given string.\n * By default, this assume that :\n * - the separators are hyphens '-',\n * - the 'data-' string should be removed, and\n * - that the very first word should not be capitalized.\n *\n * @example camelize('data-currency-symbol') => 'currencySymbol'\n *\n * @param {string} str Text to camelize\n * @param {string} separator Character that separate each word\n * @param {boolean} removeData If set to `true`, remove the `data-` part that you can find on some html attributes\n * @param {boolean} skipFirstWord If set to `true`, do not capitalize the very first word\n * @returns {string|null}\n */\n }, {\n key: \"camelize\",\n value: function camelize(str) {\n var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '-';\n var removeData = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var skipFirstWord = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n if (this.isNull(str)) {\n return null;\n }\n if (removeData) {\n str = str.replace(/^data-/, '');\n }\n\n // Cut the string into words\n var words = str.split(separator);\n\n // Capitalize each word\n var result = words.map(function (word) {\n return \"\".concat(word.charAt(0).toUpperCase()).concat(word.slice(1));\n });\n\n // Then concatenate them back\n result = result.join('');\n if (skipFirstWord) {\n // Skip the very first letter\n result = \"\".concat(result.charAt(0).toLowerCase()).concat(result.slice(1));\n }\n return result;\n }\n\n /**\n * Return the text component of the given DOM element.\n *\n * @param {Element} domElement\n * @returns {string}\n */\n }, {\n key: \"text\",\n value: function text(domElement) {\n var nodeType = domElement.nodeType;\n var result;\n // cf. https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\n if (nodeType === Node.ELEMENT_NODE || nodeType === Node.DOCUMENT_NODE || nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n result = domElement.textContent;\n } else if (nodeType === Node.TEXT_NODE) {\n result = domElement.nodeValue;\n } else {\n result = '';\n }\n return result;\n }\n\n /**\n * Set the text content of the given DOM element.\n * @param {Element} domElement\n * @param {string} text\n */\n }, {\n key: \"setText\",\n value: function setText(domElement, text) {\n var nodeType = domElement.nodeType;\n if (nodeType === Node.ELEMENT_NODE || nodeType === Node.DOCUMENT_NODE || nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n domElement.textContent = text;\n }\n //TODO Display a warning if that function does not do anything?\n }\n\n /**\n * Filter out the given `arr` array with the elements found in `excludedElements`.\n * This returns a new array and does not modify the source.\n * cf. verification here : http://codepen.io/AnotherLinuxUser/pen/XpvrMg?editors=0012\n *\n * @param {Array} arr\n * @param {Array} excludedElements\n * @returns {*|Array.}\n */\n }, {\n key: \"filterOut\",\n value: function filterOut(arr, excludedElements) {\n var _this = this;\n return arr.filter(function (element) {\n return !_this.isInArray(element, excludedElements);\n });\n }\n\n /**\n * Remove the trailing zeros in the decimal part of a number.\n *\n * @param {string} numericString\n * @returns {*}\n */\n }, {\n key: \"trimPaddedZerosFromDecimalPlaces\",\n value: function trimPaddedZerosFromDecimalPlaces(numericString) {\n numericString = String(numericString);\n if (numericString === '') {\n return '';\n }\n var _numericString$split = numericString.split('.'),\n _numericString$split2 = _slicedToArray(_numericString$split, 2),\n integerPart = _numericString$split2[0],\n decimalPart = _numericString$split2[1];\n if (this.isUndefinedOrNullOrEmpty(decimalPart)) {\n return integerPart;\n }\n var trimmedDecimalPart = decimalPart.replace(/0+$/g, '');\n var result;\n if (trimmedDecimalPart === '') {\n result = integerPart;\n } else {\n result = \"\".concat(integerPart, \".\").concat(trimmedDecimalPart);\n }\n return result;\n }\n\n /**\n * Return the top-most hovered item by the mouse cursor.\n *\n * @returns {*}\n */\n }, {\n key: \"getHoveredElement\",\n value: function getHoveredElement() {\n var hoveredElements = _toConsumableArray(document.querySelectorAll(':hover'));\n return hoveredElements[hoveredElements.length - 1];\n }\n\n /**\n * Return the given array trimmed to the given length.\n * @example arrayTrim([1, 2, 3, 4], 2) -> [1, 2]\n *\n * @param {Array} array\n * @param {Number} length\n * @returns {*}\n */\n }, {\n key: \"arrayTrim\",\n value: function arrayTrim(array, length) {\n var arrLength = array.length;\n if (arrLength === 0 || length > arrLength) {\n // Also manage the case where `length` is higher than the current length\n return array;\n }\n if (length < 0) {\n return [];\n }\n array.length = parseInt(length, 10);\n return array;\n }\n\n /**\n * Merge all the given arrays by keeping only unique elements, and return an array with de-duplicated values.\n * cf. http://stackoverflow.com/a/27664971/2834898\n *\n * @param {...array} arrays\n * @returns {[*]}\n */\n }, {\n key: \"arrayUnique\",\n value: function arrayUnique() {\n var _ref;\n return _toConsumableArray(new Set((_ref = []).concat.apply(_ref, arguments)));\n }\n\n /**\n * Merge all the given Maps by keeping only unique elements, and return a new Map with de-duplicated keys.\n *\n * @param {...Map} mapObjects\n * @returns {Map}\n */\n }, {\n key: \"mergeMaps\",\n value: function mergeMaps() {\n for (var _len = arguments.length, mapObjects = new Array(_len), _key = 0; _key < _len; _key++) {\n mapObjects[_key] = arguments[_key];\n }\n return new Map(mapObjects.reduce(function (as, b) {\n return as.concat(_toConsumableArray(b));\n }, []));\n }\n\n /**\n * Search the given `value` in the object `obj`, and return the very first key it finds\n *\n * @param {object} obj\n * @param {string|number} value\n * @returns {*|null}\n */\n }, {\n key: \"objectKeyLookup\",\n value: function objectKeyLookup(obj, value) {\n var result = Object.entries(obj).find(function (array) {\n return array[1] === value;\n });\n var key = null;\n if (result !== void 0) {\n key = result[0];\n }\n return key;\n }\n\n /**\n * Insert the single character `char` in the string `str` at the given position `index`\n *\n * @param {string} str\n * @param {string} char\n * @param {int} index\n * @returns {string}\n */\n }, {\n key: \"insertAt\",\n value: function insertAt(str, _char2, index) {\n str = String(str);\n if (index > str.length) {\n throw new Error(\"The given index is out of the string range.\");\n }\n if (_char2.length !== 1) {\n throw new Error('The given string `char` should be only one character long.');\n }\n if (str === '' && index === 0) {\n return _char2;\n }\n return \"\".concat(str.slice(0, index)).concat(_char2).concat(str.slice(index));\n }\n\n /**\n * Convert the given scientific notation to the 'expanded' decimal notation\n *\n * @example scientificToDecimal('-123.4567e-6') returns '-0.0001234567'\n *\n * @param {number|string} val\n * @returns {number|string}\n */\n }, {\n key: \"scientificToDecimal\",\n value: function scientificToDecimal(val) {\n // Check that the val is a Number\n var numericValue = Number(val);\n if (isNaN(numericValue)) {\n return NaN;\n }\n\n // Check if the number is in a scientific notation\n val = String(val);\n var isScientific = this.contains(val, 'e') || this.contains(val, 'E');\n if (!isScientific) {\n return val;\n }\n\n // Convert the scientific notation to a numeric string\n var _val$split = val.split(/e/i),\n _val$split2 = _slicedToArray(_val$split, 2),\n value = _val$split2[0],\n exponent = _val$split2[1];\n var isNegative = value < 0;\n if (isNegative) {\n value = value.replace('-', '');\n }\n var isNegativeExponent = +exponent < 0;\n if (isNegativeExponent) {\n exponent = exponent.replace('-', ''); // Remove the negative sign\n }\n\n var _value$split = value.split(/\\./),\n _value$split2 = _slicedToArray(_value$split, 2),\n _int = _value$split2[0],\n _float = _value$split2[1];\n var result;\n if (isNegativeExponent) {\n if (_int.length > exponent) {\n // Place the decimal point at the int length count minus exponent\n result = this.insertAt(_int, '.', _int.length - exponent);\n } else {\n // If that decimal point is greater than the int length, pad with zeros (ie. Number('-123.4567e-6') --> -0.0001234567)\n result = \"0.\".concat('0'.repeat(exponent - _int.length)).concat(_int);\n }\n result = \"\".concat(result).concat(_float ? _float : '');\n } else {\n // Positive exponent\n if (_float) {\n value = \"\".concat(_int).concat(_float); // Remove the '.', if any\n if (exponent < _float.length) {\n result = this.insertAt(value, '.', +exponent + _int.length);\n } else {\n result = \"\".concat(value).concat('0'.repeat(exponent - _float.length));\n }\n } else {\n value = value.replace('.', ''); // Single case where val is '1.e4'\n result = \"\".concat(value).concat('0'.repeat(Number(exponent)));\n }\n }\n if (isNegative) {\n // Put back the negative sign, if any\n result = \"-\".concat(result);\n }\n return result;\n }\n }]);\n return AutoNumericHelper;\n}();\n\n\n/***/ }),\n\n/***/ \"./src/AutoNumericOptions.js\":\n/*!***********************************!*\\\n !*** ./src/AutoNumericOptions.js ***!\n \\***********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AutoNumeric */ \"./src/AutoNumeric.js\");\n/**\n * Options for AutoNumeric.js\n * @author Alexandre Bonneau \n * @copyright © 2023 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\n\n\n/**\n * Options values enumeration\n */\n_AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options = {\n /* Defines if the decimal places should be padded with zeroes\n * `true` : always pad decimals with zeros (ie. '12.3400')\n * `false` : never pad with zeros (ie. '12.34')\n * `'floats'` : pad with zeroes only when there are decimals (ie. '12' and '12.3400')\n * Note: setting allowDecimalPadding to 'false' will override the 'decimalPlaces' setting.\n */\n allowDecimalPadding: {\n always: true,\n never: false,\n floats: 'floats'\n },\n /* Defines if the decimal character or decimal character alternative should be accepted when there is already a decimal character shown in the element.\n * If set to `true`, any decimal character input will be accepted and will subsequently modify the decimal character position, as well as the `rawValue`.\n * If set to `false`, the decimal character and its alternative key will be dropped as before. This is the default setting.\n */\n alwaysAllowDecimalCharacter: {\n alwaysAllow: true,\n doNotAllow: false\n },\n /* Defines where should be positioned the caret on focus\n * null : Do not enforce any caret positioning on focus (this is needed when using `selectOnFocus`)\n * `'start'` : put the caret of the far left side of the value (excluding the positive/negative sign and currency symbol, if any)\n * `'end'` : put the caret of the far right side of the value (excluding the positive/negative sign and currency symbol, if any)\n * `'decimalLeft'` : put the caret of the left of the decimal character if any\n * `'decimalRight'` : put the caret of the right of the decimal character if any\n */\n caretPositionOnFocus: {\n start: 'start',\n end: 'end',\n decimalLeft: 'decimalLeft',\n decimalRight: 'decimalRight',\n doNoForceCaretPosition: null\n },\n /* Defines if a local list of AutoNumeric objects should be kept when initializing this object.\n * This list is used by the `global.*` functions.\n */\n createLocalList: {\n createList: true,\n doNotCreateList: false\n },\n /* Defines the currency symbol string.\n * It can be a string of more than one character (allowing for instance to use a space on either side of it, example: '$ ' or ' $')\n * cf. https://en.wikipedia.org/wiki/Currency_symbol\n */\n currencySymbol: {\n none: '',\n currencySign: '¤',\n austral: '₳',\n // ARA\n australCentavo: '¢',\n baht: '฿',\n // THB\n cedi: '₵',\n // GHS\n cent: '¢',\n colon: '₡',\n // CRC\n cruzeiro: '₢',\n // BRB - Not used anymore since 1993\n dollar: '$',\n dong: '₫',\n // VND\n drachma: '₯',\n // GRD (or 'Δρχ.' or 'Δρ.')\n dram: '​֏',\n // AMD\n european: '₠',\n // XEU (old currency before the Euro)\n euro: '€',\n // EUR\n florin: 'ƒ',\n franc: '₣',\n // FRF\n guarani: '₲',\n // PYG\n hryvnia: '₴',\n // грн\n kip: '₭',\n // LAK\n att: 'ອັດ',\n // cents of the Kip\n lepton: 'Λ.',\n // cents of the Drachma\n lira: '₺',\n // TRY\n liraOld: '₤',\n lari: '₾',\n // GEL\n mark: 'ℳ',\n mill: '₥',\n naira: '₦',\n // NGN\n peseta: '₧',\n peso: '₱',\n // PHP\n pfennig: '₰',\n // cents of the Mark\n pound: '£',\n real: 'R$ ',\n // Brazilian real\n riel: '៛',\n // KHR\n ruble: '₽',\n // RUB\n rupee: '₹',\n // INR\n rupeeOld: '₨',\n shekel: '₪',\n shekelAlt: 'ש״ח‎‎',\n taka: '৳',\n // BDT\n tenge: '₸',\n // KZT\n togrog: '₮',\n // MNT\n won: '₩',\n yen: '¥'\n },\n /* Defines where the currency symbol should be placed (before of after the numbers)\n * for prefix currencySymbolPlacement: \"p\" (default)\n * for suffix currencySymbolPlacement: \"s\"\n */\n currencySymbolPlacement: {\n prefix: 'p',\n suffix: 's'\n },\n /* Defines what decimal separator character is used\n */\n decimalCharacter: {\n comma: ',',\n dot: '.',\n middleDot: '·',\n arabicDecimalSeparator: '٫',\n decimalSeparatorKeySymbol: '⎖'\n },\n /* Allow to declare an alternative decimal separator which is automatically replaced by `decimalCharacter` when typed.\n * This is used by countries that use a comma ',' as the decimal character and have keyboards with a numeric pads that have\n * a period 'full stop' as the decimal character (France or Spain for instance).\n */\n decimalCharacterAlternative: {\n none: null,\n comma: ',',\n dot: '.'\n },\n /* Defines the default number of decimal places to show on the formatted value, and keep for the precision.\n * Incidentally, since we need to be able to show that many decimal places, this also defines the raw value precision by default.\n */\n decimalPlaces: {\n none: 0,\n one: 1,\n two: 2,\n three: 3,\n four: 4,\n five: 5,\n six: 6\n },\n /* Defines how many decimal places should be kept for the raw value (ie. This is the precision for float values).\n *\n * If this option is set to `null` (which is the default), then the value of `decimalPlaces` is used for `decimalPlacesRawValue` as well.\n * Note: Setting this to a lower number of decimal places than the one to be shown will lead to confusion for the users.\n */\n decimalPlacesRawValue: {\n useDefault: null,\n none: 0,\n one: 1,\n two: 2,\n three: 3,\n four: 4,\n five: 5,\n six: 6\n },\n /* Defines how many decimal places should be visible when the element is unfocused.\n * If this is set to `null`, then this option is ignored, and the `decimalPlaces` option value will be used instead.\n * This means this is optional ; if omitted the decimal places will be the same when the input has the focus.\n *\n * This option can be used in conjonction with the two other `scale*` options, which allows to display a different formatted value when the element is unfocused, while another formatted value is shown when focused.\n * For those `scale*` options to have any effect, `divisorWhenUnfocused` must not be `null`.\n */\n decimalPlacesShownOnBlur: {\n useDefault: null,\n none: 0,\n one: 1,\n two: 2,\n three: 3,\n four: 4,\n five: 5,\n six: 6\n },\n /* Defines how many decimal places should be visible when the element has the focus.\n * If this is set to `null`, then this option is ignored, and the `decimalPlaces` option value will be used instead.\n *\n * Example:\n * For instance if `decimalPlacesShownOnFocus` is set to `5` and the default number of decimal places is `2`, then on focus `1,000.12345` will be shown, while without focus `1,000.12` will be set back.\n * Note 1: the results depends on the rounding method used.\n * Note 2: the `getNumericString()` method returns the extended decimal places\n */\n decimalPlacesShownOnFocus: {\n useDefault: null,\n none: 0,\n one: 1,\n two: 2,\n three: 3,\n four: 4,\n five: 5,\n six: 6\n },\n /* Helper option for ASP.NET postback\n * This should be set as the value of the unformatted default value\n * examples:\n * no default value=\"\" {defaultValueOverride: \"\"}\n * value=1234.56 {defaultValueOverride: '1234.56'}\n */\n defaultValueOverride: {\n doNotOverride: null\n },\n /* Defines how many numbers should be grouped together (usually for the thousand separator)\n * - \"2\", results in 99,99,99,99 Group by two\n * - \"2t\", results in 99,99,99,999 India's lakhs\n * - \"2s\", results in 99,999,99,99,999 India's lakhs scaled\n * - \"3\", results in 999,999,999 (default)\n * - \"4\", results in 9999,9999,9999 used in some Asian countries\n * Note: This option does not accept other grouping choice.\n */\n digitalGroupSpacing: {\n two: '2',\n twoThree: '2t',\n twoScaled: '2s',\n three: '3',\n four: '4'\n },\n /* Defines the thousand grouping separator character\n * Example : If `'.'` is set, then you'll get `'1.234.567'`\n */\n digitGroupSeparator: {\n comma: ',',\n dot: '.',\n normalSpace: ' ',\n thinSpace: \"\\u2009\",\n narrowNoBreakSpace: \"\\u202F\",\n noBreakSpace: \"\\xA0\",\n noSeparator: '',\n apostrophe: \"'\",\n arabicThousandsSeparator: '٬',\n dotAbove: '˙',\n privateUseTwo: '’' // \\u0092\n },\n\n /* The `divisorWhenUnfocused` divide the element value on focus.\n * On blur, the element value is multiplied back.\n *\n * Example : Display percentages using { divisorWhenUnfocused: 100 } (or directly in the Html with ``)\n * The divisor value does not need to be an integer, but please understand that Javascript has limited accuracy in math ; use with caution.\n * Note: The `getNumericString` method returns the full value, including the 'hidden' decimals.\n */\n divisorWhenUnfocused: {\n none: null,\n percentage: 100,\n permille: 1000,\n basisPoint: 10000\n },\n /* Defines what should be displayed in the element if the raw value is an empty string ('').\n * - 'focus' : The currency sign is displayed when the input receives focus (default)\n * - 'press' : The currency sign is displayed whenever a key is being pressed\n * - 'always' : The currency sign is always displayed\n * - 'zero' : A zero is displayed ('rounded' with or without a currency sign) if the input has no value on focus out\n * - 'min' : The minimum value is displayed if the input has no value on focus out\n * - 'max' : The maximum value is displayed if the input has no value on focus out\n * - 'null' : When the element is empty, the `rawValue` and the element value/text is set to `null`. This also allows to set the value to `null` using `anElement.set(null)`.\n */\n emptyInputBehavior: {\n focus: 'focus',\n press: 'press',\n always: 'always',\n zero: 'zero',\n min: 'min',\n max: 'max',\n \"null\": 'null'\n },\n /* Defines if the custom and native events triggered by AutoNumeric should bubble up or not.\n */\n eventBubbles: {\n bubbles: true,\n doesNotBubble: false\n },\n /* Defines if the custom and native events triggered by AutoNumeric should be cancelable.\n */\n eventIsCancelable: {\n isCancelable: true,\n isNotCancelable: false\n },\n /* This option is the 'strict mode' (aka 'debug' mode), which allows autoNumeric to strictly analyse the options passed, and fails if an unknown options is used in the settings object.\n * You should set that to `true` if you want to make sure you are only using 'pure' autoNumeric settings objects in your code.\n * If you see uncaught errors in the console and your code starts to fail, this means somehow those options gets polluted by another program (which usually happens when using frameworks).\n */\n failOnUnknownOption: {\n fail: true,\n ignore: false\n },\n /* Determine if the default value will be formatted on initialization.\n */\n formatOnPageLoad: {\n format: true,\n // automatically formats the default value on initialization\n doNotFormat: false // will not format the default value on initialization\n },\n\n /* Defines if the 'formula mode' can be activated by the user.\n * If set to `true`, then the user can enter the formula mode by entering the '=' character.\n * He will then be allowed to enter any simple math formula using numeric characters as well as the following operators +, -, *, /, ( and ).\n * The formula mode is closed when the user either validate their math expression using the `Enter` key, or when the element is blurred.\n * If the formula is invalid, the previous valid `rawValue` is set back, and the `autoNumeric:invalidFormula` event is sent.\n * When a valid formula is accepted, then its result is `set()`, and the `autoNumeric:validFormula` event is sent.\n *\n * By default, this mode is disabled.\n */\n formulaMode: {\n enabled: true,\n disabled: false\n },\n /* Set the undo/redo history table size.\n * Each record keeps the raw value as well and the last known caret/selection positions.\n */\n historySize: {\n verySmall: 5,\n small: 10,\n medium: 20,\n large: 50,\n veryLarge: 100,\n insane: Number.MAX_SAFE_INTEGER\n },\n /* Defines the name of the CSS class to use on contenteditable-enabled elements when the value is invalid\n * This is not used when the HTML element used is an input.\n */\n invalidClass: 'an-invalid',\n /* Allow the user to 'cancel' and undo the changes he made to the given autonumeric-managed element, by pressing the 'Escape' key.\n * Whenever the user 'validate' the input (either by hitting 'Enter', or blurring the element), the new value is saved for subsequent 'cancellation'.\n *\n * The process :\n * - save the input value on focus\n * - if the user change the input value, and hit `Escape`, then the initial value saved on focus is set back\n * - on the other hand if the user either have used `Enter` to validate (`Enter` throws a change event) his entries, or if the input value has been changed by another script in the mean time, then we save the new input value\n * - on a successful 'cancel', select the whole value (while respecting the `selectNumberOnly` option)\n * - bonus; if the value has not changed, hitting 'Esc' just select all the input value (while respecting the `selectNumberOnly` option)\n */\n isCancellable: {\n cancellable: true,\n notCancellable: false\n },\n /* Controls the leading zero behavior\n * - 'allow' : allows leading zeros to be entered. Zeros will be truncated when entering additional digits. On focusout zeros will be deleted\n * - 'deny' : allows only one leading zero on values that are between 1 and -1\n * - 'keep' : allows leading zeros to be entered. on focusout zeros will be retained\n */\n leadingZero: {\n allow: 'allow',\n deny: 'deny',\n keep: 'keep'\n },\n /* Defines the maximum possible value a user can enter.\n * Notes:\n * - this value must be a string and use the period for the decimal point\n * - this value needs to be larger than `minimumValue`\n */\n maximumValue: {\n tenTrillions: '10000000000000',\n // 10000 billions\n oneBillion: '1000000000',\n zero: '0'\n },\n /* Defines the minimum possible value a user can enter.\n * Notes:\n * - this value must be a string and use the period for the decimal point\n * - this value needs to be smaller than `maximumValue`\n * - if this is superior to 0, then you'll effectively prevent your user to entirely delete the content of your element\n */\n minimumValue: {\n tenTrillions: '-10000000000000',\n // 10000 billions\n oneBillion: '-1000000000',\n zero: '0'\n },\n /* Allows the user to increment or decrement the element value with the up and down arrow keys.\n * The behavior is similar to the mouse wheel one.\n * The up and down arrow keys behavior can be modified by the `upDownStep` option.\n * This `upDownStep` option can be used in two ways, either by setting:\n * - a 'fixed' step value (`upDownStep : 1000`), or\n * - the 'progressive' string (`upDownStep : 'progressive'`), which will then activate a special mode where the step is automatically calculated based on the element value size.\n */\n modifyValueOnUpDownArrow: {\n modifyValue: true,\n doNothing: false\n },\n /* Allows the user to increment or decrement the element value with the mouse wheel.\n * The behavior is similar to the up/down arrow one.\n * The wheel behavior can be modified by the `wheelStep` option.\n * This `wheelStep` option can be used in two ways, either by setting:\n * - a 'fixed' step value (`wheelStep : 1000`), or\n * - the 'progressive' string (`wheelStep : 'progressive'`), which will then activate a special mode where the step is automatically calculated based on the element value size.\n *\n * Note :\n * You can activate/deactivate the wheel event for each `wheelOn` option value by using the 'Shift' modifier key while using the mouse wheel.\n */\n modifyValueOnWheel: {\n modifyValue: true,\n doNothing: false\n },\n /* Adds brackets on negative values (ie. transforms '-$ 999.99' to '($999.99)')\n * Those brackets are visible only when the field does NOT have the focus.\n * The left and right symbols should be enclosed in quotes and separated by a comma.\n */\n negativeBracketsTypeOnBlur: {\n parentheses: '(,)',\n brackets: '[,]',\n chevrons: '<,>',\n curlyBraces: '{,}',\n angleBrackets: '〈,〉',\n japaneseQuotationMarks: '「,」',\n halfBrackets: '⸤,⸥',\n whiteSquareBrackets: '⟦,⟧',\n quotationMarks: '‹,›',\n guillemets: '«,»',\n none: null // This is the default value, which deactivate this feature\n },\n\n /* Placement of the negative/positive sign relative to the `currencySymbol` option.\n *\n * Example:\n * // Default values\n * -1,234.56 => default no options required\n * $-1,234.56 => {currencySymbol: \"$\", negativePositiveSignPlacement: \"r\"} // Default if negativePositiveSignPlacement is 'null' and currencySymbol is not empty\n *\n * // Sign on the left hand side of the whole number\n * -$1,234.56 => {currencySymbol: \"$\"} or {currencySymbol: \"$\", negativePositiveSignPlacement: \"l\"}\n * -1,234.56$ => {currencySymbol: \"$\", currencySymbolPlacement: \"s\", negativePositiveSignPlacement: \"p\"} // Default if negativePositiveSignPlacement is 'null' and currencySymbol is not empty\n *\n * // Sign on the right hand side of the whole number\n * 1,234.56- => {negativePositiveSignPlacement: \"s\"}\n * $1,234.56- => {currencySymbol: \"$\", negativePositiveSignPlacement: \"s\"}\n * 1,234.56-$ => {currencySymbol: \"$\", currencySymbolPlacement: \"s\"}\n * 1,234.56$- => {currencySymbol: \"$\", currencySymbolPlacement: \"s\", negativePositiveSignPlacement: \"r\"}\n */\n negativePositiveSignPlacement: {\n prefix: 'p',\n suffix: 's',\n left: 'l',\n right: 'r',\n none: null\n },\n /* Defines the negative sign symbol.\n * It can be a string of only one character.\n */\n negativeSignCharacter: {\n hyphen: '-',\n minus: '−',\n heavyMinus: '➖',\n fullWidthHyphen: '-',\n circledMinus: '⊖',\n squaredMinus: '⊟',\n triangleMinus: '⨺',\n plusMinus: '±',\n minusPlus: '∓',\n dotMinus: '∸',\n minusTilde: '≂',\n not: '¬'\n },\n /*\n * Defines if the negative sign should be toggled when hitting the negative or positive key multiple times.\n * When `toggle` is used, using the same '-' on '+' key will toggle between a positive and negative value.\n * When `doNotToggle` is used, using '-' will always set the value negative, and '+' will always set the value positive.\n */\n negativePositiveSignBehavior: {\n toggle: true,\n doNotToggle: false\n },\n /* Defines if the element should have event listeners activated on it.\n * By default, those event listeners are only added to elements and html element with the `contenteditable` attribute set to `true`, but not on the other html tags.\n * This allows to initialize elements without any event listeners.\n * Warning: Since AutoNumeric will not check the input content after its initialization, using some autoNumeric methods afterwards *will* probably leads to formatting problems.\n */\n noEventListeners: {\n noEvents: true,\n addEvents: false\n },\n /* Manage how autoNumeric react when the user tries to paste an invalid number.\n * - 'error' : (This is the default behavior) The input value is not changed and an error is output in the console.\n * - 'ignore' : idem than 'error', but fail silently without outputting any error/warning in the console.\n * - 'clamp' : if the pasted value is either too small or too big regarding the minimumValue and maximumValue range, then the result is clamped to those limits.\n * - 'truncate' : autoNumeric will insert as many pasted numbers it can at the initial caret/selection, until everything is pasted, or the range limit is hit.\n * The non-pasted numbers are dropped and therefore not used at all.\n * - 'replace' : autoNumeric will first insert as many pasted numbers it can at the initial caret/selection, then if the range limit is hit, it will try\n * to replace one by one the remaining initial numbers (on the right side of the caret) with the rest of the pasted numbers.\n *\n * Note 1 : A paste content starting with a negative sign '-' will be accepted anywhere in the input, and will set the resulting value as a negative number\n * Note 2 : A paste content starting with a number will be accepted, even if the rest is gibberish (ie. '123foobar456').\n * Only the first number will be used (here '123').\n * Note 3 : The paste event works with the `decimalPlacesShownOnFocus` option too.\n */\n onInvalidPaste: {\n error: 'error',\n ignore: 'ignore',\n clamp: 'clamp',\n truncate: 'truncate',\n replace: 'replace'\n },\n /* Defines how the value should be formatted when wanting a 'localized' version of it.\n * - null or 'string' => 'nnnn.nn' or '-nnnn.nn' as text type. This is the default behavior.\n * - 'number' => nnnn.nn or -nnnn.nn as a Number (Warning: this works only for integers inferior to Number.MAX_SAFE_INTEGER)\n * - ',' or '-,' => 'nnnn,nn' or '-nnnn,nn'\n * - '.-' => 'nnnn.nn' or 'nnnn.nn-'\n * - ',-' => 'nnnn,nn' or 'nnnn,nn-'\n *\n * Note: The hyphen '-' is translated to the custom negative sign defined in `negativeSignCharacter`\n */\n outputFormat: {\n string: 'string',\n number: 'number',\n dot: '.',\n negativeDot: '-.',\n comma: ',',\n negativeComma: '-,',\n dotNegative: '.-',\n commaNegative: ',-',\n none: null\n },\n /* Defines if AutoNumeric should let the user override the minimum and/or maximum limits when he types numbers in the element.\n * - 'ceiling' Strictly adheres to `maximumValue` and ignores the `minimumValue` settings\n * It allows the user to enter anything between -∞ `and maximumValue`\n * If `maximumValue` is less than 0, then it will prevent the user emptying the field or typing value above `maximumValue`, making sure the value entered is always valid\n * - 'floor' Strictly adheres to `minimumValue` and ignores the `maximumValue` settings\n * It allows the user to enter anything between `minimumValue` and +∞\n * If `minimumValue` is higher than 0, then it will prevent the user emptying the field or typing value below `minimumValue`, making sure the value entered is always valid\n * - 'ignore' Ignores both the `minimumValue` and `maximumValue` settings\n * When using this option, the field will always be valid range-wise\n * - 'invalid' The user can temporarily type out-of-bound values. In doing so, the invalid state is set on the field.\n * Whenever an invalid value is typed, an 'autoNumeric:invalidValue' event is sent\n * When the value is correctly set back within the limit boundaries, the invalid state is removed, and the 'autoNumeric:correctedValue' event is sent\n * - 'doNotOverride' Strictly adheres to the `maximumValue` and `minimumValue` settings\n * This is the default behavior\n * If `0` is out of the min/max range, this will prevent the user clearing the input field, making sure the value entered is always valid\n */\n overrideMinMaxLimits: {\n ceiling: 'ceiling',\n floor: 'floor',\n ignore: 'ignore',\n invalid: 'invalid',\n doNotOverride: null\n },\n /* Defines the positive sign symbol.\n * It can be a string of only one character.\n * This is shown only if `showPositiveSign` is set to `true`.\n */\n positiveSignCharacter: {\n plus: '+',\n fullWidthPlus: '+',\n heavyPlus: '➕',\n doublePlus: '⧺',\n triplePlus: '⧻',\n circledPlus: '⊕',\n squaredPlus: '⊞',\n trianglePlus: '⨹',\n plusMinus: '±',\n minusPlus: '∓',\n dotPlus: '∔',\n altHebrewPlus: '﬩',\n normalSpace: ' ',\n thinSpace: \"\\u2009\",\n narrowNoBreakSpace: \"\\u202F\",\n noBreakSpace: \"\\xA0\"\n },\n /* The `rawValueDivisor` divides the formatted value shown in the AutoNumeric element and store the result in `rawValue`.\n * @example { rawValueDivisor: '100' } or \n * Given the `0.01234` raw value, the formatted value will be displayed as `'1.234'`.\n * This is useful when displaying percentage for instance, and avoid the need to divide/multiply by 100 between the number shown and the raw value.\n */\n rawValueDivisor: {\n none: null,\n percentage: 100,\n permille: 1000,\n basisPoint: 10000\n },\n /* Defines if the element (`` or another allowed html tag) should be set as read-only on initialization.\n * When set to `true`, then:\n * - the `readonly` html property is added to the element on initialization, or\n * - the `contenteditable` attribute is set to `false` on non-input elements.\n */\n readOnly: {\n readOnly: true,\n readWrite: false\n },\n /* Defines the rounding method to use.\n * roundingMethod: \"S\", Round-Half-Up Symmetric (default)\n * roundingMethod: \"A\", Round-Half-Up Asymmetric\n * roundingMethod: \"s\", Round-Half-Down Symmetric (lower case s)\n * roundingMethod: \"a\", Round-Half-Down Asymmetric (lower case a)\n * roundingMethod: \"B\", Round-Half-Even \"Bankers Rounding\"\n * roundingMethod: \"U\", Round Up \"Round-Away-From-Zero\"\n * roundingMethod: \"D\", Round Down \"Round-Toward-Zero\" - same as truncate\n * roundingMethod: \"C\", Round to Ceiling \"Toward Positive Infinity\"\n * roundingMethod: \"F\", Round to Floor \"Toward Negative Infinity\"\n * roundingMethod: \"N05\" Rounds to the nearest .05 => same as \"CHF\" used in 1.9X and still valid\n * roundingMethod: \"U05\" Rounds up to next .05\n * roundingMethod: \"D05\" Rounds down to next .05\n */\n roundingMethod: {\n halfUpSymmetric: 'S',\n halfUpAsymmetric: 'A',\n halfDownSymmetric: 's',\n halfDownAsymmetric: 'a',\n halfEvenBankersRounding: 'B',\n upRoundAwayFromZero: 'U',\n downRoundTowardZero: 'D',\n toCeilingTowardPositiveInfinity: 'C',\n toFloorTowardNegativeInfinity: 'F',\n toNearest05: 'N05',\n toNearest05Alt: 'CHF',\n upToNext05: 'U05',\n downToNext05: 'D05'\n },\n /* Set to `true` to allow the `decimalPlacesShownOnFocus` value to be saved with sessionStorage\n * If IE 6 or 7 is detected, the value will be saved as a session cookie.\n */\n saveValueToSessionStorage: {\n save: true,\n doNotSave: false\n },\n /* Determine if the select all keyboard command will select the complete input text, or only the input numeric value\n * Note : If the currency symbol is between the numeric value and the negative sign, only the numeric value will be selected\n */\n selectNumberOnly: {\n selectNumbersOnly: true,\n selectAll: false\n },\n /* Defines if the element value should be selected on focus.\n * Note: The selection is done using the `selectNumberOnly` option.\n */\n selectOnFocus: {\n select: true,\n doNotSelect: false\n },\n /* Defines how the serialize functions should treat the spaces.\n * Those spaces ' ' can either be converted to the plus sign '+', which is the default, or to '%20'.\n * Both values being valid per the spec (http://www.w3.org/Addressing/URL/uri-spec.html).\n * Also see the summed up answer on http://stackoverflow.com/a/33939287.\n *\n * tl;dr : Spaces should be converted to '%20' before the '?' sign, then converted to '+' after.\n * In our case since we serialize the query, we use '+' as the default (but allow the user to get back the old *wrong* behavior).\n */\n serializeSpaces: {\n plus: '+',\n percent: '%20'\n },\n /* Defines if the element value should be converted to the raw value on focus (and back to the formatted on blur).\n * If set to `true`, then autoNumeric remove the thousand separator, currency symbol and suffix on focus.\n * Example:\n * If the input value is '$ 1,999.88 suffix', on focus it becomes '1999.88' and back to '$ 1,999.88 suffix' on blur.\n */\n showOnlyNumbersOnFocus: {\n onlyNumbers: true,\n showAll: false\n },\n /* Allow the positive sign symbol `+` to be displayed for positive numbers.\n * By default, this positive sign is not shown.\n * The sign placement is controlled by the 'negativePositiveSignPlacement' option, mimicking the negative sign placement rules.\n */\n showPositiveSign: {\n show: true,\n hide: false\n },\n /* Defines if warnings should be shown in the console.\n * Those warnings can be ignored, but are usually printed when something could be improved by the user (ie. option conflicts).\n */\n showWarnings: {\n show: true,\n // All warning are shown\n hide: false // No warnings are shown, only the thrown errors\n },\n\n /* Defines the rules that calculate the CSS class(es) to apply on the element, based on the raw unformatted value.\n * This can also be used to call callbacks whenever the `rawValue` is updated.\n * Important: all callbacks must return `null` if no ranges/userDefined classes are selected\n * @example\n * {\n * positive : 'autoNumeric-positive', // Or `null` to not use it\n * negative : 'autoNumeric-negative',\n * ranges : [\n * { min: 0, max: 25, class: 'autoNumeric-red' },\n * { min: 25, max: 50, class: 'autoNumeric-orange' },\n * { min: 50, max: 75, class: 'autoNumeric-yellow' },\n * { min: 75, max: Number.MAX_SAFE_INTEGER, class: 'autoNumeric-green' },\n * ],\n * userDefined: [\n * // If 'classes' is a string, set it if `true`, remove it if `false`\n * { callback: rawValue => { return true; }, classes: 'thisIsTrue' },\n * // If 'classes' is an array with only 2 elements, set the first class if `true`, the second if `false`\n * { callback: rawValue => rawValue % 2 === 0, classes: ['autoNumeric-even', 'autoNumeric-odd'] },\n * // Return only one index to use on the `classes` array (here, 'class3')\n * { callback: rawValue => { return 2; }, classes: ['class1', 'class2', 'class3'] },\n * // Return an array of indexes to use on the `classes` array (here, 'class1' and 'class3')\n * { callback: rawValue => { return [0, 2]; }, classes: ['class1', 'class2', 'class3'] },\n * // If 'classes' is `undefined` or `null`, then the callback is called with the AutoNumeric object passed as a parameter\n * { callback: anElement => { return anElement.getFormatted(); } },\n * ],\n * }\n */\n styleRules: {\n none: null,\n positiveNegative: {\n positive: 'autoNumeric-positive',\n negative: 'autoNumeric-negative'\n },\n range0To100With4Steps: {\n ranges: [{\n min: 0,\n max: 25,\n \"class\": 'autoNumeric-red'\n }, {\n min: 25,\n max: 50,\n \"class\": 'autoNumeric-orange'\n }, {\n min: 50,\n max: 75,\n \"class\": 'autoNumeric-yellow'\n }, {\n min: 75,\n max: 100,\n \"class\": 'autoNumeric-green'\n }]\n },\n evenOdd: {\n userDefined: [{\n callback: function callback(rawValue) {\n return rawValue % 2 === 0;\n },\n classes: ['autoNumeric-even', 'autoNumeric-odd']\n }]\n },\n rangeSmallAndZero: {\n userDefined: [{\n callback: function callback(rawValue) {\n if (rawValue >= -1 && rawValue < 0) {\n return 0;\n }\n if (Number(rawValue) === 0) {\n return 1;\n }\n if (rawValue > 0 && rawValue <= 1) {\n return 2;\n }\n return null; // In case the rawValue is outside those ranges\n },\n\n classes: ['autoNumeric-small-negative', 'autoNumeric-zero', 'autoNumeric-small-positive']\n }]\n }\n },\n /* Add a text on the right hand side of the element value.\n * This suffix text can have any characters in its string, except numeric characters and the negative/positive sign.\n * Example: ' dollars'\n */\n suffixText: {\n none: '',\n percentage: '%',\n permille: '‰',\n basisPoint: '‱'\n },\n /* The three options (divisorWhenUnfocused, decimalPlacesShownOnBlur & symbolWhenUnfocused) handle scaling of the input when the input does not have focus\n * Please note that the non-scaled value is held in data and it is advised that you use the `saveValueToSessionStorage` option to ensure retaining the value\n * [\"divisor\", \"decimal places\", \"symbol\"]\n * Example: with the following options set {divisorWhenUnfocused: '1000', decimalPlacesShownOnBlur: '1', symbolWhenUnfocused: ' K'}\n * Example: focusin value \"1,111.11\" focusout value \"1.1 K\"\n */\n\n /* The `symbolWhenUnfocused` option is a symbol placed as a suffix when not in focus.\n * This is optional too.\n */\n symbolWhenUnfocused: {\n none: null,\n percentage: '%',\n permille: '‰',\n basisPoint: '‱'\n },\n /* Defines if the element value should be unformatted when the user hover his mouse over it while holding the `Alt` key.\n * Unformatting there means that this removes any non-number characters and displays the *raw* value, as understood by Javascript (ie. `12.34` is a valid number, while `12,34` is not).\n *\n * We reformat back before anything else if :\n * - the user focus on the element by tabbing or clicking into it,\n * - the user releases the `Alt` key, and\n * - if we detect a mouseleave event.\n *\n * We unformat again if :\n * - while the mouse is over the element, the user hit `Alt` again\n */\n unformatOnHover: {\n unformat: true,\n doNotUnformat: false //TODO Rename to `keepFormat`\n },\n\n /* Removes the formatting and use the raw value in each autoNumeric elements of the parent form element, on the form `submit` event.\n * The output format is a numeric string (nnnn.nn or -nnnn.nn).\n */\n unformatOnSubmit: {\n unformat: true,\n keepCurrentValue: false\n },\n /* That option is linked to the `modifyValueOnUpDownArrow` one and will only be used if the latter is set to `true`.\n * This option will modify the up/down arrow behavior and can be used in two ways, either by setting :\n * - a 'fixed' step value (a positive float or integer number (ex: `1000`)), or\n * - the `'progressive'` string.\n *\n * The 'fixed' mode always increment/decrement the element value by that amount, while respecting the `minimumValue` and `maximumValue` settings.\n * The 'progressive' mode will increment/decrement the element value based on its current value. The bigger the number, the bigger the step, and vice versa.\n */\n upDownStep: {\n progressive: 'progressive'\n },\n /* Provides a way for automatically replacing the formatted value with a pre-defined string, when the raw value is equal to a specific value\n * Here you can specify as many 'conversion' as needed.\n */\n valuesToStrings: {\n none: null,\n zeroDash: {\n 0: '-'\n },\n oneAroundZero: {\n '-1': 'Min',\n 1: 'Max'\n }\n },\n /* Defines if the AutoNumeric element should watch external changes made without using `.set()`, but by using the basic `aNElement.node().value = 42` notation.\n * If set to `watch`, then AutoNumeric will format the new value using `.set()` internally.\n * Otherwise it will neither format it, nor save it in the history.\n */\n watchExternalChanges: {\n watch: true,\n doNotWatch: false\n },\n /* Defines when the wheel event will increment or decrement the element value.\n * When set to `'focus'`, the AutoNumeric-managed element needs to be focused for the wheel event to change the value.\n * When set to `'hover'`, using the wheel event while the mouse is hovering the element is sufficient (no focus needed).\n *\n * Note :\n * When `wheelOn` is set to `'focus'`, you can use the 'Shift' modifier key while using the mouse wheel in order to temporarily activate the increment/decrement feature even if the element is not focused.\n * When `wheelOn` is set to `'hover'`, you can use the 'Shift' modifier key while using the mouse wheel in order to temporarily disable the increment/decrement feature even if the element is not hovered.\n */\n wheelOn: {\n focus: 'focus',\n hover: 'hover'\n },\n /* That option is linked to the `modifyValueOnWheel` one and will only be used if the latter is set to `true`.\n * This option will modify the wheel behavior and can be used in two ways, either by setting :\n * - a 'fixed' step value (a positive float or integer (ex: number `1000`)), or\n * - the `'progressive'` string.\n *\n * The 'fixed' mode always increment/decrement the element value by that amount, while respecting the `minimumValue` and `maximumValue` settings.\n * The 'progressive' mode will increment/decrement the element value based on its current value. The bigger the number, the bigger the step, and vice versa.\n */\n wheelStep: {\n progressive: 'progressive'\n }\n};\n\n/**\n * Simple function that will semi-deep freeze the `AutoNumeric.options` object.\n * By 'semi' it means the nested objects in the `styleRules` option are not frozen.\n * The ones in the `valuesToStrings` are though, since they are much more simple.\n *\n * @param {object} options\n * @returns {ReadonlyArray}\n */\nfunction freezeOptions(options) {\n // Freeze each property objects\n Object.getOwnPropertyNames(options).forEach(function (optionName) {\n if (optionName === 'valuesToStrings') {\n var vsProps = Object.getOwnPropertyNames(options.valuesToStrings);\n vsProps.forEach(function (valuesToStringObjectName) {\n if (options.valuesToStrings[valuesToStringObjectName] !== null) {\n Object.freeze(options.valuesToStrings[valuesToStringObjectName]);\n }\n });\n } else if (optionName !== 'styleRules') {\n if (options[optionName] !== null) {\n Object.freeze(options[optionName]);\n }\n }\n });\n\n // Then freeze the options object globally\n return Object.freeze(options);\n}\nfreezeOptions(_AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options);\nObject.defineProperty(_AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"], 'options', {\n configurable: false,\n writable: false\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({});\n\n/***/ }),\n\n/***/ \"./src/AutoNumericPredefinedOptions.js\":\n/*!*********************************************!*\\\n !*** ./src/AutoNumericPredefinedOptions.js ***!\n \\*********************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AutoNumeric */ \"./src/AutoNumeric.js\");\n/* harmony import */ var _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AutoNumericHelper */ \"./src/AutoNumericHelper.js\");\n/**\n * Pre-defined options for AutoNumeric.js\n * @author Alexandre Bonneau \n * @copyright © 2023 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\n\n\nvar euro = {\n // Français\n digitGroupSeparator: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.digitGroupSeparator.dot,\n // or '\\u202f'\n decimalCharacter: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.decimalCharacter.comma,\n decimalCharacterAlternative: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.decimalCharacterAlternative.dot,\n currencySymbol: \"\\u202F\\u20AC\",\n currencySymbolPlacement: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.currencySymbolPlacement.suffix,\n negativePositiveSignPlacement: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.negativePositiveSignPlacement.prefix\n};\nvar dollar = {\n digitGroupSeparator: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.digitGroupSeparator.comma,\n decimalCharacter: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.decimalCharacter.dot,\n currencySymbol: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.currencySymbol.dollar,\n currencySymbolPlacement: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.currencySymbolPlacement.prefix,\n negativePositiveSignPlacement: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.negativePositiveSignPlacement.right\n};\nvar japanese = {\n // 日本語\n digitGroupSeparator: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.digitGroupSeparator.comma,\n decimalCharacter: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.decimalCharacter.dot,\n currencySymbol: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.currencySymbol.yen,\n currencySymbolPlacement: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.currencySymbolPlacement.prefix,\n negativePositiveSignPlacement: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.negativePositiveSignPlacement.right\n};\n\n// Here we need to clone the initial objects in order to be able to edit the clones without affecting the originals\nvar euroF = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].cloneObject(euro);\neuroF.formulaMode = _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.formulaMode.enabled;\nvar euroPos = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].cloneObject(euro);\neuroPos.minimumValue = 0;\nvar euroNeg = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].cloneObject(euro);\neuroNeg.maximumValue = 0;\neuroNeg.negativePositiveSignPlacement = _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.negativePositiveSignPlacement.prefix;\nvar euroSpace = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].cloneObject(euro);\neuroSpace.digitGroupSeparator = _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.digitGroupSeparator.normalSpace;\nvar euroSpacePos = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].cloneObject(euroSpace);\neuroSpacePos.minimumValue = 0;\nvar euroSpaceNeg = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].cloneObject(euroSpace);\neuroSpaceNeg.maximumValue = 0;\neuroSpaceNeg.negativePositiveSignPlacement = _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.negativePositiveSignPlacement.prefix;\nvar percentageEU2dec = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].cloneObject(euro);\npercentageEU2dec.currencySymbol = _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.currencySymbol.none;\npercentageEU2dec.suffixText = \"\\u202F\".concat(_AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.suffixText.percentage);\npercentageEU2dec.wheelStep = 0.0001; // This targets the `rawValue`, not the formatted one\npercentageEU2dec.rawValueDivisor = _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.rawValueDivisor.percentage;\nvar percentageEU2decPos = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].cloneObject(percentageEU2dec);\npercentageEU2decPos.minimumValue = 0;\nvar percentageEU2decNeg = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].cloneObject(percentageEU2dec);\npercentageEU2decNeg.maximumValue = 0;\npercentageEU2decNeg.negativePositiveSignPlacement = _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.negativePositiveSignPlacement.prefix;\nvar percentageEU3dec = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].cloneObject(percentageEU2dec);\npercentageEU3dec.decimalPlaces = 3;\nvar percentageEU3decPos = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].cloneObject(percentageEU2decPos);\npercentageEU3decPos.decimalPlaces = 3;\nvar percentageEU3decNeg = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].cloneObject(percentageEU2decNeg);\npercentageEU3decNeg.decimalPlaces = 3;\nvar dollarF = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].cloneObject(dollar);\ndollarF.formulaMode = _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.formulaMode.enabled;\nvar dollarPos = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].cloneObject(dollar);\ndollarPos.minimumValue = 0;\nvar dollarNeg = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].cloneObject(dollar);\ndollarNeg.maximumValue = 0;\ndollarNeg.negativePositiveSignPlacement = _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.negativePositiveSignPlacement.prefix;\nvar dollarNegBrackets = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].cloneObject(dollarNeg);\ndollarNegBrackets.negativeBracketsTypeOnBlur = _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.negativeBracketsTypeOnBlur.parentheses;\nvar percentageUS2dec = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].cloneObject(dollar);\npercentageUS2dec.currencySymbol = _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.currencySymbol.none;\npercentageUS2dec.suffixText = _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.suffixText.percentage;\npercentageUS2dec.wheelStep = 0.0001;\npercentageUS2dec.rawValueDivisor = _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.rawValueDivisor.percentage;\nvar percentageUS2decPos = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].cloneObject(percentageUS2dec);\npercentageUS2decPos.minimumValue = 0;\nvar percentageUS2decNeg = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].cloneObject(percentageUS2dec);\npercentageUS2decNeg.maximumValue = 0;\npercentageUS2decNeg.negativePositiveSignPlacement = _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.negativePositiveSignPlacement.prefix;\nvar percentageUS3dec = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].cloneObject(percentageUS2dec);\npercentageUS3dec.decimalPlaces = 3;\nvar percentageUS3decPos = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].cloneObject(percentageUS2decPos);\npercentageUS3decPos.decimalPlaces = 3;\nvar percentageUS3decNeg = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].cloneObject(percentageUS2decNeg);\npercentageUS3decNeg.decimalPlaces = 3;\nvar turkish = _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].cloneObject(euro);\nturkish.currencySymbol = _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.currencySymbol.lira;\n\n/**\n * Predefined options for the most common languages\n */\n_AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].predefinedOptions = {\n euro: euro,\n euroPos: euroPos,\n euroNeg: euroNeg,\n euroSpace: euroSpace,\n euroSpacePos: euroSpacePos,\n euroSpaceNeg: euroSpaceNeg,\n percentageEU2dec: percentageEU2dec,\n percentageEU2decPos: percentageEU2decPos,\n percentageEU2decNeg: percentageEU2decNeg,\n percentageEU3dec: percentageEU3dec,\n percentageEU3decPos: percentageEU3decPos,\n percentageEU3decNeg: percentageEU3decNeg,\n dollar: dollar,\n dollarPos: dollarPos,\n dollarNeg: dollarNeg,\n dollarNegBrackets: dollarNegBrackets,\n percentageUS2dec: percentageUS2dec,\n percentageUS2decPos: percentageUS2decPos,\n percentageUS2decNeg: percentageUS2decNeg,\n percentageUS3dec: percentageUS3dec,\n percentageUS3decPos: percentageUS3decPos,\n percentageUS3decNeg: percentageUS3decNeg,\n French: euro,\n // Français\n Spanish: euro,\n // Español\n NorthAmerican: dollar,\n British: {\n digitGroupSeparator: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.digitGroupSeparator.comma,\n decimalCharacter: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.decimalCharacter.dot,\n currencySymbol: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.currencySymbol.pound,\n currencySymbolPlacement: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.currencySymbolPlacement.prefix,\n negativePositiveSignPlacement: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.negativePositiveSignPlacement.right\n },\n Swiss: {\n // Suisse\n digitGroupSeparator: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.digitGroupSeparator.apostrophe,\n decimalCharacter: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.decimalCharacter.dot,\n currencySymbol: \"\\u202FCHF\",\n currencySymbolPlacement: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.currencySymbolPlacement.suffix,\n negativePositiveSignPlacement: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.negativePositiveSignPlacement.prefix\n },\n Japanese: japanese,\n // 日本語\n Chinese: japanese,\n // 中国語 (Chinese)\n Brazilian: {\n digitGroupSeparator: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.digitGroupSeparator.dot,\n decimalCharacter: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.decimalCharacter.comma,\n currencySymbol: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.currencySymbol.real,\n currencySymbolPlacement: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.currencySymbolPlacement.prefix,\n negativePositiveSignPlacement: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.negativePositiveSignPlacement.right\n },\n Turkish: turkish,\n dotDecimalCharCommaSeparator: {\n digitGroupSeparator: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.digitGroupSeparator.comma,\n decimalCharacter: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.decimalCharacter.dot\n },\n commaDecimalCharDotSeparator: {\n digitGroupSeparator: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.digitGroupSeparator.dot,\n decimalCharacter: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.decimalCharacter.comma,\n decimalCharacterAlternative: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.decimalCharacterAlternative.dot\n },\n integer: {\n decimalPlaces: 0\n },\n integerPos: {\n minimumValue: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.minimumValue.zero,\n decimalPlaces: 0\n },\n integerNeg: {\n maximumValue: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.maximumValue.zero,\n decimalPlaces: 0\n },\n \"float\": {\n allowDecimalPadding: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.allowDecimalPadding.never\n },\n floatPos: {\n allowDecimalPadding: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.allowDecimalPadding.never,\n minimumValue: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.minimumValue.zero,\n maximumValue: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.maximumValue.tenTrillions\n },\n floatNeg: {\n allowDecimalPadding: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.allowDecimalPadding.never,\n minimumValue: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.minimumValue.tenTrillions,\n maximumValue: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.maximumValue.zero\n },\n numeric: {\n digitGroupSeparator: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.digitGroupSeparator.noSeparator,\n decimalCharacter: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.decimalCharacter.dot,\n currencySymbol: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.currencySymbol.none\n },\n numericPos: {\n digitGroupSeparator: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.digitGroupSeparator.noSeparator,\n decimalCharacter: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.decimalCharacter.dot,\n currencySymbol: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.currencySymbol.none,\n minimumValue: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.minimumValue.zero,\n maximumValue: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.maximumValue.tenTrillions\n },\n numericNeg: {\n digitGroupSeparator: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.digitGroupSeparator.noSeparator,\n decimalCharacter: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.decimalCharacter.dot,\n currencySymbol: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.currencySymbol.none,\n minimumValue: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.minimumValue.tenTrillions,\n maximumValue: _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].options.maximumValue.zero\n }\n};\nObject.getOwnPropertyNames(_AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].predefinedOptions).forEach(function (optionName) {\n Object.freeze(_AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].predefinedOptions[optionName]);\n});\nObject.freeze(_AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"].predefinedOptions);\nObject.defineProperty(_AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"], 'predefinedOptions', {\n configurable: false,\n writable: false\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({});\n\n/***/ }),\n\n/***/ \"./src/maths/ASTNode.js\":\n/*!******************************!*\\\n !*** ./src/maths/ASTNode.js ***!\n \\******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ASTNode)\n/* harmony export */ });\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/**\n * Math expression tokenizer/parser/evaluator functions for autoNumeric.js\n *\n * @author Alexandre Bonneau \n * @copyright © 2019 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n/**\n * The Abstract Syntax Tree node\n *\n * Each node carries the node information such as type (operator type), value (if it's a leaf), and the left and right branches\n */\nvar ASTNode = /*#__PURE__*/function () {\n function ASTNode() {\n _classCallCheck(this, ASTNode);\n }\n _createClass(ASTNode, null, [{\n key: \"createNode\",\n value:\n /*\n constructor() {\n // this.type = void(0);\n // this.value = 0;\n // this.left = null;\n // this.right = null;\n }\n */\n\n function createNode(type, left, right) {\n var node = new ASTNode();\n node.type = type;\n node.left = left;\n node.right = right;\n return node;\n }\n }, {\n key: \"createUnaryNode\",\n value: function createUnaryNode(left) {\n var node = new ASTNode();\n node.type = 'unaryMinus';\n node.left = left;\n node.right = null;\n return node;\n }\n }, {\n key: \"createLeaf\",\n value: function createLeaf(value) {\n var node = new ASTNode();\n node.type = 'number';\n node.value = value;\n return node;\n }\n }]);\n return ASTNode;\n}();\n\n\n/***/ }),\n\n/***/ \"./src/maths/Evaluator.js\":\n/*!********************************!*\\\n !*** ./src/maths/Evaluator.js ***!\n \\********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Evaluator)\n/* harmony export */ });\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/**\n * Math expression tokenizer/parser/evaluator functions for autoNumeric.js\n *\n * @author Alexandre Bonneau \n * @copyright © 2019 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n/**\n * Recursively evaluate the abstract syntax tree (AST) and return the result for the given sub-tree\n */\nvar Evaluator = /*#__PURE__*/function () {\n function Evaluator(ast) {\n _classCallCheck(this, Evaluator);\n if (ast === null) {\n throw new Error(\"Invalid AST\");\n }\n\n // return this.evaluate(ast);\n }\n _createClass(Evaluator, [{\n key: \"evaluate\",\n value: function evaluate(subtree) {\n if (subtree === void 0 || subtree === null) {\n throw new Error(\"Invalid AST sub-tree\");\n }\n if (subtree.type === 'number') {\n return subtree.value;\n } else if (subtree.type === 'unaryMinus') {\n return -this.evaluate(subtree.left);\n } else {\n var left = this.evaluate(subtree.left);\n var right = this.evaluate(subtree.right);\n switch (subtree.type) {\n case 'op_+':\n return Number(left) + Number(right);\n case 'op_-':\n return left - right;\n case 'op_*':\n return left * right;\n case 'op_/':\n return left / right;\n default:\n throw new Error(\"Invalid operator '\".concat(subtree.type, \"'\"));\n }\n }\n }\n }]);\n return Evaluator;\n}();\n\n\n/***/ }),\n\n/***/ \"./src/maths/Lexer.js\":\n/*!****************************!*\\\n !*** ./src/maths/Lexer.js ***!\n \\****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Lexer)\n/* harmony export */ });\n/* harmony import */ var _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../AutoNumericHelper */ \"./src/AutoNumericHelper.js\");\n/* harmony import */ var _Token__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Token */ \"./src/maths/Token.js\");\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/**\n * Math expression tokenizer/parser/evaluator functions for autoNumeric.js\n *\n * @author Alexandre Bonneau \n * @copyright © 2019 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\n\n\nvar Lexer = /*#__PURE__*/function () {\n function Lexer(text) {\n _classCallCheck(this, Lexer);\n this.text = text;\n this.textLength = text.length;\n this.index = 0;\n this.token = new _Token__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('Error', 0, 0);\n }\n\n /**\n * Ignore white spaces and increment the index count until a non-space character is found\n * @private\n */\n _createClass(Lexer, [{\n key: \"_skipSpaces\",\n value: function _skipSpaces() {\n while (this.text[this.index] === ' ' && this.index <= this.textLength) {\n this.index++;\n }\n }\n\n /**\n * Return the current index\n *\n * @returns {number}\n */\n }, {\n key: \"getIndex\",\n value: function getIndex() {\n return this.index;\n }\n\n /**\n * Return the next token object\n *\n * @param {string} decimalCharacter The decimal character to use in the float numbers\n * @returns {Token}\n */\n }, {\n key: \"getNextToken\",\n value: function getNextToken() {\n var decimalCharacter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '.';\n this._skipSpaces();\n\n // Test for the end of text\n if (this.textLength === this.index) {\n this.token.type = 'EOT'; // End of text\n\n return this.token;\n }\n\n // If the current character is a digit read a number\n if (_AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isDigit(this.text[this.index])) {\n this.token.type = 'num';\n this.token.value = this._getNumber(decimalCharacter);\n return this.token;\n }\n\n // Check if the current character is an operator or parentheses\n this.token.type = 'Error';\n switch (this.text[this.index]) {\n case '+':\n this.token.type = '+';\n break;\n case '-':\n this.token.type = '-';\n break;\n case '*':\n this.token.type = '*';\n break;\n case '/':\n this.token.type = '/';\n break;\n case '(':\n this.token.type = '(';\n break;\n case ')':\n this.token.type = ')';\n break;\n }\n if (this.token.type !== 'Error') {\n this.token.symbol = this.text[this.index];\n this.index++;\n } else {\n throw new Error(\"Unexpected token '\".concat(this.token.symbol, \"' at position '\").concat(this.token.index, \"' in the token function\"));\n }\n return this.token;\n }\n\n /**\n * Return the integer or float number starting from the `this.index` string index\n *\n * @param {string} decimalCharacter The decimal character to use in the float numbers\n *\n * @returns {string}\n * @private\n */\n }, {\n key: \"_getNumber\",\n value: function _getNumber(decimalCharacter) {\n this._skipSpaces();\n var startIndex = this.index;\n while (this.index <= this.textLength && _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isDigit(this.text[this.index])) {\n // Integer part\n this.index++;\n }\n if (this.text[this.index] === decimalCharacter) {\n this.index++;\n }\n while (this.index <= this.textLength && _AutoNumericHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isDigit(this.text[this.index])) {\n // Decimal part, if any\n this.index++;\n }\n if (this.index === startIndex) {\n throw new Error(\"No number has been found while it was expected\");\n }\n\n // Convert the localized float number to a Javascript number\n return this.text.substring(startIndex, this.index).replace(decimalCharacter, '.');\n }\n }]);\n return Lexer;\n}();\n\n\n/***/ }),\n\n/***/ \"./src/maths/Parser.js\":\n/*!*****************************!*\\\n !*** ./src/maths/Parser.js ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Parser)\n/* harmony export */ });\n/* harmony import */ var _ASTNode__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ASTNode */ \"./src/maths/ASTNode.js\");\n/* harmony import */ var _Lexer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Lexer */ \"./src/maths/Lexer.js\");\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/**\n * Math expression tokenizer/parser/evaluator functions for autoNumeric.js\n *\n * @author Alexandre Bonneau \n * @copyright © 2019 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\n\n\n\n/**\n * Math expression parser using the shunting-yard algorithm\n *\n * This implements the following BNF grammar:\n * EXP -> TERM MORE_EXP\n * MORE_EXP -> + TERM MORE_EXP |\n * - TERM MORE_EXP |\n * epsilon\n * TERM -> FACTOR MORE_TERM\n * MORE_TERM -> * FACTOR MORE_TERM |\n * / FACTOR MORE_TERM |\n * epsilon\n * FACTOR -> number |\n * ( EXP ) |\n * - FACTOR\n */\nvar Parser = /*#__PURE__*/function () {\n /**\n * Parse the given string, and generate an abstract syntax tree (AST) from the math expression\n *\n * @param {string} text\n * @param {string} customDecimalCharacter The custom decimal character to use in floats\n * @returns {ASTNode}\n */\n function Parser(text) {\n var customDecimalCharacter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '.';\n _classCallCheck(this, Parser);\n this.text = text;\n this.decimalCharacter = customDecimalCharacter;\n this.lexer = new _Lexer__WEBPACK_IMPORTED_MODULE_1__[\"default\"](text);\n this.token = this.lexer.getNextToken(this.decimalCharacter);\n return this._exp();\n }\n _createClass(Parser, [{\n key: \"_exp\",\n value: function _exp() {\n var termNode = this._term();\n var exprNode = this._moreExp();\n\n //TODO Do not create an 'empty' node where this is added to 0\n return _ASTNode__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createNode('op_+', termNode, exprNode);\n }\n }, {\n key: \"_moreExp\",\n value: function _moreExp() {\n var termNode;\n var exprNode;\n switch (this.token.type) {\n case '+':\n this.token = this.lexer.getNextToken(this.decimalCharacter);\n termNode = this._term();\n exprNode = this._moreExp();\n return _ASTNode__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createNode('op_+', exprNode, termNode);\n case '-':\n this.token = this.lexer.getNextToken(this.decimalCharacter);\n termNode = this._term();\n exprNode = this._moreExp();\n return _ASTNode__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createNode('op_-', exprNode, termNode);\n }\n return _ASTNode__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createLeaf(0);\n }\n }, {\n key: \"_term\",\n value: function _term() {\n var factorNode = this._factor();\n var termsNode = this._moreTerms();\n\n //TODO Do not create an 'empty' node where this is multiplied by 1\n return _ASTNode__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createNode('op_*', factorNode, termsNode);\n }\n }, {\n key: \"_moreTerms\",\n value: function _moreTerms() {\n var factorNode;\n var termsNode;\n switch (this.token.type) {\n case '*':\n this.token = this.lexer.getNextToken(this.decimalCharacter);\n factorNode = this._factor();\n termsNode = this._moreTerms();\n return _ASTNode__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createNode('op_*', termsNode, factorNode);\n case '/':\n this.token = this.lexer.getNextToken(this.decimalCharacter);\n factorNode = this._factor();\n termsNode = this._moreTerms();\n return _ASTNode__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createNode('op_/', termsNode, factorNode);\n }\n return _ASTNode__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createLeaf(1);\n }\n }, {\n key: \"_factor\",\n value: function _factor() {\n var expression;\n var factor;\n var value;\n switch (this.token.type) {\n case 'num':\n value = this.token.value;\n this.token = this.lexer.getNextToken(this.decimalCharacter);\n return _ASTNode__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createLeaf(value);\n case '-':\n this.token = this.lexer.getNextToken(this.decimalCharacter);\n factor = this._factor();\n return _ASTNode__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createUnaryNode(factor);\n case '(':\n this.token = this.lexer.getNextToken(this.decimalCharacter);\n expression = this._exp();\n this._match(')');\n return expression;\n default:\n {\n throw new Error(\"Unexpected token '\".concat(this.token.symbol, \"' with type '\").concat(this.token.type, \"' at position '\").concat(this.token.index, \"' in the factor function\"));\n }\n }\n }\n }, {\n key: \"_match\",\n value: function _match(expected) {\n var index = this.lexer.getIndex() - 1;\n if (this.text[index] === expected) {\n this.token = this.lexer.getNextToken(this.decimalCharacter);\n } else {\n throw new Error(\"Unexpected token '\".concat(this.token.symbol, \"' at position '\").concat(index, \"' in the match function\"));\n }\n }\n }]);\n return Parser;\n}();\n\n\n/***/ }),\n\n/***/ \"./src/maths/Token.js\":\n/*!****************************!*\\\n !*** ./src/maths/Token.js ***!\n \\****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Token)\n/* harmony export */ });\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n/**\n * Math expression tokenizer/parser/evaluator functions for autoNumeric.js\n *\n * @author Alexandre Bonneau \n * @copyright © 2019 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n/**\n * Data structure used by the Lexer and Parser classes\n */\nvar Token = /*#__PURE__*/_createClass(function Token(type, value, symbol) {\n _classCallCheck(this, Token);\n this.type = type;\n this.value = value;\n this.symbol = symbol;\n});\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (exports, definition) => {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t(() => {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = (exports) => {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.\n(() => {\n/*!*********************!*\\\n !*** ./src/main.js ***!\n \\*********************/\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _AutoNumeric__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AutoNumeric */ \"./src/AutoNumeric.js\");\n/* harmony import */ var _AutoNumericEvents__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AutoNumericEvents */ \"./src/AutoNumericEvents.js\");\n/* harmony import */ var _AutoNumericOptions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AutoNumericOptions */ \"./src/AutoNumericOptions.js\");\n/* harmony import */ var _AutoNumericDefaultSettings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./AutoNumericDefaultSettings */ \"./src/AutoNumericDefaultSettings.js\");\n/* harmony import */ var _AutoNumericPredefinedOptions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./AutoNumericPredefinedOptions */ \"./src/AutoNumericPredefinedOptions.js\");\n/**\n * Babel + Webpack workaround for AutoNumeric\n *\n * @author Alexandre Bonneau \n * @copyright © 2023 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\n\n\n\n\n\n\n/* eslint no-unused-vars: 0 */\n\n/**\n * This file serve as the main entry point to the library.\n *\n * This is needed since if the Webpack entrypoint is set to `./src/AutoNumeric.js`, then the AutoNumericEvents, AutoNumericOptions, AutoNumericDefaultSettings and AutoNumericPredefinedOptions files are not included in the bundle and therefore cannot be used.\n *\n * @type {AutoNumeric}\n */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_AutoNumeric__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n})();\n\n__webpack_exports__ = __webpack_exports__[\"default\"];\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=autoNumeric.js.map","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"ak-wrapper\",\n {\n class: {\n \"ak-wrapper--no-header\":\n _vm.$authService && !_vm.$authService.isAuthenticated(),\n },\n },\n [\n _vm.$authService.isAuthenticated() && _vm.userInterface\n ? _c(\"ak-header\", {\n attrs: { drawerPinned: _vm.drawerPinned },\n scopedSlots: _vm._u(\n [\n {\n key: \"header-left\",\n fn: function () {\n return [_c(\"cms-active-workspace\")]\n },\n proxy: true,\n },\n {\n key: \"header-right\",\n fn: function () {\n return [\n _c(\"cms-settings-menu\"),\n _vm._v(\" \"),\n _c(\"cms-account-menu\"),\n ]\n },\n proxy: true,\n },\n ],\n null,\n false,\n 1432248215\n ),\n model: {\n value: _vm.showDrawer,\n callback: function ($$v) {\n _vm.showDrawer = $$v\n },\n expression: \"showDrawer\",\n },\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"ak-drawer\",\n {\n attrs: {\n logoPath: _vm.$getSetting(\"assets.logoDrawer\"),\n showDrawer: _vm.showDrawer,\n },\n on: {\n close: function ($event) {\n _vm.showDrawer = false\n },\n togglePinned: function ($event) {\n _vm.drawerPinned = $event\n },\n },\n },\n [\n _vm.userInterface\n ? _c(\"ak-menu\", {\n attrs: { items: _vm.userInterface.menu, searchEnabled: true },\n on: {\n menuItemClicked: function ($event) {\n !_vm.drawerPinned ? (_vm.showDrawer = false) : null\n },\n },\n })\n : _vm._e(),\n ],\n 1\n ),\n _vm._v(\" \"),\n !_vm.$authService.isAuthenticated() ||\n (_vm.$authService.isAuthenticated() && _vm.userInterface)\n ? _c(\n \"div\",\n {\n staticClass: \"ak-content\",\n class: {\n \"ak-content--pinned\":\n _vm.drawerPinned &&\n _vm.$authService &&\n _vm.$authService.isAuthenticated(),\n },\n },\n [_c(\"router-view\")],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"ak-loader\", { attrs: { size: \"large\", loading: _vm.loading } }),\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=c1862d7c&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Volumes/htdocs/optiek-dominiek-blueprints/src/vue-apps/admin/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('c1862d7c')) {\n api.createRecord('c1862d7c', component.options)\n } else {\n api.reload('c1862d7c', component.options)\n }\n module.hot.accept(\"./App.vue?vue&type=template&id=c1862d7c&\", function () {\n api.rerender('c1862d7c', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"views/App.vue\"\nexport default component.exports","\n\n\n\n","/*!\n * vue-router v3.5.4\n * (c) 2022 Evan You\n * @license MIT\n */\n/* */\n\nfunction assert (condition, message) {\n if (!condition) {\n throw new Error((\"[vue-router] \" + message))\n }\n}\n\nfunction warn (condition, message) {\n if (!condition) {\n typeof console !== 'undefined' && console.warn((\"[vue-router] \" + message));\n }\n}\n\nfunction extend (a, b) {\n for (var key in b) {\n a[key] = b[key];\n }\n return a\n}\n\n/* */\n\nvar encodeReserveRE = /[!'()*]/g;\nvar encodeReserveReplacer = function (c) { return '%' + c.charCodeAt(0).toString(16); };\nvar commaRE = /%2C/g;\n\n// fixed encodeURIComponent which is more conformant to RFC3986:\n// - escapes [!'()*]\n// - preserve commas\nvar encode = function (str) { return encodeURIComponent(str)\n .replace(encodeReserveRE, encodeReserveReplacer)\n .replace(commaRE, ','); };\n\nfunction decode (str) {\n try {\n return decodeURIComponent(str)\n } catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, (\"Error decoding \\\"\" + str + \"\\\". Leaving it intact.\"));\n }\n }\n return str\n}\n\nfunction resolveQuery (\n query,\n extraQuery,\n _parseQuery\n) {\n if ( extraQuery === void 0 ) extraQuery = {};\n\n var parse = _parseQuery || parseQuery;\n var parsedQuery;\n try {\n parsedQuery = parse(query || '');\n } catch (e) {\n process.env.NODE_ENV !== 'production' && warn(false, e.message);\n parsedQuery = {};\n }\n for (var key in extraQuery) {\n var value = extraQuery[key];\n parsedQuery[key] = Array.isArray(value)\n ? value.map(castQueryParamValue)\n : castQueryParamValue(value);\n }\n return parsedQuery\n}\n\nvar castQueryParamValue = function (value) { return (value == null || typeof value === 'object' ? value : String(value)); };\n\nfunction parseQuery (query) {\n var res = {};\n\n query = query.trim().replace(/^(\\?|#|&)/, '');\n\n if (!query) {\n return res\n }\n\n query.split('&').forEach(function (param) {\n var parts = param.replace(/\\+/g, ' ').split('=');\n var key = decode(parts.shift());\n var val = parts.length > 0 ? decode(parts.join('=')) : null;\n\n if (res[key] === undefined) {\n res[key] = val;\n } else if (Array.isArray(res[key])) {\n res[key].push(val);\n } else {\n res[key] = [res[key], val];\n }\n });\n\n return res\n}\n\nfunction stringifyQuery (obj) {\n var res = obj\n ? Object.keys(obj)\n .map(function (key) {\n var val = obj[key];\n\n if (val === undefined) {\n return ''\n }\n\n if (val === null) {\n return encode(key)\n }\n\n if (Array.isArray(val)) {\n var result = [];\n val.forEach(function (val2) {\n if (val2 === undefined) {\n return\n }\n if (val2 === null) {\n result.push(encode(key));\n } else {\n result.push(encode(key) + '=' + encode(val2));\n }\n });\n return result.join('&')\n }\n\n return encode(key) + '=' + encode(val)\n })\n .filter(function (x) { return x.length > 0; })\n .join('&')\n : null;\n return res ? (\"?\" + res) : ''\n}\n\n/* */\n\nvar trailingSlashRE = /\\/?$/;\n\nfunction createRoute (\n record,\n location,\n redirectedFrom,\n router\n) {\n var stringifyQuery = router && router.options.stringifyQuery;\n\n var query = location.query || {};\n try {\n query = clone(query);\n } catch (e) {}\n\n var route = {\n name: location.name || (record && record.name),\n meta: (record && record.meta) || {},\n path: location.path || '/',\n hash: location.hash || '',\n query: query,\n params: location.params || {},\n fullPath: getFullPath(location, stringifyQuery),\n matched: record ? formatMatch(record) : []\n };\n if (redirectedFrom) {\n route.redirectedFrom = getFullPath(redirectedFrom, stringifyQuery);\n }\n return Object.freeze(route)\n}\n\nfunction clone (value) {\n if (Array.isArray(value)) {\n return value.map(clone)\n } else if (value && typeof value === 'object') {\n var res = {};\n for (var key in value) {\n res[key] = clone(value[key]);\n }\n return res\n } else {\n return value\n }\n}\n\n// the starting route that represents the initial state\nvar START = createRoute(null, {\n path: '/'\n});\n\nfunction formatMatch (record) {\n var res = [];\n while (record) {\n res.unshift(record);\n record = record.parent;\n }\n return res\n}\n\nfunction getFullPath (\n ref,\n _stringifyQuery\n) {\n var path = ref.path;\n var query = ref.query; if ( query === void 0 ) query = {};\n var hash = ref.hash; if ( hash === void 0 ) hash = '';\n\n var stringify = _stringifyQuery || stringifyQuery;\n return (path || '/') + stringify(query) + hash\n}\n\nfunction isSameRoute (a, b, onlyPath) {\n if (b === START) {\n return a === b\n } else if (!b) {\n return false\n } else if (a.path && b.path) {\n return a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') && (onlyPath ||\n a.hash === b.hash &&\n isObjectEqual(a.query, b.query))\n } else if (a.name && b.name) {\n return (\n a.name === b.name &&\n (onlyPath || (\n a.hash === b.hash &&\n isObjectEqual(a.query, b.query) &&\n isObjectEqual(a.params, b.params))\n )\n )\n } else {\n return false\n }\n}\n\nfunction isObjectEqual (a, b) {\n if ( a === void 0 ) a = {};\n if ( b === void 0 ) b = {};\n\n // handle null value #1566\n if (!a || !b) { return a === b }\n var aKeys = Object.keys(a).sort();\n var bKeys = Object.keys(b).sort();\n if (aKeys.length !== bKeys.length) {\n return false\n }\n return aKeys.every(function (key, i) {\n var aVal = a[key];\n var bKey = bKeys[i];\n if (bKey !== key) { return false }\n var bVal = b[key];\n // query values can be null and undefined\n if (aVal == null || bVal == null) { return aVal === bVal }\n // check nested equality\n if (typeof aVal === 'object' && typeof bVal === 'object') {\n return isObjectEqual(aVal, bVal)\n }\n return String(aVal) === String(bVal)\n })\n}\n\nfunction isIncludedRoute (current, target) {\n return (\n current.path.replace(trailingSlashRE, '/').indexOf(\n target.path.replace(trailingSlashRE, '/')\n ) === 0 &&\n (!target.hash || current.hash === target.hash) &&\n queryIncludes(current.query, target.query)\n )\n}\n\nfunction queryIncludes (current, target) {\n for (var key in target) {\n if (!(key in current)) {\n return false\n }\n }\n return true\n}\n\nfunction handleRouteEntered (route) {\n for (var i = 0; i < route.matched.length; i++) {\n var record = route.matched[i];\n for (var name in record.instances) {\n var instance = record.instances[name];\n var cbs = record.enteredCbs[name];\n if (!instance || !cbs) { continue }\n delete record.enteredCbs[name];\n for (var i$1 = 0; i$1 < cbs.length; i$1++) {\n if (!instance._isBeingDestroyed) { cbs[i$1](instance); }\n }\n }\n }\n}\n\nvar View = {\n name: 'RouterView',\n functional: true,\n props: {\n name: {\n type: String,\n default: 'default'\n }\n },\n render: function render (_, ref) {\n var props = ref.props;\n var children = ref.children;\n var parent = ref.parent;\n var data = ref.data;\n\n // used by devtools to display a router-view badge\n data.routerView = true;\n\n // directly use parent context's createElement() function\n // so that components rendered by router-view can resolve named slots\n var h = parent.$createElement;\n var name = props.name;\n var route = parent.$route;\n var cache = parent._routerViewCache || (parent._routerViewCache = {});\n\n // determine current view depth, also check to see if the tree\n // has been toggled inactive but kept-alive.\n var depth = 0;\n var inactive = false;\n while (parent && parent._routerRoot !== parent) {\n var vnodeData = parent.$vnode ? parent.$vnode.data : {};\n if (vnodeData.routerView) {\n depth++;\n }\n if (vnodeData.keepAlive && parent._directInactive && parent._inactive) {\n inactive = true;\n }\n parent = parent.$parent;\n }\n data.routerViewDepth = depth;\n\n // render previous view if the tree is inactive and kept-alive\n if (inactive) {\n var cachedData = cache[name];\n var cachedComponent = cachedData && cachedData.component;\n if (cachedComponent) {\n // #2301\n // pass props\n if (cachedData.configProps) {\n fillPropsinData(cachedComponent, data, cachedData.route, cachedData.configProps);\n }\n return h(cachedComponent, data, children)\n } else {\n // render previous empty view\n return h()\n }\n }\n\n var matched = route.matched[depth];\n var component = matched && matched.components[name];\n\n // render empty node if no matched route or no config component\n if (!matched || !component) {\n cache[name] = null;\n return h()\n }\n\n // cache component\n cache[name] = { component: component };\n\n // attach instance registration hook\n // this will be called in the instance's injected lifecycle hooks\n data.registerRouteInstance = function (vm, val) {\n // val could be undefined for unregistration\n var current = matched.instances[name];\n if (\n (val && current !== vm) ||\n (!val && current === vm)\n ) {\n matched.instances[name] = val;\n }\n }\n\n // also register instance in prepatch hook\n // in case the same component instance is reused across different routes\n ;(data.hook || (data.hook = {})).prepatch = function (_, vnode) {\n matched.instances[name] = vnode.componentInstance;\n };\n\n // register instance in init hook\n // in case kept-alive component be actived when routes changed\n data.hook.init = function (vnode) {\n if (vnode.data.keepAlive &&\n vnode.componentInstance &&\n vnode.componentInstance !== matched.instances[name]\n ) {\n matched.instances[name] = vnode.componentInstance;\n }\n\n // if the route transition has already been confirmed then we weren't\n // able to call the cbs during confirmation as the component was not\n // registered yet, so we call it here.\n handleRouteEntered(route);\n };\n\n var configProps = matched.props && matched.props[name];\n // save route and configProps in cache\n if (configProps) {\n extend(cache[name], {\n route: route,\n configProps: configProps\n });\n fillPropsinData(component, data, route, configProps);\n }\n\n return h(component, data, children)\n }\n};\n\nfunction fillPropsinData (component, data, route, configProps) {\n // resolve props\n var propsToPass = data.props = resolveProps(route, configProps);\n if (propsToPass) {\n // clone to prevent mutation\n propsToPass = data.props = extend({}, propsToPass);\n // pass non-declared props as attrs\n var attrs = data.attrs = data.attrs || {};\n for (var key in propsToPass) {\n if (!component.props || !(key in component.props)) {\n attrs[key] = propsToPass[key];\n delete propsToPass[key];\n }\n }\n }\n}\n\nfunction resolveProps (route, config) {\n switch (typeof config) {\n case 'undefined':\n return\n case 'object':\n return config\n case 'function':\n return config(route)\n case 'boolean':\n return config ? route.params : undefined\n default:\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false,\n \"props in \\\"\" + (route.path) + \"\\\" is a \" + (typeof config) + \", \" +\n \"expecting an object, function or boolean.\"\n );\n }\n }\n}\n\n/* */\n\nfunction resolvePath (\n relative,\n base,\n append\n) {\n var firstChar = relative.charAt(0);\n if (firstChar === '/') {\n return relative\n }\n\n if (firstChar === '?' || firstChar === '#') {\n return base + relative\n }\n\n var stack = base.split('/');\n\n // remove trailing segment if:\n // - not appending\n // - appending to trailing slash (last segment is empty)\n if (!append || !stack[stack.length - 1]) {\n stack.pop();\n }\n\n // resolve relative path\n var segments = relative.replace(/^\\//, '').split('/');\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n if (segment === '..') {\n stack.pop();\n } else if (segment !== '.') {\n stack.push(segment);\n }\n }\n\n // ensure leading slash\n if (stack[0] !== '') {\n stack.unshift('');\n }\n\n return stack.join('/')\n}\n\nfunction parsePath (path) {\n var hash = '';\n var query = '';\n\n var hashIndex = path.indexOf('#');\n if (hashIndex >= 0) {\n hash = path.slice(hashIndex);\n path = path.slice(0, hashIndex);\n }\n\n var queryIndex = path.indexOf('?');\n if (queryIndex >= 0) {\n query = path.slice(queryIndex + 1);\n path = path.slice(0, queryIndex);\n }\n\n return {\n path: path,\n query: query,\n hash: hash\n }\n}\n\nfunction cleanPath (path) {\n return path.replace(/\\/(?:\\s*\\/)+/g, '/')\n}\n\nvar isarray = Array.isArray || function (arr) {\n return Object.prototype.toString.call(arr) == '[object Array]';\n};\n\n/**\n * Expose `pathToRegexp`.\n */\nvar pathToRegexp_1 = pathToRegexp;\nvar parse_1 = parse;\nvar compile_1 = compile;\nvar tokensToFunction_1 = tokensToFunction;\nvar tokensToRegExp_1 = tokensToRegExp;\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n // \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n // \"/*\" => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g');\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n var tokens = [];\n var key = 0;\n var index = 0;\n var path = '';\n var defaultDelimiter = options && options.delimiter || '/';\n var res;\n\n while ((res = PATH_REGEXP.exec(str)) != null) {\n var m = res[0];\n var escaped = res[1];\n var offset = res.index;\n path += str.slice(index, offset);\n index = offset + m.length;\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1];\n continue\n }\n\n var next = str[index];\n var prefix = res[2];\n var name = res[3];\n var capture = res[4];\n var group = res[5];\n var modifier = res[6];\n var asterisk = res[7];\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path);\n path = '';\n }\n\n var partial = prefix != null && next != null && next !== prefix;\n var repeat = modifier === '+' || modifier === '*';\n var optional = modifier === '?' || modifier === '*';\n var delimiter = res[2] || defaultDelimiter;\n var pattern = capture || group;\n\n tokens.push({\n name: name || key++,\n prefix: prefix || '',\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n partial: partial,\n asterisk: !!asterisk,\n pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')\n });\n }\n\n // Match any characters still remaining.\n if (index < str.length) {\n path += str.substr(index);\n }\n\n // If the path exists, push it onto the end.\n if (path) {\n tokens.push(path);\n }\n\n return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n return tokensToFunction(parse(str, options), options)\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n return encodeURI(str).replace(/[?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length);\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options));\n }\n }\n\n return function (obj, opts) {\n var path = '';\n var data = obj || {};\n var options = opts || {};\n var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent;\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (typeof token === 'string') {\n path += token;\n\n continue\n }\n\n var value = data[token.name];\n var segment;\n\n if (value == null) {\n if (token.optional) {\n // Prepend partial segment prefixes.\n if (token.partial) {\n path += token.prefix;\n }\n\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined')\n }\n }\n\n if (isarray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j]);\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment;\n }\n\n continue\n }\n\n segment = token.asterisk ? encodeAsterisk(value) : encode(value);\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n }\n\n path += token.prefix + segment;\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param {!RegExp} re\n * @param {Array} keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n re.keys = keys;\n return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {!Array} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g);\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n partial: false,\n asterisk: false,\n pattern: null\n });\n }\n }\n\n return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = [];\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source);\n }\n\n var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options));\n\n return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {!Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options);\n keys = [];\n }\n\n options = options || {};\n\n var strict = options.strict;\n var end = options.end !== false;\n var route = '';\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (typeof token === 'string') {\n route += escapeString(token);\n } else {\n var prefix = escapeString(token.prefix);\n var capture = '(?:' + token.pattern + ')';\n\n keys.push(token);\n\n if (token.repeat) {\n capture += '(?:' + prefix + capture + ')*';\n }\n\n if (token.optional) {\n if (!token.partial) {\n capture = '(?:' + prefix + '(' + capture + '))?';\n } else {\n capture = prefix + '(' + capture + ')?';\n }\n } else {\n capture = prefix + '(' + capture + ')';\n }\n\n route += capture;\n }\n }\n\n var delimiter = escapeString(options.delimiter || '/');\n var endsWithDelimiter = route.slice(-delimiter.length) === delimiter;\n\n // In non-strict mode we allow a slash at the end of match. If the path to\n // match already ends with a slash, we remove it for consistency. The slash\n // is valid at the end of a path match, not in the middle. This is important\n // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n if (!strict) {\n route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?';\n }\n\n if (end) {\n route += '$';\n } else {\n // In non-ending mode, we need the capturing groups to match as much as\n // possible by using a positive lookahead to the end or next path segment.\n route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)';\n }\n\n return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options);\n keys = [];\n }\n\n options = options || {};\n\n if (path instanceof RegExp) {\n return regexpToRegexp(path, /** @type {!Array} */ (keys))\n }\n\n if (isarray(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\npathToRegexp_1.parse = parse_1;\npathToRegexp_1.compile = compile_1;\npathToRegexp_1.tokensToFunction = tokensToFunction_1;\npathToRegexp_1.tokensToRegExp = tokensToRegExp_1;\n\n/* */\n\n// $flow-disable-line\nvar regexpCompileCache = Object.create(null);\n\nfunction fillParams (\n path,\n params,\n routeMsg\n) {\n params = params || {};\n try {\n var filler =\n regexpCompileCache[path] ||\n (regexpCompileCache[path] = pathToRegexp_1.compile(path));\n\n // Fix #2505 resolving asterisk routes { name: 'not-found', params: { pathMatch: '/not-found' }}\n // and fix #3106 so that you can work with location descriptor object having params.pathMatch equal to empty string\n if (typeof params.pathMatch === 'string') { params[0] = params.pathMatch; }\n\n return filler(params, { pretty: true })\n } catch (e) {\n if (process.env.NODE_ENV !== 'production') {\n // Fix #3072 no warn if `pathMatch` is string\n warn(typeof params.pathMatch === 'string', (\"missing param for \" + routeMsg + \": \" + (e.message)));\n }\n return ''\n } finally {\n // delete the 0 if it was added\n delete params[0];\n }\n}\n\n/* */\n\nfunction normalizeLocation (\n raw,\n current,\n append,\n router\n) {\n var next = typeof raw === 'string' ? { path: raw } : raw;\n // named target\n if (next._normalized) {\n return next\n } else if (next.name) {\n next = extend({}, raw);\n var params = next.params;\n if (params && typeof params === 'object') {\n next.params = extend({}, params);\n }\n return next\n }\n\n // relative params\n if (!next.path && next.params && current) {\n next = extend({}, next);\n next._normalized = true;\n var params$1 = extend(extend({}, current.params), next.params);\n if (current.name) {\n next.name = current.name;\n next.params = params$1;\n } else if (current.matched.length) {\n var rawPath = current.matched[current.matched.length - 1].path;\n next.path = fillParams(rawPath, params$1, (\"path \" + (current.path)));\n } else if (process.env.NODE_ENV !== 'production') {\n warn(false, \"relative params navigation requires a current route.\");\n }\n return next\n }\n\n var parsedPath = parsePath(next.path || '');\n var basePath = (current && current.path) || '/';\n var path = parsedPath.path\n ? resolvePath(parsedPath.path, basePath, append || next.append)\n : basePath;\n\n var query = resolveQuery(\n parsedPath.query,\n next.query,\n router && router.options.parseQuery\n );\n\n var hash = next.hash || parsedPath.hash;\n if (hash && hash.charAt(0) !== '#') {\n hash = \"#\" + hash;\n }\n\n return {\n _normalized: true,\n path: path,\n query: query,\n hash: hash\n }\n}\n\n/* */\n\n// work around weird flow bug\nvar toTypes = [String, Object];\nvar eventTypes = [String, Array];\n\nvar noop = function () {};\n\nvar warnedCustomSlot;\nvar warnedTagProp;\nvar warnedEventProp;\n\nvar Link = {\n name: 'RouterLink',\n props: {\n to: {\n type: toTypes,\n required: true\n },\n tag: {\n type: String,\n default: 'a'\n },\n custom: Boolean,\n exact: Boolean,\n exactPath: Boolean,\n append: Boolean,\n replace: Boolean,\n activeClass: String,\n exactActiveClass: String,\n ariaCurrentValue: {\n type: String,\n default: 'page'\n },\n event: {\n type: eventTypes,\n default: 'click'\n }\n },\n render: function render (h) {\n var this$1 = this;\n\n var router = this.$router;\n var current = this.$route;\n var ref = router.resolve(\n this.to,\n current,\n this.append\n );\n var location = ref.location;\n var route = ref.route;\n var href = ref.href;\n\n var classes = {};\n var globalActiveClass = router.options.linkActiveClass;\n var globalExactActiveClass = router.options.linkExactActiveClass;\n // Support global empty active class\n var activeClassFallback =\n globalActiveClass == null ? 'router-link-active' : globalActiveClass;\n var exactActiveClassFallback =\n globalExactActiveClass == null\n ? 'router-link-exact-active'\n : globalExactActiveClass;\n var activeClass =\n this.activeClass == null ? activeClassFallback : this.activeClass;\n var exactActiveClass =\n this.exactActiveClass == null\n ? exactActiveClassFallback\n : this.exactActiveClass;\n\n var compareTarget = route.redirectedFrom\n ? createRoute(null, normalizeLocation(route.redirectedFrom), null, router)\n : route;\n\n classes[exactActiveClass] = isSameRoute(current, compareTarget, this.exactPath);\n classes[activeClass] = this.exact || this.exactPath\n ? classes[exactActiveClass]\n : isIncludedRoute(current, compareTarget);\n\n var ariaCurrentValue = classes[exactActiveClass] ? this.ariaCurrentValue : null;\n\n var handler = function (e) {\n if (guardEvent(e)) {\n if (this$1.replace) {\n router.replace(location, noop);\n } else {\n router.push(location, noop);\n }\n }\n };\n\n var on = { click: guardEvent };\n if (Array.isArray(this.event)) {\n this.event.forEach(function (e) {\n on[e] = handler;\n });\n } else {\n on[this.event] = handler;\n }\n\n var data = { class: classes };\n\n var scopedSlot =\n !this.$scopedSlots.$hasNormal &&\n this.$scopedSlots.default &&\n this.$scopedSlots.default({\n href: href,\n route: route,\n navigate: handler,\n isActive: classes[activeClass],\n isExactActive: classes[exactActiveClass]\n });\n\n if (scopedSlot) {\n if (process.env.NODE_ENV !== 'production' && !this.custom) {\n !warnedCustomSlot && warn(false, 'In Vue Router 4, the v-slot API will by default wrap its content with an element. Use the custom prop to remove this warning:\\n\\n');\n warnedCustomSlot = true;\n }\n if (scopedSlot.length === 1) {\n return scopedSlot[0]\n } else if (scopedSlot.length > 1 || !scopedSlot.length) {\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false,\n (\" with to=\\\"\" + (this.to) + \"\\\" is trying to use a scoped slot but it didn't provide exactly one child. Wrapping the content with a span element.\")\n );\n }\n return scopedSlot.length === 0 ? h() : h('span', {}, scopedSlot)\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if ('tag' in this.$options.propsData && !warnedTagProp) {\n warn(\n false,\n \"'s tag prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link.\"\n );\n warnedTagProp = true;\n }\n if ('event' in this.$options.propsData && !warnedEventProp) {\n warn(\n false,\n \"'s event prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link.\"\n );\n warnedEventProp = true;\n }\n }\n\n if (this.tag === 'a') {\n data.on = on;\n data.attrs = { href: href, 'aria-current': ariaCurrentValue };\n } else {\n // find the first child and apply listener and href\n var a = findAnchor(this.$slots.default);\n if (a) {\n // in case the is a static node\n a.isStatic = false;\n var aData = (a.data = extend({}, a.data));\n aData.on = aData.on || {};\n // transform existing events in both objects into arrays so we can push later\n for (var event in aData.on) {\n var handler$1 = aData.on[event];\n if (event in on) {\n aData.on[event] = Array.isArray(handler$1) ? handler$1 : [handler$1];\n }\n }\n // append new listeners for router-link\n for (var event$1 in on) {\n if (event$1 in aData.on) {\n // on[event] is always a function\n aData.on[event$1].push(on[event$1]);\n } else {\n aData.on[event$1] = handler;\n }\n }\n\n var aAttrs = (a.data.attrs = extend({}, a.data.attrs));\n aAttrs.href = href;\n aAttrs['aria-current'] = ariaCurrentValue;\n } else {\n // doesn't have child, apply listener to self\n data.on = on;\n }\n }\n\n return h(this.tag, data, this.$slots.default)\n }\n};\n\nfunction guardEvent (e) {\n // don't redirect with control keys\n if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) { return }\n // don't redirect when preventDefault called\n if (e.defaultPrevented) { return }\n // don't redirect on right click\n if (e.button !== undefined && e.button !== 0) { return }\n // don't redirect if `target=\"_blank\"`\n if (e.currentTarget && e.currentTarget.getAttribute) {\n var target = e.currentTarget.getAttribute('target');\n if (/\\b_blank\\b/i.test(target)) { return }\n }\n // this may be a Weex event which doesn't have this method\n if (e.preventDefault) {\n e.preventDefault();\n }\n return true\n}\n\nfunction findAnchor (children) {\n if (children) {\n var child;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n if (child.tag === 'a') {\n return child\n }\n if (child.children && (child = findAnchor(child.children))) {\n return child\n }\n }\n }\n}\n\nvar _Vue;\n\nfunction install (Vue) {\n if (install.installed && _Vue === Vue) { return }\n install.installed = true;\n\n _Vue = Vue;\n\n var isDef = function (v) { return v !== undefined; };\n\n var registerInstance = function (vm, callVal) {\n var i = vm.$options._parentVnode;\n if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) {\n i(vm, callVal);\n }\n };\n\n Vue.mixin({\n beforeCreate: function beforeCreate () {\n if (isDef(this.$options.router)) {\n this._routerRoot = this;\n this._router = this.$options.router;\n this._router.init(this);\n Vue.util.defineReactive(this, '_route', this._router.history.current);\n } else {\n this._routerRoot = (this.$parent && this.$parent._routerRoot) || this;\n }\n registerInstance(this, this);\n },\n destroyed: function destroyed () {\n registerInstance(this);\n }\n });\n\n Object.defineProperty(Vue.prototype, '$router', {\n get: function get () { return this._routerRoot._router }\n });\n\n Object.defineProperty(Vue.prototype, '$route', {\n get: function get () { return this._routerRoot._route }\n });\n\n Vue.component('RouterView', View);\n Vue.component('RouterLink', Link);\n\n var strats = Vue.config.optionMergeStrategies;\n // use the same hook merging strategy for route hooks\n strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created;\n}\n\n/* */\n\nvar inBrowser = typeof window !== 'undefined';\n\n/* */\n\nfunction createRouteMap (\n routes,\n oldPathList,\n oldPathMap,\n oldNameMap,\n parentRoute\n) {\n // the path list is used to control path matching priority\n var pathList = oldPathList || [];\n // $flow-disable-line\n var pathMap = oldPathMap || Object.create(null);\n // $flow-disable-line\n var nameMap = oldNameMap || Object.create(null);\n\n routes.forEach(function (route) {\n addRouteRecord(pathList, pathMap, nameMap, route, parentRoute);\n });\n\n // ensure wildcard routes are always at the end\n for (var i = 0, l = pathList.length; i < l; i++) {\n if (pathList[i] === '*') {\n pathList.push(pathList.splice(i, 1)[0]);\n l--;\n i--;\n }\n }\n\n if (process.env.NODE_ENV === 'development') {\n // warn if routes do not include leading slashes\n var found = pathList\n // check for missing leading slash\n .filter(function (path) { return path && path.charAt(0) !== '*' && path.charAt(0) !== '/'; });\n\n if (found.length > 0) {\n var pathNames = found.map(function (path) { return (\"- \" + path); }).join('\\n');\n warn(false, (\"Non-nested routes must include a leading slash character. Fix the following routes: \\n\" + pathNames));\n }\n }\n\n return {\n pathList: pathList,\n pathMap: pathMap,\n nameMap: nameMap\n }\n}\n\nfunction addRouteRecord (\n pathList,\n pathMap,\n nameMap,\n route,\n parent,\n matchAs\n) {\n var path = route.path;\n var name = route.name;\n if (process.env.NODE_ENV !== 'production') {\n assert(path != null, \"\\\"path\\\" is required in a route configuration.\");\n assert(\n typeof route.component !== 'string',\n \"route config \\\"component\\\" for path: \" + (String(\n path || name\n )) + \" cannot be a \" + \"string id. Use an actual component instead.\"\n );\n\n warn(\n // eslint-disable-next-line no-control-regex\n !/[^\\u0000-\\u007F]+/.test(path),\n \"Route with path \\\"\" + path + \"\\\" contains unencoded characters, make sure \" +\n \"your path is correctly encoded before passing it to the router. Use \" +\n \"encodeURI to encode static segments of your path.\"\n );\n }\n\n var pathToRegexpOptions =\n route.pathToRegexpOptions || {};\n var normalizedPath = normalizePath(path, parent, pathToRegexpOptions.strict);\n\n if (typeof route.caseSensitive === 'boolean') {\n pathToRegexpOptions.sensitive = route.caseSensitive;\n }\n\n var record = {\n path: normalizedPath,\n regex: compileRouteRegex(normalizedPath, pathToRegexpOptions),\n components: route.components || { default: route.component },\n alias: route.alias\n ? typeof route.alias === 'string'\n ? [route.alias]\n : route.alias\n : [],\n instances: {},\n enteredCbs: {},\n name: name,\n parent: parent,\n matchAs: matchAs,\n redirect: route.redirect,\n beforeEnter: route.beforeEnter,\n meta: route.meta || {},\n props:\n route.props == null\n ? {}\n : route.components\n ? route.props\n : { default: route.props }\n };\n\n if (route.children) {\n // Warn if route is named, does not redirect and has a default child route.\n // If users navigate to this route by name, the default child will\n // not be rendered (GH Issue #629)\n if (process.env.NODE_ENV !== 'production') {\n if (\n route.name &&\n !route.redirect &&\n route.children.some(function (child) { return /^\\/?$/.test(child.path); })\n ) {\n warn(\n false,\n \"Named Route '\" + (route.name) + \"' has a default child route. \" +\n \"When navigating to this named route (:to=\\\"{name: '\" + (route.name) + \"'}\\\"), \" +\n \"the default child route will not be rendered. Remove the name from \" +\n \"this route and use the name of the default child route for named \" +\n \"links instead.\"\n );\n }\n }\n route.children.forEach(function (child) {\n var childMatchAs = matchAs\n ? cleanPath((matchAs + \"/\" + (child.path)))\n : undefined;\n addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs);\n });\n }\n\n if (!pathMap[record.path]) {\n pathList.push(record.path);\n pathMap[record.path] = record;\n }\n\n if (route.alias !== undefined) {\n var aliases = Array.isArray(route.alias) ? route.alias : [route.alias];\n for (var i = 0; i < aliases.length; ++i) {\n var alias = aliases[i];\n if (process.env.NODE_ENV !== 'production' && alias === path) {\n warn(\n false,\n (\"Found an alias with the same value as the path: \\\"\" + path + \"\\\". You have to remove that alias. It will be ignored in development.\")\n );\n // skip in dev to make it work\n continue\n }\n\n var aliasRoute = {\n path: alias,\n children: route.children\n };\n addRouteRecord(\n pathList,\n pathMap,\n nameMap,\n aliasRoute,\n parent,\n record.path || '/' // matchAs\n );\n }\n }\n\n if (name) {\n if (!nameMap[name]) {\n nameMap[name] = record;\n } else if (process.env.NODE_ENV !== 'production' && !matchAs) {\n warn(\n false,\n \"Duplicate named routes definition: \" +\n \"{ name: \\\"\" + name + \"\\\", path: \\\"\" + (record.path) + \"\\\" }\"\n );\n }\n }\n}\n\nfunction compileRouteRegex (\n path,\n pathToRegexpOptions\n) {\n var regex = pathToRegexp_1(path, [], pathToRegexpOptions);\n if (process.env.NODE_ENV !== 'production') {\n var keys = Object.create(null);\n regex.keys.forEach(function (key) {\n warn(\n !keys[key.name],\n (\"Duplicate param keys in route with path: \\\"\" + path + \"\\\"\")\n );\n keys[key.name] = true;\n });\n }\n return regex\n}\n\nfunction normalizePath (\n path,\n parent,\n strict\n) {\n if (!strict) { path = path.replace(/\\/$/, ''); }\n if (path[0] === '/') { return path }\n if (parent == null) { return path }\n return cleanPath(((parent.path) + \"/\" + path))\n}\n\n/* */\n\n\n\nfunction createMatcher (\n routes,\n router\n) {\n var ref = createRouteMap(routes);\n var pathList = ref.pathList;\n var pathMap = ref.pathMap;\n var nameMap = ref.nameMap;\n\n function addRoutes (routes) {\n createRouteMap(routes, pathList, pathMap, nameMap);\n }\n\n function addRoute (parentOrRoute, route) {\n var parent = (typeof parentOrRoute !== 'object') ? nameMap[parentOrRoute] : undefined;\n // $flow-disable-line\n createRouteMap([route || parentOrRoute], pathList, pathMap, nameMap, parent);\n\n // add aliases of parent\n if (parent && parent.alias.length) {\n createRouteMap(\n // $flow-disable-line route is defined if parent is\n parent.alias.map(function (alias) { return ({ path: alias, children: [route] }); }),\n pathList,\n pathMap,\n nameMap,\n parent\n );\n }\n }\n\n function getRoutes () {\n return pathList.map(function (path) { return pathMap[path]; })\n }\n\n function match (\n raw,\n currentRoute,\n redirectedFrom\n ) {\n var location = normalizeLocation(raw, currentRoute, false, router);\n var name = location.name;\n\n if (name) {\n var record = nameMap[name];\n if (process.env.NODE_ENV !== 'production') {\n warn(record, (\"Route with name '\" + name + \"' does not exist\"));\n }\n if (!record) { return _createRoute(null, location) }\n var paramNames = record.regex.keys\n .filter(function (key) { return !key.optional; })\n .map(function (key) { return key.name; });\n\n if (typeof location.params !== 'object') {\n location.params = {};\n }\n\n if (currentRoute && typeof currentRoute.params === 'object') {\n for (var key in currentRoute.params) {\n if (!(key in location.params) && paramNames.indexOf(key) > -1) {\n location.params[key] = currentRoute.params[key];\n }\n }\n }\n\n location.path = fillParams(record.path, location.params, (\"named route \\\"\" + name + \"\\\"\"));\n return _createRoute(record, location, redirectedFrom)\n } else if (location.path) {\n location.params = {};\n for (var i = 0; i < pathList.length; i++) {\n var path = pathList[i];\n var record$1 = pathMap[path];\n if (matchRoute(record$1.regex, location.path, location.params)) {\n return _createRoute(record$1, location, redirectedFrom)\n }\n }\n }\n // no match\n return _createRoute(null, location)\n }\n\n function redirect (\n record,\n location\n ) {\n var originalRedirect = record.redirect;\n var redirect = typeof originalRedirect === 'function'\n ? originalRedirect(createRoute(record, location, null, router))\n : originalRedirect;\n\n if (typeof redirect === 'string') {\n redirect = { path: redirect };\n }\n\n if (!redirect || typeof redirect !== 'object') {\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false, (\"invalid redirect option: \" + (JSON.stringify(redirect)))\n );\n }\n return _createRoute(null, location)\n }\n\n var re = redirect;\n var name = re.name;\n var path = re.path;\n var query = location.query;\n var hash = location.hash;\n var params = location.params;\n query = re.hasOwnProperty('query') ? re.query : query;\n hash = re.hasOwnProperty('hash') ? re.hash : hash;\n params = re.hasOwnProperty('params') ? re.params : params;\n\n if (name) {\n // resolved named direct\n var targetRecord = nameMap[name];\n if (process.env.NODE_ENV !== 'production') {\n assert(targetRecord, (\"redirect failed: named route \\\"\" + name + \"\\\" not found.\"));\n }\n return match({\n _normalized: true,\n name: name,\n query: query,\n hash: hash,\n params: params\n }, undefined, location)\n } else if (path) {\n // 1. resolve relative redirect\n var rawPath = resolveRecordPath(path, record);\n // 2. resolve params\n var resolvedPath = fillParams(rawPath, params, (\"redirect route with path \\\"\" + rawPath + \"\\\"\"));\n // 3. rematch with existing query and hash\n return match({\n _normalized: true,\n path: resolvedPath,\n query: query,\n hash: hash\n }, undefined, location)\n } else {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, (\"invalid redirect option: \" + (JSON.stringify(redirect))));\n }\n return _createRoute(null, location)\n }\n }\n\n function alias (\n record,\n location,\n matchAs\n ) {\n var aliasedPath = fillParams(matchAs, location.params, (\"aliased route with path \\\"\" + matchAs + \"\\\"\"));\n var aliasedMatch = match({\n _normalized: true,\n path: aliasedPath\n });\n if (aliasedMatch) {\n var matched = aliasedMatch.matched;\n var aliasedRecord = matched[matched.length - 1];\n location.params = aliasedMatch.params;\n return _createRoute(aliasedRecord, location)\n }\n return _createRoute(null, location)\n }\n\n function _createRoute (\n record,\n location,\n redirectedFrom\n ) {\n if (record && record.redirect) {\n return redirect(record, redirectedFrom || location)\n }\n if (record && record.matchAs) {\n return alias(record, location, record.matchAs)\n }\n return createRoute(record, location, redirectedFrom, router)\n }\n\n return {\n match: match,\n addRoute: addRoute,\n getRoutes: getRoutes,\n addRoutes: addRoutes\n }\n}\n\nfunction matchRoute (\n regex,\n path,\n params\n) {\n var m = path.match(regex);\n\n if (!m) {\n return false\n } else if (!params) {\n return true\n }\n\n for (var i = 1, len = m.length; i < len; ++i) {\n var key = regex.keys[i - 1];\n if (key) {\n // Fix #1994: using * with props: true generates a param named 0\n params[key.name || 'pathMatch'] = typeof m[i] === 'string' ? decode(m[i]) : m[i];\n }\n }\n\n return true\n}\n\nfunction resolveRecordPath (path, record) {\n return resolvePath(path, record.parent ? record.parent.path : '/', true)\n}\n\n/* */\n\n// use User Timing api (if present) for more accurate key precision\nvar Time =\n inBrowser && window.performance && window.performance.now\n ? window.performance\n : Date;\n\nfunction genStateKey () {\n return Time.now().toFixed(3)\n}\n\nvar _key = genStateKey();\n\nfunction getStateKey () {\n return _key\n}\n\nfunction setStateKey (key) {\n return (_key = key)\n}\n\n/* */\n\nvar positionStore = Object.create(null);\n\nfunction setupScroll () {\n // Prevent browser scroll behavior on History popstate\n if ('scrollRestoration' in window.history) {\n window.history.scrollRestoration = 'manual';\n }\n // Fix for #1585 for Firefox\n // Fix for #2195 Add optional third attribute to workaround a bug in safari https://bugs.webkit.org/show_bug.cgi?id=182678\n // Fix for #2774 Support for apps loaded from Windows file shares not mapped to network drives: replaced location.origin with\n // window.location.protocol + '//' + window.location.host\n // location.host contains the port and location.hostname doesn't\n var protocolAndPath = window.location.protocol + '//' + window.location.host;\n var absolutePath = window.location.href.replace(protocolAndPath, '');\n // preserve existing history state as it could be overriden by the user\n var stateCopy = extend({}, window.history.state);\n stateCopy.key = getStateKey();\n window.history.replaceState(stateCopy, '', absolutePath);\n window.addEventListener('popstate', handlePopState);\n return function () {\n window.removeEventListener('popstate', handlePopState);\n }\n}\n\nfunction handleScroll (\n router,\n to,\n from,\n isPop\n) {\n if (!router.app) {\n return\n }\n\n var behavior = router.options.scrollBehavior;\n if (!behavior) {\n return\n }\n\n if (process.env.NODE_ENV !== 'production') {\n assert(typeof behavior === 'function', \"scrollBehavior must be a function\");\n }\n\n // wait until re-render finishes before scrolling\n router.app.$nextTick(function () {\n var position = getScrollPosition();\n var shouldScroll = behavior.call(\n router,\n to,\n from,\n isPop ? position : null\n );\n\n if (!shouldScroll) {\n return\n }\n\n if (typeof shouldScroll.then === 'function') {\n shouldScroll\n .then(function (shouldScroll) {\n scrollToPosition((shouldScroll), position);\n })\n .catch(function (err) {\n if (process.env.NODE_ENV !== 'production') {\n assert(false, err.toString());\n }\n });\n } else {\n scrollToPosition(shouldScroll, position);\n }\n });\n}\n\nfunction saveScrollPosition () {\n var key = getStateKey();\n if (key) {\n positionStore[key] = {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n }\n}\n\nfunction handlePopState (e) {\n saveScrollPosition();\n if (e.state && e.state.key) {\n setStateKey(e.state.key);\n }\n}\n\nfunction getScrollPosition () {\n var key = getStateKey();\n if (key) {\n return positionStore[key]\n }\n}\n\nfunction getElementPosition (el, offset) {\n var docEl = document.documentElement;\n var docRect = docEl.getBoundingClientRect();\n var elRect = el.getBoundingClientRect();\n return {\n x: elRect.left - docRect.left - offset.x,\n y: elRect.top - docRect.top - offset.y\n }\n}\n\nfunction isValidPosition (obj) {\n return isNumber(obj.x) || isNumber(obj.y)\n}\n\nfunction normalizePosition (obj) {\n return {\n x: isNumber(obj.x) ? obj.x : window.pageXOffset,\n y: isNumber(obj.y) ? obj.y : window.pageYOffset\n }\n}\n\nfunction normalizeOffset (obj) {\n return {\n x: isNumber(obj.x) ? obj.x : 0,\n y: isNumber(obj.y) ? obj.y : 0\n }\n}\n\nfunction isNumber (v) {\n return typeof v === 'number'\n}\n\nvar hashStartsWithNumberRE = /^#\\d/;\n\nfunction scrollToPosition (shouldScroll, position) {\n var isObject = typeof shouldScroll === 'object';\n if (isObject && typeof shouldScroll.selector === 'string') {\n // getElementById would still fail if the selector contains a more complicated query like #main[data-attr]\n // but at the same time, it doesn't make much sense to select an element with an id and an extra selector\n var el = hashStartsWithNumberRE.test(shouldScroll.selector) // $flow-disable-line\n ? document.getElementById(shouldScroll.selector.slice(1)) // $flow-disable-line\n : document.querySelector(shouldScroll.selector);\n\n if (el) {\n var offset =\n shouldScroll.offset && typeof shouldScroll.offset === 'object'\n ? shouldScroll.offset\n : {};\n offset = normalizeOffset(offset);\n position = getElementPosition(el, offset);\n } else if (isValidPosition(shouldScroll)) {\n position = normalizePosition(shouldScroll);\n }\n } else if (isObject && isValidPosition(shouldScroll)) {\n position = normalizePosition(shouldScroll);\n }\n\n if (position) {\n // $flow-disable-line\n if ('scrollBehavior' in document.documentElement.style) {\n window.scrollTo({\n left: position.x,\n top: position.y,\n // $flow-disable-line\n behavior: shouldScroll.behavior\n });\n } else {\n window.scrollTo(position.x, position.y);\n }\n }\n}\n\n/* */\n\nvar supportsPushState =\n inBrowser &&\n (function () {\n var ua = window.navigator.userAgent;\n\n if (\n (ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) &&\n ua.indexOf('Mobile Safari') !== -1 &&\n ua.indexOf('Chrome') === -1 &&\n ua.indexOf('Windows Phone') === -1\n ) {\n return false\n }\n\n return window.history && typeof window.history.pushState === 'function'\n })();\n\nfunction pushState (url, replace) {\n saveScrollPosition();\n // try...catch the pushState call to get around Safari\n // DOM Exception 18 where it limits to 100 pushState calls\n var history = window.history;\n try {\n if (replace) {\n // preserve existing history state as it could be overriden by the user\n var stateCopy = extend({}, history.state);\n stateCopy.key = getStateKey();\n history.replaceState(stateCopy, '', url);\n } else {\n history.pushState({ key: setStateKey(genStateKey()) }, '', url);\n }\n } catch (e) {\n window.location[replace ? 'replace' : 'assign'](url);\n }\n}\n\nfunction replaceState (url) {\n pushState(url, true);\n}\n\n/* */\n\nfunction runQueue (queue, fn, cb) {\n var step = function (index) {\n if (index >= queue.length) {\n cb();\n } else {\n if (queue[index]) {\n fn(queue[index], function () {\n step(index + 1);\n });\n } else {\n step(index + 1);\n }\n }\n };\n step(0);\n}\n\n// When changing thing, also edit router.d.ts\nvar NavigationFailureType = {\n redirected: 2,\n aborted: 4,\n cancelled: 8,\n duplicated: 16\n};\n\nfunction createNavigationRedirectedError (from, to) {\n return createRouterError(\n from,\n to,\n NavigationFailureType.redirected,\n (\"Redirected when going from \\\"\" + (from.fullPath) + \"\\\" to \\\"\" + (stringifyRoute(\n to\n )) + \"\\\" via a navigation guard.\")\n )\n}\n\nfunction createNavigationDuplicatedError (from, to) {\n var error = createRouterError(\n from,\n to,\n NavigationFailureType.duplicated,\n (\"Avoided redundant navigation to current location: \\\"\" + (from.fullPath) + \"\\\".\")\n );\n // backwards compatible with the first introduction of Errors\n error.name = 'NavigationDuplicated';\n return error\n}\n\nfunction createNavigationCancelledError (from, to) {\n return createRouterError(\n from,\n to,\n NavigationFailureType.cancelled,\n (\"Navigation cancelled from \\\"\" + (from.fullPath) + \"\\\" to \\\"\" + (to.fullPath) + \"\\\" with a new navigation.\")\n )\n}\n\nfunction createNavigationAbortedError (from, to) {\n return createRouterError(\n from,\n to,\n NavigationFailureType.aborted,\n (\"Navigation aborted from \\\"\" + (from.fullPath) + \"\\\" to \\\"\" + (to.fullPath) + \"\\\" via a navigation guard.\")\n )\n}\n\nfunction createRouterError (from, to, type, message) {\n var error = new Error(message);\n error._isRouter = true;\n error.from = from;\n error.to = to;\n error.type = type;\n\n return error\n}\n\nvar propertiesToLog = ['params', 'query', 'hash'];\n\nfunction stringifyRoute (to) {\n if (typeof to === 'string') { return to }\n if ('path' in to) { return to.path }\n var location = {};\n propertiesToLog.forEach(function (key) {\n if (key in to) { location[key] = to[key]; }\n });\n return JSON.stringify(location, null, 2)\n}\n\nfunction isError (err) {\n return Object.prototype.toString.call(err).indexOf('Error') > -1\n}\n\nfunction isNavigationFailure (err, errorType) {\n return (\n isError(err) &&\n err._isRouter &&\n (errorType == null || err.type === errorType)\n )\n}\n\n/* */\n\nfunction resolveAsyncComponents (matched) {\n return function (to, from, next) {\n var hasAsync = false;\n var pending = 0;\n var error = null;\n\n flatMapComponents(matched, function (def, _, match, key) {\n // if it's a function and doesn't have cid attached,\n // assume it's an async component resolve function.\n // we are not using Vue's default async resolving mechanism because\n // we want to halt the navigation until the incoming component has been\n // resolved.\n if (typeof def === 'function' && def.cid === undefined) {\n hasAsync = true;\n pending++;\n\n var resolve = once(function (resolvedDef) {\n if (isESModule(resolvedDef)) {\n resolvedDef = resolvedDef.default;\n }\n // save resolved on async factory in case it's used elsewhere\n def.resolved = typeof resolvedDef === 'function'\n ? resolvedDef\n : _Vue.extend(resolvedDef);\n match.components[key] = resolvedDef;\n pending--;\n if (pending <= 0) {\n next();\n }\n });\n\n var reject = once(function (reason) {\n var msg = \"Failed to resolve async component \" + key + \": \" + reason;\n process.env.NODE_ENV !== 'production' && warn(false, msg);\n if (!error) {\n error = isError(reason)\n ? reason\n : new Error(msg);\n next(error);\n }\n });\n\n var res;\n try {\n res = def(resolve, reject);\n } catch (e) {\n reject(e);\n }\n if (res) {\n if (typeof res.then === 'function') {\n res.then(resolve, reject);\n } else {\n // new syntax in Vue 2.3\n var comp = res.component;\n if (comp && typeof comp.then === 'function') {\n comp.then(resolve, reject);\n }\n }\n }\n }\n });\n\n if (!hasAsync) { next(); }\n }\n}\n\nfunction flatMapComponents (\n matched,\n fn\n) {\n return flatten(matched.map(function (m) {\n return Object.keys(m.components).map(function (key) { return fn(\n m.components[key],\n m.instances[key],\n m, key\n ); })\n }))\n}\n\nfunction flatten (arr) {\n return Array.prototype.concat.apply([], arr)\n}\n\nvar hasSymbol =\n typeof Symbol === 'function' &&\n typeof Symbol.toStringTag === 'symbol';\n\nfunction isESModule (obj) {\n return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module')\n}\n\n// in Webpack 2, require.ensure now also returns a Promise\n// so the resolve/reject functions may get called an extra time\n// if the user uses an arrow function shorthand that happens to\n// return that Promise.\nfunction once (fn) {\n var called = false;\n return function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n if (called) { return }\n called = true;\n return fn.apply(this, args)\n }\n}\n\n/* */\n\nvar History = function History (router, base) {\n this.router = router;\n this.base = normalizeBase(base);\n // start with a route object that stands for \"nowhere\"\n this.current = START;\n this.pending = null;\n this.ready = false;\n this.readyCbs = [];\n this.readyErrorCbs = [];\n this.errorCbs = [];\n this.listeners = [];\n};\n\nHistory.prototype.listen = function listen (cb) {\n this.cb = cb;\n};\n\nHistory.prototype.onReady = function onReady (cb, errorCb) {\n if (this.ready) {\n cb();\n } else {\n this.readyCbs.push(cb);\n if (errorCb) {\n this.readyErrorCbs.push(errorCb);\n }\n }\n};\n\nHistory.prototype.onError = function onError (errorCb) {\n this.errorCbs.push(errorCb);\n};\n\nHistory.prototype.transitionTo = function transitionTo (\n location,\n onComplete,\n onAbort\n) {\n var this$1 = this;\n\n var route;\n // catch redirect option https://github.com/vuejs/vue-router/issues/3201\n try {\n route = this.router.match(location, this.current);\n } catch (e) {\n this.errorCbs.forEach(function (cb) {\n cb(e);\n });\n // Exception should still be thrown\n throw e\n }\n var prev = this.current;\n this.confirmTransition(\n route,\n function () {\n this$1.updateRoute(route);\n onComplete && onComplete(route);\n this$1.ensureURL();\n this$1.router.afterHooks.forEach(function (hook) {\n hook && hook(route, prev);\n });\n\n // fire ready cbs once\n if (!this$1.ready) {\n this$1.ready = true;\n this$1.readyCbs.forEach(function (cb) {\n cb(route);\n });\n }\n },\n function (err) {\n if (onAbort) {\n onAbort(err);\n }\n if (err && !this$1.ready) {\n // Initial redirection should not mark the history as ready yet\n // because it's triggered by the redirection instead\n // https://github.com/vuejs/vue-router/issues/3225\n // https://github.com/vuejs/vue-router/issues/3331\n if (!isNavigationFailure(err, NavigationFailureType.redirected) || prev !== START) {\n this$1.ready = true;\n this$1.readyErrorCbs.forEach(function (cb) {\n cb(err);\n });\n }\n }\n }\n );\n};\n\nHistory.prototype.confirmTransition = function confirmTransition (route, onComplete, onAbort) {\n var this$1 = this;\n\n var current = this.current;\n this.pending = route;\n var abort = function (err) {\n // changed after adding errors with\n // https://github.com/vuejs/vue-router/pull/3047 before that change,\n // redirect and aborted navigation would produce an err == null\n if (!isNavigationFailure(err) && isError(err)) {\n if (this$1.errorCbs.length) {\n this$1.errorCbs.forEach(function (cb) {\n cb(err);\n });\n } else {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, 'uncaught error during route navigation:');\n }\n console.error(err);\n }\n }\n onAbort && onAbort(err);\n };\n var lastRouteIndex = route.matched.length - 1;\n var lastCurrentIndex = current.matched.length - 1;\n if (\n isSameRoute(route, current) &&\n // in the case the route map has been dynamically appended to\n lastRouteIndex === lastCurrentIndex &&\n route.matched[lastRouteIndex] === current.matched[lastCurrentIndex]\n ) {\n this.ensureURL();\n if (route.hash) {\n handleScroll(this.router, current, route, false);\n }\n return abort(createNavigationDuplicatedError(current, route))\n }\n\n var ref = resolveQueue(\n this.current.matched,\n route.matched\n );\n var updated = ref.updated;\n var deactivated = ref.deactivated;\n var activated = ref.activated;\n\n var queue = [].concat(\n // in-component leave guards\n extractLeaveGuards(deactivated),\n // global before hooks\n this.router.beforeHooks,\n // in-component update hooks\n extractUpdateHooks(updated),\n // in-config enter guards\n activated.map(function (m) { return m.beforeEnter; }),\n // async components\n resolveAsyncComponents(activated)\n );\n\n var iterator = function (hook, next) {\n if (this$1.pending !== route) {\n return abort(createNavigationCancelledError(current, route))\n }\n try {\n hook(route, current, function (to) {\n if (to === false) {\n // next(false) -> abort navigation, ensure current URL\n this$1.ensureURL(true);\n abort(createNavigationAbortedError(current, route));\n } else if (isError(to)) {\n this$1.ensureURL(true);\n abort(to);\n } else if (\n typeof to === 'string' ||\n (typeof to === 'object' &&\n (typeof to.path === 'string' || typeof to.name === 'string'))\n ) {\n // next('/') or next({ path: '/' }) -> redirect\n abort(createNavigationRedirectedError(current, route));\n if (typeof to === 'object' && to.replace) {\n this$1.replace(to);\n } else {\n this$1.push(to);\n }\n } else {\n // confirm transition and pass on the value\n next(to);\n }\n });\n } catch (e) {\n abort(e);\n }\n };\n\n runQueue(queue, iterator, function () {\n // wait until async components are resolved before\n // extracting in-component enter guards\n var enterGuards = extractEnterGuards(activated);\n var queue = enterGuards.concat(this$1.router.resolveHooks);\n runQueue(queue, iterator, function () {\n if (this$1.pending !== route) {\n return abort(createNavigationCancelledError(current, route))\n }\n this$1.pending = null;\n onComplete(route);\n if (this$1.router.app) {\n this$1.router.app.$nextTick(function () {\n handleRouteEntered(route);\n });\n }\n });\n });\n};\n\nHistory.prototype.updateRoute = function updateRoute (route) {\n this.current = route;\n this.cb && this.cb(route);\n};\n\nHistory.prototype.setupListeners = function setupListeners () {\n // Default implementation is empty\n};\n\nHistory.prototype.teardown = function teardown () {\n // clean up event listeners\n // https://github.com/vuejs/vue-router/issues/2341\n this.listeners.forEach(function (cleanupListener) {\n cleanupListener();\n });\n this.listeners = [];\n\n // reset current history route\n // https://github.com/vuejs/vue-router/issues/3294\n this.current = START;\n this.pending = null;\n};\n\nfunction normalizeBase (base) {\n if (!base) {\n if (inBrowser) {\n // respect tag\n var baseEl = document.querySelector('base');\n base = (baseEl && baseEl.getAttribute('href')) || '/';\n // strip full URL origin\n base = base.replace(/^https?:\\/\\/[^\\/]+/, '');\n } else {\n base = '/';\n }\n }\n // make sure there's the starting slash\n if (base.charAt(0) !== '/') {\n base = '/' + base;\n }\n // remove trailing slash\n return base.replace(/\\/$/, '')\n}\n\nfunction resolveQueue (\n current,\n next\n) {\n var i;\n var max = Math.max(current.length, next.length);\n for (i = 0; i < max; i++) {\n if (current[i] !== next[i]) {\n break\n }\n }\n return {\n updated: next.slice(0, i),\n activated: next.slice(i),\n deactivated: current.slice(i)\n }\n}\n\nfunction extractGuards (\n records,\n name,\n bind,\n reverse\n) {\n var guards = flatMapComponents(records, function (def, instance, match, key) {\n var guard = extractGuard(def, name);\n if (guard) {\n return Array.isArray(guard)\n ? guard.map(function (guard) { return bind(guard, instance, match, key); })\n : bind(guard, instance, match, key)\n }\n });\n return flatten(reverse ? guards.reverse() : guards)\n}\n\nfunction extractGuard (\n def,\n key\n) {\n if (typeof def !== 'function') {\n // extend now so that global mixins are applied.\n def = _Vue.extend(def);\n }\n return def.options[key]\n}\n\nfunction extractLeaveGuards (deactivated) {\n return extractGuards(deactivated, 'beforeRouteLeave', bindGuard, true)\n}\n\nfunction extractUpdateHooks (updated) {\n return extractGuards(updated, 'beforeRouteUpdate', bindGuard)\n}\n\nfunction bindGuard (guard, instance) {\n if (instance) {\n return function boundRouteGuard () {\n return guard.apply(instance, arguments)\n }\n }\n}\n\nfunction extractEnterGuards (\n activated\n) {\n return extractGuards(\n activated,\n 'beforeRouteEnter',\n function (guard, _, match, key) {\n return bindEnterGuard(guard, match, key)\n }\n )\n}\n\nfunction bindEnterGuard (\n guard,\n match,\n key\n) {\n return function routeEnterGuard (to, from, next) {\n return guard(to, from, function (cb) {\n if (typeof cb === 'function') {\n if (!match.enteredCbs[key]) {\n match.enteredCbs[key] = [];\n }\n match.enteredCbs[key].push(cb);\n }\n next(cb);\n })\n }\n}\n\n/* */\n\nvar HTML5History = /*@__PURE__*/(function (History) {\n function HTML5History (router, base) {\n History.call(this, router, base);\n\n this._startLocation = getLocation(this.base);\n }\n\n if ( History ) HTML5History.__proto__ = History;\n HTML5History.prototype = Object.create( History && History.prototype );\n HTML5History.prototype.constructor = HTML5History;\n\n HTML5History.prototype.setupListeners = function setupListeners () {\n var this$1 = this;\n\n if (this.listeners.length > 0) {\n return\n }\n\n var router = this.router;\n var expectScroll = router.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll) {\n this.listeners.push(setupScroll());\n }\n\n var handleRoutingEvent = function () {\n var current = this$1.current;\n\n // Avoiding first `popstate` event dispatched in some browsers but first\n // history route not updated since async guard at the same time.\n var location = getLocation(this$1.base);\n if (this$1.current === START && location === this$1._startLocation) {\n return\n }\n\n this$1.transitionTo(location, function (route) {\n if (supportsScroll) {\n handleScroll(router, route, current, true);\n }\n });\n };\n window.addEventListener('popstate', handleRoutingEvent);\n this.listeners.push(function () {\n window.removeEventListener('popstate', handleRoutingEvent);\n });\n };\n\n HTML5History.prototype.go = function go (n) {\n window.history.go(n);\n };\n\n HTML5History.prototype.push = function push (location, onComplete, onAbort) {\n var this$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(location, function (route) {\n pushState(cleanPath(this$1.base + route.fullPath));\n handleScroll(this$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n }, onAbort);\n };\n\n HTML5History.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(location, function (route) {\n replaceState(cleanPath(this$1.base + route.fullPath));\n handleScroll(this$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n }, onAbort);\n };\n\n HTML5History.prototype.ensureURL = function ensureURL (push) {\n if (getLocation(this.base) !== this.current.fullPath) {\n var current = cleanPath(this.base + this.current.fullPath);\n push ? pushState(current) : replaceState(current);\n }\n };\n\n HTML5History.prototype.getCurrentLocation = function getCurrentLocation () {\n return getLocation(this.base)\n };\n\n return HTML5History;\n}(History));\n\nfunction getLocation (base) {\n var path = window.location.pathname;\n var pathLowerCase = path.toLowerCase();\n var baseLowerCase = base.toLowerCase();\n // base=\"/a\" shouldn't turn path=\"/app\" into \"/a/pp\"\n // https://github.com/vuejs/vue-router/issues/3555\n // so we ensure the trailing slash in the base\n if (base && ((pathLowerCase === baseLowerCase) ||\n (pathLowerCase.indexOf(cleanPath(baseLowerCase + '/')) === 0))) {\n path = path.slice(base.length);\n }\n return (path || '/') + window.location.search + window.location.hash\n}\n\n/* */\n\nvar HashHistory = /*@__PURE__*/(function (History) {\n function HashHistory (router, base, fallback) {\n History.call(this, router, base);\n // check history fallback deeplinking\n if (fallback && checkFallback(this.base)) {\n return\n }\n ensureSlash();\n }\n\n if ( History ) HashHistory.__proto__ = History;\n HashHistory.prototype = Object.create( History && History.prototype );\n HashHistory.prototype.constructor = HashHistory;\n\n // this is delayed until the app mounts\n // to avoid the hashchange listener being fired too early\n HashHistory.prototype.setupListeners = function setupListeners () {\n var this$1 = this;\n\n if (this.listeners.length > 0) {\n return\n }\n\n var router = this.router;\n var expectScroll = router.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll) {\n this.listeners.push(setupScroll());\n }\n\n var handleRoutingEvent = function () {\n var current = this$1.current;\n if (!ensureSlash()) {\n return\n }\n this$1.transitionTo(getHash(), function (route) {\n if (supportsScroll) {\n handleScroll(this$1.router, route, current, true);\n }\n if (!supportsPushState) {\n replaceHash(route.fullPath);\n }\n });\n };\n var eventType = supportsPushState ? 'popstate' : 'hashchange';\n window.addEventListener(\n eventType,\n handleRoutingEvent\n );\n this.listeners.push(function () {\n window.removeEventListener(eventType, handleRoutingEvent);\n });\n };\n\n HashHistory.prototype.push = function push (location, onComplete, onAbort) {\n var this$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(\n location,\n function (route) {\n pushHash(route.fullPath);\n handleScroll(this$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n HashHistory.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(\n location,\n function (route) {\n replaceHash(route.fullPath);\n handleScroll(this$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n HashHistory.prototype.go = function go (n) {\n window.history.go(n);\n };\n\n HashHistory.prototype.ensureURL = function ensureURL (push) {\n var current = this.current.fullPath;\n if (getHash() !== current) {\n push ? pushHash(current) : replaceHash(current);\n }\n };\n\n HashHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n return getHash()\n };\n\n return HashHistory;\n}(History));\n\nfunction checkFallback (base) {\n var location = getLocation(base);\n if (!/^\\/#/.test(location)) {\n window.location.replace(cleanPath(base + '/#' + location));\n return true\n }\n}\n\nfunction ensureSlash () {\n var path = getHash();\n if (path.charAt(0) === '/') {\n return true\n }\n replaceHash('/' + path);\n return false\n}\n\nfunction getHash () {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var index = href.indexOf('#');\n // empty path\n if (index < 0) { return '' }\n\n href = href.slice(index + 1);\n\n return href\n}\n\nfunction getUrl (path) {\n var href = window.location.href;\n var i = href.indexOf('#');\n var base = i >= 0 ? href.slice(0, i) : href;\n return (base + \"#\" + path)\n}\n\nfunction pushHash (path) {\n if (supportsPushState) {\n pushState(getUrl(path));\n } else {\n window.location.hash = path;\n }\n}\n\nfunction replaceHash (path) {\n if (supportsPushState) {\n replaceState(getUrl(path));\n } else {\n window.location.replace(getUrl(path));\n }\n}\n\n/* */\n\nvar AbstractHistory = /*@__PURE__*/(function (History) {\n function AbstractHistory (router, base) {\n History.call(this, router, base);\n this.stack = [];\n this.index = -1;\n }\n\n if ( History ) AbstractHistory.__proto__ = History;\n AbstractHistory.prototype = Object.create( History && History.prototype );\n AbstractHistory.prototype.constructor = AbstractHistory;\n\n AbstractHistory.prototype.push = function push (location, onComplete, onAbort) {\n var this$1 = this;\n\n this.transitionTo(\n location,\n function (route) {\n this$1.stack = this$1.stack.slice(0, this$1.index + 1).concat(route);\n this$1.index++;\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n AbstractHistory.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1 = this;\n\n this.transitionTo(\n location,\n function (route) {\n this$1.stack = this$1.stack.slice(0, this$1.index).concat(route);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n AbstractHistory.prototype.go = function go (n) {\n var this$1 = this;\n\n var targetIndex = this.index + n;\n if (targetIndex < 0 || targetIndex >= this.stack.length) {\n return\n }\n var route = this.stack[targetIndex];\n this.confirmTransition(\n route,\n function () {\n var prev = this$1.current;\n this$1.index = targetIndex;\n this$1.updateRoute(route);\n this$1.router.afterHooks.forEach(function (hook) {\n hook && hook(route, prev);\n });\n },\n function (err) {\n if (isNavigationFailure(err, NavigationFailureType.duplicated)) {\n this$1.index = targetIndex;\n }\n }\n );\n };\n\n AbstractHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n var current = this.stack[this.stack.length - 1];\n return current ? current.fullPath : '/'\n };\n\n AbstractHistory.prototype.ensureURL = function ensureURL () {\n // noop\n };\n\n return AbstractHistory;\n}(History));\n\n/* */\n\nvar VueRouter = function VueRouter (options) {\n if ( options === void 0 ) options = {};\n\n if (process.env.NODE_ENV !== 'production') {\n warn(this instanceof VueRouter, \"Router must be called with the new operator.\");\n }\n this.app = null;\n this.apps = [];\n this.options = options;\n this.beforeHooks = [];\n this.resolveHooks = [];\n this.afterHooks = [];\n this.matcher = createMatcher(options.routes || [], this);\n\n var mode = options.mode || 'hash';\n this.fallback =\n mode === 'history' && !supportsPushState && options.fallback !== false;\n if (this.fallback) {\n mode = 'hash';\n }\n if (!inBrowser) {\n mode = 'abstract';\n }\n this.mode = mode;\n\n switch (mode) {\n case 'history':\n this.history = new HTML5History(this, options.base);\n break\n case 'hash':\n this.history = new HashHistory(this, options.base, this.fallback);\n break\n case 'abstract':\n this.history = new AbstractHistory(this, options.base);\n break\n default:\n if (process.env.NODE_ENV !== 'production') {\n assert(false, (\"invalid mode: \" + mode));\n }\n }\n};\n\nvar prototypeAccessors = { currentRoute: { configurable: true } };\n\nVueRouter.prototype.match = function match (raw, current, redirectedFrom) {\n return this.matcher.match(raw, current, redirectedFrom)\n};\n\nprototypeAccessors.currentRoute.get = function () {\n return this.history && this.history.current\n};\n\nVueRouter.prototype.init = function init (app /* Vue component instance */) {\n var this$1 = this;\n\n process.env.NODE_ENV !== 'production' &&\n assert(\n install.installed,\n \"not installed. Make sure to call `Vue.use(VueRouter)` \" +\n \"before creating root instance.\"\n );\n\n this.apps.push(app);\n\n // set up app destroyed handler\n // https://github.com/vuejs/vue-router/issues/2639\n app.$once('hook:destroyed', function () {\n // clean out app from this.apps array once destroyed\n var index = this$1.apps.indexOf(app);\n if (index > -1) { this$1.apps.splice(index, 1); }\n // ensure we still have a main app or null if no apps\n // we do not release the router so it can be reused\n if (this$1.app === app) { this$1.app = this$1.apps[0] || null; }\n\n if (!this$1.app) { this$1.history.teardown(); }\n });\n\n // main app previously initialized\n // return as we don't need to set up new history listener\n if (this.app) {\n return\n }\n\n this.app = app;\n\n var history = this.history;\n\n if (history instanceof HTML5History || history instanceof HashHistory) {\n var handleInitialScroll = function (routeOrError) {\n var from = history.current;\n var expectScroll = this$1.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll && 'fullPath' in routeOrError) {\n handleScroll(this$1, routeOrError, from, false);\n }\n };\n var setupListeners = function (routeOrError) {\n history.setupListeners();\n handleInitialScroll(routeOrError);\n };\n history.transitionTo(\n history.getCurrentLocation(),\n setupListeners,\n setupListeners\n );\n }\n\n history.listen(function (route) {\n this$1.apps.forEach(function (app) {\n app._route = route;\n });\n });\n};\n\nVueRouter.prototype.beforeEach = function beforeEach (fn) {\n return registerHook(this.beforeHooks, fn)\n};\n\nVueRouter.prototype.beforeResolve = function beforeResolve (fn) {\n return registerHook(this.resolveHooks, fn)\n};\n\nVueRouter.prototype.afterEach = function afterEach (fn) {\n return registerHook(this.afterHooks, fn)\n};\n\nVueRouter.prototype.onReady = function onReady (cb, errorCb) {\n this.history.onReady(cb, errorCb);\n};\n\nVueRouter.prototype.onError = function onError (errorCb) {\n this.history.onError(errorCb);\n};\n\nVueRouter.prototype.push = function push (location, onComplete, onAbort) {\n var this$1 = this;\n\n // $flow-disable-line\n if (!onComplete && !onAbort && typeof Promise !== 'undefined') {\n return new Promise(function (resolve, reject) {\n this$1.history.push(location, resolve, reject);\n })\n } else {\n this.history.push(location, onComplete, onAbort);\n }\n};\n\nVueRouter.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1 = this;\n\n // $flow-disable-line\n if (!onComplete && !onAbort && typeof Promise !== 'undefined') {\n return new Promise(function (resolve, reject) {\n this$1.history.replace(location, resolve, reject);\n })\n } else {\n this.history.replace(location, onComplete, onAbort);\n }\n};\n\nVueRouter.prototype.go = function go (n) {\n this.history.go(n);\n};\n\nVueRouter.prototype.back = function back () {\n this.go(-1);\n};\n\nVueRouter.prototype.forward = function forward () {\n this.go(1);\n};\n\nVueRouter.prototype.getMatchedComponents = function getMatchedComponents (to) {\n var route = to\n ? to.matched\n ? to\n : this.resolve(to).route\n : this.currentRoute;\n if (!route) {\n return []\n }\n return [].concat.apply(\n [],\n route.matched.map(function (m) {\n return Object.keys(m.components).map(function (key) {\n return m.components[key]\n })\n })\n )\n};\n\nVueRouter.prototype.resolve = function resolve (\n to,\n current,\n append\n) {\n current = current || this.history.current;\n var location = normalizeLocation(to, current, append, this);\n var route = this.match(location, current);\n var fullPath = route.redirectedFrom || route.fullPath;\n var base = this.history.base;\n var href = createHref(base, fullPath, this.mode);\n return {\n location: location,\n route: route,\n href: href,\n // for backwards compat\n normalizedTo: location,\n resolved: route\n }\n};\n\nVueRouter.prototype.getRoutes = function getRoutes () {\n return this.matcher.getRoutes()\n};\n\nVueRouter.prototype.addRoute = function addRoute (parentOrRoute, route) {\n this.matcher.addRoute(parentOrRoute, route);\n if (this.history.current !== START) {\n this.history.transitionTo(this.history.getCurrentLocation());\n }\n};\n\nVueRouter.prototype.addRoutes = function addRoutes (routes) {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, 'router.addRoutes() is deprecated and has been removed in Vue Router 4. Use router.addRoute() instead.');\n }\n this.matcher.addRoutes(routes);\n if (this.history.current !== START) {\n this.history.transitionTo(this.history.getCurrentLocation());\n }\n};\n\nObject.defineProperties( VueRouter.prototype, prototypeAccessors );\n\nfunction registerHook (list, fn) {\n list.push(fn);\n return function () {\n var i = list.indexOf(fn);\n if (i > -1) { list.splice(i, 1); }\n }\n}\n\nfunction createHref (base, fullPath, mode) {\n var path = mode === 'hash' ? '#' + fullPath : fullPath;\n return base ? cleanPath(base + '/' + path) : path\n}\n\nVueRouter.install = install;\nVueRouter.version = '3.5.4';\nVueRouter.isNavigationFailure = isNavigationFailure;\nVueRouter.NavigationFailureType = NavigationFailureType;\nVueRouter.START_LOCATION = START;\n\nif (inBrowser && window.Vue) {\n window.Vue.use(VueRouter);\n}\n\nexport default VueRouter;\n","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"container\" }, [\n _c(\"div\", { staticClass: \"bg--white border-radius m-t-25 m-b-25 p-30\" }, [\n _c(\"h1\", [_vm._v(\"\\n Dashboard\\n \")]),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"ak-button-group\" },\n [\n _vm._l(_vm.menu, function (item) {\n return [\n !item.items.length && item.href !== _vm.currentUrl\n ? _c(\"ak-button\", { attrs: { href: item.href } }, [\n _vm._v(\n \"\\n \" +\n _vm._s(item.title) +\n \"\\n \"\n ),\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm._l(item.items, function (childItem) {\n return [\n _c(\"ak-button\", { attrs: { href: childItem.href } }, [\n _vm._v(\n \"\\n \" +\n _vm._s(childItem.title) +\n \"\\n \"\n ),\n ]),\n ]\n }),\n ]\n }),\n ],\n 2\n ),\n ]),\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n\n\n","import { render, staticRenderFns } from \"./Dashboard.vue?vue&type=template&id=5e0117aa&\"\nimport script from \"./Dashboard.vue?vue&type=script&lang=js&\"\nexport * from \"./Dashboard.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Volumes/htdocs/optiek-dominiek-blueprints/src/vue-apps/admin/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('5e0117aa')) {\n api.createRecord('5e0117aa', component.options)\n } else {\n api.reload('5e0117aa', component.options)\n }\n module.hot.accept(\"./Dashboard.vue?vue&type=template&id=5e0117aa&\", function () {\n api.rerender('5e0117aa', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"views/pages/Dashboard.vue\"\nexport default component.exports","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"p-t-xs-20 p-b-xs-20\" },\n [\n _vm.order && _vm.cart && _vm.receipt\n ? _c(\"div\", { staticClass: \"container-fluid\" }, [\n _vm.loading\n ? _c(\n \"div\",\n { staticClass: \"ak-data-table__loading-message\" },\n [\n _c(\"ak-loader\", {\n staticClass: \"ak-data-table__loader\",\n attrs: {\n static: true,\n loading: _vm.loading,\n size: \"small\",\n },\n }),\n _vm._v(\" \"),\n _c(\"div\", [\n _vm._v(\n \"\\n Gegevens ophalen\\n \"\n ),\n ]),\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.loading\n ? _c(\"div\", { staticClass: \"row\" }, [\n _c(\n \"div\",\n {\n staticClass: \"col-lg-12\",\n staticStyle: {\n display: \"flex\",\n \"justify-content\": \"space-between\",\n },\n },\n [\n _c(\n \"div\",\n { staticClass: \"m-b-xs-20\" },\n [\n _c(\n \"ak-button\",\n {\n staticStyle: { \"vertical-align\": \"top\" },\n attrs: { size: \"small\" },\n on: { click: _vm.backToOrders },\n },\n [\n _c(\n \"i\",\n { staticClass: \"ak-icon ak-button__icon\" },\n [_vm._v(\"arrow_left\")]\n ),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"Ga terug\")) +\n \"\\n \"\n ),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"ak-button\",\n {\n staticStyle: { \"vertical-align\": \"top\" },\n attrs: { size: \"small\" },\n on: {\n click: function ($event) {\n return _vm.openOrderDefinitionForm(\n \"order-send-form\"\n )\n },\n },\n },\n [\n _c(\n \"i\",\n { staticClass: \"ak-icon ak-button__icon\" },\n [_vm._v(\"local_shipping\")]\n ),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"Verzenden\")) +\n \"\\n \"\n ),\n ]\n ),\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"m-b-xs-20\" }, [\n _c(\n \"div\",\n {\n staticClass: \"cms-published-toggle\",\n staticStyle: { \"vertical-align\": \"top\" },\n },\n [\n _c(\"ak-toggle\", {\n staticStyle: { padding: \"0\" },\n attrs: {\n id: \"processed\",\n title: \"Is verwerkt\",\n value: _vm.order.processed,\n },\n on: { input: _vm.toggleProcessed },\n }),\n ],\n 1\n ),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"col-lg-8\" }, [\n _c(\n \"div\",\n {\n staticClass: \"ak-panel ak-panel--no-padding m-b-xs-20\",\n },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"ak-panel__header ak-panel__header--small\",\n },\n [\n _c(\"div\", { staticClass: \"ak-panel__title\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"Bestelling\")) +\n \"\\n \"\n ),\n ]),\n _vm._v(\" \"),\n _c(\"strong\", { staticClass: \"m-l-auto\" }, [\n _vm._v(_vm._s(_vm.cart.code)),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"table\",\n { staticClass: \"ak-table ak-panel__table\" },\n [\n _c(\"thead\", [\n _c(\"tr\", { staticClass: \"ak-table-row\" }, [\n _c(\"th\", { staticClass: \"ak-table-head\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"Artikel nummer\t\")) +\n \"\\n \"\n ),\n ]),\n _vm._v(\" \"),\n _c(\"th\", { staticClass: \"ak-table-head\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"Artikel\")) +\n \"\\n \"\n ),\n ]),\n _vm._v(\" \"),\n _c(\"th\", { staticClass: \"ak-table-head\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"Aantal\")) +\n \"\\n \"\n ),\n ]),\n _vm._v(\" \"),\n _c(\"th\", { staticClass: \"ak-table-head\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"Prijs\")) +\n \"\\n \"\n ),\n ]),\n ]),\n ]),\n _vm._v(\" \"),\n _c(\n \"tbody\",\n { staticClass: \"ak-table-body\" },\n [\n _vm._l(_vm.receipt.items, function (line) {\n return _c(\n \"tr\",\n { staticClass: \"ak-table-row\" },\n [\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(line.code) +\n \"\\n \"\n ),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n line.shoppable.href\n ? _c(\"a\", {\n staticClass:\n \"ak-link ak-link--uppercase\",\n attrs: {\n href: line.shoppable.href,\n target: \"_blank\",\n },\n domProps: {\n innerHTML: _vm._s(line.title),\n },\n })\n : _c(\"span\", {\n domProps: {\n innerHTML: _vm._s(line.title),\n },\n }),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(line.quantity) +\n \"\\n \"\n ),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(line.amount.formatted) +\n \"\\n \"\n ),\n ]\n ),\n ]\n )\n }),\n _vm._v(\" \"),\n _vm._l(_vm.receipt.lines, function (line) {\n return _c(\n \"tr\",\n { staticClass: \"ak-table-row\" },\n [\n _c(\"td\", {\n staticClass: \"ak-table-column\",\n }),\n _vm._v(\" \"),\n _c(\"td\", {\n staticClass: \"ak-table-column\",\n }),\n _vm._v(\" \"),\n _c(\"td\", {\n staticClass:\n \"ak-table-column text--right\",\n domProps: {\n innerHTML: _vm._s(line.title),\n },\n }),\n _vm._v(\" \"),\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [_vm._v(_vm._s(line.amount.formatted))]\n ),\n ]\n )\n }),\n ],\n 2\n ),\n ]\n ),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"ak-panel m-b-xs-20 ak-panel--no-padding\",\n },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"ak-panel__header ak-panel__header--small\",\n },\n [\n _c(\"div\", { staticClass: \"ak-panel__title\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"Betaling\")) +\n \"\\n \"\n ),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _vm.order.paymentStatus === 1\n ? _c(\n \"table\",\n { staticClass: \"ak-table ak-panel__table\" },\n [\n _c(\"tbody\", { staticClass: \"ak-table-body\" }, [\n _c(\"tr\", { staticClass: \"ak-table-row\" }, [\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"Betaling ontvangen\")\n ) +\n \"\\n \"\n ),\n ]\n ),\n ]),\n _vm._v(\" \"),\n _vm.inspector.paymentType\n ? _c(\n \"tr\",\n { staticClass: \"ak-table-row\" },\n [\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.inspector.paymentType\n .title\n ) +\n \"\\n \"\n ),\n ]\n ),\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.order.paymentCardHolderName\n ? _c(\n \"tr\",\n { staticClass: \"ak-table-row\" },\n [\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.order\n .paymentCardHolderName\n ) +\n \"\\n \"\n ),\n ]\n ),\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.order.getPaymentCardNumber\n ? _c(\n \"tr\",\n { staticClass: \"ak-table-row\" },\n [\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.order\n .getPaymentCardNumber\n ) +\n \"\\n \"\n ),\n _vm.order\n .paymentCardExpirationMonthAndYear\n ? _c(\"div\", [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"Vervaldatum\")\n ) +\n \" \" +\n _vm._s(\n _vm.order\n .paymentCardExpirationMonthAndYear\n ) +\n \"\\n \"\n ),\n ])\n : _vm._e(),\n ]\n ),\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.order.paymentMessage\n ? _c(\n \"tr\",\n { staticClass: \"ak-table-row\" },\n [\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.order.paymentMessage\n ) +\n \"\\n \"\n ),\n ]\n ),\n ]\n )\n : _vm._e(),\n ]),\n ]\n )\n : !_vm.order.cancelled\n ? _c(\n \"table\",\n { staticClass: \"ak-table ak-panel__table\" },\n [\n _c(\"tbody\", { staticClass: \"ak-table-body\" }, [\n _c(\"tr\", { staticClass: \"ak-table-row\" }, [\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"Betaling openstaande\")\n ) +\n \"\\n \"\n ),\n ]\n ),\n ]),\n _vm._v(\" \"),\n _vm.order.paymentMessage\n ? _c(\n \"tr\",\n { staticClass: \"ak-table-row\" },\n [\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.order.paymentMessage\n ) +\n \"\\n \"\n ),\n ]\n ),\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"tr\", { staticClass: \"ak-table-row\" }, [\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _c(\n \"ak-button\",\n {\n on: {\n click: function ($event) {\n return _vm.openOrderDefinitionForm(\n \"payment-form\"\n )\n },\n },\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"Markeren als betaald\")\n ) +\n \"\\n \"\n ),\n ]\n ),\n ],\n 1\n ),\n ]),\n ]),\n ]\n )\n : _vm._e(),\n ]\n ),\n _vm._v(\" \"),\n _vm.order.comments\n ? _c(\n \"div\",\n {\n staticClass:\n \"ak-panel ak-panel--no-padding m-b-xs-20\",\n },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"ak-panel__header ak-panel__header--small\",\n },\n [\n _c(\"div\", { staticClass: \"ak-panel__title\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"Opmerkingen\")) +\n \"\\n \"\n ),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"ak-panel__body\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.order.comments) +\n \"\\n \"\n ),\n ]),\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"ak-panel ak-panel--no-padding m-b-xs-20\",\n },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"ak-panel__header ak-panel__header--small\",\n },\n [\n _c(\"div\", { staticClass: \"ak-panel__title\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"Historiek\")) +\n \"\\n \"\n ),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"table\",\n { staticClass: \"ak-table ak-panel__table\" },\n [\n _c(\"thead\", [\n _c(\"tr\", { staticClass: \"ak-table-row\" }, [\n _c(\"th\", { staticClass: \"ak-table-head\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"Datum\")) +\n \"\\n \"\n ),\n ]),\n _vm._v(\" \"),\n _c(\"th\", { staticClass: \"ak-table-head\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"Gebeurtenis\")) +\n \"\\n \"\n ),\n ]),\n ]),\n ]),\n _vm._v(\" \"),\n _c(\n \"tbody\",\n { staticClass: \"ak-table-body\" },\n [\n _vm._l(\n _vm.order.orderHistory,\n function (history) {\n return _c(\n \"tr\",\n { staticClass: \"ak-table-row\" },\n [\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _vm._v(\n _vm._s(\n _vm._f(\"datetime\")(\n history.createdAt\n )\n )\n ),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n history.href\n ? _c(\n \"a\",\n {\n attrs: {\n href: history.href,\n target: \"_blank\",\n },\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(history.event) +\n \"\\n \"\n ),\n ]\n )\n : [\n _c(\"span\", {\n domProps: {\n innerHTML: _vm._s(\n history.event\n ),\n },\n }),\n ],\n ],\n 2\n ),\n ]\n )\n }\n ),\n _vm._v(\" \"),\n _c(\"tr\", { staticClass: \"ak-table-row\" }, [\n _c(\"td\", { staticClass: \"ak-table-column\" }, [\n _vm._v(\n _vm._s(_vm._f(\"datetime\")(_vm.cart.date))\n ),\n ]),\n _vm._v(\" \"),\n _c(\"td\", { staticClass: \"ak-table-column\" }, [\n _vm._v(\n _vm._s(_vm.$t(\"Creatie winkelmandje\"))\n ),\n ]),\n ]),\n ],\n 2\n ),\n ]\n ),\n ]\n ),\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"col-lg-4\" }, [\n _c(\n \"div\",\n {\n staticClass: \"ak-panel ak-panel--no-padding m-b-xs-20\",\n },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"ak-panel__header ak-panel__header--small\",\n },\n [\n _c(\"div\", { staticClass: \"ak-panel__title\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"Interne opmerkingen\")) +\n \"\\n \"\n ),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"ak-panel__body ak-panel__body--small reading\",\n },\n [\n _vm.order.internalComments\n ? _c(\"p\", {\n domProps: {\n innerHTML: _vm._s(\n _vm.order.internalComments\n ),\n },\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"ak-button\",\n {\n on: {\n click: function ($event) {\n return _vm.openOrderDefinitionForm(\n \"internal-comments-form\"\n )\n },\n },\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"Opmerking toevoegen\")) +\n \"\\n \"\n ),\n ]\n ),\n ],\n 1\n ),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"ak-panel ak-panel--no-padding m-b-xs-20\",\n },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"ak-panel__header ak-panel__header--small\",\n },\n [\n _c(\"div\", { staticClass: \"ak-panel__title\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"Persoonlijke gegevens\")) +\n \"\\n \"\n ),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"ak-panel__body ak-panel__body--small reading\",\n },\n [\n _c(\"p\", [\n _c(\"strong\", [\n _vm._v(\n _vm._s(_vm.cartDetails.firstName) +\n \" \" +\n _vm._s(_vm.cartDetails.surname)\n ),\n ]),\n _c(\"br\"),\n ]),\n _vm._v(\" \"),\n _vm.cartDetails.streetName ||\n _vm.cartDetails.streetNumber ||\n _vm.cartDetails.boxNumber ||\n _vm.cartDetails.postalCode ||\n _vm.cartDetails.city ||\n _vm.cartDetails.countryIso\n ? _c(\"p\", [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.cartDetails.streetName) +\n \" \" +\n _vm._s(_vm.cartDetails.streetNumber) +\n \"\\n \" +\n _vm._s(_vm.cartDetails.boxNumber)\n ),\n _c(\"br\"),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.cartDetails.postalCode) +\n \" \" +\n _vm._s(_vm.cartDetails.city) +\n \" \" +\n _vm._s(_vm.cartDetails.countryIso) +\n \"\\n \"\n ),\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"p\", [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.cartDetails.phone)\n ),\n _c(\"br\"),\n _vm._v(\" \"),\n _c(\n \"a\",\n {\n attrs: {\n href: \"mailto:\" + _vm.cartDetails.email,\n },\n },\n [_vm._v(_vm._s(_vm.cartDetails.email))]\n ),\n ]),\n ]\n ),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"ak-panel ak-panel--no-padding m-b-xs-20\",\n },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"ak-panel__header ak-panel__header--small\",\n },\n [\n _c(\"div\", { staticClass: \"ak-panel__title\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"Factuuradres\")) +\n \"\\n \"\n ),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"ak-panel__body ak-panel__body--small reading\",\n },\n [\n _c(\"p\", [\n _c(\"strong\", [\n _vm._v(\n _vm._s(_vm.order.invoiceFirstName) +\n \" \" +\n _vm._s(_vm.order.invoiceSurnames)\n ),\n ]),\n _c(\"br\"),\n _vm._v(\" \"),\n _vm.order.invoiceCompanyName\n ? _c(\"strong\", [\n _vm._v(\n \" \" +\n _vm._s(_vm.order.invoiceCompanyName) +\n \" \"\n ),\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.order.invoiceVat\n ? _c(\"span\", [\n _vm._v(\" \" + _vm._s(_vm.order.invoiceVat)),\n ])\n : _vm._e(),\n ]),\n _vm._v(\" \"),\n _vm.order.invoiceStreetAddress ||\n _vm.order.invoiceStreetNumber ||\n _vm.order.invoiceBoxNumber ||\n _vm.order.invoicePostalCode ||\n _vm.order.invoiceCity ||\n _vm.order.invoiceCountryIso\n ? _c(\"p\", [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.order.invoiceStreetAddress) +\n \" \" +\n _vm._s(_vm.order.invoiceStreetNumber) +\n \"\\n \" +\n _vm._s(_vm.order.invoiceBoxNumber)\n ),\n _c(\"br\"),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.order.invoicePostalCode) +\n \" \" +\n _vm._s(_vm.order.invoiceCity) +\n \" \" +\n _vm._s(_vm.order.invoiceCountryIso) +\n \"\\n \"\n ),\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"p\", [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.order.phone)\n ),\n _c(\"br\"),\n _vm._v(\" \"),\n _vm.order.invoiceEmail\n ? _c(\n \"a\",\n {\n attrs: {\n href:\n \"mailto:\" + _vm.order.invoiceEmail,\n },\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.order.invoiceEmail) +\n \"\\n \"\n ),\n ]\n )\n : _vm._e(),\n ]),\n ]\n ),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"ak-panel ak-panel--no-padding m-b-xs-20\",\n },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"ak-panel__header ak-panel__header--small\",\n },\n [\n _c(\"div\", { staticClass: \"ak-panel__title\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"Leveringsgegevens\")) +\n \"\\n \"\n ),\n ]),\n _vm._v(\" \"),\n _c(\"strong\", { staticClass: \"m-l-auto\" }, [\n _vm.order.shippingTypeId === 1\n ? _c(\"span\", [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"Afhalen\")) +\n \"\\n \"\n ),\n ])\n : _c(\"span\", [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"Leveren\")) +\n \"\\n \"\n ),\n ]),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"table\",\n { staticClass: \"ak-table ak-panel__table\" },\n [\n _c(\"tbody\", { staticClass: \"ak-table-body\" }, [\n _vm.order.shippingCompanyName &&\n !_vm.order.shippingName &&\n !_vm.order.shippingReceiverName\n ? _c(\"tr\", [\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _c(\"strong\", [\n _vm._v(_vm._s(_vm.$t(\"Bedrijf:\"))),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.order.shippingCompanyName\n ) +\n \"\\n \"\n ),\n ]\n ),\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.order.shippingFirstName\n ? _c(\"tr\", { staticClass: \"ak-table-row\" }, [\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _c(\"strong\", [\n _vm._v(_vm._s(_vm.$t(\"Voornaam:\"))),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.order.shippingFirstName\n ) +\n \"\\n \"\n ),\n ]\n ),\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.order.shippingSurnames\n ? _c(\"tr\", { staticClass: \"ak-table-row\" }, [\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _c(\"strong\", [\n _vm._v(_vm._s(_vm.$t(\"Achternaam:\"))),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.order.shippingSurnames) +\n \"\\n \"\n ),\n ]\n ),\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.order.shippingName\n ? _c(\"tr\", { staticClass: \"ak-table-row\" }, [\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _c(\"strong\", [\n _vm._v(_vm._s(_vm.$t(\"Naam:\"))),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.order.shippingName) +\n \"\\n \"\n ),\n ]\n ),\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.order.shippingReceiverName\n ? _c(\"tr\", { staticClass: \"ak-table-row\" }, [\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _c(\"strong\", [\n _vm._v(\n _vm._s(_vm.$t(\"Ontvanger naam:\"))\n ),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.order.shippingReceiverName\n ) +\n \"\\n \"\n ),\n ]\n ),\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.order.shippingEmail\n ? _c(\"tr\", { staticClass: \"ak-table-row\" }, [\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _c(\"strong\", [\n _vm._v(\n _vm._s(_vm.$t(\"E-mailadres:\"))\n ),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _c(\n \"a\",\n {\n attrs: {\n href:\n \"mailto:\" +\n _vm.order.shippingEmail,\n },\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.order.shippingEmail\n ) +\n \"\\n \"\n ),\n ]\n ),\n ]\n ),\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.order.shippingStreetAddress ||\n _vm.order.shippingStreetNumber ||\n _vm.order.shippingBoxNumber ||\n _vm.order.shippingPostalCode ||\n _vm.order.shippingCity ||\n _vm.order.shippingCountryIso\n ? _c(\"tr\", { staticClass: \"ak-table-row\" }, [\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _c(\"strong\", [\n _vm._v(_vm._s(_vm.$t(\"Adres:\"))),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.order.shippingStreetAddress\n ) +\n \" \" +\n _vm._s(\n _vm.order.shippingStreetNumber\n ) +\n \"\\n \" +\n _vm._s(\n _vm.order.shippingBoxNumber\n ) +\n \",\\n \" +\n _vm._s(\n _vm.order.shippingPostalCode\n ) +\n \" \" +\n _vm._s(_vm.order.shippingCity) +\n \"\\n \" +\n _vm._s(\n _vm.order.shippingCountryIso\n ) +\n \"\\n \"\n ),\n ]\n ),\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.order.requestedDeliveryDate\n ? _c(\"tr\", { staticClass: \"ak-table-row\" }, [\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _c(\"strong\", [\n _vm._v(\n _vm._s(\n _vm.$t(\"Gewenste leveringsdatum:\")\n )\n ),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm\n .$moment(\n _vm.order\n .requestedDeliveryDate\n )\n .format(\"DD-MM-YYYY\")\n ) +\n \"\\n \"\n ),\n ]\n ),\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.hasDateShippingPlanned\n ? _c(\"tr\", { staticClass: \"ak-table-row\" }, [\n _c(\n \"td\",\n { staticClass: \"ak-table-column\" },\n [\n _c(\"strong\", [\n _vm._v(\n _vm._s(\n _vm.$t(\"Geplande leveringsdatum:\")\n )\n ),\n ]),\n ]\n ),\n ])\n : _vm._e(),\n ]),\n ]\n ),\n ]\n ),\n ]),\n ])\n : _vm._e(),\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"router-view\", {\n attrs: { name: \"childview\" },\n on: { paymentSaved: _vm.paymentSaved },\n }),\n _vm._v(\" \"),\n _c(\"ak-confirm\", {\n attrs: {\n confirmTitle: _vm.$t(\"Ben je zeker?\"),\n confirmText: _vm.$t(\n \"Ben je zeker dat je deze bestelling wil annuleren?\"\n ),\n confirmLabel: _vm.$t(\"Ja\"),\n cancelLabel: _vm.$t(\"Nee\"),\n },\n on: {\n confirm: _vm.cancelOrder,\n cancel: function ($event) {\n _vm.showConfirm = false\n },\n },\n model: {\n value: _vm.showConfirm,\n callback: function ($$v) {\n _vm.showConfirm = $$v\n },\n expression: \"showConfirm\",\n },\n }),\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n\n\n","import { render, staticRenderFns } from \"./OrderOverview.vue?vue&type=template&id=d4a5f106&\"\nimport script from \"./OrderOverview.vue?vue&type=script&lang=js&\"\nexport * from \"./OrderOverview.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Volumes/htdocs/optiek-dominiek-blueprints/src/vue-apps/admin/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('d4a5f106')) {\n api.createRecord('d4a5f106', component.options)\n } else {\n api.reload('d4a5f106', component.options)\n }\n module.hot.accept(\"./OrderOverview.vue?vue&type=template&id=d4a5f106&\", function () {\n api.rerender('d4a5f106', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"views/pages/OrderOverview.vue\"\nexport default component.exports","import VueRouter from 'vue-router';\nimport Dashboard from './views/pages/Dashboard.vue';\nimport OrderOverview from \"./views/pages/OrderOverview.vue\";\n\nVue.use(VueRouter);\n\nlet routes = [\n {\n path: '/',\n component: Dashboard,\n meta: {\n title: \"dashboard\",\n },\n alias: '/home'\n }\n];\n\n\nlet routesAppended = Vue.cmsRouter.getRoutesAppend();\nconst gridRouteIndex = routesAppended.findIndex(route => route.name === 'grid' );\n\nroutesAppended.splice(gridRouteIndex, 0,\n {\n path: '/:gridDefinition/:bundle/order-overview/:orderCode',\n name: 'order-overview',\n component: OrderOverview,\n meta: {\n title: \"Order overview\",\n },\n children: [\n {\n path: ':bundle/:definition/:objectId/:relationString?',\n name: 'order-overview-form',\n components:{\n childview: {\n template: '',\n }\n },\n }\n ]\n }\n)\n\nroutes = [...Vue.cmsRouter.getRoutesPrepend(), ...routes, ...routesAppended];\n\nconst router = new VueRouter({\n routes\n})\n\nVue.cmsRouter.setActiveRouter(router);\n\nexport default router;\n","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"v-select\", {\n attrs: {\n placeholder: _vm.$t(\"Status selecteren\"),\n options: _vm.selectOptions,\n reduce: _vm.reduce,\n },\n on: { input: _vm.valueChanged },\n model: {\n value: _vm.currentValue,\n callback: function ($$v) {\n _vm.currentValue = $$v\n },\n expression: \"currentValue\",\n },\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n\n\n","import { render, staticRenderFns } from \"./AkApprovalStatusSelect.vue?vue&type=template&id=f184c06e&\"\nimport script from \"./AkApprovalStatusSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./AkApprovalStatusSelect.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Volumes/htdocs/optiek-dominiek-blueprints/src/vue-apps/admin/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('f184c06e')) {\n api.createRecord('f184c06e', component.options)\n } else {\n api.reload('f184c06e', component.options)\n }\n module.hot.accept(\"./AkApprovalStatusSelect.vue?vue&type=template&id=f184c06e&\", function () {\n api.rerender('f184c06e', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"widgets/AkApprovalStatusSelect.vue\"\nexport default component.exports","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"ak-form-decorator\",\n {\n attrs: {\n id: _vm.id,\n title: _vm.title,\n helpText: _vm.helpText,\n error: _vm.error,\n hasError: _vm.hasError,\n required: _vm.required,\n value: _vm.value,\n },\n },\n [\n _c(\"span\", { staticClass: \"ak-form__prefix\" }, [\n _vm._v(\"\\n \" + _vm._s(_vm.prefix) + \"\\n \"),\n ]),\n _vm._v(\" \"),\n _c(\n \"vue-autonumeric\",\n _vm._g(\n {\n staticClass: \"ak-form__control ak-form__control--prefix\",\n class: {\n \"ak-form__control--has-value\": _vm.currentValue,\n },\n attrs: {\n options: _vm.autoNumericOptions,\n placeholder: _vm.placeholder,\n readonly: _vm.readOnly,\n },\n model: {\n value: _vm.currentValue,\n callback: function ($$v) {\n _vm.currentValue = $$v\n },\n expression: \"currentValue\",\n },\n },\n _vm.$currentListeners\n )\n ),\n _vm._v(\" \"),\n _vm._t(\"popover\"),\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","const formElementMixin = {\n\tdata() {\n\t\treturn {\n\t\t\tremoveFromListener: ['input','updateState'],\n\t\t\tisFocused: null,\n\t\t\tlocalValue: null,\n\t\t\t$currentListeners: {}\n\t\t}\n\t},\n\tprops: {\n\t\tid: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t\trequired: true,\n\t\t},\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t\trequired: false,\n\t\t},\n\t\thidden: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t\trequired: false,\n\t\t},\n\t\thelpText: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t\trequired: false,\n\t\t},\n\t\terror: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t\trequired: false,\n\t\t},\n\t\thasError: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tvalue: {\n\t\t\ttype: String|Array|Number,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\t\treadOnly: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tisEmpty: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\trequired: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tplaceholder: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n },\n\t\tlocales: {\n type: Array,\n required: false,\n default: () => []\n },\n\t\tisLocalized: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t}\n\t},\n\tmodel: {\n\t\tprop: 'value',\n\t\tevent: 'input'\n\t},\n\twatch: {\n\t\tvalue(newValue, oldValue) {\n\t\t\tif(newValue !== oldValue) {\n\t\t\t\tthis.localValue = newValue;\n\t\t\t}\n\t\t}\n\t},\n\tcomputed: {\n\t\tcurrentValue: {\n\t\t\tget() {\n\t\t\t\tif (this.isLocalized) {\n\t\t\t\t\treturn this.localValue[this.$localeHandler.getActiveLocale()];\n\t\t\t\t}\n\n\t\t\t\treturn this.localValue;\n\t\t\t},\n set(e) {\n\t\t\t\tif (this.isLocalized) {\n\t\t\t\t\tthis.localValue[this.$localeHandler.getActiveLocale()] = e;\n\t\t\t\t} else {\n\t\t\t\t\tthis.localValue = e;\n\t\t\t\t}\n\n\t\t\t\tthis.$emit('input', this.localValue);\n\t\t\t\tthis.$emit('updateState', this.formatStateOutput(this.localValue));\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\t// add a method where we can overwrite the output for state handling\n\t\t// see an example in AkRelation\n\t\tformatStateOutput(e) {\n\t\t\treturn e;\n\t\t},\n\t\tfocus() {\n\t\t\tthis.isFocused = true;\n\t\t\tthis.$emit('focus');\n\t\t},\n\t\tblur() {\n\t\t\tthis.isFocused = false;\n\t\t\tthis.$emit('blur');\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.localValue = this.value;\n\t\t// clone\n\t\tlet tempListeners = {...this.$listeners};\n\n\t\t// remove the listeners that we emit self\n\t\tthis.removeFromListener.forEach(listerner => {\n\t\t\tdelete tempListeners[listerner];\n\t\t})\n\n\t\tthis.$currentListeners = tempListeners;\n\t}\n}\n\nexport default formElementMixin;","import { render, staticRenderFns } from \"./AkPrice.vue?vue&type=template&id=d4dc99be&\"\nimport script from \"./AkPrice.vue?vue&type=script&lang=js&\"\nexport * from \"./AkPrice.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Volumes/htdocs/optiek-dominiek-blueprints/src/vue-apps/admin/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('d4dc99be')) {\n api.createRecord('d4dc99be', component.options)\n } else {\n api.reload('d4dc99be', component.options)\n }\n module.hot.accept(\"./AkPrice.vue?vue&type=template&id=d4dc99be&\", function () {\n api.rerender('d4dc99be', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"widgets/AkPrice.vue\"\nexport default component.exports","\n\n\n","import App from './views/App.vue';\nimport router from './routes';\n\nimport AkApprovalStatusSelect from \"./widgets/AkApprovalStatusSelect.vue\";\nimport AkPrice from \"./widgets/AkPrice.vue\";\n\nVue.component('ak-approval-status-select', AkApprovalStatusSelect);\nVue.component('ak-price', AkPrice);\n\nlet app = new Vue({\n data() { \n return {\n globalMessages: []\n }\n },\n router,\n render: h => h(App),\n}).$mount('#app')\n\nAppKit.init(app);\n"],"sourceRoot":""}