intelicoreact 2.0.0 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/classes/package.json +5 -0
  2. package/dist/Atomic/FormElements/InputCurrency/index.d.ts +1 -1
  3. package/dist/Atomic/UI/AccordionText/AccordionText.d.ts +1 -1
  4. package/dist/Atomic/UI/DebugContainer/index.d.ts +1 -1
  5. package/dist/Atomic/UI/WizardStepper/WizardStepper.interface.d.ts +2 -2
  6. package/dist/Molecular/InputCustomFetch/index.d.ts +1 -1
  7. package/dist/assets/fonts/roboto-v20-latin_cyrillic-100.woff +0 -0
  8. package/dist/assets/fonts/roboto-v20-latin_cyrillic-100.woff2 +0 -0
  9. package/dist/assets/fonts/roboto-v20-latin_cyrillic-100italic.woff +0 -0
  10. package/dist/assets/fonts/roboto-v20-latin_cyrillic-100italic.woff2 +0 -0
  11. package/dist/assets/fonts/roboto-v20-latin_cyrillic-300.woff +0 -0
  12. package/dist/assets/fonts/roboto-v20-latin_cyrillic-300.woff2 +0 -0
  13. package/dist/assets/fonts/roboto-v20-latin_cyrillic-300italic.woff +0 -0
  14. package/dist/assets/fonts/roboto-v20-latin_cyrillic-300italic.woff2 +0 -0
  15. package/dist/assets/fonts/roboto-v20-latin_cyrillic-500.woff +0 -0
  16. package/dist/assets/fonts/roboto-v20-latin_cyrillic-500.woff2 +0 -0
  17. package/dist/assets/fonts/roboto-v20-latin_cyrillic-500italic.woff +0 -0
  18. package/dist/assets/fonts/roboto-v20-latin_cyrillic-500italic.woff2 +0 -0
  19. package/dist/assets/fonts/roboto-v20-latin_cyrillic-700.woff +0 -0
  20. package/dist/assets/fonts/roboto-v20-latin_cyrillic-700.woff2 +0 -0
  21. package/dist/assets/fonts/roboto-v20-latin_cyrillic-700italic.woff +0 -0
  22. package/dist/assets/fonts/roboto-v20-latin_cyrillic-700italic.woff2 +0 -0
  23. package/dist/assets/fonts/roboto-v20-latin_cyrillic-900.woff +0 -0
  24. package/dist/assets/fonts/roboto-v20-latin_cyrillic-900.woff2 +0 -0
  25. package/dist/assets/fonts/roboto-v20-latin_cyrillic-900italic.woff +0 -0
  26. package/dist/assets/fonts/roboto-v20-latin_cyrillic-900italic.woff2 +0 -0
  27. package/dist/assets/fonts/roboto-v20-latin_cyrillic-italic.woff +0 -0
  28. package/dist/assets/fonts/roboto-v20-latin_cyrillic-italic.woff2 +0 -0
  29. package/dist/assets/fonts/roboto-v20-latin_cyrillic-regular.woff +0 -0
  30. package/dist/assets/fonts/roboto-v20-latin_cyrillic-regular.woff2 +0 -0
  31. package/dist/form.cjs +1934 -1249
  32. package/dist/form.cjs.map +4 -4
  33. package/dist/form.d.ts +1 -0
  34. package/dist/form.js +1818 -1133
  35. package/dist/form.js.map +4 -4
  36. package/dist/hooks.cjs +3 -1
  37. package/dist/hooks.cjs.map +2 -2
  38. package/dist/hooks.js +3 -1
  39. package/dist/hooks.js.map +2 -2
  40. package/dist/index.cjs +2759 -2075
  41. package/dist/index.cjs.map +4 -4
  42. package/dist/index.js +2668 -1984
  43. package/dist/index.js.map +4 -4
  44. package/dist/intelicoreact.css +1 -0
  45. package/dist/scss/_fonts.scss +24 -24
  46. package/dist/ui.cjs +9 -12
  47. package/dist/ui.cjs.map +2 -2
  48. package/dist/ui.js +28 -31
  49. package/dist/ui.js.map +3 -3
  50. package/form/package.json +5 -0
  51. package/hooks/package.json +5 -0
  52. package/icons/package.json +5 -0
  53. package/layout/package.json +5 -0
  54. package/package.json +34 -13
  55. package/presets/package.json +5 -0
  56. package/types/package.json +5 -0
  57. package/ui/package.json +5 -0
  58. package/utils/package.json +5 -0
package/dist/hooks.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/Functions/customEventListener.js", "../src/Functions/dateTime.js", "../src/Constants/index.constants.js", "../src/Functions/utils.js", "../src/Functions/fieldValueFormatters.js", "../src/Functions/hooks/useFormFieldsChangesManager.js", "../src/Functions/locale/createTranslator.js", "../src/Functions/operations.js", "../src/Functions/Portal.js", "../src/Functions/useBodyScrollLock.js", "../src/Functions/useClickOutside.js", "../src/Functions/useDebounce.js", "../src/Functions/useFieldFocus.js", "../src/Functions/useFormTools/functions/General.js", "../src/Functions/useFormTools/form-drivers/ArrayWithObjects.js", "../src/Functions/useFormTools/form-drivers/ObjectWithIterableObjects.js", "../src/Functions/useFormTools/form-drivers/ObjectWithNamedKeyObjects.js", "../src/Functions/useFormTools/functions/RenderFields.js", "../src/Functions/useFormTools/index.js", "../src/Functions/useInputHighlightError.js", "../src/Functions/useIsMobile/useIsMobile.ts", "../src/Functions/useIsMobile/index.ts", "../src/Functions/useKeyPress/useKeyPress.ts", "../src/Functions/useLocalStorage.js", "../src/Functions/useLocationParams.js", "../src/Functions/useMediaQuery.js", "../src/Functions/useMetaInfo.js", "../src/Functions/useMouseUpOutside.js", "../src/Functions/useOnlineStatus.js", "../src/Functions/usePasswordChecker.js", "../src/Functions/usePrevious.js", "../src/Functions/useResize.js", "../src/Functions/useScrollTo.js", "../src/Functions/useToggle.js"],
4
- "sourcesContent": ["(function () {\n Element.prototype._addEventListener = Element.prototype.addEventListener;\n Element.prototype.addEventListener = function (a, b, c) {\n if (c == undefined) c = false;\n this._addEventListener(a, b, c);\n if (!this.eventListenerList) this.eventListenerList = {};\n if (!this.eventListenerList[a]) this.eventListenerList[a] = [];\n //this.removeEventListener(a,b,c); // TODO - handle duplicates..\n this.eventListenerList[a].push({ listener: b, useCapture: c });\n };\n\n Element.prototype.getEventListeners = function (a) {\n if (!this.eventListenerList) this.eventListenerList = {};\n if (a == undefined) return this.eventListenerList;\n return this.eventListenerList[a];\n };\n Element.prototype.clearEventListeners = function (a) {\n if (!this.eventListenerList) this.eventListenerList = {};\n if (a == undefined) {\n for (const x in this.getEventListeners()) this.clearEventListeners(x);\n return;\n }\n const el = this.getEventListeners(a);\n if (el == undefined) return;\n for (let i = el.length - 1; i >= 0; --i) {\n const ev = el[i];\n this.removeEventListener(a, ev.listener, ev.useCapture);\n }\n };\n\n Element.prototype._removeEventListener =\n Element.prototype.removeEventListener;\n Element.prototype.removeEventListener = function (a, b, c) {\n if (c == undefined) c = false;\n this._removeEventListener(a, b, c);\n if (!this.eventListenerList) this.eventListenerList = {};\n if (!this.eventListenerList[a]) this.eventListenerList[a] = [];\n\n // Find the event in the list\n for (let i = 0; i < this.eventListenerList[a].length; i++) {\n if (\n (this.eventListenerList[a][i].listener == b,\n this.eventListenerList[a][i].useCapture == c)\n ) {\n // Hmm..\n this.eventListenerList[a].splice(i, 1);\n break;\n }\n }\n if (this.eventListenerList[a].length == 0) delete this.eventListenerList[a];\n };\n})();\n\n/**\n * \u0414\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u0442 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A \u0441\u043E\u0431\u044B\u0442\u0438\u044F \u043A \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0443\n * @param {HTMLElement} element - DOM \u044D\u043B\u0435\u043C\u0435\u043D\u0442\n * @param {string} eventName - \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u043E\u0431\u044B\u0442\u0438\u044F\n * @param {Function} handler - \u0424\u0443\u043D\u043A\u0446\u0438\u044F-\u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\n */\nexport function addEventListener(element, eventName, handler) {\n if (element && element.addEventListener) {\n element.addEventListener(eventName, handler);\n }\n}\n\n/**\n * \u0423\u0434\u0430\u043B\u044F\u0435\u0442 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A \u0441\u043E\u0431\u044B\u0442\u0438\u044F \u0441 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\n * @param {HTMLElement} element - DOM \u044D\u043B\u0435\u043C\u0435\u043D\u0442\n * @param {string} eventName - \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u043E\u0431\u044B\u0442\u0438\u044F\n * @param {Function} handler - \u0424\u0443\u043D\u043A\u0446\u0438\u044F-\u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\n */\nexport function removeEventListener(element, eventName, handler) {\n if (element && element.removeEventListener) {\n element.removeEventListener(eventName, handler);\n }\n}\n\n/**\n * \u0421\u043E\u0437\u0434\u0430\u0435\u0442 \u0438 \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u043A\u0430\u0441\u0442\u043E\u043C\u043D\u043E\u0435 \u0441\u043E\u0431\u044B\u0442\u0438\u0435\n * @param {HTMLElement} element - DOM \u044D\u043B\u0435\u043C\u0435\u043D\u0442\n * @param {string} eventName - \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u043E\u0431\u044B\u0442\u0438\u044F\n * @param {Object} detail - \u0414\u0430\u043D\u043D\u044B\u0435 \u0441\u043E\u0431\u044B\u0442\u0438\u044F\n */\nexport function dispatchCustomEvent(element, eventName, detail = {}) {\n if (element) {\n const event = new CustomEvent(eventName, { detail });\n element.dispatchEvent(event);\n }\n}\n\n// \u042D\u043A\u0441\u043F\u043E\u0440\u0442\u0438\u0440\u0443\u0435\u043C \u043E\u0431\u044A\u0435\u043A\u0442 \u0441\u043E \u0432\u0441\u0435\u043C\u0438 \u0444\u0443\u043D\u043A\u0446\u0438\u044F\u043C\u0438 \u0434\u043B\u044F \u043E\u0431\u0440\u0430\u0442\u043D\u043E\u0439 \u0441\u043E\u0432\u043C\u0435\u0441\u0442\u0438\u043C\u043E\u0441\u0442\u0438\nexport default {\n addEventListener,\n removeEventListener,\n dispatchCustomEvent\n};\n", "import moment from \"moment\";\n\n/**\n * @constant {Object} DATETIME_FORMATS\n * @description \u0412\u0441\u0435 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0435 \u0444\u043E\u0440\u043C\u0430\u0442\u044B \u0434\u0430\u0442 \u0438 \u0432\u0440\u0435\u043C\u0435\u043D\u0438.\n */\nexport const DATETIME_FORMATS = Object.freeze({\n // \u041E\u0441\u043D\u043E\u0432\u043D\u044B\u0435 \u0444\u043E\u0440\u043C\u0430\u0442\u044B\n DATE_FORMAT: \"YYYY-MM-DD\", // \u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442 \u0434\u0430\u0442\u044B\n DATE_WITHOUT_SEPARATORS: \"MMDDYYYY\", // \u0411\u0435\u0437 \u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u0435\u0439\n VALIDATION_DATE_FORMAT: \"MM/DD/YYYY\", // \u0414\u043B\u044F \u0432\u0430\u043B\u0438\u0434\u0430\u0446\u0438\u0438\n INPUT_DATE_FORMAT: \"MM.DD.YYYY\", // \u0424\u043E\u0440\u043C\u0430\u0442 \u0434\u043B\u044F \u0432\u0432\u043E\u0434\u0430\n INPUT_TIME_FORMAT: \"YYYY-MM-DD HH:mm:SS\", // \u0412\u0432\u043E\u0434 \u0432\u0440\u0435\u043C\u0435\u043D\u0438\n TIME_FORMAT_WSPACE: \"YYYY-MM-DD HH:mm:SS\", // \u0412\u0440\u0435\u043C\u044F \u0441 \u043F\u0440\u043E\u0431\u0435\u043B\u043E\u043C\n TIME_FORMAT: \"YYYY-MM-DDTHH:mm:SS\", // \u0412\u0440\u0435\u043C\u044F \u0441 T (ISO \u0444\u043E\u0440\u043C\u0430\u0442)\n DATE_FORMAT_WITH_SLASH: \"MM/DD/YYYY\", // \u0414\u0430\u0442\u0430 \u0441 \u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u0435\u043C /\n\n // \u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u0444\u043E\u0440\u043C\u0430\u0442\u044B\n DATE_WITH_DASHES: \"MM-DD-YYYY\", // \u0414\u0430\u0442\u0430 \u0441 \u0434\u0435\u0444\u0438\u0441\u0430\u043C\u0438\n DATE_WITH_DOTS: \"DD.MM.YYYY\", // \u0414\u0430\u0442\u0430 \u0441 \u0442\u043E\u0447\u043A\u0430\u043C\u0438\n DATE_WITH_COMMA: \"DD,MM,YYYY\", // \u0414\u0430\u0442\u0430 \u0441 \u0437\u0430\u043F\u044F\u0442\u044B\u043C\u0438\n FULL_DATE_TIME: \"YYYY-MM-DD HH:mm:ss\", // \u041F\u043E\u043B\u043D\u0430\u044F \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043C\u044F\n ISO_DATE_TIME: \"YYYY-MM-DDTHH:mm:ss.SSSZ\", // ISO \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442 \u0441 \u043C\u0438\u043B\u043B\u0438\u0441\u0435\u043A\u0443\u043D\u0434\u0430\u043C\u0438\n LOCALIZED_DATE: \"MMMM DD, YYYY\", // \u041B\u043E\u043A\u0430\u043B\u0438\u0437\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442 \u0441 \u043F\u043E\u043B\u043D\u044B\u043C \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435\u043C \u043C\u0435\u0441\u044F\u0446\u0430\n SHORT_DATE: \"MM/DD/YY\", // \u041A\u0440\u0430\u0442\u043A\u0430\u044F \u0434\u0430\u0442\u0430\n SHORT_DATE_WITH_TIME: \"MM/DD/YY HH:mm\", // \u041A\u0440\u0430\u0442\u043A\u0430\u044F \u0434\u0430\u0442\u0430 \u0441 \u0432\u0440\u0435\u043C\u0435\u043D\u0435\u043C\n TIME_24H: \"HH:mm\", // \u0412\u0440\u0435\u043C\u044F \u0432 24-\u0447\u0430\u0441\u043E\u0432\u043E\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u0435\n TIME_12H: \"hh:mm A\", // \u0412\u0440\u0435\u043C\u044F \u0432 12-\u0447\u0430\u0441\u043E\u0432\u043E\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u0435\n TIME_12H_WITH_SECONDS: \"hh:mm:ss A\", // \u0412\u0440\u0435\u043C\u044F \u0432 12-\u0447\u0430\u0441\u043E\u0432\u043E\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u0435 \u0441 \u0441\u0435\u043A\u0443\u043D\u0434\u0430\u043C\u0438\n TIME_24H_WITH_SECONDS: \"HH:mm:ss\", // \u0412\u0440\u0435\u043C\u044F \u0432 24-\u0447\u0430\u0441\u043E\u0432\u043E\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u0435 \u0441 \u0441\u0435\u043A\u0443\u043D\u0434\u0430\u043C\u0438\n MONTH_DAY: \"MM/DD\", // \u0422\u043E\u043B\u044C\u043A\u043E \u043C\u0435\u0441\u044F\u0446 \u0438 \u0434\u0435\u043D\u044C\n YEAR_MONTH_DAY: \"YYYY/MM/DD\", // \u0413\u043E\u0434/\u041C\u0435\u0441\u044F\u0446/\u0414\u0435\u043D\u044C\n});\n\nconst formatMap = Object.freeze({\n [DATETIME_FORMATS.DATE_FORMAT]: \"YYYY-MM-DD\", // \u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442 \u0434\u0430\u0442\u044B\n [DATETIME_FORMATS.DATE_WITHOUT_SEPARATORS]: \"MMDDYYYY\", // \u0411\u0435\u0437 \u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u0435\u0439\n [DATETIME_FORMATS.VALIDATION_DATE_FORMAT]: \"MM/DD/YYYY\", // \u0414\u043B\u044F \u0432\u0430\u043B\u0438\u0434\u0430\u0446\u0438\u0438\n [DATETIME_FORMATS.INPUT_DATE_FORMAT]: \"MM.DD.YYYY\", // \u0424\u043E\u0440\u043C\u0430\u0442 \u0434\u043B\u044F \u0432\u0432\u043E\u0434\u0430\n [DATETIME_FORMATS.INPUT_TIME_FORMAT]: \"YYYY-MM-DD HH:mm:SS\", // \u0412\u0432\u043E\u0434 \u0432\u0440\u0435\u043C\u0435\u043D\u0438\n [DATETIME_FORMATS.TIME_FORMAT_WSPACE]: \"YYYY-MM-DD HH:mm:SS\", // \u0412\u0440\u0435\u043C\u044F \u0441 \u043F\u0440\u043E\u0431\u0435\u043B\u043E\u043C\n [DATETIME_FORMATS.TIME_FORMAT]: \"YYYY-MM-DDTHH:mm:SS\", // \u0412\u0440\u0435\u043C\u044F \u0441 T (ISO \u0444\u043E\u0440\u043C\u0430\u0442)\n [DATETIME_FORMATS.DATE_FORMAT_WITH_SLASH]: \"MM/DD/YYYY\", // \u0414\u0430\u0442\u0430 \u0441 \u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u0435\u043C /\n [DATETIME_FORMATS.DATE_WITH_DASHES]: \"MM-DD-YYYY\", // \u0414\u0430\u0442\u0430 \u0441 \u0434\u0435\u0444\u0438\u0441\u0430\u043C\u0438\n [DATETIME_FORMATS.DATE_WITH_DOTS]: \"DD.MM.YYYY\", // \u0414\u0430\u0442\u0430 \u0441 \u0442\u043E\u0447\u043A\u0430\u043C\u0438\n [DATETIME_FORMATS.DATE_WITH_COMMA]: \"DD,MM,YYYY\", // \u0414\u0430\u0442\u0430 \u0441 \u0437\u0430\u043F\u044F\u0442\u044B\u043C\u0438\n [DATETIME_FORMATS.FULL_DATE_TIME]: \"YYYY-MM-DD HH:mm:ss\", // \u041F\u043E\u043B\u043D\u0430\u044F \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043C\u044F\n [DATETIME_FORMATS.ISO_DATE_TIME]: \"YYYY-MM-DDTHH:mm:ss.SSSZ\", // ISO \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442 \u0441 \u043C\u0438\u043B\u043B\u0438\u0441\u0435\u043A\u0443\u043D\u0434\u0430\u043C\u0438\n [DATETIME_FORMATS.LOCALIZED_DATE]: \"MMMM DD, YYYY\", // \u041B\u043E\u043A\u0430\u043B\u0438\u0437\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442 \u0441 \u043F\u043E\u043B\u043D\u044B\u043C \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435\u043C \u043C\u0435\u0441\u044F\u0446\u0430\n [DATETIME_FORMATS.SHORT_DATE]: \"MM/DD/YY\", // \u041A\u0440\u0430\u0442\u043A\u0430\u044F \u0434\u0430\u0442\u0430\n [DATETIME_FORMATS.SHORT_DATE_WITH_TIME]: \"MM/DD/YY HH:mm\", // \u041A\u0440\u0430\u0442\u043A\u0430\u044F \u0434\u0430\u0442\u0430 \u0441 \u0432\u0440\u0435\u043C\u0435\u043D\u0435\u043C\n [DATETIME_FORMATS.TIME_24H]: \"HH:mm\", // \u0412\u0440\u0435\u043C\u044F \u0432 24-\u0447\u0430\u0441\u043E\u0432\u043E\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u0435\n [DATETIME_FORMATS.TIME_12H]: \"hh:mm A\", // \u0412\u0440\u0435\u043C\u044F \u0432 12-\u0447\u0430\u0441\u043E\u0432\u043E\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u0435\n [DATETIME_FORMATS.TIME_12H_WITH_SECONDS]: \"hh:mm:ss A\", // \u0412\u0440\u0435\u043C\u044F \u0432 12-\u0447\u0430\u0441\u043E\u0432\u043E\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u0435 \u0441 \u0441\u0435\u043A\u0443\u043D\u0434\u0430\u043C\u0438\n [DATETIME_FORMATS.TIME_24H_WITH_SECONDS]: \"HH:mm:ss\", // \u0412\u0440\u0435\u043C\u044F \u0432 24-\u0447\u0430\u0441\u043E\u0432\u043E\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u0435 \u0441 \u0441\u0435\u043A\u0443\u043D\u0434\u0430\u043C\u0438\n [DATETIME_FORMATS.MONTH_DAY]: \"MM/DD\", // \u0422\u043E\u043B\u044C\u043A\u043E \u043C\u0435\u0441\u044F\u0446 \u0438 \u0434\u0435\u043D\u044C\n [DATETIME_FORMATS.YEAR_MONTH_DAY]: \"YYYY/MM/DD\", // \u0413\u043E\u0434/\u041C\u0435\u0441\u044F\u0446/\u0414\u0435\u043D\u044C\n});\n\n/**\n * @constant {Object} DATE_UNITS\n * @description \u0415\u0434\u0438\u043D\u0438\u0446\u044B \u0432\u0440\u0435\u043C\u0435\u043D\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u044B \u0434\u043B\u044F \u0440\u0430\u0431\u043E\u0442\u044B \u0441 \u0434\u0430\u0442\u0430\u043C\u0438.\n */\nexport const DATE_UNITS = Object.freeze({\n YEARS: Object.freeze({\n YEARS: \"years\",\n YEAR: \"year\",\n Y: \"y\",\n TEMPLATE: \"YYYY\",\n }),\n\n MONTHS: Object.freeze({\n MONTHS: \"months\",\n MONTH: \"month\",\n MON: \"M\",\n TEMPLATE: \"MM\",\n }),\n\n DAYS: Object.freeze({\n DAYS: \"days\",\n DAY: \"day\",\n D: \"d\",\n TEMPLATE: \"DD\",\n }),\n\n HOURS: Object.freeze({\n HOURS: \"hours\",\n HOUR: \"hour\",\n H: \"h\",\n TEMPLATE: \"HH\",\n }),\n\n WEEKS: Object.freeze({\n WEEKS: \"weeks\",\n WEEK: \"week\",\n W: \"w\",\n }),\n\n QUARTERS: Object.freeze({\n QUARTERS: \"quarters\",\n QUARTER: \"quarter\",\n Q: \"Q\",\n }),\n\n MINUTES: Object.freeze({\n MINUTES: \"minutes\",\n MINUTE: \"minute\",\n MIN: \"m\",\n }),\n\n SECONDS: Object.freeze({\n SECONDS: \"seconds\",\n SECOND: \"second\",\n S: \"s\",\n }),\n\n MILLISECONDS: Object.freeze({\n MILLISECONDS: \"milliseconds\",\n MILLISECOND: \"millisecond\",\n MS: \"ms\",\n }),\n});\n\n/**\n * \u0424\u0443\u043D\u043A\u0446\u0438\u044F \u0434\u043B\u044F \u043F\u0430\u0440\u0441\u0438\u043D\u0433\u0430 \u0438 \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0441\u0442\u0440\u043E\u043A\u0438 \u0441 \u0434\u0430\u0442\u043E\u0439 \u0432 \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442.\n *\n * @param {string} value - \u0421\u0442\u0440\u043E\u043A\u0430 \u0441 \u0434\u0430\u0442\u043E\u0439, \u043A\u043E\u0442\u043E\u0440\u0443\u044E \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E \u0440\u0430\u0441\u043F\u0430\u0440\u0441\u0438\u0442\u044C \u0438 \u043E\u0442\u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C.\n * @param {string} [outputFormat=DATETIME_FORMATS.INPUT_DATE_FORMAT] - \u0424\u043E\u0440\u043C\u0430\u0442, \u0432 \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u0431\u0443\u0434\u0435\u0442 \u043F\u0440\u0435\u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u043D\u0430 \u0434\u0430\u0442\u0430.\n * \u0415\u0441\u043B\u0438 \u043D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u0444\u043E\u0440\u043C\u0430\u0442 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E `MM.DD.YYYY`.\n *\n * @returns {string} - \u041E\u0442\u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u0430\u044F \u0434\u0430\u0442\u0430 \u0432 \u0441\u0442\u0440\u043E\u043A\u043E\u0432\u043E\u043C \u0432\u0438\u0434\u0435, \u0438\u043B\u0438 \u0438\u0441\u0445\u043E\u0434\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430, \u0435\u0441\u043B\u0438 \u0434\u0430\u0442\u0430 \u043D\u0435 \u0440\u0430\u0441\u043F\u043E\u0437\u043D\u0430\u043D\u0430.\n *\n * @throws {Error} - \u0415\u0441\u043B\u0438 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0434\u0430\u0442\u044B \u043D\u0435\u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u043E (\u043D\u0435 \u0441\u0442\u0440\u043E\u043A\u0430 \u0438\u043B\u0438 \u043F\u0443\u0441\u0442\u043E\u0435).\n */\nexport function parseAndFormatDate(\n value,\n outputFormat = DATETIME_FORMATS.INPUT_DATE_FORMAT,\n) {\n if (!value || typeof value !== \"string\") return value;\n\n for (let format in formatMap) {\n const parsedDate = moment(value, formatMap[format], true);\n if (parsedDate.isValid()) {\n return parsedDate.format(outputFormat);\n }\n }\n\n return value;\n}\n", "export const KEYBOARD_SERVICE_KEYS = [\n \"Escape\",\n \"F1\",\n \"F2\",\n \"F3\",\n \"F4\",\n \"F5\",\n \"F6\",\n \"F7\",\n \"F8\",\n \"F9\",\n \"F10\",\n \"F11\",\n \"F12\",\n \"Tab\",\n \"CapsLock\",\n \"Shift\",\n \"Control\",\n \"Meta\",\n \"Option\",\n \"Alt\",\n \"ContextMenu\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"ArrowUp\",\n \"ArrowDown\",\n \"NumLock\",\n \"Backspace\",\n \"Delete\",\n \"Enter\",\n \"Return\",\n \"Insert\",\n \"Home\",\n \"End\",\n \"PageUp\",\n \"PageDown\",\n \"PrintScreen\",\n \"ScrollLock\",\n \"Pause\",\n];\n\nexport const MAX_PHONE_LENGTH = 10;\nexport const MAX_NAME_LENGTH = 128;\n\nexport const DEFAULT_DATE_MASK_NO_VALUE_SYMBOL = \"_\";\n\nexport const DEFAULT_COLORS = [\n \"#D9C1FF\",\n \"#FFBAF0\",\n \"#FFB8CE\",\n \"#FFC3A2\",\n \"#FFDB7C\",\n \"#F9F871\",\n \"#C3FCF1\",\n \"#F6F2CB\",\n \"#E0F8D1\",\n \"#B1DFFB\",\n \"#8DECFE\",\n \"#76F7ED\",\n \"#8AFEC8\",\n];\n\nexport const KEYBOARD_KEY_CODES = {\n Backspace: 8,\n Delete: 46,\n ARROW_LEFT: 37,\n ARROW_RIGHT: 39,\n};\n\nexport const OS = {\n iOS: \"iOS\",\n Android: \"Android\",\n WP: \"Windows Phone\",\n Linux: \"Linux\",\n Windows: \"Windows\",\n MacOS: \"MacOS\",\n Unknown: \"unknown\",\n};\n", "import { useEffect } from \"react\";\n\nimport moment from \"moment-timezone\";\n\nimport { DEFAULT_COLORS, OS } from \"../Constants/index.constants\";\n\nexport const uuid = () => Date.now().toString(36) + Math.random().toString(36).substring(2);\n\nexport const getIsOnlyAnObject = (input) => {\n return (\n typeof input === \"object\" && // \"\u043E\u0442\u0431\u0438\u0432\u0430\u0435\u0442\" \u043F\u0440\u0438\u043C\u0438\u0442\u0438\u0432\u044B \u0438 \u0444\u0443\u043D\u043A\u0446\u0438\u0438\n input instanceof Object && // \"\u043E\u0442\u0431\u0438\u0432\u0430\u0435\u0442\" null\n !Array.isArray(input) && // \"\u043E\u0442\u0431\u0438\u0432\u0430\u0435\u0442\" \u043C\u0430\u0441\u0441\u0438\u0432\u044B\n !(input instanceof Set) && // \"\u043E\u0442\u0431\u0438\u0432\u0430\u0435\u0442\" \u0441\u0435\u0442\u044B\n !(input instanceof Map) // \"\u043E\u0442\u0431\u0438\u0432\u0430\u0435\u0442\" \u043C\u0430\u043F\u044B\n );\n};\n\n/* eslint-disable guard-for-in, no-unused-vars */\nexport const handleObjectChange =\n (updateObject, updateFunction) =>\n (data, prop = \"\", isNumber) => {\n let value;\n if (data?.target) {\n value =\n data.target.type === \"checkbox\"\n ? data.target.checked\n : data.target.value;\n } else value = data;\n\n value = isNumber ? Number(value) : value;\n\n const props = prop.split(\".\");\n const currentObject = props.reduce((res, chapter, index) => {\n if (props.length !== index + 1) res = res[chapter];\n return res;\n }, updateObject);\n\n currentObject[props.pop()] = value;\n updateFunction();\n };\n\nexport const useOutsideToggle = (ref, setOut, open) => {\n function handleClickOutside(event) {\n if (ref.current && !ref.current.contains(event.target)) {\n setOut(open);\n }\n }\n useEffect(() => {\n document.addEventListener(\"mouseup\", handleClickOutside);\n return () => {\n // Unbind the event listener on clean up\n document.removeEventListener(\"mouseup\", handleClickOutside);\n };\n }, [ref]);\n};\n\n// export const clone = obj => {\n// const data = obj instanceof Array ? [] : {};\n// for (const i in obj) data[i] = typeof obj[i] === 'object' && obj[i] != null ? clone(obj[i]) : obj[i];\n// return data;\n// };\n// ! \u042D\u0442\u043E\u0442 \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0435\u0435\nexport const clone = (input) => {\n if (input === null || typeof input !== \"object\") return input;\n const data = input instanceof Array ? [] : {};\n for (const i in input) data[i] = clone(input[i]);\n return data;\n};\n\nexport const getResponseClone = async (res) =>\n await (typeof res?.clone === \"function\" ? res.clone() : clone(res));\n\n//TimeUtils\nexport function transformUTCTimeToLocal(date, format = \"YYYY-MM-DD HH:mm:ss\") {\n if (!date) return;\n const utcDate = moment.utc(date).toDate();\n return moment(utcDate, format).local().format(format);\n}\nexport function transformLocalTimeToUTC(date, format = \"YYYY-MM-DD HH:mm:ss\") {\n if (!date) return;\n return moment(date, format).utc().format(format);\n}\nexport function transformUTCHoursToLocal(time, format = \"HH:mm:ss\") {\n if (!time) return;\n const splitedTime = time.split(\":\");\n const offset = moment().utcOffset();\n let HH = Number(splitedTime[0]);\n let mm = Number(splitedTime[1]);\n const ss = splitedTime[2];\n mm = mm + offset;\n while (mm > 59) {\n mm -= 60;\n HH += 1;\n }\n if (HH > 23) HH -= 24;\n while (mm < 0) {\n mm += 60;\n HH -= 1;\n }\n if (HH < 0) HH += 24;\n return `${HH}:${mm}:${ss}`;\n}\n\n//? \u041D\u0430\u043C\u0435\u0440\u044F\u043D\u043D\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u043C \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u043D\u0430\u0437\u043D\u0430\u0447\u0430\u044E \u0441\u0430\u043C\u044B\u0439 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E-\u043C\u0430\u043B\u0435\u043D\u044C\u043A\u0438\u0439 \u043F\u0430\u0442\u0442\u0435\u0440\u043D\nexport function transformDateOrTimeOrTogetherToFormat(\n data,\n outputFormat = \"HH:mm\",\n additional,\n) {\n const ERROR_VALUE = \"Invalid date\";\n const ERROR_MESSGE = `Invalid input data for ${outputFormat} format`;\n const { parseFormat, isReturnAsMomentInstance } = getIsOnlyAnObject(\n additional,\n )\n ? additional\n : {};\n\n if (typeof data !== \"string\" && typeof data !== \"number\") {\n return isReturnAsMomentInstance ? moment(\"error\") : ERROR_MESSGE;\n }\n\n //? \u0418\u0433\u043D\u043E\u0440\u0438\u0440\u0443\u0435\u043C parseFormat, \u0435\u0441\u043B\u0438 data \u043F\u0440\u0438\u0448\u043B\u0430 \u043A\u0430\u043A timestamp \u0438\u043B\u0438 \u0435\u0441\u043B\u0438 parseFormat \u043D\u0435 \u0441\u0442\u0440\u043E\u043A\u0430\n const momentArgs = [\n data,\n ...(!Number.isNaN(Number(data)) || typeof parseFormat === \"string\"\n ? []\n : [parseFormat]),\n ];\n\n //? \u0417\u0430\u0434\u0430\u0447\u0430 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C moment-\u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440, \u0432\u0430\u043B\u0438\u0434\u043D\u044B\u0439 \u043B\u0438\u0431\u043E \u043D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u044B\u0439\n const momentInstance = (() => {\n let instance = moment(...momentArgs);\n\n //? \u041F\u0440\u043E\u0432\u0435\u0440\u044F\u0435\u043C \u0432\u0430\u043B\u0438\u0434\u043D\u043E\u0441\u0442\u044C moment-\u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440-\u0430 \u043F\u0443\u0442\u0435\u043C \u043F\u043E\u043F\u044B\u0442\u043A\u0438 \u043F\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0435\u0433\u043E \u043A \u0432\u044B\u0445\u043E\u0434\u043D\u043E\u043C\u0443 \u0444\u043E\u0440\u043C\u0430\u0442\u0443\n //? \u041F\u043E\u043F\u0430\u0434\u0435\u043C \u0432 \u044D\u0442\u043E\u0442 \u043A\u0435\u0439\u0441 \u0435\u0441\u043B\u0438\n //? - data \u044D\u0442\u043E timestamp\n //? - data \u044D\u0442\u043E \u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 date-time\n //? - data \u044D\u0442\u043E \u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 date (\u0432 \u044D\u0442\u043E\u043C \u0441\u043B\u0443\u0447\u0430\u0435 \u0432\u0440\u0435\u043C\u044F \u0432\u044B\u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044F 00:00:00)\n if (instance.format(outputFormat) !== ERROR_VALUE) return instance;\n //? \u0415\u0441\u043B\u0438 \u0436\u0435 \u043F\u0440\u0438\u0432\u0435\u0434\u0435\u043D\u0438\u0435 \u043D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C, \u0442\u043E \u043F\u0440\u0435\u0434\u043F\u043E\u043B\u0430\u0433\u0430\u0435\u043C, \u0447\u0442\u043E data \u043F\u0440\u0438\u0448\u043B\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 time\n //? \u0412 \u044D\u0442\u043E\u043C \u0441\u043B\u0443\u0447\u0430\u0435 \u0441\u043E\u0437\u0434\u0430\u0434\u0438\u043C \u043E\u0431\u044A\u0435\u043A\u0442 \u043E\u0442 \u0442\u0435\u043A\u0443\u0449\u0435\u0439 \u0434\u0430\u0442\u044B, \u0440\u0430\u0441\u043F\u0430\u0440\u0441\u0438\u043C data \u0438 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u043C \u0432\u0440\u0435\u043C\u044F\n //? \u041A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u043E \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0430\u044E\u0442\u0441\u044F \u043F\u0430\u0442\u0442\u0435\u0440\u043D\u044B: 'HH*mm', 'HH*mm*ss', 'HH*mm*ss*\u043B\u044E\u0431\u043E\u0435_\u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E_ms', \u0433\u0434\u0435 * - \u043B\u044E\u0431\u043E\u0439 \u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C\n else if (/^\\d\\d.\\d\\d/.test(data)) {\n instance = moment();\n const symbols = data.split(\"\");\n\n const timeArr = symbols\n .reduce(\n (acc, symbol, idx) => {\n if (Number.isNaN(Number(symbol))) {\n if (acc.group) acc.result.push(acc.group);\n acc.group = \"\";\n } else acc.group = `${acc.group}${symbol}`;\n if (idx === symbols.length - 1 && acc.group)\n acc.result.push(acc.group);\n return acc;\n },\n { result: [], group: \"\" },\n )\n //? reverse \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u0438\u0441\u043A\u043B\u044E\u0447\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0434\u043B\u044F \u0442\u043E\u0433\u043E, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u0441\u043B\u0435 \u043C\u043E\u0436\u043D\u043E \u0431\u044B\u043B\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u043C\u0435\u0442\u043E\u0434 pop, \u0430 \u043D\u0435 shift,\n //? \u0442.\u043A. \u043C\u0435\u0442\u043E\u0434\u044B \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u044F/\u0438\u0437\u0432\u043B\u0435\u0447\u0435\u043D\u0438\u044F \u043E\u0442\u043D\u043E\u0441\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u043A\u043E\u043D\u0446\u0430 \u043C\u0430\u0441\u0441\u0438\u0432\u0430 \u0440\u0430\u0431\u043E\u0442\u0430\u044E\u0442 \u0431\u044B\u0441\u0442\u0440\u0435\u0435,\n //? \u0447\u0435\u043C \u0430\u043D\u0430\u043B\u043E\u0433\u0438\u0447\u043D\u044B\u0435 \u043E\u0442\u043D\u043E\u0441\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u043D\u0430\u0447\u0430\u043B\u0430 \u043C\u0430\u0441\u0441\u0438\u0432\u0430\n .result.reverse();\n\n instance.hours(Number(timeArr.pop()));\n instance.minutes(Number(timeArr.pop()));\n instance.seconds(timeArr.length ? Number(timeArr.pop()) : 0);\n instance.milliseconds(timeArr.length ? Number(timeArr.pop()) : 0);\n } else instance = moment(\"error\"); //? \u0418\u043D\u0430\u0447\u0435 \u0441\u043E\u0437\u0434\u0430\u0435\u043C \u0437\u0430\u0432\u0435\u0434\u043E\u043C\u043E \u043D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u044B\u0439 moment-\u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\n\n return instance;\n })();\n\n if (isReturnAsMomentInstance) return momentInstance;\n\n const output = momentInstance.format(outputFormat);\n return output === ERROR_VALUE ? ERROR_MESSGE : output;\n}\n\n//? \u041D\u0430\u043C\u0435\u0440\u044F\u043D\u043D\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u043C \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u043D\u0430\u0437\u043D\u0430\u0447\u0430\u044E \u0441\u0430\u043C\u044B\u0439 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E-\u043C\u0430\u043B\u0435\u043D\u044C\u043A\u0438\u0439 \u043F\u0430\u0442\u0442\u0435\u0440\u043D\nexport function transformDateOrTimeOrTogetherToFormattedLocal(\n data,\n outputFormat = \"HH:mm\",\n additional,\n) {\n const ERROR_VALUE = \"Invalid date\";\n const ERROR_MESSGE = `Invalid input data for ${outputFormat} format`;\n\n if (additional && !getIsOnlyAnObject(additional)) {\n throw new Error(\n \"Bad additional [transformDateOrTimeOrTogetherToFormattedLocal]\",\n );\n }\n\n const compositeAdditional = {\n ...(additional || {}),\n isReturnAsMomentInstance: true,\n };\n const date = transformDateOrTimeOrTogetherToFormat(\n data,\n outputFormat,\n compositeAdditional,\n );\n\n const dateWithLocale = date.add(moment().utcOffset(), \"minutes\");\n const output = dateWithLocale.format(outputFormat);\n\n return output === ERROR_VALUE ? ERROR_MESSGE : output;\n}\n\n//\u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0435\u0442 \u043E\u0431\u044C\u0435\u043A\u0442 \u0438 \u043C\u0430\u0441\u0441\u0438\u0432 \u043A\u043B\u044E\u0447\u0435\u0439 \u043E\u0431\u044C\u0435\u043A\u0442\u0430\n//\u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043E\u0431\u044C\u0435\u043A\u0442 \u0441 \u0442\u0435\u043C\u0438 \u043F\u043E\u043B\u044F\u043C\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u043D\u0435\u0442 \u0432 \u043C\u0430\u0441\u0441\u0438\u0432\u0435 \u043A\u043B\u044E\u0447\u0435\u0439\nexport const omitKeys = (obj = {}, keys = []) =>\n keys.reduce((acc, key) => {\n const { [key]: omit, ...rest } = acc;\n return rest;\n }, obj);\n\nexport const logout = () => {\n window.localStorage.removeItem(\"accessToken\");\n window.localStorage.removeItem(\"tokenExpires\");\n window.location.reload();\n};\n\nexport const getStyles = (el, prop) => {\n if (!el) return null;\n if (!prop) return window.getComputedStyle(el);\n return window.getComputedStyle(el).getPropertyValue(prop);\n};\n\nexport const getColorById = (id, colors) => {\n if (!id) return \"#FF7D00\";\n\n const idToArr = Array.from(id);\n const colorsArr = colors && colors.length > 0 ? colors : DEFAULT_COLORS;\n\n let number = idToArr.reduce((acc, item) => {\n if (Number(item)) {\n return acc + Number(item);\n }\n return acc;\n }, 0);\n\n while (number >= colorsArr.length) {\n number -= colorsArr.length;\n }\n\n return colorsArr[number];\n};\n\nexport const debounce = (fn, ms) => {\n let id = null;\n return (...args) => {\n clearTimeout(id);\n id = setTimeout(() => {\n clearTimeout(id);\n fn(...args);\n }, ms);\n };\n};\n\nexport const throttle = (fn, ms) => {\n let id = null;\n return (...args) => {\n if (id) return;\n fn(...args);\n id = setTimeout(() => {\n clearTimeout(id);\n id = null;\n }, ms);\n };\n};\n\nexport const addBitDepthPoints = (value, step = 3) => {\n //\u0441\u043E\u0434\u0435\u0440\u0436\u0438\u0442 \u043B\u0438 value \u0442\u043E\u0447\u043A\u0443\n const isFraction = value?.includes(\".\");\n\n //\u0432\u0437\u044F\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443 \u0434\u043E \u0442\u043E\u0447\u043A\u0438\n const valueBeforeDot = isFraction\n ? value?.slice(0, value?.indexOf(\".\"))\n : value;\n\n //\u0440\u0430\u0441\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0430 \u0437\u0430\u043F\u044F\u0442\u044B\u0445 \u043F\u043E\u0441\u043B\u0435 \u043A\u0430\u0436\u0434\u043E\u0439 3\u0439 \u0446\u0438\u0444\u0440\u044B \u0441 \u043A\u043E\u043D\u0446\u0430\n const intPart = valueBeforeDot\n .split(\"\")\n .reverse()\n .reduce(\n (acc, item, idx) =>\n idx % step === 0 && idx !== 0 ? [...acc, \",\", item] : [...acc, item],\n [],\n )\n .reverse()\n .join(\"\");\n\n return isFraction ? intPart + value?.slice(value?.indexOf(\".\")) : intPart;\n};\n\nexport const changeMeta = (key, items = []) => {\n const defaultMeta = items.find((i) => i.key === \"default\");\n\n if (key) {\n const item = items.find((i) => i.key === key);\n document.title = item?.title ?? defaultMeta?.title;\n document\n .querySelector('meta[name=\"description\"]')\n .setAttribute(\"content\", item?.description ?? defaultMeta?.description);\n }\n};\n\nexport const firstLetterCapital = (str) =>\n typeof str === \"string\"\n ? `${str.charAt(0).toUpperCase()}${str.slice(1)}`\n : str;\nexport const capitalized = firstLetterCapital;\n\nexport const checkedRef = (ref) =>\n ref ? (typeof ref === \"function\" ? (node) => ref(node) : ref) : null;\n\nexport function downloadEmulation(data, filename, type = \"image/*\") {\n const file = new Blob([data], { type });\n if (window.navigator.msSaveOrOpenBlob)\n // IE10+\n window.navigator.msSaveOrOpenBlob(file, filename);\n else {\n // Others\n const a = document.createElement(\"a\"),\n url = URL.createObjectURL(file);\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n setTimeout(() => {\n document.body.removeChild(a);\n window.URL.revokeObjectURL(url);\n }, 0);\n }\n}\n\nexport const downloadFile = async ({ url, name, type = null }) => {\n const response = await fetch(url).then(async (res) => ({\n data: await res.blob(),\n type: type ?? res.headers.get(\"content-type\"),\n }));\n downloadEmulation(response.data, name, response.type);\n};\n\nexport const compare = (first, second, keys = []) => {\n //? \u0415\u0441\u043B\u0438 \u0442\u0438\u043F\u044B \u041D\u0415 \u0440\u0430\u0432\u043D\u044B - \u043D\u0435 \u0440\u0430\u0432\u043D\u044B \u0430\u043F\u0440\u0438\u043E\u0440\u0438\n if (typeof first !== typeof second) return false;\n //? \u0415\u0441\u043B\u0438 \u043E\u0442\u0432\u0435\u0442\u044B \u043D\u0430 \u0432\u043E\u043F\u0440\u043E\u0441 \"\u043C\u0430\u0441\u0441\u0438\u0432 \u043B\u0438?\" \u043D\u0435 \u0440\u0430\u0432\u043D\u044B, \u0442\u043E \u043D\u0435 \u0440\u0430\u0432\u043D\u044B \u0438 \u0442\u0438\u043F\u044B, \u0437\u043D\u0430\u0447\u0438\u0442 \u0442\u043E\u0436\u0435 \u043D\u0435 \u0440\u0430\u0432\u043D\u044B \u0430\u043F\u0440\u0438\u043E\u0440\u0438\n if (Array.isArray(first) !== Array.isArray(second)) return false;\n //? \u0415\u0441\u043B\u0438 \u043F\u0440\u043E\u0448\u043B\u0438 if-\u043A\u0443 - \u0442\u0438\u043F\u044B \u0443\u0441\u043B\u043E\u0432\u043D\u043E \u0440\u0430\u0432\u043D\u044B, \u043C\u043E\u0436\u0435\u043C \u043E\u0446\u0435\u043D\u0438\u0432\u0430\u0442\u044C \u0442\u0438\u043F \u043B\u0438\u0448\u044C \u043E\u0434\u043D\u043E\u0433\u043E \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0430, \u044D\u0442\u043E \u0431\u0443\u0434\u0435\u0442 \u0441\u043F\u0440\u0430\u0432\u0435\u0434\u043B\u0438\u0432\u043E \u0438 \u0434\u043B\u044F \u0432\u0442\u043E\u0440\u043E\u0433\u043E\n\n //? \u0415\u0441\u043B\u0438 \u043F\u0440\u0438\u043C\u0438\u0442\u0438\u0432\u044B - \u043F\u0440\u043E\u0441\u0442\u043E \u0441\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u0435\u043C. \u041A\u0435\u0439\u0441 \u0441 null \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0430\u043D \u0442\u0443\u0442.\n if (!(first instanceof Object)) return first === second;\n\n //? \u0415\u0441\u043B\u0438 \u041D\u0415 \u043F\u0440\u0438\u043C\u0435\u0442\u0438\u0432\u044B - \u043D\u0435 \u0432\u0430\u0436\u043D\u043E \u043C\u0430\u0441\u0441\u0438\u0432 \u0438\u043B\u0438 \u043D\u0435\u0442, \u043C\u0435\u0442\u043E\u0434\u044B \u043E\u0431\u044A\u0435\u043A\u0442\u0430 \u0434\u043B\u044F \u043C\u0430\u0441\u0441\u0438\u0432\u0430 \u0442\u043E\u0436\u0435 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B\n\n const getComparationStructure = (data) => {\n if (typeof data === 'function') return data.toString();\n if (!(data instanceof Object)) return data;\n\n return Object.entries(data)\n .sort((a, b) => (a[0]).localeCompare(b[0]))\n .map(([key, value]) => ([key, getComparationStructure(data[key])]));\n };\n\n //? \u041F\u043E\u043B\u0443\u0447\u0430\u0435\u043C \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u044B \u0434\u043B\u044F \u0441\u0440\u0430\u0432\u043D\u0435\u043D\u0438\u044F (\u0441 \u0443\u0447\u0435\u0442\u043E\u043C \u0433\u043B\u0443\u0431\u0438\u043D\u044B) - \u043C\u0430\u0441\u0441\u0438\u0432\u044B \u043C\u0430\u0441\u0441\u0438\u0432\u043E\u0432, \u0441\u043E\u0440\u0442\u0438\u0440\u0443\u0435\u043C \u043F\u043E \u043A\u043B\u044E\u0447\u0430\u043C,\n const structureForComparingOfFirst = getComparationStructure(first);\n const structureForComparingOfSecond = getComparationStructure(second);\n\n return (JSON.stringify(structureForComparingOfFirst) === JSON.stringify(structureForComparingOfSecond));\n};\n\n// Set Carret to the End of Input\nexport const setCarretToEnd = (input) => {\n setTimeout(() => {\n const tmp = input.value;\n input.value = \"\";\n input.value = tmp;\n }, 10);\n};\n\nexport const compareAlphabetical = (a, b, key = \"label\") => {\n let item1 = a?.[key];\n let item2 = b?.[key];\n\n if (typeof item1 !== \"string\" || typeof item2 !== \"string\") return 0;\n\n item1 = item1?.toLowerCase();\n item2 = item2?.toLowerCase();\n\n if (item1 < item2) {\n return -1;\n }\n if (item1 > item2) {\n return 1;\n }\n return 0;\n};\n\nexport const getBase64 = (file) => {\n if (file) {\n return new Promise(function (resolve, reject) {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result);\n reader.onerror = (error) => reject(\"Error: \", error);\n });\n }\n};\n\nexport const renderFileSize = (bytes, decimals = 2) => {\n if (!Number(bytes)) return \"0 Bytes\";\n\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\"];\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;\n};\n\nexport const getUniqueFileExtensions = (extListString) => {\n // Split the extensions list into an array\n const extArray = extListString\n ?.split(\",\")\n .map((ext) => ext.trim().toUpperCase());\n\n // Remove duplicates using a Set\n const uniqueExts = [...new Set(extArray)];\n\n // Join the unique extensions into a string\n return uniqueExts.join(\", \");\n};\n\nexport const getOS = () => {\n let userAgent = window.navigator.userAgent,\n platform =\n window.navigator?.userAgentData?.platform || window.navigator.platform,\n macosPlatforms = [\"Macintosh\", \"MacIntel\", \"MacPPC\", \"Mac68K\"],\n windowsPlatforms = [\"Win32\", \"Win64\", \"Windows\", \"WinCE\"],\n iosPlatforms = [\"iPhone\", \"iPad\", \"iPod\"],\n os = OS.Unknown;\n\n if (macosPlatforms.indexOf(platform) !== -1) {\n os = OS.MacOS;\n } else if (iosPlatforms.indexOf(platform) !== -1) {\n os = OS.iOS;\n } else if (windowsPlatforms.indexOf(platform) !== -1) {\n os = OS.Windows;\n } else if (/Android/.test(userAgent)) {\n os = OS.Android;\n } else if (/Linux/.test(platform)) {\n os = OS.Linux;\n }\n\n return os;\n};\n\n\nString.prototype.longerThan = function (compareWith) {\n return this?.length > compareWith?.length;\n};\nString.prototype.lastIndexEqualsTo = function (index) {\n return this?.length - 1 === index;\n};\n\nexport const getCorrectTestId = ({ testId = \"\", withTier = true }) =>\n testId && testId !== undefined ? `${withTier ? \"-\" : \"\"}${testId}` : \"\";\n\n\n", "import { getIsOnlyAnObject } from \"./utils\";\n\n//? The first word \"format\" in the function name means a logic\n//? in which the function transforms the incoming value in any case.\n\n//? The first word \"transform\" in the function name means a logic\n//? in which the function converts the whole value, but this is not suitable for sequential input\n\n//? The first word \"filter\" in the function name means a logic\n//? in which the function works as a changer for sequential input\n\n// ****************************\n// Base utils\n// ****************************\n\nexport const getSafelyValue = (value) =>\n value !== undefined && value !== null ? value?.toString?.() || \"\" : \"\";\n\n// \u0431\u0430\u0437\u043E\u0432\u0430\u044F \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F\nexport const intlNumbersFormatter = (inputValue, settings = {}) => {\n const safelyInputValue = getSafelyValue(inputValue);\n const previousValue = safelyInputValue.slice(0, -1);\n const lastSym = safelyInputValue.slice(-1);\n const value = lastSym === \".\" ? previousValue : safelyInputValue;\n\n if (Number.isNaN(Number(value)) || !getSafelyValue(value)) return \"\";\n\n const {\n // \u043B\u043E\u043A\u0430\u043B\u044C, \u0434\u0430\u0436\u0435 \u0440\u0435\u0433\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u0430\u044F, \u0432\u043B\u0438\u044F\u0435\u0442 \u043D\u0430 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u0437\u043D\u0430\u043A\u043E\u0432 \u0438 \u0444\u043E\u0440\u043C\u0430\u0442\u0430.\n locale = \"en-US\",\n // percent || currency(default case) || decimal(\u043F\u0440\u043E\u0441\u0442\u043E \u0447\u0438\u0441\u043B\u043E) \u0432\u043B\u0438\u044F\u0435\u0442 \u043D\u0430 \u0422\u0418\u041F \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438.\n withSymbol,\n //\u0433\u0440\u0443\u043F\u043F\u0438\u0440\u043E\u0432\u043A\u0430 \u0437\u0430\u043F\u044F\u0442\u044B\u043C\u0438 \u043F\u043E\u0440\u0430\u0437\u0440\u044F\u0434\u043D\u043E.\n useGrouping = true,\n //!!\u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u0440\u0438 withSymbol: 'currency' !! \u0432\u043B\u0438\u044F\u0435\u0442 \u043D\u0430 \u0442\u043E, \u043A\u0430\u043A \u0438\u043C\u0435\u043D\u043D\u043E \u0431\u0443\u0434\u0435\u0442 \u0432\u044B\u0433\u043B\u044F\u0434\u0435\u0442 \u0444\u043E\u0440\u043C\u0430\u0442 \u0432\u0430\u043B\u044E\u0442\u044B.\n currency = {},\n //\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0437\u043D\u0430\u043A\u043E\u0432 \u043F\u043E\u0441\u043B\u0435 \u0442\u043E\u0447\u043A\u0438, \u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043B\u0438 \u043E\u043D\u0438 \u0431\u0443\u0434\u0443\u0442.\n // !!\u0435\u0441\u043B\u0438 \u043F\u043E\u0441\u0442\u0430\u0432\u0438\u0442\u044C isAlwaysRender: true, \u043D\u043E \u043D\u0435 \u0434\u0430\u0442\u044C \u0446\u0435\u043D\u0442\u043E\u0432, \u0442\u043E \u0431\u0443\u0434\u0435\u0442 100.00\n fractionDigits = {},\n } = settings;\n\n const { currencyType = \"USD\", currencyDisplay: inputCurrencyDisplay } =\n currency;\n\n let currencyDisplay;\n switch (inputCurrencyDisplay) {\n case \"name\":\n currencyDisplay = \"name\";\n break;\n case \"code\":\n currencyDisplay = \"code\";\n break;\n case \"narrowSymbol\":\n currencyDisplay = \"narrowSymbol\";\n break;\n default:\n currencyDisplay = \"symbol\";\n }\n\n let numberStyle;\n switch (withSymbol) {\n case \"percent\":\n numberStyle = \"percent\";\n break;\n case \"currency\":\n numberStyle = \"currency\";\n break;\n default:\n numberStyle = \"decimal\";\n break;\n }\n\n const {\n quantity,\n isRenderAlways = false,\n minimumFractionDigits: inputMinimumFractionDigits,\n maximumFractionDigits: inputMaximumFractionDigits,\n conditionallyMinimumFractionDigits,\n } = fractionDigits;\n\n const dotIndex = safelyInputValue?.indexOf(\".\");\n const afterDot = dotIndex !== -1 ? safelyInputValue.slice(dotIndex + 1) : \"\";\n const minimumFractionDigits = (() => {\n //? \u0411\u0435\u0437\u0443\u0441\u043B\u043E\u0432\u043D\u043E\u0435 \u043C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E. \u0412\u0441\u0435\u0433\u0434\u0430 \u043E\u0442\u0440\u0435\u043D\u0434\u0435\u0440\u0438\u0442 \u0434\u0440\u043E\u0431\u043D\u0443\u044E \u0447\u0430\u0441\u0442\u044C, \u0432 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0443\u043A\u0430\u0437\u0430\u043D\u043E\n if (typeof inputMinimumFractionDigits === \"number\")\n return inputMinimumFractionDigits;\n //? \u0423\u0441\u043B\u043E\u0432\u043D\u043E\u0435 \u043C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E. \u0415\u0441\u043B\u0438 \u0435\u0441\u0442\u044C \u0434\u0440\u043E\u0431\u043D\u0430\u044F \u0447\u0430\u0441\u0442\u044C, \u0442\u043E \u043E\u0442\u0440\u0435\u043D\u0434\u0435\u0440\u0438\u0442 \u0434\u0440\u043E\u0431\u043D\u044B\u0445 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0443\u043A\u0430\u0437\u0430\u043D\u043E\n if (typeof conditionallyMinimumFractionDigits === \"number\") {\n return afterDot && lastSym !== \".\"\n ? conditionallyMinimumFractionDigits\n : 0;\n }\n //? \u0414\u0435\u0444\u043E\u043B\u0442\u043D\u043E\u0435 \u043C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E. \u0415\u0441\u043B\u0438 \u0435\u0441\u0442\u044C \u0434\u0440\u043E\u0431\u043D\u0430\u044F \u0447\u0430\u0441\u0442\u044C, \u0442\u043E \u043E\u0442\u0440\u0435\u043D\u0434\u0435\u0440\u0438\u0442 \u0434\u0440\u043E\u0431\u043D\u044B\u0445 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0441\u0442\u043E\u043B\u044C\u043A\u043E, \u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0435\u0441\u0442\u044C\n //? \u0424\u043B\u0430\u0433 isRenderAlways \u043F\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0434\u0435\u0444\u043E\u043B\u0442\u043D\u044B\u0439 \u043A\u0435\u0439\u0441 \u0432 \u0431\u0435\u0437\u0443\u0441\u043B\u043E\u0432\u043D\u043E\u0435 \u043C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E\n return afterDot && lastSym !== \".\"\n ? safelyInputValue.slice(dotIndex).length - 1\n : isRenderAlways\n ? quantity\n : 0;\n })();\n\n const priceSettings = {\n useGrouping, //\u0433\u0440\u0443\u043F\u043F\u0438\u0440\u043E\u0432\u043A\u0430 \u0440\u0430\u0437\u0440\u044F\u0434\u043E\u0432\n style: numberStyle, //\u0442\u0438\u043F \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F (\u0432\u0430\u043B\u044E\u0442\u0430 \u0438\u043B\u0438 \u0447\u0438\u0441\u043B\u043E). decimal - \u0431\u0435\u0437 \u0437\u043D\u0430\u043A\u0430 \u0432\u0430\u043B\u044E\u0442\u044B\n currency: currencyType, //\u0432\u0430\u043B\u044E\u0442\u0430\n currencyDisplay, //\u0432\u0430\u043B\u044E\u0442\u0430 \u0432 \u0432\u0438\u0434\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u0430\n //\u043C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u043E \u043D\u0435 \u043D\u0430\u0434\u043E \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u0446\u0435\u043D\u0442\u044B, \u0435\u0441\u043B\u0438 \u0438\u0445 \u043D\u0435\u0442, \u0438\u043D\u0430\u0447\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 .00\n minimumFractionDigits,\n //! \u0412\u0430\u0436\u043D\u043E! \u0415\u0441\u043B\u0438 \u043F\u0440\u0438\u0434\u0435\u0442 \u0432\u0435\u043B\u044C\u044E \u0441 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E\u043C \u0434\u0440\u043E\u0431\u043D\u044B\u0445 \u0440\u0430\u0437\u0440\u044F\u0434\u043E\u0432 \u0411\u041E\u041B\u042C\u0428\u0418\u041C\n //! \u0447\u0435\u043C \u0443\u043A\u0430\u0437\u0430\u043D\u043E \u0432 (inputMaximumFractionDigits ?? quantity) - \u043E\u043A\u0440\u0443\u0433\u043B\u0438\u0442 \u043F\u043E \u043F\u0440\u0430\u0432\u0438\u043B\u0430\u043C \u043E\u043A\u0440\u0443\u0433\u043B\u0435\u043D\u0438\u044F\n //\u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u043E \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C 2 \u0446\u0438\u0444\u0440\u044B \u043F\u043E\u0441\u043B\u0435 \u0437\u0430\u043F\u044F\u0442\u043E\u0439, \u0435\u0441\u043B\u0438 \u0446\u0435\u043D\u0442\u044B \u0432\u0441\u0451 \u0436\u0435 \u0435\u0441\u0442\u044C\n maximumFractionDigits: inputMaximumFractionDigits ?? quantity,\n };\n\n let output;\n\n try {\n output = new Intl.NumberFormat(locale, priceSettings).format(value);\n } catch (e) {\n output = value;\n // eslint-disable-next-line no-console\n console.warn(\"Intl.NumberFormat error\", e);\n }\n return lastSym === \".\" ? output + lastSym : output;\n};\n\n// ****************************\n// format\n// ****************************\n\nexport const formatOnlyNumbers = (value) =>\n getSafelyValue(value).replace(/\\D/g, \"\");\nexport const formatToRemoveComa = (value) =>\n getSafelyValue(value).replace(/,/g, \"\");\nexport const formatToAddBitDepthPoints = (value, settings) =>\n intlNumbersFormatter(getSafelyValue(value), {\n fractionDigits: {\n quantity: settings?.type === \"int\" ? 0 : settings?.decimalPlaces,\n },\n });\n\n//! \u0412\u0430\u0436\u043D\u043E! \u0415\u0441\u043B\u0438 \u043F\u0440\u0438\u0434\u0435\u0442 \u0432\u0435\u043B\u044C\u044E \u0441 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E\u043C \u0434\u0440\u043E\u0431\u043D\u044B\u0445 \u0440\u0430\u0437\u0440\u044F\u0434\u043E\u0432 \u0411\u041E\u041B\u042C\u0428\u0418\u041C\n//! \u0447\u0435\u043C \u0443\u043A\u0430\u0437\u0430\u043D\u043E \u0432 quantity - \u043E\u043A\u0440\u0443\u0433\u043B\u0438\u0442 \u043F\u043E \u043F\u0440\u0430\u0432\u0438\u043B\u0430\u043C \u043E\u043A\u0440\u0443\u0433\u043B\u0435\u043D\u0438\u044F\nexport const formatToPriceWithUSD = (value) => {\n if (isNaN(Number(value))) return value;\n return intlNumbersFormatter(getSafelyValue(value), {\n withSymbol: \"currency\",\n currency: { currencyType: \"USD\" },\n fractionDigits: { quantity: 2, conditionallyMinimumFractionDigits: 2 },\n });\n};\n\n//! \u0412\u0430\u0436\u043D\u043E! \u0415\u0441\u043B\u0438 \u043F\u0440\u0438\u0434\u0435\u0442 \u0432\u0435\u043B\u044C\u044E \u0441 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E\u043C \u0434\u0440\u043E\u0431\u043D\u044B\u0445 \u0440\u0430\u0437\u0440\u044F\u0434\u043E\u0432 \u0411\u041E\u041B\u042C\u0428\u0418\u041C\n//! \u0447\u0435\u043C \u0443\u043A\u0430\u0437\u0430\u043D\u043E \u0432 quantity - \u043E\u043A\u0440\u0443\u0433\u043B\u0438\u0442 \u043F\u043E \u043F\u0440\u0430\u0432\u0438\u043B\u0430\u043C \u043E\u043A\u0440\u0443\u0433\u043B\u0435\u043D\u0438\u044F\n\n// ToDo - symbolPosition \u0432\u0440\u0435\u043C\u0435\u043D\u043D\u043E \u043D\u0435 \u0440\u0435\u0430\u043B\u0438\u0437\u043E\u0432\u0430\u043D\u043E\nexport const formatToPriceWithCurrency = (\n value,\n currencyCode,\n symbolPosition = \"before\",\n) => {\n if (isNaN(Number(value))) return value;\n return intlNumbersFormatter(getSafelyValue(value), {\n withSymbol: \"currency\",\n currency: { currencyType: currencyCode },\n fractionDigits: { quantity: 2, conditionallyMinimumFractionDigits: 2 },\n });\n};\n\n//? \u0414\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u0442 \u0432 \u043A\u043E\u043D\u0435\u0446 \u0437\u043D\u0430\u043A %. \u0420\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u043A\u0430\u043A \u0441 \u043E\u0434\u0438\u043D\u043E\u0447\u043D\u044B\u043C\u0438 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F\u043C\u0438, \u0442\u0430\u043A \u0438 \u0441 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\u0430\u043C\u0438.\n\n//? value \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043B\u044E\u0431\u043E\u0435, \u043D\u043E \u043E\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044F \u0447\u0442\u043E \u0431\u0443\u0434\u0435\u0442\n//? - \u0447\u0438\u0441\u043B\u043E\u043C\n//? - \u0441\u0442\u0440\u043E\u043A\u043E\u0439 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 \"\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\"\n//? - \u0441\u0442\u0440\u043E\u043A\u043E\u0439 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 \"\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 - \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\" (\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435_\u043F\u0440\u043E\u0431\u0435\u043B_\u0442\u0438\u0440\u0435_\u043F\u0440\u043E\u0431\u0435\u043B_\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435)\n//? - \u043E\u0431\u044A\u0435\u043A\u0442 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 { from: \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435, to: \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 }\n\n//? \u041F\u0440\u0435\u0434\u043F\u043E\u043B\u0430\u0433\u0430\u0435\u0442\u0441\u044F, \u0447\u0442\u043E \"\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\" \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043F\u0440\u0438\u0432\u0435\u0434\u0435\u043D\u043E \u043A \u0447\u0438\u0441\u043B\u0443 \u043E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u043C + (\u043F\u0440\u0438\u043C\u0435\u0440: +\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u043F\u0440\u0438\u0432\u043E\u0434\u0438\u0442\u0441\u044F \u043A \u0447\u0438\u0441\u043B\u0443).\n//? \u0415\u0441\u043B\u0438 \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043F\u0440\u0438\u0432\u0435\u0434\u0435\u043D\u043E, \u0442\u043E \"\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\" \u0432\u0435\u0440\u043D\u0435\u0442\u0441\u044F \u043A\u0430\u043A \u0435\u0441\u0442\u044C, \u043A \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0443 \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u0441\u044F %\n\n//? \u0415\u0441\u043B\u0438 \"\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\" \u043F\u0443\u0441\u0442\u043E\u0435 (getSafelyValue(\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435) \u0432\u0435\u0440\u043D\u0435\u0442 \u043F\u0443\u0441\u0442\u0443\u044E \u0441\u0442\u0440\u043E\u043A\u0443),\n//? \u0442\u043E \u044D\u0442\u043E \u0432\u043E\u0441\u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0435\u0442\u0441\u044F \u043A\u0430\u043A 0, \u043F\u0440\u0438\u0432\u043E\u0434\u0438\u0442\u0441\u044F \u043A 0.00%\n\n//? \u041E\u0434\u0438\u043D\u043E\u043A\u043E\u0432\u043E \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u043A\u0430\u043A \u0434\u043B\u044F \".\", \u0442\u0430\u043A \u0438 \",\" \u0432 \u043A\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044F \u0434\u0440\u043E\u0431\u043D\u044B\u0445 \u0440\u0430\u0437\u0440\u044F\u0434\u043E\u0432\n\n//! \u0412\u0430\u0436\u043D\u043E! \u0415\u0441\u043B\u0438 \u043F\u0440\u0438\u0434\u0435\u0442 \u0432\u0435\u043B\u044C\u044E \u0441 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E\u043C \u0434\u0440\u043E\u0431\u043D\u044B\u0445 \u0440\u0430\u0437\u0440\u044F\u0434\u043E\u0432 \u0411\u041E\u041B\u042C\u0428\u0418\u041C\n//! \u0447\u0435\u043C \u0443\u043A\u0430\u0437\u0430\u043D\u043E \u0432 decimalPlaces - \u043E\u043A\u0440\u0443\u0433\u043B\u0438\u0442 \u043F\u043E \u043F\u0440\u0430\u0432\u0438\u043B\u0430\u043C \u043E\u043A\u0440\u0443\u0433\u043B\u0435\u043D\u0438\u044F\n\nexport const formatAsPercentage = (value, settings) => {\n const {\n isCommonPercentageSymbol = true,\n decimalPlaces = 2,\n beforeValueSymbol = \"\",\n afterValueSymbol = \"\",\n isGlueSameRangesTogether = false,\n\n // ? \u0422\u0443\u0442 \u0443\u0434\u043E\u0431\u043D\u044B\u0439 \u0444-\u043B, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u0438\u043D\u043E\u0439 \u0440\u0430\u0437 \u0443\u0434\u043E\u0431\u043D\u043E \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0430\u0442\u044C \u043E\u0431\u044B\u0447\u043D\u044B\u0439 \u0434\u0438\u0430\u043F\u0430\u0437\u0430\u043D (\u041D\u0415 \u043F\u0440\u043E\u0446\u0435\u043D\u0442\u044B).\n // ? \u0414\u043E\u0431\u0430\u0432\u0438\u043B \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u044C \u0432\u044B\u043F\u0438\u043B\u0438\u0432\u0430\u0442\u044C \u0437\u043D\u0430\u0447\u0435\u043A \u043F\u0440\u043E\u0446\u0435\u043D\u0442\u043E\u0432.\n // todo(VL) - \u0432\u043E\u043E\u0431\u0449\u0435 \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u043E \u0437\u0430\u0440\u0435\u043D\u0435\u0439\u043C\u0438\u0442\u044C (formatAsDiapason), \u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u043F\u0440\u043E\u0446\u0435\u043D\u0442\u043E\u0432 \u0441\u0434\u0435\u043B\u0430\u0442\u044C \u043A\u0430\u043A \u043E\u043F\u0446\u0438\u044E,\n // todo(VL) - \u043D\u043E \u043A\u0430\u043A \u043E\u0431\u044B\u0447\u043D\u043E \u043D\u0435\u0442 \u0432\u0440\u0435\u043C\u0435\u043D\u0438, \u043D\u0443\u0436\u043D\u043E \u0431\u0443\u0434\u0435\u0442 \u043F\u0435\u0440\u0435\u0447\u0435\u043A\u0430\u0442\u044C \u043F\u043E \u0432\u0441\u0435\u043C \u043F\u0440\u043E\u0435\u043A\u0442\u0430\u043C \u0433\u0434\u0435 \u0442\u044F\u043D\u0435\u0442\u0441\u044F \u0441\u043E \u0441\u0442\u0430\u0440\u044B\u043C \u043D\u0435\u0439\u043C\u0438\u043D\u0433\u043E\u043C\n isUseAsSimpleDiapason = false,\n } = getIsOnlyAnObject(settings) ? settings : {};\n let safelyInputValue;\n\n const checkValue = (value) => getSafelyValue(value) || \"0\";\n\n const transform = (valueAsSting) => {\n const processedValue = valueAsSting.replace(/,/g, \".\");\n if (Number.isNaN(Number(processedValue))) return processedValue;\n return `${intlNumbersFormatter(getSafelyValue(Number(processedValue)), {\n fractionDigits: {\n quantity: decimalPlaces,\n minimumFractionDigits: decimalPlaces,\n },\n })}`;\n };\n\n if (getIsOnlyAnObject(value)) {\n safelyInputValue = {\n from: checkValue(value.from),\n to: checkValue(value.to),\n };\n } else {\n safelyInputValue = checkValue(value);\n\n if (safelyInputValue.includes(\" - \")) {\n const valuesArr = safelyInputValue\n .split(\" - \")\n .map((partOfValue) => partOfValue.trim());\n safelyInputValue = {\n from: checkValue(valuesArr[0]),\n to: checkValue(valuesArr[1]),\n };\n } else {\n // \u0412\u0430\u0440\u0438\u0430\u043D\u0442 \u043A\u043E\u0433\u0434\u0430 \u0432\u0435\u043B\u044C\u044E \u043F\u0435\u0440\u0435\u0434\u0430\u043D\u043E \u0441\u0442\u0440\u043E\u043A\u043E\u0439 (\u041D\u0415 \u043E\u0431\u044A\u0435\u043A\u0442\u043E\u043C) \u0438 \u043E\u043D\u043E \u043D\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0435\u043F\u0430\u0440\u0430\u0442\u043E\u0440\u0430 \" - \"\n // - \u043E\u0434\u0438\u043D\u043E\u0447\u043D\u044B\u0435 \u0432\u0435\u043B\u044C\u044E\n // - \u043D\u0435\u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u044B\u0439 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\n return `${beforeValueSymbol}${transform(safelyInputValue)}${afterValueSymbol}${isUseAsSimpleDiapason ? '' : '%'}`;\n }\n }\n\n if (safelyInputValue.from === safelyInputValue.to && !!isGlueSameRangesTogether) {\n return `${beforeValueSymbol}${transform(safelyInputValue.from)}${afterValueSymbol}${isUseAsSimpleDiapason ? '' : '%'}`;\n }\n\n if (isCommonPercentageSymbol)\n return `${beforeValueSymbol}${transform(safelyInputValue.from)} - ${transform(\n safelyInputValue.to,\n )}${afterValueSymbol}${isUseAsSimpleDiapason ? '' : '%'}`;\n else\n return `${beforeValueSymbol}${transform(safelyInputValue.from)}${isUseAsSimpleDiapason ? '' : '%'} - ${transform(\n safelyInputValue.to,\n )}${isUseAsSimpleDiapason ? '' : '%'}${afterValueSymbol}`;\n};\n\n// eslint-disable-next-line no-control-regex\nexport const formatToOnlyASCIICodeText = (text) =>\n getSafelyValue(text).replace(/[^\\x00-\\x7F]+/g, \"\");\n\n// eslint-disable-next-line default-param-last\nexport const formatNumberValueToMask = (inputValue, settings) => {\n const safelyInputValue = getSafelyValue(inputValue);\n\n // default valueSymbol === 'n', default mask === 'nnn-nnn-nnnn'\n const {\n mask = \"XXX-XXX-XXXX\",\n valueSymbol = \"X\",\n isReturnAdvanced = false,\n } = settings || {};\n const processing = mask.split(\"\").reduce(\n (acc, item) => {\n if (acc.value.length) ++acc.cursorPosition;\n acc.newValue.push(\n item === valueSymbol && acc.value.length ? acc.value.shift() : item,\n );\n return acc;\n },\n {\n value: safelyInputValue.split(\"\").filter((sym) => /[0-9]/g.test(sym)),\n newValue: [],\n cursorPosition: 0,\n },\n );\n\n return isReturnAdvanced\n ? {\n value: processing.newValue.join(\"\"),\n cursorPosition: processing.cursorPosition,\n }\n : processing.newValue.join(\"\");\n};\n\nexport const formatToLimitLength = (inputValue, limit) => {\n const value = getSafelyValue(inputValue);\n return limit &&\n typeof limit === \"number\" &&\n !Number.isNaN(limit) &&\n value?.length > limit\n ? value.substr(0, limit)\n : value;\n};\n\nexport const formatToHex = ({ inputValue, withSharp }) => {\n const value = getSafelyValue(inputValue);\n if (withSharp) return `#${value.replace(/[^a-f0-9]/gi, \"\")}`;\n\n return `${value.replace(/[^#a-f0-9]/gi, \"\")}`;\n};\n\nexport function formatToReplaceAllWhiteSpace(str) {\n const value = getSafelyValue(str);\n return value.replace(/\\s+/g, \"\");\n}\n\n// ****************************\n// transform\n// ****************************\n\n// ...\n\n// ****************************\n// filter\n// ****************************\n//? \u041D\u0430\u043C\u0435\u0440\u044F\u043D\u043D\u043E \u0432\u044B\u043F\u0438\u043B\u0438\u043B \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435 \u0434\u0435\u0444\u043E\u043B\u0442\u043D\u043E\u0433\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u043D\u0430 \u0443\u0440\u043E\u0432\u043D\u0435 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432, \u0447\u0442\u043E\u0431\u044B \u0441\u0434\u0435\u043B\u0430\u0442\u044C null \u0440\u0430\u0431\u043E\u0447\u0438\u043C \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u043C\n//? decimalPlaces === null \u0442\u0435\u043F\u0435\u0440\u044C \u0442\u043E\u0447\u043D\u043E \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442 \u0440\u0435\u0436\u0438\u043C \u0432\u0432\u043E\u0434\u0430 \u0411\u0415\u0417 \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0435\u0439 \u0434\u0435\u0441\u044F\u0442\u0438\u0447\u043D\u044B\u0445 \u0437\u043D\u0430\u043A\u043E\u0432\nexport const filterFloat = (inputValue, decimalPlaces) => {\n const replaser = input => ('' + input).replace(/[^\\.\\d]/g, '');\n const value = getSafelyValue(inputValue);\n \n //? safelyDecimalPlaces \u0422\u041E\u0427\u041D\u041E \u043B\u0438\u0431\u043E null, \u043B\u0438\u0431\u043E \u0446\u0435\u043B\u043E\u0435 \u0447\u0438\u0441\u043B\u043E\n const safelyDecimalPlaces = (() => {\n if (decimalPlaces === null) return decimalPlaces;\n\n const DEFAULT_VALUE = 2;\n const isNumber = typeof decimalPlaces === 'number' || (typeof decimalPlaces === 'string' && !Number.isNaN(+decimalPlaces));\n\n //? \u0437\u0430\u0449\u0438\u0442\u0430 \u043E\u0442 \u0434\u0440\u043E\u0431\u043D\u043E\u0433\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F decimalPlaces\n return isNumber ? Number((+decimalPlaces).toFixed()) : DEFAULT_VALUE;\n })();\n\n // \u041E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430 \u043A\u0435\u0439\u0441\u0430 \u0435\u0441\u043B\u0438 \u043F\u0435\u0440\u0432\u044B\u043C \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u043C \u043D\u0430\u0436\u0430\u0442\u0430 \u0442\u043E\u0447\u043A\u0430\n if (value.length === 1 && (value[0] === '.' || value[0] === ',')) return '0.';\n\n // \u041F\u0440\u0438\u0432\u043E\u0434\u0438\u043C \u0437\u0430\u043F\u044F\u0442\u044B\u0435 \u043A \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u043E\u043C\u0443 \u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044E, \u043D\u043E \u043D\u0435 \u0432\u044B\u043F\u0438\u043B\u0438\u0432\u0430\u0435\u043C\n let output = ('' + value)?.replace(/,/g, '.');\n\n // \u0412\u044B\u043F\u0438\u043B\u0438\u0442\u044C \u043F\u0435\u0440\u0432\u044B\u0439 \u043D\u043E\u043B\u044C, \u0435\u0441\u043B\u0438 \u044D\u0442\u043E \u043D\u0435 \u0434\u0440\u043E\u0431\u044C\n if (value.length > 1 && value[0] === '0' && value[1] !== '.' && value[0] !== ',') output = value.slice(1);\n\n const previousValue = '' + output.slice(0, -1);\n const lastSym = '' + output.slice(-1);\n\n // \u041E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430 \u043A\u0435\u0439\u0441\u0430 \u0432\u0442\u043E\u0440\u043E\u0439 \u0442\u043E\u0447\u043A\u0438 \u0432 \u0434\u0440\u043E\u0431\u0438\n if (lastSym === '.' && previousValue.includes('.')) output = previousValue;\n\n // if (localStorage.getItem('useDeb')) debugger;\n\n // \u041B\u043E\u0433\u0438\u043A\u0430 \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0435\u043D\u0438\u044F \u043F\u043E decimalPlaces\n if (typeof safelyDecimalPlaces === 'number') {\n if (!safelyDecimalPlaces && lastSym === '.') return replaser(previousValue);\n if (previousValue.includes('.') && (previousValue.indexOf('.') + 1 + safelyDecimalPlaces === previousValue?.length)) {\n return replaser(previousValue);\n }\n }\n\n return replaser(output);\n};\n\nexport const filterNumeric = (value, settings) => {\n value = getSafelyValue(value)?.replace(/,/g, \"\");\n const { type = \"float\", decimalPlaces } = settings || {};\n\n const executor = type === \"float\" ? filterFloat : formatOnlyNumbers;\n return executor(getSafelyValue(value), decimalPlaces);\n};\n\nexport const formatToHideValuePartially = (value, settings) => {\n const {\n showSymbolsCount = 4,\n isVisibleFromFront = false,\n isCutOutWhiteSpaces = true,\n } = settings || {};\n const safelyValue = getSafelyValue(value);\n\n const newValue = isCutOutWhiteSpaces\n ? safelyValue.replace(/\\s/g, \"\")\n : safelyValue;\n if (newValue.length <= showSymbolsCount) return newValue;\n\n const hide = (val) =>\n val\n .split(\"\")\n .map(() => \"*\")\n .join(\"\");\n const visiblePart = isVisibleFromFront\n ? newValue.slice(0, showSymbolsCount)\n : newValue.slice(-1 * showSymbolsCount);\n const hiddenPart = isVisibleFromFront\n ? newValue.slice(showSymbolsCount)\n : newValue.slice(0, -1 * showSymbolsCount);\n\n return isVisibleFromFront\n ? `${visiblePart}${hide(hiddenPart)}`\n : `${hide(hiddenPart)}${visiblePart}`;\n};\n", "import React, { useEffect, useState } from 'react';\nimport { getIsOnlyAnObject, clone } from '../utils';\n\nconst timeouts = { timeoutId: null };\nconst formChanges = [];\nconst DELAY_TIME = 1;\n\n// ? validateField - \u0434\u043E\u043B\u0436\u0435\u043D \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044C \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0443 { field, isValid }\nfunction useFormFieldsChangesManager({ form, setForm, callback, validateField, settings }) {\n const { isNotSetForm, isUseValidation = false } = settings || {};\n\n //? \u041F\u0440\u043E\u0431\u043E\u0432\u0430\u043B \u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043F\u0440\u043E\u0441\u0442\u043E useEffect \u043F\u043E formChangesRef.current,\n //? \u043D\u043E \u043F\u043E \u043A\u0430\u043A\u043E\u0439-\u0442\u043E \u043F\u0440\u0438\u0447\u0438\u043D\u0435 \u043F\u043E\u0441\u043B\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0438 \u0440\u0435\u0444\u043A\u0438 \u043D\u0435 \u0437\u0430\u0445\u043E\u0434\u0438\u043B\u043E \u0432 useEffect.\n //? \u041E\u0434\u043D\u0430\u043A\u043E \u0435\u0441\u043B\u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u043B useEffect \u043F\u043E \u043A\u0430\u043A\u043E\u0439-\u043D\u0438\u0431\u0443\u0434\u044C \u0434\u0440\u0443\u0433\u043E\u0439 \u043F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u043E\u0439,\n //? \u0442\u043E \u0438 \u0432 useEffect \u043F\u043E formChangesRef.current \u0442\u043E\u0436\u0435 \u0437\u0430\u0445\u043E\u0434\u0438\u043B\u043E.\n //? \u041F\u043E\u044D\u0442\u043E\u043C\u0443 \u0442\u0443\u0442 \u043D\u0443\u0436\u0435\u043D \u044D\u0442\u043E\u0442 \u0441\u0442\u0435\u0439\u0442,\n //? \u0445\u043E\u0442\u044F \u043F\u043E \u0438\u0442\u043E\u0433\u0443 \u0432 \u043A\u043E\u043D\u0435\u0447\u043D\u043E\u0439 \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u043D\u0438\u043C \u0434\u0430\u0436\u0435 \u043D\u0435\u043F\u043B\u043E\u0445\u043E \u043F\u043E\u043B\u0443\u0447\u0438\u043B\u043E\u0441\u044C (\u043D\u043E \u0432\u043E\u043E\u0431\u0449\u0435 \u043E\u0447\u0435\u043D\u044C \u0441\u0442\u0440\u0430\u043D\u043D\u0430\u044F \u0435\u0440\u0443\u043D\u0434\u0430...)\n const [isFormMustBeChanget, setIsFormMustBeChanget] = useState(false);\n const startChangesProcessing = () => {\n // ? \u0421 \u0443\u0447\u0435\u0442\u043E\u043C \u0442\u043E\u0433\u043E \u0447\u0442\u043E changeForm \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u0430\u044F, \u0442\u043E \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0430\u0435\u043C \u043F\u043E\u043F\u044B\u0442\u043A\u0438 \u0438\u0437-\u0432\u043D\u0435 \u043F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0444\u043B\u0430\u0433 \u0435\u0441\u043B\u0438 \u0444\u043B\u0430\u0433 \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\n if (isFormMustBeChanget) return;\n // ? \u041D\u0443 \u0438 \u043F\u043E \u0441\u0443\u0442\u0438 - \u0432\u044B\u043A\u043B\u044E\u0447\u0430\u0442\u044C \u0430\u043F\u0440\u0438\u043E\u0440\u0438 \u043D\u0435 \u0434\u0430\u0435\u043C, \u0442\u043E\u043B\u044C\u043A\u043E \u0432\u043A\u043B\u044E\u0447\u0430\u0442\u044C.\n setIsFormMustBeChanget(true);\n };\n\n //? \u0424-\u044F \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0444-\u0435\u0439 - \u043F\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0449\u0438\u043A\u043E\u043C \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0444\u043E\u0440\u043C\u044B \u0432 \u043E\u0447\u0435\u0440\u0435\u0434\u044C.\n //? \u0424-\u044F \u043F\u043E\u043B\u0443\u0447\u0430\u0435\u0442\u0441\u044F \u0441\u0430\u043C\u043E\u0432\u044B\u0437\u044B\u0432\u0430\u044E\u0449\u0438\u043C\u0441\u044F \u0433\u0435\u0442\u0442\u0435\u0440\u043E\u043C.\n //? C\u0443\u0442\u044C \u0444-\u0438\u0438:\n //? \u0414\u043B\u044F \u0442\u043E\u0433\u043E \u0447\u0442\u043E\u0431 \u043D\u0435 \u0441\u043F\u0430\u043C\u0438\u0442\u044C \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\u043C\u0438, \u0435\u0441\u043B\u0438 \u0438\u0445 \u043D\u0430\u0437\u043D\u0430\u0447\u0430\u0435\u0442\u0441\u044F \u043C\u043D\u043E\u0433\u043E \u0432 \u0440\u0430\u043C\u043A\u0430\u0445 \u043E\u0434\u043D\u043E\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438,\n //? \u0438\u043F\u043E\u043B\u044C\u0437\u0443\u044E \u043F\u0440\u0438\u0435\u043C \u0441 \u043F\u0435\u0440\u0435\u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u043C setTimeout\n\n //? \u0427\u0442\u043E\u0431\u044B \u043F\u0440\u0435\u0436\u0434\u0435\u0432\u0440\u0435\u043C\u0435\u043D\u043D\u043E \u043D\u0435 \u0441\u043F\u0440\u043E\u0432\u0430\u0446\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u0440\u0430\u0431\u043E\u0442\u043A\u0443 useEffect\n //? \u043F\u043E \u0441\u0442\u0435\u0439\u0442\u0443 \u0444\u0438\u043A\u0441\u0438\u0440\u0443\u044E\u0449\u0435\u043C\u0443 \"\u043E\u0442\u043C\u0430\u0448\u043A\u0443\" \u043A \u043D\u0430\u0447\u0430\u043B\u0443 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 (isFormMustBeChanget)\n //? \u043E\u0442\u043A\u043B\u0430\u0434\u044B\u0432\u0430\u044E \u043F\u0435\u0440\u0435\u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u044D\u0442\u043E\u0433\u043E \u0441\u0442\u0435\u0439\u0442\u0430 \u0434\u043E \u043F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0438 \u043D\u0435\u043F\u0440\u0435\u0440\u044B\u0432\u043D\u044B\u0445 \u0432\u044B\u0437\u043E\u0432\u043E\u0432 assignChangesToField,\n //? \u043D\u043E \u043F\u0440\u0438 \u044D\u0442\u043E\u043C \u043F\u0440\u0438 \u043A\u0430\u0436\u0434\u043E\u043C \u0435\u0435 \u0432\u044B\u0437\u043E\u0432\u0435 \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0430\u044E \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0432 \u043C\u0430\u0441\u0441\u0438\u0432\n const assignChangesToField = (() => {\n // ? data - \u043E\u0431\u044A\u0435\u043A\u0442 \u0441 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\u043C\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u043F\u043E\u0437\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0438\u0440\u043E\u0432\u0430\u043D \u0432 \u0444\u0438\u043B\u0434\n // ? upd: \u0442\u0435\u043F\u0435\u0440\u044C data \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043F\u0435\u0440\u0435\u0434\u0430\u043D\u0430 \u043A\u0430\u043A \u0440\u0435\u0434\u044C\u044E\u0441\u0435\u0440, \u0442\u0430\u043A \u0436\u0435 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D 3-\u0439 \u0430\u0440\u0433\u0443\u043C\u0435\u043D\u0442 - settings\n\n // todo(vl) - upd: \u0432\u0432\u0435\u043B \u0434\u043B\u044F \u0430\u0441\u0430\u0439\u043D\u0435\u0440\u0430 \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u044C \u043F\u0440\u043E\u043A\u0438\u0434\u044B\u0432\u0430\u0442\u044C settings \u0434\u043B\u044F \u043A\u0430\u0436\u0434\u043E\u0433\u043E \u043E\u0442\u043B\u043E\u0436\u0435\u043D\u043D\u043E\u0433\u043E \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F,\n // todo(vl) - \u043D\u043E \u043F\u043E\u043A\u0430 \u0447\u0442\u043E \u043D\u0438\u043A\u0430\u043A \u043D\u0435 \u043E\u0431\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u0435\u0442\u0441\u044F, \u0432\u0432\u0435\u043B \u0434\u043B\u044F \u0440\u0430\u0441\u0448\u0438\u0440\u044F\u0435\u043C\u043E\u0441\u0442\u0438 \u0444-\u043B\u0430\n return (data, key, settings) => {\n clearTimeout(timeouts.timeoutId);\n\n // ? \u041F\u0440\u043E\u043F\u0443\u0441\u043A\u0430\u0435\u043C \"\u043F\u0443\u0441\u0442\u044B\u0435\"/\u043D\u0435\u0444\u043E\u0440\u043C\u0430\u0442\u043D\u044B\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\n // todo(vl) - \u043F\u043E\u0434\u0443\u043C\u0430\u0442\u044C \u043D\u0443\u0436\u043D\u0430 \u043B\u0438 \u043F\u0440\u043E\u043C\u0438\u0441\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u043D\u0430 \u044D\u0442\u043E\u043C \u0443\u0440\u043E\u0432\u043D\u0435 (\u043F\u043E\u043A\u0430 \u0434\u0443\u043C\u0430\u044E \u0447\u0442\u043E \u043D\u0435\u0442)\n if (getIsOnlyAnObject(data) || typeof data === 'function') {\n formChanges.push({ key, data, settings });\n }\n\n setIsFormMustBeChanget(false);\n timeouts.timeoutId = setTimeout(() => setIsFormMustBeChanget(true), DELAY_TIME);\n\n // ? \u0412\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043C \u043D\u0430 \u043C\u0435\u0441\u0442\u043E \u0432\u044B\u0437\u043E\u0432\u0430 \u043A\u043B\u043E\u043D \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u043D\u043E\u0433\u043E \u043C\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439:\n // ? - \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043F\u043E\u043B\u0435\u0437\u043D\u043E \u0434\u043B\u044F \u0430\u043D\u0430\u043B\u0438\u0437\u0430\n // ? - \u043D\u043E \u041D\u0415 \u0434\u0430\u0435\u043C \u0432\u043C\u0435\u0448\u0438\u0432\u0430\u0442\u044C\u0441\u044F \u0432\u043E \u0432\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u044E\u044E \u0440\u0430\u0431\u043E\u0442\u0443 \u0445\u0443\u043A\u0430 (\u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u043A\u043B\u043E\u043D)\n return clone(formChanges);\n };\n })();\n\n const addChangesToField = (field, data, currentForm, currentChangesSettings) => {\n // todo(vl) - \u043F\u043E\u0434\u0443\u043C\u0430\u0442\u044C\n // todo(vl) - - \u043D\u0443\u0436\u043D\u0430 \u043B\u0438 \u043F\u0440\u043E\u043C\u0438\u0441\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u043D\u0430 \u044D\u0442\u043E\u043C \u0443\u0440\u043E\u0432\u043D\u0435 (\u043D\u0435 \u0444\u0430\u043A\u0442 \u0447\u0442\u043E \u043D\u0443\u0436\u043D\u0430, \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0434\u043E\u0436\u0434\u0430\u0442\u044C\u0441\u044F \u0443\u0439\u0434\u0435\u0442 \u0432 \u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u0441\u0442\u044C changeForm)\n // todo(vl) - - \u0435\u0441\u043B\u0438 \u043D\u0443\u0436\u043D\u0430, \u0442\u043E \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044C \u0444-\u043B\n const changesDataSafely = (() => {\n if (typeof data === 'function') return data(field, currentForm, currentChangesSettings);\n return getIsOnlyAnObject(data) ? data : {};\n })();\n\n const { error } = changesDataSafely;\n return { newField: { ...field, ...changesDataSafely }, ...(error !== undefined ? { error } : {}) };\n };\n\n //? \u0424-\u044F \u043F\u0440\u0438\u043C\u0435\u043D\u044F\u0435\u0442 \"\u043D\u0430\u043A\u043E\u043F\u043B\u0435\u043D\u043D\u044B\u0435\" \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\n const changeForm = async () => {\n let modifiedFormFromOutside;\n const errorsFromChanges = {};\n\n // ? \u041F\u0440\u043E\u0441\u0447\u0438\u0442\u044B\u0432\u0430\u0435\u043C \u043D\u043E\u0432\u0443\u044E \u0444\u043E\u0440\u043C\u0443 \u0441 \u0432\u043D\u0435\u0441\u0435\u043D\u043D\u044B\u043C\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\u043C\u0438 \u043F\u043E \u0444\u0438\u043B\u0434\u0430\u043C.\n // ? \u041E\u0431\u0440\u0430\u0449\u0430\u044E \u0432\u043D\u0438\u043C\u0430\u043D\u0438\u0435, \u0447\u0442\u043E \u0438\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u043C\u0441\u044F \u043F\u043E \u043C\u0430\u0441\u0441\u0438\u0432\u0443 formChanges, \u0430 \u0437\u043D\u0430\u0447\u0438\u0442 \u0444\u043E\u0440\u043C\u0430 \u0438\u0437\u043C\u0435\u043D\u044F\u0435\u0442\u0441\u044F \u0432 \u043F\u043E\u0440\u044F\u0434\u043A\u0435 \u043F\u043E\u0441\u0442\u0443\u043F\u043B\u0435\u043D\u0438\u044F \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439\n const newForm = formChanges.reduce((acc, changesItem) => {\n const { data, key, settings } = changesItem;\n const field = acc.find(field => field.key === key);\n\n // ? \u0415\u0441\u043B\u0438 \u0432 \u0444\u043E\u0440\u043C\u0435 \u0435\u0441\u0442\u044C \u0444\u0438\u043B\u0434 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044E\u0449\u0438\u0439 key \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F - \u043C\u0443\u0442\u0438\u0440\u0443\u0435\u043C \u0444\u0438\u043B\u0434\n if (field) {\n // ? \u041C\u0443\u0442\u0430\u0446\u0438\u044F \u0444\u0438\u043B\u0434\u0430 \u043F\u0440\u043E\u0438\u0441\u0445\u043E\u0434\u0438\u0442 \u043D\u0430 \u0430\u043A\u043A\u0443\u043C\u0443\u043B\u044F\u0442\u043E\u0440\u0435 (\u0442\u0435\u043A\u0443\u0449\u0430\u044F \u0444\u043E\u0440\u043C\u0430), \u0434\u043B\u044F \u0442\u043E\u0433\u043E \u0447\u0442\u043E\u0431\u044B \u0432 \u043F\u043E\u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0445 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044F\u0445 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0443\u0447\u0438\u0442\u044B\u0432\u0430\u0442\u044C \u043F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0438\u0435\n acc = acc.map(field => {\n if (field.key !== key) return field;\n\n // ? error - \u044D\u0442\u043E error \u041D\u0415 \u0438\u0437 \u0444\u0438\u043B\u0434\u0430 (\u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u0441\u0430\u0442\u0440\u044B\u0439), \u0430 \u0438\u043C\u0435\u043D\u043D\u043E \u0438\u0437 \"\u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\",\n // ? \u0435\u0441\u043B\u0438 \u041D\u0415 \u043F\u0440\u0438\u0445\u043E\u0434\u0438\u043B \u0438\u043C\u0435\u043D\u043D\u043E \u0432 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\u0445, \u0442\u043E \u0435\u0433\u043E \u0438 \u043D\u0435 \u0431\u0443\u0434\u0435\u0442.\n const { newField, error } = addChangesToField(field, data, acc, settings);\n // ? \u041D\u0430 \u043A\u0430\u0436\u0434\u043E\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0444\u0438\u043A\u0441\u0438\u0440\u0443\u0435\u043C \u0438\u0442\u043E\u0433\u043E\u0432\u0443\u044E \u043C\u0443\u0442\u0430\u0446\u0438\u044E \u043F\u0440\u043E\u043F\u044B error \u0434\u043B\u044F \u043A\u0430\u0436\u0434\u043E\u0433\u043E \u0444\u0438\u043B\u0434\u0430\n if (error || error !== undefined) errorsFromChanges[key] = error;\n\n return newField;\n });\n }\n return acc;\n }, form);\n\n // ToDo - \u043F\u043E\u0440\u0435\u0444\u0430\u043A\u0442\u043E\u0440\u0438\u0442\u044C, \u043D\u0435 \u043F\u0440\u043E\u0433\u043E\u043D\u044F\u0442\u044C \u0432\u0430\u043B\u0438\u0434\u0430\u0446\u0438\u044E \u0432\u0441\u0435\u0445 \u043F\u043E\u043B\u0435\u0439, \u0430 \u0442\u043E\u043B\u044C\u043A\u043E \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u043D\u044B\u0445\n const validatedForm =\n isUseValidation && typeof validateField === 'function'\n ? newForm.map(field => ({\n ...field,\n error: (() => {\n let output = '';\n const validateFieldResult = validateField({ ...field }, newForm);\n if (validateFieldResult?.field?.error !== undefined) output = validateFieldResult.field.error;\n else if (errorsFromChanges[field.key] !== undefined) output = errorsFromChanges[field.key];\n return output;\n })(),\n }))\n : newForm;\n\n if (callback && typeof callback === 'function') modifiedFormFromOutside = await callback(validatedForm);\n if (!isNotSetForm) await setForm(modifiedFormFromOutside ?? validatedForm);\n\n formChanges.length = 0;\n setIsFormMustBeChanget(false);\n };\n\n useEffect(() => {\n if (isFormMustBeChanget) changeForm();\n }, [isFormMustBeChanget]);\n\n return {\n assignChangesToField, // \u043C\u0435\u0442\u043E\u0434 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0438 \u043E\u0442\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0445 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439\n isFormMustBeChanget, // \u0444\u043B\u0430\u0433 \u0441\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u043D\u0435\u043F\u043E\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0445 \u043C\u0443\u0442\u0430\u0446\u0438\u0439 \u0444\u043E\u0440\u043C\u044B\n\n // \u043C\u0435\u0442\u043E\u0434 \u043F\u0440\u0438\u043D\u0443\u0434\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0439 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0438 \u0444\u043B\u0430\u0433\u0430 \u0441\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u043D\u0435\u043F\u043E\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0445 \u043C\u0443\u0442\u0430\u0446\u0438\u0439 \u0444\u043E\u0440\u043C\u044B\n // \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u0442\u043E\u043B\u044C\u043A\u043E \u043D\u0430 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F, \u041D\u0415 \u0432\u043A\u043B\u044E\u0447\u0430\u0435\u0442, \u0435\u0441\u043B\u0438 \u0443\u0436\u0435 \u043E\u0442\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u0435\u0442 \u043F\u0440\u0438\u043C\u0435\u043D\u0435\u043D\u0438\u0435\n startChangesProcessing,\n\n // todo(vl) - deprecated, \u043D\u043E \u043F\u043E\u043A\u0430 \u043D\u0435 \u0432\u044B\u043F\u0438\u043B\u0438\u0432\u0430\u044E, \u043D\u0435 \u043F\u0440\u043E\u0432\u0435\u0440\u0438\u043B \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u043B\u0438 \u043D\u0430 \u043F\u0440\u043E\u0435\u043A\u0442\u0430\u0445\n setIsFormMustBeChanget: startChangesProcessing, // \u043C\u0435\u0442\u043E\u0434 \u043F\u0440\u0438\u043D\u0443\u0434\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0439 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0438 \u0444\u043B\u0430\u0433\u0430 \u0441\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u043D\u0435\u043F\u043E\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0445 \u043C\u0443\u0442\u0430\u0446\u0438\u0439 \u0444\u043E\u0440\u043C\u044B\n\n changesArray: clone(formChanges), // \u0442\u0435\u043A\u043A\u0443\u0449\u0435\u0435 \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435 \u043C\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439\n\n // \u041A\u043E\u043D\u0441\u0442\u0430\u043D\u0442\u0430 (\u043D\u0430 \u0447\u0442\u0435\u043D\u0438\u0435) \u0437\u0430\u0434\u0435\u0440\u0436\u043A\u0438, \u043A\u043E\u0442\u043E\u0440\u0430\u044F \u0432\u044B\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044F \u043C\u0435\u0436\u0434\u0443 \u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F\u043C\u0438,\n // \u043F\u043E\u0441\u043B\u0435 \u043A\u043E\u0442\u043E\u0440\u043E\u0439 \u043E\u0442\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u0435\u0442 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0430 \u043D\u0430\u043A\u043E\u043F\u0438\u0432\u0448\u0438\u0445\u0441\u044F \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0432 \u0444\u043E\u0440\u043C\u0443\n DELAY_TIME,\n };\n}\n\nexport default useFormFieldsChangesManager;\n", "import { getSafelyValue } from \"./../fieldValueFormatters\";\n\nconst DEFAULT_CODE = \"en\";\n\nexport default function createTranslator({ ...langCatalogs }) {\n const loc = {\n ...langCatalogs,\n };\n\n let code = window.localStorage.getItem(\"lng\");\n if (!code)\n code = window.navigator\n ? window.navigator.language.split(\"-\")[0]\n : DEFAULT_CODE;\n if (!loc[code]) code = DEFAULT_CODE;\n\n return function (text, values) {\n const safelyValues = values ?? {};\n const safelyText = getSafelyValue(text);\n let translatedText =\n loc[code] && loc[code][safelyText] ? loc[code][safelyText] : safelyText;\n\n if (Object?.keys(safelyValues)?.length) {\n for (const key in values) {\n const regex = new RegExp(`%${key}%`, \"g\");\n translatedText = translatedText?.replace(regex, values[key]);\n }\n }\n\n return translatedText;\n };\n}\n", "// \u0412\u0437\u044F\u0442\u043E \u0438\u0437 https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Math/round\n// \u041F\u0440\u0438 \u0438\u043C\u043F\u043E\u0440\u0442\u0435 \u043B\u044E\u0431\u043E\u0439 \u0444-\u0438 \u0438\u0437 \u044D\u0442\u043E\u0433\u043E \u0444\u0430\u0439\u043B\u0430 \u043E\u0442\u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u0441\u0430\u043C\u043E\u0432\u044B\u0437\u044B\u0432\u0430\u044E\u0449\u0430\u044F\u0441\u044F \u0444-\u044F \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\n// \u043E\u0431\u044A\u0435\u043A\u0442 Math 3-\u043C\u044F \u0444-\u043C\u0438: round10, floor10, ceil10\n(function () {\n /**\n * \u041A\u043E\u0440\u0440\u0435\u043A\u0442\u0438\u0440\u043E\u0432\u043A\u0430 \u043E\u043A\u0440\u0443\u0433\u043B\u0435\u043D\u0438\u044F \u0434\u0435\u0441\u044F\u0442\u0438\u0447\u043D\u044B\u0445 \u0434\u0440\u043E\u0431\u0435\u0439.\n *\n * @param {String} type \u0422\u0438\u043F \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u0438\u0440\u043E\u0432\u043A\u0438.\n * @param {Number} value \u0427\u0438\u0441\u043B\u043E.\n * @param {Integer} exp \u041F\u043E\u043A\u0430\u0437\u0430\u0442\u0435\u043B\u044C \u0441\u0442\u0435\u043F\u0435\u043D\u0438 (\u0434\u0435\u0441\u044F\u0442\u0438\u0447\u043D\u044B\u0439 \u043B\u043E\u0433\u0430\u0440\u0438\u0444\u043C \u043E\u0441\u043D\u043E\u0432\u0430\u043D\u0438\u044F \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u0438\u0440\u043E\u0432\u043A\u0438).\n * @returns {Number} \u0421\u043A\u043E\u0440\u0440\u0435\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435.\n */\n function decimalAdjust(type, value, exp) {\n // \u0415\u0441\u043B\u0438 \u0441\u0442\u0435\u043F\u0435\u043D\u044C \u043D\u0435 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0430, \u043B\u0438\u0431\u043E \u0440\u0430\u0432\u043D\u0430 \u043D\u0443\u043B\u044E...\n if (typeof exp === \"undefined\" || Number(exp) === 0) {\n return Math[type](value);\n }\n value = Number(value);\n exp = Number(exp);\n // \u0415\u0441\u043B\u0438 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u043D\u0435 \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0447\u0438\u0441\u043B\u043E\u043C, \u043B\u0438\u0431\u043E \u0441\u0442\u0435\u043F\u0435\u043D\u044C \u043D\u0435 \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0446\u0435\u043B\u044B\u043C \u0447\u0438\u0441\u043B\u043E\u043C...\n if (isNaN(value) || !(typeof exp === \"number\" && exp % 1 === 0)) {\n return NaN;\n }\n // \u0421\u0434\u0432\u0438\u0433 \u0440\u0430\u0437\u0440\u044F\u0434\u043E\u0432\n value = value.toString().split(\"e\");\n value = Math[type](\n Number(value[0] + \"e\" + (value[1] ? Number(value[1]) - exp : -exp)),\n );\n // \u041E\u0431\u0440\u0430\u0442\u043D\u044B\u0439 \u0441\u0434\u0432\u0438\u0433\n value = value.toString().split(\"e\");\n return Number(value[0] + \"e\" + (value[1] ? Number(value[1]) + exp : exp));\n }\n\n // \u0414\u0435\u0441\u044F\u0442\u0438\u0447\u043D\u043E\u0435 \u043E\u043A\u0440\u0443\u0433\u043B\u0435\u043D\u0438\u0435 \u043A \u0431\u043B\u0438\u0436\u0430\u0439\u0448\u0435\u043C\u0443\n if (!Math.round10) {\n Math.round10 = function (value, exp) {\n return decimalAdjust(\"round\", value, exp);\n };\n }\n // \u0414\u0435\u0441\u044F\u0442\u0438\u0447\u043D\u043E\u0435 \u043E\u043A\u0440\u0443\u0433\u043B\u0435\u043D\u0438\u0435 \u0432\u043D\u0438\u0437\n if (!Math.floor10) {\n Math.floor10 = function (value, exp) {\n return decimalAdjust(\"floor\", value, exp);\n };\n }\n // \u0414\u0435\u0441\u044F\u0442\u0438\u0447\u043D\u043E\u0435 \u043E\u043A\u0440\u0443\u0433\u043B\u0435\u043D\u0438\u0435 \u0432\u0432\u0435\u0440\u0445\n if (!Math.ceil10) {\n Math.ceil10 = function (value, exp) {\n return decimalAdjust(\"ceil\", value, exp);\n };\n }\n})();\n\nexport const addRangeDefault = (from, to, currentValues, decimalPlaces) => {\n if (!currentValues?.length) return [{ from, to }];\n const step = decimalPlaces ? Math.pow(10, -1 * decimalPlaces) : 1;\n\n const resultOfProcessAddingRange = currentValues.reduce(\n (acc, range) => {\n const isIncludesFrom =\n Boolean(acc.from) && range.from < acc.from && range.to >= acc.from;\n const isIncludesTo =\n Boolean(acc.to) && range.from <= acc.to && range.to > acc.to;\n const isRangeMustBeIncludet =\n Boolean(acc.from) &&\n Boolean(acc.to) &&\n acc.from <= range.from &&\n acc.to >= range.to;\n\n const processTo = () => {\n const lastAccRange = acc.result[acc.result.length - 1];\n\n if (acc.to < range.from) {\n lastAccRange.to = acc.to;\n acc.to = null;\n acc.result = [...acc.result, range];\n } else if (isIncludesTo) {\n lastAccRange.to = acc.to;\n acc.result = [\n ...acc.result,\n {\n from: Math.round10(acc.to + step, -1 * decimalPlaces),\n to: range.to,\n },\n ];\n acc.to = null;\n } else if (acc.to === range.to) {\n lastAccRange.to = acc.to;\n acc.to = null;\n }\n };\n\n if (!acc.from && !acc.to) acc.result = [...acc.result, range];\n else if (!acc.from && acc.to) processTo();\n else if (acc.from && acc.to) {\n if (acc.from <= range.from) {\n acc.result = [...acc.result, { from: acc.from }];\n acc.from = null;\n processTo();\n } else if (isIncludesFrom) {\n acc.result = [\n ...acc.result,\n {\n from: range.from,\n to: Math.round10(acc.from - step, -1 * decimalPlaces),\n },\n { from: acc.from },\n ];\n acc.from = null;\n processTo();\n } else {\n acc.result = [\n ...acc.result,\n ...(!isRangeMustBeIncludet ? [range] : []),\n {\n from: Math.round10(acc.from, -1 * decimalPlaces),\n to: Math.round10(acc.to, -1 * decimalPlaces),\n },\n ];\n }\n }\n return acc;\n },\n { from, to, result: [] },\n );\n\n const result = resultOfProcessAddingRange.result;\n if (!result[result.length - 1].to) result[result.length - 1].to = to;\n return result;\n};\n", "import React, { useEffect, useState } from \"react\";\n\nimport ReactDOM from \"react-dom\";\n\nconst Portal = ({ children, parentSelector }) => {\n const [container] = useState(() => document.createElement(\"div\"));\n useEffect(() => {\n let parent;\n\n if (parentSelector) parent = document.querySelector(parentSelector);\n else parent = document.body;\n parent?.appendChild(container);\n\n return () => {\n parent?.removeChild(container);\n };\n }, []);\n\n return ReactDOM.createPortal(children, container);\n};\n\nexport default React.memo(Portal);\n", "import { useEffect } from \"react\";\n\nconst useBodyScrollLock = (isScrollBodyLocked) => {\n useEffect(() => {\n if (isScrollBodyLocked) {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"auto\";\n }\n\n return () => {\n document.body.style.overflow = \"auto\";\n };\n }, [isScrollBodyLocked]);\n};\n\nexport default useBodyScrollLock;\n", "import { useEffect } from \"react\";\n\nexport const useClickOutside = (ref, setOut, open) => {\n function handleClickOutside(event) {\n if (ref.current && !ref.current.contains(event.target)) {\n setOut(open);\n }\n }\n useEffect(() => {\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [ref]);\n};\n", "import React, { useEffect, useState } from \"react\";\n\nexport const useDebounce = ({ searchValue, delay }) => {\n const [debouncedValue, setDebouncedValue] = useState(searchValue);\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(searchValue);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [searchValue, delay]);\n\n return debouncedValue;\n};\n", "import { createRef, useEffect } from \"react\";\n\nexport default function useFieldsFocus({ form, setForm }) {\n const isFormAsObject = Boolean(\n typeof form === \"object\" && !Array.isArray(form),\n );\n\n const getField = (key) => {\n if (isFormAsObject) {\n return (\n form?.[key] ?? Object.values(form)?.find((field) => field.key === key)\n );\n } else {\n return form?.find((field) => field.key === key);\n }\n };\n\n const getErroredFields = () => {\n if (isFormAsObject) {\n return Object.values(form)?.filter((field) => field.error);\n } else {\n return form?.filter((f) => f?.error);\n }\n };\n\n const addRefsToFields = () => {\n if (isFormAsObject) {\n setForm((form) => {\n return Object.keys(form)?.reduce((result, key) => {\n const field = form[key];\n return {\n ...result,\n [key]: {\n ...field,\n ref: createRef(),\n wrapperRef: createRef(),\n },\n };\n }, {});\n });\n } else {\n setForm((form) => {\n return form?.map((field) => {\n field.ref = createRef();\n field.wrapperRef = createRef();\n\n return field;\n });\n });\n }\n };\n\n const toggleFieldFocus = ({ field, action = \"focus\" }) => {\n if (!field || !field?.ref) return null;\n\n setTimeout(() => {\n field.ref.current\n ?.querySelector(field?.focusSelector || \"input\")\n ?.[action]();\n }, 50);\n };\n\n const setFocusTo = (key) => {\n const field = getField(key);\n if (!field) return false;\n\n toggleFieldFocus({ field });\n };\n const setFocusToErroredField = () => {\n const field = getErroredFields()?.[0];\n if (!field) return false;\n\n toggleFieldFocus({ field });\n };\n\n useEffect(() => {\n addRefsToFields();\n }, [form?.length]);\n\n return {\n setFocusTo,\n setFocusToErroredField,\n };\n}\n", "export default function General({ form, FormFields = [] } = {}) {\n const joinData = (...args) => {\n const [mainArg] = args;\n const MainArgProto = Array.isArray(mainArg)\n ? \"Array\"\n : typeof mainArg === \"object\"\n ? \"Object\"\n : undefined;\n const template = Array.isArray(mainArg)\n ? []\n : typeof mainArg === \"object\"\n ? {}\n : null;\n\n if (!template) return undefined;\n\n return args.reduce((result, item) => {\n if (MainArgProto === \"Array\") {\n if (Array.isArray(item)) {\n return [...result, ...item];\n } else {\n return [...result, item];\n }\n } else if (MainArgProto === \"Object\") {\n return { ...result, ...item };\n } else {\n return template;\n }\n }, template);\n };\n const getFieldData = (key) => {\n if (Array.isArray(FormFields)) {\n if (FormFields[key]) {\n return { ...FormFields[key] };\n } else {\n return { ...FormFields.find((f) => f.key === key) };\n }\n } else if (typeof FormFields === \"object\") {\n return (\n { ...FormFields[key] } || {\n ...Object.values(FormFields).find((f) => f.key === key),\n }\n );\n } else {\n return undefined;\n }\n };\n const getFormFields = (argForm = form) => {\n return argForm?.fields || argForm;\n };\n const getFormFieldsAsArray = (fields) => {\n if (Array.isArray(fields)) return fields;\n\n if (typeof fields === \"object\") {\n return Object.values(fields);\n }\n\n return fields;\n };\n const getFormFieldsKeys = (fields = getFormFields()) => {\n if (Array.isArray(fields)) return fields.map(({ key }) => key);\n\n if (typeof fields === \"object\") {\n return Object.values(fields).map(({ key }) => key);\n }\n\n return fields;\n };\n const popFormField = (fields, key) => {\n const result = { item: undefined, itemIndex: undefined };\n\n if (Array.isArray(fields)) {\n result.item = fields?.find((f) => f.key === key);\n result.itemIndex = result.item\n ? fields.findIndex((f) => f.key === key)\n : fields.length;\n } else if (typeof fields === \"object\") {\n result.item =\n fields[key] || Object.values(fields).find((f) => f.key === key);\n result.itemIndex = result.item\n ? fields[key]\n ? key\n : Object.values(fields).findIndex((f) => f.key === key)\n : key;\n }\n\n return result;\n };\n const updateFormField = (fields, data, key) => {\n const isFunction = typeof data === \"function\";\n //KEY is NULLable\n if (!key) {\n return data.key\n ? Object.values(fields).reduce((result, field, i) => {\n const index = fields[field.key] ? field.key : i;\n\n return {\n ...result,\n [index]:\n data.key === field.key\n ? isFunction\n ? data(field)\n : data\n : field,\n };\n }, {})\n : {\n ...fields,\n [fields.length || 0]: isFunction ? data({}) : data,\n };\n }\n\n const { item: field = data, itemIndex } = popFormField(fields, key);\n\n fields[itemIndex] = isFunction ? data(field || {}) : { ...field, ...data };\n\n return fields;\n };\n\n const getFieldClassName = (key, type) => {\n return `form-${type}_field-${key}`;\n };\n\n return {\n joinData,\n getFieldData,\n popFormField,\n updateFormField,\n getFormFields,\n getFormFieldsAsArray,\n getFieldClassName,\n getFormFieldsKeys,\n };\n}\n", "import General from \"../functions/General\";\n\nexport default function ArrayWithObjects({ form, setForm, FormFields }) {\n const {\n joinData,\n getFieldData,\n updateFormField,\n getFormFields,\n getFormFieldsAsArray,\n getFormFieldsKeys,\n } = General({\n FormFields,\n });\n\n const getFormField = (key, argForm = form) => {\n return getFormFields(argForm)?.find((f) => f.key === key);\n };\n const setFormFields = (data) => {\n const isFunction = typeof data === \"function\";\n setForm((state) => (isFunction ? data(state) : data));\n };\n const setFormField = (data, key = null) =>\n setFormFields((fields) => updateFormField(fields, data, key));\n\n const removeAllFormFields = () => setFormFields([]);\n\n return {\n joinData,\n getFieldData,\n getFormFields,\n getFormField,\n setFormFields,\n setFormField,\n getFormFieldsAsArray: (fields) =>\n getFormFieldsAsArray(fields || getFormFields()),\n getFormFieldsKeys: (fields) => getFormFieldsKeys(fields || getFormFields()),\n removeAllFormFields,\n };\n}\n", "export default function ObjectWithIterableObjects({\n form,\n setForm,\n FormFields,\n}) {\n const joinData = (...args) => {\n const [mainArg] = args;\n const MainArgProto = Array.isArray(mainArg)\n ? \"Array\"\n : typeof mainArg === \"object\"\n ? \"Object\"\n : undefined;\n const template = Array.isArray(mainArg)\n ? []\n : typeof mainArg === \"object\"\n ? {}\n : null;\n\n if (!template) return undefined;\n\n return args.reduce((result, item) => {\n if (MainArgProto === \"Array\") {\n if (Array.isArray(item)) {\n return [...result, ...item];\n } else {\n return [...result, item];\n }\n } else if (MainArgProto === \"Object\") {\n return { ...result, ...item };\n } else {\n return template;\n }\n }, template);\n };\n\n const getFieldData = (key) => {\n if (Array.isArray(FormFields)) {\n return FormFields[key] || FormFields.find((f) => f.key === key);\n } else if (typeof FormFields === \"object\") {\n return (\n FormFields[key] || Object.values(FormFields).find((f) => f.key === key)\n );\n } else {\n return undefined;\n }\n };\n const getFormFields = () => {\n return form.fields || form;\n };\n const getFormField = (key) => {\n // eslint-disable-next-line no-undef\n if (FormProto === \"Array\") {\n return getFormFields().find((field) => field.key === key);\n // eslint-disable-next-line no-undef\n } else if (FormProto === \"Object\") {\n return (\n Object.values(getFormFields()).find((field) => field.key === key) ||\n Object.keys(getFormFields()).reduce((result, field) => {\n if (field === key) result = getFormFields()[field];\n return result;\n }, {})\n );\n } else {\n return undefined;\n }\n };\n const setFormFields = (data) => {\n const isFunction = typeof data === \"function\";\n\n setForm((state) => {\n if (state.fields) {\n return {\n ...state,\n fields: isFunction ? data(state.fields) : data,\n };\n } else {\n return isFunction ? data(state) : data;\n }\n });\n };\n const setFormField = (data, key = null) => {\n const isFunction = typeof data === \"function\";\n\n setFormFields((fields) => {\n const pop = (fields, key) => {\n const result = { fields, item: undefined };\n\n result.item = fields[key] || fields.find((f) => f.key === key);\n\n if (!result.item) return result;\n\n if (Array.isArray(fields)) {\n const index = parseInt(key, 10);\n if (!isNaN(index)) {\n result.fields.splice(key, 1);\n } else {\n result.fields = result.fields.filter((f) => f.key !== key);\n }\n } else if (typeof fields === \"object\") {\n result.fields = Object.values(fields).reduce(\n (object, { key: fKey }) => {\n if (key !== fKey) {\n object[key] = fields[key];\n }\n return object;\n },\n {},\n );\n }\n\n return result;\n };\n const update = (fields) => {\n //KEY is NULLable\n if (!key) {\n return data.key\n ? Object.values(fields).reduce((result, field, i) => {\n const index = fields[field.key] ? field.key : i;\n\n return {\n ...result,\n [index]:\n data.key === field.key\n ? isFunction\n ? data(field)\n : data\n : field,\n };\n }, {})\n : {\n ...fields,\n [fields.length || 0]: isFunction ? data({}) : data,\n };\n }\n\n const { fields: filtered, item: field } = pop(fields, key);\n\n const updatedField = isFunction\n ? data(field || {})\n : { ...field, ...data };\n return joinData(\n filtered,\n fields[key] ? { [key]: updatedField } : updatedField,\n );\n };\n\n return update(fields);\n });\n };\n\n return {\n joinData,\n getFieldData,\n getFormFields,\n getFormField,\n setFormFields,\n setFormField,\n };\n}\n", "import General from \"../functions/General\";\n\nconst noop = () => {};\n\nexport default function ObjectWithNamedKeyObjects({\n form,\n setForm = noop,\n FormFields,\n} = {}) {\n const {\n joinData,\n getFieldData,\n updateFormField,\n getFormFields,\n getFormFieldsAsArray,\n getFormFieldsKeys,\n } = General({\n FormFields,\n });\n\n const getFormField = (key, argForm = form) => {\n return (\n Object.values(getFormFields(argForm))?.find(\n (field) => field?.key === key,\n ) ||\n Object.keys(getFormFields(argForm))?.reduce((result, field) => {\n if (field === key) result = getFormFields(argForm)[field];\n return result;\n }, null)\n );\n };\n const setFormFields = (data) => {\n const isFunction = typeof data === \"function\";\n\n setForm((state) => {\n if (state.fields) {\n return {\n ...state,\n fields: isFunction ? data(state.fields) : data,\n };\n } else {\n return isFunction ? data(state) : data;\n }\n });\n };\n const setFormField = (data, key = null) =>\n setFormFields((fields) => updateFormField(fields, data, key));\n\n const removeAllFormFields = () => setFormFields({});\n const removeFormField = (key) =>\n setFormFields((state) =>\n Object.keys(state)\n .filter((fKey) => fKey !== key)\n .reduce((obj, key) => ({ ...obj, [key]: state[key] }), {}),\n );\n const removeFormFields = ([...keys]) =>\n setFormFields((state) =>\n Object.keys(state)\n .filter((fKey) => !keys.includes(fKey))\n .reduce((obj, key) => ({ ...obj, [key]: state[key] }), {}),\n );\n\n return {\n joinData,\n getFieldData,\n getFormField,\n setFormFields,\n setFormField,\n getFormFields: () => getFormFields(form),\n getFormFieldsAsArray: () => getFormFieldsAsArray(getFormFields(form)),\n getFormFieldsKeys: () => getFormFieldsKeys(getFormFields(form)),\n removeAllFormFields,\n removeFormField,\n removeFormFields,\n };\n}\n", "const defaultRenderFieldComponent = () => {\n // eslint-disable-next-line no-console\n console.error(\"RenderFields: RenderFieldComponent Property is not recieved!\");\n return null;\n};\n\nconst defaultFormDataDriver = () => {\n // eslint-disable-next-line no-console\n console.error(\"RenderFields: FormDataDriver Property is not recieved!\");\n return null;\n};\n\nconst defaultOnFieldChange = () => {\n // eslint-disable-next-line no-console\n console.warn(\n \"RenderFields: Be careful, onFieldChange handler is not recieved!\",\n );\n return null;\n};\n\nconst defaultOnFieldBlur = () => {\n // eslint-disable-next-line no-console\n console.warn(\n \"RenderFields: Be careful, defaultOnFieldBlur handler is not recieved!\",\n );\n return null;\n};\n\nexport default function RenderFields({\n form,\n fields,\n cols = 1,\n FormDataDriver = defaultFormDataDriver,\n RenderFieldComponent = defaultRenderFieldComponent,\n onFieldChange = defaultOnFieldChange,\n onFieldBlur = defaultOnFieldBlur,\n} = {}) {\n const maxColumns = 6;\n const maxWidth = 12;\n\n const { getFormField } = FormDataDriver({ form });\n\n const getColumnsQty = () => {\n return cols > maxColumns ? maxColumns : cols;\n };\n\n const renderFormField = (key) => {\n try {\n const field = { ...getFormField(key), key };\n const { wrapperRef } = field;\n\n return (\n <div\n key={`render-field-wrapper-${key}`}\n id={`render-field-wrapper-${key}`}\n ref={\n wrapperRef\n ? typeof wrapperRef === \"function\"\n ? (node) => wrapperRef(node, key)\n : wrapperRef\n : null\n }\n >\n <RenderFieldComponent\n key={key}\n field={field}\n onChange={(value) => onFieldChange(key, value)}\n onBlur={(...args) => onFieldBlur(...args)}\n />\n </div>\n );\n } catch (e) {\n return null;\n }\n };\n\n const renderSingleColumn = () => {\n return fields.map(renderFormField);\n };\n const renderSplitColumns = () => {\n const fieldsLen = fields?.length || 0;\n const columnsQty =\n getColumnsQty() > fieldsLen ? fieldsLen : getColumnsQty();\n\n if (!columnsQty) return null;\n\n const parts = new Array(columnsQty).fill([]).map((v, i) => {\n const startIndex = (fieldsLen / columnsQty) * i;\n const endIndex = startIndex + fieldsLen / columnsQty;\n\n return fields.slice(startIndex, endIndex);\n });\n\n return (\n <div className=\"row\">\n {parts.map((part, i) => (\n <div\n key={`render-fields-row-${i}`}\n className={`col-12 col-lg-${parseInt(maxWidth / columnsQty, 10)}`}\n >\n {part.map(renderFormField)}\n </div>\n ))}\n </div>\n );\n };\n\n const render = cols === 1 ? renderSingleColumn : renderSplitColumns;\n\n return render();\n}\n", "// eslint-disable-next-line no-unused-vars\nimport { createRef, useEffect, useState } from \"react\";\n\nimport ArrayWithObjects from \"./form-drivers/ArrayWithObjects\";\nimport ObjectWithIterableObjects from \"./form-drivers/ObjectWithIterableObjects\";\nimport ObjectWithNamedKeyObjects from \"./form-drivers/ObjectWithNamedKeyObjects\";\nimport General from \"./functions/General\";\nimport RenderFields from \"./functions/RenderFields\";\n\nconst DefaultFocusControllerProps = {\n setAutoFocus: true,\n onlyEmptyFieldAutoFocus: false,\n};\n\nexport default function useFormTools({\n form,\n setForm,\n FormType,\n FormFields,\n FormDataDriverName = \"ArrayWithObjects\" ||\n \"ObjectWithIterableObjects\" ||\n \"ObjectWithNamedKeyObjects\",\n FormDataDriver = null,\n FocusControllerProps = DefaultFocusControllerProps,\n goToNextFieldOnEnterPressed = true,\n} = {}) {\n FocusControllerProps = {\n ...DefaultFocusControllerProps,\n ...FocusControllerProps,\n };\n\n const FormDataDrivers = {\n ArrayWithObjects: {\n handlers: ArrayWithObjects,\n default: true,\n },\n ObjectWithIterableObjects: {\n handlers: ObjectWithIterableObjects,\n },\n ObjectWithNamedKeyObjects: {\n handlers: ObjectWithNamedKeyObjects,\n },\n };\n\n const getFormDataDriver = (name) => {\n return (\n FormDataDriver ||\n FormDataDrivers[name]?.handlers ||\n Object.values(FormDataDrivers).find((df) => df.default === true)\n ?.handlers ||\n (() => ({}))\n );\n };\n const getFormDataDriverInstance = (name, ...args) => {\n return getFormDataDriver(name)(...args);\n };\n\n const { getFieldClassName, updateFormField } = General();\n\n const {\n getFieldData,\n getFormField,\n setFormFields,\n setFormField,\n getFormFieldsAsArray,\n getFormFieldsKeys,\n removeAllFormFields,\n removeFormField,\n removeFormFields,\n } = getFormDataDriverInstance(FormDataDriverName, {\n form,\n setForm,\n FormFields,\n });\n\n ///////////////////////////////////////////////////////////////\n //--- OnChange Observer ---//--- START ---//\n const [onChangeObservers, setOnChangeObservers] = useState({});\n const addOnChangeObserver = (key, cb) => {\n let observerId = null;\n\n setOnChangeObservers((state) => {\n //Set Default Value\n if (!state[key]) state[key] = {};\n\n observerId = state[key].length;\n\n state[key][observerId] = cb;\n\n return state;\n });\n\n return observerId;\n };\n const removeOnChangeObserver = (key, id) => {\n setOnChangeObservers((state) => {\n //Set Default Value\n if (!state[key]) return state;\n\n state[key] = Object.keys(state)\n .filter((cbId) => cbId !== id)\n .map((cbId) => state[key][cbId]);\n\n return state;\n });\n };\n const onChangeObserver = (key, value) => {\n if (!onChangeObservers[key] || typeof onChangeObservers[key] !== \"object\")\n return;\n\n const Observers = onChangeObservers[key];\n\n Object.values(Observers).map((cb) => {\n cb({ value, form });\n return null;\n });\n };\n const onFieldChange = (key, value) => {\n if (value === getFormField(key)?.value) return false;\n\n onChangeObserver(key, value);\n setFormField(\n (field) => ({\n ...field,\n error: \"\",\n value,\n }),\n key,\n );\n };\n //--- OnChange Observer ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //--- Form Submit Blocker ---//--- START ---//\n const [formSubmitBlockers, setFormSubmitBlockers] = useState([]);\n const toggleFormSubmitBlock = (key, value) => {\n setFormSubmitBlockers((state) =>\n state.includes(key) || !value\n ? [...state.filter((k) => k !== key)]\n : [...state, key],\n );\n };\n const clearFormSubmitBlockers = () => setFormSubmitBlockers([]);\n //--- Form Submit Blocker ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //--- Property Observer Blocker ---//--- START ---//\n // const [propertyObservers, setPropertyObservers] = useState({});\n // function addPropertyObserver () {\n // };\n //--- Property Observer Blocker ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //--- Render Fields Controller ---//--- START ---//\n const [isFormFieldsAdded, setIsFormFieldsAdded] = useState(false);\n const [renderFormFields, setRenderFormFieldsState] = useState([]);\n const setRenderFormFields = (data) => {\n setIsFormFieldsAdded(true);\n // eslint-disable-next-line no-use-before-define\n removeRenderFields(renderFormFields);\n // eslint-disable-next-line no-use-before-define\n resetIsInitFocused();\n setRenderFormFieldsState(data);\n };\n const addRenderFields = (fields) => {\n setRenderFormFieldsState((state) => [...state, ...fields]);\n };\n const removeRenderFields = (fields) => {\n setRenderFormFieldsState((state) =>\n state.filter((field) => !fields.includes(field)),\n );\n };\n\n const [isFormRendered, setIsFormRendered] = useState(false);\n const submitIsFormRendered = () => setIsFormRendered(true);\n const resetIsFormRendered = () => setIsFormRendered(false);\n\n const onEnterDown = async (e) => {\n if (!goToNextFieldOnEnterPressed) return false;\n\n const focusable = document.querySelectorAll(\n 'a, button, input, [tabindex]:not([tabindex=\"-1\"])',\n );\n const currentIndex = await new Promise((resolve) => {\n focusable.forEach((node, i) => {\n if (node === e.target) resolve(i);\n });\n });\n\n if (!currentIndex) return false;\n\n const nextIndex = currentIndex + 1;\n\n if (nextIndex >= focusable.length) return false;\n\n const nextItem = focusable[nextIndex];\n\n nextItem.focus();\n };\n\n const onKeyDown = (...args) => {\n const event = args.reduce((e, item) => {\n if (item?.nativeEvent instanceof KeyboardEvent) return item;\n return e;\n }, null);\n\n if (!event) return false;\n\n const { keyCode } = event;\n\n switch (keyCode) {\n //OnEnterDown\n case 13:\n onEnterDown(event);\n break;\n\n default:\n break;\n }\n };\n\n //On Type Change\n useEffect(() => {\n resetIsFormRendered();\n }, [FormType]);\n\n //On Render Fields Change\n useEffect(() => {\n if (isFormFieldsAdded) resetIsFormRendered(false);\n\n //Add Form Fields\n if (renderFormFields.length !== 0) {\n setFormFields((fields) => {\n return renderFormFields.reduce((result, key) => {\n const fieldData = getFieldData(key);\n const field = getFormField(key) ? getFormField(key) : fieldData;\n\n if (\n !field?.className ||\n field?.className?.indexOf(getFieldClassName(key, FormType)) === -1\n ) {\n field.className = `${field?.className} ${getFieldClassName(key, FormType)}`;\n }\n\n if (typeof fieldData?.label === \"object\") {\n field.label = fieldData.label[FormType] || fieldData.label.default;\n }\n\n field.ref = createRef();\n field.wrapperRef = createRef();\n\n field.isValueChangedByUser = false;\n\n if (goToNextFieldOnEnterPressed) {\n const onKeyDownProp = field.onKeyDown || (() => {});\n field.onKeyDown = (...args) => {\n onKeyDown(...args);\n onKeyDownProp(...args);\n };\n }\n\n //Is Field Value Changed By USER\n // eslint-disable-next-line no-use-before-define\n addOnFieldRenderedObserver(\n key,\n () => {\n const element = getFormField(key)?.ref?.current?.querySelector(\n field?.focusSelector || \"input\",\n );\n const handler = () =>\n setFormField({ isValueChangedByUser: true }, key);\n\n element?.addEventListener(\"paste\", handler, { once: true });\n element?.addEventListener(\"keypress\", handler, { once: true });\n },\n true,\n );\n\n return updateFormField(result, field, key);\n }, fields);\n });\n }\n }, [renderFormFields]);\n\n const [onFormRenderObservers, setOnFormRenderObservers] = useState([]);\n const addOnFormRenderObserver = (cb, { once = false } = {}) => {\n setOnFormRenderObservers((state) => [\n ...state,\n { cb, once, isWorkedOut: false },\n ]);\n };\n // eslint-disable-next-line no-unused-vars\n const updateOnFormRenderObserver = (key, data) => {\n setOnFormRenderObservers((state) => {\n const copy = [...state];\n copy[key] = { ...state[key], ...data };\n\n return copy;\n });\n };\n const removeOnFormRenderObserver = (key) => {\n setOnFormRenderObservers((state) =>\n state.slice().filter((v, i) => i !== key),\n );\n };\n const onFormRenderWorker = () => {\n // eslint-disable-next-line default-param-last\n onFormRenderObservers.map(\n ({ once, isWorkedOut, cb = () => {} } = {}, key) => {\n if (once && isWorkedOut) return null;\n\n cb(form);\n if (once) removeOnFormRenderObserver(key);\n else updateOnFormRenderObserver(key, { isWorkedOut: true });\n return null;\n },\n );\n };\n\n //On Form Rendered\n useEffect(() => {\n if (!isFormRendered && onFormRenderObservers.length) {\n const formFieldsKeys = getFormFieldsKeys(form);\n const isAllFieldsRendered = renderFormFields.reduce((result, key) => {\n if (!formFieldsKeys.includes(key)) result = false;\n\n return result;\n }, true);\n\n if (isAllFieldsRendered) {\n submitIsFormRendered(true);\n onFormRenderWorker();\n }\n }\n }, [form, renderFormFields, onFormRenderObservers]);\n //--- Render Fields Controller ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //--- HIGHTLIGHT LABELS IF FIELD WITH ERROR ---//--- START ---//\n const hightliteErrorLabels = () => {\n const fields = getFormFieldsAsArray();\n\n const filtered = fields?.reduce((result, field) => {\n if (field?.errorLabelHightlite) {\n // eslint-disable-next-line no-use-before-define\n result.push({\n ...field,\n className: getFieldClassName(field?.key, FormType),\n });\n }\n\n return result;\n }, []);\n\n filtered?.map((field) => {\n const formField = document.querySelector(`.${field?.className}`);\n\n if (!formField) return null;\n\n formField.classList.remove(\"errorLabelHightlite\");\n\n if (field?.error) {\n formField.classList.add(\"errorLabelHightlite\");\n }\n\n return null;\n });\n };\n useEffect(() => {\n hightliteErrorLabels();\n }, [form]);\n //--- HIGHTLIGHT LABELS IF FIELD WITH ERROR ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //--- Fields Focus Controller ---//--- START ---//\n const [isInitFocused, setIsInitFocused] = useState(false);\n const [autoFocusedField, setAutoFocusedField] = useState(null);\n\n const setFirstFieldInitFocused = () => setIsInitFocused(true);\n const resetIsInitFocused = () => setIsInitFocused(false);\n\n const toggleFieldFocus = (\n { key, cb = () => {}, form: argForm, field },\n action = \"focus\",\n ) => {\n if (!key && !field) return null;\n\n if (!argForm) argForm = form;\n\n const formField = field || getFormField(key, argForm);\n\n if (!formField || !formField.ref) {\n return false;\n }\n\n if (\n action === \"focus\" &&\n FocusControllerProps.onlyEmptyFieldAutoFocus &&\n Boolean(formField?.value)\n )\n return null;\n\n setTimeout(() => {\n formField.ref.current\n ?.querySelector(formField?.focusSelector || \"input\")\n ?.[action]();\n cb();\n }, 50);\n };\n\n const setFieldFocus = ({ key, cb = () => {}, form: argForm, field }) =>\n toggleFieldFocus({ key, cb, form: argForm, field }, \"focus\");\n const setFieldBlur = ({ key, cb = () => {}, form: argForm, field }) =>\n toggleFieldFocus({ key, cb, form: argForm, field }, \"blur\");\n\n const setFirstFieldFocus = () => {\n let field = null;\n\n for (let i = 0; i < renderFormFields.length && !field; ++i) {\n const key = renderFormFields[i];\n const tmpField = getFormField(key);\n if (tmpField && !tmpField?.disabled) field = tmpField;\n }\n\n if (!field) return false;\n\n if (FocusControllerProps.onlyEmptyFieldAutoFocus && Boolean(field?.value)) {\n setFirstFieldInitFocused();\n return false;\n }\n\n setAutoFocusedField(field.key);\n\n const callback = () => {\n setFormField({ value: field.value }, field.key);\n setFirstFieldInitFocused();\n };\n\n setTimeout(() => setFieldFocus({ key: field.key, cb: callback, form }), 50);\n };\n\n const [onFieldFocusCallbacks, setOnFieldFocusCallbacks] = useState({});\n const addOnFieldFocusCallback = (key, cb) => {\n setOnFieldFocusCallbacks((state) => {\n const stateCopy = { ...state };\n\n if (!state[key]) stateCopy[key] = [];\n\n stateCopy[key].push(cb);\n\n return stateCopy;\n });\n };\n const callOnFieldFocusCallbacks = (key) => {\n if (!Array.isArray(onFieldFocusCallbacks[key])) return null;\n\n onFieldFocusCallbacks[key]?.map((cb) => cb());\n };\n\n const [focusOnRenderFields, setFocusOnRenderFields] = useState([]);\n const addFocusFieldOnRender = (key, cb) => {\n setFocusOnRenderFields((state) => [...state, key]);\n\n if (cb) addOnFieldFocusCallback(key, cb);\n };\n const removeFocusFieldOnRender = (key) => {\n setFocusOnRenderFields((state) => state.filter((field) => field !== key));\n };\n\n useEffect(() => {\n if (\n FocusControllerProps.setAutoFocus &&\n !isInitFocused &&\n !autoFocusedField &&\n isFormRendered\n )\n setFirstFieldFocus();\n\n if (focusOnRenderFields.length) {\n getFormFieldsKeys(form)?.map((key) => {\n if (\n focusOnRenderFields.includes(key) &&\n getFormField(key)?.value?.length === 0\n ) {\n const cb = () => {\n removeFocusFieldOnRender(key);\n callOnFieldFocusCallbacks(key);\n };\n\n setFieldFocus({ key, form, cb });\n }\n return null;\n });\n }\n }, [form, focusOnRenderFields, isInitFocused, isFormRendered]);\n\n useEffect(() => {\n setAutoFocusedField(null);\n }, [isInitFocused]);\n\n useEffect(() => {\n resetIsInitFocused();\n }, [FormType]);\n\n //Remove Focus From Autocomplete field !!! TODO\n // useEffect(() => {\n // if (!autoFocusedField) return null;\n // const field = getFormField(autoFocusedField);\n\n // if (field?.value !== '' && !field?.isValueChangedByUser) {\n // setFieldBlur({key: autoFocusedField, form});\n // }\n // }, [autoFocusedField, form]);\n //--- Fields Focus Controller ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //--- OnFieldRendered Observer ---//--- START ---//\n const [onFieldRenderedObservers, setOnFieldRenderedObservers] = useState({});\n const [isFieldObserversReset, setIsFieldObserversReset] = useState(false);\n\n const resetOnFieldRenderObserversWorkedOut = () => {\n if (!isFieldObserversReset && renderFormFields.length) {\n renderFormFields.map((key) => {\n setFormField({ isOnRenderObserversWorkedOut: false }, key);\n return key;\n });\n setIsFieldObserversReset(true);\n }\n };\n const addOnFieldRenderedObserver = (key, cb, isOnceCallable = true) => {\n let observerId = null;\n\n setOnFieldRenderedObservers((state) => {\n //Set Default Value\n if (!state[key]) state[key] = {};\n\n observerId = Object.keys(state[key]).length || 0;\n\n state[key][observerId] = {\n f: cb,\n isOnceCallable,\n };\n\n return state;\n });\n\n return observerId;\n };\n const updateOnFieldRenderedObserver = (key, id, data) => {\n setOnFieldRenderedObservers((state) => {\n //Set Default Value\n if (!state[key]) return state;\n\n state[key][id] = {\n ...state[key][id],\n ...data,\n };\n\n return state;\n });\n };\n const removeOnFieldRenderedObserver = (key, id) => {\n setOnFieldRenderedObservers((state) => {\n //Set Default Value\n if (!state[key]) return state;\n\n state[key] = Object.keys(state)\n .filter((cbId) => cbId !== id)\n .map((cbId) => state[key][cbId]);\n\n return state;\n });\n };\n const onFieldRenderedObserver = (key, data) => {\n if (\n !onFieldRenderedObservers[key] ||\n typeof onFieldRenderedObservers[key] !== \"object\"\n )\n return;\n\n const Observers = onFieldRenderedObservers[key];\n const FilteredObservers = Object.values(Observers).filter(\n (observer) => !observer?.isObserverWorkedOut,\n );\n\n if (FilteredObservers.length === 0) return null;\n\n setFormField({ isOnRenderObserversWorkedOut: true }, key);\n\n FilteredObservers.map(({ f, isOnceCallable }, id) => {\n f(data);\n if (isOnceCallable)\n updateOnFieldRenderedObserver(key, id, { isObserverWorkedOut: true });\n return null;\n });\n };\n const onRenderObserverWorker = () => {\n return getFormFieldsKeys(form)?.map((key) => {\n //OnFieldRendered\n const fieldData = getFormField(key);\n if (!fieldData?.isOnRenderObserversWorkedOut) {\n onFieldRenderedObserver(key, fieldData);\n return { key, isWorkedOut: true };\n }\n\n return { key, isWorkedOut: false };\n });\n };\n\n useEffect(() => {\n resetOnFieldRenderObserversWorkedOut();\n onRenderObserverWorker();\n }, [form]);\n\n useEffect(() => {\n setIsFieldObserversReset(false);\n }, [FormType]);\n //--- OnFieldRendered Observer ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //Detect What Changed || TRY TO DO\n // const compare = async (prev, current) => {\n // if (!prev) return current;\n\n // return new Promise((resolve) => {\n // Object.keys(current).reduce((result, key, i, arr) => {\n // //If PROPERTY is NOT EXISTS BEFORE\n // if ([null, undefined].includes(prev[key])) {\n // result[key] = current[key];\n // }\n // //If PROPERTY is AN OBJECT\n // else if (typeof current[key] === 'object') {\n // //If PROPERTY is EXISTS BEFORE\n // const innerCompare = compare(prev[key], current[key]);\n // // //If SOMETHING CHANGED\n // if (innerCompare?.length) result[key] = innerCompare;\n // }\n // //If PROPERTY is AN SIMPLE VALUE and PROPERTY CHANGED\n // else if (prev[key] !== current[key]) {\n // result[key] = current[key];\n // }\n\n // if (i === arr.length-1) {\n // resolve(result);\n // }\n\n // return result;\n // }, {});\n // });\n // };\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //--- WindowScrollController ---//--- START ---//\n const scrollToField = ({ key = null, field = null, form: argForm }) => {\n if (!key && !field) return false;\n if (!argForm) argForm = form;\n\n if (!field) field = getFormField(key, argForm);\n\n const wrapperRef = field?.wrapperRef || field?.ref;\n // eslint-disable-next-line no-unsafe-optional-chaining\n const { top: topOffset } = wrapperRef?.current?.getBoundingClientRect();\n const scrollTop =\n Math.abs(Math.abs(topOffset) - Math.abs(window.scrollY)) - 16;\n window.scrollTo({ top: scrollTop });\n };\n\n //--- WindowScrollController ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n const addErrorsToForm = (errors, argForm = form) => {\n if (!argForm) argForm = form;\n\n setFormFields((fields) => {\n return errors.reduce(\n (fields, { message: error, propertyPath: errKey }) => {\n return updateFormField(fields, { error }, errKey);\n },\n fields,\n );\n });\n };\n\n return {\n FormDataDrivers,\n\n //OnChangeObserver\n addOnChangeObserver,\n removeOnChangeObserver,\n onChangeObservers,\n\n //OnChangeHandler\n onFieldChange,\n\n //Form Submit Blocker\n toggleFormSubmitBlock,\n clearFormSubmitBlockers,\n isFormSubmitBlocked: Boolean(formSubmitBlockers.length),\n\n //Property Observers\n // addPropertyObserver,\n\n //Render Fields\n renderFormFields,\n setRenderFormFields,\n addRenderFields,\n removeRenderFields,\n\n getFieldClassName,\n\n //Field Focus Controller\n isInitFocused,\n setFirstFieldInitFocused,\n resetIsInitFocused,\n setFieldFocus,\n setFieldBlur,\n setFirstFieldFocus,\n autoFocusedField,\n\n addFocusFieldOnRender,\n removeFocusFieldOnRender,\n\n //Field Render Controller\n addOnFieldRenderedObserver,\n removeOnFieldRenderedObserver,\n onFieldRenderedObservers,\n\n updateFormField,\n addOnFormRenderObserver,\n submitIsFormRendered,\n resetIsFormRendered,\n renderFields: ({\n form: argForm = form,\n fields: argFields = renderFormFields,\n cols: argCols = 1,\n RenderFieldComponent,\n }) =>\n RenderFields({\n form: argForm,\n fields: argFields,\n cols: argCols,\n RenderFieldComponent,\n onFieldChange,\n FormDataDriver: getFormDataDriver(FormDataDriverName),\n }),\n\n scrollToField,\n\n getFieldData,\n getFormField,\n setFormFields,\n setFormField: (data, key) => setFormField(data, key),\n getFormFieldsAsArray,\n getFormFieldsKeys,\n removeAllFormFields,\n removeFormField,\n removeFormFields,\n addErrorsToForm,\n };\n}\n", "import React, { useEffect, useState } from \"react\";\n\nimport { KEYBOARD_SERVICE_KEYS } from \"../Constants/index.constants\";\n\nexport const useInputHighlightError = ({\n value,\n blinkTime,\n isUseErrorsBlink,\n}) => {\n const DEFAULT_BLINK_TIME = 100;\n const [isToHighlightError, setIsToHighlightError] = useState(false);\n const [isAttemptToChange, setIsAttemptToChange] = useState(false);\n const [prevValue, setPreviousValue] = useState(value);\n\n function hasHighlightError(e) {\n const changedValue = `${value ?? \"\"}`;\n const previousValue = `${prevValue ?? \"\"}`;\n\n const short =\n previousValue.length <= changedValue.length\n ? previousValue\n : changedValue;\n const long =\n previousValue.length > changedValue.length ? previousValue : changedValue;\n\n const infoAboutDifferencesSameness = short.split(\"\").reduce(\n (acc, symbol, idx) => {\n if (acc.countOn && symbol === long[idx]) acc.same.push(symbol);\n else {\n acc.countOn = false;\n acc.differences.push([idx, symbol]);\n }\n return acc;\n },\n { same: [], countOn: true, differences: [] },\n );\n\n const samePart = infoAboutDifferencesSameness.same.join(\"\");\n const differencesLength = infoAboutDifferencesSameness.differences.length;\n const currentSet = changedValue?.replace(samePart, \"\");\n\n if (\n !KEYBOARD_SERVICE_KEYS.includes(e.key) &&\n changedValue === previousValue\n )\n setIsAttemptToChange(!(!differencesLength && e.key === currentSet));\n }\n\n useEffect(() => {\n if (isUseErrorsBlink && isAttemptToChange) {\n setIsAttemptToChange(null);\n setIsToHighlightError(true);\n setTimeout(() => {\n setIsToHighlightError(false);\n }, blinkTime || DEFAULT_BLINK_TIME);\n }\n }, [isAttemptToChange]);\n\n return {\n isToHighlightError,\n setPreviousValue,\n setIsToHighlightError,\n hasHighlightError,\n };\n};\n\nexport default useInputHighlightError;\n", "import { useEffect, useState } from 'react';\n\ninterface UseIsMobileProps {\n isWithoutWidthCheck?: boolean;\n}\n\ninterface UseIsMobileProps {\n isWithoutWidthCheck?: boolean;\n}\n/**\n * Hook to detect if the current device is a mobile device\n * @param props - Configuration options\n * @param props.isWithoutWidthCheck - If true, only checks user agent without width verification\n * @returns Object containing isMobile flag\n */\nfunction useIsMobile({ isWithoutWidthCheck = false }: UseIsMobileProps = {}): { isMobile: boolean, isMobilePortrait: boolean; isMobileLandscape: boolean } {\n const isIPad = (): boolean => {\n const ua = navigator.userAgent || navigator.vendor || (window as any).opera;\n\n // iPadOS 13+ \u0432\u044B\u0434\u0430\u0435\u0442 \u0441\u0435\u0431\u044F \u043A\u0430\u043A Mac, \u043D\u043E \u0441 touch-\u044D\u043A\u0440\u0430\u043D\u043E\u043C\n const isMac = /Macintosh/.test(ua);\n const hasTouch = navigator.maxTouchPoints && navigator.maxTouchPoints > 2;\n\n return isMac && !!hasTouch;\n };\n\n const getIsMobile = (): boolean => {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) || isIPad();\n };\n\n const [isMobile, setIsMobile] = useState<boolean>(getIsMobile());\n\n useEffect(() => {\n if (getIsMobile()) {\n setIsMobile(true);\n }\n }, [navigator.userAgent]);\n\n return {\n isMobile: isMobile && (isWithoutWidthCheck || window.screen.width <= 768 || (window.screen.width <= 1024 && window.matchMedia('(orientation: landscape)').matches)),\n isMobilePortrait: isMobile && window.screen.width <= 768 && window.matchMedia('(orientation: portait)').matches,\n isMobileLandscape: isMobile && window.screen.width <= 1024 && window.matchMedia('(orientation: landscape)').matches,\n };\n}\n\nexport default useIsMobile;\n", "import useIsMobile from './useIsMobile';\n\nexport default useIsMobile;\n", "import { useCallback, useEffect, useState } from 'react';\nimport { getIsOnlyAnObject } from '../utils';\n\n/**\n * A hook that detects when a specific key is pressed\n * @param targetKey - The key to listen for\n * @param clamping - Whether to allow key repeat events\n * @returns boolean indicating if the target key is currently pressed\n */\n\nexport interface ISuspendProcessing {\n [key: string]: (event: globalThis.KeyboardEvent) => boolean; // \u0412\u0435\u0440\u043D\u0435\u0442 true, \u0435\u0441\u043B\u0438 \u041D\u0423\u0416\u041D\u041E \u043F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0443\n}\n\nexport function isISuspendProcessing(x: unknown): x is ISuspendProcessing {\n return getIsOnlyAnObject(x) && Object.values(x as Record<string, unknown>).every(v => typeof v === 'function');\n}\n\nfunction useKeyPress(\n targetKey: string,\n clamping: boolean = true,\n isForbidden?: boolean,\n suspendProcessing?: null | ISuspendProcessing,\n): boolean {\n const [keyPressed, setKeyPressed] = useState<boolean>(false);\n const safelySuspendProcessing = (isISuspendProcessing(suspendProcessing) ? suspendProcessing : {}) as ISuspendProcessing;\n\n const downHandler = useCallback(\n (event: globalThis.KeyboardEvent): void => {\n const { key, repeat, altKey, ctrlKey, shiftKey, metaKey } = event;\n const isPressingWithoutAuxiliaryKeys = !altKey && !ctrlKey && !shiftKey && !metaKey;\n\n if (key === targetKey && isPressingWithoutAuxiliaryKeys && !(safelySuspendProcessing[key]?.(event))) {\n if (!clamping && repeat) return;\n setKeyPressed(true);\n }\n },\n // ? \u041D\u0430\u043C\u0435\u0440\u044F\u043D\u043D\u043E \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E\u0441\u0442\u044F\u0445 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C \u0438\u043C\u0435\u043D\u043D\u043E \u0432\u0445\u043E\u0434\u043D\u043E\u0439 suspendProcessing,\n // ? \u0445\u043E\u0442\u044C \u0432 \u043A\u043E\u0434\u0435 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C \"\u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u044B\u0439\"\n [clamping, targetKey, suspendProcessing],\n );\n\n const upHandler = useCallback(\n (event: globalThis.KeyboardEvent): void => {\n const { key, repeat, altKey, ctrlKey, shiftKey, metaKey } = event;\n const isPressingWithoutAuxiliaryKeys = !altKey && !ctrlKey && !shiftKey && !metaKey;\n\n if (key === targetKey && isPressingWithoutAuxiliaryKeys && !(safelySuspendProcessing[key]?.(event))) {\n if (!clamping && repeat) return;\n setKeyPressed(false);\n }\n },\n // ? \u041D\u0430\u043C\u0435\u0440\u044F\u043D\u043D\u043E \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E\u0441\u0442\u044F\u0445 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C \u0438\u043C\u0435\u043D\u043D\u043E \u0432\u0445\u043E\u0434\u043D\u043E\u0439 suspendProcessing,\n // ? \u0445\u043E\u0442\u044C \u0432 \u043A\u043E\u0434\u0435 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C \"\u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u044B\u0439\"\n [clamping, targetKey, suspendProcessing],\n );\n\n useEffect(\n () => {\n const handleDown = (event: globalThis.KeyboardEvent): void => downHandler(event);\n const handleUp = (event: globalThis.KeyboardEvent): void => upHandler(event);\n\n if (!isForbidden) {\n window.addEventListener('keydown', handleDown);\n window.addEventListener('keyup', handleUp);\n }\n\n return () => {\n // ? \u041D\u0430\u043C\u0435\u0440\u044F\u043D\u043D\u043E \u041D\u0415 \u043E\u0431\u043E\u0440\u0430\u0447\u0438\u0432\u0430\u044E if-\u043A\u043E\u0439:\n // ? \u043F\u0440\u0438 \u043F\u043E\u043F\u044B\u0442\u043A\u0435 \u0441\u043D\u044F\u0442\u044C \u0435\u0441\u043B\u0438 \u043D\u0435 \u0431\u044B\u043B\u043E \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E \u043E\u0448\u0438\u0431\u043A\u0438 \u043D\u0435 \u0431\u0443\u0434\u0435\u0442,\n // ? \u043D\u043E \u043F\u0440\u0438 \u044D\u0442\u043E\u043C \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u043E \u043E\u0442\u0440\u0430\u0431\u043E\u0442\u0435\u0442 \u043F\u0435\u0440\u0435\u0445\u043E\u0434 \u0438\u0437 isForbidden: false \u0432 isForbidden: true.\n window.removeEventListener('keydown', handleDown);\n window.removeEventListener('keyup', handleUp);\n };\n },\n // ? \u041D\u0430\u043C\u0435\u0440\u044F\u043D\u043D\u043E \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E\u0441\u0442\u044F\u0445 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C \u0438\u043C\u0435\u043D\u043D\u043E \u0432\u0445\u043E\u0434\u043D\u043E\u0439 suspendProcessing,\n // ? \u0445\u043E\u0442\u044C \u0432 \u043A\u043E\u0434\u0435 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C \"\u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u044B\u0439\"\n [downHandler, upHandler, isForbidden, suspendProcessing],\n );\n\n return keyPressed;\n}\n\nexport default useKeyPress;\n", "import { useState } from \"react\";\n\nconst useLocalStorage = (key, initialValue) => {\n const [storedValue, setStoredValue] = useState(() => {\n if (typeof window === \"undefined\") {\n return initialValue;\n }\n try {\n const item = window.localStorage.getItem(key);\n return item ? JSON.parse(item) : initialValue;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.log(error);\n return initialValue;\n }\n });\n\n const setValue = (value) => {\n try {\n const valueToStore =\n value instanceof Function ? value(storedValue) : value;\n setStoredValue(valueToStore);\n if (typeof window !== \"undefined\") {\n window.localStorage.setItem(key, JSON.stringify(valueToStore));\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.log(error);\n }\n };\n\n return [storedValue, setValue];\n};\nexport default useLocalStorage;\n", "import { useEffect, useState } from \"react\";\n\nexport default function useLocationParams() {\n const [params, setParams] = useState({});\n\n useEffect(() => {\n setParams((state) => {\n const arr = window.location.search?.replace(\"?\", \"\").split(\"&\");\n\n return {\n ...state,\n ...arr.reduce((obj, item) => {\n const keyVal = item.split(\"=\");\n const key = keyVal[0];\n const value = decodeURIComponent(keyVal[1]);\n\n return {\n ...obj,\n [key]: value,\n };\n }, {}),\n };\n });\n }, [window.location.search]);\n\n return params;\n}\n", "import { useSyncExternalStore } from \"react\";\n\nfunction subscribe(callback) {\n const observer = new ResizeObserver(() => callback());\n observer.observe(document.documentElement);\n return () => observer.disconnect();\n}\n\nconst useMediaQuery = (query) => {\n return useSyncExternalStore(\n subscribe,\n () => window.matchMedia(query).matches,\n () => false,\n );\n};\n\nexport default useMediaQuery;\n", "import { useEffect, useState } from \"react\";\n\nexport const useMetaInfo = () => {\n const [browser, setBrowser] = useState(\"Other\");\n const [device, setDevice] = useState(\"desktop\");\n const [isiOS, setIsiOS] = useState(false);\n const [chromeVersion, setChromeVersion] = useState(null);\n const [iOSVersion, setiOSVersion] = useState(null);\n\n useEffect(() => {\n const userAgent = navigator.userAgent;\n\n if (userAgent.indexOf(\"Chrome\") !== -1) {\n setBrowser(\"Chrome\");\n\n // \u0418\u0437\u0432\u043B\u0435\u0447\u0435\u043D\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 Chrome\n const version = userAgent.match(/Chrom(e|ium)\\/([0-9\\.]+)/)[2];\n setChromeVersion(version);\n } else if (userAgent.indexOf(\"Safari\") !== -1) setBrowser(\"Safari\");\n\n const iOSV = (\n (userAgent.match(/(CPU|iPhone).*OS (\\d+_?\\d*)|CPU like Mac OS X/i) ||\n [])[2] || \"0\"\n ).replace(\"_\", \".\");\n const iOSVersion = parseFloat(iOSV);\n\n setIsiOS(!isNaN(iOSVersion));\n if (!isNaN(iOSVersion)) {\n setiOSVersion(iOSV); // \u0417\u0430\u043F\u0438\u0441\u044B\u0432\u0430\u0435\u043C \u0432\u0435\u0440\u0441\u0438\u044E iOS\n }\n\n if (\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n userAgent,\n )\n )\n setDevice(\"mobile\");\n }, []);\n\n return { browser, device, isiOS, chromeVersion, iOSVersion }; // \u0412\u043E\u0437\u0432\u0440\u0430\u0442 \u0432\u0435\u0440\u0441\u0438\u0439 Chrome \u0438 iOS\n};\n\nexport default useMetaInfo;\n", "import { useEffect } from \"react\";\n\nexport default function useMouseUpOutside(ref, setOut, open) {\n function handleMouseUpOutside(event) {\n if (ref.current && !ref.current.contains(event.target)) {\n setOut(open);\n }\n }\n\n useEffect(() => {\n document.addEventListener(\"mouseup\", handleMouseUpOutside);\n return () => {\n document.removeEventListener(\"mouseup\", handleMouseUpOutside);\n };\n }, [ref]);\n}\n", "import { useEffect, useState } from \"react\";\n\nconst useOnlineStatus = () => {\n function getOnlineStatus() {\n return typeof navigator !== \"undefined\" &&\n typeof navigator.onLine === \"boolean\"\n ? navigator.onLine\n : true;\n }\n const [onlineStatus, setOnlineStatus] = useState(getOnlineStatus());\n\n const goOnline = () => setOnlineStatus(true);\n\n const goOffline = () => setOnlineStatus(false);\n\n useEffect(() => {\n window.addEventListener(\"online\", goOnline);\n window.addEventListener(\"offline\", goOffline);\n\n return () => {\n window.removeEventListener(\"online\", goOnline);\n window.removeEventListener(\"offline\", goOffline);\n };\n }, []);\n\n return onlineStatus;\n};\n\nexport default useOnlineStatus;\n", "import React, { useState } from \"react\";\n\nimport cn from \"classnames\";\n\nexport default function usePasswordChecker({ label = \"Password must:\" } = {}) {\n const [checkRules, setCheckRules] = useState([]);\n const addCheckRule = (data) => setCheckRules((state) => [...state, data]);\n const handleCheckRule = (type, props = {}, value = \"\") => {\n const { min, max } = props;\n\n switch (type) {\n case \"len\":\n if (min && value.length < min) return false;\n if (max && value.length > max) return false;\n return true;\n\n case \"lowerCaseContains\": {\n const toUpperCase = value.slice().toUpperCase().split(\"\");\n const original = value.slice().split(\"\");\n\n return original.reduce((isMatch, char, i) => {\n if (char !== toUpperCase[i]) isMatch = true;\n\n return isMatch;\n }, false);\n }\n\n case \"upperCaseContains\": {\n const toLowerCase = value.slice().toLowerCase().split(\"\");\n const original = value.slice().split(\"\");\n\n return original.reduce((isMatch, char, i) => {\n if (char !== toLowerCase[i]) isMatch = true;\n\n return isMatch;\n }, false);\n }\n\n case \"numberContains\": {\n const original = value.slice().split(\"\");\n return original.reduce((isMatch, char) => {\n if (Number.isInteger(parseInt(char, 10))) isMatch = true;\n\n return isMatch;\n }, false);\n }\n\n case \"specialContains\": {\n const original = value.slice().split(\"\");\n return original.reduce((isMatch, char) => {\n if (!Number.isInteger(parseInt(char, 10)) && !char.match(/[a-z]/i))\n isMatch = true;\n\n return isMatch;\n }, false);\n }\n\n default:\n return false;\n }\n };\n const testCheckRules = (value) => {\n let result = true;\n\n setCheckRules((state) => {\n const rules = [...state];\n return rules.map((rule) => {\n const isMatch = handleCheckRule(rule.type, rule.props, value);\n if (!isMatch) result = false;\n\n return { ...rule, isMatch };\n });\n });\n\n return result;\n };\n\n const renderPasswordChecker = () => {\n return (\n <div className=\"password-checker\">\n <div className=\"password-checker__header\">\n <label className=\"password-checker__header-label\"> {label} </label>{\" \"}\n </div>{\" \"}\n <div className=\"password-checker__body\">\n {\" \"}\n {checkRules.map(({ icon, text, isMatch, key }) => (\n <div\n key={key}\n className={cn(\"password-checker__body-item\", {\n \"password-checker__body-item--match\":\n isMatch && isMatch !== null,\n \"password-checker__body-item--dont-match\":\n !isMatch && isMatch !== null,\n })}\n >\n <div className=\"password-checker__body-item__icon\"> {icon} </div>{\" \"}\n <div className=\"password-checker__body-item__text\"> {text} </div>{\" \"}\n </div>\n ))}{\" \"}\n </div>{\" \"}\n </div>\n );\n };\n\n return {\n addCheckRule,\n testCheckRules,\n renderPasswordChecker,\n };\n}\n", "import { useEffect, useRef } from \"react\";\n\nfunction usePrevious(value) {\n const ref = useRef();\n\n useEffect(() => {\n ref.current = value;\n }, [value]);\n return ref.current;\n}\n\nexport default usePrevious;\n", "import { useEffect, useLayoutEffect, useState } from \"react\";\n\nexport const useResize = (element) => {\n const [elemPosition, setElemPosition] = useState(\"\");\n\n const onResize = (elemRightPosition) => {\n if (elemRightPosition > document.documentElement.clientWidth) {\n return setElemPosition(\"left\");\n } else setElemPosition(\"\");\n };\n\n useEffect(() => {\n const elemRightPosition =\n element?.current?.getBoundingClientRect().right + 20;\n window.addEventListener(\"resize\", () => onResize(elemRightPosition));\n\n return () => {\n window.removeEventListener(\"resize\", () => setElemPosition(\"\"));\n };\n }, []);\n\n useLayoutEffect(() => {\n const elemRightPosition =\n element?.current?.getBoundingClientRect().right + 20;\n if (elemRightPosition > document.documentElement.clientWidth) {\n return setElemPosition(\"left\");\n }\n }, []);\n\n return { elemPosition };\n};\n", "import { useEffect, useRef, useState } from \"react\";\n\nconst useScrollTo = (reference) => {\n const ref = useRef(reference);\n const [shouldScrollTo, setShouldScrollTo] = useState(false);\n\n useEffect(() => {\n if (ref?.current && shouldScrollTo) {\n ref?.current?.scrollIntoView?.({ behavior: \"smooth\" });\n setShouldScrollTo(false);\n }\n }, [shouldScrollTo]);\n\n return [ref, setShouldScrollTo];\n};\n\nexport default useScrollTo;\n", "import { useCallback, useState } from \"react\";\n\nconst useToggle = (initialState) => {\n const [isToggled, setToggle] = useState(Boolean(initialState));\n const toggle = useCallback(() => setToggle((isOn) => !isOn), []);\n const toggleOn = useCallback(() => setToggle(true), []);\n const toggleOff = useCallback(() => setToggle(false), []);\n\n return {\n isToggled,\n toggle,\n toggleOn,\n toggleOff,\n };\n};\n\nexport default useToggle;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["(function () {\n if (Element.prototype.__customEventListenerPatched) return;\n Element.prototype.__customEventListenerPatched = true;\n\n Element.prototype._addEventListener = Element.prototype.addEventListener;\n Element.prototype.addEventListener = function (a, b, c) {\n if (c == undefined) c = false;\n this._addEventListener(a, b, c);\n if (!this.eventListenerList) this.eventListenerList = {};\n if (!this.eventListenerList[a]) this.eventListenerList[a] = [];\n //this.removeEventListener(a,b,c); // TODO - handle duplicates..\n this.eventListenerList[a].push({ listener: b, useCapture: c });\n };\n\n Element.prototype.getEventListeners = function (a) {\n if (!this.eventListenerList) this.eventListenerList = {};\n if (a == undefined) return this.eventListenerList;\n return this.eventListenerList[a];\n };\n Element.prototype.clearEventListeners = function (a) {\n if (!this.eventListenerList) this.eventListenerList = {};\n if (a == undefined) {\n for (const x in this.getEventListeners()) this.clearEventListeners(x);\n return;\n }\n const el = this.getEventListeners(a);\n if (el == undefined) return;\n for (let i = el.length - 1; i >= 0; --i) {\n const ev = el[i];\n this.removeEventListener(a, ev.listener, ev.useCapture);\n }\n };\n\n Element.prototype._removeEventListener =\n Element.prototype.removeEventListener;\n Element.prototype.removeEventListener = function (a, b, c) {\n if (c == undefined) c = false;\n this._removeEventListener(a, b, c);\n if (!this.eventListenerList) this.eventListenerList = {};\n if (!this.eventListenerList[a]) this.eventListenerList[a] = [];\n\n // Find the event in the list\n for (let i = 0; i < this.eventListenerList[a].length; i++) {\n if (\n this.eventListenerList[a][i].listener == b &&\n this.eventListenerList[a][i].useCapture == c\n ) {\n // Hmm..\n this.eventListenerList[a].splice(i, 1);\n break;\n }\n }\n if (this.eventListenerList[a].length == 0) delete this.eventListenerList[a];\n };\n})();\n\n/**\n * \u0414\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u0442 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A \u0441\u043E\u0431\u044B\u0442\u0438\u044F \u043A \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0443\n * @param {HTMLElement} element - DOM \u044D\u043B\u0435\u043C\u0435\u043D\u0442\n * @param {string} eventName - \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u043E\u0431\u044B\u0442\u0438\u044F\n * @param {Function} handler - \u0424\u0443\u043D\u043A\u0446\u0438\u044F-\u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\n */\nexport function addEventListener(element, eventName, handler) {\n if (element && element.addEventListener) {\n element.addEventListener(eventName, handler);\n }\n}\n\n/**\n * \u0423\u0434\u0430\u043B\u044F\u0435\u0442 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A \u0441\u043E\u0431\u044B\u0442\u0438\u044F \u0441 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\n * @param {HTMLElement} element - DOM \u044D\u043B\u0435\u043C\u0435\u043D\u0442\n * @param {string} eventName - \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u043E\u0431\u044B\u0442\u0438\u044F\n * @param {Function} handler - \u0424\u0443\u043D\u043A\u0446\u0438\u044F-\u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\n */\nexport function removeEventListener(element, eventName, handler) {\n if (element && element.removeEventListener) {\n element.removeEventListener(eventName, handler);\n }\n}\n\n/**\n * \u0421\u043E\u0437\u0434\u0430\u0435\u0442 \u0438 \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u043A\u0430\u0441\u0442\u043E\u043C\u043D\u043E\u0435 \u0441\u043E\u0431\u044B\u0442\u0438\u0435\n * @param {HTMLElement} element - DOM \u044D\u043B\u0435\u043C\u0435\u043D\u0442\n * @param {string} eventName - \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u043E\u0431\u044B\u0442\u0438\u044F\n * @param {Object} detail - \u0414\u0430\u043D\u043D\u044B\u0435 \u0441\u043E\u0431\u044B\u0442\u0438\u044F\n */\nexport function dispatchCustomEvent(element, eventName, detail = {}) {\n if (element) {\n const event = new CustomEvent(eventName, { detail });\n element.dispatchEvent(event);\n }\n}\n\n// \u042D\u043A\u0441\u043F\u043E\u0440\u0442\u0438\u0440\u0443\u0435\u043C \u043E\u0431\u044A\u0435\u043A\u0442 \u0441\u043E \u0432\u0441\u0435\u043C\u0438 \u0444\u0443\u043D\u043A\u0446\u0438\u044F\u043C\u0438 \u0434\u043B\u044F \u043E\u0431\u0440\u0430\u0442\u043D\u043E\u0439 \u0441\u043E\u0432\u043C\u0435\u0441\u0442\u0438\u043C\u043E\u0441\u0442\u0438\nexport default {\n addEventListener,\n removeEventListener,\n dispatchCustomEvent\n};\n", "import moment from \"moment\";\n\n/**\n * @constant {Object} DATETIME_FORMATS\n * @description \u0412\u0441\u0435 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0435 \u0444\u043E\u0440\u043C\u0430\u0442\u044B \u0434\u0430\u0442 \u0438 \u0432\u0440\u0435\u043C\u0435\u043D\u0438.\n */\nexport const DATETIME_FORMATS = Object.freeze({\n // \u041E\u0441\u043D\u043E\u0432\u043D\u044B\u0435 \u0444\u043E\u0440\u043C\u0430\u0442\u044B\n DATE_FORMAT: \"YYYY-MM-DD\", // \u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442 \u0434\u0430\u0442\u044B\n DATE_WITHOUT_SEPARATORS: \"MMDDYYYY\", // \u0411\u0435\u0437 \u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u0435\u0439\n VALIDATION_DATE_FORMAT: \"MM/DD/YYYY\", // \u0414\u043B\u044F \u0432\u0430\u043B\u0438\u0434\u0430\u0446\u0438\u0438\n INPUT_DATE_FORMAT: \"MM.DD.YYYY\", // \u0424\u043E\u0440\u043C\u0430\u0442 \u0434\u043B\u044F \u0432\u0432\u043E\u0434\u0430\n INPUT_TIME_FORMAT: \"YYYY-MM-DD HH:mm:SS\", // \u0412\u0432\u043E\u0434 \u0432\u0440\u0435\u043C\u0435\u043D\u0438\n TIME_FORMAT_WSPACE: \"YYYY-MM-DD HH:mm:SS\", // \u0412\u0440\u0435\u043C\u044F \u0441 \u043F\u0440\u043E\u0431\u0435\u043B\u043E\u043C\n TIME_FORMAT: \"YYYY-MM-DDTHH:mm:SS\", // \u0412\u0440\u0435\u043C\u044F \u0441 T (ISO \u0444\u043E\u0440\u043C\u0430\u0442)\n DATE_FORMAT_WITH_SLASH: \"MM/DD/YYYY\", // \u0414\u0430\u0442\u0430 \u0441 \u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u0435\u043C /\n\n // \u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u0444\u043E\u0440\u043C\u0430\u0442\u044B\n DATE_WITH_DASHES: \"MM-DD-YYYY\", // \u0414\u0430\u0442\u0430 \u0441 \u0434\u0435\u0444\u0438\u0441\u0430\u043C\u0438\n DATE_WITH_DOTS: \"DD.MM.YYYY\", // \u0414\u0430\u0442\u0430 \u0441 \u0442\u043E\u0447\u043A\u0430\u043C\u0438\n DATE_WITH_COMMA: \"DD,MM,YYYY\", // \u0414\u0430\u0442\u0430 \u0441 \u0437\u0430\u043F\u044F\u0442\u044B\u043C\u0438\n FULL_DATE_TIME: \"YYYY-MM-DD HH:mm:ss\", // \u041F\u043E\u043B\u043D\u0430\u044F \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043C\u044F\n ISO_DATE_TIME: \"YYYY-MM-DDTHH:mm:ss.SSSZ\", // ISO \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442 \u0441 \u043C\u0438\u043B\u043B\u0438\u0441\u0435\u043A\u0443\u043D\u0434\u0430\u043C\u0438\n LOCALIZED_DATE: \"MMMM DD, YYYY\", // \u041B\u043E\u043A\u0430\u043B\u0438\u0437\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442 \u0441 \u043F\u043E\u043B\u043D\u044B\u043C \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435\u043C \u043C\u0435\u0441\u044F\u0446\u0430\n SHORT_DATE: \"MM/DD/YY\", // \u041A\u0440\u0430\u0442\u043A\u0430\u044F \u0434\u0430\u0442\u0430\n SHORT_DATE_WITH_TIME: \"MM/DD/YY HH:mm\", // \u041A\u0440\u0430\u0442\u043A\u0430\u044F \u0434\u0430\u0442\u0430 \u0441 \u0432\u0440\u0435\u043C\u0435\u043D\u0435\u043C\n TIME_24H: \"HH:mm\", // \u0412\u0440\u0435\u043C\u044F \u0432 24-\u0447\u0430\u0441\u043E\u0432\u043E\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u0435\n TIME_12H: \"hh:mm A\", // \u0412\u0440\u0435\u043C\u044F \u0432 12-\u0447\u0430\u0441\u043E\u0432\u043E\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u0435\n TIME_12H_WITH_SECONDS: \"hh:mm:ss A\", // \u0412\u0440\u0435\u043C\u044F \u0432 12-\u0447\u0430\u0441\u043E\u0432\u043E\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u0435 \u0441 \u0441\u0435\u043A\u0443\u043D\u0434\u0430\u043C\u0438\n TIME_24H_WITH_SECONDS: \"HH:mm:ss\", // \u0412\u0440\u0435\u043C\u044F \u0432 24-\u0447\u0430\u0441\u043E\u0432\u043E\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u0435 \u0441 \u0441\u0435\u043A\u0443\u043D\u0434\u0430\u043C\u0438\n MONTH_DAY: \"MM/DD\", // \u0422\u043E\u043B\u044C\u043A\u043E \u043C\u0435\u0441\u044F\u0446 \u0438 \u0434\u0435\u043D\u044C\n YEAR_MONTH_DAY: \"YYYY/MM/DD\", // \u0413\u043E\u0434/\u041C\u0435\u0441\u044F\u0446/\u0414\u0435\u043D\u044C\n});\n\nconst formatMap = Object.freeze({\n [DATETIME_FORMATS.DATE_FORMAT]: \"YYYY-MM-DD\", // \u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442 \u0434\u0430\u0442\u044B\n [DATETIME_FORMATS.DATE_WITHOUT_SEPARATORS]: \"MMDDYYYY\", // \u0411\u0435\u0437 \u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u0435\u0439\n [DATETIME_FORMATS.VALIDATION_DATE_FORMAT]: \"MM/DD/YYYY\", // \u0414\u043B\u044F \u0432\u0430\u043B\u0438\u0434\u0430\u0446\u0438\u0438\n [DATETIME_FORMATS.INPUT_DATE_FORMAT]: \"MM.DD.YYYY\", // \u0424\u043E\u0440\u043C\u0430\u0442 \u0434\u043B\u044F \u0432\u0432\u043E\u0434\u0430\n [DATETIME_FORMATS.INPUT_TIME_FORMAT]: \"YYYY-MM-DD HH:mm:SS\", // \u0412\u0432\u043E\u0434 \u0432\u0440\u0435\u043C\u0435\u043D\u0438\n [DATETIME_FORMATS.TIME_FORMAT_WSPACE]: \"YYYY-MM-DD HH:mm:SS\", // \u0412\u0440\u0435\u043C\u044F \u0441 \u043F\u0440\u043E\u0431\u0435\u043B\u043E\u043C\n [DATETIME_FORMATS.TIME_FORMAT]: \"YYYY-MM-DDTHH:mm:SS\", // \u0412\u0440\u0435\u043C\u044F \u0441 T (ISO \u0444\u043E\u0440\u043C\u0430\u0442)\n [DATETIME_FORMATS.DATE_FORMAT_WITH_SLASH]: \"MM/DD/YYYY\", // \u0414\u0430\u0442\u0430 \u0441 \u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u0435\u043C /\n [DATETIME_FORMATS.DATE_WITH_DASHES]: \"MM-DD-YYYY\", // \u0414\u0430\u0442\u0430 \u0441 \u0434\u0435\u0444\u0438\u0441\u0430\u043C\u0438\n [DATETIME_FORMATS.DATE_WITH_DOTS]: \"DD.MM.YYYY\", // \u0414\u0430\u0442\u0430 \u0441 \u0442\u043E\u0447\u043A\u0430\u043C\u0438\n [DATETIME_FORMATS.DATE_WITH_COMMA]: \"DD,MM,YYYY\", // \u0414\u0430\u0442\u0430 \u0441 \u0437\u0430\u043F\u044F\u0442\u044B\u043C\u0438\n [DATETIME_FORMATS.FULL_DATE_TIME]: \"YYYY-MM-DD HH:mm:ss\", // \u041F\u043E\u043B\u043D\u0430\u044F \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043C\u044F\n [DATETIME_FORMATS.ISO_DATE_TIME]: \"YYYY-MM-DDTHH:mm:ss.SSSZ\", // ISO \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442 \u0441 \u043C\u0438\u043B\u043B\u0438\u0441\u0435\u043A\u0443\u043D\u0434\u0430\u043C\u0438\n [DATETIME_FORMATS.LOCALIZED_DATE]: \"MMMM DD, YYYY\", // \u041B\u043E\u043A\u0430\u043B\u0438\u0437\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442 \u0441 \u043F\u043E\u043B\u043D\u044B\u043C \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435\u043C \u043C\u0435\u0441\u044F\u0446\u0430\n [DATETIME_FORMATS.SHORT_DATE]: \"MM/DD/YY\", // \u041A\u0440\u0430\u0442\u043A\u0430\u044F \u0434\u0430\u0442\u0430\n [DATETIME_FORMATS.SHORT_DATE_WITH_TIME]: \"MM/DD/YY HH:mm\", // \u041A\u0440\u0430\u0442\u043A\u0430\u044F \u0434\u0430\u0442\u0430 \u0441 \u0432\u0440\u0435\u043C\u0435\u043D\u0435\u043C\n [DATETIME_FORMATS.TIME_24H]: \"HH:mm\", // \u0412\u0440\u0435\u043C\u044F \u0432 24-\u0447\u0430\u0441\u043E\u0432\u043E\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u0435\n [DATETIME_FORMATS.TIME_12H]: \"hh:mm A\", // \u0412\u0440\u0435\u043C\u044F \u0432 12-\u0447\u0430\u0441\u043E\u0432\u043E\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u0435\n [DATETIME_FORMATS.TIME_12H_WITH_SECONDS]: \"hh:mm:ss A\", // \u0412\u0440\u0435\u043C\u044F \u0432 12-\u0447\u0430\u0441\u043E\u0432\u043E\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u0435 \u0441 \u0441\u0435\u043A\u0443\u043D\u0434\u0430\u043C\u0438\n [DATETIME_FORMATS.TIME_24H_WITH_SECONDS]: \"HH:mm:ss\", // \u0412\u0440\u0435\u043C\u044F \u0432 24-\u0447\u0430\u0441\u043E\u0432\u043E\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u0435 \u0441 \u0441\u0435\u043A\u0443\u043D\u0434\u0430\u043C\u0438\n [DATETIME_FORMATS.MONTH_DAY]: \"MM/DD\", // \u0422\u043E\u043B\u044C\u043A\u043E \u043C\u0435\u0441\u044F\u0446 \u0438 \u0434\u0435\u043D\u044C\n [DATETIME_FORMATS.YEAR_MONTH_DAY]: \"YYYY/MM/DD\", // \u0413\u043E\u0434/\u041C\u0435\u0441\u044F\u0446/\u0414\u0435\u043D\u044C\n});\n\n/**\n * @constant {Object} DATE_UNITS\n * @description \u0415\u0434\u0438\u043D\u0438\u0446\u044B \u0432\u0440\u0435\u043C\u0435\u043D\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u044B \u0434\u043B\u044F \u0440\u0430\u0431\u043E\u0442\u044B \u0441 \u0434\u0430\u0442\u0430\u043C\u0438.\n */\nexport const DATE_UNITS = Object.freeze({\n YEARS: Object.freeze({\n YEARS: \"years\",\n YEAR: \"year\",\n Y: \"y\",\n TEMPLATE: \"YYYY\",\n }),\n\n MONTHS: Object.freeze({\n MONTHS: \"months\",\n MONTH: \"month\",\n MON: \"M\",\n TEMPLATE: \"MM\",\n }),\n\n DAYS: Object.freeze({\n DAYS: \"days\",\n DAY: \"day\",\n D: \"d\",\n TEMPLATE: \"DD\",\n }),\n\n HOURS: Object.freeze({\n HOURS: \"hours\",\n HOUR: \"hour\",\n H: \"h\",\n TEMPLATE: \"HH\",\n }),\n\n WEEKS: Object.freeze({\n WEEKS: \"weeks\",\n WEEK: \"week\",\n W: \"w\",\n }),\n\n QUARTERS: Object.freeze({\n QUARTERS: \"quarters\",\n QUARTER: \"quarter\",\n Q: \"Q\",\n }),\n\n MINUTES: Object.freeze({\n MINUTES: \"minutes\",\n MINUTE: \"minute\",\n MIN: \"m\",\n }),\n\n SECONDS: Object.freeze({\n SECONDS: \"seconds\",\n SECOND: \"second\",\n S: \"s\",\n }),\n\n MILLISECONDS: Object.freeze({\n MILLISECONDS: \"milliseconds\",\n MILLISECOND: \"millisecond\",\n MS: \"ms\",\n }),\n});\n\n/**\n * \u0424\u0443\u043D\u043A\u0446\u0438\u044F \u0434\u043B\u044F \u043F\u0430\u0440\u0441\u0438\u043D\u0433\u0430 \u0438 \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0441\u0442\u0440\u043E\u043A\u0438 \u0441 \u0434\u0430\u0442\u043E\u0439 \u0432 \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442.\n *\n * @param {string} value - \u0421\u0442\u0440\u043E\u043A\u0430 \u0441 \u0434\u0430\u0442\u043E\u0439, \u043A\u043E\u0442\u043E\u0440\u0443\u044E \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E \u0440\u0430\u0441\u043F\u0430\u0440\u0441\u0438\u0442\u044C \u0438 \u043E\u0442\u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C.\n * @param {string} [outputFormat=DATETIME_FORMATS.INPUT_DATE_FORMAT] - \u0424\u043E\u0440\u043C\u0430\u0442, \u0432 \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u0431\u0443\u0434\u0435\u0442 \u043F\u0440\u0435\u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u043D\u0430 \u0434\u0430\u0442\u0430.\n * \u0415\u0441\u043B\u0438 \u043D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u0444\u043E\u0440\u043C\u0430\u0442 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E `MM.DD.YYYY`.\n *\n * @returns {string} - \u041E\u0442\u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u0430\u044F \u0434\u0430\u0442\u0430 \u0432 \u0441\u0442\u0440\u043E\u043A\u043E\u0432\u043E\u043C \u0432\u0438\u0434\u0435, \u0438\u043B\u0438 \u0438\u0441\u0445\u043E\u0434\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430, \u0435\u0441\u043B\u0438 \u0434\u0430\u0442\u0430 \u043D\u0435 \u0440\u0430\u0441\u043F\u043E\u0437\u043D\u0430\u043D\u0430.\n *\n * @throws {Error} - \u0415\u0441\u043B\u0438 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0434\u0430\u0442\u044B \u043D\u0435\u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u043E (\u043D\u0435 \u0441\u0442\u0440\u043E\u043A\u0430 \u0438\u043B\u0438 \u043F\u0443\u0441\u0442\u043E\u0435).\n */\nexport function parseAndFormatDate(\n value,\n outputFormat = DATETIME_FORMATS.INPUT_DATE_FORMAT,\n) {\n if (!value || typeof value !== \"string\") return value;\n\n for (let format in formatMap) {\n const parsedDate = moment(value, formatMap[format], true);\n if (parsedDate.isValid()) {\n return parsedDate.format(outputFormat);\n }\n }\n\n return value;\n}\n", "export const KEYBOARD_SERVICE_KEYS = [\n \"Escape\",\n \"F1\",\n \"F2\",\n \"F3\",\n \"F4\",\n \"F5\",\n \"F6\",\n \"F7\",\n \"F8\",\n \"F9\",\n \"F10\",\n \"F11\",\n \"F12\",\n \"Tab\",\n \"CapsLock\",\n \"Shift\",\n \"Control\",\n \"Meta\",\n \"Option\",\n \"Alt\",\n \"ContextMenu\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"ArrowUp\",\n \"ArrowDown\",\n \"NumLock\",\n \"Backspace\",\n \"Delete\",\n \"Enter\",\n \"Return\",\n \"Insert\",\n \"Home\",\n \"End\",\n \"PageUp\",\n \"PageDown\",\n \"PrintScreen\",\n \"ScrollLock\",\n \"Pause\",\n];\n\nexport const MAX_PHONE_LENGTH = 10;\nexport const MAX_NAME_LENGTH = 128;\n\nexport const DEFAULT_DATE_MASK_NO_VALUE_SYMBOL = \"_\";\n\nexport const DEFAULT_COLORS = [\n \"#D9C1FF\",\n \"#FFBAF0\",\n \"#FFB8CE\",\n \"#FFC3A2\",\n \"#FFDB7C\",\n \"#F9F871\",\n \"#C3FCF1\",\n \"#F6F2CB\",\n \"#E0F8D1\",\n \"#B1DFFB\",\n \"#8DECFE\",\n \"#76F7ED\",\n \"#8AFEC8\",\n];\n\nexport const KEYBOARD_KEY_CODES = {\n Backspace: 8,\n Delete: 46,\n ARROW_LEFT: 37,\n ARROW_RIGHT: 39,\n};\n\nexport const OS = {\n iOS: \"iOS\",\n Android: \"Android\",\n WP: \"Windows Phone\",\n Linux: \"Linux\",\n Windows: \"Windows\",\n MacOS: \"MacOS\",\n Unknown: \"unknown\",\n};\n", "import { useEffect } from \"react\";\n\nimport moment from \"moment-timezone\";\n\nimport { DEFAULT_COLORS, OS } from \"../Constants/index.constants\";\n\nexport const uuid = () => Date.now().toString(36) + Math.random().toString(36).substring(2);\n\nexport const getIsOnlyAnObject = (input) => {\n return (\n typeof input === \"object\" && // \"\u043E\u0442\u0431\u0438\u0432\u0430\u0435\u0442\" \u043F\u0440\u0438\u043C\u0438\u0442\u0438\u0432\u044B \u0438 \u0444\u0443\u043D\u043A\u0446\u0438\u0438\n input instanceof Object && // \"\u043E\u0442\u0431\u0438\u0432\u0430\u0435\u0442\" null\n !Array.isArray(input) && // \"\u043E\u0442\u0431\u0438\u0432\u0430\u0435\u0442\" \u043C\u0430\u0441\u0441\u0438\u0432\u044B\n !(input instanceof Set) && // \"\u043E\u0442\u0431\u0438\u0432\u0430\u0435\u0442\" \u0441\u0435\u0442\u044B\n !(input instanceof Map) // \"\u043E\u0442\u0431\u0438\u0432\u0430\u0435\u0442\" \u043C\u0430\u043F\u044B\n );\n};\n\n/* eslint-disable guard-for-in, no-unused-vars */\nexport const handleObjectChange =\n (updateObject, updateFunction) =>\n (data, prop = \"\", isNumber) => {\n let value;\n if (data?.target) {\n value =\n data.target.type === \"checkbox\"\n ? data.target.checked\n : data.target.value;\n } else value = data;\n\n value = isNumber ? Number(value) : value;\n\n const props = prop.split(\".\");\n const currentObject = props.reduce((res, chapter, index) => {\n if (props.length !== index + 1) res = res[chapter];\n return res;\n }, updateObject);\n\n currentObject[props.pop()] = value;\n updateFunction();\n };\n\nexport const useOutsideToggle = (ref, setOut, open) => {\n function handleClickOutside(event) {\n if (ref.current && !ref.current.contains(event.target)) {\n setOut(open);\n }\n }\n useEffect(() => {\n document.addEventListener(\"mouseup\", handleClickOutside);\n return () => {\n // Unbind the event listener on clean up\n document.removeEventListener(\"mouseup\", handleClickOutside);\n };\n }, [ref]);\n};\n\n// export const clone = obj => {\n// const data = obj instanceof Array ? [] : {};\n// for (const i in obj) data[i] = typeof obj[i] === 'object' && obj[i] != null ? clone(obj[i]) : obj[i];\n// return data;\n// };\n// ! \u042D\u0442\u043E\u0442 \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0435\u0435\nexport const clone = (input) => {\n if (input === null || typeof input !== \"object\") return input;\n const data = input instanceof Array ? [] : {};\n for (const i in input) data[i] = clone(input[i]);\n return data;\n};\n\nexport const getResponseClone = async (res) =>\n await (typeof res?.clone === \"function\" ? res.clone() : clone(res));\n\n//TimeUtils\nexport function transformUTCTimeToLocal(date, format = \"YYYY-MM-DD HH:mm:ss\") {\n if (!date) return;\n const utcDate = moment.utc(date).toDate();\n return moment(utcDate, format).local().format(format);\n}\nexport function transformLocalTimeToUTC(date, format = \"YYYY-MM-DD HH:mm:ss\") {\n if (!date) return;\n return moment(date, format).utc().format(format);\n}\nexport function transformUTCHoursToLocal(time, format = \"HH:mm:ss\") {\n if (!time) return;\n const splitedTime = time.split(\":\");\n const offset = moment().utcOffset();\n let HH = Number(splitedTime[0]);\n let mm = Number(splitedTime[1]);\n const ss = splitedTime[2];\n mm = mm + offset;\n while (mm > 59) {\n mm -= 60;\n HH += 1;\n }\n if (HH > 23) HH -= 24;\n while (mm < 0) {\n mm += 60;\n HH -= 1;\n }\n if (HH < 0) HH += 24;\n return `${HH}:${mm}:${ss}`;\n}\n\n//? \u041D\u0430\u043C\u0435\u0440\u044F\u043D\u043D\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u043C \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u043D\u0430\u0437\u043D\u0430\u0447\u0430\u044E \u0441\u0430\u043C\u044B\u0439 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E-\u043C\u0430\u043B\u0435\u043D\u044C\u043A\u0438\u0439 \u043F\u0430\u0442\u0442\u0435\u0440\u043D\nexport function transformDateOrTimeOrTogetherToFormat(\n data,\n outputFormat = \"HH:mm\",\n additional,\n) {\n const ERROR_VALUE = \"Invalid date\";\n const ERROR_MESSGE = `Invalid input data for ${outputFormat} format`;\n const { parseFormat, isReturnAsMomentInstance } = getIsOnlyAnObject(\n additional,\n )\n ? additional\n : {};\n\n if (typeof data !== \"string\" && typeof data !== \"number\") {\n return isReturnAsMomentInstance ? moment(\"error\") : ERROR_MESSGE;\n }\n\n //? \u0418\u0433\u043D\u043E\u0440\u0438\u0440\u0443\u0435\u043C parseFormat, \u0435\u0441\u043B\u0438 data \u043F\u0440\u0438\u0448\u043B\u0430 \u043A\u0430\u043A timestamp \u0438\u043B\u0438 \u0435\u0441\u043B\u0438 parseFormat \u043D\u0435 \u0441\u0442\u0440\u043E\u043A\u0430\n const momentArgs = [\n data,\n ...(!Number.isNaN(Number(data)) || typeof parseFormat === \"string\"\n ? []\n : [parseFormat]),\n ];\n\n //? \u0417\u0430\u0434\u0430\u0447\u0430 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C moment-\u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440, \u0432\u0430\u043B\u0438\u0434\u043D\u044B\u0439 \u043B\u0438\u0431\u043E \u043D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u044B\u0439\n const momentInstance = (() => {\n let instance = moment(...momentArgs);\n\n //? \u041F\u0440\u043E\u0432\u0435\u0440\u044F\u0435\u043C \u0432\u0430\u043B\u0438\u0434\u043D\u043E\u0441\u0442\u044C moment-\u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440-\u0430 \u043F\u0443\u0442\u0435\u043C \u043F\u043E\u043F\u044B\u0442\u043A\u0438 \u043F\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0435\u0433\u043E \u043A \u0432\u044B\u0445\u043E\u0434\u043D\u043E\u043C\u0443 \u0444\u043E\u0440\u043C\u0430\u0442\u0443\n //? \u041F\u043E\u043F\u0430\u0434\u0435\u043C \u0432 \u044D\u0442\u043E\u0442 \u043A\u0435\u0439\u0441 \u0435\u0441\u043B\u0438\n //? - data \u044D\u0442\u043E timestamp\n //? - data \u044D\u0442\u043E \u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 date-time\n //? - data \u044D\u0442\u043E \u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 date (\u0432 \u044D\u0442\u043E\u043C \u0441\u043B\u0443\u0447\u0430\u0435 \u0432\u0440\u0435\u043C\u044F \u0432\u044B\u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044F 00:00:00)\n if (instance.format(outputFormat) !== ERROR_VALUE) return instance;\n //? \u0415\u0441\u043B\u0438 \u0436\u0435 \u043F\u0440\u0438\u0432\u0435\u0434\u0435\u043D\u0438\u0435 \u043D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C, \u0442\u043E \u043F\u0440\u0435\u0434\u043F\u043E\u043B\u0430\u0433\u0430\u0435\u043C, \u0447\u0442\u043E data \u043F\u0440\u0438\u0448\u043B\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 time\n //? \u0412 \u044D\u0442\u043E\u043C \u0441\u043B\u0443\u0447\u0430\u0435 \u0441\u043E\u0437\u0434\u0430\u0434\u0438\u043C \u043E\u0431\u044A\u0435\u043A\u0442 \u043E\u0442 \u0442\u0435\u043A\u0443\u0449\u0435\u0439 \u0434\u0430\u0442\u044B, \u0440\u0430\u0441\u043F\u0430\u0440\u0441\u0438\u043C data \u0438 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u043C \u0432\u0440\u0435\u043C\u044F\n //? \u041A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u043E \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0430\u044E\u0442\u0441\u044F \u043F\u0430\u0442\u0442\u0435\u0440\u043D\u044B: 'HH*mm', 'HH*mm*ss', 'HH*mm*ss*\u043B\u044E\u0431\u043E\u0435_\u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E_ms', \u0433\u0434\u0435 * - \u043B\u044E\u0431\u043E\u0439 \u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C\n else if (/^\\d\\d.\\d\\d/.test(data)) {\n instance = moment();\n const symbols = data.split(\"\");\n\n const timeArr = symbols\n .reduce(\n (acc, symbol, idx) => {\n if (Number.isNaN(Number(symbol))) {\n if (acc.group) acc.result.push(acc.group);\n acc.group = \"\";\n } else acc.group = `${acc.group}${symbol}`;\n if (idx === symbols.length - 1 && acc.group)\n acc.result.push(acc.group);\n return acc;\n },\n { result: [], group: \"\" },\n )\n //? reverse \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u0438\u0441\u043A\u043B\u044E\u0447\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0434\u043B\u044F \u0442\u043E\u0433\u043E, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u0441\u043B\u0435 \u043C\u043E\u0436\u043D\u043E \u0431\u044B\u043B\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u043C\u0435\u0442\u043E\u0434 pop, \u0430 \u043D\u0435 shift,\n //? \u0442.\u043A. \u043C\u0435\u0442\u043E\u0434\u044B \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u044F/\u0438\u0437\u0432\u043B\u0435\u0447\u0435\u043D\u0438\u044F \u043E\u0442\u043D\u043E\u0441\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u043A\u043E\u043D\u0446\u0430 \u043C\u0430\u0441\u0441\u0438\u0432\u0430 \u0440\u0430\u0431\u043E\u0442\u0430\u044E\u0442 \u0431\u044B\u0441\u0442\u0440\u0435\u0435,\n //? \u0447\u0435\u043C \u0430\u043D\u0430\u043B\u043E\u0433\u0438\u0447\u043D\u044B\u0435 \u043E\u0442\u043D\u043E\u0441\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u043D\u0430\u0447\u0430\u043B\u0430 \u043C\u0430\u0441\u0441\u0438\u0432\u0430\n .result.reverse();\n\n instance.hours(Number(timeArr.pop()));\n instance.minutes(Number(timeArr.pop()));\n instance.seconds(timeArr.length ? Number(timeArr.pop()) : 0);\n instance.milliseconds(timeArr.length ? Number(timeArr.pop()) : 0);\n } else instance = moment(\"error\"); //? \u0418\u043D\u0430\u0447\u0435 \u0441\u043E\u0437\u0434\u0430\u0435\u043C \u0437\u0430\u0432\u0435\u0434\u043E\u043C\u043E \u043D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u044B\u0439 moment-\u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\n\n return instance;\n })();\n\n if (isReturnAsMomentInstance) return momentInstance;\n\n const output = momentInstance.format(outputFormat);\n return output === ERROR_VALUE ? ERROR_MESSGE : output;\n}\n\n//? \u041D\u0430\u043C\u0435\u0440\u044F\u043D\u043D\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u043C \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u043D\u0430\u0437\u043D\u0430\u0447\u0430\u044E \u0441\u0430\u043C\u044B\u0439 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E-\u043C\u0430\u043B\u0435\u043D\u044C\u043A\u0438\u0439 \u043F\u0430\u0442\u0442\u0435\u0440\u043D\nexport function transformDateOrTimeOrTogetherToFormattedLocal(\n data,\n outputFormat = \"HH:mm\",\n additional,\n) {\n const ERROR_VALUE = \"Invalid date\";\n const ERROR_MESSGE = `Invalid input data for ${outputFormat} format`;\n\n if (additional && !getIsOnlyAnObject(additional)) {\n throw new Error(\n \"Bad additional [transformDateOrTimeOrTogetherToFormattedLocal]\",\n );\n }\n\n const compositeAdditional = {\n ...(additional || {}),\n isReturnAsMomentInstance: true,\n };\n const date = transformDateOrTimeOrTogetherToFormat(\n data,\n outputFormat,\n compositeAdditional,\n );\n\n const dateWithLocale = date.add(moment().utcOffset(), \"minutes\");\n const output = dateWithLocale.format(outputFormat);\n\n return output === ERROR_VALUE ? ERROR_MESSGE : output;\n}\n\n//\u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0435\u0442 \u043E\u0431\u044C\u0435\u043A\u0442 \u0438 \u043C\u0430\u0441\u0441\u0438\u0432 \u043A\u043B\u044E\u0447\u0435\u0439 \u043E\u0431\u044C\u0435\u043A\u0442\u0430\n//\u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043E\u0431\u044C\u0435\u043A\u0442 \u0441 \u0442\u0435\u043C\u0438 \u043F\u043E\u043B\u044F\u043C\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u043D\u0435\u0442 \u0432 \u043C\u0430\u0441\u0441\u0438\u0432\u0435 \u043A\u043B\u044E\u0447\u0435\u0439\nexport const omitKeys = (obj = {}, keys = []) =>\n keys.reduce((acc, key) => {\n const { [key]: omit, ...rest } = acc;\n return rest;\n }, obj);\n\nexport const logout = () => {\n window.localStorage.removeItem(\"accessToken\");\n window.localStorage.removeItem(\"tokenExpires\");\n window.location.reload();\n};\n\nexport const getStyles = (el, prop) => {\n if (!el) return null;\n if (!prop) return window.getComputedStyle(el);\n return window.getComputedStyle(el).getPropertyValue(prop);\n};\n\nexport const getColorById = (id, colors) => {\n if (!id) return \"#FF7D00\";\n\n const idToArr = Array.from(id);\n const colorsArr = colors && colors.length > 0 ? colors : DEFAULT_COLORS;\n\n let number = idToArr.reduce((acc, item) => {\n if (Number(item)) {\n return acc + Number(item);\n }\n return acc;\n }, 0);\n\n while (number >= colorsArr.length) {\n number -= colorsArr.length;\n }\n\n return colorsArr[number];\n};\n\nexport const debounce = (fn, ms) => {\n let id = null;\n return (...args) => {\n clearTimeout(id);\n id = setTimeout(() => {\n clearTimeout(id);\n fn(...args);\n }, ms);\n };\n};\n\nexport const throttle = (fn, ms) => {\n let id = null;\n return (...args) => {\n if (id) return;\n fn(...args);\n id = setTimeout(() => {\n clearTimeout(id);\n id = null;\n }, ms);\n };\n};\n\nexport const addBitDepthPoints = (value, step = 3) => {\n //\u0441\u043E\u0434\u0435\u0440\u0436\u0438\u0442 \u043B\u0438 value \u0442\u043E\u0447\u043A\u0443\n const isFraction = value?.includes(\".\");\n\n //\u0432\u0437\u044F\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443 \u0434\u043E \u0442\u043E\u0447\u043A\u0438\n const valueBeforeDot = isFraction\n ? value?.slice(0, value?.indexOf(\".\"))\n : value;\n\n //\u0440\u0430\u0441\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0430 \u0437\u0430\u043F\u044F\u0442\u044B\u0445 \u043F\u043E\u0441\u043B\u0435 \u043A\u0430\u0436\u0434\u043E\u0439 3\u0439 \u0446\u0438\u0444\u0440\u044B \u0441 \u043A\u043E\u043D\u0446\u0430\n const intPart = valueBeforeDot\n .split(\"\")\n .reverse()\n .reduce(\n (acc, item, idx) =>\n idx % step === 0 && idx !== 0 ? [...acc, \",\", item] : [...acc, item],\n [],\n )\n .reverse()\n .join(\"\");\n\n return isFraction ? intPart + value?.slice(value?.indexOf(\".\")) : intPart;\n};\n\nexport const changeMeta = (key, items = []) => {\n const defaultMeta = items.find((i) => i.key === \"default\");\n\n if (key) {\n const item = items.find((i) => i.key === key);\n document.title = item?.title ?? defaultMeta?.title;\n document\n .querySelector('meta[name=\"description\"]')\n .setAttribute(\"content\", item?.description ?? defaultMeta?.description);\n }\n};\n\nexport const firstLetterCapital = (str) =>\n typeof str === \"string\"\n ? `${str.charAt(0).toUpperCase()}${str.slice(1)}`\n : str;\nexport const capitalized = firstLetterCapital;\n\nexport const checkedRef = (ref) =>\n ref ? (typeof ref === \"function\" ? (node) => ref(node) : ref) : null;\n\nexport function downloadEmulation(data, filename, type = \"image/*\") {\n const file = new Blob([data], { type });\n if (window.navigator.msSaveOrOpenBlob)\n // IE10+\n window.navigator.msSaveOrOpenBlob(file, filename);\n else {\n // Others\n const a = document.createElement(\"a\"),\n url = URL.createObjectURL(file);\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n setTimeout(() => {\n document.body.removeChild(a);\n window.URL.revokeObjectURL(url);\n }, 0);\n }\n}\n\nexport const downloadFile = async ({ url, name, type = null }) => {\n const response = await fetch(url).then(async (res) => ({\n data: await res.blob(),\n type: type ?? res.headers.get(\"content-type\"),\n }));\n downloadEmulation(response.data, name, response.type);\n};\n\nexport const compare = (first, second, keys = []) => {\n //? \u0415\u0441\u043B\u0438 \u0442\u0438\u043F\u044B \u041D\u0415 \u0440\u0430\u0432\u043D\u044B - \u043D\u0435 \u0440\u0430\u0432\u043D\u044B \u0430\u043F\u0440\u0438\u043E\u0440\u0438\n if (typeof first !== typeof second) return false;\n //? \u0415\u0441\u043B\u0438 \u043E\u0442\u0432\u0435\u0442\u044B \u043D\u0430 \u0432\u043E\u043F\u0440\u043E\u0441 \"\u043C\u0430\u0441\u0441\u0438\u0432 \u043B\u0438?\" \u043D\u0435 \u0440\u0430\u0432\u043D\u044B, \u0442\u043E \u043D\u0435 \u0440\u0430\u0432\u043D\u044B \u0438 \u0442\u0438\u043F\u044B, \u0437\u043D\u0430\u0447\u0438\u0442 \u0442\u043E\u0436\u0435 \u043D\u0435 \u0440\u0430\u0432\u043D\u044B \u0430\u043F\u0440\u0438\u043E\u0440\u0438\n if (Array.isArray(first) !== Array.isArray(second)) return false;\n //? \u0415\u0441\u043B\u0438 \u043F\u0440\u043E\u0448\u043B\u0438 if-\u043A\u0443 - \u0442\u0438\u043F\u044B \u0443\u0441\u043B\u043E\u0432\u043D\u043E \u0440\u0430\u0432\u043D\u044B, \u043C\u043E\u0436\u0435\u043C \u043E\u0446\u0435\u043D\u0438\u0432\u0430\u0442\u044C \u0442\u0438\u043F \u043B\u0438\u0448\u044C \u043E\u0434\u043D\u043E\u0433\u043E \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0430, \u044D\u0442\u043E \u0431\u0443\u0434\u0435\u0442 \u0441\u043F\u0440\u0430\u0432\u0435\u0434\u043B\u0438\u0432\u043E \u0438 \u0434\u043B\u044F \u0432\u0442\u043E\u0440\u043E\u0433\u043E\n\n //? \u0415\u0441\u043B\u0438 \u043F\u0440\u0438\u043C\u0438\u0442\u0438\u0432\u044B - \u043F\u0440\u043E\u0441\u0442\u043E \u0441\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u0435\u043C. \u041A\u0435\u0439\u0441 \u0441 null \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0430\u043D \u0442\u0443\u0442.\n if (!(first instanceof Object)) return first === second;\n\n //? \u0415\u0441\u043B\u0438 \u041D\u0415 \u043F\u0440\u0438\u043C\u0435\u0442\u0438\u0432\u044B - \u043D\u0435 \u0432\u0430\u0436\u043D\u043E \u043C\u0430\u0441\u0441\u0438\u0432 \u0438\u043B\u0438 \u043D\u0435\u0442, \u043C\u0435\u0442\u043E\u0434\u044B \u043E\u0431\u044A\u0435\u043A\u0442\u0430 \u0434\u043B\u044F \u043C\u0430\u0441\u0441\u0438\u0432\u0430 \u0442\u043E\u0436\u0435 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B\n\n const getComparationStructure = (data) => {\n if (typeof data === 'function') return data.toString();\n if (!(data instanceof Object)) return data;\n\n return Object.entries(data)\n .sort((a, b) => (a[0]).localeCompare(b[0]))\n .map(([key, value]) => ([key, getComparationStructure(data[key])]));\n };\n\n //? \u041F\u043E\u043B\u0443\u0447\u0430\u0435\u043C \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u044B \u0434\u043B\u044F \u0441\u0440\u0430\u0432\u043D\u0435\u043D\u0438\u044F (\u0441 \u0443\u0447\u0435\u0442\u043E\u043C \u0433\u043B\u0443\u0431\u0438\u043D\u044B) - \u043C\u0430\u0441\u0441\u0438\u0432\u044B \u043C\u0430\u0441\u0441\u0438\u0432\u043E\u0432, \u0441\u043E\u0440\u0442\u0438\u0440\u0443\u0435\u043C \u043F\u043E \u043A\u043B\u044E\u0447\u0430\u043C,\n const structureForComparingOfFirst = getComparationStructure(first);\n const structureForComparingOfSecond = getComparationStructure(second);\n\n return (JSON.stringify(structureForComparingOfFirst) === JSON.stringify(structureForComparingOfSecond));\n};\n\n// Set Carret to the End of Input\nexport const setCarretToEnd = (input) => {\n setTimeout(() => {\n const tmp = input.value;\n input.value = \"\";\n input.value = tmp;\n }, 10);\n};\n\nexport const compareAlphabetical = (a, b, key = \"label\") => {\n let item1 = a?.[key];\n let item2 = b?.[key];\n\n if (typeof item1 !== \"string\" || typeof item2 !== \"string\") return 0;\n\n item1 = item1?.toLowerCase();\n item2 = item2?.toLowerCase();\n\n if (item1 < item2) {\n return -1;\n }\n if (item1 > item2) {\n return 1;\n }\n return 0;\n};\n\nexport const getBase64 = (file) => {\n if (file) {\n return new Promise(function (resolve, reject) {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result);\n reader.onerror = (error) => reject(\"Error: \", error);\n });\n }\n};\n\nexport const renderFileSize = (bytes, decimals = 2) => {\n if (!Number(bytes)) return \"0 Bytes\";\n\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\"];\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;\n};\n\nexport const getUniqueFileExtensions = (extListString) => {\n // Split the extensions list into an array\n const extArray = extListString\n ?.split(\",\")\n .map((ext) => ext.trim().toUpperCase());\n\n // Remove duplicates using a Set\n const uniqueExts = [...new Set(extArray)];\n\n // Join the unique extensions into a string\n return uniqueExts.join(\", \");\n};\n\nexport const getOS = () => {\n let userAgent = window.navigator.userAgent,\n platform =\n window.navigator?.userAgentData?.platform || window.navigator.platform,\n macosPlatforms = [\"Macintosh\", \"MacIntel\", \"MacPPC\", \"Mac68K\"],\n windowsPlatforms = [\"Win32\", \"Win64\", \"Windows\", \"WinCE\"],\n iosPlatforms = [\"iPhone\", \"iPad\", \"iPod\"],\n os = OS.Unknown;\n\n if (macosPlatforms.indexOf(platform) !== -1) {\n os = OS.MacOS;\n } else if (iosPlatforms.indexOf(platform) !== -1) {\n os = OS.iOS;\n } else if (windowsPlatforms.indexOf(platform) !== -1) {\n os = OS.Windows;\n } else if (/Android/.test(userAgent)) {\n os = OS.Android;\n } else if (/Linux/.test(platform)) {\n os = OS.Linux;\n }\n\n return os;\n};\n\n\nString.prototype.longerThan = function (compareWith) {\n return this?.length > compareWith?.length;\n};\nString.prototype.lastIndexEqualsTo = function (index) {\n return this?.length - 1 === index;\n};\n\nexport const getCorrectTestId = ({ testId = \"\", withTier = true }) =>\n testId && testId !== undefined ? `${withTier ? \"-\" : \"\"}${testId}` : \"\";\n\n\n", "import { getIsOnlyAnObject } from \"./utils\";\n\n//? The first word \"format\" in the function name means a logic\n//? in which the function transforms the incoming value in any case.\n\n//? The first word \"transform\" in the function name means a logic\n//? in which the function converts the whole value, but this is not suitable for sequential input\n\n//? The first word \"filter\" in the function name means a logic\n//? in which the function works as a changer for sequential input\n\n// ****************************\n// Base utils\n// ****************************\n\nexport const getSafelyValue = (value) =>\n value !== undefined && value !== null ? value?.toString?.() || \"\" : \"\";\n\n// \u0431\u0430\u0437\u043E\u0432\u0430\u044F \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F\nexport const intlNumbersFormatter = (inputValue, settings = {}) => {\n const safelyInputValue = getSafelyValue(inputValue);\n const previousValue = safelyInputValue.slice(0, -1);\n const lastSym = safelyInputValue.slice(-1);\n const value = lastSym === \".\" ? previousValue : safelyInputValue;\n\n if (Number.isNaN(Number(value)) || !getSafelyValue(value)) return \"\";\n\n const {\n // \u043B\u043E\u043A\u0430\u043B\u044C, \u0434\u0430\u0436\u0435 \u0440\u0435\u0433\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u0430\u044F, \u0432\u043B\u0438\u044F\u0435\u0442 \u043D\u0430 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u0437\u043D\u0430\u043A\u043E\u0432 \u0438 \u0444\u043E\u0440\u043C\u0430\u0442\u0430.\n locale = \"en-US\",\n // percent || currency(default case) || decimal(\u043F\u0440\u043E\u0441\u0442\u043E \u0447\u0438\u0441\u043B\u043E) \u0432\u043B\u0438\u044F\u0435\u0442 \u043D\u0430 \u0422\u0418\u041F \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438.\n withSymbol,\n //\u0433\u0440\u0443\u043F\u043F\u0438\u0440\u043E\u0432\u043A\u0430 \u0437\u0430\u043F\u044F\u0442\u044B\u043C\u0438 \u043F\u043E\u0440\u0430\u0437\u0440\u044F\u0434\u043D\u043E.\n useGrouping = true,\n //!!\u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u0440\u0438 withSymbol: 'currency' !! \u0432\u043B\u0438\u044F\u0435\u0442 \u043D\u0430 \u0442\u043E, \u043A\u0430\u043A \u0438\u043C\u0435\u043D\u043D\u043E \u0431\u0443\u0434\u0435\u0442 \u0432\u044B\u0433\u043B\u044F\u0434\u0435\u0442 \u0444\u043E\u0440\u043C\u0430\u0442 \u0432\u0430\u043B\u044E\u0442\u044B.\n currency = {},\n //\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0437\u043D\u0430\u043A\u043E\u0432 \u043F\u043E\u0441\u043B\u0435 \u0442\u043E\u0447\u043A\u0438, \u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043B\u0438 \u043E\u043D\u0438 \u0431\u0443\u0434\u0443\u0442.\n // !!\u0435\u0441\u043B\u0438 \u043F\u043E\u0441\u0442\u0430\u0432\u0438\u0442\u044C isAlwaysRender: true, \u043D\u043E \u043D\u0435 \u0434\u0430\u0442\u044C \u0446\u0435\u043D\u0442\u043E\u0432, \u0442\u043E \u0431\u0443\u0434\u0435\u0442 100.00\n fractionDigits = {},\n } = settings;\n\n const { currencyType = \"USD\", currencyDisplay: inputCurrencyDisplay } =\n currency;\n\n let currencyDisplay;\n switch (inputCurrencyDisplay) {\n case \"name\":\n currencyDisplay = \"name\";\n break;\n case \"code\":\n currencyDisplay = \"code\";\n break;\n case \"narrowSymbol\":\n currencyDisplay = \"narrowSymbol\";\n break;\n default:\n currencyDisplay = \"symbol\";\n }\n\n let numberStyle;\n switch (withSymbol) {\n case \"percent\":\n numberStyle = \"percent\";\n break;\n case \"currency\":\n numberStyle = \"currency\";\n break;\n default:\n numberStyle = \"decimal\";\n break;\n }\n\n const {\n quantity,\n isRenderAlways = false,\n minimumFractionDigits: inputMinimumFractionDigits,\n maximumFractionDigits: inputMaximumFractionDigits,\n conditionallyMinimumFractionDigits,\n } = fractionDigits;\n\n const dotIndex = safelyInputValue?.indexOf(\".\");\n const afterDot = dotIndex !== -1 ? safelyInputValue.slice(dotIndex + 1) : \"\";\n const minimumFractionDigits = (() => {\n //? \u0411\u0435\u0437\u0443\u0441\u043B\u043E\u0432\u043D\u043E\u0435 \u043C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E. \u0412\u0441\u0435\u0433\u0434\u0430 \u043E\u0442\u0440\u0435\u043D\u0434\u0435\u0440\u0438\u0442 \u0434\u0440\u043E\u0431\u043D\u0443\u044E \u0447\u0430\u0441\u0442\u044C, \u0432 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0443\u043A\u0430\u0437\u0430\u043D\u043E\n if (typeof inputMinimumFractionDigits === \"number\")\n return inputMinimumFractionDigits;\n //? \u0423\u0441\u043B\u043E\u0432\u043D\u043E\u0435 \u043C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E. \u0415\u0441\u043B\u0438 \u0435\u0441\u0442\u044C \u0434\u0440\u043E\u0431\u043D\u0430\u044F \u0447\u0430\u0441\u0442\u044C, \u0442\u043E \u043E\u0442\u0440\u0435\u043D\u0434\u0435\u0440\u0438\u0442 \u0434\u0440\u043E\u0431\u043D\u044B\u0445 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0443\u043A\u0430\u0437\u0430\u043D\u043E\n if (typeof conditionallyMinimumFractionDigits === \"number\") {\n return afterDot && lastSym !== \".\"\n ? conditionallyMinimumFractionDigits\n : 0;\n }\n //? \u0414\u0435\u0444\u043E\u043B\u0442\u043D\u043E\u0435 \u043C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E. \u0415\u0441\u043B\u0438 \u0435\u0441\u0442\u044C \u0434\u0440\u043E\u0431\u043D\u0430\u044F \u0447\u0430\u0441\u0442\u044C, \u0442\u043E \u043E\u0442\u0440\u0435\u043D\u0434\u0435\u0440\u0438\u0442 \u0434\u0440\u043E\u0431\u043D\u044B\u0445 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0441\u0442\u043E\u043B\u044C\u043A\u043E, \u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0435\u0441\u0442\u044C\n //? \u0424\u043B\u0430\u0433 isRenderAlways \u043F\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0434\u0435\u0444\u043E\u043B\u0442\u043D\u044B\u0439 \u043A\u0435\u0439\u0441 \u0432 \u0431\u0435\u0437\u0443\u0441\u043B\u043E\u0432\u043D\u043E\u0435 \u043C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E\n return afterDot && lastSym !== \".\"\n ? safelyInputValue.slice(dotIndex).length - 1\n : isRenderAlways\n ? quantity\n : 0;\n })();\n\n const priceSettings = {\n useGrouping, //\u0433\u0440\u0443\u043F\u043F\u0438\u0440\u043E\u0432\u043A\u0430 \u0440\u0430\u0437\u0440\u044F\u0434\u043E\u0432\n style: numberStyle, //\u0442\u0438\u043F \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F (\u0432\u0430\u043B\u044E\u0442\u0430 \u0438\u043B\u0438 \u0447\u0438\u0441\u043B\u043E). decimal - \u0431\u0435\u0437 \u0437\u043D\u0430\u043A\u0430 \u0432\u0430\u043B\u044E\u0442\u044B\n currency: currencyType, //\u0432\u0430\u043B\u044E\u0442\u0430\n currencyDisplay, //\u0432\u0430\u043B\u044E\u0442\u0430 \u0432 \u0432\u0438\u0434\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u0430\n //\u043C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u043E \u043D\u0435 \u043D\u0430\u0434\u043E \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u0446\u0435\u043D\u0442\u044B, \u0435\u0441\u043B\u0438 \u0438\u0445 \u043D\u0435\u0442, \u0438\u043D\u0430\u0447\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 .00\n minimumFractionDigits,\n //! \u0412\u0430\u0436\u043D\u043E! \u0415\u0441\u043B\u0438 \u043F\u0440\u0438\u0434\u0435\u0442 \u0432\u0435\u043B\u044C\u044E \u0441 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E\u043C \u0434\u0440\u043E\u0431\u043D\u044B\u0445 \u0440\u0430\u0437\u0440\u044F\u0434\u043E\u0432 \u0411\u041E\u041B\u042C\u0428\u0418\u041C\n //! \u0447\u0435\u043C \u0443\u043A\u0430\u0437\u0430\u043D\u043E \u0432 (inputMaximumFractionDigits ?? quantity) - \u043E\u043A\u0440\u0443\u0433\u043B\u0438\u0442 \u043F\u043E \u043F\u0440\u0430\u0432\u0438\u043B\u0430\u043C \u043E\u043A\u0440\u0443\u0433\u043B\u0435\u043D\u0438\u044F\n //\u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u043E \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C 2 \u0446\u0438\u0444\u0440\u044B \u043F\u043E\u0441\u043B\u0435 \u0437\u0430\u043F\u044F\u0442\u043E\u0439, \u0435\u0441\u043B\u0438 \u0446\u0435\u043D\u0442\u044B \u0432\u0441\u0451 \u0436\u0435 \u0435\u0441\u0442\u044C\n maximumFractionDigits: inputMaximumFractionDigits ?? quantity,\n };\n\n let output;\n\n try {\n output = new Intl.NumberFormat(locale, priceSettings).format(value);\n } catch (e) {\n output = value;\n // eslint-disable-next-line no-console\n console.warn(\"Intl.NumberFormat error\", e);\n }\n return lastSym === \".\" ? output + lastSym : output;\n};\n\n// ****************************\n// format\n// ****************************\n\nexport const formatOnlyNumbers = (value) =>\n getSafelyValue(value).replace(/\\D/g, \"\");\nexport const formatToRemoveComa = (value) =>\n getSafelyValue(value).replace(/,/g, \"\");\nexport const formatToAddBitDepthPoints = (value, settings) =>\n intlNumbersFormatter(getSafelyValue(value), {\n fractionDigits: {\n quantity: settings?.type === \"int\" ? 0 : settings?.decimalPlaces,\n },\n });\n\n//! \u0412\u0430\u0436\u043D\u043E! \u0415\u0441\u043B\u0438 \u043F\u0440\u0438\u0434\u0435\u0442 \u0432\u0435\u043B\u044C\u044E \u0441 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E\u043C \u0434\u0440\u043E\u0431\u043D\u044B\u0445 \u0440\u0430\u0437\u0440\u044F\u0434\u043E\u0432 \u0411\u041E\u041B\u042C\u0428\u0418\u041C\n//! \u0447\u0435\u043C \u0443\u043A\u0430\u0437\u0430\u043D\u043E \u0432 quantity - \u043E\u043A\u0440\u0443\u0433\u043B\u0438\u0442 \u043F\u043E \u043F\u0440\u0430\u0432\u0438\u043B\u0430\u043C \u043E\u043A\u0440\u0443\u0433\u043B\u0435\u043D\u0438\u044F\nexport const formatToPriceWithUSD = (value) => {\n if (isNaN(Number(value))) return value;\n return intlNumbersFormatter(getSafelyValue(value), {\n withSymbol: \"currency\",\n currency: { currencyType: \"USD\" },\n fractionDigits: { quantity: 2, conditionallyMinimumFractionDigits: 2 },\n });\n};\n\n//! \u0412\u0430\u0436\u043D\u043E! \u0415\u0441\u043B\u0438 \u043F\u0440\u0438\u0434\u0435\u0442 \u0432\u0435\u043B\u044C\u044E \u0441 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E\u043C \u0434\u0440\u043E\u0431\u043D\u044B\u0445 \u0440\u0430\u0437\u0440\u044F\u0434\u043E\u0432 \u0411\u041E\u041B\u042C\u0428\u0418\u041C\n//! \u0447\u0435\u043C \u0443\u043A\u0430\u0437\u0430\u043D\u043E \u0432 quantity - \u043E\u043A\u0440\u0443\u0433\u043B\u0438\u0442 \u043F\u043E \u043F\u0440\u0430\u0432\u0438\u043B\u0430\u043C \u043E\u043A\u0440\u0443\u0433\u043B\u0435\u043D\u0438\u044F\n\n// ToDo - symbolPosition \u0432\u0440\u0435\u043C\u0435\u043D\u043D\u043E \u043D\u0435 \u0440\u0435\u0430\u043B\u0438\u0437\u043E\u0432\u0430\u043D\u043E\nexport const formatToPriceWithCurrency = (\n value,\n currencyCode,\n symbolPosition = \"before\",\n) => {\n if (isNaN(Number(value))) return value;\n return intlNumbersFormatter(getSafelyValue(value), {\n withSymbol: \"currency\",\n currency: { currencyType: currencyCode },\n fractionDigits: { quantity: 2, conditionallyMinimumFractionDigits: 2 },\n });\n};\n\n//? \u0414\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u0442 \u0432 \u043A\u043E\u043D\u0435\u0446 \u0437\u043D\u0430\u043A %. \u0420\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u043A\u0430\u043A \u0441 \u043E\u0434\u0438\u043D\u043E\u0447\u043D\u044B\u043C\u0438 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F\u043C\u0438, \u0442\u0430\u043A \u0438 \u0441 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\u0430\u043C\u0438.\n\n//? value \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043B\u044E\u0431\u043E\u0435, \u043D\u043E \u043E\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044F \u0447\u0442\u043E \u0431\u0443\u0434\u0435\u0442\n//? - \u0447\u0438\u0441\u043B\u043E\u043C\n//? - \u0441\u0442\u0440\u043E\u043A\u043E\u0439 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 \"\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\"\n//? - \u0441\u0442\u0440\u043E\u043A\u043E\u0439 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 \"\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 - \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\" (\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435_\u043F\u0440\u043E\u0431\u0435\u043B_\u0442\u0438\u0440\u0435_\u043F\u0440\u043E\u0431\u0435\u043B_\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435)\n//? - \u043E\u0431\u044A\u0435\u043A\u0442 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 { from: \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435, to: \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 }\n\n//? \u041F\u0440\u0435\u0434\u043F\u043E\u043B\u0430\u0433\u0430\u0435\u0442\u0441\u044F, \u0447\u0442\u043E \"\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\" \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043F\u0440\u0438\u0432\u0435\u0434\u0435\u043D\u043E \u043A \u0447\u0438\u0441\u043B\u0443 \u043E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u043C + (\u043F\u0440\u0438\u043C\u0435\u0440: +\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u043F\u0440\u0438\u0432\u043E\u0434\u0438\u0442\u0441\u044F \u043A \u0447\u0438\u0441\u043B\u0443).\n//? \u0415\u0441\u043B\u0438 \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043F\u0440\u0438\u0432\u0435\u0434\u0435\u043D\u043E, \u0442\u043E \"\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\" \u0432\u0435\u0440\u043D\u0435\u0442\u0441\u044F \u043A\u0430\u043A \u0435\u0441\u0442\u044C, \u043A \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0443 \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u0441\u044F %\n\n//? \u0415\u0441\u043B\u0438 \"\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\" \u043F\u0443\u0441\u0442\u043E\u0435 (getSafelyValue(\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435) \u0432\u0435\u0440\u043D\u0435\u0442 \u043F\u0443\u0441\u0442\u0443\u044E \u0441\u0442\u0440\u043E\u043A\u0443),\n//? \u0442\u043E \u044D\u0442\u043E \u0432\u043E\u0441\u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0435\u0442\u0441\u044F \u043A\u0430\u043A 0, \u043F\u0440\u0438\u0432\u043E\u0434\u0438\u0442\u0441\u044F \u043A 0.00%\n\n//? \u041E\u0434\u0438\u043D\u043E\u043A\u043E\u0432\u043E \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u043A\u0430\u043A \u0434\u043B\u044F \".\", \u0442\u0430\u043A \u0438 \",\" \u0432 \u043A\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044F \u0434\u0440\u043E\u0431\u043D\u044B\u0445 \u0440\u0430\u0437\u0440\u044F\u0434\u043E\u0432\n\n//! \u0412\u0430\u0436\u043D\u043E! \u0415\u0441\u043B\u0438 \u043F\u0440\u0438\u0434\u0435\u0442 \u0432\u0435\u043B\u044C\u044E \u0441 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E\u043C \u0434\u0440\u043E\u0431\u043D\u044B\u0445 \u0440\u0430\u0437\u0440\u044F\u0434\u043E\u0432 \u0411\u041E\u041B\u042C\u0428\u0418\u041C\n//! \u0447\u0435\u043C \u0443\u043A\u0430\u0437\u0430\u043D\u043E \u0432 decimalPlaces - \u043E\u043A\u0440\u0443\u0433\u043B\u0438\u0442 \u043F\u043E \u043F\u0440\u0430\u0432\u0438\u043B\u0430\u043C \u043E\u043A\u0440\u0443\u0433\u043B\u0435\u043D\u0438\u044F\n\nexport const formatAsPercentage = (value, settings) => {\n const {\n isCommonPercentageSymbol = true,\n decimalPlaces = 2,\n beforeValueSymbol = \"\",\n afterValueSymbol = \"\",\n isGlueSameRangesTogether = false,\n\n // ? \u0422\u0443\u0442 \u0443\u0434\u043E\u0431\u043D\u044B\u0439 \u0444-\u043B, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u0438\u043D\u043E\u0439 \u0440\u0430\u0437 \u0443\u0434\u043E\u0431\u043D\u043E \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0430\u0442\u044C \u043E\u0431\u044B\u0447\u043D\u044B\u0439 \u0434\u0438\u0430\u043F\u0430\u0437\u0430\u043D (\u041D\u0415 \u043F\u0440\u043E\u0446\u0435\u043D\u0442\u044B).\n // ? \u0414\u043E\u0431\u0430\u0432\u0438\u043B \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u044C \u0432\u044B\u043F\u0438\u043B\u0438\u0432\u0430\u0442\u044C \u0437\u043D\u0430\u0447\u0435\u043A \u043F\u0440\u043E\u0446\u0435\u043D\u0442\u043E\u0432.\n // todo(VL) - \u0432\u043E\u043E\u0431\u0449\u0435 \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u043E \u0437\u0430\u0440\u0435\u043D\u0435\u0439\u043C\u0438\u0442\u044C (formatAsDiapason), \u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u043F\u0440\u043E\u0446\u0435\u043D\u0442\u043E\u0432 \u0441\u0434\u0435\u043B\u0430\u0442\u044C \u043A\u0430\u043A \u043E\u043F\u0446\u0438\u044E,\n // todo(VL) - \u043D\u043E \u043A\u0430\u043A \u043E\u0431\u044B\u0447\u043D\u043E \u043D\u0435\u0442 \u0432\u0440\u0435\u043C\u0435\u043D\u0438, \u043D\u0443\u0436\u043D\u043E \u0431\u0443\u0434\u0435\u0442 \u043F\u0435\u0440\u0435\u0447\u0435\u043A\u0430\u0442\u044C \u043F\u043E \u0432\u0441\u0435\u043C \u043F\u0440\u043E\u0435\u043A\u0442\u0430\u043C \u0433\u0434\u0435 \u0442\u044F\u043D\u0435\u0442\u0441\u044F \u0441\u043E \u0441\u0442\u0430\u0440\u044B\u043C \u043D\u0435\u0439\u043C\u0438\u043D\u0433\u043E\u043C\n isUseAsSimpleDiapason = false,\n } = getIsOnlyAnObject(settings) ? settings : {};\n let safelyInputValue;\n\n const checkValue = (value) => getSafelyValue(value) || \"0\";\n\n const transform = (valueAsSting) => {\n const processedValue = valueAsSting.replace(/,/g, \".\");\n if (Number.isNaN(Number(processedValue))) return processedValue;\n return `${intlNumbersFormatter(getSafelyValue(Number(processedValue)), {\n fractionDigits: {\n quantity: decimalPlaces,\n minimumFractionDigits: decimalPlaces,\n },\n })}`;\n };\n\n if (getIsOnlyAnObject(value)) {\n safelyInputValue = {\n from: checkValue(value.from),\n to: checkValue(value.to),\n };\n } else {\n safelyInputValue = checkValue(value);\n\n if (safelyInputValue.includes(\" - \")) {\n const valuesArr = safelyInputValue\n .split(\" - \")\n .map((partOfValue) => partOfValue.trim());\n safelyInputValue = {\n from: checkValue(valuesArr[0]),\n to: checkValue(valuesArr[1]),\n };\n } else {\n // \u0412\u0430\u0440\u0438\u0430\u043D\u0442 \u043A\u043E\u0433\u0434\u0430 \u0432\u0435\u043B\u044C\u044E \u043F\u0435\u0440\u0435\u0434\u0430\u043D\u043E \u0441\u0442\u0440\u043E\u043A\u043E\u0439 (\u041D\u0415 \u043E\u0431\u044A\u0435\u043A\u0442\u043E\u043C) \u0438 \u043E\u043D\u043E \u043D\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0435\u043F\u0430\u0440\u0430\u0442\u043E\u0440\u0430 \" - \"\n // - \u043E\u0434\u0438\u043D\u043E\u0447\u043D\u044B\u0435 \u0432\u0435\u043B\u044C\u044E\n // - \u043D\u0435\u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u044B\u0439 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\n return `${beforeValueSymbol}${transform(safelyInputValue)}${afterValueSymbol}${isUseAsSimpleDiapason ? '' : '%'}`;\n }\n }\n\n if (safelyInputValue.from === safelyInputValue.to && !!isGlueSameRangesTogether) {\n return `${beforeValueSymbol}${transform(safelyInputValue.from)}${afterValueSymbol}${isUseAsSimpleDiapason ? '' : '%'}`;\n }\n\n if (isCommonPercentageSymbol)\n return `${beforeValueSymbol}${transform(safelyInputValue.from)} - ${transform(\n safelyInputValue.to,\n )}${afterValueSymbol}${isUseAsSimpleDiapason ? '' : '%'}`;\n else\n return `${beforeValueSymbol}${transform(safelyInputValue.from)}${isUseAsSimpleDiapason ? '' : '%'} - ${transform(\n safelyInputValue.to,\n )}${isUseAsSimpleDiapason ? '' : '%'}${afterValueSymbol}`;\n};\n\n// eslint-disable-next-line no-control-regex\nexport const formatToOnlyASCIICodeText = (text) =>\n getSafelyValue(text).replace(/[^\\x00-\\x7F]+/g, \"\");\n\n// eslint-disable-next-line default-param-last\nexport const formatNumberValueToMask = (inputValue, settings) => {\n const safelyInputValue = getSafelyValue(inputValue);\n\n // default valueSymbol === 'n', default mask === 'nnn-nnn-nnnn'\n const {\n mask = \"XXX-XXX-XXXX\",\n valueSymbol = \"X\",\n isReturnAdvanced = false,\n } = settings || {};\n const processing = mask.split(\"\").reduce(\n (acc, item) => {\n if (acc.value.length) ++acc.cursorPosition;\n acc.newValue.push(\n item === valueSymbol && acc.value.length ? acc.value.shift() : item,\n );\n return acc;\n },\n {\n value: safelyInputValue.split(\"\").filter((sym) => /[0-9]/g.test(sym)),\n newValue: [],\n cursorPosition: 0,\n },\n );\n\n return isReturnAdvanced\n ? {\n value: processing.newValue.join(\"\"),\n cursorPosition: processing.cursorPosition,\n }\n : processing.newValue.join(\"\");\n};\n\nexport const formatToLimitLength = (inputValue, limit) => {\n const value = getSafelyValue(inputValue);\n return limit &&\n typeof limit === \"number\" &&\n !Number.isNaN(limit) &&\n value?.length > limit\n ? value.substr(0, limit)\n : value;\n};\n\nexport const formatToHex = ({ inputValue, withSharp }) => {\n const value = getSafelyValue(inputValue);\n if (withSharp) return `#${value.replace(/[^a-f0-9]/gi, \"\")}`;\n\n return `${value.replace(/[^#a-f0-9]/gi, \"\")}`;\n};\n\nexport function formatToReplaceAllWhiteSpace(str) {\n const value = getSafelyValue(str);\n return value.replace(/\\s+/g, \"\");\n}\n\n// ****************************\n// transform\n// ****************************\n\n// ...\n\n// ****************************\n// filter\n// ****************************\n//? \u041D\u0430\u043C\u0435\u0440\u044F\u043D\u043D\u043E \u0432\u044B\u043F\u0438\u043B\u0438\u043B \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435 \u0434\u0435\u0444\u043E\u043B\u0442\u043D\u043E\u0433\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u043D\u0430 \u0443\u0440\u043E\u0432\u043D\u0435 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432, \u0447\u0442\u043E\u0431\u044B \u0441\u0434\u0435\u043B\u0430\u0442\u044C null \u0440\u0430\u0431\u043E\u0447\u0438\u043C \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u043C\n//? decimalPlaces === null \u0442\u0435\u043F\u0435\u0440\u044C \u0442\u043E\u0447\u043D\u043E \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442 \u0440\u0435\u0436\u0438\u043C \u0432\u0432\u043E\u0434\u0430 \u0411\u0415\u0417 \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0435\u0439 \u0434\u0435\u0441\u044F\u0442\u0438\u0447\u043D\u044B\u0445 \u0437\u043D\u0430\u043A\u043E\u0432\nexport const filterFloat = (inputValue, decimalPlaces) => {\n const replaser = input => ('' + input).replace(/[^\\.\\d]/g, '');\n const value = getSafelyValue(inputValue);\n \n //? safelyDecimalPlaces \u0422\u041E\u0427\u041D\u041E \u043B\u0438\u0431\u043E null, \u043B\u0438\u0431\u043E \u0446\u0435\u043B\u043E\u0435 \u0447\u0438\u0441\u043B\u043E\n const safelyDecimalPlaces = (() => {\n if (decimalPlaces === null) return decimalPlaces;\n\n const DEFAULT_VALUE = 2;\n const isNumber = typeof decimalPlaces === 'number' || (typeof decimalPlaces === 'string' && !Number.isNaN(+decimalPlaces));\n\n //? \u0437\u0430\u0449\u0438\u0442\u0430 \u043E\u0442 \u0434\u0440\u043E\u0431\u043D\u043E\u0433\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F decimalPlaces\n return isNumber ? Number((+decimalPlaces).toFixed()) : DEFAULT_VALUE;\n })();\n\n // \u041E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430 \u043A\u0435\u0439\u0441\u0430 \u0435\u0441\u043B\u0438 \u043F\u0435\u0440\u0432\u044B\u043C \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u043C \u043D\u0430\u0436\u0430\u0442\u0430 \u0442\u043E\u0447\u043A\u0430\n if (value.length === 1 && (value[0] === '.' || value[0] === ',')) return '0.';\n\n // \u041F\u0440\u0438\u0432\u043E\u0434\u0438\u043C \u0437\u0430\u043F\u044F\u0442\u044B\u0435 \u043A \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u043E\u043C\u0443 \u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044E, \u043D\u043E \u043D\u0435 \u0432\u044B\u043F\u0438\u043B\u0438\u0432\u0430\u0435\u043C\n let output = ('' + value)?.replace(/,/g, '.');\n\n // \u0412\u044B\u043F\u0438\u043B\u0438\u0442\u044C \u043F\u0435\u0440\u0432\u044B\u0439 \u043D\u043E\u043B\u044C, \u0435\u0441\u043B\u0438 \u044D\u0442\u043E \u043D\u0435 \u0434\u0440\u043E\u0431\u044C\n if (value.length > 1 && value[0] === '0' && value[1] !== '.' && value[0] !== ',') output = value.slice(1);\n\n const previousValue = '' + output.slice(0, -1);\n const lastSym = '' + output.slice(-1);\n\n // \u041E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430 \u043A\u0435\u0439\u0441\u0430 \u0432\u0442\u043E\u0440\u043E\u0439 \u0442\u043E\u0447\u043A\u0438 \u0432 \u0434\u0440\u043E\u0431\u0438\n if (lastSym === '.' && previousValue.includes('.')) output = previousValue;\n\n // if (localStorage.getItem('useDeb')) debugger;\n\n // \u041B\u043E\u0433\u0438\u043A\u0430 \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0435\u043D\u0438\u044F \u043F\u043E decimalPlaces\n if (typeof safelyDecimalPlaces === 'number') {\n if (!safelyDecimalPlaces && lastSym === '.') return replaser(previousValue);\n if (previousValue.includes('.') && (previousValue.indexOf('.') + 1 + safelyDecimalPlaces === previousValue?.length)) {\n return replaser(previousValue);\n }\n }\n\n return replaser(output);\n};\n\nexport const filterNumeric = (value, settings) => {\n value = getSafelyValue(value)?.replace(/,/g, \"\");\n const { type = \"float\", decimalPlaces } = settings || {};\n\n const executor = type === \"float\" ? filterFloat : formatOnlyNumbers;\n return executor(getSafelyValue(value), decimalPlaces);\n};\n\nexport const formatToHideValuePartially = (value, settings) => {\n const {\n showSymbolsCount = 4,\n isVisibleFromFront = false,\n isCutOutWhiteSpaces = true,\n } = settings || {};\n const safelyValue = getSafelyValue(value);\n\n const newValue = isCutOutWhiteSpaces\n ? safelyValue.replace(/\\s/g, \"\")\n : safelyValue;\n if (newValue.length <= showSymbolsCount) return newValue;\n\n const hide = (val) =>\n val\n .split(\"\")\n .map(() => \"*\")\n .join(\"\");\n const visiblePart = isVisibleFromFront\n ? newValue.slice(0, showSymbolsCount)\n : newValue.slice(-1 * showSymbolsCount);\n const hiddenPart = isVisibleFromFront\n ? newValue.slice(showSymbolsCount)\n : newValue.slice(0, -1 * showSymbolsCount);\n\n return isVisibleFromFront\n ? `${visiblePart}${hide(hiddenPart)}`\n : `${hide(hiddenPart)}${visiblePart}`;\n};\n", "import React, { useEffect, useState } from 'react';\nimport { getIsOnlyAnObject, clone } from '../utils';\n\nconst timeouts = { timeoutId: null };\nconst formChanges = [];\nconst DELAY_TIME = 1;\n\n// ? validateField - \u0434\u043E\u043B\u0436\u0435\u043D \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044C \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0443 { field, isValid }\nfunction useFormFieldsChangesManager({ form, setForm, callback, validateField, settings }) {\n const { isNotSetForm, isUseValidation = false } = settings || {};\n\n //? \u041F\u0440\u043E\u0431\u043E\u0432\u0430\u043B \u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043F\u0440\u043E\u0441\u0442\u043E useEffect \u043F\u043E formChangesRef.current,\n //? \u043D\u043E \u043F\u043E \u043A\u0430\u043A\u043E\u0439-\u0442\u043E \u043F\u0440\u0438\u0447\u0438\u043D\u0435 \u043F\u043E\u0441\u043B\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0438 \u0440\u0435\u0444\u043A\u0438 \u043D\u0435 \u0437\u0430\u0445\u043E\u0434\u0438\u043B\u043E \u0432 useEffect.\n //? \u041E\u0434\u043D\u0430\u043A\u043E \u0435\u0441\u043B\u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u043B useEffect \u043F\u043E \u043A\u0430\u043A\u043E\u0439-\u043D\u0438\u0431\u0443\u0434\u044C \u0434\u0440\u0443\u0433\u043E\u0439 \u043F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u043E\u0439,\n //? \u0442\u043E \u0438 \u0432 useEffect \u043F\u043E formChangesRef.current \u0442\u043E\u0436\u0435 \u0437\u0430\u0445\u043E\u0434\u0438\u043B\u043E.\n //? \u041F\u043E\u044D\u0442\u043E\u043C\u0443 \u0442\u0443\u0442 \u043D\u0443\u0436\u0435\u043D \u044D\u0442\u043E\u0442 \u0441\u0442\u0435\u0439\u0442,\n //? \u0445\u043E\u0442\u044F \u043F\u043E \u0438\u0442\u043E\u0433\u0443 \u0432 \u043A\u043E\u043D\u0435\u0447\u043D\u043E\u0439 \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u043D\u0438\u043C \u0434\u0430\u0436\u0435 \u043D\u0435\u043F\u043B\u043E\u0445\u043E \u043F\u043E\u043B\u0443\u0447\u0438\u043B\u043E\u0441\u044C (\u043D\u043E \u0432\u043E\u043E\u0431\u0449\u0435 \u043E\u0447\u0435\u043D\u044C \u0441\u0442\u0440\u0430\u043D\u043D\u0430\u044F \u0435\u0440\u0443\u043D\u0434\u0430...)\n const [isFormMustBeChanget, setIsFormMustBeChanget] = useState(false);\n const startChangesProcessing = () => {\n // ? \u0421 \u0443\u0447\u0435\u0442\u043E\u043C \u0442\u043E\u0433\u043E \u0447\u0442\u043E changeForm \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u0430\u044F, \u0442\u043E \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0430\u0435\u043C \u043F\u043E\u043F\u044B\u0442\u043A\u0438 \u0438\u0437-\u0432\u043D\u0435 \u043F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0444\u043B\u0430\u0433 \u0435\u0441\u043B\u0438 \u0444\u043B\u0430\u0433 \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\n if (isFormMustBeChanget) return;\n // ? \u041D\u0443 \u0438 \u043F\u043E \u0441\u0443\u0442\u0438 - \u0432\u044B\u043A\u043B\u044E\u0447\u0430\u0442\u044C \u0430\u043F\u0440\u0438\u043E\u0440\u0438 \u043D\u0435 \u0434\u0430\u0435\u043C, \u0442\u043E\u043B\u044C\u043A\u043E \u0432\u043A\u043B\u044E\u0447\u0430\u0442\u044C.\n setIsFormMustBeChanget(true);\n };\n\n //? \u0424-\u044F \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0444-\u0435\u0439 - \u043F\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0449\u0438\u043A\u043E\u043C \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0444\u043E\u0440\u043C\u044B \u0432 \u043E\u0447\u0435\u0440\u0435\u0434\u044C.\n //? \u0424-\u044F \u043F\u043E\u043B\u0443\u0447\u0430\u0435\u0442\u0441\u044F \u0441\u0430\u043C\u043E\u0432\u044B\u0437\u044B\u0432\u0430\u044E\u0449\u0438\u043C\u0441\u044F \u0433\u0435\u0442\u0442\u0435\u0440\u043E\u043C.\n //? C\u0443\u0442\u044C \u0444-\u0438\u0438:\n //? \u0414\u043B\u044F \u0442\u043E\u0433\u043E \u0447\u0442\u043E\u0431 \u043D\u0435 \u0441\u043F\u0430\u043C\u0438\u0442\u044C \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\u043C\u0438, \u0435\u0441\u043B\u0438 \u0438\u0445 \u043D\u0430\u0437\u043D\u0430\u0447\u0430\u0435\u0442\u0441\u044F \u043C\u043D\u043E\u0433\u043E \u0432 \u0440\u0430\u043C\u043A\u0430\u0445 \u043E\u0434\u043D\u043E\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438,\n //? \u0438\u043F\u043E\u043B\u044C\u0437\u0443\u044E \u043F\u0440\u0438\u0435\u043C \u0441 \u043F\u0435\u0440\u0435\u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u043C setTimeout\n\n //? \u0427\u0442\u043E\u0431\u044B \u043F\u0440\u0435\u0436\u0434\u0435\u0432\u0440\u0435\u043C\u0435\u043D\u043D\u043E \u043D\u0435 \u0441\u043F\u0440\u043E\u0432\u0430\u0446\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u0440\u0430\u0431\u043E\u0442\u043A\u0443 useEffect\n //? \u043F\u043E \u0441\u0442\u0435\u0439\u0442\u0443 \u0444\u0438\u043A\u0441\u0438\u0440\u0443\u044E\u0449\u0435\u043C\u0443 \"\u043E\u0442\u043C\u0430\u0448\u043A\u0443\" \u043A \u043D\u0430\u0447\u0430\u043B\u0443 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 (isFormMustBeChanget)\n //? \u043E\u0442\u043A\u043B\u0430\u0434\u044B\u0432\u0430\u044E \u043F\u0435\u0440\u0435\u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u044D\u0442\u043E\u0433\u043E \u0441\u0442\u0435\u0439\u0442\u0430 \u0434\u043E \u043F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0438 \u043D\u0435\u043F\u0440\u0435\u0440\u044B\u0432\u043D\u044B\u0445 \u0432\u044B\u0437\u043E\u0432\u043E\u0432 assignChangesToField,\n //? \u043D\u043E \u043F\u0440\u0438 \u044D\u0442\u043E\u043C \u043F\u0440\u0438 \u043A\u0430\u0436\u0434\u043E\u043C \u0435\u0435 \u0432\u044B\u0437\u043E\u0432\u0435 \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0430\u044E \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0432 \u043C\u0430\u0441\u0441\u0438\u0432\n const assignChangesToField = (() => {\n // ? data - \u043E\u0431\u044A\u0435\u043A\u0442 \u0441 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\u043C\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u043F\u043E\u0437\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0438\u0440\u043E\u0432\u0430\u043D \u0432 \u0444\u0438\u043B\u0434\n // ? upd: \u0442\u0435\u043F\u0435\u0440\u044C data \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043F\u0435\u0440\u0435\u0434\u0430\u043D\u0430 \u043A\u0430\u043A \u0440\u0435\u0434\u044C\u044E\u0441\u0435\u0440, \u0442\u0430\u043A \u0436\u0435 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D 3-\u0439 \u0430\u0440\u0433\u0443\u043C\u0435\u043D\u0442 - settings\n\n // todo(vl) - upd: \u0432\u0432\u0435\u043B \u0434\u043B\u044F \u0430\u0441\u0430\u0439\u043D\u0435\u0440\u0430 \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u044C \u043F\u0440\u043E\u043A\u0438\u0434\u044B\u0432\u0430\u0442\u044C settings \u0434\u043B\u044F \u043A\u0430\u0436\u0434\u043E\u0433\u043E \u043E\u0442\u043B\u043E\u0436\u0435\u043D\u043D\u043E\u0433\u043E \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F,\n // todo(vl) - \u043D\u043E \u043F\u043E\u043A\u0430 \u0447\u0442\u043E \u043D\u0438\u043A\u0430\u043A \u043D\u0435 \u043E\u0431\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u0435\u0442\u0441\u044F, \u0432\u0432\u0435\u043B \u0434\u043B\u044F \u0440\u0430\u0441\u0448\u0438\u0440\u044F\u0435\u043C\u043E\u0441\u0442\u0438 \u0444-\u043B\u0430\n return (data, key, settings) => {\n clearTimeout(timeouts.timeoutId);\n\n // ? \u041F\u0440\u043E\u043F\u0443\u0441\u043A\u0430\u0435\u043C \"\u043F\u0443\u0441\u0442\u044B\u0435\"/\u043D\u0435\u0444\u043E\u0440\u043C\u0430\u0442\u043D\u044B\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\n // todo(vl) - \u043F\u043E\u0434\u0443\u043C\u0430\u0442\u044C \u043D\u0443\u0436\u043D\u0430 \u043B\u0438 \u043F\u0440\u043E\u043C\u0438\u0441\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u043D\u0430 \u044D\u0442\u043E\u043C \u0443\u0440\u043E\u0432\u043D\u0435 (\u043F\u043E\u043A\u0430 \u0434\u0443\u043C\u0430\u044E \u0447\u0442\u043E \u043D\u0435\u0442)\n if (getIsOnlyAnObject(data) || typeof data === 'function') {\n formChanges.push({ key, data, settings });\n }\n\n setIsFormMustBeChanget(false);\n timeouts.timeoutId = setTimeout(() => setIsFormMustBeChanget(true), DELAY_TIME);\n\n // ? \u0412\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043C \u043D\u0430 \u043C\u0435\u0441\u0442\u043E \u0432\u044B\u0437\u043E\u0432\u0430 \u043A\u043B\u043E\u043D \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u043D\u043E\u0433\u043E \u043C\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439:\n // ? - \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043F\u043E\u043B\u0435\u0437\u043D\u043E \u0434\u043B\u044F \u0430\u043D\u0430\u043B\u0438\u0437\u0430\n // ? - \u043D\u043E \u041D\u0415 \u0434\u0430\u0435\u043C \u0432\u043C\u0435\u0448\u0438\u0432\u0430\u0442\u044C\u0441\u044F \u0432\u043E \u0432\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u044E\u044E \u0440\u0430\u0431\u043E\u0442\u0443 \u0445\u0443\u043A\u0430 (\u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u043A\u043B\u043E\u043D)\n return clone(formChanges);\n };\n })();\n\n const addChangesToField = (field, data, currentForm, currentChangesSettings) => {\n // todo(vl) - \u043F\u043E\u0434\u0443\u043C\u0430\u0442\u044C\n // todo(vl) - - \u043D\u0443\u0436\u043D\u0430 \u043B\u0438 \u043F\u0440\u043E\u043C\u0438\u0441\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u043D\u0430 \u044D\u0442\u043E\u043C \u0443\u0440\u043E\u0432\u043D\u0435 (\u043D\u0435 \u0444\u0430\u043A\u0442 \u0447\u0442\u043E \u043D\u0443\u0436\u043D\u0430, \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0434\u043E\u0436\u0434\u0430\u0442\u044C\u0441\u044F \u0443\u0439\u0434\u0435\u0442 \u0432 \u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u0441\u0442\u044C changeForm)\n // todo(vl) - - \u0435\u0441\u043B\u0438 \u043D\u0443\u0436\u043D\u0430, \u0442\u043E \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044C \u0444-\u043B\n const changesDataSafely = (() => {\n if (typeof data === 'function') return data(field, currentForm, currentChangesSettings);\n return getIsOnlyAnObject(data) ? data : {};\n })();\n\n const { error } = changesDataSafely;\n return { newField: { ...field, ...changesDataSafely }, ...(error !== undefined ? { error } : {}) };\n };\n\n //? \u0424-\u044F \u043F\u0440\u0438\u043C\u0435\u043D\u044F\u0435\u0442 \"\u043D\u0430\u043A\u043E\u043F\u043B\u0435\u043D\u043D\u044B\u0435\" \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\n const changeForm = async () => {\n let modifiedFormFromOutside;\n const errorsFromChanges = {};\n\n // ? \u041F\u0440\u043E\u0441\u0447\u0438\u0442\u044B\u0432\u0430\u0435\u043C \u043D\u043E\u0432\u0443\u044E \u0444\u043E\u0440\u043C\u0443 \u0441 \u0432\u043D\u0435\u0441\u0435\u043D\u043D\u044B\u043C\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\u043C\u0438 \u043F\u043E \u0444\u0438\u043B\u0434\u0430\u043C.\n // ? \u041E\u0431\u0440\u0430\u0449\u0430\u044E \u0432\u043D\u0438\u043C\u0430\u043D\u0438\u0435, \u0447\u0442\u043E \u0438\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u043C\u0441\u044F \u043F\u043E \u043C\u0430\u0441\u0441\u0438\u0432\u0443 formChanges, \u0430 \u0437\u043D\u0430\u0447\u0438\u0442 \u0444\u043E\u0440\u043C\u0430 \u0438\u0437\u043C\u0435\u043D\u044F\u0435\u0442\u0441\u044F \u0432 \u043F\u043E\u0440\u044F\u0434\u043A\u0435 \u043F\u043E\u0441\u0442\u0443\u043F\u043B\u0435\u043D\u0438\u044F \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439\n const newForm = formChanges.reduce((acc, changesItem) => {\n const { data, key, settings } = changesItem;\n const field = acc.find(field => field.key === key);\n\n // ? \u0415\u0441\u043B\u0438 \u0432 \u0444\u043E\u0440\u043C\u0435 \u0435\u0441\u0442\u044C \u0444\u0438\u043B\u0434 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044E\u0449\u0438\u0439 key \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F - \u043C\u0443\u0442\u0438\u0440\u0443\u0435\u043C \u0444\u0438\u043B\u0434\n if (field) {\n // ? \u041C\u0443\u0442\u0430\u0446\u0438\u044F \u0444\u0438\u043B\u0434\u0430 \u043F\u0440\u043E\u0438\u0441\u0445\u043E\u0434\u0438\u0442 \u043D\u0430 \u0430\u043A\u043A\u0443\u043C\u0443\u043B\u044F\u0442\u043E\u0440\u0435 (\u0442\u0435\u043A\u0443\u0449\u0430\u044F \u0444\u043E\u0440\u043C\u0430), \u0434\u043B\u044F \u0442\u043E\u0433\u043E \u0447\u0442\u043E\u0431\u044B \u0432 \u043F\u043E\u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0445 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044F\u0445 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0443\u0447\u0438\u0442\u044B\u0432\u0430\u0442\u044C \u043F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0438\u0435\n acc = acc.map(field => {\n if (field.key !== key) return field;\n\n // ? error - \u044D\u0442\u043E error \u041D\u0415 \u0438\u0437 \u0444\u0438\u043B\u0434\u0430 (\u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u0441\u0430\u0442\u0440\u044B\u0439), \u0430 \u0438\u043C\u0435\u043D\u043D\u043E \u0438\u0437 \"\u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\",\n // ? \u0435\u0441\u043B\u0438 \u041D\u0415 \u043F\u0440\u0438\u0445\u043E\u0434\u0438\u043B \u0438\u043C\u0435\u043D\u043D\u043E \u0432 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\u0445, \u0442\u043E \u0435\u0433\u043E \u0438 \u043D\u0435 \u0431\u0443\u0434\u0435\u0442.\n const { newField, error } = addChangesToField(field, data, acc, settings);\n // ? \u041D\u0430 \u043A\u0430\u0436\u0434\u043E\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0444\u0438\u043A\u0441\u0438\u0440\u0443\u0435\u043C \u0438\u0442\u043E\u0433\u043E\u0432\u0443\u044E \u043C\u0443\u0442\u0430\u0446\u0438\u044E \u043F\u0440\u043E\u043F\u044B error \u0434\u043B\u044F \u043A\u0430\u0436\u0434\u043E\u0433\u043E \u0444\u0438\u043B\u0434\u0430\n if (error || error !== undefined) errorsFromChanges[key] = error;\n\n return newField;\n });\n }\n return acc;\n }, form);\n\n // ToDo - \u043F\u043E\u0440\u0435\u0444\u0430\u043A\u0442\u043E\u0440\u0438\u0442\u044C, \u043D\u0435 \u043F\u0440\u043E\u0433\u043E\u043D\u044F\u0442\u044C \u0432\u0430\u043B\u0438\u0434\u0430\u0446\u0438\u044E \u0432\u0441\u0435\u0445 \u043F\u043E\u043B\u0435\u0439, \u0430 \u0442\u043E\u043B\u044C\u043A\u043E \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u043D\u044B\u0445\n const validatedForm =\n isUseValidation && typeof validateField === 'function'\n ? newForm.map(field => ({\n ...field,\n error: (() => {\n let output = '';\n const validateFieldResult = validateField({ ...field }, newForm);\n if (validateFieldResult?.field?.error !== undefined) output = validateFieldResult.field.error;\n else if (errorsFromChanges[field.key] !== undefined) output = errorsFromChanges[field.key];\n return output;\n })(),\n }))\n : newForm;\n\n if (callback && typeof callback === 'function') modifiedFormFromOutside = await callback(validatedForm);\n if (!isNotSetForm) await setForm(modifiedFormFromOutside ?? validatedForm);\n\n formChanges.length = 0;\n setIsFormMustBeChanget(false);\n };\n\n useEffect(() => {\n if (isFormMustBeChanget) changeForm();\n }, [isFormMustBeChanget]);\n\n return {\n assignChangesToField, // \u043C\u0435\u0442\u043E\u0434 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0438 \u043E\u0442\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0445 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439\n isFormMustBeChanget, // \u0444\u043B\u0430\u0433 \u0441\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u043D\u0435\u043F\u043E\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0445 \u043C\u0443\u0442\u0430\u0446\u0438\u0439 \u0444\u043E\u0440\u043C\u044B\n\n // \u043C\u0435\u0442\u043E\u0434 \u043F\u0440\u0438\u043D\u0443\u0434\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0439 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0438 \u0444\u043B\u0430\u0433\u0430 \u0441\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u043D\u0435\u043F\u043E\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0445 \u043C\u0443\u0442\u0430\u0446\u0438\u0439 \u0444\u043E\u0440\u043C\u044B\n // \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u0442\u043E\u043B\u044C\u043A\u043E \u043D\u0430 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F, \u041D\u0415 \u0432\u043A\u043B\u044E\u0447\u0430\u0435\u0442, \u0435\u0441\u043B\u0438 \u0443\u0436\u0435 \u043E\u0442\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u0435\u0442 \u043F\u0440\u0438\u043C\u0435\u043D\u0435\u043D\u0438\u0435\n startChangesProcessing,\n\n // todo(vl) - deprecated, \u043D\u043E \u043F\u043E\u043A\u0430 \u043D\u0435 \u0432\u044B\u043F\u0438\u043B\u0438\u0432\u0430\u044E, \u043D\u0435 \u043F\u0440\u043E\u0432\u0435\u0440\u0438\u043B \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u043B\u0438 \u043D\u0430 \u043F\u0440\u043E\u0435\u043A\u0442\u0430\u0445\n setIsFormMustBeChanget: startChangesProcessing, // \u043C\u0435\u0442\u043E\u0434 \u043F\u0440\u0438\u043D\u0443\u0434\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0439 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0438 \u0444\u043B\u0430\u0433\u0430 \u0441\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u043D\u0435\u043F\u043E\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0445 \u043C\u0443\u0442\u0430\u0446\u0438\u0439 \u0444\u043E\u0440\u043C\u044B\n\n changesArray: clone(formChanges), // \u0442\u0435\u043A\u043A\u0443\u0449\u0435\u0435 \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435 \u043C\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439\n\n // \u041A\u043E\u043D\u0441\u0442\u0430\u043D\u0442\u0430 (\u043D\u0430 \u0447\u0442\u0435\u043D\u0438\u0435) \u0437\u0430\u0434\u0435\u0440\u0436\u043A\u0438, \u043A\u043E\u0442\u043E\u0440\u0430\u044F \u0432\u044B\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044F \u043C\u0435\u0436\u0434\u0443 \u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F\u043C\u0438,\n // \u043F\u043E\u0441\u043B\u0435 \u043A\u043E\u0442\u043E\u0440\u043E\u0439 \u043E\u0442\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u0435\u0442 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0430 \u043D\u0430\u043A\u043E\u043F\u0438\u0432\u0448\u0438\u0445\u0441\u044F \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0432 \u0444\u043E\u0440\u043C\u0443\n DELAY_TIME,\n };\n}\n\nexport default useFormFieldsChangesManager;\n", "import { getSafelyValue } from \"./../fieldValueFormatters\";\n\nconst DEFAULT_CODE = \"en\";\n\nexport default function createTranslator({ ...langCatalogs }) {\n const loc = {\n ...langCatalogs,\n };\n\n let code = window.localStorage.getItem(\"lng\");\n if (!code)\n code = window.navigator\n ? window.navigator.language.split(\"-\")[0]\n : DEFAULT_CODE;\n if (!loc[code]) code = DEFAULT_CODE;\n\n return function (text, values) {\n const safelyValues = values ?? {};\n const safelyText = getSafelyValue(text);\n let translatedText =\n loc[code] && loc[code][safelyText] ? loc[code][safelyText] : safelyText;\n\n if (Object?.keys(safelyValues)?.length) {\n for (const key in values) {\n const regex = new RegExp(`%${key}%`, \"g\");\n translatedText = translatedText?.replace(regex, values[key]);\n }\n }\n\n return translatedText;\n };\n}\n", "// \u0412\u0437\u044F\u0442\u043E \u0438\u0437 https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Math/round\n// \u041F\u0440\u0438 \u0438\u043C\u043F\u043E\u0440\u0442\u0435 \u043B\u044E\u0431\u043E\u0439 \u0444-\u0438 \u0438\u0437 \u044D\u0442\u043E\u0433\u043E \u0444\u0430\u0439\u043B\u0430 \u043E\u0442\u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u0441\u0430\u043C\u043E\u0432\u044B\u0437\u044B\u0432\u0430\u044E\u0449\u0430\u044F\u0441\u044F \u0444-\u044F \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\n// \u043E\u0431\u044A\u0435\u043A\u0442 Math 3-\u043C\u044F \u0444-\u043C\u0438: round10, floor10, ceil10\n(function () {\n /**\n * \u041A\u043E\u0440\u0440\u0435\u043A\u0442\u0438\u0440\u043E\u0432\u043A\u0430 \u043E\u043A\u0440\u0443\u0433\u043B\u0435\u043D\u0438\u044F \u0434\u0435\u0441\u044F\u0442\u0438\u0447\u043D\u044B\u0445 \u0434\u0440\u043E\u0431\u0435\u0439.\n *\n * @param {String} type \u0422\u0438\u043F \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u0438\u0440\u043E\u0432\u043A\u0438.\n * @param {Number} value \u0427\u0438\u0441\u043B\u043E.\n * @param {Integer} exp \u041F\u043E\u043A\u0430\u0437\u0430\u0442\u0435\u043B\u044C \u0441\u0442\u0435\u043F\u0435\u043D\u0438 (\u0434\u0435\u0441\u044F\u0442\u0438\u0447\u043D\u044B\u0439 \u043B\u043E\u0433\u0430\u0440\u0438\u0444\u043C \u043E\u0441\u043D\u043E\u0432\u0430\u043D\u0438\u044F \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u0438\u0440\u043E\u0432\u043A\u0438).\n * @returns {Number} \u0421\u043A\u043E\u0440\u0440\u0435\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435.\n */\n function decimalAdjust(type, value, exp) {\n // \u0415\u0441\u043B\u0438 \u0441\u0442\u0435\u043F\u0435\u043D\u044C \u043D\u0435 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0430, \u043B\u0438\u0431\u043E \u0440\u0430\u0432\u043D\u0430 \u043D\u0443\u043B\u044E...\n if (typeof exp === \"undefined\" || Number(exp) === 0) {\n return Math[type](value);\n }\n value = Number(value);\n exp = Number(exp);\n // \u0415\u0441\u043B\u0438 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u043D\u0435 \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0447\u0438\u0441\u043B\u043E\u043C, \u043B\u0438\u0431\u043E \u0441\u0442\u0435\u043F\u0435\u043D\u044C \u043D\u0435 \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0446\u0435\u043B\u044B\u043C \u0447\u0438\u0441\u043B\u043E\u043C...\n if (isNaN(value) || !(typeof exp === \"number\" && exp % 1 === 0)) {\n return NaN;\n }\n // \u0421\u0434\u0432\u0438\u0433 \u0440\u0430\u0437\u0440\u044F\u0434\u043E\u0432\n value = value.toString().split(\"e\");\n value = Math[type](\n Number(value[0] + \"e\" + (value[1] ? Number(value[1]) - exp : -exp)),\n );\n // \u041E\u0431\u0440\u0430\u0442\u043D\u044B\u0439 \u0441\u0434\u0432\u0438\u0433\n value = value.toString().split(\"e\");\n return Number(value[0] + \"e\" + (value[1] ? Number(value[1]) + exp : exp));\n }\n\n // \u0414\u0435\u0441\u044F\u0442\u0438\u0447\u043D\u043E\u0435 \u043E\u043A\u0440\u0443\u0433\u043B\u0435\u043D\u0438\u0435 \u043A \u0431\u043B\u0438\u0436\u0430\u0439\u0448\u0435\u043C\u0443\n if (!Math.round10) {\n Math.round10 = function (value, exp) {\n return decimalAdjust(\"round\", value, exp);\n };\n }\n // \u0414\u0435\u0441\u044F\u0442\u0438\u0447\u043D\u043E\u0435 \u043E\u043A\u0440\u0443\u0433\u043B\u0435\u043D\u0438\u0435 \u0432\u043D\u0438\u0437\n if (!Math.floor10) {\n Math.floor10 = function (value, exp) {\n return decimalAdjust(\"floor\", value, exp);\n };\n }\n // \u0414\u0435\u0441\u044F\u0442\u0438\u0447\u043D\u043E\u0435 \u043E\u043A\u0440\u0443\u0433\u043B\u0435\u043D\u0438\u0435 \u0432\u0432\u0435\u0440\u0445\n if (!Math.ceil10) {\n Math.ceil10 = function (value, exp) {\n return decimalAdjust(\"ceil\", value, exp);\n };\n }\n})();\n\nexport const addRangeDefault = (from, to, currentValues, decimalPlaces) => {\n if (!currentValues?.length) return [{ from, to }];\n const step = decimalPlaces ? Math.pow(10, -1 * decimalPlaces) : 1;\n\n const resultOfProcessAddingRange = currentValues.reduce(\n (acc, range) => {\n const isIncludesFrom =\n Boolean(acc.from) && range.from < acc.from && range.to >= acc.from;\n const isIncludesTo =\n Boolean(acc.to) && range.from <= acc.to && range.to > acc.to;\n const isRangeMustBeIncludet =\n Boolean(acc.from) &&\n Boolean(acc.to) &&\n acc.from <= range.from &&\n acc.to >= range.to;\n\n const processTo = () => {\n const lastAccRange = acc.result[acc.result.length - 1];\n\n if (acc.to < range.from) {\n lastAccRange.to = acc.to;\n acc.to = null;\n acc.result = [...acc.result, range];\n } else if (isIncludesTo) {\n lastAccRange.to = acc.to;\n acc.result = [\n ...acc.result,\n {\n from: Math.round10(acc.to + step, -1 * decimalPlaces),\n to: range.to,\n },\n ];\n acc.to = null;\n } else if (acc.to === range.to) {\n lastAccRange.to = acc.to;\n acc.to = null;\n }\n };\n\n if (!acc.from && !acc.to) acc.result = [...acc.result, range];\n else if (!acc.from && acc.to) processTo();\n else if (acc.from && acc.to) {\n if (acc.from <= range.from) {\n acc.result = [...acc.result, { from: acc.from }];\n acc.from = null;\n processTo();\n } else if (isIncludesFrom) {\n acc.result = [\n ...acc.result,\n {\n from: range.from,\n to: Math.round10(acc.from - step, -1 * decimalPlaces),\n },\n { from: acc.from },\n ];\n acc.from = null;\n processTo();\n } else {\n acc.result = [\n ...acc.result,\n ...(!isRangeMustBeIncludet ? [range] : []),\n {\n from: Math.round10(acc.from, -1 * decimalPlaces),\n to: Math.round10(acc.to, -1 * decimalPlaces),\n },\n ];\n }\n }\n return acc;\n },\n { from, to, result: [] },\n );\n\n const result = resultOfProcessAddingRange.result;\n if (!result[result.length - 1].to) result[result.length - 1].to = to;\n return result;\n};\n", "import React, { useEffect, useState } from \"react\";\n\nimport ReactDOM from \"react-dom\";\n\nconst Portal = ({ children, parentSelector }) => {\n const [container] = useState(() => document.createElement(\"div\"));\n useEffect(() => {\n let parent;\n\n if (parentSelector) parent = document.querySelector(parentSelector);\n else parent = document.body;\n parent?.appendChild(container);\n\n return () => {\n parent?.removeChild(container);\n };\n }, []);\n\n return ReactDOM.createPortal(children, container);\n};\n\nexport default React.memo(Portal);\n", "import { useEffect } from \"react\";\n\nconst useBodyScrollLock = (isScrollBodyLocked) => {\n useEffect(() => {\n if (isScrollBodyLocked) {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"auto\";\n }\n\n return () => {\n document.body.style.overflow = \"auto\";\n };\n }, [isScrollBodyLocked]);\n};\n\nexport default useBodyScrollLock;\n", "import { useEffect } from \"react\";\n\nexport const useClickOutside = (ref, setOut, open) => {\n function handleClickOutside(event) {\n if (ref.current && !ref.current.contains(event.target)) {\n setOut(open);\n }\n }\n useEffect(() => {\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [ref]);\n};\n", "import React, { useEffect, useState } from \"react\";\n\nexport const useDebounce = ({ searchValue, delay }) => {\n const [debouncedValue, setDebouncedValue] = useState(searchValue);\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(searchValue);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [searchValue, delay]);\n\n return debouncedValue;\n};\n", "import { createRef, useEffect } from \"react\";\n\nexport default function useFieldsFocus({ form, setForm }) {\n const isFormAsObject = Boolean(\n typeof form === \"object\" && !Array.isArray(form),\n );\n\n const getField = (key) => {\n if (isFormAsObject) {\n return (\n form?.[key] ?? Object.values(form)?.find((field) => field.key === key)\n );\n } else {\n return form?.find((field) => field.key === key);\n }\n };\n\n const getErroredFields = () => {\n if (isFormAsObject) {\n return Object.values(form)?.filter((field) => field.error);\n } else {\n return form?.filter((f) => f?.error);\n }\n };\n\n const addRefsToFields = () => {\n if (isFormAsObject) {\n setForm((form) => {\n return Object.keys(form)?.reduce((result, key) => {\n const field = form[key];\n return {\n ...result,\n [key]: {\n ...field,\n ref: createRef(),\n wrapperRef: createRef(),\n },\n };\n }, {});\n });\n } else {\n setForm((form) => {\n return form?.map((field) => {\n field.ref = createRef();\n field.wrapperRef = createRef();\n\n return field;\n });\n });\n }\n };\n\n const toggleFieldFocus = ({ field, action = \"focus\" }) => {\n if (!field || !field?.ref) return null;\n\n setTimeout(() => {\n field.ref.current\n ?.querySelector(field?.focusSelector || \"input\")\n ?.[action]();\n }, 50);\n };\n\n const setFocusTo = (key) => {\n const field = getField(key);\n if (!field) return false;\n\n toggleFieldFocus({ field });\n };\n const setFocusToErroredField = () => {\n const field = getErroredFields()?.[0];\n if (!field) return false;\n\n toggleFieldFocus({ field });\n };\n\n useEffect(() => {\n addRefsToFields();\n }, [form?.length]);\n\n return {\n setFocusTo,\n setFocusToErroredField,\n };\n}\n", "export default function General({ form, FormFields = [] } = {}) {\n const joinData = (...args) => {\n const [mainArg] = args;\n const MainArgProto = Array.isArray(mainArg)\n ? \"Array\"\n : typeof mainArg === \"object\"\n ? \"Object\"\n : undefined;\n const template = Array.isArray(mainArg)\n ? []\n : typeof mainArg === \"object\"\n ? {}\n : null;\n\n if (!template) return undefined;\n\n return args.reduce((result, item) => {\n if (MainArgProto === \"Array\") {\n if (Array.isArray(item)) {\n return [...result, ...item];\n } else {\n return [...result, item];\n }\n } else if (MainArgProto === \"Object\") {\n return { ...result, ...item };\n } else {\n return template;\n }\n }, template);\n };\n const getFieldData = (key) => {\n if (Array.isArray(FormFields)) {\n if (FormFields[key]) {\n return { ...FormFields[key] };\n } else {\n return { ...FormFields.find((f) => f.key === key) };\n }\n } else if (typeof FormFields === \"object\") {\n return (\n { ...FormFields[key] } || {\n ...Object.values(FormFields).find((f) => f.key === key),\n }\n );\n } else {\n return undefined;\n }\n };\n const getFormFields = (argForm = form) => {\n return argForm?.fields || argForm;\n };\n const getFormFieldsAsArray = (fields) => {\n if (Array.isArray(fields)) return fields;\n\n if (typeof fields === \"object\") {\n return Object.values(fields);\n }\n\n return fields;\n };\n const getFormFieldsKeys = (fields = getFormFields()) => {\n if (Array.isArray(fields)) return fields.map(({ key }) => key);\n\n if (typeof fields === \"object\") {\n return Object.values(fields).map(({ key }) => key);\n }\n\n return fields;\n };\n const popFormField = (fields, key) => {\n const result = { item: undefined, itemIndex: undefined };\n\n if (Array.isArray(fields)) {\n result.item = fields?.find((f) => f.key === key);\n result.itemIndex = result.item\n ? fields.findIndex((f) => f.key === key)\n : fields.length;\n } else if (typeof fields === \"object\") {\n result.item =\n fields[key] || Object.values(fields).find((f) => f.key === key);\n result.itemIndex = result.item\n ? fields[key]\n ? key\n : Object.values(fields).findIndex((f) => f.key === key)\n : key;\n }\n\n return result;\n };\n const updateFormField = (fields, data, key) => {\n const isFunction = typeof data === \"function\";\n //KEY is NULLable\n if (!key) {\n return data.key\n ? Object.values(fields).reduce((result, field, i) => {\n const index = fields[field.key] ? field.key : i;\n\n return {\n ...result,\n [index]:\n data.key === field.key\n ? isFunction\n ? data(field)\n : data\n : field,\n };\n }, {})\n : {\n ...fields,\n [fields.length || 0]: isFunction ? data({}) : data,\n };\n }\n\n const { item: field = data, itemIndex } = popFormField(fields, key);\n\n fields[itemIndex] = isFunction ? data(field || {}) : { ...field, ...data };\n\n return fields;\n };\n\n const getFieldClassName = (key, type) => {\n return `form-${type}_field-${key}`;\n };\n\n return {\n joinData,\n getFieldData,\n popFormField,\n updateFormField,\n getFormFields,\n getFormFieldsAsArray,\n getFieldClassName,\n getFormFieldsKeys,\n };\n}\n", "import General from \"../functions/General\";\n\nexport default function ArrayWithObjects({ form, setForm, FormFields }) {\n const {\n joinData,\n getFieldData,\n updateFormField,\n getFormFields,\n getFormFieldsAsArray,\n getFormFieldsKeys,\n } = General({\n FormFields,\n });\n\n const getFormField = (key, argForm = form) => {\n return getFormFields(argForm)?.find((f) => f.key === key);\n };\n const setFormFields = (data) => {\n const isFunction = typeof data === \"function\";\n setForm((state) => (isFunction ? data(state) : data));\n };\n const setFormField = (data, key = null) =>\n setFormFields((fields) => updateFormField(fields, data, key));\n\n const removeAllFormFields = () => setFormFields([]);\n\n return {\n joinData,\n getFieldData,\n getFormFields,\n getFormField,\n setFormFields,\n setFormField,\n getFormFieldsAsArray: (fields) =>\n getFormFieldsAsArray(fields || getFormFields()),\n getFormFieldsKeys: (fields) => getFormFieldsKeys(fields || getFormFields()),\n removeAllFormFields,\n };\n}\n", "export default function ObjectWithIterableObjects({\n form,\n setForm,\n FormFields,\n}) {\n const joinData = (...args) => {\n const [mainArg] = args;\n const MainArgProto = Array.isArray(mainArg)\n ? \"Array\"\n : typeof mainArg === \"object\"\n ? \"Object\"\n : undefined;\n const template = Array.isArray(mainArg)\n ? []\n : typeof mainArg === \"object\"\n ? {}\n : null;\n\n if (!template) return undefined;\n\n return args.reduce((result, item) => {\n if (MainArgProto === \"Array\") {\n if (Array.isArray(item)) {\n return [...result, ...item];\n } else {\n return [...result, item];\n }\n } else if (MainArgProto === \"Object\") {\n return { ...result, ...item };\n } else {\n return template;\n }\n }, template);\n };\n\n const getFieldData = (key) => {\n if (Array.isArray(FormFields)) {\n return FormFields[key] || FormFields.find((f) => f.key === key);\n } else if (typeof FormFields === \"object\") {\n return (\n FormFields[key] || Object.values(FormFields).find((f) => f.key === key)\n );\n } else {\n return undefined;\n }\n };\n const getFormFields = () => {\n return form.fields || form;\n };\n const getFormField = (key) => {\n // eslint-disable-next-line no-undef\n if (FormProto === \"Array\") {\n return getFormFields().find((field) => field.key === key);\n // eslint-disable-next-line no-undef\n } else if (FormProto === \"Object\") {\n return (\n Object.values(getFormFields()).find((field) => field.key === key) ||\n Object.keys(getFormFields()).reduce((result, field) => {\n if (field === key) result = getFormFields()[field];\n return result;\n }, {})\n );\n } else {\n return undefined;\n }\n };\n const setFormFields = (data) => {\n const isFunction = typeof data === \"function\";\n\n setForm((state) => {\n if (state.fields) {\n return {\n ...state,\n fields: isFunction ? data(state.fields) : data,\n };\n } else {\n return isFunction ? data(state) : data;\n }\n });\n };\n const setFormField = (data, key = null) => {\n const isFunction = typeof data === \"function\";\n\n setFormFields((fields) => {\n const pop = (fields, key) => {\n const result = { fields, item: undefined };\n\n result.item = fields[key] || fields.find((f) => f.key === key);\n\n if (!result.item) return result;\n\n if (Array.isArray(fields)) {\n const index = parseInt(key, 10);\n if (!isNaN(index)) {\n result.fields.splice(key, 1);\n } else {\n result.fields = result.fields.filter((f) => f.key !== key);\n }\n } else if (typeof fields === \"object\") {\n result.fields = Object.values(fields).reduce(\n (object, { key: fKey }) => {\n if (key !== fKey) {\n object[key] = fields[key];\n }\n return object;\n },\n {},\n );\n }\n\n return result;\n };\n const update = (fields) => {\n //KEY is NULLable\n if (!key) {\n return data.key\n ? Object.values(fields).reduce((result, field, i) => {\n const index = fields[field.key] ? field.key : i;\n\n return {\n ...result,\n [index]:\n data.key === field.key\n ? isFunction\n ? data(field)\n : data\n : field,\n };\n }, {})\n : {\n ...fields,\n [fields.length || 0]: isFunction ? data({}) : data,\n };\n }\n\n const { fields: filtered, item: field } = pop(fields, key);\n\n const updatedField = isFunction\n ? data(field || {})\n : { ...field, ...data };\n return joinData(\n filtered,\n fields[key] ? { [key]: updatedField } : updatedField,\n );\n };\n\n return update(fields);\n });\n };\n\n return {\n joinData,\n getFieldData,\n getFormFields,\n getFormField,\n setFormFields,\n setFormField,\n };\n}\n", "import General from \"../functions/General\";\n\nconst noop = () => {};\n\nexport default function ObjectWithNamedKeyObjects({\n form,\n setForm = noop,\n FormFields,\n} = {}) {\n const {\n joinData,\n getFieldData,\n updateFormField,\n getFormFields,\n getFormFieldsAsArray,\n getFormFieldsKeys,\n } = General({\n FormFields,\n });\n\n const getFormField = (key, argForm = form) => {\n return (\n Object.values(getFormFields(argForm))?.find(\n (field) => field?.key === key,\n ) ||\n Object.keys(getFormFields(argForm))?.reduce((result, field) => {\n if (field === key) result = getFormFields(argForm)[field];\n return result;\n }, null)\n );\n };\n const setFormFields = (data) => {\n const isFunction = typeof data === \"function\";\n\n setForm((state) => {\n if (state.fields) {\n return {\n ...state,\n fields: isFunction ? data(state.fields) : data,\n };\n } else {\n return isFunction ? data(state) : data;\n }\n });\n };\n const setFormField = (data, key = null) =>\n setFormFields((fields) => updateFormField(fields, data, key));\n\n const removeAllFormFields = () => setFormFields({});\n const removeFormField = (key) =>\n setFormFields((state) =>\n Object.keys(state)\n .filter((fKey) => fKey !== key)\n .reduce((obj, key) => ({ ...obj, [key]: state[key] }), {}),\n );\n const removeFormFields = ([...keys]) =>\n setFormFields((state) =>\n Object.keys(state)\n .filter((fKey) => !keys.includes(fKey))\n .reduce((obj, key) => ({ ...obj, [key]: state[key] }), {}),\n );\n\n return {\n joinData,\n getFieldData,\n getFormField,\n setFormFields,\n setFormField,\n getFormFields: () => getFormFields(form),\n getFormFieldsAsArray: () => getFormFieldsAsArray(getFormFields(form)),\n getFormFieldsKeys: () => getFormFieldsKeys(getFormFields(form)),\n removeAllFormFields,\n removeFormField,\n removeFormFields,\n };\n}\n", "const defaultRenderFieldComponent = () => {\n // eslint-disable-next-line no-console\n console.error(\"RenderFields: RenderFieldComponent Property is not recieved!\");\n return null;\n};\n\nconst defaultFormDataDriver = () => {\n // eslint-disable-next-line no-console\n console.error(\"RenderFields: FormDataDriver Property is not recieved!\");\n return null;\n};\n\nconst defaultOnFieldChange = () => {\n // eslint-disable-next-line no-console\n console.warn(\n \"RenderFields: Be careful, onFieldChange handler is not recieved!\",\n );\n return null;\n};\n\nconst defaultOnFieldBlur = () => {\n // eslint-disable-next-line no-console\n console.warn(\n \"RenderFields: Be careful, defaultOnFieldBlur handler is not recieved!\",\n );\n return null;\n};\n\nexport default function RenderFields({\n form,\n fields,\n cols = 1,\n FormDataDriver = defaultFormDataDriver,\n RenderFieldComponent = defaultRenderFieldComponent,\n onFieldChange = defaultOnFieldChange,\n onFieldBlur = defaultOnFieldBlur,\n} = {}) {\n const maxColumns = 6;\n const maxWidth = 12;\n\n const { getFormField } = FormDataDriver({ form });\n\n const getColumnsQty = () => {\n return cols > maxColumns ? maxColumns : cols;\n };\n\n const renderFormField = (key) => {\n try {\n const field = { ...getFormField(key), key };\n const { wrapperRef } = field;\n\n return (\n <div\n key={`render-field-wrapper-${key}`}\n id={`render-field-wrapper-${key}`}\n ref={\n wrapperRef\n ? typeof wrapperRef === \"function\"\n ? (node) => wrapperRef(node, key)\n : wrapperRef\n : null\n }\n >\n <RenderFieldComponent\n key={key}\n field={field}\n onChange={(value) => onFieldChange(key, value)}\n onBlur={(...args) => onFieldBlur(...args)}\n />\n </div>\n );\n } catch (e) {\n return null;\n }\n };\n\n const renderSingleColumn = () => {\n return fields.map(renderFormField);\n };\n const renderSplitColumns = () => {\n const fieldsLen = fields?.length || 0;\n const columnsQty =\n getColumnsQty() > fieldsLen ? fieldsLen : getColumnsQty();\n\n if (!columnsQty) return null;\n\n const parts = new Array(columnsQty).fill([]).map((v, i) => {\n const startIndex = (fieldsLen / columnsQty) * i;\n const endIndex = startIndex + fieldsLen / columnsQty;\n\n return fields.slice(startIndex, endIndex);\n });\n\n return (\n <div className=\"row\">\n {parts.map((part, i) => (\n <div\n key={`render-fields-row-${i}`}\n className={`col-12 col-lg-${parseInt(maxWidth / columnsQty, 10)}`}\n >\n {part.map(renderFormField)}\n </div>\n ))}\n </div>\n );\n };\n\n const render = cols === 1 ? renderSingleColumn : renderSplitColumns;\n\n return render();\n}\n", "// eslint-disable-next-line no-unused-vars\nimport { createRef, useEffect, useState } from \"react\";\n\nimport ArrayWithObjects from \"./form-drivers/ArrayWithObjects\";\nimport ObjectWithIterableObjects from \"./form-drivers/ObjectWithIterableObjects\";\nimport ObjectWithNamedKeyObjects from \"./form-drivers/ObjectWithNamedKeyObjects\";\nimport General from \"./functions/General\";\nimport RenderFields from \"./functions/RenderFields\";\n\nconst DefaultFocusControllerProps = {\n setAutoFocus: true,\n onlyEmptyFieldAutoFocus: false,\n};\n\nexport default function useFormTools({\n form,\n setForm,\n FormType,\n FormFields,\n FormDataDriverName = \"ArrayWithObjects\" ||\n \"ObjectWithIterableObjects\" ||\n \"ObjectWithNamedKeyObjects\",\n FormDataDriver = null,\n FocusControllerProps = DefaultFocusControllerProps,\n goToNextFieldOnEnterPressed = true,\n} = {}) {\n FocusControllerProps = {\n ...DefaultFocusControllerProps,\n ...FocusControllerProps,\n };\n\n const FormDataDrivers = {\n ArrayWithObjects: {\n handlers: ArrayWithObjects,\n default: true,\n },\n ObjectWithIterableObjects: {\n handlers: ObjectWithIterableObjects,\n },\n ObjectWithNamedKeyObjects: {\n handlers: ObjectWithNamedKeyObjects,\n },\n };\n\n const getFormDataDriver = (name) => {\n return (\n FormDataDriver ||\n FormDataDrivers[name]?.handlers ||\n Object.values(FormDataDrivers).find((df) => df.default === true)\n ?.handlers ||\n (() => ({}))\n );\n };\n const getFormDataDriverInstance = (name, ...args) => {\n return getFormDataDriver(name)(...args);\n };\n\n const { getFieldClassName, updateFormField } = General();\n\n const {\n getFieldData,\n getFormField,\n setFormFields,\n setFormField,\n getFormFieldsAsArray,\n getFormFieldsKeys,\n removeAllFormFields,\n removeFormField,\n removeFormFields,\n } = getFormDataDriverInstance(FormDataDriverName, {\n form,\n setForm,\n FormFields,\n });\n\n ///////////////////////////////////////////////////////////////\n //--- OnChange Observer ---//--- START ---//\n const [onChangeObservers, setOnChangeObservers] = useState({});\n const addOnChangeObserver = (key, cb) => {\n let observerId = null;\n\n setOnChangeObservers((state) => {\n //Set Default Value\n if (!state[key]) state[key] = {};\n\n observerId = state[key].length;\n\n state[key][observerId] = cb;\n\n return state;\n });\n\n return observerId;\n };\n const removeOnChangeObserver = (key, id) => {\n setOnChangeObservers((state) => {\n //Set Default Value\n if (!state[key]) return state;\n\n state[key] = Object.keys(state)\n .filter((cbId) => cbId !== id)\n .map((cbId) => state[key][cbId]);\n\n return state;\n });\n };\n const onChangeObserver = (key, value) => {\n if (!onChangeObservers[key] || typeof onChangeObservers[key] !== \"object\")\n return;\n\n const Observers = onChangeObservers[key];\n\n Object.values(Observers).map((cb) => {\n cb({ value, form });\n return null;\n });\n };\n const onFieldChange = (key, value) => {\n if (value === getFormField(key)?.value) return false;\n\n onChangeObserver(key, value);\n setFormField(\n (field) => ({\n ...field,\n error: \"\",\n value,\n }),\n key,\n );\n };\n //--- OnChange Observer ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //--- Form Submit Blocker ---//--- START ---//\n const [formSubmitBlockers, setFormSubmitBlockers] = useState([]);\n const toggleFormSubmitBlock = (key, value) => {\n setFormSubmitBlockers((state) =>\n state.includes(key) || !value\n ? [...state.filter((k) => k !== key)]\n : [...state, key],\n );\n };\n const clearFormSubmitBlockers = () => setFormSubmitBlockers([]);\n //--- Form Submit Blocker ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //--- Property Observer Blocker ---//--- START ---//\n // const [propertyObservers, setPropertyObservers] = useState({});\n // function addPropertyObserver () {\n // };\n //--- Property Observer Blocker ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //--- Render Fields Controller ---//--- START ---//\n const [isFormFieldsAdded, setIsFormFieldsAdded] = useState(false);\n const [renderFormFields, setRenderFormFieldsState] = useState([]);\n const setRenderFormFields = (data) => {\n setIsFormFieldsAdded(true);\n // eslint-disable-next-line no-use-before-define\n removeRenderFields(renderFormFields);\n // eslint-disable-next-line no-use-before-define\n resetIsInitFocused();\n setRenderFormFieldsState(data);\n };\n const addRenderFields = (fields) => {\n setRenderFormFieldsState((state) => [...state, ...fields]);\n };\n const removeRenderFields = (fields) => {\n setRenderFormFieldsState((state) =>\n state.filter((field) => !fields.includes(field)),\n );\n };\n\n const [isFormRendered, setIsFormRendered] = useState(false);\n const submitIsFormRendered = () => setIsFormRendered(true);\n const resetIsFormRendered = () => setIsFormRendered(false);\n\n const onEnterDown = async (e) => {\n if (!goToNextFieldOnEnterPressed) return false;\n\n const focusable = document.querySelectorAll(\n 'a, button, input, [tabindex]:not([tabindex=\"-1\"])',\n );\n const currentIndex = await new Promise((resolve) => {\n focusable.forEach((node, i) => {\n if (node === e.target) resolve(i);\n });\n });\n\n if (!currentIndex) return false;\n\n const nextIndex = currentIndex + 1;\n\n if (nextIndex >= focusable.length) return false;\n\n const nextItem = focusable[nextIndex];\n\n nextItem.focus();\n };\n\n const onKeyDown = (...args) => {\n const event = args.reduce((e, item) => {\n if (item?.nativeEvent instanceof KeyboardEvent) return item;\n return e;\n }, null);\n\n if (!event) return false;\n\n const { keyCode } = event;\n\n switch (keyCode) {\n //OnEnterDown\n case 13:\n onEnterDown(event);\n break;\n\n default:\n break;\n }\n };\n\n //On Type Change\n useEffect(() => {\n resetIsFormRendered();\n }, [FormType]);\n\n //On Render Fields Change\n useEffect(() => {\n if (isFormFieldsAdded) resetIsFormRendered(false);\n\n //Add Form Fields\n if (renderFormFields.length !== 0) {\n setFormFields((fields) => {\n return renderFormFields.reduce((result, key) => {\n const fieldData = getFieldData(key);\n const field = getFormField(key) ? getFormField(key) : fieldData;\n\n if (\n !field?.className ||\n field?.className?.indexOf(getFieldClassName(key, FormType)) === -1\n ) {\n field.className = `${field?.className} ${getFieldClassName(key, FormType)}`;\n }\n\n if (typeof fieldData?.label === \"object\") {\n field.label = fieldData.label[FormType] || fieldData.label.default;\n }\n\n field.ref = createRef();\n field.wrapperRef = createRef();\n\n field.isValueChangedByUser = false;\n\n if (goToNextFieldOnEnterPressed) {\n const onKeyDownProp = field.onKeyDown || (() => {});\n field.onKeyDown = (...args) => {\n onKeyDown(...args);\n onKeyDownProp(...args);\n };\n }\n\n //Is Field Value Changed By USER\n // eslint-disable-next-line no-use-before-define\n addOnFieldRenderedObserver(\n key,\n () => {\n const element = getFormField(key)?.ref?.current?.querySelector(\n field?.focusSelector || \"input\",\n );\n const handler = () =>\n setFormField({ isValueChangedByUser: true }, key);\n\n element?.addEventListener(\"paste\", handler, { once: true });\n element?.addEventListener(\"keypress\", handler, { once: true });\n },\n true,\n );\n\n return updateFormField(result, field, key);\n }, fields);\n });\n }\n }, [renderFormFields]);\n\n const [onFormRenderObservers, setOnFormRenderObservers] = useState([]);\n const addOnFormRenderObserver = (cb, { once = false } = {}) => {\n setOnFormRenderObservers((state) => [\n ...state,\n { cb, once, isWorkedOut: false },\n ]);\n };\n // eslint-disable-next-line no-unused-vars\n const updateOnFormRenderObserver = (key, data) => {\n setOnFormRenderObservers((state) => {\n const copy = [...state];\n copy[key] = { ...state[key], ...data };\n\n return copy;\n });\n };\n const removeOnFormRenderObserver = (key) => {\n setOnFormRenderObservers((state) =>\n state.slice().filter((v, i) => i !== key),\n );\n };\n const onFormRenderWorker = () => {\n // eslint-disable-next-line default-param-last\n onFormRenderObservers.map(\n ({ once, isWorkedOut, cb = () => {} } = {}, key) => {\n if (once && isWorkedOut) return null;\n\n cb(form);\n if (once) removeOnFormRenderObserver(key);\n else updateOnFormRenderObserver(key, { isWorkedOut: true });\n return null;\n },\n );\n };\n\n //On Form Rendered\n useEffect(() => {\n if (!isFormRendered && onFormRenderObservers.length) {\n const formFieldsKeys = getFormFieldsKeys(form);\n const isAllFieldsRendered = renderFormFields.reduce((result, key) => {\n if (!formFieldsKeys.includes(key)) result = false;\n\n return result;\n }, true);\n\n if (isAllFieldsRendered) {\n submitIsFormRendered(true);\n onFormRenderWorker();\n }\n }\n }, [form, renderFormFields, onFormRenderObservers]);\n //--- Render Fields Controller ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //--- HIGHTLIGHT LABELS IF FIELD WITH ERROR ---//--- START ---//\n const hightliteErrorLabels = () => {\n const fields = getFormFieldsAsArray();\n\n const filtered = fields?.reduce((result, field) => {\n if (field?.errorLabelHightlite) {\n // eslint-disable-next-line no-use-before-define\n result.push({\n ...field,\n className: getFieldClassName(field?.key, FormType),\n });\n }\n\n return result;\n }, []);\n\n filtered?.map((field) => {\n const formField = document.querySelector(`.${field?.className}`);\n\n if (!formField) return null;\n\n formField.classList.remove(\"errorLabelHightlite\");\n\n if (field?.error) {\n formField.classList.add(\"errorLabelHightlite\");\n }\n\n return null;\n });\n };\n useEffect(() => {\n hightliteErrorLabels();\n }, [form]);\n //--- HIGHTLIGHT LABELS IF FIELD WITH ERROR ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //--- Fields Focus Controller ---//--- START ---//\n const [isInitFocused, setIsInitFocused] = useState(false);\n const [autoFocusedField, setAutoFocusedField] = useState(null);\n\n const setFirstFieldInitFocused = () => setIsInitFocused(true);\n const resetIsInitFocused = () => setIsInitFocused(false);\n\n const toggleFieldFocus = (\n { key, cb = () => {}, form: argForm, field },\n action = \"focus\",\n ) => {\n if (!key && !field) return null;\n\n if (!argForm) argForm = form;\n\n const formField = field || getFormField(key, argForm);\n\n if (!formField || !formField.ref) {\n return false;\n }\n\n if (\n action === \"focus\" &&\n FocusControllerProps.onlyEmptyFieldAutoFocus &&\n Boolean(formField?.value)\n )\n return null;\n\n setTimeout(() => {\n formField.ref.current\n ?.querySelector(formField?.focusSelector || \"input\")\n ?.[action]();\n cb();\n }, 50);\n };\n\n const setFieldFocus = ({ key, cb = () => {}, form: argForm, field }) =>\n toggleFieldFocus({ key, cb, form: argForm, field }, \"focus\");\n const setFieldBlur = ({ key, cb = () => {}, form: argForm, field }) =>\n toggleFieldFocus({ key, cb, form: argForm, field }, \"blur\");\n\n const setFirstFieldFocus = () => {\n let field = null;\n\n for (let i = 0; i < renderFormFields.length && !field; ++i) {\n const key = renderFormFields[i];\n const tmpField = getFormField(key);\n if (tmpField && !tmpField?.disabled) field = tmpField;\n }\n\n if (!field) return false;\n\n if (FocusControllerProps.onlyEmptyFieldAutoFocus && Boolean(field?.value)) {\n setFirstFieldInitFocused();\n return false;\n }\n\n setAutoFocusedField(field.key);\n\n const callback = () => {\n setFormField({ value: field.value }, field.key);\n setFirstFieldInitFocused();\n };\n\n setTimeout(() => setFieldFocus({ key: field.key, cb: callback, form }), 50);\n };\n\n const [onFieldFocusCallbacks, setOnFieldFocusCallbacks] = useState({});\n const addOnFieldFocusCallback = (key, cb) => {\n setOnFieldFocusCallbacks((state) => {\n const stateCopy = { ...state };\n\n if (!state[key]) stateCopy[key] = [];\n\n stateCopy[key].push(cb);\n\n return stateCopy;\n });\n };\n const callOnFieldFocusCallbacks = (key) => {\n if (!Array.isArray(onFieldFocusCallbacks[key])) return null;\n\n onFieldFocusCallbacks[key]?.map((cb) => cb());\n };\n\n const [focusOnRenderFields, setFocusOnRenderFields] = useState([]);\n const addFocusFieldOnRender = (key, cb) => {\n setFocusOnRenderFields((state) => [...state, key]);\n\n if (cb) addOnFieldFocusCallback(key, cb);\n };\n const removeFocusFieldOnRender = (key) => {\n setFocusOnRenderFields((state) => state.filter((field) => field !== key));\n };\n\n useEffect(() => {\n if (\n FocusControllerProps.setAutoFocus &&\n !isInitFocused &&\n !autoFocusedField &&\n isFormRendered\n )\n setFirstFieldFocus();\n\n if (focusOnRenderFields.length) {\n getFormFieldsKeys(form)?.map((key) => {\n if (\n focusOnRenderFields.includes(key) &&\n getFormField(key)?.value?.length === 0\n ) {\n const cb = () => {\n removeFocusFieldOnRender(key);\n callOnFieldFocusCallbacks(key);\n };\n\n setFieldFocus({ key, form, cb });\n }\n return null;\n });\n }\n }, [form, focusOnRenderFields, isInitFocused, isFormRendered]);\n\n useEffect(() => {\n setAutoFocusedField(null);\n }, [isInitFocused]);\n\n useEffect(() => {\n resetIsInitFocused();\n }, [FormType]);\n\n //Remove Focus From Autocomplete field !!! TODO\n // useEffect(() => {\n // if (!autoFocusedField) return null;\n // const field = getFormField(autoFocusedField);\n\n // if (field?.value !== '' && !field?.isValueChangedByUser) {\n // setFieldBlur({key: autoFocusedField, form});\n // }\n // }, [autoFocusedField, form]);\n //--- Fields Focus Controller ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //--- OnFieldRendered Observer ---//--- START ---//\n const [onFieldRenderedObservers, setOnFieldRenderedObservers] = useState({});\n const [isFieldObserversReset, setIsFieldObserversReset] = useState(false);\n\n const resetOnFieldRenderObserversWorkedOut = () => {\n if (!isFieldObserversReset && renderFormFields.length) {\n renderFormFields.map((key) => {\n setFormField({ isOnRenderObserversWorkedOut: false }, key);\n return key;\n });\n setIsFieldObserversReset(true);\n }\n };\n const addOnFieldRenderedObserver = (key, cb, isOnceCallable = true) => {\n let observerId = null;\n\n setOnFieldRenderedObservers((state) => {\n //Set Default Value\n if (!state[key]) state[key] = {};\n\n observerId = Object.keys(state[key]).length || 0;\n\n state[key][observerId] = {\n f: cb,\n isOnceCallable,\n };\n\n return state;\n });\n\n return observerId;\n };\n const updateOnFieldRenderedObserver = (key, id, data) => {\n setOnFieldRenderedObservers((state) => {\n //Set Default Value\n if (!state[key]) return state;\n\n state[key][id] = {\n ...state[key][id],\n ...data,\n };\n\n return state;\n });\n };\n const removeOnFieldRenderedObserver = (key, id) => {\n setOnFieldRenderedObservers((state) => {\n //Set Default Value\n if (!state[key]) return state;\n\n state[key] = Object.keys(state)\n .filter((cbId) => cbId !== id)\n .map((cbId) => state[key][cbId]);\n\n return state;\n });\n };\n const onFieldRenderedObserver = (key, data) => {\n if (\n !onFieldRenderedObservers[key] ||\n typeof onFieldRenderedObservers[key] !== \"object\"\n )\n return;\n\n const Observers = onFieldRenderedObservers[key];\n const FilteredObservers = Object.values(Observers).filter(\n (observer) => !observer?.isObserverWorkedOut,\n );\n\n if (FilteredObservers.length === 0) return null;\n\n setFormField({ isOnRenderObserversWorkedOut: true }, key);\n\n FilteredObservers.map(({ f, isOnceCallable }, id) => {\n f(data);\n if (isOnceCallable)\n updateOnFieldRenderedObserver(key, id, { isObserverWorkedOut: true });\n return null;\n });\n };\n const onRenderObserverWorker = () => {\n return getFormFieldsKeys(form)?.map((key) => {\n //OnFieldRendered\n const fieldData = getFormField(key);\n if (!fieldData?.isOnRenderObserversWorkedOut) {\n onFieldRenderedObserver(key, fieldData);\n return { key, isWorkedOut: true };\n }\n\n return { key, isWorkedOut: false };\n });\n };\n\n useEffect(() => {\n resetOnFieldRenderObserversWorkedOut();\n onRenderObserverWorker();\n }, [form]);\n\n useEffect(() => {\n setIsFieldObserversReset(false);\n }, [FormType]);\n //--- OnFieldRendered Observer ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //Detect What Changed || TRY TO DO\n // const compare = async (prev, current) => {\n // if (!prev) return current;\n\n // return new Promise((resolve) => {\n // Object.keys(current).reduce((result, key, i, arr) => {\n // //If PROPERTY is NOT EXISTS BEFORE\n // if ([null, undefined].includes(prev[key])) {\n // result[key] = current[key];\n // }\n // //If PROPERTY is AN OBJECT\n // else if (typeof current[key] === 'object') {\n // //If PROPERTY is EXISTS BEFORE\n // const innerCompare = compare(prev[key], current[key]);\n // // //If SOMETHING CHANGED\n // if (innerCompare?.length) result[key] = innerCompare;\n // }\n // //If PROPERTY is AN SIMPLE VALUE and PROPERTY CHANGED\n // else if (prev[key] !== current[key]) {\n // result[key] = current[key];\n // }\n\n // if (i === arr.length-1) {\n // resolve(result);\n // }\n\n // return result;\n // }, {});\n // });\n // };\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //--- WindowScrollController ---//--- START ---//\n const scrollToField = ({ key = null, field = null, form: argForm }) => {\n if (!key && !field) return false;\n if (!argForm) argForm = form;\n\n if (!field) field = getFormField(key, argForm);\n\n const wrapperRef = field?.wrapperRef || field?.ref;\n // eslint-disable-next-line no-unsafe-optional-chaining\n const { top: topOffset } = wrapperRef?.current?.getBoundingClientRect();\n const scrollTop =\n Math.abs(Math.abs(topOffset) - Math.abs(window.scrollY)) - 16;\n window.scrollTo({ top: scrollTop });\n };\n\n //--- WindowScrollController ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n const addErrorsToForm = (errors, argForm = form) => {\n if (!argForm) argForm = form;\n\n setFormFields((fields) => {\n return errors.reduce(\n (fields, { message: error, propertyPath: errKey }) => {\n return updateFormField(fields, { error }, errKey);\n },\n fields,\n );\n });\n };\n\n return {\n FormDataDrivers,\n\n //OnChangeObserver\n addOnChangeObserver,\n removeOnChangeObserver,\n onChangeObservers,\n\n //OnChangeHandler\n onFieldChange,\n\n //Form Submit Blocker\n toggleFormSubmitBlock,\n clearFormSubmitBlockers,\n isFormSubmitBlocked: Boolean(formSubmitBlockers.length),\n\n //Property Observers\n // addPropertyObserver,\n\n //Render Fields\n renderFormFields,\n setRenderFormFields,\n addRenderFields,\n removeRenderFields,\n\n getFieldClassName,\n\n //Field Focus Controller\n isInitFocused,\n setFirstFieldInitFocused,\n resetIsInitFocused,\n setFieldFocus,\n setFieldBlur,\n setFirstFieldFocus,\n autoFocusedField,\n\n addFocusFieldOnRender,\n removeFocusFieldOnRender,\n\n //Field Render Controller\n addOnFieldRenderedObserver,\n removeOnFieldRenderedObserver,\n onFieldRenderedObservers,\n\n updateFormField,\n addOnFormRenderObserver,\n submitIsFormRendered,\n resetIsFormRendered,\n renderFields: ({\n form: argForm = form,\n fields: argFields = renderFormFields,\n cols: argCols = 1,\n RenderFieldComponent,\n }) =>\n RenderFields({\n form: argForm,\n fields: argFields,\n cols: argCols,\n RenderFieldComponent,\n onFieldChange,\n FormDataDriver: getFormDataDriver(FormDataDriverName),\n }),\n\n scrollToField,\n\n getFieldData,\n getFormField,\n setFormFields,\n setFormField: (data, key) => setFormField(data, key),\n getFormFieldsAsArray,\n getFormFieldsKeys,\n removeAllFormFields,\n removeFormField,\n removeFormFields,\n addErrorsToForm,\n };\n}\n", "import React, { useEffect, useState } from \"react\";\n\nimport { KEYBOARD_SERVICE_KEYS } from \"../Constants/index.constants\";\n\nexport const useInputHighlightError = ({\n value,\n blinkTime,\n isUseErrorsBlink,\n}) => {\n const DEFAULT_BLINK_TIME = 100;\n const [isToHighlightError, setIsToHighlightError] = useState(false);\n const [isAttemptToChange, setIsAttemptToChange] = useState(false);\n const [prevValue, setPreviousValue] = useState(value);\n\n function hasHighlightError(e) {\n const changedValue = `${value ?? \"\"}`;\n const previousValue = `${prevValue ?? \"\"}`;\n\n const short =\n previousValue.length <= changedValue.length\n ? previousValue\n : changedValue;\n const long =\n previousValue.length > changedValue.length ? previousValue : changedValue;\n\n const infoAboutDifferencesSameness = short.split(\"\").reduce(\n (acc, symbol, idx) => {\n if (acc.countOn && symbol === long[idx]) acc.same.push(symbol);\n else {\n acc.countOn = false;\n acc.differences.push([idx, symbol]);\n }\n return acc;\n },\n { same: [], countOn: true, differences: [] },\n );\n\n const samePart = infoAboutDifferencesSameness.same.join(\"\");\n const differencesLength = infoAboutDifferencesSameness.differences.length;\n const currentSet = changedValue?.replace(samePart, \"\");\n\n if (\n !KEYBOARD_SERVICE_KEYS.includes(e.key) &&\n changedValue === previousValue\n )\n setIsAttemptToChange(!(!differencesLength && e.key === currentSet));\n }\n\n useEffect(() => {\n if (isUseErrorsBlink && isAttemptToChange) {\n setIsAttemptToChange(null);\n setIsToHighlightError(true);\n setTimeout(() => {\n setIsToHighlightError(false);\n }, blinkTime || DEFAULT_BLINK_TIME);\n }\n }, [isAttemptToChange]);\n\n return {\n isToHighlightError,\n setPreviousValue,\n setIsToHighlightError,\n hasHighlightError,\n };\n};\n\nexport default useInputHighlightError;\n", "import { useEffect, useState } from 'react';\n\ninterface UseIsMobileProps {\n isWithoutWidthCheck?: boolean;\n}\n\ninterface UseIsMobileProps {\n isWithoutWidthCheck?: boolean;\n}\n/**\n * Hook to detect if the current device is a mobile device\n * @param props - Configuration options\n * @param props.isWithoutWidthCheck - If true, only checks user agent without width verification\n * @returns Object containing isMobile flag\n */\nfunction useIsMobile({ isWithoutWidthCheck = false }: UseIsMobileProps = {}): { isMobile: boolean, isMobilePortrait: boolean; isMobileLandscape: boolean } {\n const isIPad = (): boolean => {\n const ua = navigator.userAgent || navigator.vendor || (window as any).opera;\n\n // iPadOS 13+ \u0432\u044B\u0434\u0430\u0435\u0442 \u0441\u0435\u0431\u044F \u043A\u0430\u043A Mac, \u043D\u043E \u0441 touch-\u044D\u043A\u0440\u0430\u043D\u043E\u043C\n const isMac = /Macintosh/.test(ua);\n const hasTouch = navigator.maxTouchPoints && navigator.maxTouchPoints > 2;\n\n return isMac && !!hasTouch;\n };\n\n const getIsMobile = (): boolean => {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) || isIPad();\n };\n\n const [isMobile, setIsMobile] = useState<boolean>(getIsMobile());\n\n useEffect(() => {\n if (getIsMobile()) {\n setIsMobile(true);\n }\n }, [navigator.userAgent]);\n\n return {\n isMobile: isMobile && (isWithoutWidthCheck || window.screen.width <= 768 || (window.screen.width <= 1024 && window.matchMedia('(orientation: landscape)').matches)),\n isMobilePortrait: isMobile && window.screen.width <= 768 && window.matchMedia('(orientation: portait)').matches,\n isMobileLandscape: isMobile && window.screen.width <= 1024 && window.matchMedia('(orientation: landscape)').matches,\n };\n}\n\nexport default useIsMobile;\n", "import useIsMobile from './useIsMobile';\n\nexport default useIsMobile;\n", "import { useCallback, useEffect, useState } from 'react';\nimport { getIsOnlyAnObject } from '../utils';\n\n/**\n * A hook that detects when a specific key is pressed\n * @param targetKey - The key to listen for\n * @param clamping - Whether to allow key repeat events\n * @returns boolean indicating if the target key is currently pressed\n */\n\nexport interface ISuspendProcessing {\n [key: string]: (event: globalThis.KeyboardEvent) => boolean; // \u0412\u0435\u0440\u043D\u0435\u0442 true, \u0435\u0441\u043B\u0438 \u041D\u0423\u0416\u041D\u041E \u043F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0443\n}\n\nexport function isISuspendProcessing(x: unknown): x is ISuspendProcessing {\n return getIsOnlyAnObject(x) && Object.values(x as Record<string, unknown>).every(v => typeof v === 'function');\n}\n\nfunction useKeyPress(\n targetKey: string,\n clamping: boolean = true,\n isForbidden?: boolean,\n suspendProcessing?: null | ISuspendProcessing,\n): boolean {\n const [keyPressed, setKeyPressed] = useState<boolean>(false);\n const safelySuspendProcessing = (isISuspendProcessing(suspendProcessing) ? suspendProcessing : {}) as ISuspendProcessing;\n\n const downHandler = useCallback(\n (event: globalThis.KeyboardEvent): void => {\n const { key, repeat, altKey, ctrlKey, shiftKey, metaKey } = event;\n const isPressingWithoutAuxiliaryKeys = !altKey && !ctrlKey && !shiftKey && !metaKey;\n\n if (key === targetKey && isPressingWithoutAuxiliaryKeys && !(safelySuspendProcessing[key]?.(event))) {\n if (!clamping && repeat) return;\n setKeyPressed(true);\n }\n },\n // ? \u041D\u0430\u043C\u0435\u0440\u044F\u043D\u043D\u043E \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E\u0441\u0442\u044F\u0445 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C \u0438\u043C\u0435\u043D\u043D\u043E \u0432\u0445\u043E\u0434\u043D\u043E\u0439 suspendProcessing,\n // ? \u0445\u043E\u0442\u044C \u0432 \u043A\u043E\u0434\u0435 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C \"\u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u044B\u0439\"\n [clamping, targetKey, suspendProcessing],\n );\n\n const upHandler = useCallback(\n (event: globalThis.KeyboardEvent): void => {\n const { key, repeat, altKey, ctrlKey, shiftKey, metaKey } = event;\n const isPressingWithoutAuxiliaryKeys = !altKey && !ctrlKey && !shiftKey && !metaKey;\n\n if (key === targetKey && isPressingWithoutAuxiliaryKeys && !(safelySuspendProcessing[key]?.(event))) {\n if (!clamping && repeat) return;\n setKeyPressed(false);\n }\n },\n // ? \u041D\u0430\u043C\u0435\u0440\u044F\u043D\u043D\u043E \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E\u0441\u0442\u044F\u0445 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C \u0438\u043C\u0435\u043D\u043D\u043E \u0432\u0445\u043E\u0434\u043D\u043E\u0439 suspendProcessing,\n // ? \u0445\u043E\u0442\u044C \u0432 \u043A\u043E\u0434\u0435 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C \"\u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u044B\u0439\"\n [clamping, targetKey, suspendProcessing],\n );\n\n useEffect(\n () => {\n const handleDown = (event: globalThis.KeyboardEvent): void => downHandler(event);\n const handleUp = (event: globalThis.KeyboardEvent): void => upHandler(event);\n\n if (!isForbidden) {\n window.addEventListener('keydown', handleDown);\n window.addEventListener('keyup', handleUp);\n }\n\n return () => {\n // ? \u041D\u0430\u043C\u0435\u0440\u044F\u043D\u043D\u043E \u041D\u0415 \u043E\u0431\u043E\u0440\u0430\u0447\u0438\u0432\u0430\u044E if-\u043A\u043E\u0439:\n // ? \u043F\u0440\u0438 \u043F\u043E\u043F\u044B\u0442\u043A\u0435 \u0441\u043D\u044F\u0442\u044C \u0435\u0441\u043B\u0438 \u043D\u0435 \u0431\u044B\u043B\u043E \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E \u043E\u0448\u0438\u0431\u043A\u0438 \u043D\u0435 \u0431\u0443\u0434\u0435\u0442,\n // ? \u043D\u043E \u043F\u0440\u0438 \u044D\u0442\u043E\u043C \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u043E \u043E\u0442\u0440\u0430\u0431\u043E\u0442\u0435\u0442 \u043F\u0435\u0440\u0435\u0445\u043E\u0434 \u0438\u0437 isForbidden: false \u0432 isForbidden: true.\n window.removeEventListener('keydown', handleDown);\n window.removeEventListener('keyup', handleUp);\n };\n },\n // ? \u041D\u0430\u043C\u0435\u0440\u044F\u043D\u043D\u043E \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E\u0441\u0442\u044F\u0445 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C \u0438\u043C\u0435\u043D\u043D\u043E \u0432\u0445\u043E\u0434\u043D\u043E\u0439 suspendProcessing,\n // ? \u0445\u043E\u0442\u044C \u0432 \u043A\u043E\u0434\u0435 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C \"\u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u044B\u0439\"\n [downHandler, upHandler, isForbidden, suspendProcessing],\n );\n\n return keyPressed;\n}\n\nexport default useKeyPress;\n", "import { useState } from \"react\";\n\nconst useLocalStorage = (key, initialValue) => {\n const [storedValue, setStoredValue] = useState(() => {\n if (typeof window === \"undefined\") {\n return initialValue;\n }\n try {\n const item = window.localStorage.getItem(key);\n return item ? JSON.parse(item) : initialValue;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.log(error);\n return initialValue;\n }\n });\n\n const setValue = (value) => {\n try {\n const valueToStore =\n value instanceof Function ? value(storedValue) : value;\n setStoredValue(valueToStore);\n if (typeof window !== \"undefined\") {\n window.localStorage.setItem(key, JSON.stringify(valueToStore));\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.log(error);\n }\n };\n\n return [storedValue, setValue];\n};\nexport default useLocalStorage;\n", "import { useEffect, useState } from \"react\";\n\nexport default function useLocationParams() {\n const [params, setParams] = useState({});\n\n useEffect(() => {\n setParams((state) => {\n const arr = window.location.search?.replace(\"?\", \"\").split(\"&\");\n\n return {\n ...state,\n ...arr.reduce((obj, item) => {\n const keyVal = item.split(\"=\");\n const key = keyVal[0];\n const value = decodeURIComponent(keyVal[1]);\n\n return {\n ...obj,\n [key]: value,\n };\n }, {}),\n };\n });\n }, [window.location.search]);\n\n return params;\n}\n", "import { useSyncExternalStore } from \"react\";\n\nfunction subscribe(callback) {\n const observer = new ResizeObserver(() => callback());\n observer.observe(document.documentElement);\n return () => observer.disconnect();\n}\n\nconst useMediaQuery = (query) => {\n return useSyncExternalStore(\n subscribe,\n () => window.matchMedia(query).matches,\n () => false,\n );\n};\n\nexport default useMediaQuery;\n", "import { useEffect, useState } from \"react\";\n\nexport const useMetaInfo = () => {\n const [browser, setBrowser] = useState(\"Other\");\n const [device, setDevice] = useState(\"desktop\");\n const [isiOS, setIsiOS] = useState(false);\n const [chromeVersion, setChromeVersion] = useState(null);\n const [iOSVersion, setiOSVersion] = useState(null);\n\n useEffect(() => {\n const userAgent = navigator.userAgent;\n\n if (userAgent.indexOf(\"Chrome\") !== -1) {\n setBrowser(\"Chrome\");\n\n // \u0418\u0437\u0432\u043B\u0435\u0447\u0435\u043D\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 Chrome\n const version = userAgent.match(/Chrom(e|ium)\\/([0-9\\.]+)/)[2];\n setChromeVersion(version);\n } else if (userAgent.indexOf(\"Safari\") !== -1) setBrowser(\"Safari\");\n\n const iOSV = (\n (userAgent.match(/(CPU|iPhone).*OS (\\d+_?\\d*)|CPU like Mac OS X/i) ||\n [])[2] || \"0\"\n ).replace(\"_\", \".\");\n const iOSVersion = parseFloat(iOSV);\n\n setIsiOS(!isNaN(iOSVersion));\n if (!isNaN(iOSVersion)) {\n setiOSVersion(iOSV); // \u0417\u0430\u043F\u0438\u0441\u044B\u0432\u0430\u0435\u043C \u0432\u0435\u0440\u0441\u0438\u044E iOS\n }\n\n if (\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n userAgent,\n )\n )\n setDevice(\"mobile\");\n }, []);\n\n return { browser, device, isiOS, chromeVersion, iOSVersion }; // \u0412\u043E\u0437\u0432\u0440\u0430\u0442 \u0432\u0435\u0440\u0441\u0438\u0439 Chrome \u0438 iOS\n};\n\nexport default useMetaInfo;\n", "import { useEffect } from \"react\";\n\nexport default function useMouseUpOutside(ref, setOut, open) {\n function handleMouseUpOutside(event) {\n if (ref.current && !ref.current.contains(event.target)) {\n setOut(open);\n }\n }\n\n useEffect(() => {\n document.addEventListener(\"mouseup\", handleMouseUpOutside);\n return () => {\n document.removeEventListener(\"mouseup\", handleMouseUpOutside);\n };\n }, [ref]);\n}\n", "import { useEffect, useState } from \"react\";\n\nconst useOnlineStatus = () => {\n function getOnlineStatus() {\n return typeof navigator !== \"undefined\" &&\n typeof navigator.onLine === \"boolean\"\n ? navigator.onLine\n : true;\n }\n const [onlineStatus, setOnlineStatus] = useState(getOnlineStatus());\n\n const goOnline = () => setOnlineStatus(true);\n\n const goOffline = () => setOnlineStatus(false);\n\n useEffect(() => {\n window.addEventListener(\"online\", goOnline);\n window.addEventListener(\"offline\", goOffline);\n\n return () => {\n window.removeEventListener(\"online\", goOnline);\n window.removeEventListener(\"offline\", goOffline);\n };\n }, []);\n\n return onlineStatus;\n};\n\nexport default useOnlineStatus;\n", "import React, { useState } from \"react\";\n\nimport cn from \"classnames\";\n\nexport default function usePasswordChecker({ label = \"Password must:\" } = {}) {\n const [checkRules, setCheckRules] = useState([]);\n const addCheckRule = (data) => setCheckRules((state) => [...state, data]);\n const handleCheckRule = (type, props = {}, value = \"\") => {\n const { min, max } = props;\n\n switch (type) {\n case \"len\":\n if (min && value.length < min) return false;\n if (max && value.length > max) return false;\n return true;\n\n case \"lowerCaseContains\": {\n const toUpperCase = value.slice().toUpperCase().split(\"\");\n const original = value.slice().split(\"\");\n\n return original.reduce((isMatch, char, i) => {\n if (char !== toUpperCase[i]) isMatch = true;\n\n return isMatch;\n }, false);\n }\n\n case \"upperCaseContains\": {\n const toLowerCase = value.slice().toLowerCase().split(\"\");\n const original = value.slice().split(\"\");\n\n return original.reduce((isMatch, char, i) => {\n if (char !== toLowerCase[i]) isMatch = true;\n\n return isMatch;\n }, false);\n }\n\n case \"numberContains\": {\n const original = value.slice().split(\"\");\n return original.reduce((isMatch, char) => {\n if (Number.isInteger(parseInt(char, 10))) isMatch = true;\n\n return isMatch;\n }, false);\n }\n\n case \"specialContains\": {\n const original = value.slice().split(\"\");\n return original.reduce((isMatch, char) => {\n if (!Number.isInteger(parseInt(char, 10)) && !char.match(/[a-z]/i))\n isMatch = true;\n\n return isMatch;\n }, false);\n }\n\n default:\n return false;\n }\n };\n const testCheckRules = (value) => {\n let result = true;\n\n setCheckRules((state) => {\n const rules = [...state];\n return rules.map((rule) => {\n const isMatch = handleCheckRule(rule.type, rule.props, value);\n if (!isMatch) result = false;\n\n return { ...rule, isMatch };\n });\n });\n\n return result;\n };\n\n const renderPasswordChecker = () => {\n return (\n <div className=\"password-checker\">\n <div className=\"password-checker__header\">\n <label className=\"password-checker__header-label\"> {label} </label>{\" \"}\n </div>{\" \"}\n <div className=\"password-checker__body\">\n {\" \"}\n {checkRules.map(({ icon, text, isMatch, key }) => (\n <div\n key={key}\n className={cn(\"password-checker__body-item\", {\n \"password-checker__body-item--match\":\n isMatch && isMatch !== null,\n \"password-checker__body-item--dont-match\":\n !isMatch && isMatch !== null,\n })}\n >\n <div className=\"password-checker__body-item__icon\"> {icon} </div>{\" \"}\n <div className=\"password-checker__body-item__text\"> {text} </div>{\" \"}\n </div>\n ))}{\" \"}\n </div>{\" \"}\n </div>\n );\n };\n\n return {\n addCheckRule,\n testCheckRules,\n renderPasswordChecker,\n };\n}\n", "import { useEffect, useRef } from \"react\";\n\nfunction usePrevious(value) {\n const ref = useRef();\n\n useEffect(() => {\n ref.current = value;\n }, [value]);\n return ref.current;\n}\n\nexport default usePrevious;\n", "import { useEffect, useLayoutEffect, useState } from \"react\";\n\nexport const useResize = (element) => {\n const [elemPosition, setElemPosition] = useState(\"\");\n\n const onResize = (elemRightPosition) => {\n if (elemRightPosition > document.documentElement.clientWidth) {\n return setElemPosition(\"left\");\n } else setElemPosition(\"\");\n };\n\n useEffect(() => {\n const elemRightPosition =\n element?.current?.getBoundingClientRect().right + 20;\n window.addEventListener(\"resize\", () => onResize(elemRightPosition));\n\n return () => {\n window.removeEventListener(\"resize\", () => setElemPosition(\"\"));\n };\n }, []);\n\n useLayoutEffect(() => {\n const elemRightPosition =\n element?.current?.getBoundingClientRect().right + 20;\n if (elemRightPosition > document.documentElement.clientWidth) {\n return setElemPosition(\"left\");\n }\n }, []);\n\n return { elemPosition };\n};\n", "import { useEffect, useRef, useState } from \"react\";\n\nconst useScrollTo = (reference) => {\n const ref = useRef(reference);\n const [shouldScrollTo, setShouldScrollTo] = useState(false);\n\n useEffect(() => {\n if (ref?.current && shouldScrollTo) {\n ref?.current?.scrollIntoView?.({ behavior: \"smooth\" });\n setShouldScrollTo(false);\n }\n }, [shouldScrollTo]);\n\n return [ref, setShouldScrollTo];\n};\n\nexport default useScrollTo;\n", "import { useCallback, useState } from \"react\";\n\nconst useToggle = (initialState) => {\n const [isToggled, setToggle] = useState(Boolean(initialState));\n const toggle = useCallback(() => setToggle((isOn) => !isOn), []);\n const toggleOn = useCallback(() => setToggle(true), []);\n const toggleOff = useCallback(() => setToggle(false), []);\n\n return {\n isToggled,\n toggle,\n toggleOn,\n toggleOff,\n };\n};\n\nexport default useToggle;\n"],
5
+ "mappings": "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",
6
6
  "names": ["moment", "value", "useEffect", "settings", "field", "React", "useEffect", "useState", "useEffect", "useEffect", "React", "useEffect", "useState", "useEffect", "form", "field", "fields", "key", "field", "key", "createRef", "useEffect", "useState", "fields", "React", "useEffect", "useState", "useEffect", "useState", "useIsMobile_default", "useEffect", "useState", "useState", "useEffect", "useState", "useEffect", "useState", "iOSVersion", "useEffect", "useEffect", "useState", "React", "useState", "useEffect", "useEffect", "useState", "useEffect", "useRef", "useState", "useCallback", "useState"]
7
7
  }