{"version":3,"sources":["jsdelivr-header.js","/npm/imask@7.6.0/esm/core/utils.js","/npm/imask@7.6.0/esm/core/action-details.js","/npm/imask@7.6.0/esm/core/holder.js","/npm/imask@7.6.0/esm/masked/factory.js","/npm/imask@7.6.0/esm/controls/mask-element.js","/npm/imask@7.6.0/esm/controls/html-mask-element.js","/npm/imask@7.6.0/esm/controls/html-input-mask-element.js","/npm/imask@7.6.0/esm/controls/html-contenteditable-mask-element.js","/npm/imask@7.6.0/esm/controls/input-history.js","/npm/imask@7.6.0/esm/controls/input.js","/npm/imask@7.6.0/esm/core/change-details.js","/npm/imask@7.6.0/esm/core/continuous-tail-details.js","/npm/imask@7.6.0/esm/masked/base.js","/npm/imask@7.6.0/esm/masked/pattern/chunk-tail-details.js","/npm/imask@7.6.0/esm/masked/pattern/cursor.js","/npm/imask@7.6.0/esm/masked/pattern/fixed-definition.js","/npm/imask@7.6.0/esm/masked/pattern/input-definition.js","/npm/imask@7.6.0/esm/masked/regexp.js","/npm/imask@7.6.0/esm/masked/pattern.js","/npm/imask@7.6.0/esm/masked/range.js","/npm/imask@7.6.0/esm/masked/date.js","/npm/imask@7.6.0/esm/masked/dynamic.js","/npm/imask@7.6.0/esm/masked/enum.js","/npm/imask@7.6.0/esm/masked/function.js","/npm/imask@7.6.0/esm/masked/number.js","/npm/imask@7.6.0/esm/masked/pipe.js","/npm/imask@7.6.0/esm/masked/repeat.js","/npm/imask@7.6.0/esm/index.js"],"names":[],"mappings":"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","file":"/npm/imask@7.6.0/esm/index.js/+esm","sourceRoot":"","sourcesContent":["/**\n * Bundled by jsDelivr using Rollup v2.79.2 and Terser v5.39.0.\n * Original file: /npm/imask@7.6.0/esm/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/** Checks if value is string */\nfunction isString(str) {\n  return typeof str === 'string' || str instanceof String;\n}\n\n/** Checks if value is object */\nfunction isObject(obj) {\n  var _obj$constructor;\n  return typeof obj === 'object' && obj != null && (obj == null || (_obj$constructor = obj.constructor) == null ? void 0 : _obj$constructor.name) === 'Object';\n}\nfunction pick(obj, keys) {\n  if (Array.isArray(keys)) return pick(obj, (_, k) => keys.includes(k));\n  return Object.entries(obj).reduce((acc, _ref) => {\n    let [k, v] = _ref;\n    if (keys(v, k)) acc[k] = v;\n    return acc;\n  }, {});\n}\n\n/** Direction */\nconst DIRECTION = {\n  NONE: 'NONE',\n  LEFT: 'LEFT',\n  FORCE_LEFT: 'FORCE_LEFT',\n  RIGHT: 'RIGHT',\n  FORCE_RIGHT: 'FORCE_RIGHT'\n};\n\n/** Direction */\n\nfunction forceDirection(direction) {\n  switch (direction) {\n    case DIRECTION.LEFT:\n      return DIRECTION.FORCE_LEFT;\n    case DIRECTION.RIGHT:\n      return DIRECTION.FORCE_RIGHT;\n    default:\n      return direction;\n  }\n}\n\n/** Escapes regular expression control chars */\nfunction escapeRegExp(str) {\n  return str.replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1');\n}\n\n// cloned from https://github.com/epoberezkin/fast-deep-equal with small changes\nfunction objectIncludes(b, a) {\n  if (a === b) return true;\n  const arrA = Array.isArray(a),\n    arrB = Array.isArray(b);\n  let i;\n  if (arrA && arrB) {\n    if (a.length != b.length) return false;\n    for (i = 0; i < a.length; i++) if (!objectIncludes(a[i], b[i])) return false;\n    return true;\n  }\n  if (arrA != arrB) return false;\n  if (a && b && typeof a === 'object' && typeof b === 'object') {\n    const dateA = a instanceof Date,\n      dateB = b instanceof Date;\n    if (dateA && dateB) return a.getTime() == b.getTime();\n    if (dateA != dateB) return false;\n    const regexpA = a instanceof RegExp,\n      regexpB = b instanceof RegExp;\n    if (regexpA && regexpB) return a.toString() == b.toString();\n    if (regexpA != regexpB) return false;\n    const keys = Object.keys(a);\n    // if (keys.length !== Object.keys(b).length) return false;\n\n    for (i = 0; i < keys.length; i++) if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n    for (i = 0; i < keys.length; i++) if (!objectIncludes(b[keys[i]], a[keys[i]])) return false;\n    return true;\n  } else if (a && b && typeof a === 'function' && typeof b === 'function') {\n    return a.toString() === b.toString();\n  }\n  return false;\n}\n\n/** Selection range */\n\nexport { DIRECTION, escapeRegExp, forceDirection, isObject, isString, objectIncludes, pick };\n","import { DIRECTION } from './utils.js';\n\n/** Provides details of changing input */\nclass ActionDetails {\n  /** Current input value */\n\n  /** Current cursor position */\n\n  /** Old input value */\n\n  /** Old selection */\n\n  constructor(opts) {\n    Object.assign(this, opts);\n\n    // double check if left part was changed (autofilling, other non-standard input triggers)\n    while (this.value.slice(0, this.startChangePos) !== this.oldValue.slice(0, this.startChangePos)) {\n      --this.oldSelection.start;\n    }\n    if (this.insertedCount) {\n      // double check right part\n      while (this.value.slice(this.cursorPos) !== this.oldValue.slice(this.oldSelection.end)) {\n        if (this.value.length - this.cursorPos < this.oldValue.length - this.oldSelection.end) ++this.oldSelection.end;else ++this.cursorPos;\n      }\n    }\n  }\n\n  /** Start changing position */\n  get startChangePos() {\n    return Math.min(this.cursorPos, this.oldSelection.start);\n  }\n\n  /** Inserted symbols count */\n  get insertedCount() {\n    return this.cursorPos - this.startChangePos;\n  }\n\n  /** Inserted symbols */\n  get inserted() {\n    return this.value.substr(this.startChangePos, this.insertedCount);\n  }\n\n  /** Removed symbols count */\n  get removedCount() {\n    // Math.max for opposite operation\n    return Math.max(this.oldSelection.end - this.startChangePos ||\n    // for Delete\n    this.oldValue.length - this.value.length, 0);\n  }\n\n  /** Removed symbols */\n  get removed() {\n    return this.oldValue.substr(this.startChangePos, this.removedCount);\n  }\n\n  /** Unchanged head symbols */\n  get head() {\n    return this.value.substring(0, this.startChangePos);\n  }\n\n  /** Unchanged tail symbols */\n  get tail() {\n    return this.value.substring(this.startChangePos + this.insertedCount);\n  }\n\n  /** Remove direction */\n  get removeDirection() {\n    if (!this.removedCount || this.insertedCount) return DIRECTION.NONE;\n\n    // align right if delete at right\n    return (this.oldSelection.end === this.cursorPos || this.oldSelection.start === this.cursorPos) &&\n    // if not range removed (event with backspace)\n    this.oldSelection.end === this.oldSelection.start ? DIRECTION.RIGHT : DIRECTION.LEFT;\n  }\n}\n\nexport { ActionDetails as default };\n","/** Applies mask on element */\nfunction IMask(el, opts) {\n  // currently available only for input-like elements\n  return new IMask.InputMask(el, opts);\n}\n\nexport { IMask as default };\n","import { isString, isObject, pick } from '../core/utils.js';\nimport IMask from '../core/holder.js';\n\n// TODO can't use overloads here because of https://github.com/microsoft/TypeScript/issues/50754\n// export function maskedClass(mask: string): typeof MaskedPattern;\n// export function maskedClass(mask: DateConstructor): typeof MaskedDate;\n// export function maskedClass(mask: NumberConstructor): typeof MaskedNumber;\n// export function maskedClass(mask: Array<any> | ArrayConstructor): typeof MaskedDynamic;\n// export function maskedClass(mask: MaskedDate): typeof MaskedDate;\n// export function maskedClass(mask: MaskedNumber): typeof MaskedNumber;\n// export function maskedClass(mask: MaskedEnum): typeof MaskedEnum;\n// export function maskedClass(mask: MaskedRange): typeof MaskedRange;\n// export function maskedClass(mask: MaskedRegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: MaskedFunction): typeof MaskedFunction;\n// export function maskedClass(mask: MaskedPattern): typeof MaskedPattern;\n// export function maskedClass(mask: MaskedDynamic): typeof MaskedDynamic;\n// export function maskedClass(mask: Masked): typeof Masked;\n// export function maskedClass(mask: typeof Masked): typeof Masked;\n// export function maskedClass(mask: typeof MaskedDate): typeof MaskedDate;\n// export function maskedClass(mask: typeof MaskedNumber): typeof MaskedNumber;\n// export function maskedClass(mask: typeof MaskedEnum): typeof MaskedEnum;\n// export function maskedClass(mask: typeof MaskedRange): typeof MaskedRange;\n// export function maskedClass(mask: typeof MaskedRegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: typeof MaskedFunction): typeof MaskedFunction;\n// export function maskedClass(mask: typeof MaskedPattern): typeof MaskedPattern;\n// export function maskedClass(mask: typeof MaskedDynamic): typeof MaskedDynamic;\n// export function maskedClass<Mask extends typeof Masked> (mask: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n\n/** Get Masked class by mask type */\nfunction maskedClass(mask) /* TODO */{\n  if (mask == null) throw new Error('mask property should be defined');\n  if (mask instanceof RegExp) return IMask.MaskedRegExp;\n  if (isString(mask)) return IMask.MaskedPattern;\n  if (mask === Date) return IMask.MaskedDate;\n  if (mask === Number) return IMask.MaskedNumber;\n  if (Array.isArray(mask) || mask === Array) return IMask.MaskedDynamic;\n  if (IMask.Masked && mask.prototype instanceof IMask.Masked) return mask;\n  if (IMask.Masked && mask instanceof IMask.Masked) return mask.constructor;\n  if (mask instanceof Function) return IMask.MaskedFunction;\n  console.warn('Mask not found for mask', mask); // eslint-disable-line no-console\n  return IMask.Masked;\n}\nfunction normalizeOpts(opts) {\n  if (!opts) throw new Error('Options in not defined');\n  if (IMask.Masked) {\n    if (opts.prototype instanceof IMask.Masked) return {\n      mask: opts\n    };\n\n    /*\n      handle cases like:\n      1) opts = Masked\n      2) opts = { mask: Masked, ...instanceOpts }\n    */\n    const {\n      mask = undefined,\n      ...instanceOpts\n    } = opts instanceof IMask.Masked ? {\n      mask: opts\n    } : isObject(opts) && opts.mask instanceof IMask.Masked ? opts : {};\n    if (mask) {\n      const _mask = mask.mask;\n      return {\n        ...pick(mask, (_, k) => !k.startsWith('_')),\n        mask: mask.constructor,\n        _mask,\n        ...instanceOpts\n      };\n    }\n  }\n  if (!isObject(opts)) return {\n    mask: opts\n  };\n  return {\n    ...opts\n  };\n}\n\n// TODO can't use overloads here because of https://github.com/microsoft/TypeScript/issues/50754\n\n// From masked\n// export default function createMask<Opts extends Masked, ReturnMasked=Opts> (opts: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask<Opts extends MaskedOptions<typeof Masked>, ReturnMasked extends Masked=InstanceType<Opts['mask']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedDate>, ReturnMasked extends MaskedDate=MaskedDate<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedNumber>, ReturnMasked extends MaskedNumber=MaskedNumber<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedEnum>, ReturnMasked extends MaskedEnum=MaskedEnum<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedRange>, ReturnMasked extends MaskedRange=MaskedRange<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedRegExp>, ReturnMasked extends MaskedRegExp=MaskedRegExp<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedFunction>, ReturnMasked extends MaskedFunction=MaskedFunction<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedPattern>, ReturnMasked extends MaskedPattern=MaskedPattern<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedDynamic>, ReturnMasked extends MaskedDynamic=MaskedDynamic<Opts['parent']>> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask<Opts extends MaskedOptions<Masked>, ReturnMasked=Opts extends MaskedOptions<infer M> ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedNumberOptions, ReturnMasked extends MaskedNumber=MaskedNumber<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedDateFactoryOptions, ReturnMasked extends MaskedDate=MaskedDate<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedEnumOptions, ReturnMasked extends MaskedEnum=MaskedEnum<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedRangeOptions, ReturnMasked extends MaskedRange=MaskedRange<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedPatternOptions, ReturnMasked extends MaskedPattern=MaskedPattern<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedDynamicOptions, ReturnMasked extends MaskedDynamic=MaskedDynamic<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<RegExp>, ReturnMasked extends MaskedRegExp=MaskedRegExp<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<Function>, ReturnMasked extends MaskedFunction=MaskedFunction<Opts['parent']>> (opts: Opts): ReturnMasked;\n\n/** Creates new {@link Masked} depending on mask type */\nfunction createMask(opts) {\n  if (IMask.Masked && opts instanceof IMask.Masked) return opts;\n  const nOpts = normalizeOpts(opts);\n  const MaskedClass = maskedClass(nOpts.mask);\n  if (!MaskedClass) throw new Error(\"Masked class is not found for provided mask \" + nOpts.mask + \", appropriate module needs to be imported manually before creating mask.\");\n  if (nOpts.mask === MaskedClass) delete nOpts.mask;\n  if (nOpts._mask) {\n    nOpts.mask = nOpts._mask;\n    delete nOpts._mask;\n  }\n  return new MaskedClass(nOpts);\n}\nIMask.createMask = createMask;\n\nexport { createMask as default, maskedClass, normalizeOpts };\n","import IMask from '../core/holder.js';\n\n/**  Generic element API to use with mask */\nclass MaskElement {\n  /** */\n\n  /** */\n\n  /** */\n\n  /** Safely returns selection start */\n  get selectionStart() {\n    let start;\n    try {\n      start = this._unsafeSelectionStart;\n    } catch {}\n    return start != null ? start : this.value.length;\n  }\n\n  /** Safely returns selection end */\n  get selectionEnd() {\n    let end;\n    try {\n      end = this._unsafeSelectionEnd;\n    } catch {}\n    return end != null ? end : this.value.length;\n  }\n\n  /** Safely sets element selection */\n  select(start, end) {\n    if (start == null || end == null || start === this.selectionStart && end === this.selectionEnd) return;\n    try {\n      this._unsafeSelect(start, end);\n    } catch {}\n  }\n\n  /** */\n  get isActive() {\n    return false;\n  }\n  /** */\n\n  /** */\n\n  /** */\n}\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n","import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\nconst KEY_Z = 90;\nconst KEY_Y = 89;\n\n/** Bridge between HTMLElement and {@link Masked} */\nclass HTMLMaskElement extends MaskElement {\n  /** HTMLElement to use mask on */\n\n  constructor(input) {\n    super();\n    this.input = input;\n    this._onKeydown = this._onKeydown.bind(this);\n    this._onInput = this._onInput.bind(this);\n    this._onBeforeinput = this._onBeforeinput.bind(this);\n    this._onCompositionEnd = this._onCompositionEnd.bind(this);\n  }\n  get rootElement() {\n    var _this$input$getRootNo, _this$input$getRootNo2, _this$input;\n    return (_this$input$getRootNo = (_this$input$getRootNo2 = (_this$input = this.input).getRootNode) == null ? void 0 : _this$input$getRootNo2.call(_this$input)) != null ? _this$input$getRootNo : document;\n  }\n\n  /** Is element in focus */\n  get isActive() {\n    return this.input === this.rootElement.activeElement;\n  }\n\n  /** Binds HTMLElement events to mask internal events */\n  bindEvents(handlers) {\n    this.input.addEventListener('keydown', this._onKeydown);\n    this.input.addEventListener('input', this._onInput);\n    this.input.addEventListener('beforeinput', this._onBeforeinput);\n    this.input.addEventListener('compositionend', this._onCompositionEnd);\n    this.input.addEventListener('drop', handlers.drop);\n    this.input.addEventListener('click', handlers.click);\n    this.input.addEventListener('focus', handlers.focus);\n    this.input.addEventListener('blur', handlers.commit);\n    this._handlers = handlers;\n  }\n  _onKeydown(e) {\n    if (this._handlers.redo && (e.keyCode === KEY_Z && e.shiftKey && (e.metaKey || e.ctrlKey) || e.keyCode === KEY_Y && e.ctrlKey)) {\n      e.preventDefault();\n      return this._handlers.redo(e);\n    }\n    if (this._handlers.undo && e.keyCode === KEY_Z && (e.metaKey || e.ctrlKey)) {\n      e.preventDefault();\n      return this._handlers.undo(e);\n    }\n    if (!e.isComposing) this._handlers.selectionChange(e);\n  }\n  _onBeforeinput(e) {\n    if (e.inputType === 'historyUndo' && this._handlers.undo) {\n      e.preventDefault();\n      return this._handlers.undo(e);\n    }\n    if (e.inputType === 'historyRedo' && this._handlers.redo) {\n      e.preventDefault();\n      return this._handlers.redo(e);\n    }\n  }\n  _onCompositionEnd(e) {\n    this._handlers.input(e);\n  }\n  _onInput(e) {\n    if (!e.isComposing) this._handlers.input(e);\n  }\n\n  /** Unbinds HTMLElement events to mask internal events */\n  unbindEvents() {\n    this.input.removeEventListener('keydown', this._onKeydown);\n    this.input.removeEventListener('input', this._onInput);\n    this.input.removeEventListener('beforeinput', this._onBeforeinput);\n    this.input.removeEventListener('compositionend', this._onCompositionEnd);\n    this.input.removeEventListener('drop', this._handlers.drop);\n    this.input.removeEventListener('click', this._handlers.click);\n    this.input.removeEventListener('focus', this._handlers.focus);\n    this.input.removeEventListener('blur', this._handlers.commit);\n    this._handlers = {};\n  }\n}\nIMask.HTMLMaskElement = HTMLMaskElement;\n\nexport { HTMLMaskElement as default };\n","import HTMLMaskElement from './html-mask-element.js';\nimport IMask from '../core/holder.js';\nimport './mask-element.js';\n\n/** Bridge between InputElement and {@link Masked} */\nclass HTMLInputMaskElement extends HTMLMaskElement {\n  /** InputElement to use mask on */\n\n  constructor(input) {\n    super(input);\n    this.input = input;\n  }\n\n  /** Returns InputElement selection start */\n  get _unsafeSelectionStart() {\n    return this.input.selectionStart != null ? this.input.selectionStart : this.value.length;\n  }\n\n  /** Returns InputElement selection end */\n  get _unsafeSelectionEnd() {\n    return this.input.selectionEnd;\n  }\n\n  /** Sets InputElement selection */\n  _unsafeSelect(start, end) {\n    this.input.setSelectionRange(start, end);\n  }\n  get value() {\n    return this.input.value;\n  }\n  set value(value) {\n    this.input.value = value;\n  }\n}\nIMask.HTMLMaskElement = HTMLMaskElement;\n\nexport { HTMLInputMaskElement as default };\n","import HTMLMaskElement from './html-mask-element.js';\nimport IMask from '../core/holder.js';\nimport './mask-element.js';\n\nclass HTMLContenteditableMaskElement extends HTMLMaskElement {\n  /** Returns HTMLElement selection start */\n  get _unsafeSelectionStart() {\n    const root = this.rootElement;\n    const selection = root.getSelection && root.getSelection();\n    const anchorOffset = selection && selection.anchorOffset;\n    const focusOffset = selection && selection.focusOffset;\n    if (focusOffset == null || anchorOffset == null || anchorOffset < focusOffset) {\n      return anchorOffset;\n    }\n    return focusOffset;\n  }\n\n  /** Returns HTMLElement selection end */\n  get _unsafeSelectionEnd() {\n    const root = this.rootElement;\n    const selection = root.getSelection && root.getSelection();\n    const anchorOffset = selection && selection.anchorOffset;\n    const focusOffset = selection && selection.focusOffset;\n    if (focusOffset == null || anchorOffset == null || anchorOffset > focusOffset) {\n      return anchorOffset;\n    }\n    return focusOffset;\n  }\n\n  /** Sets HTMLElement selection */\n  _unsafeSelect(start, end) {\n    if (!this.rootElement.createRange) return;\n    const range = this.rootElement.createRange();\n    range.setStart(this.input.firstChild || this.input, start);\n    range.setEnd(this.input.lastChild || this.input, end);\n    const root = this.rootElement;\n    const selection = root.getSelection && root.getSelection();\n    if (selection) {\n      selection.removeAllRanges();\n      selection.addRange(range);\n    }\n  }\n\n  /** HTMLElement value */\n  get value() {\n    return this.input.textContent || '';\n  }\n  set value(value) {\n    this.input.textContent = value;\n  }\n}\nIMask.HTMLContenteditableMaskElement = HTMLContenteditableMaskElement;\n\nexport { HTMLContenteditableMaskElement as default };\n","class InputHistory {\n  constructor() {\n    this.states = [];\n    this.currentIndex = 0;\n  }\n  get currentState() {\n    return this.states[this.currentIndex];\n  }\n  get isEmpty() {\n    return this.states.length === 0;\n  }\n  push(state) {\n    // if current index points before the last element then remove the future\n    if (this.currentIndex < this.states.length - 1) this.states.length = this.currentIndex + 1;\n    this.states.push(state);\n    if (this.states.length > InputHistory.MAX_LENGTH) this.states.shift();\n    this.currentIndex = this.states.length - 1;\n  }\n  go(steps) {\n    this.currentIndex = Math.min(Math.max(this.currentIndex + steps, 0), this.states.length - 1);\n    return this.currentState;\n  }\n  undo() {\n    return this.go(-1);\n  }\n  redo() {\n    return this.go(+1);\n  }\n  clear() {\n    this.states.length = 0;\n    this.currentIndex = 0;\n  }\n}\nInputHistory.MAX_LENGTH = 100;\n\nexport { InputHistory as default };\n","import { DIRECTION } from '../core/utils.js';\nimport ActionDetails from '../core/action-details.js';\nimport createMask, { maskedClass } from '../masked/factory.js';\nimport MaskElement from './mask-element.js';\nimport HTMLInputMaskElement from './html-input-mask-element.js';\nimport HTMLContenteditableMaskElement from './html-contenteditable-mask-element.js';\nimport IMask from '../core/holder.js';\nimport InputHistory from './input-history.js';\nimport './html-mask-element.js';\n\n/** Listens to element events and controls changes between element and {@link Masked} */\nclass InputMask {\n  /**\n    View element\n  */\n\n  /** Internal {@link Masked} model */\n\n  constructor(el, opts) {\n    this.el = el instanceof MaskElement ? el : el.isContentEditable && el.tagName !== 'INPUT' && el.tagName !== 'TEXTAREA' ? new HTMLContenteditableMaskElement(el) : new HTMLInputMaskElement(el);\n    this.masked = createMask(opts);\n    this._listeners = {};\n    this._value = '';\n    this._unmaskedValue = '';\n    this._rawInputValue = '';\n    this.history = new InputHistory();\n    this._saveSelection = this._saveSelection.bind(this);\n    this._onInput = this._onInput.bind(this);\n    this._onChange = this._onChange.bind(this);\n    this._onDrop = this._onDrop.bind(this);\n    this._onFocus = this._onFocus.bind(this);\n    this._onClick = this._onClick.bind(this);\n    this._onUndo = this._onUndo.bind(this);\n    this._onRedo = this._onRedo.bind(this);\n    this.alignCursor = this.alignCursor.bind(this);\n    this.alignCursorFriendly = this.alignCursorFriendly.bind(this);\n    this._bindEvents();\n\n    // refresh\n    this._onChange();\n  }\n  maskEquals(mask) {\n    var _this$masked;\n    return mask == null || ((_this$masked = this.masked) == null ? void 0 : _this$masked.maskEquals(mask));\n  }\n\n  /** Masked */\n  get mask() {\n    return this.masked.mask;\n  }\n  set mask(mask) {\n    if (this.maskEquals(mask)) return;\n    if (!(mask instanceof IMask.Masked) && this.masked.constructor === maskedClass(mask)) {\n      // TODO \"any\" no idea\n      this.masked.updateOptions({\n        mask\n      });\n      return;\n    }\n    const masked = mask instanceof IMask.Masked ? mask : createMask({\n      mask\n    });\n    masked.unmaskedValue = this.masked.unmaskedValue;\n    this.masked = masked;\n  }\n\n  /** Raw value */\n  get value() {\n    return this._value;\n  }\n  set value(str) {\n    if (this.value === str) return;\n    this.masked.value = str;\n    this.updateControl('auto');\n  }\n\n  /** Unmasked value */\n  get unmaskedValue() {\n    return this._unmaskedValue;\n  }\n  set unmaskedValue(str) {\n    if (this.unmaskedValue === str) return;\n    this.masked.unmaskedValue = str;\n    this.updateControl('auto');\n  }\n\n  /** Raw input value */\n  get rawInputValue() {\n    return this._rawInputValue;\n  }\n  set rawInputValue(str) {\n    if (this.rawInputValue === str) return;\n    this.masked.rawInputValue = str;\n    this.updateControl();\n    this.alignCursor();\n  }\n\n  /** Typed unmasked value */\n  get typedValue() {\n    return this.masked.typedValue;\n  }\n  set typedValue(val) {\n    if (this.masked.typedValueEquals(val)) return;\n    this.masked.typedValue = val;\n    this.updateControl('auto');\n  }\n\n  /** Display value */\n  get displayValue() {\n    return this.masked.displayValue;\n  }\n\n  /** Starts listening to element events */\n  _bindEvents() {\n    this.el.bindEvents({\n      selectionChange: this._saveSelection,\n      input: this._onInput,\n      drop: this._onDrop,\n      click: this._onClick,\n      focus: this._onFocus,\n      commit: this._onChange,\n      undo: this._onUndo,\n      redo: this._onRedo\n    });\n  }\n\n  /** Stops listening to element events */\n  _unbindEvents() {\n    if (this.el) this.el.unbindEvents();\n  }\n\n  /** Fires custom event */\n  _fireEvent(ev, e) {\n    const listeners = this._listeners[ev];\n    if (!listeners) return;\n    listeners.forEach(l => l(e));\n  }\n\n  /** Current selection start */\n  get selectionStart() {\n    return this._cursorChanging ? this._changingCursorPos : this.el.selectionStart;\n  }\n\n  /** Current cursor position */\n  get cursorPos() {\n    return this._cursorChanging ? this._changingCursorPos : this.el.selectionEnd;\n  }\n  set cursorPos(pos) {\n    if (!this.el || !this.el.isActive) return;\n    this.el.select(pos, pos);\n    this._saveSelection();\n  }\n\n  /** Stores current selection */\n  _saveSelection( /* ev */\n  ) {\n    if (this.displayValue !== this.el.value) {\n      console.warn('Element value was changed outside of mask. Syncronize mask using `mask.updateValue()` to work properly.'); // eslint-disable-line no-console\n    }\n    this._selection = {\n      start: this.selectionStart,\n      end: this.cursorPos\n    };\n  }\n\n  /** Syncronizes model value from view */\n  updateValue() {\n    this.masked.value = this.el.value;\n    this._value = this.masked.value;\n    this._unmaskedValue = this.masked.unmaskedValue;\n    this._rawInputValue = this.masked.rawInputValue;\n  }\n\n  /** Syncronizes view from model value, fires change events */\n  updateControl(cursorPos) {\n    const newUnmaskedValue = this.masked.unmaskedValue;\n    const newValue = this.masked.value;\n    const newRawInputValue = this.masked.rawInputValue;\n    const newDisplayValue = this.displayValue;\n    const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue || this._rawInputValue !== newRawInputValue;\n    this._unmaskedValue = newUnmaskedValue;\n    this._value = newValue;\n    this._rawInputValue = newRawInputValue;\n    if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n    if (cursorPos === 'auto') this.alignCursor();else if (cursorPos != null) this.cursorPos = cursorPos;\n    if (isChanged) this._fireChangeEvents();\n    if (!this._historyChanging && (isChanged || this.history.isEmpty)) this.history.push({\n      unmaskedValue: newUnmaskedValue,\n      selection: {\n        start: this.selectionStart,\n        end: this.cursorPos\n      }\n    });\n  }\n\n  /** Updates options with deep equal check, recreates {@link Masked} model if mask type changes */\n  updateOptions(opts) {\n    const {\n      mask,\n      ...restOpts\n    } = opts; // TODO types, yes, mask is optional\n\n    const updateMask = !this.maskEquals(mask);\n    const updateOpts = this.masked.optionsIsChanged(restOpts);\n    if (updateMask) this.mask = mask;\n    if (updateOpts) this.masked.updateOptions(restOpts); // TODO\n\n    if (updateMask || updateOpts) this.updateControl();\n  }\n\n  /** Updates cursor */\n  updateCursor(cursorPos) {\n    if (cursorPos == null) return;\n    this.cursorPos = cursorPos;\n\n    // also queue change cursor for mobile browsers\n    this._delayUpdateCursor(cursorPos);\n  }\n\n  /** Delays cursor update to support mobile browsers */\n  _delayUpdateCursor(cursorPos) {\n    this._abortUpdateCursor();\n    this._changingCursorPos = cursorPos;\n    this._cursorChanging = setTimeout(() => {\n      if (!this.el) return; // if was destroyed\n      this.cursorPos = this._changingCursorPos;\n      this._abortUpdateCursor();\n    }, 10);\n  }\n\n  /** Fires custom events */\n  _fireChangeEvents() {\n    this._fireEvent('accept', this._inputEvent);\n    if (this.masked.isComplete) this._fireEvent('complete', this._inputEvent);\n  }\n\n  /** Aborts delayed cursor update */\n  _abortUpdateCursor() {\n    if (this._cursorChanging) {\n      clearTimeout(this._cursorChanging);\n      delete this._cursorChanging;\n    }\n  }\n\n  /** Aligns cursor to nearest available position */\n  alignCursor() {\n    this.cursorPos = this.masked.nearestInputPos(this.masked.nearestInputPos(this.cursorPos, DIRECTION.LEFT));\n  }\n\n  /** Aligns cursor only if selection is empty */\n  alignCursorFriendly() {\n    if (this.selectionStart !== this.cursorPos) return; // skip if range is selected\n    this.alignCursor();\n  }\n\n  /** Adds listener on custom event */\n  on(ev, handler) {\n    if (!this._listeners[ev]) this._listeners[ev] = [];\n    this._listeners[ev].push(handler);\n    return this;\n  }\n\n  /** Removes custom event listener */\n  off(ev, handler) {\n    if (!this._listeners[ev]) return this;\n    if (!handler) {\n      delete this._listeners[ev];\n      return this;\n    }\n    const hIndex = this._listeners[ev].indexOf(handler);\n    if (hIndex >= 0) this._listeners[ev].splice(hIndex, 1);\n    return this;\n  }\n\n  /** Handles view input event */\n  _onInput(e) {\n    this._inputEvent = e;\n    this._abortUpdateCursor();\n    const details = new ActionDetails({\n      // new state\n      value: this.el.value,\n      cursorPos: this.cursorPos,\n      // old state\n      oldValue: this.displayValue,\n      oldSelection: this._selection\n    });\n    const oldRawValue = this.masked.rawInputValue;\n    const offset = this.masked.splice(details.startChangePos, details.removed.length, details.inserted, details.removeDirection, {\n      input: true,\n      raw: true\n    }).offset;\n\n    // force align in remove direction only if no input chars were removed\n    // otherwise we still need to align with NONE (to get out from fixed symbols for instance)\n    const removeDirection = oldRawValue === this.masked.rawInputValue ? details.removeDirection : DIRECTION.NONE;\n    let cursorPos = this.masked.nearestInputPos(details.startChangePos + offset, removeDirection);\n    if (removeDirection !== DIRECTION.NONE) cursorPos = this.masked.nearestInputPos(cursorPos, DIRECTION.NONE);\n    this.updateControl(cursorPos);\n    delete this._inputEvent;\n  }\n\n  /** Handles view change event and commits model value */\n  _onChange() {\n    if (this.displayValue !== this.el.value) this.updateValue();\n    this.masked.doCommit();\n    this.updateControl();\n    this._saveSelection();\n  }\n\n  /** Handles view drop event, prevents by default */\n  _onDrop(ev) {\n    ev.preventDefault();\n    ev.stopPropagation();\n  }\n\n  /** Restore last selection on focus */\n  _onFocus(ev) {\n    this.alignCursorFriendly();\n  }\n\n  /** Restore last selection on focus */\n  _onClick(ev) {\n    this.alignCursorFriendly();\n  }\n  _onUndo() {\n    this._applyHistoryState(this.history.undo());\n  }\n  _onRedo() {\n    this._applyHistoryState(this.history.redo());\n  }\n  _applyHistoryState(state) {\n    if (!state) return;\n    this._historyChanging = true;\n    this.unmaskedValue = state.unmaskedValue;\n    this.el.select(state.selection.start, state.selection.end);\n    this._saveSelection();\n    this._historyChanging = false;\n  }\n\n  /** Unbind view events and removes element reference */\n  destroy() {\n    this._unbindEvents();\n    this._listeners.length = 0;\n    delete this.el;\n  }\n}\nIMask.InputMask = InputMask;\n\nexport { InputMask as default };\n","import IMask from './holder.js';\n\n/** Provides details of changing model value */\nclass ChangeDetails {\n  /** Inserted symbols */\n\n  /** Additional offset if any changes occurred before tail */\n\n  /** Raw inserted is used by dynamic mask */\n\n  /** Can skip chars */\n\n  static normalize(prep) {\n    return Array.isArray(prep) ? prep : [prep, new ChangeDetails()];\n  }\n  constructor(details) {\n    Object.assign(this, {\n      inserted: '',\n      rawInserted: '',\n      tailShift: 0,\n      skip: false\n    }, details);\n  }\n\n  /** Aggregate changes */\n  aggregate(details) {\n    this.inserted += details.inserted;\n    this.rawInserted += details.rawInserted;\n    this.tailShift += details.tailShift;\n    this.skip = this.skip || details.skip;\n    return this;\n  }\n\n  /** Total offset considering all changes */\n  get offset() {\n    return this.tailShift + this.inserted.length;\n  }\n  get consumed() {\n    return Boolean(this.rawInserted) || this.skip;\n  }\n  equals(details) {\n    return this.inserted === details.inserted && this.tailShift === details.tailShift && this.rawInserted === details.rawInserted && this.skip === details.skip;\n  }\n}\nIMask.ChangeDetails = ChangeDetails;\n\nexport { ChangeDetails as default };\n","/** Provides details of continuous extracted tail */\nclass ContinuousTailDetails {\n  /** Tail value as string */\n\n  /** Tail start position */\n\n  /** Start position */\n\n  constructor(value, from, stop) {\n    if (value === void 0) {\n      value = '';\n    }\n    if (from === void 0) {\n      from = 0;\n    }\n    this.value = value;\n    this.from = from;\n    this.stop = stop;\n  }\n  toString() {\n    return this.value;\n  }\n  extend(tail) {\n    this.value += String(tail);\n  }\n  appendTo(masked) {\n    return masked.append(this.toString(), {\n      tail: true\n    }).aggregate(masked._appendPlaceholder());\n  }\n  get state() {\n    return {\n      value: this.value,\n      from: this.from,\n      stop: this.stop\n    };\n  }\n  set state(state) {\n    Object.assign(this, state);\n  }\n  unshift(beforePos) {\n    if (!this.value.length || beforePos != null && this.from >= beforePos) return '';\n    const shiftChar = this.value[0];\n    this.value = this.value.slice(1);\n    return shiftChar;\n  }\n  shift() {\n    if (!this.value.length) return '';\n    const shiftChar = this.value[this.value.length - 1];\n    this.value = this.value.slice(0, -1);\n    return shiftChar;\n  }\n}\n\nexport { ContinuousTailDetails as default };\n","import ChangeDetails from '../core/change-details.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport { isString, DIRECTION, objectIncludes, forceDirection } from '../core/utils.js';\nimport IMask from '../core/holder.js';\n\n/** Append flags */\n\n/** Extract flags */\n\n// see https://github.com/microsoft/TypeScript/issues/6223\n\n/** Provides common masking stuff */\nclass Masked {\n  /** */\n\n  /** */\n\n  /** Transforms value before mask processing */\n\n  /** Transforms each char before mask processing */\n\n  /** Validates if value is acceptable */\n\n  /** Does additional processing at the end of editing */\n\n  /** Format typed value to string */\n\n  /** Parse string to get typed value */\n\n  /** Enable characters overwriting */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  constructor(opts) {\n    this._value = '';\n    this._update({\n      ...Masked.DEFAULTS,\n      ...opts\n    });\n    this._initialized = true;\n  }\n\n  /** Sets and applies new options */\n  updateOptions(opts) {\n    if (!this.optionsIsChanged(opts)) return;\n    this.withValueRefresh(this._update.bind(this, opts));\n  }\n\n  /** Sets new options */\n  _update(opts) {\n    Object.assign(this, opts);\n  }\n\n  /** Mask state */\n  get state() {\n    return {\n      _value: this.value,\n      _rawInputValue: this.rawInputValue\n    };\n  }\n  set state(state) {\n    this._value = state._value;\n  }\n\n  /** Resets value */\n  reset() {\n    this._value = '';\n  }\n  get value() {\n    return this._value;\n  }\n  set value(value) {\n    this.resolve(value, {\n      input: true\n    });\n  }\n\n  /** Resolve new value */\n  resolve(value, flags) {\n    if (flags === void 0) {\n      flags = {\n        input: true\n      };\n    }\n    this.reset();\n    this.append(value, flags, '');\n    this.doCommit();\n  }\n  get unmaskedValue() {\n    return this.value;\n  }\n  set unmaskedValue(value) {\n    this.resolve(value, {});\n  }\n  get typedValue() {\n    return this.parse ? this.parse(this.value, this) : this.unmaskedValue;\n  }\n  set typedValue(value) {\n    if (this.format) {\n      this.value = this.format(value, this);\n    } else {\n      this.unmaskedValue = String(value);\n    }\n  }\n\n  /** Value that includes raw user input */\n  get rawInputValue() {\n    return this.extractInput(0, this.displayValue.length, {\n      raw: true\n    });\n  }\n  set rawInputValue(value) {\n    this.resolve(value, {\n      raw: true\n    });\n  }\n  get displayValue() {\n    return this.value;\n  }\n  get isComplete() {\n    return true;\n  }\n  get isFilled() {\n    return this.isComplete;\n  }\n\n  /** Finds nearest input position in direction */\n  nearestInputPos(cursorPos, direction) {\n    return cursorPos;\n  }\n  totalInputPositions(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.displayValue.length;\n    }\n    return Math.min(this.displayValue.length, toPos - fromPos);\n  }\n\n  /** Extracts value in range considering flags */\n  extractInput(fromPos, toPos, flags) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.displayValue.length;\n    }\n    return this.displayValue.slice(fromPos, toPos);\n  }\n\n  /** Extracts tail in range */\n  extractTail(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.displayValue.length;\n    }\n    return new ContinuousTailDetails(this.extractInput(fromPos, toPos), fromPos);\n  }\n\n  /** Appends tail */\n  appendTail(tail) {\n    if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n    return tail.appendTo(this);\n  }\n\n  /** Appends char */\n  _appendCharRaw(ch, flags) {\n    if (!ch) return new ChangeDetails();\n    this._value += ch;\n    return new ChangeDetails({\n      inserted: ch,\n      rawInserted: ch\n    });\n  }\n\n  /** Appends char */\n  _appendChar(ch, flags, checkTail) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    const consistentState = this.state;\n    let details;\n    [ch, details] = this.doPrepareChar(ch, flags);\n    if (ch) {\n      details = details.aggregate(this._appendCharRaw(ch, flags));\n\n      // TODO handle `skip`?\n\n      // try `autofix` lookahead\n      if (!details.rawInserted && this.autofix === 'pad') {\n        const noFixState = this.state;\n        this.state = consistentState;\n        let fixDetails = this.pad(flags);\n        const chDetails = this._appendCharRaw(ch, flags);\n        fixDetails = fixDetails.aggregate(chDetails);\n\n        // if fix was applied or\n        // if details are equal use skip restoring state optimization\n        if (chDetails.rawInserted || fixDetails.equals(details)) {\n          details = fixDetails;\n        } else {\n          this.state = noFixState;\n        }\n      }\n    }\n    if (details.inserted) {\n      let consistentTail;\n      let appended = this.doValidate(flags) !== false;\n      if (appended && checkTail != null) {\n        // validation ok, check tail\n        const beforeTailState = this.state;\n        if (this.overwrite === true) {\n          consistentTail = checkTail.state;\n          for (let i = 0; i < details.rawInserted.length; ++i) {\n            checkTail.unshift(this.displayValue.length - details.tailShift);\n          }\n        }\n        let tailDetails = this.appendTail(checkTail);\n        appended = tailDetails.rawInserted.length === checkTail.toString().length;\n\n        // not ok, try shift\n        if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n          this.state = beforeTailState;\n          consistentTail = checkTail.state;\n          for (let i = 0; i < details.rawInserted.length; ++i) {\n            checkTail.shift();\n          }\n          tailDetails = this.appendTail(checkTail);\n          appended = tailDetails.rawInserted.length === checkTail.toString().length;\n        }\n\n        // if ok, rollback state after tail\n        if (appended && tailDetails.inserted) this.state = beforeTailState;\n      }\n\n      // revert all if something went wrong\n      if (!appended) {\n        details = new ChangeDetails();\n        this.state = consistentState;\n        if (checkTail && consistentTail) checkTail.state = consistentTail;\n      }\n    }\n    return details;\n  }\n\n  /** Appends optional placeholder at the end */\n  _appendPlaceholder() {\n    return new ChangeDetails();\n  }\n\n  /** Appends optional eager placeholder at the end */\n  _appendEager() {\n    return new ChangeDetails();\n  }\n\n  /** Appends symbols considering flags */\n  append(str, flags, tail) {\n    if (!isString(str)) throw new Error('value should be string');\n    const checkTail = isString(tail) ? new ContinuousTailDetails(String(tail)) : tail;\n    if (flags != null && flags.tail) flags._beforeTailState = this.state;\n    let details;\n    [str, details] = this.doPrepare(str, flags);\n    for (let ci = 0; ci < str.length; ++ci) {\n      const d = this._appendChar(str[ci], flags, checkTail);\n      if (!d.rawInserted && !this.doSkipInvalid(str[ci], flags, checkTail)) break;\n      details.aggregate(d);\n    }\n    if ((this.eager === true || this.eager === 'append') && flags != null && flags.input && str) {\n      details.aggregate(this._appendEager());\n    }\n\n    // append tail but aggregate only tailShift\n    if (checkTail != null) {\n      details.tailShift += this.appendTail(checkTail).tailShift;\n      // TODO it's a good idea to clear state after appending ends\n      // but it causes bugs when one append calls another (when dynamic dispatch set rawInputValue)\n      // this._resetBeforeTailState();\n    }\n    return details;\n  }\n  remove(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.displayValue.length;\n    }\n    this._value = this.displayValue.slice(0, fromPos) + this.displayValue.slice(toPos);\n    return new ChangeDetails();\n  }\n\n  /** Calls function and reapplies current value */\n  withValueRefresh(fn) {\n    if (this._refreshing || !this._initialized) return fn();\n    this._refreshing = true;\n    const rawInput = this.rawInputValue;\n    const value = this.value;\n    const ret = fn();\n    this.rawInputValue = rawInput;\n    // append lost trailing chars at the end\n    if (this.value && this.value !== value && value.indexOf(this.value) === 0) {\n      this.append(value.slice(this.displayValue.length), {}, '');\n      this.doCommit();\n    }\n    delete this._refreshing;\n    return ret;\n  }\n  runIsolated(fn) {\n    if (this._isolated || !this._initialized) return fn(this);\n    this._isolated = true;\n    const state = this.state;\n    const ret = fn(this);\n    this.state = state;\n    delete this._isolated;\n    return ret;\n  }\n  doSkipInvalid(ch, flags, checkTail) {\n    return Boolean(this.skipInvalid);\n  }\n\n  /** Prepares string before mask processing */\n  doPrepare(str, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    return ChangeDetails.normalize(this.prepare ? this.prepare(str, this, flags) : str);\n  }\n\n  /** Prepares each char before mask processing */\n  doPrepareChar(str, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    return ChangeDetails.normalize(this.prepareChar ? this.prepareChar(str, this, flags) : str);\n  }\n\n  /** Validates if value is acceptable */\n  doValidate(flags) {\n    return (!this.validate || this.validate(this.value, this, flags)) && (!this.parent || this.parent.doValidate(flags));\n  }\n\n  /** Does additional processing at the end of editing */\n  doCommit() {\n    if (this.commit) this.commit(this.value, this);\n  }\n  splice(start, deleteCount, inserted, removeDirection, flags) {\n    if (inserted === void 0) {\n      inserted = '';\n    }\n    if (removeDirection === void 0) {\n      removeDirection = DIRECTION.NONE;\n    }\n    if (flags === void 0) {\n      flags = {\n        input: true\n      };\n    }\n    const tailPos = start + deleteCount;\n    const tail = this.extractTail(tailPos);\n    const eagerRemove = this.eager === true || this.eager === 'remove';\n    let oldRawValue;\n    if (eagerRemove) {\n      removeDirection = forceDirection(removeDirection);\n      oldRawValue = this.extractInput(0, tailPos, {\n        raw: true\n      });\n    }\n    let startChangePos = start;\n    const details = new ChangeDetails();\n\n    // if it is just deletion without insertion\n    if (removeDirection !== DIRECTION.NONE) {\n      startChangePos = this.nearestInputPos(start, deleteCount > 1 && start !== 0 && !eagerRemove ? DIRECTION.NONE : removeDirection);\n\n      // adjust tailShift if start was aligned\n      details.tailShift = startChangePos - start;\n    }\n    details.aggregate(this.remove(startChangePos));\n    if (eagerRemove && removeDirection !== DIRECTION.NONE && oldRawValue === this.rawInputValue) {\n      if (removeDirection === DIRECTION.FORCE_LEFT) {\n        let valLength;\n        while (oldRawValue === this.rawInputValue && (valLength = this.displayValue.length)) {\n          details.aggregate(new ChangeDetails({\n            tailShift: -1\n          })).aggregate(this.remove(valLength - 1));\n        }\n      } else if (removeDirection === DIRECTION.FORCE_RIGHT) {\n        tail.unshift();\n      }\n    }\n    return details.aggregate(this.append(inserted, flags, tail));\n  }\n  maskEquals(mask) {\n    return this.mask === mask;\n  }\n  optionsIsChanged(opts) {\n    return !objectIncludes(this, opts);\n  }\n  typedValueEquals(value) {\n    const tval = this.typedValue;\n    return value === tval || Masked.EMPTY_VALUES.includes(value) && Masked.EMPTY_VALUES.includes(tval) || (this.format ? this.format(value, this) === this.format(this.typedValue, this) : false);\n  }\n  pad(flags) {\n    return new ChangeDetails();\n  }\n}\nMasked.DEFAULTS = {\n  skipInvalid: true\n};\nMasked.EMPTY_VALUES = [undefined, null, ''];\nIMask.Masked = Masked;\n\nexport { Masked as default };\n","import ChangeDetails from '../../core/change-details.js';\nimport { isString } from '../../core/utils.js';\nimport ContinuousTailDetails from '../../core/continuous-tail-details.js';\nimport IMask from '../../core/holder.js';\n\nclass ChunksTailDetails {\n  /** */\n\n  constructor(chunks, from) {\n    if (chunks === void 0) {\n      chunks = [];\n    }\n    if (from === void 0) {\n      from = 0;\n    }\n    this.chunks = chunks;\n    this.from = from;\n  }\n  toString() {\n    return this.chunks.map(String).join('');\n  }\n  extend(tailChunk) {\n    if (!String(tailChunk)) return;\n    tailChunk = isString(tailChunk) ? new ContinuousTailDetails(String(tailChunk)) : tailChunk;\n    const lastChunk = this.chunks[this.chunks.length - 1];\n    const extendLast = lastChunk && (\n    // if stops are same or tail has no stop\n    lastChunk.stop === tailChunk.stop || tailChunk.stop == null) &&\n    // if tail chunk goes just after last chunk\n    tailChunk.from === lastChunk.from + lastChunk.toString().length;\n    if (tailChunk instanceof ContinuousTailDetails) {\n      // check the ability to extend previous chunk\n      if (extendLast) {\n        // extend previous chunk\n        lastChunk.extend(tailChunk.toString());\n      } else {\n        // append new chunk\n        this.chunks.push(tailChunk);\n      }\n    } else if (tailChunk instanceof ChunksTailDetails) {\n      if (tailChunk.stop == null) {\n        // unwrap floating chunks to parent, keeping `from` pos\n        let firstTailChunk;\n        while (tailChunk.chunks.length && tailChunk.chunks[0].stop == null) {\n          firstTailChunk = tailChunk.chunks.shift(); // not possible to be `undefined` because length was checked above\n          firstTailChunk.from += tailChunk.from;\n          this.extend(firstTailChunk);\n        }\n      }\n\n      // if tail chunk still has value\n      if (tailChunk.toString()) {\n        // if chunks contains stops, then popup stop to container\n        tailChunk.stop = tailChunk.blockIndex;\n        this.chunks.push(tailChunk);\n      }\n    }\n  }\n  appendTo(masked) {\n    if (!(masked instanceof IMask.MaskedPattern)) {\n      const tail = new ContinuousTailDetails(this.toString());\n      return tail.appendTo(masked);\n    }\n    const details = new ChangeDetails();\n    for (let ci = 0; ci < this.chunks.length; ++ci) {\n      const chunk = this.chunks[ci];\n      const lastBlockIter = masked._mapPosToBlock(masked.displayValue.length);\n      const stop = chunk.stop;\n      let chunkBlock;\n      if (stop != null && (\n      // if block not found or stop is behind lastBlock\n      !lastBlockIter || lastBlockIter.index <= stop)) {\n        if (chunk instanceof ChunksTailDetails ||\n        // for continuous block also check if stop is exist\n        masked._stops.indexOf(stop) >= 0) {\n          details.aggregate(masked._appendPlaceholder(stop));\n        }\n        chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n      }\n      if (chunkBlock) {\n        const tailDetails = chunkBlock.appendTail(chunk);\n        details.aggregate(tailDetails);\n\n        // get not inserted chars\n        const remainChars = chunk.toString().slice(tailDetails.rawInserted.length);\n        if (remainChars) details.aggregate(masked.append(remainChars, {\n          tail: true\n        }));\n      } else {\n        details.aggregate(masked.append(chunk.toString(), {\n          tail: true\n        }));\n      }\n    }\n    return details;\n  }\n  get state() {\n    return {\n      chunks: this.chunks.map(c => c.state),\n      from: this.from,\n      stop: this.stop,\n      blockIndex: this.blockIndex\n    };\n  }\n  set state(state) {\n    const {\n      chunks,\n      ...props\n    } = state;\n    Object.assign(this, props);\n    this.chunks = chunks.map(cstate => {\n      const chunk = \"chunks\" in cstate ? new ChunksTailDetails() : new ContinuousTailDetails();\n      chunk.state = cstate;\n      return chunk;\n    });\n  }\n  unshift(beforePos) {\n    if (!this.chunks.length || beforePos != null && this.from >= beforePos) return '';\n    const chunkShiftPos = beforePos != null ? beforePos - this.from : beforePos;\n    let ci = 0;\n    while (ci < this.chunks.length) {\n      const chunk = this.chunks[ci];\n      const shiftChar = chunk.unshift(chunkShiftPos);\n      if (chunk.toString()) {\n        // chunk still contains value\n        // but not shifted - means no more available chars to shift\n        if (!shiftChar) break;\n        ++ci;\n      } else {\n        // clean if chunk has no value\n        this.chunks.splice(ci, 1);\n      }\n      if (shiftChar) return shiftChar;\n    }\n    return '';\n  }\n  shift() {\n    if (!this.chunks.length) return '';\n    let ci = this.chunks.length - 1;\n    while (0 <= ci) {\n      const chunk = this.chunks[ci];\n      const shiftChar = chunk.shift();\n      if (chunk.toString()) {\n        // chunk still contains value\n        // but not shifted - means no more available chars to shift\n        if (!shiftChar) break;\n        --ci;\n      } else {\n        // clean if chunk has no value\n        this.chunks.splice(ci, 1);\n      }\n      if (shiftChar) return shiftChar;\n    }\n    return '';\n  }\n}\n\nexport { ChunksTailDetails as default };\n","import { DIRECTION } from '../../core/utils.js';\n\nclass PatternCursor {\n  constructor(masked, pos) {\n    this.masked = masked;\n    this._log = [];\n    const {\n      offset,\n      index\n    } = masked._mapPosToBlock(pos) || (pos < 0 ?\n    // first\n    {\n      index: 0,\n      offset: 0\n    } :\n    // last\n    {\n      index: this.masked._blocks.length,\n      offset: 0\n    });\n    this.offset = offset;\n    this.index = index;\n    this.ok = false;\n  }\n  get block() {\n    return this.masked._blocks[this.index];\n  }\n  get pos() {\n    return this.masked._blockStartPos(this.index) + this.offset;\n  }\n  get state() {\n    return {\n      index: this.index,\n      offset: this.offset,\n      ok: this.ok\n    };\n  }\n  set state(s) {\n    Object.assign(this, s);\n  }\n  pushState() {\n    this._log.push(this.state);\n  }\n  popState() {\n    const s = this._log.pop();\n    if (s) this.state = s;\n    return s;\n  }\n  bindBlock() {\n    if (this.block) return;\n    if (this.index < 0) {\n      this.index = 0;\n      this.offset = 0;\n    }\n    if (this.index >= this.masked._blocks.length) {\n      this.index = this.masked._blocks.length - 1;\n      this.offset = this.block.displayValue.length; // TODO this is stupid type error, `block` depends on index that was changed above\n    }\n  }\n  _pushLeft(fn) {\n    this.pushState();\n    for (this.bindBlock(); 0 <= this.index; --this.index, this.offset = ((_this$block = this.block) == null ? void 0 : _this$block.displayValue.length) || 0) {\n      var _this$block;\n      if (fn()) return this.ok = true;\n    }\n    return this.ok = false;\n  }\n  _pushRight(fn) {\n    this.pushState();\n    for (this.bindBlock(); this.index < this.masked._blocks.length; ++this.index, this.offset = 0) {\n      if (fn()) return this.ok = true;\n    }\n    return this.ok = false;\n  }\n  pushLeftBeforeFilled() {\n    return this._pushLeft(() => {\n      if (this.block.isFixed || !this.block.value) return;\n      this.offset = this.block.nearestInputPos(this.offset, DIRECTION.FORCE_LEFT);\n      if (this.offset !== 0) return true;\n    });\n  }\n  pushLeftBeforeInput() {\n    // cases:\n    // filled input: 00|\n    // optional empty input: 00[]|\n    // nested block: XX<[]>|\n    return this._pushLeft(() => {\n      if (this.block.isFixed) return;\n      this.offset = this.block.nearestInputPos(this.offset, DIRECTION.LEFT);\n      return true;\n    });\n  }\n  pushLeftBeforeRequired() {\n    return this._pushLeft(() => {\n      if (this.block.isFixed || this.block.isOptional && !this.block.value) return;\n      this.offset = this.block.nearestInputPos(this.offset, DIRECTION.LEFT);\n      return true;\n    });\n  }\n  pushRightBeforeFilled() {\n    return this._pushRight(() => {\n      if (this.block.isFixed || !this.block.value) return;\n      this.offset = this.block.nearestInputPos(this.offset, DIRECTION.FORCE_RIGHT);\n      if (this.offset !== this.block.value.length) return true;\n    });\n  }\n  pushRightBeforeInput() {\n    return this._pushRight(() => {\n      if (this.block.isFixed) return;\n\n      // const o = this.offset;\n      this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE);\n      // HACK cases like (STILL DOES NOT WORK FOR NESTED)\n      // aa|X\n      // aa<X|[]>X_    - this will not work\n      // if (o && o === this.offset && this.block instanceof PatternInputDefinition) continue;\n      return true;\n    });\n  }\n  pushRightBeforeRequired() {\n    return this._pushRight(() => {\n      if (this.block.isFixed || this.block.isOptional && !this.block.value) return;\n\n      // TODO check |[*]XX_\n      this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE);\n      return true;\n    });\n  }\n}\n\nexport { PatternCursor as default };\n","import ChangeDetails from '../../core/change-details.js';\nimport { DIRECTION, isString } from '../../core/utils.js';\nimport ContinuousTailDetails from '../../core/continuous-tail-details.js';\nimport '../../core/holder.js';\n\nclass PatternFixedDefinition {\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  constructor(opts) {\n    Object.assign(this, opts);\n    this._value = '';\n    this.isFixed = true;\n  }\n  get value() {\n    return this._value;\n  }\n  get unmaskedValue() {\n    return this.isUnmasking ? this.value : '';\n  }\n  get rawInputValue() {\n    return this._isRawInput ? this.value : '';\n  }\n  get displayValue() {\n    return this.value;\n  }\n  reset() {\n    this._isRawInput = false;\n    this._value = '';\n  }\n  remove(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this._value.length;\n    }\n    this._value = this._value.slice(0, fromPos) + this._value.slice(toPos);\n    if (!this._value) this._isRawInput = false;\n    return new ChangeDetails();\n  }\n  nearestInputPos(cursorPos, direction) {\n    if (direction === void 0) {\n      direction = DIRECTION.NONE;\n    }\n    const minPos = 0;\n    const maxPos = this._value.length;\n    switch (direction) {\n      case DIRECTION.LEFT:\n      case DIRECTION.FORCE_LEFT:\n        return minPos;\n      case DIRECTION.NONE:\n      case DIRECTION.RIGHT:\n      case DIRECTION.FORCE_RIGHT:\n      default:\n        return maxPos;\n    }\n  }\n  totalInputPositions(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this._value.length;\n    }\n    return this._isRawInput ? toPos - fromPos : 0;\n  }\n  extractInput(fromPos, toPos, flags) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this._value.length;\n    }\n    if (flags === void 0) {\n      flags = {};\n    }\n    return flags.raw && this._isRawInput && this._value.slice(fromPos, toPos) || '';\n  }\n  get isComplete() {\n    return true;\n  }\n  get isFilled() {\n    return Boolean(this._value);\n  }\n  _appendChar(ch, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    if (this.isFilled) return new ChangeDetails();\n    const appendEager = this.eager === true || this.eager === 'append';\n    const appended = this.char === ch;\n    const isResolved = appended && (this.isUnmasking || flags.input || flags.raw) && (!flags.raw || !appendEager) && !flags.tail;\n    const details = new ChangeDetails({\n      inserted: this.char,\n      rawInserted: isResolved ? this.char : ''\n    });\n    this._value = this.char;\n    this._isRawInput = isResolved && (flags.raw || flags.input);\n    return details;\n  }\n  _appendEager() {\n    return this._appendChar(this.char, {\n      tail: true\n    });\n  }\n  _appendPlaceholder() {\n    const details = new ChangeDetails();\n    if (this.isFilled) return details;\n    this._value = details.inserted = this.char;\n    return details;\n  }\n  extractTail() {\n    return new ContinuousTailDetails('');\n  }\n  appendTail(tail) {\n    if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n    return tail.appendTo(this);\n  }\n  append(str, flags, tail) {\n    const details = this._appendChar(str[0], flags);\n    if (tail != null) {\n      details.tailShift += this.appendTail(tail).tailShift;\n    }\n    return details;\n  }\n  doCommit() {}\n  get state() {\n    return {\n      _value: this._value,\n      _rawInputValue: this.rawInputValue\n    };\n  }\n  set state(state) {\n    this._value = state._value;\n    this._isRawInput = Boolean(state._rawInputValue);\n  }\n  pad(flags) {\n    return this._appendPlaceholder();\n  }\n}\n\nexport { PatternFixedDefinition as default };\n","import createMask from '../factory.js';\nimport ChangeDetails from '../../core/change-details.js';\nimport { DIRECTION } from '../../core/utils.js';\nimport '../../core/holder.js';\n\nclass PatternInputDefinition {\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  constructor(opts) {\n    const {\n      parent,\n      isOptional,\n      placeholderChar,\n      displayChar,\n      lazy,\n      eager,\n      ...maskOpts\n    } = opts;\n    this.masked = createMask(maskOpts);\n    Object.assign(this, {\n      parent,\n      isOptional,\n      placeholderChar,\n      displayChar,\n      lazy,\n      eager\n    });\n  }\n  reset() {\n    this.isFilled = false;\n    this.masked.reset();\n  }\n  remove(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.value.length;\n    }\n    if (fromPos === 0 && toPos >= 1) {\n      this.isFilled = false;\n      return this.masked.remove(fromPos, toPos);\n    }\n    return new ChangeDetails();\n  }\n  get value() {\n    return this.masked.value || (this.isFilled && !this.isOptional ? this.placeholderChar : '');\n  }\n  get unmaskedValue() {\n    return this.masked.unmaskedValue;\n  }\n  get rawInputValue() {\n    return this.masked.rawInputValue;\n  }\n  get displayValue() {\n    return this.masked.value && this.displayChar || this.value;\n  }\n  get isComplete() {\n    return Boolean(this.masked.value) || this.isOptional;\n  }\n  _appendChar(ch, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    if (this.isFilled) return new ChangeDetails();\n    const state = this.masked.state;\n    // simulate input\n    let details = this.masked._appendChar(ch, this.currentMaskFlags(flags));\n    if (details.inserted && this.doValidate(flags) === false) {\n      details = new ChangeDetails();\n      this.masked.state = state;\n    }\n    if (!details.inserted && !this.isOptional && !this.lazy && !flags.input) {\n      details.inserted = this.placeholderChar;\n    }\n    details.skip = !details.inserted && !this.isOptional;\n    this.isFilled = Boolean(details.inserted);\n    return details;\n  }\n  append(str, flags, tail) {\n    // TODO probably should be done via _appendChar\n    return this.masked.append(str, this.currentMaskFlags(flags), tail);\n  }\n  _appendPlaceholder() {\n    if (this.isFilled || this.isOptional) return new ChangeDetails();\n    this.isFilled = true;\n    return new ChangeDetails({\n      inserted: this.placeholderChar\n    });\n  }\n  _appendEager() {\n    return new ChangeDetails();\n  }\n  extractTail(fromPos, toPos) {\n    return this.masked.extractTail(fromPos, toPos);\n  }\n  appendTail(tail) {\n    return this.masked.appendTail(tail);\n  }\n  extractInput(fromPos, toPos, flags) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.value.length;\n    }\n    return this.masked.extractInput(fromPos, toPos, flags);\n  }\n  nearestInputPos(cursorPos, direction) {\n    if (direction === void 0) {\n      direction = DIRECTION.NONE;\n    }\n    const minPos = 0;\n    const maxPos = this.value.length;\n    const boundPos = Math.min(Math.max(cursorPos, minPos), maxPos);\n    switch (direction) {\n      case DIRECTION.LEFT:\n      case DIRECTION.FORCE_LEFT:\n        return this.isComplete ? boundPos : minPos;\n      case DIRECTION.RIGHT:\n      case DIRECTION.FORCE_RIGHT:\n        return this.isComplete ? boundPos : maxPos;\n      case DIRECTION.NONE:\n      default:\n        return boundPos;\n    }\n  }\n  totalInputPositions(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.value.length;\n    }\n    return this.value.slice(fromPos, toPos).length;\n  }\n  doValidate(flags) {\n    return this.masked.doValidate(this.currentMaskFlags(flags)) && (!this.parent || this.parent.doValidate(this.currentMaskFlags(flags)));\n  }\n  doCommit() {\n    this.masked.doCommit();\n  }\n  get state() {\n    return {\n      _value: this.value,\n      _rawInputValue: this.rawInputValue,\n      masked: this.masked.state,\n      isFilled: this.isFilled\n    };\n  }\n  set state(state) {\n    this.masked.state = state.masked;\n    this.isFilled = state.isFilled;\n  }\n  currentMaskFlags(flags) {\n    var _flags$_beforeTailSta;\n    return {\n      ...flags,\n      _beforeTailState: (flags == null || (_flags$_beforeTailSta = flags._beforeTailState) == null ? void 0 : _flags$_beforeTailSta.masked) || (flags == null ? void 0 : flags._beforeTailState)\n    };\n  }\n  pad(flags) {\n    return new ChangeDetails();\n  }\n}\nPatternInputDefinition.DEFAULT_DEFINITIONS = {\n  '0': /\\d/,\n  'a': /[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/,\n  // http://stackoverflow.com/a/22075070\n  '*': /./\n};\n\nexport { PatternInputDefinition as default };\n","import Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/change-details.js';\nimport '../core/continuous-tail-details.js';\nimport '../core/utils.js';\n\n/** Masking by RegExp */\nclass MaskedRegExp extends Masked {\n  /** */\n\n  /** Enable characters overwriting */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  updateOptions(opts) {\n    super.updateOptions(opts);\n  }\n  _update(opts) {\n    const mask = opts.mask;\n    if (mask) opts.validate = value => value.search(mask) >= 0;\n    super._update(opts);\n  }\n}\nIMask.MaskedRegExp = MaskedRegExp;\n\nexport { MaskedRegExp as default };\n","import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport { DIRECTION } from '../core/utils.js';\nimport Masked from './base.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport ChunksTailDetails from './pattern/chunk-tail-details.js';\nimport PatternCursor from './pattern/cursor.js';\nimport PatternFixedDefinition from './pattern/fixed-definition.js';\nimport PatternInputDefinition from './pattern/input-definition.js';\nimport './regexp.js';\nimport '../core/continuous-tail-details.js';\n\n/** Pattern mask */\nclass MaskedPattern extends Masked {\n  /** */\n\n  /** */\n\n  /** Single char for empty input */\n\n  /** Single char for filled input */\n\n  /** Show placeholder only when needed */\n\n  /** Enable characters overwriting */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  constructor(opts) {\n    super({\n      ...MaskedPattern.DEFAULTS,\n      ...opts,\n      definitions: Object.assign({}, PatternInputDefinition.DEFAULT_DEFINITIONS, opts == null ? void 0 : opts.definitions)\n    });\n  }\n  updateOptions(opts) {\n    super.updateOptions(opts);\n  }\n  _update(opts) {\n    opts.definitions = Object.assign({}, this.definitions, opts.definitions);\n    super._update(opts);\n    this._rebuildMask();\n  }\n  _rebuildMask() {\n    const defs = this.definitions;\n    this._blocks = [];\n    this.exposeBlock = undefined;\n    this._stops = [];\n    this._maskedBlocks = {};\n    const pattern = this.mask;\n    if (!pattern || !defs) return;\n    let unmaskingBlock = false;\n    let optionalBlock = false;\n    for (let i = 0; i < pattern.length; ++i) {\n      if (this.blocks) {\n        const p = pattern.slice(i);\n        const bNames = Object.keys(this.blocks).filter(bName => p.indexOf(bName) === 0);\n        // order by key length\n        bNames.sort((a, b) => b.length - a.length);\n        // use block name with max length\n        const bName = bNames[0];\n        if (bName) {\n          const {\n            expose,\n            repeat,\n            ...bOpts\n          } = normalizeOpts(this.blocks[bName]); // TODO type Opts<Arg & Extra>\n          const blockOpts = {\n            lazy: this.lazy,\n            eager: this.eager,\n            placeholderChar: this.placeholderChar,\n            displayChar: this.displayChar,\n            overwrite: this.overwrite,\n            autofix: this.autofix,\n            ...bOpts,\n            repeat,\n            parent: this\n          };\n          const maskedBlock = repeat != null ? new IMask.RepeatBlock(blockOpts /* TODO */) : createMask(blockOpts);\n          if (maskedBlock) {\n            this._blocks.push(maskedBlock);\n            if (expose) this.exposeBlock = maskedBlock;\n\n            // store block index\n            if (!this._maskedBlocks[bName]) this._maskedBlocks[bName] = [];\n            this._maskedBlocks[bName].push(this._blocks.length - 1);\n          }\n          i += bName.length - 1;\n          continue;\n        }\n      }\n      let char = pattern[i];\n      let isInput = (char in defs);\n      if (char === MaskedPattern.STOP_CHAR) {\n        this._stops.push(this._blocks.length);\n        continue;\n      }\n      if (char === '{' || char === '}') {\n        unmaskingBlock = !unmaskingBlock;\n        continue;\n      }\n      if (char === '[' || char === ']') {\n        optionalBlock = !optionalBlock;\n        continue;\n      }\n      if (char === MaskedPattern.ESCAPE_CHAR) {\n        ++i;\n        char = pattern[i];\n        if (!char) break;\n        isInput = false;\n      }\n      const def = isInput ? new PatternInputDefinition({\n        isOptional: optionalBlock,\n        lazy: this.lazy,\n        eager: this.eager,\n        placeholderChar: this.placeholderChar,\n        displayChar: this.displayChar,\n        ...normalizeOpts(defs[char]),\n        parent: this\n      }) : new PatternFixedDefinition({\n        char,\n        eager: this.eager,\n        isUnmasking: unmaskingBlock\n      });\n      this._blocks.push(def);\n    }\n  }\n  get state() {\n    return {\n      ...super.state,\n      _blocks: this._blocks.map(b => b.state)\n    };\n  }\n  set state(state) {\n    if (!state) {\n      this.reset();\n      return;\n    }\n    const {\n      _blocks,\n      ...maskedState\n    } = state;\n    this._blocks.forEach((b, bi) => b.state = _blocks[bi]);\n    super.state = maskedState;\n  }\n  reset() {\n    super.reset();\n    this._blocks.forEach(b => b.reset());\n  }\n  get isComplete() {\n    return this.exposeBlock ? this.exposeBlock.isComplete : this._blocks.every(b => b.isComplete);\n  }\n  get isFilled() {\n    return this._blocks.every(b => b.isFilled);\n  }\n  get isFixed() {\n    return this._blocks.every(b => b.isFixed);\n  }\n  get isOptional() {\n    return this._blocks.every(b => b.isOptional);\n  }\n  doCommit() {\n    this._blocks.forEach(b => b.doCommit());\n    super.doCommit();\n  }\n  get unmaskedValue() {\n    return this.exposeBlock ? this.exposeBlock.unmaskedValue : this._blocks.reduce((str, b) => str += b.unmaskedValue, '');\n  }\n  set unmaskedValue(unmaskedValue) {\n    if (this.exposeBlock) {\n      const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n      this.exposeBlock.unmaskedValue = unmaskedValue;\n      this.appendTail(tail);\n      this.doCommit();\n    } else super.unmaskedValue = unmaskedValue;\n  }\n  get value() {\n    return this.exposeBlock ? this.exposeBlock.value :\n    // TODO return _value when not in change?\n    this._blocks.reduce((str, b) => str += b.value, '');\n  }\n  set value(value) {\n    if (this.exposeBlock) {\n      const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n      this.exposeBlock.value = value;\n      this.appendTail(tail);\n      this.doCommit();\n    } else super.value = value;\n  }\n  get typedValue() {\n    return this.exposeBlock ? this.exposeBlock.typedValue : super.typedValue;\n  }\n  set typedValue(value) {\n    if (this.exposeBlock) {\n      const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n      this.exposeBlock.typedValue = value;\n      this.appendTail(tail);\n      this.doCommit();\n    } else super.typedValue = value;\n  }\n  get displayValue() {\n    return this._blocks.reduce((str, b) => str += b.displayValue, '');\n  }\n  appendTail(tail) {\n    return super.appendTail(tail).aggregate(this._appendPlaceholder());\n  }\n  _appendEager() {\n    var _this$_mapPosToBlock;\n    const details = new ChangeDetails();\n    let startBlockIndex = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index;\n    if (startBlockIndex == null) return details;\n\n    // TODO test if it works for nested pattern masks\n    if (this._blocks[startBlockIndex].isFilled) ++startBlockIndex;\n    for (let bi = startBlockIndex; bi < this._blocks.length; ++bi) {\n      const d = this._blocks[bi]._appendEager();\n      if (!d.inserted) break;\n      details.aggregate(d);\n    }\n    return details;\n  }\n  _appendCharRaw(ch, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    const blockIter = this._mapPosToBlock(this.displayValue.length);\n    const details = new ChangeDetails();\n    if (!blockIter) return details;\n    for (let bi = blockIter.index, block; block = this._blocks[bi]; ++bi) {\n      var _flags$_beforeTailSta;\n      const blockDetails = block._appendChar(ch, {\n        ...flags,\n        _beforeTailState: (_flags$_beforeTailSta = flags._beforeTailState) == null || (_flags$_beforeTailSta = _flags$_beforeTailSta._blocks) == null ? void 0 : _flags$_beforeTailSta[bi]\n      });\n      details.aggregate(blockDetails);\n      if (blockDetails.consumed) break; // go next char\n    }\n    return details;\n  }\n  extractTail(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.displayValue.length;\n    }\n    const chunkTail = new ChunksTailDetails();\n    if (fromPos === toPos) return chunkTail;\n    this._forEachBlocksInRange(fromPos, toPos, (b, bi, bFromPos, bToPos) => {\n      const blockChunk = b.extractTail(bFromPos, bToPos);\n      blockChunk.stop = this._findStopBefore(bi);\n      blockChunk.from = this._blockStartPos(bi);\n      if (blockChunk instanceof ChunksTailDetails) blockChunk.blockIndex = bi;\n      chunkTail.extend(blockChunk);\n    });\n    return chunkTail;\n  }\n  extractInput(fromPos, toPos, flags) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.displayValue.length;\n    }\n    if (flags === void 0) {\n      flags = {};\n    }\n    if (fromPos === toPos) return '';\n    let input = '';\n    this._forEachBlocksInRange(fromPos, toPos, (b, _, fromPos, toPos) => {\n      input += b.extractInput(fromPos, toPos, flags);\n    });\n    return input;\n  }\n  _findStopBefore(blockIndex) {\n    let stopBefore;\n    for (let si = 0; si < this._stops.length; ++si) {\n      const stop = this._stops[si];\n      if (stop <= blockIndex) stopBefore = stop;else break;\n    }\n    return stopBefore;\n  }\n\n  /** Appends placeholder depending on laziness */\n  _appendPlaceholder(toBlockIndex) {\n    const details = new ChangeDetails();\n    if (this.lazy && toBlockIndex == null) return details;\n    const startBlockIter = this._mapPosToBlock(this.displayValue.length);\n    if (!startBlockIter) return details;\n    const startBlockIndex = startBlockIter.index;\n    const endBlockIndex = toBlockIndex != null ? toBlockIndex : this._blocks.length;\n    this._blocks.slice(startBlockIndex, endBlockIndex).forEach(b => {\n      if (!b.lazy || toBlockIndex != null) {\n        var _blocks2;\n        details.aggregate(b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length));\n      }\n    });\n    return details;\n  }\n\n  /** Finds block in pos */\n  _mapPosToBlock(pos) {\n    let accVal = '';\n    for (let bi = 0; bi < this._blocks.length; ++bi) {\n      const block = this._blocks[bi];\n      const blockStartPos = accVal.length;\n      accVal += block.displayValue;\n      if (pos <= accVal.length) {\n        return {\n          index: bi,\n          offset: pos - blockStartPos\n        };\n      }\n    }\n  }\n  _blockStartPos(blockIndex) {\n    return this._blocks.slice(0, blockIndex).reduce((pos, b) => pos += b.displayValue.length, 0);\n  }\n  _forEachBlocksInRange(fromPos, toPos, fn) {\n    if (toPos === void 0) {\n      toPos = this.displayValue.length;\n    }\n    const fromBlockIter = this._mapPosToBlock(fromPos);\n    if (fromBlockIter) {\n      const toBlockIter = this._mapPosToBlock(toPos);\n      // process first block\n      const isSameBlock = toBlockIter && fromBlockIter.index === toBlockIter.index;\n      const fromBlockStartPos = fromBlockIter.offset;\n      const fromBlockEndPos = toBlockIter && isSameBlock ? toBlockIter.offset : this._blocks[fromBlockIter.index].displayValue.length;\n      fn(this._blocks[fromBlockIter.index], fromBlockIter.index, fromBlockStartPos, fromBlockEndPos);\n      if (toBlockIter && !isSameBlock) {\n        // process intermediate blocks\n        for (let bi = fromBlockIter.index + 1; bi < toBlockIter.index; ++bi) {\n          fn(this._blocks[bi], bi, 0, this._blocks[bi].displayValue.length);\n        }\n\n        // process last block\n        fn(this._blocks[toBlockIter.index], toBlockIter.index, 0, toBlockIter.offset);\n      }\n    }\n  }\n  remove(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.displayValue.length;\n    }\n    const removeDetails = super.remove(fromPos, toPos);\n    this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => {\n      removeDetails.aggregate(b.remove(bFromPos, bToPos));\n    });\n    return removeDetails;\n  }\n  nearestInputPos(cursorPos, direction) {\n    if (direction === void 0) {\n      direction = DIRECTION.NONE;\n    }\n    if (!this._blocks.length) return 0;\n    const cursor = new PatternCursor(this, cursorPos);\n    if (direction === DIRECTION.NONE) {\n      // -------------------------------------------------\n      // NONE should only go out from fixed to the right!\n      // -------------------------------------------------\n      if (cursor.pushRightBeforeInput()) return cursor.pos;\n      cursor.popState();\n      if (cursor.pushLeftBeforeInput()) return cursor.pos;\n      return this.displayValue.length;\n    }\n\n    // FORCE is only about a|* otherwise is 0\n    if (direction === DIRECTION.LEFT || direction === DIRECTION.FORCE_LEFT) {\n      // try to break fast when *|a\n      if (direction === DIRECTION.LEFT) {\n        cursor.pushRightBeforeFilled();\n        if (cursor.ok && cursor.pos === cursorPos) return cursorPos;\n        cursor.popState();\n      }\n\n      // forward flow\n      cursor.pushLeftBeforeInput();\n      cursor.pushLeftBeforeRequired();\n      cursor.pushLeftBeforeFilled();\n\n      // backward flow\n      if (direction === DIRECTION.LEFT) {\n        cursor.pushRightBeforeInput();\n        cursor.pushRightBeforeRequired();\n        if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos;\n        cursor.popState();\n        if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos;\n        cursor.popState();\n      }\n      if (cursor.ok) return cursor.pos;\n      if (direction === DIRECTION.FORCE_LEFT) return 0;\n      cursor.popState();\n      if (cursor.ok) return cursor.pos;\n      cursor.popState();\n      if (cursor.ok) return cursor.pos;\n      return 0;\n    }\n    if (direction === DIRECTION.RIGHT || direction === DIRECTION.FORCE_RIGHT) {\n      // forward flow\n      cursor.pushRightBeforeInput();\n      cursor.pushRightBeforeRequired();\n      if (cursor.pushRightBeforeFilled()) return cursor.pos;\n      if (direction === DIRECTION.FORCE_RIGHT) return this.displayValue.length;\n\n      // backward flow\n      cursor.popState();\n      if (cursor.ok) return cursor.pos;\n      cursor.popState();\n      if (cursor.ok) return cursor.pos;\n      return this.nearestInputPos(cursorPos, DIRECTION.LEFT);\n    }\n    return cursorPos;\n  }\n  totalInputPositions(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.displayValue.length;\n    }\n    let total = 0;\n    this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => {\n      total += b.totalInputPositions(bFromPos, bToPos);\n    });\n    return total;\n  }\n\n  /** Get block by name */\n  maskedBlock(name) {\n    return this.maskedBlocks(name)[0];\n  }\n\n  /** Get all blocks by name */\n  maskedBlocks(name) {\n    const indices = this._maskedBlocks[name];\n    if (!indices) return [];\n    return indices.map(gi => this._blocks[gi]);\n  }\n  pad(flags) {\n    const details = new ChangeDetails();\n    this._forEachBlocksInRange(0, this.displayValue.length, b => details.aggregate(b.pad(flags)));\n    return details;\n  }\n}\nMaskedPattern.DEFAULTS = {\n  ...Masked.DEFAULTS,\n  lazy: true,\n  placeholderChar: '_'\n};\nMaskedPattern.STOP_CHAR = '`';\nMaskedPattern.ESCAPE_CHAR = '\\\\';\nMaskedPattern.InputDefinition = PatternInputDefinition;\nMaskedPattern.FixedDefinition = PatternFixedDefinition;\nIMask.MaskedPattern = MaskedPattern;\n\nexport { MaskedPattern as default };\n","import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './factory.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/input-definition.js';\nimport './regexp.js';\n\n/** Pattern which accepts ranges */\nclass MaskedRange extends MaskedPattern {\n  /**\n    Optionally sets max length of pattern.\n    Used when pattern length is longer then `to` param length. Pads zeros at start in this case.\n  */\n\n  /** Min bound */\n\n  /** Max bound */\n\n  get _matchFrom() {\n    return this.maxLength - String(this.from).length;\n  }\n  constructor(opts) {\n    super(opts); // mask will be created in _update\n  }\n  updateOptions(opts) {\n    super.updateOptions(opts);\n  }\n  _update(opts) {\n    const {\n      to = this.to || 0,\n      from = this.from || 0,\n      maxLength = this.maxLength || 0,\n      autofix = this.autofix,\n      ...patternOpts\n    } = opts;\n    this.to = to;\n    this.from = from;\n    this.maxLength = Math.max(String(to).length, maxLength);\n    this.autofix = autofix;\n    const fromStr = String(this.from).padStart(this.maxLength, '0');\n    const toStr = String(this.to).padStart(this.maxLength, '0');\n    let sameCharsCount = 0;\n    while (sameCharsCount < toStr.length && toStr[sameCharsCount] === fromStr[sameCharsCount]) ++sameCharsCount;\n    patternOpts.mask = toStr.slice(0, sameCharsCount).replace(/0/g, '\\\\0') + '0'.repeat(this.maxLength - sameCharsCount);\n    super._update(patternOpts);\n  }\n  get isComplete() {\n    return super.isComplete && Boolean(this.value);\n  }\n  boundaries(str) {\n    let minstr = '';\n    let maxstr = '';\n    const [, placeholder, num] = str.match(/^(\\D*)(\\d*)(\\D*)/) || [];\n    if (num) {\n      minstr = '0'.repeat(placeholder.length) + num;\n      maxstr = '9'.repeat(placeholder.length) + num;\n    }\n    minstr = minstr.padEnd(this.maxLength, '0');\n    maxstr = maxstr.padEnd(this.maxLength, '9');\n    return [minstr, maxstr];\n  }\n  doPrepareChar(ch, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    let details;\n    [ch, details] = super.doPrepareChar(ch.replace(/\\D/g, ''), flags);\n    if (!ch) details.skip = !this.isComplete;\n    return [ch, details];\n  }\n  _appendCharRaw(ch, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    if (!this.autofix || this.value.length + 1 > this.maxLength) return super._appendCharRaw(ch, flags);\n    const fromStr = String(this.from).padStart(this.maxLength, '0');\n    const toStr = String(this.to).padStart(this.maxLength, '0');\n    const [minstr, maxstr] = this.boundaries(this.value + ch);\n    if (Number(maxstr) < this.from) return super._appendCharRaw(fromStr[this.value.length], flags);\n    if (Number(minstr) > this.to) {\n      if (!flags.tail && this.autofix === 'pad' && this.value.length + 1 < this.maxLength) {\n        return super._appendCharRaw(fromStr[this.value.length], flags).aggregate(this._appendCharRaw(ch, flags));\n      }\n      return super._appendCharRaw(toStr[this.value.length], flags);\n    }\n    return super._appendCharRaw(ch, flags);\n  }\n  doValidate(flags) {\n    const str = this.value;\n    const firstNonZero = str.search(/[^0]/);\n    if (firstNonZero === -1 && str.length <= this._matchFrom) return true;\n    const [minstr, maxstr] = this.boundaries(str);\n    return this.from <= Number(maxstr) && Number(minstr) <= this.to && super.doValidate(flags);\n  }\n  pad(flags) {\n    const details = new ChangeDetails();\n    if (this.value.length === this.maxLength) return details;\n    const value = this.value;\n    const padLength = this.maxLength - this.value.length;\n    if (padLength) {\n      this.reset();\n      for (let i = 0; i < padLength; ++i) {\n        details.aggregate(super._appendCharRaw('0', flags));\n      }\n\n      // append tail\n      value.split('').forEach(ch => this._appendCharRaw(ch));\n    }\n    return details;\n  }\n}\nIMask.MaskedRange = MaskedRange;\n\nexport { MaskedRange as default };\n","import MaskedPattern from './pattern.js';\nimport MaskedRange from './range.js';\nimport IMask from '../core/holder.js';\nimport { isString } from '../core/utils.js';\nimport '../core/change-details.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './factory.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/input-definition.js';\nimport './regexp.js';\n\n/** Date mask */\nclass MaskedDate extends MaskedPattern {\n  static extractPatternOptions(opts) {\n    const {\n      mask,\n      pattern,\n      ...patternOpts\n    } = opts;\n    return {\n      ...patternOpts,\n      mask: isString(mask) ? mask : pattern\n    };\n  }\n\n  /** Pattern mask for date according to {@link MaskedDate#format} */\n\n  /** Start date */\n\n  /** End date */\n\n  /** Format typed value to string */\n\n  /** Parse string to get typed value */\n\n  constructor(opts) {\n    super(MaskedDate.extractPatternOptions({\n      ...MaskedDate.DEFAULTS,\n      ...opts\n    }));\n  }\n  updateOptions(opts) {\n    super.updateOptions(opts);\n  }\n  _update(opts) {\n    const {\n      mask,\n      pattern,\n      blocks,\n      ...patternOpts\n    } = {\n      ...MaskedDate.DEFAULTS,\n      ...opts\n    };\n    const patternBlocks = Object.assign({}, MaskedDate.GET_DEFAULT_BLOCKS());\n    // adjust year block\n    if (opts.min) patternBlocks.Y.from = opts.min.getFullYear();\n    if (opts.max) patternBlocks.Y.to = opts.max.getFullYear();\n    if (opts.min && opts.max && patternBlocks.Y.from === patternBlocks.Y.to) {\n      patternBlocks.m.from = opts.min.getMonth() + 1;\n      patternBlocks.m.to = opts.max.getMonth() + 1;\n      if (patternBlocks.m.from === patternBlocks.m.to) {\n        patternBlocks.d.from = opts.min.getDate();\n        patternBlocks.d.to = opts.max.getDate();\n      }\n    }\n    Object.assign(patternBlocks, this.blocks, blocks);\n    super._update({\n      ...patternOpts,\n      mask: isString(mask) ? mask : pattern,\n      blocks: patternBlocks\n    });\n  }\n  doValidate(flags) {\n    const date = this.date;\n    return super.doValidate(flags) && (!this.isComplete || this.isDateExist(this.value) && date != null && (this.min == null || this.min <= date) && (this.max == null || date <= this.max));\n  }\n\n  /** Checks if date is exists */\n  isDateExist(str) {\n    return this.format(this.parse(str, this), this).indexOf(str) >= 0;\n  }\n\n  /** Parsed Date */\n  get date() {\n    return this.typedValue;\n  }\n  set date(date) {\n    this.typedValue = date;\n  }\n  get typedValue() {\n    return this.isComplete ? super.typedValue : null;\n  }\n  set typedValue(value) {\n    super.typedValue = value;\n  }\n  maskEquals(mask) {\n    return mask === Date || super.maskEquals(mask);\n  }\n  optionsIsChanged(opts) {\n    return super.optionsIsChanged(MaskedDate.extractPatternOptions(opts));\n  }\n}\nMaskedDate.GET_DEFAULT_BLOCKS = () => ({\n  d: {\n    mask: MaskedRange,\n    from: 1,\n    to: 31,\n    maxLength: 2\n  },\n  m: {\n    mask: MaskedRange,\n    from: 1,\n    to: 12,\n    maxLength: 2\n  },\n  Y: {\n    mask: MaskedRange,\n    from: 1900,\n    to: 9999\n  }\n});\nMaskedDate.DEFAULTS = {\n  ...MaskedPattern.DEFAULTS,\n  mask: Date,\n  pattern: 'd{.}`m{.}`Y',\n  format: (date, masked) => {\n    if (!date) return '';\n    const day = String(date.getDate()).padStart(2, '0');\n    const month = String(date.getMonth() + 1).padStart(2, '0');\n    const year = date.getFullYear();\n    return [day, month, year].join('.');\n  },\n  parse: (str, masked) => {\n    const [day, month, year] = str.split('.').map(Number);\n    return new Date(year, month - 1, day);\n  }\n};\nIMask.MaskedDate = MaskedDate;\n\nexport { MaskedDate as default };\n","import { DIRECTION, objectIncludes } from '../core/utils.js';\nimport ChangeDetails from '../core/change-details.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/continuous-tail-details.js';\n\n/** Dynamic mask for choosing appropriate mask in run-time */\nclass MaskedDynamic extends Masked {\n  constructor(opts) {\n    super({\n      ...MaskedDynamic.DEFAULTS,\n      ...opts\n    });\n    this.currentMask = undefined;\n  }\n  updateOptions(opts) {\n    super.updateOptions(opts);\n  }\n  _update(opts) {\n    super._update(opts);\n    if ('mask' in opts) {\n      this.exposeMask = undefined;\n      // mask could be totally dynamic with only `dispatch` option\n      this.compiledMasks = Array.isArray(opts.mask) ? opts.mask.map(m => {\n        const {\n          expose,\n          ...maskOpts\n        } = normalizeOpts(m);\n        const masked = createMask({\n          overwrite: this._overwrite,\n          eager: this._eager,\n          skipInvalid: this._skipInvalid,\n          ...maskOpts\n        });\n        if (expose) this.exposeMask = masked;\n        return masked;\n      }) : [];\n\n      // this.currentMask = this.doDispatch(''); // probably not needed but lets see\n    }\n  }\n  _appendCharRaw(ch, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    const details = this._applyDispatch(ch, flags);\n    if (this.currentMask) {\n      details.aggregate(this.currentMask._appendChar(ch, this.currentMaskFlags(flags)));\n    }\n    return details;\n  }\n  _applyDispatch(appended, flags, tail) {\n    if (appended === void 0) {\n      appended = '';\n    }\n    if (flags === void 0) {\n      flags = {};\n    }\n    if (tail === void 0) {\n      tail = '';\n    }\n    const prevValueBeforeTail = flags.tail && flags._beforeTailState != null ? flags._beforeTailState._value : this.value;\n    const inputValue = this.rawInputValue;\n    const insertValue = flags.tail && flags._beforeTailState != null ? flags._beforeTailState._rawInputValue : inputValue;\n    const tailValue = inputValue.slice(insertValue.length);\n    const prevMask = this.currentMask;\n    const details = new ChangeDetails();\n    const prevMaskState = prevMask == null ? void 0 : prevMask.state;\n\n    // clone flags to prevent overwriting `_beforeTailState`\n    this.currentMask = this.doDispatch(appended, {\n      ...flags\n    }, tail);\n\n    // restore state after dispatch\n    if (this.currentMask) {\n      if (this.currentMask !== prevMask) {\n        // if mask changed reapply input\n        this.currentMask.reset();\n        if (insertValue) {\n          this.currentMask.append(insertValue, {\n            raw: true\n          });\n          details.tailShift = this.currentMask.value.length - prevValueBeforeTail.length;\n        }\n        if (tailValue) {\n          details.tailShift += this.currentMask.append(tailValue, {\n            raw: true,\n            tail: true\n          }).tailShift;\n        }\n      } else if (prevMaskState) {\n        // Dispatch can do something bad with state, so\n        // restore prev mask state\n        this.currentMask.state = prevMaskState;\n      }\n    }\n    return details;\n  }\n  _appendPlaceholder() {\n    const details = this._applyDispatch();\n    if (this.currentMask) {\n      details.aggregate(this.currentMask._appendPlaceholder());\n    }\n    return details;\n  }\n  _appendEager() {\n    const details = this._applyDispatch();\n    if (this.currentMask) {\n      details.aggregate(this.currentMask._appendEager());\n    }\n    return details;\n  }\n  appendTail(tail) {\n    const details = new ChangeDetails();\n    if (tail) details.aggregate(this._applyDispatch('', {}, tail));\n    return details.aggregate(this.currentMask ? this.currentMask.appendTail(tail) : super.appendTail(tail));\n  }\n  currentMaskFlags(flags) {\n    var _flags$_beforeTailSta, _flags$_beforeTailSta2;\n    return {\n      ...flags,\n      _beforeTailState: ((_flags$_beforeTailSta = flags._beforeTailState) == null ? void 0 : _flags$_beforeTailSta.currentMaskRef) === this.currentMask && ((_flags$_beforeTailSta2 = flags._beforeTailState) == null ? void 0 : _flags$_beforeTailSta2.currentMask) || flags._beforeTailState\n    };\n  }\n  doDispatch(appended, flags, tail) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    if (tail === void 0) {\n      tail = '';\n    }\n    return this.dispatch(appended, this, flags, tail);\n  }\n  doValidate(flags) {\n    return super.doValidate(flags) && (!this.currentMask || this.currentMask.doValidate(this.currentMaskFlags(flags)));\n  }\n  doPrepare(str, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    let [s, details] = super.doPrepare(str, flags);\n    if (this.currentMask) {\n      let currentDetails;\n      [s, currentDetails] = super.doPrepare(s, this.currentMaskFlags(flags));\n      details = details.aggregate(currentDetails);\n    }\n    return [s, details];\n  }\n  doPrepareChar(str, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    let [s, details] = super.doPrepareChar(str, flags);\n    if (this.currentMask) {\n      let currentDetails;\n      [s, currentDetails] = super.doPrepareChar(s, this.currentMaskFlags(flags));\n      details = details.aggregate(currentDetails);\n    }\n    return [s, details];\n  }\n  reset() {\n    var _this$currentMask;\n    (_this$currentMask = this.currentMask) == null || _this$currentMask.reset();\n    this.compiledMasks.forEach(m => m.reset());\n  }\n  get value() {\n    return this.exposeMask ? this.exposeMask.value : this.currentMask ? this.currentMask.value : '';\n  }\n  set value(value) {\n    if (this.exposeMask) {\n      this.exposeMask.value = value;\n      this.currentMask = this.exposeMask;\n      this._applyDispatch();\n    } else super.value = value;\n  }\n  get unmaskedValue() {\n    return this.exposeMask ? this.exposeMask.unmaskedValue : this.currentMask ? this.currentMask.unmaskedValue : '';\n  }\n  set unmaskedValue(unmaskedValue) {\n    if (this.exposeMask) {\n      this.exposeMask.unmaskedValue = unmaskedValue;\n      this.currentMask = this.exposeMask;\n      this._applyDispatch();\n    } else super.unmaskedValue = unmaskedValue;\n  }\n  get typedValue() {\n    return this.exposeMask ? this.exposeMask.typedValue : this.currentMask ? this.currentMask.typedValue : '';\n  }\n  set typedValue(typedValue) {\n    if (this.exposeMask) {\n      this.exposeMask.typedValue = typedValue;\n      this.currentMask = this.exposeMask;\n      this._applyDispatch();\n      return;\n    }\n    let unmaskedValue = String(typedValue);\n\n    // double check it\n    if (this.currentMask) {\n      this.currentMask.typedValue = typedValue;\n      unmaskedValue = this.currentMask.unmaskedValue;\n    }\n    this.unmaskedValue = unmaskedValue;\n  }\n  get displayValue() {\n    return this.currentMask ? this.currentMask.displayValue : '';\n  }\n  get isComplete() {\n    var _this$currentMask2;\n    return Boolean((_this$currentMask2 = this.currentMask) == null ? void 0 : _this$currentMask2.isComplete);\n  }\n  get isFilled() {\n    var _this$currentMask3;\n    return Boolean((_this$currentMask3 = this.currentMask) == null ? void 0 : _this$currentMask3.isFilled);\n  }\n  remove(fromPos, toPos) {\n    const details = new ChangeDetails();\n    if (this.currentMask) {\n      details.aggregate(this.currentMask.remove(fromPos, toPos))\n      // update with dispatch\n      .aggregate(this._applyDispatch());\n    }\n    return details;\n  }\n  get state() {\n    var _this$currentMask4;\n    return {\n      ...super.state,\n      _rawInputValue: this.rawInputValue,\n      compiledMasks: this.compiledMasks.map(m => m.state),\n      currentMaskRef: this.currentMask,\n      currentMask: (_this$currentMask4 = this.currentMask) == null ? void 0 : _this$currentMask4.state\n    };\n  }\n  set state(state) {\n    const {\n      compiledMasks,\n      currentMaskRef,\n      currentMask,\n      ...maskedState\n    } = state;\n    if (compiledMasks) this.compiledMasks.forEach((m, mi) => m.state = compiledMasks[mi]);\n    if (currentMaskRef != null) {\n      this.currentMask = currentMaskRef;\n      this.currentMask.state = currentMask;\n    }\n    super.state = maskedState;\n  }\n  extractInput(fromPos, toPos, flags) {\n    return this.currentMask ? this.currentMask.extractInput(fromPos, toPos, flags) : '';\n  }\n  extractTail(fromPos, toPos) {\n    return this.currentMask ? this.currentMask.extractTail(fromPos, toPos) : super.extractTail(fromPos, toPos);\n  }\n  doCommit() {\n    if (this.currentMask) this.currentMask.doCommit();\n    super.doCommit();\n  }\n  nearestInputPos(cursorPos, direction) {\n    return this.currentMask ? this.currentMask.nearestInputPos(cursorPos, direction) : super.nearestInputPos(cursorPos, direction);\n  }\n  get overwrite() {\n    return this.currentMask ? this.currentMask.overwrite : this._overwrite;\n  }\n  set overwrite(overwrite) {\n    this._overwrite = overwrite;\n  }\n  get eager() {\n    return this.currentMask ? this.currentMask.eager : this._eager;\n  }\n  set eager(eager) {\n    this._eager = eager;\n  }\n  get skipInvalid() {\n    return this.currentMask ? this.currentMask.skipInvalid : this._skipInvalid;\n  }\n  set skipInvalid(skipInvalid) {\n    this._skipInvalid = skipInvalid;\n  }\n  get autofix() {\n    return this.currentMask ? this.currentMask.autofix : this._autofix;\n  }\n  set autofix(autofix) {\n    this._autofix = autofix;\n  }\n  maskEquals(mask) {\n    return Array.isArray(mask) ? this.compiledMasks.every((m, mi) => {\n      if (!mask[mi]) return;\n      const {\n        mask: oldMask,\n        ...restOpts\n      } = mask[mi];\n      return objectIncludes(m, restOpts) && m.maskEquals(oldMask);\n    }) : super.maskEquals(mask);\n  }\n  typedValueEquals(value) {\n    var _this$currentMask5;\n    return Boolean((_this$currentMask5 = this.currentMask) == null ? void 0 : _this$currentMask5.typedValueEquals(value));\n  }\n}\n/** Currently chosen mask */\n/** Currently chosen mask */\n/** Compliled {@link Masked} options */\n/** Chooses {@link Masked} depending on input value */\nMaskedDynamic.DEFAULTS = {\n  ...Masked.DEFAULTS,\n  dispatch: (appended, masked, flags, tail) => {\n    if (!masked.compiledMasks.length) return;\n    const inputValue = masked.rawInputValue;\n\n    // simulate input\n    const inputs = masked.compiledMasks.map((m, index) => {\n      const isCurrent = masked.currentMask === m;\n      const startInputPos = isCurrent ? m.displayValue.length : m.nearestInputPos(m.displayValue.length, DIRECTION.FORCE_LEFT);\n      if (m.rawInputValue !== inputValue) {\n        m.reset();\n        m.append(inputValue, {\n          raw: true\n        });\n      } else if (!isCurrent) {\n        m.remove(startInputPos);\n      }\n      m.append(appended, masked.currentMaskFlags(flags));\n      m.appendTail(tail);\n      return {\n        index,\n        weight: m.rawInputValue.length,\n        totalInputPositions: m.totalInputPositions(0, Math.max(startInputPos, m.nearestInputPos(m.displayValue.length, DIRECTION.FORCE_LEFT)))\n      };\n    });\n\n    // pop masks with longer values first\n    inputs.sort((i1, i2) => i2.weight - i1.weight || i2.totalInputPositions - i1.totalInputPositions);\n    return masked.compiledMasks[inputs[0].index];\n  }\n};\nIMask.MaskedDynamic = MaskedDynamic;\n\nexport { MaskedDynamic as default };\n","import MaskedPattern from './pattern.js';\nimport IMask from '../core/holder.js';\nimport ChangeDetails from '../core/change-details.js';\nimport { DIRECTION } from '../core/utils.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport './base.js';\nimport './factory.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/input-definition.js';\nimport './regexp.js';\n\n/** Pattern which validates enum values */\nclass MaskedEnum extends MaskedPattern {\n  constructor(opts) {\n    super({\n      ...MaskedEnum.DEFAULTS,\n      ...opts\n    }); // mask will be created in _update\n  }\n  updateOptions(opts) {\n    super.updateOptions(opts);\n  }\n  _update(opts) {\n    const {\n      enum: enum_,\n      ...eopts\n    } = opts;\n    if (enum_) {\n      const lengths = enum_.map(e => e.length);\n      const requiredLength = Math.min(...lengths);\n      const optionalLength = Math.max(...lengths) - requiredLength;\n      eopts.mask = '*'.repeat(requiredLength);\n      if (optionalLength) eopts.mask += '[' + '*'.repeat(optionalLength) + ']';\n      this.enum = enum_;\n    }\n    super._update(eopts);\n  }\n  _appendCharRaw(ch, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    const matchFrom = Math.min(this.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n    const matches = this.enum.filter(e => this.matchValue(e, this.unmaskedValue + ch, matchFrom));\n    if (matches.length) {\n      if (matches.length === 1) {\n        this._forEachBlocksInRange(0, this.value.length, (b, bi) => {\n          const mch = matches[0][bi];\n          if (bi >= this.value.length || mch === b.value) return;\n          b.reset();\n          b._appendChar(mch, flags);\n        });\n      }\n      const d = super._appendCharRaw(matches[0][this.value.length], flags);\n      if (matches.length === 1) {\n        matches[0].slice(this.unmaskedValue.length).split('').forEach(mch => d.aggregate(super._appendCharRaw(mch)));\n      }\n      return d;\n    }\n    return new ChangeDetails({\n      skip: !this.isComplete\n    });\n  }\n  extractTail(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.displayValue.length;\n    }\n    // just drop tail\n    return new ContinuousTailDetails('', fromPos);\n  }\n  remove(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.displayValue.length;\n    }\n    if (fromPos === toPos) return new ChangeDetails();\n    const matchFrom = Math.min(super.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n    let pos;\n    for (pos = fromPos; pos >= 0; --pos) {\n      const matches = this.enum.filter(e => this.matchValue(e, this.value.slice(matchFrom, pos), matchFrom));\n      if (matches.length > 1) break;\n    }\n    const details = super.remove(pos, toPos);\n    details.tailShift += pos - fromPos;\n    return details;\n  }\n  get isComplete() {\n    return this.enum.indexOf(this.value) >= 0;\n  }\n}\n/** Match enum value */\nMaskedEnum.DEFAULTS = {\n  ...MaskedPattern.DEFAULTS,\n  matchValue: (estr, istr, matchFrom) => estr.indexOf(istr, matchFrom) === matchFrom\n};\nIMask.MaskedEnum = MaskedEnum;\n\nexport { MaskedEnum as default };\n","import Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/change-details.js';\nimport '../core/continuous-tail-details.js';\nimport '../core/utils.js';\n\n/** Masking by custom Function */\nclass MaskedFunction extends Masked {\n  /** */\n\n  /** Enable characters overwriting */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  updateOptions(opts) {\n    super.updateOptions(opts);\n  }\n  _update(opts) {\n    super._update({\n      ...opts,\n      validate: opts.mask\n    });\n  }\n}\nIMask.MaskedFunction = MaskedFunction;\n\nexport { MaskedFunction as default };\n","import { escapeRegExp, DIRECTION } from '../core/utils.js';\nimport ChangeDetails from '../core/change-details.js';\nimport Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/continuous-tail-details.js';\n\nvar _MaskedNumber;\n/** Number mask */\nclass MaskedNumber extends Masked {\n  /** Single char */\n\n  /** Single char */\n\n  /** Array of single chars */\n\n  /** */\n\n  /** */\n\n  /** Digits after point */\n\n  /** Flag to remove leading and trailing zeros in the end of editing */\n\n  /** Flag to pad trailing zeros after point in the end of editing */\n\n  /** Enable characters overwriting */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  /** Format typed value to string */\n\n  /** Parse string to get typed value */\n\n  constructor(opts) {\n    super({\n      ...MaskedNumber.DEFAULTS,\n      ...opts\n    });\n  }\n  updateOptions(opts) {\n    super.updateOptions(opts);\n  }\n  _update(opts) {\n    super._update(opts);\n    this._updateRegExps();\n  }\n  _updateRegExps() {\n    const start = '^' + (this.allowNegative ? '[+|\\\\-]?' : '');\n    const mid = '\\\\d*';\n    const end = (this.scale ? \"(\" + escapeRegExp(this.radix) + \"\\\\d{0,\" + this.scale + \"})?\" : '') + '$';\n    this._numberRegExp = new RegExp(start + mid + end);\n    this._mapToRadixRegExp = new RegExp(\"[\" + this.mapToRadix.map(escapeRegExp).join('') + \"]\", 'g');\n    this._thousandsSeparatorRegExp = new RegExp(escapeRegExp(this.thousandsSeparator), 'g');\n  }\n  _removeThousandsSeparators(value) {\n    return value.replace(this._thousandsSeparatorRegExp, '');\n  }\n  _insertThousandsSeparators(value) {\n    // https://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript\n    const parts = value.split(this.radix);\n    parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, this.thousandsSeparator);\n    return parts.join(this.radix);\n  }\n  doPrepareChar(ch, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    const [prepCh, details] = super.doPrepareChar(this._removeThousandsSeparators(this.scale && this.mapToRadix.length && (\n    /*\n      radix should be mapped when\n      1) input is done from keyboard = flags.input && flags.raw\n      2) unmasked value is set = !flags.input && !flags.raw\n      and should not be mapped when\n      1) value is set = flags.input && !flags.raw\n      2) raw value is set = !flags.input && flags.raw\n    */\n    flags.input && flags.raw || !flags.input && !flags.raw) ? ch.replace(this._mapToRadixRegExp, this.radix) : ch), flags);\n    if (ch && !prepCh) details.skip = true;\n    if (prepCh && !this.allowPositive && !this.value && prepCh !== '-') details.aggregate(this._appendChar('-'));\n    return [prepCh, details];\n  }\n  _separatorsCount(to, extendOnSeparators) {\n    if (extendOnSeparators === void 0) {\n      extendOnSeparators = false;\n    }\n    let count = 0;\n    for (let pos = 0; pos < to; ++pos) {\n      if (this._value.indexOf(this.thousandsSeparator, pos) === pos) {\n        ++count;\n        if (extendOnSeparators) to += this.thousandsSeparator.length;\n      }\n    }\n    return count;\n  }\n  _separatorsCountFromSlice(slice) {\n    if (slice === void 0) {\n      slice = this._value;\n    }\n    return this._separatorsCount(this._removeThousandsSeparators(slice).length, true);\n  }\n  extractInput(fromPos, toPos, flags) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.displayValue.length;\n    }\n    [fromPos, toPos] = this._adjustRangeWithSeparators(fromPos, toPos);\n    return this._removeThousandsSeparators(super.extractInput(fromPos, toPos, flags));\n  }\n  _appendCharRaw(ch, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    const prevBeforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value;\n    const prevBeforeTailSeparatorsCount = this._separatorsCountFromSlice(prevBeforeTailValue);\n    this._value = this._removeThousandsSeparators(this.value);\n    const oldValue = this._value;\n    this._value += ch;\n    const num = this.number;\n    let accepted = !isNaN(num);\n    let skip = false;\n    if (accepted) {\n      let fixedNum;\n      if (this.min != null && this.min < 0 && this.number < this.min) fixedNum = this.min;\n      if (this.max != null && this.max > 0 && this.number > this.max) fixedNum = this.max;\n      if (fixedNum != null) {\n        if (this.autofix) {\n          this._value = this.format(fixedNum, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n          skip || (skip = oldValue === this._value && !flags.tail); // if not changed on tail it's still ok to proceed\n        } else {\n          accepted = false;\n        }\n      }\n      accepted && (accepted = Boolean(this._value.match(this._numberRegExp)));\n    }\n    let appendDetails;\n    if (!accepted) {\n      this._value = oldValue;\n      appendDetails = new ChangeDetails();\n    } else {\n      appendDetails = new ChangeDetails({\n        inserted: this._value.slice(oldValue.length),\n        rawInserted: skip ? '' : ch,\n        skip\n      });\n    }\n    this._value = this._insertThousandsSeparators(this._value);\n    const beforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value;\n    const beforeTailSeparatorsCount = this._separatorsCountFromSlice(beforeTailValue);\n    appendDetails.tailShift += (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length;\n    return appendDetails;\n  }\n  _findSeparatorAround(pos) {\n    if (this.thousandsSeparator) {\n      const searchFrom = pos - this.thousandsSeparator.length + 1;\n      const separatorPos = this.value.indexOf(this.thousandsSeparator, searchFrom);\n      if (separatorPos <= pos) return separatorPos;\n    }\n    return -1;\n  }\n  _adjustRangeWithSeparators(from, to) {\n    const separatorAroundFromPos = this._findSeparatorAround(from);\n    if (separatorAroundFromPos >= 0) from = separatorAroundFromPos;\n    const separatorAroundToPos = this._findSeparatorAround(to);\n    if (separatorAroundToPos >= 0) to = separatorAroundToPos + this.thousandsSeparator.length;\n    return [from, to];\n  }\n  remove(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.displayValue.length;\n    }\n    [fromPos, toPos] = this._adjustRangeWithSeparators(fromPos, toPos);\n    const valueBeforePos = this.value.slice(0, fromPos);\n    const valueAfterPos = this.value.slice(toPos);\n    const prevBeforeTailSeparatorsCount = this._separatorsCount(valueBeforePos.length);\n    this._value = this._insertThousandsSeparators(this._removeThousandsSeparators(valueBeforePos + valueAfterPos));\n    const beforeTailSeparatorsCount = this._separatorsCountFromSlice(valueBeforePos);\n    return new ChangeDetails({\n      tailShift: (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length\n    });\n  }\n  nearestInputPos(cursorPos, direction) {\n    if (!this.thousandsSeparator) return cursorPos;\n    switch (direction) {\n      case DIRECTION.NONE:\n      case DIRECTION.LEFT:\n      case DIRECTION.FORCE_LEFT:\n        {\n          const separatorAtLeftPos = this._findSeparatorAround(cursorPos - 1);\n          if (separatorAtLeftPos >= 0) {\n            const separatorAtLeftEndPos = separatorAtLeftPos + this.thousandsSeparator.length;\n            if (cursorPos < separatorAtLeftEndPos || this.value.length <= separatorAtLeftEndPos || direction === DIRECTION.FORCE_LEFT) {\n              return separatorAtLeftPos;\n            }\n          }\n          break;\n        }\n      case DIRECTION.RIGHT:\n      case DIRECTION.FORCE_RIGHT:\n        {\n          const separatorAtRightPos = this._findSeparatorAround(cursorPos);\n          if (separatorAtRightPos >= 0) {\n            return separatorAtRightPos + this.thousandsSeparator.length;\n          }\n        }\n    }\n    return cursorPos;\n  }\n  doCommit() {\n    if (this.value) {\n      const number = this.number;\n      let validnum = number;\n\n      // check bounds\n      if (this.min != null) validnum = Math.max(validnum, this.min);\n      if (this.max != null) validnum = Math.min(validnum, this.max);\n      if (validnum !== number) this.unmaskedValue = this.format(validnum, this);\n      let formatted = this.value;\n      if (this.normalizeZeros) formatted = this._normalizeZeros(formatted);\n      if (this.padFractionalZeros && this.scale > 0) formatted = this._padFractionalZeros(formatted);\n      this._value = formatted;\n    }\n    super.doCommit();\n  }\n  _normalizeZeros(value) {\n    const parts = this._removeThousandsSeparators(value).split(this.radix);\n\n    // remove leading zeros\n    parts[0] = parts[0].replace(/^(\\D*)(0*)(\\d*)/, (match, sign, zeros, num) => sign + num);\n    // add leading zero\n    if (value.length && !/\\d$/.test(parts[0])) parts[0] = parts[0] + '0';\n    if (parts.length > 1) {\n      parts[1] = parts[1].replace(/0*$/, ''); // remove trailing zeros\n      if (!parts[1].length) parts.length = 1; // remove fractional\n    }\n    return this._insertThousandsSeparators(parts.join(this.radix));\n  }\n  _padFractionalZeros(value) {\n    if (!value) return value;\n    const parts = value.split(this.radix);\n    if (parts.length < 2) parts.push('');\n    parts[1] = parts[1].padEnd(this.scale, '0');\n    return parts.join(this.radix);\n  }\n  doSkipInvalid(ch, flags, checkTail) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    const dropFractional = this.scale === 0 && ch !== this.thousandsSeparator && (ch === this.radix || ch === MaskedNumber.UNMASKED_RADIX || this.mapToRadix.includes(ch));\n    return super.doSkipInvalid(ch, flags, checkTail) && !dropFractional;\n  }\n  get unmaskedValue() {\n    return this._removeThousandsSeparators(this._normalizeZeros(this.value)).replace(this.radix, MaskedNumber.UNMASKED_RADIX);\n  }\n  set unmaskedValue(unmaskedValue) {\n    super.unmaskedValue = unmaskedValue;\n  }\n  get typedValue() {\n    return this.parse(this.unmaskedValue, this);\n  }\n  set typedValue(n) {\n    this.rawInputValue = this.format(n, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n  }\n\n  /** Parsed Number */\n  get number() {\n    return this.typedValue;\n  }\n  set number(number) {\n    this.typedValue = number;\n  }\n  get allowNegative() {\n    return this.min != null && this.min < 0 || this.max != null && this.max < 0;\n  }\n  get allowPositive() {\n    return this.min != null && this.min > 0 || this.max != null && this.max > 0;\n  }\n  typedValueEquals(value) {\n    // handle  0 -> '' case (typed = 0 even if value = '')\n    // for details see https://github.com/uNmAnNeR/imaskjs/issues/134\n    return (super.typedValueEquals(value) || MaskedNumber.EMPTY_VALUES.includes(value) && MaskedNumber.EMPTY_VALUES.includes(this.typedValue)) && !(value === 0 && this.value === '');\n  }\n}\n_MaskedNumber = MaskedNumber;\nMaskedNumber.UNMASKED_RADIX = '.';\nMaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0];\nMaskedNumber.DEFAULTS = {\n  ...Masked.DEFAULTS,\n  mask: Number,\n  radix: ',',\n  thousandsSeparator: '',\n  mapToRadix: [_MaskedNumber.UNMASKED_RADIX],\n  min: Number.MIN_SAFE_INTEGER,\n  max: Number.MAX_SAFE_INTEGER,\n  scale: 2,\n  normalizeZeros: true,\n  padFractionalZeros: false,\n  parse: Number,\n  format: n => n.toLocaleString('en-US', {\n    useGrouping: false,\n    maximumFractionDigits: 20\n  })\n};\nIMask.MaskedNumber = MaskedNumber;\n\nexport { MaskedNumber as default };\n","import createMask from './factory.js';\nimport IMask from '../core/holder.js';\nimport '../core/utils.js';\n\n/** Mask pipe source and destination types */\nconst PIPE_TYPE = {\n  MASKED: 'value',\n  UNMASKED: 'unmaskedValue',\n  TYPED: 'typedValue'\n};\n/** Creates new pipe function depending on mask type, source and destination options */\nfunction createPipe(arg, from, to) {\n  if (from === void 0) {\n    from = PIPE_TYPE.MASKED;\n  }\n  if (to === void 0) {\n    to = PIPE_TYPE.MASKED;\n  }\n  const masked = createMask(arg);\n  return value => masked.runIsolated(m => {\n    m[from] = value;\n    return m[to];\n  });\n}\n\n/** Pipes value through mask depending on mask type, source and destination options */\nfunction pipe(value, mask, from, to) {\n  return createPipe(mask, from, to)(value);\n}\nIMask.PIPE_TYPE = PIPE_TYPE;\nIMask.createPipe = createPipe;\nIMask.pipe = pipe;\n\nexport { PIPE_TYPE, createPipe, pipe };\n","import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/input-definition.js';\nimport './regexp.js';\n\n/** Pattern mask */\nclass RepeatBlock extends MaskedPattern {\n  get repeatFrom() {\n    var _ref;\n    return (_ref = Array.isArray(this.repeat) ? this.repeat[0] : this.repeat === Infinity ? 0 : this.repeat) != null ? _ref : 0;\n  }\n  get repeatTo() {\n    var _ref2;\n    return (_ref2 = Array.isArray(this.repeat) ? this.repeat[1] : this.repeat) != null ? _ref2 : Infinity;\n  }\n  constructor(opts) {\n    super(opts);\n  }\n  updateOptions(opts) {\n    super.updateOptions(opts);\n  }\n  _update(opts) {\n    var _ref3, _ref4, _this$_blocks;\n    const {\n      repeat,\n      ...blockOpts\n    } = normalizeOpts(opts); // TODO type\n    this._blockOpts = Object.assign({}, this._blockOpts, blockOpts);\n    const block = createMask(this._blockOpts);\n    this.repeat = (_ref3 = (_ref4 = repeat != null ? repeat : block.repeat) != null ? _ref4 : this.repeat) != null ? _ref3 : Infinity; // TODO type\n\n    super._update({\n      mask: 'm'.repeat(Math.max(this.repeatTo === Infinity && ((_this$_blocks = this._blocks) == null ? void 0 : _this$_blocks.length) || 0, this.repeatFrom)),\n      blocks: {\n        m: block\n      },\n      eager: block.eager,\n      overwrite: block.overwrite,\n      skipInvalid: block.skipInvalid,\n      lazy: block.lazy,\n      placeholderChar: block.placeholderChar,\n      displayChar: block.displayChar\n    });\n  }\n  _allocateBlock(bi) {\n    if (bi < this._blocks.length) return this._blocks[bi];\n    if (this.repeatTo === Infinity || this._blocks.length < this.repeatTo) {\n      this._blocks.push(createMask(this._blockOpts));\n      this.mask += 'm';\n      return this._blocks[this._blocks.length - 1];\n    }\n  }\n  _appendCharRaw(ch, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    const details = new ChangeDetails();\n    for (let bi = (_this$_mapPosToBlock$ = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index) != null ? _this$_mapPosToBlock$ : Math.max(this._blocks.length - 1, 0), block, allocated;\n    // try to get a block or\n    // try to allocate a new block if not allocated already\n    block = (_this$_blocks$bi = this._blocks[bi]) != null ? _this$_blocks$bi : allocated = !allocated && this._allocateBlock(bi); ++bi) {\n      var _this$_mapPosToBlock$, _this$_mapPosToBlock, _this$_blocks$bi, _flags$_beforeTailSta;\n      const blockDetails = block._appendChar(ch, {\n        ...flags,\n        _beforeTailState: (_flags$_beforeTailSta = flags._beforeTailState) == null || (_flags$_beforeTailSta = _flags$_beforeTailSta._blocks) == null ? void 0 : _flags$_beforeTailSta[bi]\n      });\n      if (blockDetails.skip && allocated) {\n        // remove the last allocated block and break\n        this._blocks.pop();\n        this.mask = this.mask.slice(1);\n        break;\n      }\n      details.aggregate(blockDetails);\n      if (blockDetails.consumed) break; // go next char\n    }\n    return details;\n  }\n  _trimEmptyTail(fromPos, toPos) {\n    var _this$_mapPosToBlock2, _this$_mapPosToBlock3;\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    const firstBlockIndex = Math.max(((_this$_mapPosToBlock2 = this._mapPosToBlock(fromPos)) == null ? void 0 : _this$_mapPosToBlock2.index) || 0, this.repeatFrom, 0);\n    let lastBlockIndex;\n    if (toPos != null) lastBlockIndex = (_this$_mapPosToBlock3 = this._mapPosToBlock(toPos)) == null ? void 0 : _this$_mapPosToBlock3.index;\n    if (lastBlockIndex == null) lastBlockIndex = this._blocks.length - 1;\n    let removeCount = 0;\n    for (let blockIndex = lastBlockIndex; firstBlockIndex <= blockIndex; --blockIndex, ++removeCount) {\n      if (this._blocks[blockIndex].unmaskedValue) break;\n    }\n    if (removeCount) {\n      this._blocks.splice(lastBlockIndex - removeCount + 1, removeCount);\n      this.mask = this.mask.slice(removeCount);\n    }\n  }\n  reset() {\n    super.reset();\n    this._trimEmptyTail();\n  }\n  remove(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.displayValue.length;\n    }\n    const removeDetails = super.remove(fromPos, toPos);\n    this._trimEmptyTail(fromPos, toPos);\n    return removeDetails;\n  }\n  totalInputPositions(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos == null && this.repeatTo === Infinity) return Infinity;\n    return super.totalInputPositions(fromPos, toPos);\n  }\n  get state() {\n    return super.state;\n  }\n  set state(state) {\n    this._blocks.length = state._blocks.length;\n    this.mask = this.mask.slice(0, this._blocks.length);\n    super.state = state;\n  }\n}\nIMask.RepeatBlock = RepeatBlock;\n\nexport { RepeatBlock as default };\n","export { default as InputMask } from './controls/input.js';\nimport IMask from './core/holder.js';\nexport { default as HTMLContenteditableMaskElement } from './controls/html-contenteditable-mask-element.js';\nexport { default as HTMLInputMaskElement } from './controls/html-input-mask-element.js';\nexport { default as HTMLMaskElement } from './controls/html-mask-element.js';\nexport { default as MaskElement } from './controls/mask-element.js';\nexport { default as ChangeDetails } from './core/change-details.js';\nexport { DIRECTION, forceDirection } from './core/utils.js';\nexport { default as Masked } from './masked/base.js';\nexport { default as MaskedDate } from './masked/date.js';\nexport { default as MaskedDynamic } from './masked/dynamic.js';\nexport { default as MaskedEnum } from './masked/enum.js';\nexport { default as createMask, normalizeOpts } from './masked/factory.js';\nexport { default as MaskedFunction } from './masked/function.js';\nexport { default as MaskedNumber } from './masked/number.js';\nexport { default as MaskedPattern } from './masked/pattern.js';\nexport { default as ChunksTailDetails } from './masked/pattern/chunk-tail-details.js';\nexport { default as PatternFixedDefinition } from './masked/pattern/fixed-definition.js';\nexport { default as PatternInputDefinition } from './masked/pattern/input-definition.js';\nexport { PIPE_TYPE, createPipe, pipe } from './masked/pipe.js';\nexport { default as MaskedRange } from './masked/range.js';\nexport { default as MaskedRegExp } from './masked/regexp.js';\nexport { default as RepeatBlock } from './masked/repeat.js';\nimport './core/action-details.js';\nimport './controls/input-history.js';\nimport './core/continuous-tail-details.js';\nimport './masked/pattern/cursor.js';\n\ntry {\n  globalThis.IMask = IMask;\n} catch {}\n\nexport { IMask as default };\n"]}