{"version":3,"file":"js/373-0a687542be5d7d0ac58e.js","mappings":"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","sources":["webpack://AYTM/./app/_stock/webpack/lib/common/content-editable.js","webpack://AYTM/./app/_stock/webpack/lib/rfd-ui/lib/masked-input.js"],"sourcesContent":["// contentEditable tools\n\nexport function getVisualSelection(node) {\n const nodeDocument = null == node ? document : node.ownerDocument\n const nodeWindow = null == nodeDocument ? window : nodeDocument.defaultView\n if (null != node && nodeDocument.activeElement === node) {\n const selection = nodeWindow.getSelection()\n if (selection.rangeCount >= 1) {\n const range = selection.getRangeAt(0)\n const selectionStart = findVisualSelectionOffsetFromRangeNode(node, range.startContainer, range.startOffset)\n const selectionEnd = range.collapsed\n ? selectionStart\n : findVisualSelectionOffsetFromRangeNode(node, range.endContainer, range.endOffset)\n return [selectionStart, selectionEnd]\n }\n }\n return [null, null]\n}\n\nexport function setVisualSelection(node, start, end = start) {\n const nodeDocument = null == node ? document : node.ownerDocument\n const nodeWindow = null == nodeDocument ? window : nodeDocument.defaultView\n if (null != node && nodeDocument.activeElement === node && start >= 0 && end >= 0) {\n const [normalizedStart, normalizedEnd] = end < start ? [end, start] : [start, end]\n const range = nodeDocument.createRange()\n const { node: rangeStartNode, offset: rangeStartOffset } = findRangeNodeForVisualSelectionOffset(\n node,\n normalizedStart\n )\n range.setStart(rangeStartNode, rangeStartOffset)\n if (normalizedEnd !== normalizedStart) {\n const { node: rangeEndNode, offset: rangeEndOffset } = findRangeNodeForVisualSelectionOffset(node, normalizedEnd)\n range.setEnd(rangeEndNode, rangeEndOffset)\n } else {\n range.setEnd(rangeStartNode, rangeStartOffset)\n range.collapse(true)\n }\n const selection = nodeWindow.getSelection()\n selection.removeAllRanges()\n selection.addRange(range)\n }\n}\n\nexport function getNodeVisualLength(node) {\n if (node.hasChildNodes()) {\n let nodeLength = 0\n const childNodes = node.childNodes\n for (const childNode of childNodes) {\n nodeLength += getNodeVisualLength(childNode)\n }\n return nodeLength\n } else {\n switch (node.nodeType) {\n case Node.TEXT_NODE: {\n return (node.textContent || '').length\n }\n case Node.ELEMENT_NODE: {\n // collapsed element\n switch (node.tagName ? node.tagName.toLowerCase() : '') {\n case 'span':\n case 'div': {\n return (node.textContent || '').length\n }\n default: {\n return Math.max(1, (node.textContent || '').length)\n }\n }\n }\n default: {\n return 0\n }\n }\n }\n}\n\nexport function findVisualSelectionOffsetFromRangeNode(rootNode, rangeNode, rangeNodeOffset) {\n if (rootNode === rangeNode) {\n if (rootNode.hasChildNodes()) {\n let currentVisualOffset = 0\n const childNodes = rootNode.childNodes\n for (let i = 0; i < childNodes.length && i < rangeNodeOffset; i++) {\n currentVisualOffset += getNodeVisualLength(childNodes[i])\n }\n return currentVisualOffset\n } else {\n return rangeNodeOffset\n }\n } else if (rootNode.hasChildNodes()) {\n let currentVisualOffset = 0\n const searchPath = [rootNode.childNodes[0]]\n while (0 < searchPath.length) {\n const tailIndex = searchPath.length - 1\n const currentNode = searchPath[tailIndex]\n if (rangeNode === currentNode) {\n // rangeNode found\n return currentVisualOffset + findVisualSelectionOffsetFromRangeNode(currentNode, rangeNode, rangeNodeOffset)\n } else if (null == currentNode) {\n // at the end of children list\n searchPath.pop()\n const parentNodeIndex = searchPath.length - 1\n if (0 <= parentNodeIndex) {\n const parentNode = searchPath[parentNodeIndex]\n searchPath[parentNodeIndex] = null == parentNode ? null : parentNode.nextSibling\n }\n } else if (currentNode.hasChildNodes()) {\n // go deeper\n searchPath.push(currentNode.childNodes[0])\n } else {\n // count this node and move forward\n searchPath[tailIndex] = currentNode.nextSibling\n currentVisualOffset += getNodeVisualLength(currentNode)\n }\n }\n return currentVisualOffset\n } else {\n return getNodeVisualLength(rootNode)\n }\n}\n\nexport function findRangeNodeForVisualSelectionOffset(rootNode, visualOffset) {\n if (0 === visualOffset) {\n return {\n node: rootNode,\n offset: 0\n }\n } else if (rootNode.hasChildNodes()) {\n let currentVisualOffset = visualOffset\n const searchPath = [rootNode.childNodes[0]]\n while (0 < searchPath.length) {\n const tailIndex = searchPath.length - 1\n const currentNode = searchPath[tailIndex]\n if (null == currentNode) {\n // at the end of children list\n searchPath.pop()\n const parentNodeIndex = searchPath.length - 1\n if (0 <= parentNodeIndex) {\n const parentNode = searchPath[parentNodeIndex]\n searchPath[parentNodeIndex] = null == parentNode ? null : parentNode.nextSibling\n }\n } else if (currentNode.hasChildNodes()) {\n // go deeper\n searchPath.push(currentNode.childNodes[0])\n } else {\n // count this node and possibly move forward\n const currentNodeLength = getNodeVisualLength(currentNode)\n if (0 > currentVisualOffset - currentNodeLength) {\n // offset inside node\n return findRangeNodeForVisualSelectionOffset(currentNode, currentVisualOffset)\n } else if (currentVisualOffset === currentNodeLength) {\n // offset after node\n searchPath.pop()\n const parentNodeIndex = searchPath.length - 1\n if (0 <= parentNodeIndex) {\n let currentOffset = 0\n const parentNode = searchPath[parentNodeIndex]\n for (let i = 0; i < parentNode.childNodes.length; i++) {\n if (parentNode.childNodes[i] === currentNode) {\n return {\n node: parentNode,\n offset: currentOffset + 1\n }\n }\n currentOffset++\n }\n }\n } else {\n currentVisualOffset -= currentNodeLength\n }\n searchPath[tailIndex] = currentNode.nextSibling\n }\n }\n // offset overflow - set it to the end\n return {\n node: rootNode,\n offset: rootNode.childNodes.length\n }\n } else {\n return {\n node: rootNode,\n offset: visualOffset\n }\n }\n}\n\nexport function setSelectionAtEnd(contentEditableEl) {\n try {\n const nodeDocument = null == contentEditableEl ? document : contentEditableEl.ownerDocument\n const nodeWindow = null == nodeDocument ? window : nodeDocument.defaultView\n const range = nodeDocument.createRange()\n range.selectNodeContents(contentEditableEl)\n range.collapse(false)\n const selection = nodeWindow.getSelection()\n selection.removeAllRanges()\n selection.addRange(range)\n } catch {\n //\n }\n}\n","/* eslint-disable max-lines */\n\n//helpers\n\nconst helpers = {\n regexp: {\n prepareStringToDOM: new RegExp('(\\\\n|\\\\s|&|<|>)', 'gi'),\n linefeed2BrRegExp: new RegExp('\\\\n', 'gi'),\n emailChildValidationRegExp: new RegExp('[^\\\\s@]+', 'i'),\n emailFullValidationRegExp: new RegExp('^[^\\\\s@]+?@[^\\\\s@]+?\\\\.[^\\\\s@]{1,63}$', 'i'),\n onlyEmptyChars: new RegExp('^(\\\\s)+$', 'i')\n },\n prepareToDOMSwapMap: {\n '\\n': '
',\n ' ': ' ',\n '&': '&',\n '<': '<',\n '>': '>'\n },\n monthNumberToString: {\n 1: 'jan',\n 2: 'feb',\n 3: 'mar',\n 4: 'apr',\n 5: 'may',\n 6: 'jun',\n 7: 'jul',\n 8: 'aug',\n 9: 'sep',\n 10: 'oct',\n 11: 'nov',\n 12: 'dec'\n },\n monthStringToNumber: {\n jan: 1,\n feb: 2,\n mar: 3,\n apr: 4,\n may: 5,\n jun: 6,\n jul: 7,\n aug: 8,\n sep: 9,\n oct: 10,\n nov: 11,\n dec: 12\n },\n currentYearInTwoDigit: Number(String(new Date().getFullYear()).slice(2)),\n prepareStringToDOM: string =>\n string.replace(\n helpers.regexp.prepareStringToDOM,\n (...params) => helpers.prepareToDOMSwapMap[params[1]] || params[1]\n ),\n getSimpleDOMString: ({ placeholderValue = {}, value = '' }, classNames = {}, isBlur = false, freeMode = false) => {\n const { base: pBase = '', additional: pAdd = '' } = placeholderValue\n const freeModeAttributes = ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"'\n const pClass = classNames['placeholder']\n const placeholderBlockBase = pBase.length > 0 ? `${pBase}` : ''\n const onBlurStyle = isBlur ? 'style=\"display:none\" ' : ' '\n const placeholderBlockAdditional =\n pAdd.length > 0 ? `${pAdd}` : ''\n const placeholderBlock = placeholderBlockBase + placeholderBlockAdditional\n let attributes = ' '\n if (freeMode) attributes += freeModeAttributes\n const valueBlock =\n value.length > 0\n ? `${helpers.prepareStringToDOM(value)}`\n : ''\n return valueBlock + placeholderBlock\n },\n getStartNodePosition: (nodesChain, position, isBlur = false) => {\n const lengthGetter = isBlur ? 'lengthBlur' : 'length'\n let symbolsBeforeWithoutCurrentNodeCount = 0\n const startState = { index: undefined, position: undefined }\n for (let i = 0; i < nodesChain.length && startState.index === undefined; i++) {\n startState.position = position - symbolsBeforeWithoutCurrentNodeCount\n const nodeLength = nodesChain[i][i === nodesChain.length - 2 ? lengthGetter : 'length']\n if (startState.position >= 0 && startState.position < nodeLength) startState.index = [i]\n symbolsBeforeWithoutCurrentNodeCount += nodeLength\n }\n if (startState.index === undefined) {\n startState.index = [nodesChain.length - 1]\n startState.position = 0\n }\n const children = nodesChain[startState.index[0]].children\n if (children) {\n let childrenPosition\n symbolsBeforeWithoutCurrentNodeCount = 0\n for (let i = 0; i < children.length && 1 === startState.index.length; i++) {\n childrenPosition = startState.position - symbolsBeforeWithoutCurrentNodeCount\n const childLength =\n children[i][\n startState.index[0] === nodesChain.length - 2 && i === children.length - 1 ? lengthGetter : 'length'\n ]\n if (childrenPosition >= 0 && childrenPosition < childLength) startState.index.push(i)\n symbolsBeforeWithoutCurrentNodeCount += childLength\n }\n startState.position = childrenPosition\n }\n\n return startState\n },\n nodesHandler: (nodesChain, input, startState) => {\n const currentHandlerState = { index: [...startState.index], position: startState.position }\n\n do {\n let childNode\n\n const parentNode = nodesChain[currentHandlerState.index[0]]\n\n if (1 === currentHandlerState.index.length && parentNode.children) {\n const parentPosition =\n currentHandlerState.position < 0\n ? parentNode.length + currentHandlerState.position\n : currentHandlerState.position\n const startState = helpers.getStartNodePosition(parentNode.children, parentPosition)\n currentHandlerState.index = [parentNode.index[0], startState.index[0]]\n currentHandlerState.position = startState.position\n }\n\n const beforeIndex = currentHandlerState.index.join('')\n parentNode.handler && parentNode.handler(input, currentHandlerState)\n parentNode.placeholderGenerator && parentNode.placeholderGenerator()\n const afterIndex = currentHandlerState.index.join('')\n\n if (beforeIndex === afterIndex && currentHandlerState.index.length > 1) {\n childNode = parentNode.children[currentHandlerState.index[1]]\n childNode.handler(input, currentHandlerState)\n childNode.placeholderGenerator && childNode.placeholderGenerator()\n }\n\n if (currentHandlerState.position < 0) --currentHandlerState.index[currentHandlerState.index.length - 1]\n else {\n let nodeLength = nodesChain[currentHandlerState.index[0]].length\n if (currentHandlerState.index.length > 1)\n nodeLength = nodesChain[currentHandlerState.index[0]].children[currentHandlerState.index[1]].length\n\n if (currentHandlerState.position >= nodeLength) {\n ++currentHandlerState.index[currentHandlerState.index.length - 1]\n currentHandlerState.position = 0\n }\n }\n\n if (currentHandlerState.index.length > 1) {\n if (currentHandlerState.index[1] < 0) currentHandlerState.index = [currentHandlerState.index[0] - 1]\n else if (currentHandlerState.index[1] >= nodesChain[currentHandlerState.index[0]].children.length)\n currentHandlerState.index = [currentHandlerState.index[0] + 1]\n }\n } while (input.length > 0 && currentHandlerState.index[0] >= 0 && currentHandlerState.index[0] < nodesChain.length)\n\n return currentHandlerState\n },\n prepareInput: symbols => {\n let input = []\n const incomingSymbols = !Array.isArray(symbols) ? [symbols] : symbols\n incomingSymbols.forEach(item => {\n if ('string' === typeof item) input = input.concat(item.split(''))\n else input.push(item)\n })\n return input\n },\n getFinalPosition: (nodesChain, finalState) => {\n let finalPosition = 0\n for (let i = 0; i < finalState.index[0]; i++) {\n finalPosition += nodesChain[i].length\n }\n if (finalState.index.length > 1) {\n for (let i = 0; i < finalState.index[1]; i++) {\n finalPosition += nodesChain[finalState.index[0]].children[i].length\n }\n }\n return finalPosition + finalState.position\n },\n datePartsPresets: {\n DD: {\n type: 'number_range',\n params: ['DD', ['1', undefined, '31', '2'], 'D'],\n valueType: 'day',\n getValue: rawValue => Number(rawValue)\n },\n MM: {\n type: 'number_range',\n params: ['MM', ['1', undefined, '12', '2'], 'M'],\n valueType: 'month',\n getValue: rawValue => Number(rawValue)\n },\n MMM: {\n type: 'few_symbols',\n params: ['MMM', ['*', '3', undefined, undefined], 'M'],\n valueType: 'month',\n getValue: rawValue => helpers.monthStringToNumber[rawValue.toLocaleLowerCase()],\n isValid: rawValue => Boolean(helpers.monthStringToNumber[rawValue.toLocaleLowerCase()])\n },\n YY: {\n type: 'few_symbols',\n params: ['YY', ['#', '2', undefined, undefined], 'Y'],\n valueType: 'year',\n getValue: rawValue => {\n let year = Number(rawValue)\n if (year < helpers.currentYearInTwoDigit) year = 2000 + year\n else if (year < 100) year = 1900 + year\n return year\n }\n },\n YYYY: {\n type: 'few_symbols',\n params: ['YYYY', ['#', '4', undefined, undefined], 'Y'],\n valueType: 'year',\n getValue: rawValue => Number(rawValue)\n }\n },\n multicharMechanic: (node, input, currentState) => {\n currentState.position = Math.max(\n Math.min(\n currentState.position < 0 ? node.valueLength + currentState.position : currentState.position,\n node.valueLength\n ),\n 0\n )\n if (!input.length) return void 0\n input[0].instruction && input[0].instruction(node, input, currentState)\n if (!input.length) return void 0\n\n if ('string' === typeof input[0] && '\\t\\n'.includes(input[0])) {\n input[0] = {\n type: 'next-active',\n backward: false,\n start: { index: [...currentState.index], position: currentState.position }\n }\n currentState.position = node.length\n return void 0\n } else if ('next-active' === input[0].type) {\n if (node.placeholderValue.length) {\n input.shift()\n currentState.position = node.valueLength\n return void 0\n } else {\n currentState.position = input[0].backward ? -1 : node.length\n return void 0\n }\n } else if ('next-fill' === input[0].type) {\n if (node.valueLength > 0) {\n input.shift()\n currentState.position = node.valueLength\n return void 0\n } else {\n currentState.position = input[0].backward ? -1 : node.length\n return void 0\n }\n } else if ('next-non-static' === input[0].type) {\n input.shift()\n currentState.position = node.valueLength\n return void 0\n } else if ('backspace' === input[0].type) {\n if (true === input[0].moved) input[0] = ''\n else {\n input[0].moved = true\n --currentState.position\n return void 0\n }\n } else if ('ranged-backspace' === input[0].type) {\n if (true === input[0].moved[0]) {\n input[0].moved.shift()\n if (0 === input[0].moved.length) input.shift()\n input.unshift('')\n } else {\n input[0].moved[0] = true\n --currentState.position\n return void 0\n }\n }\n if ('delete' === input[0].type) input[0] = ''\n\n const newValue = input.shift()\n const newValueIsValid = node.params.validator(newValue)\n const lengthIsValid = node.params.lengthValidation()\n\n if ('' === newValue) {\n node.value = node.value.slice(0, currentState.position) + node.value.slice(currentState.position + 1)\n } else if (!newValueIsValid && node.params.needToTransferNext(currentState.position)) {\n input.unshift(newValue)\n currentState.position = node.length\n return void 0\n } else if (newValueIsValid && lengthIsValid) {\n node.value = node.value.slice(0, currentState.position) + newValue + node.value.slice(currentState.position)\n ++currentState.position\n return void 0\n }\n return void 0\n },\n singlecharMechanic: (node, input, currentState) => {\n if (!input.length) return (currentState.position = 0)\n input[0].instruction && input[0].instruction(node, input, currentState)\n if (!input.length) return (currentState.position = 0)\n\n if ('string' === typeof input[0] && '\\t\\n'.includes(input[0])) {\n input[0] = {\n type: 'next-active',\n backward: false,\n start: { index: [...currentState.index], position: currentState.position }\n }\n return (currentState.position = node.length)\n } else if ('next-active' === input[0].type) {\n if (node.placeholderValue.length) {\n input.shift()\n return (currentState.position = node.valueLength)\n } else return (currentState.position = input[0].backward ? -1 : node.length)\n } else if ('next-fill' === input[0].type) {\n if (node.valueLength > 0) {\n input.shift()\n return (currentState.position = node.valueLength)\n } else return (currentState.position = input[0].backward ? -1 : node.length)\n } else if ('next-non-static' === input[0].type) {\n input.shift()\n return (currentState.position = node.valueLength)\n } else if ('backspace' === input[0].type) {\n if (true === input[0].moved) input[0] = ''\n else {\n input[0].moved = true\n return (currentState.position = -1)\n }\n } else if ('ranged-backspace' === input[0].type) {\n if (true === input[0].moved[0]) {\n input[0].moved.shift()\n if (0 === input[0].moved.length) input.shift()\n input.unshift('')\n } else {\n input[0].moved[0] = true\n return (currentState.position = -1)\n }\n }\n if ('delete' === input[0].type) input[0] = ''\n\n const newValue = input.shift()\n const newValueIsValid = '' === newValue || node.params.validator(newValue)\n\n if (newValueIsValid) {\n node.value = newValue\n return (currentState.position = '' === node.value ? 0 : 1)\n } else {\n return (currentState.position = 0)\n }\n }\n}\n\nconst semantic = new Map() // eslint-disable-line immutablejs/no-native-map-set\n\n// example - {DD/MM/YY} or {DD . MM . YYYY} and similar\nsemantic.set('date', {\n matchRegExp: '\\\\{((?:(?:M{3}|M{2}|D{2}|Y{4}|Y{2})(?:[-\\\\/. ,]*?))+?)\\\\}',\n nodeCreator: (mask, params, _placeholder) => {\n const childParams = params[0].split(/(M{3}|M{2}|D{2}|Y{4}|Y{2})/g)\n if ('' === childParams[0]) childParams.shift()\n if ('' === childParams[childParams.length - 1]) childParams.pop()\n\n const node = {\n get length() {\n let length = 0\n node.children.forEach(child => (length += child.length))\n return length\n },\n get lengthBlur() {\n let length = 0\n node.children.forEach(child => (length += child.lengthBlur))\n return length\n },\n get valueLength() {\n let length = 0\n let incomprehensibleRemainder = 0\n node.children.forEach(child => {\n if (child.valueLength) {\n length += incomprehensibleRemainder\n incomprehensibleRemainder = 0\n length += child.valueLength\n }\n incomprehensibleRemainder += child.placeholderValue.length\n })\n return length\n }\n }\n\n node.params = {}\n node.type = 'date'\n node.mask = mask\n node.children = childParams.map(param => {\n const createParams = helpers.datePartsPresets[param] || { type: 'static', params: [param, undefined, undefined] }\n return semantic.get(createParams.type).nodeCreator(...createParams.params)\n })\n node.handler = (_input, _currentState) => {}\n node.getDOM = (classNames, isBlur) => node.children.map(child => child.getDOM(classNames, isBlur)).join('')\n node.getValue = isBlur => node.children.map(child => child.getValue(isBlur)).join('')\n node.onBlur = () => node.children.forEach(child => child.onBlur && child.onBlur())\n node.isValid = () => {\n let needComplexValidation = true\n const dateParts = {}\n let isValid = node.children.every(child => {\n let additionalValidation = true\n if ('static' !== child.type) {\n const datePartPreset = helpers.datePartsPresets[child.mask]\n if (datePartPreset) {\n const partType = datePartPreset.valueType\n const validator = datePartPreset.isValid\n additionalValidation = validator ? validator(child.value) : true\n if (undefined !== dateParts[partType]) needComplexValidation = false\n else dateParts[partType] = datePartPreset.getValue(child.value)\n }\n }\n return (child.isValid ? child.isValid() : true) && additionalValidation\n })\n\n needComplexValidation =\n needComplexValidation &&\n undefined !== dateParts.day &&\n undefined !== dateParts.month &&\n undefined !== dateParts.year\n\n if (isValid && needComplexValidation) {\n const { day, month, year } = dateParts\n const yearOfDate = new Date(year, month - 1, day).getFullYear()\n const monthOfDate = new Date(year, month - 1, day).getMonth()\n const dayOfDate = new Date(year, month - 1, day).getDate()\n isValid = yearOfDate == year && monthOfDate == month - 1 && dayOfDate == day\n }\n return isValid\n }\n node.isEmpty = () => node.children.every(child => (child.isEmpty ? child.isEmpty() : true))\n return node\n }\n})\n\n// example - {int.phone}\nsemantic.set('int_phone', {\n matchRegExp: '(\\\\{int\\\\.phone\\\\})',\n nodeCreator: (mask, _params, _placeholder) => {\n const node = {\n get length() {\n let length = 0\n node.children.forEach(child => (length += child.length))\n return length\n },\n get lengthBlur() {\n let length = 0\n node.children.forEach(child => (length += child.lengthBlur))\n return length\n },\n get valueLength() {\n let length = 0\n let incomprehensibleRemainder = 0\n node.children.forEach(child => {\n if (child.valueLength) {\n length += incomprehensibleRemainder\n incomprehensibleRemainder = 0\n length += child.valueLength\n }\n incomprehensibleRemainder += child.placeholderValue.length\n })\n return length\n }\n }\n\n node.params = {}\n node.type = 'int_phone'\n node.mask = mask\n node.children = [\n semantic.get('static').nodeCreator('+', void 0, void 0),\n semantic.get('few_symbols').nodeCreator('#[1+]', ['#', '1', '+', void 0]),\n semantic.get('static').nodeCreator('(', void 0, void 0),\n semantic.get('few_symbols').nodeCreator('#[1+]', ['#', '2', '+', void 0]),\n semantic.get('static').nodeCreator(') ', void 0, void 0),\n semantic.get('few_symbols').nodeCreator('#[3]', ['#', '3', void 0, void 0]),\n semantic.get('static').nodeCreator('-', void 0, void 0),\n semantic.get('few_symbols').nodeCreator('#[4+]', ['#', '4', '+', void 0])\n ]\n node.handler = (_input, _position) => {}\n node.getDOM = (classNames, isBlur) => node.children.map(child => child.getDOM(classNames, isBlur)).join('')\n node.getValue = isBlur => node.children.map(child => child.getValue(isBlur)).join('')\n node.onBlur = () => node.children.forEach(child => child.onBlur && child.onBlur())\n node.isValid = () => node.children.every(child => (child.isValid ? child.isValid() : true))\n node.isEmpty = () => node.children.every(child => (child.isEmpty ? child.isEmpty() : true))\n return node\n }\n})\n\n// example - ______ or ##### or *****\nsemantic.set('grouped_single_chars', {\n matchRegExp: '((?:_){2,}|(?:\\\\#){2,}|(?:\\\\*){2,})',\n nodeCreator: (mask, params, _placeholder) => {\n const node = {\n get length() {\n return node.children.length\n },\n get lengthBlur() {\n return node.children.length\n },\n get valueLength() {\n let length = 0\n let incomprehensibleRemainder = 0\n node.children.forEach(child => {\n if (child.valueLength) {\n length += incomprehensibleRemainder\n incomprehensibleRemainder = 0\n length += child.valueLength\n }\n incomprehensibleRemainder += child.placeholderValue.length\n })\n return length\n }\n }\n\n node.params = {\n fullValidator: () => !node.children.every(child => '' === child.value.trim())\n }\n node.type = 'grouped_single_chars'\n node.mask = mask\n node.children = params[0].split('').map(mask => semantic.get('single_char_type').nodeCreator(mask, [mask]))\n node.handler = (_input, _currentState) => {}\n node.getDOM = (classNames, _isBlur) => {\n const freeModeAttributes = ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"'\n const DOMBlocks = []\n let currentBlock = {\n type: 'value',\n value: ''\n }\n node.children.forEach(child => {\n if ('' !== child.value) {\n if ('value' !== currentBlock.type) {\n if (currentBlock.value)\n DOMBlocks.push(\n `${currentBlock.value}`\n )\n\n currentBlock = {\n type: 'value',\n value: ''\n }\n }\n currentBlock.value += child.value\n } else {\n if ('placeholder' !== currentBlock.type) {\n if (currentBlock.value)\n DOMBlocks.push(\n `${helpers.prepareStringToDOM(currentBlock.value)}`\n )\n\n currentBlock = {\n type: 'placeholder',\n value: ''\n }\n }\n currentBlock.value += child.placeholderValue.base\n }\n })\n if ('' !== currentBlock.value) {\n if ('value' === currentBlock.type)\n DOMBlocks.push(\n `${helpers.prepareStringToDOM(currentBlock.value)}`\n )\n else\n DOMBlocks.push(\n `${currentBlock.value}`\n )\n }\n return DOMBlocks.join('')\n }\n node.getValue = isBlur => node.children.map(child => child.getValue(isBlur)).join('')\n node.onBlur = () => node.children.forEach(child => child.onBlur && child.onBlur())\n node.isValid = () => {\n let beforeCharIsSpace = false\n let currentCharIsSpace = false\n let spaceValidation = true\n let isValid = node.children.every(child => {\n if (spaceValidation) {\n currentCharIsSpace = helpers.regexp.onlyEmptyChars.test(child.value)\n spaceValidation = !(beforeCharIsSpace && currentCharIsSpace)\n beforeCharIsSpace = currentCharIsSpace\n }\n return child.isValid ? child.isValid() : true\n })\n\n isValid = isValid && spaceValidation\n isValid = isValid && node.params.fullValidator()\n // isValid = isValid && !helpers.regexp.spacesAtTheBorders.test(node.value) // disable spaces validations\n return isValid\n }\n\n node.isEmpty = () => node.children.every(child => (child.isEmpty ? child.isEmpty() : true))\n return node\n }\n})\n\n// example - {email}\nsemantic.set('email', {\n matchRegExp: '(\\\\{email\\\\})',\n nodeCreator: (mask, _params, _placeholder) => {\n const node = {\n get length() {\n let length = 0\n node.children.forEach(child => (length += child.length))\n return length\n },\n get lengthBlur() {\n let length = 0\n node.children.forEach(child => (length += child.lengthBlur))\n return length\n },\n get valueLength() {\n let length = 0\n let incomprehensibleRemainder = 0\n node.children.forEach(child => {\n if (child.valueLength) {\n length += incomprehensibleRemainder\n incomprehensibleRemainder = 0\n length += child.valueLength\n }\n incomprehensibleRemainder += child.placeholderValue.length\n })\n return length\n }\n }\n\n node.params = {\n childValidator: value => helpers.regexp.emailChildValidationRegExp.test(value),\n fullValidator: () => helpers.regexp.emailFullValidationRegExp.test(node.getValue())\n }\n node.type = 'email'\n node.mask = mask\n node.children = [\n semantic.get('few_symbols').nodeCreator('_[1+]', ['_', '1', '+', void 0]),\n semantic.get('static').nodeCreator('@', void 0, void 0),\n semantic.get('few_symbols').nodeCreator('_[1+]', ['_', '1', '+', void 0])\n ]\n node.handler = (input, currentState) => {\n if (\n input.length &&\n '@' === input[0] &&\n 0 === currentState.index[1] &&\n node.children[0].valueLength === currentState.position\n ) {\n input.shift()\n currentState.index[1] = 2\n currentState.position = node.children[2].valueLength\n } else if (\n input.length &&\n 'string' === typeof input[0] &&\n !'\\n\\t'.includes(input[0]) &&\n (0 === currentState.index[1] || 2 === currentState.index[1]) &&\n !node.params.childValidator(input[0])\n )\n input.shift()\n }\n node.getDOM = (classNames, isBlur) => node.children.map(child => child.getDOM(classNames, isBlur)).join('')\n node.getValue = isBlur => node.children.map(child => child.getValue(isBlur)).join('')\n node.onBlur = () => node.children.forEach(child => child.onBlur && child.onBlur())\n node.isValid = () =>\n node.children.every(child => (child.isValid ? child.isValid() : true)) && node.params.fullValidator()\n node.isEmpty = () => node.children.every(child => (child.isEmpty ? child.isEmpty() : true))\n return node\n }\n})\n\n// example - _{3-440} or _{12-600}[7]\n// 7 - leading zeros, but max char count - 3, because 440 / 600 have 3 chars\n//_{1-9} - is not a number range!!! Second digit in range must have 2 chars and more\nsemantic.set('number_range', {\n matchRegExp:\n '_\\\\{(?:(\\\\d{2,}|(?:\\\\d(?=\\\\-\\\\d{2,})))(?:(\\\\+)|(?:\\\\-(\\\\d+))))\\\\}(?:\\\\[(?:(\\\\d+)(?:(\\\\+)|(?:\\\\-(\\\\d+)))?)\\\\])?',\n //matchRegExp: '_\\\\{(?:(\\\\d+)(?:(\\\\+)|(?:\\\\-(\\\\d{2,}))))\\\\}(?:\\\\[(?:(\\\\d+)(?:(\\\\+)|(?:\\\\-(\\\\d+)))?)\\\\])?',\n nodeCreator: (mask, params, placeholder = '#') => {\n const node = {\n get length() {\n return node.valueLength + node.placeholderValue.length\n },\n get lengthBlur() {\n return node.valueLength + node.placeholderValue.base.length\n },\n get valueLength() {\n return node.value.length\n }\n }\n\n node.placeholderGenerator = () => {\n node.placeholderValue.base = ''\n node.placeholderValue.additional = ''\n for (let j = 0; j < node.params.minimumValidSymbols - node.valueLength; j++)\n node.placeholderValue.base += node.placeholder\n\n if (\n node.params.maximumValidSymbols !== node.params.minimumValidSymbols &&\n (!node.params.maximumValidSymbols || node.params.maximumValidSymbols > node.valueLength)\n )\n node.placeholderValue.additional = '#'\n }\n\n const minimumNumberRawParam = params[0]\n const maximumNumberRawParam = params[2] || ('+' === params[1] ? undefined : params[0])\n const minimumNumber = maximumNumberRawParam\n ? Math.min(minimumNumberRawParam, maximumNumberRawParam)\n : minimumNumberRawParam\n const maximumNumber = maximumNumberRawParam\n ? Math.max(minimumNumberRawParam, maximumNumberRawParam)\n : maximumNumberRawParam\n\n const minimumValidSymbolsRawParam = undefined !== params[3] ? params[3] : 1\n const maximumValidSymbolsRawParam =\n params[5] || ('+' === params[4] ? undefined : params[3] || String(maximumNumber).length)\n\n const minimumValidSymbols = maximumValidSymbolsRawParam\n ? Math.min(minimumValidSymbolsRawParam, maximumValidSymbolsRawParam)\n : minimumValidSymbolsRawParam\n const maximumValidSymbols = maximumValidSymbolsRawParam\n ? Math.max(minimumValidSymbolsRawParam, maximumValidSymbolsRawParam)\n : maximumValidSymbolsRawParam\n\n node.params = {\n validator: value => /\\d/.test(value),\n lengthValidation: () => maximumValidSymbols === undefined || node.valueLength < maximumValidSymbols,\n needToTransferNext: currentPosition =>\n currentPosition === node.valueLength && node.value.length && Number(node.value) >= minimumNumber,\n minimumNumber,\n maximumNumber,\n minimumValidSymbols,\n maximumValidSymbols\n }\n node.type = 'number_range'\n node.mask = mask\n node.value = ''\n node.placeholder = placeholder\n node.placeholderValue = {\n base: '',\n additional: '',\n get length() {\n return this.base.length + this.additional.length\n }\n }\n node.placeholderGenerator()\n node.handler = (input, currentState) => helpers.multicharMechanic(node, input, currentState)\n node.getDOM = (classNames, isBlur) => helpers.getSimpleDOMString(node, classNames, isBlur, true)\n node.getValue = isBlur =>\n isBlur && node.valueLength > 0 && Number(node.value) > 0\n ? String(Number(node.value)).padStart(node.params.minimumValidSymbols, '0')\n : node.value\n\n node.onBlur = () => {\n if (node.valueLength > 0 && Number(node.value) > 0)\n node.value = String(Number(node.value)).padStart(node.params.minimumValidSymbols, '0')\n node.placeholderGenerator()\n }\n node.isValid = () =>\n node.params.minimumNumber <= Number(node.value) &&\n (undefined === node.params.maximumNumber || node.params.maximumNumber >= Number(node.value)) &&\n ('' !== node.value.trim() || 0 === node.params.minimumValidSymbols)\n node.isEmpty = () => '' === node.value\n return node\n }\n})\n\n// example - _{1-9}[3] or _{a-z,A-Z,0-9}[3+] or _{a-z,0-9,f,X}[3-12] - regular expressions style char range\nsemantic.set('symbol_range', {\n matchRegExp:\n '_\\\\{((?:(?:[^,-]|(?:[^,-]\\\\-[^,-])), ?)*?(?:[^,-]|(?:[^,-]\\\\-[^,-])))\\\\}(?:\\\\[(?:(\\\\d+)(?:(\\\\+)|(?:\\\\-(\\\\d+)))?)\\\\])?',\n //matchRegExp: '_\\\\{(.+?)\\\\}(?:\\\\[(?:(\\\\d+)(?:(\\\\+)|(?:\\\\-(\\\\d+)))?)\\\\])?',\n nodeCreator: (mask, params, placeholder = '-') => {\n const node = {\n get length() {\n return node.valueLength + node.placeholderValue.length\n },\n get lengthBlur() {\n return node.valueLength + node.placeholderValue.base.length\n },\n get valueLength() {\n return node.value.length\n }\n }\n\n node.placeholderGenerator = () => {\n node.placeholderValue.base = ''\n node.placeholderValue.additional = ''\n for (let j = 0; j < node.params.minimumValidSymbols - node.valueLength; j++)\n node.placeholderValue.base += node.placeholder\n if (\n node.params.maximumValidSymbols !== node.params.minimumValidSymbols &&\n (!node.params.maximumValidSymbols || node.params.maximumValidSymbols > node.valueLength)\n )\n node.placeholderValue.additional = '_'\n }\n\n const minimumParam =\n params[1] === undefined\n ? 1\n : params[3] !== undefined\n ? Math.min(Number(params[1]), Number(params[3]))\n : Number(params[1])\n const maximumParam = params[3] !== undefined ? Math.max(Number(params[1]), Number(params[3])) : undefined\n const minimumValidSymbols = minimumParam\n const maximumValidSymbols = '+' === params[2] ? undefined : maximumParam || minimumParam\n\n const allowedSymbolsList = ((params[0] || '').match(/([^,-]|(?:[^,-]-[^,-]))(?:,|$)/g) || [])\n .map(rawItem => {\n const item = rawItem.replace(',', '')\n if (3 !== item.length) return item\n const fullCharCodeRange = []\n const start = Math.min(item.codePointAt(0), item.codePointAt(2))\n const end = Math.max(item.codePointAt(0), item.codePointAt(2))\n for (let i = start; i <= end; i++) fullCharCodeRange.push(i)\n return String.fromCodePoint(...fullCharCodeRange)\n })\n .join('')\n\n node.params = {\n placeholder,\n validator: value => allowedSymbolsList.includes(value),\n lengthValidation: () => maximumValidSymbols === undefined || node.valueLength < maximumValidSymbols,\n needToTransferNext: currentPosition =>\n currentPosition === node.valueLength && node.valueLength >= minimumValidSymbols,\n minimumValidSymbols,\n maximumValidSymbols,\n allowedSymbolsList\n }\n node.type = 'symbol_range'\n node.mask = mask\n node.value = ''\n node.placeholder = placeholder || node.params.placeholder\n node.placeholderValue = {\n base: '',\n additional: '',\n get length() {\n return this.base.length + this.additional.length\n }\n }\n node.placeholderGenerator()\n node.handler = (input, currentState) => {\n if (\n input.length &&\n 'string' === typeof input[0] &&\n node.params.lengthValidation() &&\n !node.params.validator(input[0])\n ) {\n if (node.params.validator(input[0].toUpperCase())) input[0] = input[0].toUpperCase()\n else if (node.params.validator(input[0].toLowerCase())) input[0] = input[0].toLowerCase()\n }\n const mechanicType =\n maximumValidSymbols === undefined || maximumValidSymbols > 1 ? 'multicharMechanic' : 'singlecharMechanic'\n return helpers[mechanicType](node, input, currentState)\n }\n node.getDOM = (classNames, isBlur) => helpers.getSimpleDOMString(node, classNames, isBlur)\n node.getValue = _isBlur => node.value\n node.isValid = () => {\n const trimmedValue = node.value.trim()\n const trimmedValueLength = trimmedValue.length\n return (\n trimmedValueLength >= node.params.minimumValidSymbols &&\n (node.params.maximumValidSymbols === undefined || trimmedValueLength <= node.params.maximumValidSymbols)\n )\n }\n node.isEmpty = () => '' === node.value\n return node\n }\n})\n\n// example - _[3] or _[3+] or #[3-12] or *[6+]\nsemantic.set('few_symbols', {\n matchRegExp: '(_|\\\\#|\\\\*)\\\\[(?:(\\\\d+)(?:(\\\\+)|(?:\\\\-(\\\\d+)))?)\\\\]',\n nodeCreator: (mask, params, placeholder) => {\n const node = {\n get length() {\n return node.valueLength + node.placeholderValue.length\n },\n get lengthBlur() {\n return node.valueLength + node.placeholderValue.base.length\n },\n get valueLength() {\n return node.value.length\n }\n }\n\n node.placeholderGenerator = () => {\n node.placeholderValue.base = ''\n node.placeholderValue.additional = ''\n for (let j = 0; j < node.params.minimumValidSymbols - node.valueLength; j++)\n node.placeholderValue.base += node.placeholder\n if (\n node.params.maximumValidSymbols !== node.params.minimumValidSymbols &&\n (!node.params.maximumValidSymbols || node.params.maximumValidSymbols > node.valueLength)\n )\n node.placeholderValue.additional = '_'\n }\n const minimumParam = params[3] !== undefined ? Math.min(Number(params[1]), Number(params[3])) : Number(params[1])\n const maximumParam = params[3] !== undefined ? Math.max(Number(params[1]), Number(params[3])) : undefined\n const minimumValidSymbols = minimumParam\n const maximumValidSymbols = '+' === params[2] ? undefined : maximumParam || minimumParam\n\n node.params = {\n type: {\n '*': 'letter',\n _: 'char',\n '#': 'digit'\n }[params[0]],\n placeholder: {\n '*': '-',\n _: '-',\n '#': '#'\n }[params[0]],\n validator: {\n '*': value => /[a-z]/i.test(value),\n _: value => /[^\\t\\n\\r]/.test(value),\n '#': value => /\\d/.test(value)\n }[params[0]],\n lengthValidation: () => maximumValidSymbols === undefined || node.valueLength < maximumValidSymbols,\n needToTransferNext: currentPosition =>\n currentPosition === node.valueLength && node.valueLength >= minimumValidSymbols,\n minimumValidSymbols,\n maximumValidSymbols\n }\n node.type = 'few_symbols'\n node.mask = mask\n node.value = ''\n node.placeholder = placeholder || node.params.placeholder\n node.placeholderValue = {\n base: '',\n additional: '',\n get length() {\n return this.base.length + this.additional.length\n }\n }\n node.placeholderGenerator()\n node.handler = (input, currentState) => {\n const mechanicType =\n maximumValidSymbols === undefined || maximumValidSymbols > 1 ? 'multicharMechanic' : 'singlecharMechanic'\n return helpers[mechanicType](node, input, currentState)\n }\n node.getDOM = (classNames, isBlur) =>\n helpers.getSimpleDOMString(node, classNames, isBlur, 'digit' === node.params.type)\n node.getValue = _isBlur => node.value\n node.isValid = () => {\n const trimmedValue = node.value.trim()\n const trimmedValueLength = trimmedValue.length\n return (\n trimmedValueLength >= node.params.minimumValidSymbols &&\n (node.params.maximumValidSymbols === undefined || trimmedValueLength <= node.params.maximumValidSymbols)\n )\n }\n node.isEmpty = () => '' === node.value\n return node\n }\n})\n\n// example - _ or # or *\nsemantic.set('single_char_type', {\n matchRegExp: '(_|\\\\#|\\\\*)',\n nodeCreator: (mask, params, placeholder) => {\n const node = {\n get length() {\n return node.valueLength + node.placeholderValue.length\n },\n get lengthBlur() {\n return node.valueLength + node.placeholderValue.base.length\n },\n get valueLength() {\n return node.value.length\n }\n }\n\n node.placeholderGenerator = () => (node.placeholderValue.base = '' === node.value ? node.placeholder : '')\n node.params = {\n type: {\n '*': 'letter',\n _: 'char',\n '#': 'digit'\n }[params[0]],\n placeholder: {\n '*': '-',\n _: '-',\n '#': '#'\n }[params[0]],\n validator: {\n '*': value => /[a-z]/i.test(value),\n _: value => /[^\\t\\n\\r]/.test(value),\n '#': value => /\\d/.test(value)\n }[params[0]]\n }\n node.type = 'single_char_type'\n node.mask = mask\n node.value = ''\n node.placeholder = placeholder || node.params.placeholder\n node.placeholderValue = {\n base: '',\n additional: '',\n get length() {\n return this.base.length + this.additional.length\n }\n }\n node.placeholderGenerator()\n node.handler = (input, currentState) => helpers.singlecharMechanic(node, input, currentState)\n node.getDOM = (classNames, isBlur) =>\n helpers.getSimpleDOMString(node, classNames, isBlur, 'digit' === node.params.type)\n node.getValue = _isBlur => node.value\n node.isValid = () => '' !== node.value\n node.isEmpty = () => '' === node.value\n return node\n }\n})\n\n// example - any static text, which not fit on other types\nsemantic.set('static', {\n nodeCreator: (mask, _params, _placeholder) => {\n const node = {\n get length() {\n return node.valueLength\n },\n get lengthBlur() {\n return node.valueLength\n },\n get valueLength() {\n return node.value.length\n }\n }\n\n node.placeholderGenerator = () => (node.placeholderValue = '')\n node.type = 'static'\n node.mask = mask\n node.value = mask\n node.placeholder = ''\n node.placeholderValue = ''\n node.handler = (input, currentState) => {\n currentState.position = Math.max(\n Math.min(\n currentState.position < 0 ? node.valueLength + currentState.position : currentState.position,\n node.valueLength\n ),\n 0\n )\n if (!input.length) return void 0\n input[0].instruction && input[0].instruction(node, input, currentState)\n if (!input.length) return void 0\n\n if ('string' === typeof input[0] && '\\t\\n'.includes(input[0])) {\n input[0] = {\n type: 'next-active',\n backward: false,\n start: { index: [...currentState.index], position: currentState.position }\n }\n return (currentState.position = node.length)\n } else if ('next-active' === input[0].type) {\n return (currentState.position = input[0].backward ? -1 : node.length)\n } else if ('next-fill' === input[0].type) {\n return (currentState.position = input[0].backward ? -1 : node.length)\n } else if ('next-non-static' === input[0].type) {\n return (currentState.position = input[0].backward ? -1 : node.length)\n } else if ('backspace' === input[0].type) {\n if (0 === currentState.position && false === input[0].moved) {\n input[0].moved = true\n input[0].instruction = (node, input, _currentState) => {\n if ('static' !== node.type && node.placeholderValue.length) input.shift()\n }\n } else input[0] = { type: 'next-non-static', backward: true }\n return (currentState.position = -1)\n } else if ('ranged-backspace' === input[0].type) {\n if (true === input[0].moved[0]) {\n input[0].moved.shift()\n if (0 === input[0].moved.length) input.shift()\n return void 0\n } else {\n input[0].moved[0] = true\n return --currentState.position\n }\n }\n if ('delete' === input[0].type) input[0] = ''\n\n if ('' === input[0]) {\n input.shift()\n return void 0\n }\n if (input[0] !== node.value[currentState.position]) return (currentState.position = node.length)\n\n input.shift()\n return ++currentState.position\n }\n node.getDOM = (classNames, isBlur) => helpers.getSimpleDOMString(node, classNames, isBlur, true)\n node.getValue = _isBlur => node.value\n return node\n }\n})\n\n//servise node, 'snake tail'\nsemantic.set('void_start', {\n nodeCreator: (_mask, _params, _placeholder) => {\n const node = {\n get length() {\n return 0\n },\n get lengthBlur() {\n return 0\n },\n get valueLength() {\n return 0\n }\n }\n node.placeholderGenerator = () => (node.placeholderValue = '')\n node.type = 'void_start'\n node.placeholderValue = ''\n node.handler = (input, currentState) => {\n if ('next-active' === input[0].type) {\n if (false === input[0].backward) return (currentState.position = 1)\n else {\n const action = input.shift()\n currentState.position = 1\n if (action.start) {\n currentState.index = action.start.index\n currentState.position = action.start.position\n }\n return void 0\n }\n } else if ('next-fill' === input[0].type) {\n if (false === input[0].backward) return (currentState.position = 1)\n else {\n input[0] = { type: 'next-non-static', backward: false, start: input[0].start }\n return (currentState.position = 1)\n }\n } else if ('next-non-static' === input[0].type) {\n if (false === input[0].backward) return (currentState.position = 1)\n else {\n const action = input.shift()\n currentState.position = 1\n if (action.start) {\n currentState.index = action.start.index\n currentState.position = action.start.position\n }\n return void 0\n }\n }\n if (input.length) input.shift()\n return (currentState.position = 1)\n }\n node.getDOM = _classNames => ''\n node.getValue = _isBlur => ''\n node.finalization = () => true\n return node\n }\n})\n\n//servise node, 'snake head'\nsemantic.set('void_end', {\n nodeCreator: (_mask, _params, _placeholder) => {\n const node = {\n get length() {\n return 0\n },\n get lengthBlur() {\n return 0\n },\n get valueLength() {\n return 0\n }\n }\n node.placeholderGenerator = () => (node.placeholderValue = '')\n node.type = 'void_end'\n node.placeholderValue = ''\n node.handler = (input, currentState) => {\n if (!input.length) return (currentState.position = 0)\n input[0].instruction && input[0].instruction(node, input, currentState)\n if (!input.length) return (currentState.position = 0)\n\n if ('string' === typeof input[0] && '\\t\\n'.includes(input[0])) {\n return (currentState.position = 0)\n } else if ('next-active' === input[0].type) {\n if (true === input[0].backward) return (currentState.position = -1)\n else {\n const action = input.shift()\n currentState.position = -1\n if (action.start) {\n currentState.index = action.start.index\n currentState.position = action.start.position\n }\n return void 0\n }\n } else if ('next-fill' === input[0].type) {\n if (true === input[0].backward) return (currentState.position = -1)\n else {\n const action = input.shift()\n currentState.position = -1\n if (action.start) {\n currentState.index = action.start.index\n currentState.position = action.start.position\n }\n return void 0\n }\n } else if ('next-non-static' === input[0].type) {\n if (true === input[0].backward) return (currentState.position = -1)\n else {\n const action = input.shift()\n currentState.position = -1\n if (action.start) {\n currentState.index = action.start.index\n currentState.position = action.start.position\n }\n return void 0\n }\n } else if ('backspace' === input[0].type) {\n if (false === input[0].moved) {\n input[0].moved = true\n return (currentState.position = -1)\n }\n } else if ('ranged-backspace' === input[0].type && false === input[0].moved[0]) {\n input[0].moved[0] = true\n return (currentState.position = -1)\n }\n input.shift()\n return 0\n }\n node.getDOM = _classNames => ''\n node.getValue = _isBlur => ''\n node.finalization = () => true\n return node\n }\n})\n\n//prepared data\n\nconst bufferedRegExps = {}\nsemantic.forEach((semanticScheme, type) => {\n if (semanticScheme.matchRegExp) bufferedRegExps[type] = new RegExp(`^${semanticScheme.matchRegExp}$`, 'i')\n})\nconst bracesReplaceRegExp = new RegExp('\\\\((?!\\\\?)', 'gi')\nconst bufferedSplitRegExp = new RegExp(\n `((?:${[...semantic.keys()]\n .map(type => {\n const typeRegExp = semantic.get(type).matchRegExp\n return typeRegExp ? typeRegExp.replace(bracesReplaceRegExp, '(?:') : undefined\n })\n .filter(item => item)\n .join(')|(?:')}))`,\n 'gi'\n)\n\n/*\nclassNames values:\nplaceholder - placeholder block into semantic block in client mode DOM\nvalue - value block into semantic block in client mode DOM\n */\n//building semantic nodes\nconst buildSemanticNodes = mask => {\n const types = [...Object.keys(bufferedRegExps)]\n const getDynamicBlock = mask => {\n let params = null\n let type = null\n for (let i = 0; i < types.length && !params; i++) {\n type = types[i]\n params = bufferedRegExps[type].exec(mask)\n }\n if (!params) return semantic.get('static').nodeCreator(mask)\n return semantic.get(type).nodeCreator(mask, params.slice(1))\n }\n\n const primalSemanticNodes = mask\n .split(bufferedSplitRegExp)\n .filter(item => item !== '')\n .map(mask => getDynamicBlock(mask))\n\n const voidStartBlock = semantic.get('void_start').nodeCreator()\n primalSemanticNodes.unshift(voidStartBlock)\n const voidEndBlock = semantic.get('void_end').nodeCreator()\n primalSemanticNodes.push(voidEndBlock)\n primalSemanticNodes.forEach((node, parentIndex) => {\n node.index = [parentIndex]\n if (node.children)\n node.children.forEach((child, childIndex) => {\n child.index = [parentIndex, childIndex]\n child.parent = node\n })\n })\n return primalSemanticNodes\n}\nconst constructMaskSemantic = (mask, classNames = {}) => {\n const baseClassNames = {\n placeholder: 'mh--placeholder',\n value: 'mh--value'\n }\n const presets = { classNames: { ...baseClassNames, ...classNames } }\n\n const globalState = {\n semanticNodes: buildSemanticNodes(mask),\n position: 0,\n presets,\n isValid: false,\n isBlur: false\n }\n\n const getDOM = () =>\n globalState.semanticNodes\n .map(currentNode => currentNode.getDOM(globalState.presets.classNames || {}, globalState.isBlur))\n .join('')\n\n const getString = () =>\n globalState.semanticNodes\n .map(currentNode => {\n const { base: pBase = '', additional: pAdd = '' } = currentNode.placeholderValue || {}\n return currentNode.getValue(globalState.isBlur) + pBase + (globalState.isBlur ? '' : pAdd)\n })\n .join('')\n\n const getValue = isBlur => {\n const currentIsBlur = isBlur !== undefined ? isBlur : globalState.isBlur\n return globalState.semanticNodes.map(currentNode => currentNode.getValue(currentIsBlur)).join('')\n }\n\n const getExample = () => {\n let lastNode = { params: {} }\n let lastExample = ''\n const examples = {\n letter: 'azAZ',\n char: 'Abc',\n digit: '19'\n }\n const currentDate = new Date()\n const datePartsExamples = {\n DD: String(currentDate.getDate()),\n MM: String(currentDate.getMonth() + 1),\n MMM: helpers.monthNumberToString[currentDate.getMonth() + 1],\n YY: String(currentDate.getFullYear()).slice(2),\n YYYY: String(currentDate.getFullYear())\n }\n\n return globalState.semanticNodes\n .map(node => {\n let example = ''\n let charsCount\n let exStr\n let theSameType = false\n let startPosition\n let diffCount\n let needToEllipsis = false\n switch (node.type) {\n case 'static':\n example = node.getValue(true)\n break\n case 'grouped_single_chars':\n exStr = examples[node.children[0].params.type]\n theSameType =\n lastNode && lastNode.params && lastNode.params.type && node.params.type === lastNode.params.type\n charsCount = node.children.length\n startPosition = theSameType ? exStr.indexOf(lastExample[lastExample.length - 1]) + 1 : 0\n diffCount = exStr.length\n for (let i = 0; i < charsCount; i++) example += exStr[(startPosition + i) % diffCount]\n break\n case 'single_char_type':\n exStr = examples[node.params.type]\n theSameType =\n lastNode && lastNode.params && lastNode.params.type && node.params.type === lastNode.params.type\n charsCount = 1\n\n startPosition = theSameType ? exStr.indexOf(lastExample[lastExample.length - 1]) + 1 : 0\n diffCount = exStr.length\n for (let i = 0; i < charsCount; i++) example += exStr[(startPosition + i) % diffCount]\n break\n case 'few_symbols':\n exStr = examples[node.params.type]\n theSameType =\n lastNode && lastNode.params && lastNode.params.type && node.params.type === lastNode.params.type\n charsCount = node.params.minimumValidSymbols\n needToEllipsis =\n undefined === node.params.maximumValidSymbols ||\n node.params.maximumValidSymbols - node.params.minimumValidSymbols > 0\n\n startPosition = theSameType ? exStr.indexOf(lastExample[lastExample.length - 1]) + 1 : 0\n diffCount = exStr.length\n for (let i = 0; i < charsCount; i++) {\n example += exStr[(startPosition + i) % diffCount]\n }\n if (needToEllipsis) {\n example += '…'\n }\n break\n case 'symbol_range':\n exStr = node.params.allowedSymbolsList\n charsCount = node.params.minimumValidSymbols\n needToEllipsis =\n undefined === node.params.maximumValidSymbols ||\n node.params.maximumValidSymbols - node.params.minimumValidSymbols > 0\n\n startPosition = theSameType ? exStr.indexOf(lastExample[lastExample.length - 1]) + 1 : 0\n diffCount = exStr.length\n for (let i = 0; i < charsCount; i++) example += exStr[(startPosition + i) % diffCount]\n if (needToEllipsis) {\n example += '…'\n }\n break\n case 'number_range':\n example = `{${node.params.minimumNumber}-${node.params.maximumNumber}}`\n break\n case 'email':\n example = 'user@example.com'\n break\n case 'int_phone':\n example = '+1(555) 010-0000'\n break\n case 'date':\n example = node.children.map(child => datePartsExamples[child.mask] || child.getValue(true)).join('')\n break\n default:\n }\n\n lastNode = node\n lastExample = example\n return example\n })\n .join('')\n }\n\n const handler = (symbols = [], position = 0) => {\n globalState.position = position\n if (position < 0) {\n globalState.isBlur = true\n globalState.semanticNodes.forEach(node => node.onBlur && node.onBlur())\n } else {\n const input = helpers.prepareInput(symbols)\n const startState = helpers.getStartNodePosition(globalState.semanticNodes, position, globalState.isBlur)\n if (\n input.length &&\n 'string' === typeof input[0] &&\n !'\\t\\n'.includes(input[0]) &&\n 'void_end' === globalState.semanticNodes[startState.index[0]].type\n ) {\n startState.index = [startState.index[0] - 1]\n startState.position = globalState.semanticNodes[startState.index[0]].valueLength\n if (globalState.semanticNodes[startState.index[0]].children)\n startState.index.push(globalState.semanticNodes[startState.index[0]].children.length - 1)\n }\n\n globalState.isBlur = false\n\n let finalState\n const defaultFinalState = { index: 1, position: 0 }\n let onNotFound\n if (!input.length) {\n let notFoundAction\n if (\n ((1 === startState.index.length && startState.index[0] >= globalState.semanticNodes.length - 1) ||\n (2 === startState.index.length &&\n startState.index[0] >= globalState.semanticNodes.length - 1 &&\n startState.index[1] >= globalState.semanticNodes[startState.index[0]].length - 1)) &&\n startState.position >= globalState.semanticNodes[startState.index].valueLength\n ) {\n startState.index = [globalState.semanticNodes.length - 1]\n startState.position = 0\n input.push({\n type: 'next-fill',\n backward: true,\n start: { index: [...startState.index], position: startState.position }\n })\n notFoundAction = { type: 'next-non-static', backward: false, start: { index: [1], position: 0 } }\n onNotFound = { start: { index: [1], position: 0 }, input: [notFoundAction] }\n } else if (\n ((1 === startState.index.length && 1 === startState.index[0]) ||\n (2 === startState.index.length && 1 === startState.index[0] && 0 === startState.index[1])) &&\n 0 === startState.position\n ) {\n startState.index = [0]\n startState.position = 0\n input.push({\n type: 'next-active',\n backward: false,\n start: { index: [...startState.index], position: startState.position }\n })\n notFoundAction = {\n type: 'next-non-static',\n backward: true,\n start: { index: [globalState.semanticNodes.length - 1], position: 0 }\n }\n onNotFound = {\n start: { index: [globalState.semanticNodes.length - 1], position: 0 },\n input: [notFoundAction]\n }\n }\n }\n\n finalState = helpers.nodesHandler(globalState.semanticNodes, input, startState)\n if (onNotFound && finalState.index === startState.index && finalState.position === startState.position)\n finalState = helpers.nodesHandler(globalState.semanticNodes, onNotFound.input, onNotFound.start)\n\n const finalPosition = helpers.getFinalPosition(globalState.semanticNodes, finalState || defaultFinalState)\n globalState.position = Math.max(finalPosition, 0)\n }\n handler.position = globalState.position\n\n globalState.isValid = globalState.semanticNodes.every(node => (node.isValid ? node.isValid() : true))\n globalState.isEmpty = globalState.semanticNodes.every(node => (node.isEmpty ? node.isEmpty() : true))\n handler.isValid = Boolean(globalState.isValid)\n handler.isEmpty = Boolean(globalState.isEmpty)\n\n return handler\n }\n handler.getDOM = getDOM\n handler.getString = getString\n handler.getValue = getValue\n handler.getExample = getExample\n\n globalState.position = helpers.getFinalPosition(globalState.semanticNodes, { index: 0, position: 0 })\n\n handler.position = globalState.position\n handler.isValid = Boolean(globalState.isValid)\n handler.isEmpty = Boolean(globalState.isEmpty)\n return handler\n}\n\n//{ type: 'delete'} - delete button pressed\n//{ type: 'backspace', moved: false } - backspace button pressed\n//{ type: 'ranged-backspace', moved: [false,false,...] } - ranged backspace\n\nconst createFormatter = (maskString, classNames = {}) => {\n const handler = constructMaskSemantic(maskString, classNames)\n const formatter = (start, deleteCount, chars = []) => {\n /*console.log('===AN===1===', { start, deleteCount, chars })*/\n const inputKeys = []\n let positionBefore = start\n if (deleteCount) {\n if (1 === deleteCount) {\n //delete\n inputKeys.push({ type: 'delete' })\n } else if (-1 === deleteCount) {\n //backspace\n inputKeys.push({ type: 'backspace', moved: false })\n } else {\n //ranged delete/backspace\n const rangedBackspace = { type: 'ranged-backspace', moved: [] }\n for (let i = 0; i < Math.abs(deleteCount); i++) rangedBackspace.moved.push(false)\n inputKeys.push(rangedBackspace)\n positionBefore += deleteCount\n }\n }\n\n handler([...inputKeys, ...chars], positionBefore)\n\n /*console.log('===AN===2===', {\n html: handler.getDOM(),\n text: handler.getValue(true),\n selectionStart: handler.position,\n selectionEnd: handler.position,\n valid: handler.isValid,\n empty: handler.isEmpty,\n example: handler.getExample()\n })*/\n\n return {\n html: handler.getDOM(),\n text: handler.getValue(true),\n selectionStart: handler.position,\n selectionEnd: handler.position,\n valid: handler.isValid,\n empty: handler.isEmpty\n }\n }\n formatter.validInputExample = handler.getExample\n return formatter\n}\n\nexport { constructMaskSemantic, createFormatter, bufferedSplitRegExp as splitRegExp }\n"],"names":["getVisualSelection","node","nodeDocument","document","ownerDocument","nodeWindow","window","defaultView","activeElement","selection","getSelection","rangeCount","range","getRangeAt","selectionStart","findVisualSelectionOffsetFromRangeNode","startContainer","startOffset","collapsed","endContainer","endOffset","setVisualSelection","start","end","arguments","length","undefined","_ref2","_slicedToArray","normalizedStart","normalizedEnd","createRange","_findRangeNodeForVisu","findRangeNodeForVisualSelectionOffset","rangeStartNode","rangeStartOffset","offset","setStart","_findRangeNodeForVisu2","rangeEndNode","rangeEndOffset","setEnd","collapse","removeAllRanges","addRange","getNodeVisualLength","hasChildNodes","_step","nodeLength","_iterator","_createForOfIteratorHelper","childNodes","s","n","done","value","err","e","f","nodeType","Node","TEXT_NODE","textContent","ELEMENT_NODE","tagName","toLowerCase","Math","max","rootNode","rangeNode","rangeNodeOffset","currentVisualOffset","i","searchPath","tailIndex","currentNode","pop","parentNodeIndex","parentNode","nextSibling","push","visualOffset","currentNodeLength","currentOffset","setSelectionAtEnd","contentEditableEl","selectNodeContents","_unused","helpers","regexp","prepareStringToDOM","RegExp","linefeed2BrRegExp","emailChildValidationRegExp","emailFullValidationRegExp","onlyEmptyChars","prepareToDOMSwapMap","monthNumberToString","monthStringToNumber","jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec","currentYearInTwoDigit","Number","String","Date","getFullYear","slice","string","replace","_len","params","Array","_key","getSimpleDOMString","_ref","_ref$placeholderValue","placeholderValue","_ref$value","classNames","isBlur","freeMode","_placeholderValue$bas","base","pBase","_placeholderValue$add","additional","pAdd","freeModeAttributes","pClass","onBlurStyle","placeholderBlock","attributes","getStartNodePosition","nodesChain","position","lengthGetter","symbolsBeforeWithoutCurrentNodeCount","startState","index","children","childrenPosition","childLength","nodesHandler","input","currentHandlerState","_toConsumableArray","childNode","parentPosition","beforeIndex","join","handler","placeholderGenerator","prepareInput","symbols","isArray","forEach","item","concat","split","getFinalPosition","finalState","finalPosition","datePartsPresets","DD","type","valueType","getValue","rawValue","MM","MMM","toLocaleLowerCase","isValid","Boolean","YY","year","YYYY","multicharMechanic","currentState","min","valueLength","instruction","includes","backward","shift","moved","unshift","newValue","newValueIsValid","validator","lengthIsValid","lengthValidation","needToTransferNext","singlecharMechanic","semantic","Map","set","matchRegExp","nodeCreator","mask","_placeholder","childParams","child","lengthBlur","incomprehensibleRemainder","map","param","_semantic$get","createParams","get","apply","_input","_currentState","getDOM","onBlur","needComplexValidation","dateParts","every","additionalValidation","datePartPreset","partType","day","month","yearOfDate","monthOfDate","getMonth","dayOfDate","getDate","isEmpty","_params","_position","fullValidator","trim","_isBlur","DOMBlocks","currentBlock","beforeCharIsSpace","currentCharIsSpace","spaceValidation","test","childValidator","placeholder","j","minimumValidSymbols","maximumValidSymbols","minimumNumberRawParam","maximumNumberRawParam","minimumNumber","maximumNumber","minimumValidSymbolsRawParam","maximumValidSymbolsRawParam","currentPosition","this","padStart","minimumParam","maximumParam","allowedSymbolsList","match","rawItem","fullCharCodeRange","codePointAt","fromCodePoint","toUpperCase","trimmedValueLength","_","_mask","action","_classNames","bufferedRegExps","semanticScheme","bracesReplaceRegExp","bufferedSplitRegExp","keys","typeRegExp","filter","buildSemanticNodes","types","Object","primalSemanticNodes","exec","getDynamicBlock","voidStartBlock","voidEndBlock","parentIndex","childIndex","parent","createFormatter","maskString","presets","_objectSpread","globalState","semanticNodes","onNotFound","notFoundAction","getString","_ref2$base","_ref2$additional","currentIsBlur","getExample","lastNode","lastExample","examples","letter","char","digit","currentDate","datePartsExamples","charsCount","exStr","startPosition","diffCount","example","theSameType","needToEllipsis","indexOf","constructMaskSemantic","formatter","deleteCount","chars","inputKeys","positionBefore","rangedBackspace","abs","html","text","selectionEnd","valid","empty","validInputExample"],"sourceRoot":""}