File: /var/www/elite/node_modules/imask/dist/imask.esm.js.map
{"version":3,"file":"imask.esm.js","sources":["../src/core/utils.js","../src/core/action-details.js","../src/core/change-details.js","../src/core/continuous-tail-details.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/pattern.js","../src/masked/range.js","../src/masked/date.js","../src/controls/mask-element.js","../src/controls/html-mask-element.js","../src/controls/input.js","../src/masked/enum.js","../src/masked/number.js","../src/masked/regexp.js","../src/masked/function.js","../src/masked/dynamic.js","../src/imask.js"],"sourcesContent":["// @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<typeof DIRECTION>;\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/* eslint-disable no-undef */\r\nexport\r\nconst g: any = typeof window !== 'undefined' && window ||\r\n typeof global !== 'undefined' && global.global === global && global ||\r\n typeof self !== 'undefined' && self.self === self && self ||\r\n {};\r\n/* eslint-enable no-undef */\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<ChangeDetails, 'inserted'>,\r\n rawInserted?: $PropertyType<ChangeDetails, 'rawInserted'>,\r\n skip?: $PropertyType<ChangeDetails, 'skip'>,\r\n tailShift?: $PropertyType<ChangeDetails, 'tailShift'>,\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<ContinuousTailDetails, 'value'>,\r\n from: $PropertyType<ContinuousTailDetails, 'from'>,\r\n stop?: $PropertyType<ContinuousTailDetails, 'stop'>,\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","// @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\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<Number> |\r\n Class<Date> |\r\n Array<any> |\r\n $PropertyType<Masked<*>, 'validate'> |\r\n Masked<*> |\r\n Class<Masked<*>>;\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<MaskType> = {\r\n mask: $PropertyType<Masked<MaskType>, 'mask'>,\r\n parent?: $PropertyType<Masked<*>, 'parent'>,\r\n prepare?: $PropertyType<Masked<MaskType>, 'prepare'>,\r\n validate?: $PropertyType<Masked<MaskType>, 'validate'>,\r\n commit?: $PropertyType<Masked<MaskType>, 'commit'>,\r\n overwrite?: $PropertyType<Masked<MaskType>, 'overwrite'>,\r\n};\r\n\r\n\r\n/** Provides common masking stuff */\r\nexport default\r\nclass Masked<MaskType> {\r\n static DEFAULTS: any; // $Shape<MaskedOptions>; 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<MaskType>, AppendFlags) => string;\r\n /** Validates if value is acceptable */\r\n validate: (string, Masked<MaskType>, AppendFlags) => boolean;\r\n /** Does additional processing in the end of editing */\r\n commit: (string, Masked<MaskType>) => void;\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\r\n constructor (opts: {[string]: any}) {\r\n this._value = '';\r\n this._update(opts);\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.unmaskedValue;\r\n }\r\n\r\n set typedValue (value: any) {\r\n this.unmaskedValue = 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 | 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 ch = this.doPrepare(ch, flags);\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 const details: ChangeDetails = this._appendCharRaw(ch, 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.rawInserted = details.inserted = '';\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 | 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.tail) flags._beforeTailState = this.state;\r\n\r\n for (let ci=0; ci<str.length; ++ci) {\r\n details.aggregate(this._appendChar(str[ci], flags, checkTail));\r\n }\r\n\r\n // append tail but aggregate only tailShift\r\n if (checkTail != null) {\r\n details.tailShift += this.appendTail(checkTail).tailShift;\r\n // TODO it's a good idea to clear state after appending ends\r\n // but it causes bugs when one append calls another (when dynamic dispatch set rawInputValue)\r\n // this._resetBeforeTailState();\r\n }\r\n\r\n return details;\r\n }\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 return new ChangeDetails();\r\n }\r\n\r\n /** Calls function and reapplies current value */\r\n withValueRefresh<T>(fn: () => T): T {\r\n if (this._refreshing || !this.isInitialized) return fn();\r\n this._refreshing = true;\r\n\r\n const unmasked = this.unmaskedValue;\r\n const value = this.value;\r\n\r\n const ret = fn();\r\n\r\n // try to update with raw value first to keep fixed chars\r\n if (this.resolve(value) !== value) {\r\n // or fallback to unmasked\r\n this.unmaskedValue = unmasked;\r\n }\r\n\r\n delete this._refreshing;\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 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\n","// @flow\r\nimport {g, isString} from '../core/utils.js';\r\nimport type Masked from './base.js';\r\nimport {type Mask} from './base.js';\r\n\r\n\r\n/** Get Masked class by mask type */\r\nexport\r\nfunction maskedClass (mask: Mask): Class<Masked<*>> {\r\n if (mask == null) {\r\n throw new Error('mask property should be defined');\r\n }\r\n\r\n if (mask instanceof RegExp) return g.IMask.MaskedRegExp;\r\n if (isString(mask)) return g.IMask.MaskedPattern;\r\n if (mask instanceof Date || mask === Date) return g.IMask.MaskedDate;\r\n if (mask instanceof Number || typeof mask === 'number' || mask === Number) return g.IMask.MaskedNumber;\r\n if (Array.isArray(mask) || mask === Array) return g.IMask.MaskedDynamic;\r\n // $FlowFixMe\r\n if (mask.prototype instanceof g.IMask.Masked) return mask;\r\n // $FlowFixMe\r\n if (mask instanceof Function) return g.IMask.MaskedFunction;\r\n\r\n console.warn('Mask not found for mask', mask); // eslint-disable-line no-console\r\n return g.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<*> {\r\n opts = {...opts};\r\n const mask = opts.mask;\r\n\r\n if (mask instanceof g.IMask.Masked) return mask;\r\n\r\n const MaskedClass = maskedClass(mask);\r\n return new MaskedClass(opts);\r\n}\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<PatternInputDefinition, 'parent'>,\r\n mask: Mask,\r\n isOptional: $PropertyType<PatternInputDefinition, 'isOptional'>,\r\n lazy: $PropertyType<PatternInputDefinition, 'lazy'>,\r\n placeholderChar: $PropertyType<PatternInputDefinition, 'placeholderChar'>,\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 = {\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<MaskedPattern, 'lazy'>;\r\n /** */\r\n placeholderChar: $PropertyType<MaskedPattern, 'placeholderChar'>;\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: *) {\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<PatternFixedDefinition, 'char'>,\r\n isUnmasking?: $PropertyType<PatternFixedDefinition, 'isUnmasking'>,\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={}) {\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={}) {\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 | 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 { g } from '../../core/utils.js';\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\n\r\n\r\ntype ChunksTailState = {\r\n chunks: $PropertyType<ChunksTailDetails, 'chunks'>,\r\n from: $PropertyType<ChunksTailDetails, 'from'>,\r\n stop?: $PropertyType<ChunksTailDetails, 'stop'>,\r\n blockIndex?: $PropertyType<ChunksTailDetails, 'blockIndex'>,\r\n};\r\n\r\nexport default\r\nclass ChunksTailDetails implements TailDetails {\r\n chunks: Array<TailDetails>;\r\n from: number;\r\n stop: ?number;\r\n /** */\r\n blockIndex: ?number;\r\n\r\n constructor (chunks?: Array<TailDetails>=[], 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 | 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 if (!(masked instanceof g.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 &&\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 {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\n\r\n\r\ntype MaskedPatternOptions = {\r\n ...MaskedOptions<string>,\r\n definitions?: $PropertyType<MaskedPattern, 'definitions'>,\r\n blocks?: $PropertyType<MaskedPattern, 'blocks'>,\r\n placeholderChar?: $PropertyType<MaskedPattern, 'placeholderChar'>,\r\n lazy?: $PropertyType<MaskedPattern, 'lazy'>,\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<string> {\r\n static DEFAULTS: any;\r\n static STOP_CHAR: string;\r\n static ESCAPE_CHAR: string;\r\n static InputDefinition: Class<PatternInputDefinition>;\r\n static FixedDefinition: Class<PatternFixedDefinition>;\r\n\r\n /** */\r\n blocks: {[string]: Masked<*>};\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<PatternBlock>;\r\n _maskedBlocks: {[string]: Array<number>};\r\n _stops: Array<number>;\r\n\r\n constructor (opts: any={}) { // TODO type $Shape<MaskedPatternOptions>={} 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<MaskedPatternOptions>={}) {\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<pattern.length; ++i) {\r\n if (this.blocks) {\r\n const p = pattern.slice(i);\r\n const bNames = Object.keys(this.blocks).filter(bName => 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 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 | 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 ch = this.doPrepare(ch, flags);\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<this._stops.length; ++si) {\r\n const stop = this._stops[si];\r\n if (stop <= blockIndex) stopBefore = stop;\r\n else break;\r\n }\r\n return stopBefore;\r\n }\r\n\r\n /** Appends placeholder depending on laziness */\r\n _appendPlaceholder (toBlockIndex: ?number): ChangeDetails {\r\n const details = new ChangeDetails();\r\n if (this.lazy && toBlockIndex == null) return details;\r\n\r\n const startBlockIter = this._mapPosToBlock(this.value.length);\r\n if (!startBlockIter) return details;\r\n\r\n const startBlockIndex = startBlockIter.index;\r\n const endBlockIndex = toBlockIndex != null ? toBlockIndex : this._blocks.length;\r\n\r\n this._blocks.slice(startBlockIndex, endBlockIndex)\r\n .forEach(b => {\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<this._blocks.length; ++bi) {\r\n const block = this._blocks[bi];\r\n const blockStartPos = accVal.length;\r\n\r\n accVal += block.value;\r\n\r\n if (pos <= accVal.length) {\r\n return {\r\n index: bi,\r\n offset: pos - blockStartPos,\r\n };\r\n }\r\n }\r\n }\r\n\r\n /** */\r\n _blockStartPos (blockIndex: number): number {\r\n return this._blocks\r\n .slice(0, blockIndex)\r\n .reduce((pos, b) => 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<toBlockIter.index; ++bi) {\r\n fn(this._blocks[bi], bi, 0, this._blocks[bi].value.length);\r\n }\r\n\r\n // process last block\r\n fn(this._blocks[toBlockIter.index], toBlockIter.index, 0, toBlockIter.offset);\r\n }\r\n }\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 const removeDetails = super.remove(fromPos, toPos);\r\n this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => {\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<PatternBlock> {\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","// @flow\r\nimport MaskedPattern from './pattern.js';\r\nimport { type AppendFlags } from './base.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<str.length; ++ci) {\r\n const nextVal = val + prepStr + str[ci];\r\n const [minstr, maxstr] = this.boundaries(nextVal);\r\n\r\n if (Number(maxstr) < this.from) prepStr += fromStr[nextVal.length - 1];\r\n else if (Number(minstr) > 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","// @flow\r\nimport MaskedPattern from './pattern.js';\r\nimport MaskedRange from './range.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 /** Parse string to Date */\r\n parse: (string) => Date;\r\n /** Format Date to string */\r\n format: (Date) => string;\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)) === str;\r\n }\r\n\r\n /** Parsed Date */\r\n get date (): ?Date {\r\n return this.isComplete ?\r\n this.parse(this.value) :\r\n null;\r\n }\r\n set date (date: Date) {\r\n this.value = this.format(date);\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n get typedValue (): ?Date {\r\n return this.date;\r\n }\r\n set typedValue (value: Date) {\r\n this.date = 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","// @flow\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","// @flow\r\nimport MaskElement, {type ElementEvent} from './mask-element.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 Is element in focus\r\n @readonly\r\n */\r\n get isActive (): boolean {\r\n return this.input === document.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","// @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\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<Function>};\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 _cursorChanging: TimeoutID;\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 = (el instanceof MaskElement) ?\r\n 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.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) {\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 (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.alignCursorFriendly,\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 this.el.unbindEvents();\r\n }\r\n\r\n /**\r\n Fires custom event\r\n @protected\r\n */\r\n _fireEvent (ev: string) {\r\n const listeners = this._listeners[ev];\r\n if (!listeners) return;\r\n\r\n listeners.forEach(l => l());\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.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');\r\n if (this.masked.isComplete) this._fireEvent('complete');\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) {\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) {\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 () {\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 }\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 if (this.selectionStart !== this.cursorPos) return; // skip if range is selected\r\n if (this._selection) this.cursorPos = this._selection.end;\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 delete this.el;\r\n }\r\n}\r\n","// @flow\r\nimport MaskedPattern from './pattern.js';\r\n\r\n\r\n/** Pattern which validates enum values */\r\nexport default\r\nclass MaskedEnum extends MaskedPattern {\r\n enum: Array<string>;\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","// @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\n\r\n\r\ntype MaskedNumberOptions = {\r\n ...MaskedOptions<Number>,\r\n radix: $PropertyType<MaskedNumber, 'radix'>,\r\n thousandsSeparator: $PropertyType<MaskedNumber, 'thousandsSeparator'>,\r\n mapToRadix: $PropertyType<MaskedNumber, 'mapToRadix'>,\r\n scale: $PropertyType<MaskedNumber, 'scale'>,\r\n signed: $PropertyType<MaskedNumber, 'signed'>,\r\n normalizeZeros: $PropertyType<MaskedNumber, 'normalizeZeros'>,\r\n padFractionalZeros: $PropertyType<MaskedNumber, 'padFractionalZeros'>,\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<string>} 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<Class<Number>> {\r\n static DEFAULTS: $Shape<MaskedNumberOptions>;\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<string>;\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 _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<MaskedNumberOptions>) {\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: *) {\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 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) {\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 /** Parsed Number */\r\n get number (): number {\r\n return Number(this.unmaskedValue);\r\n }\r\n\r\n set number (number: number) {\r\n this.unmaskedValue = String(number);\r\n }\r\n\r\n /**\r\n @override\r\n */\r\n get typedValue (): number {\r\n return this.number;\r\n }\r\n\r\n set typedValue (value: number) {\r\n this.number = value;\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","// @flow\r\nimport Masked, {type MaskedOptions} from './base.js';\r\n\r\n\r\n/** Masking by RegExp */\r\nexport default\r\nclass MaskedRegExp extends Masked<RegExp> {\r\n /**\r\n @override\r\n @param {Object} opts\r\n */\r\n _update (opts: $Shape<MaskedOptions<RegExp>>) {\r\n if (opts.mask) opts.validate = (value) => value.search(opts.mask) >= 0;\r\n super._update(opts);\r\n }\r\n}\r\n","// @flow\r\nimport Masked, {type MaskedOptions} from './base.js';\r\n\r\n\r\n/** Masking by custom Function */\r\nexport default\r\nclass MaskedFunction extends Masked<Function> {\r\n /**\r\n @override\r\n @param {Object} opts\r\n */\r\n _update (opts: MaskedOptions<Function>) {\r\n if (opts.mask) opts.validate = opts.mask;\r\n super._update(opts);\r\n }\r\n}\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\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<DynamicMaskType> {\r\n /** Currently chosen mask */\r\n currentMask: ?Masked<*>;\r\n /** Compliled {@link Masked} options */\r\n compiledMasks: Array<Masked<*>>;\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 (...args: *): ChangeDetails {\r\n const details = this._applyDispatch(...args);\r\n\r\n if (this.currentMask) {\r\n details.aggregate(this.currentMask._appendChar(...args));\r\n }\r\n\r\n return details;\r\n }\r\n\r\n _applyDispatch (appended: string='', flags: AppendFlags={}) {\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 // $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 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: *) {\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={}) {\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 () {\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","import {g} from './core/utils.js';\r\n\r\nimport InputMask from './controls/input.js';\r\n\r\nimport Masked from './masked/base.js';\r\nimport MaskedPattern from './masked/pattern.js';\r\nimport MaskedEnum from './masked/enum.js';\r\nimport MaskedRange from './masked/range.js';\r\nimport MaskedNumber from './masked/number.js';\r\nimport MaskedDate from './masked/date.js';\r\nimport MaskedRegExp from './masked/regexp.js';\r\nimport MaskedFunction from './masked/function.js';\r\nimport MaskedDynamic from './masked/dynamic.js';\r\nimport createMask from './masked/factory.js';\r\nimport MaskElement from './controls/mask-element.js';\r\nimport HTMLMaskElement from './controls/html-mask-element.js';\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\nfunction IMask (el, opts={}) {\r\n\t// currently available only for input-like elements\r\n return new InputMask(el, opts);\r\n}\r\n\r\n/** {@link InputMask} */\r\nIMask.InputMask = InputMask;\r\n\r\n/** {@link Masked} */\r\nIMask.Masked = Masked;\r\n/** {@link MaskedPattern} */\r\nIMask.MaskedPattern = MaskedPattern;\r\n/** {@link MaskedEnum} */\r\nIMask.MaskedEnum = MaskedEnum;\r\n/** {@link MaskedRange} */\r\nIMask.MaskedRange = MaskedRange;\r\n/** {@link MaskedNumber} */\r\nIMask.MaskedNumber = MaskedNumber;\r\n/** {@link MaskedDate} */\r\nIMask.MaskedDate = MaskedDate;\r\n/** {@link MaskedRegExp} */\r\nIMask.MaskedRegExp = MaskedRegExp;\r\n/** {@link MaskedFunction} */\r\nIMask.MaskedFunction = MaskedFunction;\r\n/** {@link MaskedDynamic} */\r\nIMask.MaskedDynamic = MaskedDynamic;\r\n/** {@link createMask} */\r\nIMask.createMask = createMask;\r\n/** {@link MaskElement} */\r\nIMask.MaskElement = MaskElement;\r\n/** {@link HTMLMaskElement} */\r\nIMask.HTMLMaskElement = HTMLMaskElement;\r\n\r\ng.IMask = IMask;\r\n\r\nexport default IMask;\r\nexport {\r\n InputMask,\r\n Masked,\r\n MaskedPattern,\r\n MaskedEnum,\r\n MaskedRange,\r\n MaskedNumber,\r\n MaskedDate,\r\n MaskedRegExp,\r\n MaskedFunction,\r\n MaskedDynamic,\r\n createMask,\r\n MaskElement,\r\n HTMLMaskElement,\r\n};\r\n"],"names":["isString","str","String","DIRECTION","NONE","LEFT","FORCE_LEFT","RIGHT","FORCE_RIGHT","forceDirection","direction","escapeRegExp","replace","objectIncludes","b","a","arrA","Array","isArray","arrB","i","length","dateA","Date","dateB","getTime","regexpA","RegExp","regexpB","toString","keys","Object","prototype","hasOwnProperty","call","g","window","global","self","ActionDetails","value","cursorPos","oldValue","oldSelection","slice","startChangePos","start","Math","min","substr","insertedCount","max","end","removedCount","substring","ChangeDetails","details","assign","inserted","rawInserted","skip","tailShift","ContinuousTailDetails","from","stop","tail","masked","append","aggregate","_appendPlaceholder","pos","shiftChar","state","Masked","opts","_value","_update","isInitialized","withValueRefresh","bind","reset","input","doCommit","fromPos","toPos","extractInput","appendTo","ch","flags","doPrepare","checkTail","consistentState","_appendCharRaw","consistentTail","appended","doValidate","beforeTailState","overwrite","shiftBefore","tailDetails","appendTail","Error","_beforeTailState","ci","_appendChar","fn","_refreshing","unmasked","unmaskedValue","ret","resolve","prepare","validate","parent","commit","deleteCount","removeDirection","tailPos","extractTail","nearestInputPos","changeDetails","remove","raw","maskedClass","mask","IMask","MaskedRegExp","MaskedPattern","MaskedDate","Number","MaskedNumber","MaskedDynamic","Function","MaskedFunction","console","warn","createMask","MaskedClass","DEFAULT_INPUT_DEFINITIONS","PatternInputDefinition","blockOpts","_isFilled","isOptional","lazy","placeholderChar","Boolean","minPos","maxPos","boundPos","isComplete","PatternFixedDefinition","_isRawInput","char","isResolved","isUnmasking","ChunksTailDetails","chunks","map","join","tailChunk","lastChunk","extendLast","extend","push","firstTailChunk","shift","blockIndex","chunk","lastBlockIter","_mapPosToBlock","chunkBlock","index","_stops","indexOf","_blocks","remainChars","chunkShiftPos","splice","c","props","cstate","definitions","DEFAULTS","_rebuildMask","defs","_maskedBlocks","pattern","unmaskingBlock","optionalBlock","blocks","p","bNames","filter","bName","sort","maskedBlock","isInput","STOP_CHAR","ESCAPE_CHAR","def","forEach","blockIter","bi","block","blockDetails","chunkTail","_forEachBlocksInRange","bFromPos","bToPos","blockChunk","_findStopBefore","_blockStartPos","_","stopBefore","si","toBlockIndex","startBlockIter","startBlockIndex","endBlockIndex","args","bDetails","accVal","blockStartPos","offset","reduce","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","maskedState","every","InputDefinition","FixedDefinition","MaskedRange","to","maxLength","fromStr","padStart","toStr","sameCharsCount","repeat","minstr","maxstr","match","placeholder","num","padEnd","autofix","val","prepStr","nextVal","boundaries","firstNonZero","search","_matchFrom","GET_DEFAULT_BLOCKS","Y","getFullYear","m","getMonth","d","getDate","bk","date","isDateExist","format","parse","day","month","year","split","MaskElement","selectionStart","selectionEnd","_unsafeSelect","e","handlers","_unsafeSelectionStart","_unsafeSelectionEnd","HTMLMaskElement","_handlers","setSelectionRange","event","_toggleEventHandler","EVENTS_MAP","handler","removeEventListener","addEventListener","document","activeElement","selectionChange","drop","click","focus","InputMask","el","_listeners","_unmaskedValue","_saveSelection","_onInput","_onChange","_onDrop","_onFocus","alignCursor","alignCursorFriendly","_bindEvents","updateValue","bindEvents","unbindEvents","ev","listeners","l","_selection","newUnmaskedValue","newValue","isChanged","_fireChangeEvents","restOpts","updateMask","maskEquals","updateOpts","updateOptions","updateControl","_delayUpdateCursor","_abortUpdateCursor","_changingCursorPos","_cursorChanging","setTimeout","_fireEvent","clearTimeout","hIndex","oldRawValue","rawInputValue","removed","updateCursor","preventDefault","stopPropagation","_unbindEvents","constructor","typedValue","isActive","select","MaskedEnum","enum","some","_updateRegExps","allowNegative","midInput","mid","scale","radix","_numberRegExpInput","_numberRegExp","_mapToRadixRegExp","mapToRadix","_thousandsSeparatorRegExp","thousandsSeparator","parts","_removeThousandsSeparators","extendOnSeparators","count","_separatorsCount","_adjustRangeWithSeparators","prevBeforeTailValue","prevBeforeTailSeparatorsCount","_separatorsCountFromSlice","appendDetails","_insertThousandsSeparators","beforeTailValue","beforeTailSeparatorsCount","searchFrom","separatorPos","separatorAroundFromPos","_findSeparatorAround","separatorAroundToPos","valueBeforePos","valueAfterPos","separatorAtLeftPos","separatorAtLeftEndPos","separatorAtRightPos","regexp","valid","test","number","isNaN","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"],"mappings":"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"}