{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./app/javascript/packs/mask.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","_typeof","obj","iterator","constructor","_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","props","length","descriptor","configurable","writable","_createClass","protoProps","staticProps","_defineProperty","_inherits","subClass","superClass","_setPrototypeOf","_getPrototypeOf","setPrototypeOf","getPrototypeOf","__proto__","_isNativeReflectConstruct","Reflect","construct","sham","Proxy","Boolean","valueOf","e","_objectWithoutPropertiesLoose","source","excluded","sourceKeys","keys","indexOf","_objectWithoutProperties","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","_assertThisInitialized","self","ReferenceError","_possibleConstructorReturn","_createSuper","Derived","hasNativeReflectConstruct","result","Super","NewTarget","this","arguments","apply","_superPropBase","_get","receiver","base","desc","getOwnPropertyDescriptor","set","_set","isStrict","Error","_slicedToArray","arr","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","Array","isArray","_arrayLikeToArray","iter","from","_i","_s","_e","_arr","_n","_d","next","done","push","err","minLen","toString","slice","test","len","arr2","ChangeDetails","details","assign","inserted","rawInserted","skip","tailShift","isString","str","String","DIRECTION","NONE","LEFT","FORCE_LEFT","RIGHT","FORCE_RIGHT","forceDirection","direction","escapeRegExp","replace","normalizePrepare","prep","objectIncludes","b","a","arrA","arrB","dateA","Date","dateB","getTime","regexpA","RegExp","regexpB","ActionDetails","cursorPos","oldValue","oldSelection","startChangePos","start","Math","min","substr","insertedCount","max","end","removedCount","substring","ContinuousTailDetails","undefined","stop","tail","masked","append","aggregate","_appendPlaceholder","state","beforePos","shiftChar","IMask","el","opts","InputMask","Masked","_value","_update","DEFAULTS","isInitialized","withValueRefresh","resolve","reset","input","doCommit","doParse","doFormat","extractInput","raw","isComplete","fromPos","toPos","appendTo","ch","flags","checkTail","consistentState","_normalizePrepare2","doPrepare","_appendCharRaw","consistentTail","appended","doValidate","beforeTailState","overwrite","unshift","tailDetails","appendTail","shift","_beforeTailState","ci","_appendChar","eager","_appendEager","fn","_refreshing","rawInput","rawInputValue","ret","_isolated","prepare","validate","parent","commit","format","parse","deleteCount","removeDirection","oldRawValue","tailPos","extractTail","nearestInputPos","remove","valLength","mask","tval","typedValue","EMPTY_VALUES","includes","maskedClass","MaskedRegExp","MaskedPattern","MaskedDate","Number","MaskedNumber","MaskedDynamic","Function","MaskedFunction","console","warn","createMask","MaskedClass","v","_excluded$4","DEFAULT_INPUT_DEFINITIONS","PatternInputDefinition","blockOpts","isFilled","isOptional","placeholderChar","unmaskedValue","lazy","_this$masked","_this$masked2","_this$masked3","minPos","maxPos","boundPos","_this$masked4","_this$parent","PatternFixedDefinition","isFixed","isUnmasking","_isRawInput","isResolved","_excluded$3","ChunksTailDetails","chunks","map","join","tailChunk","lastChunk","extendLast","extend","firstTailChunk","blockIndex","chunk","lastBlockIter","_mapPosToBlock","chunkBlock","index","_stops","_blocks","remainChars","cstate","chunkShiftPos","splice","PatternCursor","pos","_log","_ref","offset","ok","_blockStartPos","pop","block","pushState","bindBlock","_this$block","_this","_pushLeft","_this2","_this3","_this4","_pushRight","_this5","_this6","_Masked","_super","search","_excluded$2","definitions","_rebuildMask","defs","_maskedBlocks","pattern","unmaskingBlock","optionalBlock","blocks","bNames","filter","bName","sort","maskedBlock","char","isInput","STOP_CHAR","ESCAPE_CHAR","def","maskedState","forEach","bi","every","reduce","_this$_mapPosToBlock","startBlockIndex","blockIter","_flags$_beforeTailSta","_flags$_beforeTailSta2","_block","blockDetails","chunkTail","_forEachBlocksInRange","bFromPos","bToPos","blockChunk","_findStopBefore","_","stopBefore","si","toBlockIndex","startBlockIter","endBlockIndex","args","bDetails","accVal","_block2","blockStartPos","fromBlockIter","toBlockIter","isSameBlock","fromBlockStartPos","fromBlockEndPos","removeDetails","cursor","pushRightBeforeInput","popState","pushLeftBeforeInput","pushRightBeforeFilled","pushLeftBeforeRequired","pushLeftBeforeFilled","pushRightBeforeRequired","maskedBlocks","indices","gi","InputDefinition","FixedDefinition","MaskedRange","_MaskedPattern","maxLength","to","fromStr","padStart","toStr","sameCharsCount","repeat","minstr","maxstr","_ref2","match","placeholder","num","padEnd","autofix","nextVal","_this$boundaries2","boundaries","_get2","_matchFrom","_this$boundaries4","_len","_key","concat","GET_DEFAULT_BLOCKS","Y","getFullYear","getMonth","getDate","bk","date","isDateExist","_str$split2","split","day","month","year","MaskElement","_unsafeSelectionStart","_unsafeSelectionEnd","selectionStart","selectionEnd","_unsafeSelect","handlers","HTMLMaskElement","_MaskElement","_handlers","_this$input$getRootNo","_this$input$getRootNo2","_this$input","getRootNode","document","rootElement","activeElement","setSelectionRange","event","_toggleEventHandler","EVENTS_MAP","handler","removeEventListener","addEventListener","selectionChange","drop","click","focus","HTMLContenteditableMaskElement","_HTMLMaskElement","root","selection","getSelection","anchorOffset","focusOffset","createRange","range","setStart","firstChild","setEnd","lastChild","removeAllRanges","addRange","textContent","_excluded$1","isContentEditable","tagName","_listeners","_unmaskedValue","_saveSelection","_onInput","_onChange","_onDrop","_onFocus","_onClick","alignCursor","alignCursorFriendly","_bindEvents","updateValue","maskEquals","updateOptions","updateControl","val","typedValueEquals","bindEvents","unbindEvents","ev","listeners","_cursorChanging","_changingCursorPos","isActive","select","_selection","newUnmaskedValue","newValue","isChanged","_fireChangeEvents","restOpts","updateMask","updateOpts","_delayUpdateCursor","_abortUpdateCursor","setTimeout","_fireEvent","_inputEvent","clearTimeout","hIndex","removed","updateCursor","preventDefault","stopPropagation","_unbindEvents","MaskedEnum","some","_updateRegExps","allowNegative","midInput","mid","scale","radix","_numberRegExpInput","_numberRegExp","_mapToRadixRegExp","mapToRadix","_thousandsSeparatorRegExp","thousandsSeparator","parts","noSepCh","_removeThousandsSeparators","prepCh","extendOnSeparators","count","_separatorsCount","_this$_adjustRangeWit2","_adjustRangeWithSeparators","prevBeforeTailValue","prevBeforeTailSeparatorsCount","_separatorsCountFromSlice","appendDetails","_insertThousandsSeparators","beforeTailValue","beforeTailSeparatorsCount","searchFrom","separatorPos","separatorAroundFromPos","_findSeparatorAround","separatorAroundToPos","_this$_adjustRangeWit4","valueBeforePos","valueAfterPos","separatorAtLeftPos","separatorAtLeftEndPos","separatorAtRightPos","valid","number","isNaN","validnum","formatted","normalizeZeros","_normalizeZeros","padFractionalZeros","_padFractionalZeros","sign","zeros","signed","_excluded","currentMask","compiledMasks","_applyDispatch","currentMaskFlags","prevValueBeforeTail","inputValue","insertValue","_rawInputValue","tailValue","prevMask","prevMaskState","doDispatch","currentMaskRef","dispatch","currentDetails","_normalizePrepare4","_this$currentMask","_this$currentMask2","_this$currentMask3","_this$currentMask4","_this$currentMask5","mi","_this$currentMask6","_this$currentMask7","_this$currentMask8","_get3","_len2","_key2","_mask$mi","_this$currentMask9","inputs","weight","i1","i2","PIPE_TYPE","MASKED","UNMASKED","TYPED","createPipe","runIsolated","pipe","pipeArgs","globalThis","factory"],"mappings":"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","file":"js/mask-bec0d70870b0a4ff04ed.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 = \"/assets/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 182);\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.IMask = {}));\n })(this, (function (exports) { 'use strict';\n \n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n \n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n }\n \n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n \n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n \n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n }\n \n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n \n return obj;\n }\n \n function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n \n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n }\n \n function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n }\n \n function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n }\n \n function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n \n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n }\n \n function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n \n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n \n return target;\n }\n \n function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n \n var target = _objectWithoutPropertiesLoose(source, excluded);\n \n var key, i;\n \n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n \n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n \n return target;\n }\n \n function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n \n return self;\n }\n \n function _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n \n return _assertThisInitialized(self);\n }\n \n function _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n \n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n \n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n \n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n \n return _possibleConstructorReturn(this, result);\n };\n }\n \n function _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = _getPrototypeOf(object);\n if (object === null) break;\n }\n \n return object;\n }\n \n function _get() {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n _get = Reflect.get.bind();\n } else {\n _get = function _get(target, property, receiver) {\n var base = _superPropBase(target, property);\n \n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n \n if (desc.get) {\n return desc.get.call(arguments.length < 3 ? target : receiver);\n }\n \n return desc.value;\n };\n }\n \n return _get.apply(this, arguments);\n }\n \n function set(target, property, value, receiver) {\n if (typeof Reflect !== \"undefined\" && Reflect.set) {\n set = Reflect.set;\n } else {\n set = function set(target, property, value, receiver) {\n var base = _superPropBase(target, property);\n \n var desc;\n \n if (base) {\n desc = Object.getOwnPropertyDescriptor(base, property);\n \n if (desc.set) {\n desc.set.call(receiver, value);\n return true;\n } else if (!desc.writable) {\n return false;\n }\n }\n \n desc = Object.getOwnPropertyDescriptor(receiver, property);\n \n if (desc) {\n if (!desc.writable) {\n return false;\n }\n \n desc.value = value;\n Object.defineProperty(receiver, property, desc);\n } else {\n _defineProperty(receiver, property, value);\n }\n \n return true;\n };\n }\n \n return set(target, property, value, receiver);\n }\n \n function _set(target, property, value, receiver, isStrict) {\n var s = set(target, property, value, receiver || target);\n \n if (!s && isStrict) {\n throw new Error('failed to set property');\n }\n \n return value;\n }\n \n function _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n }\n \n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n }\n \n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n }\n \n function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n }\n \n function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n }\n \n function _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n \n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n \n var _s, _e;\n \n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n \n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n \n return _arr;\n }\n \n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n \n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n \n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n \n return arr2;\n }\n \n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n \n function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n \n /**\n Provides details of changing model value\n @param {Object} [details]\n @param {string} [details.inserted] - Inserted symbols\n @param {boolean} [details.skip] - Can skip chars\n @param {number} [details.removeCount] - Removed symbols count\n @param {number} [details.tailShift] - Additional offset if any changes occurred before tail\n */\n var ChangeDetails = /*#__PURE__*/function () {\n /** Inserted symbols */\n \n /** Can skip chars */\n \n /** Additional offset if any changes occurred before tail */\n \n /** Raw inserted is used by dynamic mask */\n function ChangeDetails(details) {\n _classCallCheck(this, ChangeDetails);\n \n Object.assign(this, {\n inserted: '',\n rawInserted: '',\n skip: false,\n tailShift: 0\n }, details);\n }\n /**\n Aggregate changes\n @returns {ChangeDetails} `this`\n */\n \n \n _createClass(ChangeDetails, [{\n key: \"aggregate\",\n value: function aggregate(details) {\n this.rawInserted += details.rawInserted;\n this.skip = this.skip || details.skip;\n this.inserted += details.inserted;\n this.tailShift += details.tailShift;\n return this;\n }\n /** Total offset considering all changes */\n \n }, {\n key: \"offset\",\n get: function get() {\n return this.tailShift + this.inserted.length;\n }\n }]);\n \n return ChangeDetails;\n }();\n \n /** Checks if value is string */\n \n function isString(str) {\n return typeof str === 'string' || str instanceof String;\n }\n /**\n Direction\n @prop {string} NONE\n @prop {string} LEFT\n @prop {string} FORCE_LEFT\n @prop {string} RIGHT\n @prop {string} FORCE_RIGHT\n */\n \n var DIRECTION = {\n NONE: 'NONE',\n LEFT: 'LEFT',\n FORCE_LEFT: 'FORCE_LEFT',\n RIGHT: 'RIGHT',\n FORCE_RIGHT: 'FORCE_RIGHT'\n };\n /** */\n \n function forceDirection(direction) {\n switch (direction) {\n case DIRECTION.LEFT:\n return DIRECTION.FORCE_LEFT;\n \n case DIRECTION.RIGHT:\n return DIRECTION.FORCE_RIGHT;\n \n default:\n return direction;\n }\n }\n /** Escapes regular expression control chars */\n \n function escapeRegExp(str) {\n return str.replace(/([.*+?^=!:${}()|[\\]\\/\\\\])/g, '\\\\$1');\n }\n function normalizePrepare(prep) {\n return Array.isArray(prep) ? prep : [prep, new ChangeDetails()];\n } // cloned from https://github.com/epoberezkin/fast-deep-equal with small changes\n \n function objectIncludes(b, a) {\n if (a === b) return true;\n var arrA = Array.isArray(a),\n arrB = Array.isArray(b),\n i;\n \n if (arrA && arrB) {\n if (a.length != b.length) return false;\n \n for (i = 0; i < a.length; i++) {\n if (!objectIncludes(a[i], b[i])) return false;\n }\n \n return true;\n }\n \n if (arrA != arrB) return false;\n \n if (a && b && _typeof(a) === 'object' && _typeof(b) === 'object') {\n var dateA = a instanceof Date,\n dateB = b instanceof Date;\n if (dateA && dateB) return a.getTime() == b.getTime();\n if (dateA != dateB) return false;\n var regexpA = a instanceof RegExp,\n regexpB = b instanceof RegExp;\n if (regexpA && regexpB) return a.toString() == b.toString();\n if (regexpA != regexpB) return false;\n var keys = Object.keys(a); // if (keys.length !== Object.keys(b).length) return false;\n \n for (i = 0; i < keys.length; i++) {\n // $FlowFixMe ... ???\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n }\n \n for (i = 0; i < keys.length; i++) {\n if (!objectIncludes(b[keys[i]], a[keys[i]])) return false;\n }\n \n return true;\n } else if (a && b && typeof a === 'function' && typeof b === 'function') {\n return a.toString() === b.toString();\n }\n \n return false;\n }\n /** Selection range */\n \n /** Provides details of changing input */\n \n var ActionDetails = /*#__PURE__*/function () {\n /** Current input value */\n \n /** Current cursor position */\n \n /** Old input value */\n \n /** Old selection */\n function ActionDetails(value, cursorPos, oldValue, oldSelection) {\n _classCallCheck(this, ActionDetails);\n \n this.value = value;\n this.cursorPos = cursorPos;\n this.oldValue = oldValue;\n this.oldSelection = oldSelection; // double check if left part was changed (autofilling, other non-standard input triggers)\n \n while (this.value.slice(0, this.startChangePos) !== this.oldValue.slice(0, this.startChangePos)) {\n --this.oldSelection.start;\n }\n }\n /**\n Start changing position\n @readonly\n */\n \n \n _createClass(ActionDetails, [{\n key: \"startChangePos\",\n get: function get() {\n return Math.min(this.cursorPos, this.oldSelection.start);\n }\n /**\n Inserted symbols count\n @readonly\n */\n \n }, {\n key: \"insertedCount\",\n get: function get() {\n return this.cursorPos - this.startChangePos;\n }\n /**\n Inserted symbols\n @readonly\n */\n \n }, {\n key: \"inserted\",\n get: function get() {\n return this.value.substr(this.startChangePos, this.insertedCount);\n }\n /**\n Removed symbols count\n @readonly\n */\n \n }, {\n key: \"removedCount\",\n get: function get() {\n // Math.max for opposite operation\n return Math.max(this.oldSelection.end - this.startChangePos || // for Delete\n this.oldValue.length - this.value.length, 0);\n }\n /**\n Removed symbols\n @readonly\n */\n \n }, {\n key: \"removed\",\n get: function get() {\n return this.oldValue.substr(this.startChangePos, this.removedCount);\n }\n /**\n Unchanged head symbols\n @readonly\n */\n \n }, {\n key: \"head\",\n get: function get() {\n return this.value.substring(0, this.startChangePos);\n }\n /**\n Unchanged tail symbols\n @readonly\n */\n \n }, {\n key: \"tail\",\n get: function get() {\n return this.value.substring(this.startChangePos + this.insertedCount);\n }\n /**\n Remove direction\n @readonly\n */\n \n }, {\n key: \"removeDirection\",\n get: function get() {\n if (!this.removedCount || this.insertedCount) return DIRECTION.NONE; // align right if delete at right\n \n return (this.oldSelection.end === this.cursorPos || this.oldSelection.start === this.cursorPos) && // if not range removed (event with backspace)\n this.oldSelection.end === this.oldSelection.start ? DIRECTION.RIGHT : DIRECTION.LEFT;\n }\n }]);\n \n return ActionDetails;\n }();\n \n /** Provides details of continuous extracted tail */\n var ContinuousTailDetails = /*#__PURE__*/function () {\n /** Tail value as string */\n \n /** Tail start position */\n \n /** Start position */\n function ContinuousTailDetails() {\n var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var stop = arguments.length > 2 ? arguments[2] : undefined;\n \n _classCallCheck(this, ContinuousTailDetails);\n \n this.value = value;\n this.from = from;\n this.stop = stop;\n }\n \n _createClass(ContinuousTailDetails, [{\n key: \"toString\",\n value: function toString() {\n return this.value;\n }\n }, {\n key: \"extend\",\n value: function extend(tail) {\n this.value += String(tail);\n }\n }, {\n key: \"appendTo\",\n value: function appendTo(masked) {\n return masked.append(this.toString(), {\n tail: true\n }).aggregate(masked._appendPlaceholder());\n }\n }, {\n key: \"state\",\n get: function get() {\n return {\n value: this.value,\n from: this.from,\n stop: this.stop\n };\n },\n set: function set(state) {\n Object.assign(this, state);\n }\n }, {\n key: \"unshift\",\n value: function unshift(beforePos) {\n if (!this.value.length || beforePos != null && this.from >= beforePos) return '';\n var shiftChar = this.value[0];\n this.value = this.value.slice(1);\n return shiftChar;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (!this.value.length) return '';\n var shiftChar = this.value[this.value.length - 1];\n this.value = this.value.slice(0, -1);\n return shiftChar;\n }\n }]);\n \n return ContinuousTailDetails;\n }();\n \n /**\n * Applies mask on element.\n * @constructor\n * @param {HTMLInputElement|HTMLTextAreaElement|MaskElement} el - Element to apply mask\n * @param {Object} opts - Custom mask options\n * @return {InputMask}\n */\n function IMask(el) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n // currently available only for input-like elements\n return new IMask.InputMask(el, opts);\n }\n \n /** Supported mask type */\n \n /** Provides common masking stuff */\n var Masked = /*#__PURE__*/function () {\n // $Shape; TODO after fix https://github.com/facebook/flow/issues/4773\n \n /** @type {Mask} */\n \n /** */\n // $FlowFixMe no ideas\n \n /** Transforms value before mask processing */\n \n /** Validates if value is acceptable */\n \n /** Does additional processing in the end of editing */\n \n /** Format typed value to string */\n \n /** Parse strgin to get typed value */\n \n /** Enable characters overwriting */\n \n /** */\n \n /** */\n function Masked(opts) {\n _classCallCheck(this, Masked);\n \n this._value = '';\n \n this._update(Object.assign({}, Masked.DEFAULTS, opts));\n \n this.isInitialized = true;\n }\n /** Sets and applies new options */\n \n \n _createClass(Masked, [{\n key: \"updateOptions\",\n value: function updateOptions(opts) {\n if (!Object.keys(opts).length) return; // $FlowFixMe\n \n this.withValueRefresh(this._update.bind(this, opts));\n }\n /**\n Sets new options\n @protected\n */\n \n }, {\n key: \"_update\",\n value: function _update(opts) {\n Object.assign(this, opts);\n }\n /** Mask state */\n \n }, {\n key: \"state\",\n get: function get() {\n return {\n _value: this.value\n };\n },\n set: function set(state) {\n this._value = state._value;\n }\n /** Resets value */\n \n }, {\n key: \"reset\",\n value: function reset() {\n this._value = '';\n }\n /** */\n \n }, {\n key: \"value\",\n get: function get() {\n return this._value;\n },\n set: function set(value) {\n this.resolve(value);\n }\n /** Resolve new value */\n \n }, {\n key: \"resolve\",\n value: function resolve(value) {\n this.reset();\n this.append(value, {\n input: true\n }, '');\n this.doCommit();\n return this.value;\n }\n /** */\n \n }, {\n key: \"unmaskedValue\",\n get: function get() {\n return this.value;\n },\n set: function set(value) {\n this.reset();\n this.append(value, {}, '');\n this.doCommit();\n }\n /** */\n \n }, {\n key: \"typedValue\",\n get: function get() {\n return this.doParse(this.value);\n },\n set: function set(value) {\n this.value = this.doFormat(value);\n }\n /** Value that includes raw user input */\n \n }, {\n key: \"rawInputValue\",\n get: function get() {\n return this.extractInput(0, this.value.length, {\n raw: true\n });\n },\n set: function set(value) {\n this.reset();\n this.append(value, {\n raw: true\n }, '');\n this.doCommit();\n }\n /** */\n \n }, {\n key: \"isComplete\",\n get: function get() {\n return true;\n }\n /** */\n \n }, {\n key: \"isFilled\",\n get: function get() {\n return this.isComplete;\n }\n /** Finds nearest input position in direction */\n \n }, {\n key: \"nearestInputPos\",\n value: function nearestInputPos(cursorPos, direction) {\n return cursorPos;\n }\n /** Extracts value in range considering flags */\n \n }, {\n key: \"extractInput\",\n value: function extractInput() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n return this.value.slice(fromPos, toPos);\n }\n /** Extracts tail in range */\n \n }, {\n key: \"extractTail\",\n value: function extractTail() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n return new ContinuousTailDetails(this.extractInput(fromPos, toPos), fromPos);\n }\n /** Appends tail */\n // $FlowFixMe no ideas\n \n }, {\n key: \"appendTail\",\n value: function appendTail(tail) {\n if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n return tail.appendTo(this);\n }\n /** Appends char */\n \n }, {\n key: \"_appendCharRaw\",\n value: function _appendCharRaw(ch) {\n if (!ch) return new ChangeDetails();\n this._value += ch;\n return new ChangeDetails({\n inserted: ch,\n rawInserted: ch\n });\n }\n /** Appends char */\n \n }, {\n key: \"_appendChar\",\n value: function _appendChar(ch) {\n var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var checkTail = arguments.length > 2 ? arguments[2] : undefined;\n var consistentState = this.state;\n var details;\n \n var _normalizePrepare = normalizePrepare(this.doPrepare(ch, flags));\n \n var _normalizePrepare2 = _slicedToArray(_normalizePrepare, 2);\n \n ch = _normalizePrepare2[0];\n details = _normalizePrepare2[1];\n details = details.aggregate(this._appendCharRaw(ch, flags));\n \n if (details.inserted) {\n var consistentTail;\n var appended = this.doValidate(flags) !== false;\n \n if (appended && checkTail != null) {\n // validation ok, check tail\n var beforeTailState = this.state;\n \n if (this.overwrite === true) {\n consistentTail = checkTail.state;\n checkTail.unshift(this.value.length);\n }\n \n var tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted === checkTail.toString(); // not ok, try shift\n \n if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n this.state = beforeTailState;\n consistentTail = checkTail.state;\n checkTail.shift();\n tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted === checkTail.toString();\n } // if ok, rollback state after tail\n \n \n if (appended && tailDetails.inserted) this.state = beforeTailState;\n } // revert all if something went wrong\n \n \n if (!appended) {\n details = new ChangeDetails();\n this.state = consistentState;\n if (checkTail && consistentTail) checkTail.state = consistentTail;\n }\n }\n \n return details;\n }\n /** Appends optional placeholder at end */\n \n }, {\n key: \"_appendPlaceholder\",\n value: function _appendPlaceholder() {\n return new ChangeDetails();\n }\n /** Appends optional eager placeholder at end */\n \n }, {\n key: \"_appendEager\",\n value: function _appendEager() {\n return new ChangeDetails();\n }\n /** Appends symbols considering flags */\n // $FlowFixMe no ideas\n \n }, {\n key: \"append\",\n value: function append(str, flags, tail) {\n if (!isString(str)) throw new Error('value should be string');\n var details = new ChangeDetails();\n var checkTail = isString(tail) ? new ContinuousTailDetails(String(tail)) : tail;\n if (flags !== null && flags !== void 0 && flags.tail) flags._beforeTailState = this.state;\n \n for (var ci = 0; ci < str.length; ++ci) {\n details.aggregate(this._appendChar(str[ci], flags, checkTail));\n } // append tail but aggregate only tailShift\n \n \n if (checkTail != null) {\n details.tailShift += this.appendTail(checkTail).tailShift; // TODO it's a good idea to clear state after appending ends\n // but it causes bugs when one append calls another (when dynamic dispatch set rawInputValue)\n // this._resetBeforeTailState();\n }\n \n if (this.eager && flags !== null && flags !== void 0 && flags.input && str) {\n details.aggregate(this._appendEager());\n }\n \n return details;\n }\n /** */\n \n }, {\n key: \"remove\",\n value: function remove() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n this._value = this.value.slice(0, fromPos) + this.value.slice(toPos);\n return new ChangeDetails();\n }\n /** Calls function and reapplies current value */\n \n }, {\n key: \"withValueRefresh\",\n value: function withValueRefresh(fn) {\n if (this._refreshing || !this.isInitialized) return fn();\n this._refreshing = true;\n var rawInput = this.rawInputValue;\n var value = this.value;\n var ret = fn();\n this.rawInputValue = rawInput; // append lost trailing chars at end\n \n if (this.value && this.value !== value && value.indexOf(this.value) === 0) {\n this.append(value.slice(this.value.length), {}, '');\n }\n \n delete this._refreshing;\n return ret;\n }\n /** */\n \n }, {\n key: \"runIsolated\",\n value: function runIsolated(fn) {\n if (this._isolated || !this.isInitialized) return fn(this);\n this._isolated = true;\n var state = this.state;\n var ret = fn(this);\n this.state = state;\n delete this._isolated;\n return ret;\n }\n /**\n Prepares string before mask processing\n @protected\n */\n \n }, {\n key: \"doPrepare\",\n value: function doPrepare(str) {\n var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return this.prepare ? this.prepare(str, this, flags) : str;\n }\n /**\n Validates if value is acceptable\n @protected\n */\n \n }, {\n key: \"doValidate\",\n value: function doValidate(flags) {\n return (!this.validate || this.validate(this.value, this, flags)) && (!this.parent || this.parent.doValidate(flags));\n }\n /**\n Does additional processing in the end of editing\n @protected\n */\n \n }, {\n key: \"doCommit\",\n value: function doCommit() {\n if (this.commit) this.commit(this.value, this);\n }\n /** */\n \n }, {\n key: \"doFormat\",\n value: function doFormat(value) {\n return this.format ? this.format(value, this) : value;\n }\n /** */\n \n }, {\n key: \"doParse\",\n value: function doParse(str) {\n return this.parse ? this.parse(str, this) : str;\n }\n /** */\n \n }, {\n key: \"splice\",\n value: function splice(start, deleteCount, inserted, removeDirection) {\n var flags = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n input: true\n };\n var tailPos = start + deleteCount;\n var tail = this.extractTail(tailPos);\n var oldRawValue;\n \n if (this.eager) {\n removeDirection = forceDirection(removeDirection);\n oldRawValue = this.extractInput(0, tailPos, {\n raw: true\n });\n }\n \n var startChangePos = this.nearestInputPos(start, deleteCount > 1 && start !== 0 && !this.eager ? DIRECTION.NONE : removeDirection);\n var details = new ChangeDetails({\n tailShift: startChangePos - start // adjust tailShift if start was aligned\n \n }).aggregate(this.remove(startChangePos));\n \n if (this.eager && removeDirection !== DIRECTION.NONE && oldRawValue === this.rawInputValue) {\n if (removeDirection === DIRECTION.FORCE_LEFT) {\n var valLength;\n \n while (oldRawValue === this.rawInputValue && (valLength = this.value.length)) {\n details.aggregate(new ChangeDetails({\n tailShift: -1\n })).aggregate(this.remove(valLength - 1));\n }\n } else if (removeDirection === DIRECTION.FORCE_RIGHT) {\n tail.unshift();\n }\n }\n \n return details.aggregate(this.append(inserted, flags, tail));\n }\n }, {\n key: \"maskEquals\",\n value: function maskEquals(mask) {\n return this.mask === mask;\n }\n }, {\n key: \"typedValueEquals\",\n value: function typedValueEquals(value) {\n var tval = this.typedValue;\n return value === tval || Masked.EMPTY_VALUES.includes(value) && Masked.EMPTY_VALUES.includes(tval) || this.doFormat(value) === this.doFormat(this.typedValue);\n }\n }]);\n \n return Masked;\n }();\n Masked.DEFAULTS = {\n format: function format(v) {\n return v;\n },\n parse: function parse(v) {\n return v;\n }\n };\n Masked.EMPTY_VALUES = [undefined, null, ''];\n IMask.Masked = Masked;\n \n /** Get Masked class by mask type */\n \n function maskedClass(mask) {\n if (mask == null) {\n throw new Error('mask property should be defined');\n } // $FlowFixMe\n \n \n if (mask instanceof RegExp) return IMask.MaskedRegExp; // $FlowFixMe\n \n if (isString(mask)) return IMask.MaskedPattern; // $FlowFixMe\n \n if (mask instanceof Date || mask === Date) return IMask.MaskedDate; // $FlowFixMe\n \n if (mask instanceof Number || typeof mask === 'number' || mask === Number) return IMask.MaskedNumber; // $FlowFixMe\n \n if (Array.isArray(mask) || mask === Array) return IMask.MaskedDynamic; // $FlowFixMe\n \n if (IMask.Masked && mask.prototype instanceof IMask.Masked) return mask; // $FlowFixMe\n \n if (mask instanceof IMask.Masked) return mask.constructor; // $FlowFixMe\n \n if (mask instanceof Function) return IMask.MaskedFunction;\n console.warn('Mask not found for mask', mask); // eslint-disable-line no-console\n // $FlowFixMe\n \n return IMask.Masked;\n }\n /** Creates new {@link Masked} depending on mask type */\n \n function createMask(opts) {\n // $FlowFixMe\n if (IMask.Masked && opts instanceof IMask.Masked) return opts;\n opts = Object.assign({}, opts);\n var mask = opts.mask; // $FlowFixMe\n \n if (IMask.Masked && mask instanceof IMask.Masked) return mask;\n var MaskedClass = maskedClass(mask);\n if (!MaskedClass) throw new Error('Masked class is not found for provided mask, appropriate module needs to be import manually before creating mask.');\n return new MaskedClass(opts);\n }\n IMask.createMask = createMask;\n \n var _excluded$4 = [\"mask\"];\n var DEFAULT_INPUT_DEFINITIONS = {\n '0': /\\d/,\n 'a': /[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/,\n // http://stackoverflow.com/a/22075070\n '*': /./\n };\n /** */\n \n var PatternInputDefinition = /*#__PURE__*/function () {\n /** */\n \n /** */\n \n /** */\n \n /** */\n \n /** */\n \n /** */\n \n /** */\n function PatternInputDefinition(opts) {\n _classCallCheck(this, PatternInputDefinition);\n \n var mask = opts.mask,\n blockOpts = _objectWithoutProperties(opts, _excluded$4);\n \n this.masked = createMask({\n mask: mask\n });\n Object.assign(this, blockOpts);\n }\n \n _createClass(PatternInputDefinition, [{\n key: \"reset\",\n value: function reset() {\n this.isFilled = false;\n this.masked.reset();\n }\n }, {\n key: \"remove\",\n value: function remove() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n \n if (fromPos === 0 && toPos >= 1) {\n this.isFilled = false;\n return this.masked.remove(fromPos, toPos);\n }\n \n return new ChangeDetails();\n }\n }, {\n key: \"value\",\n get: function get() {\n return this.masked.value || (this.isFilled && !this.isOptional ? this.placeholderChar : '');\n }\n }, {\n key: \"unmaskedValue\",\n get: function get() {\n return this.masked.unmaskedValue;\n }\n }, {\n key: \"isComplete\",\n get: function get() {\n return Boolean(this.masked.value) || this.isOptional;\n }\n }, {\n key: \"_appendChar\",\n value: function _appendChar(ch) {\n var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (this.isFilled) return new ChangeDetails();\n var state = this.masked.state; // simulate input\n \n var details = this.masked._appendChar(ch, flags);\n \n if (details.inserted && this.doValidate(flags) === false) {\n details.inserted = details.rawInserted = '';\n this.masked.state = state;\n }\n \n if (!details.inserted && !this.isOptional && !this.lazy && !flags.input) {\n details.inserted = this.placeholderChar;\n }\n \n details.skip = !details.inserted && !this.isOptional;\n this.isFilled = Boolean(details.inserted);\n return details;\n }\n }, {\n key: \"append\",\n value: function append() {\n var _this$masked;\n \n // TODO probably should be done via _appendChar\n return (_this$masked = this.masked).append.apply(_this$masked, arguments);\n }\n }, {\n key: \"_appendPlaceholder\",\n value: function _appendPlaceholder() {\n var details = new ChangeDetails();\n if (this.isFilled || this.isOptional) return details;\n this.isFilled = true;\n details.inserted = this.placeholderChar;\n return details;\n }\n }, {\n key: \"_appendEager\",\n value: function _appendEager() {\n return new ChangeDetails();\n }\n }, {\n key: \"extractTail\",\n value: function extractTail() {\n var _this$masked2;\n \n return (_this$masked2 = this.masked).extractTail.apply(_this$masked2, arguments);\n }\n }, {\n key: \"appendTail\",\n value: function appendTail() {\n var _this$masked3;\n \n return (_this$masked3 = this.masked).appendTail.apply(_this$masked3, arguments);\n }\n }, {\n key: \"extractInput\",\n value: function extractInput() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n var flags = arguments.length > 2 ? arguments[2] : undefined;\n return this.masked.extractInput(fromPos, toPos, flags);\n }\n }, {\n key: \"nearestInputPos\",\n value: function nearestInputPos(cursorPos) {\n var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DIRECTION.NONE;\n var minPos = 0;\n var maxPos = this.value.length;\n var boundPos = Math.min(Math.max(cursorPos, minPos), maxPos);\n \n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return this.isComplete ? boundPos : minPos;\n \n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n return this.isComplete ? boundPos : maxPos;\n \n case DIRECTION.NONE:\n default:\n return boundPos;\n }\n }\n }, {\n key: \"doValidate\",\n value: function doValidate() {\n var _this$masked4, _this$parent;\n \n return (_this$masked4 = this.masked).doValidate.apply(_this$masked4, arguments) && (!this.parent || (_this$parent = this.parent).doValidate.apply(_this$parent, arguments));\n }\n }, {\n key: \"doCommit\",\n value: function doCommit() {\n this.masked.doCommit();\n }\n }, {\n key: \"state\",\n get: function get() {\n return {\n masked: this.masked.state,\n isFilled: this.isFilled\n };\n },\n set: function set(state) {\n this.masked.state = state.masked;\n this.isFilled = state.isFilled;\n }\n }]);\n \n return PatternInputDefinition;\n }();\n \n var PatternFixedDefinition = /*#__PURE__*/function () {\n /** */\n \n /** */\n \n /** */\n \n /** */\n \n /** */\n \n /** */\n function PatternFixedDefinition(opts) {\n _classCallCheck(this, PatternFixedDefinition);\n \n Object.assign(this, opts);\n this._value = '';\n this.isFixed = true;\n }\n \n _createClass(PatternFixedDefinition, [{\n key: \"value\",\n get: function get() {\n return this._value;\n }\n }, {\n key: \"unmaskedValue\",\n get: function get() {\n return this.isUnmasking ? this.value : '';\n }\n }, {\n key: \"reset\",\n value: function reset() {\n this._isRawInput = false;\n this._value = '';\n }\n }, {\n key: \"remove\",\n value: function remove() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._value.length;\n this._value = this._value.slice(0, fromPos) + this._value.slice(toPos);\n if (!this._value) this._isRawInput = false;\n return new ChangeDetails();\n }\n }, {\n key: \"nearestInputPos\",\n value: function nearestInputPos(cursorPos) {\n var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DIRECTION.NONE;\n var minPos = 0;\n var maxPos = this._value.length;\n \n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return minPos;\n \n case DIRECTION.NONE:\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n default:\n return maxPos;\n }\n }\n }, {\n key: \"extractInput\",\n value: function extractInput() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._value.length;\n var flags = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n return flags.raw && this._isRawInput && this._value.slice(fromPos, toPos) || '';\n }\n }, {\n key: \"isComplete\",\n get: function get() {\n return true;\n }\n }, {\n key: \"isFilled\",\n get: function get() {\n return Boolean(this._value);\n }\n }, {\n key: \"_appendChar\",\n value: function _appendChar(ch) {\n var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var details = new ChangeDetails();\n if (this._value) return details;\n var appended = this.char === ch;\n var isResolved = appended && (this.isUnmasking || flags.input || flags.raw) && (!flags.raw || !this.eager) && !flags.tail;\n if (isResolved) details.rawInserted = this.char;\n this._value = details.inserted = this.char;\n this._isRawInput = isResolved && (flags.raw || flags.input);\n return details;\n }\n }, {\n key: \"_appendEager\",\n value: function _appendEager() {\n return this._appendChar(this.char, {\n tail: true\n });\n }\n }, {\n key: \"_appendPlaceholder\",\n value: function _appendPlaceholder() {\n var details = new ChangeDetails();\n if (this._value) return details;\n this._value = details.inserted = this.char;\n return details;\n }\n }, {\n key: \"extractTail\",\n value: function extractTail() {\n arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n return new ContinuousTailDetails('');\n } // $FlowFixMe no ideas\n \n }, {\n key: \"appendTail\",\n value: function appendTail(tail) {\n if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n return tail.appendTo(this);\n }\n }, {\n key: \"append\",\n value: function append(str, flags, tail) {\n var details = this._appendChar(str[0], flags);\n \n if (tail != null) {\n details.tailShift += this.appendTail(tail).tailShift;\n }\n \n return details;\n }\n }, {\n key: \"doCommit\",\n value: function doCommit() {}\n }, {\n key: \"state\",\n get: function get() {\n return {\n _value: this._value,\n _isRawInput: this._isRawInput\n };\n },\n set: function set(state) {\n Object.assign(this, state);\n }\n }]);\n \n return PatternFixedDefinition;\n }();\n \n var _excluded$3 = [\"chunks\"];\n \n var ChunksTailDetails = /*#__PURE__*/function () {\n /** */\n function ChunksTailDetails() {\n var chunks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n \n _classCallCheck(this, ChunksTailDetails);\n \n this.chunks = chunks;\n this.from = from;\n }\n \n _createClass(ChunksTailDetails, [{\n key: \"toString\",\n value: function toString() {\n return this.chunks.map(String).join('');\n } // $FlowFixMe no ideas\n \n }, {\n key: \"extend\",\n value: function extend(tailChunk) {\n if (!String(tailChunk)) return;\n if (isString(tailChunk)) tailChunk = new ContinuousTailDetails(String(tailChunk));\n var lastChunk = this.chunks[this.chunks.length - 1];\n var extendLast = lastChunk && ( // if stops are same or tail has no stop\n lastChunk.stop === tailChunk.stop || tailChunk.stop == null) && // if tail chunk goes just after last chunk\n tailChunk.from === lastChunk.from + lastChunk.toString().length;\n \n if (tailChunk instanceof ContinuousTailDetails) {\n // check the ability to extend previous chunk\n if (extendLast) {\n // extend previous chunk\n lastChunk.extend(tailChunk.toString());\n } else {\n // append new chunk\n this.chunks.push(tailChunk);\n }\n } else if (tailChunk instanceof ChunksTailDetails) {\n if (tailChunk.stop == null) {\n // unwrap floating chunks to parent, keeping `from` pos\n var firstTailChunk;\n \n while (tailChunk.chunks.length && tailChunk.chunks[0].stop == null) {\n firstTailChunk = tailChunk.chunks.shift();\n firstTailChunk.from += tailChunk.from;\n this.extend(firstTailChunk);\n }\n } // if tail chunk still has value\n \n \n if (tailChunk.toString()) {\n // if chunks contains stops, then popup stop to container\n tailChunk.stop = tailChunk.blockIndex;\n this.chunks.push(tailChunk);\n }\n }\n }\n }, {\n key: \"appendTo\",\n value: function appendTo(masked) {\n // $FlowFixMe\n if (!(masked instanceof IMask.MaskedPattern)) {\n var tail = new ContinuousTailDetails(this.toString());\n return tail.appendTo(masked);\n }\n \n var details = new ChangeDetails();\n \n for (var ci = 0; ci < this.chunks.length && !details.skip; ++ci) {\n var chunk = this.chunks[ci];\n \n var lastBlockIter = masked._mapPosToBlock(masked.value.length);\n \n var stop = chunk.stop;\n var chunkBlock = void 0;\n \n if (stop != null && ( // if block not found or stop is behind lastBlock\n !lastBlockIter || lastBlockIter.index <= stop)) {\n if (chunk instanceof ChunksTailDetails || // for continuous block also check if stop is exist\n masked._stops.indexOf(stop) >= 0) {\n details.aggregate(masked._appendPlaceholder(stop));\n }\n \n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n \n if (chunkBlock) {\n var tailDetails = chunkBlock.appendTail(chunk);\n tailDetails.skip = false; // always ignore skip, it will be set on last\n \n details.aggregate(tailDetails);\n masked._value += tailDetails.inserted; // get not inserted chars\n \n var remainChars = chunk.toString().slice(tailDetails.rawInserted.length);\n if (remainChars) details.aggregate(masked.append(remainChars, {\n tail: true\n }));\n } else {\n details.aggregate(masked.append(chunk.toString(), {\n tail: true\n }));\n }\n }\n return details;\n }\n }, {\n key: \"state\",\n get: function get() {\n return {\n chunks: this.chunks.map(function (c) {\n return c.state;\n }),\n from: this.from,\n stop: this.stop,\n blockIndex: this.blockIndex\n };\n },\n set: function set(state) {\n var chunks = state.chunks,\n props = _objectWithoutProperties(state, _excluded$3);\n \n Object.assign(this, props);\n this.chunks = chunks.map(function (cstate) {\n var chunk = \"chunks\" in cstate ? new ChunksTailDetails() : new ContinuousTailDetails(); // $FlowFixMe already checked above\n \n chunk.state = cstate;\n return chunk;\n });\n }\n }, {\n key: \"unshift\",\n value: function unshift(beforePos) {\n if (!this.chunks.length || beforePos != null && this.from >= beforePos) return '';\n var chunkShiftPos = beforePos != null ? beforePos - this.from : beforePos;\n var ci = 0;\n \n while (ci < this.chunks.length) {\n var chunk = this.chunks[ci];\n var shiftChar = chunk.unshift(chunkShiftPos);\n \n if (chunk.toString()) {\n // chunk still contains value\n // but not shifted - means no more available chars to shift\n if (!shiftChar) break;\n ++ci;\n } else {\n // clean if chunk has no value\n this.chunks.splice(ci, 1);\n }\n \n if (shiftChar) return shiftChar;\n }\n \n return '';\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (!this.chunks.length) return '';\n var ci = this.chunks.length - 1;\n \n while (0 <= ci) {\n var chunk = this.chunks[ci];\n var shiftChar = chunk.shift();\n \n if (chunk.toString()) {\n // chunk still contains value\n // but not shifted - means no more available chars to shift\n if (!shiftChar) break;\n --ci;\n } else {\n // clean if chunk has no value\n this.chunks.splice(ci, 1);\n }\n \n if (shiftChar) return shiftChar;\n }\n \n return '';\n }\n }]);\n \n return ChunksTailDetails;\n }();\n \n var PatternCursor = /*#__PURE__*/function () {\n function PatternCursor(masked, pos) {\n _classCallCheck(this, PatternCursor);\n \n this.masked = masked;\n this._log = [];\n \n var _ref = masked._mapPosToBlock(pos) || (pos < 0 ? // first\n {\n index: 0,\n offset: 0\n } : // last\n {\n index: this.masked._blocks.length,\n offset: 0\n }),\n offset = _ref.offset,\n index = _ref.index;\n \n this.offset = offset;\n this.index = index;\n this.ok = false;\n }\n \n _createClass(PatternCursor, [{\n key: \"block\",\n get: function get() {\n return this.masked._blocks[this.index];\n }\n }, {\n key: \"pos\",\n get: function get() {\n return this.masked._blockStartPos(this.index) + this.offset;\n }\n }, {\n key: \"state\",\n get: function get() {\n return {\n index: this.index,\n offset: this.offset,\n ok: this.ok\n };\n },\n set: function set(s) {\n Object.assign(this, s);\n }\n }, {\n key: \"pushState\",\n value: function pushState() {\n this._log.push(this.state);\n }\n }, {\n key: \"popState\",\n value: function popState() {\n var s = this._log.pop();\n \n this.state = s;\n return s;\n }\n }, {\n key: \"bindBlock\",\n value: function bindBlock() {\n if (this.block) return;\n \n if (this.index < 0) {\n this.index = 0;\n this.offset = 0;\n }\n \n if (this.index >= this.masked._blocks.length) {\n this.index = this.masked._blocks.length - 1;\n this.offset = this.block.value.length;\n }\n }\n }, {\n key: \"_pushLeft\",\n value: function _pushLeft(fn) {\n this.pushState();\n \n for (this.bindBlock(); 0 <= this.index; --this.index, this.offset = ((_this$block = this.block) === null || _this$block === void 0 ? void 0 : _this$block.value.length) || 0) {\n var _this$block;\n \n if (fn()) return this.ok = true;\n }\n \n return this.ok = false;\n }\n }, {\n key: \"_pushRight\",\n value: function _pushRight(fn) {\n this.pushState();\n \n for (this.bindBlock(); this.index < this.masked._blocks.length; ++this.index, this.offset = 0) {\n if (fn()) return this.ok = true;\n }\n \n return this.ok = false;\n }\n }, {\n key: \"pushLeftBeforeFilled\",\n value: function pushLeftBeforeFilled() {\n var _this = this;\n \n return this._pushLeft(function () {\n if (_this.block.isFixed || !_this.block.value) return;\n _this.offset = _this.block.nearestInputPos(_this.offset, DIRECTION.FORCE_LEFT);\n if (_this.offset !== 0) return true;\n });\n }\n }, {\n key: \"pushLeftBeforeInput\",\n value: function pushLeftBeforeInput() {\n var _this2 = this;\n \n // cases:\n // filled input: 00|\n // optional empty input: 00[]|\n // nested block: XX<[]>|\n return this._pushLeft(function () {\n if (_this2.block.isFixed) return;\n _this2.offset = _this2.block.nearestInputPos(_this2.offset, DIRECTION.LEFT);\n return true;\n });\n }\n }, {\n key: \"pushLeftBeforeRequired\",\n value: function pushLeftBeforeRequired() {\n var _this3 = this;\n \n return this._pushLeft(function () {\n if (_this3.block.isFixed || _this3.block.isOptional && !_this3.block.value) return;\n _this3.offset = _this3.block.nearestInputPos(_this3.offset, DIRECTION.LEFT);\n return true;\n });\n }\n }, {\n key: \"pushRightBeforeFilled\",\n value: function pushRightBeforeFilled() {\n var _this4 = this;\n \n return this._pushRight(function () {\n if (_this4.block.isFixed || !_this4.block.value) return;\n _this4.offset = _this4.block.nearestInputPos(_this4.offset, DIRECTION.FORCE_RIGHT);\n if (_this4.offset !== _this4.block.value.length) return true;\n });\n }\n }, {\n key: \"pushRightBeforeInput\",\n value: function pushRightBeforeInput() {\n var _this5 = this;\n \n return this._pushRight(function () {\n if (_this5.block.isFixed) return; // const o = this.offset;\n \n _this5.offset = _this5.block.nearestInputPos(_this5.offset, DIRECTION.NONE); // HACK cases like (STILL DOES NOT WORK FOR NESTED)\n // aa|X\n // aaX_ - this will not work\n // if (o && o === this.offset && this.block instanceof PatternInputDefinition) continue;\n \n return true;\n });\n }\n }, {\n key: \"pushRightBeforeRequired\",\n value: function pushRightBeforeRequired() {\n var _this6 = this;\n \n return this._pushRight(function () {\n if (_this6.block.isFixed || _this6.block.isOptional && !_this6.block.value) return; // TODO check |[*]XX_\n \n _this6.offset = _this6.block.nearestInputPos(_this6.offset, DIRECTION.NONE);\n return true;\n });\n }\n }]);\n \n return PatternCursor;\n }();\n \n /** Masking by RegExp */\n \n var MaskedRegExp = /*#__PURE__*/function (_Masked) {\n _inherits(MaskedRegExp, _Masked);\n \n var _super = _createSuper(MaskedRegExp);\n \n function MaskedRegExp() {\n _classCallCheck(this, MaskedRegExp);\n \n return _super.apply(this, arguments);\n }\n \n _createClass(MaskedRegExp, [{\n key: \"_update\",\n value:\n /**\n @override\n @param {Object} opts\n */\n function _update(opts) {\n if (opts.mask) opts.validate = function (value) {\n return value.search(opts.mask) >= 0;\n };\n \n _get(_getPrototypeOf(MaskedRegExp.prototype), \"_update\", this).call(this, opts);\n }\n }]);\n \n return MaskedRegExp;\n }(Masked);\n IMask.MaskedRegExp = MaskedRegExp;\n \n var _excluded$2 = [\"_blocks\"];\n \n /**\n Pattern mask\n @param {Object} opts\n @param {Object} opts.blocks\n @param {Object} opts.definitions\n @param {string} opts.placeholderChar\n @param {boolean} opts.lazy\n */\n var MaskedPattern = /*#__PURE__*/function (_Masked) {\n _inherits(MaskedPattern, _Masked);\n \n var _super = _createSuper(MaskedPattern);\n \n /** */\n \n /** */\n \n /** Single char for empty input */\n \n /** Show placeholder only when needed */\n function MaskedPattern() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n \n _classCallCheck(this, MaskedPattern);\n \n // TODO type $Shape={} does not work\n opts.definitions = Object.assign({}, DEFAULT_INPUT_DEFINITIONS, opts.definitions);\n return _super.call(this, Object.assign({}, MaskedPattern.DEFAULTS, opts));\n }\n /**\n @override\n @param {Object} opts\n */\n \n \n _createClass(MaskedPattern, [{\n key: \"_update\",\n value: function _update() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n opts.definitions = Object.assign({}, this.definitions, opts.definitions);\n \n _get(_getPrototypeOf(MaskedPattern.prototype), \"_update\", this).call(this, opts);\n \n this._rebuildMask();\n }\n /** */\n \n }, {\n key: \"_rebuildMask\",\n value: function _rebuildMask() {\n var _this = this;\n \n var defs = this.definitions;\n this._blocks = [];\n this._stops = [];\n this._maskedBlocks = {};\n var pattern = this.mask;\n if (!pattern || !defs) return;\n var unmaskingBlock = false;\n var optionalBlock = false;\n \n for (var i = 0; i < pattern.length; ++i) {\n if (this.blocks) {\n var _ret = function () {\n var p = pattern.slice(i);\n var bNames = Object.keys(_this.blocks).filter(function (bName) {\n return p.indexOf(bName) === 0;\n }); // order by key length\n \n bNames.sort(function (a, b) {\n return b.length - a.length;\n }); // use block name with max length\n \n var bName = bNames[0];\n \n if (bName) {\n // $FlowFixMe no ideas\n var maskedBlock = createMask(Object.assign({\n parent: _this,\n lazy: _this.lazy,\n eager: _this.eager,\n placeholderChar: _this.placeholderChar,\n overwrite: _this.overwrite\n }, _this.blocks[bName]));\n \n if (maskedBlock) {\n _this._blocks.push(maskedBlock); // store block index\n \n \n if (!_this._maskedBlocks[bName]) _this._maskedBlocks[bName] = [];\n \n _this._maskedBlocks[bName].push(_this._blocks.length - 1);\n }\n \n i += bName.length - 1;\n return \"continue\";\n }\n }();\n \n if (_ret === \"continue\") continue;\n }\n \n var char = pattern[i];\n var isInput = (char in defs);\n \n if (char === MaskedPattern.STOP_CHAR) {\n this._stops.push(this._blocks.length);\n \n continue;\n }\n \n if (char === '{' || char === '}') {\n unmaskingBlock = !unmaskingBlock;\n continue;\n }\n \n if (char === '[' || char === ']') {\n optionalBlock = !optionalBlock;\n continue;\n }\n \n if (char === MaskedPattern.ESCAPE_CHAR) {\n ++i;\n char = pattern[i];\n if (!char) break;\n isInput = false;\n }\n \n var def = isInput ? new PatternInputDefinition({\n parent: this,\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n mask: defs[char],\n isOptional: optionalBlock\n }) : new PatternFixedDefinition({\n char: char,\n eager: this.eager,\n isUnmasking: unmaskingBlock\n });\n \n this._blocks.push(def);\n }\n }\n /**\n @override\n */\n \n }, {\n key: \"state\",\n get: function get() {\n return Object.assign({}, _get(_getPrototypeOf(MaskedPattern.prototype), \"state\", this), {\n _blocks: this._blocks.map(function (b) {\n return b.state;\n })\n });\n },\n set: function set(state) {\n var _blocks = state._blocks,\n maskedState = _objectWithoutProperties(state, _excluded$2);\n \n this._blocks.forEach(function (b, bi) {\n return b.state = _blocks[bi];\n });\n \n _set(_getPrototypeOf(MaskedPattern.prototype), \"state\", maskedState, this, true);\n }\n /**\n @override\n */\n \n }, {\n key: \"reset\",\n value: function reset() {\n _get(_getPrototypeOf(MaskedPattern.prototype), \"reset\", this).call(this);\n \n this._blocks.forEach(function (b) {\n return b.reset();\n });\n }\n /**\n @override\n */\n \n }, {\n key: \"isComplete\",\n get: function get() {\n return this._blocks.every(function (b) {\n return b.isComplete;\n });\n }\n /**\n @override\n */\n \n }, {\n key: \"isFilled\",\n get: function get() {\n return this._blocks.every(function (b) {\n return b.isFilled;\n });\n }\n }, {\n key: \"isFixed\",\n get: function get() {\n return this._blocks.every(function (b) {\n return b.isFixed;\n });\n }\n }, {\n key: \"isOptional\",\n get: function get() {\n return this._blocks.every(function (b) {\n return b.isOptional;\n });\n }\n /**\n @override\n */\n \n }, {\n key: \"doCommit\",\n value: function doCommit() {\n this._blocks.forEach(function (b) {\n return b.doCommit();\n });\n \n _get(_getPrototypeOf(MaskedPattern.prototype), \"doCommit\", this).call(this);\n }\n /**\n @override\n */\n \n }, {\n key: \"unmaskedValue\",\n get: function get() {\n return this._blocks.reduce(function (str, b) {\n return str += b.unmaskedValue;\n }, '');\n },\n set: function set(unmaskedValue) {\n _set(_getPrototypeOf(MaskedPattern.prototype), \"unmaskedValue\", unmaskedValue, this, true);\n }\n /**\n @override\n */\n \n }, {\n key: \"value\",\n get: function get() {\n // TODO return _value when not in change?\n return this._blocks.reduce(function (str, b) {\n return str += b.value;\n }, '');\n },\n set: function set(value) {\n _set(_getPrototypeOf(MaskedPattern.prototype), \"value\", value, this, true);\n }\n /**\n @override\n */\n \n }, {\n key: \"appendTail\",\n value: function appendTail(tail) {\n return _get(_getPrototypeOf(MaskedPattern.prototype), \"appendTail\", this).call(this, tail).aggregate(this._appendPlaceholder());\n }\n /**\n @override\n */\n \n }, {\n key: \"_appendEager\",\n value: function _appendEager() {\n var _this$_mapPosToBlock;\n \n var details = new ChangeDetails();\n var startBlockIndex = (_this$_mapPosToBlock = this._mapPosToBlock(this.value.length)) === null || _this$_mapPosToBlock === void 0 ? void 0 : _this$_mapPosToBlock.index;\n if (startBlockIndex == null) return details; // TODO test if it works for nested pattern masks\n \n if (this._blocks[startBlockIndex].isFilled) ++startBlockIndex;\n \n for (var bi = startBlockIndex; bi < this._blocks.length; ++bi) {\n var d = this._blocks[bi]._appendEager();\n \n if (!d.inserted) break;\n details.aggregate(d);\n }\n \n return details;\n }\n /**\n @override\n */\n \n }, {\n key: \"_appendCharRaw\",\n value: function _appendCharRaw(ch) {\n var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n \n var blockIter = this._mapPosToBlock(this.value.length);\n \n var details = new ChangeDetails();\n if (!blockIter) return details;\n \n for (var bi = blockIter.index;; ++bi) {\n var _flags$_beforeTailSta, _flags$_beforeTailSta2;\n \n var _block = this._blocks[bi];\n if (!_block) break;\n \n var blockDetails = _block._appendChar(ch, Object.assign({}, flags, {\n _beforeTailState: (_flags$_beforeTailSta = flags._beforeTailState) === null || _flags$_beforeTailSta === void 0 ? void 0 : (_flags$_beforeTailSta2 = _flags$_beforeTailSta._blocks) === null || _flags$_beforeTailSta2 === void 0 ? void 0 : _flags$_beforeTailSta2[bi]\n }));\n \n var skip = blockDetails.skip;\n details.aggregate(blockDetails);\n if (skip || blockDetails.rawInserted) break; // go next char\n }\n \n return details;\n }\n /**\n @override\n */\n \n }, {\n key: \"extractTail\",\n value: function extractTail() {\n var _this2 = this;\n \n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n var chunkTail = new ChunksTailDetails();\n if (fromPos === toPos) return chunkTail;\n \n this._forEachBlocksInRange(fromPos, toPos, function (b, bi, bFromPos, bToPos) {\n var blockChunk = b.extractTail(bFromPos, bToPos);\n blockChunk.stop = _this2._findStopBefore(bi);\n blockChunk.from = _this2._blockStartPos(bi);\n if (blockChunk instanceof ChunksTailDetails) blockChunk.blockIndex = bi;\n chunkTail.extend(blockChunk);\n });\n \n return chunkTail;\n }\n /**\n @override\n */\n \n }, {\n key: \"extractInput\",\n value: function extractInput() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n var flags = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n if (fromPos === toPos) return '';\n var input = '';\n \n this._forEachBlocksInRange(fromPos, toPos, function (b, _, fromPos, toPos) {\n input += b.extractInput(fromPos, toPos, flags);\n });\n \n return input;\n }\n }, {\n key: \"_findStopBefore\",\n value: function _findStopBefore(blockIndex) {\n var stopBefore;\n \n for (var si = 0; si < this._stops.length; ++si) {\n var stop = this._stops[si];\n if (stop <= blockIndex) stopBefore = stop;else break;\n }\n \n return stopBefore;\n }\n /** Appends placeholder depending on laziness */\n \n }, {\n key: \"_appendPlaceholder\",\n value: function _appendPlaceholder(toBlockIndex) {\n var _this3 = this;\n \n var details = new ChangeDetails();\n if (this.lazy && toBlockIndex == null) return details;\n \n var startBlockIter = this._mapPosToBlock(this.value.length);\n \n if (!startBlockIter) return details;\n var startBlockIndex = startBlockIter.index;\n var endBlockIndex = toBlockIndex != null ? toBlockIndex : this._blocks.length;\n \n this._blocks.slice(startBlockIndex, endBlockIndex).forEach(function (b) {\n if (!b.lazy || toBlockIndex != null) {\n // $FlowFixMe `_blocks` may not be present\n var args = b._blocks != null ? [b._blocks.length] : [];\n \n var bDetails = b._appendPlaceholder.apply(b, args);\n \n _this3._value += bDetails.inserted;\n details.aggregate(bDetails);\n }\n });\n \n return details;\n }\n /** Finds block in pos */\n \n }, {\n key: \"_mapPosToBlock\",\n value: function _mapPosToBlock(pos) {\n var accVal = '';\n \n for (var bi = 0; bi < this._blocks.length; ++bi) {\n var _block2 = this._blocks[bi];\n var blockStartPos = accVal.length;\n accVal += _block2.value;\n \n if (pos <= accVal.length) {\n return {\n index: bi,\n offset: pos - blockStartPos\n };\n }\n }\n }\n /** */\n \n }, {\n key: \"_blockStartPos\",\n value: function _blockStartPos(blockIndex) {\n return this._blocks.slice(0, blockIndex).reduce(function (pos, b) {\n return pos += b.value.length;\n }, 0);\n }\n /** */\n \n }, {\n key: \"_forEachBlocksInRange\",\n value: function _forEachBlocksInRange(fromPos) {\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n var fn = arguments.length > 2 ? arguments[2] : undefined;\n \n var fromBlockIter = this._mapPosToBlock(fromPos);\n \n if (fromBlockIter) {\n var toBlockIter = this._mapPosToBlock(toPos); // process first block\n \n \n var isSameBlock = toBlockIter && fromBlockIter.index === toBlockIter.index;\n var fromBlockStartPos = fromBlockIter.offset;\n var fromBlockEndPos = toBlockIter && isSameBlock ? toBlockIter.offset : this._blocks[fromBlockIter.index].value.length;\n fn(this._blocks[fromBlockIter.index], fromBlockIter.index, fromBlockStartPos, fromBlockEndPos);\n \n if (toBlockIter && !isSameBlock) {\n // process intermediate blocks\n for (var bi = fromBlockIter.index + 1; bi < toBlockIter.index; ++bi) {\n fn(this._blocks[bi], bi, 0, this._blocks[bi].value.length);\n } // process last block\n \n \n fn(this._blocks[toBlockIter.index], toBlockIter.index, 0, toBlockIter.offset);\n }\n }\n }\n /**\n @override\n */\n \n }, {\n key: \"remove\",\n value: function remove() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n \n var removeDetails = _get(_getPrototypeOf(MaskedPattern.prototype), \"remove\", this).call(this, fromPos, toPos);\n \n this._forEachBlocksInRange(fromPos, toPos, function (b, _, bFromPos, bToPos) {\n removeDetails.aggregate(b.remove(bFromPos, bToPos));\n });\n \n return removeDetails;\n }\n /**\n @override\n */\n \n }, {\n key: \"nearestInputPos\",\n value: function nearestInputPos(cursorPos) {\n var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DIRECTION.NONE;\n if (!this._blocks.length) return 0;\n var cursor = new PatternCursor(this, cursorPos);\n \n if (direction === DIRECTION.NONE) {\n // -------------------------------------------------\n // NONE should only go out from fixed to the right!\n // -------------------------------------------------\n if (cursor.pushRightBeforeInput()) return cursor.pos;\n cursor.popState();\n if (cursor.pushLeftBeforeInput()) return cursor.pos;\n return this.value.length;\n } // FORCE is only about a|* otherwise is 0\n \n \n if (direction === DIRECTION.LEFT || direction === DIRECTION.FORCE_LEFT) {\n // try to break fast when *|a\n if (direction === DIRECTION.LEFT) {\n cursor.pushRightBeforeFilled();\n if (cursor.ok && cursor.pos === cursorPos) return cursorPos;\n cursor.popState();\n } // forward flow\n \n \n cursor.pushLeftBeforeInput();\n cursor.pushLeftBeforeRequired();\n cursor.pushLeftBeforeFilled(); // backward flow\n \n if (direction === DIRECTION.LEFT) {\n cursor.pushRightBeforeInput();\n cursor.pushRightBeforeRequired();\n if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos;\n cursor.popState();\n if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos;\n cursor.popState();\n }\n \n if (cursor.ok) return cursor.pos;\n if (direction === DIRECTION.FORCE_LEFT) return 0;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n cursor.popState();\n if (cursor.ok) return cursor.pos; // cursor.popState();\n // if (\n // cursor.pushRightBeforeInput() &&\n // // TODO HACK for lazy if has aligned left inside fixed and has came to the start - use start position\n // (!this.lazy || this.extractInput())\n // ) return cursor.pos;\n \n return 0;\n }\n \n if (direction === DIRECTION.RIGHT || direction === DIRECTION.FORCE_RIGHT) {\n // forward flow\n cursor.pushRightBeforeInput();\n cursor.pushRightBeforeRequired();\n if (cursor.pushRightBeforeFilled()) return cursor.pos;\n if (direction === DIRECTION.FORCE_RIGHT) return this.value.length; // backward flow\n \n cursor.popState();\n if (cursor.ok) return cursor.pos;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n return this.nearestInputPos(cursorPos, DIRECTION.LEFT);\n }\n \n return cursorPos;\n }\n /** Get block by name */\n \n }, {\n key: \"maskedBlock\",\n value: function maskedBlock(name) {\n return this.maskedBlocks(name)[0];\n }\n /** Get all blocks by name */\n \n }, {\n key: \"maskedBlocks\",\n value: function maskedBlocks(name) {\n var _this4 = this;\n \n var indices = this._maskedBlocks[name];\n if (!indices) return [];\n return indices.map(function (gi) {\n return _this4._blocks[gi];\n });\n }\n }]);\n \n return MaskedPattern;\n }(Masked);\n MaskedPattern.DEFAULTS = {\n lazy: true,\n placeholderChar: '_'\n };\n MaskedPattern.STOP_CHAR = '`';\n MaskedPattern.ESCAPE_CHAR = '\\\\';\n MaskedPattern.InputDefinition = PatternInputDefinition;\n MaskedPattern.FixedDefinition = PatternFixedDefinition;\n IMask.MaskedPattern = MaskedPattern;\n \n /** Pattern which accepts ranges */\n \n var MaskedRange = /*#__PURE__*/function (_MaskedPattern) {\n _inherits(MaskedRange, _MaskedPattern);\n \n var _super = _createSuper(MaskedRange);\n \n function MaskedRange() {\n _classCallCheck(this, MaskedRange);\n \n return _super.apply(this, arguments);\n }\n \n _createClass(MaskedRange, [{\n key: \"_matchFrom\",\n get:\n /**\n Optionally sets max length of pattern.\n Used when pattern length is longer then `to` param length. Pads zeros at start in this case.\n */\n \n /** Min bound */\n \n /** Max bound */\n \n /** */\n function get() {\n return this.maxLength - String(this.from).length;\n }\n /**\n @override\n */\n \n }, {\n key: \"_update\",\n value: function _update(opts) {\n // TODO type\n opts = Object.assign({\n to: this.to || 0,\n from: this.from || 0,\n maxLength: this.maxLength || 0\n }, opts);\n var maxLength = String(opts.to).length;\n if (opts.maxLength != null) maxLength = Math.max(maxLength, opts.maxLength);\n opts.maxLength = maxLength;\n var fromStr = String(opts.from).padStart(maxLength, '0');\n var toStr = String(opts.to).padStart(maxLength, '0');\n var sameCharsCount = 0;\n \n while (sameCharsCount < toStr.length && toStr[sameCharsCount] === fromStr[sameCharsCount]) {\n ++sameCharsCount;\n }\n \n opts.mask = toStr.slice(0, sameCharsCount).replace(/0/g, '\\\\0') + '0'.repeat(maxLength - sameCharsCount);\n \n _get(_getPrototypeOf(MaskedRange.prototype), \"_update\", this).call(this, opts);\n }\n /**\n @override\n */\n \n }, {\n key: \"isComplete\",\n get: function get() {\n return _get(_getPrototypeOf(MaskedRange.prototype), \"isComplete\", this) && Boolean(this.value);\n }\n }, {\n key: \"boundaries\",\n value: function boundaries(str) {\n var minstr = '';\n var maxstr = '';\n \n var _ref = str.match(/^(\\D*)(\\d*)(\\D*)/) || [],\n _ref2 = _slicedToArray(_ref, 3),\n placeholder = _ref2[1],\n num = _ref2[2];\n \n if (num) {\n minstr = '0'.repeat(placeholder.length) + num;\n maxstr = '9'.repeat(placeholder.length) + num;\n }\n \n minstr = minstr.padEnd(this.maxLength, '0');\n maxstr = maxstr.padEnd(this.maxLength, '9');\n return [minstr, maxstr];\n } // TODO str is a single char everytime\n \n /**\n @override\n */\n \n }, {\n key: \"doPrepare\",\n value: function doPrepare(ch) {\n var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var details;\n \n var _normalizePrepare = normalizePrepare(_get(_getPrototypeOf(MaskedRange.prototype), \"doPrepare\", this).call(this, ch.replace(/\\D/g, ''), flags));\n \n var _normalizePrepare2 = _slicedToArray(_normalizePrepare, 2);\n \n ch = _normalizePrepare2[0];\n details = _normalizePrepare2[1];\n if (!this.autofix || !ch) return ch;\n var fromStr = String(this.from).padStart(this.maxLength, '0');\n var toStr = String(this.to).padStart(this.maxLength, '0');\n var nextVal = this.value + ch;\n if (nextVal.length > this.maxLength) return '';\n \n var _this$boundaries = this.boundaries(nextVal),\n _this$boundaries2 = _slicedToArray(_this$boundaries, 2),\n minstr = _this$boundaries2[0],\n maxstr = _this$boundaries2[1];\n \n if (Number(maxstr) < this.from) return fromStr[nextVal.length - 1];\n \n if (Number(minstr) > this.to) {\n if (this.autofix === 'pad' && nextVal.length < this.maxLength) {\n return ['', details.aggregate(this.append(fromStr[nextVal.length - 1] + ch, flags))];\n }\n \n return toStr[nextVal.length - 1];\n }\n \n return ch;\n }\n /**\n @override\n */\n \n }, {\n key: \"doValidate\",\n value: function doValidate() {\n var _get2;\n \n var str = this.value;\n var firstNonZero = str.search(/[^0]/);\n if (firstNonZero === -1 && str.length <= this._matchFrom) return true;\n \n var _this$boundaries3 = this.boundaries(str),\n _this$boundaries4 = _slicedToArray(_this$boundaries3, 2),\n minstr = _this$boundaries4[0],\n maxstr = _this$boundaries4[1];\n \n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n \n return this.from <= Number(maxstr) && Number(minstr) <= this.to && (_get2 = _get(_getPrototypeOf(MaskedRange.prototype), \"doValidate\", this)).call.apply(_get2, [this].concat(args));\n }\n }]);\n \n return MaskedRange;\n }(MaskedPattern);\n IMask.MaskedRange = MaskedRange;\n \n /** Date mask */\n \n var MaskedDate = /*#__PURE__*/function (_MaskedPattern) {\n _inherits(MaskedDate, _MaskedPattern);\n \n var _super = _createSuper(MaskedDate);\n \n /** Pattern mask for date according to {@link MaskedDate#format} */\n \n /** Start date */\n \n /** End date */\n \n /** */\n \n /**\n @param {Object} opts\n */\n function MaskedDate(opts) {\n _classCallCheck(this, MaskedDate);\n \n return _super.call(this, Object.assign({}, MaskedDate.DEFAULTS, opts));\n }\n /**\n @override\n */\n \n \n _createClass(MaskedDate, [{\n key: \"_update\",\n value: function _update(opts) {\n if (opts.mask === Date) delete opts.mask;\n if (opts.pattern) opts.mask = opts.pattern;\n var blocks = opts.blocks;\n opts.blocks = Object.assign({}, MaskedDate.GET_DEFAULT_BLOCKS()); // adjust year block\n \n if (opts.min) opts.blocks.Y.from = opts.min.getFullYear();\n if (opts.max) opts.blocks.Y.to = opts.max.getFullYear();\n \n if (opts.min && opts.max && opts.blocks.Y.from === opts.blocks.Y.to) {\n opts.blocks.m.from = opts.min.getMonth() + 1;\n opts.blocks.m.to = opts.max.getMonth() + 1;\n \n if (opts.blocks.m.from === opts.blocks.m.to) {\n opts.blocks.d.from = opts.min.getDate();\n opts.blocks.d.to = opts.max.getDate();\n }\n }\n \n Object.assign(opts.blocks, this.blocks, blocks); // add autofix\n \n Object.keys(opts.blocks).forEach(function (bk) {\n var b = opts.blocks[bk];\n if (!('autofix' in b) && 'autofix' in opts) b.autofix = opts.autofix;\n });\n \n _get(_getPrototypeOf(MaskedDate.prototype), \"_update\", this).call(this, opts);\n }\n /**\n @override\n */\n \n }, {\n key: \"doValidate\",\n value: function doValidate() {\n var _get2;\n \n var date = this.date;\n \n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n \n return (_get2 = _get(_getPrototypeOf(MaskedDate.prototype), \"doValidate\", this)).call.apply(_get2, [this].concat(args)) && (!this.isComplete || this.isDateExist(this.value) && date != null && (this.min == null || this.min <= date) && (this.max == null || date <= this.max));\n }\n /** Checks if date is exists */\n \n }, {\n key: \"isDateExist\",\n value: function isDateExist(str) {\n return this.format(this.parse(str, this), this).indexOf(str) >= 0;\n }\n /** Parsed Date */\n \n }, {\n key: \"date\",\n get: function get() {\n return this.typedValue;\n },\n set: function set(date) {\n this.typedValue = date;\n }\n /**\n @override\n */\n \n }, {\n key: \"typedValue\",\n get: function get() {\n return this.isComplete ? _get(_getPrototypeOf(MaskedDate.prototype), \"typedValue\", this) : null;\n },\n set: function set(value) {\n _set(_getPrototypeOf(MaskedDate.prototype), \"typedValue\", value, this, true);\n }\n /**\n @override\n */\n \n }, {\n key: \"maskEquals\",\n value: function maskEquals(mask) {\n return mask === Date || _get(_getPrototypeOf(MaskedDate.prototype), \"maskEquals\", this).call(this, mask);\n }\n }]);\n \n return MaskedDate;\n }(MaskedPattern);\n MaskedDate.DEFAULTS = {\n pattern: 'd{.}`m{.}`Y',\n format: function format(date) {\n if (!date) return '';\n var day = String(date.getDate()).padStart(2, '0');\n var month = String(date.getMonth() + 1).padStart(2, '0');\n var year = date.getFullYear();\n return [day, month, year].join('.');\n },\n parse: function parse(str) {\n var _str$split = str.split('.'),\n _str$split2 = _slicedToArray(_str$split, 3),\n day = _str$split2[0],\n month = _str$split2[1],\n year = _str$split2[2];\n \n return new Date(year, month - 1, day);\n }\n };\n \n MaskedDate.GET_DEFAULT_BLOCKS = function () {\n return {\n d: {\n mask: MaskedRange,\n from: 1,\n to: 31,\n maxLength: 2\n },\n m: {\n mask: MaskedRange,\n from: 1,\n to: 12,\n maxLength: 2\n },\n Y: {\n mask: MaskedRange,\n from: 1900,\n to: 9999\n }\n };\n };\n \n IMask.MaskedDate = MaskedDate;\n \n /**\n Generic element API to use with mask\n @interface\n */\n var MaskElement = /*#__PURE__*/function () {\n function MaskElement() {\n _classCallCheck(this, MaskElement);\n }\n \n _createClass(MaskElement, [{\n key: \"selectionStart\",\n get:\n /** */\n \n /** */\n \n /** */\n \n /** Safely returns selection start */\n function get() {\n var start;\n \n try {\n start = this._unsafeSelectionStart;\n } catch (e) {}\n \n return start != null ? start : this.value.length;\n }\n /** Safely returns selection end */\n \n }, {\n key: \"selectionEnd\",\n get: function get() {\n var end;\n \n try {\n end = this._unsafeSelectionEnd;\n } catch (e) {}\n \n return end != null ? end : this.value.length;\n }\n /** Safely sets element selection */\n \n }, {\n key: \"select\",\n value: function select(start, end) {\n if (start == null || end == null || start === this.selectionStart && end === this.selectionEnd) return;\n \n try {\n this._unsafeSelect(start, end);\n } catch (e) {}\n }\n /** Should be overriden in subclasses */\n \n }, {\n key: \"_unsafeSelect\",\n value: function _unsafeSelect(start, end) {}\n /** Should be overriden in subclasses */\n \n }, {\n key: \"isActive\",\n get: function get() {\n return false;\n }\n /** Should be overriden in subclasses */\n \n }, {\n key: \"bindEvents\",\n value: function bindEvents(handlers) {}\n /** Should be overriden in subclasses */\n \n }, {\n key: \"unbindEvents\",\n value: function unbindEvents() {}\n }]);\n \n return MaskElement;\n }();\n IMask.MaskElement = MaskElement;\n \n /** Bridge between HTMLElement and {@link Masked} */\n \n var HTMLMaskElement = /*#__PURE__*/function (_MaskElement) {\n _inherits(HTMLMaskElement, _MaskElement);\n \n var _super = _createSuper(HTMLMaskElement);\n \n /** Mapping between HTMLElement events and mask internal events */\n \n /** HTMLElement to use mask on */\n \n /**\n @param {HTMLInputElement|HTMLTextAreaElement} input\n */\n function HTMLMaskElement(input) {\n var _this;\n \n _classCallCheck(this, HTMLMaskElement);\n \n _this = _super.call(this);\n _this.input = input;\n _this._handlers = {};\n return _this;\n }\n /** */\n // $FlowFixMe https://github.com/facebook/flow/issues/2839\n \n \n _createClass(HTMLMaskElement, [{\n key: \"rootElement\",\n get: function get() {\n var _this$input$getRootNo, _this$input$getRootNo2, _this$input;\n \n return (_this$input$getRootNo = (_this$input$getRootNo2 = (_this$input = this.input).getRootNode) === null || _this$input$getRootNo2 === void 0 ? void 0 : _this$input$getRootNo2.call(_this$input)) !== null && _this$input$getRootNo !== void 0 ? _this$input$getRootNo : document;\n }\n /**\n Is element in focus\n @readonly\n */\n \n }, {\n key: \"isActive\",\n get: function get() {\n //$FlowFixMe\n return this.input === this.rootElement.activeElement;\n }\n /**\n Returns HTMLElement selection start\n @override\n */\n \n }, {\n key: \"_unsafeSelectionStart\",\n get: function get() {\n return this.input.selectionStart;\n }\n /**\n Returns HTMLElement selection end\n @override\n */\n \n }, {\n key: \"_unsafeSelectionEnd\",\n get: function get() {\n return this.input.selectionEnd;\n }\n /**\n Sets HTMLElement selection\n @override\n */\n \n }, {\n key: \"_unsafeSelect\",\n value: function _unsafeSelect(start, end) {\n this.input.setSelectionRange(start, end);\n }\n /**\n HTMLElement value\n @override\n */\n \n }, {\n key: \"value\",\n get: function get() {\n return this.input.value;\n },\n set: function set(value) {\n this.input.value = value;\n }\n /**\n Binds HTMLElement events to mask internal events\n @override\n */\n \n }, {\n key: \"bindEvents\",\n value: function bindEvents(handlers) {\n var _this2 = this;\n \n Object.keys(handlers).forEach(function (event) {\n return _this2._toggleEventHandler(HTMLMaskElement.EVENTS_MAP[event], handlers[event]);\n });\n }\n /**\n Unbinds HTMLElement events to mask internal events\n @override\n */\n \n }, {\n key: \"unbindEvents\",\n value: function unbindEvents() {\n var _this3 = this;\n \n Object.keys(this._handlers).forEach(function (event) {\n return _this3._toggleEventHandler(event);\n });\n }\n /** */\n \n }, {\n key: \"_toggleEventHandler\",\n value: function _toggleEventHandler(event, handler) {\n if (this._handlers[event]) {\n this.input.removeEventListener(event, this._handlers[event]);\n delete this._handlers[event];\n }\n \n if (handler) {\n this.input.addEventListener(event, handler);\n this._handlers[event] = handler;\n }\n }\n }]);\n \n return HTMLMaskElement;\n }(MaskElement);\n HTMLMaskElement.EVENTS_MAP = {\n selectionChange: 'keydown',\n input: 'input',\n drop: 'drop',\n click: 'click',\n focus: 'focus',\n commit: 'blur'\n };\n IMask.HTMLMaskElement = HTMLMaskElement;\n \n var HTMLContenteditableMaskElement = /*#__PURE__*/function (_HTMLMaskElement) {\n _inherits(HTMLContenteditableMaskElement, _HTMLMaskElement);\n \n var _super = _createSuper(HTMLContenteditableMaskElement);\n \n function HTMLContenteditableMaskElement() {\n _classCallCheck(this, HTMLContenteditableMaskElement);\n \n return _super.apply(this, arguments);\n }\n \n _createClass(HTMLContenteditableMaskElement, [{\n key: \"_unsafeSelectionStart\",\n get:\n /**\n Returns HTMLElement selection start\n @override\n */\n function get() {\n var root = this.rootElement;\n var selection = root.getSelection && root.getSelection();\n var anchorOffset = selection && selection.anchorOffset;\n var focusOffset = selection && selection.focusOffset;\n \n if (focusOffset == null || anchorOffset == null || anchorOffset < focusOffset) {\n return anchorOffset;\n }\n \n return focusOffset;\n }\n /**\n Returns HTMLElement selection end\n @override\n */\n \n }, {\n key: \"_unsafeSelectionEnd\",\n get: function get() {\n var root = this.rootElement;\n var selection = root.getSelection && root.getSelection();\n var anchorOffset = selection && selection.anchorOffset;\n var focusOffset = selection && selection.focusOffset;\n \n if (focusOffset == null || anchorOffset == null || anchorOffset > focusOffset) {\n return anchorOffset;\n }\n \n return focusOffset;\n }\n /**\n Sets HTMLElement selection\n @override\n */\n \n }, {\n key: \"_unsafeSelect\",\n value: function _unsafeSelect(start, end) {\n if (!this.rootElement.createRange) return;\n var range = this.rootElement.createRange();\n range.setStart(this.input.firstChild || this.input, start);\n range.setEnd(this.input.lastChild || this.input, end);\n var root = this.rootElement;\n var selection = root.getSelection && root.getSelection();\n \n if (selection) {\n selection.removeAllRanges();\n selection.addRange(range);\n }\n }\n /**\n HTMLElement value\n @override\n */\n \n }, {\n key: \"value\",\n get: function get() {\n // $FlowFixMe\n return this.input.textContent;\n },\n set: function set(value) {\n this.input.textContent = value;\n }\n }]);\n \n return HTMLContenteditableMaskElement;\n }(HTMLMaskElement);\n IMask.HTMLContenteditableMaskElement = HTMLContenteditableMaskElement;\n \n var _excluded$1 = [\"mask\"];\n /** Listens to element events and controls changes between element and {@link Masked} */\n \n var InputMask = /*#__PURE__*/function () {\n /**\n View element\n @readonly\n */\n \n /**\n Internal {@link Masked} model\n @readonly\n */\n \n /**\n @param {MaskElement|HTMLInputElement|HTMLTextAreaElement} el\n @param {Object} opts\n */\n function InputMask(el, opts) {\n _classCallCheck(this, InputMask);\n \n this.el = el instanceof MaskElement ? el : el.isContentEditable && el.tagName !== 'INPUT' && el.tagName !== 'TEXTAREA' ? new HTMLContenteditableMaskElement(el) : new HTMLMaskElement(el);\n this.masked = createMask(opts);\n this._listeners = {};\n this._value = '';\n this._unmaskedValue = '';\n this._saveSelection = this._saveSelection.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onChange = this._onChange.bind(this);\n this._onDrop = this._onDrop.bind(this);\n this._onFocus = this._onFocus.bind(this);\n this._onClick = this._onClick.bind(this);\n this.alignCursor = this.alignCursor.bind(this);\n this.alignCursorFriendly = this.alignCursorFriendly.bind(this);\n \n this._bindEvents(); // refresh\n \n \n this.updateValue();\n \n this._onChange();\n }\n /** Read or update mask */\n \n \n _createClass(InputMask, [{\n key: \"mask\",\n get: function get() {\n return this.masked.mask;\n },\n set: function set(mask) {\n if (this.maskEquals(mask)) return; // $FlowFixMe No ideas ... after update\n \n if (!(mask instanceof IMask.Masked) && this.masked.constructor === maskedClass(mask)) {\n this.masked.updateOptions({\n mask: mask\n });\n return;\n }\n \n var masked = createMask({\n mask: mask\n });\n masked.unmaskedValue = this.masked.unmaskedValue;\n this.masked = masked;\n }\n /** Raw value */\n \n }, {\n key: \"maskEquals\",\n value: function maskEquals(mask) {\n var _this$masked;\n \n return mask == null || ((_this$masked = this.masked) === null || _this$masked === void 0 ? void 0 : _this$masked.maskEquals(mask));\n }\n }, {\n key: \"value\",\n get: function get() {\n return this._value;\n },\n set: function set(str) {\n if (this.value === str) return;\n this.masked.value = str;\n this.updateControl();\n this.alignCursor();\n }\n /** Unmasked value */\n \n }, {\n key: \"unmaskedValue\",\n get: function get() {\n return this._unmaskedValue;\n },\n set: function set(str) {\n if (this.unmaskedValue === str) return;\n this.masked.unmaskedValue = str;\n this.updateControl();\n this.alignCursor();\n }\n /** Typed unmasked value */\n \n }, {\n key: \"typedValue\",\n get: function get() {\n return this.masked.typedValue;\n },\n set: function set(val) {\n if (this.masked.typedValueEquals(val)) return;\n this.masked.typedValue = val;\n this.updateControl();\n this.alignCursor();\n }\n /**\n Starts listening to element events\n @protected\n */\n \n }, {\n key: \"_bindEvents\",\n value: function _bindEvents() {\n this.el.bindEvents({\n selectionChange: this._saveSelection,\n input: this._onInput,\n drop: this._onDrop,\n click: this._onClick,\n focus: this._onFocus,\n commit: this._onChange\n });\n }\n /**\n Stops listening to element events\n @protected\n */\n \n }, {\n key: \"_unbindEvents\",\n value: function _unbindEvents() {\n if (this.el) this.el.unbindEvents();\n }\n /**\n Fires custom event\n @protected\n */\n \n }, {\n key: \"_fireEvent\",\n value: function _fireEvent(ev) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n \n var listeners = this._listeners[ev];\n if (!listeners) return;\n listeners.forEach(function (l) {\n return l.apply(void 0, args);\n });\n }\n /**\n Current selection start\n @readonly\n */\n \n }, {\n key: \"selectionStart\",\n get: function get() {\n return this._cursorChanging ? this._changingCursorPos : this.el.selectionStart;\n }\n /** Current cursor position */\n \n }, {\n key: \"cursorPos\",\n get: function get() {\n return this._cursorChanging ? this._changingCursorPos : this.el.selectionEnd;\n },\n set: function set(pos) {\n if (!this.el || !this.el.isActive) return;\n this.el.select(pos, pos);\n \n this._saveSelection();\n }\n /**\n Stores current selection\n @protected\n */\n \n }, {\n key: \"_saveSelection\",\n value: function\n /* ev */\n _saveSelection() {\n if (this.value !== this.el.value) {\n console.warn('Element value was changed outside of mask. Syncronize mask using `mask.updateValue()` to work properly.'); // eslint-disable-line no-console\n }\n \n this._selection = {\n start: this.selectionStart,\n end: this.cursorPos\n };\n }\n /** Syncronizes model value from view */\n \n }, {\n key: \"updateValue\",\n value: function updateValue() {\n this.masked.value = this.el.value;\n this._value = this.masked.value;\n }\n /** Syncronizes view from model value, fires change events */\n \n }, {\n key: \"updateControl\",\n value: function updateControl() {\n var newUnmaskedValue = this.masked.unmaskedValue;\n var newValue = this.masked.value;\n var isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n if (this.el.value !== newValue) this.el.value = newValue;\n if (isChanged) this._fireChangeEvents();\n }\n /** Updates options with deep equal check, recreates @{link Masked} model if mask type changes */\n \n }, {\n key: \"updateOptions\",\n value: function updateOptions(opts) {\n var mask = opts.mask,\n restOpts = _objectWithoutProperties(opts, _excluded$1);\n \n var updateMask = !this.maskEquals(mask);\n var updateOpts = !objectIncludes(this.masked, restOpts);\n if (updateMask) this.mask = mask;\n if (updateOpts) this.masked.updateOptions(restOpts);\n if (updateMask || updateOpts) this.updateControl();\n }\n /** Updates cursor */\n \n }, {\n key: \"updateCursor\",\n value: function updateCursor(cursorPos) {\n if (cursorPos == null) return;\n this.cursorPos = cursorPos; // also queue change cursor for mobile browsers\n \n this._delayUpdateCursor(cursorPos);\n }\n /**\n Delays cursor update to support mobile browsers\n @private\n */\n \n }, {\n key: \"_delayUpdateCursor\",\n value: function _delayUpdateCursor(cursorPos) {\n var _this = this;\n \n this._abortUpdateCursor();\n \n this._changingCursorPos = cursorPos;\n this._cursorChanging = setTimeout(function () {\n if (!_this.el) return; // if was destroyed\n \n _this.cursorPos = _this._changingCursorPos;\n \n _this._abortUpdateCursor();\n }, 10);\n }\n /**\n Fires custom events\n @protected\n */\n \n }, {\n key: \"_fireChangeEvents\",\n value: function _fireChangeEvents() {\n this._fireEvent('accept', this._inputEvent);\n \n if (this.masked.isComplete) this._fireEvent('complete', this._inputEvent);\n }\n /**\n Aborts delayed cursor update\n @private\n */\n \n }, {\n key: \"_abortUpdateCursor\",\n value: function _abortUpdateCursor() {\n if (this._cursorChanging) {\n clearTimeout(this._cursorChanging);\n delete this._cursorChanging;\n }\n }\n /** Aligns cursor to nearest available position */\n \n }, {\n key: \"alignCursor\",\n value: function alignCursor() {\n this.cursorPos = this.masked.nearestInputPos(this.masked.nearestInputPos(this.cursorPos, DIRECTION.LEFT));\n }\n /** Aligns cursor only if selection is empty */\n \n }, {\n key: \"alignCursorFriendly\",\n value: function alignCursorFriendly() {\n if (this.selectionStart !== this.cursorPos) return; // skip if range is selected\n \n this.alignCursor();\n }\n /** Adds listener on custom event */\n \n }, {\n key: \"on\",\n value: function on(ev, handler) {\n if (!this._listeners[ev]) this._listeners[ev] = [];\n \n this._listeners[ev].push(handler);\n \n return this;\n }\n /** Removes custom event listener */\n \n }, {\n key: \"off\",\n value: function off(ev, handler) {\n if (!this._listeners[ev]) return this;\n \n if (!handler) {\n delete this._listeners[ev];\n return this;\n }\n \n var hIndex = this._listeners[ev].indexOf(handler);\n \n if (hIndex >= 0) this._listeners[ev].splice(hIndex, 1);\n return this;\n }\n /** Handles view input event */\n \n }, {\n key: \"_onInput\",\n value: function _onInput(e) {\n this._inputEvent = e;\n \n this._abortUpdateCursor(); // fix strange IE behavior\n \n \n if (!this._selection) return this.updateValue();\n var details = new ActionDetails( // new state\n this.el.value, this.cursorPos, // old state\n this.value, this._selection);\n var oldRawValue = this.masked.rawInputValue;\n var offset = this.masked.splice(details.startChangePos, details.removed.length, details.inserted, details.removeDirection, {\n input: true,\n raw: true\n }).offset; // force align in remove direction only if no input chars were removed\n // otherwise we still need to align with NONE (to get out from fixed symbols for instance)\n \n var removeDirection = oldRawValue === this.masked.rawInputValue ? details.removeDirection : DIRECTION.NONE;\n var cursorPos = this.masked.nearestInputPos(details.startChangePos + offset, removeDirection);\n if (removeDirection !== DIRECTION.NONE) cursorPos = this.masked.nearestInputPos(cursorPos, DIRECTION.NONE);\n this.updateControl();\n this.updateCursor(cursorPos);\n delete this._inputEvent;\n }\n /** Handles view change event and commits model value */\n \n }, {\n key: \"_onChange\",\n value: function _onChange() {\n if (this.value !== this.el.value) {\n this.updateValue();\n }\n \n this.masked.doCommit();\n this.updateControl();\n \n this._saveSelection();\n }\n /** Handles view drop event, prevents by default */\n \n }, {\n key: \"_onDrop\",\n value: function _onDrop(ev) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n /** Restore last selection on focus */\n \n }, {\n key: \"_onFocus\",\n value: function _onFocus(ev) {\n this.alignCursorFriendly();\n }\n /** Restore last selection on focus */\n \n }, {\n key: \"_onClick\",\n value: function _onClick(ev) {\n this.alignCursorFriendly();\n }\n /** Unbind view events and removes element reference */\n \n }, {\n key: \"destroy\",\n value: function destroy() {\n this._unbindEvents(); // $FlowFixMe why not do so?\n \n \n this._listeners.length = 0; // $FlowFixMe\n \n delete this.el;\n }\n }]);\n \n return InputMask;\n }();\n IMask.InputMask = InputMask;\n \n /** Pattern which validates enum values */\n \n var MaskedEnum = /*#__PURE__*/function (_MaskedPattern) {\n _inherits(MaskedEnum, _MaskedPattern);\n \n var _super = _createSuper(MaskedEnum);\n \n function MaskedEnum() {\n _classCallCheck(this, MaskedEnum);\n \n return _super.apply(this, arguments);\n }\n \n _createClass(MaskedEnum, [{\n key: \"_update\",\n value:\n /**\n @override\n @param {Object} opts\n */\n function _update(opts) {\n // TODO type\n if (opts.enum) opts.mask = '*'.repeat(opts.enum[0].length);\n \n _get(_getPrototypeOf(MaskedEnum.prototype), \"_update\", this).call(this, opts);\n }\n /**\n @override\n */\n \n }, {\n key: \"doValidate\",\n value: function doValidate() {\n var _this = this,\n _get2;\n \n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n \n return this.enum.some(function (e) {\n return e.indexOf(_this.unmaskedValue) >= 0;\n }) && (_get2 = _get(_getPrototypeOf(MaskedEnum.prototype), \"doValidate\", this)).call.apply(_get2, [this].concat(args));\n }\n }]);\n \n return MaskedEnum;\n }(MaskedPattern);\n IMask.MaskedEnum = MaskedEnum;\n \n /**\n Number mask\n @param {Object} opts\n @param {string} opts.radix - Single char\n @param {string} opts.thousandsSeparator - Single char\n @param {Array} opts.mapToRadix - Array of single chars\n @param {number} opts.min\n @param {number} opts.max\n @param {number} opts.scale - Digits after point\n @param {boolean} opts.signed - Allow negative\n @param {boolean} opts.normalizeZeros - Flag to remove leading and trailing zeros in the end of editing\n @param {boolean} opts.padFractionalZeros - Flag to pad trailing zeros after point in the end of editing\n */\n var MaskedNumber = /*#__PURE__*/function (_Masked) {\n _inherits(MaskedNumber, _Masked);\n \n var _super = _createSuper(MaskedNumber);\n \n /** Single char */\n \n /** Single char */\n \n /** Array of single chars */\n \n /** */\n \n /** */\n \n /** Digits after point */\n \n /** */\n \n /** Flag to remove leading and trailing zeros in the end of editing */\n \n /** Flag to pad trailing zeros after point in the end of editing */\n function MaskedNumber(opts) {\n _classCallCheck(this, MaskedNumber);\n \n return _super.call(this, Object.assign({}, MaskedNumber.DEFAULTS, opts));\n }\n /**\n @override\n */\n \n \n _createClass(MaskedNumber, [{\n key: \"_update\",\n value: function _update(opts) {\n _get(_getPrototypeOf(MaskedNumber.prototype), \"_update\", this).call(this, opts);\n \n this._updateRegExps();\n }\n /** */\n \n }, {\n key: \"_updateRegExps\",\n value: function _updateRegExps() {\n // use different regexp to process user input (more strict, input suffix) and tail shifting\n var start = '^' + (this.allowNegative ? '[+|\\\\-]?' : '');\n var midInput = '(0|([1-9]+\\\\d*))?';\n var mid = '\\\\d*';\n var end = (this.scale ? '(' + escapeRegExp(this.radix) + '\\\\d{0,' + this.scale + '})?' : '') + '$';\n this._numberRegExpInput = new RegExp(start + midInput + end);\n this._numberRegExp = new RegExp(start + mid + end);\n this._mapToRadixRegExp = new RegExp('[' + this.mapToRadix.map(escapeRegExp).join('') + ']', 'g');\n this._thousandsSeparatorRegExp = new RegExp(escapeRegExp(this.thousandsSeparator), 'g');\n }\n /** */\n \n }, {\n key: \"_removeThousandsSeparators\",\n value: function _removeThousandsSeparators(value) {\n return value.replace(this._thousandsSeparatorRegExp, '');\n }\n /** */\n \n }, {\n key: \"_insertThousandsSeparators\",\n value: function _insertThousandsSeparators(value) {\n // https://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript\n var parts = value.split(this.radix);\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, this.thousandsSeparator);\n return parts.join(this.radix);\n }\n /**\n @override\n */\n \n }, {\n key: \"doPrepare\",\n value: function doPrepare(ch) {\n var _get2;\n \n ch = ch.replace(this._mapToRadixRegExp, this.radix);\n \n var noSepCh = this._removeThousandsSeparators(ch);\n \n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n \n var _normalizePrepare = normalizePrepare((_get2 = _get(_getPrototypeOf(MaskedNumber.prototype), \"doPrepare\", this)).call.apply(_get2, [this, noSepCh].concat(args))),\n _normalizePrepare2 = _slicedToArray(_normalizePrepare, 2),\n prepCh = _normalizePrepare2[0],\n details = _normalizePrepare2[1];\n \n if (ch && !noSepCh) details.skip = true;\n return [prepCh, details];\n }\n /** */\n \n }, {\n key: \"_separatorsCount\",\n value: function _separatorsCount(to) {\n var extendOnSeparators = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var count = 0;\n \n for (var pos = 0; pos < to; ++pos) {\n if (this._value.indexOf(this.thousandsSeparator, pos) === pos) {\n ++count;\n if (extendOnSeparators) to += this.thousandsSeparator.length;\n }\n }\n \n return count;\n }\n /** */\n \n }, {\n key: \"_separatorsCountFromSlice\",\n value: function _separatorsCountFromSlice() {\n var slice = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._value;\n return this._separatorsCount(this._removeThousandsSeparators(slice).length, true);\n }\n /**\n @override\n */\n \n }, {\n key: \"extractInput\",\n value: function extractInput() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n var flags = arguments.length > 2 ? arguments[2] : undefined;\n \n var _this$_adjustRangeWit = this._adjustRangeWithSeparators(fromPos, toPos);\n \n var _this$_adjustRangeWit2 = _slicedToArray(_this$_adjustRangeWit, 2);\n \n fromPos = _this$_adjustRangeWit2[0];\n toPos = _this$_adjustRangeWit2[1];\n return this._removeThousandsSeparators(_get(_getPrototypeOf(MaskedNumber.prototype), \"extractInput\", this).call(this, fromPos, toPos, flags));\n }\n /**\n @override\n */\n \n }, {\n key: \"_appendCharRaw\",\n value: function _appendCharRaw(ch) {\n var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (!this.thousandsSeparator) return _get(_getPrototypeOf(MaskedNumber.prototype), \"_appendCharRaw\", this).call(this, ch, flags);\n var prevBeforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value;\n \n var prevBeforeTailSeparatorsCount = this._separatorsCountFromSlice(prevBeforeTailValue);\n \n this._value = this._removeThousandsSeparators(this.value);\n \n var appendDetails = _get(_getPrototypeOf(MaskedNumber.prototype), \"_appendCharRaw\", this).call(this, ch, flags);\n \n this._value = this._insertThousandsSeparators(this._value);\n var beforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value;\n \n var beforeTailSeparatorsCount = this._separatorsCountFromSlice(beforeTailValue);\n \n appendDetails.tailShift += (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length;\n appendDetails.skip = !appendDetails.rawInserted && ch === this.thousandsSeparator;\n return appendDetails;\n }\n /** */\n \n }, {\n key: \"_findSeparatorAround\",\n value: function _findSeparatorAround(pos) {\n if (this.thousandsSeparator) {\n var searchFrom = pos - this.thousandsSeparator.length + 1;\n var separatorPos = this.value.indexOf(this.thousandsSeparator, searchFrom);\n if (separatorPos <= pos) return separatorPos;\n }\n \n return -1;\n }\n }, {\n key: \"_adjustRangeWithSeparators\",\n value: function _adjustRangeWithSeparators(from, to) {\n var separatorAroundFromPos = this._findSeparatorAround(from);\n \n if (separatorAroundFromPos >= 0) from = separatorAroundFromPos;\n \n var separatorAroundToPos = this._findSeparatorAround(to);\n \n if (separatorAroundToPos >= 0) to = separatorAroundToPos + this.thousandsSeparator.length;\n return [from, to];\n }\n /**\n @override\n */\n \n }, {\n key: \"remove\",\n value: function remove() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n \n var _this$_adjustRangeWit3 = this._adjustRangeWithSeparators(fromPos, toPos);\n \n var _this$_adjustRangeWit4 = _slicedToArray(_this$_adjustRangeWit3, 2);\n \n fromPos = _this$_adjustRangeWit4[0];\n toPos = _this$_adjustRangeWit4[1];\n var valueBeforePos = this.value.slice(0, fromPos);\n var valueAfterPos = this.value.slice(toPos);\n \n var prevBeforeTailSeparatorsCount = this._separatorsCount(valueBeforePos.length);\n \n this._value = this._insertThousandsSeparators(this._removeThousandsSeparators(valueBeforePos + valueAfterPos));\n \n var beforeTailSeparatorsCount = this._separatorsCountFromSlice(valueBeforePos);\n \n return new ChangeDetails({\n tailShift: (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length\n });\n }\n /**\n @override\n */\n \n }, {\n key: \"nearestInputPos\",\n value: function nearestInputPos(cursorPos, direction) {\n if (!this.thousandsSeparator) return cursorPos;\n \n switch (direction) {\n case DIRECTION.NONE:\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n {\n var separatorAtLeftPos = this._findSeparatorAround(cursorPos - 1);\n \n if (separatorAtLeftPos >= 0) {\n var separatorAtLeftEndPos = separatorAtLeftPos + this.thousandsSeparator.length;\n \n if (cursorPos < separatorAtLeftEndPos || this.value.length <= separatorAtLeftEndPos || direction === DIRECTION.FORCE_LEFT) {\n return separatorAtLeftPos;\n }\n }\n \n break;\n }\n \n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n {\n var separatorAtRightPos = this._findSeparatorAround(cursorPos);\n \n if (separatorAtRightPos >= 0) {\n return separatorAtRightPos + this.thousandsSeparator.length;\n }\n }\n }\n \n return cursorPos;\n }\n /**\n @override\n */\n \n }, {\n key: \"doValidate\",\n value: function doValidate(flags) {\n var regexp = flags.input ? this._numberRegExpInput : this._numberRegExp; // validate as string\n \n var valid = regexp.test(this._removeThousandsSeparators(this.value));\n \n if (valid) {\n // validate as number\n var number = this.number;\n valid = valid && !isNaN(number) && ( // check min bound for negative values\n this.min == null || this.min >= 0 || this.min <= this.number) && ( // check max bound for positive values\n this.max == null || this.max <= 0 || this.number <= this.max);\n }\n \n return valid && _get(_getPrototypeOf(MaskedNumber.prototype), \"doValidate\", this).call(this, flags);\n }\n /**\n @override\n */\n \n }, {\n key: \"doCommit\",\n value: function doCommit() {\n if (this.value) {\n var number = this.number;\n var validnum = number; // check bounds\n \n if (this.min != null) validnum = Math.max(validnum, this.min);\n if (this.max != null) validnum = Math.min(validnum, this.max);\n if (validnum !== number) this.unmaskedValue = String(validnum);\n var formatted = this.value;\n if (this.normalizeZeros) formatted = this._normalizeZeros(formatted);\n if (this.padFractionalZeros && this.scale > 0) formatted = this._padFractionalZeros(formatted);\n this._value = formatted;\n }\n \n _get(_getPrototypeOf(MaskedNumber.prototype), \"doCommit\", this).call(this);\n }\n /** */\n \n }, {\n key: \"_normalizeZeros\",\n value: function _normalizeZeros(value) {\n var parts = this._removeThousandsSeparators(value).split(this.radix); // remove leading zeros\n \n \n parts[0] = parts[0].replace(/^(\\D*)(0*)(\\d*)/, function (match, sign, zeros, num) {\n return sign + num;\n }); // add leading zero\n \n if (value.length && !/\\d$/.test(parts[0])) parts[0] = parts[0] + '0';\n \n if (parts.length > 1) {\n parts[1] = parts[1].replace(/0*$/, ''); // remove trailing zeros\n \n if (!parts[1].length) parts.length = 1; // remove fractional\n }\n \n return this._insertThousandsSeparators(parts.join(this.radix));\n }\n /** */\n \n }, {\n key: \"_padFractionalZeros\",\n value: function _padFractionalZeros(value) {\n if (!value) return value;\n var parts = value.split(this.radix);\n if (parts.length < 2) parts.push('');\n parts[1] = parts[1].padEnd(this.scale, '0');\n return parts.join(this.radix);\n }\n /**\n @override\n */\n \n }, {\n key: \"unmaskedValue\",\n get: function get() {\n return this._removeThousandsSeparators(this._normalizeZeros(this.value)).replace(this.radix, '.');\n },\n set: function set(unmaskedValue) {\n _set(_getPrototypeOf(MaskedNumber.prototype), \"unmaskedValue\", unmaskedValue.replace('.', this.radix), this, true);\n }\n /**\n @override\n */\n \n }, {\n key: \"typedValue\",\n get: function get() {\n return Number(this.unmaskedValue);\n },\n set: function set(n) {\n _set(_getPrototypeOf(MaskedNumber.prototype), \"unmaskedValue\", String(n), this, true);\n }\n /** Parsed Number */\n \n }, {\n key: \"number\",\n get: function get() {\n return this.typedValue;\n },\n set: function set(number) {\n this.typedValue = number;\n }\n /**\n Is negative allowed\n @readonly\n */\n \n }, {\n key: \"allowNegative\",\n get: function get() {\n return this.signed || this.min != null && this.min < 0 || this.max != null && this.max < 0;\n }\n /**\n @override\n */\n \n }, {\n key: \"typedValueEquals\",\n value: function typedValueEquals(value) {\n // handle 0 -> '' case (typed = 0 even if value = '')\n // for details see https://github.com/uNmAnNeR/imaskjs/issues/134\n return (_get(_getPrototypeOf(MaskedNumber.prototype), \"typedValueEquals\", this).call(this, value) || MaskedNumber.EMPTY_VALUES.includes(value) && MaskedNumber.EMPTY_VALUES.includes(this.typedValue)) && !(value === 0 && this.value === '');\n }\n }]);\n \n return MaskedNumber;\n }(Masked);\n MaskedNumber.DEFAULTS = {\n radix: ',',\n thousandsSeparator: '',\n mapToRadix: ['.'],\n scale: 2,\n signed: false,\n normalizeZeros: true,\n padFractionalZeros: false\n };\n MaskedNumber.EMPTY_VALUES = [].concat(_toConsumableArray(Masked.EMPTY_VALUES), [0]);\n IMask.MaskedNumber = MaskedNumber;\n \n /** Masking by custom Function */\n \n var MaskedFunction = /*#__PURE__*/function (_Masked) {\n _inherits(MaskedFunction, _Masked);\n \n var _super = _createSuper(MaskedFunction);\n \n function MaskedFunction() {\n _classCallCheck(this, MaskedFunction);\n \n return _super.apply(this, arguments);\n }\n \n _createClass(MaskedFunction, [{\n key: \"_update\",\n value:\n /**\n @override\n @param {Object} opts\n */\n function _update(opts) {\n if (opts.mask) opts.validate = opts.mask;\n \n _get(_getPrototypeOf(MaskedFunction.prototype), \"_update\", this).call(this, opts);\n }\n }]);\n \n return MaskedFunction;\n }(Masked);\n IMask.MaskedFunction = MaskedFunction;\n \n var _excluded = [\"compiledMasks\", \"currentMaskRef\", \"currentMask\"];\n \n /** Dynamic mask for choosing apropriate mask in run-time */\n var MaskedDynamic = /*#__PURE__*/function (_Masked) {\n _inherits(MaskedDynamic, _Masked);\n \n var _super = _createSuper(MaskedDynamic);\n \n /** Currently chosen mask */\n \n /** Compliled {@link Masked} options */\n \n /** Chooses {@link Masked} depending on input value */\n \n /**\n @param {Object} opts\n */\n function MaskedDynamic(opts) {\n var _this;\n \n _classCallCheck(this, MaskedDynamic);\n \n _this = _super.call(this, Object.assign({}, MaskedDynamic.DEFAULTS, opts));\n _this.currentMask = null;\n return _this;\n }\n /**\n @override\n */\n \n \n _createClass(MaskedDynamic, [{\n key: \"_update\",\n value: function _update(opts) {\n _get(_getPrototypeOf(MaskedDynamic.prototype), \"_update\", this).call(this, opts);\n \n if ('mask' in opts) {\n // mask could be totally dynamic with only `dispatch` option\n this.compiledMasks = Array.isArray(opts.mask) ? opts.mask.map(function (m) {\n return createMask(m);\n }) : [];\n }\n }\n /**\n @override\n */\n \n }, {\n key: \"_appendCharRaw\",\n value: function _appendCharRaw(ch) {\n var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n \n var details = this._applyDispatch(ch, flags);\n \n if (this.currentMask) {\n details.aggregate(this.currentMask._appendChar(ch, this.currentMaskFlags(flags)));\n }\n \n return details;\n }\n }, {\n key: \"_applyDispatch\",\n value: function _applyDispatch() {\n var appended = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var prevValueBeforeTail = flags.tail && flags._beforeTailState != null ? flags._beforeTailState._value : this.value;\n var inputValue = this.rawInputValue;\n var insertValue = flags.tail && flags._beforeTailState != null ? // $FlowFixMe - tired to fight with type system\n flags._beforeTailState._rawInputValue : inputValue;\n var tailValue = inputValue.slice(insertValue.length);\n var prevMask = this.currentMask;\n var details = new ChangeDetails();\n var prevMaskState = prevMask === null || prevMask === void 0 ? void 0 : prevMask.state; // clone flags to prevent overwriting `_beforeTailState`\n \n this.currentMask = this.doDispatch(appended, Object.assign({}, flags)); // restore state after dispatch\n \n if (this.currentMask) {\n if (this.currentMask !== prevMask) {\n // if mask changed reapply input\n this.currentMask.reset();\n \n if (insertValue) {\n // $FlowFixMe - it's ok, we don't change current mask above\n var d = this.currentMask.append(insertValue, {\n raw: true\n });\n details.tailShift = d.inserted.length - prevValueBeforeTail.length;\n }\n \n if (tailValue) {\n // $FlowFixMe - it's ok, we don't change current mask above\n details.tailShift += this.currentMask.append(tailValue, {\n raw: true,\n tail: true\n }).tailShift;\n }\n } else {\n // Dispatch can do something bad with state, so\n // restore prev mask state\n this.currentMask.state = prevMaskState;\n }\n }\n \n return details;\n }\n }, {\n key: \"_appendPlaceholder\",\n value: function _appendPlaceholder() {\n var details = this._applyDispatch.apply(this, arguments);\n \n if (this.currentMask) {\n details.aggregate(this.currentMask._appendPlaceholder());\n }\n \n return details;\n }\n /**\n @override\n */\n \n }, {\n key: \"_appendEager\",\n value: function _appendEager() {\n var details = this._applyDispatch.apply(this, arguments);\n \n if (this.currentMask) {\n details.aggregate(this.currentMask._appendEager());\n }\n \n return details;\n }\n }, {\n key: \"currentMaskFlags\",\n value: function currentMaskFlags(flags) {\n var _flags$_beforeTailSta, _flags$_beforeTailSta2;\n \n return Object.assign({}, flags, {\n _beforeTailState: ((_flags$_beforeTailSta = flags._beforeTailState) === null || _flags$_beforeTailSta === void 0 ? void 0 : _flags$_beforeTailSta.currentMaskRef) === this.currentMask && ((_flags$_beforeTailSta2 = flags._beforeTailState) === null || _flags$_beforeTailSta2 === void 0 ? void 0 : _flags$_beforeTailSta2.currentMask) || flags._beforeTailState\n });\n }\n /**\n @override\n */\n \n }, {\n key: \"doDispatch\",\n value: function doDispatch(appended) {\n var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return this.dispatch(appended, this, flags);\n }\n /**\n @override\n */\n \n }, {\n key: \"doValidate\",\n value: function doValidate(flags) {\n return _get(_getPrototypeOf(MaskedDynamic.prototype), \"doValidate\", this).call(this, flags) && (!this.currentMask || this.currentMask.doValidate(this.currentMaskFlags(flags)));\n }\n /**\n @override\n */\n \n }, {\n key: \"doPrepare\",\n value: function doPrepare(str) {\n var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n \n var _normalizePrepare = normalizePrepare(_get(_getPrototypeOf(MaskedDynamic.prototype), \"doPrepare\", this).call(this, str, flags)),\n _normalizePrepare2 = _slicedToArray(_normalizePrepare, 2),\n s = _normalizePrepare2[0],\n details = _normalizePrepare2[1];\n \n if (this.currentMask) {\n var currentDetails;\n \n var _normalizePrepare3 = normalizePrepare(_get(_getPrototypeOf(MaskedDynamic.prototype), \"doPrepare\", this).call(this, s, this.currentMaskFlags(flags)));\n \n var _normalizePrepare4 = _slicedToArray(_normalizePrepare3, 2);\n \n s = _normalizePrepare4[0];\n currentDetails = _normalizePrepare4[1];\n details = details.aggregate(currentDetails);\n }\n \n return [s, details];\n }\n /**\n @override\n */\n \n }, {\n key: \"reset\",\n value: function reset() {\n var _this$currentMask;\n \n (_this$currentMask = this.currentMask) === null || _this$currentMask === void 0 ? void 0 : _this$currentMask.reset();\n this.compiledMasks.forEach(function (m) {\n return m.reset();\n });\n }\n /**\n @override\n */\n \n }, {\n key: \"value\",\n get: function get() {\n return this.currentMask ? this.currentMask.value : '';\n },\n set: function set(value) {\n _set(_getPrototypeOf(MaskedDynamic.prototype), \"value\", value, this, true);\n }\n /**\n @override\n */\n \n }, {\n key: \"unmaskedValue\",\n get: function get() {\n return this.currentMask ? this.currentMask.unmaskedValue : '';\n },\n set: function set(unmaskedValue) {\n _set(_getPrototypeOf(MaskedDynamic.prototype), \"unmaskedValue\", unmaskedValue, this, true);\n }\n /**\n @override\n */\n \n }, {\n key: \"typedValue\",\n get: function get() {\n return this.currentMask ? this.currentMask.typedValue : '';\n } // probably typedValue should not be used with dynamic\n ,\n set: function set(value) {\n var unmaskedValue = String(value); // double check it\n \n if (this.currentMask) {\n this.currentMask.typedValue = value;\n unmaskedValue = this.currentMask.unmaskedValue;\n }\n \n this.unmaskedValue = unmaskedValue;\n }\n /**\n @override\n */\n \n }, {\n key: \"isComplete\",\n get: function get() {\n var _this$currentMask2;\n \n return Boolean((_this$currentMask2 = this.currentMask) === null || _this$currentMask2 === void 0 ? void 0 : _this$currentMask2.isComplete);\n }\n /**\n @override\n */\n \n }, {\n key: \"isFilled\",\n get: function get() {\n var _this$currentMask3;\n \n return Boolean((_this$currentMask3 = this.currentMask) === null || _this$currentMask3 === void 0 ? void 0 : _this$currentMask3.isFilled);\n }\n /**\n @override\n */\n \n }, {\n key: \"remove\",\n value: function remove() {\n var details = new ChangeDetails();\n \n if (this.currentMask) {\n var _this$currentMask4;\n \n details.aggregate((_this$currentMask4 = this.currentMask).remove.apply(_this$currentMask4, arguments)) // update with dispatch\n .aggregate(this._applyDispatch());\n }\n \n return details;\n }\n /**\n @override\n */\n \n }, {\n key: \"state\",\n get: function get() {\n var _this$currentMask5;\n \n return Object.assign({}, _get(_getPrototypeOf(MaskedDynamic.prototype), \"state\", this), {\n _rawInputValue: this.rawInputValue,\n compiledMasks: this.compiledMasks.map(function (m) {\n return m.state;\n }),\n currentMaskRef: this.currentMask,\n currentMask: (_this$currentMask5 = this.currentMask) === null || _this$currentMask5 === void 0 ? void 0 : _this$currentMask5.state\n });\n },\n set: function set(state) {\n var compiledMasks = state.compiledMasks,\n currentMaskRef = state.currentMaskRef,\n currentMask = state.currentMask,\n maskedState = _objectWithoutProperties(state, _excluded);\n \n this.compiledMasks.forEach(function (m, mi) {\n return m.state = compiledMasks[mi];\n });\n \n if (currentMaskRef != null) {\n this.currentMask = currentMaskRef;\n this.currentMask.state = currentMask;\n }\n \n _set(_getPrototypeOf(MaskedDynamic.prototype), \"state\", maskedState, this, true);\n }\n /**\n @override\n */\n \n }, {\n key: \"extractInput\",\n value: function extractInput() {\n var _this$currentMask6;\n \n return this.currentMask ? (_this$currentMask6 = this.currentMask).extractInput.apply(_this$currentMask6, arguments) : '';\n }\n /**\n @override\n */\n \n }, {\n key: \"extractTail\",\n value: function extractTail() {\n var _this$currentMask7, _get2;\n \n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n \n return this.currentMask ? (_this$currentMask7 = this.currentMask).extractTail.apply(_this$currentMask7, args) : (_get2 = _get(_getPrototypeOf(MaskedDynamic.prototype), \"extractTail\", this)).call.apply(_get2, [this].concat(args));\n }\n /**\n @override\n */\n \n }, {\n key: \"doCommit\",\n value: function doCommit() {\n if (this.currentMask) this.currentMask.doCommit();\n \n _get(_getPrototypeOf(MaskedDynamic.prototype), \"doCommit\", this).call(this);\n }\n /**\n @override\n */\n \n }, {\n key: \"nearestInputPos\",\n value: function nearestInputPos() {\n var _this$currentMask8, _get3;\n \n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n \n return this.currentMask ? (_this$currentMask8 = this.currentMask).nearestInputPos.apply(_this$currentMask8, args) : (_get3 = _get(_getPrototypeOf(MaskedDynamic.prototype), \"nearestInputPos\", this)).call.apply(_get3, [this].concat(args));\n }\n }, {\n key: \"overwrite\",\n get: function get() {\n return this.currentMask ? this.currentMask.overwrite : _get(_getPrototypeOf(MaskedDynamic.prototype), \"overwrite\", this);\n },\n set: function set(overwrite) {\n console.warn('\"overwrite\" option is not available in dynamic mask, use this option in siblings');\n }\n }, {\n key: \"eager\",\n get: function get() {\n return this.currentMask ? this.currentMask.eager : _get(_getPrototypeOf(MaskedDynamic.prototype), \"eager\", this);\n },\n set: function set(eager) {\n console.warn('\"eager\" option is not available in dynamic mask, use this option in siblings');\n }\n /**\n @override\n */\n \n }, {\n key: \"maskEquals\",\n value: function maskEquals(mask) {\n return Array.isArray(mask) && this.compiledMasks.every(function (m, mi) {\n var _mask$mi;\n \n return m.maskEquals((_mask$mi = mask[mi]) === null || _mask$mi === void 0 ? void 0 : _mask$mi.mask);\n });\n }\n /**\n @override\n */\n \n }, {\n key: \"typedValueEquals\",\n value: function typedValueEquals(value) {\n var _this$currentMask9;\n \n return Boolean((_this$currentMask9 = this.currentMask) === null || _this$currentMask9 === void 0 ? void 0 : _this$currentMask9.typedValueEquals(value));\n }\n }]);\n \n return MaskedDynamic;\n }(Masked);\n MaskedDynamic.DEFAULTS = {\n dispatch: function dispatch(appended, masked, flags) {\n if (!masked.compiledMasks.length) return;\n var inputValue = masked.rawInputValue; // simulate input\n \n var inputs = masked.compiledMasks.map(function (m, index) {\n m.reset();\n m.append(inputValue, {\n raw: true\n });\n m.append(appended, masked.currentMaskFlags(flags));\n var weight = m.rawInputValue.length;\n return {\n weight: weight,\n index: index\n };\n }); // pop masks with longer values first\n \n inputs.sort(function (i1, i2) {\n return i2.weight - i1.weight;\n });\n return masked.compiledMasks[inputs[0].index];\n }\n };\n IMask.MaskedDynamic = MaskedDynamic;\n \n /** Mask pipe source and destination types */\n \n var PIPE_TYPE = {\n MASKED: 'value',\n UNMASKED: 'unmaskedValue',\n TYPED: 'typedValue'\n };\n /** Creates new pipe function depending on mask type, source and destination options */\n \n function createPipe(mask) {\n var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : PIPE_TYPE.MASKED;\n var to = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : PIPE_TYPE.MASKED;\n var masked = createMask(mask);\n return function (value) {\n return masked.runIsolated(function (m) {\n m[from] = value;\n return m[to];\n });\n };\n }\n /** Pipes value through mask depending on mask type, source and destination options */\n \n function pipe(value) {\n for (var _len = arguments.length, pipeArgs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n pipeArgs[_key - 1] = arguments[_key];\n }\n \n return createPipe.apply(void 0, pipeArgs)(value);\n }\n IMask.PIPE_TYPE = PIPE_TYPE;\n IMask.createPipe = createPipe;\n IMask.pipe = pipe;\n \n try {\n globalThis.IMask = IMask;\n } catch (e) {}\n \n exports.HTMLContenteditableMaskElement = HTMLContenteditableMaskElement;\n exports.HTMLMaskElement = HTMLMaskElement;\n exports.InputMask = InputMask;\n exports.MaskElement = MaskElement;\n exports.Masked = Masked;\n exports.MaskedDate = MaskedDate;\n exports.MaskedDynamic = MaskedDynamic;\n exports.MaskedEnum = MaskedEnum;\n exports.MaskedFunction = MaskedFunction;\n exports.MaskedNumber = MaskedNumber;\n exports.MaskedPattern = MaskedPattern;\n exports.MaskedRange = MaskedRange;\n exports.MaskedRegExp = MaskedRegExp;\n exports.PIPE_TYPE = PIPE_TYPE;\n exports.createMask = createMask;\n exports.createPipe = createPipe;\n exports[\"default\"] = IMask;\n exports.pipe = pipe;\n \n Object.defineProperty(exports, '__esModule', { value: true });\n \n }));\n //# sourceMappingURL=imask.js.map"],"sourceRoot":""}