use-mask-input 3.10.1 → 3.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/CHANGELOG.md +7 -1
  2. package/dist/antd.cjs +1 -65
  3. package/dist/antd.cjs.map +1 -1
  4. package/dist/antd.d.cts +12 -10
  5. package/dist/{antd.d.ts → antd.d.mts} +12 -10
  6. package/dist/antd.mjs +2 -0
  7. package/dist/antd.mjs.map +1 -0
  8. package/dist/index-BmKzoe0X.d.cts +836 -0
  9. package/dist/index-BmKzoe0X.d.mts +836 -0
  10. package/dist/index.cjs +1 -173
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.d.cts +18 -15
  13. package/dist/{index.d.ts → index.d.mts} +18 -15
  14. package/dist/index.mjs +2 -0
  15. package/dist/index.mjs.map +1 -0
  16. package/dist/withMask-VWeBqi_u.cjs +2 -0
  17. package/dist/withMask-VWeBqi_u.cjs.map +1 -0
  18. package/dist/withMask-jrErtLYS.mjs +2 -0
  19. package/dist/withMask-jrErtLYS.mjs.map +1 -0
  20. package/package.json +42 -22
  21. package/dist/antd.js +0 -63
  22. package/dist/antd.js.map +0 -1
  23. package/dist/chunk-PMBRAXS4.cjs +0 -5876
  24. package/dist/chunk-PMBRAXS4.cjs.map +0 -1
  25. package/dist/chunk-XSTQDKDU.js +0 -5866
  26. package/dist/chunk-XSTQDKDU.js.map +0 -1
  27. package/dist/index-D8KkaDbQ.d.cts +0 -596
  28. package/dist/index-D8KkaDbQ.d.ts +0 -596
  29. package/dist/index.js +0 -165
  30. package/dist/index.js.map +0 -1
  31. package/src/antd/useHookFormMaskAntd.spec.ts +0 -181
  32. package/src/antd/useMaskInputAntd-server.spec.tsx +0 -37
  33. package/src/antd/useMaskInputAntd.spec.tsx +0 -131
  34. package/src/api/useHookFormMask.spec.ts +0 -259
  35. package/src/api/useMaskInput-server.spec.tsx +0 -30
  36. package/src/api/useMaskInput.spec.tsx +0 -238
  37. package/src/api/withHookFormMask.spec.ts +0 -179
  38. package/src/api/withMask.spec.ts +0 -137
  39. package/src/api/withTanStackFormMask.spec.ts +0 -76
  40. package/src/core/elementResolver.spec.ts +0 -175
  41. package/src/core/inputmask.spec.ts +0 -21
  42. package/src/core/maskConfig.spec.ts +0 -208
  43. package/src/core/maskEngine.spec.ts +0 -114
  44. package/src/utils/flow.spec.ts +0 -57
  45. package/src/utils/isServer.spec.ts +0 -15
  46. package/src/utils/moduleInterop.spec.ts +0 -37
@@ -0,0 +1 @@
1
+ {"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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"}