{"version":3,"file":"withMask-VWeBqi_u.cjs","names":["document","window","data","document","window","data","Event","window","window","window","$","analyseMask","MaskToken","document","window","$","$","moduleInterop","inputmask","inputmask"],"sources":["../src/core/elementResolver.ts","../../../node_modules/.pnpm/inputmask@5.0.10-beta.61/node_modules/inputmask/lib/defaults.js","../../../node_modules/.pnpm/inputmask@5.0.10-beta.61/node_modules/inputmask/lib/definitions.js","../../../node_modules/.pnpm/inputmask@5.0.10-beta.61/node_modules/inputmask/lib/global/window.js","../../../node_modules/.pnpm/inputmask@5.0.10-beta.61/node_modules/inputmask/lib/dependencyLibs/data.js","../../../node_modules/.pnpm/inputmask@5.0.10-beta.61/node_modules/inputmask/lib/dependencyLibs/extend.js","../../../node_modules/.pnpm/inputmask@5.0.10-beta.61/node_modules/inputmask/lib/dependencyLibs/events.js","../../../node_modules/.pnpm/inputmask@5.0.10-beta.61/node_modules/inputmask/lib/dependencyLibs/inputmask.dependencyLib.js","../../../node_modules/.pnpm/inputmask@5.0.10-beta.61/node_modules/inputmask/lib/environment.js","../../../node_modules/.pnpm/inputmask@5.0.10-beta.61/node_modules/inputmask/lib/keycode.js","../../../node_modules/.pnpm/inputmask@5.0.10-beta.61/node_modules/inputmask/lib/validation-tests.js","../../../node_modules/.pnpm/inputmask@5.0.10-beta.61/node_modules/inputmask/lib/validation.js","../../../node_modules/.pnpm/inputmask@5.0.10-beta.61/node_modules/inputmask/lib/positioning.js","../../../node_modules/.pnpm/inputmask@5.0.10-beta.61/node_modules/inputmask/lib/eventhandlers.js","../../../node_modules/.pnpm/inputmask@5.0.10-beta.61/node_modules/inputmask/lib/inputHandling.js","../../../node_modules/.pnpm/inputmask@5.0.10-beta.61/node_modules/inputmask/lib/eventruler.js","../../../node_modules/.pnpm/inputmask@5.0.10-beta.61/node_modules/inputmask/lib/mask.js","../../../node_modules/.pnpm/inputmask@5.0.10-beta.61/node_modules/inputmask/lib/escapeRegex.js","../../../node_modules/.pnpm/inputmask@5.0.10-beta.61/node_modules/inputmask/lib/masktoken.js","../../../node_modules/.pnpm/inputmask@5.0.10-beta.61/node_modules/inputmask/lib/mask-lexer.js","../../../node_modules/.pnpm/inputmask@5.0.10-beta.61/node_modules/inputmask/lib/inputmask.js","../../../node_modules/.pnpm/inputmask@5.0.10-beta.61/node_modules/inputmask/lib/extensions/inputmask.extensions.js","../../../node_modules/.pnpm/inputmask@5.0.10-beta.61/node_modules/inputmask/lib/extensions/inputmask.date.i18n.js","../../../node_modules/.pnpm/inputmask@5.0.10-beta.61/node_modules/inputmask/lib/extensions/inputmask.date.extensions.js","../../../node_modules/.pnpm/inputmask@5.0.10-beta.61/node_modules/inputmask/lib/extensions/inputmask.numeric.extensions.js","../src/core/inputmask.ts","../src/core/maskConfig.ts","../src/utils/flow.ts","../src/utils/isServer.ts","../src/utils/moduleInterop.ts","../src/utils/maskHelpers.ts","../src/core/maskEngine.ts","../src/api/withMask.ts"],"sourcesContent":["import type { Input } from '../types';\n\n/**\n * Checks if an element is a valid DOM element (or at least looks like one).\n *\n * @param element - The element to check\n * @returns True if it's a valid HTMLElement\n */\nexport function isHTMLElement(element: unknown): element is HTMLElement {\n  return (\n    element !== null\n    && typeof element === 'object'\n    && 'nodeType' in element\n    && 'querySelector' in element\n    && typeof (element as HTMLElement).querySelector === 'function'\n  );\n}\n\n/**\n * Finds the actual input element from various component structures.\n * Finds the actual input inside wrappers (ant design, etc). Like a detective.\n *\n * @param element - The element to search in\n * @returns The found input element or null\n */\nexport function findInputElement(element: unknown): HTMLElement | null {\n  if (!element) return null;\n\n  if (!isHTMLElement(element)) {\n    return null;\n  }\n\n  // if it's already an input or textarea, return it directly\n  if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n    return element;\n  }\n\n  // tries to find input inside the wrapper\n  if (!('querySelector' in element) || typeof element.querySelector !== 'function') {\n    return null;\n  }\n\n  try {\n    const inputElement = element.querySelector('input, textarea');\n\n    if (inputElement && isHTMLElement(inputElement)) {\n      return inputElement;\n    }\n  } catch {\n    // if it errors, return null and move on\n    return null;\n  }\n\n  return null;\n}\n\n/**\n * Resolves React refs to a valid HTMLInputElement.\n * Handles ref objects and direct DOM elements.\n *\n * @param input - The input reference to resolve\n * @returns A valid HTMLInputElement or null\n */\nexport function resolveInputRef(input: Input | null): HTMLInputElement | null {\n  if (!input) {\n    return null;\n  }\n\n  // react ref objects\n  if (typeof input === 'object' && 'current' in input) {\n    const refValue = (input as { current: HTMLElement | null }).current;\n    if (isHTMLElement(refValue)) {\n      return refValue as HTMLInputElement;\n    }\n    return null;\n  }\n\n  // direct dom elements\n  if (isHTMLElement(input)) {\n    return input as HTMLInputElement;\n  }\n\n  return null;\n}\n","export default {\r\n  _maxTestPos: 500,\r\n  placeholder: \"_\",\r\n  optionalmarker: [\"[\", \"]\"],\r\n  quantifiermarker: [\"{\", \"}\"],\r\n  groupmarker: [\"(\", \")\"],\r\n  alternatormarker: \"|\",\r\n  escapeChar: \"\\\\\",\r\n  mask: null, // needs tobe null instead of undefined as the extend method does not consider props with the undefined value\r\n  regex: null, // regular expression as a mask\r\n  oncomplete: () => {}, // executes when the mask is complete\r\n  onincomplete: () => {}, // executes when the mask is incomplete and focus is lost\r\n  oncleared: () => {}, // executes when the mask is cleared\r\n  repeat: 0, // repetitions of the mask: * ~ forever, otherwise specify an integer\r\n  greedy: false, // true: allocated buffer for the mask and repetitions - false: allocate only if needed\r\n  autoUnmask: false, // automatically unmask when retrieving the value with $.fn.val or value if the browser supports __lookupGetter__ or getOwnPropertyDescriptor\r\n  removeMaskOnSubmit: false, // remove the mask before submitting the form.\r\n  clearMaskOnLostFocus: true,\r\n  insertMode: true, // insert the input or overwrite the input\r\n  insertModeVisual: true, // show selected caret when insertmode = false\r\n  clearIncomplete: false, // clear the incomplete input on blur\r\n  alias: null,\r\n  onKeyDown: () => {}, // callback to implement autocomplete on certain keys for example. args => event, buffer, caretPos, opts\r\n  onBeforeMask: null, // executes before masking the initial value to allow preprocessing of the initial value.\targs => initialValue, opts => return processedValue\r\n  onBeforePaste: function (pastedValue, opts) {\r\n    return typeof opts.onBeforeMask === \"function\"\r\n      ? opts.onBeforeMask.call(this, pastedValue, opts)\r\n      : pastedValue;\r\n  }, // executes before masking the pasted value to allow preprocessing of the pasted value.\targs => pastedValue, opts => return processedValue\r\n  onBeforeWrite: null, // executes before writing to the masked element. args => event, opts\r\n  onUnMask: null, // executes after unmasking to allow postprocessing of the unmaskedvalue.\targs => maskedValue, unmaskedValue, opts\r\n  outputMask: null, // mask to apply when unmasking\r\n  showMaskOnFocus: true, // show the mask-placeholder when the input has focus\r\n  showMaskOnHover: true, // show the mask-placeholder when hovering the empty input\r\n  onKeyValidation: () => {}, // executes on every key-press with the result of isValid. Params: key, result, opts\r\n  skipOptionalPartCharacter: \" \", // a character which can be used to skip an optional part of a mask\r\n  numericInput: false, // numericInput input direction style (input shifts to the left while holding the caret position)\r\n  rightAlign: false, // align to the right\r\n  undoOnEscape: true, // pressing escape reverts the value to the value before focus\r\n  // numeric basic properties\r\n  radixPoint: \"\", // \".\", // | \",\"\r\n  _radixDance: false, // dance around the radixPoint\r\n  groupSeparator: \"\", // \",\", // | \".\"\r\n  // numeric basic properties\r\n  keepStatic: null, // try to keep the mask static while typing. Decisions to alter the mask will be posponed if possible\r\n  positionCaretOnTab: true, // when enabled the caret position is set after the latest valid position on TAB\r\n  tabThrough: false, // allows for tabbing through the different parts of the masked field\r\n  supportsInputType: [\"text\", \"tel\", \"url\", \"password\", \"search\"], // list with the supported input types\r\n  isComplete: null, // override for isComplete - args => buffer, opts - return true || false\r\n  preValidation: null, // hook to preValidate the input.  Usefull for validating regardless the definition.\targs => buffer, pos, char, isSelection, opts, maskset, caretPos, strict => return true/false/command object\r\n  postValidation: null, // hook to postValidate the result from isValid.\tUsefull for validating the entry as a whole.\targs => buffer, pos, c, currentResult, opts, maskset, strict, fromCheckval, fromAlternate => return true/false/json\r\n  staticDefinitionSymbol: undefined, // specify a definitionSymbol for static content, used to make matches for alternators\r\n  jitMasking: false, // just in time masking ~ only mask while typing, can n (number), true or false\r\n  nullable: true, // return nothing instead of the buffertemplate when the user hasn't entered anything.\r\n  inputEventOnly: false, // dev option - testing inputfallback behavior\r\n  noValuePatching: false, // disable value property patching\r\n  positionCaretOnClick: \"lvp\", // none, lvp (based on the last valid position (default), radixFocus (position caret to radixpoint on initial click), select (select the whole input), ignore (ignore the click and continue the mask)\r\n  casing: null, // mask-level casing. Options: null, \"upper\", \"lower\" or \"title\" or callback args => elem, test, pos, validPositions return charValue\r\n  inputmode: \"text\", // specify the inputmode\r\n  importDataAttributes: true, // import data-inputmask attributes\r\n  shiftPositions: true, // shift position of the mask entries on entry and deletion.\r\n  usePrototypeDefinitions: true, // use the default defined definitions from the prototype\r\n  validationEventTimeOut: 3000, // Time to show validation error on form submit\r\n  substitutes: {} // define character substitutes\r\n};\r\n","export default {\r\n  9: {\r\n    validator: \"\\\\p{N}\",\r\n    definitionSymbol: \"*\"\r\n  },\r\n  a: {\r\n    validator: \"\\\\p{L}\",\r\n    definitionSymbol: \"*\"\r\n  },\r\n  \"*\": {\r\n    validator: \"[\\\\p{L}\\\\p{N}]\"\r\n  }\r\n};\r\n","const canUseDOM = !!(\r\n  typeof window !== \"undefined\" &&\r\n  window.document &&\r\n  window.document.createElement\r\n);\r\n\r\nexport default canUseDOM ? window : {};\r\n","export default function (owner, key, value) {\r\n  if (value === undefined) {\r\n    return owner.__data ? owner.__data[key] : null;\r\n  } else {\r\n    owner.__data = owner.__data || {};\r\n    owner.__data[key] = value;\r\n  }\r\n}\r\n","export default function extend() {\r\n  let options,\r\n    name,\r\n    src,\r\n    copy,\r\n    copyIsArray,\r\n    clone,\r\n    target = arguments[0] || {},\r\n    i = 1,\r\n    length = arguments.length,\r\n    deep = false;\r\n\r\n  // Handle a deep copy situation\r\n  if (typeof target === \"boolean\") {\r\n    deep = target;\r\n\r\n    // Skip the boolean and the target\r\n    target = arguments[i] || {};\r\n    i++;\r\n  }\r\n\r\n  // Handle case when target is a string or something (possible in deep copy)\r\n  if (typeof target !== \"object\" && typeof target !== \"function\") {\r\n    target = {};\r\n  }\r\n\r\n  for (; i < length; i++) {\r\n    // Only deal with non-null/undefined values\r\n    if ((options = arguments[i]) != null) {\r\n      // Extend the base object\r\n      for (name in options) {\r\n        src = target[name];\r\n        copy = options[name];\r\n\r\n        // Prevent never-ending loop\r\n        if (target === copy) {\r\n          continue;\r\n        }\r\n\r\n        // Recurse if we're merging plain objects or arrays\r\n        if (\r\n          deep &&\r\n          copy &&\r\n          (Object.prototype.toString.call(copy) === \"[object Object]\" ||\r\n            (copyIsArray = Array.isArray(copy)))\r\n        ) {\r\n          if (copyIsArray) {\r\n            copyIsArray = false;\r\n            clone = src && Array.isArray(src) ? src : [];\r\n          } else {\r\n            clone =\r\n              src && Object.prototype.toString.call(src) === \"[object Object]\"\r\n                ? src\r\n                : {};\r\n          }\r\n\r\n          // Never move original objects, clone them\r\n          target[name] = extend(deep, clone, copy);\r\n\r\n          // Don't bring in undefined values\r\n        } else if (copy !== undefined) {\r\n          target[name] = copy;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  // Return the modified object\r\n  return target;\r\n}\r\n","import window from \"../global/window\";\r\n\r\nimport data from \"./data\";\r\nimport extend from \"./extend\";\r\nimport DependencyLib from \"./inputmask.dependencyLib\";\r\n\r\nexport { on, off, trigger, Evnt as Event };\r\n\r\nconst document = window.document;\r\n\r\nfunction isValidElement(elem) {\r\n  return elem instanceof Element && data(elem, \"events\");\r\n}\r\n\r\nlet Evnt;\r\nif (typeof window.CustomEvent === \"function\") {\r\n  Evnt = window.CustomEvent;\r\n} else if (window.Event && document && document.createEvent) {\r\n  Evnt = function (event, params) {\r\n    params = params || {\r\n      bubbles: false,\r\n      cancelable: false,\r\n      composed: true,\r\n      detail: undefined\r\n    };\r\n    const evt = document.createEvent(\"CustomEvent\");\r\n    evt.initCustomEvent(\r\n      event,\r\n      params.bubbles,\r\n      params.cancelable,\r\n      params.detail\r\n    );\r\n    return evt;\r\n  };\r\n  Evnt.prototype = window.Event.prototype;\r\n} else if (typeof Event !== \"undefined\") {\r\n  // nodejs\r\n  Evnt = Event;\r\n}\r\n\r\nfunction on(events, handler) {\r\n  if (!this[0] || !isValidElement(this[0])) {\r\n    return this; // Early return if no valid element\r\n  }\r\n\r\n  const elem = this[0],\r\n    eventRegistry = data(elem, \"events\"),\r\n    addEvent = (ev, namespace) => {\r\n      // register domevent\r\n      if (elem.addEventListener) {\r\n        // all browsers except IE before version 9\r\n        elem.addEventListener(ev, handler, false);\r\n      } else if (elem.attachEvent) {\r\n        // IE before version 9\r\n        elem.attachEvent(`on${ev}`, handler);\r\n      }\r\n      eventRegistry[ev] = eventRegistry[ev] || {};\r\n      eventRegistry[ev][namespace] = eventRegistry[ev][namespace] || [];\r\n      eventRegistry[ev][namespace].push(handler);\r\n    };\r\n\r\n  events.split(\" \").forEach((event) => {\r\n    const [ev, namespace = \"global\"] = event.split(\".\");\r\n    addEvent(ev, namespace);\r\n  });\r\n\r\n  return this;\r\n}\r\n\r\nfunction off(events, handler) {\r\n  let eventRegistry, elem;\r\n\r\n  function removeEvent(ev, namespace, handler) {\r\n    if (ev in eventRegistry === true) {\r\n      // unbind to dom events\r\n      if (elem.removeEventListener) {\r\n        // all browsers except IE before version 9\r\n        elem.removeEventListener(ev, handler, false);\r\n      } else if (elem.detachEvent) {\r\n        // IE before version 9\r\n        elem.detachEvent(`on${ev}`, handler);\r\n      }\r\n      // when the namespace is not defined (global namespace), we need to clean up all events in all namespaces\r\n      if (namespace === \"global\") {\r\n        for (const nmsp in eventRegistry[ev]) {\r\n          eventRegistry[ev][nmsp].splice(\r\n            eventRegistry[ev][nmsp].indexOf(handler),\r\n            1\r\n          );\r\n        }\r\n      } else {\r\n        eventRegistry[ev][namespace].splice(\r\n          eventRegistry[ev][namespace].indexOf(handler),\r\n          1\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  function resolveNamespace(ev, namespace) {\r\n    const evts = [];\r\n    let hndx, hndL;\r\n    if (ev.length > 0) {\r\n      const namespaces = namespace\r\n        ? [namespace]\r\n        : Object.keys(eventRegistry[ev]);\r\n      for (let nsi = 0; nsi < namespaces.length; nsi++) {\r\n        namespace = namespaces[nsi];\r\n        if (handler === undefined) {\r\n          for (\r\n            hndx = 0, hndL = eventRegistry[ev][namespace]?.length || 0;\r\n            hndx < hndL;\r\n            hndx++\r\n          ) {\r\n            evts.push({\r\n              ev,\r\n              namespace,\r\n              handler: eventRegistry[ev][namespace][hndx]\r\n            });\r\n          }\r\n        } else {\r\n          evts.push({\r\n            ev,\r\n            namespace,\r\n            handler\r\n          });\r\n        }\r\n      }\r\n    } else if (namespace.length > 0) {\r\n      for (const evNdx in eventRegistry) {\r\n        if (eventRegistry[evNdx][namespace]) {\r\n          if (handler === undefined) {\r\n            for (\r\n              hndx = 0, hndL = eventRegistry[evNdx][namespace].length;\r\n              hndx < hndL;\r\n              hndx++\r\n            ) {\r\n              evts.push({\r\n                ev: evNdx,\r\n                namespace,\r\n                handler: eventRegistry[evNdx][namespace][hndx]\r\n              });\r\n            }\r\n          } else {\r\n            evts.push({\r\n              ev: evNdx,\r\n              namespace,\r\n              handler\r\n            });\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return evts;\r\n  }\r\n\r\n  if (isValidElement(this[0])) {\r\n    eventRegistry = data(this[0], \"events\");\r\n    elem = this[0];\r\n    // if no events defined, remove all events\r\n    events = events || Object.keys(eventRegistry).join(\" \");\r\n\r\n    if (events !== \"\") {\r\n      events.split(\" \").forEach((event) => {\r\n        const [ev, namespace] = event.split(\".\");\r\n        resolveNamespace(ev, namespace).forEach(\r\n          ({ ev: ev1, handler: handler1, namespace: namespace1 }) => {\r\n            removeEvent(ev1, namespace1, handler1);\r\n          }\r\n        );\r\n      });\r\n    }\r\n  }\r\n  return this;\r\n}\r\n\r\nfunction trigger(events /* , args... */) {\r\n  if (isValidElement(this[0])) {\r\n    const eventRegistry = data(this[0], \"events\"),\r\n      elem = this[0],\r\n      _events = typeof events === \"string\" ? events.split(\" \") : [events.type];\r\n    for (let endx = 0; endx < _events.length; endx++) {\r\n      const nsEvent = _events[endx].split(\".\"),\r\n        ev = nsEvent[0],\r\n        namespace = nsEvent[1] || \"global\";\r\n      if (document !== undefined) {\r\n        // trigger domevent\r\n        let evnt;\r\n        const params = {\r\n          bubbles: true,\r\n          cancelable: true,\r\n          composed: true,\r\n          detail: arguments[1]\r\n        };\r\n        // The custom event that will be created\r\n        if (document.createEvent) {\r\n          try {\r\n            switch (ev) {\r\n              case \"input\":\r\n                params.inputType = \"insertText\";\r\n                evnt = new InputEvent(ev, params);\r\n                break;\r\n              default:\r\n                evnt = new CustomEvent(ev, params);\r\n            }\r\n          } catch (e) {\r\n            evnt = document.createEvent(\"CustomEvent\");\r\n            evnt.initCustomEvent(\r\n              ev,\r\n              params.bubbles,\r\n              params.cancelable,\r\n              params.detail\r\n            );\r\n          }\r\n          if (events.type) extend(evnt, events);\r\n          elem.dispatchEvent(evnt);\r\n        } else {\r\n          evnt = document.createEventObject();\r\n          evnt.eventType = ev;\r\n          evnt.detail = arguments[1];\r\n          if (events.type) extend(evnt, events);\r\n          elem.fireEvent(\"on\" + evnt.eventType, evnt);\r\n        }\r\n      } else if (eventRegistry[ev] !== undefined) {\r\n        arguments[0] = arguments[0].type\r\n          ? arguments[0]\r\n          : DependencyLib.Event(arguments[0]);\r\n        arguments[0].detail = arguments.slice(1);\r\n\r\n        const registry = eventRegistry[ev],\r\n          handlers =\r\n            namespace === \"global\"\r\n              ? Object.values(registry).flat()\r\n              : registry[namespace];\r\n        handlers.forEach((handler) => handler.apply(elem, arguments));\r\n      }\r\n    }\r\n  }\r\n  return this;\r\n}\r\n","/*\r\n Input Mask plugin dependencyLib\r\n http://github.com/RobinHerbots/jquery.inputmask\r\n Copyright (c) Robin Herbots\r\n Licensed under the MIT license\r\n */\r\n\r\nimport window from \"../global/window\";\r\n\r\nimport data from \"./data\";\r\nimport { on, off, trigger, Event } from \"./events\";\r\nimport extend from \"./extend\";\r\n\r\nconst document = window.document;\r\n\r\nfunction DependencyLib(elem) {\r\n  if (elem instanceof DependencyLib) {\r\n    return elem;\r\n  }\r\n  if (!(this instanceof DependencyLib)) {\r\n    return new DependencyLib(elem);\r\n  }\r\n  if (elem !== undefined && elem !== null && elem !== window) {\r\n    this[0] = elem.nodeName\r\n      ? elem\r\n      : elem[0] !== undefined && elem[0].nodeName\r\n        ? elem[0]\r\n        : document.querySelector(elem);\r\n    if (this[0] !== undefined && this[0] !== null) {\r\n      data(this[0], \"events\", data(this[0], \"events\") || {});\r\n    }\r\n  }\r\n}\r\n\r\nDependencyLib.prototype = {\r\n  on,\r\n  off,\r\n  trigger\r\n};\r\n\r\n// static\r\nDependencyLib.extend = extend;\r\nDependencyLib.data = data;\r\nDependencyLib.Event = Event;\r\n\r\nexport default DependencyLib;\r\n","import window from \"./global/window\";\r\n\r\nconst ua = (window.navigator && window.navigator.userAgent) || \"\",\r\n  ie = ua.indexOf(\"MSIE \") > 0 || ua.indexOf(\"Trident/\") > 0,\r\n  mobile =\r\n    (window.navigator &&\r\n      window.navigator.userAgentData &&\r\n      window.navigator.userAgentData.mobile) ||\r\n    (window.navigator && window.navigator.maxTouchPoints) ||\r\n    \"ontouchstart\" in window, // not entirely correct but will currently do\r\n  iphone = /iphone/i.test(ua);\r\n\r\nexport { ie, mobile, iphone };\r\n","export { keyCode, toKey, toKeyCode, keys };\r\n\r\nconst ignorables = {\r\n    Alt: 18,\r\n    AltGraph: 18,\r\n    ArrowDown: 40,\r\n    ArrowLeft: 37,\r\n    ArrowRight: 39,\r\n    ArrowUp: 38,\r\n    Backspace: 8,\r\n    CapsLock: 20,\r\n    Control: 17,\r\n    ContextMenu: 93,\r\n    Dead: 221,\r\n    Delete: 46,\r\n    End: 35,\r\n    Escape: 27,\r\n    F1: 112,\r\n    F2: 113,\r\n    F3: 114,\r\n    F4: 115,\r\n    F5: 116,\r\n    F6: 117,\r\n    F7: 118,\r\n    F8: 119,\r\n    F9: 120,\r\n    F10: 121,\r\n    F11: 122,\r\n    F12: 123,\r\n    Home: 36,\r\n    Insert: 45,\r\n    NumLock: 144,\r\n    PageDown: 34,\r\n    PageUp: 33,\r\n    Pause: 19,\r\n    PrintScreen: 44,\r\n    Process: 229,\r\n    Shift: 16,\r\n    ScrollLock: 145,\r\n    Tab: 9,\r\n    Unidentified: 229\r\n  },\r\n  keyCode = {\r\n    c: 67,\r\n    x: 88,\r\n    z: 90,\r\n    BACKSPACE_SAFARI: 127,\r\n    Enter: 13,\r\n    Meta_LEFT: 91,\r\n    Meta_RIGHT: 92,\r\n    Space: 32,\r\n    ...ignorables\r\n  },\r\n  keyCodeRev = Object.entries(keyCode).reduce(\r\n    (acc, [key, value]) =>\r\n      (\r\n        // eslint-disable-next-line no-sequences\r\n        (acc[value] = acc[value] === undefined ? key : acc[value]), acc\r\n      ),\r\n    {}\r\n  ),\r\n  keys = Object.entries(keyCode).reduce(\r\n    // eslint-disable-next-line no-sequences\r\n    (acc, [key, value]) => ((acc[key] = key === \"Space\" ? \" \" : key), acc),\r\n    {}\r\n  );\r\n\r\nfunction toKey(keyCode, shiftKey) {\r\n  return (\r\n    keyCodeRev[keyCode] ||\r\n    (shiftKey\r\n      ? String.fromCharCode(keyCode)\r\n      : String.fromCharCode(keyCode).toLowerCase())\r\n  );\r\n}\r\n\r\nfunction toKeyCode(key) {\r\n  return keyCode[key];\r\n}\r\n","import Inputmask from \"./inputmask\";\r\nimport { getLastValidPosition, seekNext } from \"./positioning\";\r\n\r\nexport {\r\n  determineTestTemplate,\r\n  getDecisionTaker,\r\n  getMaskTemplate,\r\n  getPlaceholder,\r\n  getTest,\r\n  getTests,\r\n  getTestTemplate,\r\n  isSubsetOf\r\n};\r\n\r\nfunction getLocator(tst, align) {\r\n  // need to align the locators to be correct\r\n  let locator = (\r\n    tst.alternation != undefined\r\n      ? tst.mloc[`${getDecisionTaker(tst)}:${tst.alternation}`] || tst.locator\r\n      : tst.locator\r\n  ).join(\"\");\r\n  if (locator !== \"\") {\r\n    locator = locator.split(\":\")[0]; // strip off alternation marker\r\n    while (locator.length < align) locator += \"0\";\r\n  }\r\n  return locator;\r\n}\r\n\r\nfunction getDecisionTaker(tst) {\r\n  let decisionTaker = tst.locator[tst.alternation];\r\n  if (typeof decisionTaker === \"string\" && decisionTaker.length > 0) {\r\n    // no decision taken ~ take smallest as decider\r\n    decisionTaker = decisionTaker.split(\",\").sort((a, b) => a - b)[0];\r\n  }\r\n  return decisionTaker !== undefined ? decisionTaker.toString() : \"\";\r\n}\r\n\r\n// tobe put on prototype?\r\nfunction getPlaceholder(pos, test, returnPL) {\r\n  const inputmask = this,\r\n    opts = this.opts,\r\n    maskset = this.maskset;\r\n\r\n  test = test || getTest.call(inputmask, pos).match;\r\n\r\n  if (test.placeholder !== undefined || returnPL === true) {\r\n    if (\r\n      test.placeholder !== \"\" &&\r\n      test.static === true &&\r\n      test.generated !== true\r\n    ) {\r\n      // static and not dynamically generated ~ does not occur in regex mask ~ numeric alias def is not a valid entry\r\n      const lvp = getLastValidPosition.call(inputmask, pos),\r\n        nextPos = seekNext.call(inputmask, lvp);\r\n      return (returnPL ? pos <= nextPos : pos < nextPos)\r\n        ? opts.staticDefinitionSymbol && test.static\r\n          ? test.nativeDef\r\n          : test.def\r\n        : typeof test.placeholder === \"function\"\r\n          ? test.placeholder(opts)\r\n          : test.placeholder;\r\n    } else {\r\n      return typeof test.placeholder === \"function\"\r\n        ? test.placeholder(opts)\r\n        : test.placeholder;\r\n    }\r\n  } else if (test.static === true) {\r\n    if (pos > -1 && maskset.validPositions[pos] === undefined) {\r\n      let tests = getTests.call(inputmask, pos),\r\n        staticAlternations = [],\r\n        prevTest;\r\n      if (\r\n        typeof opts.placeholder === \"string\" &&\r\n        tests.length > 1 + (tests[tests.length - 1].match.def === \"\" ? 1 : 0)\r\n      ) {\r\n        for (let i = 0; i < tests.length; i++) {\r\n          if (\r\n            tests[i].match.def !== \"\" &&\r\n            tests[i].match.optionality !== true &&\r\n            tests[i].match.optionalQuantifier !== true &&\r\n            (tests[i].match.static === true ||\r\n              prevTest === undefined ||\r\n              tests[i].match.fn.test(\r\n                prevTest.match.def,\r\n                maskset,\r\n                pos,\r\n                true,\r\n                opts\r\n              ) !== false)\r\n          ) {\r\n            staticAlternations.push(tests[i]);\r\n            if (tests[i].match.static === true) prevTest = tests[i];\r\n            if (staticAlternations.length > 1) {\r\n              if (/[0-9a-bA-Z]/.test(staticAlternations[0].match.def)) {\r\n                return opts.placeholder.charAt(pos % opts.placeholder.length);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return test.def;\r\n  }\r\n\r\n  return typeof opts.placeholder === \"object\"\r\n    ? test.def\r\n    : opts.placeholder.charAt(pos % opts.placeholder.length);\r\n}\r\n\r\n// tobe put on prototype?\r\nfunction getMaskTemplate(\r\n  baseOnInput,\r\n  minimalPos,\r\n  includeMode,\r\n  noJit,\r\n  clearOptionalTail\r\n) {\r\n  // includeMode true => input, undefined => placeholder, false => mask\r\n\r\n  const inputmask = this,\r\n    opts = this.opts,\r\n    maskset = this.maskset,\r\n    greedy = opts.greedy;\r\n  if (clearOptionalTail && opts.greedy) {\r\n    opts.greedy = false;\r\n    inputmask.maskset.tests = {};\r\n  }\r\n  minimalPos = minimalPos || 0;\r\n  let maskTemplate = [],\r\n    ndxIntlzr,\r\n    pos = 0,\r\n    test,\r\n    testPos,\r\n    jitRenderStatic;\r\n  do {\r\n    if (baseOnInput === true && maskset.validPositions[pos]) {\r\n      testPos =\r\n        clearOptionalTail &&\r\n        maskset.validPositions[pos].match.optionality &&\r\n        maskset.validPositions[pos + 1] === undefined &&\r\n        (maskset.validPositions[pos].generatedInput === true ||\r\n          (maskset.validPositions[pos].input ==\r\n            opts.skipOptionalPartCharacter &&\r\n            pos > 0))\r\n          ? determineTestTemplate.call(\r\n              inputmask,\r\n              pos,\r\n              getTests.call(inputmask, pos, ndxIntlzr, pos - 1)\r\n            )\r\n          : maskset.validPositions[pos];\r\n      test = testPos.match;\r\n      ndxIntlzr = testPos.locator.slice();\r\n      maskTemplate.push(\r\n        includeMode === true\r\n          ? testPos.input\r\n          : includeMode === false\r\n            ? test.nativeDef\r\n            : getPlaceholder.call(inputmask, pos, test)\r\n      );\r\n    } else {\r\n      testPos = getTestTemplate.call(inputmask, pos, ndxIntlzr, pos - 1);\r\n      test = testPos.match;\r\n      ndxIntlzr = testPos.locator.slice();\r\n      const jitMasking =\r\n        noJit === true\r\n          ? false\r\n          : opts.jitMasking !== false\r\n            ? opts.jitMasking\r\n            : test.jit;\r\n      // check for groupSeparator is a hack for the numerics as we don't want the render of the groupSeparator beforehand\r\n      jitRenderStatic =\r\n        (jitRenderStatic ||\r\n          maskset.validPositions[\r\n            pos - 1\r\n          ]) /* && getTest.call(inputmask, pos + 1).match.def == \"\" */ &&\r\n        test.static &&\r\n        test.def !== opts.groupSeparator &&\r\n        test.fn === null;\r\n\r\n      if (\r\n        jitRenderStatic ||\r\n        jitMasking === false ||\r\n        jitMasking === undefined /* || pos < lvp */ ||\r\n        (typeof jitMasking === \"number\" &&\r\n          isFinite(jitMasking) &&\r\n          jitMasking > pos)\r\n      ) {\r\n        maskTemplate.push(\r\n          includeMode === false\r\n            ? test.nativeDef\r\n            : getPlaceholder.call(inputmask, maskTemplate.length, test)\r\n        );\r\n      } else {\r\n        jitRenderStatic = false;\r\n      }\r\n    }\r\n\r\n    pos++;\r\n  } while (test.static !== true || test.def !== \"\" || minimalPos > pos);\r\n  if (maskTemplate[maskTemplate.length - 1] === \"\") {\r\n    maskTemplate.pop(); // drop the last one which is empty\r\n  }\r\n  if (\r\n    includeMode !== false || // do not alter the masklength when just retrieving the maskdefinition\r\n    maskset.maskLength === undefined\r\n  ) {\r\n    // just make sure the maskLength gets initialized in all cases (needed for isValid)\r\n    maskset.maskLength = pos - 1;\r\n  }\r\n\r\n  opts.greedy = greedy;\r\n  return maskTemplate;\r\n}\r\n\r\n// tobe put on prototype?\r\nfunction getTestTemplate(pos, ndxIntlzr, tstPs) {\r\n  const inputmask = this,\r\n    maskset = this.maskset;\r\n\r\n  return (\r\n    maskset.validPositions[pos] ||\r\n    determineTestTemplate.call(\r\n      inputmask,\r\n      pos,\r\n      getTests.call(\r\n        inputmask,\r\n        pos,\r\n        ndxIntlzr ? ndxIntlzr.slice() : ndxIntlzr,\r\n        tstPs\r\n      )\r\n    )\r\n  );\r\n}\r\n\r\n// tobe put on prototype?\r\nfunction determineTestTemplate(pos, tests) {\r\n  const inputmask = this,\r\n    opts = inputmask.opts,\r\n    optionalityLevel = determineOptionalityLevel(pos, tests);\r\n\r\n  pos = pos > 0 ? pos - 1 : 0;\r\n  const longestLocator = Math.max(\r\n      ...tests.map((tst) =>\r\n        tst.locator === undefined ? 0 : tst.locator.length\r\n      )\r\n    ),\r\n    prevTest = getTest.call(inputmask, pos),\r\n    prevLocator = getLocator(prevTest, longestLocator);\r\n\r\n  let lenghtOffset = 0,\r\n    tstLocator,\r\n    closest,\r\n    bestMatch;\r\n\r\n  if (\r\n    opts.greedy &&\r\n    tests.length > 1 &&\r\n    tests[tests.length - 1].match.def === \"\"\r\n  )\r\n    lenghtOffset = 1;\r\n  // console.log(\" optionality = \" + optionalityLevel);\r\n  // console.log(\" - \" + JSON.stringify(tests));\r\n  for (let ndx = 0; ndx < tests.length - lenghtOffset; ndx++) {\r\n    // find best matching\r\n    const tst = tests[ndx];\r\n    tstLocator = getLocator(tst, longestLocator);\r\n    const distance = Number(tstLocator) - Number(prevLocator); // find the closest match to the previous one\r\n    // console.log(\"distance\", distance, tstLocator, prevLocator);\r\n\r\n    if (\r\n      tst.unMatchedAlternationStopped !== true ||\r\n      tests.filter((tst) => tst.unMatchedAlternationStopped !== true).length <=\r\n        1\r\n    ) {\r\n      // only skip when there are choices outside the alternation\r\n      if (\r\n        closest === undefined ||\r\n        (tstLocator !== \"\" && distance < closest) ||\r\n        (bestMatch &&\r\n          !opts.greedy &&\r\n          bestMatch.match.optionality &&\r\n          bestMatch.match.optionality - optionalityLevel > 0 &&\r\n          bestMatch.match.newBlockMarker === \"master\" &&\r\n          (!tst.match.optionality ||\r\n            tst.match.optionality - optionalityLevel < 1 ||\r\n            !tst.match.newBlockMarker)) ||\r\n        (bestMatch &&\r\n          !opts.greedy &&\r\n          bestMatch.match.optionalQuantifier &&\r\n          !tst.match.optionalQuantifier)\r\n      ) {\r\n        closest = distance;\r\n        bestMatch = tst;\r\n      }\r\n    }\r\n  }\r\n  return bestMatch;\r\n}\r\n\r\nfunction determineOptionalityLevel(pos, tests) {\r\n  let optionalityLevel = 0,\r\n    differentOptionalLevels = false;\r\n  tests.forEach((test) => {\r\n    if (test.match.optionality) {\r\n      if (optionalityLevel !== 0 && optionalityLevel !== test.match.optionality)\r\n        differentOptionalLevels = true;\r\n      if (optionalityLevel === 0 || optionalityLevel > test.match.optionality) {\r\n        optionalityLevel = test.match.optionality;\r\n      }\r\n    }\r\n  });\r\n  if (optionalityLevel) {\r\n    if (pos == 0) optionalityLevel = 0;\r\n    else if (tests.length == 1) optionalityLevel = 0;\r\n    else if (!differentOptionalLevels) optionalityLevel = 0;\r\n  }\r\n  return optionalityLevel;\r\n}\r\n\r\n// tobe put on prototype?\r\nfunction getTest(pos, tests) {\r\n  const inputmask = this,\r\n    maskset = this.maskset;\r\n\r\n  if (maskset.validPositions[pos]) {\r\n    return maskset.validPositions[pos];\r\n  }\r\n  return (tests || getTests.call(inputmask, pos))[0];\r\n}\r\n\r\nfunction isSubsetOf(source, target, opts) {\r\n  function expand(pattern) {\r\n    let expanded = [],\r\n      start = -1,\r\n      end;\r\n    for (let i = 0, l = pattern.length; i < l; i++) {\r\n      if (pattern.charAt(i) === \"-\") {\r\n        end = pattern.charCodeAt(i + 1);\r\n        while (++start < end) expanded.push(String.fromCharCode(start));\r\n      } else {\r\n        start = pattern.charCodeAt(i);\r\n        expanded.push(pattern.charAt(i));\r\n      }\r\n    }\r\n    return expanded.join(\"\");\r\n  }\r\n\r\n  if (source.match.def === target.match.nativeDef) return true;\r\n\r\n  if (\r\n    (opts.regex ||\r\n      (source.match.fn instanceof RegExp &&\r\n        target.match.fn instanceof RegExp)) &&\r\n    source.match.static !== true &&\r\n    target.match.static !== true\r\n  ) {\r\n    // is regex a subset\r\n    if (target.match.fn.source === \".\") return true;\r\n    return (\r\n      expand(target.match.fn.source.replace(/[[\\]/]/g, \"\")).indexOf(\r\n        expand(source.match.fn.source.replace(/[[\\]/]/g, \"\"))\r\n      ) !== -1\r\n    );\r\n  }\r\n  return false;\r\n}\r\n\r\n// tobe put on prototype?\r\nfunction getTests(pos, ndxIntlzr, tstPs) {\r\n  let inputmask = this,\r\n    $ = this.dependencyLib,\r\n    maskset = this.maskset,\r\n    opts = this.opts,\r\n    el = this.el,\r\n    maskTokens = maskset.maskToken,\r\n    testPos = ndxIntlzr ? tstPs : 0,\r\n    ndxInitializer = ndxIntlzr ? ndxIntlzr.slice() : [0],\r\n    matches = [],\r\n    insertStop = false,\r\n    latestMatch,\r\n    cacheDependency = ndxIntlzr ? ndxIntlzr.join(\"\") : \"\",\r\n    unMatchedAlternation = false;\r\n\r\n  function resolveTestFromToken(\r\n    maskToken,\r\n    ndxInitializer,\r\n    loopNdx,\r\n    quantifierRecurse\r\n  ) {\r\n    // ndxInitializer contains a set of indexes to speedup searches in the mtokens\r\n    function handleMatch(match, loopNdx, quantifierRecurse) {\r\n      function isFirstMatch(latestMatch, tokenGroup) {\r\n        let firstMatch = tokenGroup.matches.indexOf(latestMatch) === 0;\r\n        if (!firstMatch) {\r\n          tokenGroup.matches.every(function (match, ndx) {\r\n            if (match.isQuantifier === true) {\r\n              firstMatch = isFirstMatch(\r\n                latestMatch,\r\n                tokenGroup.matches[ndx - 1]\r\n              );\r\n            } else if (Object.prototype.hasOwnProperty.call(match, \"matches\"))\r\n              firstMatch = isFirstMatch(latestMatch, match);\r\n            if (firstMatch) return false;\r\n\r\n            return true;\r\n          });\r\n        }\r\n        return firstMatch;\r\n      }\r\n\r\n      function resolveNdxInitializer(pos, alternateNdx, targetAlternation) {\r\n        let bestMatch,\r\n          distance,\r\n          locator,\r\n          newAlternateMloc,\r\n          alternateMloc = `${alternateNdx}:${targetAlternation}`;\r\n\r\n        if (maskset.tests[pos] || maskset.validPositions[pos]) {\r\n          (maskset.validPositions[pos]\r\n            ? [maskset.validPositions[pos]]\r\n            : maskset.tests[pos]\r\n          ).every(function (lmnt, ndx) {\r\n            if (lmnt.mloc[alternateMloc]) {\r\n              bestMatch = lmnt;\r\n              return false; // break\r\n            }\r\n\r\n            // check if an entry in mloc match the alternateNdx on targetAlternation\r\n            const mlocMatches = Object.values(lmnt.mloc).filter(\r\n              // eslint-disable-next-line eqeqeq\r\n              (m) => m[targetAlternation] == alternateNdx\r\n            );\r\n            // for each mlocMatch check the calculated distance\r\n            mlocMatches.every((mlocMatch) => {\r\n              let mlocMatchL = mlocMatch.join(\"\").split(\":\")[0]; // strip off alternation marker\r\n              locator = locator || mlocMatchL;\r\n              while (mlocMatchL.length < locator.length) mlocMatchL += \"0\";\r\n\r\n              const mlocDistance = Number(mlocMatchL);\r\n              // console.log(\"mlocDistance\", mlocDistance);\r\n              if (bestMatch === undefined || mlocDistance < distance) {\r\n                distance = mlocDistance;\r\n                bestMatch = lmnt;\r\n\r\n                // key from mlocMatch\r\n                newAlternateMloc = Object.entries(lmnt.mloc).find(\r\n                  (entry) => entry[1].toString() === mlocMatch.toString()\r\n                )[0];\r\n              }\r\n\r\n              return true; // continue\r\n            });\r\n\r\n            return true;\r\n          });\r\n        }\r\n        if (bestMatch) {\r\n          if (targetAlternation === undefined) {\r\n            alternateMloc = `${alternateNdx}:${bestMatch.alternation}`;\r\n          }\r\n          const bestMatchAltIndex = `${\r\n              bestMatch.locator[bestMatch.alternation]\r\n            }:${bestMatch.alternation}`,\r\n            slocator =\r\n              bestMatch.mloc[newAlternateMloc || alternateMloc] ||\r\n              bestMatch.mloc[bestMatchAltIndex] ||\r\n              bestMatch.locator;\r\n          if (slocator[slocator.length - 1].toString().indexOf(\":\") !== -1) {\r\n            // eslint-disable-next-line no-unused-vars\r\n            const alternation = slocator.pop();\r\n            // targetAlternation = parseInt(alternation.substring(1));\r\n          }\r\n\r\n          const sliceStart =\r\n            parseInt(\r\n              // newAlternateMloc\r\n              //   ? newAlternateMloc.split(\":\")[1]\r\n              //   : targetAlternation ||\r\n              bestMatch.alternation\r\n            ) + 1;\r\n\r\n          // console.log(\r\n          //   \"resolveNdxInitializer\",\r\n          //   pos,\r\n          //   alternateNdx,\r\n          //   targetAlternation,\r\n          //   slocator,\r\n          //   sliceStart,\r\n          //   bestMatch\r\n          // );\r\n\r\n          return slocator.slice(sliceStart);\r\n        } else {\r\n          return targetAlternation !== undefined\r\n            ? resolveNdxInitializer(pos, alternateNdx)\r\n            : undefined;\r\n        }\r\n      }\r\n\r\n      function staticCanMatchDefinition(source, target) {\r\n        return source.match.static === true && target.match.static !== true\r\n          ? target.match.fn.test(\r\n              source.match.def,\r\n              maskset,\r\n              pos,\r\n              false,\r\n              opts,\r\n              false\r\n            )\r\n          : false;\r\n      }\r\n\r\n      // mergelocators for retrieving the correct locator match when merging\r\n      function setMergeLocators(targetMatch, altMatch) {\r\n        function mergeLoc(altNdx) {\r\n          targetMatch.mloc = targetMatch.mloc || {};\r\n          let locNdx = targetMatch.locator[altNdx];\r\n          if (locNdx === undefined) {\r\n            targetMatch.alternation = undefined;\r\n          } else {\r\n            if (altMatch === undefined) {\r\n              if (typeof locNdx === \"string\") locNdx = locNdx.split(\",\")[0];\r\n              locNdx = `${locNdx}:${altNdx}`;\r\n              if (targetMatch.mloc[locNdx] === undefined) {\r\n                targetMatch.mloc[locNdx] = targetMatch.locator.slice();\r\n                targetMatch.mloc[locNdx].push(`:${altNdx}`); // add alternation index\r\n              }\r\n            } else {\r\n              let offset = 0;\r\n              for (const ndx in altMatch.mloc) {\r\n                // if (typeof ndx === \"string\") ndx = parseInt(ndx.split(\",\")[0]);\r\n                if (targetMatch.mloc[ndx] === undefined) {\r\n                  targetMatch.mloc[ndx] = altMatch.mloc[ndx];\r\n                } else {\r\n                  do {\r\n                    if (targetMatch.mloc[ndx + offset] === undefined) {\r\n                      targetMatch.mloc[ndx + offset] = altMatch.mloc[ndx];\r\n                      break;\r\n                    }\r\n                  } while (targetMatch.mloc[ndx + offset++] !== undefined);\r\n                }\r\n              }\r\n\r\n              targetMatch.locator = mergeLocators(testPos, [\r\n                targetMatch,\r\n                altMatch\r\n              ]);\r\n            }\r\n            if (targetMatch.alternation > altNdx) {\r\n              // if the alternation index is higher than the current one resolve it to the alternation\r\n              targetMatch.alternation = altNdx;\r\n            }\r\n            return true;\r\n          }\r\n          return false;\r\n        }\r\n\r\n        let alternationNdx = targetMatch.alternation,\r\n          shouldMerge =\r\n            altMatch === undefined ||\r\n            (alternationNdx <= altMatch.alternation &&\r\n              targetMatch.locator[alternationNdx]\r\n                .toString()\r\n                .indexOf(altMatch.locator[alternationNdx]) === -1);\r\n        if (!shouldMerge && alternationNdx > altMatch.alternation) {\r\n          for (let i = 0; i < alternationNdx; i++) {\r\n            if (targetMatch.locator[i] !== altMatch.locator[i]) {\r\n              alternationNdx = i;\r\n              shouldMerge = true;\r\n              break;\r\n            }\r\n          }\r\n        }\r\n\r\n        if (shouldMerge) {\r\n          return mergeLoc(alternationNdx);\r\n        }\r\n        return false;\r\n      }\r\n\r\n      function handleGroup() {\r\n        match = handleMatch(\r\n          maskToken.matches[maskToken.matches.indexOf(match) + 1],\r\n          loopNdx,\r\n          quantifierRecurse\r\n        );\r\n        if (match) return true;\r\n      }\r\n\r\n      function handleOptional() {\r\n        const optionalToken = match,\r\n          mtchsNdx = matches.length;\r\n        match = resolveTestFromToken(\r\n          match,\r\n          ndxInitializer,\r\n          loopNdx,\r\n          quantifierRecurse\r\n        );\r\n        if (matches.length > 0) {\r\n          // check on matches.length instead of match to handle quantifier in a recursive call\r\n          // mark optionality in matches\r\n          matches.forEach(function (mtch, ndx) {\r\n            if (ndx >= mtchsNdx) {\r\n              mtch.match.optionality = mtch.match.optionality\r\n                ? mtch.match.optionality + 1\r\n                : 1;\r\n            }\r\n          });\r\n          latestMatch = matches[matches.length - 1].match;\r\n\r\n          if (\r\n            quantifierRecurse === undefined &&\r\n            isFirstMatch(latestMatch, optionalToken)\r\n          ) {\r\n            // prevent loop see #698\r\n            insertStop = true; // insert a stop\r\n            testPos = pos; // match the position after the group\r\n          } else {\r\n            return match; // make the loop continue when it is deliberately by a quantifier\r\n          }\r\n        }\r\n      }\r\n\r\n      function handleAlternator() {\r\n        function calculateMatchesLength(matches) {\r\n          let matchesLength = 0;\r\n          for (let ndx = 0; ndx < matches.length; ndx++) {\r\n            const match = matches[ndx];\r\n            if (match.isQuantifier && !isNaN(match.quantifier.max)) {\r\n              matchesLength += match.quantifier.max;\r\n            } else {\r\n              matchesLength++;\r\n            }\r\n          }\r\n          return matchesLength;\r\n        }\r\n        function isUnmatchedAlternation(alternateToken) {\r\n          const matchesLength = alternateToken.matches[0].matches\r\n            ? calculateMatchesLength(alternateToken.matches[0].matches)\r\n            : 1;\r\n          let matchesNewLength;\r\n          for (let alndx = 0; alndx < alternateToken.matches.length; alndx++) {\r\n            matchesNewLength = alternateToken.matches[alndx].matches\r\n              ? calculateMatchesLength(alternateToken.matches[alndx].matches)\r\n              : 1;\r\n            if (matchesLength !== matchesNewLength) {\r\n              break;\r\n            }\r\n          }\r\n\r\n          return matchesLength !== matchesNewLength;\r\n        }\r\n\r\n        inputmask.hasAlternator = true;\r\n        const alternateToken = match,\r\n          malternateMatches = [],\r\n          currentMatches = matches.slice(),\r\n          loopNdxCnt = loopNdx.length,\r\n          altIndex = ndxInitializer.length > 0 ? ndxInitializer.shift() : -1;\r\n        let maltMatches;\r\n        if (altIndex === -1 || typeof altIndex === \"string\") {\r\n          const currentPos = testPos,\r\n            ndxInitializerClone = ndxInitializer.slice();\r\n          let altIndexArr = [],\r\n            amndx;\r\n          if (typeof altIndex === \"string\") {\r\n            altIndexArr = altIndex.split(\",\");\r\n          } else {\r\n            for (amndx = 0; amndx < alternateToken.matches.length; amndx++) {\r\n              altIndexArr.push(amndx.toString());\r\n            }\r\n          }\r\n\r\n          if (maskset.excludes[pos] !== undefined) {\r\n            const altIndexArrClone = altIndexArr.slice();\r\n            for (let i = 0, exl = maskset.excludes[pos].length; i < exl; i++) {\r\n              const excludeSet = maskset.excludes[pos][i].toString().split(\":\");\r\n              if (loopNdx.length == excludeSet[1]) {\r\n                altIndexArr.splice(altIndexArr.indexOf(excludeSet[0]), 1);\r\n              }\r\n            }\r\n            if (altIndexArr.length === 0) {\r\n              // fully alternated => reset\r\n              delete maskset.excludes[pos];\r\n              altIndexArr = altIndexArrClone;\r\n            }\r\n          }\r\n          if (\r\n            opts.keepStatic === true ||\r\n            (isFinite(parseInt(opts.keepStatic)) &&\r\n              currentPos >= opts.keepStatic)\r\n          )\r\n            altIndexArr = altIndexArr.slice(0, 1);\r\n          for (let ndx = 0; ndx < altIndexArr.length; ndx++) {\r\n            amndx = parseInt(altIndexArr[ndx]);\r\n            matches = [];\r\n            // set the correct ndxInitializer\r\n            ndxInitializer =\r\n              typeof altIndex === \"string\"\r\n                ? resolveNdxInitializer(testPos, amndx, loopNdxCnt) ||\r\n                  ndxInitializerClone.slice()\r\n                : ndxInitializerClone.slice();\r\n            // console.log(\"ndxInit\", ndxInitializer);\r\n            const tokenMatch = alternateToken.matches[amndx];\r\n            if (\r\n              tokenMatch &&\r\n              handleMatch(\r\n                tokenMatch,\r\n                [amndx].concat(loopNdx),\r\n                quantifierRecurse\r\n              )\r\n            ) {\r\n              match = true;\r\n            } else {\r\n              // if (currentPos !== 0) {\r\n              // only check with the first alternate\r\n              unMatchedAlternation = isUnmatchedAlternation(alternateToken);\r\n              // }\r\n              if (\r\n                tokenMatch &&\r\n                tokenMatch.matches &&\r\n                tokenMatch.matches.length >\r\n                  alternateToken.matches[0].matches.length\r\n              ) {\r\n                break;\r\n              }\r\n            }\r\n\r\n            maltMatches = matches.slice();\r\n            testPos = currentPos;\r\n            matches = [];\r\n\r\n            // fuzzy merge matches\r\n            for (let ndx1 = 0; ndx1 < maltMatches.length; ndx1++) {\r\n              let altMatch = maltMatches[ndx1],\r\n                dropMatch = false;\r\n              altMatch.alternation = altMatch.alternation || loopNdxCnt;\r\n              setMergeLocators(altMatch);\r\n              for (let ndx2 = 0; ndx2 < malternateMatches.length; ndx2++) {\r\n                const altMatch2 = malternateMatches[ndx2];\r\n                if (\r\n                  typeof altIndex !== \"string\" ||\r\n                  (altMatch.alternation !== undefined &&\r\n                    altIndex.indexOf(\r\n                      altMatch.locator[altMatch.alternation].toString()\r\n                    ) !== -1)\r\n                ) {\r\n                  if (altMatch.match.nativeDef === altMatch2.match.nativeDef) {\r\n                    dropMatch = true;\r\n                    setMergeLocators(altMatch2, altMatch);\r\n                    break;\r\n                  } else if (isSubsetOf(altMatch, altMatch2, opts)) {\r\n                    if (setMergeLocators(altMatch, altMatch2)) {\r\n                      dropMatch = true;\r\n                      malternateMatches.splice(\r\n                        malternateMatches.indexOf(altMatch2),\r\n                        0,\r\n                        altMatch\r\n                      );\r\n                    }\r\n                    break;\r\n                  } else if (isSubsetOf(altMatch2, altMatch, opts)) {\r\n                    setMergeLocators(altMatch2, altMatch);\r\n                    break;\r\n                  } else if (staticCanMatchDefinition(altMatch, altMatch2)) {\r\n                    if (setMergeLocators(altMatch, altMatch2)) {\r\n                      // insert match above general match\r\n                      dropMatch = true;\r\n                      malternateMatches.splice(\r\n                        malternateMatches.indexOf(altMatch2),\r\n                        0,\r\n                        altMatch\r\n                      );\r\n                    }\r\n                    break;\r\n                  } else if (staticCanMatchDefinition(altMatch2, altMatch)) {\r\n                    setMergeLocators(altMatch2, altMatch);\r\n                    // hackery to solve a mask like ([0]9)|(2a) ~ note the static 0 is optional ~ see unittest ivaninDarpatov\r\n                    // this needs a better solution, but his will do for now\r\n                    if (\r\n                      altMatch2.match.optionality &&\r\n                      el.inputmask.userOptions.keepStatic === undefined\r\n                    ) {\r\n                      opts.keepStatic = currentPos;\r\n                    }\r\n                    break;\r\n                  }\r\n                }\r\n              }\r\n              if (!dropMatch) {\r\n                malternateMatches.push(altMatch);\r\n              }\r\n            }\r\n          }\r\n\r\n          matches = currentMatches.concat(malternateMatches);\r\n\r\n          testPos = pos;\r\n          insertStop = matches.length > 0 && unMatchedAlternation; // insert a stopelemnt when there is an alternate - needed for non-greedy option\r\n          match = malternateMatches.length > 0 && !unMatchedAlternation; // set correct match state\r\n\r\n          if (unMatchedAlternation && insertStop && !match) {\r\n            // mark matches with unMatchedAlternationStopped\r\n            matches.forEach(function (mtch, ndx) {\r\n              mtch.unMatchedAlternationStopped = true;\r\n            });\r\n          }\r\n\r\n          // cloneback\r\n          ndxInitializer = ndxInitializerClone.slice();\r\n        } else {\r\n          match = handleMatch(\r\n            alternateToken.matches[altIndex] || maskToken.matches[altIndex],\r\n            [altIndex].concat(loopNdx),\r\n            quantifierRecurse\r\n          );\r\n        }\r\n        if (match) {\r\n          return true;\r\n        }\r\n      }\r\n\r\n      function handleQuantifier() {\r\n        const qt = match;\r\n        let breakloop = false;\r\n        for (\r\n          let qndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0;\r\n          qndx < (isNaN(qt.quantifier.max) ? qndx + 1 : qt.quantifier.max) &&\r\n          testPos <= pos;\r\n          qndx++\r\n        ) {\r\n          const tokenGroup =\r\n            maskToken.matches[maskToken.matches.indexOf(qt) - 1];\r\n          match = handleMatch(tokenGroup, [qndx].concat(loopNdx), tokenGroup); // set the tokenGroup as quantifierRecurse marker\r\n          if (match) {\r\n            matches.forEach(function (mtch, ndx) {\r\n              if (IsMatchOf(tokenGroup, mtch.match)) latestMatch = mtch.match;\r\n              else latestMatch = matches[matches.length - 1].match;\r\n\r\n              // mark optionality\r\n              // TODO FIX RECURSIVE QUANTIFIERS\r\n              latestMatch.optionalQuantifier = qndx >= qt.quantifier.min;\r\n              // console.log(pos + \" \" + qt.quantifier.min + \" \" + latestMatch.optionalQuantifier);\r\n              // qndx + 1 as the index starts from 0\r\n              latestMatch.jit =\r\n                (qndx + 1) * (tokenGroup.matches.indexOf(latestMatch) + 1) >\r\n                qt.quantifier.jit;\r\n              if (\r\n                latestMatch.optionalQuantifier &&\r\n                isFirstMatch(latestMatch, tokenGroup)\r\n              ) {\r\n                insertStop = true;\r\n                testPos = pos; // match the position after the group\r\n                if (\r\n                  opts.greedy &&\r\n                  maskset.validPositions[pos - 1] == undefined &&\r\n                  qndx > qt.quantifier.min &&\r\n                  [\"*\", \"+\"].indexOf(qt.quantifier.max) != -1\r\n                ) {\r\n                  matches.pop();\r\n                  cacheDependency = undefined;\r\n                }\r\n                breakloop = true; // stop quantifierloop && search for next possible match\r\n                match = false; // mark match to false to make sure the loop in optionals continues\r\n              }\r\n              if (\r\n                !breakloop &&\r\n                latestMatch.jit /* && !latestMatch.optionalQuantifier */\r\n              ) {\r\n                // always set jitOffset, isvalid checks when to apply\r\n                maskset.jitOffset[pos] =\r\n                  tokenGroup.matches.length -\r\n                  tokenGroup.matches.indexOf(latestMatch);\r\n              }\r\n            });\r\n            if (breakloop) break; // search for next possible match\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n\r\n      if (testPos > pos + opts._maxTestPos) {\r\n        throw new Error(\r\n          `Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. ${maskset.mask}`\r\n        );\r\n      }\r\n      if (testPos === pos && match.matches === undefined) {\r\n        matches.push({\r\n          match,\r\n          locator: loopNdx.reverse(),\r\n          cd: cacheDependency,\r\n          mloc: {}\r\n        });\r\n        if (\r\n          match.optionality &&\r\n          quantifierRecurse === undefined &&\r\n          ((opts.definitions &&\r\n            opts.definitions[match.nativeDef] &&\r\n            opts.definitions[match.nativeDef].optional) ||\r\n            (Inputmask.prototype.definitions[match.nativeDef] &&\r\n              Inputmask.prototype.definitions[match.nativeDef].optional))\r\n        ) {\r\n          // prevent loop see #698\r\n          insertStop = true; // insert a stop\r\n          testPos = pos; // match the position after the group\r\n        } else {\r\n          return true;\r\n        }\r\n      } else if (match.matches !== undefined) {\r\n        if (match.isGroup && quantifierRecurse !== match) {\r\n          // when a group pass along to the quantifier\r\n          return handleGroup();\r\n        } else if (match.isOptional) {\r\n          return handleOptional();\r\n        } else if (match.isAlternator) {\r\n          return handleAlternator();\r\n        } else if (\r\n          match.isQuantifier &&\r\n          quantifierRecurse !==\r\n            maskToken.matches[maskToken.matches.indexOf(match) - 1]\r\n        ) {\r\n          return handleQuantifier();\r\n        } else {\r\n          match = resolveTestFromToken(\r\n            match,\r\n            ndxInitializer,\r\n            loopNdx,\r\n            quantifierRecurse\r\n          );\r\n          if (match) return true;\r\n        }\r\n      } else {\r\n        testPos++;\r\n      }\r\n    }\r\n\r\n    // the offset is set in the quantifierloop when git masking is used\r\n    for (\r\n      let tndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0;\r\n      tndx < maskToken.matches.length;\r\n      tndx++\r\n    ) {\r\n      if (maskToken.matches[tndx].isQuantifier !== true) {\r\n        const match = handleMatch(\r\n          maskToken.matches[tndx],\r\n          [tndx].concat(loopNdx),\r\n          quantifierRecurse\r\n        );\r\n        if (match && testPos === pos) {\r\n          return match;\r\n        } else if (testPos > pos) {\r\n          break;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  function IsMatchOf(tokenGroup, match) {\r\n    let isMatch = tokenGroup.matches.indexOf(match) != -1;\r\n    if (!isMatch) {\r\n      tokenGroup.matches.forEach((mtch, ndx) => {\r\n        if (mtch.matches !== undefined && !isMatch) {\r\n          isMatch = IsMatchOf(mtch, match);\r\n        }\r\n      });\r\n    }\r\n    return isMatch;\r\n  }\r\n\r\n  function mergeLocators(pos, tests) {\r\n    let locator = [];\r\n    if (!Array.isArray(tests)) tests = [tests];\r\n\r\n    if (tests.length > 0) {\r\n      if (\r\n        tests[0].alternation === undefined ||\r\n        opts.keepStatic === true ||\r\n        (isFinite(parseInt(opts.keepStatic)) && pos >= opts.keepStatic)\r\n      ) {\r\n        locator = determineTestTemplate\r\n          .call(inputmask, pos, tests.slice())\r\n          .locator.slice();\r\n        if (locator.length === 0) locator = tests[0].locator.slice();\r\n      } else {\r\n        // alternation = tests[0].locator.length - 1;\r\n        tests.forEach((mtch) => {\r\n          Object.values(mtch.mloc).forEach((mloc) => {\r\n            mloc.forEach((loc, locNdx) => {\r\n              // if (locNdx > alternation) return;\r\n              const mergedPos = locator[locNdx];\r\n              if (\r\n                loc.toString().includes(\":\") ||\r\n                (mergedPos && mergedPos.toString().includes(\":\"))\r\n              )\r\n                return;\r\n              if (mergedPos === undefined) {\r\n                locator[locNdx] = loc;\r\n              } else if (!mergedPos.toString().includes(loc)) {\r\n                locator[locNdx] = locator[locNdx] + \",\" + loc;\r\n              }\r\n            });\r\n          });\r\n        });\r\n      }\r\n    }\r\n    // console.log(\"mergeLocators\", pos, tests, locator);\r\n    return locator;\r\n  }\r\n\r\n  if (pos > -1) {\r\n    if (ndxIntlzr === undefined) {\r\n      // determine index initializer\r\n      let previousPos = pos - 1,\r\n        test;\r\n      while (\r\n        (test =\r\n          maskset.validPositions[previousPos] || maskset.tests[previousPos]) ===\r\n          undefined &&\r\n        previousPos > -1\r\n      ) {\r\n        previousPos--;\r\n      }\r\n      if (test !== undefined && previousPos > -1) {\r\n        ndxInitializer = mergeLocators(previousPos, test);\r\n        cacheDependency = ndxInitializer.join(\"\");\r\n        testPos = previousPos;\r\n      }\r\n    }\r\n    if (maskset.tests[pos] && maskset.tests[pos][0].cd === cacheDependency) {\r\n      // cacheDependency is set on all tests, just check on the first\r\n      return maskset.tests[pos];\r\n    }\r\n    for (\r\n      let mtndx = ndxInitializer.shift();\r\n      mtndx < maskTokens.length;\r\n      mtndx++\r\n    ) {\r\n      const match = resolveTestFromToken(maskTokens[mtndx], ndxInitializer, [\r\n        mtndx\r\n      ]);\r\n      if ((match && testPos === pos) || testPos > pos) {\r\n        break;\r\n      }\r\n    }\r\n  }\r\n  if (matches.length === 0 || insertStop) {\r\n    matches.push({\r\n      match: {\r\n        fn: null,\r\n        static: true,\r\n        optionality: false,\r\n        casing: null,\r\n        def: \"\",\r\n        placeholder: \"\"\r\n      },\r\n      // mark when there are unmatched alternations  ex: mask: \"(a|aa)\"\r\n      // this will result in the least distance to select the correct test result in determineTestTemplate\r\n      locator:\r\n        unMatchedAlternation &&\r\n        matches.filter((tst) => tst.unMatchedAlternationStopped !== true)\r\n          .length === 0\r\n          ? [0]\r\n          : [],\r\n      mloc: {},\r\n      cd: cacheDependency\r\n    });\r\n  }\r\n  let result;\r\n  if (ndxIntlzr !== undefined && maskset.tests[pos]) {\r\n    // prioritize full tests for caching\r\n    result = $.extend(true, [], matches);\r\n  } else {\r\n    // console.log(\"stored \" + pos + \" - \" + JSON.stringify(matches));\r\n    maskset.tests[pos] = $.extend(true, [], matches); // set a clone to prevent overwriting some props\r\n    result = maskset.tests[pos];\r\n  }\r\n\r\n  // console.log(pos, JSON.stringify(matches));\r\n  // cleanup optionality marking\r\n  matches.forEach((t) => {\r\n    t.match.optionality = t.match.defOptionality || false;\r\n  });\r\n\r\n  return result;\r\n}\r\n","import { EventHandlers } from \"./eventhandlers\";\r\nimport { keyCode, keys } from \"./keycode.js\";\r\nimport {\r\n  determineLastRequiredPosition,\r\n  determineNewCaretPosition,\r\n  getBuffer,\r\n  getLastValidPosition,\r\n  isMask,\r\n  resetMaskSet,\r\n  seekNext,\r\n  seekPrevious\r\n} from \"./positioning\";\r\nimport {\r\n  determineTestTemplate,\r\n  getDecisionTaker,\r\n  getPlaceholder,\r\n  getTest,\r\n  getTests,\r\n  getTestTemplate\r\n} from \"./validation-tests\";\r\n\r\nexport {\r\n  alternate,\r\n  checkAlternationMatch,\r\n  isComplete,\r\n  isSelection,\r\n  isValid,\r\n  refreshFromBuffer,\r\n  revalidateMask,\r\n  handleRemove\r\n};\r\n\r\n// tobe put on prototype?\r\nfunction alternate(maskPos, c, strict, fromIsValid, rAltPos, selection) {\r\n  // pos == true => generalize\r\n  const inputmask = this,\r\n    $ = this.dependencyLib,\r\n    opts = this.opts,\r\n    maskset = inputmask.maskset;\r\n\r\n  if (!inputmask.hasAlternator) return false;\r\n\r\n  const validPsClone = $.extend(true, [], maskset.validPositions),\r\n    tstClone = $.extend(true, {}, maskset.tests);\r\n  let lastAlt,\r\n    alternation,\r\n    isValidRslt = false,\r\n    returnRslt = false,\r\n    altPos,\r\n    prevAltPos,\r\n    i,\r\n    validPos,\r\n    decisionPos,\r\n    lAltPos =\r\n      rAltPos !== undefined ? rAltPos : getLastValidPosition.call(inputmask),\r\n    nextPos,\r\n    input,\r\n    begin,\r\n    end;\r\n\r\n  if (selection) {\r\n    begin = selection.begin;\r\n    end = selection.end;\r\n    if (selection.begin > selection.end) {\r\n      begin = selection.end;\r\n      end = selection.begin;\r\n    }\r\n  }\r\n\r\n  if (lAltPos === -1 && rAltPos === undefined) {\r\n    // do not recurse when already passed the beginning\r\n    lastAlt = 0;\r\n    prevAltPos = getTest.call(inputmask, lastAlt);\r\n    alternation = prevAltPos.alternation;\r\n  } else {\r\n    // find last modified alternation\r\n    for (; lAltPos >= 0; lAltPos--) {\r\n      altPos =\r\n        lAltPos === 0\r\n          ? getTest.call(inputmask, 0)\r\n          : maskset.validPositions[lAltPos];\r\n      if (altPos && altPos.alternation !== undefined) {\r\n        if (\r\n          lAltPos <= (maskPos || 0) &&\r\n          prevAltPos &&\r\n          prevAltPos.locator[altPos.alternation] !==\r\n            altPos.locator[altPos.alternation]\r\n        ) {\r\n          break;\r\n        }\r\n        lastAlt = lAltPos;\r\n        alternation = altPos.alternation;\r\n        prevAltPos = altPos;\r\n      }\r\n    }\r\n  }\r\n\r\n  if (alternation !== undefined) {\r\n    decisionPos = parseInt(lastAlt);\r\n    maskset.excludes[decisionPos] = maskset.excludes[decisionPos] || [];\r\n    // generalize\r\n    if (maskPos !== true) {\r\n      maskset.excludes[decisionPos].push(\r\n        getDecisionTaker(prevAltPos) + \":\" + prevAltPos.alternation\r\n      );\r\n    }\r\n\r\n    const validInputs = [];\r\n    let resultPos = -1;\r\n    for (\r\n      i = decisionPos;\r\n      decisionPos < getLastValidPosition.call(inputmask, undefined, true) + 1;\r\n      i++\r\n    ) {\r\n      if (resultPos === -1 && maskPos <= i && c !== undefined) {\r\n        validInputs.push(c);\r\n        resultPos = validInputs.length - 1;\r\n      }\r\n      validPos = maskset.validPositions[decisionPos];\r\n      if (\r\n        validPos &&\r\n        validPos.generatedInput !== true &&\r\n        (decisionPos !== 0 ||\r\n          validPos.input !== opts.skipOptionalPartCharacter) &&\r\n        (selection === undefined || i < begin || i >= end)\r\n      ) {\r\n        validInputs.push(validPos.input);\r\n      }\r\n      // delete maskset.validPositions[i++];\r\n      maskset.validPositions.splice(decisionPos, 1);\r\n    }\r\n    if (resultPos === -1 && c !== undefined) {\r\n      validInputs.push(c);\r\n      resultPos = validInputs.length - 1;\r\n    }\r\n\r\n    while (\r\n      maskset.excludes[decisionPos] !== undefined &&\r\n      maskset.excludes[decisionPos].length < 10\r\n    ) {\r\n      // maskset.tests[decisionPos] = undefined; //clear decisionPos\r\n      maskset.tests = {}; // clear all\r\n      resetMaskSet.call(inputmask, true); // clear getbuffer\r\n      isValidRslt = true;\r\n      for (i = 0; i < validInputs.length; i++) {\r\n        nextPos =\r\n          isValidRslt.caret ||\r\n          (opts.insertMode == false && nextPos != undefined)\r\n            ? seekNext.call(inputmask, nextPos)\r\n            : getLastValidPosition.call(inputmask, undefined, true) + 1;\r\n        input = validInputs[i];\r\n        // nextPos = translatePosition.call(inputmask, nextPos);\r\n        if (\r\n          !(isValidRslt = isValid.call(\r\n            inputmask,\r\n            nextPos,\r\n            input,\r\n            false,\r\n            fromIsValid,\r\n            true\r\n          ))\r\n        ) {\r\n          if (isComplete.call(inputmask, getBuffer.call(inputmask))) {\r\n            isValidRslt = returnRslt; // keep previous result if any\r\n          }\r\n          break;\r\n        }\r\n        if (i === resultPos) {\r\n          returnRslt = isValidRslt;\r\n        }\r\n        if (maskPos == true && isValidRslt) {\r\n          // return validposition on generalise\r\n          returnRslt = { caretPos: i };\r\n        }\r\n      }\r\n      if (!isValidRslt) {\r\n        resetMaskSet.call(inputmask);\r\n        prevAltPos = getTest.call(inputmask, decisionPos); // get the current decisionPos to exclude ~ needs to be before restoring the initial validation\r\n        // reset & revert\r\n        maskset.validPositions = $.extend(true, [], validPsClone);\r\n        maskset.tests = $.extend(true, {}, tstClone); // refresh tests after possible alternating\r\n        returnRslt = false;\r\n        if (maskset.excludes[decisionPos]) {\r\n          if (prevAltPos.alternation != undefined) {\r\n            const decisionTaker = getDecisionTaker(prevAltPos);\r\n            if (\r\n              maskset.excludes[decisionPos].indexOf(\r\n                decisionTaker + \":\" + prevAltPos.alternation\r\n              ) !== -1\r\n            ) {\r\n              returnRslt = alternate.call(\r\n                inputmask,\r\n                maskPos,\r\n                c,\r\n                strict,\r\n                fromIsValid,\r\n                decisionPos - 1,\r\n                selection\r\n              );\r\n              break;\r\n            }\r\n            maskset.excludes[decisionPos].push(\r\n              decisionTaker + \":\" + prevAltPos.alternation\r\n            );\r\n            for (\r\n              i = decisionPos;\r\n              i < getLastValidPosition.call(inputmask, undefined, true) + 1;\r\n              i++\r\n            )\r\n              maskset.validPositions.splice(decisionPos);\r\n          } else delete maskset.excludes[decisionPos];\r\n        } else {\r\n          // latest alternation\r\n          returnRslt = alternate.call(\r\n            inputmask,\r\n            maskPos,\r\n            c,\r\n            strict,\r\n            fromIsValid,\r\n            decisionPos - 1,\r\n            selection\r\n          );\r\n          break;\r\n        }\r\n      } else {\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  // reset alternation excludes\r\n  if (!returnRslt || opts.keepStatic !== false) {\r\n    delete maskset.excludes[decisionPos];\r\n  }\r\n  return returnRslt;\r\n}\r\n\r\nfunction casing(elem, test, pos) {\r\n  const opts = this.opts,\r\n    maskset = this.maskset;\r\n\r\n  switch (opts.casing || test.casing) {\r\n    case \"upper\":\r\n      elem = elem.toLocaleUpperCase();\r\n      break;\r\n    case \"lower\":\r\n      elem = elem.toLocaleLowerCase();\r\n      break;\r\n    case \"title\":\r\n      var posBefore = maskset.validPositions[pos - 1];\r\n      if (\r\n        pos === 0 ||\r\n        (posBefore && posBefore.input === String.fromCharCode(keyCode.Space))\r\n      ) {\r\n        elem = elem.toLocaleUpperCase();\r\n      } else {\r\n        elem = elem.toLocaleLowerCase();\r\n      }\r\n      break;\r\n    default:\r\n      if (typeof opts.casing === \"function\") {\r\n        const args = Array.prototype.slice.call(arguments);\r\n        args.push(maskset.validPositions);\r\n        elem = opts.casing.apply(this, args);\r\n      }\r\n  }\r\n\r\n  return elem;\r\n}\r\n\r\n// tobe put on prototype?\r\nfunction checkAlternationMatch(altArr1, altArr2, na) {\r\n  const opts = this.opts;\r\n\r\n  let altArrC = opts.greedy ? altArr2 : altArr2.slice(0, 1),\r\n    isMatch = false,\r\n    naArr = na !== undefined ? na.split(\",\") : [],\r\n    naNdx;\r\n\r\n  // remove no alternate indexes from alternation array\r\n  for (let i = 0; i < naArr.length; i++) {\r\n    if ((naNdx = altArr1.indexOf(naArr[i])) !== -1) {\r\n      altArr1.splice(naNdx, 1);\r\n    }\r\n  }\r\n\r\n  for (let alndx = 0; alndx < altArr1.length; alndx++) {\r\n    if (altArrC.includes(altArr1[alndx])) {\r\n      isMatch = true;\r\n      break;\r\n    }\r\n  }\r\n  return isMatch;\r\n}\r\n\r\n// tobe put on prototype?\r\nfunction handleRemove(input, c, pos, strict, fromIsValid) {\r\n  const inputmask = this,\r\n    maskset = this.maskset,\r\n    opts = this.opts;\r\n\r\n  if (opts.numericInput || inputmask.isRTL) {\r\n    if (c === keys.Backspace) {\r\n      c = keys.Delete;\r\n    } else if (c === keys.Delete) {\r\n      c = keys.Backspace;\r\n    }\r\n\r\n    if (inputmask.isRTL) {\r\n      const pend = pos.end;\r\n      pos.end = pos.begin;\r\n      pos.begin = pend;\r\n    }\r\n  }\r\n\r\n  const lvp = getLastValidPosition.call(inputmask, undefined, true);\r\n  if (pos.end >= getBuffer.call(inputmask).length && lvp >= pos.end) {\r\n    // handle numeric negate symbol offset, due to  dynamic jit masking\r\n    pos.end = lvp + 1;\r\n  }\r\n\r\n  if (c === keys.Backspace) {\r\n    if (pos.end - pos.begin < 1) {\r\n      pos.begin = seekPrevious.call(inputmask, pos.begin);\r\n    }\r\n  } else if (c === keys.Delete) {\r\n    if (pos.begin === pos.end) {\r\n      pos.end = isMask.call(inputmask, pos.end, true, true)\r\n        ? pos.end + 1\r\n        : seekNext.call(inputmask, pos.end) + 1;\r\n    }\r\n  }\r\n  let offset;\r\n  if ((offset = revalidateMask.call(inputmask, pos)) !== false) {\r\n    if (\r\n      (strict !== true && opts.keepStatic !== false) ||\r\n      (opts.regex !== null &&\r\n        getTest.call(inputmask, pos.begin).match.def.indexOf(\"|\") !== -1)\r\n    ) {\r\n      // TODO NEEDS BETTER CHECK WHEN TO ALTERNATE  ~ opts regex isn\"t good enough\r\n      alternate.call(inputmask, true);\r\n    }\r\n\r\n    if (strict !== true) {\r\n      maskset.p = c === keys.Delete ? pos.begin + offset : pos.begin;\r\n      maskset.p = determineNewCaretPosition.call(\r\n        inputmask,\r\n        {\r\n          begin: maskset.p,\r\n          end: maskset.p\r\n        },\r\n        false,\r\n        opts.insertMode === false && c === keys.Backspace ? \"none\" : undefined\r\n      ).begin;\r\n    }\r\n  }\r\n}\r\n\r\n// tobe put on prototype?\r\nfunction isComplete(buffer) {\r\n  // return true / false / undefined (repeat *)\r\n  const inputmask = this,\r\n    opts = this.opts,\r\n    maskset = this.maskset;\r\n\r\n  if (typeof opts.isComplete === \"function\")\r\n    return opts.isComplete(buffer, opts);\r\n  if (opts.repeat === \"*\") return undefined;\r\n  let complete = false,\r\n    lrp = determineLastRequiredPosition.call(inputmask, true),\r\n    aml = lrp.l; // seekPrevious.call(inputmask, lrp.l);\r\n\r\n  if (\r\n    lrp.def === undefined ||\r\n    lrp.def.newBlockMarker ||\r\n    lrp.def.optionality ||\r\n    lrp.def.optionalQuantifier\r\n  ) {\r\n    complete = true;\r\n    for (let i = 0; i <= aml; i++) {\r\n      const test = getTestTemplate.call(inputmask, i).match;\r\n      if (\r\n        (test.static !== true &&\r\n          maskset.validPositions[i] === undefined &&\r\n          (test.optionality === false ||\r\n            test.optionality === undefined ||\r\n            (test.optionality && test.newBlockMarker == false)) &&\r\n          (test.optionalQuantifier === false ||\r\n            test.optionalQuantifier === undefined)) ||\r\n        (test.static === true &&\r\n          test.def != \"\" &&\r\n          buffer[i] !== getPlaceholder.call(inputmask, i, test))\r\n      ) {\r\n        complete = false;\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  return complete;\r\n}\r\n\r\nfunction isSelection(posObj) {\r\n  const inputmask = this,\r\n    opts = this.opts,\r\n    insertModeOffset = opts.insertMode ? 0 : 1;\r\n  return inputmask.isRTL\r\n    ? posObj.begin - posObj.end > insertModeOffset\r\n    : posObj.end - posObj.begin > insertModeOffset;\r\n}\r\n\r\n// tobe put on prototype?\r\nfunction isValid(\r\n  pos,\r\n  c,\r\n  strict,\r\n  fromIsValid,\r\n  fromAlternate,\r\n  validateOnly,\r\n  fromCheckval\r\n) {\r\n  // strict true ~ no correction or autofill\r\n  const inputmask = this,\r\n    $ = this.dependencyLib,\r\n    opts = this.opts,\r\n    maskset = inputmask.maskset;\r\n\r\n  strict = strict === true; // always set a value to strict to prevent possible strange behavior in the extensions\r\n\r\n  let maskPos = pos;\r\n  if (pos.begin !== undefined) {\r\n    // position was a position object - used to handle a delete by typing over a selection\r\n    maskPos = inputmask.isRTL ? pos.end : pos.begin;\r\n  }\r\n\r\n  function processCommandObject(commandObj) {\r\n    if (commandObj !== undefined) {\r\n      if (commandObj.remove !== undefined) {\r\n        // remove position(s)\r\n        if (!Array.isArray(commandObj.remove))\r\n          commandObj.remove = [commandObj.remove];\r\n        commandObj.remove\r\n          .sort(function (a, b) {\r\n            return inputmask.isRTL ? a.pos - b.pos : b.pos - a.pos;\r\n          })\r\n          .forEach(function (lmnt) {\r\n            revalidateMask.call(inputmask, { begin: lmnt, end: lmnt + 1 });\r\n          });\r\n        commandObj.remove = undefined;\r\n      }\r\n      if (commandObj.insert !== undefined) {\r\n        // insert position(s)\r\n        if (!Array.isArray(commandObj.insert))\r\n          commandObj.insert = [commandObj.insert];\r\n        commandObj.insert\r\n          .sort(function (a, b) {\r\n            return inputmask.isRTL ? b.pos - a.pos : a.pos - b.pos;\r\n          })\r\n          .forEach(function (lmnt) {\r\n            if (lmnt.c !== \"\") {\r\n              isValid.call(\r\n                inputmask,\r\n                lmnt.pos,\r\n                lmnt.c,\r\n                lmnt.strict !== undefined ? lmnt.strict : true,\r\n                lmnt.fromIsValid !== undefined ? lmnt.fromIsValid : fromIsValid\r\n              );\r\n            }\r\n          });\r\n        commandObj.insert = undefined;\r\n      }\r\n\r\n      if (commandObj.refreshFromBuffer && commandObj.buffer) {\r\n        const refresh = commandObj.refreshFromBuffer;\r\n        refreshFromBuffer.call(\r\n          inputmask,\r\n          refresh === true ? refresh : refresh.start,\r\n          refresh.end,\r\n          commandObj.buffer\r\n        );\r\n        commandObj.refreshFromBuffer = undefined;\r\n      }\r\n\r\n      if (commandObj.rewritePosition !== undefined) {\r\n        maskPos = commandObj.rewritePosition;\r\n        // commandObj.rewritePosition = undefined;\r\n        commandObj = true; // see prevalidation in isValid\r\n      }\r\n    }\r\n    return commandObj;\r\n  }\r\n\r\n  function _isValid(position, c, strict) {\r\n    let rslt = false;\r\n    getTests.call(inputmask, position).every(function (tst, ndx) {\r\n      const test = tst.match;\r\n      // make sure the buffer is set and correct\r\n      getBuffer.call(inputmask, true);\r\n      if (\r\n        test.jit &&\r\n        maskset.validPositions[seekPrevious.call(inputmask, position)] ===\r\n          undefined\r\n      ) {\r\n        // ignore if jit is not desirable\r\n        rslt = false;\r\n      } else {\r\n        // return is false or a json object => { pos: ??, c: ??} or true\r\n        rslt =\r\n          test.fn != null\r\n            ? test.fn.test(\r\n                c,\r\n                maskset,\r\n                position,\r\n                strict,\r\n                opts,\r\n                isSelection.call(inputmask, pos)\r\n              )\r\n            : (c === test.def || c === opts.skipOptionalPartCharacter) &&\r\n                test.def !== \"\" // non mask\r\n              ? {\r\n                  c:\r\n                    getPlaceholder.call(inputmask, position, test, true) ||\r\n                    test.def,\r\n                  pos: position\r\n                }\r\n              : false;\r\n      }\r\n      if (rslt !== false) {\r\n        let elem = rslt.c !== undefined ? rslt.c : c,\r\n          validatedPos = position;\r\n        elem =\r\n          elem === opts.skipOptionalPartCharacter && test.static === true\r\n            ? getPlaceholder.call(inputmask, position, test, true) || test.def\r\n            : elem;\r\n\r\n        rslt = processCommandObject(rslt);\r\n\r\n        if (rslt !== true && rslt.pos !== undefined && rslt.pos !== position) {\r\n          // their is a position offset\r\n          validatedPos = rslt.pos;\r\n        }\r\n\r\n        if (rslt !== true && rslt.pos === undefined && rslt.c === undefined) {\r\n          return false; // breakout if nothing to insert\r\n        }\r\n\r\n        if (\r\n          revalidateMask.call(\r\n            inputmask,\r\n            pos,\r\n            $.extend({}, tst, {\r\n              input: casing.call(inputmask, elem, test, validatedPos)\r\n            }),\r\n            fromIsValid,\r\n            validatedPos\r\n          ) === false\r\n        ) {\r\n          rslt = false;\r\n        }\r\n        return false; // break from loop\r\n      }\r\n\r\n      return true;\r\n    });\r\n    return rslt;\r\n  }\r\n\r\n  let result = true,\r\n    positionsClone = $.extend(true, [], maskset.validPositions); // clone the currentPositions\r\n\r\n  if (\r\n    opts.keepStatic === false &&\r\n    maskset.excludes[maskPos] !== undefined &&\r\n    fromAlternate !== true &&\r\n    fromIsValid !== true\r\n  ) {\r\n    for (let i = maskPos; i < (inputmask.isRTL ? pos.begin : pos.end); i++) {\r\n      if (maskset.excludes[i] !== undefined) {\r\n        maskset.excludes[i] = undefined;\r\n        delete maskset.tests[i];\r\n      }\r\n    }\r\n  }\r\n\r\n  if (\r\n    typeof opts.preValidation === \"function\" &&\r\n    fromIsValid !== true &&\r\n    validateOnly !== true\r\n  ) {\r\n    result = opts.preValidation.call(\r\n      inputmask,\r\n      getBuffer.call(inputmask),\r\n      maskPos,\r\n      c,\r\n      isSelection.call(inputmask, pos),\r\n      opts,\r\n      maskset,\r\n      pos,\r\n      strict || fromAlternate\r\n    );\r\n    result = processCommandObject(result);\r\n  }\r\n  if (result === true) {\r\n    // preValidation result\r\n    result = _isValid(maskPos, c, strict);\r\n    if (\r\n      (!strict || fromIsValid === true) &&\r\n      result === false &&\r\n      validateOnly !== true\r\n    ) {\r\n      const currentPosValid = maskset.validPositions[maskPos];\r\n      if (\r\n        currentPosValid &&\r\n        currentPosValid.match.static === true &&\r\n        (currentPosValid.match.def === c ||\r\n          c === opts.skipOptionalPartCharacter)\r\n      ) {\r\n        result = {\r\n          caret: seekNext.call(inputmask, maskPos)\r\n        };\r\n      } else {\r\n        if (\r\n          opts.insertMode ||\r\n          maskset.validPositions[seekNext.call(inputmask, maskPos)] ===\r\n            undefined ||\r\n          pos.end > maskPos\r\n        ) {\r\n          // does the input match on a further position?\r\n          let skip = false;\r\n          if (\r\n            maskset.jitOffset[maskPos] &&\r\n            maskset.validPositions[seekNext.call(inputmask, maskPos)] ===\r\n              undefined\r\n          ) {\r\n            result = isValid.call(\r\n              inputmask,\r\n              maskPos + maskset.jitOffset[maskPos],\r\n              c,\r\n              true,\r\n              true\r\n            );\r\n            if (result !== false) {\r\n              if (fromAlternate !== true) result.caret = maskPos;\r\n              skip = true;\r\n            }\r\n          }\r\n          if (pos.end > maskPos) {\r\n            maskset.validPositions[maskPos] = undefined;\r\n          }\r\n          if (\r\n            !skip &&\r\n            !isMask.call(inputmask, maskPos, opts.keepStatic && maskPos === 0)\r\n          ) {\r\n            for (\r\n              let nPos = maskPos + 1,\r\n                snPos = seekNext.call(inputmask, maskPos, false, maskPos !== 0);\r\n              nPos <= snPos;\r\n              nPos++\r\n            ) {\r\n              // if (!isMask(nPos, true)) {\r\n              // \tcontinue;\r\n              // }\r\n              result = _isValid(nPos, c, strict);\r\n              if (result !== false) {\r\n                result =\r\n                  trackbackPositions.call(\r\n                    inputmask,\r\n                    maskPos,\r\n                    result.pos !== undefined ? result.pos : nPos\r\n                  ) || result;\r\n                maskPos = nPos;\r\n                break;\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (inputmask.hasAlternator && fromAlternate !== true && !strict) {\r\n      fromAlternate = true; // stop possible loop\r\n      if (result === false) {\r\n        // try alternating when the validation fails\r\n        if (\r\n          opts.keepStatic === true ||\r\n          (isFinite(parseInt(opts.keepStatic)) && maskPos >= opts.keepStatic)\r\n        ) {\r\n          // console.log(\"alternate 0\");\r\n          result = alternate.call(\r\n            inputmask,\r\n            maskPos,\r\n            c,\r\n            strict,\r\n            fromIsValid,\r\n            undefined,\r\n            pos\r\n          );\r\n        }\r\n      } else if (result === true) {\r\n        // try alternating when the validation succeeds\r\n        // selection clears an alternated keepstatic mask ~ #2189\r\n        if (\r\n          isSelection.call(inputmask, pos) &&\r\n          maskset.tests[maskPos] &&\r\n          maskset.tests[maskPos].length > 1 &&\r\n          opts.keepStatic\r\n        ) {\r\n          // console.log(\"alternate 1\");\r\n          result = alternate.call(inputmask, true) || result;\r\n        }\r\n        // alternate by adding extra input in between\r\n        else if (\r\n          opts.numericInput !== true &&\r\n          maskset.tests[maskPos] &&\r\n          maskset.tests[maskPos].length > 1 &&\r\n          getLastValidPosition.call(inputmask, undefined, true) > maskPos\r\n        ) {\r\n          // console.log(\"alternate 2\");\r\n          result = alternate.call(inputmask, true) || result;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (result === true) {\r\n      result = {\r\n        pos: maskPos\r\n      };\r\n    }\r\n\r\n    if (\r\n      typeof opts.postValidation === \"function\" &&\r\n      fromIsValid !== true &&\r\n      validateOnly !== true\r\n    ) {\r\n      const postResult = opts.postValidation.call(\r\n        inputmask,\r\n        getBuffer.call(inputmask, true),\r\n        pos.begin !== undefined ? (inputmask.isRTL ? pos.end : pos.begin) : pos,\r\n        c,\r\n        result,\r\n        opts,\r\n        maskset,\r\n        strict,\r\n        fromCheckval,\r\n        fromAlternate\r\n      );\r\n      if (postResult !== undefined) {\r\n        result = postResult === true ? result : postResult;\r\n      }\r\n    }\r\n  }\r\n\r\n  if (result && result.pos === undefined) {\r\n    result.pos = maskPos;\r\n  }\r\n\r\n  if (result === false || validateOnly === true) {\r\n    resetMaskSet.call(inputmask, true);\r\n    maskset.validPositions = $.extend(true, [], positionsClone); // revert validation changes\r\n  } else {\r\n    trackbackPositions.call(inputmask, undefined, maskPos, true);\r\n  }\r\n\r\n  let endResult = processCommandObject(result);\r\n  // console.log(\"returned result \" + JSON.stringify(endResult));\r\n  if (inputmask.maxLength !== undefined) {\r\n    const buffer = getBuffer.call(inputmask);\r\n    if (buffer.length > inputmask.maxLength && !fromIsValid) {\r\n      resetMaskSet.call(inputmask, true);\r\n      maskset.validPositions = $.extend(true, [], positionsClone); // revert validation changes\r\n      endResult = false;\r\n    }\r\n  }\r\n  return endResult;\r\n}\r\n\r\n// tobe put on prototype?\r\nfunction positionCanMatchDefinition(pos, testDefinition, opts) {\r\n  const inputmask = this,\r\n    maskset = this.maskset;\r\n\r\n  let valid = false,\r\n    tests = getTests.call(inputmask, pos);\r\n  for (let tndx = 0; tndx < tests.length; tndx++) {\r\n    if (\r\n      tests[tndx].match &&\r\n      ((tests[tndx].match.nativeDef ===\r\n        testDefinition.match[opts.shiftPositions ? \"def\" : \"nativeDef\"] &&\r\n        (!opts.shiftPositions || !testDefinition.match.static)) ||\r\n        tests[tndx].match.nativeDef === testDefinition.match.nativeDef ||\r\n        (opts.regex &&\r\n          !tests[tndx].match.static &&\r\n          tests[tndx].match.fn.test(\r\n            testDefinition.input,\r\n            maskset,\r\n            pos,\r\n            false,\r\n            opts\r\n          )))\r\n    ) {\r\n      valid = true;\r\n      break;\r\n    } else if (\r\n      tests[tndx].match &&\r\n      tests[tndx].match.def === testDefinition.match.nativeDef\r\n    ) {\r\n      valid = undefined;\r\n      break;\r\n    }\r\n  }\r\n  if (valid === false) {\r\n    if (maskset.jitOffset[pos] !== undefined) {\r\n      valid = positionCanMatchDefinition.call(\r\n        inputmask,\r\n        pos + maskset.jitOffset[pos],\r\n        testDefinition,\r\n        opts\r\n      );\r\n    }\r\n  }\r\n  return valid;\r\n}\r\n\r\n// tobe put on prototype?\r\nfunction refreshFromBuffer(start, end, buffer) {\r\n  const inputmask = this,\r\n    maskset = this.maskset,\r\n    opts = this.opts,\r\n    $ = this.dependencyLib;\r\n  // checkVal.call(inputmask, el, false, true, isRTL ? buffer.reverse() : buffer);\r\n  let i,\r\n    p,\r\n    skipOptionalPartCharacter = opts.skipOptionalPartCharacter,\r\n    bffr = inputmask.isRTL ? buffer.slice().reverse() : buffer;\r\n  opts.skipOptionalPartCharacter = \"\";\r\n  if (start === true) {\r\n    resetMaskSet.call(inputmask, false);\r\n    start = 0;\r\n    end = buffer.length;\r\n    p = determineNewCaretPosition.call(\r\n      inputmask,\r\n      { begin: 0, end: 0 },\r\n      false\r\n    ).begin;\r\n  } else {\r\n    for (i = start; i < end; i++) {\r\n      delete maskset.validPositions[i];\r\n    }\r\n    p = start;\r\n  }\r\n\r\n  const keypress = new $.Event(\"keypress\");\r\n  for (i = start; i < end; i++) {\r\n    keypress.key = bffr[i].toString();\r\n    inputmask.ignorable = false; // make sure ignorable is ignored ;-)\r\n    const valResult = EventHandlers.keypressEvent.call(\r\n      inputmask,\r\n      keypress,\r\n      true,\r\n      false,\r\n      false,\r\n      p\r\n    );\r\n    if (valResult !== false && valResult !== undefined) {\r\n      p = valResult.forwardPosition;\r\n    }\r\n  }\r\n\r\n  opts.skipOptionalPartCharacter = skipOptionalPartCharacter;\r\n}\r\n\r\n// tobe put on prototype?\r\n// fill in best positions according the current input\r\nfunction trackbackPositions(originalPos, newPos, fillOnly) {\r\n  const inputmask = this,\r\n    maskset = this.maskset,\r\n    $ = this.dependencyLib;\r\n\r\n  // console.log(\"trackbackPositions \" + originalPos + \" \" + newPos);\r\n  if (originalPos === undefined) {\r\n    // find previous valid\r\n    for (originalPos = newPos - 1; originalPos > 0; originalPos--) {\r\n      if (maskset.validPositions[originalPos]) break;\r\n    }\r\n  }\r\n  for (let ps = originalPos; ps < newPos; ps++) {\r\n    if (\r\n      maskset.validPositions[ps] === undefined &&\r\n      !isMask.call(inputmask, ps, false)\r\n    ) {\r\n      const vp =\r\n        ps == 0 ? getTest.call(inputmask, ps) : maskset.validPositions[ps - 1];\r\n      if (vp) {\r\n        const tests = getTests.call(inputmask, ps).slice();\r\n        if (tests[tests.length - 1].match.def === \"\") tests.pop();\r\n        var bestMatch = determineTestTemplate.call(inputmask, ps, tests),\r\n          np;\r\n        if (\r\n          bestMatch &&\r\n          (bestMatch.match.jit !== true ||\r\n            (bestMatch.match.newBlockMarker === \"master\" &&\r\n              (np = maskset.validPositions[ps + 1]) &&\r\n              np.match.optionalQuantifier === true))\r\n        ) {\r\n          bestMatch = $.extend({}, bestMatch, {\r\n            input:\r\n              getPlaceholder.call(inputmask, ps, bestMatch.match, true) ||\r\n              bestMatch.match.def\r\n          });\r\n          bestMatch.generatedInput = true;\r\n          revalidateMask.call(inputmask, ps, bestMatch, true);\r\n\r\n          if (fillOnly !== true) {\r\n            // revalidate the new position to update the locator value\r\n            const cvpInput = maskset.validPositions[newPos].input;\r\n            maskset.validPositions[newPos] = undefined;\r\n            return isValid.call(inputmask, newPos, cvpInput, true, true);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n// tobe put on prototype?\r\nfunction revalidateMask(pos, validTest, fromIsValid, validatedPos) {\r\n  // console.log(\"revalidateMask \" + fromIsValid);\r\n  const inputmask = this,\r\n    maskset = this.maskset,\r\n    opts = this.opts,\r\n    $ = this.dependencyLib;\r\n\r\n  function IsEnclosedStatic(pos, valids, selection) {\r\n    const posMatch = valids[pos];\r\n    if (\r\n      posMatch !== undefined &&\r\n      posMatch.match.static === true &&\r\n      posMatch.match.optionality !== true &&\r\n      (valids[0] === undefined || valids[0].alternation === undefined)\r\n    ) {\r\n      const prevMatch =\r\n          selection.begin <= pos - 1\r\n            ? valids[pos - 1] &&\r\n              valids[pos - 1].match.static === true &&\r\n              valids[pos - 1]\r\n            : valids[pos - 1],\r\n        nextMatch =\r\n          selection.end > pos + 1\r\n            ? valids[pos + 1] &&\r\n              valids[pos + 1].match.static === true &&\r\n              valids[pos + 1]\r\n            : valids[pos + 1];\r\n      return prevMatch && nextMatch;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  let offset = 0,\r\n    begin = pos.begin !== undefined ? pos.begin : pos,\r\n    end = pos.end !== undefined ? pos.end : pos,\r\n    valid = true;\r\n  if (pos.begin > pos.end) {\r\n    begin = pos.end;\r\n    end = pos.begin;\r\n  }\r\n\r\n  validatedPos = validatedPos !== undefined ? validatedPos : begin;\r\n  if (\r\n    fromIsValid === undefined &&\r\n    (begin !== end ||\r\n      (opts.insertMode && maskset.validPositions[validatedPos] !== undefined) ||\r\n      validTest === undefined ||\r\n      validTest.match.optionalQuantifier ||\r\n      validTest.match.optionality)\r\n  ) {\r\n    // reposition & revalidate others\r\n    let positionsClone = $.extend(true, [], maskset.validPositions),\r\n      lvp = getLastValidPosition.call(inputmask, undefined, true),\r\n      i;\r\n    maskset.p = begin; // needed for alternated position after overtype selection\r\n\r\n    const clearpos = isSelection.call(inputmask, pos) ? begin : validatedPos;\r\n    for (i = lvp; i >= clearpos; i--) {\r\n      maskset.validPositions.splice(i, 1);\r\n      if (validTest === undefined) delete maskset.tests[i + 1];\r\n    }\r\n\r\n    let j = validatedPos,\r\n      posMatch = j,\r\n      t,\r\n      canMatch,\r\n      test;\r\n\r\n    if (validTest) {\r\n      maskset.validPositions[validatedPos] = $.extend(true, {}, validTest);\r\n      posMatch++;\r\n      j++;\r\n    }\r\n\r\n    if (positionsClone[end] == undefined && maskset.jitOffset[end]) {\r\n      end += maskset.jitOffset[end] + 1;\r\n    }\r\n    for (i = validTest ? end : end - 1; i <= lvp; i++) {\r\n      if (\r\n        (t = positionsClone[i]) !== undefined &&\r\n        t.generatedInput !== true &&\r\n        (i >= end ||\r\n          (i >= begin &&\r\n            IsEnclosedStatic(i, positionsClone, {\r\n              begin,\r\n              end\r\n            })))\r\n      ) {\r\n        while (\r\n          ((test = getTest.call(inputmask, posMatch)), test.match.def !== \"\")\r\n        ) {\r\n          // loop needed to match further positions\r\n          if (\r\n            (canMatch = positionCanMatchDefinition.call(\r\n              inputmask,\r\n              posMatch,\r\n              t,\r\n              opts\r\n            )) !== false ||\r\n            t.match.def === \"+\"\r\n          ) {\r\n            // validated match //we still need some hackery for the + validator (numeric alias)\r\n            if (t.match.def === \"+\") getBuffer.call(inputmask, true);\r\n            const result = isValid.call(\r\n              inputmask,\r\n              posMatch,\r\n              t.input,\r\n              t.match.def !== \"+\",\r\n              /* t.match.def !== \"+\" */ true\r\n            );\r\n            valid = result !== false;\r\n            j = (result.pos || posMatch) + 1;\r\n            if (!valid && canMatch) break;\r\n          } else {\r\n            valid = false;\r\n          }\r\n          if (valid) {\r\n            if (validTest === undefined && t.match.static && i === pos.begin)\r\n              offset++;\r\n            break;\r\n          }\r\n          if (\r\n            (!valid && getBuffer.call(inputmask), posMatch > maskset.maskLength)\r\n          ) {\r\n            break;\r\n          }\r\n          posMatch++;\r\n        }\r\n        if (getTest.call(inputmask, posMatch).match.def == \"\") {\r\n          valid = false;\r\n        }\r\n        // restore position\r\n        posMatch = j;\r\n      }\r\n      if (!valid) break;\r\n    }\r\n    if (!valid) {\r\n      maskset.validPositions = $.extend(true, [], positionsClone);\r\n      resetMaskSet.call(inputmask, true);\r\n      return false;\r\n    }\r\n  } else if (\r\n    validTest &&\r\n    getTest.call(inputmask, validatedPos).match.cd === validTest.match.cd\r\n  ) {\r\n    maskset.validPositions[validatedPos] = $.extend(true, {}, validTest);\r\n  }\r\n\r\n  resetMaskSet.call(inputmask, true);\r\n  return offset;\r\n}\r\n","import window from \"./global/window\";\r\nimport { checkAlternationMatch } from \"./validation\";\r\nimport {\r\n  determineTestTemplate,\r\n  getMaskTemplate,\r\n  getPlaceholder,\r\n  getTest,\r\n  getTests,\r\n  getTestTemplate\r\n} from \"./validation-tests\";\r\n\r\nexport {\r\n  caret,\r\n  determineLastRequiredPosition,\r\n  determineNewCaretPosition,\r\n  getBuffer,\r\n  getBufferTemplate,\r\n  getLastValidPosition,\r\n  isMask,\r\n  resetMaskSet,\r\n  seekNext,\r\n  seekPrevious,\r\n  translatePosition\r\n};\r\n\r\n// tobe put on prototype?\r\nfunction caret(input, begin, end, notranslate, isDelete) {\r\n  const inputmask = this,\r\n    opts = this.opts;\r\n\r\n  let range;\r\n  if (begin !== undefined) {\r\n    if (Array.isArray(begin)) {\r\n      end = inputmask.isRTL ? begin[0] : begin[1];\r\n      begin = inputmask.isRTL ? begin[1] : begin[0];\r\n    }\r\n    if (begin.begin !== undefined) {\r\n      end = inputmask.isRTL ? begin.begin : begin.end;\r\n      begin = inputmask.isRTL ? begin.end : begin.begin;\r\n    }\r\n    if (typeof begin === \"number\") {\r\n      begin = notranslate ? begin : translatePosition.call(inputmask, begin);\r\n      end = notranslate ? end : translatePosition.call(inputmask, end);\r\n      end = typeof end === \"number\" ? end : begin;\r\n      // if (!$(input).is(\":visible\")) {\r\n      // \treturn;\r\n      // }\r\n\r\n      const scrollCalc =\r\n        parseInt(\r\n          ((input.ownerDocument.defaultView || window).getComputedStyle\r\n            ? (input.ownerDocument.defaultView || window).getComputedStyle(\r\n                input,\r\n                null\r\n              )\r\n            : input.currentStyle\r\n          ).fontSize\r\n        ) * end;\r\n      input.scrollLeft = scrollCalc > input.scrollWidth ? scrollCalc : 0;\r\n      input.inputmask.caretPos = { begin, end }; // track caret internally\r\n      if (opts.insertModeVisual && opts.insertMode === false && begin === end) {\r\n        if (!isDelete) {\r\n          end++; // set visualization for insert/overwrite mode\r\n        }\r\n      }\r\n      if (input === input.getRootNode().activeElement) {\r\n        if (\"setSelectionRange\" in input) {\r\n          input.setSelectionRange(begin, end);\r\n        } else if (window.getSelection) {\r\n          range = document.createRange();\r\n          if (input.firstChild === undefined || input.firstChild === null) {\r\n            const textNode = document.createTextNode(\"\");\r\n            input.appendChild(textNode);\r\n          }\r\n          range.setStart(\r\n            input.firstChild,\r\n            begin < input.inputmask._valueGet().length\r\n              ? begin\r\n              : input.inputmask._valueGet().length\r\n          );\r\n          range.setEnd(\r\n            input.firstChild,\r\n            end < input.inputmask._valueGet().length\r\n              ? end\r\n              : input.inputmask._valueGet().length\r\n          );\r\n          range.collapse(true);\r\n          const sel = window.getSelection();\r\n          sel.removeAllRanges();\r\n          sel.addRange(range);\r\n          // input.focus();\r\n        } else if (input.createTextRange) {\r\n          range = input.createTextRange();\r\n          range.collapse(true);\r\n          range.moveEnd(\"character\", end);\r\n          range.moveStart(\"character\", begin);\r\n          range.select();\r\n        }\r\n\r\n        input.inputmask.caretHook === undefined ||\r\n          input.inputmask.caretHook.call(inputmask, { begin, end });\r\n      }\r\n    }\r\n  } else {\r\n    if (\"selectionStart\" in input && \"selectionEnd\" in input) {\r\n      begin = input.selectionStart;\r\n      end = input.selectionEnd;\r\n    } else if (window.getSelection) {\r\n      range = window.getSelection().getRangeAt(0);\r\n      if (\r\n        range.commonAncestorContainer.parentNode === input ||\r\n        range.commonAncestorContainer === input\r\n      ) {\r\n        begin = range.startOffset;\r\n        end = range.endOffset;\r\n      }\r\n    } else if (document.selection && document.selection.createRange) {\r\n      range = document.selection.createRange();\r\n      begin =\r\n        0 -\r\n        range\r\n          .duplicate()\r\n          .moveStart(\"character\", -input.inputmask._valueGet().length);\r\n      end = begin + range.text.length;\r\n    }\r\n\r\n    // if (opts.insertModeVisual && opts.insertMode === false && begin === (end - 1)) end--; //correct caret for insert/overwrite mode\r\n\r\n    /* eslint-disable consistent-return */\r\n    return {\r\n      begin: notranslate ? begin : translatePosition.call(inputmask, begin),\r\n      end: notranslate ? end : translatePosition.call(inputmask, end)\r\n    };\r\n    /* eslint-enable consistent-return */\r\n  }\r\n}\r\n\r\n// tobe put on prototype?\r\nfunction determineLastRequiredPosition(returnDefinition) {\r\n  const inputmask = this,\r\n    { maskset, dependencyLib: $ } = inputmask,\r\n    lvp = getLastValidPosition.call(inputmask),\r\n    positions = {},\r\n    lvTest = maskset.validPositions[lvp],\r\n    buffer = getMaskTemplate.call(\r\n      inputmask,\r\n      true,\r\n      getLastValidPosition.call(inputmask),\r\n      true,\r\n      true\r\n    );\r\n  let bl = buffer.length,\r\n    pos,\r\n    ndxIntlzr = lvTest !== undefined ? lvTest.locator.slice() : undefined,\r\n    testPos;\r\n  for (pos = lvp + 1; pos < buffer.length; pos++) {\r\n    testPos = getTestTemplate.call(inputmask, pos, ndxIntlzr, pos - 1);\r\n    ndxIntlzr = testPos.locator.slice();\r\n    positions[pos] = $.extend(true, {}, testPos);\r\n  }\r\n\r\n  const lvTestAlt =\r\n    lvTest && lvTest.alternation !== undefined\r\n      ? lvTest.locator[lvTest.alternation]\r\n      : undefined;\r\n  for (pos = bl - 1; pos > lvp; pos--) {\r\n    testPos = positions[pos];\r\n    if (\r\n      (testPos.match.optionality ||\r\n        (testPos.match.optionalQuantifier && testPos.match.newBlockMarker) ||\r\n        (lvTestAlt &&\r\n          ((lvTestAlt !== positions[pos].locator[lvTest.alternation] &&\r\n            testPos.match.static !== true) ||\r\n            (testPos.match.static === true &&\r\n              testPos.locator[lvTest.alternation] &&\r\n              checkAlternationMatch.call(\r\n                inputmask,\r\n                testPos.locator[lvTest.alternation].toString().split(\",\"),\r\n                lvTestAlt.toString().split(\",\")\r\n              ) &&\r\n              getTests.call(inputmask, pos)[0].def !== \"\")))) &&\r\n      buffer[pos] === getPlaceholder.call(inputmask, pos, testPos.match)\r\n    ) {\r\n      bl--;\r\n      if (testPos.match.optionality) {\r\n        // find the last position that is not optional ~ isoptional and newblockmarker == \"master\"\r\n        let prevPos = pos;\r\n        while (prevPos > 0) {\r\n          const test = getTest.call(inputmask, prevPos);\r\n          if (\r\n            test.match.newBlockMarker === \"master\" ||\r\n            test.match.newBlockMarker === true\r\n          ) {\r\n            break;\r\n          }\r\n          prevPos--;\r\n        }\r\n        if (maskset.validPositions[prevPos] !== undefined) {\r\n          break;\r\n        }\r\n      }\r\n    } else {\r\n      break;\r\n    }\r\n  }\r\n\r\n  // no extra required positions\r\n  if (pos === lvp) {\r\n    bl = pos;\r\n  }\r\n\r\n  return returnDefinition\r\n    ? {\r\n        l: bl,\r\n        def: positions[bl] ? positions[bl].match : undefined\r\n      }\r\n    : bl;\r\n}\r\n\r\n// tobe put on prototype?\r\nfunction determineNewCaretPosition(\r\n  selectedCaret,\r\n  tabbed,\r\n  positionCaretOnClick\r\n) {\r\n  const inputmask = this,\r\n    { maskset, opts } = inputmask;\r\n  let clickPosition, lvclickPosition, lastPosition;\r\n\r\n  function doRadixFocus(clickPos) {\r\n    if (opts.radixPoint !== \"\" && opts.digits !== 0) {\r\n      const vps = maskset.validPositions;\r\n      if (vps[clickPos] === undefined || vps[clickPos].input === undefined) {\r\n        if (clickPos < seekNext.call(inputmask, -1)) return true;\r\n        const radixPos = getBuffer.call(inputmask).indexOf(opts.radixPoint);\r\n        if (radixPos !== -1) {\r\n          for (let vp = 0, vpl = vps.length; vp < vpl; vp++) {\r\n            if (\r\n              vps[vp] &&\r\n              radixPos < vp &&\r\n              vps[vp].input !== getPlaceholder.call(inputmask, vp)\r\n            ) {\r\n              return false;\r\n            }\r\n          }\r\n          return true;\r\n        }\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n  if (tabbed) {\r\n    if (inputmask.isRTL) {\r\n      selectedCaret.end = selectedCaret.begin;\r\n    } else {\r\n      selectedCaret.begin = selectedCaret.end;\r\n    }\r\n  }\r\n  if (selectedCaret.begin === selectedCaret.end) {\r\n    positionCaretOnClick = positionCaretOnClick || opts.positionCaretOnClick;\r\n    switch (positionCaretOnClick) {\r\n      case \"none\":\r\n        break;\r\n      case \"select\":\r\n        selectedCaret = { begin: 0, end: getBuffer.call(inputmask).length };\r\n        break;\r\n      case \"ignore\":\r\n        selectedCaret.end = selectedCaret.begin = seekNext.call(\r\n          inputmask,\r\n          getLastValidPosition.call(inputmask)\r\n        );\r\n        break;\r\n      case \"radixFocus\":\r\n        if (inputmask.clicked > 1 && maskset.validPositions.length === 0) break;\r\n        if (doRadixFocus(selectedCaret.begin)) {\r\n          const radixPos = getBuffer\r\n            .call(inputmask)\r\n            .join(\"\")\r\n            .indexOf(opts.radixPoint);\r\n          selectedCaret.end = selectedCaret.begin = opts.numericInput\r\n            ? seekNext.call(inputmask, radixPos)\r\n            : radixPos;\r\n          break;\r\n        } // fallback to lvp\r\n      // eslint-disable-next-line no-fallthrough\r\n      default: // lvp:\r\n        clickPosition = selectedCaret.begin;\r\n        lvclickPosition = getLastValidPosition.call(\r\n          inputmask,\r\n          clickPosition,\r\n          true\r\n        );\r\n        lastPosition = seekNext.call(\r\n          inputmask,\r\n          lvclickPosition === -1 && !isMask.call(inputmask, 0)\r\n            ? -1\r\n            : lvclickPosition\r\n        );\r\n\r\n        if (clickPosition <= lastPosition) {\r\n          selectedCaret.end = selectedCaret.begin = !isMask.call(\r\n            inputmask,\r\n            clickPosition,\r\n            false,\r\n            true\r\n          )\r\n            ? seekNext.call(inputmask, clickPosition)\r\n            : clickPosition;\r\n        } else {\r\n          const lvp = maskset.validPositions[lvclickPosition],\r\n            tt = getTestTemplate.call(\r\n              inputmask,\r\n              lastPosition,\r\n              lvp ? lvp.match.locator : undefined,\r\n              lvp\r\n            ),\r\n            placeholder = getPlaceholder.call(\r\n              inputmask,\r\n              lastPosition,\r\n              tt.match\r\n            );\r\n          if (\r\n            (placeholder !== \"\" &&\r\n              getBuffer.call(inputmask)[lastPosition] !== placeholder &&\r\n              tt.match.optionalQuantifier !== true &&\r\n              tt.match.newBlockMarker !== true) ||\r\n            (!isMask.call(inputmask, lastPosition, opts.keepStatic, true) &&\r\n              tt.match.def === placeholder)\r\n          ) {\r\n            const newPos = seekNext.call(inputmask, lastPosition);\r\n            if (clickPosition >= newPos || clickPosition === lastPosition) {\r\n              lastPosition = newPos;\r\n            }\r\n          }\r\n          selectedCaret.end = selectedCaret.begin = lastPosition;\r\n        }\r\n    }\r\n\r\n    return selectedCaret;\r\n  }\r\n}\r\n\r\n// tobe put on prototype?\r\nfunction getBuffer(noCache) {\r\n  const inputmask = this,\r\n    { maskset } = inputmask;\r\n\r\n  if (maskset.buffer === undefined || noCache === true) {\r\n    maskset.buffer = getMaskTemplate.call(\r\n      inputmask,\r\n      true,\r\n      getLastValidPosition.call(inputmask),\r\n      true\r\n    );\r\n    if (maskset._buffer === undefined) maskset._buffer = maskset.buffer.slice();\r\n  }\r\n  return maskset.buffer;\r\n}\r\n\r\n// tobe put on prototype?\r\nfunction getBufferTemplate() {\r\n  const inputmask = this,\r\n    maskset = this.maskset;\r\n\r\n  if (maskset._buffer === undefined) {\r\n    // generate template\r\n    maskset._buffer = getMaskTemplate.call(inputmask, false, 1);\r\n    if (maskset.buffer === undefined) maskset.buffer = maskset._buffer.slice();\r\n  }\r\n  return maskset._buffer;\r\n}\r\n\r\n// tobe put on prototype?\r\nfunction getLastValidPosition(closestTo, strict, validPositions) {\r\n  const maskset = this.maskset;\r\n\r\n  let before = -1,\r\n    after = -1;\r\n  const valids = validPositions || maskset.validPositions; // for use in valhook ~ context switch\r\n  if (closestTo === undefined) closestTo = -1;\r\n  for (let psNdx = 0, vpl = valids.length; psNdx < vpl; psNdx++) {\r\n    if (valids[psNdx] && (strict || valids[psNdx].generatedInput !== true)) {\r\n      if (psNdx <= closestTo) before = psNdx;\r\n      if (psNdx >= closestTo) after = psNdx;\r\n    }\r\n  }\r\n  return before === -1 || before === closestTo\r\n    ? after\r\n    : after === -1\r\n      ? before\r\n      : closestTo - before < after - closestTo\r\n        ? before\r\n        : after;\r\n}\r\n\r\n// tobe put on prototype?\r\nfunction isMask(pos, strict, fuzzy) {\r\n  const inputmask = this,\r\n    maskset = this.maskset;\r\n\r\n  let test = getTestTemplate.call(inputmask, pos).match;\r\n  if (test.def === \"\") test = getTest.call(inputmask, pos).match;\r\n\r\n  if (test.static !== true) {\r\n    return test.fn;\r\n  }\r\n  if (\r\n    fuzzy === true &&\r\n    maskset.validPositions[pos] !== undefined &&\r\n    maskset.validPositions[pos].generatedInput !== true\r\n  ) {\r\n    return true;\r\n  }\r\n\r\n  if (strict !== true && pos > -1) {\r\n    if (fuzzy) {\r\n      // check on the number of tests\r\n      const tests = getTests.call(inputmask, pos);\r\n      return (\r\n        tests.length > 1 + (tests[tests.length - 1].match.def === \"\" ? 1 : 0)\r\n      );\r\n    }\r\n    // else based on the template\r\n    const testTemplate = determineTestTemplate.call(\r\n        inputmask,\r\n        pos,\r\n        getTests.call(inputmask, pos)\r\n      ),\r\n      testPlaceHolder = getPlaceholder.call(inputmask, pos, testTemplate.match);\r\n    return testTemplate.match.def !== testPlaceHolder;\r\n  }\r\n  return false;\r\n}\r\n\r\n// tobe put on prototype?\r\n// soft ~ undefined reset validpositions; soft = false also reset tests; soft = true only reset the maskset\r\nfunction resetMaskSet(soft) {\r\n  const maskset = this.maskset;\r\n\r\n  maskset.buffer = undefined;\r\n  if (soft !== true) {\r\n    maskset.validPositions = [];\r\n    maskset.p = 0;\r\n  }\r\n  if (soft === false) {\r\n    maskset.tests = {};\r\n    maskset.jitOffset = {};\r\n  }\r\n}\r\n\r\n// tobe put on prototype?\r\nfunction seekNext(pos, newBlock, fuzzy) {\r\n  const inputmask = this;\r\n\r\n  if (fuzzy === undefined) fuzzy = true;\r\n  let position = pos + 1;\r\n  while (\r\n    getTest.call(inputmask, position).match.def !== \"\" &&\r\n    ((newBlock === true &&\r\n      (getTest.call(inputmask, position).match.newBlockMarker !== true ||\r\n        !isMask.call(inputmask, position, undefined, true))) ||\r\n      (newBlock !== true &&\r\n        !isMask.call(inputmask, position, undefined, fuzzy)))\r\n  ) {\r\n    position++;\r\n  }\r\n  return position;\r\n}\r\n\r\n// tobe put on prototype?\r\nfunction seekPrevious(pos, newBlock) {\r\n  const inputmask = this;\r\n\r\n  let position = pos - 1;\r\n  if (pos <= 0) return 0;\r\n\r\n  while (\r\n    position > 0 &&\r\n    ((newBlock === true &&\r\n      (getTest.call(inputmask, position).match.newBlockMarker !== true ||\r\n        !isMask.call(inputmask, position, undefined, true))) ||\r\n      (newBlock !== true && !isMask.call(inputmask, position, undefined, true)))\r\n  ) {\r\n    position--;\r\n  }\r\n  return position;\r\n}\r\n\r\n// tobe put on prototype?\r\nfunction translatePosition(pos) {\r\n  const inputmask = this,\r\n    opts = this.opts,\r\n    el = this.el;\r\n\r\n  if (\r\n    inputmask.isRTL &&\r\n    typeof pos === \"number\" &&\r\n    (!opts.greedy || opts.placeholder !== \"\") &&\r\n    el\r\n  ) {\r\n    pos = inputmask._valueGet().length - pos;\r\n    if (pos < 0) pos = 0;\r\n  }\r\n  return pos;\r\n}\r\n","import { iphone, mobile } from \"./environment\";\r\nimport window from \"./global/window\";\r\nimport {\r\n  applyInputValue,\r\n  checkVal,\r\n  clearOptionalTail,\r\n  HandleNativePlaceholder,\r\n  writeBuffer\r\n} from \"./inputHandling\";\r\nimport { keys } from \"./keycode.js\";\r\nimport {\r\n  caret,\r\n  determineNewCaretPosition,\r\n  getBuffer,\r\n  getBufferTemplate,\r\n  getLastValidPosition,\r\n  isMask,\r\n  resetMaskSet,\r\n  seekNext,\r\n  seekPrevious,\r\n  translatePosition\r\n} from \"./positioning\";\r\nimport { handleRemove, isComplete, isSelection, isValid } from \"./validation\";\r\nimport { getPlaceholder, getTest } from \"./validation-tests\";\r\n\r\nexport { EventHandlers };\r\n\r\nconst EventHandlers = {\r\n  keyEvent: function (e, checkval, writeOut, strict, ndx) {\r\n    const inputmask = this.inputmask,\r\n      opts = inputmask.opts,\r\n      $ = inputmask.dependencyLib,\r\n      maskset = inputmask.maskset,\r\n      input = this,\r\n      $input = $(input),\r\n      c = e.key,\r\n      pos = caret.call(inputmask, input),\r\n      kdResult = opts.onKeyDown.call(\r\n        this,\r\n        e,\r\n        getBuffer.call(inputmask),\r\n        pos,\r\n        opts\r\n      );\r\n    if (kdResult !== undefined) return kdResult;\r\n\r\n    // backspace, delete, and escape get special treatment\r\n    if (\r\n      c === keys.Backspace ||\r\n      c === keys.Delete ||\r\n      (iphone && c === keys.BACKSPACE_SAFARI) ||\r\n      (e.ctrlKey && c === keys.x && !(\"oncut\" in input))\r\n    ) {\r\n      // backspace/delete\r\n      e.preventDefault(); // stop default action but allow propagation\r\n      handleRemove.call(inputmask, input, c, pos);\r\n      writeBuffer(\r\n        input,\r\n        getBuffer.call(inputmask, true),\r\n        maskset.p,\r\n        e,\r\n        input.inputmask._valueGet() !== getBuffer.call(inputmask).join(\"\")\r\n      );\r\n    } else if (c === keys.End || c === keys.PageDown) {\r\n      // when END or PAGE_DOWN pressed set position at lastmatch\r\n      e.preventDefault();\r\n      const caretPos = seekNext.call(\r\n        inputmask,\r\n        getLastValidPosition.call(inputmask)\r\n      );\r\n      caret.call(\r\n        inputmask,\r\n        input,\r\n        e.shiftKey ? pos.begin : caretPos,\r\n        caretPos,\r\n        true\r\n      );\r\n    } else if ((c === keys.Home && !e.shiftKey) || c === keys.PageUp) {\r\n      // Home or page_up\r\n      e.preventDefault();\r\n      caret.call(inputmask, input, 0, e.shiftKey ? pos.begin : 0, true);\r\n    } else if (\r\n      ((opts.undoOnEscape && c === keys.Escape) ||\r\n        (false && c === keys.z && e.ctrlKey)) &&\r\n      e.altKey !== true\r\n    ) {\r\n      // escape && undo && #762\r\n      checkVal(input, true, false, inputmask.undoValue.split(\"\"));\r\n      $input.trigger(\"click\");\r\n    } else if (\r\n      c === keys.Insert &&\r\n      !(e.shiftKey || e.ctrlKey) &&\r\n      inputmask.userOptions.insertMode === undefined\r\n    ) {\r\n      // insert\r\n      if (!isSelection.call(inputmask, pos)) {\r\n        opts.insertMode = !opts.insertMode;\r\n        caret.call(inputmask, input, pos.begin, pos.begin);\r\n      } else opts.insertMode = !opts.insertMode;\r\n    } else if (opts.tabThrough === true && c === keys.Tab) {\r\n      if (e.shiftKey === true) {\r\n        pos.end = seekPrevious.call(inputmask, pos.end, true);\r\n        if (getTest.call(inputmask, pos.end - 1).match.static === true) {\r\n          pos.end--;\r\n        }\r\n        pos.begin = seekPrevious.call(inputmask, pos.end, true);\r\n        if (pos.begin >= 0 && pos.end > 0) {\r\n          e.preventDefault();\r\n          caret.call(inputmask, input, pos.begin, pos.end);\r\n        }\r\n      } else {\r\n        pos.begin = seekNext.call(inputmask, pos.begin, true);\r\n        pos.end = seekNext.call(inputmask, pos.begin, true);\r\n        if (pos.end < maskset.maskLength) pos.end--;\r\n        if (pos.begin <= maskset.maskLength) {\r\n          e.preventDefault();\r\n          caret.call(inputmask, input, pos.begin, pos.end);\r\n        }\r\n      }\r\n    } else if (!e.shiftKey) {\r\n      if (opts.insertModeVisual && opts.insertMode === false) {\r\n        if (c === keys.ArrowRight) {\r\n          setTimeout(function () {\r\n            const caretPos = caret.call(inputmask, input);\r\n            caret.call(inputmask, input, caretPos.begin);\r\n          }, 0);\r\n        } else if (c === keys.ArrowLeft) {\r\n          setTimeout(function () {\r\n            const caretPos = {\r\n              begin: translatePosition.call(\r\n                inputmask,\r\n                input.inputmask.caretPos.begin\r\n              ),\r\n              end: translatePosition.call(\r\n                inputmask,\r\n                input.inputmask.caretPos.end\r\n              )\r\n            };\r\n            if (inputmask.isRTL) {\r\n              caret.call(\r\n                inputmask,\r\n                input,\r\n                caretPos.begin + (caretPos.begin === maskset.maskLength ? 0 : 1)\r\n              );\r\n            } else {\r\n              caret.call(\r\n                inputmask,\r\n                input,\r\n                caretPos.begin - (caretPos.begin === 0 ? 0 : 1)\r\n              );\r\n            }\r\n          }, 0);\r\n        }\r\n      } else {\r\n        inputmask.keyEventHook === undefined || inputmask.keyEventHook(e);\r\n      }\r\n    }\r\n\r\n    inputmask.isComposing = c === keys.Process || c === keys.Unidentified;\r\n\r\n    inputmask.ignorable = c === undefined || c.length > 1;\r\n    return EventHandlers.keypressEvent.call(\r\n      inputmask,\r\n      e,\r\n      checkval,\r\n      writeOut,\r\n      strict,\r\n      ndx\r\n    );\r\n  },\r\n  keypressEvent: function (e, checkval, writeOut, strict, ndx) {\r\n    const inputmask = this.inputmask || this,\r\n      opts = inputmask.opts,\r\n      $ = inputmask.dependencyLib,\r\n      maskset = inputmask.maskset,\r\n      input = inputmask.el,\r\n      $input = $(input);\r\n\r\n    let c = e.key;\r\n\r\n    if (\r\n      checkval !== true &&\r\n      !(e.ctrlKey && e.altKey && !inputmask.ignorable) &&\r\n      (e.ctrlKey || e.metaKey || inputmask.ignorable)\r\n    ) {\r\n      if (c === keys.Enter) {\r\n        if (inputmask.undoValue !== inputmask._valueGet(true)) {\r\n          inputmask.undoValue = inputmask._valueGet(true);\r\n          setTimeout(function () {\r\n            $input.trigger(\"change\");\r\n          }, 0);\r\n        }\r\n      }\r\n    } else if (c) {\r\n      // special treat the decimal separator\r\n      // if ((k === 44 || k === 46) && e.location === 3 && opts.radixPoint !== \"\") k = opts.radixPoint.charCodeAt(0);\r\n      let pos = checkval\r\n          ? {\r\n              begin: ndx,\r\n              end: ndx\r\n            }\r\n          : caret.call(inputmask, input),\r\n        forwardPosition;\r\n\r\n      // allow for character substitution\r\n      if (!checkval) c = opts.substitutes[c] || c;\r\n      maskset.writeOutBuffer = true;\r\n      const valResult = isValid.call(\r\n        inputmask,\r\n        pos,\r\n        c,\r\n        strict,\r\n        undefined,\r\n        undefined,\r\n        undefined,\r\n        checkval\r\n      );\r\n      if (valResult !== false) {\r\n        resetMaskSet.call(inputmask, true);\r\n        forwardPosition =\r\n          valResult.caret !== undefined\r\n            ? valResult.caret\r\n            : seekNext.call(\r\n                inputmask,\r\n                valResult.pos.begin ? valResult.pos.begin : valResult.pos\r\n              );\r\n        maskset.p = forwardPosition; // needed for checkval\r\n      }\r\n\r\n      forwardPosition =\r\n        opts.numericInput && valResult.caret === undefined\r\n          ? seekPrevious.call(inputmask, forwardPosition)\r\n          : forwardPosition;\r\n      if (writeOut !== false) {\r\n        setTimeout(function () {\r\n          opts.onKeyValidation.call(input, c, valResult);\r\n        }, 0);\r\n        if (maskset.writeOutBuffer && valResult !== false) {\r\n          const buffer = getBuffer.call(inputmask);\r\n          writeBuffer(input, buffer, forwardPosition, e, checkval !== true);\r\n        }\r\n      }\r\n\r\n      e.preventDefault();\r\n\r\n      if (checkval) {\r\n        if (valResult !== false) valResult.forwardPosition = forwardPosition;\r\n        return valResult;\r\n      }\r\n    }\r\n  },\r\n  pasteEvent: async function (e) {\r\n    function handlePaste(\r\n      inputmask,\r\n      input,\r\n      inputValue,\r\n      pastedValue,\r\n      onBeforePaste\r\n    ) {\r\n      let caretPos = caret.call(inputmask, input, undefined, undefined, true),\r\n        valueBeforeCaret = inputValue.substr(0, caretPos.begin),\r\n        valueAfterCaret = inputValue.substr(caretPos.end, inputValue.length);\r\n\r\n      if (\r\n        valueBeforeCaret ==\r\n        (inputmask.isRTL\r\n          ? getBufferTemplate.call(inputmask).slice().reverse()\r\n          : getBufferTemplate.call(inputmask)\r\n        )\r\n          .slice(0, caretPos.begin)\r\n          .join(\"\")\r\n      )\r\n        valueBeforeCaret = \"\";\r\n      if (\r\n        valueAfterCaret ==\r\n        (inputmask.isRTL\r\n          ? getBufferTemplate.call(inputmask).slice().reverse()\r\n          : getBufferTemplate.call(inputmask)\r\n        )\r\n          .slice(caretPos.end)\r\n          .join(\"\")\r\n      )\r\n        valueAfterCaret = \"\";\r\n\r\n      pastedValue = valueBeforeCaret + pastedValue + valueAfterCaret;\r\n      if (inputmask.isRTL && opts.numericInput !== true) {\r\n        pastedValue = pastedValue.split(\"\");\r\n        for (const c of getBufferTemplate.call(inputmask)) {\r\n          if (pastedValue[0] === c) pastedValue.shift();\r\n        }\r\n        pastedValue = pastedValue.reverse().join(\"\");\r\n      }\r\n\r\n      let pasteValue = pastedValue;\r\n      if (typeof onBeforePaste === \"function\") {\r\n        pasteValue = onBeforePaste.call(inputmask, pasteValue, opts);\r\n        if (pasteValue === false) {\r\n          return false;\r\n        }\r\n        if (!pasteValue) {\r\n          pasteValue = inputValue;\r\n        }\r\n      }\r\n      checkVal(input, true, false, pasteValue.toString().split(\"\"), e);\r\n    }\r\n\r\n    const input = this,\r\n      inputmask = this.inputmask,\r\n      opts = inputmask.opts;\r\n    let inputValue = inputmask._valueGet(true),\r\n      pastedValue;\r\n\r\n    inputmask.skipInputEvent = true;\r\n    if (e.clipboardData && e.clipboardData.getData) {\r\n      pastedValue = e.clipboardData.getData(\"text/plain\");\r\n    } else if (window.clipboardData && window.clipboardData.getData) {\r\n      // IE\r\n      pastedValue = window.clipboardData.getData(\"Text\");\r\n    }\r\n    handlePaste(inputmask, input, inputValue, pastedValue, opts.onBeforePaste);\r\n    e.preventDefault();\r\n  },\r\n  inputFallBackEvent: function (e) {\r\n    // fallback when keypress is not triggered\r\n    const inputmask = this.inputmask,\r\n      opts = inputmask.opts,\r\n      $ = inputmask.dependencyLib;\r\n\r\n    // console.log(e.inputType);\r\n\r\n    function analyseChanges(inputValue, buffer, caretPos) {\r\n      let frontPart = inputValue.substr(0, caretPos.begin).split(\"\"),\r\n        backPart = inputValue.substr(caretPos.begin).split(\"\"),\r\n        frontBufferPart = buffer.substr(0, caretPos.begin).split(\"\"),\r\n        backBufferPart = buffer.substr(caretPos.begin).split(\"\"),\r\n        fpl =\r\n          frontPart.length >= frontBufferPart.length\r\n            ? frontPart.length\r\n            : frontBufferPart.length,\r\n        bpl =\r\n          backPart.length >= backBufferPart.length\r\n            ? backPart.length\r\n            : backBufferPart.length,\r\n        bl,\r\n        i,\r\n        action = \"\",\r\n        data = [],\r\n        marker = \"~\",\r\n        placeholder;\r\n\r\n      // align buffers\r\n      while (frontPart.length < fpl) frontPart.push(marker);\r\n      while (frontBufferPart.length < fpl) frontBufferPart.push(marker);\r\n      while (backPart.length < bpl) backPart.unshift(marker);\r\n      while (backBufferPart.length < bpl) backBufferPart.unshift(marker);\r\n\r\n      const newBuffer = frontPart.concat(backPart),\r\n        oldBuffer = frontBufferPart.concat(backBufferPart);\r\n\r\n      // console.log(\"N \" + newBuffer);\r\n      // console.log(\"O \" + oldBuffer);\r\n\r\n      for (i = 0, bl = newBuffer.length; i < bl; i++) {\r\n        placeholder = getPlaceholder.call(\r\n          inputmask,\r\n          translatePosition.call(inputmask, i)\r\n        );\r\n        switch (action) {\r\n          case \"insertText\":\r\n            if (\r\n              oldBuffer[i - 1] === newBuffer[i] &&\r\n              caretPos.begin == newBuffer.length - 1\r\n            ) {\r\n              data.push(newBuffer[i]);\r\n            }\r\n            i = bl;\r\n            break;\r\n          case \"insertReplacementText\":\r\n            if (newBuffer[i] === marker) {\r\n              // extend selection\r\n              caretPos.end++;\r\n            } else {\r\n              // breakout loop\r\n              i = bl;\r\n            }\r\n            break;\r\n          case \"deleteContentBackward\":\r\n            if (newBuffer[i] === marker) {\r\n              caretPos.end++;\r\n            } else {\r\n              // breakout loop\r\n              i = bl;\r\n            }\r\n            break;\r\n          default:\r\n            if (newBuffer[i] !== oldBuffer[i]) {\r\n              if (\r\n                (newBuffer[i + 1] === marker ||\r\n                  newBuffer[i + 1] === placeholder ||\r\n                  newBuffer[i + 1] === undefined) &&\r\n                ((oldBuffer[i] === placeholder &&\r\n                  oldBuffer[i + 1] === marker) ||\r\n                  oldBuffer[i] === marker)\r\n              ) {\r\n                // basic insert\r\n                action = \"insertText\";\r\n                data.push(newBuffer[i]);\r\n                caretPos.begin--;\r\n                caretPos.end--;\r\n              } else if (\r\n                oldBuffer[i + 1] === marker &&\r\n                oldBuffer[i] === newBuffer[i + 1]\r\n              ) {\r\n                // insert between\r\n                action = \"insertText\";\r\n                data.push(newBuffer[i]);\r\n                caretPos.begin--;\r\n                caretPos.end--;\r\n              } else if (\r\n                newBuffer[i] !== placeholder &&\r\n                newBuffer[i] !== marker &&\r\n                (newBuffer[i + 1] === marker ||\r\n                  (oldBuffer[i] !== newBuffer[i] &&\r\n                    oldBuffer[i + 1] ===\r\n                      newBuffer[i + 1])) /* single char replacement */\r\n              ) {\r\n                // replace selection\r\n                action = \"insertReplacementText\";\r\n                data.push(newBuffer[i]);\r\n                caretPos.begin--;\r\n              } else if (newBuffer[i] === marker) {\r\n                // delete~backspace\r\n                action = \"deleteContentBackward\";\r\n                if (\r\n                  isMask.call(\r\n                    inputmask,\r\n                    translatePosition.call(inputmask, i),\r\n                    true\r\n                  ) ||\r\n                  oldBuffer[i] === opts.radixPoint\r\n                )\r\n                  caretPos.end++;\r\n              } else {\r\n                i = bl;\r\n              }\r\n            }\r\n            break;\r\n        }\r\n      }\r\n\r\n      return {\r\n        action,\r\n        data,\r\n        caret: caretPos\r\n      };\r\n    }\r\n\r\n    let input = this,\r\n      inputValue = input.inputmask._valueGet(true),\r\n      buffer = (\r\n        inputmask.isRTL\r\n          ? getBuffer.call(inputmask).slice().reverse()\r\n          : getBuffer.call(inputmask)\r\n      ).join(\"\"),\r\n      caretPos = caret.call(inputmask, input, undefined, undefined, true),\r\n      changes;\r\n\r\n    if (buffer !== inputValue) {\r\n      changes = analyseChanges(inputValue, buffer, caretPos);\r\n      if (input.getRootNode().activeElement !== input) {\r\n        input.focus();\r\n      }\r\n      writeBuffer(input, getBuffer.call(inputmask));\r\n      caret.call(inputmask, input, caretPos.begin, caretPos.end, true);\r\n\r\n      // Japanese IME hack #2662\r\n      if (\r\n        !mobile &&\r\n        inputmask.skipNextInsert &&\r\n        e.inputType === \"insertText\" &&\r\n        changes.action === \"insertText\" &&\r\n        inputmask.isComposing\r\n      ) {\r\n        return false;\r\n      }\r\n      if (\r\n        e.inputType === \"insertCompositionText\" &&\r\n        changes.action === \"insertText\" &&\r\n        inputmask.isComposing\r\n      ) {\r\n        inputmask.skipNextInsert = true;\r\n      } else {\r\n        inputmask.skipNextInsert = false;\r\n      }\r\n\r\n      switch (changes.action) {\r\n        case \"insertText\":\r\n        case \"insertReplacementText\":\r\n          changes.data.forEach(function (entry, ndx) {\r\n            const keypress = new $.Event(\"keypress\");\r\n            keypress.key = entry;\r\n            inputmask.ignorable = false; // make sure ignorable is ignored ;-)\r\n            EventHandlers.keypressEvent.call(input, keypress);\r\n          });\r\n          setTimeout(function () {\r\n            // #2195 trigger keyup to help some other plugins to track changes\r\n            inputmask.$el.trigger(\"keyup\");\r\n          }, 0);\r\n          break;\r\n        case \"deleteContentBackward\":\r\n          var keydown = new $.Event(\"keydown\");\r\n          keydown.key = keys.Backspace;\r\n          EventHandlers.keyEvent.call(input, keydown);\r\n          break;\r\n        default:\r\n          applyInputValue(input, inputValue);\r\n          caret.call(inputmask, input, caretPos.begin, caretPos.end, true);\r\n          break;\r\n      }\r\n\r\n      e.preventDefault();\r\n    }\r\n  },\r\n  setValueEvent: function (e) {\r\n    const inputmask = this.inputmask,\r\n      $ = inputmask.dependencyLib;\r\n    let input = this,\r\n      value = e && e.detail ? e.detail[0] : arguments[1];\r\n\r\n    if (value === undefined) {\r\n      value = input.inputmask._valueGet(true);\r\n    }\r\n\r\n    applyInputValue(\r\n      input,\r\n      value,\r\n      new $.Event(\"input\"),\r\n      (e && e.detail ? e.detail[0] : arguments[1]) !== undefined\r\n    );\r\n\r\n    if ((e.detail && e.detail[1] !== undefined) || arguments[2] !== undefined) {\r\n      caret.call(inputmask, input, e.detail ? e.detail[1] : arguments[2]);\r\n    }\r\n  },\r\n  focusEvent: function (e) {\r\n    const inputmask = this.inputmask,\r\n      opts = inputmask.opts,\r\n      input = this,\r\n      nptValue = inputmask && inputmask._valueGet();\r\n\r\n    if (opts.showMaskOnFocus) {\r\n      if (nptValue !== getBuffer.call(inputmask).join(\"\")) {\r\n        writeBuffer(\r\n          input,\r\n          getBuffer.call(inputmask),\r\n          seekNext.call(inputmask, getLastValidPosition.call(inputmask))\r\n        );\r\n      } /* else if (mouseEnter === false) { //only executed on focus without mouseenter\r\n\t\t\t\t\tcaret(input, seekNext(getLastValidPosition()));\r\n\t\t\t\t} */\r\n    }\r\n    if (\r\n      opts.positionCaretOnTab === true &&\r\n      inputmask.mouseEnter === false &&\r\n      (!isComplete.call(inputmask, getBuffer.call(inputmask)) ||\r\n        getLastValidPosition.call(inputmask) === -1)\r\n    ) {\r\n      EventHandlers.clickEvent.apply(input, [e, true]);\r\n    }\r\n    inputmask.undoValue = inputmask && inputmask._valueGet(true);\r\n  },\r\n  invalidEvent: function (e) {\r\n    this.inputmask.validationEvent = true;\r\n  },\r\n  mouseleaveEvent: function () {\r\n    const inputmask = this.inputmask,\r\n      opts = inputmask.opts,\r\n      input = this;\r\n    inputmask.mouseEnter = false;\r\n    if (\r\n      opts.clearMaskOnLostFocus &&\r\n      input.getRootNode().activeElement !== input\r\n    ) {\r\n      HandleNativePlaceholder(input, inputmask.originalPlaceholder);\r\n    }\r\n  },\r\n  clickEvent: function (e, tabbed) {\r\n    const inputmask = this.inputmask;\r\n    inputmask.clicked++;\r\n\r\n    const input = this;\r\n    if (input.getRootNode().activeElement === input) {\r\n      const newCaretPosition = determineNewCaretPosition.call(\r\n        inputmask,\r\n        caret.call(inputmask, input),\r\n        tabbed\r\n      );\r\n      if (newCaretPosition !== undefined) {\r\n        caret.call(inputmask, input, newCaretPosition);\r\n      }\r\n    }\r\n  },\r\n  cutEvent: function (e) {\r\n    const inputmask = this.inputmask,\r\n      maskset = inputmask.maskset,\r\n      input = this,\r\n      pos = caret.call(inputmask, input),\r\n      // correct clipboardData\r\n      clipData = inputmask.isRTL\r\n        ? getBuffer.call(inputmask).slice(pos.end, pos.begin)\r\n        : getBuffer.call(inputmask).slice(pos.begin, pos.end),\r\n      clipDataText = inputmask.isRTL\r\n        ? clipData.reverse().join(\"\")\r\n        : clipData.join(\"\");\r\n    if (window.navigator && window.navigator.clipboard)\r\n      window.navigator.clipboard.writeText(clipDataText);\r\n    else if (window.clipboardData && window.clipboardData.getData) {\r\n      // IE\r\n      window.clipboardData.setData(\"Text\", clipDataText);\r\n    }\r\n    handleRemove.call(inputmask, input, keys.Delete, pos);\r\n    writeBuffer(\r\n      input,\r\n      getBuffer.call(inputmask),\r\n      maskset.p,\r\n      e,\r\n      inputmask.undoValue !== inputmask._valueGet(true)\r\n    );\r\n  },\r\n  blurEvent: function (e) {\r\n    const inputmask = this.inputmask,\r\n      opts = inputmask.opts,\r\n      $ = inputmask.dependencyLib;\r\n    inputmask.clicked = 0;\r\n\r\n    const $input = $(this),\r\n      input = this;\r\n    if (input.inputmask) {\r\n      HandleNativePlaceholder(input, inputmask.originalPlaceholder);\r\n      let nptValue = input.inputmask._valueGet(),\r\n        buffer = getBuffer.call(inputmask).slice();\r\n\r\n      if (nptValue !== \"\") {\r\n        if (opts.clearMaskOnLostFocus) {\r\n          if (\r\n            getLastValidPosition.call(inputmask) === -1 &&\r\n            nptValue === getBufferTemplate.call(inputmask).join(\"\")\r\n          ) {\r\n            buffer = [];\r\n          } else {\r\n            // clearout optional tail of the mask\r\n            clearOptionalTail.call(inputmask, buffer);\r\n          }\r\n        }\r\n        if (isComplete.call(inputmask, buffer) === false) {\r\n          setTimeout(function () {\r\n            $input.trigger(\"incomplete\");\r\n          }, 0);\r\n          if (opts.clearIncomplete) {\r\n            resetMaskSet.call(inputmask, false);\r\n            if (opts.clearMaskOnLostFocus) {\r\n              buffer = [];\r\n            } else {\r\n              buffer = getBufferTemplate.call(inputmask).slice();\r\n            }\r\n          }\r\n        }\r\n\r\n        writeBuffer(input, buffer, undefined, e);\r\n      }\r\n\r\n      nptValue = inputmask._valueGet(true);\r\n      if (inputmask.undoValue !== nptValue) {\r\n        const bufferTemplateStr = (\r\n          inputmask.isRTL\r\n            ? getBufferTemplate.call(inputmask).slice().reverse()\r\n            : getBufferTemplate.call(inputmask)\r\n        ).join(\"\");\r\n\r\n        if (\r\n          nptValue !== \"\" ||\r\n          inputmask.undoValue !== bufferTemplateStr ||\r\n          (inputmask.undoValue === bufferTemplateStr &&\r\n            inputmask.maskset.validPositions.length > 0)\r\n        ) {\r\n          inputmask.undoValue = nptValue;\r\n          $input.trigger(\"change\");\r\n        }\r\n      }\r\n    }\r\n  },\r\n  mouseenterEvent: function () {\r\n    const inputmask = this.inputmask,\r\n      { showMaskOnHover } = inputmask.opts,\r\n      input = this;\r\n    inputmask.mouseEnter = true;\r\n    if (input.getRootNode().activeElement !== input) {\r\n      const bufferTemplate = (\r\n        inputmask.isRTL\r\n          ? getBufferTemplate.call(inputmask).slice().reverse()\r\n          : getBufferTemplate.call(inputmask)\r\n      ).join(\"\");\r\n      if (showMaskOnHover) {\r\n        HandleNativePlaceholder(input, bufferTemplate);\r\n      }\r\n    }\r\n  },\r\n  submitEvent: function () {\r\n    // trigger change on submit if any\r\n    const inputmask = this.inputmask,\r\n      opts = inputmask.opts;\r\n\r\n    if (inputmask.undoValue !== inputmask._valueGet(true)) {\r\n      inputmask.$el.trigger(\"change\");\r\n    }\r\n    if (\r\n      /* opts.clearMaskOnLostFocus && */ getLastValidPosition.call(\r\n        inputmask\r\n      ) === -1 &&\r\n      inputmask._valueGet &&\r\n      inputmask._valueGet() === getBufferTemplate.call(inputmask).join(\"\")\r\n    ) {\r\n      inputmask._valueSet(\"\"); // clear masktemplete on submit and still has focus\r\n    }\r\n    if (\r\n      opts.clearIncomplete &&\r\n      isComplete.call(inputmask, getBuffer.call(inputmask)) === false\r\n    ) {\r\n      inputmask._valueSet(\"\");\r\n    }\r\n    if (opts.removeMaskOnSubmit) {\r\n      inputmask._valueSet(inputmask.unmaskedvalue(), true);\r\n      setTimeout(function () {\r\n        writeBuffer(inputmask.el, getBuffer.call(inputmask));\r\n      }, 0);\r\n    }\r\n  },\r\n  resetEvent: function () {\r\n    const inputmask = this.inputmask;\r\n\r\n    inputmask.refreshValue = true; // indicate a forced refresh when there is a call to the value before leaving the triggering event fn\r\n    setTimeout(function () {\r\n      applyInputValue(inputmask.el, inputmask._valueGet(true));\r\n    }, 0);\r\n  }\r\n};\r\n","import { ie } from \"./environment\";\r\nimport { EventHandlers } from \"./eventhandlers\";\r\nimport Inputmask from \"./inputmask.js\";\r\nimport { keys } from \"./keycode.js\";\r\nimport {\r\n  caret,\r\n  determineNewCaretPosition,\r\n  getBuffer,\r\n  getBufferTemplate,\r\n  getLastValidPosition,\r\n  isMask,\r\n  resetMaskSet,\r\n  seekNext\r\n} from \"./positioning\";\r\nimport { isComplete, refreshFromBuffer } from \"./validation\";\r\nimport { getMaskTemplate, getPlaceholder, getTest } from \"./validation-tests\";\r\n\r\nexport {\r\n  applyInputValue,\r\n  clearOptionalTail,\r\n  checkVal,\r\n  HandleNativePlaceholder,\r\n  unmaskedvalue,\r\n  writeBuffer\r\n};\r\n\r\nfunction applyInputValue(input, value, initialEvent, strict) {\r\n  const inputmask = input ? input.inputmask : this,\r\n    opts = inputmask.opts;\r\n\r\n  input.inputmask.refreshValue = false;\r\n  if (strict !== true && typeof opts.onBeforeMask === \"function\")\r\n    value = opts.onBeforeMask.call(inputmask, value, opts) || value;\r\n  value = (value || \"\").toString().split(\"\");\r\n  checkVal(input, true, false, value, initialEvent);\r\n  inputmask.undoValue = inputmask._valueGet(true);\r\n  if (\r\n    (opts.clearMaskOnLostFocus || opts.clearIncomplete) &&\r\n    input.inputmask._valueGet() ===\r\n      getBufferTemplate.call(inputmask).join(\"\") &&\r\n    getLastValidPosition.call(inputmask) === -1\r\n  ) {\r\n    input.inputmask._valueSet(\"\");\r\n  }\r\n}\r\n\r\n// todo put on prototype?\r\nfunction clearOptionalTail(buffer) {\r\n  const inputmask = this;\r\n\r\n  buffer.length = 0;\r\n  let template = getMaskTemplate.call(\r\n      inputmask,\r\n      true,\r\n      0,\r\n      true,\r\n      undefined,\r\n      true\r\n    ),\r\n    lmnt;\r\n  while ((lmnt = template.shift()) !== undefined) buffer.push(lmnt);\r\n  return buffer;\r\n}\r\n\r\nfunction checkVal(input, writeOut, strict, nptvl, initiatingEvent) {\r\n  const inputmask = input ? input.inputmask : this,\r\n    maskset = inputmask.maskset,\r\n    opts = inputmask.opts,\r\n    $ = inputmask.dependencyLib;\r\n\r\n  let inputValue = nptvl.slice(),\r\n    charCodes = \"\",\r\n    initialNdx = -1,\r\n    result,\r\n    skipOptionalPartCharacter = opts.skipOptionalPartCharacter;\r\n  opts.skipOptionalPartCharacter = \"\"; // see issue #2311\r\n\r\n  function isTemplateMatch(ndx, charCodes) {\r\n    let targetTemplate = getMaskTemplate\r\n        .call(inputmask, true, 0)\r\n        .slice(ndx, seekNext.call(inputmask, ndx, false, false))\r\n        .join(\"\")\r\n        .replace(/'/g, \"\"),\r\n      charCodeNdx = targetTemplate.indexOf(charCodes);\r\n    // strip spaces from targetTemplate\r\n    while (charCodeNdx > 0 && targetTemplate[charCodeNdx - 1] === \" \")\r\n      charCodeNdx--;\r\n\r\n    const match =\r\n      charCodeNdx === 0 &&\r\n      !isMask.call(inputmask, ndx) &&\r\n      (getTest.call(inputmask, ndx).match.nativeDef === charCodes.charAt(0) ||\r\n        (getTest.call(inputmask, ndx).match.static === true &&\r\n          getTest.call(inputmask, ndx).match.nativeDef ===\r\n            \"'\" + charCodes.charAt(0)) ||\r\n        (getTest.call(inputmask, ndx).match.nativeDef === \" \" &&\r\n          (getTest.call(inputmask, ndx + 1).match.nativeDef ===\r\n            charCodes.charAt(0) ||\r\n            (getTest.call(inputmask, ndx + 1).match.static === true &&\r\n              getTest.call(inputmask, ndx + 1).match.nativeDef ===\r\n                \"'\" + charCodes.charAt(0)))));\r\n\r\n    if (\r\n      !match &&\r\n      charCodeNdx > 0 &&\r\n      !isMask.call(inputmask, ndx, false, true)\r\n    ) {\r\n      const nextPos = seekNext.call(inputmask, ndx);\r\n      if (inputmask.caretPos.begin < nextPos) {\r\n        inputmask.caretPos = { begin: nextPos };\r\n      }\r\n    }\r\n    return match;\r\n  }\r\n\r\n  resetMaskSet.call(inputmask, false);\r\n  inputmask.clicked = 0; // reset click counter to correctly determine the caretposition in checkval\r\n  initialNdx = opts.radixPoint\r\n    ? determineNewCaretPosition.call(\r\n        inputmask,\r\n        {\r\n          begin: 0,\r\n          end: 0\r\n        },\r\n        false,\r\n        opts.__financeInput === false ? \"radixFocus\" : undefined\r\n      ).begin\r\n    : 0;\r\n  maskset.p = initialNdx;\r\n  inputmask.caretPos = { begin: initialNdx };\r\n\r\n  let staticMatches = [],\r\n    prevCaretPos = inputmask.caretPos;\r\n  inputValue.forEach(function (charCode, ndx) {\r\n    if (charCode !== undefined) {\r\n      // inputfallback strips some elements out of the inputarray.  $.each logically presents them as undefined\r\n      /* if (maskset.validPositions[ndx] === undefined && inputValue[ndx] === getPlaceholder.call(inputmask, ndx) && isMask.call(inputmask, ndx, true) &&\r\n\t\t\t\tisValid.call(inputmask, ndx, inputValue[ndx], true, undefined, true, true) === false) {\r\n\t\t\t\tinputmask.caretPos.begin++;\r\n\t\t\t} else */\r\n      // console.log(\"caret \" + inputmask.caretPos.begin);\r\n      const keypress = new $.Event(\"_checkval\");\r\n      keypress.key = charCode;\r\n      charCodes += charCode;\r\n      const lvp = getLastValidPosition.call(inputmask, undefined, true);\r\n      if (!isTemplateMatch(initialNdx, charCodes)) {\r\n        result = EventHandlers.keypressEvent.call(\r\n          inputmask,\r\n          keypress,\r\n          true,\r\n          false,\r\n          strict,\r\n          inputmask.caretPos.begin\r\n        );\r\n\r\n        if (result) {\r\n          initialNdx = inputmask.caretPos.begin + 1;\r\n          charCodes = \"\";\r\n        }\r\n      } else {\r\n        result =\r\n          getTest.call(inputmask, ndx).match.static === true\r\n            ? EventHandlers.keypressEvent.call(\r\n                inputmask,\r\n                keypress,\r\n                true,\r\n                false,\r\n                strict,\r\n                lvp + 1\r\n              )\r\n            : false;\r\n      }\r\n      if (result) {\r\n        if (\r\n          result.pos !== undefined &&\r\n          maskset.validPositions[result.pos] &&\r\n          maskset.validPositions[result.pos].match.static === true &&\r\n          maskset.validPositions[result.pos].alternation === undefined\r\n        ) {\r\n          staticMatches.push(result.pos);\r\n          if (!inputmask.isRTL) {\r\n            result.forwardPosition = result.pos + 1;\r\n          }\r\n        }\r\n        writeBuffer.call(\r\n          inputmask,\r\n          undefined,\r\n          getBuffer.call(inputmask),\r\n          result.forwardPosition,\r\n          keypress,\r\n          false\r\n        );\r\n        inputmask.caretPos = {\r\n          begin: result.forwardPosition,\r\n          end: result.forwardPosition\r\n        };\r\n        prevCaretPos = inputmask.caretPos;\r\n      } else {\r\n        if (\r\n          maskset.validPositions[ndx] === undefined &&\r\n          inputValue[ndx] === getPlaceholder.call(inputmask, ndx) &&\r\n          isMask.call(inputmask, ndx, true)\r\n        ) {\r\n          inputmask.caretPos.begin++;\r\n        } else inputmask.caretPos = prevCaretPos; // restore the caret position from before the failed validation\r\n      }\r\n    }\r\n  });\r\n  if (staticMatches.length > 0) {\r\n    let sndx,\r\n      validPos,\r\n      nextValid = seekNext.call(inputmask, -1, undefined, false);\r\n    if (\r\n      (!isComplete.call(inputmask, getBuffer.call(inputmask)) &&\r\n        staticMatches.length <= nextValid) ||\r\n      (isComplete.call(inputmask, getBuffer.call(inputmask)) &&\r\n        staticMatches.length > 0 &&\r\n        staticMatches.length !== nextValid &&\r\n        staticMatches[0] === 0)\r\n    ) {\r\n      // should check if is sequence starting from 0\r\n      let nextSndx = nextValid;\r\n      while ((sndx = staticMatches.shift()) !== undefined) {\r\n        if (sndx < nextSndx) {\r\n          const keypress = new $.Event(\"_checkval\");\r\n          validPos = maskset.validPositions[sndx];\r\n          validPos.generatedInput = true;\r\n          keypress.key = validPos.input;\r\n          result = EventHandlers.keypressEvent.call(\r\n            inputmask,\r\n            keypress,\r\n            true,\r\n            false,\r\n            strict,\r\n            nextSndx\r\n          );\r\n          if (\r\n            result &&\r\n            result.pos !== undefined &&\r\n            result.pos !== sndx &&\r\n            maskset.validPositions[result.pos] &&\r\n            maskset.validPositions[result.pos].match.static === true\r\n          ) {\r\n            staticMatches.push(result.pos);\r\n          } else if (!result) break;\r\n          nextSndx++;\r\n        }\r\n      }\r\n    } else {\r\n      // delete all free statics\r\n      while ((sndx = staticMatches.pop())) {\r\n        validPos = maskset.validPositions[sndx];\r\n        if (validPos && maskset.validPositions[sndx + 1] === undefined) {\r\n          delete maskset.validPositions[sndx];\r\n        }\r\n      }\r\n    }\r\n  }\r\n  if (writeOut) {\r\n    writeBuffer.call(\r\n      inputmask,\r\n      input,\r\n      getBuffer.call(inputmask),\r\n      result ? result.forwardPosition : inputmask.caretPos.begin,\r\n      initiatingEvent || new $.Event(\"checkval\"),\r\n      initiatingEvent &&\r\n        ((initiatingEvent.type === \"input\" &&\r\n          inputmask.undoValue !== getBuffer.call(inputmask).join(\"\")) ||\r\n          initiatingEvent.type === \"paste\")\r\n    );\r\n    // for (var vndx in maskset.validPositions) {\r\n    // \tif (maskset.validPositions[vndx].match.generated !== true) { //only remove non forced generated\r\n    // \t\tdelete maskset.validPositions[vndx].generatedInput; //clear generated markings ~ consider initializing with a  value as fully typed\r\n    // \t}\r\n    // }\r\n  }\r\n  opts.skipOptionalPartCharacter = skipOptionalPartCharacter;\r\n}\r\n\r\nfunction HandleNativePlaceholder(npt, value) {\r\n  const inputmask = npt ? npt.inputmask : this;\r\n\r\n  if (ie) {\r\n    if (\r\n      npt.inputmask._valueGet() !== value &&\r\n      (npt.placeholder !== value || npt.placeholder === \"\")\r\n    ) {\r\n      let buffer = getBuffer.call(inputmask).slice(),\r\n        nptValue = npt.inputmask._valueGet();\r\n      if (nptValue !== value) {\r\n        const lvp = getLastValidPosition.call(inputmask);\r\n        if (\r\n          lvp === -1 &&\r\n          nptValue === getBufferTemplate.call(inputmask).join(\"\")\r\n        ) {\r\n          buffer = [];\r\n        } else if (lvp !== -1) {\r\n          // clearout optional tail of the mask\r\n          clearOptionalTail.call(inputmask, buffer);\r\n        }\r\n        writeBuffer(npt, buffer);\r\n      }\r\n    }\r\n  } else if (npt.placeholder !== value) {\r\n    npt.placeholder = value;\r\n    if (npt.placeholder === \"\") npt.removeAttribute(\"placeholder\");\r\n  }\r\n}\r\n\r\nfunction unmaskedvalue(input) {\r\n  const inputmask = input ? input.inputmask : this,\r\n    opts = inputmask.opts,\r\n    maskset = inputmask.maskset;\r\n\r\n  if (input) {\r\n    if (input.inputmask === undefined) {\r\n      return input.value;\r\n    }\r\n    if (input.inputmask && input.inputmask.refreshValue) {\r\n      // forced refresh from the value form.reset\r\n      applyInputValue(input, input.inputmask._valueGet(true));\r\n    }\r\n  }\r\n  const umValue = [],\r\n    vps = maskset.validPositions;\r\n  for (let pndx = 0, vpl = vps.length; pndx < vpl; pndx++) {\r\n    if (\r\n      vps[pndx] &&\r\n      vps[pndx].match &&\r\n      (vps[pndx].match.static != true ||\r\n        (opts.keepStatic !== true &&\r\n          Array.isArray(maskset.metadata) &&\r\n          vps[pndx].generatedInput !== true))\r\n    ) {\r\n      // only include non generated input with multiple masks (check on metadata) and without keepStatic true\r\n      umValue.push(vps[pndx].input);\r\n    }\r\n  }\r\n  let unmaskedValue =\r\n    umValue.length === 0\r\n      ? \"\"\r\n      : (inputmask.isRTL ? umValue.reverse() : umValue).join(\"\");\r\n  if (typeof opts.onUnMask === \"function\") {\r\n    const bufferValue = (\r\n      inputmask.isRTL\r\n        ? getBuffer.call(inputmask).slice().reverse()\r\n        : getBuffer.call(inputmask)\r\n    ).join(\"\");\r\n    unmaskedValue = opts.onUnMask.call(\r\n      inputmask,\r\n      bufferValue,\r\n      unmaskedValue,\r\n      opts\r\n    );\r\n  }\r\n\r\n  if (opts.outputMask && unmaskedValue.length > 0) {\r\n    return Inputmask.format(unmaskedValue, {\r\n      ...opts,\r\n      mask: opts.outputMask,\r\n      alias: null\r\n    });\r\n  }\r\n\r\n  return unmaskedValue;\r\n}\r\n\r\nfunction writeBuffer(input, buffer, caretPos, event, triggerEvents) {\r\n  const inputmask = input ? input.inputmask : this,\r\n    opts = inputmask.opts,\r\n    $ = inputmask.dependencyLib;\r\n\r\n  if (event && typeof opts.onBeforeWrite === \"function\") {\r\n    //    buffer = buffer.slice(); //prevent uncontrolled manipulation of the internal buffer\r\n    const result = opts.onBeforeWrite.call(\r\n      inputmask,\r\n      event,\r\n      buffer,\r\n      caretPos,\r\n      opts\r\n    );\r\n    if (result) {\r\n      if (result.refreshFromBuffer) {\r\n        const refresh = result.refreshFromBuffer;\r\n        refreshFromBuffer.call(\r\n          inputmask,\r\n          refresh === true ? refresh : refresh.start,\r\n          refresh.end,\r\n          result.buffer || buffer\r\n        );\r\n        buffer = getBuffer.call(inputmask, true);\r\n      }\r\n      if (caretPos !== undefined)\r\n        caretPos = result.caret !== undefined ? result.caret : caretPos;\r\n    }\r\n  }\r\n  if (input !== undefined) {\r\n    input.inputmask._valueSet(buffer.join(\"\"));\r\n    if (\r\n      caretPos !== undefined &&\r\n      (event === undefined || event.type !== \"blur\")\r\n    ) {\r\n      // console.log(caretPos);\r\n      caret.call(\r\n        inputmask,\r\n        input,\r\n        caretPos,\r\n        undefined,\r\n        undefined,\r\n        event !== undefined &&\r\n          event.type === \"keydown\" &&\r\n          (event.key === keys.Delete || event.key === keys.Backspace)\r\n      );\r\n    }\r\n    input.inputmask.writeBufferHook === undefined ||\r\n      input.inputmask.writeBufferHook(caretPos);\r\n    if (triggerEvents === true) {\r\n      const $input = $(input),\r\n        nptVal = input.inputmask._valueGet();\r\n      input.inputmask.skipInputEvent = true;\r\n      $input.trigger(\"input\");\r\n      setTimeout(function () {\r\n        // timeout needed for IE\r\n        if (nptVal === getBufferTemplate.call(inputmask).join(\"\")) {\r\n          $input.trigger(\"cleared\");\r\n        } else if (isComplete.call(inputmask, buffer) === true) {\r\n          $input.trigger(\"complete\");\r\n        }\r\n      }, 0);\r\n    }\r\n  }\r\n}\r\n","import { HandleNativePlaceholder } from \"./inputHandling\";\r\nimport Inputmask from \"./inputmask\";\r\nimport { keys } from \"./keycode.js\";\r\nimport { getBufferTemplate } from \"./positioning\";\r\n\r\nexport { EventRuler };\r\n\r\nconst EventRuler = {\r\n  on: function (input, eventName, eventHandler) {\r\n    const $ = input.inputmask.dependencyLib;\r\n\r\n    let ev = function (e) {\r\n      if (e.originalEvent) {\r\n        e = e.originalEvent || e; // get original event from jquery event\r\n        arguments[0] = e;\r\n      }\r\n      // console.log(e.type);\r\n      const that = this,\r\n        inputmask = that.inputmask,\r\n        opts = inputmask ? inputmask.opts : undefined;\r\n      let args;\r\n      if (inputmask === undefined && this.nodeName !== \"FORM\") {\r\n        // happens when cloning an object with jquery.clone\r\n        const imOpts = $.data(that, \"_inputmask_opts\");\r\n        $(that).off(); // unbind all events\r\n        if (imOpts) {\r\n          new Inputmask(imOpts).mask(that);\r\n        }\r\n      } else if (\r\n        ![\"submit\", \"reset\", \"setvalue\"].includes(e.type) &&\r\n        this.nodeName !== \"FORM\" &&\r\n        (that.disabled ||\r\n          (that.readOnly &&\r\n            !(\r\n              (e.type === \"keydown\" && e.ctrlKey && e.key === keys.c) ||\r\n              (opts.tabThrough === false && e.key === keys.Tab)\r\n            )))\r\n      ) {\r\n        e.preventDefault();\r\n      } else {\r\n        switch (e.type) {\r\n          case \"input\":\r\n            if (inputmask.skipInputEvent === true) {\r\n              inputmask.skipInputEvent = false;\r\n              return e.preventDefault();\r\n            }\r\n\r\n            // #2855\r\n            // Prevent duplicate input processing between keyEvent and inputFallBackEvent\r\n            // This fixes Chinese IME duplication issue on Safari where both events fire for the same input\r\n            // if (\r\n            //   inputmask.lastInputEvent &&\r\n            //   Date.now() - inputmask.lastInputEvent.time < 10 &&\r\n            //   inputmask.lastInputEvent.data === e.data\r\n            // ) {\r\n            //   return;\r\n            // }\r\n            // Mark input as processed to prevent duplicate handling by keyEvent\r\n            // This fixes Chinese IME duplication issue on Safari #2855\r\n            inputmask.lastInputEvent = {\r\n              time: Date.now(),\r\n              data: e.data\r\n            };\r\n\r\n            // if (mobile) { //this causes problem see #2220\r\n            // \targs = arguments;\r\n            // \tsetTimeout(function () { //needed for caret selection when entering a char on Android 8 - #1818\r\n            // \t\teventHandler.apply(that, args);\r\n            // \t\tcaret(that, that.inputmask.caretPos, undefined, true);\r\n            // \t}, 0);\r\n            // \treturn false;\r\n            // }\r\n            break;\r\n          case \"keydown\":\r\n            // Prevent duplicate input processing between keyEvent and inputFallBackEvent #2855\r\n            // This fixes Chinese IME duplication issue on Safari where both events fire for the same input\r\n            if (\r\n              inputmask.lastInputEvent &&\r\n              Date.now() - inputmask.lastInputEvent.time < 10 &&\r\n              inputmask.lastInputEvent.data === e.key\r\n            ) {\r\n              return false;\r\n            }\r\n            break;\r\n          case \"click\":\r\n          case \"focus\":\r\n            if (inputmask.validationEvent) {\r\n              // #841\r\n              inputmask.validationEvent = false;\r\n              input.blur();\r\n              HandleNativePlaceholder(\r\n                input,\r\n                (inputmask.isRTL\r\n                  ? getBufferTemplate.call(inputmask).slice().reverse()\r\n                  : getBufferTemplate.call(inputmask)\r\n                ).join(\"\")\r\n              );\r\n              setTimeout(function () {\r\n                input.focus();\r\n              }, opts.validationEventTimeOut);\r\n              return false;\r\n            }\r\n            args = arguments;\r\n            setTimeout(function () {\r\n              // needed for Chrome ~ initial selection clears after the clickevent\r\n              if (!input.inputmask) {\r\n                // `inputmask.remove()` was called before this callback\r\n                return;\r\n              }\r\n              eventHandler.apply(that, args);\r\n            }, 0);\r\n            return /* false */; // #2423\r\n        }\r\n        const returnVal = eventHandler.apply(that, arguments);\r\n        if (returnVal === false) {\r\n          e.preventDefault();\r\n          e.stopPropagation();\r\n        }\r\n        return returnVal;\r\n      }\r\n    };\r\n    // add inputmask namespace to event\r\n    eventName = `${eventName}.inputmask`;\r\n    if ([\"submit.inputmask\", \"reset.inputmask\"].includes(eventName)) {\r\n      ev = ev.bind(input); // bind creates a new eventhandler (wrap)\r\n      if (input.form !== null) $(input.form).on(eventName, ev);\r\n    } else {\r\n      $(input).on(eventName, ev);\r\n    }\r\n  },\r\n  off: function (input, event) {\r\n    if (input.inputmask) {\r\n      const $ = input.inputmask.dependencyLib;\r\n      $(input).off(event || \".inputmask\");\r\n    }\r\n  }\r\n};\r\n","import { iphone, mobile } from \"./environment\";\r\nimport { EventHandlers } from \"./eventhandlers\";\r\nimport { EventRuler } from \"./eventruler\";\r\nimport {\r\n  applyInputValue,\r\n  clearOptionalTail,\r\n  writeBuffer\r\n} from \"./inputHandling\";\r\nimport {\r\n  caret,\r\n  getBuffer,\r\n  getBufferTemplate,\r\n  getLastValidPosition,\r\n  resetMaskSet,\r\n  seekNext\r\n} from \"./positioning\";\r\nimport { isComplete } from \"./validation\";\r\n\r\nexport { mask };\r\n\r\n// todo put on the prototype?\r\nfunction mask() {\r\n  const inputmask = this,\r\n    opts = this.opts,\r\n    el = this.el,\r\n    $ = this.dependencyLib;\r\n\r\n  function isElementTypeSupported(input, opts) {\r\n    function patchValueProperty(npt) {\r\n      let valueGet, valueSet;\r\n\r\n      function patchValhook(type) {\r\n        if (\r\n          $.valHooks &&\r\n          ($.valHooks[type] === undefined ||\r\n            $.valHooks[type].inputmaskpatch !== true)\r\n        ) {\r\n          const valhookGet =\r\n              $.valHooks[type] && $.valHooks[type].get\r\n                ? $.valHooks[type].get\r\n                : function (elem) {\r\n                    return elem.value;\r\n                  },\r\n            valhookSet =\r\n              $.valHooks[type] && $.valHooks[type].set\r\n                ? $.valHooks[type].set\r\n                : function (elem, value) {\r\n                    elem.value = value;\r\n                    return elem;\r\n                  };\r\n\r\n          $.valHooks[type] = {\r\n            get: function (elem) {\r\n              if (elem.inputmask) {\r\n                if (elem.inputmask.opts.autoUnmask) {\r\n                  return elem.inputmask.unmaskedvalue();\r\n                } else {\r\n                  const result = valhookGet(elem);\r\n                  return getLastValidPosition.call(\r\n                    inputmask,\r\n                    undefined,\r\n                    undefined,\r\n                    elem.inputmask.maskset.validPositions\r\n                  ) !== -1 || opts.nullable !== true\r\n                    ? result\r\n                    : \"\";\r\n                }\r\n              } else {\r\n                return valhookGet(elem);\r\n              }\r\n            },\r\n            set: function (elem, value) {\r\n              const result = valhookSet(elem, value);\r\n              if (elem.inputmask) {\r\n                applyInputValue(elem, value);\r\n              }\r\n              return result;\r\n            },\r\n            inputmaskpatch: true\r\n          };\r\n        }\r\n      }\r\n\r\n      function getter() {\r\n        if (this.inputmask) {\r\n          return this.inputmask.opts.autoUnmask\r\n            ? this.inputmask.unmaskedvalue()\r\n            : getLastValidPosition.call(inputmask) !== -1 ||\r\n                opts.nullable !== true\r\n              ? this.getRootNode().activeElement === this &&\r\n                opts.clearMaskOnLostFocus\r\n                ? (inputmask.isRTL\r\n                    ? clearOptionalTail\r\n                        .call(inputmask, getBuffer.call(inputmask).slice())\r\n                        .reverse()\r\n                    : clearOptionalTail.call(\r\n                        inputmask,\r\n                        getBuffer.call(inputmask).slice()\r\n                      )\r\n                  ).join(\"\")\r\n                : valueGet.call(this)\r\n              : \"\";\r\n        } else {\r\n          return valueGet.call(this);\r\n        }\r\n      }\r\n\r\n      function setter(value) {\r\n        valueSet.call(this, value);\r\n        if (this.inputmask) {\r\n          applyInputValue(this, value);\r\n        }\r\n      }\r\n\r\n      function installNativeValueSetFallback(npt) {\r\n        EventRuler.on(npt, \"mouseenter\", function () {\r\n          const input = this,\r\n            value = input.inputmask._valueGet(true),\r\n            bufferValue = (\r\n              input.inputmask.isRTL\r\n                ? getBuffer.call(input.inputmask).slice().reverse()\r\n                : getBuffer.call(input.inputmask)\r\n            ).join(\"\");\r\n          if (value != bufferValue) {\r\n            applyInputValue(input, value);\r\n          }\r\n        });\r\n      }\r\n\r\n      if (!npt.inputmask.__valueGet) {\r\n        if (opts.noValuePatching !== true) {\r\n          if (Object.getOwnPropertyDescriptor) {\r\n            const valueProperty = Object.getPrototypeOf\r\n              ? Object.getOwnPropertyDescriptor(\r\n                  Object.getPrototypeOf(npt),\r\n                  \"value\"\r\n                )\r\n              : undefined;\r\n            if (valueProperty && valueProperty.get && valueProperty.set) {\r\n              valueGet = valueProperty.get;\r\n              valueSet = valueProperty.set;\r\n              Object.defineProperty(npt, \"value\", {\r\n                get: getter,\r\n                set: setter,\r\n                configurable: true\r\n              });\r\n            } else if (npt.tagName.toLowerCase() !== \"input\") {\r\n              valueGet = function () {\r\n                return this.textContent;\r\n              };\r\n              valueSet = function (value) {\r\n                this.textContent = value;\r\n              };\r\n              Object.defineProperty(npt, \"value\", {\r\n                get: getter,\r\n                set: setter,\r\n                configurable: true\r\n              });\r\n            }\r\n          } else if (\r\n            document.__lookupGetter__ &&\r\n            npt.__lookupGetter__(\"value\")\r\n          ) {\r\n            valueGet = npt.__lookupGetter__(\"value\");\r\n            valueSet = npt.__lookupSetter__(\"value\");\r\n\r\n            npt.__defineGetter__(\"value\", getter);\r\n            npt.__defineSetter__(\"value\", setter);\r\n          }\r\n          npt.inputmask.__valueGet = valueGet; // store native property getter\r\n          npt.inputmask.__valueSet = valueSet; // store native property setter\r\n        }\r\n        npt.inputmask._valueGet = function (overruleRTL) {\r\n          return inputmask.isRTL && overruleRTL !== true\r\n            ? valueGet.call(this.el).split(\"\").reverse().join(\"\")\r\n            : valueGet.call(this.el);\r\n        };\r\n        npt.inputmask._valueSet = function (value, overruleRTL) {\r\n          // null check is needed for IE8 => otherwise converts to \"null\"\r\n          valueSet.call(\r\n            this.el,\r\n            value === null || value === undefined\r\n              ? \"\"\r\n              : overruleRTL !== true && inputmask.isRTL\r\n                ? value.split(\"\").reverse().join(\"\")\r\n                : value\r\n          );\r\n        };\r\n\r\n        if (valueGet === undefined) {\r\n          // jquery.val fallback\r\n          valueGet = function () {\r\n            return this.value;\r\n          };\r\n          valueSet = function (value) {\r\n            this.value = value;\r\n          };\r\n          patchValhook(npt.type);\r\n          installNativeValueSetFallback(npt);\r\n        }\r\n      }\r\n    }\r\n\r\n    let elementType = input.getAttribute(\"type\"),\r\n      isSupported =\r\n        (input.tagName.toLowerCase() === \"input\" &&\r\n          opts.supportsInputType.includes(elementType)) ||\r\n        input.isContentEditable ||\r\n        input.tagName.toLowerCase() === \"textarea\";\r\n    if (!isSupported) {\r\n      if (input.tagName.toLowerCase() === \"input\") {\r\n        let el = document.createElement(\"input\");\r\n        el.setAttribute(\"type\", elementType);\r\n        isSupported = el.type === \"text\"; // apply mask only if the type is not natively supported\r\n        el = null;\r\n      } else {\r\n        isSupported = \"partial\";\r\n      }\r\n    }\r\n    if (isSupported !== false) {\r\n      patchValueProperty(input);\r\n    } else {\r\n      input.inputmask = undefined;\r\n    }\r\n    return isSupported;\r\n  }\r\n\r\n  // unbind all events - to make sure that no other mask will interfere when re-masking\r\n  EventRuler.off(el);\r\n  const isSupported = isElementTypeSupported(el, opts);\r\n  if (isSupported !== false) {\r\n    inputmask.originalPlaceholder = el.placeholder;\r\n\r\n    // read maxlength prop from el\r\n    inputmask.maxLength = el !== undefined ? el.maxLength : undefined;\r\n    if (inputmask.maxLength === -1) inputmask.maxLength = undefined;\r\n    if (\"inputMode\" in el && el.getAttribute(\"inputmode\") === null) {\r\n      el.inputMode = opts.inputmode;\r\n      el.setAttribute(\"inputmode\", opts.inputmode);\r\n    }\r\n\r\n    if (isSupported === true) {\r\n      opts.showMaskOnFocus =\r\n        opts.showMaskOnFocus &&\r\n        [\"cc-number\", \"cc-exp\"].indexOf(el.autocomplete) === -1;\r\n      if (iphone) {\r\n        // selecting the caret shows as a selection on iphone\r\n        opts.insertModeVisual = false;\r\n        // disable autocorrect\r\n        el.setAttribute(\"autocorrect\", \"off\");\r\n      }\r\n\r\n      // bind events\r\n      EventRuler.on(el, \"submit\", EventHandlers.submitEvent);\r\n      EventRuler.on(el, \"reset\", EventHandlers.resetEvent);\r\n      EventRuler.on(el, \"blur\", EventHandlers.blurEvent);\r\n      EventRuler.on(el, \"focus\", EventHandlers.focusEvent);\r\n      EventRuler.on(el, \"invalid\", EventHandlers.invalidEvent);\r\n      EventRuler.on(el, \"click\", EventHandlers.clickEvent);\r\n      EventRuler.on(el, \"mouseleave\", EventHandlers.mouseleaveEvent);\r\n      EventRuler.on(el, \"mouseenter\", EventHandlers.mouseenterEvent);\r\n      EventRuler.on(el, \"paste\", EventHandlers.pasteEvent);\r\n      EventRuler.on(el, \"cut\", EventHandlers.cutEvent);\r\n      EventRuler.on(el, \"complete\", opts.oncomplete);\r\n      EventRuler.on(el, \"incomplete\", opts.onincomplete);\r\n      EventRuler.on(el, \"cleared\", opts.oncleared);\r\n      if (opts.inputEventOnly !== true) {\r\n        EventRuler.on(el, \"keydown\", EventHandlers.keyEvent);\r\n      }\r\n      if (mobile || opts.inputEventOnly) {\r\n        el.removeAttribute(\"maxLength\");\r\n      }\r\n      EventRuler.on(el, \"input\", EventHandlers.inputFallBackEvent);\r\n      // EventRuler.on(el, \"beforeinput\", EventHandlers.beforeInputEvent); //https://github.com/w3c/input-events - to implement\r\n    }\r\n    EventRuler.on(el, \"setvalue\", EventHandlers.setValueEvent);\r\n\r\n    // apply mask\r\n    inputmask.applyMaskHook === undefined || inputmask.applyMaskHook();\r\n\r\n    getBufferTemplate.call(inputmask).join(\"\"); // initialize the buffer and getmasklength\r\n    inputmask.undoValue = inputmask._valueGet(true);\r\n    const activeElement = el.getRootNode().activeElement;\r\n    if (\r\n      el.inputmask._valueGet(true) !== \"\" ||\r\n      opts.clearMaskOnLostFocus === false ||\r\n      activeElement === el\r\n    ) {\r\n      applyInputValue(el, el.inputmask._valueGet(true));\r\n      let buffer = getBuffer.call(inputmask).slice();\r\n      if (isComplete.call(inputmask, buffer) === false) {\r\n        if (opts.clearIncomplete) {\r\n          resetMaskSet.call(inputmask, false);\r\n        }\r\n      }\r\n      if (opts.clearMaskOnLostFocus && activeElement !== el) {\r\n        if (getLastValidPosition.call(inputmask) === -1) {\r\n          buffer = [];\r\n        } else {\r\n          clearOptionalTail.call(inputmask, buffer);\r\n        }\r\n      }\r\n      if (\r\n        opts.clearMaskOnLostFocus === false ||\r\n        (opts.showMaskOnFocus && activeElement === el) ||\r\n        el.inputmask._valueGet(true) !== \"\"\r\n      ) {\r\n        writeBuffer(el, buffer);\r\n      }\r\n      if (activeElement === el) {\r\n        // position the caret when in focus\r\n        caret.call(\r\n          inputmask,\r\n          el,\r\n          seekNext.call(inputmask, getLastValidPosition.call(inputmask))\r\n        );\r\n      } else {\r\n        caret.call(inputmask, el, 0);\r\n      }\r\n    }\r\n  }\r\n}\r\n","const escapeRegexRegex = new RegExp(\r\n  \"(\\\\\" +\r\n    [\r\n      \"/\",\r\n      \".\",\r\n      \"*\",\r\n      \"+\",\r\n      \"?\",\r\n      \"|\",\r\n      \"(\",\r\n      \")\",\r\n      \"[\",\r\n      \"]\",\r\n      \"{\",\r\n      \"}\",\r\n      \"\\\\\",\r\n      \"$\",\r\n      \"^\"\r\n    ].join(\"|\\\\\") +\r\n    \")\",\r\n  \"gim\"\r\n);\r\nexport function escapeRegex(str) {\r\n  return str.replace(escapeRegexRegex, \"\\\\$1\");\r\n}","export default function (isGroup, isOptional, isQuantifier, isAlternator) {\r\n  this.matches = [];\r\n  this.openGroup = isGroup || false;\r\n  this.alternatorGroup = false;\r\n  this.isGroup = isGroup || false;\r\n  this.isOptional = isOptional || false;\r\n  this.isQuantifier = isQuantifier || false;\r\n  this.isAlternator = isAlternator || false;\r\n  this.quantifier = {\r\n    min: 1,\r\n    max: 1\r\n  };\r\n}\r\n","import $ from \"./dependencyLibs/inputmask.dependencyLib\";\r\nimport { escapeRegex } from \"./escapeRegex\";\r\nimport Inputmask from \"./inputmask\";\r\nimport MaskToken from \"./masktoken\";\r\n\r\nexport { generateMaskSet, analyseMask };\r\n\r\nfunction generateMaskSet(opts, nocache) {\r\n  let ms;\r\n\r\n  function preProcessMask(\r\n    mask,\r\n    { repeat, groupmarker, quantifiermarker, keepStatic }\r\n  ) {\r\n    if (repeat > 0 || repeat === \"*\" || repeat === \"+\") {\r\n      const repeatStart = repeat === \"*\" ? 0 : repeat === \"+\" ? 1 : repeat;\r\n      if (repeatStart !== repeat) {\r\n        mask =\r\n          groupmarker[0] +\r\n          mask +\r\n          groupmarker[1] +\r\n          quantifiermarker[0] +\r\n          repeatStart +\r\n          \",\" +\r\n          repeat +\r\n          quantifiermarker[1];\r\n      } else {\r\n        // repeat the mask n times\r\n        const msk = mask;\r\n        for (let i = 1; i < repeatStart; i++) {\r\n          mask += msk;\r\n        }\r\n      }\r\n    }\r\n    if (keepStatic === true) {\r\n      const optionalRegex = \"(.)\\\\[([^\\\\]]*)\\\\]\", // \"(?<p1>.)\\\\[(?<p2>[^\\\\]]*)\\\\]\", remove named capture group @2428\r\n        maskMatches = mask.match(new RegExp(optionalRegex, \"g\"));\r\n      maskMatches &&\r\n        maskMatches.forEach((m, i) => {\r\n          let [p1, p2] = m.split(\"[\");\r\n          p2 = p2.replace(\"]\", \"\");\r\n          mask = mask.replace(\r\n            new RegExp(`${escapeRegex(p1)}\\\\[${escapeRegex(p2)}\\\\]`),\r\n            p1.charAt(0) === p2.charAt(0)\r\n              ? `(${p1}|${p1}${p2})`\r\n              : `${p1}[${p2}]`\r\n          );\r\n          // console.log(mask);\r\n        });\r\n    }\r\n\r\n    return mask;\r\n  }\r\n\r\n  function generateMask(mask, metadata, opts) {\r\n    let regexMask = false;\r\n    if (mask === null || mask === \"\") {\r\n      regexMask = opts.regex !== null;\r\n      if (regexMask) {\r\n        mask = opts.regex;\r\n        mask = mask.replace(/^(\\^)(.*)(\\$)$/, \"$2\");\r\n      } else {\r\n        regexMask = true;\r\n        mask = \".*\";\r\n      }\r\n    }\r\n    if (mask.length === 1 && opts.greedy === false && opts.repeat !== 0) {\r\n      opts.placeholder = \"\";\r\n    } // hide placeholder with single non-greedy mask\r\n    mask = preProcessMask(mask, opts);\r\n\r\n    // console.log(mask);\r\n    let masksetDefinition, maskdefKey;\r\n    maskdefKey = regexMask\r\n      ? \"regex_\" + opts.regex\r\n      : opts.numericInput\r\n        ? mask.split(\"\").reverse().join(\"\")\r\n        : mask;\r\n    if (opts.keepStatic !== null) {\r\n      // keepstatic modifies the output from the testdefinitions ~ so differentiate in the maskcache\r\n      maskdefKey = \"ks_\" + opts.keepStatic + maskdefKey;\r\n    }\r\n    if (typeof opts.placeholder === \"object\") {\r\n      // placeholder object modifies the output from the testdefinitions ~ so differentiate in the maskcache\r\n      maskdefKey = \"ph_\" + JSON.stringify(opts.placeholder) + maskdefKey;\r\n    }\r\n\r\n    if (\r\n      Inputmask.prototype.masksCache[maskdefKey] === undefined ||\r\n      nocache === true\r\n    ) {\r\n      masksetDefinition = {\r\n        mask,\r\n        maskToken: Inputmask.prototype.analyseMask(mask, regexMask, opts),\r\n        validPositions: [],\r\n        _buffer: undefined,\r\n        buffer: undefined,\r\n        tests: {},\r\n        excludes: {}, // excluded alternations\r\n        metadata,\r\n        maskLength: undefined,\r\n        jitOffset: {}\r\n      };\r\n      if (nocache !== true) {\r\n        Inputmask.prototype.masksCache[maskdefKey] = masksetDefinition;\r\n        masksetDefinition = $.extend(\r\n          true,\r\n          {},\r\n          Inputmask.prototype.masksCache[maskdefKey]\r\n        );\r\n      }\r\n    } else {\r\n      masksetDefinition = $.extend(\r\n        true,\r\n        {},\r\n        Inputmask.prototype.masksCache[maskdefKey]\r\n      );\r\n    }\r\n\r\n    return masksetDefinition;\r\n  }\r\n\r\n  if (typeof opts.mask === \"function\") {\r\n    // allow mask to be a preprocessing fn - should return a valid mask\r\n    opts.mask = opts.mask(opts);\r\n  }\r\n  if (Array.isArray(opts.mask)) {\r\n    if (opts.mask.length > 1) {\r\n      if (opts.keepStatic === null) {\r\n        // enable by default when passing multiple masks when the option is not explicitly specified\r\n        opts.keepStatic = true;\r\n      }\r\n      let altMask = opts.groupmarker[0];\r\n      (opts.isRTL ? opts.mask.reverse() : opts.mask).forEach(function (msk) {\r\n        if (altMask.length > 1) {\r\n          altMask += opts.alternatormarker;\r\n        }\r\n        if (msk.mask !== undefined && typeof msk.mask !== \"function\") {\r\n          altMask += msk.mask;\r\n        } else {\r\n          altMask += msk;\r\n        }\r\n      });\r\n      altMask += opts.groupmarker[1];\r\n      // console.log(altMask);\r\n      return generateMask(altMask, opts.mask, opts);\r\n    } else {\r\n      opts.mask = opts.mask.pop();\r\n    }\r\n  }\r\n  if (\r\n    opts.mask &&\r\n    opts.mask.mask !== undefined &&\r\n    typeof opts.mask.mask !== \"function\"\r\n  ) {\r\n    ms = generateMask(opts.mask.mask, opts.mask, opts);\r\n  } else {\r\n    ms = generateMask(opts.mask, opts.mask, opts);\r\n  }\r\n  if (opts.keepStatic === null) {\r\n    opts.keepStatic = false;\r\n  }\r\n  return ms;\r\n}\r\n\r\nfunction analyseMask(mask, regexMask, opts) {\r\n  const tokenizer =\r\n      /(?:[?*+]|\\{[0-9+*]+(?:,[0-9+*]*)?(?:\\|[0-9+*]*)?\\})|[^.?*+^${[]()|\\\\]+|./g,\r\n    // Thx to https://github.com/slevithan/regex-colorizer for the regexTokenizer regex\r\n    regexTokenizer =\r\n      /\\[\\^?]?(?:[^\\\\\\]]+|\\\\[\\S\\s]?)*]?|\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\\S\\s]?)|\\((?:\\?[:=!]?)?|(?:[?*+]|\\{[0-9]+(?:,[0-9]*)?\\})\\??|[^.?*+^${[()|\\\\]+|./g,\r\n    currentToken = new MaskToken(),\r\n    openenings = [],\r\n    maskTokens = [];\r\n  let escaped = false,\r\n    match,\r\n    m,\r\n    openingToken,\r\n    currentOpeningToken,\r\n    alternator,\r\n    lastMatch,\r\n    closeRegexGroup = false;\r\n\r\n  // test definition => {fn: RegExp/function, static: true/false optionality: bool, newBlockMarker: bool, casing: null/upper/lower, def: definitionSymbol, placeholder: placeholder, mask: real maskDefinition}\r\n  function insertTestDefinition(mtoken, element, position) {\r\n    position = position !== undefined ? position : mtoken.matches.length;\r\n    // console.log(element, position, currentToken.matches.length);\r\n    // if (typeof opts.placeholder === \"string\")\r\n    // \tconsole.log(opts.placeholder.charAt(currentToken.matches.length % opts.placeholder.length));\r\n    let prevMatch = mtoken.matches[position - 1],\r\n      flag = opts.casing ? \"i\" : \"\";\r\n    if (regexMask) {\r\n      if (\r\n        element.indexOf(\"[\") === 0 ||\r\n        (escaped && /\\\\d|\\\\s|\\\\w|\\\\p/i.test(element)) ||\r\n        element === \".\"\r\n      ) {\r\n        if (/\\\\p\\{.*}/i.test(element)) flag += \"u\";\r\n        mtoken.matches.splice(position++, 0, {\r\n          fn: new RegExp(element, flag),\r\n          static: false,\r\n          optionality: false,\r\n          newBlockMarker:\r\n            prevMatch === undefined ? \"master\" : prevMatch.def !== element,\r\n          casing: null,\r\n          def: element,\r\n          placeholder:\r\n            typeof opts.placeholder === \"object\"\r\n              ? opts.placeholder[currentToken.matches.length]\r\n              : undefined,\r\n          nativeDef: element\r\n        });\r\n      } else {\r\n        if (escaped) element = element[element.length - 1];\r\n        element.split(\"\").forEach(function (lmnt, ndx) {\r\n          prevMatch = mtoken.matches[position - 1];\r\n          mtoken.matches.splice(position++, 0, {\r\n            fn: /[a-z]/i.test(opts.staticDefinitionSymbol || lmnt)\r\n              ? new RegExp(\r\n                  \"[\" + (opts.staticDefinitionSymbol || lmnt) + \"]\",\r\n                  flag\r\n                )\r\n              : null,\r\n            static: true,\r\n            optionality: false,\r\n            newBlockMarker:\r\n              prevMatch === undefined\r\n                ? \"master\"\r\n                : prevMatch.def !== lmnt && prevMatch.static !== true,\r\n            casing: null,\r\n            def: opts.staticDefinitionSymbol || lmnt,\r\n            placeholder:\r\n              opts.staticDefinitionSymbol !== undefined\r\n                ? lmnt\r\n                : typeof opts.placeholder === \"object\"\r\n                  ? opts.placeholder[currentToken.matches.length]\r\n                  : undefined,\r\n            nativeDef: (escaped ? \"'\" : \"\") + lmnt\r\n          });\r\n        });\r\n      }\r\n      escaped = false;\r\n    } else {\r\n      const maskdef =\r\n        (opts.definitions && opts.definitions[element]) ||\r\n        (opts.usePrototypeDefinitions &&\r\n          Inputmask.prototype.definitions[element]);\r\n      if (maskdef && !escaped) {\r\n        if (\r\n          typeof maskdef.validator === \"string\" &&\r\n          /\\\\p\\{.*}/i.test(maskdef.validator)\r\n        )\r\n          flag += \"u\";\r\n        mtoken.matches.splice(position++, 0, {\r\n          fn: maskdef.validator\r\n            ? typeof maskdef.validator === \"string\"\r\n              ? new RegExp(maskdef.validator, flag)\r\n              : new (function () {\r\n                  this.test = maskdef.validator;\r\n                })()\r\n            : /./,\r\n          static: maskdef.static || false,\r\n          optionality: maskdef.optional || false,\r\n          defOptionality: maskdef.optional || false, // indicator for an optional from the definition\r\n          newBlockMarker:\r\n            prevMatch === undefined || maskdef.optional\r\n              ? \"master\"\r\n              : prevMatch.def !== (maskdef.definitionSymbol || element),\r\n          casing: maskdef.casing,\r\n          def: maskdef.definitionSymbol || element,\r\n          placeholder: maskdef.placeholder,\r\n          nativeDef: element,\r\n          generated: maskdef.generated\r\n        });\r\n      } else {\r\n        mtoken.matches.splice(position++, 0, {\r\n          fn: /[a-z]/i.test(opts.staticDefinitionSymbol || element)\r\n            ? new RegExp(\r\n                \"[\" + (opts.staticDefinitionSymbol || element) + \"]\",\r\n                flag\r\n              )\r\n            : null,\r\n          static: true,\r\n          optionality: false,\r\n          newBlockMarker:\r\n            prevMatch === undefined\r\n              ? \"master\"\r\n              : prevMatch.def !== element && prevMatch.static !== true,\r\n          casing: null,\r\n          def: opts.staticDefinitionSymbol || element,\r\n          placeholder:\r\n            opts.staticDefinitionSymbol !== undefined ? element : undefined,\r\n          nativeDef: (escaped ? \"'\" : \"\") + element\r\n        });\r\n        escaped = false;\r\n      }\r\n    }\r\n  }\r\n\r\n  function verifyGroupMarker(maskToken) {\r\n    if (maskToken && maskToken.matches) {\r\n      maskToken.matches.forEach(function (token, ndx) {\r\n        const nextToken = maskToken.matches[ndx + 1];\r\n        if (\r\n          (nextToken === undefined ||\r\n            nextToken.matches === undefined ||\r\n            nextToken.isQuantifier === false) &&\r\n          token &&\r\n          token.isGroup\r\n        ) {\r\n          // this is not a group but a normal mask => convert\r\n          token.isGroup = false;\r\n          if (!regexMask) {\r\n            insertTestDefinition(token, opts.groupmarker[0], 0);\r\n            if (token.openGroup !== true) {\r\n              insertTestDefinition(token, opts.groupmarker[1]);\r\n            }\r\n          }\r\n        }\r\n        verifyGroupMarker(token);\r\n      });\r\n    }\r\n  }\r\n\r\n  function defaultCase() {\r\n    if (openenings.length > 0) {\r\n      currentOpeningToken = openenings[openenings.length - 1];\r\n      insertTestDefinition(currentOpeningToken, m);\r\n      if (currentOpeningToken.isAlternator) {\r\n        // handle alternator a | b case\r\n        alternator = openenings.pop();\r\n        for (let mndx = 0; mndx < alternator.matches.length; mndx++) {\r\n          if (alternator.matches[mndx].isGroup)\r\n            alternator.matches[mndx].isGroup = false; // don't mark alternate groups as group\r\n        }\r\n        if (openenings.length > 0) {\r\n          currentOpeningToken = openenings[openenings.length - 1];\r\n          currentOpeningToken.matches.push(alternator);\r\n        } else {\r\n          currentToken.matches.push(alternator);\r\n        }\r\n      }\r\n    } else {\r\n      insertTestDefinition(currentToken, m);\r\n    }\r\n  }\r\n\r\n  function reverseTokens(maskToken) {\r\n    function reverseStatic(st) {\r\n      if (st === opts.optionalmarker[0]) {\r\n        st = opts.optionalmarker[1];\r\n      } else if (st === opts.optionalmarker[1]) {\r\n        st = opts.optionalmarker[0];\r\n      } else if (st === opts.groupmarker[0]) {\r\n        st = opts.groupmarker[1];\r\n      } else if (st === opts.groupmarker[1]) st = opts.groupmarker[0];\r\n\r\n      return st;\r\n    }\r\n\r\n    maskToken.matches = maskToken.matches.reverse();\r\n    for (const match in maskToken.matches) {\r\n      if (Object.prototype.hasOwnProperty.call(maskToken.matches, match)) {\r\n        const intMatch = parseInt(match);\r\n        if (\r\n          maskToken.matches[match].isQuantifier &&\r\n          maskToken.matches[intMatch + 1] &&\r\n          maskToken.matches[intMatch + 1].isGroup\r\n        ) {\r\n          // reposition quantifier\r\n          const qt = maskToken.matches[match];\r\n          maskToken.matches.splice(match, 1);\r\n          maskToken.matches.splice(intMatch + 1, 0, qt);\r\n        }\r\n        if (maskToken.matches[match].matches !== undefined) {\r\n          maskToken.matches[match] = reverseTokens(maskToken.matches[match]);\r\n        } else {\r\n          maskToken.matches[match] = reverseStatic(maskToken.matches[match]);\r\n        }\r\n      }\r\n    }\r\n\r\n    return maskToken;\r\n  }\r\n\r\n  function groupify(matches) {\r\n    const groupToken = new MaskToken(true);\r\n    groupToken.openGroup = false;\r\n    groupToken.matches = matches;\r\n    return groupToken;\r\n  }\r\n\r\n  function closeGroup() {\r\n    // Group closing\r\n    openingToken = openenings.pop();\r\n    openingToken.openGroup = false; // mark group as complete\r\n    if (openingToken !== undefined) {\r\n      if (openenings.length > 0) {\r\n        currentOpeningToken = openenings[openenings.length - 1];\r\n        currentOpeningToken.matches.push(openingToken);\r\n        if (currentOpeningToken.isAlternator) {\r\n          // handle alternator (a) | (b) case\r\n          alternator = openenings.pop();\r\n          for (let mndx = 0; mndx < alternator.matches.length; mndx++) {\r\n            alternator.matches[mndx].isGroup = false; // don't mark alternate groups as group\r\n            alternator.matches[mndx].alternatorGroup = false;\r\n          }\r\n          if (openenings.length > 0) {\r\n            currentOpeningToken = openenings[openenings.length - 1];\r\n            currentOpeningToken.matches.push(alternator);\r\n          } else {\r\n            currentToken.matches.push(alternator);\r\n          }\r\n        }\r\n      } else {\r\n        currentToken.matches.push(openingToken);\r\n      }\r\n    } else {\r\n      defaultCase();\r\n    }\r\n  }\r\n\r\n  function groupQuantifier(matches) {\r\n    let lastMatch = matches.pop();\r\n    if (lastMatch.isQuantifier) {\r\n      lastMatch = groupify([matches.pop(), lastMatch]);\r\n    }\r\n    return lastMatch;\r\n  }\r\n\r\n  if (regexMask) {\r\n    opts.optionalmarker[0] = undefined;\r\n    opts.optionalmarker[1] = undefined;\r\n  }\r\n  // console.log(mask);\r\n  while (\r\n    (match = regexMask ? regexTokenizer.exec(mask) : tokenizer.exec(mask))\r\n  ) {\r\n    // console.log(match);\r\n    m = match[0];\r\n\r\n    if (regexMask) {\r\n      switch (m.charAt(0)) {\r\n        // Quantifier\r\n        case \"?\":\r\n          m = \"{0,1}\";\r\n          break;\r\n        case \"+\":\r\n        case \"*\":\r\n          m = \"{\" + m + \"}\";\r\n          break;\r\n        case \"|\":\r\n          // regex mask alternator  ex: [01][0-9]|2[0-3] => ([01][0-9]|2[0-3])\r\n          if (openenings.length === 0) {\r\n            // wrap the mask in a group to form a regex alternator  ([01][0-9]|2[0-3])\r\n            const altRegexGroup = groupify(currentToken.matches);\r\n            altRegexGroup.openGroup = true;\r\n            openenings.push(altRegexGroup);\r\n            currentToken.matches = [];\r\n            closeRegexGroup = true;\r\n          }\r\n          break;\r\n      }\r\n      switch (m) {\r\n        case \"\\\\d\":\r\n          m = \"[0-9]\";\r\n          break;\r\n        case \"\\\\p\": // Unicode Categories\r\n          m += regexTokenizer.exec(mask)[0]; // {\r\n          m += regexTokenizer.exec(mask)[0]; // ?}\r\n          break;\r\n        case \"(?:\": // non capturing group\r\n        case \"(?=\": // lookahead\r\n        case \"(?!\": // negative lookahead\r\n        case \"(?<=\": // lookbehind\r\n        case \"(?<!\": // negative lookbehind\r\n          // treat as group\r\n          break;\r\n      }\r\n    }\r\n\r\n    if (escaped) {\r\n      defaultCase();\r\n      continue;\r\n    }\r\n    switch (m.charAt(0)) {\r\n      case \"$\":\r\n      case \"^\":\r\n        // ignore beginswith and endswith as in masking this makes no point\r\n        if (!regexMask) {\r\n          defaultCase();\r\n        }\r\n        break;\r\n      case opts.escapeChar:\r\n        escaped = true;\r\n        if (regexMask) defaultCase();\r\n        break;\r\n      // optional closing\r\n      case opts.optionalmarker[1]:\r\n      case opts.groupmarker[1]:\r\n        closeGroup();\r\n        break;\r\n      case opts.optionalmarker[0]:\r\n        // optional opening\r\n        openenings.push(new MaskToken(false, true));\r\n        break;\r\n      case opts.groupmarker[0]:\r\n        // Group opening\r\n        openenings.push(new MaskToken(true));\r\n        break;\r\n      case opts.quantifiermarker[0]:\r\n        {\r\n          // Quantifier\r\n          const quantifier = new MaskToken(false, false, true);\r\n\r\n          m = m.replace(/[{}?]/g, \"\"); // ? matches lazy quantifiers\r\n          const mqj = m.split(\"|\"),\r\n            mq = mqj[0].split(\",\");\r\n          let mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]);\r\n          const mq1 =\r\n              mq.length === 1 ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]),\r\n            mqJit = isNaN(mqj[1]) ? mqj[1] : parseInt(mqj[1]);\r\n          if (mq0 === \"*\" || mq0 === \"+\") {\r\n            mq0 = mq1 === \"*\" ? 0 : 1;\r\n          }\r\n          quantifier.quantifier = {\r\n            min: mq0,\r\n            max: mq1,\r\n            jit: mqJit\r\n          };\r\n          const matches =\r\n            openenings.length > 0\r\n              ? openenings[openenings.length - 1].matches\r\n              : currentToken.matches;\r\n          match = matches.pop();\r\n          // if (match.isAlternator) { //handle quantifier in an alternation [0-9]{2}|[0-9]{3}\r\n          //     matches.push(match); //push back alternator\r\n          //     matches = match.matches; //remap target matches\r\n          //     var groupToken = new MaskToken(true);\r\n          //     var tmpMatch = matches.pop();\r\n          //     matches.push(groupToken); //push the group\r\n          //     matches = groupToken.matches;\r\n          //     match = tmpMatch;\r\n          // }\r\n          if (!match.isGroup) {\r\n            match = groupify([match]);\r\n          }\r\n          matches.push(match);\r\n          matches.push(quantifier);\r\n        }\r\n        break;\r\n      case opts.alternatormarker:\r\n        if (openenings.length > 0) {\r\n          currentOpeningToken = openenings[openenings.length - 1];\r\n          const subToken =\r\n            currentOpeningToken.matches[currentOpeningToken.matches.length - 1];\r\n          if (\r\n            currentOpeningToken.openGroup && // regexp alt syntax\r\n            (subToken.matches === undefined ||\r\n              (subToken.isGroup === false && subToken.isAlternator === false))\r\n          ) {\r\n            // alternations within group\r\n            lastMatch = openenings.pop();\r\n          } else {\r\n            lastMatch = groupQuantifier(currentOpeningToken.matches);\r\n          }\r\n        } else {\r\n          lastMatch = groupQuantifier(currentToken.matches);\r\n        }\r\n        if (lastMatch.isAlternator) {\r\n          openenings.push(lastMatch);\r\n        } else {\r\n          if (lastMatch.alternatorGroup) {\r\n            alternator = openenings.pop();\r\n            lastMatch.alternatorGroup = false;\r\n          } else {\r\n            alternator = new MaskToken(false, false, false, true);\r\n          }\r\n          alternator.matches.push(lastMatch);\r\n          openenings.push(alternator);\r\n          if (lastMatch.openGroup) {\r\n            // regexp alt syntax\r\n            lastMatch.openGroup = false;\r\n            const alternatorGroup = new MaskToken(true);\r\n            alternatorGroup.alternatorGroup = true;\r\n            openenings.push(alternatorGroup);\r\n          }\r\n        }\r\n        break;\r\n      default:\r\n        defaultCase();\r\n    }\r\n  }\r\n\r\n  if (closeRegexGroup) closeGroup();\r\n\r\n  while (openenings.length > 0) {\r\n    openingToken = openenings.pop();\r\n    currentToken.matches.push(openingToken);\r\n  }\r\n  if (currentToken.matches.length > 0) {\r\n    verifyGroupMarker(currentToken);\r\n    maskTokens.push(currentToken);\r\n  }\r\n\r\n  if (opts.numericInput || opts.isRTL) {\r\n    reverseTokens(maskTokens[0]);\r\n  }\r\n  // console.log(JSON.stringify(maskTokens));\r\n  return maskTokens;\r\n}\r\n","/*\r\n * Input Mask Core\r\n * http://github.com/RobinHerbots/jquery.inputmask\r\n * Copyright (c) Robin Herbots\r\n * Licensed under the MIT license\r\n */\r\n\r\nimport defaults from \"./defaults\";\r\nimport definitions from \"./definitions\";\r\nimport $ from \"./dependencyLibs/inputmask.dependencyLib\";\r\nimport { EventRuler } from \"./eventruler\";\r\nimport window from \"./global/window\";\r\nimport { checkVal, clearOptionalTail, unmaskedvalue } from \"./inputHandling\";\r\nimport { mask } from \"./mask\";\r\nimport { generateMaskSet, analyseMask } from \"./mask-lexer\";\r\nimport { getBuffer, getBufferTemplate } from \"./positioning\";\r\nimport { isComplete } from \"./validation\";\r\nimport { getMaskTemplate } from \"./validation-tests\";\r\n\r\nconst document = window.document,\r\n  dataKey = \"_inputmask_opts\";\r\n\r\nfunction Inputmask(alias, options, internal) {\r\n  // allow instanciating without new\r\n  if (!(this instanceof Inputmask)) {\r\n    return new Inputmask(alias, options, internal);\r\n  }\r\n\r\n  this.dependencyLib = $;\r\n  this.el = undefined;\r\n  this.events = {};\r\n  this.maskset = undefined;\r\n\r\n  if (internal !== true) {\r\n    // init options\r\n    if (Object.prototype.toString.call(alias) === \"[object Object]\") {\r\n      options = alias;\r\n    } else {\r\n      options = options || {};\r\n      if (alias) options.alias = alias;\r\n    }\r\n    this.opts = $.extend(true, {}, this.defaults, options);\r\n    this.noMasksCache = options && options.definitions !== undefined;\r\n    this.userOptions = options || {}; // user passed options\r\n    resolveAlias(this.opts.alias, options, this.opts);\r\n  }\r\n\r\n  // maskscope properties\r\n  this.refreshValue = false; // indicate a refresh from the inputvalue is needed (form.reset)\r\n  this.undoValue = undefined;\r\n  this.$el = undefined;\r\n  this.skipInputEvent = false; // skip when triggered from within inputmask\r\n  this.validationEvent = false;\r\n  this.ignorable = false;\r\n  // eslint-disable-next-line no-unused-expressions\r\n  this.maxLength;\r\n  this.mouseEnter = false;\r\n  this.clicked = 0;\r\n  this.originalPlaceholder = undefined; // needed for FF\r\n  this.isComposing = false; // keydowncode == 229  compositionevent fallback\r\n  this.lastInputEvent = null; // track last input event to prevent duplicates #2855\r\n  this.hasAlternator = false;\r\n}\r\n\r\nInputmask.prototype = {\r\n  dataAttribute: \"data-inputmask\", // data attribute prefix used for attribute binding\r\n  // options default\r\n  defaults,\r\n  definitions,\r\n  aliases: {}, // aliases definitions\r\n  masksCache: {},\r\n  i18n: {},\r\n  get isRTL() {\r\n    return this.opts.isRTL || this.opts.numericInput;\r\n  },\r\n  mask: function (elems) {\r\n    const that = this;\r\n    if (typeof elems === \"string\") {\r\n      elems =\r\n        document.getElementById(elems) || document.querySelectorAll(elems);\r\n    }\r\n    elems = elems.nodeName\r\n      ? [elems]\r\n      : Array.isArray(elems)\r\n        ? elems\r\n        : [].slice.call(elems); // [].slice as alternate for Array.from (Yandex browser)\r\n    elems.forEach(function (el, ndx) {\r\n      const scopedOpts = $.extend(true, {}, that.opts);\r\n      if (\r\n        importAttributeOptions(\r\n          el,\r\n          scopedOpts,\r\n          $.extend(true, {}, that.userOptions),\r\n          that.dataAttribute\r\n        )\r\n      ) {\r\n        const maskset = generateMaskSet(scopedOpts, that.noMasksCache);\r\n        if (maskset !== undefined) {\r\n          if (el.inputmask !== undefined) {\r\n            el.inputmask.opts.autoUnmask = true; // force autounmasking when remasking\r\n            el.inputmask.remove();\r\n          }\r\n          // store inputmask instance on the input with element reference\r\n          el.inputmask = new Inputmask(undefined, undefined, true);\r\n          el.inputmask.opts = scopedOpts;\r\n          el.inputmask.noMasksCache = that.noMasksCache;\r\n          el.inputmask.userOptions = $.extend(true, {}, that.userOptions);\r\n          // el.inputmask.isRTL = scopedOpts.isRTL || scopedOpts.numericInput;\r\n          el.inputmask.el = el;\r\n          el.inputmask.$el = $(el);\r\n          el.inputmask.maskset = maskset;\r\n\r\n          $.data(el, dataKey, that.userOptions);\r\n          mask.call(el.inputmask);\r\n        }\r\n      }\r\n    });\r\n    return elems && elems[0] ? elems[0].inputmask || this : this;\r\n  },\r\n  option: function (options, noremask) {\r\n    // set extra options || retrieve value of a current option\r\n    if (typeof options === \"string\") {\r\n      return this.opts[options];\r\n    } else if (typeof options === \"object\") {\r\n      $.extend(this.userOptions, options); // user passed options\r\n      // remask\r\n      if (this.el && noremask !== true) {\r\n        this.mask(this.el);\r\n      }\r\n      return this;\r\n    }\r\n  },\r\n  unmaskedvalue: function (value) {\r\n    this.maskset =\r\n      this.maskset || generateMaskSet(this.opts, this.noMasksCache);\r\n    if (this.el === undefined || value !== undefined) {\r\n      const valueBuffer = (\r\n        typeof this.opts.onBeforeMask === \"function\"\r\n          ? this.opts.onBeforeMask.call(this, value, this.opts) || value\r\n          : value\r\n      ).split(\"\");\r\n      checkVal.call(this, undefined, false, false, valueBuffer);\r\n      if (typeof this.opts.onBeforeWrite === \"function\")\r\n        this.opts.onBeforeWrite.call(\r\n          this,\r\n          undefined,\r\n          getBuffer.call(this),\r\n          0,\r\n          this.opts\r\n        );\r\n    }\r\n    return unmaskedvalue.call(this, this.el);\r\n  },\r\n  remove: function () {\r\n    if (this.el) {\r\n      $.data(this.el, dataKey, null); // invalidate\r\n      // writeout the value\r\n      const cv = this.opts.autoUnmask\r\n        ? unmaskedvalue(this.el)\r\n        : this._valueGet(this.opts.autoUnmask);\r\n      if (cv !== getBufferTemplate.call(this).join(\"\"))\r\n        this._valueSet(cv, this.opts.autoUnmask);\r\n      else this._valueSet(\"\");\r\n      // unbind all events\r\n      EventRuler.off(this.el);\r\n\r\n      // restore the value property\r\n      let valueProperty;\r\n      if (Object.getOwnPropertyDescriptor && Object.getPrototypeOf) {\r\n        valueProperty = Object.getOwnPropertyDescriptor(\r\n          Object.getPrototypeOf(this.el),\r\n          \"value\"\r\n        );\r\n        if (valueProperty) {\r\n          if (this.__valueGet) {\r\n            Object.defineProperty(this.el, \"value\", {\r\n              get: this.__valueGet,\r\n              set: this.__valueSet,\r\n              configurable: true\r\n            });\r\n          }\r\n        }\r\n      } else if (\r\n        document.__lookupGetter__ &&\r\n        this.el.__lookupGetter__(\"value\")\r\n      ) {\r\n        if (this.__valueGet) {\r\n          this.el.__defineGetter__(\"value\", this.__valueGet);\r\n          this.el.__defineSetter__(\"value\", this.__valueSet);\r\n        }\r\n      }\r\n      // clear data\r\n      this.el.inputmask = undefined;\r\n    }\r\n    return this.el;\r\n  },\r\n  getemptymask: function () {\r\n    // return the default (empty) mask value, usefull for setting the default value in validation\r\n    this.maskset =\r\n      this.maskset || generateMaskSet(this.opts, this.noMasksCache);\r\n    return (\r\n      this.isRTL\r\n        ? getBufferTemplate.call(this).reverse()\r\n        : getBufferTemplate.call(this)\r\n    ).join(\"\");\r\n  },\r\n  hasMaskedValue: function () {\r\n    // check wheter the returned value is masked or not; currently only works reliable when using jquery.val fn to retrieve the value\r\n    return !this.opts.autoUnmask;\r\n  },\r\n  isComplete: function () {\r\n    this.maskset =\r\n      this.maskset || generateMaskSet(this.opts, this.noMasksCache);\r\n    return isComplete.call(this, getBuffer.call(this));\r\n  },\r\n  getmetadata: function () {\r\n    // return mask metadata if exists\r\n    this.maskset =\r\n      this.maskset || generateMaskSet(this.opts, this.noMasksCache);\r\n    if (Array.isArray(this.maskset.metadata)) {\r\n      let maskTarget = getMaskTemplate.call(this, true, 0, false).join(\"\");\r\n      this.maskset.metadata.forEach(function (mtdt) {\r\n        if (mtdt.mask === maskTarget) {\r\n          maskTarget = mtdt;\r\n          return false;\r\n        }\r\n\r\n        return true;\r\n      });\r\n      return maskTarget;\r\n    }\r\n    return this.maskset.metadata;\r\n  },\r\n  isValid: function (value) {\r\n    this.maskset =\r\n      this.maskset || generateMaskSet(this.opts, this.noMasksCache);\r\n    if (value) {\r\n      const valueBuffer = (\r\n        typeof this.opts.onBeforeMask === \"function\"\r\n          ? this.opts.onBeforeMask.call(this, value, this.opts) || value\r\n          : value\r\n      ).split(\"\");\r\n      checkVal.call(this, undefined, true, false, valueBuffer);\r\n    }\r\n\r\n    const buffer = clearOptionalTail.call(this, []),\r\n      isC = isComplete.call(this, buffer),\r\n      isc2 =\r\n        value === (this.isRTL ? buffer.reverse().join(\"\") : buffer.join(\"\"));\r\n\r\n    return isC && (value === undefined || isc2);\r\n  },\r\n  format: function (value, metadata) {\r\n    this.maskset =\r\n      this.maskset || generateMaskSet(this.opts, this.noMasksCache);\r\n    const valueBuffer = (\r\n      typeof this.opts.onBeforeMask === \"function\"\r\n        ? this.opts.onBeforeMask.call(this, value, this.opts) || value\r\n        : value\r\n    ).split(\"\");\r\n    checkVal.call(this, undefined, true, false, valueBuffer);\r\n    const formattedValue = this.isRTL\r\n      ? getBuffer.call(this).slice().reverse().join(\"\")\r\n      : getBuffer.call(this).join(\"\");\r\n    return metadata\r\n      ? {\r\n          value: formattedValue,\r\n          metadata: this.getmetadata()\r\n        }\r\n      : formattedValue;\r\n  },\r\n  setValue: function (value) {\r\n    if (this.el) {\r\n      $(this.el).trigger(\"setvalue\", [value]);\r\n    }\r\n  },\r\n  analyseMask\r\n};\r\n\r\nfunction resolveAlias(aliasStr, options, opts) {\r\n  const aliasDefinition = Inputmask.prototype.aliases[aliasStr];\r\n  if (aliasDefinition) {\r\n    if (aliasDefinition.alias)\r\n      resolveAlias(aliasDefinition.alias, undefined, opts); // alias is another alias\r\n    $.extend(true, opts, aliasDefinition); // merge alias definition in the options\r\n    $.extend(true, opts, options); // reapply extra given options\r\n    return true;\r\n  } // alias not found - try as mask\r\n  else if (opts.mask === null) {\r\n    opts.mask = aliasStr;\r\n  }\r\n\r\n  return false;\r\n}\r\n\r\nfunction importAttributeOptions(npt, opts, userOptions, dataAttribute) {\r\n  function importOption(option, optionData) {\r\n    const attrOption =\r\n      dataAttribute === \"\" ? option : dataAttribute + \"-\" + option;\r\n    optionData =\r\n      optionData !== undefined ? optionData : npt.getAttribute(attrOption);\r\n    if (optionData !== null) {\r\n      if (typeof optionData === \"string\") {\r\n        if (option.startsWith(\"on\")) {\r\n          // get function definition\r\n          optionData = window[optionData];\r\n        } else if (optionData === \"false\") optionData = false;\r\n        else if (optionData === \"true\") optionData = true;\r\n        else if (option === \"mask\")\r\n          optionData = optionData.replace(/\\\\\\\\/g, \"\\\\\");\r\n      }\r\n      userOptions[option] = optionData;\r\n    }\r\n  }\r\n\r\n  if (opts.importDataAttributes === true) {\r\n    let attrOptions = npt.getAttribute(dataAttribute),\r\n      option,\r\n      dataoptions,\r\n      optionData,\r\n      p;\r\n\r\n    if (attrOptions && attrOptions !== \"\") {\r\n      attrOptions = attrOptions.replace(/'/g, '\"');\r\n      dataoptions = JSON.parse(\"{\" + attrOptions + \"}\");\r\n    }\r\n\r\n    // resolve aliases\r\n    if (dataoptions) {\r\n      // pickup alias from dataAttribute\r\n      optionData = undefined;\r\n      for (p in dataoptions) {\r\n        if (p.toLowerCase() === \"alias\") {\r\n          optionData = dataoptions[p];\r\n          break;\r\n        }\r\n      }\r\n    }\r\n    importOption(\"alias\", optionData); // pickup alias from dataAttribute-alias\r\n    if (userOptions.alias) {\r\n      resolveAlias(userOptions.alias, userOptions, opts);\r\n    }\r\n\r\n    for (option in opts) {\r\n      if (dataoptions) {\r\n        optionData = undefined;\r\n        for (p in dataoptions) {\r\n          if (p.toLowerCase() === option.toLowerCase()) {\r\n            optionData = dataoptions[p];\r\n            break;\r\n          }\r\n        }\r\n      }\r\n      importOption(option, optionData);\r\n    }\r\n  }\r\n  $.extend(true, opts, userOptions);\r\n\r\n  // handle dir=rtl\r\n  if (npt.dir === \"rtl\" || opts.rightAlign) {\r\n    npt.style.textAlign = \"right\";\r\n  }\r\n\r\n  if (npt.dir === \"rtl\" || opts.numericInput) {\r\n    npt.dir = \"ltr\";\r\n    npt.removeAttribute(\"dir\");\r\n    opts.isRTL = true;\r\n  }\r\n\r\n  return Object.keys(userOptions).length;\r\n}\r\n\r\n// apply defaults, definitions, aliases\r\nInputmask.extendDefaults = function (options) {\r\n  $.extend(true, Inputmask.prototype.defaults, options);\r\n};\r\nInputmask.extendDefinitions = function (definition) {\r\n  $.extend(true, Inputmask.prototype.definitions, definition);\r\n};\r\nInputmask.extendAliases = function (alias) {\r\n  $.extend(true, Inputmask.prototype.aliases, alias);\r\n};\r\n// static fn on inputmask\r\nInputmask.format = function (value, options, metadata) {\r\n  return Inputmask(options).format(value, metadata);\r\n};\r\nInputmask.unmask = function (value, options) {\r\n  return Inputmask(options).unmaskedvalue(value);\r\n};\r\nInputmask.isValid = function (value, options) {\r\n  return Inputmask(options).isValid(value);\r\n};\r\nInputmask.remove = function (elems) {\r\n  if (typeof elems === \"string\") {\r\n    elems = document.getElementById(elems) || document.querySelectorAll(elems);\r\n  }\r\n  elems = elems.nodeName ? [elems] : elems;\r\n  for (let i = 0; i < elems.length; i++) {\r\n    if (elems[i].inputmask) elems[i].inputmask.remove();\r\n  }\r\n};\r\nInputmask.setValue = function (elems, value) {\r\n  if (typeof elems === \"string\") {\r\n    elems = document.getElementById(elems) || document.querySelectorAll(elems);\r\n  }\r\n  elems = elems.nodeName ? [elems] : elems;\r\n  elems.forEach(function (el) {\r\n    if (el.inputmask) el.inputmask.setValue(value);\r\n    else $(el).trigger(\"setvalue\", [value]);\r\n  });\r\n};\r\n\r\nInputmask.dependencyLib = $;\r\n\r\n// make inputmask available\r\nwindow.Inputmask = Inputmask;\r\nexport default Inputmask;\r\n","/*\r\n Input Mask plugin extensions\r\n http://github.com/RobinHerbots/inputmask\r\n Copyright (c) Robin Herbots\r\n Licensed under the MIT license\r\n */\r\nimport Inputmask from \"../inputmask\";\r\nimport { getLastValidPosition } from \"../positioning\";\r\nimport { getMaskTemplate } from \"../validation-tests\";\r\n// extra definitions\r\nInputmask.extendDefinitions({\r\n  A: {\r\n    validator: \"[A-Za-z\\u0410-\\u044F\\u0401\\u0451\\u00C0-\\u00FF\\u00B5]\",\r\n    casing: \"upper\" // auto uppercasing\r\n  },\r\n  \"&\": {\r\n    // alfanumeric uppercasing\r\n    validator: \"[0-9A-Za-z\\u0410-\\u044F\\u0401\\u0451\\u00C0-\\u00FF\\u00B5]\",\r\n    casing: \"upper\"\r\n  },\r\n  \"#\": {\r\n    // hexadecimal\r\n    validator: \"[0-9A-Fa-f]\",\r\n    casing: \"upper\"\r\n  }\r\n});\r\n\r\nconst ipValidatorRegex = /25[0-5]|2[0-4][0-9]|[01][0-9][0-9]/;\r\n\r\nfunction ipValidator(chrs, maskset, pos, strict, opts) {\r\n  if (pos - 1 > -1 && maskset.buffer[pos - 1] !== \".\") {\r\n    chrs = maskset.buffer[pos - 1] + chrs;\r\n    if (pos - 2 > -1 && maskset.buffer[pos - 2] !== \".\") {\r\n      chrs = maskset.buffer[pos - 2] + chrs;\r\n    } else chrs = \"0\" + chrs;\r\n  } else chrs = \"00\" + chrs;\r\n  if (\r\n    opts.greedy &&\r\n    parseInt(chrs) > 255 &&\r\n    ipValidatorRegex.test(\"00\" + chrs.charAt(2))\r\n  ) {\r\n    const buffer = [...maskset.buffer.slice(0, pos), \".\", chrs.charAt(2)];\r\n    if (buffer.join(\"\").match(/\\./g).length < 4) {\r\n      return {\r\n        refreshFromBuffer: true,\r\n        buffer,\r\n        caret: pos + 2\r\n      };\r\n    }\r\n  }\r\n  return ipValidatorRegex.test(chrs);\r\n}\r\n\r\nInputmask.extendAliases({\r\n  cssunit: {\r\n    regex: \"[+-]?[0-9]+\\\\.?([0-9]+)?(px|em|rem|ex|%|in|cm|mm|pt|pc)\"\r\n  },\r\n  url: {\r\n    // needs update => https://en.wikipedia.org/wiki/URL\r\n    regex: \"(https?|ftp)://.*\",\r\n    autoUnmask: false,\r\n    keepStatic: false,\r\n    tabThrough: true\r\n  },\r\n  ip: {\r\n    // ip-address mask\r\n    mask: \"i{1,3}.j{1,3}.k{1,3}.l{1,3}\",\r\n    definitions: {\r\n      i: {\r\n        validator: ipValidator\r\n      },\r\n      j: {\r\n        validator: ipValidator\r\n      },\r\n      k: {\r\n        validator: ipValidator\r\n      },\r\n      l: {\r\n        validator: ipValidator\r\n      }\r\n    },\r\n    onUnMask: function (maskedValue, unmaskedValue, opts) {\r\n      return maskedValue;\r\n    },\r\n    inputmode: \"decimal\",\r\n    substitutes: { \",\": \".\" }\r\n  },\r\n  email: {\r\n    // https://en.wikipedia.org/wiki/Domain_name#Domain_name_space\r\n    // https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names\r\n    // should be extended with the toplevel domains at the end\r\n    mask: function ({ separator, quantifier }) {\r\n      let emailMask =\r\n          \"*{1,64}[.*{1,64}][.*{1,64}][.*{1,63}]@-{1,63}.-{1,63}[.-{1,63}][.-{1,63}]\",\r\n        mask = emailMask;\r\n      if (separator) {\r\n        for (let i = 0; i < quantifier; i++) {\r\n          mask += `[${separator}${emailMask}]`;\r\n        }\r\n      }\r\n      return mask;\r\n    },\r\n    greedy: false,\r\n    casing: \"lower\",\r\n    separator: null,\r\n    quantifier: 5,\r\n    skipOptionalPartCharacter: \"\",\r\n    onBeforePaste: function (pastedValue, opts) {\r\n      pastedValue = pastedValue.toLowerCase();\r\n      return pastedValue.replace(\"mailto:\", \"\");\r\n    },\r\n    definitions: {\r\n      \"*\": {\r\n        validator:\r\n          \"[0-9\\uFF11-\\uFF19A-Za-z\\u0410-\\u044F\\u0401\\u0451\\u00C0-\\u00FF\\u00B5!#$%&'*+/=?^_`{|}~-]\"\r\n      },\r\n      \"-\": {\r\n        validator: \"[0-9A-Za-z-]\"\r\n      }\r\n    },\r\n    onUnMask: function (maskedValue, unmaskedValue, opts) {\r\n      return maskedValue;\r\n    },\r\n    inputmode: \"email\"\r\n  },\r\n  mac: {\r\n    mask: \"##:##:##:##:##:##\"\r\n  }, // https://en.wikipedia.org/wiki/Vehicle_identification_number\r\n  // see issue #1199\r\n  vin: {\r\n    mask: \"V{13}9{4}\",\r\n    definitions: {\r\n      V: {\r\n        validator: \"[A-HJ-NPR-Za-hj-npr-z\\\\d]\",\r\n        casing: \"upper\"\r\n      }\r\n    },\r\n    clearIncomplete: true,\r\n    autoUnmask: true\r\n  }, // http://rion.io/2013/09/10/validating-social-security-numbers-through-regular-expressions-2/\r\n  // https://en.wikipedia.org/wiki/Social_Security_number\r\n  ssn: {\r\n    mask: \"999-99-9999\",\r\n    postValidation: function (\r\n      buffer,\r\n      pos,\r\n      c,\r\n      currentResult,\r\n      opts,\r\n      maskset,\r\n      strict\r\n    ) {\r\n      const bffr = getMaskTemplate.call(\r\n        this,\r\n        true,\r\n        getLastValidPosition.call(this),\r\n        true,\r\n        true\r\n      );\r\n      return /^(?!219-09-9999|078-05-1120)(?!666|000|9.{2}).{3}-(?!00).{2}-(?!0{4}).{4}$/.test(\r\n        bffr.join(\"\")\r\n      );\r\n    }\r\n  }\r\n});\r\n","/*\r\n Input Mask plugin extensions\r\n http://github.com/RobinHerbots/inputmask\r\n Copyright (c) Robin Herbots\r\n Licensed under the MIT license\r\n */\r\nimport Inputmask from \"../inputmask\";\r\n\r\nconst $ = Inputmask.dependencyLib;\r\n\r\n$.extend(true, Inputmask.prototype.i18n, {\r\n  dayNames: [\r\n    \"Mon\",\r\n    \"Tue\",\r\n    \"Wed\",\r\n    \"Thu\",\r\n    \"Fri\",\r\n    \"Sat\",\r\n    \"Sun\",\r\n    \"Monday\",\r\n    \"Tuesday\",\r\n    \"Wednesday\",\r\n    \"Thursday\",\r\n    \"Friday\",\r\n    \"Saturday\",\r\n    \"Sunday\"\r\n  ],\r\n  monthNames: [\r\n    \"Jan\",\r\n    \"Feb\",\r\n    \"Mar\",\r\n    \"Apr\",\r\n    \"May\",\r\n    \"Jun\",\r\n    \"Jul\",\r\n    \"Aug\",\r\n    \"Sep\",\r\n    \"Oct\",\r\n    \"Nov\",\r\n    \"Dec\",\r\n    \"January\",\r\n    \"February\",\r\n    \"March\",\r\n    \"April\",\r\n    \"May\",\r\n    \"June\",\r\n    \"July\",\r\n    \"August\",\r\n    \"September\",\r\n    \"October\",\r\n    \"November\",\r\n    \"December\"\r\n  ],\r\n  ordinalSuffix: [\"st\", \"nd\", \"rd\", \"th\"]\r\n});\r\n","/*\r\n Input Mask plugin extensions\r\n http://github.com/RobinHerbots/inputmask\r\n Copyright (c) Robin Herbots\r\n Licensed under the MIT license\r\n */\r\nimport { escapeRegex } from \"../escapeRegex\";\r\nimport Inputmask from \"../inputmask\";\r\nimport { keyCode, keys } from \"../keycode.js\";\r\nimport { seekNext } from \"../positioning\";\r\nimport { getMaskTemplate, getTest } from \"../validation-tests\";\r\nimport \"./inputmask.date.i18n\";\r\n\r\nconst $ = Inputmask.dependencyLib;\r\n\r\nclass DateObject {\r\n  constructor(mask, format, opts, inputmask) {\r\n    this.mask = mask;\r\n    this.format = format;\r\n    this.opts = opts;\r\n    this.inputmask = inputmask;\r\n    this._date = new Date(1, 0, 1);\r\n    this.initDateObject(mask, this.opts, this.inputmask);\r\n  }\r\n\r\n  get date() {\r\n    if (this._date === undefined) {\r\n      this._date = new Date(1, 0, 1);\r\n      this.initDateObject(undefined, this.opts, this.inputmask);\r\n    }\r\n    return this._date;\r\n  }\r\n\r\n  initDateObject(mask, opts, inputmask) {\r\n    let match,\r\n      lastNdx = -1;\r\n    getTokenizer(opts).lastIndex = 0;\r\n    while ((match = getTokenizer(opts).exec(this.format))) {\r\n      if (match.index >= lastNdx) {\r\n        let dynMatches = /\\d+$/.exec(match[0]),\r\n          fcode = dynMatches ? match[0][0] + \"x\" : match[0],\r\n          value;\r\n        if (mask !== undefined) {\r\n          // console.log(\"mask\", mask);\r\n          if (dynMatches) {\r\n            const lastIndex = getTokenizer(opts).lastIndex,\r\n              tokenMatch = getTokenMatch.call(\r\n                inputmask,\r\n                match.index,\r\n                opts,\r\n                inputmask && inputmask.maskset\r\n              );\r\n            getTokenizer(opts).lastIndex = lastIndex;\r\n            value = mask.slice(0, mask.indexOf(tokenMatch.nextMatch[0]));\r\n          } else {\r\n            let targetSymbol = match[0][0],\r\n              ndx = match.index;\r\n            while (\r\n              inputmask &&\r\n              (opts.placeholder[\r\n                `${match.index}'${\r\n                  getTest.call(inputmask, ndx).match.placeholder\r\n                }`\r\n              ] || getTest.call(inputmask, ndx).match.placeholder) ===\r\n                targetSymbol\r\n            ) {\r\n              ndx++;\r\n            }\r\n            lastNdx = ndx;\r\n            const targetMatchLength = ndx - match.index;\r\n            value = mask.slice(\r\n              0,\r\n              targetMatchLength ||\r\n                (formatcode(fcode) && formatcode(fcode)[4]) ||\r\n                fcode.length\r\n            );\r\n          }\r\n          mask = mask.slice(value.length);\r\n        }\r\n\r\n        if (Object.prototype.hasOwnProperty.call(formatCode, fcode)) {\r\n          this.setValue(\r\n            this,\r\n            value,\r\n            fcode,\r\n            formatcode(fcode)[2],\r\n            formatcode(fcode)[1]\r\n          );\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  setValue(dateObj, value, fcode, targetProp, dateOperation) {\r\n    if (value !== undefined) {\r\n      switch (targetProp) {\r\n        case \"ampm\":\r\n          dateObj[targetProp] = value;\r\n          dateObj[\"raw\" + targetProp] = value.replace(/\\s/g, \"_\");\r\n          break;\r\n        case \"month\":\r\n          if (fcode === \"MMM\" || fcode === \"MMMM\") {\r\n            fcode === \"MMM\"\r\n              ? (dateObj[targetProp] = pad(\r\n                  i18n.monthNames\r\n                    .slice(0, 12)\r\n                    .findIndex(\r\n                      (item) => value.toLowerCase() === item.toLowerCase()\r\n                    ) + 1,\r\n                  2\r\n                ))\r\n              : (dateObj[targetProp] = pad(\r\n                  i18n.monthNames\r\n                    .slice(12, 24)\r\n                    .findIndex(\r\n                      (item) => value.toLowerCase() === item.toLowerCase()\r\n                    ) + 1,\r\n                  2\r\n                ));\r\n            dateObj[targetProp] =\r\n              dateObj[targetProp] === \"00\"\r\n                ? \"\"\r\n                : dateObj[targetProp].toString();\r\n            dateObj[\"raw\" + targetProp] = dateObj[targetProp];\r\n            break;\r\n          }\r\n        // eslint-disable-next-line no-fallthrough\r\n        default:\r\n          dateObj[targetProp] = value.replace(/[^0-9]/g, \"0\");\r\n          dateObj[\"raw\" + targetProp] = value.replace(/\\s/g, \"_\");\r\n      }\r\n    }\r\n    if (dateOperation !== undefined) {\r\n      let datavalue = dateObj[targetProp];\r\n      if (\r\n        (targetProp === \"day\" && parseInt(datavalue) === 29) ||\r\n        (targetProp === \"month\" && parseInt(datavalue) === 2)\r\n      ) {\r\n        if (\r\n          parseInt(dateObj.day) === 29 &&\r\n          parseInt(dateObj.month) === 2 &&\r\n          (dateObj.year === \"\" || dateObj.year === undefined)\r\n        ) {\r\n          // set temporary leap year in dateObj\r\n          dateObj._date.setFullYear(2012, 1, 29);\r\n        }\r\n      }\r\n      if (targetProp === \"day\") {\r\n        useDateObject = true;\r\n        if (parseInt(datavalue) === 0) datavalue = 1;\r\n      }\r\n      if (targetProp === \"month\") useDateObject = true;\r\n      if (targetProp === \"year\") {\r\n        useDateObject = true;\r\n        if (datavalue.length < formatcode(fcode)[4])\r\n          datavalue = pad(datavalue, formatcode(fcode)[4], true);\r\n      }\r\n      if ((datavalue !== \"\" && !isNaN(datavalue)) || targetProp === \"ampm\")\r\n        dateOperation.call(dateObj._date, datavalue);\r\n    }\r\n  }\r\n\r\n  reset() {\r\n    this._date = new Date(1, 0, 1);\r\n  }\r\n\r\n  reInit() {\r\n    this._date = undefined;\r\n    // eslint-disable-next-line no-unused-expressions\r\n    this.date;\r\n  }\r\n}\r\n\r\nlet useDateObject = false;\r\nconst currentYear = new Date().getFullYear(),\r\n  i18n = Inputmask.prototype.i18n,\r\n  // supported codes for formatting\r\n  // https://tc39.es/ecma262/multipage/numbers-and-dates.html#sec-date-time-string-format\r\n  // https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings?view=netframework-4.7\r\n  // https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\r\n  formatCode = {\r\n    // regex, valueSetter, type, displayformatter, #entries (optional)\r\n    d: [\r\n      \"[1-9]|[12][0-9]|3[01]\",\r\n      Date.prototype.setDate,\r\n      \"day\",\r\n      Date.prototype.getDate\r\n    ], // Day of the month as digits; no leading zero for single-digit days.\r\n    dd: [\r\n      \"0[1-9]|[12][0-9]|3[01]\",\r\n      Date.prototype.setDate,\r\n      \"day\",\r\n      function () {\r\n        return pad(Date.prototype.getDate.call(this), 2);\r\n      }\r\n    ], // Day of the month as digits; leading zero for single-digit days.\r\n    ddd: [\"\"], // Day of the week as a three-letter abbreviation.\r\n    dddd: [\"\"], // Day of the week as its full name.\r\n    M: [\r\n      \"[1-9]|1[012]\",\r\n      function (val) {\r\n        let mval = val ? parseInt(val) : 0;\r\n        if (mval > 0) mval--;\r\n        return Date.prototype.setMonth.call(this, mval);\r\n      },\r\n      \"month\",\r\n      function () {\r\n        return Date.prototype.getMonth.call(this) + 1;\r\n      }\r\n    ], // Month as digits; no leading zero for single-digit months.\r\n    MM: [\r\n      \"0[1-9]|1[012]\",\r\n      function (val) {\r\n        let mval = val ? parseInt(val) : 0;\r\n        if (mval > 0) mval--;\r\n        return Date.prototype.setMonth.call(this, mval);\r\n      },\r\n      \"month\",\r\n      function () {\r\n        return pad(Date.prototype.getMonth.call(this) + 1, 2);\r\n      }\r\n    ], // Month as digits; leading zero for single-digit months.\r\n    MMM: [\r\n      i18n.monthNames.slice(0, 12).join(\"|\"),\r\n      function (val) {\r\n        const mval = i18n.monthNames\r\n          .slice(0, 12)\r\n          .findIndex((item) => val.toLowerCase() === item.toLowerCase());\r\n        return mval !== -1 ? Date.prototype.setMonth.call(this, mval) : false;\r\n      },\r\n      \"month\",\r\n      function () {\r\n        return i18n.monthNames.slice(0, 12)[Date.prototype.getMonth.call(this)];\r\n      }\r\n    ], // Month as a three-letter abbreviation.\r\n    MMMM: [\r\n      i18n.monthNames.slice(12, 24).join(\"|\"),\r\n      function (val) {\r\n        const mval = i18n.monthNames\r\n          .slice(12, 24)\r\n          .findIndex((item) => val.toLowerCase() === item.toLowerCase());\r\n        return mval !== -1 ? Date.prototype.setMonth.call(this, mval) : false;\r\n      },\r\n      \"month\",\r\n      function () {\r\n        return i18n.monthNames.slice(12, 24)[\r\n          Date.prototype.getMonth.call(this)\r\n        ];\r\n      }\r\n    ], // Month as its full name.\r\n    yy: [\r\n      \"[0-9]{2}\",\r\n      function (val) {\r\n        const centuryPart = new Date().getFullYear().toString().slice(0, 2);\r\n        Date.prototype.setFullYear.call(this, `${centuryPart}${val}`);\r\n      },\r\n      \"year\",\r\n      function () {\r\n        return pad(Date.prototype.getFullYear.call(this), 2);\r\n      },\r\n      2\r\n    ], // Year as last two digits; leading zero for years less than 10.\r\n    yyyy: [\r\n      \"[0-9]{4}\",\r\n      Date.prototype.setFullYear,\r\n      \"year\",\r\n      function () {\r\n        return pad(Date.prototype.getFullYear.call(this), 4);\r\n      },\r\n      4\r\n    ],\r\n    h: [\r\n      \"[1-9]|1[0-2]\",\r\n      Date.prototype.setHours,\r\n      \"hours\",\r\n      Date.prototype.getHours\r\n    ], // Hours; no leading zero for single-digit hours (12-hour clock).\r\n    hh: [\r\n      \"0[1-9]|1[0-2]\",\r\n      Date.prototype.setHours,\r\n      \"hours\",\r\n      function () {\r\n        return pad(Date.prototype.getHours.call(this), 2);\r\n      }\r\n    ], // Hours; leading zero for single-digit hours (12-hour clock).\r\n    hx: [\r\n      function (x) {\r\n        return `[0-9]{${x}}`;\r\n      },\r\n      Date.prototype.setHours,\r\n      \"hours\",\r\n      function (x) {\r\n        return Date.prototype.getHours;\r\n      }\r\n    ], // Hours; no limit; set maximum digits\r\n    H: [\r\n      \"1?[0-9]|2[0-3]\",\r\n      Date.prototype.setHours,\r\n      \"hours\",\r\n      Date.prototype.getHours\r\n    ], // Hours; no leading zero for single-digit hours (24-hour clock).\r\n    HH: [\r\n      \"0[0-9]|1[0-9]|2[0-3]\",\r\n      Date.prototype.setHours,\r\n      \"hours\",\r\n      function () {\r\n        return pad(Date.prototype.getHours.call(this), 2);\r\n      }\r\n    ], // Hours; leading zero for single-digit hours (24-hour clock).\r\n    Hx: [\r\n      function (x) {\r\n        return `[0-9]{${x}}`;\r\n      },\r\n      Date.prototype.setHours,\r\n      \"hours\",\r\n      function (x) {\r\n        return function () {\r\n          return pad(Date.prototype.getHours.call(this), x);\r\n        };\r\n      }\r\n    ], // Hours; no limit; set maximum digits\r\n    m: [\r\n      \"[1-5]?[0-9]\",\r\n      Date.prototype.setMinutes,\r\n      \"minutes\",\r\n      Date.prototype.getMinutes\r\n    ], // Minutes; no leading zero for single-digit minutes. Uppercase M unlike CF timeFormat's m to avoid conflict with months.\r\n    mm: [\r\n      \"0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]\",\r\n      Date.prototype.setMinutes,\r\n      \"minutes\",\r\n      function () {\r\n        return pad(Date.prototype.getMinutes.call(this), 2);\r\n      }\r\n    ], // Minutes; leading zero for single-digit minutes. Uppercase MM unlike CF timeFormat's mm to avoid conflict with months.\r\n    s: [\r\n      \"[1-5]?[0-9]\",\r\n      Date.prototype.setSeconds,\r\n      \"seconds\",\r\n      Date.prototype.getSeconds\r\n    ], // Seconds; no leading zero for single-digit seconds.\r\n    ss: [\r\n      \"0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]\",\r\n      Date.prototype.setSeconds,\r\n      \"seconds\",\r\n      function () {\r\n        return pad(Date.prototype.getSeconds.call(this), 2);\r\n      }\r\n    ], // Seconds; leading zero for single-digit seconds.\r\n    l: [\r\n      \"[0-9]{3}\",\r\n      Date.prototype.setMilliseconds,\r\n      \"milliseconds\",\r\n      function () {\r\n        return pad(Date.prototype.getMilliseconds.call(this), 3);\r\n      },\r\n      3\r\n    ], // Milliseconds. 3 digits.\r\n    L: [\r\n      \"[0-9]{2}\",\r\n      Date.prototype.setMilliseconds,\r\n      \"milliseconds\",\r\n      function () {\r\n        return pad(Date.prototype.getMilliseconds.call(this), 2);\r\n      },\r\n      2\r\n    ], // Milliseconds. 2 digits.\r\n    t: [\"[ap]\", setAMPM, \"ampm\", getAMPM, 1], // Lowercase, single-character time marker string: a or p.\r\n    tt: [\"[ap]m\", setAMPM, \"ampm\", getAMPM, 2], // two-character time marker string: am or pm.\r\n    T: [\"[AP]\", setAMPM, \"ampm\", getAMPM, 1], // single-character time marker string: A or P.\r\n    TT: [\"[AP]M\", setAMPM, \"ampm\", getAMPM, 2], // two-character time marker string: AM or PM.\r\n    Z: [\".*\", undefined, \"Z\", getTimeZoneAbbreviated], // US timezone abbreviation, e.g. EST or MDT. With non-US timezones or in the Opera browser, the GMT/UTC offset is returned, e.g. GMT-0500\r\n    o: [\"\"], // GMT/UTC timezone offset, e.g. -0500 or +0230.\r\n    S: [\"\"] // The date's ordinal suffix (st, nd, rd, or th).\r\n  },\r\n  formatCodeAlias = {\r\n    D: \"d\",\r\n    DD: \"dd\",\r\n    DDD: \"ddd\",\r\n    DDDD: \"dddd\",\r\n    YY: \"yy\",\r\n    YYYY: \"yyyy\",\r\n    sss: \"L\"\r\n  },\r\n  formatAlias = {\r\n    isoDate: \"yyyy-MM-dd\", // 2007-06-09\r\n    isoTime: \"HH:mm:ss\", // 17:46:21\r\n    isoDateTime: \"yyyy-MM-dd\\\\THH:mm:ss\", // 2007-06-09T17:46:21\r\n    isoUtcDateTime: \"UTC:yyyy-MM-dd\\\\THH:mm:ss\\\\Z\" // 2007-06-09T22:46:21Z\r\n  };\r\n\r\nfunction setAMPM(value) {\r\n  const hours = this.getHours();\r\n  if (value.toLowerCase().includes(\"p\")) {\r\n    this.setHours(hours + 12);\r\n    // console.log(\"setAMPM + 12\");\r\n  } else if (value.toLowerCase().includes(\"a\") && hours >= 12) {\r\n    this.setHours(hours - 12);\r\n  }\r\n}\r\n\r\nfunction getAMPM() {\r\n  let date = this,\r\n    hours = date.getHours();\r\n  hours = hours || 12;\r\n  return hours >= 12 ? \"PM\" : \"AM\";\r\n}\r\n\r\nfunction getTimeZoneAbbreviated() {\r\n  // not perfect, but ok for now\r\n  let date = this,\r\n    { 1: tz } = date.toString().match(/\\((.+)\\)/);\r\n  if (tz.includes(\" \")) {\r\n    tz = tz.replace(\"-\", \" \").toUpperCase();\r\n    tz = tz\r\n      .split(\" \")\r\n      .map(([first]) => first)\r\n      .join(\"\");\r\n  }\r\n  return tz;\r\n}\r\n\r\nfunction formatcode(match) {\r\n  const fcMatch = formatCodeAlias[match] || match,\r\n    dynMatches = /\\d+$/.exec(fcMatch);\r\n  if (dynMatches && dynMatches[0] !== undefined) {\r\n    const fcode = formatCode[fcMatch[0] + \"x\"].slice(\"\");\r\n    fcode[0] = fcode[0](dynMatches[0]);\r\n    fcode[3] = fcode[3](dynMatches[0]);\r\n\r\n    return fcode;\r\n  } else if (formatCode[fcMatch]) {\r\n    return formatCode[fcMatch];\r\n  }\r\n\r\n  return undefined;\r\n}\r\n\r\nfunction getTokenizer(opts) {\r\n  if (!opts.tokenizer) {\r\n    const tokens = [],\r\n      dyntokens = [],\r\n      formatCodeKeys = Object.keys(formatCode).concat(\r\n        Object.keys(formatCodeAlias)\r\n      );\r\n\r\n    for (const ndx of formatCodeKeys) {\r\n      if (/\\.*x$/.test(ndx)) {\r\n        const dynToken = ndx[0] + \"\\\\d+\";\r\n        if (dyntokens.indexOf(dynToken) === -1) {\r\n          dyntokens.push(dynToken);\r\n        }\r\n      } else if (tokens.indexOf(ndx[0]) === -1) {\r\n        tokens.push(ndx[0]);\r\n      }\r\n    }\r\n    opts.tokenizer =\r\n      \"(\" +\r\n      (dyntokens.length > 0 ? dyntokens.join(\"|\") + \"|\" : \"\") +\r\n      tokens.join(\"+|\") +\r\n      \"+)+?|.\";\r\n    opts.tokenizer = new RegExp(opts.tokenizer, \"g\");\r\n  }\r\n\r\n  return opts.tokenizer;\r\n}\r\n\r\nfunction prefillYear(dateParts, currentResult, opts) {\r\n  if (dateParts.year !== dateParts.rawyear) {\r\n    const crrntyear = currentYear.toString(),\r\n      enteredPart = dateParts.rawyear.replace(/[^0-9]/g, \"\"),\r\n      currentYearPart = crrntyear.slice(0, enteredPart.length),\r\n      currentYearNextPart = crrntyear.slice(enteredPart.length);\r\n    if (enteredPart.length === 2 && enteredPart === currentYearPart) {\r\n      const entryCurrentYear = new Date(\r\n        currentYear,\r\n        dateParts.month - 1,\r\n        dateParts.day\r\n      );\r\n      if (\r\n        dateParts.day == entryCurrentYear.getDate() &&\r\n        (!opts.max || opts.max.date.getTime() >= entryCurrentYear.getTime())\r\n      ) {\r\n        // update dateParts\r\n        dateParts.date.setFullYear(currentYear);\r\n        dateParts.year = crrntyear;\r\n        // update result\r\n        currentResult.insert = [\r\n          {\r\n            pos: currentResult.pos + 1,\r\n            c: currentYearNextPart[0]\r\n          },\r\n          {\r\n            pos: currentResult.pos + 2,\r\n            c: currentYearNextPart[1]\r\n          }\r\n        ];\r\n      }\r\n    }\r\n  }\r\n\r\n  return currentResult;\r\n}\r\n\r\nfunction isValidDate(dateParts, currentResult, opts) {\r\n  const inputmask = this;\r\n  if (!useDateObject) return true;\r\n  if (\r\n    dateParts.rawday === undefined ||\r\n    (!isFinite(dateParts.rawday) &&\r\n      new Date(\r\n        dateParts.date.getFullYear(),\r\n        isFinite(dateParts.rawmonth)\r\n          ? dateParts.month\r\n          : dateParts.date.getMonth() + 1,\r\n        0\r\n      ).getDate() >= dateParts.day) ||\r\n    (dateParts.day == \"29\" &&\r\n      (!isFinite(dateParts.rawyear) ||\r\n        dateParts.rawyear === undefined ||\r\n        dateParts.rawyear === \"\")) ||\r\n    new Date(\r\n      dateParts.date.getFullYear(),\r\n      isFinite(dateParts.rawmonth)\r\n        ? dateParts.month\r\n        : dateParts.date.getMonth() + 1,\r\n      0\r\n    ).getDate() >= dateParts.day\r\n  ) {\r\n    return currentResult;\r\n  } else {\r\n    // take corrective action if possible\r\n    if (dateParts.day == \"29\") {\r\n      const tokenMatch = getTokenMatch.call(\r\n        inputmask,\r\n        currentResult.pos,\r\n        opts,\r\n        inputmask.maskset\r\n      );\r\n      if (\r\n        tokenMatch.targetMatch &&\r\n        [\"yyyy\", \"YYYY\"].includes(tokenMatch.targetMatch[0]) &&\r\n        currentResult.pos - tokenMatch.targetMatchIndex === 2\r\n      ) {\r\n        currentResult.remove = currentResult.pos + 1;\r\n        return currentResult;\r\n      }\r\n    } else if (\r\n      dateParts.date.getMonth() == 2 &&\r\n      dateParts.day == \"30\" &&\r\n      currentResult.c !== undefined\r\n    ) {\r\n      dateParts.day = \"03\";\r\n      dateParts.date.setDate(3);\r\n      dateParts.date.setMonth(1);\r\n      currentResult.insert = [\r\n        { pos: currentResult.pos, c: \"0\" },\r\n        { pos: currentResult.pos + 1, c: currentResult.c }\r\n      ];\r\n      currentResult.caret = seekNext.call(this, currentResult.pos + 1);\r\n      return currentResult;\r\n    }\r\n    return false;\r\n  }\r\n}\r\n\r\nfunction isDateInRange(dateParts, result, opts, maskset, fromCheckval) {\r\n  if (!result) return result;\r\n  if (result && opts.min) {\r\n    if (\r\n      /* useDateObject && (dateParts[\"year\"] === undefined || dateParts[\"yearSet\"]) && */ !isNaN(\r\n        opts.min.date.getTime()\r\n      )\r\n    ) {\r\n      let match;\r\n      dateParts.reset();\r\n      getTokenizer(opts).lastIndex = 0;\r\n      while ((match = getTokenizer(opts).exec(opts.inputFormat))) {\r\n        var fcode;\r\n        if ((fcode = formatcode(match[0]))) {\r\n          if (fcode[3]) {\r\n            let setFn = fcode[1],\r\n              current = dateParts[fcode[2]],\r\n              minVal = opts.min[fcode[2]],\r\n              maxVal = opts.max ? opts.max[fcode[2]] : minVal + 1,\r\n              curVal = [],\r\n              forceCurrentValue = false;\r\n            for (let i = 0; i < minVal.length; i++) {\r\n              if (\r\n                maskset.validPositions[i + match.index] === undefined &&\r\n                !forceCurrentValue\r\n              ) {\r\n                if (i + match.index == 0 && current[i] < minVal[i]) {\r\n                  curVal[i] = current[i];\r\n                  forceCurrentValue = true;\r\n                } else {\r\n                  curVal[i] = minVal[i];\r\n                }\r\n                // ADD +1 to whole\r\n                if (\r\n                  fcode[2] === \"year\" &&\r\n                  current.length - 1 == i &&\r\n                  minVal != maxVal\r\n                )\r\n                  curVal = (parseInt(curVal.join(\"\")) + 1).toString().split(\"\");\r\n                if (\r\n                  fcode[2] === \"ampm\" &&\r\n                  minVal != maxVal &&\r\n                  opts.min.date.getTime() > dateParts.date.getTime()\r\n                )\r\n                  curVal[i] = maxVal[i];\r\n              } else {\r\n                curVal[i] = current[i];\r\n                forceCurrentValue = forceCurrentValue || current[i] > minVal[i];\r\n              }\r\n            }\r\n\r\n            setFn.call(dateParts._date, curVal.join(\"\"));\r\n          }\r\n        }\r\n      }\r\n\r\n      result = opts.min.date.getTime() <= dateParts.date.getTime();\r\n      dateParts.reInit();\r\n    }\r\n  }\r\n\r\n  if (result && opts.max) {\r\n    if (!isNaN(opts.max.date.getTime())) {\r\n      result = opts.max.date.getTime() >= dateParts.date.getTime();\r\n    }\r\n  }\r\n  return result;\r\n}\r\n\r\n// parse the given format and return a mask pattern\r\n// when a dateObjValue is passed a datestring in the requested format is returned\r\nfunction parse(format, dateObjValue, opts) {\r\n  // parse format to regex string\r\n  let mask = \"\",\r\n    match,\r\n    fcode,\r\n    ndx = 0,\r\n    escaped = false;\r\n  const placeHolder = {};\r\n  getTokenizer(opts).lastIndex = 0;\r\n  while ((match = getTokenizer(opts).exec(format))) {\r\n    if (match[0] === opts.escapeChar) {\r\n      escaped = true;\r\n    } else {\r\n      if (dateObjValue === undefined) {\r\n        if (!escaped && (fcode = formatcode(match[0]))) {\r\n          mask += \"(\" + fcode[0] + \")\";\r\n          // map placeholder to placeholder object and set placeholder mappings\r\n          if (opts.placeholder && opts.placeholder !== \"\") {\r\n            placeHolder[ndx] =\r\n              opts.placeholder[match.index % opts.placeholder.length];\r\n            // internal use of datetime alias\r\n            placeHolder[\r\n              `${match.index}'${\r\n                opts.placeholder[match.index % opts.placeholder.length]\r\n              }`\r\n            ] = match[0].charAt(0);\r\n          } else {\r\n            placeHolder[ndx] = match[0].charAt(0);\r\n          }\r\n        } else {\r\n          switch (match[0]) {\r\n            case \"[\":\r\n              mask += \"(\";\r\n              break;\r\n            case \"]\":\r\n              mask += \")?\";\r\n              break;\r\n            default:\r\n              mask += escapeRegex(match[0]);\r\n              placeHolder[ndx] = match[0].charAt(0);\r\n          }\r\n        }\r\n      } else {\r\n        if (!escaped && (fcode = formatcode(match[0]))) {\r\n          if (fcode[3]) {\r\n            const getFn = fcode[3];\r\n            mask += getFn.call(dateObjValue.date);\r\n          } else if (fcode[2] && dateObjValue[\"raw\" + fcode[2]] !== undefined) {\r\n            mask += dateObjValue[\"raw\" + fcode[2]];\r\n          } else {\r\n            mask += match[0];\r\n          }\r\n        } else {\r\n          mask += match[0];\r\n        }\r\n      }\r\n      ndx++;\r\n      escaped = false;\r\n    }\r\n  }\r\n  if (dateObjValue === undefined) {\r\n    // console.log(JSON.stringify(placeHolder));\r\n    opts.placeholder = placeHolder;\r\n  }\r\n  return mask;\r\n}\r\n\r\n// padding function\r\nfunction pad(val, len, right) {\r\n  val = String(val);\r\n  len = len || 2;\r\n  while (val.length < len) val = right ? val + \"0\" : \"0\" + val;\r\n  return val;\r\n}\r\n\r\nfunction analyseMask(mask, format, opts) {\r\n  const inputmask = this;\r\n\r\n  if (typeof mask === \"string\") {\r\n    return new DateObject(mask, format, opts, inputmask);\r\n  } else if (\r\n    mask &&\r\n    typeof mask === \"object\" &&\r\n    Object.prototype.hasOwnProperty.call(mask, \"date\")\r\n  ) {\r\n    return mask;\r\n  }\r\n  return undefined;\r\n}\r\n\r\nfunction importDate(dateObj, opts) {\r\n  return parse(opts.inputFormat, { date: dateObj }, opts);\r\n}\r\n\r\nfunction getTokenMatch(pos, opts, maskset) {\r\n  let inputmask = this,\r\n    calcPos = 0,\r\n    targetMatch,\r\n    match,\r\n    matchLength = 0;\r\n\r\n  getTokenizer(opts).lastIndex = 0;\r\n  while ((match = getTokenizer(opts).exec(opts.inputFormat))) {\r\n    // console.log(`match.index ${match.index}`);\r\n    const dynMatches = /\\d+$/.exec(match[0]);\r\n    if (dynMatches) {\r\n      matchLength = parseInt(dynMatches[0]);\r\n    } else {\r\n      let targetSymbol = match[0][0],\r\n        ndx = calcPos;\r\n      while (\r\n        inputmask &&\r\n        (opts.placeholder[\r\n          `${match.index}'${getTest.call(inputmask, ndx).match.placeholder}`\r\n        ] || getTest.call(inputmask, ndx).match.placeholder) === targetSymbol\r\n      ) {\r\n        ndx++;\r\n      }\r\n      matchLength = ndx - calcPos;\r\n      if (matchLength === 0) matchLength = match[0].length;\r\n    }\r\n\r\n    calcPos += matchLength;\r\n    // console.log(`calcPos ${calcPos}`);\r\n\r\n    if (calcPos >= pos + 1) {\r\n      let masksetHint = \"\";\r\n      if (maskset && maskset.tests[pos]) {\r\n        const filteredPlaceholders = Object.keys(opts.placeholder).filter(\r\n          (value) => {\r\n            for (let i = match.index - 1; i < calcPos; i++) {\r\n              if (value === `${i}'${maskset.tests[pos][0].match.placeholder}`) {\r\n                return true;\r\n              }\r\n            }\r\n            return false;\r\n          }\r\n        );\r\n\r\n        masksetHint =\r\n          filteredPlaceholders.length > 0\r\n            ? opts.placeholder[filteredPlaceholders[0]]\r\n            : maskset.tests[pos][0].match.placeholder;\r\n      }\r\n      // console.log(masksetHint);\r\n      if (match[0].indexOf(masksetHint) !== -1) {\r\n        // console.log(`match ${masksetHint} ${calcPos} >= ${pos + 1}`);\r\n        targetMatch = match;\r\n        match = getTokenizer(opts).exec(opts.inputFormat);\r\n        break;\r\n      } else {\r\n        // console.log(`no match ${masksetHint} ${calcPos} >= ${pos + 1}`);\r\n      }\r\n    }\r\n  }\r\n  return {\r\n    targetMatchIndex: calcPos - matchLength,\r\n    nextMatch: match,\r\n    targetMatch\r\n  };\r\n}\r\n\r\nInputmask.extendAliases({\r\n  datetime: {\r\n    mask: function (opts) {\r\n      // do not allow numeric input in datetime alias\r\n      opts.numericInput = false;\r\n\r\n      // localize\r\n      formatCode.S = i18n.ordinalSuffix.join(\"|\");\r\n\r\n      opts.inputFormat = formatAlias[opts.inputFormat] || opts.inputFormat; // resolve possible formatAlias\r\n      if (opts.repeat) {\r\n        opts.repeat = parseInt(opts.repeat.toString());\r\n        if (opts.repeat > 0) {\r\n          let inputFormat = \"\";\r\n          for (let i = 0; i < opts.repeat; i++) {\r\n            inputFormat = inputFormat + opts.inputFormat;\r\n          }\r\n          opts.inputFormat = inputFormat;\r\n          opts.repeat = 0;\r\n        }\r\n      }\r\n      opts.displayFormat =\r\n        formatAlias[opts.displayFormat] ||\r\n        opts.displayFormat ||\r\n        opts.inputFormat; // resolve possible formatAlias\r\n      opts.outputFormat =\r\n        formatAlias[opts.outputFormat] || opts.outputFormat || opts.inputFormat; // resolve possible formatAlias\r\n      // opts.placeholder = opts.placeholder !== \"\" ? opts.placeholder : opts.inputFormat.replace(/[[\\]]/, \"\");\r\n      opts.regex = parse(opts.inputFormat, undefined, opts);\r\n      // console.log(\"inputFormat\", opts.regex);\r\n      opts.min = analyseMask(opts.min, opts.inputFormat, opts);\r\n      opts.max = analyseMask(opts.max, opts.inputFormat, opts);\r\n      return null; // migrate to regex mask\r\n    },\r\n    placeholder: \"\", // set default as none (~ auto); when a custom placeholder is passed it will be used\r\n    inputFormat: \"isoDateTime\", // format used to input the date\r\n    displayFormat: null, // visual format when the input looses focus\r\n    outputFormat: null, // unmasking format\r\n    min: null, // needs to be in the same format as the inputfornat\r\n    max: null, // needs to be in the same format as the inputfornat,\r\n    skipOptionalPartCharacter: \"\",\r\n    preValidation: function (\r\n      buffer,\r\n      pos,\r\n      c,\r\n      isSelection,\r\n      opts,\r\n      maskset,\r\n      caretPos,\r\n      strict\r\n    ) {\r\n      const inputmask = this;\r\n      if (strict) return true;\r\n      if (isNaN(c) && buffer[pos] !== c) {\r\n        const tokenMatch = getTokenMatch.call(inputmask, pos, opts, maskset);\r\n        if (\r\n          tokenMatch.nextMatch &&\r\n          tokenMatch.nextMatch[0] === c &&\r\n          tokenMatch.targetMatch[0].length > 1\r\n        ) {\r\n          const validator = formatcode(tokenMatch.targetMatch[0])[0];\r\n          if (new RegExp(validator).test(\"0\" + buffer[pos - 1])) {\r\n            buffer[pos] = buffer[pos - 1];\r\n            buffer[pos - 1] = \"0\";\r\n            return {\r\n              fuzzy: true,\r\n              buffer,\r\n              refreshFromBuffer: { start: pos - 1, end: pos + 1 },\r\n              pos: pos + 1\r\n            };\r\n          }\r\n        }\r\n      }\r\n      return true;\r\n    },\r\n    postValidation: function (\r\n      buffer,\r\n      pos,\r\n      c,\r\n      currentResult,\r\n      opts,\r\n      maskset,\r\n      strict,\r\n      fromCheckval\r\n    ) {\r\n      const inputmask = this;\r\n\r\n      if (strict) return true;\r\n      let tokenMatch, validator;\r\n      if (currentResult === false) {\r\n        // try some shifting\r\n        tokenMatch = getTokenMatch.call(inputmask, pos + 1, opts, maskset);\r\n        if (\r\n          tokenMatch.targetMatch &&\r\n          tokenMatch.targetMatchIndex === pos &&\r\n          tokenMatch.targetMatch[0].length > 1 &&\r\n          formatcode(tokenMatch.targetMatch[0]) !== undefined\r\n        ) {\r\n          validator = formatcode(tokenMatch.targetMatch[0])[0];\r\n        } else {\r\n          tokenMatch = getTokenMatch.call(inputmask, pos + 2, opts, maskset);\r\n          if (\r\n            tokenMatch.targetMatch &&\r\n            tokenMatch.targetMatchIndex === pos + 1 &&\r\n            tokenMatch.targetMatch[0].length > 1 &&\r\n            formatcode(tokenMatch.targetMatch[0]) !== undefined\r\n          ) {\r\n            validator = formatcode(tokenMatch.targetMatch[0]);\r\n          }\r\n        }\r\n        if (validator !== undefined) {\r\n          // correct position ~ pos in front of shifted targetMatch\r\n          pos = tokenMatch.targetMatchIndex;\r\n          if (\r\n            maskset.validPositions[pos + 1] !== undefined &&\r\n            new RegExp(validator).test(c + \"0\")\r\n          ) {\r\n            buffer[pos] = c;\r\n            buffer[pos + 1] = \"0\";\r\n            currentResult = {\r\n              // insert: [{pos: pos, c: \"0\"}, {pos: pos + 1, c: c}],\r\n              pos: pos + 2, // this will triggeer a refreshfrombuffer\r\n              caret: pos + 1\r\n            };\r\n          } else if (new RegExp(validator).test(\"0\" + c)) {\r\n            buffer[pos] = \"0\";\r\n            buffer[pos + 1] = c;\r\n            currentResult = {\r\n              // insert: [{pos: pos, c: \"0\"}, {pos: pos + 1, c: c}],\r\n              pos: pos + 2 // this will triggeer a refreshfrombuffer\r\n            };\r\n          }\r\n        }\r\n\r\n        if (currentResult === false) return currentResult;\r\n      }\r\n\r\n      if (currentResult.fuzzy) {\r\n        buffer = currentResult.buffer;\r\n        pos = currentResult.pos;\r\n      }\r\n\r\n      // full validate target\r\n      tokenMatch = getTokenMatch.call(inputmask, pos, opts, maskset);\r\n      if (\r\n        tokenMatch.targetMatch &&\r\n        tokenMatch.targetMatch[0] &&\r\n        formatcode(tokenMatch.targetMatch[0]) !== undefined\r\n      ) {\r\n        const fcode = formatcode(tokenMatch.targetMatch[0]);\r\n        validator = fcode[0];\r\n        const part = buffer.slice(\r\n          tokenMatch.targetMatchIndex,\r\n          tokenMatch.targetMatchIndex + tokenMatch.targetMatch[0].length\r\n        );\r\n        if (\r\n          new RegExp(validator).test(part.join(\"\")) === false &&\r\n          tokenMatch.targetMatch[0].length === 2 &&\r\n          maskset.validPositions[tokenMatch.targetMatchIndex] &&\r\n          maskset.validPositions[tokenMatch.targetMatchIndex + 1]\r\n        ) {\r\n          maskset.validPositions[tokenMatch.targetMatchIndex + 1].input = \"0\";\r\n        }\r\n        if (fcode[2] == \"year\") {\r\n          const _buffer = getMaskTemplate.call(\r\n            inputmask,\r\n            false,\r\n            1,\r\n            undefined,\r\n            true\r\n          );\r\n          for (let i = pos + 1; i < buffer.length; i++) {\r\n            buffer[i] = _buffer[i];\r\n            maskset.validPositions.splice(pos + 1, 1);\r\n          }\r\n        }\r\n      }\r\n\r\n      let result = currentResult,\r\n        dateParts = analyseMask.call(\r\n          inputmask,\r\n          buffer.join(\"\"),\r\n          opts.inputFormat,\r\n          opts\r\n        );\r\n      if (result && !isNaN(dateParts.date.getTime())) {\r\n        // check for a valid date ~ an invalid date returns NaN which isn't equal\r\n        if (opts.prefillYear) result = prefillYear(dateParts, result, opts);\r\n        result = isValidDate.call(inputmask, dateParts, result, opts);\r\n        result = isDateInRange(dateParts, result, opts, maskset, fromCheckval);\r\n      }\r\n\r\n      if (pos !== undefined && result && currentResult.pos !== pos) {\r\n        return {\r\n          buffer: parse(opts.inputFormat, dateParts, opts).split(\"\"),\r\n          refreshFromBuffer: { start: pos, end: currentResult.pos },\r\n          pos:\r\n            currentResult.caret !== undefined\r\n              ? currentResult.caret\r\n              : currentResult.pos // correct caret position\r\n        };\r\n      }\r\n\r\n      return result;\r\n    },\r\n    onKeyDown: function (e, buffer, caretPos, opts) {\r\n      const input = this;\r\n      if (e.ctrlKey && e.key === keys.ArrowRight) {\r\n        input.inputmask._valueSet(importDate(new Date(), opts));\r\n        $(input).trigger(\"setvalue\");\r\n      }\r\n    },\r\n    onUnMask: function (maskedValue, unmaskedValue, opts) {\r\n      const inputmask = this;\r\n      return unmaskedValue\r\n        ? parse(\r\n            opts.outputFormat,\r\n            analyseMask.call(inputmask, maskedValue, opts.inputFormat, opts),\r\n            opts\r\n          )\r\n        : unmaskedValue;\r\n    },\r\n    casing: function (elem, test, pos, validPositions) {\r\n      if (test.nativeDef.indexOf(\"[ap]\") == 0) return elem.toLowerCase();\r\n      if (test.nativeDef.indexOf(\"[AP]\") == 0) return elem.toUpperCase();\r\n\r\n      const posBefore = getTest.call(this, [pos - 1]);\r\n      if (posBefore.match.def.indexOf(\"[AP]\") == 0) return elem.toUpperCase();\r\n\r\n      if (\r\n        pos === 0 ||\r\n        (posBefore && posBefore.input === String.fromCharCode(keyCode.Space)) ||\r\n        (posBefore &&\r\n          posBefore.match.def === String.fromCharCode(keyCode.Space))\r\n      ) {\r\n        return elem.toUpperCase();\r\n      }\r\n\r\n      if (test.static && test.def === test.def.toUpperCase())\r\n        return elem.toUpperCase();\r\n\r\n      return elem.toLowerCase();\r\n    },\r\n    onBeforeMask: function (initialValue, opts) {\r\n      if (Object.prototype.toString.call(initialValue) === \"[object Date]\") {\r\n        initialValue = importDate(initialValue, opts);\r\n      }\r\n\r\n      return initialValue;\r\n    },\r\n    insertMode: false,\r\n    insertModeVisual: false,\r\n    shiftPositions: false,\r\n    keepStatic: false,\r\n    inputmode: \"numeric\",\r\n    prefillYear: true // Allows to disable prefill for datetime year.\r\n  }\r\n});\r\n","/*\r\n Input Mask plugin extensions\r\n http://github.com/RobinHerbots/inputmask\r\n Copyright (c) Robin Herbots\r\n Licensed under the MIT license\r\n */\r\nimport { escapeRegex } from \"../escapeRegex\";\r\nimport Inputmask from \"../inputmask\";\r\nimport { keys } from \"../keycode\";\r\nimport { seekNext } from \"../positioning\";\r\n\r\nconst $ = Inputmask.dependencyLib;\r\n\r\nfunction autoEscape(txt, opts) {\r\n  let escapedTxt = \"\";\r\n  for (let i = 0; i < txt.length; i++) {\r\n    if (\r\n      Inputmask.prototype.definitions[txt.charAt(i)] ||\r\n      opts.definitions[txt.charAt(i)] ||\r\n      opts.optionalmarker[0] === txt.charAt(i) ||\r\n      opts.optionalmarker[1] === txt.charAt(i) ||\r\n      opts.quantifiermarker[0] === txt.charAt(i) ||\r\n      opts.quantifiermarker[1] === txt.charAt(i) ||\r\n      opts.groupmarker[0] === txt.charAt(i) ||\r\n      opts.groupmarker[1] === txt.charAt(i) ||\r\n      opts.alternatormarker === txt.charAt(i)\r\n    ) {\r\n      escapedTxt += \"\\\\\" + txt.charAt(i);\r\n    } else {\r\n      escapedTxt += txt.charAt(i);\r\n    }\r\n  }\r\n  return escapedTxt;\r\n}\r\n\r\nfunction alignDigits(buffer, digits, opts, force) {\r\n  if (buffer.length > 0 && digits > 0 && (!opts.digitsOptional || force)) {\r\n    var radixPosition = buffer.indexOf(opts.radixPoint),\r\n      negationBack = false;\r\n    if (opts.negationSymbol.back === buffer[buffer.length - 1]) {\r\n      negationBack = true;\r\n      buffer.length--;\r\n    }\r\n\r\n    if (radixPosition === -1) {\r\n      buffer.push(opts.radixPoint);\r\n      radixPosition = buffer.length - 1;\r\n    }\r\n    for (let i = 1; i <= digits; i++) {\r\n      if (!isFinite(buffer[radixPosition + i])) {\r\n        buffer[radixPosition + i] = \"0\";\r\n      }\r\n    }\r\n  }\r\n\r\n  if (negationBack) buffer.push(opts.negationSymbol.back);\r\n  return buffer;\r\n}\r\n\r\nfunction findValidator(symbol, maskset) {\r\n  let posNdx = 0;\r\n  if (symbol === \"+\") {\r\n    posNdx = seekNext.call(this, maskset.validPositions.length - 1);\r\n  }\r\n  for (let tstNdx in maskset.tests) {\r\n    tstNdx = parseInt(tstNdx);\r\n    if (tstNdx >= posNdx) {\r\n      for (\r\n        let ndx = 0, ndxl = maskset.tests[tstNdx].length;\r\n        ndx < ndxl;\r\n        ndx++\r\n      ) {\r\n        if (\r\n          (maskset.validPositions[tstNdx] === undefined || symbol === \"-\") &&\r\n          maskset.tests[tstNdx][ndx].match.def === symbol\r\n        ) {\r\n          return (\r\n            tstNdx +\r\n            (maskset.validPositions[tstNdx] !== undefined && symbol !== \"-\"\r\n              ? 1\r\n              : 0)\r\n          );\r\n        }\r\n      }\r\n    }\r\n  }\r\n  return posNdx;\r\n}\r\n\r\nfunction findValid(symbol, maskset) {\r\n  let ret = -1;\r\n  for (let ndx = 0, vpl = maskset.validPositions.length; ndx < vpl; ndx++) {\r\n    const tst = maskset.validPositions[ndx];\r\n    if (tst && tst.match.def === symbol) {\r\n      ret = ndx;\r\n      break;\r\n    }\r\n  }\r\n  return ret;\r\n}\r\n\r\nfunction parseMinMaxOptions(opts) {\r\n  if (opts.parseMinMaxOptions === undefined) {\r\n    // convert min and max options\r\n    if (opts.min !== null) {\r\n      opts.min = opts.min\r\n        .toString()\r\n        .replace(new RegExp(escapeRegex(opts.groupSeparator), \"g\"), \"\");\r\n      if (opts.radixPoint === \",\")\r\n        opts.min = opts.min.replace(opts.radixPoint, \".\");\r\n      opts.min = isFinite(opts.min) ? parseFloat(opts.min) : NaN;\r\n      if (isNaN(opts.min)) opts.min = Number.MIN_VALUE;\r\n    }\r\n    if (opts.max !== null) {\r\n      opts.max = opts.max\r\n        .toString()\r\n        .replace(new RegExp(escapeRegex(opts.groupSeparator), \"g\"), \"\");\r\n      if (opts.radixPoint === \",\")\r\n        opts.max = opts.max.replace(opts.radixPoint, \".\");\r\n      opts.max = isFinite(opts.max) ? parseFloat(opts.max) : NaN;\r\n      if (isNaN(opts.max)) opts.max = Number.MAX_VALUE;\r\n    }\r\n    opts.parseMinMaxOptions = \"done\";\r\n  }\r\n}\r\n\r\nfunction genMask(opts) {\r\n  opts.repeat = 0;\r\n  // treat equal separator and radixpoint\r\n  if (\r\n    opts.groupSeparator === opts.radixPoint &&\r\n    opts.digits &&\r\n    opts.digits !== \"0\"\r\n  ) {\r\n    if (opts.radixPoint === \".\") {\r\n      opts.groupSeparator = \",\";\r\n    } else if (opts.radixPoint === \",\") {\r\n      opts.groupSeparator = \".\";\r\n    } else {\r\n      opts.groupSeparator = \"\";\r\n    }\r\n  }\r\n  // prevent conflict with default skipOptionalPartCharacter\r\n  if (opts.groupSeparator === \" \") {\r\n    opts.skipOptionalPartCharacter = undefined;\r\n  }\r\n\r\n  // enforce placeholder to single\r\n  if (opts.placeholder.length > 1) {\r\n    opts.placeholder = opts.placeholder.charAt(0);\r\n  }\r\n  // only allow radixfocus when placeholder = 0\r\n  if (opts.positionCaretOnClick === \"radixFocus\" && opts.placeholder === \"\") {\r\n    opts.positionCaretOnClick = \"lvp\";\r\n  }\r\n\r\n  let decimalDef = \"0\",\r\n    radixPointDef = opts.radixPoint;\r\n  if (opts.numericInput === true && opts.__financeInput === undefined) {\r\n    // finance people input style\r\n    decimalDef = \"1\";\r\n    opts.positionCaretOnClick =\r\n      opts.positionCaretOnClick === \"radixFocus\"\r\n        ? \"lvp\"\r\n        : opts.positionCaretOnClick;\r\n    opts.digitsOptional = false;\r\n    if (isNaN(opts.digits))\r\n      opts.digits =\r\n        opts.digits.indexOf(\",\") !== -1 ? opts.digits.split(\",\")[0] : 2;\r\n    opts._radixDance = false;\r\n    radixPointDef = opts.radixPoint === \",\" ? \"?\" : \"!\";\r\n    if (\r\n      opts.radixPoint !== \"\" &&\r\n      opts.definitions[radixPointDef] === undefined\r\n    ) {\r\n      // update separator definition\r\n      opts.definitions[radixPointDef] = {};\r\n      opts.definitions[radixPointDef].validator = \"[\" + opts.radixPoint + \"]\";\r\n      opts.definitions[radixPointDef].placeholder = opts.radixPoint;\r\n      opts.definitions[radixPointDef].static = true;\r\n      opts.definitions[radixPointDef].generated = true; // forced marker as generated input\r\n    }\r\n  } else {\r\n    opts.__financeInput = false; // needed to keep original selection when remasking\r\n    opts.numericInput = true;\r\n  }\r\n\r\n  let mask = \"[+]\",\r\n    altMask;\r\n  mask += autoEscape(opts.prefix, opts);\r\n  if (opts.groupSeparator !== \"\") {\r\n    if (opts.definitions[opts.groupSeparator] === undefined) {\r\n      // update separator definition\r\n      opts.definitions[opts.groupSeparator] = {};\r\n      opts.definitions[opts.groupSeparator].validator =\r\n        \"[\" + opts.groupSeparator + \"]\";\r\n      opts.definitions[opts.groupSeparator].placeholder = opts.groupSeparator;\r\n      opts.definitions[opts.groupSeparator].static = true;\r\n      opts.definitions[opts.groupSeparator].generated = true; // forced marker as generated input\r\n    }\r\n    mask += opts._mask(opts);\r\n  } else {\r\n    mask += \"9{+}\";\r\n  }\r\n  if (opts.digits !== undefined && opts.digits !== 0) {\r\n    const dq = opts.digits.toString().split(\",\");\r\n    if (isFinite(dq[0]) && dq[1] && isFinite(dq[1])) {\r\n      mask += radixPointDef + decimalDef + \"{\" + opts.digits + \"}\";\r\n    } else if (isNaN(opts.digits) || parseInt(opts.digits) > 0) {\r\n      if (opts.digitsOptional || opts.jitMasking) {\r\n        altMask = mask + radixPointDef + decimalDef + \"{0,\" + opts.digits + \"}\";\r\n        // mask += \"[\" + opts.radixPoint + \"]\";\r\n        opts.keepStatic = true;\r\n      } else {\r\n        mask += radixPointDef + decimalDef + \"{\" + opts.digits + \"}\";\r\n      }\r\n    }\r\n  } else {\r\n    opts.inputmode = \"numeric\";\r\n  }\r\n  mask += autoEscape(opts.suffix, opts);\r\n  mask += \"[-]\";\r\n\r\n  if (altMask) {\r\n    mask = [altMask + autoEscape(opts.suffix, opts) + \"[-]\", mask];\r\n  }\r\n\r\n  opts.greedy = false; // enforce greedy false\r\n\r\n  parseMinMaxOptions(opts);\r\n  if (opts.radixPoint !== \"\" && opts.substituteRadixPoint)\r\n    opts.substitutes[opts.radixPoint == \".\" ? \",\" : \".\"] = opts.radixPoint;\r\n  // console.log(mask);\r\n  return mask;\r\n}\r\n\r\nfunction handleRadixDance(pos, c, radixPos, maskset, opts) {\r\n  if (opts._radixDance && opts.numericInput && c !== opts.negationSymbol.back) {\r\n    if (\r\n      pos <= radixPos &&\r\n      (radixPos > 0 || c == opts.radixPoint) &&\r\n      (maskset.validPositions[pos - 1] === undefined ||\r\n        maskset.validPositions[pos - 1].input !== opts.negationSymbol.back)\r\n    ) {\r\n      pos -= 1;\r\n    }\r\n  }\r\n  return pos;\r\n}\r\n\r\nfunction decimalValidator(chrs, maskset, pos, strict, opts) {\r\n  const radixPos = maskset.buffer\r\n      ? maskset.buffer.indexOf(opts.radixPoint)\r\n      : -1,\r\n    result =\r\n      (radixPos !== -1 || (strict && opts.jitMasking)) &&\r\n      new RegExp(opts.definitions[\"9\"].validator).test(chrs);\r\n  if (\r\n    !strict &&\r\n    opts._radixDance &&\r\n    radixPos !== -1 &&\r\n    result &&\r\n    maskset.validPositions[radixPos] == undefined\r\n  ) {\r\n    return {\r\n      insert: {\r\n        pos: radixPos === pos ? radixPos + 1 : radixPos,\r\n        c: opts.radixPoint\r\n      },\r\n      pos\r\n    };\r\n  }\r\n\r\n  return result;\r\n}\r\n\r\nfunction checkForLeadingZeroes(buffer, opts) {\r\n  // check leading zeros\r\n  let numberMatches = new RegExp(\r\n      \"(^\" +\r\n        (opts.negationSymbol.front !== \"\"\r\n          ? escapeRegex(opts.negationSymbol.front) + \"?\"\r\n          : \"\") +\r\n        escapeRegex(opts.prefix) +\r\n        \")(.*)(\" +\r\n        escapeRegex(opts.suffix) +\r\n        (opts.negationSymbol.back != \"\"\r\n          ? escapeRegex(opts.negationSymbol.back) + \"?\"\r\n          : \"\") +\r\n        \"$)\"\r\n    ).exec(buffer.slice().reverse().join(\"\")),\r\n    number = numberMatches ? numberMatches[2] : \"\",\r\n    leadingzeroes = false;\r\n  if (number) {\r\n    number = number.split(opts.radixPoint.charAt(0))[0];\r\n    leadingzeroes = new RegExp(\"^[0\" + opts.groupSeparator + \"]*\").exec(number);\r\n  }\r\n  return leadingzeroes &&\r\n    (leadingzeroes[0].length > 1 ||\r\n      (leadingzeroes[0].length > 0 && leadingzeroes[0].length < number.length))\r\n    ? leadingzeroes\r\n    : false;\r\n}\r\n\r\n// number aliases\r\nInputmask.extendAliases({\r\n  numeric: {\r\n    mask: genMask,\r\n    _mask: function (opts) {\r\n      return \"(\" + opts.groupSeparator + \"999){+|1}\";\r\n    },\r\n    digits: \"*\", // number of fractionalDigits\r\n    digitsOptional: true,\r\n    enforceDigitsOnBlur: false,\r\n    radixPoint: \".\",\r\n    positionCaretOnClick: \"radixFocus\",\r\n    _radixDance: true,\r\n    groupSeparator: \"\",\r\n    allowMinus: true,\r\n    negationSymbol: {\r\n      front: \"-\", // \"(\"\r\n      back: \"\" // \")\"\r\n    },\r\n    prefix: \"\",\r\n    suffix: \"\",\r\n    min: null, // minimum value\r\n    max: null, // maximum value\r\n    SetMaxOnOverflow: false,\r\n    step: 1,\r\n    inputType: \"text\", // number ~ specify that values which are set are in textform (radix point  is same as in the options) or in numberform (radixpoint = .)\r\n    unmaskAsNumber: false,\r\n    roundingFN: Math.round, // Math.floor ,  fn(x)\r\n    inputmode: \"decimal\",\r\n    shortcuts: { k: \"1000\", m: \"1000000\" },\r\n    // global options\r\n    placeholder: \"0\",\r\n    greedy: false,\r\n    rightAlign: true,\r\n    insertMode: true,\r\n    autoUnmask: false,\r\n    skipOptionalPartCharacter: \"\",\r\n    usePrototypeDefinitions: false,\r\n    stripLeadingZeroes: true,\r\n    substituteRadixPoint: true,\r\n    definitions: {\r\n      0: {\r\n        validator: decimalValidator\r\n      },\r\n      1: {\r\n        validator: decimalValidator,\r\n        definitionSymbol: \"9\"\r\n      },\r\n      9: {\r\n        // \\uFF11-\\uFF19 #1606\r\n        validator: \"[0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9]\",\r\n        definitionSymbol: \"*\"\r\n      },\r\n      \"+\": {\r\n        validator: function (chrs, maskset, pos, strict, opts) {\r\n          return (\r\n            opts.allowMinus &&\r\n            (chrs === \"-\" || chrs === opts.negationSymbol.front)\r\n          );\r\n        }\r\n      },\r\n      \"-\": {\r\n        validator: function (chrs, maskset, pos, strict, opts) {\r\n          return opts.allowMinus && chrs === opts.negationSymbol.back;\r\n        }\r\n      }\r\n    },\r\n    preValidation: function (\r\n      buffer,\r\n      pos,\r\n      c,\r\n      isSelection,\r\n      opts,\r\n      maskset,\r\n      caretPos,\r\n      strict\r\n    ) {\r\n      const inputmask = this;\r\n\r\n      if (opts.__financeInput !== false && c === opts.radixPoint) return false;\r\n      const radixPos = buffer.indexOf(opts.radixPoint),\r\n        initPos = pos;\r\n      pos = handleRadixDance(pos, c, radixPos, maskset, opts);\r\n      if (c === \"-\" || c === opts.negationSymbol.front) {\r\n        if (opts.allowMinus !== true) return false;\r\n        let isNegative = false,\r\n          front = findValid(\"+\", maskset),\r\n          back = findValid(\"-\", maskset);\r\n        if (front !== -1) {\r\n          isNegative = [front];\r\n          if (back !== -1) isNegative.push(back);\r\n        }\r\n\r\n        return isNegative !== false\r\n          ? {\r\n              remove: isNegative,\r\n              caret: initPos - opts.negationSymbol.back.length\r\n            }\r\n          : {\r\n              insert: [\r\n                {\r\n                  pos: findValidator.call(inputmask, \"+\", maskset),\r\n                  c: opts.negationSymbol.front,\r\n                  fromIsValid: true\r\n                },\r\n                {\r\n                  pos: findValidator.call(inputmask, \"-\", maskset),\r\n                  c: opts.negationSymbol.back,\r\n                  fromIsValid: undefined\r\n                }\r\n              ],\r\n              caret: initPos + opts.negationSymbol.back.length\r\n            };\r\n      }\r\n\r\n      if (c === opts.groupSeparator) {\r\n        return { caret: initPos };\r\n      }\r\n\r\n      if (strict) return true;\r\n      if (\r\n        radixPos !== -1 &&\r\n        opts._radixDance === true &&\r\n        isSelection === false &&\r\n        c === opts.radixPoint &&\r\n        opts.digits !== undefined &&\r\n        (isNaN(opts.digits) || parseInt(opts.digits) > 0) &&\r\n        radixPos !== pos\r\n      ) {\r\n        const radixValidatorPos = findValidator.call(\r\n          inputmask,\r\n          opts.radixPoint,\r\n          maskset\r\n        );\r\n        if (maskset.validPositions[radixValidatorPos]) {\r\n          maskset.validPositions[radixValidatorPos].generatedInput =\r\n            maskset.validPositions[radixValidatorPos].generated || false;\r\n        }\r\n        return {\r\n          caret:\r\n            opts._radixDance && pos === radixPos - 1 ? radixPos + 1 : radixPos\r\n        };\r\n      }\r\n      if (opts.__financeInput === false) {\r\n        if (isSelection) {\r\n          if (opts.digitsOptional) {\r\n            return { rewritePosition: caretPos.end };\r\n          } else if (!opts.digitsOptional) {\r\n            if (caretPos.begin > radixPos && caretPos.end <= radixPos) {\r\n              if (c === opts.radixPoint) {\r\n                return {\r\n                  insert: { pos: radixPos + 1, c: \"0\", fromIsValid: true },\r\n                  rewritePosition: radixPos\r\n                };\r\n              } else {\r\n                return { rewritePosition: radixPos + 1 };\r\n              }\r\n            } else if (caretPos.begin < radixPos) {\r\n              return { rewritePosition: caretPos.begin - 1 };\r\n            }\r\n          }\r\n        } else if (\r\n          !opts.showMaskOnHover &&\r\n          !opts.showMaskOnFocus &&\r\n          !opts.digitsOptional &&\r\n          opts.digits > 0 &&\r\n          this.__valueGet.call(this.el) === \"\"\r\n        ) {\r\n          return { rewritePosition: radixPos };\r\n        }\r\n      }\r\n      return { rewritePosition: pos };\r\n    },\r\n    postValidation: function (\r\n      buffer,\r\n      pos,\r\n      c,\r\n      currentResult,\r\n      opts,\r\n      maskset,\r\n      strict,\r\n      fromCheckval,\r\n      fromAlternate\r\n    ) {\r\n      if (currentResult === false) return currentResult;\r\n      if (strict) return true;\r\n      if (opts.min !== null || opts.max !== null) {\r\n        const unmasked = opts.onUnMask(\r\n          buffer.slice().reverse().join(\"\"),\r\n          undefined,\r\n          $.extend({}, opts, {\r\n            unmaskAsNumber: true\r\n          })\r\n        );\r\n        if (\r\n          opts.min !== null &&\r\n          unmasked < opts.min &&\r\n          fromAlternate !== true &&\r\n          (unmasked.toString().length > opts.min.toString().length || // > instead of >= because we want to allow to type a bigger number\r\n            buffer[0] === opts.radixPoint || // disallow radixpoint when value is smaller than min\r\n            unmasked < 0)\r\n        ) {\r\n          return false;\r\n          // return {\r\n          // \trefreshFromBuffer: true,\r\n          // \tbuffer: alignDigits(opts.min.toString().replace(\".\", opts.radixPoint).split(\"\"), opts.digits, opts).reverse()\r\n          // };\r\n        }\r\n\r\n        if (opts.max !== null && opts.max >= 0 && unmasked > opts.max) {\r\n          return opts.SetMaxOnOverflow\r\n            ? {\r\n                refreshFromBuffer: true,\r\n                buffer: alignDigits(\r\n                  opts.max.toString().replace(\".\", opts.radixPoint).split(\"\"),\r\n                  opts.digits,\r\n                  opts\r\n                ).reverse()\r\n              }\r\n            : false;\r\n        }\r\n      }\r\n\r\n      return currentResult;\r\n    },\r\n    onUnMask: function (maskedValue, unmaskedValue, opts) {\r\n      if (unmaskedValue === \"\" && opts.nullable === true) {\r\n        return unmaskedValue;\r\n      }\r\n      let processValue = maskedValue.replace(opts.prefix, \"\");\r\n      processValue = processValue.replace(opts.suffix, \"\");\r\n      processValue = processValue.replace(\r\n        new RegExp(escapeRegex(opts.groupSeparator), \"g\"),\r\n        \"\"\r\n      );\r\n      if (opts.placeholder.charAt(0) !== \"\") {\r\n        processValue = processValue.replace(\r\n          new RegExp(opts.placeholder.charAt(0), \"g\"),\r\n          \"0\"\r\n        );\r\n      }\r\n      if (opts.unmaskAsNumber) {\r\n        if (\r\n          opts.radixPoint !== \"\" &&\r\n          processValue.indexOf(opts.radixPoint) !== -1\r\n        )\r\n          processValue = processValue.replace(\r\n            escapeRegex.call(this, opts.radixPoint),\r\n            \".\"\r\n          );\r\n        processValue = processValue.replace(\r\n          new RegExp(\"^\" + escapeRegex(opts.negationSymbol.front)),\r\n          \"-\"\r\n        );\r\n        processValue = processValue.replace(\r\n          new RegExp(escapeRegex(opts.negationSymbol.back) + \"$\"),\r\n          \"\"\r\n        );\r\n        return Number(processValue);\r\n      }\r\n      return processValue;\r\n    },\r\n    isComplete: function (buffer, opts) {\r\n      let maskedValue = (\r\n        opts.numericInput ? buffer.slice().reverse() : buffer\r\n      ).join(\"\");\r\n      maskedValue = maskedValue.replace(\r\n        new RegExp(\"^\" + escapeRegex(opts.negationSymbol.front)),\r\n        \"-\"\r\n      );\r\n      maskedValue = maskedValue.replace(\r\n        new RegExp(escapeRegex(opts.negationSymbol.back) + \"$\"),\r\n        \"\"\r\n      );\r\n      maskedValue = maskedValue.replace(opts.prefix, \"\");\r\n      maskedValue = maskedValue.replace(opts.suffix, \"\");\r\n      maskedValue = maskedValue.replace(\r\n        new RegExp(escapeRegex(opts.groupSeparator) + \"([0-9]{3})\", \"g\"),\r\n        \"$1\"\r\n      );\r\n      if (opts.radixPoint === \",\")\r\n        maskedValue = maskedValue.replace(escapeRegex(opts.radixPoint), \".\");\r\n      return isFinite(maskedValue);\r\n    },\r\n    onBeforeMask: function (initialValue, opts) {\r\n      initialValue = initialValue ?? \"\";\r\n      const radixPoint = opts.radixPoint || \",\";\r\n      if (isFinite(opts.digits)) opts.digits = parseInt(opts.digits);\r\n\r\n      if (\r\n        (typeof initialValue === \"number\" || opts.inputType === \"number\") &&\r\n        radixPoint !== \"\"\r\n      ) {\r\n        initialValue = initialValue.toString().replace(\".\", radixPoint);\r\n      }\r\n      const isNegative =\r\n          initialValue.charAt(0) === \"-\" ||\r\n          initialValue.charAt(0) === opts.negationSymbol.front,\r\n        valueParts = initialValue.split(radixPoint),\r\n        integerPart = valueParts[0].replace(/[^\\-0-9]/g, \"\"),\r\n        decimalPart =\r\n          valueParts.length > 1 ? valueParts[1].replace(/[^0-9]/g, \"\") : \"\",\r\n        forceDigits = valueParts.length > 1;\r\n\r\n      initialValue =\r\n        integerPart +\r\n        (decimalPart !== \"\" ? radixPoint + decimalPart : decimalPart);\r\n\r\n      let digits = 0;\r\n      if (radixPoint !== \"\") {\r\n        digits = !opts.digitsOptional\r\n          ? opts.digits\r\n          : opts.digits < decimalPart.length\r\n            ? opts.digits\r\n            : decimalPart.length;\r\n        if (decimalPart !== \"\" || !opts.digitsOptional) {\r\n          const digitsFactor = Math.pow(10, digits || 1);\r\n\r\n          // make the initialValue a valid javascript number for the parsefloat\r\n          initialValue = initialValue.replace(escapeRegex(radixPoint), \".\");\r\n          if (!isNaN(parseFloat(initialValue))) {\r\n            initialValue = (\r\n              opts.roundingFN(parseFloat(initialValue) * digitsFactor) /\r\n              digitsFactor\r\n            ).toFixed(digits);\r\n          }\r\n          initialValue = initialValue.toString().replace(\".\", radixPoint);\r\n        }\r\n      }\r\n      // this needs to be in a separate part and not directly in decimalPart to allow rounding\r\n      if (opts.digits === 0 && initialValue.indexOf(radixPoint) !== -1) {\r\n        initialValue = initialValue.substring(\r\n          0,\r\n          initialValue.indexOf(radixPoint)\r\n        );\r\n      }\r\n\r\n      if (initialValue !== \"\" && (opts.min !== null || opts.max !== null)) {\r\n        const numberValue = initialValue.toString().replace(radixPoint, \".\");\r\n        if (opts.min !== null && numberValue < opts.min) {\r\n          initialValue = opts.min.toString().replace(\".\", radixPoint);\r\n        } else if (opts.max !== null && numberValue > opts.max) {\r\n          initialValue = opts.max.toString().replace(\".\", radixPoint);\r\n        }\r\n      }\r\n\r\n      if (isNegative && initialValue.charAt(0) !== \"-\") {\r\n        initialValue = \"-\" + initialValue;\r\n      }\r\n      return alignDigits(\r\n        initialValue.toString().split(\"\"),\r\n        digits,\r\n        opts,\r\n        forceDigits\r\n      ).join(\"\");\r\n    },\r\n    onBeforeWrite: function (e, buffer, caretPos, opts) {\r\n      function stripBuffer(buffer, stripRadix) {\r\n        if (opts.__financeInput !== false || stripRadix) {\r\n          var position = buffer.indexOf(opts.radixPoint);\r\n          if (position !== -1) {\r\n            buffer.splice(position, 1);\r\n          }\r\n        }\r\n        if (opts.groupSeparator !== \"\") {\r\n          while ((position = buffer.indexOf(opts.groupSeparator)) !== -1) {\r\n            buffer.splice(position, 1);\r\n          }\r\n        }\r\n\r\n        return buffer;\r\n      }\r\n\r\n      let result, leadingzeroes;\r\n      if (\r\n        opts.stripLeadingZeroes &&\r\n        (leadingzeroes = checkForLeadingZeroes(buffer, opts))\r\n      ) {\r\n        const caretNdx =\r\n            buffer\r\n              .join(\"\")\r\n              .lastIndexOf(leadingzeroes[0].split(\"\").reverse().join(\"\")) -\r\n            (leadingzeroes[0] == leadingzeroes.input ? 0 : 1),\r\n          offset = leadingzeroes[0] == leadingzeroes.input ? 1 : 0;\r\n        for (let i = leadingzeroes[0].length - offset; i > 0; i--) {\r\n          this.maskset.validPositions.splice(caretNdx + i, 1);\r\n          delete buffer[caretNdx + i];\r\n        }\r\n      }\r\n\r\n      if (e) {\r\n        switch (e.type) {\r\n          case \"blur\":\r\n          case \"checkval\":\r\n            if (opts.min !== null || opts.max !== null) {\r\n              const unmasked = opts.onUnMask(\r\n                buffer.slice().reverse().join(\"\"),\r\n                undefined,\r\n                $.extend({}, opts, {\r\n                  unmaskAsNumber: true\r\n                })\r\n              );\r\n              if (\r\n                opts.min !== null &&\r\n                unmasked < opts.min &&\r\n                buffer.join() !== \"\"\r\n              ) {\r\n                return {\r\n                  refreshFromBuffer: true,\r\n                  buffer: alignDigits(\r\n                    opts.min.toString().replace(\".\", opts.radixPoint).split(\"\"),\r\n                    opts.digits,\r\n                    opts\r\n                  ).reverse()\r\n                };\r\n              } else if (opts.max !== null && unmasked > opts.max) {\r\n                return {\r\n                  refreshFromBuffer: true,\r\n                  buffer: alignDigits(\r\n                    opts.max.toString().replace(\".\", opts.radixPoint).split(\"\"),\r\n                    opts.digits,\r\n                    opts\r\n                  ).reverse()\r\n                };\r\n              }\r\n            }\r\n            if (buffer[buffer.length - 1] === opts.negationSymbol.front) {\r\n              // strip negation symbol on blur when value is 0\r\n              const nmbrMtchs = new RegExp(\r\n                  \"(^\" +\r\n                    (opts.negationSymbol.front != \"\"\r\n                      ? escapeRegex(opts.negationSymbol.front) + \"?\"\r\n                      : \"\") +\r\n                    escapeRegex(opts.prefix) +\r\n                    \")(.*)(\" +\r\n                    escapeRegex(opts.suffix) +\r\n                    (opts.negationSymbol.back != \"\"\r\n                      ? escapeRegex(opts.negationSymbol.back) + \"?\"\r\n                      : \"\") +\r\n                    \"$)\"\r\n                ).exec(stripBuffer(buffer.slice(), true).reverse().join(\"\")),\r\n                number = nmbrMtchs ? nmbrMtchs[2] : \"\";\r\n              if (number == 0) {\r\n                result = { refreshFromBuffer: true, buffer: [0] };\r\n              }\r\n            } else if (opts.radixPoint !== \"\") {\r\n              // strip radixpoint on blur when it is the latest char\r\n              const radixNDX = buffer.indexOf(opts.radixPoint);\r\n              if (radixNDX === opts.suffix.length) {\r\n                if (result && result.buffer) {\r\n                  result.buffer.splice(0, 1 + opts.suffix.length);\r\n                } else {\r\n                  buffer.splice(0, 1 + opts.suffix.length);\r\n                  result = {\r\n                    refreshFromBuffer: true,\r\n                    buffer: stripBuffer(buffer)\r\n                  };\r\n                }\r\n              }\r\n            }\r\n\r\n            if (opts.enforceDigitsOnBlur) {\r\n              result = result || {};\r\n              const bffr = ((result && result.buffer) || buffer)\r\n                .slice()\r\n                .reverse();\r\n              result.refreshFromBuffer = true;\r\n              result.buffer = alignDigits(\r\n                bffr,\r\n                opts.digits,\r\n                opts,\r\n                true\r\n              ).reverse();\r\n            }\r\n        }\r\n      }\r\n\r\n      return result;\r\n    },\r\n    onKeyDown: function (e, buffer, caretPos, opts) {\r\n      let $input = $(this),\r\n        bffr;\r\n      if (e.location != 3) {\r\n        let pattern,\r\n          c = e.key;\r\n        if ((pattern = opts.shortcuts && opts.shortcuts[c])) {\r\n          if (pattern.length > 1) {\r\n            this.inputmask.__valueSet.call(\r\n              this,\r\n              parseFloat(this.inputmask.unmaskedvalue()) * parseInt(pattern)\r\n            );\r\n            $input.trigger(\"setvalue\");\r\n            return false;\r\n          }\r\n        }\r\n      }\r\n      if (e.ctrlKey) {\r\n        switch (e.key) {\r\n          case keys.ArrowUp:\r\n            this.inputmask.__valueSet.call(\r\n              this,\r\n              parseFloat(this.inputmask.unmaskedvalue()) + parseInt(opts.step)\r\n            );\r\n            $input.trigger(\"setvalue\");\r\n            return false;\r\n          case keys.ArrowDown:\r\n            this.inputmask.__valueSet.call(\r\n              this,\r\n              parseFloat(this.inputmask.unmaskedvalue()) - parseInt(opts.step)\r\n            );\r\n            $input.trigger(\"setvalue\");\r\n            return false;\r\n        }\r\n      }\r\n      if (\r\n        !e.shiftKey &&\r\n        (e.key === keys.Delete ||\r\n          e.key === keys.Backspace ||\r\n          e.key === keys.BACKSPACE_SAFARI) &&\r\n        caretPos.begin !== buffer.length\r\n      ) {\r\n        if (\r\n          buffer[e.key === keys.Delete ? caretPos.begin - 1 : caretPos.end] ===\r\n          opts.negationSymbol.front\r\n        ) {\r\n          bffr = buffer.slice().reverse();\r\n          if (opts.negationSymbol.front !== \"\") bffr.shift();\r\n          if (opts.negationSymbol.back !== \"\") bffr.pop();\r\n          $input.trigger(\"setvalue\", [bffr.join(\"\"), caretPos.begin]);\r\n          return false;\r\n        } else if (opts._radixDance === true) {\r\n          const radixPos = buffer.indexOf(opts.radixPoint);\r\n          if (!opts.digitsOptional) {\r\n            if (\r\n              radixPos !== -1 &&\r\n              (caretPos.begin < radixPos ||\r\n                caretPos.end < radixPos ||\r\n                (e.key === keys.Delete &&\r\n                  (caretPos.begin === radixPos ||\r\n                    caretPos.begin - 1 === radixPos)))\r\n            ) {\r\n              let restoreCaretPos;\r\n              if (caretPos.begin === caretPos.end) {\r\n                // only adjust when not a selection\r\n                if (e.key === keys.Backspace || e.key === keys.BACKSPACE_SAFARI)\r\n                  caretPos.begin++;\r\n                else if (\r\n                  e.key === keys.Delete &&\r\n                  caretPos.begin - 1 === radixPos\r\n                ) {\r\n                  restoreCaretPos = $.extend({}, caretPos);\r\n                  caretPos.begin--;\r\n                  caretPos.end--;\r\n                }\r\n              }\r\n              bffr = buffer.slice().reverse();\r\n              bffr.splice(\r\n                bffr.length - caretPos.begin,\r\n                caretPos.begin - caretPos.end || 1\r\n              );\r\n              if (e.key === keys.Backspace || e.key === keys.BACKSPACE_SAFARI)\r\n                bffr.splice(bffr.length - caretPos.end + 1, 0, \"0\");\r\n              // console.log(caretPos);\r\n              bffr = alignDigits(bffr, opts.digits, opts).join(\"\");\r\n              if (restoreCaretPos) {\r\n                caretPos = restoreCaretPos;\r\n              }\r\n              $input.trigger(\"setvalue\", [\r\n                bffr,\r\n                caretPos.begin >= bffr.length ? radixPos + 1 : caretPos.begin\r\n              ]);\r\n              return false;\r\n            }\r\n          } else if (radixPos === 0) {\r\n            bffr = buffer.slice().reverse();\r\n            bffr.pop();\r\n            $input.trigger(\"setvalue\", [\r\n              bffr.join(\"\"),\r\n              caretPos.begin >= bffr.length ? bffr.length : caretPos.begin\r\n            ]);\r\n            return false;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  },\r\n  currency: {\r\n    prefix: \"\", // \"$ \",\r\n    groupSeparator: \",\",\r\n    alias: \"numeric\",\r\n    digits: 2,\r\n    digitsOptional: false\r\n  },\r\n  decimal: {\r\n    alias: \"numeric\"\r\n  },\r\n  integer: {\r\n    alias: \"numeric\",\r\n    inputmode: \"numeric\",\r\n    digits: 0\r\n  },\r\n  percentage: {\r\n    alias: \"numeric\",\r\n    min: 0,\r\n    max: 100,\r\n    suffix: \" %\",\r\n    digits: 0,\r\n    allowMinus: false\r\n  },\r\n  indianns: {\r\n    // indian numbering system\r\n    alias: \"numeric\",\r\n    _mask: function (opts) {\r\n      return (\r\n        \"(\" +\r\n        opts.groupSeparator +\r\n        \"99){*|1}(\" +\r\n        opts.groupSeparator +\r\n        \"999){1|1}\"\r\n      );\r\n    },\r\n    groupSeparator: \",\",\r\n    radixPoint: \".\",\r\n    placeholder: \"0\",\r\n    digits: 2,\r\n    digitsOptional: false\r\n  }\r\n});\r\n","/* eslint-disable import-x/no-extraneous-dependencies, import/no-unassigned-import */\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore Inputmask exposes this ESM file but not its subpath types in app builds.\nimport Inputmask from 'inputmask/lib/inputmask.js';\n\nimport 'inputmask/lib/extensions/inputmask.extensions.js';\nimport 'inputmask/lib/extensions/inputmask.date.extensions.js';\nimport 'inputmask/lib/extensions/inputmask.numeric.extensions.js';\n\nexport default Inputmask;\n","/* eslint-disable import-x/prefer-default-export */\nimport type { Mask, Options } from '../types';\nimport type { Options as InputmaskOptions } from '../types/inputmask.types';\n\n/** Base config for built-in mask aliases. Merged with user options in getMaskOptions. */\nconst ALIAS_MASKS: Record<string, InputmaskOptions> = {\n  datetime: { alias: 'datetime' },\n  email: { alias: 'email', placeholder: '' },\n  numeric: { alias: 'numeric', placeholder: '' },\n  currency: { alias: 'currency', prefix: '$ ', placeholder: '' },\n  decimal: { alias: 'decimal', placeholder: '' },\n  integer: { alias: 'integer', placeholder: '' },\n  percentage: { alias: 'percentage', placeholder: ' %', suffix: ' %' },\n  url: { alias: 'url', placeholder: 'https://' },\n  ip: { alias: 'ip' },\n  mac: { alias: 'mac' },\n  ssn: { alias: 'ssn' },\n  'brl-currency': {\n    alias: 'currency',\n    prefix: 'R$ ',\n    placeholder: '0,00',\n    displayFormat: 'currency',\n    radixPoint: ',',\n    groupSeparator: '.',\n    autoUnmask: true,\n  },\n  cpf: { mask: '999.999.999-99', placeholder: '___.___.___-__' },\n  cnpj: {\n    mask: ['A|9{2}.A|9{3}.A|9{3}/A|9{4}-9{2}'],\n    placeholder: '__.___.___/____-__',\n  },\n  'br-bank-account': {\n    mask: [\n      '9{4,10}[-]9', // Most common formats: 1234567-9, 12345678-9, 123456789-9, 1234567890-1\n      '999999[-][9]', // Optional separator: 123456-7 or 1234567\n      '[999]9{7,8}[-]9', // Caixa and Nu Pagamentos: (001)12345678-9 or (001)1234567-9\n      '[9999]9{8}[-]9', // Caixa longer: (0001)12345678-9\n    ],\n    placeholder: '',\n    greedy: false,\n  },\n  'br-bank-agency': {\n    mask: '9{1,5}[-][9]', // Agency numbers: 1234, 12345, 1234-5\n    placeholder: '',\n  },\n};\n\n/**\n * Converts mask and options into Inputmask configuration.\n * Has some ready aliases to make life easier.\n *\n * @param mask - The mask pattern or alias\n * @param _options - Optional configuration options\n * @returns Inputmask configuration object\n */\nexport function getMaskOptions(mask?: Mask, _options?: Options): Options {\n  const options: Options = {\n    jitMasking: false,\n    ..._options,\n  };\n  if (!mask) return options;\n\n  if (typeof mask === 'string' && ALIAS_MASKS[mask]) {\n    return { ...ALIAS_MASKS[mask], ...options } as Options;\n  }\n\n  return {\n    mask,\n    ...options,\n  };\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-function-type */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\nexport default function flow(...funcs: Function[]): Function {\n  const { length } = funcs;\n  let index = length;\n  while (index > 0) {\n    index -= 1;\n    if (typeof funcs[index] !== 'function') {\n      throw new TypeError('Expected a function');\n    }\n  }\n  return (...args: Function[]) => {\n    let i = 0;\n    let result = length ? funcs[i].apply(undefined, args) : args[0];\n    while (i + 1 < length) {\n      i += 1;\n      result = funcs[i].call(undefined, result);\n    }\n    return result;\n  };\n}\n","const isServer = !(\n  typeof window !== 'undefined'\n  && window.document?.createElement\n);\n\nexport default isServer;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Synchronously resolve the default value of a module.\n */\nexport default function interopDefaultSync<T = any>(module: T): T {\n  if (typeof module === 'object' && module !== null) {\n    if ('default' in module) {\n      return module.default as T;\n    }\n    return module;\n  }\n  return module;\n}\n","import { findInputElement, resolveInputRef } from '../core/elementResolver';\n\nimport type { Input, Mask, UnmaskedValueApi } from '../types';\n\ntype MaskedElement = (HTMLInputElement | HTMLTextAreaElement) & {\n  inputmask?: { unmaskedvalue?: () => string };\n};\n\n/**\n * Builds a stable string key from a field name and mask, used to cache ref\n * callbacks so their identity stays stable across renders.\n */\nexport function makeMaskCacheKey(fieldName: string, mask: Mask): string {\n  return `${fieldName}:${Array.isArray(mask) ? mask.join(',') : String(mask)}`;\n}\n\n/**\n * Attaches the original ref as a non-enumerable `prevRef` property so it is\n * accessible internally without polluting the spread result.\n */\nexport function setPrevRef(result: object, ref: unknown): void {\n  Object.defineProperty(result, 'prevRef', {\n    value: ref,\n    enumerable: false,\n    writable: true,\n    configurable: true,\n  });\n}\n\nfunction resolveUnmaskedInput(input: Input | null): HTMLInputElement | HTMLTextAreaElement | null {\n  const resolved = resolveInputRef(input);\n  if (!resolved) return null;\n\n  const inputElement = findInputElement(resolved);\n  if (inputElement) {\n    return inputElement as HTMLInputElement | HTMLTextAreaElement;\n  }\n\n  return resolved as HTMLInputElement | HTMLTextAreaElement;\n}\n\nexport function getUnmaskedValue(input: Input | null): string {\n  const element = resolveUnmaskedInput(input);\n  if (!element) return '';\n\n  const { inputmask } = element as MaskedElement;\n\n  if (inputmask && typeof inputmask.unmaskedvalue === 'function') {\n    return inputmask.unmaskedvalue();\n  }\n\n  return 'value' in element ? element.value : '';\n}\n\nexport function setUnmaskedValue<T extends object>(\n  result: T,\n  getter: () => string,\n): T & UnmaskedValueApi {\n  Object.defineProperty(result, 'unmaskedValue', {\n    value: getter,\n    enumerable: false,\n    writable: true,\n    configurable: true,\n  });\n\n  return result as T & UnmaskedValueApi;\n}\n","/* eslint-disable import-x/no-extraneous-dependencies */\nimport inputmask from './inputmask';\n\nimport { getMaskOptions } from './maskConfig';\nimport { moduleInterop } from '../utils';\n\nimport type { Mask, Options } from '../types';\n\n/**\n * Creates a mask instance with the given mask and options.\n * Like a factory, but simpler.\n *\n * @param mask - The mask pattern\n * @param options - Optional configuration options\n * @returns A mask instance\n */\nexport function createMaskInstance(mask: Mask, options?: Options): ReturnType<typeof inputmask> {\n  const inputmaskInstance = moduleInterop(inputmask);\n  return inputmaskInstance(getMaskOptions(mask, options));\n}\n\n/**\n * Applies a mask to an input element.\n * If it's not a direct input, searches inside.\n *\n * @param element - The element to apply mask to\n * @param mask - The mask pattern\n * @param options - Optional configuration options\n */\nexport function applyMaskToElement(\n  element: HTMLElement | null,\n  mask: Mask,\n  options?: Options,\n): void {\n  if (!element) return;\n\n  const maskInstance = createMaskInstance(mask, options);\n  const inputElement = element.nodeName === 'INPUT'\n    ? element\n    : (element.querySelector('input') as HTMLElement);\n\n  if (inputElement) {\n    maskInstance.mask(inputElement);\n  } else {\n    maskInstance.mask(element);\n  }\n}\n","/* eslint-disable import-x/no-extraneous-dependencies */\nimport inputmask from '../core/inputmask';\n\nimport { getMaskOptions } from '../core/maskConfig';\nimport { getUnmaskedValue, makeMaskCacheKey, setUnmaskedValue } from '../utils';\nimport isServer from '../utils/isServer';\nimport interopDefaultSync from '../utils/moduleInterop';\n\nimport type { Input, Mask, Options, UseMaskInputReturn } from '../types';\n\nconst callbackCache = new Map<string, UseMaskInputReturn>();\n\n/**\n * Higher-order function that creates a ref callback for applying input masks.\n * Simple function to apply mask via ref. No hooks, no drama.\n *\n * @param mask - The mask pattern to apply\n * @param options - Optional mask configuration options\n * @returns A ref callback function that applies the mask\n */\nexport default function withMask(mask: Mask, options?: Options): UseMaskInputReturn {\n  // without options, we cant cache, so we always return a fresh callback. :P\n  if (!options) {\n    const cacheKey = makeMaskCacheKey('', mask);\n    if (callbackCache.has(cacheKey)) {\n      return callbackCache.get(cacheKey) as UseMaskInputReturn;\n    }\n  }\n\n  let currentInput: Input | null = null;\n\n  const callback = ((input: Input | null): void => {\n    if (isServer || mask === null || !input) return;\n\n    currentInput = input;\n    const maskInput = interopDefaultSync(inputmask)(getMaskOptions(mask, options));\n    maskInput.mask(input as HTMLElement);\n  }) as UseMaskInputReturn;\n\n  if (!options) {\n    const cacheKey = makeMaskCacheKey('', mask);\n    callbackCache.set(cacheKey, callback);\n  }\n\n  return setUnmaskedValue(callback, () => getUnmaskedValue(currentInput));\n}\n"],"x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24],"mappings":"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"}