{"version":3,"file":"imask.js","sources":["../../../node_modules/core-js/internals/global.js","../../../node_modules/core-js/internals/fails.js","../../../node_modules/core-js/internals/descriptors.js","../../../node_modules/core-js/internals/object-property-is-enumerable.js","../../../node_modules/core-js/internals/create-property-descriptor.js","../../../node_modules/core-js/internals/classof-raw.js","../../../node_modules/core-js/internals/indexed-object.js","../../../node_modules/core-js/internals/require-object-coercible.js","../../../node_modules/core-js/internals/to-indexed-object.js","../../../node_modules/core-js/internals/is-object.js","../../../node_modules/core-js/internals/to-primitive.js","../../../node_modules/core-js/internals/has.js","../../../node_modules/core-js/internals/document-create-element.js","../../../node_modules/core-js/internals/ie8-dom-define.js","../../../node_modules/core-js/internals/object-get-own-property-descriptor.js","../../../node_modules/core-js/internals/an-object.js","../../../node_modules/core-js/internals/object-define-property.js","../../../node_modules/core-js/internals/create-non-enumerable-property.js","../../../node_modules/core-js/internals/set-global.js","../../../node_modules/core-js/internals/shared-store.js","../../../node_modules/core-js/internals/inspect-source.js","../../../node_modules/core-js/internals/native-weak-map.js","../../../node_modules/core-js/internals/shared.js","../../../node_modules/core-js/internals/uid.js","../../../node_modules/core-js/internals/shared-key.js","../../../node_modules/core-js/internals/hidden-keys.js","../../../node_modules/core-js/internals/internal-state.js","../../../node_modules/core-js/internals/redefine.js","../../../node_modules/core-js/internals/path.js","../../../node_modules/core-js/internals/get-built-in.js","../../../node_modules/core-js/internals/to-integer.js","../../../node_modules/core-js/internals/to-length.js","../../../node_modules/core-js/internals/to-absolute-index.js","../../../node_modules/core-js/internals/array-includes.js","../../../node_modules/core-js/internals/object-keys-internal.js","../../../node_modules/core-js/internals/enum-bug-keys.js","../../../node_modules/core-js/internals/object-get-own-property-names.js","../../../node_modules/core-js/internals/object-get-own-property-symbols.js","../../../node_modules/core-js/internals/own-keys.js","../../../node_modules/core-js/internals/copy-constructor-properties.js","../../../node_modules/core-js/internals/is-forced.js","../../../node_modules/core-js/internals/export.js","../../../node_modules/core-js/internals/object-keys.js","../../../node_modules/core-js/internals/to-object.js","../../../node_modules/core-js/internals/object-assign.js","../../../node_modules/core-js/modules/es.object.assign.js","../../../node_modules/core-js/internals/string-repeat.js","../../../node_modules/core-js/internals/string-pad.js","../../../node_modules/core-js/internals/engine-user-agent.js","../../../node_modules/core-js/internals/string-pad-webkit-bug.js","../../../node_modules/core-js/modules/es.string.pad-end.js","../../../node_modules/core-js/modules/es.string.pad-start.js","../../../node_modules/core-js/modules/es.string.repeat.js","../../../node_modules/core-js/modules/es.global-this.js","../src/core/utils.js","../src/core/action-details.js","../src/core/change-details.js","../src/core/continuous-tail-details.js","../src/core/holder.js","../src/masked/base.js","../src/masked/factory.js","../src/masked/pattern/input-definition.js","../src/masked/pattern/fixed-definition.js","../src/masked/pattern/chunk-tail-details.js","../src/masked/regexp.js","../src/masked/pattern.js","../src/masked/range.js","../src/masked/date.js","../src/controls/mask-element.js","../src/controls/html-mask-element.js","../src/controls/html-contenteditable-mask-element.js","../src/controls/input.js","../src/masked/enum.js","../src/masked/number.js","../src/masked/function.js","../src/masked/dynamic.js","../src/masked/pipe.js"],"sourcesContent":["var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line no-undef\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func\n (function () { return this; })() || Function('return this')();\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","'use strict';\nvar nativePropertyIsEnumerable = {}.propertyIsEnumerable;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : nativePropertyIsEnumerable;\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","var fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar split = ''.split;\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n","// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('../internals/is-object');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (input, PREFERRED_STRING) {\n if (!isObject(input)) return input;\n var fn, val;\n if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;\n if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar has = require('../internals/has');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\nvar nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return nativeGetOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it)) {\n throw TypeError(String(it) + ' is not an object');\n } return it;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPrimitive = require('../internals/to-primitive');\n\nvar nativeDefineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return nativeDefineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nmodule.exports = function (key, value) {\n try {\n createNonEnumerableProperty(global, key, value);\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var store = require('../internals/shared-store');\n\nvar functionToString = Function.toString;\n\n// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper\nif (typeof store.inspectSource != 'function') {\n store.inspectSource = function (it) {\n return functionToString.call(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var global = require('../internals/global');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.8.3',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n","var id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","module.exports = {};\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar objectHas = require('../internals/has');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = store.get;\n var wmhas = store.has;\n var wmset = store.set;\n set = function (it, metadata) {\n metadata.facade = it;\n wmset.call(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget.call(store, it) || {};\n };\n has = function (it) {\n return wmhas.call(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return objectHas(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return objectHas(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n var state;\n if (typeof value == 'function') {\n if (typeof key == 'string' && !has(value, 'name')) {\n createNonEnumerableProperty(value, 'name', key);\n }\n state = enforceInternalState(value);\n if (!state.source) {\n state.source = TEMPLATE.join(typeof key == 'string' ? key : '');\n }\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return typeof this == 'function' && getInternalState(this).source || inspectSource(this);\n});\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","var path = require('../internals/path');\nvar global = require('../internals/global');\n\nvar aFunction = function (variable) {\n return typeof variable == 'function' ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])\n : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToInteger` abstract operation\n// https://tc39.es/ecma262/#sec-tointeger\nmodule.exports = function (argument) {\n return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n","var toInteger = require('../internals/to-integer');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var toInteger = require('../internals/to-integer');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toInteger(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","var has = require('../internals/has');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~indexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","exports.f = Object.getOwnPropertySymbols;\n","var getBuiltIn = require('../internals/get-built-in');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n","var has = require('../internals/has');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n};\n","var fails = require('../internals/fails');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : typeof detection == 'function' ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty === typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","var requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\nvar nativeAssign = Object.assign;\nvar defineProperty = Object.defineProperty;\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !nativeAssign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && nativeAssign({ b: 1 }, nativeAssign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var symbol = Symbol();\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : nativeAssign;\n","var $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n assign: assign\n});\n","'use strict';\nvar toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.repeat` method implementation\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\nmodule.exports = ''.repeat || function repeat(count) {\n var str = String(requireObjectCoercible(this));\n var result = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n return result;\n};\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('../internals/to-length');\nvar repeat = require('../internals/string-repeat');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar ceil = Math.ceil;\n\n// `String.prototype.{ padStart, padEnd }` methods implementation\nvar createMethod = function (IS_END) {\n return function ($this, maxLength, fillString) {\n var S = String(requireObjectCoercible($this));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n var fillLen, stringFiller;\n if (intMaxLength <= stringLength || fillStr == '') return S;\n fillLen = intMaxLength - stringLength;\n stringFiller = repeat.call(fillStr, ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return IS_END ? S + stringFiller : stringFiller + S;\n };\n};\n\nmodule.exports = {\n // `String.prototype.padStart` method\n // https://tc39.es/ecma262/#sec-string.prototype.padstart\n start: createMethod(false),\n // `String.prototype.padEnd` method\n // https://tc39.es/ecma262/#sec-string.prototype.padend\n end: createMethod(true)\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","// https://github.com/zloirock/core-js/issues/280\nvar userAgent = require('../internals/engine-user-agent');\n\n// eslint-disable-next-line unicorn/no-unsafe-regex\nmodule.exports = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n","'use strict';\nvar $ = require('../internals/export');\nvar $padEnd = require('../internals/string-pad').end;\nvar WEBKIT_BUG = require('../internals/string-pad-webkit-bug');\n\n// `String.prototype.padEnd` method\n// https://tc39.es/ecma262/#sec-string.prototype.padend\n$({ target: 'String', proto: true, forced: WEBKIT_BUG }, {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $padEnd(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $padStart = require('../internals/string-pad').start;\nvar WEBKIT_BUG = require('../internals/string-pad-webkit-bug');\n\n// `String.prototype.padStart` method\n// https://tc39.es/ecma262/#sec-string.prototype.padstart\n$({ target: 'String', proto: true, forced: WEBKIT_BUG }, {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $padStart(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var $ = require('../internals/export');\nvar repeat = require('../internals/string-repeat');\n\n// `String.prototype.repeat` method\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\n$({ target: 'String', proto: true }, {\n repeat: repeat\n});\n","var $ = require('../internals/export');\nvar global = require('../internals/global');\n\n// `globalThis` object\n// https://tc39.es/ecma262/#sec-globalthis\n$({ global: true }, {\n globalThis: global\n});\n","// @flow\r\n\r\n\r\n/** Checks if value is string */\r\nexport\r\nfunction isString (str: mixed): boolean %checks {\r\n return typeof str === 'string' || str instanceof String;\r\n}\r\n\r\n/**\r\n Direction\r\n @prop {string} NONE\r\n @prop {string} LEFT\r\n @prop {string} FORCE_LEFT\r\n @prop {string} RIGHT\r\n @prop {string} FORCE_RIGHT\r\n*/\r\nexport\r\nconst DIRECTION = {\r\n NONE: 'NONE',\r\n LEFT: 'LEFT',\r\n FORCE_LEFT: 'FORCE_LEFT',\r\n RIGHT: 'RIGHT',\r\n FORCE_RIGHT: 'FORCE_RIGHT',\r\n}\r\n/**\r\n Direction\r\n @enum {string}\r\n*/\r\nexport\r\ntype Direction = $Values;\r\n\r\n/** Returns next char index in direction */\r\nexport\r\nfunction indexInDirection (pos: number, direction: Direction): number {\r\n if (direction === DIRECTION.LEFT) --pos;\r\n return pos;\r\n}\r\n\r\n/** Returns next char position in direction */\r\nexport\r\nfunction posInDirection (pos: number, direction: Direction): number {\r\n switch (direction) {\r\n case DIRECTION.LEFT:\r\n case DIRECTION.FORCE_LEFT:\r\n return --pos;\r\n case DIRECTION.RIGHT:\r\n case DIRECTION.FORCE_RIGHT:\r\n return ++pos;\r\n default:\r\n return pos;\r\n }\r\n}\r\n\r\n/** */\r\nexport\r\nfunction forceDirection (direction: Direction): Direction {\r\n switch (direction) {\r\n case DIRECTION.LEFT:\r\n return DIRECTION.FORCE_LEFT;\r\n case DIRECTION.RIGHT:\r\n return DIRECTION.FORCE_RIGHT;\r\n default:\r\n return direction;\r\n }\r\n}\r\n\r\n/** Escapes regular expression control chars */\r\nexport\r\nfunction escapeRegExp (str: string): string {\r\n return str.replace(/([.*+?^=!:${}()|[\\]\\/\\\\])/g, '\\\\$1');\r\n}\r\n\r\n\r\n// cloned from https://github.com/epoberezkin/fast-deep-equal with small changes\r\nexport\r\nfunction objectIncludes (b: any, a: any): boolean {\r\n if (a === b) return true;\r\n\r\n var arrA = Array.isArray(a)\r\n , arrB = Array.isArray(b)\r\n , i;\r\n\r\n if (arrA && arrB) {\r\n if (a.length != b.length) return false;\r\n for (i = 0; i < a.length; i++)\r\n if (!objectIncludes(a[i], b[i])) return false;\r\n return true;\r\n }\r\n\r\n if (arrA != arrB) return false;\r\n\r\n if (a && b && typeof a === 'object' && typeof b === 'object') {\r\n var dateA = a instanceof Date\r\n , dateB = b instanceof Date;\r\n if (dateA && dateB) return a.getTime() == b.getTime();\r\n if (dateA != dateB) return false;\r\n\r\n var regexpA = a instanceof RegExp\r\n , regexpB = b instanceof RegExp;\r\n if (regexpA && regexpB) return a.toString() == b.toString();\r\n if (regexpA != regexpB) return false;\r\n\r\n var keys = Object.keys(a);\r\n // if (keys.length !== Object.keys(b).length) return false;\r\n\r\n for (i = 0; i < keys.length; i++)\r\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\r\n\r\n for (i = 0; i < keys.length; i++)\r\n if(!objectIncludes(b[keys[i]], a[keys[i]])) return false;\r\n\r\n return true;\r\n } else if (a && b && typeof a === 'function' && typeof b === 'function') {\r\n return a.toString() === b.toString()\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/** Selection range */\r\nexport\r\ntype Selection = {\r\n start: number;\r\n end: number;\r\n};\r\n","// @flow\r\nimport {type Direction, type Selection, DIRECTION} from './utils.js';\r\n\r\n\r\n/** Provides details of changing input */\r\nexport default\r\nclass ActionDetails {\r\n /** Current input value */\r\n value: string;\r\n /** Current cursor position */\r\n cursorPos: number;\r\n /** Old input value */\r\n oldValue: string;\r\n /** Old selection */\r\n oldSelection: Selection;\r\n\r\n constructor (\r\n value: string,\r\n cursorPos: number,\r\n oldValue: string,\r\n oldSelection: Selection\r\n ) {\r\n this.value = value;\r\n this.cursorPos = cursorPos;\r\n this.oldValue = oldValue;\r\n this.oldSelection = oldSelection;\r\n\r\n // double check if left part was changed (autofilling, other non-standard input triggers)\r\n while (this.value.slice(0, this.startChangePos) !== this.oldValue.slice(0, this.startChangePos)) {\r\n --this.oldSelection.start;\r\n }\r\n }\r\n\r\n /**\r\n Start changing position\r\n @readonly\r\n */\r\n get startChangePos (): number {\r\n return Math.min(this.cursorPos, this.oldSelection.start);\r\n }\r\n\r\n /**\r\n Inserted symbols count\r\n @readonly\r\n */\r\n get insertedCount (): number {\r\n return this.cursorPos - this.startChangePos;\r\n }\r\n\r\n /**\r\n Inserted symbols\r\n @readonly\r\n */\r\n get inserted (): string {\r\n return this.value.substr(this.startChangePos, this.insertedCount);\r\n }\r\n\r\n /**\r\n Removed symbols count\r\n @readonly\r\n */\r\n get removedCount (): number {\r\n // Math.max for opposite operation\r\n return Math.max((this.oldSelection.end - this.startChangePos) ||\r\n // for Delete\r\n this.oldValue.length - this.value.length, 0);\r\n }\r\n\r\n /**\r\n Removed symbols\r\n @readonly\r\n */\r\n get removed (): string {\r\n return this.oldValue.substr(this.startChangePos, this.removedCount);\r\n }\r\n\r\n /**\r\n Unchanged head symbols\r\n @readonly\r\n */\r\n get head (): string {\r\n return this.value.substring(0, this.startChangePos);\r\n }\r\n\r\n /**\r\n Unchanged tail symbols\r\n @readonly\r\n */\r\n get tail (): string {\r\n return this.value.substring(this.startChangePos + this.insertedCount);\r\n }\r\n\r\n /**\r\n Remove direction\r\n @readonly\r\n */\r\n get removeDirection (): Direction {\r\n if (!this.removedCount || this.insertedCount) return DIRECTION.NONE;\r\n\r\n // align right if delete at right or if range removed (event with backspace)\r\n return (this.oldSelection.end === this.cursorPos || this.oldSelection.start === this.cursorPos) ?\r\n DIRECTION.RIGHT :\r\n DIRECTION.LEFT;\r\n }\r\n}\r\n","// @flow\r\n\r\n\r\n/**\r\n Provides details of changing model value\r\n @param {Object} [details]\r\n @param {string} [details.inserted] - Inserted symbols\r\n @param {boolean} [details.skip] - Can skip chars\r\n @param {number} [details.removeCount] - Removed symbols count\r\n @param {number} [details.tailShift] - Additional offset if any changes occurred before tail\r\n*/\r\nexport default\r\nclass ChangeDetails {\r\n /** Inserted symbols */\r\n inserted: string;\r\n /** Can skip chars */\r\n skip: boolean;\r\n /** Additional offset if any changes occurred before tail */\r\n tailShift: number;\r\n /** Raw inserted is used by dynamic mask */\r\n rawInserted: string;\r\n\r\n constructor (details?: {\r\n inserted?: $PropertyType,\r\n rawInserted?: $PropertyType,\r\n skip?: $PropertyType,\r\n tailShift?: $PropertyType,\r\n }) {\r\n Object.assign(this, {\r\n inserted: '',\r\n rawInserted: '',\r\n skip: false,\r\n tailShift: 0,\r\n }, details);\r\n }\r\n\r\n /**\r\n Aggregate changes\r\n @returns {ChangeDetails} `this`\r\n */\r\n aggregate (details: ChangeDetails): ChangeDetails {\r\n this.rawInserted += details.rawInserted;\r\n this.skip = this.skip || details.skip;\r\n this.inserted += details.inserted;\r\n this.tailShift += details.tailShift;\r\n return this;\r\n }\r\n\r\n /** Total offset considering all changes */\r\n get offset (): number {\r\n return this.tailShift + this.inserted.length;\r\n }\r\n}\r\n","// @flow\r\nimport type { TailDetails, AppendTail } from './tail-details.js';\r\nimport type ChangeDetails from './change-details.js';\r\n\r\n\r\ntype ContinuousTailState = {\r\n value: $PropertyType,\r\n from: $PropertyType,\r\n stop?: $PropertyType,\r\n};\r\n\r\n/** Provides details of continuous extracted tail */\r\nexport default\r\nclass ContinuousTailDetails implements TailDetails {\r\n /** Tail value as string */\r\n value: string;\r\n /** Tail start position */\r\n from: number;\r\n /** Start position */\r\n stop: ?number;\r\n\r\n constructor (value?: string='', from?: number=0, stop?: number) {\r\n this.value = value;\r\n this.from = from;\r\n this.stop = stop;\r\n }\r\n\r\n toString (): string { return this.value; }\r\n\r\n extend (tail: string | TailDetails): void {\r\n this.value += String(tail);\r\n }\r\n\r\n appendTo (masked: AppendTail): ChangeDetails {\r\n return masked.append(this.toString(), { tail: true })\r\n .aggregate(masked._appendPlaceholder());\r\n }\r\n\r\n get state (): ContinuousTailState {\r\n return {\r\n value: this.value,\r\n from: this.from,\r\n stop: this.stop,\r\n };\r\n }\r\n\r\n set state (state: ContinuousTailState) {\r\n Object.assign(this, state);\r\n }\r\n\r\n shiftBefore (pos: number): string {\r\n if (this.from >= pos || !this.value.length) return '';\r\n\r\n const shiftChar = this.value[0];\r\n this.value = this.value.slice(1);\r\n return shiftChar;\r\n }\r\n}\r\n","/**\r\n * Applies mask on element.\r\n * @constructor\r\n * @param {HTMLInputElement|HTMLTextAreaElement|MaskElement} el - Element to apply mask\r\n * @param {Object} opts - Custom mask options\r\n * @return {InputMask}\r\n */\r\nexport default\r\nfunction IMask (el, opts={}) {\r\n // currently available only for input-like elements\r\n return new IMask.InputMask(el, opts);\r\n}\r\n","// @flow\r\nimport ChangeDetails from '../core/change-details.js';\r\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\r\nimport { type Direction, DIRECTION, isString } from '../core/utils.js';\r\nimport { type TailDetails } from '../core/tail-details.js';\r\nimport IMask from '../core/holder.js';\r\n\r\n\r\n/** Supported mask type */\r\nexport\r\ntype Mask =\r\n string |\r\n String |\r\n RegExp |\r\n Class |\r\n Class |\r\n Array |\r\n $PropertyType, 'validate'> |\r\n Masked<*> |\r\n Class>;\r\n\r\nexport\r\ntype MaskedState = {|\r\n _value: string,\r\n|};\r\n\r\n/** Append flags */\r\nexport\r\ntype AppendFlags = {\r\n input?: boolean,\r\n tail?: boolean,\r\n raw?: boolean,\r\n _beforeTailState?: any, // TODO types...\r\n};\r\n\r\n/** Extract flags */\r\nexport\r\ntype ExtractFlags = {\r\n raw?: boolean\r\n};\r\n\r\nexport\r\ntype MaskedOptions = {\r\n mask: $PropertyType, 'mask'>,\r\n parent?: $PropertyType, 'parent'>,\r\n prepare?: $PropertyType, 'prepare'>,\r\n validate?: $PropertyType, 'validate'>,\r\n commit?: $PropertyType, 'commit'>,\r\n overwrite?: $PropertyType, 'overwrite'>,\r\n format?: $PropertyType, 'format'>,\r\n parse?: $PropertyType, 'parse'>,\r\n};\r\n\r\n\r\n/** Provides common masking stuff */\r\nexport default\r\nclass Masked {\r\n static DEFAULTS: any; // $Shape; TODO after fix https://github.com/facebook/flow/issues/4773\r\n\r\n /** @type {Mask} */\r\n mask: MaskType;\r\n /** */ // $FlowFixMe no ideas\r\n parent: ?Masked<*>;\r\n /** Transforms value before mask processing */\r\n prepare: (string, Masked, AppendFlags) => string;\r\n /** Validates if value is acceptable */\r\n validate: (string, Masked, AppendFlags) => boolean;\r\n /** Does additional processing in the end of editing */\r\n commit: (string, Masked) => void;\r\n /** Format typed value to string */\r\n format: (any, Masked) => string;\r\n /** Parse strgin to get typed value */\r\n parse: (string, Masked) => any;\r\n /** Enable characters overwriting */\r\n overwrite: ?boolean;\r\n /** */\r\n isInitialized: boolean;\r\n _value: string;\r\n _refreshing: ?boolean;\r\n _isolated: ?boolean;\r\n\r\n constructor (opts: {[string]: any}) {\r\n this._value = '';\r\n this._update({\r\n ...Masked.DEFAULTS,\r\n ...opts,\r\n });\r\n this.isInitialized = true;\r\n }\r\n\r\n /** Sets and applies new options */\r\n updateOptions (opts: {[string]: any}) {\r\n if (!Object.keys(opts).length) return;\r\n this.withValueRefresh(this._update.bind(this, opts));\r\n }\r\n\r\n /**\r\n Sets new options\r\n @protected\r\n */\r\n _update (opts: {[string]: any}) {\r\n Object.assign(this, opts);\r\n }\r\n\r\n /** Mask state */\r\n get state (): any {\r\n return {\r\n _value: this.value,\r\n };\r\n }\r\n\r\n set state (state: any) {\r\n this._value = state._value;\r\n }\r\n\r\n /** Resets value */\r\n reset () {\r\n this._value = '';\r\n }\r\n\r\n /** */\r\n get value (): string {\r\n return this._value;\r\n }\r\n\r\n set value (value: string) {\r\n this.resolve(value);\r\n }\r\n\r\n /** Resolve new value */\r\n resolve (value: string): string {\r\n this.reset();\r\n this.append(value, {input: true}, '');\r\n this.doCommit();\r\n return this.value;\r\n }\r\n\r\n /** */\r\n get unmaskedValue (): string {\r\n return this.value;\r\n }\r\n\r\n set unmaskedValue (value: string) {\r\n this.reset();\r\n this.append(value, {}, '');\r\n this.doCommit();\r\n }\r\n\r\n /** */\r\n get typedValue (): any {\r\n return this.doParse(this.value);\r\n }\r\n\r\n set typedValue (value: any) {\r\n this.value = this.doFormat(value);\r\n }\r\n\r\n /** Value that includes raw user input */\r\n get rawInputValue (): string {\r\n return this.extractInput(0, this.value.length, {raw: true});\r\n }\r\n\r\n set rawInputValue (value: string) {\r\n this.reset();\r\n this.append(value, {raw: true}, '');\r\n this.doCommit();\r\n }\r\n\r\n /** */\r\n get isComplete (): boolean {\r\n return true;\r\n }\r\n\r\n /** Finds nearest input position in direction */\r\n nearestInputPos (cursorPos: number, direction?: Direction): number {\r\n return cursorPos;\r\n }\r\n\r\n /** Extracts value in range considering flags */\r\n extractInput (fromPos?: number=0, toPos?: number=this.value.length, flags?: ExtractFlags): string {\r\n return this.value.slice(fromPos, toPos);\r\n }\r\n\r\n /** Extracts tail in range */\r\n extractTail (fromPos?: number=0, toPos?: number=this.value.length): TailDetails {\r\n return new ContinuousTailDetails(this.extractInput(fromPos, toPos), fromPos);\r\n }\r\n\r\n /** Appends tail */\r\n // $FlowFixMe no ideas\r\n appendTail (tail: string | String | TailDetails): ChangeDetails {\r\n if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\r\n\r\n return tail.appendTo(this);\r\n }\r\n\r\n /** Appends char */\r\n _appendCharRaw (ch: string, flags: AppendFlags={}): ChangeDetails {\r\n if (!ch) return new ChangeDetails();\r\n\r\n this._value += ch;\r\n return new ChangeDetails({\r\n inserted: ch,\r\n rawInserted: ch,\r\n });\r\n }\r\n\r\n /** Appends char */\r\n _appendChar (ch: string, flags: AppendFlags={}, checkTail?: TailDetails): ChangeDetails {\r\n const consistentState: MaskedState = this.state;\r\n let details: ChangeDetails = this._appendCharRaw(this.doPrepare(ch, flags), flags);\r\n\r\n if (details.inserted) {\r\n let consistentTail;\r\n let appended = this.doValidate(flags) !== false;\r\n\r\n if (appended && checkTail != null) {\r\n // validation ok, check tail\r\n const beforeTailState = this.state;\r\n if (this.overwrite) {\r\n consistentTail = checkTail.state;\r\n checkTail.shiftBefore(this.value.length);\r\n }\r\n\r\n const tailDetails = this.appendTail(checkTail);\r\n\r\n appended = tailDetails.rawInserted === checkTail.toString();\r\n\r\n // if ok, rollback state after tail\r\n if (appended && tailDetails.inserted) this.state = beforeTailState;\r\n }\r\n\r\n // revert all if something went wrong\r\n if (!appended) {\r\n details = new ChangeDetails();\r\n this.state = consistentState;\r\n if (checkTail && consistentTail) checkTail.state = consistentTail;\r\n }\r\n }\r\n return details;\r\n }\r\n\r\n /** Appends optional placeholder at end */\r\n _appendPlaceholder (): ChangeDetails {\r\n return new ChangeDetails();\r\n }\r\n\r\n /** Appends symbols considering flags */\r\n // $FlowFixMe no ideas\r\n append (str: string, flags?: AppendFlags, tail?: string | String | TailDetails): ChangeDetails {\r\n if (!isString(str)) throw new Error('value should be string');\r\n const details = new ChangeDetails();\r\n const checkTail = isString(tail) ? new ContinuousTailDetails(String(tail)) : tail;\r\n if (flags && flags.tail) flags._beforeTailState = this.state;\r\n\r\n for (let ci=0; ci(fn: () => T): T {\r\n if (this._refreshing || !this.isInitialized) return fn();\r\n this._refreshing = true;\r\n\r\n const rawInput = this.rawInputValue;\r\n const value = this.value;\r\n\r\n const ret = fn();\r\n\r\n this.rawInputValue = rawInput;\r\n // append lost trailing chars at end\r\n if (this.value && this.value !== value && value.indexOf(this.value) === 0) {\r\n this.append(value.slice(this.value.length), {}, '');\r\n }\r\n\r\n delete this._refreshing;\r\n return ret;\r\n }\r\n\r\n /** */\r\n runIsolated(fn: (masked: any) => T): T {\r\n if (this._isolated || !this.isInitialized) return fn(this);\r\n this._isolated = true;\r\n const state = this.state;\r\n\r\n const ret = fn(this);\r\n\r\n this.state = state;\r\n delete this._isolated;\r\n\r\n return ret;\r\n }\r\n\r\n /**\r\n Prepares string before mask processing\r\n @protected\r\n */\r\n doPrepare (str: string, flags: AppendFlags={}): string {\r\n return this.prepare ?\r\n this.prepare(str, this, flags) :\r\n str;\r\n }\r\n\r\n /**\r\n Validates if value is acceptable\r\n @protected\r\n */\r\n doValidate (flags: AppendFlags): boolean {\r\n return (!this.validate || this.validate(this.value, this, flags)) &&\r\n (!this.parent || this.parent.doValidate(flags));\r\n }\r\n\r\n /**\r\n Does additional processing in the end of editing\r\n @protected\r\n */\r\n doCommit () {\r\n if (this.commit) this.commit(this.value, this);\r\n }\r\n\r\n /** */\r\n doFormat (value: any): string {\r\n return this.format ? this.format(value, this) : value;\r\n }\r\n\r\n /** */\r\n doParse (str: string): string {\r\n return this.parse ? this.parse(str, this) : str;\r\n }\r\n\r\n /** */\r\n splice (start: number, deleteCount: number, inserted: string, removeDirection: Direction): ChangeDetails {\r\n const tailPos: number = start + deleteCount;\r\n const tail: TailDetails = this.extractTail(tailPos);\r\n\r\n let startChangePos: number = this.nearestInputPos(start, removeDirection);\r\n const changeDetails: ChangeDetails = new ChangeDetails({\r\n tailShift: startChangePos - start // adjust tailShift if start was aligned\r\n }).aggregate(this.remove(startChangePos))\r\n .aggregate(this.append(inserted, {input: true}, tail));\r\n\r\n return changeDetails;\r\n }\r\n}\r\nMasked.DEFAULTS = {\r\n format: v => v,\r\n parse: v => v,\r\n};\r\n\r\n\r\nIMask.Masked = Masked;\r\n","// @flow\r\nimport { isString } from '../core/utils.js';\r\nimport type Masked from './base.js';\r\nimport { type Mask } from './base.js';\r\nimport IMask from '../core/holder.js';\r\n\r\n\r\n/** Get Masked class by mask type */\r\nexport\r\nfunction maskedClass (mask: Mask): Class> {\r\n if (mask == null) {\r\n throw new Error('mask property should be defined');\r\n }\r\n\r\n // $FlowFixMe\r\n if (mask instanceof RegExp) return IMask.MaskedRegExp;\r\n // $FlowFixMe\r\n if (isString(mask)) return IMask.MaskedPattern;\r\n // $FlowFixMe\r\n if (mask instanceof Date || mask === Date) return IMask.MaskedDate;\r\n // $FlowFixMe\r\n if (mask instanceof Number || typeof mask === 'number' || mask === Number) return IMask.MaskedNumber;\r\n // $FlowFixMe\r\n if (Array.isArray(mask) || mask === Array) return IMask.MaskedDynamic;\r\n // $FlowFixMe\r\n if (IMask.Masked && mask.prototype instanceof IMask.Masked) return mask;\r\n // $FlowFixMe\r\n if (mask instanceof Function) return IMask.MaskedFunction;\r\n // $FlowFixMe\r\n if (mask instanceof IMask.Masked) return mask.constructor;\r\n\r\n console.warn('Mask not found for mask', mask); // eslint-disable-line no-console\r\n // $FlowFixMe\r\n return IMask.Masked;\r\n}\r\n\r\n/** Creates new {@link Masked} depending on mask type */\r\nexport default\r\nfunction createMask (opts: {mask: Mask} | Masked<*>): Masked<*> {\r\n // $FlowFixMe\r\n if (IMask.Masked && (opts instanceof IMask.Masked)) return opts;\r\n\r\n opts = {...opts};\r\n const mask = opts.mask;\r\n\r\n // $FlowFixMe\r\n if (IMask.Masked && (mask instanceof IMask.Masked)) return mask;\r\n\r\n const MaskedClass = maskedClass(mask);\r\n if (!MaskedClass) throw new Error('Masked class is not found for provided mask, appropriate module needs to be import manually before creating mask.');\r\n return new MaskedClass(opts);\r\n}\r\n\r\n\r\nIMask.createMask = createMask;\r\n","// @flow\r\nimport createMask from '../factory.js';\r\nimport type Masked from '../base.js';\r\nimport type MaskedPattern from '../pattern.js';\r\nimport {type TailDetails} from '../../core/tail-details.js';\r\nimport {type Mask, type ExtractFlags, type AppendFlags} from '../base.js';\r\nimport ChangeDetails from '../../core/change-details.js';\r\nimport {DIRECTION, type Direction} from '../../core/utils.js';\r\nimport {type PatternBlock} from './block.js';\r\n\r\n\r\nexport\r\ntype Definitions = {[string]: Mask};\r\n\r\n/** */\r\ntype PatternInputDefinitionOptions = {\r\n parent: $PropertyType,\r\n mask: Mask,\r\n isOptional: $PropertyType,\r\n lazy: $PropertyType,\r\n placeholderChar: $PropertyType,\r\n};\r\n\r\ntype PatternInputDefinitionState = {\r\n masked: *,\r\n _isFilled: boolean,\r\n};\r\n\r\nexport\r\nconst DEFAULT_INPUT_DEFINITIONS: { [string]: RegExp } = {\r\n '0': /\\d/,\r\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]/, // http://stackoverflow.com/a/22075070\r\n '*': /./\r\n};\r\n\r\n\r\n/** */\r\nexport default\r\nclass PatternInputDefinition implements PatternBlock {\r\n /** */\r\n +masked: Masked<*>;\r\n /** */\r\n parent: Masked<*>;\r\n /** */\r\n isOptional: boolean;\r\n /** */\r\n _isFilled: boolean;\r\n /** */\r\n lazy: $PropertyType;\r\n /** */\r\n placeholderChar: $PropertyType;\r\n\r\n\r\n constructor(opts: PatternInputDefinitionOptions) {\r\n const {mask, ...blockOpts} = opts;\r\n\r\n this.masked = createMask({mask});\r\n Object.assign(this, blockOpts);\r\n }\r\n\r\n reset () {\r\n this._isFilled = false;\r\n this.masked.reset();\r\n }\r\n\r\n remove (fromPos?: number=0, toPos?: number=this.value.length): ChangeDetails {\r\n if (fromPos === 0 && toPos >= 1) {\r\n this._isFilled = false;\r\n return this.masked.remove(fromPos, toPos);\r\n }\r\n\r\n return new ChangeDetails();\r\n }\r\n\r\n get value (): string {\r\n return this.masked.value ||\r\n (this._isFilled && !this.isOptional ?\r\n this.placeholderChar :\r\n '');\r\n }\r\n\r\n get unmaskedValue (): string {\r\n return this.masked.unmaskedValue;\r\n }\r\n\r\n get isComplete (): boolean {\r\n return Boolean(this.masked.value) || this.isOptional;\r\n }\r\n\r\n _appendChar (str: string, flags: AppendFlags={}): ChangeDetails {\r\n if (this._isFilled) return new ChangeDetails();\r\n\r\n const state = this.masked.state;\r\n // simulate input\r\n const details = this.masked._appendChar(str, flags);\r\n\r\n if (details.inserted && this.doValidate(flags) === false) {\r\n details.inserted = details.rawInserted = '';\r\n this.masked.state = state;\r\n }\r\n\r\n if (!details.inserted && !this.isOptional && !this.lazy && !flags.input) {\r\n details.inserted = this.placeholderChar;\r\n }\r\n details.skip = !details.inserted && !this.isOptional;\r\n this._isFilled = Boolean(details.inserted);\r\n\r\n return details;\r\n }\r\n\r\n append (...args: *): ChangeDetails {\r\n return this.masked.append(...args);\r\n }\r\n\r\n _appendPlaceholder (): ChangeDetails {\r\n const details = new ChangeDetails();\r\n\r\n if (this._isFilled || this.isOptional) return details;\r\n\r\n this._isFilled = true;\r\n details.inserted = this.placeholderChar;\r\n return details;\r\n }\r\n\r\n extractTail (...args: *): TailDetails {\r\n return this.masked.extractTail(...args);\r\n }\r\n\r\n appendTail (...args: *): ChangeDetails {\r\n return this.masked.appendTail(...args);\r\n }\r\n\r\n extractInput (fromPos?: number=0, toPos?: number=this.value.length, flags?: ExtractFlags): string {\r\n return this.masked.extractInput(fromPos, toPos, flags);\r\n }\r\n\r\n nearestInputPos (cursorPos: number, direction: Direction=DIRECTION.NONE): number {\r\n const minPos = 0;\r\n const maxPos = this.value.length;\r\n const boundPos = Math.min(Math.max(cursorPos, minPos), maxPos);\r\n\r\n switch (direction) {\r\n case DIRECTION.LEFT:\r\n case DIRECTION.FORCE_LEFT:\r\n return this.isComplete ? boundPos : minPos;\r\n case DIRECTION.RIGHT:\r\n case DIRECTION.FORCE_RIGHT:\r\n return this.isComplete ? boundPos : maxPos;\r\n case DIRECTION.NONE:\r\n default: return boundPos;\r\n }\r\n }\r\n\r\n doValidate (...args: *): boolean {\r\n return this.masked.doValidate(...args) && (\r\n !this.parent || this.parent.doValidate(...args));\r\n }\r\n\r\n doCommit () {\r\n this.masked.doCommit();\r\n }\r\n\r\n get state (): PatternInputDefinitionState {\r\n return {\r\n masked: this.masked.state,\r\n _isFilled: this._isFilled,\r\n };\r\n }\r\n\r\n set state (state: PatternInputDefinitionState) {\r\n this.masked.state = state.masked;\r\n this._isFilled = state._isFilled;\r\n }\r\n}\r\n","// @flow\r\nimport ChangeDetails from '../../core/change-details.js';\r\nimport { DIRECTION, type Direction, isString } from '../../core/utils.js';\r\nimport { type TailDetails } from '../../core/tail-details.js';\r\nimport ContinuousTailDetails from '../../core/continuous-tail-details.js';\r\nimport { type ExtractFlags, type AppendFlags, type MaskedState } from '../base.js';\r\nimport { type PatternBlock } from './block.js';\r\n\r\n\r\n/** */\r\ntype PatternFixedDefinitionOptions = {\r\n char: $PropertyType,\r\n isUnmasking?: $PropertyType,\r\n};\r\n\r\ntype PatternFixedDefinitionState = {|\r\n ...MaskedState,\r\n _isRawInput: ?boolean,\r\n|};\r\n\r\nexport default\r\nclass PatternFixedDefinition implements PatternBlock {\r\n /** */\r\n _value: string;\r\n /** */\r\n char: string;\r\n /** */\r\n isUnmasking: ?boolean;\r\n /** */\r\n _isRawInput: ?boolean;\r\n\r\n constructor(opts: PatternFixedDefinitionOptions) {\r\n Object.assign(this, opts);\r\n this._value = '';\r\n }\r\n\r\n get value (): string {\r\n return this._value;\r\n }\r\n\r\n get unmaskedValue (): string {\r\n return this.isUnmasking ? this.value : '';\r\n }\r\n\r\n reset () {\r\n this._isRawInput = false;\r\n this._value = '';\r\n }\r\n\r\n remove (fromPos?: number=0, toPos?: number=this._value.length): ChangeDetails {\r\n this._value = this._value.slice(0, fromPos) + this._value.slice(toPos);\r\n if (!this._value) this._isRawInput = false;\r\n\r\n return new ChangeDetails();\r\n }\r\n\r\n nearestInputPos (cursorPos: number, direction: Direction=DIRECTION.NONE): number {\r\n const minPos = 0;\r\n const maxPos = this._value.length;\r\n\r\n switch (direction) {\r\n case DIRECTION.LEFT:\r\n case DIRECTION.FORCE_LEFT:\r\n return minPos;\r\n case DIRECTION.NONE:\r\n case DIRECTION.RIGHT:\r\n case DIRECTION.FORCE_RIGHT:\r\n default: return maxPos;\r\n }\r\n }\r\n\r\n extractInput (fromPos?: number=0, toPos?: number=this._value.length, flags?: ExtractFlags={}): string {\r\n return flags.raw && this._isRawInput && this._value.slice(fromPos, toPos) || '';\r\n }\r\n\r\n get isComplete (): boolean {\r\n return true;\r\n }\r\n\r\n _appendChar (str: string, flags?: AppendFlags={}): ChangeDetails {\r\n const details = new ChangeDetails();\r\n\r\n if (this._value) return details;\r\n\r\n const appended = this.char === str[0];\r\n const isResolved = appended && (this.isUnmasking || flags.input || flags.raw) && !flags.tail;\r\n if (isResolved) details.rawInserted = this.char;\r\n this._value = details.inserted = this.char;\r\n this._isRawInput = isResolved && (flags.raw || flags.input);\r\n\r\n return details;\r\n }\r\n\r\n _appendPlaceholder (): ChangeDetails {\r\n const details = new ChangeDetails();\r\n if (this._value) return details;\r\n\r\n this._value = details.inserted = this.char;\r\n return details;\r\n }\r\n\r\n extractTail (fromPos?: number=0, toPos?: number=this.value.length): TailDetails {\r\n return new ContinuousTailDetails('');\r\n }\r\n\r\n // $FlowFixMe no ideas\r\n appendTail (tail: string | String | TailDetails): ChangeDetails {\r\n if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\r\n\r\n return tail.appendTo(this);\r\n }\r\n\r\n append (str: string, flags?: AppendFlags, tail?: TailDetails): ChangeDetails {\r\n const details = this._appendChar(str, flags);\r\n\r\n if (tail != null) {\r\n details.tailShift += this.appendTail(tail).tailShift;\r\n }\r\n\r\n return details;\r\n }\r\n\r\n doCommit () {}\r\n\r\n get state (): PatternFixedDefinitionState {\r\n return {\r\n _value: this._value,\r\n _isRawInput: this._isRawInput,\r\n };\r\n }\r\n\r\n set state (state: PatternFixedDefinitionState) {\r\n Object.assign(this, state);\r\n }\r\n}\r\n","// @flow\r\nimport type { TailDetails, AppendTail } from '../../core/tail-details.js';\r\nimport ChangeDetails from '../../core/change-details.js';\r\nimport { isString } from '../../core/utils.js';\r\nimport ContinuousTailDetails from '../../core/continuous-tail-details.js';\r\nimport IMask from '../../core/holder.js';\r\n\r\n\r\ntype ChunksTailState = {\r\n chunks: $PropertyType,\r\n from: $PropertyType,\r\n stop?: $PropertyType,\r\n blockIndex?: $PropertyType,\r\n};\r\n\r\nexport default\r\nclass ChunksTailDetails implements TailDetails {\r\n chunks: Array;\r\n from: number;\r\n stop: ?number;\r\n /** */\r\n blockIndex: ?number;\r\n\r\n constructor (chunks?: Array=[], from?: number=0) {\r\n this.chunks = chunks;\r\n this.from = from;\r\n }\r\n\r\n toString (): string {\r\n return this.chunks.map(String).join('');\r\n }\r\n\r\n // $FlowFixMe no ideas\r\n extend (tailChunk: string | String | TailDetails): void {\r\n if (!String(tailChunk)) return;\r\n if (isString(tailChunk)) tailChunk = new ContinuousTailDetails(String(tailChunk));\r\n\r\n const lastChunk = this.chunks[this.chunks.length-1];\r\n const extendLast = lastChunk &&\r\n // if stops are same or tail has no stop\r\n (lastChunk.stop === tailChunk.stop || tailChunk.stop == null) &&\r\n // if tail chunk goes just after last chunk\r\n tailChunk.from === (lastChunk.from + lastChunk.toString().length);\r\n\r\n if (tailChunk instanceof ContinuousTailDetails) {\r\n // check the ability to extend previous chunk\r\n if (extendLast) {\r\n // extend previous chunk\r\n lastChunk.extend(tailChunk.toString());\r\n } else {\r\n // append new chunk\r\n this.chunks.push(tailChunk);\r\n }\r\n } else if (tailChunk instanceof ChunksTailDetails) {\r\n if (tailChunk.stop == null) {\r\n // unwrap floating chunks to parent, keeping `from` pos\r\n let firstTailChunk;\r\n while (tailChunk.chunks.length && tailChunk.chunks[0].stop == null) {\r\n firstTailChunk = tailChunk.chunks.shift();\r\n firstTailChunk.from += tailChunk.from;\r\n this.extend(firstTailChunk);\r\n }\r\n }\r\n\r\n // if tail chunk still has value\r\n if (tailChunk.toString()) {\r\n // if chunks contains stops, then popup stop to container\r\n tailChunk.stop = tailChunk.blockIndex;\r\n this.chunks.push(tailChunk);\r\n }\r\n }\r\n }\r\n\r\n appendTo (masked: AppendTail): ChangeDetails {\r\n // $FlowFixMe\r\n if (!(masked instanceof IMask.MaskedPattern)) {\r\n const tail = new ContinuousTailDetails(this.toString());\r\n return tail.appendTo(masked);\r\n }\r\n\r\n const details = new ChangeDetails();\r\n\r\n for (let ci=0; ci < this.chunks.length && !details.skip; ++ci) {\r\n const chunk = this.chunks[ci];\r\n\r\n const lastBlockIter = masked._mapPosToBlock(masked.value.length);\r\n const stop = chunk.stop;\r\n let chunkBlock;\r\n if (stop != null &&\r\n // if block not found or stop is behind lastBlock\r\n (!lastBlockIter || lastBlockIter.index <= stop)\r\n ) {\r\n if (\r\n chunk instanceof ChunksTailDetails ||\r\n // for continuous block also check if stop is exist\r\n masked._stops.indexOf(stop) >= 0\r\n ) {\r\n details.aggregate(masked._appendPlaceholder(stop));\r\n }\r\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\r\n }\r\n\r\n if (chunkBlock) {\r\n const tailDetails = chunkBlock.appendTail(chunk);\r\n tailDetails.skip = false; // always ignore skip, it will be set on last\r\n details.aggregate(tailDetails);\r\n masked._value += tailDetails.inserted;\r\n\r\n // get not inserted chars\r\n const remainChars = chunk.toString().slice(tailDetails.rawInserted.length);\r\n if (remainChars) details.aggregate(masked.append(remainChars, { tail: true }));\r\n } else {\r\n details.aggregate(masked.append(chunk.toString(), { tail: true }));\r\n }\r\n };\r\n\r\n return details;\r\n }\r\n\r\n get state (): ChunksTailState {\r\n return {\r\n chunks: this.chunks.map(c => c.state),\r\n from: this.from,\r\n stop: this.stop,\r\n blockIndex: this.blockIndex,\r\n };\r\n }\r\n\r\n set state (state: ChunksTailState) {\r\n const { chunks, ...props } = state;\r\n Object.assign(this, props);\r\n this.chunks = chunks.map(cstate => {\r\n const chunk = \"chunks\" in cstate ?\r\n new ChunksTailDetails() :\r\n new ContinuousTailDetails();\r\n // $FlowFixMe already checked above\r\n chunk.state = cstate;\r\n return chunk;\r\n });\r\n }\r\n\r\n shiftBefore (pos: number): string {\r\n if (this.from >= pos || !this.chunks.length) return '';\r\n\r\n const chunkShiftPos = pos - this.from;\r\n let ci=0;\r\n while (ci < this.chunks.length) {\r\n const chunk = this.chunks[ci];\r\n const shiftChar = chunk.shiftBefore(chunkShiftPos);\r\n\r\n if (chunk.toString()) {\r\n // chunk still contains value\r\n // but not shifted - means no more available chars to shift\r\n if (!shiftChar) break;\r\n ++ci;\r\n } else {\r\n // clean if chunk has no value\r\n this.chunks.splice(ci, 1);\r\n }\r\n\r\n if (shiftChar) return shiftChar;\r\n }\r\n\r\n return '';\r\n }\r\n}\r\n","// @flow\r\nimport Masked, {type MaskedOptions} from './base.js';\r\nimport IMask from '../core/holder.js';\r\n\r\n\r\n/** Masking by RegExp */\r\nexport default\r\nclass MaskedRegExp extends Masked {\r\n /**\r\n @override\r\n @param {Object} opts\r\n */\r\n _update (opts: $Shape>) {\r\n if (opts.mask) opts.validate = (value) => value.search(opts.mask) >= 0;\r\n super._update(opts);\r\n }\r\n}\r\n\r\n\r\nIMask.MaskedRegExp = MaskedRegExp;\r\n","// @flow\r\nimport {DIRECTION, type Direction, forceDirection} from '../core/utils.js';\r\nimport ChangeDetails from '../core/change-details.js';\r\nimport Masked, {type AppendFlags, type ExtractFlags, type MaskedOptions, type MaskedState} from './base.js';\r\nimport PatternInputDefinition, {DEFAULT_INPUT_DEFINITIONS, type Definitions} from './pattern/input-definition.js';\r\nimport PatternFixedDefinition from './pattern/fixed-definition.js';\r\nimport { type TailDetails } from '../core/tail-details.js';\r\nimport ChunksTailDetails from './pattern/chunk-tail-details.js';\r\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\r\nimport {type PatternBlock} from './pattern/block.js';\r\nimport createMask from './factory.js';\r\nimport IMask from '../core/holder.js';\r\nimport './regexp.js'; // support for default definitions which are regexp's\r\n\r\n\r\ntype MaskedPatternOptions = {\r\n ...MaskedOptions,\r\n definitions?: $PropertyType,\r\n blocks?: $PropertyType,\r\n placeholderChar?: $PropertyType,\r\n lazy?: $PropertyType,\r\n};\r\n\r\ntype MaskedPatternState = {|\r\n ...MaskedState,\r\n _blocks: Array<*>,\r\n|};\r\n\r\ntype BlockPosData = {\r\n index: number,\r\n offset: number,\r\n};\r\n\r\n/**\r\n Pattern mask\r\n @param {Object} opts\r\n @param {Object} opts.blocks\r\n @param {Object} opts.definitions\r\n @param {string} opts.placeholderChar\r\n @param {boolean} opts.lazy\r\n*/\r\nexport default\r\nclass MaskedPattern extends Masked {\r\n static DEFAULTS: any;\r\n static STOP_CHAR: string;\r\n static ESCAPE_CHAR: string;\r\n static InputDefinition: Class;\r\n static FixedDefinition: Class;\r\n\r\n /** */\r\n blocks: {[string]: MaskedOptions};\r\n /** */\r\n definitions: Definitions;\r\n /** Single char for empty input */\r\n placeholderChar: string;\r\n /** Show placeholder only when needed */\r\n lazy: boolean;\r\n _blocks: Array;\r\n _maskedBlocks: {[string]: Array};\r\n _stops: Array;\r\n\r\n constructor (opts: any={}) { // TODO type $Shape={} does not work\r\n opts.definitions = Object.assign({}, DEFAULT_INPUT_DEFINITIONS, opts.definitions);\r\n super({\r\n ...MaskedPattern.DEFAULTS,\r\n ...opts,\r\n });\r\n }\r\n\r\n /**\r\n @override\r\n @param {Object} opts\r\n */\r\n _update (opts: $Shape={}) {\r\n opts.definitions = Object.assign({}, this.definitions, opts.definitions);\r\n super._update(opts);\r\n this._rebuildMask();\r\n }\r\n\r\n /** */\r\n _rebuildMask () {\r\n const defs = this.definitions;\r\n this._blocks = [];\r\n this._stops = [];\r\n this._maskedBlocks = {};\r\n\r\n let pattern = this.mask;\r\n if (!pattern || !defs) return;\r\n\r\n let unmaskingBlock = false;\r\n let optionalBlock = false;\r\n\r\n for (let i=0; i p.indexOf(bName) === 0);\r\n // order by key length\r\n bNames.sort((a, b) => b.length - a.length);\r\n // use block name with max length\r\n const bName = bNames[0];\r\n if (bName) {\r\n // $FlowFixMe no ideas\r\n const maskedBlock = createMask({\r\n parent: this,\r\n lazy: this.lazy,\r\n placeholderChar: this.placeholderChar,\r\n overwrite: this.overwrite,\r\n ...this.blocks[bName],\r\n });\r\n\r\n if (maskedBlock) {\r\n this._blocks.push(maskedBlock);\r\n\r\n // store block index\r\n if (!this._maskedBlocks[bName]) this._maskedBlocks[bName] = [];\r\n this._maskedBlocks[bName].push(this._blocks.length - 1);\r\n }\r\n\r\n i += bName.length - 1;\r\n continue;\r\n }\r\n }\r\n\r\n let char = pattern[i];\r\n let isInput = char in defs;\r\n\r\n if (char === MaskedPattern.STOP_CHAR) {\r\n this._stops.push(this._blocks.length);\r\n continue;\r\n }\r\n\r\n if (char === '{' || char === '}') {\r\n unmaskingBlock = !unmaskingBlock;\r\n continue;\r\n }\r\n\r\n if (char === '[' || char === ']') {\r\n optionalBlock = !optionalBlock;\r\n continue;\r\n }\r\n\r\n if (char === MaskedPattern.ESCAPE_CHAR) {\r\n ++i;\r\n char = pattern[i];\r\n if (!char) break;\r\n isInput = false;\r\n }\r\n\r\n const def = isInput ?\r\n new PatternInputDefinition({\r\n parent: this,\r\n lazy: this.lazy,\r\n placeholderChar: this.placeholderChar,\r\n mask: defs[char],\r\n isOptional: optionalBlock,\r\n }) :\r\n new PatternFixedDefinition({\r\n char,\r\n isUnmasking: unmaskingBlock,\r\n });\r\n\r\n this._blocks.push(def);\r\n }\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n get state (): MaskedPatternState {\r\n return {\r\n ...super.state,\r\n _blocks: this._blocks.map(b => b.state),\r\n };\r\n }\r\n\r\n set state (state: MaskedPatternState) {\r\n const {_blocks, ...maskedState} = state;\r\n this._blocks.forEach((b, bi) => b.state = _blocks[bi]);\r\n super.state = maskedState;\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n reset () {\r\n super.reset();\r\n this._blocks.forEach(b => b.reset());\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n get isComplete (): boolean {\r\n return this._blocks.every(b => b.isComplete);\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n doCommit () {\r\n this._blocks.forEach(b => b.doCommit());\r\n super.doCommit();\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n get unmaskedValue (): string {\r\n return this._blocks.reduce((str, b) => str += b.unmaskedValue, '');\r\n }\r\n\r\n set unmaskedValue (unmaskedValue: string) {\r\n super.unmaskedValue = unmaskedValue;\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n get value (): string {\r\n // TODO return _value when not in change?\r\n return this._blocks.reduce((str, b) => str += b.value, '');\r\n }\r\n\r\n set value (value: string) {\r\n super.value = value;\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n appendTail (tail: string | String | TailDetails): ChangeDetails {\r\n return super.appendTail(tail).aggregate(this._appendPlaceholder());\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n _appendCharRaw (ch: string, flags: AppendFlags={}): ChangeDetails {\r\n const blockIter = this._mapPosToBlock(this.value.length);\r\n const details = new ChangeDetails();\r\n if (!blockIter) return details;\r\n\r\n for (let bi=blockIter.index; ; ++bi) {\r\n const block = this._blocks[bi];\r\n if (!block) break;\r\n\r\n const blockDetails = block._appendChar(ch, flags);\r\n\r\n const skip = blockDetails.skip;\r\n details.aggregate(blockDetails);\r\n\r\n if (skip || blockDetails.rawInserted) break; // go next char\r\n }\r\n\r\n return details;\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n extractTail (fromPos?: number=0, toPos?: number=this.value.length): ChunksTailDetails {\r\n const chunkTail = new ChunksTailDetails();\r\n if (fromPos === toPos) return chunkTail;\r\n\r\n this._forEachBlocksInRange(fromPos, toPos, (b, bi, bFromPos, bToPos) => {\r\n const blockChunk = b.extractTail(bFromPos, bToPos);\r\n blockChunk.stop = this._findStopBefore(bi);\r\n blockChunk.from = this._blockStartPos(bi);\r\n if (blockChunk instanceof ChunksTailDetails) blockChunk.blockIndex = bi;\r\n\r\n chunkTail.extend(blockChunk);\r\n });\r\n\r\n return chunkTail;\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n extractInput (fromPos?: number=0, toPos?: number=this.value.length, flags: ExtractFlags={}): string {\r\n if (fromPos === toPos) return '';\r\n\r\n let input = '';\r\n\r\n this._forEachBlocksInRange(fromPos, toPos, (b, _, fromPos, toPos) => {\r\n input += b.extractInput(fromPos, toPos, flags);\r\n });\r\n\r\n return input;\r\n }\r\n\r\n _findStopBefore (blockIndex: number): ?number {\r\n let stopBefore;\r\n for (let si=0; si {\r\n if (!b.lazy || toBlockIndex != null) {\r\n // $FlowFixMe `_blocks` may not be present\r\n const args = b._blocks != null ? [b._blocks.length] : [];\r\n const bDetails = b._appendPlaceholder(...args);\r\n this._value += bDetails.inserted;\r\n details.aggregate(bDetails);\r\n }\r\n });\r\n\r\n return details;\r\n }\r\n\r\n /** Finds block in pos */\r\n _mapPosToBlock (pos: number): ?BlockPosData {\r\n let accVal = '';\r\n for (let bi=0; bi pos += b.value.length, 0);\r\n }\r\n\r\n /** */\r\n _forEachBlocksInRange (fromPos: number, toPos: number=this.value.length, fn: (block: PatternBlock, blockIndex: number, fromPos: number, toPos: number) => void) {\r\n const fromBlockIter = this._mapPosToBlock(fromPos);\r\n\r\n if (fromBlockIter) {\r\n const toBlockIter = this._mapPosToBlock(toPos);\r\n // process first block\r\n const isSameBlock = toBlockIter && fromBlockIter.index === toBlockIter.index;\r\n const fromBlockStartPos = fromBlockIter.offset;\r\n const fromBlockEndPos = toBlockIter && isSameBlock ?\r\n toBlockIter.offset :\r\n this._blocks[fromBlockIter.index].value.length;\r\n fn(this._blocks[fromBlockIter.index], fromBlockIter.index, fromBlockStartPos, fromBlockEndPos);\r\n\r\n if (toBlockIter && !isSameBlock) {\r\n // process intermediate blocks\r\n for (let bi=fromBlockIter.index+1; bi {\r\n removeDetails.aggregate(b.remove(bFromPos, bToPos));\r\n });\r\n return removeDetails;\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n nearestInputPos (cursorPos: number, direction: Direction=DIRECTION.NONE): number {\r\n // TODO refactor - extract alignblock\r\n\r\n const beginBlockData = this._mapPosToBlock(cursorPos) || {index: 0, offset: 0};\r\n const {\r\n offset: beginBlockOffset,\r\n index: beginBlockIndex,\r\n } = beginBlockData;\r\n const beginBlock = this._blocks[beginBlockIndex];\r\n\r\n if (!beginBlock) return cursorPos;\r\n\r\n let beginBlockCursorPos = beginBlockOffset;\r\n // if position inside block - try to adjust it\r\n if (beginBlockCursorPos !== 0 && beginBlockCursorPos < beginBlock.value.length) {\r\n beginBlockCursorPos = beginBlock.nearestInputPos(beginBlockOffset, forceDirection(direction));\r\n }\r\n\r\n const cursorAtRight = beginBlockCursorPos === beginBlock.value.length;\r\n const cursorAtLeft = beginBlockCursorPos === 0;\r\n\r\n // cursor is INSIDE first block (not at bounds)\r\n if (!cursorAtLeft && !cursorAtRight) return this._blockStartPos(beginBlockIndex) + beginBlockCursorPos;\r\n\r\n const searchBlockIndex = cursorAtRight ? beginBlockIndex + 1 : beginBlockIndex;\r\n\r\n if (direction === DIRECTION.NONE) {\r\n // NONE direction used to calculate start input position if no chars were removed\r\n // FOR NONE:\r\n // -\r\n // input|any\r\n // ->\r\n // any|input\r\n // <-\r\n // filled-input|any\r\n\r\n // check if first block at left is input\r\n if (searchBlockIndex > 0) {\r\n const blockIndexAtLeft = searchBlockIndex-1;\r\n const blockAtLeft = this._blocks[blockIndexAtLeft];\r\n const blockInputPos = blockAtLeft.nearestInputPos(0, DIRECTION.NONE);\r\n // is input\r\n if (!blockAtLeft.value.length || blockInputPos !== blockAtLeft.value.length) {\r\n return this._blockStartPos(searchBlockIndex);\r\n }\r\n }\r\n\r\n // ->\r\n let firstInputAtRight = searchBlockIndex;\r\n for (let bi=firstInputAtRight; bi < this._blocks.length; ++bi) {\r\n const blockAtRight = this._blocks[bi];\r\n const blockInputPos = blockAtRight.nearestInputPos(0, DIRECTION.NONE);\r\n if (!blockAtRight.value.length || blockInputPos !== blockAtRight.value.length) {\r\n return this._blockStartPos(bi) + blockInputPos;\r\n }\r\n }\r\n\r\n // <-\r\n // find first non-fixed symbol\r\n for (let bi=searchBlockIndex-1; bi >= 0; --bi) {\r\n const block = this._blocks[bi];\r\n const blockInputPos = block.nearestInputPos(0, DIRECTION.NONE);\r\n // is input\r\n if (!block.value.length || blockInputPos !== block.value.length) {\r\n return this._blockStartPos(bi) + block.value.length;\r\n }\r\n }\r\n\r\n return cursorPos;\r\n }\r\n\r\n if (direction === DIRECTION.LEFT || direction === DIRECTION.FORCE_LEFT) {\r\n // -\r\n // any|filled-input\r\n // <-\r\n // any|first not empty is not-len-aligned\r\n // not-0-aligned|any\r\n // ->\r\n // any|not-len-aligned or end\r\n\r\n // check if first block at right is filled input\r\n let firstFilledBlockIndexAtRight;\r\n for (let bi=searchBlockIndex; bi < this._blocks.length; ++bi) {\r\n if (this._blocks[bi].value) {\r\n firstFilledBlockIndexAtRight = bi;\r\n break;\r\n }\r\n }\r\n if (firstFilledBlockIndexAtRight != null) {\r\n const filledBlock = this._blocks[firstFilledBlockIndexAtRight];\r\n const blockInputPos = filledBlock.nearestInputPos(0, DIRECTION.RIGHT);\r\n if (blockInputPos === 0 && filledBlock.unmaskedValue.length) {\r\n // filled block is input\r\n return this._blockStartPos(firstFilledBlockIndexAtRight) + blockInputPos;\r\n }\r\n }\r\n\r\n // <-\r\n // find this vars\r\n let firstFilledInputBlockIndex = -1;\r\n let firstEmptyInputBlockIndex; // TODO consider nested empty inputs\r\n for (let bi=searchBlockIndex-1; bi >= 0; --bi) {\r\n const block = this._blocks[bi];\r\n const blockInputPos = block.nearestInputPos(block.value.length, DIRECTION.FORCE_LEFT);\r\n if (!block.value || blockInputPos !== 0) firstEmptyInputBlockIndex = bi;\r\n if (blockInputPos !== 0) {\r\n if (blockInputPos !== block.value.length) {\r\n // aligned inside block - return immediately\r\n return this._blockStartPos(bi) + blockInputPos;\r\n } else {\r\n // found filled\r\n firstFilledInputBlockIndex = bi;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (direction === DIRECTION.LEFT) {\r\n // try find first empty input before start searching position only when not forced\r\n for (let bi=firstFilledInputBlockIndex+1; bi <= Math.min(searchBlockIndex, this._blocks.length-1); ++bi) {\r\n const block = this._blocks[bi];\r\n const blockInputPos = block.nearestInputPos(0, DIRECTION.NONE);\r\n const blockAlignedPos = this._blockStartPos(bi) + blockInputPos;\r\n\r\n if (blockAlignedPos > cursorPos) break;\r\n // if block is not lazy input\r\n if (blockInputPos !== block.value.length) return blockAlignedPos;\r\n }\r\n }\r\n\r\n // process overflow\r\n if (firstFilledInputBlockIndex >= 0) {\r\n return this._blockStartPos(firstFilledInputBlockIndex) + this._blocks[firstFilledInputBlockIndex].value.length;\r\n }\r\n\r\n // for lazy if has aligned left inside fixed and has came to the start - use start position\r\n if (\r\n direction === DIRECTION.FORCE_LEFT ||\r\n this.lazy && !this.extractInput() && !isInput(this._blocks[searchBlockIndex])\r\n ) {\r\n return 0;\r\n }\r\n\r\n if (firstEmptyInputBlockIndex != null) {\r\n return this._blockStartPos(firstEmptyInputBlockIndex);\r\n }\r\n\r\n // find first input\r\n for (let bi=searchBlockIndex; bi < this._blocks.length; ++bi) {\r\n const block = this._blocks[bi];\r\n const blockInputPos = block.nearestInputPos(0, DIRECTION.NONE);\r\n // is input\r\n if (!block.value.length || blockInputPos !== block.value.length) {\r\n return this._blockStartPos(bi) + blockInputPos;\r\n }\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n if (direction === DIRECTION.RIGHT || direction === DIRECTION.FORCE_RIGHT) {\r\n // ->\r\n // any|not-len-aligned and filled\r\n // any|not-len-aligned\r\n // <-\r\n // not-0-aligned or start|any\r\n let firstInputBlockAlignedIndex: ?number;\r\n let firstInputBlockAlignedPos: ?number;\r\n for (let bi=searchBlockIndex; bi < this._blocks.length; ++bi) {\r\n const block = this._blocks[bi];\r\n const blockInputPos = block.nearestInputPos(0, DIRECTION.NONE);\r\n if (blockInputPos !== block.value.length) {\r\n firstInputBlockAlignedPos = this._blockStartPos(bi) + blockInputPos;\r\n firstInputBlockAlignedIndex = bi;\r\n break;\r\n }\r\n }\r\n\r\n if (firstInputBlockAlignedIndex != null && firstInputBlockAlignedPos != null) {\r\n for (let bi=firstInputBlockAlignedIndex; bi < this._blocks.length; ++bi) {\r\n const block = this._blocks[bi];\r\n const blockInputPos = block.nearestInputPos(0, DIRECTION.FORCE_RIGHT);\r\n if (blockInputPos !== block.value.length) {\r\n return this._blockStartPos(bi) + blockInputPos;\r\n }\r\n }\r\n return direction === DIRECTION.FORCE_RIGHT ?\r\n this.value.length :\r\n firstInputBlockAlignedPos;\r\n }\r\n\r\n for (let bi=Math.min(searchBlockIndex, this._blocks.length-1); bi >= 0; --bi) {\r\n const block = this._blocks[bi];\r\n const blockInputPos = block.nearestInputPos(block.value.length, DIRECTION.LEFT);\r\n if (blockInputPos !== 0) {\r\n const alignedPos = this._blockStartPos(bi) + blockInputPos;\r\n if (alignedPos >= cursorPos) return alignedPos;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return cursorPos;\r\n }\r\n\r\n /** Get block by name */\r\n maskedBlock (name: string): ?PatternBlock {\r\n return this.maskedBlocks(name)[0];\r\n }\r\n\r\n /** Get all blocks by name */\r\n maskedBlocks (name: string): Array {\r\n const indices = this._maskedBlocks[name];\r\n if (!indices) return [];\r\n return indices.map(gi => this._blocks[gi]);\r\n }\r\n}\r\nMaskedPattern.DEFAULTS = {\r\n lazy: true,\r\n placeholderChar: '_'\r\n};\r\nMaskedPattern.STOP_CHAR = '`';\r\nMaskedPattern.ESCAPE_CHAR = '\\\\';\r\nMaskedPattern.InputDefinition = PatternInputDefinition;\r\nMaskedPattern.FixedDefinition = PatternFixedDefinition;\r\n\r\nfunction isInput (block: PatternBlock): boolean {\r\n if (!block) return false;\r\n\r\n const value = block.value;\r\n return !value || block.nearestInputPos(0, DIRECTION.NONE) !== value.length;\r\n}\r\n\r\n\r\nIMask.MaskedPattern = MaskedPattern;\r\n","// @flow\r\nimport MaskedPattern from './pattern.js';\r\nimport { type AppendFlags } from './base.js';\r\nimport IMask from '../core/holder.js';\r\n\r\n\r\n/** Pattern which accepts ranges */\r\nexport default\r\nclass MaskedRange extends MaskedPattern {\r\n /**\r\n Optionally sets max length of pattern.\r\n Used when pattern length is longer then `to` param length. Pads zeros at start in this case.\r\n */\r\n maxLength: number;\r\n /** Min bound */\r\n from: number;\r\n /** Max bound */\r\n to: number;\r\n /** */\r\n autofix: boolean;\r\n\r\n get _matchFrom (): number {\r\n return this.maxLength - String(this.from).length;\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n _update (opts: any) { // TODO type\r\n opts = {\r\n to: this.to || 0,\r\n from: this.from || 0,\r\n ...opts,\r\n };\r\n\r\n let maxLength = String(opts.to).length;\r\n if (opts.maxLength != null) maxLength = Math.max(maxLength, opts.maxLength);\r\n opts.maxLength = maxLength;\r\n\r\n const fromStr = String(opts.from).padStart(maxLength, '0');\r\n const toStr = String(opts.to).padStart(maxLength, '0');\r\n let sameCharsCount = 0;\r\n while (sameCharsCount < toStr.length && toStr[sameCharsCount] === fromStr[sameCharsCount]) ++sameCharsCount;\r\n opts.mask = toStr.slice(0, sameCharsCount).replace(/0/g, '\\\\0') + '0'.repeat(maxLength - sameCharsCount);\r\n\r\n super._update(opts);\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n get isComplete (): boolean {\r\n return super.isComplete && Boolean(this.value);\r\n }\r\n\r\n boundaries (str: string): [string, string] {\r\n let minstr = '';\r\n let maxstr = '';\r\n\r\n const [, placeholder, num] = str.match(/^(\\D*)(\\d*)(\\D*)/) || [];\r\n if (num) {\r\n minstr = '0'.repeat(placeholder.length) + num;\r\n maxstr = '9'.repeat(placeholder.length) + num;\r\n }\r\n minstr = minstr.padEnd(this.maxLength, '0');\r\n maxstr = maxstr.padEnd(this.maxLength, '9');\r\n\r\n return [minstr, maxstr];\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n doPrepare (str: string, flags: AppendFlags={}): string {\r\n str = super.doPrepare(str, flags).replace(/\\D/g, '');\r\n if (!this.autofix) return str;\r\n\r\n const fromStr = String(this.from).padStart(this.maxLength, '0');\r\n const toStr = String(this.to).padStart(this.maxLength, '0');\r\n\r\n const val = this.value;\r\n let prepStr = '';\r\n for (let ci=0; ci this.to) prepStr += toStr[nextVal.length - 1];\r\n else prepStr += str[ci];\r\n }\r\n\r\n return prepStr;\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n doValidate (...args: *): boolean {\r\n const str = this.value;\r\n\r\n const firstNonZero = str.search(/[^0]/);\r\n if (firstNonZero === -1 && str.length <= this._matchFrom) return true;\r\n\r\n const [minstr, maxstr] = this.boundaries(str);\r\n\r\n return this.from <= Number(maxstr) && Number(minstr) <= this.to &&\r\n super.doValidate(...args);\r\n }\r\n}\r\n\r\n\r\nIMask.MaskedRange = MaskedRange;\r\n","// @flow\r\nimport MaskedPattern from './pattern.js';\r\nimport MaskedRange from './range.js';\r\nimport IMask from '../core/holder.js';\r\n\r\n\r\n/** Date mask */\r\nexport default\r\nclass MaskedDate extends MaskedPattern {\r\n static GET_DEFAULT_BLOCKS: () => {[string]: any};\r\n static DEFAULTS: any;\r\n\r\n /** Pattern mask for date according to {@link MaskedDate#format} */\r\n pattern: string;\r\n /** Start date */\r\n min: ?Date;\r\n /** End date */\r\n max: ?Date;\r\n /** */\r\n autofix: boolean;\r\n\r\n /**\r\n @param {Object} opts\r\n */\r\n constructor (opts: any) {\r\n super({\r\n ...MaskedDate.DEFAULTS,\r\n ...opts\r\n });\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n _update (opts: any) {\r\n if (opts.mask === Date) delete opts.mask;\r\n if (opts.pattern) opts.mask = opts.pattern;\r\n\r\n const blocks = opts.blocks;\r\n opts.blocks = Object.assign({}, MaskedDate.GET_DEFAULT_BLOCKS());\r\n // adjust year block\r\n if (opts.min) opts.blocks.Y.from = opts.min.getFullYear();\r\n if (opts.max) opts.blocks.Y.to = opts.max.getFullYear();\r\n if (opts.min && opts.max && opts.blocks.Y.from === opts.blocks.Y.to\r\n ) {\r\n opts.blocks.m.from = opts.min.getMonth() + 1;\r\n opts.blocks.m.to = opts.max.getMonth() + 1;\r\n\r\n if (opts.blocks.m.from === opts.blocks.m.to) {\r\n opts.blocks.d.from = opts.min.getDate();\r\n opts.blocks.d.to = opts.max.getDate();\r\n }\r\n }\r\n Object.assign(opts.blocks, blocks);\r\n\r\n // add autofix\r\n Object.keys(opts.blocks).forEach(bk => {\r\n const b = opts.blocks[bk];\r\n if (!('autofix' in b)) b.autofix = opts.autofix;\r\n });\r\n\r\n super._update(opts);\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n doValidate (...args: *): boolean {\r\n const date = this.date;\r\n\r\n return super.doValidate(...args) &&\r\n (!this.isComplete ||\r\n this.isDateExist(this.value) && date != null &&\r\n (this.min == null || this.min <= date) &&\r\n (this.max == null || date <= this.max));\r\n }\r\n\r\n /** Checks if date is exists */\r\n isDateExist (str: string): boolean {\r\n return this.format(this.parse(str, this), this).indexOf(str) >= 0;\r\n }\r\n\r\n /** Parsed Date */\r\n get date (): ?Date {\r\n return this.typedValue;\r\n }\r\n set date (date: Date) {\r\n this.typedValue = date;\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n get typedValue (): ?Date {\r\n return this.isComplete ? super.typedValue : null;\r\n }\r\n set typedValue (value: Date) {\r\n super.typedValue = value;\r\n }\r\n}\r\nMaskedDate.DEFAULTS = {\r\n pattern: 'd{.}`m{.}`Y',\r\n format: date => {\r\n const day = String(date.getDate()).padStart(2, '0');\r\n const month = String(date.getMonth() + 1).padStart(2, '0');\r\n const year = date.getFullYear();\r\n\r\n return [day, month, year].join('.');\r\n },\r\n parse: str => {\r\n const [day, month, year] = str.split('.');\r\n return new Date(year, month - 1, day);\r\n },\r\n};\r\nMaskedDate.GET_DEFAULT_BLOCKS = () => ({\r\n d: {\r\n mask: MaskedRange,\r\n from: 1,\r\n to: 31,\r\n maxLength: 2,\r\n },\r\n m: {\r\n mask: MaskedRange,\r\n from: 1,\r\n to: 12,\r\n maxLength: 2,\r\n },\r\n Y: {\r\n mask: MaskedRange,\r\n from: 1900,\r\n to: 9999,\r\n }\r\n});\r\n\r\n\r\nIMask.MaskedDate = MaskedDate;\r\n","// @flow\r\nimport IMask from '../core/holder.js';\r\n\r\n\r\nexport\r\ntype ElementEvent =\r\n 'selectionChange' |\r\n 'input' |\r\n 'drop' |\r\n 'click' |\r\n 'focus' |\r\n 'commit';\r\n\r\n/**\r\n Generic element API to use with mask\r\n @interface\r\n*/\r\nexport default\r\nclass MaskElement {\r\n /** */\r\n +_unsafeSelectionStart: number;\r\n /** */\r\n +_unsafeSelectionEnd: number;\r\n /** */\r\n value: string;\r\n\r\n /** Safely returns selection start */\r\n get selectionStart (): number {\r\n let start;\r\n try {\r\n start = this._unsafeSelectionStart;\r\n } catch (e) {}\r\n\r\n return start != null ?\r\n start :\r\n this.value.length;\r\n }\r\n\r\n /** Safely returns selection end */\r\n get selectionEnd (): number {\r\n let end;\r\n try {\r\n end = this._unsafeSelectionEnd;\r\n } catch (e) {}\r\n\r\n return end != null ?\r\n end :\r\n this.value.length;\r\n }\r\n\r\n /** Safely sets element selection */\r\n select (start: number, end: number) {\r\n if (start == null || end == null ||\r\n start === this.selectionStart && end === this.selectionEnd) return;\r\n\r\n try {\r\n this._unsafeSelect(start, end);\r\n } catch (e) {}\r\n }\r\n\r\n /** Should be overriden in subclasses */\r\n _unsafeSelect (start: number, end: number): void {}\r\n /** Should be overriden in subclasses */\r\n get isActive (): boolean { return false; }\r\n /** Should be overriden in subclasses */\r\n bindEvents (handlers: {[ElementEvent]: Function}) {}\r\n /** Should be overriden in subclasses */\r\n unbindEvents (): void {}\r\n}\r\n\r\n\r\nIMask.MaskElement = MaskElement;\r\n","// @flow\r\nimport MaskElement, {type ElementEvent} from './mask-element.js';\r\nimport IMask from '../core/holder.js';\r\n\r\n\r\n/** Bridge between HTMLElement and {@link Masked} */\r\nexport default\r\nclass HTMLMaskElement extends MaskElement {\r\n /** Mapping between HTMLElement events and mask internal events */\r\n static EVENTS_MAP: {[ElementEvent]: string};\r\n /** HTMLElement to use mask on */\r\n input: HTMLTextAreaElement | HTMLInputElement;\r\n _handlers: {[string]: Function};\r\n\r\n /**\r\n @param {HTMLInputElement|HTMLTextAreaElement} input\r\n */\r\n constructor (input: HTMLTextAreaElement | HTMLInputElement) {\r\n super();\r\n this.input = input;\r\n this._handlers = {};\r\n }\r\n\r\n /** */\r\n // $FlowFixMe https://github.com/facebook/flow/issues/2839\r\n get rootElement (): HTMLDocument {\r\n return this.input.getRootNode\r\n ? this.input.getRootNode()\r\n : document;\r\n }\r\n\r\n /**\r\n Is element in focus\r\n @readonly\r\n */\r\n get isActive (): boolean {\r\n //$FlowFixMe\r\n return this.input === this.rootElement.activeElement;\r\n }\r\n\r\n /**\r\n Returns HTMLElement selection start\r\n @override\r\n */\r\n get _unsafeSelectionStart (): number {\r\n return this.input.selectionStart;\r\n }\r\n\r\n /**\r\n Returns HTMLElement selection end\r\n @override\r\n */\r\n get _unsafeSelectionEnd (): number {\r\n return this.input.selectionEnd;\r\n }\r\n\r\n /**\r\n Sets HTMLElement selection\r\n @override\r\n */\r\n _unsafeSelect (start: number, end: number) {\r\n this.input.setSelectionRange(start, end);\r\n }\r\n\r\n /**\r\n HTMLElement value\r\n @override\r\n */\r\n get value (): string {\r\n return this.input.value;\r\n }\r\n set value (value: string) {\r\n this.input.value = value;\r\n }\r\n\r\n /**\r\n Binds HTMLElement events to mask internal events\r\n @override\r\n */\r\n bindEvents (handlers: {[ElementEvent]: Function}) {\r\n Object.keys(handlers)\r\n .forEach(event => this._toggleEventHandler(HTMLMaskElement.EVENTS_MAP[event], handlers[event]));\r\n }\r\n\r\n /**\r\n Unbinds HTMLElement events to mask internal events\r\n @override\r\n */\r\n unbindEvents () {\r\n Object.keys(this._handlers)\r\n .forEach(event => this._toggleEventHandler(event));\r\n }\r\n\r\n /** */\r\n _toggleEventHandler (event: string, handler?: Function): void {\r\n if (this._handlers[event]) {\r\n this.input.removeEventListener(event, this._handlers[event]);\r\n delete this._handlers[event];\r\n }\r\n\r\n if (handler) {\r\n this.input.addEventListener(event, handler);\r\n this._handlers[event] = handler;\r\n }\r\n }\r\n}\r\nHTMLMaskElement.EVENTS_MAP = {\r\n selectionChange: 'keydown',\r\n input: 'input',\r\n drop: 'drop',\r\n click: 'click',\r\n focus: 'focus',\r\n commit: 'blur',\r\n};\r\n\r\n\r\nIMask.HTMLMaskElement = HTMLMaskElement;\r\n","// @flow\r\nimport HTMLMaskElement from './html-mask-element.js';\r\nimport IMask from '../core/holder.js';\r\n\r\n\r\nexport default\r\nclass HTMLContenteditableMaskElement extends HTMLMaskElement {\r\n /**\r\n Returns HTMLElement selection start\r\n @override\r\n */\r\n get _unsafeSelectionStart (): number {\r\n const root = this.rootElement;\r\n const selection = root.getSelection && root.getSelection();\r\n return selection && selection.anchorOffset;\r\n }\r\n\r\n /**\r\n Returns HTMLElement selection end\r\n @override\r\n */\r\n get _unsafeSelectionEnd (): number {\r\n const root = this.rootElement;\r\n const selection = root.getSelection && root.getSelection();\r\n return selection && (this._unsafeSelectionStart + String(selection).length);\r\n }\r\n\r\n /**\r\n Sets HTMLElement selection\r\n @override\r\n */\r\n _unsafeSelect (start: number, end: number) {\r\n if (!this.rootElement.createRange) return;\r\n\r\n const range = this.rootElement.createRange();\r\n range.setStart(this.input.firstChild || this.input, start);\r\n range.setEnd(this.input.lastChild || this.input, end);\r\n const root = this.rootElement;\r\n const selection = root.getSelection && root.getSelection();\r\n if (selection) {\r\n selection.removeAllRanges();\r\n selection.addRange(range);\r\n }\r\n }\r\n\r\n /**\r\n HTMLElement value\r\n @override\r\n */\r\n get value (): string {\r\n // $FlowFixMe\r\n return this.input.textContent;\r\n }\r\n set value (value: string) {\r\n this.input.textContent = value;\r\n }\r\n}\r\n\r\n\r\nIMask.HTMLContenteditableMaskElement = HTMLContenteditableMaskElement;\r\n","// @flow\r\nimport {objectIncludes, DIRECTION, type Selection} from '../core/utils.js';\r\nimport ActionDetails from '../core/action-details.js';\r\nimport MaskedDate from '../masked/date.js';\r\nimport createMask, {maskedClass} from '../masked/factory.js';\r\nimport type Masked from '../masked/base.js';\r\nimport {type Mask} from '../masked/base.js';\r\nimport MaskElement from './mask-element.js';\r\nimport HTMLMaskElement from './html-mask-element.js';\r\nimport HTMLContenteditableMaskElement from './html-contenteditable-mask-element.js';\r\nimport IMask from '../core/holder.js';\r\n\r\n\r\n/** Listens to element events and controls changes between element and {@link Masked} */\r\nexport default\r\nclass InputMask {\r\n /**\r\n View element\r\n @readonly\r\n */\r\n el: MaskElement;\r\n\r\n /**\r\n Internal {@link Masked} model\r\n @readonly\r\n */\r\n masked: Masked<*>;\r\n alignCursor: () => void;\r\n alignCursorFriendly: () => void;\r\n\r\n _listeners: {[string]: Array};\r\n _value: string;\r\n _changingCursorPos: number;\r\n _unmaskedValue: string;\r\n _saveSelection: (?Event) => void;\r\n _selection: Selection;\r\n _onInput: () => void;\r\n _onChange: () => void;\r\n _onDrop: (Event) => void;\r\n _onFocus: (Event) => void;\r\n _onClick: (Event) => void;\r\n _cursorChanging: ?TimeoutID;\r\n _inputEvent: ?InputEvent;\r\n\r\n /**\r\n @param {MaskElement|HTMLInputElement|HTMLTextAreaElement} el\r\n @param {Object} opts\r\n */\r\n constructor (el: MaskElement | HTMLTextAreaElement | HTMLInputElement, opts: {[string]: any}) {\r\n this.el =\r\n (el instanceof MaskElement) ? el :\r\n (el.isContentEditable && el.tagName !== 'INPUT' && el.tagName !== 'TEXTAREA') ? new HTMLContenteditableMaskElement(el) :\r\n new HTMLMaskElement(el);\r\n this.masked = createMask(opts);\r\n\r\n this._listeners = {};\r\n this._value = '';\r\n this._unmaskedValue = '';\r\n\r\n this._saveSelection = this._saveSelection.bind(this);\r\n this._onInput = this._onInput.bind(this);\r\n this._onChange = this._onChange.bind(this);\r\n this._onDrop = this._onDrop.bind(this);\r\n this._onFocus = this._onFocus.bind(this);\r\n this._onClick = this._onClick.bind(this);\r\n this.alignCursor = this.alignCursor.bind(this);\r\n this.alignCursorFriendly = this.alignCursorFriendly.bind(this);\r\n\r\n this._bindEvents();\r\n\r\n // refresh\r\n this.updateValue();\r\n this._onChange();\r\n }\r\n\r\n /** Read or update mask */\r\n get mask (): Mask {\r\n return this.masked.mask;\r\n }\r\n\r\n maskEquals (mask: Mask): boolean {\r\n return mask == null ||\r\n mask === this.masked.mask ||\r\n mask === Date && this.masked instanceof MaskedDate;\r\n }\r\n\r\n set mask (mask: Mask) {\r\n if (this.maskEquals(mask)) return;\r\n\r\n if (!(mask instanceof IMask.Masked) && this.masked.constructor === maskedClass(mask)) {\r\n this.masked.updateOptions({mask});\r\n return;\r\n }\r\n\r\n const masked = createMask({mask});\r\n masked.unmaskedValue = this.masked.unmaskedValue;\r\n this.masked = masked;\r\n }\r\n\r\n /** Raw value */\r\n get value (): string {\r\n return this._value;\r\n }\r\n\r\n set value (str: string) {\r\n this.masked.value = str;\r\n this.updateControl();\r\n this.alignCursor();\r\n }\r\n\r\n /** Unmasked value */\r\n get unmaskedValue (): string {\r\n return this._unmaskedValue;\r\n }\r\n\r\n set unmaskedValue (str: string) {\r\n this.masked.unmaskedValue = str;\r\n this.updateControl();\r\n this.alignCursor();\r\n }\r\n\r\n /** Typed unmasked value */\r\n get typedValue (): any {\r\n return this.masked.typedValue;\r\n }\r\n\r\n set typedValue (val: any) {\r\n this.masked.typedValue = val;\r\n this.updateControl();\r\n this.alignCursor();\r\n }\r\n\r\n /**\r\n Starts listening to element events\r\n @protected\r\n */\r\n _bindEvents () {\r\n this.el.bindEvents({\r\n selectionChange: this._saveSelection,\r\n input: this._onInput,\r\n drop: this._onDrop,\r\n click: this._onClick,\r\n focus: this._onFocus,\r\n commit: this._onChange,\r\n });\r\n }\r\n\r\n /**\r\n Stops listening to element events\r\n @protected\r\n */\r\n _unbindEvents () {\r\n if (this.el) this.el.unbindEvents();\r\n }\r\n\r\n /**\r\n Fires custom event\r\n @protected\r\n */\r\n _fireEvent (ev: string, ...args: *) {\r\n const listeners = this._listeners[ev];\r\n if (!listeners) return;\r\n\r\n listeners.forEach(l => l(...args));\r\n }\r\n\r\n /**\r\n Current selection start\r\n @readonly\r\n */\r\n get selectionStart (): number {\r\n return this._cursorChanging ?\r\n this._changingCursorPos :\r\n\r\n this.el.selectionStart;\r\n }\r\n\r\n /** Current cursor position */\r\n get cursorPos (): number {\r\n return this._cursorChanging ?\r\n this._changingCursorPos :\r\n\r\n this.el.selectionEnd;\r\n }\r\n set cursorPos (pos: number) {\r\n if (!this.el || !this.el.isActive) return;\r\n\r\n this.el.select(pos, pos);\r\n this._saveSelection();\r\n }\r\n\r\n /**\r\n Stores current selection\r\n @protected\r\n */\r\n _saveSelection (/* ev */) {\r\n if (this.value !== this.el.value) {\r\n console.warn('Element value was changed outside of mask. Syncronize mask using `mask.updateValue()` to work properly.'); // eslint-disable-line no-console\r\n }\r\n this._selection = {\r\n start: this.selectionStart,\r\n end: this.cursorPos\r\n };\r\n }\r\n\r\n /** Syncronizes model value from view */\r\n updateValue () {\r\n this.masked.value = this.el.value;\r\n this._value = this.masked.value;\r\n }\r\n\r\n /** Syncronizes view from model value, fires change events */\r\n updateControl () {\r\n const newUnmaskedValue = this.masked.unmaskedValue;\r\n const newValue = this.masked.value;\r\n const isChanged = (this.unmaskedValue !== newUnmaskedValue ||\r\n this.value !== newValue);\r\n\r\n this._unmaskedValue = newUnmaskedValue;\r\n this._value = newValue;\r\n\r\n if (this.el.value !== newValue) this.el.value = newValue;\r\n if (isChanged) this._fireChangeEvents();\r\n }\r\n\r\n /** Updates options with deep equal check, recreates @{link Masked} model if mask type changes */\r\n updateOptions (opts: {[string]: any}) {\r\n const { mask, ...restOpts } = opts;\r\n\r\n const updateMask = !this.maskEquals(mask);\r\n const updateOpts = !objectIncludes(this.masked, restOpts);\r\n\r\n if (updateMask) this.mask = mask;\r\n if (updateOpts) this.masked.updateOptions(restOpts);\r\n\r\n if (updateMask || updateOpts) this.updateControl();\r\n }\r\n\r\n /** Updates cursor */\r\n updateCursor (cursorPos: number) {\r\n if (cursorPos == null) return;\r\n this.cursorPos = cursorPos;\r\n\r\n // also queue change cursor for mobile browsers\r\n this._delayUpdateCursor(cursorPos);\r\n }\r\n\r\n /**\r\n Delays cursor update to support mobile browsers\r\n @private\r\n */\r\n _delayUpdateCursor (cursorPos: number) {\r\n this._abortUpdateCursor();\r\n this._changingCursorPos = cursorPos;\r\n this._cursorChanging = setTimeout(() => {\r\n if (!this.el) return; // if was destroyed\r\n this.cursorPos = this._changingCursorPos;\r\n this._abortUpdateCursor();\r\n }, 10);\r\n }\r\n\r\n /**\r\n Fires custom events\r\n @protected\r\n */\r\n _fireChangeEvents () {\r\n this._fireEvent('accept', this._inputEvent);\r\n if (this.masked.isComplete) this._fireEvent('complete', this._inputEvent);\r\n }\r\n\r\n /**\r\n Aborts delayed cursor update\r\n @private\r\n */\r\n _abortUpdateCursor () {\r\n if (this._cursorChanging) {\r\n clearTimeout(this._cursorChanging);\r\n delete this._cursorChanging;\r\n }\r\n }\r\n\r\n /** Aligns cursor to nearest available position */\r\n alignCursor () {\r\n this.cursorPos = this.masked.nearestInputPos(this.cursorPos, DIRECTION.LEFT);\r\n }\r\n\r\n /** Aligns cursor only if selection is empty */\r\n alignCursorFriendly () {\r\n if (this.selectionStart !== this.cursorPos) return; // skip if range is selected\r\n this.alignCursor();\r\n }\r\n\r\n /** Adds listener on custom event */\r\n on (ev: string, handler: Function): this {\r\n if (!this._listeners[ev]) this._listeners[ev] = [];\r\n this._listeners[ev].push(handler);\r\n return this;\r\n }\r\n\r\n /** Removes custom event listener */\r\n off (ev: string, handler: Function): this {\r\n if (!this._listeners[ev]) return this;\r\n if (!handler) {\r\n delete this._listeners[ev];\r\n return this;\r\n }\r\n const hIndex = this._listeners[ev].indexOf(handler);\r\n if (hIndex >= 0) this._listeners[ev].splice(hIndex, 1);\r\n return this;\r\n }\r\n\r\n /** Handles view input event */\r\n _onInput (e: InputEvent): void {\r\n this._inputEvent = e;\r\n this._abortUpdateCursor();\r\n\r\n // fix strange IE behavior\r\n if (!this._selection) return this.updateValue();\r\n\r\n const details = new ActionDetails(\r\n // new state\r\n this.el.value, this.cursorPos,\r\n // old state\r\n this.value, this._selection);\r\n\r\n const oldRawValue = this.masked.rawInputValue;\r\n\r\n const offset = this.masked.splice(\r\n details.startChangePos,\r\n details.removed.length,\r\n details.inserted,\r\n details.removeDirection).offset;\r\n\r\n // force align in remove direction only if no input chars were removed\r\n // otherwise we still need to align with NONE (to get out from fixed symbols for instance)\r\n const removeDirection = oldRawValue === this.masked.rawInputValue ?\r\n details.removeDirection :\r\n DIRECTION.NONE;\r\n\r\n const cursorPos = this.masked.nearestInputPos(\r\n details.startChangePos + offset,\r\n removeDirection,\r\n );\r\n\r\n this.updateControl();\r\n this.updateCursor(cursorPos);\r\n delete this._inputEvent;\r\n }\r\n\r\n /** Handles view change event and commits model value */\r\n _onChange () {\r\n if (this.value !== this.el.value) {\r\n this.updateValue();\r\n }\r\n this.masked.doCommit();\r\n this.updateControl();\r\n this._saveSelection();\r\n }\r\n\r\n /** Handles view drop event, prevents by default */\r\n _onDrop (ev: Event) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n }\r\n\r\n /** Restore last selection on focus */\r\n _onFocus (ev: Event) {\r\n this.alignCursorFriendly();\r\n }\r\n\r\n /** Restore last selection on focus */\r\n _onClick (ev: Event) {\r\n this.alignCursorFriendly();\r\n }\r\n\r\n /** Unbind view events and removes element reference */\r\n destroy () {\r\n this._unbindEvents();\r\n // $FlowFixMe why not do so?\r\n this._listeners.length = 0;\r\n // $FlowFixMe\r\n delete this.el;\r\n }\r\n}\r\n\r\n\r\nIMask.InputMask = InputMask;\r\n","// @flow\r\nimport MaskedPattern from './pattern.js';\r\nimport IMask from '../core/holder.js';\r\n\r\n\r\n/** Pattern which validates enum values */\r\nexport default\r\nclass MaskedEnum extends MaskedPattern {\r\n enum: Array;\r\n\r\n /**\r\n @override\r\n @param {Object} opts\r\n */\r\n _update (opts: any) { // TODO type\r\n if (opts.enum) opts.mask = '*'.repeat(opts.enum[0].length);\r\n\r\n super._update(opts);\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n doValidate (...args: *): boolean {\r\n return this.enum.some(e => e.indexOf(this.unmaskedValue) >= 0) &&\r\n super.doValidate(...args);\r\n }\r\n}\r\n\r\n\r\nIMask.MaskedEnum = MaskedEnum;\r\n","// @flow\r\nimport {escapeRegExp, indexInDirection, posInDirection, type Direction, DIRECTION} from '../core/utils.js';\r\nimport ChangeDetails from '../core/change-details.js';\r\n\r\nimport Masked, {type MaskedOptions, type ExtractFlags, type AppendFlags} from './base.js';\r\nimport IMask from '../core/holder.js';\r\n\r\n\r\ntype MaskedNumberOptions = {\r\n ...MaskedOptions>,\r\n radix: $PropertyType,\r\n thousandsSeparator: $PropertyType,\r\n mapToRadix: $PropertyType,\r\n scale: $PropertyType,\r\n signed: $PropertyType,\r\n normalizeZeros: $PropertyType,\r\n padFractionalZeros: $PropertyType,\r\n};\r\n\r\n/**\r\n Number mask\r\n @param {Object} opts\r\n @param {string} opts.radix - Single char\r\n @param {string} opts.thousandsSeparator - Single char\r\n @param {Array} opts.mapToRadix - Array of single chars\r\n @param {number} opts.min\r\n @param {number} opts.max\r\n @param {number} opts.scale - Digits after point\r\n @param {boolean} opts.signed - Allow negative\r\n @param {boolean} opts.normalizeZeros - Flag to remove leading and trailing zeros in the end of editing\r\n @param {boolean} opts.padFractionalZeros - Flag to pad trailing zeros after point in the end of editing\r\n*/\r\nexport default\r\nclass MaskedNumber extends Masked> {\r\n static DEFAULTS: $Shape;\r\n\r\n /** Single char */\r\n radix: string;\r\n /** Single char */\r\n thousandsSeparator: string;\r\n /** Array of single chars */\r\n mapToRadix: Array;\r\n /** */\r\n min: number;\r\n /** */\r\n max: number;\r\n /** Digits after point */\r\n scale: number;\r\n /** */\r\n signed: boolean;\r\n /** Flag to remove leading and trailing zeros in the end of editing */\r\n normalizeZeros: boolean;\r\n /** Flag to pad trailing zeros after point in the end of editing */\r\n padFractionalZeros: boolean;\r\n\r\n _numberRegExp: RegExp;\r\n _numberRegExpInput: RegExp;\r\n _thousandsSeparatorRegExp: RegExp;\r\n _mapToRadixRegExp: RegExp;\r\n _separatorsProcessed: boolean;\r\n\r\n constructor (opts: $Shape) {\r\n super({\r\n ...MaskedNumber.DEFAULTS,\r\n ...opts\r\n });\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n _update (opts: MaskedNumberOptions) {\r\n super._update(opts);\r\n this._updateRegExps();\r\n }\r\n\r\n /** */\r\n _updateRegExps () {\r\n // use different regexp to process user input (more strict, input suffix) and tail shifting\r\n let start = '^' + (this.allowNegative ? '[+|\\\\-]?' : '');\r\n let midInput = '(0|([1-9]+\\\\d*))?';\r\n let mid = '\\\\d*';\r\n\r\n let end = (this.scale ?\r\n '(' + escapeRegExp(this.radix) + '\\\\d{0,' + this.scale + '})?' :\r\n '') + '$';\r\n\r\n this._numberRegExpInput = new RegExp(start + midInput + end);\r\n this._numberRegExp = new RegExp(start + mid + end);\r\n this._mapToRadixRegExp = new RegExp('[' +\r\n this.mapToRadix.map(escapeRegExp).join('') +\r\n ']', 'g');\r\n this._thousandsSeparatorRegExp = new RegExp(escapeRegExp(this.thousandsSeparator), 'g');\r\n }\r\n\r\n /** */\r\n _removeThousandsSeparators (value: string): string {\r\n return value.replace(this._thousandsSeparatorRegExp, '');\r\n }\r\n\r\n /** */\r\n _insertThousandsSeparators (value: string): string {\r\n // https://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript\r\n const parts = value.split(this.radix);\r\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, this.thousandsSeparator);\r\n return parts.join(this.radix);\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n doPrepare (str: string, ...args: *): string {\r\n return super.doPrepare(this._removeThousandsSeparators(str.replace(this._mapToRadixRegExp, this.radix)), ...args);\r\n }\r\n\r\n /** */\r\n _separatorsCount (to: number, extendOnSeparators: boolean=false): number {\r\n let count = 0;\r\n\r\n for (let pos = 0; pos < to; ++pos) {\r\n if (this._value.indexOf(this.thousandsSeparator, pos) === pos) {\r\n ++count;\r\n if (extendOnSeparators) to += this.thousandsSeparator.length;\r\n }\r\n }\r\n\r\n return count;\r\n }\r\n\r\n /** */\r\n _separatorsCountFromSlice (slice: string=this._value): number {\r\n return this._separatorsCount(this._removeThousandsSeparators(slice).length, true);\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n extractInput (fromPos?: number=0, toPos?: number=this.value.length, flags?: ExtractFlags): string {\r\n [fromPos, toPos] = this._adjustRangeWithSeparators(fromPos, toPos);\r\n\r\n return this._removeThousandsSeparators(super.extractInput(fromPos, toPos, flags));\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n _appendCharRaw (ch: string, flags: AppendFlags={}): ChangeDetails {\r\n if (!this.thousandsSeparator) return super._appendCharRaw(ch, flags);\r\n\r\n const prevBeforeTailValue = flags.tail && flags._beforeTailState ?\r\n flags._beforeTailState._value :\r\n this._value;\r\n const prevBeforeTailSeparatorsCount = this._separatorsCountFromSlice(prevBeforeTailValue);\r\n this._value = this._removeThousandsSeparators(this.value);\r\n\r\n const appendDetails = super._appendCharRaw(ch, flags);\r\n\r\n this._value = this._insertThousandsSeparators(this._value);\r\n const beforeTailValue = flags.tail && flags._beforeTailState ?\r\n flags._beforeTailState._value :\r\n this._value;\r\n const beforeTailSeparatorsCount = this._separatorsCountFromSlice(beforeTailValue);\r\n\r\n appendDetails.tailShift += (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length;\r\n appendDetails.skip = !appendDetails.rawInserted && ch === this.thousandsSeparator;\r\n return appendDetails;\r\n }\r\n\r\n /** */\r\n _findSeparatorAround (pos: number): number {\r\n if (this.thousandsSeparator) {\r\n const searchFrom = pos - this.thousandsSeparator.length + 1;\r\n const separatorPos = this.value.indexOf(this.thousandsSeparator, searchFrom);\r\n if (separatorPos <= pos) return separatorPos;\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n _adjustRangeWithSeparators (from: number, to: number): [number, number] {\r\n const separatorAroundFromPos = this._findSeparatorAround(from);\r\n if (separatorAroundFromPos >= 0) from = separatorAroundFromPos;\r\n\r\n const separatorAroundToPos = this._findSeparatorAround(to);\r\n if (separatorAroundToPos >= 0) to = separatorAroundToPos + this.thousandsSeparator.length;\r\n return [from, to];\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n remove (fromPos?: number=0, toPos?: number=this.value.length): ChangeDetails {\r\n [fromPos, toPos] = this._adjustRangeWithSeparators(fromPos, toPos);\r\n\r\n const valueBeforePos = this.value.slice(0, fromPos);\r\n const valueAfterPos = this.value.slice(toPos);\r\n\r\n const prevBeforeTailSeparatorsCount = this._separatorsCount(valueBeforePos.length);\r\n this._value = this._insertThousandsSeparators(this._removeThousandsSeparators(valueBeforePos + valueAfterPos));\r\n const beforeTailSeparatorsCount = this._separatorsCountFromSlice(valueBeforePos);\r\n\r\n return new ChangeDetails({\r\n tailShift: (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length,\r\n });\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n nearestInputPos (cursorPos: number, direction?: Direction): number {\r\n if (!this.thousandsSeparator) return cursorPos;\r\n\r\n switch (direction) {\r\n case DIRECTION.NONE:\r\n case DIRECTION.LEFT:\r\n case DIRECTION.FORCE_LEFT: {\r\n const separatorAtLeftPos = this._findSeparatorAround(cursorPos - 1);\r\n if (separatorAtLeftPos >= 0) {\r\n const separatorAtLeftEndPos = separatorAtLeftPos + this.thousandsSeparator.length;\r\n if (cursorPos < separatorAtLeftEndPos ||\r\n this.value.length <= separatorAtLeftEndPos ||\r\n direction === DIRECTION.FORCE_LEFT\r\n ) {\r\n return separatorAtLeftPos;\r\n }\r\n }\r\n break;\r\n }\r\n case DIRECTION.RIGHT:\r\n case DIRECTION.FORCE_RIGHT: {\r\n const separatorAtRightPos = this._findSeparatorAround(cursorPos);\r\n if (separatorAtRightPos >= 0) {\r\n return separatorAtRightPos + this.thousandsSeparator.length;\r\n }\r\n }\r\n }\r\n\r\n return cursorPos;\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n doValidate (flags: AppendFlags): boolean {\r\n const regexp = flags.input ? this._numberRegExpInput : this._numberRegExp;\r\n\r\n // validate as string\r\n let valid = regexp.test(this._removeThousandsSeparators(this.value));\r\n\r\n if (valid) {\r\n // validate as number\r\n const number = this.number;\r\n valid = valid && !isNaN(number) &&\r\n // check min bound for negative values\r\n (this.min == null || this.min >= 0 || this.min <= this.number) &&\r\n // check max bound for positive values\r\n (this.max == null || this.max <= 0 || this.number <= this.max);\r\n }\r\n\r\n return valid && super.doValidate(flags);\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n doCommit () {\r\n if (this.value) {\r\n const number = this.number;\r\n let validnum = number;\r\n\r\n // check bounds\r\n if (this.min != null) validnum = Math.max(validnum, this.min);\r\n if (this.max != null) validnum = Math.min(validnum, this.max);\r\n\r\n if (validnum !== number) this.unmaskedValue = String(validnum);\r\n\r\n let formatted = this.value;\r\n\r\n if (this.normalizeZeros) formatted = this._normalizeZeros(formatted);\r\n if (this.padFractionalZeros) formatted = this._padFractionalZeros(formatted);\r\n\r\n this._value = formatted;\r\n }\r\n\r\n super.doCommit();\r\n }\r\n\r\n /** */\r\n _normalizeZeros (value: string): string {\r\n const parts = this._removeThousandsSeparators(value).split(this.radix);\r\n\r\n // remove leading zeros\r\n parts[0] = parts[0].replace(/^(\\D*)(0*)(\\d*)/, (match, sign, zeros, num) => sign + num);\r\n // add leading zero\r\n if (value.length && !/\\d$/.test(parts[0])) parts[0] = parts[0] + '0';\r\n\r\n if (parts.length > 1) {\r\n parts[1] = parts[1].replace(/0*$/, ''); // remove trailing zeros\r\n if (!parts[1].length) parts.length = 1; // remove fractional\r\n }\r\n\r\n return this._insertThousandsSeparators(parts.join(this.radix));\r\n }\r\n\r\n /** */\r\n _padFractionalZeros (value: string): string {\r\n if (!value) return value;\r\n\r\n const parts = value.split(this.radix);\r\n if (parts.length < 2) parts.push('');\r\n parts[1] = parts[1].padEnd(this.scale, '0');\r\n return parts.join(this.radix);\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n get unmaskedValue (): string {\r\n return this._removeThousandsSeparators(\r\n this._normalizeZeros(\r\n this.value))\r\n .replace(this.radix, '.');\r\n }\r\n\r\n set unmaskedValue (unmaskedValue: string) {\r\n super.unmaskedValue = unmaskedValue.replace('.', this.radix);\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n get typedValue (): number {\r\n return Number(this.unmaskedValue);\r\n }\r\n\r\n set typedValue (n: number) {\r\n super.unmaskedValue = String(n);\r\n }\r\n\r\n /** Parsed Number */\r\n get number (): number {\r\n return this.typedValue;\r\n }\r\n\r\n set number (number: number) {\r\n this.typedValue = number;\r\n }\r\n\r\n /**\r\n Is negative allowed\r\n @readonly\r\n */\r\n get allowNegative (): boolean {\r\n return this.signed ||\r\n (this.min != null && this.min < 0) ||\r\n (this.max != null && this.max < 0);\r\n }\r\n}\r\nMaskedNumber.DEFAULTS = {\r\n radix: ',',\r\n thousandsSeparator: '',\r\n mapToRadix: ['.'],\r\n scale: 2,\r\n signed: false,\r\n normalizeZeros: true,\r\n padFractionalZeros: false,\r\n};\r\n\r\n\r\nIMask.MaskedNumber = MaskedNumber;\r\n","// @flow\r\nimport Masked, {type MaskedOptions} from './base.js';\r\nimport IMask from '../core/holder.js';\r\n\r\n\r\n/** Masking by custom Function */\r\nexport default\r\nclass MaskedFunction extends Masked {\r\n /**\r\n @override\r\n @param {Object} opts\r\n */\r\n _update (opts: MaskedOptions) {\r\n if (opts.mask) opts.validate = opts.mask;\r\n super._update(opts);\r\n }\r\n}\r\n\r\n\r\nIMask.MaskedFunction = MaskedFunction;\r\n","// @flow\r\nimport ChangeDetails from '../core/change-details.js';\r\nimport createMask from './factory.js';\r\nimport Masked, {type AppendFlags, type MaskedState} from './base.js';\r\nimport { type TailDetails } from '../core/tail-details.js';\r\nimport IMask from '../core/holder.js';\r\n\r\n\r\ntype MaskedDynamicState = {|\r\n ...MaskedState,\r\n _rawInputValue: string,\r\n compiledMasks: Array<*>,\r\n currentMaskRef: ?Masked<*>,\r\n currentMask: *,\r\n|};\r\n\r\ntype DynamicMaskType = Array<{[string]: any}>;\r\n/** Dynamic mask for choosing apropriate mask in run-time */\r\nexport default\r\nclass MaskedDynamic extends Masked {\r\n /** Currently chosen mask */\r\n currentMask: ?Masked<*>;\r\n /** Compliled {@link Masked} options */\r\n compiledMasks: Array>;\r\n /** Chooses {@link Masked} depending on input value */\r\n dispatch: (string, Masked<*>, AppendFlags) => Masked<*>;\r\n\r\n /**\r\n @param {Object} opts\r\n */\r\n constructor (opts: any) {\r\n super({\r\n ...MaskedDynamic.DEFAULTS,\r\n ...opts\r\n });\r\n\r\n this.currentMask = null;\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n _update (opts: any) {\r\n super._update(opts);\r\n if ('mask' in opts) {\r\n // mask could be totally dynamic with only `dispatch` option\r\n this.compiledMasks = Array.isArray(opts.mask) ?\r\n opts.mask.map(m => createMask(m)) :\r\n [];\r\n }\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n _appendCharRaw (ch: string, flags: AppendFlags={}): ChangeDetails {\r\n const details = this._applyDispatch(ch, flags);\r\n\r\n if (this.currentMask) {\r\n details.aggregate(this.currentMask._appendChar(ch, flags));\r\n }\r\n\r\n return details;\r\n }\r\n\r\n _applyDispatch (appended: string='', flags: AppendFlags={}): ChangeDetails {\r\n const prevValueBeforeTail = flags.tail && flags._beforeTailState != null ?\r\n flags._beforeTailState._value :\r\n this.value;\r\n const inputValue = this.rawInputValue;\r\n const insertValue = flags.tail && flags._beforeTailState != null ?\r\n // $FlowFixMe - tired to fight with type system\r\n flags._beforeTailState._rawInputValue :\r\n inputValue;\r\n const tailValue = inputValue.slice(insertValue.length);\r\n const prevMask = this.currentMask;\r\n const details = new ChangeDetails();\r\n\r\n const prevMaskState = prevMask && prevMask.state;\r\n\r\n // clone flags to prevent overwriting `_beforeTailState`\r\n this.currentMask = this.doDispatch(appended, { ...flags });\r\n\r\n // restore state after dispatch\r\n if (this.currentMask) {\r\n if (this.currentMask !== prevMask) {\r\n // if mask changed reapply input\r\n this.currentMask.reset();\r\n\r\n if (insertValue) {\r\n // $FlowFixMe - it's ok, we don't change current mask above\r\n const d = this.currentMask.append(insertValue, {raw: true});\r\n details.tailShift = d.inserted.length - prevValueBeforeTail.length;\r\n }\r\n\r\n if (tailValue) {\r\n // $FlowFixMe - it's ok, we don't change current mask above\r\n details.tailShift += this.currentMask.append(tailValue, {raw: true, tail: true}).tailShift;\r\n }\r\n } else {\r\n // Dispatch can do something bad with state, so\r\n // restore prev mask state\r\n this.currentMask.state = prevMaskState;\r\n }\r\n }\r\n\r\n return details;\r\n }\r\n\r\n _appendPlaceholder (...args: *): ChangeDetails {\r\n const details = this._applyDispatch(...args);\r\n\r\n if (this.currentMask) {\r\n details.aggregate(this.currentMask._appendPlaceholder());\r\n }\r\n\r\n return details;\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n doDispatch(appended: string, flags: AppendFlags={}): ?Masked<*> {\r\n return this.dispatch(appended, this, flags);\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n doValidate (...args: *): boolean {\r\n return super.doValidate(...args) && (\r\n !this.currentMask || this.currentMask.doValidate(...args));\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n reset () {\r\n if (this.currentMask) this.currentMask.reset();\r\n this.compiledMasks.forEach(m => m.reset());\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n get value (): string {\r\n return this.currentMask ? this.currentMask.value : '';\r\n }\r\n\r\n set value (value: string) {\r\n super.value = value;\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n get unmaskedValue (): string {\r\n return this.currentMask ? this.currentMask.unmaskedValue : '';\r\n }\r\n\r\n set unmaskedValue (unmaskedValue: string) {\r\n super.unmaskedValue = unmaskedValue;\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n get typedValue (): any {\r\n return this.currentMask ? this.currentMask.typedValue : '';\r\n }\r\n\r\n // probably typedValue should not be used with dynamic\r\n set typedValue (value: any) {\r\n let unmaskedValue = String(value);\r\n\r\n // double check it\r\n if (this.currentMask) {\r\n this.currentMask.typedValue = value;\r\n unmaskedValue = this.currentMask.unmaskedValue;\r\n }\r\n this.unmaskedValue = unmaskedValue;\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n get isComplete (): boolean {\r\n return !!this.currentMask && this.currentMask.isComplete;\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n remove (...args: *): ChangeDetails {\r\n const details: ChangeDetails = new ChangeDetails();\r\n if (this.currentMask) {\r\n details.aggregate(this.currentMask.remove(...args))\r\n // update with dispatch\r\n .aggregate(this._applyDispatch());\r\n }\r\n\r\n return details;\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n get state (): MaskedDynamicState {\r\n return {\r\n ...super.state,\r\n _rawInputValue: this.rawInputValue,\r\n compiledMasks: this.compiledMasks.map(m => m.state),\r\n currentMaskRef: this.currentMask,\r\n currentMask: this.currentMask && this.currentMask.state,\r\n };\r\n }\r\n\r\n set state (state: MaskedDynamicState) {\r\n const {compiledMasks, currentMaskRef, currentMask, ...maskedState} = state;\r\n this.compiledMasks.forEach((m, mi) => m.state = compiledMasks[mi]);\r\n if (currentMaskRef != null) {\r\n this.currentMask = currentMaskRef;\r\n this.currentMask.state = currentMask;\r\n }\r\n super.state = maskedState;\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n extractInput (...args: *): string {\r\n return this.currentMask ?\r\n this.currentMask.extractInput(...args) :\r\n '';\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n extractTail (...args: *): TailDetails {\r\n return this.currentMask ?\r\n this.currentMask.extractTail(...args) :\r\n super.extractTail(...args);\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n doCommit () {\r\n if (this.currentMask) this.currentMask.doCommit();\r\n super.doCommit();\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n nearestInputPos(...args: *): number {\r\n return this.currentMask ?\r\n this.currentMask.nearestInputPos(...args) :\r\n super.nearestInputPos(...args);\r\n }\r\n\r\n get overwrite (): ?boolean {\r\n return this.currentMask ?\r\n this.currentMask.overwrite :\r\n super.overwrite;\r\n }\r\n\r\n set overwrite (overwrite: *) {\r\n console.warn('\"overwrite\" option is not available in dynamic mask, use this option in siblings');\r\n }\r\n}\r\n\r\nMaskedDynamic.DEFAULTS = {\r\n dispatch: (appended, masked, flags) => {\r\n if (!masked.compiledMasks.length) return;\r\n\r\n const inputValue = masked.rawInputValue;\r\n\r\n // simulate input\r\n const inputs = masked.compiledMasks.map((m, index) => {\r\n m.reset();\r\n m.append(inputValue, { raw: true });\r\n m.append(appended, flags);\r\n const weight = m.rawInputValue.length;\r\n\r\n return {weight, index};\r\n });\r\n\r\n // pop masks with longer values first\r\n inputs.sort((i1, i2) => i2.weight - i1.weight);\r\n\r\n return masked.compiledMasks[inputs[0].index];\r\n }\r\n};\r\n\r\n\r\nIMask.MaskedDynamic = MaskedDynamic;\r\n","import createMask from './factory';\r\nimport IMask from '../core/holder.js';\r\n\r\n\r\n/** Mask pipe source and destination types */\r\nexport\r\nconst PIPE_TYPE = {\r\n MASKED: 'value',\r\n UNMASKED: 'unmaskedValue',\r\n TYPED: 'typedValue',\r\n};\r\n\r\n/** Creates new pipe function depending on mask type, source and destination options */\r\nexport\r\nfunction createPipe (mask, from=PIPE_TYPE.MASKED, to=PIPE_TYPE.MASKED) {\r\n const masked = createMask(mask);\r\n return (value) => masked.runIsolated(m => {\r\n m[from] = value;\r\n return m[to];\r\n });\r\n}\r\n\r\n/** Pipes value through mask depending on mask type, source and destination options */\r\nexport\r\nfunction pipe (value, ...pipeArgs) {\r\n return createPipe(...pipeArgs)(value);\r\n}\r\n\r\n\r\nIMask.PIPE_TYPE = PIPE_TYPE;\r\nIMask.createPipe = createPipe;\r\nIMask.pipe = pipe;\r\n"],"names":["check","it","Math","module","globalThis","window","self","global","Function","exec","error","fails","Object","defineProperty","get","nativePropertyIsEnumerable","propertyIsEnumerable","getOwnPropertyDescriptor","NASHORN_BUG","call","exports","V","descriptor","enumerable","bitmap","value","configurable","writable","toString","slice","split","classof","undefined","TypeError","IndexedObject","requireObjectCoercible","input","PREFERRED_STRING","isObject","fn","val","valueOf","hasOwnProperty","key","document","EXISTS","createElement","DESCRIPTORS","a","nativeGetOwnPropertyDescriptor","O","P","toIndexedObject","toPrimitive","IE8_DOM_DEFINE","has","createPropertyDescriptor","propertyIsEnumerableModule","f","String","nativeDefineProperty","Attributes","anObject","object","definePropertyModule","createNonEnumerableProperty","SHARED","store","setGlobal","functionToString","inspectSource","WeakMap","test","push","version","mode","copyright","id","postfix","random","keys","shared","uid","set","enforce","getterFor","TYPE","state","type","NATIVE_WEAK_MAP","wmget","wmhas","wmset","metadata","facade","STATE","sharedKey","hiddenKeys","objectHas","getInternalState","InternalStateModule","enforceInternalState","TEMPLATE","options","unsafe","simple","noTargetGet","source","join","prototype","aFunction","variable","namespace","method","arguments","length","path","ceil","floor","argument","isNaN","min","toInteger","max","index","integer","createMethod","IS_INCLUDES","$this","el","fromIndex","toLength","toAbsoluteIndex","includes","indexOf","require","names","i","result","enumBugKeys","concat","getOwnPropertyNames","internalObjectKeys","getOwnPropertySymbols","getBuiltIn","ownKeys","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","target","getOwnPropertyDescriptorModule","replacement","isForced","feature","detection","data","normalize","POLYFILL","NATIVE","string","replace","toLowerCase","TARGET","GLOBAL","STATIC","stat","FORCED","targetProperty","sourceProperty","forced","copyConstructorProperties","sham","redefine","nativeAssign","assign","b","A","B","symbol","Symbol","alphabet","forEach","chr","objectKeys","T","toObject","argumentsLength","S","j","$","repeat","count","str","n","Infinity","RangeError","IS_END","maxLength","fillString","stringLength","fillStr","intMaxLength","fillLen","stringFiller","start","end","userAgent","$padEnd","proto","WEBKIT_BUG","padEnd","$padStart","padStart","isString","DIRECTION","NONE","LEFT","FORCE_LEFT","RIGHT","FORCE_RIGHT","forceDirection","direction","escapeRegExp","objectIncludes","arrA","Array","isArray","arrB","dateA","Date","dateB","getTime","regexpA","RegExp","regexpB","ActionDetails","cursorPos","oldValue","oldSelection","startChangePos","substr","insertedCount","removedCount","substring","ChangeDetails","details","inserted","rawInserted","skip","tailShift","ContinuousTailDetails","from","stop","tail","masked","append","aggregate","_appendPlaceholder","pos","shiftChar","IMask","opts","InputMask","Masked","_value","_update","DEFAULTS","isInitialized","withValueRefresh","bind","resolve","reset","doCommit","doParse","doFormat","extractInput","raw","fromPos","toPos","appendTo","ch","flags","checkTail","consistentState","_appendCharRaw","doPrepare","consistentTail","appended","doValidate","beforeTailState","overwrite","shiftBefore","tailDetails","appendTail","Error","_beforeTailState","ci","_appendChar","_refreshing","rawInput","rawInputValue","ret","_isolated","prepare","validate","parent","commit","format","parse","deleteCount","removeDirection","tailPos","extractTail","nearestInputPos","changeDetails","remove","v","maskedClass","mask","MaskedRegExp","MaskedPattern","MaskedDate","Number","MaskedNumber","MaskedDynamic","MaskedFunction","constructor","console","warn","createMask","MaskedClass","DEFAULT_INPUT_DEFINITIONS","PatternInputDefinition","blockOpts","_isFilled","isOptional","placeholderChar","unmaskedValue","Boolean","lazy","minPos","maxPos","boundPos","isComplete","PatternFixedDefinition","isUnmasking","_isRawInput","char","isResolved","ChunksTailDetails","chunks","map","tailChunk","lastChunk","extendLast","extend","firstTailChunk","shift","blockIndex","chunk","lastBlockIter","_mapPosToBlock","chunkBlock","_stops","_blocks","remainChars","c","props","cstate","chunkShiftPos","splice","search","definitions","_rebuildMask","defs","_maskedBlocks","pattern","unmaskingBlock","optionalBlock","blocks","p","bNames","filter","bName","sort","maskedBlock","isInput","STOP_CHAR","ESCAPE_CHAR","def","maskedState","bi","every","reduce","blockIter","block","blockDetails","chunkTail","_forEachBlocksInRange","bFromPos","bToPos","blockChunk","_findStopBefore","_blockStartPos","_","stopBefore","si","toBlockIndex","startBlockIter","startBlockIndex","endBlockIndex","args","bDetails","accVal","blockStartPos","offset","fromBlockIter","toBlockIter","isSameBlock","fromBlockStartPos","fromBlockEndPos","removeDetails","beginBlockData","beginBlockOffset","beginBlockIndex","beginBlock","beginBlockCursorPos","cursorAtRight","cursorAtLeft","searchBlockIndex","blockIndexAtLeft","blockAtLeft","blockInputPos","firstInputAtRight","blockAtRight","firstFilledBlockIndexAtRight","filledBlock","firstFilledInputBlockIndex","firstEmptyInputBlockIndex","blockAlignedPos","firstInputBlockAlignedIndex","firstInputBlockAlignedPos","alignedPos","name","maskedBlocks","indices","gi","InputDefinition","FixedDefinition","MaskedRange","to","fromStr","toStr","sameCharsCount","minstr","maxstr","match","placeholder","num","autofix","prepStr","nextVal","boundaries","firstNonZero","_matchFrom","GET_DEFAULT_BLOCKS","Y","getFullYear","m","getMonth","d","getDate","bk","date","isDateExist","typedValue","day","month","year","MaskElement","_unsafeSelectionStart","e","_unsafeSelectionEnd","selectionStart","selectionEnd","_unsafeSelect","handlers","HTMLMaskElement","_handlers","getRootNode","rootElement","activeElement","setSelectionRange","event","_toggleEventHandler","EVENTS_MAP","handler","removeEventListener","addEventListener","selectionChange","drop","click","focus","HTMLContenteditableMaskElement","root","selection","getSelection","anchorOffset","createRange","range","setStart","firstChild","setEnd","lastChild","removeAllRanges","addRange","textContent","isContentEditable","tagName","_listeners","_unmaskedValue","_saveSelection","_onInput","_onChange","_onDrop","_onFocus","_onClick","alignCursor","alignCursorFriendly","_bindEvents","updateValue","maskEquals","updateOptions","updateControl","bindEvents","unbindEvents","ev","listeners","l","_cursorChanging","_changingCursorPos","isActive","select","_selection","newUnmaskedValue","newValue","isChanged","_fireChangeEvents","restOpts","updateMask","updateOpts","_delayUpdateCursor","_abortUpdateCursor","setTimeout","_fireEvent","_inputEvent","clearTimeout","hIndex","oldRawValue","removed","updateCursor","preventDefault","stopPropagation","_unbindEvents","MaskedEnum","enum","some","_updateRegExps","allowNegative","midInput","mid","scale","radix","_numberRegExpInput","_numberRegExp","_mapToRadixRegExp","mapToRadix","_thousandsSeparatorRegExp","thousandsSeparator","parts","_removeThousandsSeparators","extendOnSeparators","_separatorsCount","_adjustRangeWithSeparators","prevBeforeTailValue","prevBeforeTailSeparatorsCount","_separatorsCountFromSlice","appendDetails","_insertThousandsSeparators","beforeTailValue","beforeTailSeparatorsCount","searchFrom","separatorPos","separatorAroundFromPos","_findSeparatorAround","separatorAroundToPos","valueBeforePos","valueAfterPos","separatorAtLeftPos","separatorAtLeftEndPos","separatorAtRightPos","regexp","valid","number","validnum","formatted","normalizeZeros","_normalizeZeros","padFractionalZeros","_padFractionalZeros","sign","zeros","signed","currentMask","compiledMasks","_applyDispatch","prevValueBeforeTail","inputValue","insertValue","_rawInputValue","tailValue","prevMask","prevMaskState","doDispatch","dispatch","currentMaskRef","mi","inputs","weight","i1","i2","PIPE_TYPE","MASKED","UNMASKED","TYPED","createPipe","runIsolated","pipe","pipeArgs"],"mappings":"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"}