{"version":3,"file":"9379.abe9b166.es5.js","mappings":"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","sources":["webpack://assr-alfaleasing/./node_modules/@alfalab/hooks/node_modules/@alfalab/utils/dist/esm/index.js","webpack://assr-alfaleasing/./node_modules/@alfalab/hooks/node_modules/uuid/dist/esm-browser/rng.js","webpack://assr-alfaleasing/./node_modules/@alfalab/hooks/node_modules/uuid/dist/esm-browser/regex.js","webpack://assr-alfaleasing/./node_modules/@alfalab/hooks/node_modules/uuid/dist/esm-browser/stringify.js","webpack://assr-alfaleasing/./node_modules/@alfalab/hooks/node_modules/uuid/dist/esm-browser/validate.js","webpack://assr-alfaleasing/./node_modules/@alfalab/hooks/node_modules/uuid/dist/esm-browser/v4.js","webpack://assr-alfaleasing/./node_modules/@alfalab/hooks/dist/esm/index.js","webpack://assr-alfaleasing/./node_modules/lodash/_arrayEach.js","webpack://assr-alfaleasing/./node_modules/lodash/transform.js"],"sourcesContent":["import { currency, countries } from '@alfalab/data';\nimport isPlainObject from 'lodash/isPlainObject';\nimport transform from 'lodash/transform';\n\n/**\n * Возвращает 4 последние цифры номера счёта в формате `··XXXX`\n */\nfunction cropAccountNumber(accountNumber) {\n if (!accountNumber) {\n return accountNumber;\n }\n return \"\\u00B7\\u00B7\" + accountNumber.slice(-4);\n}\n\nvar ACCOUNT_SPLIT_REGEX = /^(\\d{5})(\\d{3})(\\d)(\\d{4})(\\d{7})$/;\nvar ACCOUNT_FORMAT = '$1 $2 $3 $4 $5';\n/**\n * Возвращает отформатированное значение счёта.\n * Разделяет пробелами число на группы.\n * XXXXX XXX X XXXX XXXXXXX\n *\n * @param value Номер счёта.\n */\nfunction formatAccount(value) {\n if (!value) {\n return '';\n }\n return value.replace(ACCOUNT_SPLIT_REGEX, ACCOUNT_FORMAT);\n}\n\n/**\n * Возвращает знак валюты по ISO коду.\n *\n * @param currencyCode Код валюты.\n */\nvar getCurrencySymbol = function (currencyCode) {\n return currency.CURRENCY_SYMBOLS[currencyCode];\n};\n\n/**\n * Дробит мажорную часть суммы на части по указанному символу.\n *\n * @param amount Сумма для разбивки на части\n * @param partSize Размер частей суммы\n * @param splitter Символ, разбивающий части суммы\n * @param splitFrom Длина суммы, начиная с которой необходимо осуществлять разбивку. По-умолчанию длина\n * равняется пяти по требованию гайдлайнов: https://design.alfabank.ru/patterns/amount. Пример: 2900 - не разбивается,\n * 29 000 - разбивается.\n */\nvar splitAmount = function (amount, partSize, splitter, splitFrom) {\n if (partSize === void 0) { partSize = 3; }\n if (splitFrom === void 0) { splitFrom = 5; }\n var splittingRegExp = \"\\\\B(?=(\\\\d{\" + partSize + \"})+(?!\\\\d))\";\n // Если длина суммы меньше требуемой, не форматируем сумму\n if (amount.length < splitFrom) {\n return amount;\n }\n return amount.replace(new RegExp(splittingRegExp, 'g'), splitter);\n};\n\nvar AMOUNT_MAJOR_PART_SIZE = 3;\nvar AMOUNT_SPLIT_CODE_FROM = 4;\n// Reference: https://jkorpela.fi/dashes.html\nvar NEGATIVE_SYMBOLS = {\n /** Unicode: U+2212. An arithmetic operator */\n 'minus-sign': '−',\n /** Unicode: U+002D. The Ascii hyphen. Used in inputs */\n 'hyphen-minus': '-',\n};\nvar THINSP = String.fromCharCode(8201); //  \nvar MMSP = String.fromCharCode(8287); // средний математический пробел\nvar AMOUNT_MAJOR_MINOR_PARTS_SEPARATOR = ',';\n/**\n * Возвращает код для валюты взависимости от формата\n */\nvar getCurrencyCodeWithFormat = function (currency, codeFormat) {\n if (!currency) {\n return '';\n }\n return codeFormat === 'symbolic'\n ? getCurrencySymbol(currency)\n : currency;\n};\n/**\n * Возвращает разделитель для кода валюты взависимости от формата\n */\nvar getCurrencySeparator = function (codeFormat) { return (codeFormat === 'symbolic' ? THINSP : MMSP); };\n/**\n * Форматирует значение вместе с кодом валюты\n */\nvar formatWithCurrency = function (value, currencyCode, separator) { return [value, currencyCode].filter(Boolean).join(separator); };\n/**\n * Форматирует значение суммы\n * согласно гайдлайну https://design.alfabank.ru/patterns/amount\n */\nvar formatAmount = function (_a) {\n var value = _a.value, currency = _a.currency, minority = _a.minority, view = _a.view, _b = _a.negativeSymbol, negativeSymbol = _b === void 0 ? 'minus-sign' : _b, _c = _a.codeFormat, codeFormat = _c === void 0 ? 'symbolic' : _c;\n var currencySymbol = getCurrencyCodeWithFormat(currency, codeFormat);\n var currencySeparator = getCurrencySeparator(codeFormat);\n if (value === null) {\n return {\n majorPart: '',\n minorPart: '',\n formatted: '',\n currencySymbol: currencySymbol,\n currencySeparator: currencySeparator,\n formattedWithCurrency: formatWithCurrency(value, currencySymbol, currencySeparator),\n };\n }\n // eslint-disable-next-line no-param-reassign\n minority = minority === 0 ? 1 : minority; // because Math.log(0) => -Infinity\n var fractionDigits = Math.log(minority) * Math.LOG10E;\n var valueAbsStr = (Math.abs(value) / minority).toFixed(fractionDigits);\n var majorPart = valueAbsStr.split('.')[0];\n var _d = valueAbsStr.split('.'), minorPart = _d[1];\n if (view === 'default' && value % minority === 0) {\n minorPart = '';\n }\n var majorPartSplitted = splitAmount(majorPart, AMOUNT_MAJOR_PART_SIZE, MMSP, AMOUNT_SPLIT_CODE_FROM);\n var majorPartFormatted = value < 0 ? NEGATIVE_SYMBOLS[negativeSymbol] + majorPartSplitted : majorPartSplitted;\n var formattedValueStr = minorPart\n ? majorPartFormatted + AMOUNT_MAJOR_MINOR_PARTS_SEPARATOR + minorPart\n : majorPartFormatted;\n return {\n majorPart: majorPartFormatted,\n minorPart: minorPart,\n currencySymbol: currencySymbol,\n formatted: formattedValueStr,\n currencySeparator: currencySeparator,\n formattedWithCurrency: formatWithCurrency(formattedValueStr, currencySymbol, currencySeparator),\n };\n};\n\nvar UNITS = ['B', 'KB', 'MB', 'GB'];\nvar humanizeNumberPartOfFileSize = function (value, factor) {\n var maxFactor = UNITS.length - 1;\n if (value > 99 && factor === maxFactor)\n return '99+';\n return \"\" + Number(value.toFixed(2));\n};\nvar parseFileSize = function (fileSize) {\n var parsedFileSize = Number(fileSize);\n if (Number.isNaN(parsedFileSize))\n return 0;\n return parsedFileSize;\n};\n/**\n * Возвращает отформатированное значение размера файла.\n * Разделяет пробелом число и единицу измерения.\n *\n * Примеры:\n * 976.56 KB,\n * 1000 B,\n * 93.13 GB,\n * 99+ GB - Если файл превышает 99 GB,\n * 0 B - Если приходит строка, которую невозможно привести к числу\n */\nvar formatFileSize = function (fileSize) {\n var maxFactor = UNITS.length - 1;\n var humanSize = parseFileSize(fileSize);\n var factor = 0;\n while (humanSize >= 1024 && factor < maxFactor) {\n humanSize /= 1024;\n factor += 1;\n }\n return humanizeNumberPartOfFileSize(humanSize, factor) + \" \" + UNITS[factor];\n};\n\n/**\n * Удаляет форматирование номера телефона\n * @param phone Отформатированный номер телефона с кодом страны\n * @returns Номер телефона в формате 71112223344/88002223344\n */\nvar getRawPhoneNumber = function (phone) { return phone.replace(/\\D+/g, ''); };\n\n/**\n * Форматирует номер телефона\n * @param phone Номер телефона в любом формате с кодом страны\n * @returns Номер телефона в формате +7 111 222-33-44/8 800 222-33-44\n */\nvar formatPhoneNumber = function (phone) {\n var rawPhone = getRawPhoneNumber(phone);\n var formattedPhone = rawPhone.replace(/(\\d)(\\d{3})(\\d{3})(\\d{2})(\\d{2})/, \"$1 $2 $3-$4-$5\");\n return formattedPhone[0] === '7' ? '+'.concat(formattedPhone) : formattedPhone;\n};\n\n/**\n * Маскирует номер телефона.\n * Номер должен быть уже отформатирован.\n * TODO: сделать, чтобы number можно было принимать любой (отформатированный/неотформатированный)\n *\n * @param {String} number Отформатированный номер телефона\n * @returns {String}\n */\nfunction maskPhoneNumber(number) {\n var first = number.substr(0, 2);\n var last = number.substr(number.length - 5, number.length);\n return first + \" \\u00B7\\u00B7\\u00B7 \\u00B7\\u00B7\\u00B7 \" + last;\n}\n\nvar phoneNumber = {\n format: formatPhoneNumber,\n getRaw: getRawPhoneNumber,\n mask: maskPhoneNumber,\n};\n\nfunction getAllCurrencyCodes() {\n return Object.keys(currency.CURRENCY_SYMBOLS);\n}\n\nvar formatCountry = function (_a) {\n _a[0]; var name = _a[1], iso2 = _a[2], dialCode = _a[3], priority = _a[4], areaCodes = _a[5];\n return ({\n name: name,\n iso2: iso2,\n dialCode: dialCode,\n priority: priority,\n areaCodes: areaCodes !== null && areaCodes !== void 0 ? areaCodes : null,\n });\n};\nvar getCountries = function () {\n return countries.map(formatCountry).sort(function (a, b) { return a.name.localeCompare(b.name); });\n};\nvar getCountriesHash = function () {\n return countries.reduce(function (acc, country) {\n var iso2 = country[2];\n acc[iso2] = formatCountry(country);\n return acc;\n }, {});\n};\n\n/**\n * Возвращает `true`, если элемент переполнен\n * @param element HTML-элемент\n */\nfunction isOverflown(element) {\n return element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth;\n}\n\n/**\n * Возвращает слово в необходимой форме, зависимой от значения `count`.\n *\n * @example\n * pluralize(1, 'день', 'дня', 'дней'); // день\n * pluralize(2, 'день', 'дня', 'дней'); // дня\n * pluralize(5, 'день', 'дня', 'дней'); // дней\n *\n * @param {number} count - Число.\n * @param {string} nominative - Слово в именительном падеже единственного числа\n * @param {string} genitive - Слово в родительном падеже единственного числа\n * @param {string} plural - Слово во множественном числе\n *\n * @returns {string}\n */\nvar pluralize = function (count, nominative, genitive, plural) {\n var normalizedNumber = count % 100;\n if (normalizedNumber >= 11 && normalizedNumber <= 19) {\n return plural;\n }\n var remainder = normalizedNumber % 10;\n switch (remainder) {\n case 1:\n return nominative;\n case 2:\n case 3:\n case 4:\n return genitive;\n default:\n return plural;\n }\n};\n\n/**\n * Приводит секунды к формату `hh:mm:ss` и возвращает объект с ними.\n */\nfunction secondsToTime(seconds) {\n var h = Math.floor(seconds / 60 / 60);\n var m = Math.floor(seconds / 60) % 60;\n var s = seconds - h * 3600 - m * 60;\n return {\n hours: \"\" + numPad('00', h),\n minutes: \"\" + numPad('00', m),\n seconds: \"\" + numPad('00', s),\n };\n}\nfunction numPad(pad, num) {\n return typeof num === 'undefined' ? pad : (pad + num).slice(-pad.length);\n}\n\n/**\n * Возвращает true/false при проверке номера валидности карты по алгоритму Луна\n */\nvar isValidCardNumber = function (setValue) {\n var ch = 0;\n var num = setValue.replace(/\\D/g, '');\n if (num === '')\n return false;\n for (var i = 0; i < num.length; i++) {\n var n = parseInt(num[i], 10);\n ch += 0 === i % 2 && (n *= 2) > 9 ? n - 9 : n;\n }\n return ch % 10 === 0;\n};\n\nvar EMAIL_PARTS_SEPARATOR = '@';\nvar DOMAIN_PARTS_SEPARATOR = '.';\nvar MAX_ACCOUNT_LENGTH = 64;\nvar MAX_ADDRES_LENGTH = 255;\nvar MAX_DOMAIN_LENGTH = 63;\nvar EMAIL_REGEX = /^[-!#$%&'*+\\/0-9=?A-Z^_a-z`{|}~](\\.?[-!#$%&'*+\\/0-9=?A-Z^_a-z`{|}~])*@[a-zA-Z0-9](-*\\.?[a-zA-Z0-9])*\\.[a-zA-Z](-?[a-zA-Z0-9])+$/;\n/**\n * Возвращает true для валидного email, иначе false\n *\n * @param email Строка содержащая email\n */\nfunction isValidEmail(email) {\n if (!email)\n return false;\n var emailParts = email.split(EMAIL_PARTS_SEPARATOR);\n if (emailParts.length !== 2)\n return false;\n var account = emailParts[0], address = emailParts[1];\n var accountTooLong = account.length > MAX_ACCOUNT_LENGTH;\n var addressTooLong = address.length > MAX_ADDRES_LENGTH;\n if (accountTooLong || addressTooLong)\n return false;\n var domainParts = address.split(DOMAIN_PARTS_SEPARATOR);\n var domainTooLong = domainParts.some(function (part) { return part.length > MAX_DOMAIN_LENGTH; });\n if (domainTooLong)\n return false;\n return EMAIL_REGEX.test(email);\n}\n\n// prettier-ignore\nvar keyboardsLayouts = {\n en: [\n // нижний регистр\n /* mac */ '§', /* win */ '`',\n 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']',\n 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', '\\'', '\\\\',\n 'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '/',\n // нижний регистр через shift\n /* mac */ '±', /* win */ '~',\n 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '{', '}',\n 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', ':', '\"', '|',\n 'Z', 'X', 'C', 'V', 'B', 'N', 'M', '<', '>', '?',\n '@',\n ],\n ru: [\n // нижний регистр\n 'ё', 'ё',\n 'й', 'ц', 'у', 'к', 'е', 'н', 'г', 'ш', 'щ', 'з', 'х', 'ъ',\n 'ф', 'ы', 'в', 'а', 'п', 'р', 'о', 'л', 'д', 'ж', 'э', 'ё',\n 'я', 'ч', 'с', 'м', 'и', 'т', 'ь', 'б', 'ю', '/',\n // нижний регистр через shift\n 'Ё', 'Ё',\n 'Й', 'Ц', 'У', 'К', 'Е', 'Н', 'Г', 'Ш', 'Щ', 'З', 'Х', 'Ъ',\n 'Ф', 'Ы', 'В', 'А', 'П', 'Р', 'О', 'Л', 'Д', 'Ж', 'Э', 'Ё',\n 'Я', 'Ч', 'С', 'М', 'И', 'Т', 'Ь', 'Б', 'Ю', '?',\n '\"',\n ],\n};\n/** regex для раскладок клавиатуры */\nvar keyboardLanguages = {\n en: /[a-z[\\]{};:'\"\\\\|,.<>?§±`~]/i,\n ru: /[а-яё\"/?]/i,\n};\n/**\n * Проверяет строку на совпадение с раскладкой клавиатуры.\n */\nfunction isKeyboardLayout(string, keyboardAlias) {\n if (!string.length)\n return false;\n // your keyboard\n var keyboardLanguage = keyboardLanguages[keyboardAlias];\n // недопустимая раскладка клавиатуры\n if (!keyboardLanguage)\n return false;\n var index = 0;\n var isValid = false;\n while (index < string.length) {\n var letter = string[index];\n if (keyboardLanguage.test(letter)) {\n isValid = true;\n return true;\n }\n index += 1;\n }\n return isValid;\n}\n/**\n * Конвертирует символы из одной раскладки в другую.\n */\nfunction keyboardSwitcher(characters, from, to) {\n if (characters === void 0) { characters = ''; }\n if (from === void 0) { from = 'en'; }\n if (to === void 0) { to = 'ru'; }\n // incoming text string\n var textToConvert = characters;\n // if characters is empty stop working\n if (!textToConvert || !textToConvert.length)\n return '';\n // if incoming text and current keyboard not equal\n if (!isKeyboardLayout(textToConvert, from)) {\n return characters;\n }\n // current keyboard layout\n var locale = keyboardsLayouts[from];\n // convert characters to this keyboard layout\n var localeOn = keyboardsLayouts[to];\n var convertedText = '';\n var index = 0;\n while (index < textToConvert.length) {\n var letter = textToConvert[index];\n var letterIndex = locale.indexOf(letter);\n convertedText += localeOn[letterIndex];\n index += 1;\n }\n return convertedText;\n}\nfunction switchToKeyboard(characters, keyboardAlias) {\n var textToConvert = characters;\n if (!textToConvert.length)\n return '';\n var keyboards = Object.keys(keyboardLanguages);\n var index = 0;\n var convertedText = '';\n var _loop_1 = function () {\n var letter = textToConvert[index];\n var locale = '';\n keyboards.map(function (keyboardKey) {\n var isKeyboardIncludesLetter = isKeyboardLayout(letter, keyboardKey);\n if (isKeyboardIncludesLetter && keyboardKey !== keyboardAlias) {\n locale = keyboardKey;\n return '';\n }\n return '';\n });\n var returnedLetter = locale === keyboardAlias ? letter : keyboardSwitcher(letter, locale, keyboardAlias);\n convertedText += returnedLetter;\n index += 1;\n };\n while (index < textToConvert.length) {\n _loop_1();\n }\n return convertedText;\n}\n/**\n * Автоматически переводит английскую раскладку на русскую при вводе пользователем.\n */\nvar formatToRussian = function (value, isCapitalize) {\n if (value === void 0) { value = ''; }\n if (isCapitalize === void 0) { isCapitalize = false; }\n if (!value)\n return '';\n // check user keyboard and if it need convert to russian\n var enteredValue = switchToKeyboard(value, 'ru');\n return (isCapitalize ? enteredValue[0].toUpperCase() + enteredValue.substr(1) : enteredValue)\n .replace(/[^\\sа-яё-]/gi, '')\n .replace(/\\s{2,}/g, ' ');\n};\n\n/**\n * Возвращает TRUE, если проскролено до низа страницы\n */\nfunction hasScrolledToBottomOfPage() {\n var documentElement = document.documentElement;\n var offset = documentElement.scrollTop + window.innerHeight;\n var height = documentElement.offsetHeight;\n return offset >= height;\n}\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\n\n/* eslint-disable no-param-reassign */\nvar NUMBER_REGEX = /^\\d+$/;\nvar SKIP_NODE_NAMES = ['', null, undefined];\nvar nodeNamesToPath = function (nodeNames) {\n return nodeNames.reduce(function (pathAcc, nodeName) {\n if (!SKIP_NODE_NAMES.includes(nodeName)) {\n if (nodeName === '*' || NUMBER_REGEX.test(\"\" + nodeName)) {\n pathAcc += '[*]';\n }\n else {\n if (pathAcc) {\n pathAcc += '.';\n }\n pathAcc += nodeName;\n }\n }\n return pathAcc;\n }, '');\n};\nvar INVALID_FILTER_CONFIG_VALUES = ['', null, undefined, true, false];\nvar VALID_REPLACE_CONFIG_TYPES = ['string', 'number', 'boolean', 'function'];\nvar isReplacer = function (replacer) {\n return replacer === null || VALID_REPLACE_CONFIG_TYPES.includes(typeof replacer);\n};\nvar prepareConfig = function (_a) {\n var _b = _a.replace, replaceConfig = _b === void 0 ? {} : _b, _c = _a.filter, filterConfig = _c === void 0 ? [] : _c;\n var filteredReplaceConfig = Object.keys(replaceConfig).reduce(function (res, replaceConfigKey) {\n var replacer = replaceConfig[replaceConfigKey];\n if (isReplacer(replacer)) {\n res[replaceConfigKey] = replacer;\n }\n return res;\n }, {});\n var filteredFilterConfigObject = filterConfig.reduce(function (res, path) {\n var _a;\n if (INVALID_FILTER_CONFIG_VALUES.includes(path)) {\n return res;\n }\n return __assign(__assign({}, res), (_a = {}, _a[path] = true, _a));\n }, {});\n var paths = __spreadArray(__spreadArray([], Object.keys(filteredFilterConfigObject)), Object.keys(filteredReplaceConfig));\n if (paths.length) {\n return {\n replaceConfig: filteredReplaceConfig,\n filterConfig: filteredFilterConfigObject,\n };\n }\n throw new TypeError('required replace or filter in transformConfig');\n};\nvar getReplaceValue = function (value, replacer) {\n if (isReplacer(replacer)) {\n return typeof replacer === 'function' ? replacer(value) : replacer;\n }\n return value;\n};\n\n/* eslint-disable no-param-reassign */\n// eslint-disable-next-line @typescript-eslint/naming-convention, no-underscore-dangle\nvar _transformData = function (data, _a, parentPath) {\n var filterConfig = _a.filterConfig, replaceConfig = _a.replaceConfig;\n if (parentPath === void 0) { parentPath = ''; }\n return transform(data, function (result, value, key) {\n var currentPath = nodeNamesToPath([parentPath, key]);\n // Recurse into arrays and objects.\n if (Array.isArray(value) || isPlainObject(value)) {\n value = _transformData(value, {\n filterConfig: filterConfig,\n replaceConfig: replaceConfig,\n }, currentPath);\n }\n if (filterConfig[currentPath]) {\n return;\n }\n var newValue = getReplaceValue(value, replaceConfig[currentPath]);\n if (Array.isArray(result)) {\n result.push(newValue);\n return;\n }\n result[key] = newValue;\n });\n};\n/**\n * Преобразование полей объекта на основе конфига\n *\n * @param data {Object|Array} данные для преобразования\n * @param config {TransformConfig} конфиг с функциями преобразования и путей для фильтра\n */\nvar transformData = function (data, config) {\n return _transformData(data, prepareConfig(config));\n};\n\nvar transformDataUtils = {\n getReplaceValue: getReplaceValue,\n isReplacer: isReplacer,\n nodeNamesToPath: nodeNamesToPath,\n prepareConfig: prepareConfig,\n};\n\nexport { AMOUNT_MAJOR_MINOR_PARTS_SEPARATOR, MMSP, NEGATIVE_SYMBOLS, THINSP, cropAccountNumber, formatAccount, formatAmount, formatFileSize, formatToRussian, getAllCurrencyCodes, getCountries, getCountriesHash, getCurrencySymbol, hasScrolledToBottomOfPage, isKeyboardLayout, isOverflown, isValidCardNumber, isValidEmail, keyboardLanguages, keyboardSwitcher, keyboardsLayouts, phoneNumber, pluralize, secondsToTime, splitAmount, switchToKeyboard, transformData, transformDataUtils };\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","import React, { useRef, useState, useCallback, useEffect, useLayoutEffect } from 'react';\nimport { hasScrolledToBottomOfPage } from '@alfalab/utils';\nimport { v4 } from 'uuid';\n\nfunction useClickOutside(ref, cb) {\n React.useEffect(function () {\n var handler = function (event) {\n var checkClickedElement = function (el) {\n return !el.current || el.current.contains(event.target);\n };\n if ((Array.isArray(ref) && ref.find(checkClickedElement)) ||\n (!Array.isArray(ref) && checkClickedElement(ref))) {\n return;\n }\n cb(event);\n };\n document.addEventListener('mousedown', handler);\n document.addEventListener('touchstart', handler);\n return function () {\n document.removeEventListener('mousedown', handler);\n document.removeEventListener('touchstart', handler);\n };\n }, [ref, cb]);\n}\n\n/**\n * Хук обратного отсчёта времени.\n * Возвращает оставшееся количество секунд до определённой даты.\n *\n * @param params.endDate - Дата окончания\n * @param params.onStart - Функция, которая будет вызвана при запуске счётчика\n * @param params.onEnd - Функция, которая будет вызвана при окончании счётчика\n */\nfunction useCountdown(_a) {\n var endDate = _a.endDate, onStart = _a.onStart, onEnd = _a.onEnd;\n var intervalId = useRef(null);\n var _b = useState(differenceInSeconds(endDate, new Date())), seconds = _b[0], setSeconds = _b[1];\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n var clear = useCallback(function () { return clearInterval(intervalId.current); }, []);\n useEffect(function () {\n if (onStart) {\n onStart();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n useEffect(function () {\n intervalId.current = setInterval(function () {\n setSeconds(function (sec) { return sec - 1; });\n }, 1000);\n return clear;\n }, [clear]);\n useEffect(function () {\n if (seconds <= 0) {\n clear();\n if (onEnd) {\n onEnd();\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [seconds]);\n return [seconds];\n}\nfunction differenceInSeconds(dateLeft, dateRight) {\n var diff = (dateLeft.getTime() - dateRight.getTime()) / 1000;\n return diff > 0 ? Math.floor(diff) : Math.ceil(diff);\n}\n\nfunction getDimensionObject(node) {\n return node.getBoundingClientRect();\n}\nfunction useDimensions(_a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.liveMeasure, liveMeasure = _c === void 0 ? true : _c;\n var _d = useState(), dimensions = _d[0], setDimensions = _d[1];\n var _e = useState(), node = _e[0], setNode = _e[1];\n var ref = useCallback(function (_node) {\n setNode(_node);\n }, []);\n useLayoutEffect(function () {\n if (node) {\n var measure_1 = function () {\n return window.requestAnimationFrame(function () { return setDimensions(getDimensionObject(node)); });\n };\n measure_1();\n if (liveMeasure) {\n window.addEventListener('resize', measure_1);\n window.addEventListener('scroll', measure_1);\n return function () {\n window.removeEventListener('resize', measure_1);\n window.removeEventListener('scroll', measure_1);\n };\n }\n }\n return function () { return undefined; };\n }, [node, liveMeasure]);\n return [ref, dimensions, node];\n}\n\n/**\n * https://github.com/facebook/react/issues/14099#issuecomment-440013892\n *\n * @param {function} fn\n */\nfunction useEventCallback(fn) {\n var ref = React.useRef(fn);\n React.useEffect(function () {\n ref.current = fn;\n });\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n return React.useCallback(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return (ref.current).apply(void 0, args);\n }, []);\n}\n\nvar prevInputMethod;\nfunction handleKeyDown(event) {\n if (event.key === 'Tab') {\n prevInputMethod = 'keyboard';\n }\n}\nfunction handleMouseDown() {\n prevInputMethod = 'mouse';\n}\nfunction handleTouchStart() {\n prevInputMethod = 'mouse';\n}\n/**\n * Навешивает несколько глобальных обработчиков и отслеживает метод ввода - мышь или клавиатура.\n * Note: Повторный вызов функции не дублирует обработчики\n */\nfunction addGlobalListeners() {\n document.addEventListener('keydown', handleKeyDown);\n document.addEventListener('mousedown', handleMouseDown);\n document.addEventListener('touchstart', handleTouchStart);\n}\n/**\n * Хук устанавливает обработчик события на focusin и focusout\n * по конкретному типу события\n * @param node Элемент на котором установится обработчик (default = document)\n * @param inputMethod Если параметр не задан, установит обработчик по любому событию фокуса\n */\nfunction useFocus(ref, inputMethod) {\n var _a = React.useState(false), focus = _a[0], setFocus = _a[1];\n var handleFocus = React.useCallback(function () {\n if (!inputMethod || inputMethod === prevInputMethod) {\n setFocus(true);\n }\n }, [inputMethod]);\n var handleBlur = React.useCallback(function () {\n setFocus(false);\n }, []);\n React.useEffect(function () {\n var node = ref.current;\n if (node) {\n node.addEventListener('focusin', handleFocus);\n node.addEventListener('focusout', handleBlur);\n }\n return function () {\n if (node) {\n node.removeEventListener('focusin', handleFocus);\n node.removeEventListener('focusout', handleBlur);\n }\n };\n }, [handleBlur, handleFocus, ref]);\n React.useEffect(addGlobalListeners, []);\n return [focus];\n}\n\nfunction useKeydownOutside(ref, cb) {\n React.useEffect(function () {\n var handler = function (event) {\n if (!ref.current || (event.target instanceof Node && ref.current.contains(event.target))) {\n return;\n }\n cb(event);\n };\n document.addEventListener('keydown', handler);\n return function () {\n document.removeEventListener('keydown', handler);\n };\n }, [ref, cb]);\n}\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\nfunction getValue(list) {\n return list.map(\n // eslint-disable-next-line no-confusing-arrow\n function (_a) {\n var value = _a[0], query = _a[1];\n return query.matches ? value : null;\n }).filter(Boolean);\n}\nfunction useMedia(list, defaultValue) {\n var _a = React.useState([defaultValue]), value = _a[0], setValue = _a[1];\n var _b = React.useState([]), mediaQueryList = _b[0], setMediaQueryList = _b[1];\n var isClient = typeof window !== 'undefined';\n React.useEffect(function () {\n if (isClient && window.matchMedia) {\n var queryList = list.map(function (_a) {\n var x = _a[0], y = _a[1];\n return [x, window.matchMedia(y)];\n });\n setMediaQueryList(queryList);\n setValue(getValue(queryList));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isClient]);\n React.useEffect(function () {\n var handler = function () {\n setValue(getValue(mediaQueryList));\n };\n mediaQueryList.forEach(function (_a) {\n _a[0]; var mediaQuery = _a[1];\n return mediaQuery.addListener(handler);\n });\n return function () {\n mediaQueryList\n .forEach(function (_a) {\n _a[0]; var mediaQuery = _a[1];\n return mediaQuery.removeListener(handler);\n });\n };\n }, [value, mediaQueryList]);\n return value;\n}\n\nfunction usePrevious(value) {\n var ref = React.useRef();\n React.useEffect(function () {\n ref.current = value;\n });\n return ref.current;\n}\n\nfunction useDidUpdateEffect(effect, deps) {\n var didMountRef = React.useRef(false);\n // eslint-disable-next-line consistent-return\n React.useEffect(function () {\n if (didMountRef.current) {\n var cleanup_1 = effect();\n if (cleanup_1) {\n return function () { return cleanup_1(); };\n }\n }\n didMountRef.current = true;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n}\n\nvar UseLoadingStates;\n(function (UseLoadingStates) {\n UseLoadingStates[\"LOADED\"] = \"loaded\";\n UseLoadingStates[\"LOADING\"] = \"loading\";\n UseLoadingStates[\"ERROR\"] = \"error\";\n})(UseLoadingStates || (UseLoadingStates = {}));\n\n/**\n * Возвращает результат загрузки изображения\n * @param params.src url изображения\n * @return результат загрузки (loading | loaded | error)\n */\nfunction useImageLoadingState(_a) {\n var src = _a.src;\n var _b = useState(UseLoadingStates.LOADING), loadingState = _b[0], setLoadingState = _b[1];\n useEffect(function () {\n var active = true;\n setLoadingState(UseLoadingStates.LOADING);\n var image = new Image();\n image.onload = function () {\n if (!active) {\n return;\n }\n setLoadingState(UseLoadingStates.LOADED);\n };\n image.onerror = function () {\n if (!active) {\n return;\n }\n setLoadingState(UseLoadingStates.ERROR);\n };\n image.srcset = src;\n return function () {\n active = false;\n };\n }, [src]);\n return loadingState;\n}\n\nfunction useScrolledToBottomOfPage(cb, once) {\n if (once === void 0) { once = true; }\n React.useEffect(function () {\n var handler = function () {\n if (hasScrolledToBottomOfPage()) {\n cb();\n if (once) {\n document.removeEventListener('scroll', handler);\n }\n }\n };\n document.addEventListener('scroll', handler);\n return function () {\n document.removeEventListener('scroll', handler);\n };\n }, [cb]);\n}\n\nfunction useForceUpdate() {\n var _a = useState(Object.create(null)), dispatch = _a[1];\n var memoizedDispatch = useCallback(function () {\n dispatch(Object.create(null));\n }, [dispatch]);\n return memoizedDispatch;\n}\n\n/**\n * Хук получения состояния доступности компонента.\n */\nvar useIsMounted = function () {\n var isMounted = useRef(true);\n useEffect(function () { return function () {\n isMounted.current = false;\n }; }, []);\n return useCallback(function () { return isMounted.current; }, []);\n};\n\nvar useId = React.useId || function useUuid() {\n /*\n * Utilize useState instead of useMemo because React\n * makes no guarantees that the memo store is durable\n */\n var id = React.useState(function () { return v4(); })[0];\n return id;\n};\n\n/**\n * Обновление состояния, только если компонент смонтирован\n * Устраняет утечку и варнинги\n */\nvar useStateIfMounted = function (initialValue) {\n var getIsMounted = useIsMounted();\n var _a = React.useState(initialValue), storedValue = _a[0], setStoredValue = _a[1];\n var setState = React.useCallback(function (value) {\n var isMounted = getIsMounted();\n if (isMounted) {\n setStoredValue(value);\n }\n }, [getIsMounted]);\n return [storedValue, setState];\n};\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nvar useLayoutEffect_SAFE_FOR_SSR = typeof document !== 'undefined' ? useLayoutEffect : useEffect;\n\nexport { useClickOutside, useCountdown, useDidUpdateEffect, useDimensions, useEventCallback, useFocus, useForceUpdate, useId, useImageLoadingState, useIsMounted, useKeydownOutside, useLayoutEffect_SAFE_FOR_SSR, useMedia, usePrevious, useScrolledToBottomOfPage, useStateIfMounted };\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n","var arrayEach = require('./_arrayEach'),\n baseCreate = require('./_baseCreate'),\n baseForOwn = require('./_baseForOwn'),\n baseIteratee = require('./_baseIteratee'),\n getPrototype = require('./_getPrototype'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isFunction = require('./isFunction'),\n isObject = require('./isObject'),\n isTypedArray = require('./isTypedArray');\n\n/**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\nfunction transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = baseIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n}\n\nmodule.exports = transform;\n"],"names":["String","fromCharCode","getRandomValues","rnds8","Uint8Array","rng","crypto","bind","msCrypto","Error","uuid","byteToHex","i","push","toString","substr","arr","offset","arguments","length","undefined","toLowerCase","TypeError","prevInputMethod","UseLoadingStates","options","buf","rnds","random","useClickOutside","ref","cb","handler","event","checkClickedElement","el","current","contains","target","Array","isArray","find","document","addEventListener","removeEventListener","useCountdown","_a","dateLeft","dateRight","diff","endDate","onStart","onEnd","intervalId","useRef","_b","useState","Date","getTime","Math","floor","ceil","seconds","setSeconds","clear","useCallback","clearInterval","useEffect","setInterval","sec","useDimensions","_c","liveMeasure","_d","dimensions","setDimensions","_e","node","setNode","_node","useLayoutEffect","measure_1","window","requestAnimationFrame","getBoundingClientRect","getDimensionObject","useEventCallback","fn","args","_i","apply","handleKeyDown","key","handleMouseDown","handleTouchStart","addGlobalListeners","useFocus","inputMethod","focus","setFocus","handleFocus","handleBlur","useKeydownOutside","Node","getValue","list","map","value","matches","filter","Boolean","useMedia","defaultValue","setValue","mediaQueryList","setMediaQueryList","isClient","matchMedia","queryList","x","y","forEach","addListener","removeListener","usePrevious","useDidUpdateEffect","effect","deps","didMountRef","cleanup_1","useImageLoadingState","src","LOADING","loadingState","setLoadingState","active","image","Image","onload","LOADED","onerror","ERROR","srcset","useScrolledToBottomOfPage","once","documentElement","scrollTop","innerHeight","offsetHeight","useForceUpdate","dispatch","Object","create","useIsMounted","isMounted","useId","useStateIfMounted","initialValue","getIsMounted","storedValue","setStoredValue","useLayoutEffect_SAFE_FOR_SSR","module","exports","array","iteratee","index","arrayEach","baseCreate","baseForOwn","baseIteratee","getPrototype","isBuffer","isFunction","isObject","isTypedArray","object","accumulator","isArr","isArrLike","Ctor","constructor"],"sourceRoot":""}